fffiloni commited on
Commit
09aa484
·
verified ·
1 Parent(s): 8be4404

Upload index.html

Browse files
Files changed (1) hide show
  1. web/index.html +213 -137
web/index.html CHANGED
@@ -8,200 +8,276 @@
8
  </head>
9
  <body>
10
  <div class="app-shell">
11
- <header class="app-header">
12
- <div class="brand-lockup">
13
- <div class="brand-icon">🚀</div>
14
  <div>
15
  <h1>Agentic Space Factory</h1>
16
- <p>Turn a Hugging Face model card into a private, testable Space.</p>
17
  </div>
18
  </div>
 
 
 
 
 
 
19
  <div class="top-actions">
20
- <span class="bucket-pill"><span class="status-dot green"></span><span id="bucketLabel">Bucket: loading…</span></span>
21
- <span class="bucket-pill" id="bucketStatusPill"><span class="status-dot" id="bucketStatusDot"></span><span id="bucketStatusText">Checking…</span></span>
22
  <span class="user-chip" id="userChip">Sign in</span>
23
  <a class="logout-link" id="logoutLink" href="/logout" hidden>Logout</a>
24
  </div>
25
  </header>
26
 
27
- <nav class="top-tabs" aria-label="Primary workflow">
28
- <button class="nav-item active" data-view="build">New Build</button>
29
- <button class="nav-item" data-view="progress">Live Progress</button>
30
- <button class="nav-item" data-view="validate">Space Test</button>
31
- </nav>
32
-
33
  <main class="main">
34
  <section class="auth-panel" id="authPanel" hidden></section>
35
  <section class="operation-status" id="operationStatus" hidden></section>
36
 
37
- <section data-section="build" class="build-view">
38
- <div class="single-column">
39
- <section class="bucket-strip">
40
- <div>
41
- <span class="eyebrow">Run storage</span>
42
- <div class="bucket-source"><span class="status-dot" id="bucketInlineDot"></span><strong id="bucketInlineLabel">loading…</strong><span class="badge" id="bucketInlineStatus">Checking</span></div>
43
- <p class="muted mini-copy">Runs, logs and artifacts stay in the connected user bucket.</p>
44
- </div>
45
- <div class="strip-actions">
46
- <button class="secondary" id="checkBucket">Check bucket</button>
47
- <button class="secondary" id="createBucket">Create private bucket</button>
48
- </div>
49
- </section>
50
-
51
- <section class="panel build-card hero-card">
52
- <div class="panel-title-row build-title-row">
53
  <div>
54
  <span class="eyebrow">New Build</span>
55
- <h2>Prepare a new private Space</h2>
 
56
  </div>
57
- <button class="secondary small" id="prepareNewBuild">Prepare new build</button>
58
  </div>
 
59
  <div class="build-mode-panel" id="buildModePanel">
60
  <strong>Preparing a new build</strong>
61
- <p>This form always starts a fresh private Space build. Select a previous run in Live progress to inspect it without changing this form.</p>
62
  </div>
63
- <p class="muted">Generate a private Space with Pi, then validate it live. Hardware is ZeroGPU-first with fixed GPU fallback when available.</p>
64
- <div class="form-grid compact-form">
 
65
  <label>Model card URL or model ID<input id="modelId" value="Tongyi-MAI/Z-Image-Turbo" /></label>
66
  <label>Target Space name<input id="targetSpace" placeholder="space-factory-z-image-v1" /></label>
67
- <label>Pi model<input id="piModel" value="Qwen/Qwen3-Coder-Next" /></label>
68
- <label>Implementation mode<select id="implementationMode"><option>full-inference-gated</option><option>full-inference-attempt</option><option>safe-scaffold</option></select></label>
69
- <label>Preferred hardware<select id="preferredHardware"><option>zero-a10g</option><option>l40sx1</option><option>a10g-large</option><option>cpu-basic</option></select></label>
70
- <label>Fallback hardware<select id="fallbackHardware"><option>l40sx1</option><option>a10g-large</option><option>a100-large</option><option>h200</option></select></label>
71
- <label>Expected output type<select id="buildExpectedOutput"><option>text</option><option selected>image</option><option>video</option><option>audio</option><option>any</option></select></label>
72
  </div>
