claudeck 1.0.0

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 (157) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/cli.js +2 -0
  4. package/config/agent-chains.json +16 -0
  5. package/config/agent-dags.json +16 -0
  6. package/config/agents.json +46 -0
  7. package/config/bot-prompt.json +3 -0
  8. package/config/folders.json +66 -0
  9. package/config/prompts.json +92 -0
  10. package/config/repos.json +86 -0
  11. package/config/telegram-config.json +17 -0
  12. package/config/workflows.json +90 -0
  13. package/db.js +1198 -0
  14. package/package.json +55 -0
  15. package/plugins/claude-editor/client.css +171 -0
  16. package/plugins/claude-editor/client.js +183 -0
  17. package/plugins/event-stream/client.css +207 -0
  18. package/plugins/event-stream/client.js +271 -0
  19. package/plugins/linear/client.css +345 -0
  20. package/plugins/linear/client.js +380 -0
  21. package/plugins/linear/config.json +5 -0
  22. package/plugins/linear/server.js +312 -0
  23. package/plugins/repos/client.css +549 -0
  24. package/plugins/repos/client.js +663 -0
  25. package/plugins/repos/server.js +232 -0
  26. package/plugins/sudoku/client.css +196 -0
  27. package/plugins/sudoku/client.js +329 -0
  28. package/plugins/tasks/client.css +414 -0
  29. package/plugins/tasks/client.js +394 -0
  30. package/plugins/tasks/server.js +116 -0
  31. package/plugins/tic-tac-toe/client.css +167 -0
  32. package/plugins/tic-tac-toe/client.js +241 -0
  33. package/public/css/core/components.css +232 -0
  34. package/public/css/core/layout.css +330 -0
  35. package/public/css/core/print.css +18 -0
  36. package/public/css/core/reset.css +36 -0
  37. package/public/css/core/responsive.css +378 -0
  38. package/public/css/core/theme.css +116 -0
  39. package/public/css/core/variables.css +93 -0
  40. package/public/css/features/agent-monitor.css +297 -0
  41. package/public/css/features/agent-sidebar.css +525 -0
  42. package/public/css/features/agents.css +996 -0
  43. package/public/css/features/analytics.css +181 -0
  44. package/public/css/features/background-sessions.css +321 -0
  45. package/public/css/features/cost-dashboard.css +168 -0
  46. package/public/css/features/home.css +313 -0
  47. package/public/css/features/retro-terminal.css +88 -0
  48. package/public/css/features/telegram.css +127 -0
  49. package/public/css/features/tour.css +148 -0
  50. package/public/css/features/voice-input.css +60 -0
  51. package/public/css/features/welcome.css +241 -0
  52. package/public/css/panels/assistant-bot.css +442 -0
  53. package/public/css/panels/dev-docs.css +292 -0
  54. package/public/css/panels/file-explorer.css +322 -0
  55. package/public/css/panels/git-panel.css +221 -0
  56. package/public/css/panels/mcp-manager.css +199 -0
  57. package/public/css/panels/tips-feed.css +353 -0
  58. package/public/css/ui/commands.css +273 -0
  59. package/public/css/ui/context-gauge.css +76 -0
  60. package/public/css/ui/file-picker.css +69 -0
  61. package/public/css/ui/image-attachments.css +106 -0
  62. package/public/css/ui/messages.css +884 -0
  63. package/public/css/ui/modals.css +122 -0
  64. package/public/css/ui/parallel.css +217 -0
  65. package/public/css/ui/permissions.css +110 -0
  66. package/public/css/ui/right-panel.css +481 -0
  67. package/public/css/ui/sessions.css +689 -0
  68. package/public/css/ui/status-bar.css +425 -0
  69. package/public/css/ui/toolbox.css +206 -0
  70. package/public/data/tips.json +218 -0
  71. package/public/icons/favicon.png +0 -0
  72. package/public/icons/icon-192.png +0 -0
  73. package/public/icons/icon-512.png +0 -0
  74. package/public/icons/whaly.png +0 -0
  75. package/public/index.html +1140 -0
  76. package/public/js/core/api.js +591 -0
  77. package/public/js/core/constants.js +3 -0
  78. package/public/js/core/dom.js +270 -0
  79. package/public/js/core/events.js +10 -0
  80. package/public/js/core/plugin-loader.js +153 -0
  81. package/public/js/core/store.js +39 -0
  82. package/public/js/core/utils.js +25 -0
  83. package/public/js/core/ws.js +64 -0
  84. package/public/js/features/agent-monitor.js +222 -0
  85. package/public/js/features/agents.js +1209 -0
  86. package/public/js/features/analytics.js +397 -0
  87. package/public/js/features/attachments.js +251 -0
  88. package/public/js/features/background-sessions.js +475 -0
  89. package/public/js/features/chat.js +589 -0
  90. package/public/js/features/cost-dashboard.js +152 -0
  91. package/public/js/features/dag-editor.js +399 -0
  92. package/public/js/features/easter-egg.js +46 -0
  93. package/public/js/features/home.js +270 -0
  94. package/public/js/features/projects.js +372 -0
  95. package/public/js/features/prompts.js +228 -0
  96. package/public/js/features/sessions.js +332 -0
  97. package/public/js/features/telegram.js +131 -0
  98. package/public/js/features/tour.js +210 -0
  99. package/public/js/features/voice-input.js +185 -0
  100. package/public/js/features/welcome.js +43 -0
  101. package/public/js/features/workflows.js +277 -0
  102. package/public/js/main.js +51 -0
  103. package/public/js/panels/assistant-bot.js +445 -0
  104. package/public/js/panels/dev-docs.js +380 -0
  105. package/public/js/panels/file-explorer.js +486 -0
  106. package/public/js/panels/git-panel.js +285 -0
  107. package/public/js/panels/mcp-manager.js +311 -0
  108. package/public/js/panels/tips-feed.js +303 -0
  109. package/public/js/ui/commands.js +114 -0
  110. package/public/js/ui/context-gauge.js +100 -0
  111. package/public/js/ui/diff.js +124 -0
  112. package/public/js/ui/disabled-tools.js +36 -0
  113. package/public/js/ui/export.js +74 -0
  114. package/public/js/ui/formatting.js +206 -0
  115. package/public/js/ui/header-dropdowns.js +72 -0
  116. package/public/js/ui/input-meta.js +71 -0
  117. package/public/js/ui/max-turns.js +21 -0
  118. package/public/js/ui/messages.js +387 -0
  119. package/public/js/ui/model-selector.js +20 -0
  120. package/public/js/ui/notifications.js +232 -0
  121. package/public/js/ui/parallel.js +176 -0
  122. package/public/js/ui/permissions.js +168 -0
  123. package/public/js/ui/right-panel.js +173 -0
  124. package/public/js/ui/shortcuts.js +143 -0
  125. package/public/js/ui/sidebar-toggle.js +29 -0
  126. package/public/js/ui/status-bar.js +172 -0
  127. package/public/js/ui/tab-sdk.js +623 -0
  128. package/public/js/ui/theme.js +38 -0
  129. package/public/manifest.json +13 -0
  130. package/public/offline.html +190 -0
  131. package/public/style.css +42 -0
  132. package/public/sw.js +91 -0
  133. package/server/agent-loop.js +385 -0
  134. package/server/dag-executor.js +265 -0
  135. package/server/orchestrator.js +514 -0
  136. package/server/paths.js +61 -0
  137. package/server/plugin-mount.js +56 -0
  138. package/server/push-sender.js +31 -0
  139. package/server/routes/agents.js +294 -0
  140. package/server/routes/bot.js +45 -0
  141. package/server/routes/exec.js +35 -0
  142. package/server/routes/files.js +218 -0
  143. package/server/routes/mcp.js +82 -0
  144. package/server/routes/messages.js +36 -0
  145. package/server/routes/notifications.js +37 -0
  146. package/server/routes/projects.js +207 -0
  147. package/server/routes/prompts.js +53 -0
  148. package/server/routes/sessions.js +103 -0
  149. package/server/routes/stats.js +143 -0
  150. package/server/routes/telegram.js +71 -0
  151. package/server/routes/tips.js +135 -0
  152. package/server/routes/workflows.js +81 -0
  153. package/server/summarizer.js +55 -0
  154. package/server/telegram-poller.js +205 -0
  155. package/server/telegram-sender.js +304 -0
  156. package/server/ws-handler.js +926 -0
  157. package/server.js +179 -0
