@zq-silk/yui 2.3.0 → 2.4.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 (183) hide show
  1. package/README.md +15 -1
  2. package/dist/artifacts/artifactCapability.js +39 -10
  3. package/dist/artifacts/imageMetadata.js +120 -0
  4. package/dist/artifacts/managedGit.js +7 -4
  5. package/dist/artifacts/taskArtifactRepository.js +6 -0
  6. package/dist/cli/commandCatalog.js +17 -8
  7. package/dist/cli/invocationAuthority.js +1 -1
  8. package/dist/commands/executionAuditCommands.js +5 -0
  9. package/dist/commands/globalRoleCommands.js +41 -3
  10. package/dist/commands/projectCommands.js +89 -94
  11. package/dist/commands/roleSkillValidation.js +4 -8
  12. package/dist/commands/taskCommands.js +25 -2
  13. package/dist/commands/taskUsageCommand.js +38 -0
  14. package/dist/context/roleSessionContext.js +18 -2
  15. package/dist/context/runContextPack.js +5 -1
  16. package/dist/context/sessionBootstrapManifest.js +10 -1
  17. package/dist/context/skillCatalog.js +108 -0
  18. package/dist/context/skillPackage.js +161 -0
  19. package/dist/context/taskContext.js +3 -2
  20. package/dist/context/taskSearch.js +127 -0
  21. package/dist/controlPlaneCli.js +25 -20
  22. package/dist/controller/fileSchedulerStoreAdapter.js +32 -6
  23. package/dist/controller/jobControl.js +2 -0
  24. package/dist/controller/nativeHostInput.js +37 -0
  25. package/dist/controller/runtime.js +93 -2
  26. package/dist/controller/runtimeEventInbox.js +2 -2
  27. package/dist/controller/runtimeEventProcessor.js +3 -3
  28. package/dist/doctor/doctor.js +10 -0
  29. package/dist/execution/reviewMainRun.js +1 -0
  30. package/dist/execution/workItemMainRun.js +1 -0
  31. package/dist/executor/codexConfigConflict.js +6 -4
  32. package/dist/executor/effectiveLaunch.js +24 -1
  33. package/dist/executor/fileRoleLaunchPlanner.js +13 -5
  34. package/dist/integration/gitIntegrationService.js +7 -12
  35. package/dist/integration/integrationSourceApplication.js +4 -2
  36. package/dist/job/httpPreview.js +61 -0
  37. package/dist/job/jobRunner.js +12 -2
  38. package/dist/kernel/builtinCapabilities.js +3 -1
  39. package/dist/message/message.js +15 -1
  40. package/dist/output/rolePresentation.js +4 -1
  41. package/dist/repository/executionLaneGitSnapshot.js +2 -1
  42. package/dist/repository/gitCompatibility.js +62 -0
  43. package/dist/repository/gitWorkspace.js +48 -71
  44. package/dist/repository/gitWorktreeInventory.js +121 -0
  45. package/dist/repository/project.js +74 -25
  46. package/dist/resources/resourceDiscovery.js +2 -2
  47. package/dist/resources/resourceGc.js +7 -4
  48. package/dist/resources/resourceRegistrar.js +2 -1
  49. package/dist/runtime/agentEndpoint.js +8 -0
  50. package/dist/runtime/agentHost.js +170 -3
  51. package/dist/runtime/codexAppServerRuntime.js +1 -1
  52. package/dist/runtime/codexNativeAccess.js +175 -0
  53. package/dist/runtime/controlledCodexTui.js +116 -0
  54. package/dist/runtime/publicReply.js +23 -0
  55. package/dist/runtime/runtimeObservation.js +48 -0
  56. package/dist/runtime/structuredProviderHost.js +16 -7
  57. package/dist/runtime/taskCostMetrics.js +133 -0
  58. package/dist/runtime/taskUsageMetrics.js +11 -2
  59. package/dist/runtime/taskUsageQuery.js +38 -0
  60. package/dist/scheduler/taskExecutionProjection.js +2 -0
  61. package/dist/scheduler/taskObservabilityProjection.js +9 -1
  62. package/dist/storage/homeLayout.js +13 -0
  63. package/dist/storage/sqliteSchema.js +44 -0
  64. package/dist/storage/sqliteStore.js +53 -0
  65. package/dist/storage/storageVersions.js +1 -1
  66. package/dist/storage/storeRpc.js +2 -0
  67. package/dist/storage/taskSearch.js +35 -0
  68. package/dist/storage/upgrade/projectKnowledgeMigration.js +52 -0
  69. package/dist/task/ordinaryArchive.js +42 -0
  70. package/dist/tmux/tmuxManager.js +8 -8
  71. package/dist/web/assets/assetManifest.js +11 -51
  72. package/dist/web/assets/client/app/catalog.js +215 -0
  73. package/dist/web/assets/client/app/main.js +148 -0
  74. package/dist/web/assets/client/app/selection.js +139 -0
  75. package/dist/web/assets/client/app/settings.js +326 -0
  76. package/dist/web/assets/client/app/taskView.js +280 -0
  77. package/dist/web/assets/client/domain/context.js +96 -0
  78. package/dist/web/assets/client/domain/records.js +126 -0
  79. package/dist/web/assets/client/domain/runs.js +119 -0
  80. package/dist/web/assets/client/domain/taskForms.js +197 -0
  81. package/dist/web/assets/client/domain/vocab.js +69 -0
  82. package/dist/web/assets/client/domain/work.js +116 -0
  83. package/dist/web/assets/client/i18n/en.js +900 -0
  84. package/dist/web/assets/client/i18n/zh-CN.js +898 -0
  85. package/dist/web/assets/client/index.js +114 -0
  86. package/dist/web/assets/client/layout/resizer.js +37 -0
  87. package/dist/web/assets/client/layout/router.js +35 -0
  88. package/dist/web/assets/client/layout/shortcuts.js +45 -0
  89. package/dist/web/assets/client/layout/sizing.js +95 -0
  90. package/dist/web/assets/client/layout/workspace.js +247 -0
  91. package/dist/web/assets/client/{api.js → lib/api.js} +20 -4
  92. package/dist/web/assets/client/{dom.js → lib/dom.js} +24 -12
  93. package/dist/web/assets/client/{format.js → lib/format.js} +7 -0
  94. package/dist/web/assets/client/lib/i18n.js +54 -0
  95. package/dist/web/assets/client/lib/markdown.js +167 -0
  96. package/dist/web/assets/client/lib/prefs.js +28 -0
  97. package/dist/web/assets/client/lib/theme.js +68 -0
  98. package/dist/web/assets/client/ui/containers.js +101 -0
  99. package/dist/web/assets/client/ui/controls.js +51 -0
  100. package/dist/web/assets/client/ui/forms.js +48 -0
  101. package/dist/web/assets/client/ui/metrics.js +137 -0
  102. package/dist/web/assets/client/ui/primitives.js +92 -0
  103. package/dist/web/assets/client/ui/text.js +33 -0
  104. package/dist/web/assets/client/ui/toast.js +12 -0
  105. package/dist/web/assets/client/views/bodySearch.js +172 -0
  106. package/dist/web/assets/client/views/createTask.js +85 -0
  107. package/dist/web/assets/client/views/dock/conversation.js +612 -0
  108. package/dist/web/assets/client/views/dock/discussion.js +173 -0
  109. package/dist/web/assets/client/views/dock/preview.js +129 -0
  110. package/dist/web/assets/client/views/dock/terminal.js +199 -0
  111. package/dist/web/assets/client/views/globalInput.js +67 -0
  112. package/dist/web/assets/client/{overview.js → views/overview.js} +61 -51
  113. package/dist/web/assets/client/{sidebar.js → views/sidebar.js} +56 -62
  114. package/dist/web/assets/client/views/skills.js +152 -0
  115. package/dist/web/assets/client/views/task/actions.js +36 -0
  116. package/dist/web/assets/client/views/task/delivery.js +185 -0
  117. package/dist/web/assets/client/views/task/deliveryResults.js +159 -0
  118. package/dist/web/assets/client/views/task/files.js +272 -0
  119. package/dist/web/assets/client/views/task/observation.js +153 -0
  120. package/dist/web/assets/client/views/task/overview.js +161 -0
  121. package/dist/web/assets/client/views/task/page.js +131 -0
  122. package/dist/web/assets/client/views/task/records.js +163 -0
  123. package/dist/web/assets/client/views/task/runtime.js +130 -0
  124. package/dist/web/assets/client/views/task/timeline.js +190 -0
  125. package/dist/web/assets/shared/geometry.js +19 -0
  126. package/dist/web/assets/shared/taskTabs.js +8 -0
  127. package/dist/web/assets/shared/themes.js +93 -0
  128. package/dist/web/assets/shell/dialogs.js +63 -0
  129. package/dist/web/assets/shell/dock.js +40 -0
  130. package/dist/web/assets/shell/index.js +40 -0
  131. package/dist/web/assets/shell/settings.js +34 -0
  132. package/dist/web/assets/shell/sidebar.js +45 -0
  133. package/dist/web/assets/styles/index.js +41 -0
  134. package/dist/web/assets/styles/{responsive.js → layout/responsive.js} +10 -10
  135. package/dist/web/assets/styles/{layout.js → layout/workspace.js} +17 -24
  136. package/dist/web/assets/styles/markdown.js +22 -3
  137. package/dist/web/assets/styles/tokens.js +10 -63
  138. package/dist/web/assets/styles/ui/controls.js +76 -0
  139. package/dist/web/assets/styles/ui/forms.js +46 -0
  140. package/dist/web/assets/styles/ui/surfaces.js +122 -0
  141. package/dist/web/assets/styles/views/delivery.js +29 -0
  142. package/dist/web/assets/styles/views/dock.js +71 -0
  143. package/dist/web/assets/styles/views/page.js +32 -0
  144. package/dist/web/assets/styles/views/records.js +70 -0
  145. package/dist/web/assets/styles/views/settings.js +26 -0
  146. package/dist/web/assets/styles/views/sidebar.js +74 -0
  147. package/dist/web/assets/styles/views/task.js +80 -0
  148. package/dist/web/assets/styles/views/terminal.js +38 -0
  149. package/dist/web/taskPreviews.js +205 -0
  150. package/dist/web/tmuxWebTerminal.js +16 -9
  151. package/dist/web/webConversation.js +373 -0
  152. package/dist/web/webMaterials.js +155 -0
  153. package/dist/web/webServer.js +295 -18
  154. package/dist/web/webSettings.js +331 -0
  155. package/dist/web/webSkills.js +86 -0
  156. package/dist/web/webSnapshot.js +40 -8
  157. package/dist/web/webTaskSurface.js +106 -8
  158. package/dist/workspace/gitChangeSetCapture.js +3 -1
  159. package/docs/managed-turn-and-session-runtime.md +9 -0
  160. package/docs/managed-turn-and-session-runtime.zh-CN.md +7 -0
  161. package/docs/release-workflow.md +28 -0
  162. package/docs/release-workflow.zh-CN.md +21 -0
  163. package/docs/storage-baseline.md +38 -1
  164. package/docs/storage-baseline.zh-CN.md +22 -0
  165. package/docs/task-discovery.md +28 -0
  166. package/docs/testing/verification-levels.md +2 -2
  167. package/i18n/README.zh-CN.md +1 -1
  168. package/package.json +1 -1
  169. package/dist/web/assets/client/app.js +0 -808
  170. package/dist/web/assets/client/components.js +0 -477
  171. package/dist/web/assets/client/detail.js +0 -379
  172. package/dist/web/assets/client/dock.js +0 -309
  173. package/dist/web/assets/client/evidence.js +0 -364
  174. package/dist/web/assets/client/forms.js +0 -230
  175. package/dist/web/assets/client/i18n.js +0 -1277
  176. package/dist/web/assets/client/markdown.js +0 -114
  177. package/dist/web/assets/client/records.js +0 -198
  178. package/dist/web/assets/client/sections.js +0 -349
  179. package/dist/web/assets/client/theme.js +0 -71
  180. package/dist/web/assets/shell.js +0 -161
  181. package/dist/web/assets/styles/components.js +0 -216
  182. package/dist/web/assets/styles/views.js +0 -309
  183. /package/dist/web/assets/{icons.js → shared/icons.js} +0 -0