73
- <div class="toggles stacked-toggles">
74
- <label><input id="tryZeroGpu" type="checkbox" checked /> <span><strong>Try ZeroGPU first</strong><small>Attempt free dynamic GPU before fixed hardware.</small></span></label>
75
- <label><input id="allowFallback" type="checkbox" checked /> <span><strong>Allow fixed GPU fallback</strong><small>Use fallback hardware if ZeroGPU is unavailable.</small></span></label>
76
- <label><input type="checkbox" checked disabled /> <span><strong>Private Space</strong><small>Generated Spaces remain private by default.</small></span></label>
77
- </div>
78
- <button class="primary" id="launchBuild" disabled>Launch new build</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  <p class="muted build-gate" id="buildGateText">Checking your run bucket before enabling builds…</p>
80
  </section>
81
  </div>
82
- </section>
83
 
84
- <section data-section="progress" hidden>
85
- <div class="dashboard-grid">
86
- <div class="workspace-column">
87
- <section class="progress-card" id="progressCard">
88
- <div class="progress-head">
89
- <div><span class="eyebrow">Live progress</span><strong id="progressTitle">Live job progress</strong><span class="badge running" id="progressStatus">Idle</span></div>
90
- <strong id="progressPercent">0%</strong>
91
  </div>
92
- <div class="progress-bar"><div id="progressFill" style="width:0%"></div></div>
93
- <div class="progress-meta compact-meta">
94
- <div><span>Current step</span><strong id="currentStep">No run selected</strong></div>
95
- <div><span>Last update</span><strong id="lastEvent">Launch a build or select a run to start tracking.</strong></div>
96
- <div><span>Elapsed</span><strong id="elapsed">—</strong></div>
97
- <div><span>Hardware plan</span><strong id="hardwarePlan">ZeroGPU → fixed GPU fallback</strong></div>
98
- <div><span>Last checked</span><strong id="lastPolled">—</strong></div>
99
  </div>
100
- <div class="timeline timeline-compact" id="timeline"></div>
101
- <div class="manual-action" id="manualActionPanel" hidden>
102
- <div>
103
- <strong id="manualActionTitle">Manual hardware required</strong>
104
- <p id="manualActionText">Automatic hardware selection was not available. Open Space settings, choose the recommended GPU, then run validation.</p>
 
 
 
 
 
105
  </div>
106
- <div class="manual-action-buttons">
107
- <a class="link-btn" id="manualOpenSettings" target="_blank">Open Space settings </a>
108
- <button class="secondary" id="manualGoValidate">Test after hardware change</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  </div>
110
- </div>
111
- <div class="poll-warning" id="pollWarning" hidden>Progress polling is temporarily unavailable. The Job may still be running; retrying automatically…</div>
112
- </section>
113
 
114
- <div class="bottom-grid">
115
- <section class="panel">
116
- <div class="panel-head"><h2>Validation & metrics</h2><span class="badge neutral">Live</span></div>
117
- <ul class="metric-list" id="metricsList">
118
- <li><span>/health</span><strong>pending</strong></li>
119
- <li><span>/generate smoke test</span><strong>pending</strong></li>
120
- <li><span>Latency</span><strong>—</strong></li>
121
- <li><span>Recommended ZeroGPU duration</span><strong>—</strong></li>
122
- </ul>
123
- </section>
124
- <section class="panel">
125
- <div class="panel-head"><h2>Latest events</h2><span class="badge live">Live</span></div>
126
- <pre class="events" id="eventsPanel">No events yet.</pre>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  </section>
128
  </div>
129
- </div>
 
 
130
 
131
- <aside class="right-rail">
132
- <section class="panel run-explorer home-run-explorer">
133
- <div class="panel-head">
134
- <div><span class="eyebrow">Connected bucket</span><h2>Run Explorer</h2></div>
135
- <button class="secondary small" id="refreshRunsHome">Refresh runs</button>
136
- </div>
137
- <div class="run-filters compact-filters" id="runFiltersHome">
 
 
 
138
  <button class="filter active" data-status="all">All</button>
139
  <button class="filter" data-status="running">Running</button>
140
  <button class="filter" data-status="full_inference_success">Success</button>
141
  <button class="filter" data-status="manual_hardware_required">Manual</button>
142
  <button class="filter" data-status="failed">Failed</button>
143
  </div>
