@symerian/symi 3.5.0 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/bundled/boot-md/handler.js +4 -4
  3. package/dist/bundled/session-memory/handler.js +4 -4
  4. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  5. package/dist/{chrome-C_I81hbq.js → chrome-B7-rO4i9.js} +4 -4
  6. package/dist/{chrome-BKUACyeO.js → chrome-DPjznJQ-.js} +4 -4
  7. package/dist/control-ui/css/revert-red-theme.md +141 -0
  8. package/dist/control-ui/css/style.css +5843 -0
  9. package/dist/control-ui/css/style.css.backup-2026-03-03-162525 +3546 -0
  10. package/dist/control-ui/css/style.css.backup-before-red-2026-03-03-162525 +3546 -0
  11. package/dist/control-ui/css/style.css.backup-before-red-theme-2026-03-03-162530 +3546 -0
  12. package/dist/control-ui/css/style.css.pre-2row +2165 -0
  13. package/dist/control-ui/css/style.css.pre-brand +1776 -0
  14. package/dist/control-ui/css/style.css.pre-history +1974 -0
  15. package/dist/control-ui/css/style.css.pre-nav +2264 -0
  16. package/dist/control-ui/css/style.css.pre-newsession +1898 -0
  17. package/dist/control-ui/css/style.css.pre-queue +2195 -0
  18. package/dist/control-ui/css/style.css.pre-red-prompt +2524 -0
  19. package/dist/control-ui/css/style.css.pre-stop +2239 -0
  20. package/dist/control-ui/css/style.css.pre-textarea +2184 -0
  21. package/dist/control-ui/css/style.css.pre-watchdog +1848 -0
  22. package/dist/control-ui/css/style.css.red-theme +2999 -0
  23. package/dist/control-ui/index.html +1049 -0
  24. package/dist/control-ui/js/app.js +1304 -0
  25. package/dist/control-ui/js/app.js.pre-2row +463 -0
  26. package/dist/control-ui/js/app.js.pre-heartbeat-filter +595 -0
  27. package/dist/control-ui/js/app.js.pre-newsession +408 -0
  28. package/dist/control-ui/js/app.js.pre-queue +476 -0
  29. package/dist/control-ui/js/app.js.pre-stop +564 -0
  30. package/dist/control-ui/js/app.js.pre-textarea +467 -0
  31. package/dist/control-ui/js/app.js.pre-watchdog +293 -0
  32. package/dist/control-ui/js/connections.js +438 -0
  33. package/dist/control-ui/js/gateway.js +233 -0
  34. package/dist/control-ui/js/gateway.js.pre-stop +110 -0
  35. package/dist/control-ui/js/history.js +732 -0
  36. package/dist/control-ui/js/logs.js +238 -0
  37. package/dist/control-ui/js/menu.js +232 -0
  38. package/dist/control-ui/js/menu.js.pre-nav +66 -0
  39. package/dist/control-ui/js/metrics.js +53 -0
  40. package/dist/control-ui/js/models.js +138 -0
  41. package/dist/control-ui/js/render.js +882 -0
  42. package/dist/control-ui/js/render.test.js +112 -0
  43. package/dist/control-ui/js/scheduling.js +461 -0
  44. package/dist/control-ui/js/settings.js +910 -0
  45. package/dist/control-ui/js/slash-autocomplete.js +168 -0
  46. package/dist/control-ui/js/subagents.js +560 -0
  47. package/dist/control-ui/js/utils.js +29 -0
  48. package/dist/control-ui/vendor/highlight.min.js +2518 -0
  49. package/dist/control-ui/vendor/marked.min.js +69 -0
  50. package/dist/{deliver-DyO3QD8O.js → deliver-DTRkeYm3.js} +4 -4
  51. package/dist/{deliver-Cjyb6h4g.js → deliver-oWGJwzFf.js} +4 -4
  52. package/dist/extensionAPI.js +4 -4
  53. package/dist/llm-slug-generator.js +4 -4
  54. package/dist/{manager-rvtFoeFT.js → manager-CFenq_aO.js} +1 -1
  55. package/dist/{manager-PTSjHNVq.js → manager-CsxTf96V.js} +1 -1
  56. package/dist/{pi-embedded-BPuUM-gD.js → pi-embedded-Cdub5Vs9.js} +10 -10
  57. package/dist/{pw-ai-BFS9ezWe.js → pw-ai-BOOB8qoi.js} +1 -1
  58. package/dist/{pw-ai-Cx-Ko_FL.js → pw-ai-D2pEVS5n.js} +1 -1
  59. package/dist/{synthesis-7UL3pCpj.js → synthesis-Be9nYyDd.js} +4 -4
  60. package/dist/{synthesis-fD8J2vag.js → synthesis-CBIT6Vnk.js} +4 -4
  61. package/dist/{unified-runner-BIiKFnNF.js → unified-runner-BVvvnjXW.js} +10 -10
  62. package/package.json +3 -3