@@ -0,0 +1,996 @@
1
+ /* ── Agents ───────────────────────────────────────────── */
2
+
3
+ /* Agent card in panel */
4
+ .agent-card {
5
+ position: relative;
6
+ }
7
+
8
+ .agent-card .agent-icon {
9
+ display: inline-flex;
10
+ align-items: center;
11
+ margin-right: 4px;
12
+ color: var(--cyan, #56b6c2);
13
+ }
14
+
15
+ /* Card action buttons (edit/delete) */
16
+ .agent-card-actions {
17
+ position: absolute;
18
+ top: 6px;
19
+ right: 6px;
20
+ display: flex;
21
+ gap: 2px;
22
+ opacity: 0;
23
+ transition: opacity 0.15s;
24
+ }
25
+
26
+ .agent-card:hover .agent-card-actions {
27
+ opacity: 1;
28
+ }
29
+
30
+ .agent-card-edit,
31
+ .agent-card-delete {
32
+ background: none;
33
+ border: none;
34
+ color: var(--text-dim);
35
+ cursor: pointer;
36
+ width: 22px;
37
+ height: 22px;
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: center;
41
+ border-radius: var(--radius);
42
+ font-size: 14px;
43
+ line-height: 1;
44
+ transition: all 0.15s;
45
+ }
46
+
47
+ .agent-card-edit:hover {
48
+ color: var(--cyan, #56b6c2);
49
+ background: rgba(86, 182, 194, 0.1);
50
+ }
51
+
52
+ .agent-card-delete:hover {
53
+ color: var(--error);
54
+ background: rgba(237, 51, 59, 0.1);
55
+ }
56
+
57
+ /* Custom badge */
58
+ .agent-custom-badge {
59
+ font-size: 9px;
60
+ font-family: var(--font-mono);
61
+ font-weight: 600;
62
+ text-transform: uppercase;
63
+ letter-spacing: 0.5px;
64
+ color: var(--cyan, #56b6c2);
65
+ background: rgba(86, 182, 194, 0.1);
66
+ padding: 1px 5px;
67
+ border-radius: 8px;
68
+ margin-left: 6px;
69
+ vertical-align: middle;
70
+ }
71
+
72
+ /* Agent form row for side-by-side fields */
73
+ .agent-form-row {
74
+ display: flex;
75
+ gap: 12px;
76
+ }
77
+
78
+ .agent-form-field {
79
+ flex: 1;
80
+ }
81
+
82
+ .agent-form-field label {
83
+ display: block;
84
+ font-size: 10px;
85
+ font-weight: 600;
86
+ text-transform: uppercase;
87
+ letter-spacing: 0.08em;
88
+ color: var(--text-dim);
89
+ margin-bottom: 6px;
90
+ font-family: var(--font-display);
91
+ }
92
+
93
+ .agent-form-field input {
94
+ width: 100%;
95
+ margin-bottom: 14px;
96
+ }
97
+
98
+ /* Agent modal icon select */
99
+ #agent-form-icon {
100
+ width: 100%;
101
+ margin-bottom: 14px;
102
+ }
103
+
104
+ /* Agent header card in chat */
105
+ .agent-header {
106
+ background: var(--bg-secondary);
107
+ border: 1px solid var(--border);
108
+ border-left: 3px solid var(--cyan, #56b6c2);
109
+ border-radius: var(--radius);
110
+ padding: 0;
111
+ font-size: 13px;
112
+ overflow: hidden;
113
+ }
114
+
115
+ .agent-header-top {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 8px;
119
+ padding: 8px 14px;
120
+ background: rgba(86, 182, 194, 0.06);
121
+ border-bottom: 1px solid var(--border-subtle);
122
+ }
123
+
124
+ .agent-header-icon {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ color: var(--cyan, #56b6c2);
128
+ }
129
+
130
+ .agent-header-title {
131
+ font-family: var(--font-mono);
132
+ font-weight: 700;
133
+ font-size: 12px;
134
+ letter-spacing: 0.5px;
135
+ color: var(--cyan, #56b6c2);
136
+ text-transform: uppercase;
137
+ }
138
+
139
+ .agent-status-badge {
140
+ margin-left: auto;
141
+ font-family: var(--font-mono);
142
+ font-size: 10px;
143
+ font-weight: 600;
144
+ padding: 2px 8px;
145
+ border-radius: 10px;
146
+ letter-spacing: 0.3px;
147
+ text-transform: uppercase;
148
+ }
149
+
150
+ .agent-status-badge.running {
151
+ color: var(--cyan, #56b6c2);
152
+ background: rgba(86, 182, 194, 0.12);
153
+ animation: agentPulse 2s ease-in-out infinite;
154
+ }
155
+
156
+ .agent-status-badge.completed {
157
+ color: var(--success);
158
+ background: rgba(51, 209, 122, 0.12);
159
+ }
160
+
161
+ .agent-status-badge.error {
162
+ color: var(--error);
163
+ background: rgba(237, 51, 59, 0.12);
164
+ }
165
+
166
+ @keyframes agentPulse {
167
+ 0%, 100% { opacity: 1; }
168
+ 50% { opacity: 0.5; }
169
+ }
170
+
171
+ .agent-header-goal {
172
+ padding: 8px 14px;
173
+ font-size: 12px;
174
+ color: var(--text-secondary);
175
+ line-height: 1.5;
176
+ border-bottom: 1px solid var(--border-subtle);
177
+ }
178
+
179
+ .agent-header-stats {
180
+ display: flex;
181
+ align-items: center;
182
+ gap: 12px;
183
+ padding: 6px 14px;
184
+ font-family: var(--font-mono);
185
+ font-size: 11px;
186
+ color: var(--text-dim);
187
+ border-bottom: 1px solid var(--border-subtle);
188
+ }
189
+
190
+ .agent-stat-sep {
191
+ width: 1px;
192
+ height: 12px;
193
+ background: var(--border);
194
+ }
195
+
196
+ /* Activity log */
197
+ .agent-activity-log {
198
+ max-height: 150px;
199
+ overflow-y: auto;
200
+ padding: 6px 14px;
201
+ }
202
+
203
+ .agent-activity-log:empty {
204
+ display: none;
205
+ }
206
+
207
+ .agent-log-entry {
208
+ font-family: var(--font-mono);
209
+ font-size: 11px;
210
+ color: var(--text-dim);
211
+ padding: 2px 0;
212
+ white-space: nowrap;
213
+ overflow: hidden;
214
+ text-overflow: ellipsis;
215
+ }
216
+
217
+ .agent-log-entry::before {
218
+ content: "> ";
219
+ color: var(--cyan, #56b6c2);
220
+ }
221
+
222
+ .agent-log-action {
223
+ color: var(--text-secondary);
224
+ font-weight: 600;
225
+ }
226
+
227
+ /* Agent category in slash autocomplete */
228
+ .slash-autocomplete-item .cmd-category[data-cat="agent"] {
229
+ color: #56b6c2;
230
+ background: rgba(86, 182, 194, 0.1);
231
+ }
232
+
233
+ /* ── Section headers ── */
234
+ .agent-section-header {
235
+ font-family: var(--font-mono);
236
+ font-size: 10px;
237
+ font-weight: 700;
238
+ text-transform: uppercase;
239
+ letter-spacing: 0.1em;
240
+ color: var(--text-dim);
241
+ padding: 8px 12px 4px;
242
+ border-bottom: 1px solid var(--border-subtle);
243
+ margin-bottom: 4px;
244
+ }
245
+
246
+ /* ── Chain cards ── */
247
+ .chain-steps-preview {
248
+ display: flex;
249
+ align-items: center;
250
+ gap: 4px;
251
+ margin-top: 6px;
252
+ flex-wrap: wrap;
253
+ }
254
+
255
+ .chain-step-tag {
256
+ font-family: var(--font-mono);
257
+ font-size: 10px;
258
+ font-weight: 600;
259
+ color: var(--cyan, #56b6c2);
260
+ background: rgba(86, 182, 194, 0.08);
261
+ padding: 2px 6px;
262
+ border-radius: 4px;
263
+ white-space: nowrap;
264
+ }
265
+
266
+ .chain-arrow {
267
+ font-size: 11px;
268
+ color: var(--text-dim);
269
+ }
270
+
271
+ /* ── Chain modal ── */
272
+ .chain-agent-list {
273
+ display: flex;
274
+ flex-direction: column;
275
+ gap: 6px;
276
+ margin-bottom: 10px;
277
+ }
278
+
279
+ .chain-agent-row {
280
+ display: flex;
281
+ align-items: center;
282
+ gap: 6px;
283
+ }
284
+
285
+ .chain-agent-step {
286
+ font-family: var(--font-mono);
287
+ font-size: 11px;
288
+ font-weight: 700;
289
+ color: var(--cyan, #56b6c2);
290
+ width: 20px;
291
+ text-align: center;
292
+ flex-shrink: 0;
293
+ }
294
+
295
+ .chain-agent-select {
296
+ flex: 1;
297
+ padding: 6px 10px;
298
+ font-size: 12px;
299
+ }
300
+
301
+ .chain-agent-up,
302
+ .chain-agent-down,
303
+ .chain-agent-remove {
304
+ background: none;
305
+ border: 1px solid var(--border);
306
+ border-radius: var(--radius);
307
+ color: var(--text-dim);
308
+ cursor: pointer;
309
+ width: 24px;
310
+ height: 24px;
311
+ display: flex;
312
+ align-items: center;
313
+ justify-content: center;
314
+ font-size: 12px;
315
+ flex-shrink: 0;
316
+ transition: all 0.15s;
317
+ }
318
+
319
+ .chain-agent-up:hover,
320
+ .chain-agent-down:hover {
321
+ color: var(--cyan, #56b6c2);
322
+ border-color: var(--cyan, #56b6c2);
323
+ }
324
+
325
+ .chain-agent-remove:hover {
326
+ color: var(--error);
327
+ border-color: var(--error);
328
+ }
329
+
330
+ .chain-add-agent-btn {
331
+ background: none;
332
+ border: 1px dashed var(--border);
333
+ border-radius: var(--radius-md);
334
+ color: var(--text-dim);
335
+ font-size: 12px;
336
+ font-family: var(--font-sans);
337
+ padding: 6px 12px;
338
+ cursor: pointer;
339
+ width: 100%;
340
+ margin-bottom: 14px;
341
+ transition: all 0.15s;
342
+ }
343
+
344
+ .chain-add-agent-btn:hover {
345
+ border-color: var(--cyan, #56b6c2);
346
+ color: var(--cyan, #56b6c2);
347
+ }
348
+
349
+ /* ── Chain header in chat (execution visualization) ── */
350
+ .chain-header {
351
+ background: var(--bg-secondary);
352
+ border: 1px solid var(--border);
353
+ border-left: 3px solid var(--accent);
354
+ border-radius: var(--radius);
355
+ overflow: hidden;
356
+ font-size: 13px;
357
+ }
358
+
359
+ .chain-header-top {
360
+ display: flex;
361
+ align-items: center;
362
+ gap: 8px;
363
+ padding: 8px 14px;
364
+ background: rgba(198, 120, 221, 0.06);
365
+ border-bottom: 1px solid var(--border-subtle);
366
+ }
367
+
368
+ .chain-header-icon {
369
+ display: inline-flex;
370
+ align-items: center;
371
+ color: var(--accent);
372
+ }
373
+
374
+ .chain-header-title {
375
+ font-family: var(--font-mono);
376
+ font-weight: 700;
377
+ font-size: 12px;
378
+ letter-spacing: 0.5px;
379
+ color: var(--accent);
380
+ text-transform: uppercase;
381
+ }
382
+
383
+ /* Pipeline visualization */
384
+ .chain-pipeline {
385
+ padding: 10px 14px;
386
+ }
387
+
388
+ .chain-pipeline-step {
389
+ display: flex;
390
+ align-items: center;
391
+ gap: 8px;
392
+ padding: 6px 10px;
393
+ border-radius: var(--radius);
394
+ transition: background 0.2s;
395
+ }
396
+
397
+ .chain-pipeline-step.running {
398
+ background: rgba(86, 182, 194, 0.06);
399
+ }
400
+
401
+ .chain-pipeline-step.completed {
402
+ background: rgba(51, 209, 122, 0.06);
403
+ }
404
+
405
+ .chain-pipeline-step.error {
406
+ background: rgba(237, 51, 59, 0.06);
407
+ }
408
+
409
+ .chain-pipeline-num {
410
+ font-family: var(--font-mono);
411
+ font-size: 10px;
412
+ font-weight: 700;
413
+ width: 18px;
414
+ height: 18px;
415
+ border-radius: 50%;
416
+ display: flex;
417
+ align-items: center;
418
+ justify-content: center;
419
+ background: var(--bg-tertiary);
420
+ color: var(--text-dim);
421
+ flex-shrink: 0;
422
+ }
423
+
424
+ .chain-pipeline-step.running .chain-pipeline-num {
425
+ background: rgba(86, 182, 194, 0.15);
426
+ color: var(--cyan, #56b6c2);
427
+ }
428
+
429
+ .chain-pipeline-step.completed .chain-pipeline-num {
430
+ background: rgba(51, 209, 122, 0.15);
431
+ color: var(--success);
432
+ }
433
+
434
+ .chain-pipeline-step.error .chain-pipeline-num {
435
+ background: rgba(237, 51, 59, 0.15);
436
+ color: var(--error);
437
+ }
438
+
439
+ .chain-pipeline-name {
440
+ font-family: var(--font-mono);
441
+ font-size: 12px;
442
+ font-weight: 600;
443
+ color: var(--text-secondary);
444
+ flex: 1;
445
+ }
446
+
447
+ .chain-pipeline-status {
448
+ font-family: var(--font-mono);
449
+ font-size: 10px;
450
+ font-weight: 600;
451
+ text-transform: uppercase;
452
+ letter-spacing: 0.3px;
453
+ color: var(--text-dim);
454
+ padding: 2px 6px;
455
+ border-radius: 8px;
456
+ }
457
+
458
+ .chain-pipeline-status.running {
459
+ color: var(--cyan, #56b6c2);
460
+ background: rgba(86, 182, 194, 0.1);
461
+ animation: agentPulse 2s ease-in-out infinite;
462
+ }
463
+
464
+ .chain-pipeline-status.completed {
465
+ color: var(--success);
466
+ background: rgba(51, 209, 122, 0.1);
467
+ }
468
+
469
+ .chain-pipeline-status.error {
470
+ color: var(--error);
471
+ background: rgba(237, 51, 59, 0.1);
472
+ }
473
+
474
+ .chain-pipeline-connector {
475
+ width: 1px;
476
+ height: 8px;
477
+ background: var(--border);
478
+ margin-left: 19px;
479
+ }
480
+
481
+ /* ── Orchestrate card ── */
482
+ .orch-card {
483
+ border-left: 2px solid var(--user, #c678dd);
484
+ }
485
+
486
+ /* ── Orchestrator header in chat ── */
487
+ .orchestrator-header {
488
+ background: var(--bg-secondary);
489
+ border: 1px solid var(--border);
490
+ border-left: 3px solid var(--user, #c678dd);
491
+ border-radius: var(--radius);
492
+ overflow: hidden;
493
+ font-size: 13px;
494
+ }
495
+
496
+ .orch-header-top {
497
+ display: flex;
498
+ align-items: center;
499
+ gap: 8px;
500
+ padding: 8px 14px;
501
+ background: rgba(198, 120, 221, 0.06);
502
+ border-bottom: 1px solid var(--border-subtle);
503
+ }
504
+
505
+ .orch-header-icon {
506
+ display: inline-flex;
507
+ align-items: center;
508
+ color: var(--user, #c678dd);
509
+ }
510
+
511
+ .orch-header-title {
512
+ font-family: var(--font-mono);
513
+ font-weight: 700;
514
+ font-size: 12px;
515
+ letter-spacing: 0.5px;
516
+ color: var(--user, #c678dd);
517
+ text-transform: uppercase;
518
+ }
519
+
520
+ .orch-task {
521
+ padding: 8px 14px;
522
+ font-size: 12px;
523
+ color: var(--text-secondary);
524
+ line-height: 1.5;
525
+ border-bottom: 1px solid var(--border-subtle);
526
+ }
527
+
528
+ /* Dispatched agents list */
529
+ .orch-dispatches {
530
+ padding: 6px 14px;
531
+ }
532
+
533
+ .orch-dispatches:empty {
534
+ display: none;
535
+ }
536
+
537
+ .orch-dispatch-row {
538
+ display: flex;
539
+ align-items: center;
540
+ gap: 8px;
541
+ padding: 5px 8px;
542
+ border-radius: var(--radius);
543
+ transition: background 0.2s;
544
+ }
545
+
546
+ .orch-dispatch-row.running {
547
+ background: rgba(86, 182, 194, 0.06);
548
+ }
549
+
550
+ .orch-dispatch-row.completed {
551
+ background: rgba(51, 209, 122, 0.06);
552
+ }
553
+
554
+ .orch-dispatch-row.error {
555
+ background: rgba(237, 51, 59, 0.06);
556
+ }
557
+
558
+ .orch-dispatch-num {
559
+ font-family: var(--font-mono);
560
+ font-size: 10px;
561
+ font-weight: 700;
562
+ width: 18px;
563
+ height: 18px;
564
+ border-radius: 50%;
565
+ display: flex;
566
+ align-items: center;
567
+ justify-content: center;
568
+ background: var(--bg-tertiary);
569
+ color: var(--text-dim);
570
+ flex-shrink: 0;
571
+ }
572
+
573
+ .orch-dispatch-row.running .orch-dispatch-num {
574
+ background: rgba(86, 182, 194, 0.15);
575
+ color: var(--cyan, #56b6c2);
576
+ }
577
+
578
+ .orch-dispatch-row.completed .orch-dispatch-num {
579
+ background: rgba(51, 209, 122, 0.15);
580
+ color: var(--success);
581
+ }
582
+
583
+ .orch-dispatch-agent {
584
+ font-family: var(--font-mono);
585
+ font-size: 11px;
586
+ font-weight: 600;
587
+ color: var(--text-secondary);
588
+ white-space: nowrap;
589
+ flex-shrink: 0;
590
+ }
591
+
592
+ .orch-dispatch-ctx {
593
+ font-size: 11px;
594
+ color: var(--text-dim);
595
+ overflow: hidden;
596
+ text-overflow: ellipsis;
597
+ white-space: nowrap;
598
+ flex: 1;
599
+ min-width: 0;
600
+ }
601
+
602
+ .orch-dispatch-status {
603
+ font-family: var(--font-mono);
604
+ font-size: 9px;
605
+ font-weight: 600;
606
+ text-transform: uppercase;
607
+ letter-spacing: 0.3px;
608
+ color: var(--text-dim);
609
+ padding: 2px 6px;
610
+ border-radius: 8px;
611
+ flex-shrink: 0;
612
+ }
613
+
614
+ .orch-dispatch-status.running {
615
+ color: var(--cyan, #56b6c2);
616
+ background: rgba(86, 182, 194, 0.1);
617
+ animation: agentPulse 2s ease-in-out infinite;
618
+ }
619
+
620
+ .orch-dispatch-status.completed {
621
+ color: var(--success);
622
+ background: rgba(51, 209, 122, 0.1);
623
+ }
624
+
625
+ .orch-dispatch-status.error {
626
+ color: var(--error);
627
+ background: rgba(237, 51, 59, 0.1);
628
+ }
629
+
630
+ /* ── Shared context summary ── */
631
+ .chain-context-summary {
632
+ border-top: 1px solid var(--border-subtle);
633
+ padding: 8px 14px;
634
+ font-size: 12px;
635
+ }
636
+
637
+ .chain-context-header {
638
+ font-family: var(--font-mono);
639
+ font-size: 10px;
640
+ font-weight: 700;
641
+ text-transform: uppercase;
642
+ letter-spacing: 0.1em;
643
+ color: var(--text-dim);
644
+ margin-bottom: 6px;
645
+ }
646
+
647
+ .chain-context-entry {
648
+ display: flex;
649
+ gap: 8px;
650
+ padding: 3px 0;
651
+ align-items: baseline;
652
+ }
653
+
654
+ .chain-context-agent {
655
+ font-family: var(--font-mono);
656
+ font-size: 10px;
657
+ font-weight: 600;
658
+ color: var(--accent);
659
+ white-space: nowrap;
660
+ flex-shrink: 0;
661
+ }
662
+
663
+ .chain-context-preview {
664
+ font-family: var(--font-mono);
665
+ font-size: 11px;
666
+ color: var(--text-dim);
667
+ overflow: hidden;
668
+ text-overflow: ellipsis;
669
+ white-space: nowrap;
670
+ }
671
+
672
+ /* ── Monitor card ── */
673
+ .monitor-card {
674
+ border-left: 2px solid var(--success, #33d17a);
675
+ }
676
+
677
+ /* ── DAG card ── */
678
+ .dag-card {
679
+ border-left: 2px solid var(--warning, #e5c07b);
680
+ }
681
+
682
+ .dag-nodes-preview {
683
+ display: flex;
684
+ align-items: center;
685
+ gap: 4px;
686
+ margin-top: 6px;
687
+ flex-wrap: wrap;
688
+ }
689
+
690
+ /* ── DAG execution header in chat ── */
691
+ .dag-header {
692
+ background: var(--bg-secondary);
693
+ border: 1px solid var(--border);
694
+ border-left: 3px solid var(--warning, #e5c07b);
695
+ border-radius: var(--radius);
696
+ overflow: hidden;
697
+ font-size: 13px;
698
+ }
699
+
700
+ .dag-header-top {
701
+ display: flex;
702
+ align-items: center;
703
+ gap: 8px;
704
+ padding: 8px 14px;
705
+ background: rgba(229, 192, 123, 0.06);
706
+ border-bottom: 1px solid var(--border-subtle);
707
+ }
708
+
709
+ .dag-header-icon {
710
+ display: inline-flex;
711
+ align-items: center;
712
+ color: var(--warning, #e5c07b);
713
+ }
714
+
715
+ .dag-header-title {
716
+ font-family: var(--font-mono);
717
+ font-weight: 700;
718
+ font-size: 12px;
719
+ letter-spacing: 0.5px;
720
+ color: var(--warning, #e5c07b);
721
+ text-transform: uppercase;
722
+ }
723
+
724
+ .dag-desc {
725
+ padding: 8px 14px;
726
+ font-size: 12px;
727
+ color: var(--text-secondary);
728
+ line-height: 1.5;
729
+ border-bottom: 1px solid var(--border-subtle);
730
+ }
731
+
732
+ /* DAG node graph in execution */
733
+ .dag-graph {
734
+ padding: 8px 14px;
735
+ display: flex;
736
+ flex-wrap: wrap;
737
+ gap: 6px;
738
+ }
739
+
740
+ .dag-graph-node {
741
+ display: flex;
742
+ align-items: center;
743
+ gap: 6px;
744
+ padding: 5px 10px;
745
+ border-radius: var(--radius);
746
+ background: var(--bg-tertiary);
747
+ border: 1px solid var(--border-subtle);
748
+ transition: all 0.2s;
749
+ }
750
+
751
+ .dag-graph-node.running {
752
+ background: rgba(86, 182, 194, 0.06);
753
+ border-color: var(--cyan, #56b6c2);
754
+ }
755
+
756
+ .dag-graph-node.completed {
757
+ background: rgba(51, 209, 122, 0.06);
758
+ border-color: var(--success);
759
+ }
760
+
761
+ .dag-graph-node.error,
762
+ .dag-graph-node.failed {
763
+ background: rgba(237, 51, 59, 0.06);
764
+ border-color: var(--error);
765
+ }
766
+
767
+ .dag-graph-node.skipped {
768
+ opacity: 0.5;
769
+ }
770
+
771
+ .dag-graph-node-name {
772
+ font-family: var(--font-mono);
773
+ font-size: 11px;
774
+ font-weight: 600;
775
+ color: var(--text-secondary);
776
+ }
777
+
778
+ .dag-graph-node-status {
779
+ font-family: var(--font-mono);
780
+ font-size: 9px;
781
+ font-weight: 600;
782
+ text-transform: uppercase;
783
+ letter-spacing: 0.3px;
784
+ color: var(--text-dim);
785
+ padding: 1px 5px;
786
+ border-radius: 6px;
787
+ }
788
+
789
+ .dag-graph-node-status.running {
790
+ color: var(--cyan, #56b6c2);
791
+ background: rgba(86, 182, 194, 0.1);
792
+ animation: agentPulse 2s ease-in-out infinite;
793
+ }
794
+
795
+ .dag-graph-node-status.completed {
796
+ color: var(--success);
797
+ background: rgba(51, 209, 122, 0.1);
798
+ }
799
+
800
+ .dag-graph-node-status.error,
801
+ .dag-graph-node-status.failed {
802
+ color: var(--error);
803
+ background: rgba(237, 51, 59, 0.1);
804
+ }
805
+
806
+ .dag-graph-node-status.skipped {
807
+ color: var(--text-dim);
808
+ background: var(--bg-tertiary);
809
+ }
810
+
811
+ /* ── DAG Editor Modal ── */
812
+ .dag-modal-wide {
813
+ max-width: 720px;
814
+ width: 90vw;
815
+ }
816
+
817
+ .dag-editor-toolbar {
818
+ display: block;
819
+ padding: 0;
820
+ border-bottom: none;
821
+ margin-bottom: 10px;
822
+ }
823
+
824
+ .dag-editor-toolbar button {
825
+ background: var(--bg-tertiary);
826
+ border: 1px solid var(--border);
827
+ border-radius: var(--radius);
828
+ color: var(--text-dim);
829
+ font-size: 11px;
830
+ font-family: var(--font-sans);
831
+ padding: 5px 10px;
832
+ cursor: pointer;
833
+ transition: all 0.15s;
834
+ }
835
+
836
+ .dag-editor-toolbar button:hover {
837
+ color: var(--warning, #e5c07b);
838
+ border-color: var(--warning, #e5c07b);
839
+ }
840
+
841
+ .dag-editor-body {
842
+ display: flex;
843
+ gap: 10px;
844
+ min-height: 300px;
845
+ }
846
+
847
+ .dag-node-palette {
848
+ width: 140px;
849
+ flex-shrink: 0;
850
+ border: 1px solid var(--border-subtle);
851
+ border-radius: var(--radius);
852
+ padding: 8px;
853
+ background: var(--bg-tertiary);
854
+ overflow-y: auto;
855
+ max-height: 350px;
856
+ }
857
+
858
+ .dag-palette-title {
859
+ font-family: var(--font-mono);
860
+ font-size: 9px;
861
+ font-weight: 700;
862
+ text-transform: uppercase;
863
+ letter-spacing: 0.1em;
864
+ color: var(--text-dim);
865
+ margin-bottom: 6px;
866
+ }
867
+
868
+ .dag-palette-item {
869
+ font-family: var(--font-mono);
870
+ font-size: 11px;
871
+ color: var(--text-secondary);
872
+ padding: 5px 8px;
873
+ border-radius: var(--radius);
874
+ cursor: grab;
875
+ transition: all 0.15s;
876
+ margin-bottom: 3px;
877
+ white-space: nowrap;
878
+ overflow: hidden;
879
+ text-overflow: ellipsis;
880
+ }
881
+
882
+ .dag-palette-item:hover {
883
+ background: rgba(229, 192, 123, 0.08);
884
+ color: var(--warning, #e5c07b);
885
+ }
886
+
887
+ .dag-palette-item:active {
888
+ cursor: grabbing;
889
+ }
890
+
891
+ .dag-canvas-wrap {
892
+ flex: 1;
893
+ border: 1px solid var(--border-subtle);
894
+ border-radius: var(--radius);
895
+ background: var(--bg);
896
+ overflow: hidden;
897
+ position: relative;
898
+ }
899
+
900
+ #dag-canvas {
901
+ width: 100%;
902
+ height: 100%;
903
+ min-height: 300px;
904
+ }
905
+
906
+ /* SVG DAG nodes */
907
+ .dag-node-rect {
908
+ fill: var(--bg-secondary);
909
+ stroke: var(--border);
910
+ stroke-width: 1.5;
911
+ cursor: move;
912
+ transition: stroke 0.15s;
913
+ }
914
+
915
+ .dag-node-rect:hover {
916
+ stroke: var(--warning, #e5c07b);
917
+ }
918
+
919
+ .dag-node-text {
920
+ fill: var(--text-secondary);
921
+ font-family: var(--font-mono);
922
+ font-size: 11px;
923
+ font-weight: 600;
924
+ pointer-events: none;
925
+ }
926
+
927
+ .dag-port {
928
+ fill: var(--bg-tertiary);
929
+ stroke: var(--border);
930
+ stroke-width: 1.5;
931
+ cursor: crosshair;
932
+ transition: all 0.15s;
933
+ }
934
+
935
+ .dag-port:hover {
936
+ fill: var(--warning, #e5c07b);
937
+ stroke: var(--warning, #e5c07b);
938
+ r: 8;
939
+ }
940
+
941
+ .dag-edge {
942
+ stroke: var(--text-dim);
943
+ stroke-width: 1.5;
944
+ cursor: pointer;
945
+ }
946
+
947
+ .dag-edge:hover,
948
+ .dag-edge.dag-edge-hover {
949
+ stroke: var(--error);
950
+ stroke-width: 2.5;
951
+ }
952
+
953
+ .dag-edge-temp {
954
+ stroke-dasharray: 5 3;
955
+ pointer-events: none;
956
+ }
957
+
958
+ .dag-node-delete {
959
+ fill: var(--text-dim);
960
+ font-size: 14px;
961
+ cursor: pointer;
962
+ opacity: 0;
963
+ transition: opacity 0.15s;
964
+ }
965
+
966
+ .dag-node:hover .dag-node-delete {
967
+ opacity: 1;
968
+ }
969
+
970
+ .dag-node-delete:hover {
971
+ fill: var(--error);
972
+ }
973
+
974
+ /* Light theme overrides */
975
+ html[data-theme="light"] .agent-header {
976
+ border-left-color: #2a8a9a;
977
+ }
978
+
979
+ html[data-theme="light"] .agent-header-top {
980
+ background: rgba(42, 138, 154, 0.06);
981
+ }
982
+
983
+ html[data-theme="light"] .agent-header-icon,
984
+ html[data-theme="light"] .agent-header-title,
985
+ html[data-theme="light"] .agent-card .agent-icon {
986
+ color: #2a8a9a;
987
+ }
988
+
989
+ html[data-theme="light"] .agent-status-badge.running {
990
+ color: #2a8a9a;
991
+ background: rgba(42, 138, 154, 0.1);
992
+ }
993
+
994
+ html[data-theme="light"] .agent-log-entry::before {
995
+ color: #2a8a9a;
996
+ }