144
- <div id="runsTableHome" class="runs-table compact-runs">Loading runs…</div>
145
- <p class="muted tiny-note">Filters are instant. Refresh only reloads the bucket.</p>
146
- </section>
147
-
148
- <section class="panel run-details-home">
149
- <div class="panel-head"><h2>Run details</h2><span class="badge" id="homeRunDetailStatus">No run</span></div>
150
- <div class="detail-grid home-detail-grid">
151
  <div><span>Run ID</span><strong id="detailRunId">—</strong></div>
152
- <div><span>Job status</span><strong id="detailJobStatus"></strong></div>
153
- <div><span>Gate status</span><strong id="detailGateStatus">—</strong></div>
154
- <div><span>Target Space</span><strong id="detailSpace">—</strong></div>
155
- <div><span>Hardware</span><strong id="detailHardware">—</strong></div>
156
- <div><span>Traces</span><strong id="detailTraces">—</strong></div>
 
 
 
 
 
 
 
 
157
  </div>
158
- <div class="quick-links">
159
- <a class="link-btn disabled" id="openJob" target="_blank">Job ↗</a>
160
- <a class="link-btn disabled" id="openSpace" target="_blank">Space </a>
161
- <a class="link-btn disabled" id="openSettings" target="_blank">Settings </a>
162
- <a class="link-btn disabled" id="openArtifacts" target="_blank">Artifacts ↗</a>
163
  </div>
164
- <div class="report-home" id="homeReportPreview"><strong>No run selected</strong><p>Select a run to preview its report and actions.</p></div>
165
- <button class="secondary full" id="homeValidateBtn" disabled>Test this Space</button>
166
  </section>
167
- </aside>
168
- </div>
169
  </section>
170
 
171
  <section data-section="validate" hidden>
172
- <div class="test-layout">
173
- <section class="panel large">
174
- <div class="panel-title-row"><div><span class="eyebrow">Space Test</span><h2>Validate existing Space</h2></div></div>
175
- <p class="muted">Use this to test a generated Space after choosing hardware manually if needed. The validation Job calls the live Space and stores output artifacts + latency in your bucket.</p>
176
- <div class="form-grid">
 
 
177
  <label>Target Space ID<input id="validateSpace" placeholder="alice/z-image-demo" /></label>
178
  <label>API name<input id="validateApi" value="/generate" /></label>
179
  <label>Expected output type<select id="expectedOutput"><option>image</option><option>video</option><option>audio</option><option>text</option><option>any</option></select></label>
180
  <label>Timeout seconds<input id="validateTimeout" value="1800" /></label>
 
181
  </div>
182
- <label>Test args JSON<textarea id="testArgs" rows="4">["a cinematic robot cat astronaut, detailed, studio lighting"]</textarea></label>
183
- <label>Test kwargs JSON<textarea id="testKwargs" rows="3">{}</textarea></label>
184
- <button class="primary" id="launchValidate">Run smoke test</button>
185
- </section>
186
- <aside class="panel help-panel">
187
- <h2>Before testing</h2>
188
- <p class="muted">If the Space needs GPU, open Settings, choose hardware, wait for rebuild, then run this smoke test.</p>
189
- <a class="link-btn disabled" id="selectedOpenSettings" target="_blank">Open selected Settings </a>
190
- <div class="blockers" id="selectedBlockers" hidden></div>
191
- </aside>
192
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  </section>
194
 
195
  <section class="hidden-run-inspector" hidden>
196
- <span id="selectedRunId">—</span><span id="selectedModelId">—</span><span id="selectedTargetSpace"></span><span id="selectedHardware"></span><span id="runDetailStatus"></span>
197
- <button id="selectedValidateBtn" disabled>Validate this Space</button>
198
- <a id="selectedOpenJob" target="_blank"></a><a id="selectedOpenSpace" target="_blank"></a><a id="selectedOpenArtifacts" target="_blank"></a>
199
- <ul id="selectedValidation"></ul><div id="artifactList"></div><pre id="reportPreview"></pre>
200
- <span id="sidebarBucketDot" hidden></span>
201
- <div id="runsTable" hidden></div>
202
- <input id="runSearch" hidden />
203
- <button id="refreshRuns" hidden></button>
204
- <div id="runFilters" hidden></div>
205
  </section>
206
  </main>
207
  </div>
 
8
  </head>
9
  <body>
10
  <div class="app-shell">
