agentweaver 0.1.18 → 0.1.20

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 (50) hide show
  1. package/README.md +54 -6
  2. package/dist/artifacts.js +9 -0
  3. package/dist/executors/git-commit-executor.js +24 -6
  4. package/dist/flow-state.js +3 -8
  5. package/dist/git/git-diff-parser.js +223 -0
  6. package/dist/git/git-service.js +562 -0
  7. package/dist/git/git-stage-selection.js +24 -0
  8. package/dist/git/git-status-parser.js +171 -0
  9. package/dist/git/git-types.js +1 -0
  10. package/dist/index.js +454 -108
  11. package/dist/interactive/auto-flow.js +644 -0
  12. package/dist/interactive/controller.js +489 -7
  13. package/dist/interactive/progress.js +194 -1
  14. package/dist/interactive/state.js +34 -0
  15. package/dist/interactive/web/index.js +237 -5
  16. package/dist/interactive/web/protocol.js +222 -1
  17. package/dist/interactive/web/server.js +497 -3
  18. package/dist/interactive/web/static/app.js +2462 -37
  19. package/dist/interactive/web/static/index.html +113 -11
  20. package/dist/interactive/web/static/styles.css +1 -1
  21. package/dist/interactive/web/static/styles.input.css +1383 -149
  22. package/dist/pipeline/auto-flow-blocks.js +307 -0
  23. package/dist/pipeline/auto-flow-config.js +273 -0
  24. package/dist/pipeline/auto-flow-identity.js +49 -0
  25. package/dist/pipeline/auto-flow-presets.js +52 -0
  26. package/dist/pipeline/auto-flow-resolver.js +830 -0
  27. package/dist/pipeline/auto-flow-types.js +17 -0
  28. package/dist/pipeline/context.js +1 -0
  29. package/dist/pipeline/declarative-flows.js +27 -1
  30. package/dist/pipeline/flow-specs/auto-common-guided.json +11 -0
  31. package/dist/pipeline/flow-specs/auto-golang.json +12 -1
  32. package/dist/pipeline/flow-specs/bugz/bug-analyze.json +54 -1
  33. package/dist/pipeline/flow-specs/gitlab/gitlab-diff-review.json +19 -1
  34. package/dist/pipeline/flow-specs/gitlab/gitlab-review.json +33 -1
  35. package/dist/pipeline/flow-specs/review/review-project.json +19 -1
  36. package/dist/pipeline/flow-specs/task-source/manual-jira-input.json +70 -0
  37. package/dist/pipeline/node-registry.js +9 -0
  38. package/dist/pipeline/nodes/codex-prompt-node.js +8 -1
  39. package/dist/pipeline/nodes/flow-run-node.js +5 -3
  40. package/dist/pipeline/nodes/git-status-node.js +2 -168
  41. package/dist/pipeline/nodes/manual-jira-task-input-node.js +146 -0
  42. package/dist/pipeline/nodes/opencode-prompt-node.js +8 -1
  43. package/dist/pipeline/nodes/plan-codex-node.js +8 -1
  44. package/dist/pipeline/spec-loader.js +14 -4
  45. package/dist/runtime/artifact-catalog.js +403 -0
  46. package/dist/runtime/settings.js +114 -0
  47. package/dist/scope.js +14 -4
  48. package/package.json +1 -1
  49. package/dist/pipeline/flow-specs/auto-common.json +0 -179
  50. package/dist/pipeline/flow-specs/auto-simple.json +0 -141
@@ -4,6 +4,68 @@
4
4
  @source "./app.js";
5
5
 
6
6
  :root {
7
+ color-scheme: light;
8
+ --aw-bg: #f4f7f5;
9
+ --aw-bg-soft: #edf3ef;
10
+ --aw-panel: #ffffff;
11
+ --aw-panel-muted: #f7faf8;
12
+ --aw-border: #d4dfd9;
13
+ --aw-border-strong: #a9bcb1;
14
+ --aw-text: #17231e;
15
+ --aw-muted: #5d7066;
16
+ --aw-dim: #7a8b82;
17
+ --aw-accent: #168254;
18
+ --aw-accent-strong: #0d6b45;
19
+ --aw-accent-soft: rgba(22, 130, 84, 0.1);
20
+ --aw-cyan: #0e7490;
21
+ --aw-danger: #c03535;
22
+ --aw-success: #168254;
23
+ --aw-warning: #946500;
24
+ --aw-shadow: 0 18px 52px rgba(26, 42, 34, 0.15);
25
+ --aw-glow: 0 0 0 1px rgba(22, 130, 84, 0.07), 0 16px 44px rgba(26, 42, 34, 0.07);
26
+ --aw-body-bg: linear-gradient(180deg, rgba(22, 130, 84, 0.08), transparent 24rem), radial-gradient(circle at 88% 8%, rgba(14, 116, 144, 0.08), transparent 24rem), var(--aw-bg);
27
+ --aw-control-bg: linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(242, 248, 245, 0.92));
28
+ --aw-primary-bg: linear-gradient(180deg, rgba(22, 130, 84, 0.18), rgba(22, 130, 84, 0.09));
29
+ --aw-danger-text: #a62f2f;
30
+ --aw-success-text: #0d6b45;
31
+ --aw-warning-text: #755400;
32
+ --aw-running-text: #0c6580;
33
+ --aw-pending-text: #405349;
34
+ --aw-control-ring: rgba(22, 130, 84, 0.16);
35
+ --aw-topbar-bg: rgba(255, 255, 255, 0.86);
36
+ --aw-panel-bg: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(247, 250, 248, 0.98));
37
+ --aw-heading-bg: linear-gradient(180deg, rgba(25, 52, 39, 0.04), rgba(25, 52, 39, 0.012));
38
+ --aw-surface-bg: rgba(239, 246, 242, 0.76);
39
+ --aw-surface-subtle-bg: rgba(248, 251, 249, 0.82);
40
+ --aw-input-bg: #ffffff;
41
+ --aw-text-panel-text: #21322a;
42
+ --aw-log-bg: linear-gradient(180deg, rgba(22, 130, 84, 0.045), transparent 8rem), #f8faf8;
43
+ --aw-drawer-bg: rgba(255, 255, 255, 0.98);
44
+ --aw-modal-overlay: rgba(216, 226, 221, 0.68);
45
+ --aw-code-bg: rgba(14, 116, 144, 0.08);
46
+ --aw-code-text: #17231e;
47
+ --aw-pre-bg: rgba(247, 250, 248, 0.88);
48
+ --aw-pre-text: #21322a;
49
+ --aw-muted-bg: rgba(23, 35, 30, 0.05);
50
+ --aw-inset-border: rgba(23, 35, 30, 0.08);
51
+ --aw-warning-soft: rgba(148, 101, 0, 0.12);
52
+ --aw-success-soft: rgba(22, 130, 84, 0.11);
53
+ --aw-running-soft: rgba(14, 116, 144, 0.11);
54
+ --aw-danger-soft: rgba(192, 53, 53, 0.11);
55
+ --aw-file-badge-bg: rgba(14, 116, 144, 0.08);
56
+ --aw-diff-border: rgba(190, 205, 197, 0.92);
57
+ --aw-diff-line-number-bg: rgba(238, 244, 240, 0.86);
58
+ --aw-diff-add-bg: rgba(22, 130, 84, 0.12);
59
+ --aw-diff-add-text: #0d5f3d;
60
+ --aw-diff-delete-bg: rgba(192, 53, 53, 0.11);
61
+ --aw-diff-delete-text: #932222;
62
+ --aw-diff-context-bg: rgba(255, 255, 255, 0.72);
63
+ --aw-scrollbar-thumb: #b8c8bf;
64
+ --aw-scrollbar-track: #edf3ef;
65
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
66
+ }
67
+
68
+ :root[data-theme="dark"] {
7
69
  color-scheme: dark;
8
70
  --aw-bg: #070b0a;
9
71
  --aw-bg-soft: #0b1210;
@@ -23,7 +85,45 @@
23
85
  --aw-warning: #f2c94c;
24
86
  --aw-shadow: 0 28px 90px rgba(0, 0, 0, 0.45);
25
87
  --aw-glow: 0 0 0 1px rgba(56, 224, 143, 0.08), 0 18px 60px rgba(56, 224, 143, 0.08);
26
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
88
+ --aw-body-bg: linear-gradient(180deg, rgba(56, 224, 143, 0.08), transparent 24rem), radial-gradient(circle at 88% 8%, rgba(101, 216, 255, 0.09), transparent 24rem), var(--aw-bg);
89
+ --aw-control-bg: linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(255, 255, 255, 0.015));
90
+ --aw-primary-bg: linear-gradient(180deg, rgba(56, 224, 143, 0.26), rgba(56, 224, 143, 0.13));
91
+ --aw-danger-text: #ffb3b3;
92
+ --aw-success-text: #9df0c2;
93
+ --aw-warning-text: #ffe49a;
94
+ --aw-running-text: #bfefff;
95
+ --aw-pending-text: #c2d0c8;
96
+ --aw-control-ring: rgba(56, 224, 143, 0.12);
97
+ --aw-topbar-bg: rgba(7, 11, 10, 0.88);
98
+ --aw-panel-bg: linear-gradient(180deg, rgba(15, 23, 20, 0.96), rgba(10, 16, 14, 0.96));
99
+ --aw-heading-bg: linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(255, 255, 255, 0.012));
100
+ --aw-surface-bg: rgba(7, 11, 10, 0.42);
101
+ --aw-surface-subtle-bg: rgba(3, 7, 6, 0.36);
102
+ --aw-input-bg: #070b0a;
103
+ --aw-text-panel-text: #d7eadf;
104
+ --aw-log-bg: linear-gradient(180deg, rgba(56, 224, 143, 0.035), transparent 8rem), #050806;
105
+ --aw-drawer-bg: rgba(10, 16, 14, 0.98);
106
+ --aw-modal-overlay: rgba(2, 5, 4, 0.72);
107
+ --aw-code-bg: rgba(101, 216, 255, 0.08);
108
+ --aw-code-text: #d8f7e7;
109
+ --aw-pre-bg: rgba(3, 7, 6, 0.62);
110
+ --aw-pre-text: #d7eadf;
111
+ --aw-muted-bg: rgba(255, 255, 255, 0.035);
112
+ --aw-inset-border: rgba(255, 255, 255, 0.08);
113
+ --aw-warning-soft: rgba(242, 201, 76, 0.12);
114
+ --aw-success-soft: rgba(56, 224, 143, 0.14);
115
+ --aw-running-soft: rgba(101, 216, 255, 0.12);
116
+ --aw-danger-soft: rgba(255, 107, 107, 0.12);
117
+ --aw-file-badge-bg: rgba(101, 216, 255, 0.09);
118
+ --aw-diff-border: rgba(34, 53, 46, 0.72);
119
+ --aw-diff-line-number-bg: rgba(7, 11, 10, 0.55);
120
+ --aw-diff-add-bg: rgba(56, 224, 143, 0.13);
121
+ --aw-diff-add-text: #dcffe9;
122
+ --aw-diff-delete-bg: rgba(255, 107, 107, 0.12);
123
+ --aw-diff-delete-text: #ffd6d6;
124
+ --aw-diff-context-bg: rgba(255, 255, 255, 0.015);
125
+ --aw-scrollbar-thumb: #284137;
126
+ --aw-scrollbar-track: #08100d;
27
127
  }
