Spaces:
Runtime error
Runtime error
fix: practical creation path layout
Browse files- .gitattributes +0 -6
- app.py +14 -12
- src/nexus_visual_weaver/render.py +8 -1
- src/nexus_visual_weaver/styles.py +11 -4
.gitattributes
CHANGED
|
@@ -9,9 +9,3 @@
|
|
| 9 |
*.jpeg binary
|
| 10 |
*.webp binary
|
| 11 |
|
| 12 |
-
assets/readme/blackwell-runtime.png filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
assets/readme/governance-workflow.png filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
assets/readme/live-command-surface.png filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
assets/readme/model-catalog.png filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
assets/readme/real-flux-artifact.png filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
assets/readme/wardrobe-controls.png filter=lfs diff=lfs merge=lfs -text
|
|
|
|
| 9 |
*.jpeg binary
|
| 10 |
*.webp binary
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.py
CHANGED
|
@@ -823,25 +823,26 @@ with gr.Blocks(title="NEXUS Visual Weaver") as demo:
|
|
| 823 |
scale=2,
|
| 824 |
)
|
| 825 |
with gr.Row():
|
| 826 |
-
upload = gr.File(
|
| 827 |
-
label="Reference / Output For ST3GG Scan",
|
| 828 |
-
file_count="single",
|
| 829 |
-
type="filepath",
|
| 830 |
-
scale=3,
|
| 831 |
-
)
|
| 832 |
adult_mode = gr.Checkbox(
|
| 833 |
value=False,
|
| 834 |
label="Adult Mode 18+ catalog scope",
|
| 835 |
info="Off by default. Enables adult-tagged catalog entries but does not disable security, consent, or export gates.",
|
| 836 |
scale=2,
|
| 837 |
)
|
| 838 |
-
run_btn = gr.Button("Run Active Weave", variant="primary", scale=
|
| 839 |
-
stop_btn = gr.Button("Stop Provider Job", variant="stop", interactive=False, scale=1)
|
| 840 |
-
with gr.Row(elem_id="nw-operator-actions", elem_classes=["nw-operator-actions"]):
|
| 841 |
-
scan_btn = gr.Button("Scan Reference", scale=1)
|
| 842 |
checkpoint_btn = gr.Button("Approve Checkpoint", scale=1)
|
| 843 |
export_btn = gr.Button("Prepare Export Packet", scale=1)
|
| 844 |
reset_btn = gr.Button("Reset Demo State", scale=1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 845 |
override_reason = gr.Textbox(
|
| 846 |
label="ST3GG Override Reason",
|
| 847 |
placeholder="Required when ST3GG is review/blocked; explain why this audit packet may be written.",
|
|
@@ -859,13 +860,14 @@ with gr.Blocks(title="NEXUS Visual Weaver") as demo:
|
|
| 859 |
)
|
| 860 |
command_rail_html = gr.HTML(initial_regions["command_rail"], container=False)
|
| 861 |
with gr.Column(scale=5, min_width=620, elem_id="nw-main-column"):
|
|
|
|
| 862 |
workflow_html = gr.HTML(initial_regions["workflow"], container=False)
|
| 863 |
operations_html = gr.HTML(initial_regions["operations"], container=False)
|
| 864 |
-
artifact_html = gr.HTML(initial_regions["artifacts"], container=False)
|
| 865 |
drawer_html = gr.HTML(initial_regions["drawer"], container=False)
|
| 866 |
with gr.Column(scale=2, min_width=340, elem_id="nw-side-column"):
|
| 867 |
inspector_html = gr.HTML(initial_regions["inspector"], container=False)
|
| 868 |
-
|
|
|
|
| 869 |
|
| 870 |
status_html = gr.HTML(initial_regions["status"], container=False)
|
| 871 |
|
|
|
|
| 823 |
scale=2,
|
| 824 |
)
|
| 825 |
with gr.Row():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 826 |
adult_mode = gr.Checkbox(
|
| 827 |
value=False,
|
| 828 |
label="Adult Mode 18+ catalog scope",
|
| 829 |
info="Off by default. Enables adult-tagged catalog entries but does not disable security, consent, or export gates.",
|
| 830 |
scale=2,
|
| 831 |
)
|
| 832 |
+
run_btn = gr.Button("Run Active Weave", variant="primary", scale=2)
|
|
|
|
|
|
|
|
|
|
| 833 |
checkpoint_btn = gr.Button("Approve Checkpoint", scale=1)
|
| 834 |
export_btn = gr.Button("Prepare Export Packet", scale=1)
|
| 835 |
reset_btn = gr.Button("Reset Demo State", scale=1)
|
| 836 |
+
with gr.Row(elem_id="nw-operator-actions", elem_classes=["nw-operator-actions"]):
|
| 837 |
+
stop_btn = gr.Button("Stop Provider Job", variant="stop", interactive=False, scale=1)
|
| 838 |
+
with gr.Accordion("Optional ST3GG file/reference scan", open=False):
|
| 839 |
+
gr.Markdown("Upload only when you want ST3GG to inspect an external reference or output file. Generation does not require an upload.")
|
| 840 |
+
upload = gr.File(
|
| 841 |
+
label="Optional file for ST3GG scan",
|
| 842 |
+
file_count="single",
|
| 843 |
+
type="filepath",
|
| 844 |
+
)
|
| 845 |
+
scan_btn = gr.Button("Scan Uploaded File", scale=1)
|
| 846 |
override_reason = gr.Textbox(
|
| 847 |
label="ST3GG Override Reason",
|
| 848 |
placeholder="Required when ST3GG is review/blocked; explain why this audit packet may be written.",
|
|
|
|
| 860 |
)
|
| 861 |
command_rail_html = gr.HTML(initial_regions["command_rail"], container=False)
|
| 862 |
with gr.Column(scale=5, min_width=620, elem_id="nw-main-column"):
|
| 863 |
+
artifact_html = gr.HTML(initial_regions["artifacts"], container=False)
|
| 864 |
workflow_html = gr.HTML(initial_regions["workflow"], container=False)
|
| 865 |
operations_html = gr.HTML(initial_regions["operations"], container=False)
|
|
|
|
| 866 |
drawer_html = gr.HTML(initial_regions["drawer"], container=False)
|
| 867 |
with gr.Column(scale=2, min_width=340, elem_id="nw-side-column"):
|
| 868 |
inspector_html = gr.HTML(initial_regions["inspector"], container=False)
|
| 869 |
+
with gr.Accordion("Optional provider lanes", open=False):
|
| 870 |
+
provider_html = gr.HTML(initial_regions["providers"], container=False)
|
| 871 |
|
| 872 |
status_html = gr.HTML(initial_regions["status"], container=False)
|
| 873 |
|
src/nexus_visual_weaver/render.py
CHANGED
|
@@ -59,6 +59,7 @@ def _display_state(value: str) -> str:
|
|
| 59 |
normalized = str(value or "").replace("_", " ").strip().lower()
|
| 60 |
labels = {
|
| 61 |
"blocked": "Export Gate Active",
|
|
|
|
| 62 |
"missing secret": "Optional - Secret Required",
|
| 63 |
"missing_secret": "Optional - Secret Required",
|
| 64 |
"export_ready": "Export Ready",
|
|
@@ -947,7 +948,13 @@ def render_status_bar(operator_state: dict | None = None) -> str:
|
|
| 947 |
operator_state = operator_state or {}
|
| 948 |
raw_provider_state = str(operator_state.get("provider_state", "idle"))
|
| 949 |
provider_state = _display_state(raw_provider_state)
|
| 950 |
-
stop_class =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 951 |
return f"""
|
| 952 |
<footer class="nw-statusbar">
|
| 953 |
{_metric("Runs", "112")}
|
|
|
|
| 59 |
normalized = str(value or "").replace("_", " ").strip().lower()
|
| 60 |
labels = {
|
| 61 |
"blocked": "Export Gate Active",
|
| 62 |
+
"generated": "Generated",
|
| 63 |
"missing secret": "Optional - Secret Required",
|
| 64 |
"missing_secret": "Optional - Secret Required",
|
| 65 |
"export_ready": "Export Ready",
|
|
|
|
| 948 |
operator_state = operator_state or {}
|
| 949 |
raw_provider_state = str(operator_state.get("provider_state", "idle"))
|
| 950 |
provider_state = _display_state(raw_provider_state)
|
| 951 |
+
stop_class = (
|
| 952 |
+
"nw-stop-idle"
|
| 953 |
+
if provider_state == "Idle"
|
| 954 |
+
else "nw-stop-pass"
|
| 955 |
+
if raw_provider_state in {"generated", "exported", "export_ready", "checkpointed"}
|
| 956 |
+
else "nw-stop-active"
|
| 957 |
+
)
|
| 958 |
return f"""
|
| 959 |
<footer class="nw-statusbar">
|
| 960 |
{_metric("Runs", "112")}
|
src/nexus_visual_weaver/styles.py
CHANGED
|
@@ -713,12 +713,12 @@ footer { display: none !important; }
|
|
| 713 |
}
|
| 714 |
.nw-preview-stage {
|
| 715 |
display: grid;
|
| 716 |
-
grid-template-columns: minmax(
|
| 717 |
gap: 10px;
|
| 718 |
padding: 12px 12px 0;
|
| 719 |
}
|
| 720 |
.nw-preview-frame {
|
| 721 |
-
min-height:
|
| 722 |
border: 1px solid rgba(255,255,255,.08);
|
| 723 |
border-radius: 7px;
|
| 724 |
overflow: hidden;
|
|
@@ -729,7 +729,7 @@ footer { display: none !important; }
|
|
| 729 |
linear-gradient(135deg, #0a0d11, #111820 52%, #080a0d);
|
| 730 |
}
|
| 731 |
.nw-preview-image {
|
| 732 |
-
min-height:
|
| 733 |
display: block;
|
| 734 |
background:
|
| 735 |
linear-gradient(130deg, rgba(255,255,255,.16) 0 2px, transparent 3px 52%),
|
|
@@ -740,7 +740,7 @@ footer { display: none !important; }
|
|
| 740 |
}
|
| 741 |
.nw-preview-real-image {
|
| 742 |
width: 100%;
|
| 743 |
-
min-height:
|
| 744 |
height: 100%;
|
| 745 |
object-fit: cover;
|
| 746 |
display: block;
|
|
@@ -968,6 +968,13 @@ footer { display: none !important; }
|
|
| 968 |
display: grid;
|
| 969 |
place-items: center;
|
| 970 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 971 |
@media (max-width: 1100px) {
|
| 972 |
.nw-topbar { grid-template-columns: 1fr; }
|
| 973 |
.nw-trust-strip { grid-template-columns: 1fr; }
|
|
|
|
| 713 |
}
|
| 714 |
.nw-preview-stage {
|
| 715 |
display: grid;
|
| 716 |
+
grid-template-columns: minmax(420px, 1fr) 190px;
|
| 717 |
gap: 10px;
|
| 718 |
padding: 12px 12px 0;
|
| 719 |
}
|
| 720 |
.nw-preview-frame {
|
| 721 |
+
min-height: 300px;
|
| 722 |
border: 1px solid rgba(255,255,255,.08);
|
| 723 |
border-radius: 7px;
|
| 724 |
overflow: hidden;
|
|
|
|
| 729 |
linear-gradient(135deg, #0a0d11, #111820 52%, #080a0d);
|
| 730 |
}
|
| 731 |
.nw-preview-image {
|
| 732 |
+
min-height: 300px;
|
| 733 |
display: block;
|
| 734 |
background:
|
| 735 |
linear-gradient(130deg, rgba(255,255,255,.16) 0 2px, transparent 3px 52%),
|
|
|
|
| 740 |
}
|
| 741 |
.nw-preview-real-image {
|
| 742 |
width: 100%;
|
| 743 |
+
min-height: 300px;
|
| 744 |
height: 100%;
|
| 745 |
object-fit: cover;
|
| 746 |
display: block;
|
|
|
|
| 968 |
display: grid;
|
| 969 |
place-items: center;
|
| 970 |
}
|
| 971 |
+
.nw-stop-pass {
|
| 972 |
+
display: grid;
|
| 973 |
+
place-items: center;
|
| 974 |
+
border-color: rgba(46, 229, 157, .45);
|
| 975 |
+
background: linear-gradient(180deg, rgba(38,215,130,.22), rgba(38,215,130,.08));
|
| 976 |
+
color: var(--nw-green);
|
| 977 |
+
}
|
| 978 |
@media (max-width: 1100px) {
|
| 979 |
.nw-topbar { grid-template-columns: 1fr; }
|
| 980 |
.nw-trust-strip { grid-template-columns: 1fr; }
|