11
+ <header class="topbar">
12
+ <div class="brand">
13
+ <div class="brand-mark"></div>
14
  <div>
15
  <h1>Agentic Space Factory</h1>
16
+ <p>Build, validate and recover private Hugging Face Spaces.</p>
17
  </div>
18
  </div>
19
+ <nav class="top-tabs" aria-label="Primary navigation">
20
+ <button class="nav-item active" data-view="build">Build</button>
21
+ <button class="nav-item" data-view="progress">Runs</button>
22
+ <button class="nav-item" data-view="validate">Space Test</button>
23
+ <button class="nav-item" data-view="about-page">About</button>
24
+ </nav>
25
  <div class="top-actions">
26
+ <button class="bucket-pill" id="bucketStatusPill"><span class="status-dot" id="bucketStatusDot"></span><span id="bucketStatusText">Checking bucket…</span></button>
 
27
  <span class="user-chip" id="userChip">Sign in</span>
28
  <a class="logout-link" id="logoutLink" href="/logout" hidden>Logout</a>
29
  </div>
30
  </header>
31
 
 
 
 
 
 
 
32
  <main class="main">
33
  <section class="auth-panel" id="authPanel" hidden></section>
34
  <section class="operation-status" id="operationStatus" hidden></section>
35
 
36
+ <section data-section="build" class="build-workspace">
37
+ <div class="build-column">
38
+ <section class="panel build-card">
39
+ <div class="section-head">
 
 
 
 
 
 
 
 
 
 
 
 
40
  <div>
41
  <span class="eyebrow">New Build</span>
42
+ <h2>Launch a private Space</h2>
43
+ <p class="muted">Provide a model and goal. The factory creates a private Space, attempts ZeroGPU first, then validates it live.</p>
44
  </div>
45
+ <button class="secondary small" id="prepareNewBuild">Reset</button>
46
  </div>
47
+
48
  <div class="build-mode-panel" id="buildModePanel">
49
  <strong>Preparing a new build</strong>
50
+ <p>This form starts a fresh build. Selecting a run only updates the progress panels.</p>
51
  </div>
52
+
53
+ <div class="field-stack">
54
+ <label>Run ID<input id="runId" placeholder="auto-generated if empty" /></label>
55
  <label>Model card URL or model ID<input id="modelId" value="Tongyi-MAI/Z-Image-Turbo" /></label>
56
  <label>Target Space name<input id="targetSpace" placeholder="space-factory-z-image-v1" /></label>
57
+ <label>Goal / notes<textarea id="buildGoal" rows="4" placeholder="What should this Space do? Any constraints or notes?"></textarea></label>
 
 
 
 
58
  </div>
59
+
60
+ <details class="settings-box" open>
61
+ <summary>Execution settings</summary>
62
+ <div class="form-grid">
63
+ <label>Pi model<input id="piModel" value="Qwen/Qwen3-Coder-Next" /></label>
64
+ <label>Implementation mode<select id="implementationMode"><option>full-inference-gated</option><option>full-inference-attempt</option><option>safe-scaffold</option></select></label>
65
+ <label>Preferred hardware<select id="preferredHardware"><option>zero-a10g</option><option>l40sx1</option><option>a10g-large</option><option>cpu-basic</option></select></label>
66
+ <label>Fallback hardware<select id="fallbackHardware"><option>l40sx1</option><option>a10g-large</option><option>a100-large</option><option>h200</option></select></label>
67
+ <label>Expected output type<select id="buildExpectedOutput"><option>text</option><option selected>image</option><option>video</option><option>audio</option><option>any</option></select></label>
68
+ </div>
69
+ <div class="toggle-list">
70
+ <label><span>Try ZeroGPU first <small>Preferred for cost efficiency.</small></span><input id="tryZeroGpu" type="checkbox" checked /></label>
71
+ <label><span>Allow fixed GPU fallback <small>Use fallback if ZeroGPU is unavailable.</small></span><input id="allowFallback" type="checkbox" checked /></label>
72
+ <label><span>Private Space <small>Generated Spaces are private by default.</small></span><input type="checkbox" checked disabled /></label>
73
+ </div>
74
+ </details>
75
+
76
+ <section class="run-storage-card">
77
+ <div>
78
+ <span class="eyebrow">Run storage</span>
79
+ <strong><span class="status-dot" id="bucketInlineDot"></span><span id="bucketInlineLabel">loading…</span></strong>
80
+ <p class="muted">Runs, logs, reports and artifacts are saved here.</p>
81
+ </div>
82
+ <div class="inline-actions">
83
+ <button class="secondary small" id="checkBucket">Check bucket</button>
84
+ <button class="secondary small" id="createBucket">Create private bucket</button>
85
+ </div>
86
+ <span class="badge" id="bucketInlineStatus">Checking</span>
87
+ </section>
88
+
89
+ <section class="launch-summary">
90
+ <strong>Launch summary</strong>
91
+ <ul>
92
+ <li>Creates a private Space under your account.</li>
93
+ <li>Uses ZeroGPU first, if enabled.</li>
94
+ <li>Falls back to fixed GPU when allowed.</li>
95
+ <li>Saves all logs, artifacts and reports to your bucket.</li>
96
+ </ul>
97
+ </section>
98
+ <button class="primary" id="launchBuild" disabled>Build private Space</button>
99
  <p class="muted build-gate" id="buildGateText">Checking your run bucket before enabling builds…</p>