@@ -0,0 +1,1049 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Symi</title>
7
+ <link rel="stylesheet" href="css/style.css" />
8
+ <!--
9
+ 3.0.6: removed `<link rel="stylesheet" href="/vendor/highlight.css" />`.
10
+ The file was never present in the repo (introduced as a stray addition
11
+ in commit 5696196e9 "Fix session file corruption with auto-repair
12
+ mechanism" but the CSS itself was never committed). The 404 returned
13
+ `Content-Type: text/plain` and modern browsers refuse to apply it as
14
+ a stylesheet under strict MIME checking, producing two recurring
15
+ console errors per page load.
16
+
17
+ `glass-ui/js/render.js` still applies hljs class names to code blocks
18
+ via `highlight.min.js` (which IS bundled in vendor/). Code blocks
19
+ render structurally correct without color. To restore syntax colors,
20
+ drop a real hljs theme CSS at `glass-ui/vendor/highlight.css` (e.g.,
21
+ github-dark.min.css from highlight.js) and re-add the link.
22
+ -->
23
+
24
+ </head>
25
+ <body>
26
+ <!-- Animated background -->
27
+ <div class="bg-orbs">
28
+ <div class="orb orb-1"></div>
29
+ <div class="orb orb-2"></div>
30
+ <div class="orb orb-3"></div>
31
+ </div>
32
+ <div class="bg-grid"></div>
33
+
34
+ <!-- Metrics — Left column -->
35
+ <aside class="metrics-col metrics-left">
36
+ <!-- Brand Panel -->
37
+ <div class="glass-panel brand-panel">
38
+ <div class="brand-mark">◈</div>
39
+ <div class="brand-text">
40
+ <div class="brand-name">SYMI</div>
41
+ <div class="brand-sub">AI Assistant</div>
42
+ </div>
43
+ </div>
44
+
45
+ <!-- Agent Status Panel — position #1 -->
46
+ <div class="glass-panel agent-status-panel" id="agent-status-panel" data-state="idle">
47
+ <div class="panel-label">AGENT STATUS</div>
48
+ <div class="aso-orb-wrap">
49
+ <svg class="aso-svg" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
50
+ <!-- Orbit guide tracks -->
51
+ <circle class="aso-track" cx="50" cy="50" r="43" />
52
+ <circle class="aso-track" cx="50" cy="50" r="31" />
53
+ <circle class="aso-track" cx="50" cy="50" r="19" />
54
+ <!-- Rotating arc groups -->
55
+ <g class="aso-rot aso-rot1">
56
+ <circle class="aso-arc" cx="50" cy="50" r="43" stroke-dasharray="55 215" />
57
+ </g>
58
+ <g class="aso-rot aso-rot2">
59
+ <circle
60
+ class="aso-arc aso-arc-dim"
61
+ cx="50"
62
+ cy="50"
63
+ r="43"
64
+ stroke-dasharray="22 248"
65
+ />
66
+ </g>
67
+ <g class="aso-rot aso-rot3">
68
+ <circle class="aso-arc" cx="50" cy="50" r="31" stroke-dasharray="40 155" />
69
+ </g>
70
+ <g class="aso-rot aso-rot4">
71
+ <circle
72
+ class="aso-arc aso-arc-dim"
73
+ cx="50"
74
+ cy="50"
75
+ r="31"
76
+ stroke-dasharray="15 180"
77
+ />
78
+ </g>
79
+ <g class="aso-rot aso-rot5">
80
+ <circle class="aso-arc" cx="50" cy="50" r="19" stroke-dasharray="20 99" />
81
+ </g>
82
+ <!-- Core glow halo -->
83
+ <circle class="aso-core-halo" cx="50" cy="50" r="10" />
84
+ <!-- Core dot -->
85
+ <circle class="aso-core" cx="50" cy="50" r="5.5" />
86
+ </svg>
87
+ </div>
88
+ <div class="aso-label" id="aso-label">STANDBY</div>
89
+ <div class="aso-sub" id="aso-sub">Awaiting your prompt</div>
90
+ <div class="aso-working" id="aso-working">
91
+ <span class="aso-working-asterisk">✳</span>
92
+ <span class="aso-working-text">Working</span>
93
+ </div>
94
+ <div class="aso-model-info">
95
+ <span class="aso-model-label" id="active-model-label"></span>
96
+ <span class="aso-model-badge" id="model-badge"></span>
97
+ </div>
98
+ </div>
99
+
100
+ <!-- Subagents Panel -->
101
+ <div class="glass-panel subagents-panel" id="subagents-panel">
102
+ <div class="panel-label">
103
+ SUBAGENTS
104
+ <span class="subagents-count" id="subagents-count"></span>
105
+ </div>
106
+
107
+ <!-- Quick Deploy Section -->
108
+ <div class="quick-deploy-section">
109
+ <div class="quick-deploy-label">QUICK DEPLOY</div>
110
+ <div class="quick-deploy-grid">
111
+ <button class="quick-deploy-btn" data-agent="research" title="Research Agent">
112
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
113
+ <circle cx="11" cy="11" r="8" />
114
+ <path d="M21 21l-4.35-4.35" />
115
+ </svg>
116
+ <span>Research</span>
117
+ </button>
118
+ <button class="quick-deploy-btn" data-agent="review" title="Code Review Agent">
119
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
120
+ <polyline points="16 18 22 12 16 6" />
121
+ <polyline points="8 6 2 12 8 18" />
122
+ </svg>
123
+ <span>Review</span>
124
+ </button>
125
+ <button class="quick-deploy-btn" data-agent="writer" title="Writer Agent">
126
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
127
+ <path d="M12 19l7-7 3 3-7 7-3-3z" />
128
+ <path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z" />
129
+ </svg>
130
+ <span>Writer</span>
131
+ </button>
132
+ <button class="quick-deploy-btn" data-agent="analyst" title="Analyst Agent">
133
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
134
+ <line x1="18" y1="20" x2="18" y2="10" />
135
+ <line x1="12" y1="20" x2="12" y2="4" />
136
+ <line x1="6" y1="20" x2="6" y2="14" />
137
+ </svg>
138
+ <span>Analyst</span>
139
+ </button>
140
+ </div>
141
+ </div>
142
+
143
+ <!-- Staging Prompt Box -->
144
+ <div class="staging-box" id="staging-box">
145
+ <div class="staging-chips" id="staging-chips">
146
+ <span class="staging-empty">Select agents above</span>
147
+ </div>
148
+ <button class="staging-deploy-btn" id="staging-deploy-btn" disabled>
149
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
150
+ <path d="M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z" />
151
+ </svg>
152
+ Deploy
153
+ </button>
154
+ </div>
155
+
156
+ <!-- Active Subagents list -->
157
+ <div class="subagents-active-label">ACTIVE</div>
158
+ <div class="subagents-list" id="subagents-list">
159
+ <div class="subagents-empty" id="subagents-empty">
160
+ <div class="subagents-empty-icon">
161
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
162
+ <circle cx="12" cy="12" r="3" />
163
+ <path
164
+ d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"
165
+ />
166
+ </svg>
167
+ </div>
168
+ <div class="subagents-empty-text">No active subagents</div>
169
+ </div>
170
+ </div>
171
+
172
+ <!-- Custom Spawn button -->
173
+ <button class="subagent-spawn-btn" id="subagent-spawn-btn" title="Spawn a custom subagent">
174
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
175
+ <circle cx="12" cy="12" r="10" />
176
+ <path d="M12 8v8M8 12h8" />
177
+ </svg>
178
+ <span>Custom Subagent</span>
179
+ </button>
180
+ </div>
181
+
182
+ <!-- Reasoning Panel -->
183
+ <div class="glass-panel reasoning-panel" id="reasoning-panel">
184
+ <div class="panel-label">
185
+ REASONING
186
+ <span class="reasoning-live-dot" id="reasoning-live-dot"></span>
187
+ </div>
188
+ <div class="reasoning-feed" id="reasoning-feed">
189
+ <div class="reasoning-empty" id="reasoning-empty">
190
+ <div class="reasoning-empty-icon">
191
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
192
+ <circle cx="12" cy="12" r="3" />
193
+ <path
194
+ d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"
195
+ />
196
+ </svg>
197
+ </div>
198
+ <div class="reasoning-empty-text">No reasoning yet</div>
199
+ </div>
200
+ </div>
201
+ </div>
202
+ </aside>
203
+
204
+ <!-- Metrics — Right column -->
205
+ <aside class="metrics-col metrics-right">
206
+ <!-- Connections Panel -->
207
+ <div class="glass-panel connections-panel" id="connections-panel">
208
+ <div class="panel-label">CONNECTIONS</div>
209
+ <button class="conn-btn" id="conn-slack" data-channel="slack">
210
+ <div class="conn-icon conn-icon-slack">
211
+ <svg viewBox="0 0 24 24" fill="currentColor">
212
+ <path
213
+ d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.124 2.521a2.528 2.528 0 0 1 2.52-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.52V8.834zm-1.271 0a2.528 2.528 0 0 1-2.521 2.521 2.528 2.528 0 0 1-2.521-2.521V2.522A2.528 2.528 0 0 1 15.166 0a2.528 2.528 0 0 1 2.521 2.522v6.312zm-2.521 10.124a2.528 2.528 0 0 1 2.521 2.52A2.528 2.528 0 0 1 15.166 24a2.528 2.528 0 0 1-2.521-2.522v-2.52h2.521zm0-1.271a2.528 2.528 0 0 1-2.521-2.521 2.528 2.528 0 0 1 2.521-2.521h6.312A2.528 2.528 0 0 1 24 15.166a2.528 2.528 0 0 1-2.522 2.521h-6.312z"
214
+ />
215
+ </svg>
216
+ </div>
217
+ <div class="conn-info">
218
+ <span class="conn-name">Slack</span>
219
+ <span class="conn-btn-status" id="conn-slack-status">Checking...</span>
220
+ </div>
221
+ <div class="conn-state" id="conn-slack-state"><div class="conn-dot"></div></div>
222
+ <span class="conn-notif" id="conn-slack-notif"></span>
223
+ </button>
224
+ <button class="conn-btn" id="conn-email" data-channel="email">
225
+ <div class="conn-icon conn-icon-email">
226
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
227
+ <rect x="2" y="4" width="20" height="16" rx="2" />
228
+ <path d="M22 6l-10 7L2 6" />
229
+ </svg>
230
+ </div>
231
+ <div class="conn-info">
232
+ <span class="conn-name">Email</span>
233
+ <span class="conn-btn-status" id="conn-email-status">Checking...</span>
234
+ </div>
235
+ <div class="conn-state" id="conn-email-state"><div class="conn-dot"></div></div>
236
+ <span class="conn-notif" id="conn-email-notif"></span>
237
+ </button>
238
+ <button class="conn-btn" id="conn-teams" data-channel="msteams">
239
+ <div class="conn-icon conn-icon-teams">
240
+ <svg viewBox="0 0 24 24" fill="currentColor">
241
+ <path
242
+ d="M19.19 8.77c-.73 0-1.39.29-1.88.76V8.5a2.5 2.5 0 0 0-2.5-2.5h-1.62c.18-.46.28-.96.28-1.48a4.04 4.04 0 0 0-4.04-4.04c-2.23 0-4.04 1.81-4.04 4.04 0 .52.1 1.02.28 1.48H4.5A2.5 2.5 0 0 0 2 8.5v9a2.5 2.5 0 0 0 2.5 2.5h9a2.5 2.5 0 0 0 2.5-2.5v-.97c.49.47 1.15.76 1.88.76a2.69 2.69 0 0 0 2.69-2.69v-3.14a2.69 2.69 0 0 0-2.69-2.69h.31zM9.43 2.98a2.04 2.04 0 1 1 0 4.08 2.04 2.04 0 0 1 0-4.08zm4.57 14.52a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 .5.5v9zm5.88-4.17a.69.69 0 0 1-.69.69.69.69 0 0 1-.69-.69v-3.14c0-.38.31-.69.69-.69.38 0 .69.31.69.69v3.14z"
243
+ />
244
+ <circle cx="17.5" cy="5.5" r="2.5" />
245
+ </svg>
246
+ </div>
247
+ <div class="conn-info">
248
+ <span class="conn-name">Teams</span>
249
+ <span class="conn-btn-status" id="conn-teams-status">Checking...</span>
250
+ </div>
251
+ <div class="conn-state" id="conn-teams-state"><div class="conn-dot"></div></div>
252
+ <span class="conn-notif" id="conn-teams-notif"></span>
253
+ </button>
254
+ </div>
255
+
256
+ <div class="glass-panel gateway-panel">
257
+ <div class="panel-label">SYMI GATEWAY</div>
258
+ <div class="net-row">
259
+ <div class="status-dot dot-green pulse"></div>
260
+ <span class="net-name">Gateway</span>
261
+ <span class="badge badge-green">ONLINE</span>
262
+ </div>
263
+ <div class="net-row">
264
+ <span class="net-name muted">Port</span>
265
+ <span class="net-ip">18789</span>
266
+ </div>
267
+ <div class="net-row">
268
+ <span class="net-name muted">Auth</span>
269
+ <span class="badge badge-blue">TOKEN</span>
270
+ </div>
271
+ <div class="net-row">
272
+ <span class="net-name muted">Browser CDP</span>
273
+ <span class="net-ip">18800</span>
274
+ </div>
275
+ </div>
276
+
277
+ <div class="glass-panel" id="model-routing-panel">
278
+ <div class="panel-label">MODEL ROUTING</div>
279
+ <div class="model-toggle" id="model-toggle">
280
+ <select class="model-toggle-select" id="model-toggle-spider" data-model="spider">
281
+ <option value="" disabled selected>Spider ▾</option>
282
+ <option value="spider-gemma4">Gemma 4 31B Uncensored</option>
283
+ <option value="spider-qwen35">Qwen 3.5 35B</option>
284
+ <option value="spider-qwen35-uncen">Qwen 3.5 Uncensored</option>
285
+ <option value="spider-qwen36">Qwen 3.6 35B</option>
286
+ </select>
287
+ <button class="model-toggle-btn" data-model="redsand">CoreWeave</button>
288
+ <button class="model-toggle-btn" data-model="coreweave2">Coreweave2</button>
289
+ <button class="model-toggle-btn" data-model="api">API</button>
290
+ </div>
291
+ <div class="model-status" id="model-status">loading…</div>
292
+ </div>
293
+
294
+ <!-- Scheduling Panel -->
295
+ <div class="glass-panel scheduling-panel" id="scheduling-panel">
296
+ <div class="panel-label">
297
+ SCHEDULING
298
+ <span class="schedule-count" id="schedule-count"></span>
299
+ </div>
300
+ <div class="schedule-list" id="schedule-list">
301
+ <div class="schedule-empty" id="schedule-empty">
302
+ <div class="schedule-empty-icon">
303
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
304
+ <circle cx="12" cy="12" r="10" />
305
+ <polyline points="12 6 12 12 16 14" />
306
+ </svg>
307
+ </div>
308
+ <div class="schedule-empty-text">No scheduled tasks</div>
309
+ </div>
310
+ </div>
311
+ <button class="schedule-add-btn" id="schedule-add-btn" title="Add a scheduled task">
312
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
313
+ <circle cx="12" cy="12" r="10" />
314
+ <path d="M12 8v8M8 12h8" />
315
+ </svg>
316
+ <span>Add Schedule</span>
317
+ </button>
318
+ </div>
319
+
320
+ </aside>
321
+
322
+ <!-- Response waterfall area -->
323
+ <main class="response-area" id="response-area"></main>
324
+
325
+ <!-- Floating prompt bar -->
326
+ <footer class="prompt-wrap">
327
+ <div class="prompt-bar" id="prompt-bar">
328
+ <!-- Row 1: icon + input + send -->
329
+ <div class="prompt-row-main">
330
+ <div class="prompt-icon">
331
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none">
332
+ <path
333
+ d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"
334
+ stroke="currentColor"
335
+ stroke-width="1.5"
336
+ stroke-linecap="round"
337
+ stroke-linejoin="round"
338
+ />
339
+ </svg>
340
+ </div>
341
+ <textarea
342
+ id="prompt-input"
343
+ placeholder="Ask Symi anything…"
344
+ autocomplete="off"
345
+ spellcheck="false"
346
+ rows="1"
347
+ ></textarea>
348
+ <button class="send-btn" id="send-btn" title="Send">
349
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none">
350
+ <path d="M22 2L11 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
351
+ <path
352
+ d="M22 2L15 22 11 13 2 9l20-7z"
353
+ stroke="currentColor"
354
+ stroke-width="2"
355
+ stroke-linecap="round"
356
+ stroke-linejoin="round"
357
+ />
358
+ </svg>
359
+ </button>
360
+ </div>
361
+
362
+ <!-- Row 2: action buttons (right-aligned) -->
363
+ <div class="prompt-row-actions">
364
+ <button class="history-btn" id="history-btn" title="Browse previous sessions">
365
+ <svg width="13" height="13" viewBox="0 0 24 24" fill="none">
366
+ <circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="2" />
367
+ <path d="M12 7v5l3 3" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
368
+ </svg>
369
+ <span class="history-btn-label">History</span>
370
+ </button>
371
+
372
+ <!-- Stop button — shown while AI is responding, hidden otherwise -->
373
+ <button class="stop-btn" id="stop-btn" title="Stop the current response">
374
+ <svg width="13" height="13" viewBox="0 0 24 24" fill="none">
375
+ <rect x="4" y="4" width="16" height="16" rx="2" fill="currentColor" opacity="0.85" />
376
+ </svg>
377
+ <span class="stop-btn-label">Stop</span>
378
+ </button>
379
+
380
+ <!-- Queue button — replaces New Session while AI is responding -->
381
+ <button
382
+ class="queue-btn"
383
+ id="queue-btn"
384
+ title="Queue this message — sends automatically once Symi finishes"
385
+ >
386
+ <svg width="13" height="13" viewBox="0 0 24 24" fill="none">
387
+ <path
388
+ d="M3 6h18M3 12h12M3 18h8"
389
+ stroke="currentColor"
390
+ stroke-width="2"
391
+ stroke-linecap="round"
392
+ />
393
+ </svg>
394
+ <span class="queue-btn-label">Queue ↵</span>
395
+ <span class="queue-cancel-x" id="queue-cancel-x" title="Cancel queued message">✕</span>
396
+ </button>
397
+
398
+ <button
399
+ class="new-session-btn"
400
+ id="new-session-btn"
401
+ title="New session — clears conversation and starts fresh"
402
+ >
403
+ <svg width="13" height="13" viewBox="0 0 24 24" fill="none">
404
+ <path
405
+ d="M11 4H7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-4"
406
+ stroke="currentColor"
407
+ stroke-width="2"
408
+ stroke-linecap="round"
409
+ />
410
+ <path
411
+ d="M18.5 2.5a2.121 2.121 0 0 1 3 3L13 14l-4 1 1-4 8.5-8.5z"
412
+ stroke="currentColor"
413
+ stroke-width="2"
414
+ stroke-linecap="round"
415
+ stroke-linejoin="round"
416
+ />
417
+ </svg>
418
+ <span class="new-session-label">New Session</span>
419
+ </button>
420
+ </div>
421
+ </div>
422
+ </footer>
423
+
424
+ <!-- ── Menu Trigger ──────────────────────────────────────────────── -->
425
+ <button
426
+ class="menu-trigger"
427
+ id="menu-trigger"
428
+ aria-label="Command menu"
429
+ title="Command Menu (M)"
430
+ >
431
+ <svg class="menu-icon-grid" width="17" height="17" viewBox="0 0 18 18" fill="none">
432
+ <circle cx="3" cy="3" r="1.6" fill="currentColor" />
433
+ <circle cx="9" cy="3" r="1.6" fill="currentColor" />
434
+ <circle cx="15" cy="3" r="1.6" fill="currentColor" />
435
+ <circle cx="3" cy="9" r="1.6" fill="currentColor" />
436
+ <circle cx="9" cy="9" r="1.6" fill="currentColor" />
437
+ <circle cx="15" cy="9" r="1.6" fill="currentColor" />
438
+ <circle cx="3" cy="15" r="1.6" fill="currentColor" />
439
+ <circle cx="9" cy="15" r="1.6" fill="currentColor" />
440
+ <circle cx="15" cy="15" r="1.6" fill="currentColor" />
441
+ </svg>
442
+ <svg class="menu-icon-close" width="17" height="17" viewBox="0 0 18 18" fill="none">
443
+ <path
444
+ d="M2 2l14 14M16 2 2 16"
445
+ stroke="currentColor"
446
+ stroke-width="2.2"
447
+ stroke-linecap="round"
448
+ />
449
+ </svg>
450
+ </button>
451
+
452
+ <!-- ── Command Overlay ────────────────────────────────────────────── -->
453
+ <div class="cmd-overlay" id="cmd-overlay" aria-hidden="true">
454
+ <div class="cmd-backdrop" id="cmd-backdrop"></div>
455
+ <div class="cmd-shell">
456
+ <!-- Header bar -->
457
+ <div class="cmd-header">
458
+ <div class="cmd-brand">
459
+ <span class="cmd-brand-glyph">◈</span>
460
+ <span class="cmd-brand-name">SYMI</span>
461
+ <span class="cmd-brand-sep">/</span>
462
+ <span class="cmd-brand-sub">COMMAND CENTER</span>
463
+ </div>
464
+ <div class="cmd-esc-hint">Press <kbd class="cmd-kbd">ESC</kbd> to close</div>
465
+ </div>
466
+
467
+ <!-- 5-group command grid -->
468
+ <div class="cmd-grid">
469
+ <!-- ── CHAT ──────────────────────────────────────────────── -->
470
+ <div class="cmd-group cmd-group--chat">
471
+ <div class="cmd-group-hd">
472
+ <svg class="cmd-group-svg" viewBox="0 0 24 24" fill="none">
473
+ <path
474
+ d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"
475
+ stroke="currentColor"
476
+ stroke-width="1.5"
477
+ stroke-linecap="round"
478
+ stroke-linejoin="round"
479
+ />
480
+ </svg>
481
+ <span class="cmd-group-label">CHAT</span>
482
+ </div>
483
+ <div class="cmd-items">
484
+ <a class="cmd-item" href="#" data-href="#chat">
485
+ <span class="cmd-item-icon">◈</span>
486
+ <div class="cmd-item-body">
487
+ <span class="cmd-item-name">Chat</span>
488
+ <span class="cmd-item-desc">Main conversation</span>
489
+ </div>
490
+ <span class="cmd-item-badge">ACTIVE</span>
491
+ </a>
492
+ </div>
493
+ </div>
494
+
495
+ <!-- ── CONTROL ───────────────────────────────────────────── -->
496
+ <div class="cmd-group cmd-group--control">
497
+ <div class="cmd-group-hd">
498
+ <svg class="cmd-group-svg" viewBox="0 0 24 24" fill="none">
499
+ <rect
500
+ x="3"
501
+ y="3"
502
+ width="7"
503
+ height="7"
504
+ rx="1.5"
505
+ stroke="currentColor"
506
+ stroke-width="1.5"
507
+ />
508
+ <rect
509
+ x="14"
510
+ y="3"
511
+ width="7"
512
+ height="7"
513
+ rx="1.5"
514
+ stroke="currentColor"
515
+ stroke-width="1.5"
516
+ />
517
+ <rect
518
+ x="3"
519
+ y="14"
520
+ width="7"
521
+ height="7"
522
+ rx="1.5"
523
+ stroke="currentColor"
524
+ stroke-width="1.5"
525
+ />
526
+ <rect
527
+ x="14"
528
+ y="14"
529
+ width="7"
530
+ height="7"
531
+ rx="1.5"
532
+ stroke="currentColor"
533
+ stroke-width="1.5"
534
+ />
535
+ </svg>
536
+ <span class="cmd-group-label">CONTROL</span>
537
+ </div>
538
+ <div class="cmd-items cmd-items--grid">
539
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/overview">
540
+ <span class="cmd-item-icon">⊙</span>
541
+ <div class="cmd-item-body">
542
+ <span class="cmd-item-name">Overview</span
543
+ ><span class="cmd-item-desc">System overview</span>
544
+ </div>
545
+ </a>
546
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/channels">
547
+ <span class="cmd-item-icon">⊞</span>
548
+ <div class="cmd-item-body">
549
+ <span class="cmd-item-name">Channels</span
550
+ ><span class="cmd-item-desc">Messaging channels</span>
551
+ </div>
552
+ </a>
553
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/instances">
554
+ <span class="cmd-item-icon">⊟</span>
555
+ <div class="cmd-item-body">
556
+ <span class="cmd-item-name">Instances</span
557
+ ><span class="cmd-item-desc">AI instances</span>
558
+ </div>
559
+ </a>
560
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/sessions">
561
+ <span class="cmd-item-icon">≋</span>
562
+ <div class="cmd-item-body">
563
+ <span class="cmd-item-name">Sessions</span
564
+ ><span class="cmd-item-desc">Active sessions</span>
565
+ </div>
566
+ </a>
567
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/usage">
568
+ <span class="cmd-item-icon">▲</span>
569
+ <div class="cmd-item-body">
570
+ <span class="cmd-item-name">Usage</span
571
+ ><span class="cmd-item-desc">Tokens &amp; costs</span>
572
+ </div>
573
+ </a>
574
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/cron">
575
+ <span class="cmd-item-icon">◷</span>
576
+ <div class="cmd-item-body">
577
+ <span class="cmd-item-name">Cron Jobs</span
578
+ ><span class="cmd-item-desc">Scheduled tasks</span>
579
+ </div>
580
+ </a>
581
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/tasks">
582
+ <span class="cmd-item-icon">▣</span>
583
+ <div class="cmd-item-body">
584
+ <span class="cmd-item-name">Background Tasks</span
585
+ ><span class="cmd-item-desc">Detached long-running jobs</span>
586
+ </div>
587
+ </a>
588
+ </div>
589
+ </div>
590
+
591
+ <!-- ── AGENT ─────────────────────────────────────────────── -->
592
+ <div class="cmd-group cmd-group--agent">
593
+ <div class="cmd-group-hd">
594
+ <svg class="cmd-group-svg" viewBox="0 0 24 24" fill="none">
595
+ <circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="1.5" />
596
+ <path
597
+ d="M12 2v2M12 20v2M2 12h2M20 12h2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"
598
+ stroke="currentColor"
599
+ stroke-width="1.5"
600
+ stroke-linecap="round"
601
+ />
602
+ </svg>
603
+ <span class="cmd-group-label">AGENT</span>
604
+ </div>
605
+ <div class="cmd-items">
606
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/agents">
607
+ <span class="cmd-item-icon">◈</span>
608
+ <div class="cmd-item-body">
609
+ <span class="cmd-item-name">Agents</span
610
+ ><span class="cmd-item-desc">Agent management</span>
611
+ </div>
612
+ </a>
613
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/skills">
614
+ <span class="cmd-item-icon">⚡</span>
615
+ <div class="cmd-item-body">
616
+ <span class="cmd-item-name">Skills</span
617
+ ><span class="cmd-item-desc">Agent capabilities</span>
618
+ </div>
619
+ </a>
620
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/nodes">
621
+ <span class="cmd-item-icon">⬡</span>
622
+ <div class="cmd-item-body">
623
+ <span class="cmd-item-name">Nodes</span
624
+ ><span class="cmd-item-desc">Connected devices</span>
625
+ </div>
626
+ </a>
627
+ </div>
628
+ </div>
629
+
630
+ <!-- ── SETTINGS ──────────────────────────────────────────── -->
631
+ <div class="cmd-group cmd-group--settings">
632
+ <div class="cmd-group-hd">
633
+ <svg class="cmd-group-svg" viewBox="0 0 24 24" fill="none">
634
+ <circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="1.5" />
635
+ <path
636
+ d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"
637
+ stroke="currentColor"
638
+ stroke-width="1.5"
639
+ />
640
+ </svg>
641
+ <span class="cmd-group-label">SETTINGS</span>
642
+ </div>
643
+ <div class="cmd-items">
644
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/config">
645
+ <span class="cmd-item-icon">⚙</span>
646
+ <div class="cmd-item-body">
647
+ <span class="cmd-item-name">Config</span
648
+ ><span class="cmd-item-desc">System configuration</span>
649
+ </div>
650
+ </a>
651
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/debug">
652
+ <span class="cmd-item-icon">⬢</span>
653
+ <div class="cmd-item-body">
654
+ <span class="cmd-item-name">Debug</span
655
+ ><span class="cmd-item-desc">Debug console</span>
656
+ </div>
657
+ </a>
658
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/tools">
659
+ <span class="cmd-item-icon">▤</span>
660
+ <div class="cmd-item-body">
661
+ <span class="cmd-item-name">Agent Tools</span
662
+ ><span class="cmd-item-desc">Available tools + credential status</span>
663
+ </div>
664
+ </a>
665
+ <a class="cmd-item" href="#" data-href="http://127.0.0.1:18789/logs">
666
+ <span class="cmd-item-icon">≡</span>
667
+ <div class="cmd-item-body">
668
+ <span class="cmd-item-name">Logs</span
669
+ ><span class="cmd-item-desc">System logs</span>
670
+ </div>
671
+ </a>
672
+ </div>
673
+ </div>
674
+
675
+ <!-- ── RESOURCES ─────────────────────────────────────────── -->
676
+ <div class="cmd-group cmd-group--resources">
677
+ <div class="cmd-group-hd">
678
+ <svg class="cmd-group-svg" viewBox="0 0 24 24" fill="none">
679
+ <path
680
+ d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"
681
+ stroke="currentColor"
682
+ stroke-width="1.5"
683
+ stroke-linecap="round"
684
+ />
685
+ <path
686
+ d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"
687
+ stroke="currentColor"
688
+ stroke-width="1.5"
689
+ stroke-linecap="round"
690
+ />
691
+ </svg>
692
+ <span class="cmd-group-label">RESOURCES</span>
693
+ </div>
694
+ <div class="cmd-items">
695
+ <a class="cmd-item" href="#" data-href="https://docs.symi.ai/">
696
+ <span class="cmd-item-icon">◻</span>
697
+ <div class="cmd-item-body">
698
+ <span class="cmd-item-name">Docs</span
699
+ ><span class="cmd-item-desc">Official documentation</span>
700
+ </div>
701
+ </a>
702
+ </div>
703
+ </div>
704
+ </div>
705
+ <!-- /cmd-grid -->
706
+ </div>
707
+ <!-- /cmd-shell -->
708
+ </div>
709
+ <!-- /cmd-overlay -->
710
+
711
+ <!-- Standard UI toggle removed — glass UI is served directly from gateway -->
712
+
713
+ <!-- ── Page Navigation Overlay ──────────────────────────────────── -->
714
+ <div class="page-overlay" id="page-overlay" aria-hidden="true">
715
+ <div class="page-overlay-header">
716
+ <button class="page-back-btn" id="page-back-btn" title="Back to menu">
717
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
718
+ <path
719
+ d="M19 12H5M5 12l7-7M5 12l7 7"
720
+ stroke="currentColor"
721
+ stroke-width="2"
722
+ stroke-linecap="round"
723
+ stroke-linejoin="round"
724
+ />
725
+ </svg>
726
+ <span>Menu</span>
727
+ </button>
728
+ <span class="page-overlay-title" id="page-overlay-title"></span>
729
+ <a
730
+ class="page-popout-btn"
731
+ id="page-popout-btn"
732
+ href="#"
733
+ target="_blank"
734
+ title="Open in new tab"
735
+ rel="noopener"
736
+ >
737
+ <svg width="13" height="13" viewBox="0 0 24 24" fill="none">
738
+ <path
739
+ d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"
740
+ stroke="currentColor"
741
+ stroke-width="2"
742
+ stroke-linecap="round"
743
+ />
744
+ <path
745
+ d="M15 3h6v6M10 14L21 3"
746
+ stroke="currentColor"
747
+ stroke-width="2"
748
+ stroke-linecap="round"
749
+ stroke-linejoin="round"
750
+ />
751
+ </svg>
752
+ Pop out
753
+ </a>
754
+ </div>
755
+ <iframe
756
+ class="page-overlay-frame"
757
+ id="page-overlay-frame"
758
+ src=""
759
+ title="Page view"
760
+ allowfullscreen
761
+ ></iframe>
762
+ </div>
763
+
764
+ <!-- ── History Drawer ───────────────────────────────────────────── -->
765
+ <div class="history-overlay" id="history-overlay"></div>
766
+ <div class="history-drawer" id="history-drawer" aria-hidden="true">
767
+ <div class="history-drawer-header">
768
+ <div class="history-drawer-title">
769
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
770
+ <circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="2" />
771
+ <path d="M12 7v5l3 3" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
772
+ </svg>
773
+ CHAT HISTORY
774
+ </div>
775
+ <button class="history-close-btn" id="history-close-btn" title="Close (Esc)">✕</button>
776
+ </div>
777
+ <div class="history-drawer-search">
778
+ <input
779
+ type="search"
780
+ id="history-search-input"
781
+ class="history-search-input"
782
+ placeholder="Search across all sessions…"
783
+ autocomplete="off"
784
+ spellcheck="false"
785
+ />
786
+ <button class="history-search-clear" id="history-search-clear" title="Clear" hidden>✕</button>
787
+ </div>
788
+ <div class="history-drawer-body" id="history-drawer-body">
789
+ <div class="history-loading">Loading sessions…</div>
790
+ </div>
791
+ </div>
792
+
793
+ <!-- ── Session archive toast ─────────────────────────────────────── -->
794
+ <div class="session-archive-toast" id="session-archive-toast">
795
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none">
796
+ <circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="2" />
797
+ <path d="M12 7v5l3 3" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
798
+ </svg>
799
+ Session archived — <span id="session-archive-link">View history ↗</span>
800
+ </div>
801
+
802
+ <!-- ── Connection Modal ──────────────────────────────────────────────── -->
803
+ <div class="conn-modal-overlay" id="conn-modal-overlay" aria-hidden="true">
804
+ <div class="conn-modal" id="conn-modal">
805
+ <div class="conn-modal-header">
806
+ <div class="conn-modal-icon" id="conn-modal-icon"></div>
807
+ <div class="conn-modal-title" id="conn-modal-title">Channel</div>
808
+ <button class="conn-modal-close" id="conn-modal-close" title="Close">
809
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
810
+ <path
811
+ d="M18 6L6 18M6 6l12 12"
812
+ stroke="currentColor"
813
+ stroke-width="2"
814
+ stroke-linecap="round"
815
+ />
816
+ </svg>
817
+ </button>
818
+ </div>
819
+ <div class="conn-modal-body" id="conn-modal-body"></div>
820
+ <div class="conn-modal-footer" id="conn-modal-footer">
821
+ <button class="conn-modal-docs" id="conn-modal-docs" type="button">
822
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none">
823
+ <path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20" stroke="currentColor" stroke-width="2" />
824
+ <path
825
+ d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"
826
+ stroke="currentColor"
827
+ stroke-width="2"
828
+ />
829
+ </svg>
830
+ View Documentation
831
+ </button>
832
+ </div>
833
+ </div>
834
+ </div>
835
+
836
+ <!-- ── Docs Viewer Modal (scrollable markdown viewer) ─────────────────── -->
837
+ <div class="docs-viewer-overlay" id="docs-viewer-overlay" aria-hidden="true">
838
+ <div class="docs-viewer" id="docs-viewer" role="dialog" aria-modal="true">
839
+ <div class="docs-viewer-header">
840
+ <div class="docs-viewer-title" id="docs-viewer-title">Documentation</div>
841
+ <button class="docs-viewer-close" id="docs-viewer-close" title="Close" type="button">
842
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none">
843
+ <path
844
+ d="M18 6L6 18M6 6l12 12"
845
+ stroke="currentColor"
846
+ stroke-width="2"
847
+ stroke-linecap="round"
848
+ />
849
+ </svg>
850
+ </button>
851
+ </div>
852
+ <div class="docs-viewer-body" id="docs-viewer-body">
853
+ <p class="docs-viewer-loading">Loading documentation…</p>
854
+ </div>
855
+ </div>
856
+ </div>
857
+
858
+ <!-- ── Subagent Spawn Modal ──────────────────────────────────────────── -->
859
+ <div class="subagent-modal-overlay" id="subagent-modal-overlay" aria-hidden="true">
860
+ <div class="subagent-modal" id="subagent-modal">
861
+ <div class="subagent-modal-header">
862
+ <div class="subagent-modal-icon">
863
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
864
+ <circle cx="12" cy="12" r="3" />
865
+ <path
866
+ d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"
867
+ />
868
+ </svg>
869
+ </div>
870
+ <div class="subagent-modal-title">Spawn Subagent</div>
871
+ <button class="subagent-modal-close" id="subagent-modal-close" title="Close">
872
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
873
+ <path
874
+ d="M18 6L6 18M6 6l12 12"
875
+ stroke="currentColor"
876
+ stroke-width="2"
877
+ stroke-linecap="round"
878
+ />
879
+ </svg>
880
+ </button>
881
+ </div>
882
+ <div class="subagent-modal-body">
883
+ <div class="subagent-form-group">
884
+ <label class="subagent-form-label" for="subagent-task">Task</label>
885
+ <textarea
886
+ class="subagent-form-textarea"
887
+ id="subagent-task"
888
+ placeholder="Describe the task for the subagent..."
889
+ rows="3"
890
+ ></textarea>
891
+ </div>
892
+ <div class="subagent-form-group">
893
+ <label class="subagent-form-label" for="subagent-label">Label (optional)</label>
894
+ <input
895
+ type="text"
896
+ class="subagent-form-input"
897
+ id="subagent-label"
898
+ placeholder="e.g. Research Agent, Code Review..."
899
+ />
900
+ </div>
901
+ <div class="subagent-form-row">
902
+ <div class="subagent-form-group">
903
+ <label class="subagent-form-label" for="subagent-model">Model</label>
904
+ <select class="subagent-form-select" id="subagent-model">
905
+ <option value="">Default</option>
906
+ <option value="anthropic/claude-sonnet-4-6">Claude Sonnet 4.6</option>
907
+ <option value="ollama/gemma4:31b-128k">Gemma 4 31B 128K</option>
908
+ <option value="ollama/qwen2.5:32b">Qwen 2.5 32B</option>
909
+ </select>
910
+ </div>
911
+ <div class="subagent-form-group">
912
+ <label class="subagent-form-label" for="subagent-thinking">Thinking</label>
913
+ <select class="subagent-form-select" id="subagent-thinking">
914
+ <option value="">Default</option>
915
+ <option value="off">Off</option>
916
+ <option value="low">Low</option>
917
+ <option value="medium">Medium</option>
918
+ <option value="high">High</option>
919
+ </select>
920
+ </div>
921
+ </div>
922
+ </div>
923
+ <div class="subagent-modal-footer">
924
+ <button class="subagent-modal-cancel" id="subagent-modal-cancel">Cancel</button>
925
+ <button class="subagent-modal-submit" id="subagent-modal-submit">
926
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
927
+ <path d="M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z" />
928
+ </svg>
929
+ Spawn
930
+ </button>
931
+ </div>
932
+ </div>
933
+ </div>
934
+
935
+ <!-- ── Schedule Modal ──────────────────────────────────────────────── -->
936
+ <div class="schedule-modal-overlay" id="schedule-modal-overlay" aria-hidden="true">
937
+ <div class="schedule-modal" id="schedule-modal">
938
+ <div class="schedule-modal-header">
939
+ <div class="schedule-modal-icon">
940
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
941
+ <circle cx="12" cy="12" r="10" />
942
+ <polyline points="12 6 12 12 16 14" />
943
+ </svg>
944
+ </div>
945
+ <div class="schedule-modal-title">Add Schedule</div>
946
+ <button class="schedule-modal-close" id="schedule-modal-close" title="Close">
947
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
948
+ <path
949
+ d="M18 6L6 18M6 6l12 12"
950
+ stroke="currentColor"
951
+ stroke-width="2"
952
+ stroke-linecap="round"
953
+ />
954
+ </svg>
955
+ </button>
956
+ </div>
957
+ <div class="schedule-modal-body">
958
+ <div class="schedule-form-group">
959
+ <label class="schedule-form-label" for="schedule-name">Name</label>
960
+ <input
961
+ type="text"
962
+ class="schedule-form-input"
963
+ id="schedule-name"
964
+ placeholder="e.g. Daily Report, Weekly Backup..."
965
+ />
966
+ </div>
967
+ <div class="schedule-form-group">
968
+ <label class="schedule-form-label" for="schedule-task">Task</label>
969
+ <textarea
970
+ class="schedule-form-textarea"
971
+ id="schedule-task"
972
+ placeholder="Describe what should happen on this schedule..."
973
+ rows="3"
974
+ ></textarea>
975
+ </div>
976
+ <div class="schedule-form-group">
977
+ <label class="schedule-form-label">Run Every</label>
978
+ <div class="schedule-interval-grid">
979
+ <button type="button" class="schedule-interval-btn" data-interval="hourly">
980
+ <span class="schedule-interval-value">1</span
981
+ ><span class="schedule-interval-unit">Hour</span>
982
+ </button>
983
+ <button type="button" class="schedule-interval-btn" data-interval="daily">
984
+ <span class="schedule-interval-value">1</span
985
+ ><span class="schedule-interval-unit">Day</span>
986
+ </button>
987
+ <button type="button" class="schedule-interval-btn" data-interval="weekly">
988
+ <span class="schedule-interval-value">1</span
989
+ ><span class="schedule-interval-unit">Week</span>
990
+ </button>
991
+ <button type="button" class="schedule-interval-btn" data-interval="custom">
992
+ <span class="schedule-interval-value">...</span
993
+ ><span class="schedule-interval-unit">Custom</span>
994
+ </button>
995
+ </div>
996
+ </div>
997
+ <div class="schedule-custom-options" id="schedule-custom-options" style="display: none">
998
+ <div class="schedule-form-row">
999
+ <div class="schedule-form-group">
1000
+ <label class="schedule-form-label" for="schedule-interval-value">Every</label>
1001
+ <input
1002
+ type="number"
1003
+ class="schedule-form-input"
1004
+ id="schedule-interval-value"
1005
+ min="1"
1006
+ value="1"
1007
+ />
1008
+ </div>
1009
+ <div class="schedule-form-group">
1010
+ <label class="schedule-form-label" for="schedule-interval-unit">Period</label>
1011
+ <select class="schedule-form-select" id="schedule-interval-unit">
1012
+ <option value="minutes">Minutes</option>
1013
+ <option value="hours">Hours</option>
1014
+ <option value="days" selected>Days</option>
1015
+ <option value="weeks">Weeks</option>
1016
+ </select>
1017
+ </div>
1018
+ </div>
1019
+ </div>
1020
+ </div>
1021
+ <div class="schedule-modal-footer">
1022
+ <button class="schedule-modal-cancel" id="schedule-modal-cancel">Cancel</button>
1023
+ <button class="schedule-modal-submit" id="schedule-modal-submit">
1024
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1025
+ <circle cx="12" cy="12" r="10" />
1026
+ <polyline points="12 6 12 12 16 14" />
1027
+ </svg>
1028
+ Schedule
1029
+ </button>
1030
+ </div>
1031
+ </div>
1032
+ </div>
1033
+
1034
+ <script src="/vendor/marked.min.js"></script>
1035
+ <script src="/vendor/highlight.min.js"></script>
1036
+ <script src="js/metrics.js"></script>
1037
+ <script src="js/gateway.js"></script>
1038
+ <script src="js/render.js"></script>
1039
+ <script src="js/app.js"></script>
1040
+ <script src="js/settings.js"></script>
1041
+ <script src="js/menu.js"></script>
1042
+ <script src="js/history.js"></script>
1043
+ <script src="js/connections.js"></script>
1044
+ <script src="js/subagents.js"></script>
1045
+ <script src="js/scheduling.js"></script>
1046
+ <script src="js/models.js"></script>
1047
+ <script src="js/slash-autocomplete.js"></script>
1048
+ </body>
1049
+ </html>