28
128
 
29
129
  * {
@@ -41,10 +141,7 @@ body {
41
141
 
42
142
  body {
43
143
  @apply m-0 overflow-hidden;
44
- background:
45
- linear-gradient(180deg, rgba(56, 224, 143, 0.08), transparent 24rem),
46
- radial-gradient(circle at 88% 8%, rgba(101, 216, 255, 0.09), transparent 24rem),
47
- var(--aw-bg);
144
+ background: var(--aw-body-bg);
48
145
  color: var(--aw-text);
49
146
  }
50
147
 
@@ -58,7 +155,7 @@ textarea {
58
155
  button {
59
156
  @apply inline-flex min-h-8 items-center justify-center gap-2 rounded-md px-3 py-1.5 text-sm font-semibold transition;
60
157
  border: 1px solid var(--aw-border-strong);
61
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(255, 255, 255, 0.015));
158
+ background: var(--aw-control-bg);
62
159
  color: var(--aw-text);
63
160
  cursor: pointer;
64
161
  }
@@ -68,18 +165,18 @@ button:focus-visible {
68
165
  border-color: var(--aw-accent);
69
166
  color: var(--aw-accent-strong);
70
167
  outline: 2px solid transparent;
71
- box-shadow: 0 0 0 3px rgba(56, 224, 143, 0.12);
168
+ box-shadow: 0 0 0 3px var(--aw-control-ring);
72
169
  }
73
170
 
74
171
  button.primary {
75
172
  border-color: rgba(56, 224, 143, 0.75);
76
- background: linear-gradient(180deg, rgba(56, 224, 143, 0.26), rgba(56, 224, 143, 0.13));
173
+ background: var(--aw-primary-bg);
77
174
  color: var(--aw-accent-strong);
78
175
  }
79
176
 
80
177
  button.danger {
81
178
  border-color: rgba(255, 107, 107, 0.68);
82
- color: #ffb3b3;
179
+ color: var(--aw-danger-text);
83
180
  }
84
181
 
85
182
  button:disabled {
@@ -96,7 +193,7 @@ button:disabled {
96
193
  @apply grid items-center gap-4 px-4 py-3;
97
194
  grid-template-columns: minmax(220px, 1fr) auto auto;
98
195
  border-bottom: 1px solid var(--aw-border);
99
- background: rgba(7, 11, 10, 0.88);
196
+ background: var(--aw-topbar-bg);
100
197
  backdrop-filter: blur(16px);
101
198
  }
102
199
 
@@ -150,6 +247,60 @@ h2 {
150
247
  @apply justify-end;
151
248
  }
152
249
 
250
+ .log-actions {
251
+ @apply flex items-center gap-2;
252
+ }
253
+
254
+ .log-autoscroll {
255
+ @apply inline-flex items-center gap-1.5;
256
+ color: var(--aw-muted);
257
+ font-size: 12px;
258
+ font-weight: 700;
259
+ line-height: 1;
260
+ }
261
+
262
+ .log-autoscroll input {
263
+ width: 13px;
264
+ height: 13px;
265
+ margin: 0;
266
+ }
267
+
268
+ .theme-toggle {
269
+ @apply px-2.5;
270
+ min-width: 92px;
271
+ }
272
+
273
+ .theme-toggle-track {
274
+ width: 34px;
275
+ height: 18px;
276
+ flex: none;
277
+ position: relative;
278
+ border-radius: 999px;
279
+ border: 1px solid var(--aw-border-strong);
280
+ background: var(--aw-surface-bg);
281
+ }
282
+
283
+ .theme-toggle-thumb {
284
+ position: absolute;
285
+ top: 2px;
286
+ left: 2px;
287
+ width: 12px;
288
+ height: 12px;
289
+ border-radius: 999px;
290
+ background: var(--aw-accent-strong);
291
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.22);
292
+ transition: transform 0.18s ease;
293
+ }
294
+
295
+ :root[data-theme="dark"] .theme-toggle-thumb {
296
+ transform: translateX(16px);
297
+ }
298
+
299
+ .theme-toggle-label {
300
+ font-size: 12px;
301
+ line-height: 1;
302
+ }
303
+
153
304
  .connection {
154
305
  @apply inline-flex min-w-24 justify-center rounded-full px-2.5 py-1 text-xs font-bold;
155
306
  border: 1px solid currentColor;
@@ -181,28 +332,70 @@ h2 {
181
332
  .details-pane,
182
333
  .log-pane,
183
334
  .help-panel,
184
- .work-panel {
335
+ .work-panel,
336
+ .git-workspace {
185
337
  @apply grid min-h-0 overflow-hidden rounded-lg;
186
338
  grid-template-rows: auto minmax(0, 1fr);
187
339
  border: 1px solid var(--aw-border);
188
- background: linear-gradient(180deg, rgba(15, 23, 20, 0.96), rgba(10, 16, 14, 0.96));
340
+ background: var(--aw-panel-bg);
189
341
  box-shadow: var(--aw-glow);
190
342
  }
191
343
 
192
344
  .details-pane {
193
- gap: 10px;
194
- grid-template-rows: auto minmax(92px, 0.24fr) minmax(0, 1fr);
345
+ gap: 0;
346
+ grid-template-rows: auto auto minmax(0, 1fr);
195
347
  }
196
348
 
197
349
  .split-panels {
198
- @apply grid min-h-0 gap-3;
199
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
350
+ @apply grid min-h-0;
351
+ --aw-work-panel-width: 36%;
352
+ grid-template-columns: minmax(220px, var(--aw-work-panel-width)) 12px minmax(360px, 1fr);
353
+ grid-auto-rows: minmax(0, 1fr);
354
+ grid-row: 3;
355
+ }
356
+
357
+ .workspace-resizer {
358
+ position: relative;
359
+ cursor: col-resize;
360
+ border-left: 1px solid var(--aw-border);
361
+ border-right: 1px solid var(--aw-border);
362
+ background: var(--aw-heading-bg);
363
+ }
364
+
365
+ .workspace-resizer::before {
366
+ content: "";
367
+ position: absolute;
368
+ left: 50%;
369
+ top: 50%;
370
+ width: 3px;
371
+ height: min(220px, 42%);
372
+ border-radius: 999px;
373
+ background: var(--aw-border-strong);
374
+ transform: translate(-50%, -50%);
375
+ opacity: 0.7;
376
+ }
377
+
378
+ .workspace-resizer:hover::before,
379
+ .workspace-resizer:focus-visible::before,
380
+ .workspace-resizer.resizing::before {
381
+ background: var(--aw-accent);
382
+ opacity: 1;
383
+ }
384
+
385
+ .workspace-resizer:focus-visible {
386
+ outline: 2px solid transparent;
387
+ box-shadow: inset 0 0 0 2px var(--aw-accent);
388
+ }
389
+
390
+ .workspace-split-resizing {
391
+ cursor: col-resize;
392
+ user-select: none;
200
393
  }
201
394
 
202
395
  .pane-heading {
203
396
  @apply min-h-10 justify-between px-3 py-2;
204
397
  border-bottom: 1px solid var(--aw-border);
205
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(255, 255, 255, 0.012));
398
+ background: var(--aw-heading-bg);
206
399
  }
207
400
 
208
401
  .flows-list {
@@ -253,217 +446,1258 @@ h2 {
253
446
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
254
447
  font-size: 12px;
255
448
  line-height: 1.5;
256
- background: rgba(7, 11, 10, 0.42);
257
- color: #d7eadf;
449
+ background: var(--aw-surface-bg);
450
+ color: var(--aw-text-panel-text);
258
451
  }
259
452
 
260
453
  .text-panel.compact {
261
454
  border-bottom: 1px solid var(--aw-border);
262
455
  }
263
456
 
264
- .log-output {
265
- background:
266
- linear-gradient(180deg, rgba(56, 224, 143, 0.035), transparent 8rem),
267
- #050806;
268
- color: #d8f7e7;
457
+ .progress-tree {
458
+ @apply m-0 grid min-h-0 content-start gap-1 overflow-auto p-2;
459
+ background: var(--aw-surface-bg);
460
+ color: var(--aw-text-panel-text);
461
+ font-size: 12px;
462
+ line-height: 1.35;
269
463
  }
270
464
 
271
- .help-panel {
272
- position: absolute;
273
- top: 72px;
274
- right: 12px;
275
- width: min(520px, calc(100vw - 24px));
276
- max-height: calc(100vh - 88px);
277
- z-index: 6;
278
- box-shadow: var(--aw-shadow);
465
+ .progress-tree.fallback {
466
+ display: block;
467
+ overflow-wrap: anywhere;
468
+ white-space: pre-wrap;
469
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
470
+ line-height: 1.5;
279
471
  }
280
472
 
281
- .modal-root:empty {
282
- display: none;
473
+ .progress-flow-label {
474
+ @apply min-w-0 overflow-hidden text-ellipsis whitespace-nowrap;
475
+ color: var(--aw-text);
476
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
477
+ font-size: 11px;
478
+ font-weight: 800;
479
+ text-transform: none;
283
480
  }
284
481
 
285
- .modal-root {
286
- @apply fixed inset-0 z-20 grid place-items-center p-5;
287
- background: rgba(2, 5, 4, 0.72);
288
- backdrop-filter: blur(8px);
482
+ .progress-row {
483
+ @apply grid min-w-0 items-start gap-2 rounded-md border border-transparent px-2 py-1.5;
484
+ grid-template-columns: 18px minmax(0, 1fr);
485
+ min-height: 32px;
289
486
  }
290
487
 
291
- .modal {
292
- @apply grid w-full rounded-lg;
293
- width: min(720px, 100%);
294
- max-height: min(760px, calc(100vh - 40px));
295
- grid-template-rows: auto minmax(0, 1fr) auto;
296
- border: 1px solid var(--aw-border-strong);
297
- background: var(--aw-panel);
298
- box-shadow: var(--aw-shadow);
488
+ .progress-marker {
489
+ @apply inline-flex h-5 w-5 items-center justify-center rounded-full text-xs font-bold;
490
+ border: 1px solid currentColor;
491
+ line-height: 1;
299
492
  }
300
493
 
301
- .modal.form-flow-routing-editor {
302
- width: min(940px, 100%);
494
+ .progress-row-body {
495
+ @apply grid min-w-0 gap-0.5;
303
496
  }
304
497
 
305
- .modal-header,
306
- .modal-body,
307
- .modal-footer {
308
- padding: 12px 14px;
498
+ .progress-label,
499
+ .progress-detail {
500
+ @apply min-w-0 overflow-hidden text-ellipsis whitespace-nowrap;
309
501
  }
310
502
 
311
- .modal-header {
312
- border-bottom: 1px solid var(--aw-border);
503
+ .progress-detail {
504
+ color: var(--aw-muted);
505
+ font-size: 11px;
313
506
  }
314
507
 
315
- .modal-header p,
316
- .field-help,
317
- .field-option small,
318
- .modal-note {
508
+ .progress-row.kind-group .progress-label {
509
+ font-weight: 800;
510
+ }
511
+
512
+ .progress-row.kind-phase .progress-label {
513
+ font-weight: 700;
514
+ }
515
+
516
+ .progress-row.kind-step .progress-label,
517
+ .progress-row.kind-termination .progress-label {
518
+ font-weight: 600;
519
+ }
520
+
521
+ .progress-row.status-done {
522
+ color: var(--aw-success-text);
523
+ background: var(--aw-success-soft);
524
+ }
525
+
526
+ .progress-row.status-done .progress-marker {
527
+ background: var(--aw-success-soft);
528
+ }
529
+
530
+ .progress-row.status-running {
531
+ border-color: rgba(101, 216, 255, 0.56);
532
+ background: var(--aw-running-soft);
533
+ color: var(--aw-running-text);
534
+ box-shadow: inset 3px 0 0 rgba(101, 216, 255, 0.82);
535
+ }
536
+
537
+ .progress-row.status-running .progress-marker {
538
+ background: var(--aw-running-soft);
539
+ }
540
+
541
+ .progress-row.status-pending {
542
+ color: var(--aw-pending-text);
543
+ }
544
+
545
+ .progress-row.status-pending .progress-marker {
319
546
  color: var(--aw-muted);
320
- font-size: 13px;
547
+ background: var(--aw-muted-bg);
321
548
  }
322
549
 
323
- .modal-body {
324
- @apply grid min-h-0 gap-3 overflow-auto;
550
+ .progress-row.status-skipped {
551
+ color: var(--aw-dim);
552
+ background: var(--aw-muted-bg);
325
553
  }
326
554
 
327
- .modal-footer {
328
- @apply flex items-center justify-between gap-3;
555
+ .progress-row.status-skipped .progress-marker {
556
+ background: var(--aw-muted-bg);
557
+ }
558
+
559
+ .progress-row.status-success {
560
+ color: var(--aw-success-text);
561
+ background: var(--aw-success-soft);
562
+ }
563
+
564
+ .progress-row.status-success .progress-marker {
565
+ background: var(--aw-success-soft);
566
+ }
567
+
568
+ .progress-row.status-waiting-user,
569
+ .progress-row.status-stopped,
570
+ .progress-row.status-blocked {
571
+ border-color: rgba(242, 201, 76, 0.58);
572
+ background: var(--aw-warning-soft);
573
+ color: var(--aw-warning-text);
574
+ }
575
+
576
+ .progress-row.status-failed,
577
+ .progress-row.status-invalid {
578
+ border-color: rgba(255, 107, 107, 0.66);
579
+ background: var(--aw-danger-soft);
580
+ color: var(--aw-danger-text);
581
+ }
582
+
583
+ .progress-row.status-disabled,
584
+ .progress-row.status-empty {
585
+ color: var(--aw-dim);
586
+ background: var(--aw-muted-bg);
587
+ }
588
+
589
+ .auto-flow-editor {
590
+ @apply grid gap-1.5 overflow-auto px-2 pb-2;
591
+ height: min(56vh, 520px);
592
+ min-height: 120px;
593
+ max-height: min(72vh, 640px);
594
+ font-size: 12px;
595
+ }
596
+
597
+ .auto-flow-resizer {
598
+ position: relative;
599
+ height: 12px;
600
+ cursor: row-resize;
329
601
  border-top: 1px solid var(--aw-border);
602
+ border-bottom: 1px solid var(--aw-border);
603
+ background: var(--aw-heading-bg);
330
604
  }
331
605
 
332
- .modal-actions {
333
- @apply flex-wrap justify-end;
606
+ .auto-flow-resizer::before {
607
+ content: "";
608
+ position: absolute;
609
+ left: 50%;
610
+ top: 50%;
611
+ width: min(220px, 42%);
612
+ height: 3px;
613
+ border-radius: 999px;
614
+ background: var(--aw-border-strong);
615
+ transform: translate(-50%, -50%);
616
+ opacity: 0.7;
334
617
  }
335
618
 
336
- .form-fields {
337
- @apply grid gap-3;
619
+ .auto-flow-resizer:hover::before,
620
+ .auto-flow-resizer:focus-visible::before,
621
+ .auto-flow-resizer.resizing::before {
622
+ background: var(--aw-accent);
623
+ opacity: 1;
338
624
  }
339
625
 
340
- .form-fields.route-fields {
341
- gap: 0;
626
+ .auto-flow-resizer:focus-visible {
627
+ outline: 2px solid transparent;
628
+ box-shadow: inset 0 0 0 2px var(--aw-accent);
342
629
  }
343
630
 
344
- .field-pair {
345
- @apply grid items-start gap-4 py-3;
346
- grid-template-columns: minmax(220px, 0.9fr) minmax(280px, 1.1fr);
631
+ .auto-flow-resizing {
632
+ cursor: row-resize;
633
+ user-select: none;
634
+ }
635
+
636
+ .auto-flow-toolbar,
637
+ .auto-flow-block,
638
+ .auto-flow-insert,
639
+ .auto-flow-params {
640
+ @apply flex flex-wrap items-center gap-2;
641
+ }
642
+
643
+ .auto-flow-toolbar {
644
+ @apply py-1.5;
645
+ position: sticky;
646
+ top: 0;
647
+ z-index: 2;
648
+ margin-inline: calc(var(--spacing) * -2);
649
+ padding-inline: calc(var(--spacing) * 2);
347
650
  border-bottom: 1px solid var(--aw-border);
651
+ background: var(--aw-panel-bg);
348
652
  }
349
653
 
350
- .field-pair:first-child {
351
- padding-top: 0;
654
+ .auto-flow-toolbar button {
655
+ min-height: 26px;
656
+ padding: 3px 10px;
657
+ font-size: 12px;
352
658
  }
353
659
 
354
- .field-pair:last-child {
355
- border-bottom: 0;
356
- padding-bottom: 0;
660
+ .auto-flow-status,
661
+ .auto-flow-pill,
662
+ .auto-flow-locked {
663
+ @apply inline-flex items-center justify-center rounded-full border font-bold;
664
+ min-height: 16px;
665
+ padding: 1px 5px;
666
+ font-size: 10px;
667
+ line-height: 1;
357
668
  }
358
669
 
359
- .field {
670
+ .auto-flow-status.valid,
671
+ .auto-flow-pill.status-success,
672
+ .auto-flow-pill.status-running {
673
+ color: var(--aw-accent-strong);
674
+ border-color: rgba(56, 224, 143, 0.68);
675
+ background: var(--aw-success-soft);
676
+ }
677
+
678
+ .auto-flow-status.invalid,
679
+ .auto-flow-pill.status-invalid,
680
+ .auto-flow-pill.status-failed {
681
+ color: var(--aw-danger-text);
682
+ border-color: rgba(255, 107, 107, 0.66);
683
+ background: var(--aw-danger-soft);
684
+ }
685
+
686
+ .auto-flow-pill.status-disabled,
687
+ .auto-flow-pill.status-empty,
688
+ .auto-flow-locked {
689
+ color: var(--aw-dim);
690
+ border-color: var(--aw-border);
691
+ background: var(--aw-muted-bg);
692
+ }
693
+
694
+ .auto-flow-message,
695
+ .auto-flow-reason,
696
+ .auto-flow-empty {
697
+ color: var(--aw-muted);
698
+ font-size: 11px;
699
+ line-height: 1.25;
700
+ }
701
+
702
+ .auto-flow-diagnostics {
703
+ @apply grid gap-1 rounded-md border p-2;
704
+ color: var(--aw-danger-text);
705
+ border-color: rgba(255, 107, 107, 0.5);
706
+ background: var(--aw-danger-soft);
707
+ font-size: 12px;
708
+ }
709
+
710
+ .auto-flow-slots {
360
711
  @apply grid gap-1.5;
361
712
  }
362
713
 
363
- .field label,
364
- .field-title {
365
- font-weight: 700;
714
+ .auto-flow-slot {
715
+ @apply grid rounded-md border;
716
+ gap: 3px;
717
+ padding: 6px 8px;
718
+ border-color: var(--aw-border);
719
+ background: var(--aw-surface-bg);
366
720
  }
367
721
 
368
- .field input[type="text"],
369
- .field textarea,
370
- .field select {
371
- @apply min-h-9 w-full rounded-md px-2.5 py-2;
372
- border: 1px solid var(--aw-border-strong);
373
- background: #070b0a;
374
- color: var(--aw-text);
722
+ .auto-flow-slot-title,
723
+ .auto-flow-block-label {
724
+ @apply flex flex-wrap items-center gap-1.5;
725
+ line-height: 1.2;
375
726
  }
376
727
 
377
- .field input[type="text"]:focus,
378
- .field textarea:focus,
379
- .field select:focus {
380
- border-color: var(--aw-accent);
381
- outline: 2px solid transparent;
382
- box-shadow: 0 0 0 3px rgba(56, 224, 143, 0.12);
728
+ .auto-flow-slot-title strong,
729
+ .auto-flow-block-label strong {
730
+ font-size: 13px;
383
731
  }
384
732
 
385
- .field textarea {
386
- resize: vertical;
733
+ .auto-flow-blocks {
734
+ @apply grid gap-0.5;
387
735
  }
388
736
 
389
- .check-row,
390
- .field-option {
391
- @apply flex items-start gap-2;
737
+ .auto-flow-block {
738
+ @apply rounded-md border;
739
+ padding: 5px 7px;
740
+ border-color: var(--aw-inset-border);
741
+ background: var(--aw-muted-bg);
392
742
  }
393
743
 
394
- .option-list {
395
- @apply grid gap-1.5;
744
+ .auto-flow-block-main {
745
+ @apply grid min-w-0 gap-0.5;
396
746
  }
397
747
 
398
- .error-text {
399
- color: var(--aw-danger);
400
- font-weight: 700;
748
+ .auto-flow-params input,
749
+ .auto-flow-insert select {
750
+ min-height: 26px;
751
+ border-radius: var(--radius-md);
752
+ padding: 2px 6px;
753
+ border: 1px solid var(--aw-border-strong);
754
+ color: var(--aw-text);
755
+ background: var(--aw-input-bg);
756
+ font-size: 11px;
401
757
  }
402
758
 
403
- ::selection {
404
- background: rgba(56, 224, 143, 0.32);
759
+ .git-body {
760
+ @apply grid min-h-0 gap-1.5 overflow-auto p-1.5;
761
+ grid-template-rows: auto auto minmax(72px, 1fr) auto auto;
762
+ background: var(--aw-surface-bg);
763
+ }
764
+
765
+ .git-summary,
766
+ .git-feedback,
767
+ .git-empty {
768
+ color: var(--aw-muted);
769
+ font-size: 12px;
770
+ line-height: 1.4;
771
+ }
772
+
773
+ .git-summary strong {
405
774
  color: var(--aw-text);
406
775
  }
407
776
 
408
- ::-webkit-scrollbar {
409
- width: 10px;
410
- height: 10px;
777
+ .git-actions,
778
+ .git-commit-actions {
779
+ @apply flex flex-wrap items-center gap-2;
411
780
  }
412
781
 
413
- ::-webkit-scrollbar-thumb {
414
- background: #284137;
415
- border: 2px solid #08100d;
416
- border-radius: 999px;
782
+ .git-actions input,
783
+ .git-actions select,
784
+ .git-commit-row textarea {
785
+ @apply min-h-8 rounded-md px-2 py-1.5;
786
+ min-width: 0;
787
+ border: 1px solid var(--aw-border-strong);
788
+ background: var(--aw-input-bg);
789
+ color: var(--aw-text);
790
+ font-size: 12px;
417
791
  }
418
792
 
419
- ::-webkit-scrollbar-track {
420
- background: #08100d;
793
+ .git-actions input {
794
+ width: min(210px, 100%);
421
795
  }
422
796
 
423
- @media (max-width: 1080px) {
424
- body {
425
- overflow: auto;
426
- }
797
+ .git-actions select {
798
+ width: min(190px, 100%);
799
+ }
427
800
 
428
- .app-shell {
429
- min-height: 100%;
430
- height: auto;
431
- }
801
+ .git-files {
802
+ @apply grid content-start gap-0.5 overflow-auto rounded-md p-1;
803
+ border: 1px solid var(--aw-border);
804
+ background: var(--aw-surface-subtle-bg);
805
+ }
432
806
 
433
- .workspace {
434
- grid-template-columns: minmax(220px, 0.35fr) minmax(0, 1fr);
435
- grid-template-rows: minmax(260px, 42vh) minmax(320px, 1fr);
436
- }
807
+ .git-tree-node {
808
+ @apply grid gap-0;
809
+ }
437
810
 
438
- .log-pane {
439
- grid-column: 1 / -1;
440
- min-height: 320px;
441
- }
811
+ .git-tree-row {
812
+ @apply grid items-center gap-1.5 rounded-md px-1.5 py-0.5;
813
+ grid-template-columns: auto auto minmax(0, 1fr) auto auto;
814
+ min-height: 24px;
815
+ border: 1px solid transparent;
816
+ color: var(--aw-text-panel-text);
817
+ font-size: 11px;
818
+ line-height: 1.25;
442
819
  }
443
820
 
444
- @media (max-width: 760px) {
445
- .topbar {
446
- grid-template-columns: 1fr;
447
- gap: 10px;
448
- }
821
+ .git-tree-row.without-type {
822
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
823
+ }
449
824
 
450
- .status-strip,
451
- .topbar-actions {
452
- justify-content: flex-start;
453
- flex-wrap: wrap;
454
- }
825
+ .git-tree-row:hover {
826
+ border-color: var(--aw-border-strong);
827
+ background: var(--aw-muted-bg);
828
+ }
455
829
 
456
- .workspace,
457
- .split-panels {
458
- grid-template-columns: 1fr;
459
- }
830
+ .git-tree-row input {
831
+ margin: 0;
832
+ width: 13px;
833
+ height: 13px;
834
+ }
460
835
 
461
- .workspace {
462
- grid-template-rows: 260px 520px 340px;
463
- }
836
+ .git-tree-group {
837
+ color: var(--aw-accent-strong);
838
+ background: var(--aw-success-soft);
839
+ }
464
840
 
465
- .field-pair {
841
+ .git-tree-dir {
842
+ color: var(--aw-text);
843
+ }
844
+
845
+ .git-file-type {
846
+ @apply inline-flex items-center justify-center rounded-full font-bold uppercase tracking-normal;
847
+ min-height: 14px;
848
+ padding: 1px 4px;
849
+ font-size: 9px;
850
+ line-height: 1;
851
+ border: 1px solid var(--aw-border-strong);
852
+ color: var(--aw-cyan);
853
+ background: var(--aw-file-badge-bg);
854
+ }
855
+
856
+ .git-file-type.staged {
857
+ border-color: rgba(56, 224, 143, 0.72);
858
+ color: var(--aw-accent-strong);
859
+ background: var(--aw-success-soft);
860
+ }
861
+
862
+ .git-file-path {
863
+ @apply overflow-hidden text-ellipsis whitespace-nowrap;
864
+ }
865
+
866
+ .git-file-meta {
867
+ color: var(--aw-dim);
868
+ font-size: 10px;
869
+ }
870
+
871
+ .git-diff-open {
872
+ min-height: 22px;
873
+ padding: 1px 6px;
874
+ font-size: 10px;
875
+ }
876
+
877
+ .git-commit-row {
878
+ @apply grid gap-2;
879
+ grid-template-columns: minmax(0, 1fr) auto;
880
+ }
881
+
882
+ .git-commit-row textarea {
883
+ width: 100%;
884
+ resize: vertical;
885
+ }
886
+
887
+ .git-feedback.error {
888
+ color: var(--aw-danger-text);
889
+ }
890
+
891
+ .git-feedback.success {
892
+ color: var(--aw-success-text);
893
+ }
894
+
895
+ .log-output {
896
+ background: var(--aw-log-bg);
897
+ color: var(--aw-code-text);
898
+ }
899
+
900
+ .help-panel {
901
+ position: absolute;
902
+ top: 72px;
903
+ right: 12px;
904
+ width: min(520px, calc(100vw - 24px));
905
+ max-height: calc(100vh - 88px);
906
+ z-index: 6;
907
+ box-shadow: var(--aw-shadow);
908
+ }
909
+
910
+ .artifact-drawer {
911
+ @apply fixed right-0 top-0 z-10 grid h-full;
912
+ width: min(1120px, calc(100vw - 32px));
913
+ grid-template-rows: auto auto minmax(0, 1fr);
914
+ border-left: 1px solid var(--aw-border-strong);
915
+ background: var(--aw-drawer-bg);
916
+ box-shadow: var(--aw-shadow);
917
+ }
918
+
919
+ .artifact-drawer-header {
920
+ @apply flex items-start justify-between gap-3 px-4 py-3;
921
+ border-bottom: 1px solid var(--aw-border);
922
+ background: var(--aw-heading-bg);
923
+ }
924
+
925
+ .artifact-drawer-header p,
926
+ .artifact-message,
927
+ .artifact-empty,
928
+ .artifact-row-main span,
929
+ .artifact-selected p,
930
+ .artifact-action-status {
931
+ color: var(--aw-muted);
932
+ font-size: 13px;
933
+ }
934
+
935
+ .artifact-message {
936
+ padding: 10px 14px;
937
+ border-bottom: 1px solid var(--aw-border);
938
+ }
939
+
940
+ .artifact-drawer-body {
941
+ @apply grid min-h-0 gap-0;
942
+ grid-template-columns: minmax(300px, 0.42fr) minmax(420px, 1fr);
943
+ }
944
+
945
+ .artifact-list-pane,
946
+ .artifact-preview {
947
+ @apply grid min-h-0;
948
+ grid-template-rows: auto minmax(0, 1fr);
949
+ }
950
+
951
+ .artifact-list-pane {
952
+ border-right: 1px solid var(--aw-border);
953
+ }
954
+
955
+ .artifact-list {
956
+ @apply min-h-0 overflow-auto px-3 py-2;
957
+ }
958
+
959
+ .artifact-group {
960
+ @apply grid gap-2 py-2;
961
+ }
962
+
963
+ .artifact-group h3 {
964
+ @apply m-0 text-xs font-bold uppercase tracking-normal;
965
+ color: var(--aw-dim);
966
+ }
967
+
968
+ .artifact-subgroup {
969
+ @apply gap-1 border-l pl-3 py-1;
970
+ border-color: var(--aw-border);
971
+ }
972
+
973
+ .artifact-subgroup h4 {
974
+ @apply m-0 text-xs font-bold tracking-normal;
975
+ color: var(--aw-muted);
976
+ }
977
+
978
+ .artifact-row {
979
+ @apply grid items-center gap-2 rounded-md p-2;
980
+ grid-template-columns: minmax(0, 1fr) auto;
981
+ border: 1px solid var(--aw-border);
982
+ background: var(--aw-surface-bg);
983
+ }
984
+
985
+ .artifact-row.selected {
986
+ border-color: rgba(56, 224, 143, 0.62);
987
+ background: var(--aw-accent-soft);
988
+ }
989
+
990
+ .artifact-row-main {
991
+ @apply grid min-h-0 justify-stretch gap-1 border-0 bg-transparent p-0 text-left;
992
+ box-shadow: none;
993
+ }
994
+
995
+ .artifact-row-main:hover,
996
+ .artifact-row-main:focus-visible {
997
+ box-shadow: none;
998
+ }
999
+
1000
+ .artifact-row-main strong {
1001
+ @apply overflow-hidden text-ellipsis whitespace-nowrap;
1002
+ }
1003
+
1004
+ .artifact-row-meta {
1005
+ @apply grid min-w-0 gap-1;
1006
+ grid-template-columns: auto auto minmax(0, 1fr);
1007
+ }
1008
+
1009
+ .artifact-row-meta span {
1010
+ @apply min-w-0 overflow-hidden text-ellipsis whitespace-nowrap;
1011
+ }
1012
+
1013
+ .artifact-row-meta span:not(:last-child)::after {
1014
+ content: "|";
1015
+ margin-left: 0.25rem;
1016
+ color: var(--aw-dim);
1017
+ }
1018
+
1019
+ .artifact-row-actions {
1020
+ @apply flex items-center gap-2;
1021
+ }
1022
+
1023
+ .artifact-row-actions a,
1024
+ .artifact-action-link {
1025
+ color: var(--aw-cyan);
1026
+ font-size: 12px;
1027
+ font-weight: 700;
1028
+ text-decoration: none;
1029
+ }
1030
+
1031
+ .artifact-row-actions a:hover,
1032
+ .artifact-row-actions a:focus-visible,
1033
+ .artifact-action-link:hover,
1034
+ .artifact-action-link:focus-visible {
1035
+ color: var(--aw-accent-strong);
1036
+ text-decoration: underline;
1037
+ }
1038
+
1039
+ .artifact-preview {
1040
+ grid-template-rows: auto minmax(0, 1fr);
1041
+ }
1042
+
1043
+ .artifact-preview-header {
1044
+ @apply grid gap-2 px-3 py-2;
1045
+ border-bottom: 1px solid var(--aw-border);
1046
+ background: var(--aw-heading-bg);
1047
+ }
1048
+
1049
+ .artifact-selected {
1050
+ @apply grid min-w-0 gap-1;
1051
+ }
1052
+
1053
+ .artifact-selected h2,
1054
+ .artifact-selected p {
1055
+ @apply overflow-hidden text-ellipsis whitespace-nowrap;
1056
+ }
1057
+
1058
+ .artifact-toolbar {
1059
+ @apply flex flex-wrap items-center gap-2;
1060
+ }
1061
+
1062
+ .artifact-action-link {
1063
+ @apply inline-flex min-h-8 items-center justify-center rounded-md px-3 py-1.5;
1064
+ border: 1px solid var(--aw-border-strong);
1065
+ background: var(--aw-control-bg);
1066
+ }
1067
+
1068
+ .artifact-action-link.disabled {
1069
+ color: var(--aw-dim);
1070
+ cursor: not-allowed;
1071
+ opacity: 0.48;
1072
+ pointer-events: none;
1073
+ text-decoration: none;
1074
+ }
1075
+
1076
+ .artifact-action-status {
1077
+ min-height: 18px;
1078
+ }
1079
+
1080
+ .artifact-preview-content {
1081
+ @apply grid min-h-0 gap-3 overflow-auto;
1082
+ align-content: start;
1083
+ }
1084
+
1085
+ .artifact-rendered-markdown {
1086
+ @apply grid gap-3;
1087
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
1088
+ font-size: 14px;
1089
+ line-height: 1.6;
1090
+ color: var(--aw-text);
1091
+ }
1092
+
1093
+ .artifact-rendered-markdown h1,
1094
+ .artifact-rendered-markdown h2,
1095
+ .artifact-rendered-markdown h3,
1096
+ .artifact-rendered-markdown h4,
1097
+ .artifact-rendered-markdown h5,
1098
+ .artifact-rendered-markdown h6 {
1099
+ margin: 0;
1100
+ color: var(--aw-text);
1101
+ font-weight: 750;
1102
+ text-transform: none;
1103
+ }
1104
+
1105
+ .artifact-rendered-markdown h1 {
1106
+ font-size: 22px;
1107
+ }
1108
+
1109
+ .artifact-rendered-markdown h1::before {
1110
+ content: none;
1111
+ }
1112
+
1113
+ .artifact-rendered-markdown h2 {
1114
+ font-size: 18px;
1115
+ }
1116
+
1117
+ .artifact-rendered-markdown h3 {
1118
+ font-size: 15px;
1119
+ }
1120
+
1121
+ .artifact-rendered-markdown p,
1122
+ .artifact-rendered-markdown ul,
1123
+ .artifact-rendered-markdown ol {
1124
+ margin: 0;
1125
+ }
1126
+
1127
+ .artifact-rendered-markdown ul,
1128
+ .artifact-rendered-markdown ol {
1129
+ padding-left: 1.35rem;
1130
+ }
1131
+
1132
+ .artifact-rendered-markdown a,
1133
+ .artifact-placeholder-actions a {
1134
+ color: var(--aw-cyan);
1135
+ font-weight: 700;
1136
+ }
1137
+
1138
+ .artifact-rendered-markdown code,
1139
+ .artifact-rendered-markdown pre,
1140
+ .artifact-text-preview {
1141
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
1142
+ }
1143
+
1144
+ .artifact-rendered-markdown code {
1145
+ border: 1px solid var(--aw-border);
1146
+ border-radius: 4px;
1147
+ background: var(--aw-code-bg);
1148
+ padding: 0.08rem 0.28rem;
1149
+ color: var(--aw-code-text);
1150
+ }
1151
+
1152
+ .artifact-rendered-markdown pre,
1153
+ .artifact-text-preview {
1154
+ @apply m-0 overflow-auto rounded-md p-3;
1155
+ border: 1px solid var(--aw-border);
1156
+ background: var(--aw-pre-bg);
1157
+ color: var(--aw-pre-text);
1158
+ font-size: 12px;
1159
+ line-height: 1.5;
1160
+ overflow-wrap: anywhere;
1161
+ white-space: pre-wrap;
1162
+ }
1163
+
1164
+ .artifact-rendered-markdown pre code {
1165
+ border: 0;
1166
+ background: transparent;
1167
+ padding: 0;
1168
+ }
1169
+
1170
+ .artifact-rendered-markdown table {
1171
+ width: 100%;
1172
+ border-collapse: collapse;
1173
+ font-size: 13px;
1174
+ }
1175
+
1176
+ .artifact-rendered-markdown th,
1177
+ .artifact-rendered-markdown td {
1178
+ border: 1px solid var(--aw-border);
1179
+ padding: 6px 8px;
1180
+ text-align: left;
1181
+ vertical-align: top;
1182
+ }
1183
+
1184
+ .artifact-rendered-markdown th {
1185
+ background: var(--aw-muted-bg);
1186
+ color: var(--aw-accent-strong);
1187
+ }
1188
+
1189
+ .artifact-json-viewer {
1190
+ @apply grid gap-3;
1191
+ }
1192
+
1193
+ .artifact-preview-modes {
1194
+ @apply flex flex-wrap items-center gap-2;
1195
+ }
1196
+
1197
+ .artifact-preview-warning,
1198
+ .artifact-truncation {
1199
+ @apply rounded-md px-3 py-2;
1200
+ border: 1px solid rgba(242, 201, 76, 0.42);
1201
+ background: var(--aw-warning-soft);
1202
+ color: var(--aw-warning-text);
1203
+ font-size: 13px;
1204
+ }
1205
+
1206
+ .artifact-kind-label {
1207
+ @apply inline-flex w-fit rounded-full px-2.5 py-1 text-xs font-bold uppercase tracking-normal;
1208
+ border: 1px solid var(--aw-border-strong);
1209
+ color: var(--aw-cyan);
1210
+ background: var(--aw-file-badge-bg);
1211
+ }
1212
+
1213
+ .artifact-placeholder {
1214
+ @apply grid gap-3 rounded-md p-3;
1215
+ border: 1px dashed var(--aw-border-strong);
1216
+ background: var(--aw-surface-bg);
1217
+ }
1218
+
1219
+ .artifact-placeholder dl {
1220
+ @apply grid gap-2;
1221
+ grid-template-columns: minmax(80px, auto) minmax(0, 1fr);
1222
+ margin: 0;
1223
+ }
1224
+
1225
+ .artifact-placeholder dt {
1226
+ color: var(--aw-muted);
1227
+ font-weight: 700;
1228
+ }
1229
+
1230
+ .artifact-placeholder dd {
1231
+ margin: 0;
1232
+ overflow-wrap: anywhere;
1233
+ }
1234
+
1235
+ .artifact-placeholder-actions {
1236
+ @apply flex flex-wrap gap-3;
1237
+ }
1238
+
1239
+ .artifact-empty {
1240
+ @apply rounded-md p-3;
1241
+ border: 1px dashed var(--aw-border);
1242
+ background: var(--aw-surface-bg);
1243
+ }
1244
+
1245
+ .git-diff-drawer {
1246
+ @apply fixed right-0 top-0 z-10 grid h-full;
1247
+ width: min(1240px, calc(100vw - 24px));
1248
+ grid-template-rows: auto auto minmax(0, 1fr);
1249
+ border-left: 1px solid var(--aw-border-strong);
1250
+ background: var(--aw-drawer-bg);
1251
+ box-shadow: var(--aw-shadow);
1252
+ }
1253
+
1254
+ .git-diff-drawer-header {
1255
+ @apply flex items-start justify-between gap-3 px-4 py-3;
1256
+ border-bottom: 1px solid var(--aw-border);
1257
+ background: var(--aw-heading-bg);
1258
+ }
1259
+
1260
+ .git-diff-drawer-header p,
1261
+ .git-diff-status,
1262
+ .git-diff-empty,
1263
+ .git-diff-file span,
1264
+ .git-diff-selected p {
1265
+ color: var(--aw-muted);
1266
+ font-size: 13px;
1267
+ }
1268
+
1269
+ .git-diff-status {
1270
+ min-height: 38px;
1271
+ padding: 10px 14px;
1272
+ border-bottom: 1px solid var(--aw-border);
1273
+ }
1274
+
1275
+ .git-diff-drawer-body {
1276
+ @apply grid min-h-0;
1277
+ grid-template-columns: minmax(270px, 0.28fr) minmax(620px, 1fr);
1278
+ }
1279
+
1280
+ .git-diff-file-pane,
1281
+ .git-diff-preview {
1282
+ @apply grid min-h-0;
1283
+ grid-template-rows: auto minmax(0, 1fr);
1284
+ }
1285
+
1286
+ .git-diff-file-pane {
1287
+ border-right: 1px solid var(--aw-border);
1288
+ }
1289
+
1290
+ .git-diff-file-list {
1291
+ @apply grid min-h-0 content-start gap-2 overflow-auto p-3;
1292
+ }
1293
+
1294
+ .git-diff-file {
1295
+ @apply grid w-full justify-stretch gap-1 rounded-md p-2 text-left;
1296
+ border: 1px solid var(--aw-border);
1297
+ background: var(--aw-surface-bg);
1298
+ box-shadow: none;
1299
+ }
1300
+
1301
+ .git-diff-file.selected {
1302
+ border-color: rgba(101, 216, 255, 0.72);
1303
+ background: var(--aw-running-soft);
1304
+ }
1305
+
1306
+ .git-diff-file strong,
1307
+ .git-diff-file span {
1308
+ @apply min-w-0 overflow-hidden text-ellipsis whitespace-nowrap;
1309
+ }
1310
+
1311
+ .git-diff-preview {
1312
+ grid-template-rows: auto minmax(0, 1fr);
1313
+ }
1314
+
1315
+ .git-diff-preview-header {
1316
+ @apply grid gap-2 px-3 py-2;
1317
+ grid-template-columns: minmax(0, 1fr) auto;
1318
+ border-bottom: 1px solid var(--aw-border);
1319
+ background: var(--aw-heading-bg);
1320
+ }
1321
+
1322
+ .git-diff-selected {
1323
+ @apply grid min-w-0 gap-1;
1324
+ }
1325
+
1326
+ .git-diff-selected h2,
1327
+ .git-diff-selected p {
1328
+ @apply overflow-hidden text-ellipsis whitespace-nowrap;
1329
+ }
1330
+
1331
+ .git-diff-mode-controls {
1332
+ @apply flex flex-wrap items-center justify-end gap-2;
1333
+ }
1334
+
1335
+ .git-diff-body {
1336
+ @apply min-h-0 overflow-auto p-3;
1337
+ background: var(--aw-surface-bg);
1338
+ color: var(--aw-text-panel-text);
1339
+ font-size: 12px;
1340
+ }
1341
+
1342
+ .git-diff-table {
1343
+ display: grid;
1344
+ min-width: 760px;
1345
+ grid-auto-rows: minmax(26px, auto);
1346
+ border: 1px solid var(--aw-border);
1347
+ border-radius: 6px;
1348
+ overflow: hidden;
1349
+ }
1350
+
1351
+ .git-diff-hunk,
1352
+ .git-diff-row {
1353
+ display: grid;
1354
+ grid-template-columns: 58px minmax(260px, 1fr) 58px minmax(260px, 1fr);
1355
+ }
1356
+
1357
+ .git-diff-hunk {
1358
+ grid-column: 1 / -1;
1359
+ padding: 7px 10px;
1360
+ border-top: 1px solid var(--aw-border);
1361
+ border-bottom: 1px solid var(--aw-border);
1362
+ background: var(--aw-running-soft);
1363
+ color: var(--aw-running-text);
1364
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
1365
+ font-weight: 700;
1366
+ }
1367
+
1368
+ .git-diff-table .git-diff-hunk:first-child {
1369
+ border-top: 0;
1370
+ }
1371
+
1372
+ .git-diff-row {
1373
+ border-bottom: 1px solid var(--aw-diff-border);
1374
+ }
1375
+
1376
+ .git-diff-row:last-child {
1377
+ border-bottom: 0;
1378
+ }
1379
+
1380
+ .git-diff-line-number,
1381
+ .git-diff-code {
1382
+ min-width: 0;
1383
+ padding: 4px 8px;
1384
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
1385
+ white-space: pre-wrap;
1386
+ overflow-wrap: anywhere;
1387
+ }
1388
+
1389
+ .git-diff-line-number {
1390
+ color: var(--aw-dim);
1391
+ text-align: right;
1392
+ user-select: none;
1393
+ border-right: 1px solid var(--aw-diff-border);
1394
+ background: var(--aw-diff-line-number-bg);
1395
+ }
1396
+
1397
+ .git-diff-code.left {
1398
+ border-right: 1px solid var(--aw-border);
1399
+ }
1400
+
1401
+ .git-diff-row.row-add .right,
1402
+ .git-diff-row.row-modify .right {
1403
+ background: var(--aw-diff-add-bg);
1404
+ color: var(--aw-diff-add-text);
1405
+ }
1406
+
1407
+ .git-diff-row.row-delete .left,
1408
+ .git-diff-row.row-modify .left {
1409
+ background: var(--aw-diff-delete-bg);
1410
+ color: var(--aw-diff-delete-text);
1411
+ }
1412
+
1413
+ .git-diff-row.row-context .git-diff-code {
1414
+ background: var(--aw-diff-context-bg);
1415
+ }
1416
+
1417
+ .modal-root:empty {
1418
+ display: none;
1419
+ }
1420
+
1421
+ .modal-root {
1422
+ @apply fixed inset-0 z-20 grid place-items-center p-5;
1423
+ background: var(--aw-modal-overlay);
1424
+ backdrop-filter: blur(8px);
1425
+ }
1426
+
1427
+ .modal {
1428
+ @apply grid w-full rounded-lg;
1429
+ width: min(720px, 100%);
1430
+ max-height: min(760px, calc(100vh - 40px));
1431
+ grid-template-rows: auto minmax(0, 1fr) auto;
1432
+ border: 1px solid var(--aw-border-strong);
1433
+ background: var(--aw-panel);
1434
+ box-shadow: var(--aw-shadow);
1435
+ }
1436
+
1437
+ .modal.form-flow-routing-editor {
1438
+ width: min(940px, 100%);
1439
+ }
1440
+
1441
+ .modal-header,
1442
+ .modal-body,
1443
+ .modal-footer {
1444
+ padding: 12px 14px;
1445
+ }
1446
+
1447
+ .modal-header {
1448
+ border-bottom: 1px solid var(--aw-border);
1449
+ }
1450
+
1451
+ .modal-header p,
1452
+ .field-help,
1453
+ .field-option small,
1454
+ .modal-note {
1455
+ color: var(--aw-muted);
1456
+ font-size: 13px;
1457
+ }
1458
+
1459
+ .modal-body {
1460
+ @apply grid min-h-0 gap-3 overflow-auto;
1461
+ }
1462
+
1463
+ .modal-footer {
1464
+ @apply flex items-center justify-between gap-3;
1465
+ border-top: 1px solid var(--aw-border);
1466
+ }
1467
+
1468
+ .modal-actions {
1469
+ @apply flex-wrap justify-end;
1470
+ }
1471
+
1472
+ .form-fields {
1473
+ @apply grid gap-3;
1474
+ }
1475
+
1476
+ .form-fields.route-fields {
1477
+ gap: 0;
1478
+ }
1479
+
1480
+ .field-pair {
1481
+ @apply grid items-start gap-4 py-3;
1482
+ grid-template-columns: minmax(220px, 0.9fr) minmax(280px, 1.1fr);
1483
+ border-bottom: 1px solid var(--aw-border);
1484
+ }
1485
+
1486
+ .field-pair:first-child {
1487
+ padding-top: 0;
1488
+ }
1489
+
1490
+ .field-pair:last-child {
1491
+ border-bottom: 0;
1492
+ padding-bottom: 0;
1493
+ }
1494
+
1495
+ .field {
1496
+ @apply grid gap-1.5;
1497
+ }
1498
+
1499
+ .field label,
1500
+ .field-title {
1501
+ font-weight: 700;
1502
+ }
1503
+
1504
+ .field input[type="text"],
1505
+ .field textarea,
1506
+ .field select {
1507
+ @apply min-h-9 w-full rounded-md px-2.5 py-2;
1508
+ border: 1px solid var(--aw-border-strong);
1509
+ background: var(--aw-input-bg);
1510
+ color: var(--aw-text);
1511
+ }
1512
+
1513
+ .field input[type="text"]:focus,
1514
+ .field textarea:focus,
1515
+ .field select:focus {
1516
+ border-color: var(--aw-accent);
1517
+ outline: 2px solid transparent;
1518
+ box-shadow: 0 0 0 3px var(--aw-control-ring);
1519
+ }
1520
+
1521
+ .field textarea {
1522
+ resize: vertical;
1523
+ }
1524
+
1525
+ .check-row,
1526
+ .field-option {
1527
+ @apply flex items-start gap-2;
1528
+ }
1529
+
1530
+ .option-list {
1531
+ @apply grid gap-1.5;
1532
+ }
1533
+
1534
+ .error-text {
1535
+ color: var(--aw-danger);
1536
+ font-weight: 700;
1537
+ }
1538
+
1539
+ ::selection {
1540
+ background: var(--aw-accent-soft);
1541
+ color: var(--aw-text);
1542
+ }
1543
+
1544
+ ::-webkit-scrollbar {
1545
+ width: 10px;
1546
+ height: 10px;
1547
+ }
1548
+
1549
+ ::-webkit-scrollbar-thumb {
1550
+ background: var(--aw-scrollbar-thumb);
1551
+ border: 2px solid var(--aw-scrollbar-track);
1552
+ border-radius: 999px;
1553
+ }
1554
+
1555
+ ::-webkit-scrollbar-track {
1556
+ background: var(--aw-scrollbar-track);
1557
+ }
1558
+
1559
+ @media (max-width: 1080px) {
1560
+ body {
1561
+ overflow: auto;
1562
+ }
1563
+
1564
+ .app-shell {
1565
+ min-height: 100%;
1566
+ height: auto;
1567
+ }
1568
+
1569
+ .workspace {
1570
+ grid-template-columns: minmax(220px, 0.35fr) minmax(0, 1fr);
1571
+ grid-template-rows: minmax(260px, 42vh) minmax(520px, 1fr);
1572
+ }
1573
+
1574
+ .log-pane {
1575
+ grid-column: 1 / -1;
1576
+ min-height: 320px;
1577
+ }
1578
+
1579
+ .artifact-drawer {
1580
+ width: min(960px, calc(100vw - 18px));
1581
+ }
1582
+
1583
+ .git-diff-drawer {
1584
+ width: min(1000px, calc(100vw - 18px));
1585
+ }
1586
+
1587
+ .artifact-drawer-body {
1588
+ grid-template-columns: minmax(280px, 0.45fr) minmax(360px, 1fr);
1589
+ }
1590
+
1591
+ .git-diff-drawer-body {
1592
+ grid-template-columns: minmax(250px, 0.35fr) minmax(520px, 1fr);
1593
+ }
1594
+ }
1595
+
1596
+ @media (max-width: 760px) {
1597
+ .topbar {
1598
+ grid-template-columns: 1fr;
1599
+ gap: 10px;
1600
+ }
1601
+
1602
+ .status-strip,
1603
+ .topbar-actions {
1604
+ justify-content: flex-start;
1605
+ flex-wrap: wrap;
1606
+ }
1607
+
1608
+ .workspace,
1609
+ .split-panels {
1610
+ grid-template-columns: 1fr;
1611
+ }
1612
+
1613
+ .workspace-resizer {
1614
+ display: none;
1615
+ }
1616
+
1617
+ .workspace {
1618
+ grid-template-rows: 260px 760px 340px;
1619
+ }
1620
+
1621
+ .artifact-drawer {
1622
+ top: auto;
1623
+ bottom: 0;
1624
+ height: min(92vh, 760px);
1625
+ width: 100vw;
1626
+ grid-template-rows: auto auto minmax(0, 1fr);
1627
+ border-left: 0;
1628
+ border-top: 1px solid var(--aw-border-strong);
1629
+ }
1630
+
1631
+ .git-diff-drawer {
1632
+ top: auto;
1633
+ bottom: 0;
1634
+ height: min(94vh, 820px);
1635
+ width: 100vw;
1636
+ border-left: 0;
1637
+ border-top: 1px solid var(--aw-border-strong);
1638
+ }
1639
+
1640
+ .artifact-drawer-header {
1641
+ align-items: flex-start;
1642
+ }
1643
+
1644
+ .artifact-drawer-body {
1645
+ grid-template-columns: 1fr;
1646
+ grid-template-rows: minmax(190px, 0.42fr) minmax(260px, 1fr);
1647
+ }
1648
+
1649
+ .git-diff-drawer-body {
1650
+ grid-template-columns: 1fr;
1651
+ grid-template-rows: minmax(160px, 0.32fr) minmax(360px, 1fr);
1652
+ }
1653
+
1654
+ .artifact-list-pane {
1655
+ border-right: 0;
1656
+ border-bottom: 1px solid var(--aw-border);
1657
+ }
1658
+
1659
+ .git-diff-file-pane {
1660
+ border-right: 0;
1661
+ border-bottom: 1px solid var(--aw-border);
1662
+ }
1663
+
1664
+ .git-diff-preview-header {
1665
+ grid-template-columns: 1fr;
1666
+ }
1667
+
1668
+ .git-diff-mode-controls {
1669
+ justify-content: flex-start;
1670
+ }
1671
+
1672
+ .artifact-row {
1673
+ grid-template-columns: 1fr;
1674
+ }
1675
+
1676
+ .artifact-row-actions {
1677
+ justify-content: flex-start;
1678
+ }
1679
+
1680
+ .artifact-row-meta {
1681
+ grid-template-columns: minmax(0, 1fr);
1682
+ }
1683
+
1684
+ .artifact-row-meta span:not(:last-child)::after {
1685
+ content: "";
1686
+ margin-left: 0;
1687
+ }
1688
+
1689
+ .artifact-selected h2,
1690
+ .artifact-selected p {
1691
+ white-space: normal;
1692
+ overflow-wrap: anywhere;
1693
+ }
1694
+
1695
+ .field-pair {
466
1696
  grid-template-columns: 1fr;
467
1697
  gap: 12px;
468
1698
  }
1699
+
1700
+ .git-commit-row {
1701
+ grid-template-columns: 1fr;
1702
+ }
469
1703
  }