100
  </section>
101
  </div>
 
102
 
103
+ <div class="runs-column">
104
+ <section class="panel runs-panel">
105
+ <div class="section-head compact">
106
+ <div>
107
+ <span class="eyebrow">Runs & Progress</span>
108
+ <h2>Inspect running and previous builds</h2>
 
109
  </div>
110
+ <div class="inline-actions">
111
+ <button class="secondary small" id="resumeLatestRun">Resume latest</button>
112
+ <button class="secondary small" id="refreshRunsHome">Refresh</button>
 
 
 
 
113
  </div>
114
+ </div>
115
+ <div class="runs-layout">
116
+ <aside class="run-list-card">
117
+ <div class="search-wrap"><input id="runSearch" placeholder="Search runs…" /><span>⌕</span></div>
118
+ <div class="run-filters" id="runFiltersHome">
119
+ <button class="filter active" data-status="all">All</button>
120
+ <button class="filter" data-status="running">Running</button>
121
+ <button class="filter" data-status="full_inference_success">Success</button>
122
+ <button class="filter" data-status="manual_hardware_required">Manual</button>
123
+ <button class="filter" data-status="failed">Failed</button>
124
  </div>
125
+ <div id="runsTableHome" class="runs-table compact-runs">Loading runs…</div>
126
+ <button class="text-link" data-view-target="progress">View full runs </button>
127
+ </aside>
128
+
129
+ <section class="run-detail-card">
130
+ <div class="run-summary-card" id="runSummaryCard">
131
+ <div>
132
+ <span class="badge neutral" id="progressStatus">Idle</span>
133
+ <h3 id="progressTitle">No run selected</h3>
134
+ <p class="muted" id="lastEvent">Launch a build or select a run.</p>
135
+ </div>
136
+ <div class="summary-meta">
137
+ <div><span>Target Space</span><strong id="detailSpace">—</strong></div>
138
+ <div><span>Current phase</span><strong id="currentStep">—</strong></div>
139
+ <div><span>Elapsed</span><strong id="elapsed">—</strong></div>
140
+ <div><span>Last checked</span><strong id="lastPolled">—</strong></div>
141
+ </div>
142
+ <div class="quick-links">
143
+ <a class="link-btn disabled" id="openJob" target="_blank">Open Job ↗</a>
144
+ <a class="link-btn disabled" id="openSpace" target="_blank">Open Space ↗</a>
145
+ <a class="link-btn disabled" id="openSettings" target="_blank">Open Settings</a>
146
+ <a class="link-btn disabled" id="openArtifacts" target="_blank">Artifacts</a>
147
+ </div>
148
  </div>
149
+ <div class="progress-bar"><div id="progressFill" style="width:0%"></div></div>
150
+ <div class="progress-percent"><strong id="progressPercent">0%</strong><span id="hardwarePlan">ZeroGPU fixed GPU fallback</span></div>
151
+ <div class="timeline" id="timeline"></div>
152
 