@@ -1,309 +0,0 @@
1
- /*
2
- * VIEWS — styling for the concrete surfaces: sidebar index, overview, task
3
- * page (header, tabs, panels, records) and the session dock. The overview
4
- * and every task tab are a single reading column; nothing pairs cards side by
5
- * side.
6
- */
7
- export const VIEW_STYLES = `
8
- /* ---------- Sidebar ---------- */
9
- .brand-mark{display:grid;place-items:center;width:28px;height:28px;flex:none;border-radius:8px;background:var(--accent);color:var(--accent-ink);font-size:15px;font-weight:700;line-height:1}
10
- .brand-name{font-size:var(--fs-lg);font-weight:650;letter-spacing:-.02em}
11
- .sync{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 8px;border-radius:var(--r-pill);background:var(--surface-3);color:var(--ink-3);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
12
- .sync i{width:6px;height:6px;border-radius:50%;background:var(--ink-4)}
13
- .sync[data-state="ok"] i{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}
14
- .sync[data-state="syncing"] i{background:var(--info);animation:blink 1s ease-in-out infinite}
15
- .sync[data-state="error"] i{background:var(--bad);box-shadow:0 0 0 3px var(--bad-soft)}
16
- .sync[data-state="error"]{color:var(--bad)}
17
- @keyframes blink{50%{opacity:.35}}
18
- .search-field{position:relative;display:flex;align-items:center}
19
- .search-field>.icon{position:absolute;left:10px;color:var(--ink-4);pointer-events:none}
20
- .search-field input{height:34px;padding:0 34px 0 32px;border-radius:var(--r-md);background:var(--surface-2)}
21
- .search-field input::-webkit-search-cancel-button{display:none}
22
- .search-field kbd{position:absolute;right:8px}
23
- .attention-list{display:flex;flex-wrap:wrap;gap:6px}
24
- .attention-pill{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 9px;border:1px solid transparent;border-radius:var(--r-pill);background:var(--tone-soft);color:var(--tone);font-size:var(--fs-xs);font-weight:500}
25
- .attention-pill b{font-weight:700;font-variant-numeric:tabular-nums}
26
- .attention-pill:hover{border-color:var(--tone)}
27
- .attention-pill[aria-pressed="true"]{background:var(--tone);color:var(--canvas)}
28
- .attention-clear{display:flex;align-items:center;gap:6px;color:var(--ink-4);font-size:var(--fs-xs)}
29
- .attention-clear .icon{color:var(--ok)}
30
- .tabs-row{position:relative;display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px;border-bottom:1px solid var(--line)}
31
- .tabs-row[data-fade="end"]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}
32
- .tabs-row[data-fade="start"]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 28px);mask-image:linear-gradient(90deg,transparent,#000 28px)}
33
- .tabs-row[data-fade="both"]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent)}
34
- .tabs-row::-webkit-scrollbar{display:none}
35
- .status-tab{position:relative;display:inline-flex;align-items:center;gap:5px;flex:none;height:32px;padding:0 8px;border:0;background:transparent;color:var(--ink-3);font-size:var(--fs-xs);font-weight:500;white-space:nowrap}
36
- .status-tab:hover{color:var(--ink)}
37
- .status-tab[aria-pressed="true"]{color:var(--ink)}
38
- .status-tab[aria-pressed="true"]::after{content:"";position:absolute;left:6px;right:6px;bottom:-3px;height:2px;border-radius:2px;background:var(--accent)}
39
- .status-tab-count{color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
40
- .task-group{margin-top:8px}
41
- .task-group-head{display:flex;align-items:center;gap:6px;padding:4px 8px 4px;color:var(--ink-4);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.07em}
42
- .task-group-head .count{background:transparent;padding:0;min-width:0}
43
- .task-row{position:relative;display:flex;align-items:flex-start;gap:9px;width:100%;padding:7px 10px;border:0;border-radius:var(--r-md);background:transparent;text-align:left;transition:background var(--t-fast)}
44
- .task-row>.dot{margin-top:5px}
45
- .task-row:hover{background:var(--surface-3)}
46
- .task-row[aria-current="true"]{background:var(--surface-3);box-shadow:inset 0 0 0 1px var(--line-2)}
47
- .task-row[aria-current="true"]::before{content:"";position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--accent)}
48
- .task-body{display:grid;gap:1px;flex:1;min-width:0}
49
- .task-line{display:flex;align-items:center;gap:8px;min-width:0}
50
- .task-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-size:var(--fs-md);font-weight:500;line-height:1.35}
51
- .task-time{flex:none;color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
52
- .task-sub{gap:8px;height:18px;color:var(--ink-4);font-size:var(--fs-2xs)}
53
- .task-id{font-size:var(--fs-2xs);line-height:1;color:var(--ink-3)}
54
- .task-count{display:inline-flex;align-items:center;gap:3px;line-height:1;white-space:nowrap}
55
- .task-count .icon{width:11px;height:11px}
56
- .task-signals{display:inline-flex;gap:4px;margin-left:auto}
57
- .signal{display:inline-flex;align-items:center;gap:3px;height:18px;padding:0 6px;border-radius:var(--r-pill);background:var(--tone-soft);color:var(--tone);font-size:10.5px;font-weight:600;font-variant-numeric:tabular-nums}
58
- .signal .icon{width:11px;height:11px;stroke-width:2}
59
- .list-empty{display:grid;justify-items:center;gap:8px;padding:36px 16px;color:var(--ink-4);font-size:var(--fs-sm);text-align:center}
60
- .list-empty.is-error{color:var(--bad)}
61
- .pager-btn{height:28px;padding:0 10px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:transparent;color:var(--ink-2);font-size:var(--fs-xs)}
62
- .pager-btn:hover:not(:disabled){border-color:var(--line-3);color:var(--ink)}
63
- .pager-btn:disabled{opacity:.4}
64
- .pager-count{grid-column:2;text-align:center;color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
65
- .pager-clear{height:28px;border:1px dashed var(--line-3);border-radius:var(--r-sm);background:transparent;color:var(--ink-3);font-size:var(--fs-xs)}
66
- .pager-clear:hover{color:var(--accent);border-color:var(--accent-line)}
67
- .foot-btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 8px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:transparent;color:var(--ink-2);font-size:var(--fs-xs);font-weight:500;min-width:0}
68
- .foot-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
69
- .foot-btn:hover{color:var(--ink);border-color:var(--line-3);background:var(--surface-3)}
70
- .foot-btn[aria-pressed="true"]{color:var(--accent);border-color:var(--accent-line);background:var(--accent-soft)}
71
- .foot-btn kbd{margin-left:2px}
72
- .side-foot .icon-btn{margin-left:auto}
73
-
74
- /* ---------- Page scaffolding ---------- */
75
- .page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:36px 0 24px}
76
- .kicker{color:var(--accent);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.1em}
77
- .page-title{margin-top:6px;font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.025em}
78
- .page-sub{margin-top:4px;color:var(--ink-3)}
79
- .page-foot{margin-top:20px;color:var(--ink-4);font-size:var(--fs-xs);text-align:center}
80
- .sub-head{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:var(--fs-sm);font-weight:600}
81
-
82
- /* ---------- Overview ---------- */
83
- .metric-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:16px}
84
- .metric-strip .metric{padding:14px 16px;border-radius:var(--r-lg)}
85
- .metric-strip .metric-value{font-size:var(--fs-2xl)}
86
- .row-list{display:grid;gap:2px;margin:-4px -8px}
87
- .list-row{display:flex;align-items:center;gap:10px;width:100%;min-height:38px;padding:7px 8px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink);text-align:left;font-size:var(--fs-sm)}
88
- .list-row:hover:not(:disabled){background:var(--surface-3)}
89
- .list-row:disabled{opacity:.45;cursor:default}
90
- .list-row[aria-pressed="true"]{background:var(--accent-soft)}
91
- .list-row-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
92
- .list-row-count{font-weight:600;font-variant-numeric:tabular-nums}
93
- .list-row-go{display:inline-flex;align-items:center;gap:2px;color:var(--accent);font-size:var(--fs-xs);font-weight:500}
94
- .list-row-wrap{flex-wrap:wrap}
95
- .list-row-wrap .chip-row{flex-basis:100%}
96
-
97
- /* ---------- Task page ---------- */
98
- .task-header{position:sticky;top:0;z-index:10;margin:0 calc(-1 * clamp(16px,3vw,40px));padding:0 clamp(16px,3vw,40px);background:color-mix(in srgb,var(--canvas) 88%,transparent);backdrop-filter:saturate(1.4) blur(10px);-webkit-backdrop-filter:saturate(1.4) blur(10px)}
99
- .task-bar{display:flex;align-items:center;gap:6px;height:var(--header-h)}
100
- .back-btn{display:none}
101
- .crumbs{display:flex;align-items:center;gap:6px;min-width:0;font-size:var(--fs-sm)}
102
- .crumb{padding:3px 6px;border:0;border-radius:var(--r-xs);background:transparent;color:var(--ink-3)}
103
- .crumb:hover{color:var(--ink);background:var(--surface-3)}
104
- .crumb-sep{color:var(--ink-4)}
105
- .crumb-current{color:var(--ink-2);font-size:var(--fs-xs)}
106
- .dock-toggle{height:30px}
107
- .task-hero{padding:14px 0 18px}
108
- .task-title{font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.025em;line-height:1.25;overflow-wrap:anywhere}
109
- .task-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;color:var(--ink-3);font-size:var(--fs-xs)}
110
- .task-meta:empty{display:none}
111
- .meta-item{display:inline-flex;align-items:center;gap:5px}
112
- .meta-item .when{font-size:inherit}
113
- .tabs-wrap{position:sticky;top:var(--header-h);z-index:9;margin:0 calc(-1 * clamp(16px,3vw,40px));padding:0 clamp(16px,3vw,40px);background:color-mix(in srgb,var(--canvas) 88%,transparent);backdrop-filter:saturate(1.4) blur(10px);-webkit-backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--line)}
114
- .tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
115
- .tabs::-webkit-scrollbar{display:none}
116
- .tab{position:relative;display:inline-flex;align-items:center;gap:7px;flex:none;height:42px;padding:0 10px;border:0;background:transparent;color:var(--ink-3);font-size:var(--fs-sm);font-weight:500}
117
- .tab:hover{color:var(--ink)}
118
- .tab[aria-selected="true"]{color:var(--ink)}
119
- .tab[aria-selected="true"]::after{content:"";position:absolute;left:8px;right:8px;bottom:-1px;height:2px;border-radius:2px;background:var(--accent)}
120
- .tab .icon{color:var(--ink-4)}
121
- .tab[aria-selected="true"] .icon{color:var(--accent)}
122
- .tab:focus-visible{box-shadow:inset var(--focus)}
123
- .tab .count.tone-warn{background:var(--warn-soft);color:var(--warn)}
124
- .tab-panel{display:flex;flex-direction:column;gap:16px;padding-top:20px;min-width:0}
125
- .tab-panel [id^="detail-"]{scroll-margin-top:calc(var(--header-h) + 60px)}
126
-
127
- /* Now banner: the execution status tone as a left stripe and a soft wash */
128
- .now-card{border-color:var(--line-2);background:linear-gradient(100deg,var(--tone-soft,transparent),transparent 62%),var(--surface);box-shadow:inset 3px 0 0 var(--tone,var(--line-3))}
129
- .now-card>.card-body{gap:0;padding:16px 18px 16px 20px}
130
- .now-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
131
- .now-owner{color:var(--ink-2);font-size:var(--fs-sm);font-weight:500}
132
- .now-summary{margin-top:10px;font-size:var(--fs-lg);font-weight:500;line-height:1.45;color:var(--ink)}
133
- .now-reason{margin-top:4px;color:var(--ink-3);font-size:var(--fs-sm)}
134
- .now-note{margin-top:8px;color:var(--ink-3);font-size:var(--fs-sm)}
135
- .signal-list{list-style:none;display:grid;gap:6px;margin:12px 0 0;padding:0}
136
- .signal-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:8px 10px;border-radius:var(--r-sm);background:var(--tone-soft);font-size:var(--fs-sm)}
137
- .signal-row>.icon{align-self:center;color:var(--tone)}
138
- .signal-kind{color:var(--tone);font-weight:600}
139
- .next-line{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line);color:var(--ink-3);font-size:var(--fs-xs)}
140
- .next-line:empty{display:none}
141
- .next-line .icon{color:var(--accent)}
142
- .next-line strong{color:var(--ink)}
143
-
144
- /* Needs you / input requests */
145
- .needs-card{border-color:var(--warn);box-shadow:0 0 0 3px var(--warn-soft)}
146
- .needs-card .card-icon{background:var(--warn-soft);color:var(--warn)}
147
- .input-card{display:grid;gap:10px;padding:14px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface-2)}
148
- .input-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:var(--ink-3);font-size:var(--fs-xs)}
149
- .input-kicker{display:inline-flex;align-items:center;gap:5px;color:var(--warn);font-weight:600;text-transform:uppercase;letter-spacing:.06em;font-size:var(--fs-2xs)}
150
- .input-timeout{display:inline-flex;align-items:center;gap:4px}
151
- .input-head .when{margin-left:auto}
152
- .input-question{font-size:var(--fs-lg);font-weight:500;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
153
- .input-facts{color:var(--ink-3);font-size:var(--fs-xs);overflow-wrap:anywhere}
154
- .input-choices{display:flex;flex-wrap:wrap;gap:8px}
155
- .choice{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:6px 14px;border:1px solid var(--line-3);border-radius:var(--r-md);background:var(--surface);color:var(--ink);font-weight:500;text-align:left}
156
- .choice:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft)}
157
- .choice.is-recommended{border-color:var(--accent-line)}
158
- .choice:disabled{opacity:.5}
159
- .input-form{display:flex;gap:8px}
160
- .input-form input{flex:1}
161
-
162
- /* Decisions, planning */
163
- .decision{display:grid;gap:4px;padding-top:10px;border-top:1px solid var(--line)}
164
- .decision:first-child{padding-top:0;border-top:0}
165
- .decision-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
166
- .decision-head strong{flex:1;min-width:0;font-weight:600}
167
- .planning-card .kv{font-size:var(--fs-xs)}
168
-
169
- /* Work items (rows of the Work list card) */
170
- .work-card{min-width:0}
171
- .work-head{display:flex;align-items:center;gap:10px;padding:13px 16px;list-style:none}
172
- summary.work-head{cursor:pointer}
173
- summary.work-head::-webkit-details-marker{display:none}
174
- summary.work-head:hover .work-title{color:var(--ink)}
175
- summary.work-head:focus-visible{box-shadow:inset 0 0 0 2px var(--accent-line)}
176
- .work-title{flex:1;min-width:0;font-weight:600;font-size:var(--fs-md);overflow-wrap:anywhere}
177
- .work-body{display:grid;gap:12px;padding:0 16px 16px 34px}
178
- .work-card.is-settled .work-title{color:var(--ink-2);font-weight:500}
179
- .meta-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;color:var(--ink-3);font-size:var(--fs-xs)}
180
- .meta-strong{display:inline-flex;align-items:center;gap:4px;color:var(--ink-2);font-weight:500}
181
- .meta-label{color:var(--ink-4)}
182
- .candidates{margin:0;padding:0;list-style:none;display:grid;gap:4px;font-size:var(--fs-xs)}
183
- .candidates li{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
184
- .candidate-seq{font-family:var(--font-mono);color:var(--accent)}
185
-
186
- /* Records, runs, roles */
187
- .record,.run-card,.review-card{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;min-width:0;overflow-wrap:anywhere;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
188
- .record.is-compact{padding:9px 12px;background:var(--surface-2)}
189
- .record-head,.run-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;font-size:var(--fs-sm)}
190
- .record-store{color:var(--ink-3);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
191
- .record-actions{display:flex;gap:8px}
192
- .record-lead{font-weight:500;overflow-wrap:anywhere}
193
- .delivery-stack>.sub-head:not(:first-child){margin-top:10px}
194
- .delivery-project .record-head strong{overflow-wrap:anywhere}
195
- .check-list{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:var(--fs-xs)}
196
- .check-list li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:2px 8px;min-width:0}
197
- .check-details{grid-column:2/-1;white-space:pre-wrap;overflow-wrap:anywhere}
198
- .run-role{font-weight:600}
199
- .role-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px 12px;align-content:start;min-width:0;padding:14px 16px}
200
- .role-card>*{grid-column:1/-1;min-width:0}
201
- .role-card>.role-head{grid-column:1;grid-row:1}
202
- .role-card>.role-actions{grid-column:2;grid-row:1;align-self:center}
203
- .role-card>:not(.role-head):not(.role-actions){margin-left:42px}
204
- .role-head{display:flex;align-items:center;gap:10px}
205
- .role-title{display:grid;flex:1;min-width:0;line-height:1.3}
206
- .role-title .faint{font-size:var(--fs-xs)}
207
- .avatar{display:grid;place-items:center;width:32px;height:32px;flex:none;border-radius:9px;background:var(--surface-3);color:var(--ink-2);font-weight:650;font-size:var(--fs-sm)}
208
- .role-card .kv{font-size:var(--fs-xs)}
209
- .role-actions{display:flex;justify-content:flex-end;margin-right:-8px}
210
- .role-session{display:grid;gap:3px;min-width:0;font-size:var(--fs-sm)}
211
- .role-session-head{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}
212
- .role-session>p{color:var(--ink-2)}
213
- .card-actions>[data-slot="session-counts"]:empty{display:none}
214
-
215
- /* History timeline */
216
- .timeline{list-style:none;margin:0;padding:0;position:relative;display:grid;gap:0}
217
- .timeline::before{content:"";position:absolute;left:13px;top:6px;bottom:6px;width:1px;background:var(--line-2)}
218
- .timeline-item{position:relative;display:grid;grid-template-columns:28px minmax(0,1fr);gap:12px;padding:0 0 18px}
219
- .timeline-mark{position:relative;z-index:1;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--surface-2);border:1px solid var(--line-2);color:var(--ink-3)}
220
- .kind-decision .timeline-mark{color:var(--ok);border-color:var(--ok-soft);background:var(--ok-soft)}
221
- .kind-milestone .timeline-mark{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft)}
222
- .kind-run .timeline-mark{color:var(--info);border-color:var(--info-soft);background:var(--info-soft)}
223
- .kind-question .timeline-mark{color:var(--warn);border-color:var(--warn-soft);background:var(--warn-soft)}
224
- .timeline-body{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;min-width:0;padding-top:3px;overflow-wrap:anywhere}
225
- .timeline-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:var(--fs-sm)}
226
- .timeline-item>.record{align-self:start;padding:4px 0 0;border:0;background:transparent}
227
- .timeline .lazy-head{align-items:flex-start;padding:2px 0 0;gap:8px}
228
- .timeline .lazy-head .disclosure-chevron{order:2;margin-top:4px}
229
- .timeline .lazy-body{padding:10px 0 2px}
230
- .timeline-summary{flex:1;display:grid;gap:4px;min-width:0}
231
- .timeline-title,.timeline-preview{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
232
- .timeline-preview{margin:0}
233
- .lazy-row[open] .timeline-preview{display:none}
234
- .timeline-empty{list-style:none}
235
- .timeline .show-more{margin-left:40px}
236
-
237
- /* Evidence */
238
- .file-list{display:grid;grid-template-columns:minmax(0,1fr);gap:2px}
239
- .file-list:empty{display:none}
240
- .file-row{display:flex;align-items:center;gap:8px;min-height:32px;padding:5px 8px;border:0;border-radius:var(--r-sm);background:transparent;text-align:left;font-size:var(--fs-sm);color:var(--ink-2)}
241
- .file-row:hover{background:var(--surface-3);color:var(--ink)}
242
- .file-row[aria-current="true"]{background:var(--accent-soft);color:var(--ink)}
243
- .file-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--fs-xs)}
244
- .file-viewer{display:grid;gap:8px}
245
- .file-viewer:empty{display:none}
246
- .viewer-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
247
- .viewer-ref code{white-space:normal;overflow-wrap:anywhere}
248
- .artifact-text{max-height:480px;color:var(--ink)}
249
-
250
- /* ---------- Dock ---------- */
251
- .dock-sub{flex:none;display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;padding:12px 16px 10px;border-bottom:1px solid var(--line)}
252
- .dock-sub-title{font-weight:600;font-size:var(--fs-sm)}
253
- .dock-sub-note{color:var(--ink-4);font-size:var(--fs-2xs)}
254
- .feed{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:14px;padding:16px;scrollbar-gutter:stable}
255
- .feed:focus-visible{box-shadow:inset var(--focus)}
256
- .feed>.empty{margin:auto 0}
257
- .feed-note{color:var(--ink-4);font-size:var(--fs-2xs);text-align:center}
258
- .feed-older{align-self:center}
259
- .feed-day{display:flex;align-items:center;gap:10px;color:var(--ink-4);font-size:var(--fs-2xs);font-weight:500}
260
- .feed-day::before,.feed-day::after{content:"";flex:1;height:1px;background:var(--line)}
261
- .msg{display:flex;gap:10px;max-width:100%;min-width:0}
262
- .msg-avatar{display:grid;place-items:center;width:28px;height:28px;flex:none;border-radius:8px;background:var(--surface-3);color:var(--ink-2);font-size:var(--fs-xs);font-weight:650}
263
- .msg-main{display:grid;gap:5px;min-width:0;flex:1}
264
- .msg-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:var(--fs-xs)}
265
- .msg-head strong{font-weight:600}
266
- .msg-head time{margin-left:auto;color:var(--ink-4);font-size:var(--fs-2xs)}
267
- .msg-bubble{padding:10px 12px;border-radius:4px var(--r-lg) var(--r-lg) var(--r-lg);background:var(--surface-2);border:1px solid var(--line);min-width:0;overflow-wrap:anywhere}
268
- .msg.from-user{flex-direction:row-reverse}
269
- .msg.from-user .msg-head{flex-direction:row-reverse}
270
- .msg.from-user .msg-head time{margin-left:0;margin-right:auto}
271
- .msg.from-user .msg-avatar{background:var(--accent);color:var(--accent-ink)}
272
- .msg.from-user .msg-bubble{border-radius:var(--r-lg) 4px var(--r-lg) var(--r-lg);background:var(--accent-soft);border-color:var(--accent-line)}
273
- .msg.from-system .msg-bubble{background:transparent;border-style:dashed}
274
- .composer-wrap{flex:none;padding:10px 12px 12px;border-top:1px solid var(--line);background:var(--surface)}
275
- .composer{display:grid;gap:6px}
276
- .composer-box{border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--sunken);transition:border-color var(--t-fast),box-shadow var(--t-fast)}
277
- .composer-box:focus-within{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
278
- .composer-input{display:block;min-height:64px;max-height:240px;padding:10px 12px 4px;border:0;background:transparent;resize:none}
279
- .composer-input:focus,.composer-input:hover{border:0;box-shadow:none;background:transparent}
280
- .composer-bar{display:flex;align-items:center;gap:8px;padding:6px 6px 6px 8px}
281
- .composer-send{height:30px}
282
- .facets:empty{display:none}
283
- .facets{display:grid;gap:6px;padding:8px 10px;border-radius:var(--r-sm);background:var(--surface-2)}
284
- .next-step{display:flex;gap:6px;align-items:flex-start;font-size:var(--fs-xs);color:var(--ink-2)}
285
- .next-step .icon{margin-top:2px;color:var(--accent)}
286
-
287
- /* Live session (always dark: it renders a native terminal) */
288
- .dock-session{color:#e6e6e8}
289
- .target-chip{display:inline-flex;align-items:center;gap:6px;flex:none;height:26px;padding:0 10px;border:1px solid rgba(255,255,255,.12);border-radius:var(--r-pill);background:transparent;color:rgba(255,255,255,.72);font-size:var(--fs-xs);font-weight:500}
290
- .target-chip:hover{color:#fff;border-color:rgba(255,255,255,.3)}
291
- .target-chip[aria-pressed="true"]{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.3);color:#fff}
292
- .target-chip .dot{width:7px;height:7px;box-shadow:none}
293
- .dock-session .faint{color:rgba(255,255,255,.4)}
294
- .conn{display:inline-flex;align-items:center;gap:6px;flex:none;color:rgba(255,255,255,.6);font-size:var(--fs-xs);font-weight:500}
295
- .conn i{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.3)}
296
- .conn[data-state="connecting"] i{background:var(--warn);animation:blink 1s infinite}
297
- .conn[data-state="writable"] i{background:#4fd18b;box-shadow:0 0 0 3px rgba(79,209,139,.2)}
298
- .conn[data-state="readonly"] i{background:#6cb6ff}
299
- .conn[data-state="error"] i{background:#ff6b7a}
300
- .conn[data-state="error"]{color:#ff9aa5}
301
- .terminal-empty{color:rgba(255,255,255,.55)}
302
- .terminal-empty .icon{color:rgba(255,255,255,.35)}
303
- .terminal-empty-title{color:#fff;font-weight:600}
304
- .terminal-empty-text{max-width:300px;font-size:var(--fs-xs);line-height:1.5}
305
- .session-foot{color:rgba(255,255,255,.45);font-size:var(--fs-2xs)}
306
- .session-foot code{color:rgba(255,255,255,.8);user-select:all}
307
- .terminal-host .xterm{height:100%}
308
- .terminal-host .xterm-viewport{background:transparent!important}
309
- `;
File without changes