153
+ <div class="manual-action" id="manualActionPanel" hidden>
154
+ <div><strong id="manualActionTitle">Manual hardware required</strong><p id="manualActionText">Open Space settings, choose the recommended GPU, then run Space Test.</p></div>
155
+ <div class="inline-actions"><a class="link-btn" id="manualOpenSettings" target="_blank">Open Space settings ↗</a><button class="secondary small" id="manualGoValidate">Prepare Space Test</button></div>
156
+ </div>
157
+ <div class="poll-warning" id="pollWarning" hidden>Progress polling is temporarily unavailable. Retrying automatically…</div>
158
+
159
+ <div class="detail-grid three">
160
+ <section class="mini-panel">
161
+ <h4>Activity</h4>
162
+ <div id="activityFeed" class="activity-feed"><div class="empty">No activity yet.</div></div>
163
+ </section>
164
+ <section class="mini-panel">
165
+ <h4>Diagnostics</h4>
166
+ <div class="diagnostic-list">
167
+ <div><span>Status</span><strong id="detailJobStatus">—</strong></div>
168
+ <div><span>Gate</span><strong id="detailGateStatus">—</strong></div>
169
+ <div><span>Hardware</span><strong id="detailHardware">—</strong></div>
170
+ <div><span>Events</span><strong id="detailTraces">—</strong></div>
171
+ </div>
172
+ <div id="statusChips" class="status-chips"></div>
173
+ <div class="issue-card" id="issueCard" hidden><strong id="issueTitle">Issue</strong><p id="issueDetail">—</p></div>
174
+ </section>
175
+ <section class="mini-panel report-card">
176
+ <h4>Report preview</h4>
177
+ <div class="report-home" id="homeReportPreview"><strong>No run selected</strong><p>Select a run to preview its report and actions.</p></div>
178
+ <button class="secondary full" id="homeValidateBtn" disabled>Test this Space</button>
179
+ </section>
180
+ </div>
181
  </section>
182
  </div>
183
+ </section>
184
+ </div>
185
+ </section>
186
 
187
+ <section data-section="progress" hidden>
188
+ <section class="panel full-runs-panel">
189
+ <div class="section-head">
190
+ <div><span class="eyebrow">Run Explorer</span><h2>All bucket runs</h2><p class="muted">Search, filter, inspect reports and resume progress from any run.</p></div>
191
+ <div class="inline-actions"><button class="secondary small" id="refreshRuns">Refresh runs</button><button class="secondary small" id="resumeLatestRunFull">Resume latest</button></div>
192
+ </div>
193
+ <div class="full-runs-grid">
194
+ <aside>
195
+ <div class="search-wrap"><input id="runSearchFull" placeholder="Search runs…" /><span>⌕</span></div>
196
+ <div class="run-filters" id="runFilters">
197
  <button class="filter active" data-status="all">All</button>
198
  <button class="filter" data-status="running">Running</button>
199
  <button class="filter" data-status="full_inference_success">Success</button>
200
  <button class="filter" data-status="manual_hardware_required">Manual</button>
201
  <button class="filter" data-status="failed">Failed</button>
202
  </div>
203
+ <div id="runsTable" class="runs-table">Loading runs…</div>
204
+ </aside>
205
+ <section class="run-detail-card expanded">
206
+ <div class="detail-grid four">
 
 
 
207
  <div><span>Run ID</span><strong id="detailRunId">—</strong></div>
208
+ <div><span>Status</span><strong id="homeRunDetailStatus">No run</strong></div>
209
+ <div><span>Target Space</span><strong id="selectedTargetSpace">—</strong></div>
210
+ <div><span>Hardware</span><strong id="selectedHardware">—</strong></div>
211
+ <div><span>Model</span><strong id="selectedModelId">—</strong></div>
212
+ <div><span>Selected Run</span><strong id="selectedRunId">—</strong></div>
213
+ <div><span>Run detail status</span><strong id="runDetailStatus">—</strong></div>
214
+ </div>
215
+ <div class="quick-links extra-links">
216
+ <a class="link-btn disabled" id="selectedOpenJob" target="_blank">Job ↗</a>
217
+ <a class="link-btn disabled" id="selectedOpenSpace" target="_blank">Space ↗</a>
218
+ <a class="link-btn disabled" id="selectedOpenSettings" target="_blank">Settings ↗</a>
219
+ <a class="link-btn disabled" id="selectedOpenArtifacts" target="_blank">Artifacts ↗</a>
220
+ <button class="secondary" id="selectedValidateBtn" disabled>Validate this Space</button>
221
  </div>
222
+ <div class="blockers" id="selectedBlockers" hidden></div>
223
+ <div class="split-panels">
224
+ <section class="mini-panel"><h4>Validation & metrics</h4><ul class="metric-list" id="metricsList"><li><span>/health</span><strong>pending</strong></li><li><span>/generate smoke test</span><strong>pending</strong></li><li><span>Latency</span><strong>—</strong></li><li><span>Recommended ZeroGPU duration</span><strong>—</strong></li></ul><ul id="selectedValidation" hidden></ul></section>
225
+ <section class="mini-panel"><h4>Artifacts</h4><div id="artifactList" class="artifact-list">No artifacts indexed yet.</div></section>
 
226
  </div>
227
+ <section class="mini-panel"><h4>Full report</h4><pre id="reportPreview" class="report-preview">No report selected.</pre></section>
 
228
  </section>
229
+ </div>
230
+ </section>
231
  </section>
232
 
233
  <section data-section="validate" hidden>
234
+ <section class="panel validate-panel">
235
+ <div class="section-head">
236
+ <div><span class="eyebrow">Space Test</span><h2>Validate an existing Space</h2><p class="muted">Call the live Gradio API, verify output type, measure latency and store artifacts.</p></div>
237
+ <span class="badge neutral" id="spaceTestStatus">Pending</span>
238
+ </div>
239
+ <div class="validate-grid">
240
+ <div class="field-stack">
241
  <label>Target Space ID<input id="validateSpace" placeholder="alice/z-image-demo" /></label>
242
  <label>API name<input id="validateApi" value="/generate" /></label>
243
  <label>Expected output type<select id="expectedOutput"><option>image</option><option>video</option><option>audio</option><option>text</option><option>any</option></select></label>
244
  <label>Timeout seconds<input id="validateTimeout" value="1800" /></label>
245
+ <button class="primary" id="launchValidate">Run smoke test</button>
246
  </div>
247
+ <div class="field-stack">
248
+ <label>Test args JSON<textarea id="testArgs" rows="7">["a cinematic robot cat astronaut, detailed, studio lighting"]</textarea></label>
249
+ <label>Test kwargs JSON<textarea id="testKwargs" rows="5">{}</textarea></label>
250
+ </div>
251
+ <div class="result-card" id="spaceTestPreview">
252
+ <h3>Result</h3>
253
+ <div class="diagnostic-list">
254
+ <div><span>Status</span><strong id="spaceTestOutput">Waiting for API test</strong></div>
255
+ <div><span>Verdict</span><strong id="spaceTestVerdict">pending</strong></div>
256
+ </div>
257
+ <p class="muted">Validation runs as an HF Job and writes its report to the same bucket.</p>
258
+ </div>
259
+ </div>
260
+ </section>
261
+ </section>
262
+
263
+ <section data-section="about-page" hidden>
264
+ <section class="panel about-panel">
265
+ <span class="eyebrow">About</span>
266
+ <h2>What this factory does</h2>
267
+ <p>Agentic Space Factory turns a Hugging Face model card into a private, testable Gradio Space. It attempts ZeroGPU first, can fall back to fixed GPU hardware, and validates success against the deployed live Space.</p>
268
+ <div class="about-grid">
269
+ <div><h3>Possible outcomes</h3><ul><li>full_inference_success</li><li>manual_hardware_required</li><li>full_inference_candidate_health_passed</li><li>health_only</li><li>technical_blocker</li><li>failed</li></ul></div>
270
+ <div><h3>Guarantees</h3><ul><li>Spaces are private by default.</li><li>Runs are stored in your private bucket.</li><li>Success is based on the live Space, not only generated files.</li></ul></div>
271
+ </div>
272
+ </section>
273
  </section>
274
 
275
  <section class="hidden-run-inspector" hidden>
276
+ <span>Live job progress</span><span>Run details</span><span>Validation & metrics</span><span>Latest events</span>
277
+ <span id="sidebarBucketDot"></span>
278
+ <a id="runHeaderSpace" target="_blank"></a>
279
+ <div id="diagBuildStatus"></div><div id="diagBuildStep"></div><ul id="zeroGpuChecklist"></ul>
280
+ <pre class="events" id="eventsPanel">No events yet.</pre>
 
 
 
 
281
  </section>
282
  </main>
283
  </div>