@zq-silk/yui 2.0.0 → 2.2.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.
- package/README.md +4 -0
- package/dist/cli/commandCatalog.js +318 -289
- package/dist/cli/commandDiscovery.js +72 -0
- package/dist/cli/completion.js +22 -227
- package/dist/cli/dynamicCompletion.js +12 -6
- package/dist/cli/invocationAuthority.js +2 -2
- package/dist/cli/invocationRouter.js +18 -7
- package/dist/cli.js +23 -3030
- package/dist/commands/capabilityCommands.js +5 -5
- package/dist/commands/globalRoleCommands.js +2 -1
- package/dist/commands/taskCommands.js +90 -21
- package/dist/commands/taskIntegrationCommands.js +3 -1
- package/dist/commands/taskUpstreamCommands.js +3 -1
- package/dist/context/runContextPack.js +132 -5
- package/dist/context/sourceRunContext.js +4 -2
- package/dist/context/taskContext.js +12 -3
- package/dist/controlPlaneCli.js +3092 -0
- package/dist/controller/fileSchedulerStoreAdapter.js +19 -6
- package/dist/controller/jobControl.js +21 -0
- package/dist/executor/agentExecutor.js +1 -1
- package/dist/executor/effectiveLaunch.js +18 -5
- package/dist/executor/fileRoleLaunchPlanner.js +15 -19
- package/dist/integration/gitIntegrationService.js +50 -15
- package/dist/kernel/accessAssessment.js +1 -0
- package/dist/kernel/builtinCapabilities.js +28 -1
- package/dist/kernel/capabilityRegistry.js +64 -19
- package/dist/message/messageContinuation.js +7 -2
- package/dist/nativeAgent/agent.js +275 -0
- package/dist/nativeAgent/cliDemo.js +37 -0
- package/dist/nativeAgent/codingTools.js +11 -0
- package/dist/nativeAgent/commandTool.js +215 -0
- package/dist/nativeAgent/compactionDemo.js +158 -0
- package/dist/nativeAgent/composition.js +71 -0
- package/dist/nativeAgent/context/budget.js +44 -0
- package/dist/nativeAgent/context/index.js +339 -0
- package/dist/nativeAgent/context/providerCompressor.js +103 -0
- package/dist/nativeAgent/contracts.js +1 -0
- package/dist/nativeAgent/demo.js +40 -0
- package/dist/nativeAgent/evaluation/cases.js +38 -0
- package/dist/nativeAgent/evaluation/checks.js +91 -0
- package/dist/nativeAgent/evaluation/demo.js +19 -0
- package/dist/nativeAgent/evaluation/files.js +54 -0
- package/dist/nativeAgent/evaluation/fixture.js +36 -0
- package/dist/nativeAgent/evaluation/index.js +239 -0
- package/dist/nativeAgent/executionOwner.js +209 -0
- package/dist/nativeAgent/filePatterns.js +170 -0
- package/dist/nativeAgent/fileToolsSupport.js +202 -0
- package/dist/nativeAgent/index.js +16 -0
- package/dist/nativeAgent/interaction/cli.js +358 -0
- package/dist/nativeAgent/interaction/contracts.js +1 -0
- package/dist/nativeAgent/interaction/index.js +3 -0
- package/dist/nativeAgent/interaction/memoryDemo.js +115 -0
- package/dist/nativeAgent/interaction/renderer.js +34 -0
- package/dist/nativeAgent/localSafety.js +258 -0
- package/dist/nativeAgent/mockProvider.js +43 -0
- package/dist/nativeAgent/model/anthropicMessages.js +204 -0
- package/dist/nativeAgent/model/chatCompletions.js +210 -0
- package/dist/nativeAgent/model/errors.js +47 -0
- package/dist/nativeAgent/model/gateway.js +423 -0
- package/dist/nativeAgent/model/index.js +7 -0
- package/dist/nativeAgent/model/observationAdapter.js +21 -0
- package/dist/nativeAgent/model/protocols.js +19 -0
- package/dist/nativeAgent/model/responses.js +263 -0
- package/dist/nativeAgent/model/types.js +1 -0
- package/dist/nativeAgent/model/wire.js +73 -0
- package/dist/nativeAgent/observability/index.js +220 -0
- package/dist/nativeAgent/product/catalog.js +82 -0
- package/dist/nativeAgent/product/config.js +295 -0
- package/dist/nativeAgent/product/facts.js +30 -0
- package/dist/nativeAgent/product/index.js +62 -0
- package/dist/nativeAgent/product/location.js +44 -0
- package/dist/nativeAgent/product/runtime.js +276 -0
- package/dist/nativeAgent/product/storage.js +49 -0
- package/dist/nativeAgent/product/tools.js +47 -0
- package/dist/nativeAgent/product/transport.js +54 -0
- package/dist/nativeAgent/projectGuidance/index.js +425 -0
- package/dist/nativeAgent/searchTools.js +305 -0
- package/dist/nativeAgent/session/backends.js +293 -0
- package/dist/nativeAgent/session/catalog.js +97 -0
- package/dist/nativeAgent/session/catalogDemo.js +87 -0
- package/dist/nativeAgent/session/contracts.js +1 -0
- package/dist/nativeAgent/session/format.js +269 -0
- package/dist/nativeAgent/session/index.js +5 -0
- package/dist/nativeAgent/session/location.js +36 -0
- package/dist/nativeAgent/session/sqliteFormat.js +134 -0
- package/dist/nativeAgent/session/store.js +248 -0
- package/dist/nativeAgent/textTools.js +293 -0
- package/dist/nativeAgent/toolManager/executor.js +290 -0
- package/dist/nativeAgent/toolManager/index.js +4 -0
- package/dist/nativeAgent/validation.js +95 -0
- package/dist/plugins/pluginService.js +98 -8
- package/dist/resources/projectResourceService.js +23 -1
- package/dist/runtime/managedIdentity.js +6 -0
- package/dist/surface/surfaceContributions.js +3 -0
- package/dist/task/taskAuthority.js +61 -10
- package/dist/web/assets/assetManifest.js +38 -22
- package/dist/web/assets/client/api.js +115 -0
- package/dist/web/assets/client/app.js +615 -862
- package/dist/web/assets/client/components.js +323 -897
- package/dist/web/assets/client/detail.js +333 -0
- package/dist/web/assets/client/dock.js +225 -0
- package/dist/web/assets/client/dom.js +55 -3
- package/dist/web/assets/client/evidence.js +172 -0
- package/dist/web/assets/client/format.js +25 -14
- package/dist/web/assets/client/forms.js +230 -0
- package/dist/web/assets/client/i18n.js +1024 -791
- package/dist/web/assets/client/overview.js +118 -0
- package/dist/web/assets/client/records.js +63 -0
- package/dist/web/assets/client/sections.js +313 -0
- package/dist/web/assets/client/sidebar.js +146 -0
- package/dist/web/assets/client/theme.js +61 -22
- package/dist/web/assets/icons.js +39 -0
- package/dist/web/assets/shell.js +125 -118
- package/dist/web/assets/styles/base.js +41 -0
- package/dist/web/assets/styles/components.js +169 -0
- package/dist/web/assets/styles/layout.js +56 -77
- package/dist/web/assets/styles/markdown.js +16 -24
- package/dist/web/assets/styles/responsive.js +41 -44
- package/dist/web/assets/styles/tokens.js +65 -89
- package/dist/web/assets/styles/views.js +292 -0
- package/dist/web/webServer.js +2 -1
- package/docs/agent-result-consumption.md +16 -0
- package/docs/agent-result-consumption.zh-CN.md +13 -0
- package/docs/examples/agent-offline.mjs +194 -0
- package/docs/native-agent.md +283 -0
- package/docs/release-workflow.md +61 -0
- package/docs/release-workflow.zh-CN.md +46 -0
- package/docs/roles-and-configuration.md +32 -0
- package/docs/roles-and-configuration.zh-CN.md +26 -0
- package/package.json +1 -1
- package/skills/yui-leader/SKILL.md +9 -0
- package/skills/yui-reviewer/SKILL.md +5 -0
- package/skills/yui-runtime/SKILL.md +33 -0
- package/dist/web/assets/client/taskSummary.js +0 -350
- package/dist/web/assets/client/taskSurface.js +0 -616
- package/dist/web/assets/client/view.js +0 -608
- package/dist/web/assets/styles/cards.js +0 -247
- package/dist/web/assets/styles/widgets.js +0 -168
|
@@ -1,101 +1,77 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* DESIGN
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* theme
|
|
7
|
-
* tokens, so switching (or adding) a theme can never change layout, sizing, or
|
|
8
|
-
* position. Layout / component / responsive styles reference these variables
|
|
9
|
-
* only — never hardcode a color outside a theme block.
|
|
2
|
+
* DESIGN TOKENS
|
|
3
|
+
* -------------
|
|
4
|
+
* Geometry, type, spacing and motion are theme-independent and live once on
|
|
5
|
+
* :root. A theme block defines colour and effect tokens only, so switching a
|
|
6
|
+
* theme can never move or resize anything.
|
|
10
7
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
8
|
+
* Themes
|
|
9
|
+
* sumi (墨) graphite dark, vermilion accent — default dark
|
|
10
|
+
* washi (和紙) warm paper light, vermilion accent — default light
|
|
11
|
+
* ai (藍) deep indigo dark, periwinkle accent
|
|
12
|
+
* "system" is not a token block: client/theme.ts resolves it to sumi or washi
|
|
13
|
+
* from prefers-color-scheme and stamps the resolved name on <html>.
|
|
15
14
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* Type --font-mono --font-display --font-body
|
|
19
|
-
* Metrics --page-space --sidebar-w --terminal-w
|
|
20
|
-
* Motion --motion-fast --motion-slow --ease
|
|
21
|
-
*
|
|
22
|
-
* Per-theme ([data-theme="..."], color only)
|
|
23
|
-
* Surfaces --bg --bg-1 --bg-2 --bg-3 (page → elevated layers)
|
|
24
|
-
* Lines --border --border-strong
|
|
25
|
-
* Text --text --muted --faint
|
|
26
|
-
* Accent --accent --accent-2 --on-accent --accent-soft --accent-line
|
|
27
|
-
* Semantic --active/--success/--warning/--danger (+ matching --*-soft)
|
|
28
|
-
* Effects --glow --shadow-card --shadow-pop --ambient
|
|
15
|
+
* To add a theme: add a [data-theme="name"] block defining every colour token
|
|
16
|
+
* below, then register the name in client/theme.ts and the settings menu.
|
|
29
17
|
*/
|
|
30
18
|
export const TOKEN_STYLES = `
|
|
31
|
-
/* Theme-independent layout tokens — shared by every theme (see contract above).
|
|
32
|
-
Never move these into a [data-theme] block. */
|
|
33
19
|
:root{
|
|
34
|
-
--
|
|
35
|
-
--font-mono:"JetBrains Mono","SFMono-Regular",Consolas,monospace;
|
|
36
|
-
--
|
|
37
|
-
--
|
|
38
|
-
--
|
|
39
|
-
--
|
|
40
|
-
|
|
41
|
-
:
|
|
42
|
-
color-scheme:dark;
|
|
43
|
-
--bg:#080b11;--bg-1:#0c111a;--bg-2:#111826;--bg-3:#182132;
|
|
44
|
-
--border:#1e2836;--border-strong:#2f3d50;
|
|
45
|
-
--text:#e8eef6;--muted:#8b99ad;--faint:#5a6779;
|
|
46
|
-
--accent:#49d6ff;--accent-2:#a78bfa;--on-accent:#05121b;
|
|
47
|
-
--accent-soft:rgba(73,214,255,.1);--accent-line:rgba(73,214,255,.34);
|
|
48
|
-
--active:#49d6ff;--active-soft:rgba(73,214,255,.12);
|
|
49
|
-
--success:#43d98d;--success-soft:rgba(67,217,141,.12);
|
|
50
|
-
--warning:#ffca6b;--warning-soft:rgba(255,202,107,.12);
|
|
51
|
-
--danger:#ff6b81;--danger-soft:rgba(255,107,129,.12);
|
|
52
|
-
--glow:0 0 18px rgba(73,214,255,.45);
|
|
53
|
-
--shadow-card:0 1px 2px rgba(0,0,0,.32),0 4px 12px rgba(0,0,0,.18);
|
|
54
|
-
--shadow-pop:0 18px 48px rgba(0,0,0,.5);
|
|
55
|
-
--ambient:
|
|
56
|
-
radial-gradient(1000px 560px at 8% -12%,rgba(73,214,255,.12),transparent 58%),
|
|
57
|
-
radial-gradient(900px 520px at 104% -6%,rgba(167,139,250,.12),transparent 55%),
|
|
58
|
-
linear-gradient(rgba(255,255,255,.022) 1px,transparent 1px) 0 0/100% 44px,
|
|
59
|
-
linear-gradient(90deg,rgba(255,255,255,.022) 1px,transparent 1px) 0 0/44px 100%;
|
|
20
|
+
--font-sans:"Inter",ui-sans-serif,system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
|
|
21
|
+
--font-mono:"JetBrains Mono",ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
|
|
22
|
+
--fs-2xs:10.5px;--fs-xs:11.5px;--fs-sm:12.5px;--fs-md:13.5px;--fs-lg:15px;--fs-xl:19px;--fs-2xl:24px;
|
|
23
|
+
--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;
|
|
24
|
+
--r-xs:5px;--r-sm:7px;--r-md:10px;--r-lg:14px;--r-pill:999px;
|
|
25
|
+
--sidebar-w:clamp(260px,21vw,312px);--dock-w:440px;--dock-min:320px;--divider-w:9px;
|
|
26
|
+
--center-max:980px;--header-h:56px;
|
|
27
|
+
--t-fast:120ms;--t-med:220ms;--ease:cubic-bezier(.2,.8,.2,1);
|
|
60
28
|
}
|
|
61
|
-
[data-theme="
|
|
29
|
+
:root,[data-theme="sumi"]{
|
|
62
30
|
color-scheme:dark;
|
|
63
|
-
--
|
|
64
|
-
--
|
|
65
|
-
--
|
|
66
|
-
--accent:#
|
|
67
|
-
--
|
|
68
|
-
--
|
|
69
|
-
--
|
|
70
|
-
--
|
|
71
|
-
--
|
|
72
|
-
--
|
|
73
|
-
--shadow-
|
|
74
|
-
--
|
|
75
|
-
--
|
|
76
|
-
radial-gradient(1000px 560px at 10% -14%,rgba(56,225,212,.11),transparent 58%),
|
|
77
|
-
radial-gradient(900px 520px at 106% -6%,rgba(124,171,242,.1),transparent 55%),
|
|
78
|
-
linear-gradient(rgba(230,242,251,.018) 1px,transparent 1px) 0 0/100% 44px,
|
|
79
|
-
linear-gradient(90deg,rgba(230,242,251,.018) 1px,transparent 1px) 0 0/44px 100%;
|
|
31
|
+
--canvas:#0e0f11;--surface:#141518;--surface-2:#191a1e;--surface-3:#202126;--sunken:#0b0c0d;
|
|
32
|
+
--line:rgba(255,255,255,.065);--line-2:rgba(255,255,255,.11);--line-3:rgba(255,255,255,.18);
|
|
33
|
+
--ink:#ececee;--ink-2:#b4b5bb;--ink-3:#85868e;--ink-4:#5c5d64;
|
|
34
|
+
--accent:#ff7a52;--accent-ink:#1a0c06;--accent-soft:rgba(255,122,82,.12);--accent-line:rgba(255,122,82,.38);
|
|
35
|
+
--info:#6cb6ff;--info-soft:rgba(108,182,255,.13);
|
|
36
|
+
--ok:#4fd18b;--ok-soft:rgba(79,209,139,.13);
|
|
37
|
+
--warn:#f5c065;--warn-soft:rgba(245,192,101,.14);
|
|
38
|
+
--bad:#ff6b7a;--bad-soft:rgba(255,107,122,.13);
|
|
39
|
+
--idle:#8e8f97;--idle-soft:rgba(142,143,151,.14);
|
|
40
|
+
--shadow-1:0 1px 0 rgba(255,255,255,.03) inset,0 1px 2px rgba(0,0,0,.35);
|
|
41
|
+
--shadow-2:0 12px 40px rgba(0,0,0,.5),0 2px 8px rgba(0,0,0,.35);
|
|
42
|
+
--focus:0 0 0 2px var(--canvas),0 0 0 4px var(--accent-line);
|
|
43
|
+
--term-bg:#0b0c0d;--term-fg:#e6e6e8;--term-cursor:#ff7a52;--term-sel:#3a2a24;
|
|
80
44
|
}
|
|
81
|
-
[data-theme="
|
|
45
|
+
[data-theme="washi"]{
|
|
82
46
|
color-scheme:light;
|
|
83
|
-
--
|
|
84
|
-
--
|
|
85
|
-
--
|
|
86
|
-
--accent:#
|
|
87
|
-
--
|
|
88
|
-
--
|
|
89
|
-
--
|
|
90
|
-
--
|
|
91
|
-
--
|
|
92
|
-
--
|
|
93
|
-
--shadow-
|
|
94
|
-
--
|
|
95
|
-
--
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
47
|
+
--canvas:#f4f2ed;--surface:#fbfaf7;--surface-2:#ffffff;--surface-3:#f1eee7;--sunken:#ebe8e0;
|
|
48
|
+
--line:rgba(40,32,20,.08);--line-2:rgba(40,32,20,.13);--line-3:rgba(40,32,20,.22);
|
|
49
|
+
--ink:#1d1b18;--ink-2:#45413b;--ink-3:#77726a;--ink-4:#a39e95;
|
|
50
|
+
--accent:#d24a26;--accent-ink:#ffffff;--accent-soft:rgba(210,74,38,.09);--accent-line:rgba(210,74,38,.34);
|
|
51
|
+
--info:#1f6fd1;--info-soft:rgba(31,111,209,.09);
|
|
52
|
+
--ok:#17844f;--ok-soft:rgba(23,132,79,.1);
|
|
53
|
+
--warn:#a86500;--warn-soft:rgba(168,101,0,.1);
|
|
54
|
+
--bad:#c72f45;--bad-soft:rgba(199,47,69,.09);
|
|
55
|
+
--idle:#7a756c;--idle-soft:rgba(122,117,108,.11);
|
|
56
|
+
--shadow-1:0 1px 2px rgba(40,32,20,.06);
|
|
57
|
+
--shadow-2:0 16px 40px rgba(40,32,20,.16),0 2px 8px rgba(40,32,20,.08);
|
|
58
|
+
--focus:0 0 0 2px var(--canvas),0 0 0 4px var(--accent-line);
|
|
59
|
+
--term-bg:#1b1a18;--term-fg:#efece6;--term-cursor:#ff8a63;--term-sel:#4a3a32;
|
|
60
|
+
}
|
|
61
|
+
[data-theme="ai"]{
|
|
62
|
+
color-scheme:dark;
|
|
63
|
+
--canvas:#0a0e1a;--surface:#0f1424;--surface-2:#141a2e;--surface-3:#1a2139;--sunken:#080b15;
|
|
64
|
+
--line:rgba(160,180,255,.08);--line-2:rgba(160,180,255,.13);--line-3:rgba(160,180,255,.22);
|
|
65
|
+
--ink:#e7eaf6;--ink-2:#b0b7d2;--ink-3:#8088a8;--ink-4:#565e7d;
|
|
66
|
+
--accent:#8fa8ff;--accent-ink:#0a0e1a;--accent-soft:rgba(143,168,255,.13);--accent-line:rgba(143,168,255,.4);
|
|
67
|
+
--info:#6fd3ff;--info-soft:rgba(111,211,255,.12);
|
|
68
|
+
--ok:#5ad6a0;--ok-soft:rgba(90,214,160,.12);
|
|
69
|
+
--warn:#f2c46d;--warn-soft:rgba(242,196,109,.13);
|
|
70
|
+
--bad:#ff7d93;--bad-soft:rgba(255,125,147,.13);
|
|
71
|
+
--idle:#8a91ad;--idle-soft:rgba(138,145,173,.14);
|
|
72
|
+
--shadow-1:0 1px 0 rgba(255,255,255,.03) inset,0 1px 2px rgba(0,0,0,.4);
|
|
73
|
+
--shadow-2:0 14px 44px rgba(0,0,0,.55),0 2px 8px rgba(0,0,0,.4);
|
|
74
|
+
--focus:0 0 0 2px var(--canvas),0 0 0 4px var(--accent-line);
|
|
75
|
+
--term-bg:#080b15;--term-fg:#e2e6f5;--term-cursor:#8fa8ff;--term-sel:#26305a;
|
|
100
76
|
}
|
|
101
77
|
`;
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* VIEWS — styling for the concrete surfaces: sidebar index, overview, task
|
|
3
|
+
* page (header, tabs, sections, records) and the session dock.
|
|
4
|
+
*/
|
|
5
|
+
export const VIEW_STYLES = `
|
|
6
|
+
/* ---------- Sidebar ---------- */
|
|
7
|
+
.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}
|
|
8
|
+
.brand-name{font-size:var(--fs-lg);font-weight:650;letter-spacing:-.02em}
|
|
9
|
+
.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}
|
|
10
|
+
.sync i{width:6px;height:6px;border-radius:50%;background:var(--ink-4)}
|
|
11
|
+
.sync[data-state="ok"] i{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}
|
|
12
|
+
.sync[data-state="syncing"] i{background:var(--info);animation:blink 1s ease-in-out infinite}
|
|
13
|
+
.sync[data-state="error"] i{background:var(--bad);box-shadow:0 0 0 3px var(--bad-soft)}
|
|
14
|
+
.sync[data-state="error"]{color:var(--bad)}
|
|
15
|
+
@keyframes blink{50%{opacity:.35}}
|
|
16
|
+
.search-field{position:relative;display:flex;align-items:center}
|
|
17
|
+
.search-field>.icon{position:absolute;left:10px;color:var(--ink-4);pointer-events:none}
|
|
18
|
+
.search-field input{height:34px;padding:0 34px 0 32px;border-radius:var(--r-md);background:var(--surface-2)}
|
|
19
|
+
.search-field input::-webkit-search-cancel-button{display:none}
|
|
20
|
+
.search-field kbd{position:absolute;right:8px}
|
|
21
|
+
.attention-list{display:flex;flex-wrap:wrap;gap:6px}
|
|
22
|
+
.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}
|
|
23
|
+
.attention-pill b{font-weight:700;font-variant-numeric:tabular-nums}
|
|
24
|
+
.attention-pill:hover{border-color:var(--tone)}
|
|
25
|
+
.attention-pill[aria-pressed="true"]{background:var(--tone);color:var(--canvas)}
|
|
26
|
+
.attention-clear{display:flex;align-items:center;gap:6px;color:var(--ink-4);font-size:var(--fs-xs)}
|
|
27
|
+
.attention-clear .icon{color:var(--ok)}
|
|
28
|
+
.tabs-row{position:relative;display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px;border-bottom:1px solid var(--line)}
|
|
29
|
+
.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)}
|
|
30
|
+
.tabs-row[data-fade="start"]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 28px);mask-image:linear-gradient(90deg,transparent,#000 28px)}
|
|
31
|
+
.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)}
|
|
32
|
+
.tabs-row::-webkit-scrollbar{display:none}
|
|
33
|
+
.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}
|
|
34
|
+
.status-tab:hover{color:var(--ink)}
|
|
35
|
+
.status-tab[aria-pressed="true"]{color:var(--ink)}
|
|
36
|
+
.status-tab[aria-pressed="true"]::after{content:"";position:absolute;left:6px;right:6px;bottom:-3px;height:2px;border-radius:2px;background:var(--accent)}
|
|
37
|
+
.status-tab-count{color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
|
|
38
|
+
.task-group{margin-top:8px}
|
|
39
|
+
.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}
|
|
40
|
+
.task-group-head .count{background:transparent;padding:0;min-width:0}
|
|
41
|
+
.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)}
|
|
42
|
+
.task-row>.dot{margin-top:5px}
|
|
43
|
+
.task-row:hover{background:var(--surface-3)}
|
|
44
|
+
.task-row[aria-current="true"]{background:var(--surface-3);box-shadow:inset 0 0 0 1px var(--line-2)}
|
|
45
|
+
.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)}
|
|
46
|
+
.task-body{display:grid;gap:1px;flex:1;min-width:0}
|
|
47
|
+
.task-line{display:flex;align-items:center;gap:8px;min-width:0}
|
|
48
|
+
.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}
|
|
49
|
+
.task-time{flex:none;color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
|
|
50
|
+
.task-sub{gap:8px;height:18px;color:var(--ink-4);font-size:var(--fs-2xs)}
|
|
51
|
+
.task-id{font-size:var(--fs-2xs);line-height:1;color:var(--ink-3)}
|
|
52
|
+
.task-count{display:inline-flex;align-items:center;gap:3px;line-height:1;white-space:nowrap}
|
|
53
|
+
.task-count .icon{width:11px;height:11px}
|
|
54
|
+
.task-signals{display:inline-flex;gap:4px;margin-left:auto}
|
|
55
|
+
.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}
|
|
56
|
+
.signal .icon{width:11px;height:11px;stroke-width:2}
|
|
57
|
+
.list-empty{display:grid;justify-items:center;gap:8px;padding:36px 16px;color:var(--ink-4);font-size:var(--fs-sm);text-align:center}
|
|
58
|
+
.list-empty.is-error{color:var(--bad)}
|
|
59
|
+
.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)}
|
|
60
|
+
.pager-btn:hover:not(:disabled){border-color:var(--line-3);color:var(--ink)}
|
|
61
|
+
.pager-btn:disabled{opacity:.4}
|
|
62
|
+
.pager-count{grid-column:2;text-align:center;color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
|
|
63
|
+
.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)}
|
|
64
|
+
.pager-clear:hover{color:var(--accent);border-color:var(--accent-line)}
|
|
65
|
+
.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}
|
|
66
|
+
.foot-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
67
|
+
.foot-btn:hover{color:var(--ink);border-color:var(--line-3);background:var(--surface-3)}
|
|
68
|
+
.foot-btn[aria-pressed="true"]{color:var(--accent);border-color:var(--accent-line);background:var(--accent-soft)}
|
|
69
|
+
.foot-btn kbd{margin-left:2px}
|
|
70
|
+
.side-foot .icon-btn{margin-left:auto}
|
|
71
|
+
|
|
72
|
+
/* ---------- Page scaffolding ---------- */
|
|
73
|
+
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:36px 0 24px}
|
|
74
|
+
.kicker{color:var(--accent);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.1em}
|
|
75
|
+
.page-title{margin-top:6px;font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.025em}
|
|
76
|
+
.page-sub{margin-top:4px;color:var(--ink-3)}
|
|
77
|
+
.page-foot{margin-top:20px;color:var(--ink-4);font-size:var(--fs-xs);text-align:center}
|
|
78
|
+
.section{margin-top:28px;min-width:0}
|
|
79
|
+
.section-title{display:flex;align-items:center;gap:10px;margin-bottom:12px}
|
|
80
|
+
.section-title h2{display:flex;align-items:center;gap:8px;font-size:var(--fs-lg);font-weight:600}
|
|
81
|
+
.section-actions{margin-left:auto}
|
|
82
|
+
.sub-head{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:var(--fs-sm);font-weight:600}
|
|
83
|
+
|
|
84
|
+
/* ---------- Overview ---------- */
|
|
85
|
+
.metric-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:14px}
|
|
86
|
+
.metric-strip .metric{padding:14px 16px;border-radius:var(--r-lg)}
|
|
87
|
+
.metric-strip .metric-value{font-size:var(--fs-2xl)}
|
|
88
|
+
.overview-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,380px);gap:14px;align-items:start}
|
|
89
|
+
.overview-col{display:flex;flex-direction:column;gap:14px;min-width:0}
|
|
90
|
+
.overview>.card{margin-bottom:14px}
|
|
91
|
+
.row-list{display:grid;gap:2px;margin:-4px -8px}
|
|
92
|
+
.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)}
|
|
93
|
+
.list-row:hover:not(:disabled){background:var(--surface-3)}
|
|
94
|
+
.list-row:disabled{opacity:.45;cursor:default}
|
|
95
|
+
.list-row[aria-pressed="true"]{background:var(--accent-soft)}
|
|
96
|
+
.list-row-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
97
|
+
.list-row-count{font-weight:600;font-variant-numeric:tabular-nums}
|
|
98
|
+
.list-row-go{display:inline-flex;align-items:center;gap:2px;color:var(--accent);font-size:var(--fs-xs);font-weight:500}
|
|
99
|
+
.list-row-wrap{flex-wrap:wrap}
|
|
100
|
+
.list-row-wrap .chip-row{flex-basis:100%}
|
|
101
|
+
|
|
102
|
+
/* ---------- Task page ---------- */
|
|
103
|
+
.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)}
|
|
104
|
+
.task-bar{display:flex;align-items:center;gap:6px;height:var(--header-h)}
|
|
105
|
+
.back-btn{display:none}
|
|
106
|
+
.crumbs{display:flex;align-items:center;gap:6px;min-width:0;font-size:var(--fs-sm)}
|
|
107
|
+
.crumb{padding:3px 6px;border:0;border-radius:var(--r-xs);background:transparent;color:var(--ink-3)}
|
|
108
|
+
.crumb:hover{color:var(--ink);background:var(--surface-3)}
|
|
109
|
+
.crumb-sep{color:var(--ink-4)}
|
|
110
|
+
.crumb-current{color:var(--ink-2);font-size:var(--fs-xs)}
|
|
111
|
+
.dock-toggle{height:30px}
|
|
112
|
+
.task-hero{padding:14px 0 18px}
|
|
113
|
+
.task-title{font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.025em;line-height:1.25;overflow-wrap:anywhere}
|
|
114
|
+
.task-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
115
|
+
.task-meta:empty{display:none}
|
|
116
|
+
.meta-item{display:inline-flex;align-items:center;gap:5px}
|
|
117
|
+
.meta-item .when{font-size:inherit}
|
|
118
|
+
.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)}
|
|
119
|
+
.tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
|
|
120
|
+
.tabs::-webkit-scrollbar{display:none}
|
|
121
|
+
.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}
|
|
122
|
+
.tab:hover{color:var(--ink)}
|
|
123
|
+
.tab[aria-selected="true"]{color:var(--ink)}
|
|
124
|
+
.tab[aria-selected="true"]::after{content:"";position:absolute;left:8px;right:8px;bottom:-1px;height:2px;border-radius:2px;background:var(--accent)}
|
|
125
|
+
.tab .icon{color:var(--ink-4)}
|
|
126
|
+
.tab[aria-selected="true"] .icon{color:var(--accent)}
|
|
127
|
+
.tab:focus-visible{box-shadow:inset var(--focus)}
|
|
128
|
+
.tab-panel{padding-top:20px;min-width:0}
|
|
129
|
+
.tab-panel>.card{margin-bottom:14px}
|
|
130
|
+
.tab-panel>.section:first-child{margin-top:4px}
|
|
131
|
+
|
|
132
|
+
/* Now card */
|
|
133
|
+
.now-card{border-color:var(--line-2);background:linear-gradient(180deg,var(--surface-2),var(--surface))}
|
|
134
|
+
.now-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
|
|
135
|
+
.now-owner{color:var(--ink-2);font-size:var(--fs-sm);font-weight:500}
|
|
136
|
+
.now-summary{margin-top:10px;font-size:var(--fs-lg);line-height:1.45;color:var(--ink)}
|
|
137
|
+
.now-reason{margin-top:4px;color:var(--ink-3);font-size:var(--fs-sm)}
|
|
138
|
+
.now-note{margin-top:8px;color:var(--ink-3);font-size:var(--fs-sm)}
|
|
139
|
+
.signal-list{list-style:none;display:grid;gap:6px;margin:12px 0 0;padding:0}
|
|
140
|
+
.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)}
|
|
141
|
+
.signal-row>.icon{align-self:center;color:var(--tone)}
|
|
142
|
+
.signal-kind{color:var(--tone);font-weight:600}
|
|
143
|
+
.next-line{display:flex;flex-wrap:wrap;align-items:center;gap:4px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
144
|
+
.next-line:empty{display:none}
|
|
145
|
+
.next-line .icon{color:var(--accent)}
|
|
146
|
+
.next-line strong{color:var(--ink)}
|
|
147
|
+
|
|
148
|
+
/* Needs you / input requests */
|
|
149
|
+
.needs-card{border-color:var(--warn);box-shadow:0 0 0 3px var(--warn-soft)}
|
|
150
|
+
.needs-card .card-title .icon{color:var(--warn)}
|
|
151
|
+
.input-card{display:grid;gap:10px;padding:14px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface-2)}
|
|
152
|
+
.input-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
153
|
+
.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)}
|
|
154
|
+
.input-timeout{display:inline-flex;align-items:center;gap:4px}
|
|
155
|
+
.input-head .when{margin-left:auto}
|
|
156
|
+
.input-question{font-size:var(--fs-lg);font-weight:500;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
157
|
+
.input-facts{color:var(--ink-3);font-size:var(--fs-xs);overflow-wrap:anywhere}
|
|
158
|
+
.input-choices{display:flex;flex-wrap:wrap;gap:8px}
|
|
159
|
+
.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}
|
|
160
|
+
.choice:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft)}
|
|
161
|
+
.choice.is-recommended{border-color:var(--accent-line)}
|
|
162
|
+
.choice:disabled{opacity:.5}
|
|
163
|
+
.input-form{display:flex;gap:8px}
|
|
164
|
+
.input-form input{flex:1}
|
|
165
|
+
|
|
166
|
+
/* Decisions, sessions, planning */
|
|
167
|
+
.decision{display:grid;gap:4px;padding-top:10px;border-top:1px solid var(--line)}
|
|
168
|
+
.decision:first-child{padding-top:0;border-top:0}
|
|
169
|
+
.decision-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
|
|
170
|
+
.decision-head strong{flex:1;min-width:0;font-weight:600}
|
|
171
|
+
.session-list{list-style:none;display:grid;gap:8px;margin:0;padding:0}
|
|
172
|
+
.session-row{display:grid;gap:3px;padding:9px 11px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line)}
|
|
173
|
+
.session-row-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
|
|
174
|
+
.session-row p{color:var(--ink-2)}
|
|
175
|
+
.planning-card .kv{font-size:var(--fs-xs)}
|
|
176
|
+
|
|
177
|
+
/* Work items */
|
|
178
|
+
.work-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1);min-width:0}
|
|
179
|
+
.work-head{display:flex;align-items:center;gap:10px;padding:13px 16px;list-style:none}
|
|
180
|
+
summary.work-head{cursor:pointer}
|
|
181
|
+
summary.work-head::-webkit-details-marker{display:none}
|
|
182
|
+
.work-title{flex:1;min-width:0;font-weight:600;font-size:var(--fs-md);overflow-wrap:anywhere}
|
|
183
|
+
.work-body{display:grid;gap:12px;padding:0 16px 16px 34px}
|
|
184
|
+
.work-card.is-settled .work-title{color:var(--ink-2);font-weight:500}
|
|
185
|
+
.meta-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
186
|
+
.meta-strong{display:inline-flex;align-items:center;gap:4px;color:var(--ink-2);font-weight:500}
|
|
187
|
+
.meta-label{color:var(--ink-4)}
|
|
188
|
+
.candidates{margin:0;padding:0;list-style:none;display:grid;gap:4px;font-size:var(--fs-xs)}
|
|
189
|
+
.candidates li{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
|
|
190
|
+
.candidate-seq{font-family:var(--font-mono);color:var(--accent)}
|
|
191
|
+
|
|
192
|
+
/* Records, runs, roles */
|
|
193
|
+
.record,.run-card,.review-card{display:grid;gap:8px;min-width:0;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
|
|
194
|
+
.record.is-compact{padding:9px 12px;background:var(--surface-2)}
|
|
195
|
+
.record-head,.run-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;font-size:var(--fs-sm)}
|
|
196
|
+
.record-store{color:var(--ink-3);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
|
|
197
|
+
.record-actions{display:flex;gap:8px}
|
|
198
|
+
.run-card[data-status="failed"]{border-color:color-mix(in srgb,var(--bad) 35%,var(--line))}
|
|
199
|
+
.run-role{font-weight:600}
|
|
200
|
+
.role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
|
|
201
|
+
.role-card{display:grid;gap:10px;align-content:start;min-width:0;padding:14px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1)}
|
|
202
|
+
.role-head{display:flex;align-items:center;gap:10px}
|
|
203
|
+
.role-title{display:grid;flex:1;min-width:0;line-height:1.3}
|
|
204
|
+
.role-title .faint{font-size:var(--fs-xs)}
|
|
205
|
+
.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)}
|
|
206
|
+
.role-card .kv{font-size:var(--fs-xs)}
|
|
207
|
+
.role-actions{display:flex;justify-content:flex-end;margin:-4px -6px -6px}
|
|
208
|
+
|
|
209
|
+
/* History timeline */
|
|
210
|
+
.timeline{list-style:none;margin:0;padding:0;position:relative;display:grid;gap:0}
|
|
211
|
+
.timeline::before{content:"";position:absolute;left:13px;top:6px;bottom:6px;width:1px;background:var(--line-2)}
|
|
212
|
+
.timeline-item{position:relative;display:grid;grid-template-columns:28px minmax(0,1fr);gap:12px;padding:0 0 18px}
|
|
213
|
+
.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)}
|
|
214
|
+
.kind-decision .timeline-mark{color:var(--ok);border-color:var(--ok-soft);background:var(--ok-soft)}
|
|
215
|
+
.kind-milestone .timeline-mark{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft)}
|
|
216
|
+
.timeline-body{display:grid;gap:6px;min-width:0;padding-top:3px}
|
|
217
|
+
.timeline-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:var(--fs-sm)}
|
|
218
|
+
.timeline-empty{list-style:none}
|
|
219
|
+
.timeline .show-more{margin-left:40px}
|
|
220
|
+
|
|
221
|
+
/* Evidence */
|
|
222
|
+
.file-list{display:grid;gap:2px}
|
|
223
|
+
.file-list:empty{display:none}
|
|
224
|
+
.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)}
|
|
225
|
+
.file-row:hover{background:var(--surface-3);color:var(--ink)}
|
|
226
|
+
.file-row[aria-current="true"]{background:var(--accent-soft);color:var(--ink)}
|
|
227
|
+
.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)}
|
|
228
|
+
.file-viewer{display:grid;gap:8px}
|
|
229
|
+
.file-viewer:empty{display:none}
|
|
230
|
+
.viewer-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
|
|
231
|
+
.viewer-ref code{white-space:normal;overflow-wrap:anywhere}
|
|
232
|
+
.artifact-text{max-height:480px;color:var(--ink)}
|
|
233
|
+
|
|
234
|
+
/* ---------- Dock ---------- */
|
|
235
|
+
.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)}
|
|
236
|
+
.dock-sub-title{font-weight:600;font-size:var(--fs-sm)}
|
|
237
|
+
.dock-sub-note{color:var(--ink-4);font-size:var(--fs-2xs)}
|
|
238
|
+
.feed{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:14px;padding:16px;scrollbar-gutter:stable}
|
|
239
|
+
.feed:focus-visible{box-shadow:inset var(--focus)}
|
|
240
|
+
.feed>.empty{margin:auto 0}
|
|
241
|
+
.feed-note{color:var(--ink-4);font-size:var(--fs-2xs);text-align:center}
|
|
242
|
+
.feed-day{display:flex;align-items:center;gap:10px;color:var(--ink-4);font-size:var(--fs-2xs);font-weight:500}
|
|
243
|
+
.feed-day::before,.feed-day::after{content:"";flex:1;height:1px;background:var(--line)}
|
|
244
|
+
.msg{display:flex;gap:10px;max-width:100%;min-width:0}
|
|
245
|
+
.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}
|
|
246
|
+
.msg-main{display:grid;gap:5px;min-width:0;flex:1}
|
|
247
|
+
.msg-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:var(--fs-xs)}
|
|
248
|
+
.msg-head strong{font-weight:600}
|
|
249
|
+
.msg-head time{margin-left:auto;color:var(--ink-4);font-size:var(--fs-2xs)}
|
|
250
|
+
.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}
|
|
251
|
+
.msg.from-user{flex-direction:row-reverse}
|
|
252
|
+
.msg.from-user .msg-head{flex-direction:row-reverse}
|
|
253
|
+
.msg.from-user .msg-head time{margin-left:0;margin-right:auto}
|
|
254
|
+
.msg.from-user .msg-avatar{background:var(--accent);color:var(--accent-ink)}
|
|
255
|
+
.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)}
|
|
256
|
+
.msg.from-system .msg-bubble{background:transparent;border-style:dashed}
|
|
257
|
+
.composer-wrap{flex:none;padding:10px 12px 12px;border-top:1px solid var(--line);background:var(--surface)}
|
|
258
|
+
.composer{display:grid;gap:6px}
|
|
259
|
+
.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)}
|
|
260
|
+
.composer-box:focus-within{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
|
|
261
|
+
.composer-input{display:block;min-height:64px;max-height:240px;padding:10px 12px 4px;border:0;background:transparent;resize:none}
|
|
262
|
+
.composer-input:focus,.composer-input:hover{border:0;box-shadow:none;background:transparent}
|
|
263
|
+
.composer-bar{display:flex;align-items:center;gap:8px;padding:6px 6px 6px 8px}
|
|
264
|
+
.composer-send{height:30px}
|
|
265
|
+
.facets:empty{display:none}
|
|
266
|
+
.facets{display:grid;gap:6px;padding:8px 10px;border-radius:var(--r-sm);background:var(--surface-2)}
|
|
267
|
+
.next-step{display:flex;gap:6px;align-items:flex-start;font-size:var(--fs-xs);color:var(--ink-2)}
|
|
268
|
+
.next-step .icon{margin-top:2px;color:var(--accent)}
|
|
269
|
+
|
|
270
|
+
/* Live session (always dark: it renders a native terminal) */
|
|
271
|
+
.dock-session{color:#e6e6e8}
|
|
272
|
+
.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}
|
|
273
|
+
.target-chip:hover{color:#fff;border-color:rgba(255,255,255,.3)}
|
|
274
|
+
.target-chip[aria-pressed="true"]{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.3);color:#fff}
|
|
275
|
+
.target-chip .dot{width:7px;height:7px;box-shadow:none}
|
|
276
|
+
.dock-session .faint{color:rgba(255,255,255,.4)}
|
|
277
|
+
.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}
|
|
278
|
+
.conn i{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.3)}
|
|
279
|
+
.conn[data-state="connecting"] i{background:var(--warn);animation:blink 1s infinite}
|
|
280
|
+
.conn[data-state="writable"] i{background:#4fd18b;box-shadow:0 0 0 3px rgba(79,209,139,.2)}
|
|
281
|
+
.conn[data-state="readonly"] i{background:#6cb6ff}
|
|
282
|
+
.conn[data-state="error"] i{background:#ff6b7a}
|
|
283
|
+
.conn[data-state="error"]{color:#ff9aa5}
|
|
284
|
+
.terminal-empty{color:rgba(255,255,255,.55)}
|
|
285
|
+
.terminal-empty .icon{color:rgba(255,255,255,.35)}
|
|
286
|
+
.terminal-empty-title{color:#fff;font-weight:600}
|
|
287
|
+
.terminal-empty-text{max-width:300px;font-size:var(--fs-xs);line-height:1.5}
|
|
288
|
+
.session-foot{color:rgba(255,255,255,.45);font-size:var(--fs-2xs)}
|
|
289
|
+
.session-foot code{color:rgba(255,255,255,.8);user-select:all}
|
|
290
|
+
.terminal-host .xterm{height:100%}
|
|
291
|
+
.terminal-host .xterm-viewport{background:transparent!important}
|
|
292
|
+
`;
|
package/dist/web/webServer.js
CHANGED
|
@@ -219,7 +219,8 @@ async function handleHttpRequest(request, response, store, dependencies, token,
|
|
|
219
219
|
else if (method === "GET" && action === "inspect") {
|
|
220
220
|
value = dependencies.surface.inspect(taskId, {
|
|
221
221
|
store: query.get("store") ?? "", refId: query.get("ref") ?? "",
|
|
222
|
-
...(query.has("digest") ? { digest: query.get("digest") } : {})
|
|
222
|
+
...(query.has("digest") ? { digest: query.get("digest") } : {}),
|
|
223
|
+
...(query.has("cursor") ? { cursor: query.get("cursor") } : {})
|
|
223
224
|
});
|
|
224
225
|
}
|
|
225
226
|
else if (method === "POST" && action === "messages") {
|
|
@@ -65,6 +65,22 @@ silently rerun successful Producers.
|
|
|
65
65
|
|
|
66
66
|
## Review
|
|
67
67
|
|
|
68
|
+
Capturing a Run-backed WorkItem Candidate freezes its exact source report and
|
|
69
|
+
Candidate identity in the existing immutable Context Snapshot store. Review
|
|
70
|
+
receives a `source-run` pointer with `evidenceOf=<work-item>/<candidate>` and
|
|
71
|
+
expands the original report through `task run context expand`, including all
|
|
72
|
+
content pages. Source, Candidate or report drift refuses a new dispatch; already
|
|
73
|
+
frozen Run Context remains readable. Task-final producer evidence requires an
|
|
74
|
+
exact Candidate head or a committed Integration at the fixed head and Task-main
|
|
75
|
+
target. Earlier attempts sharing a target are not ancestry proof. A later direct
|
|
76
|
+
Task-main repair remains reviewable without a matching producer report: the
|
|
77
|
+
ReviewRound pointer identifies the evidence gap. Attached reports describe their
|
|
78
|
+
named Candidate, not validation of the entire Task head; a Reviewer assesses
|
|
79
|
+
the fixed code and reports missing validation rather than borrowing old success.
|
|
80
|
+
Historical Candidates without this frozen proof remain inspectable, but need
|
|
81
|
+
newly captured delivery evidence before a new Candidate Review; old Snapshots
|
|
82
|
+
are never backfilled.
|
|
83
|
+
|
|
68
84
|
ReviewRound owns frozen Candidate or Task-head identity, workspace provenance,
|
|
69
85
|
execution topology, exact main Reviewer Run, lifecycle and Core diagnostics.
|
|
70
86
|
Its completed state is structural execution evidence, not a “pass” extracted
|
|
@@ -52,6 +52,19 @@ Review 结果。Producer 从不直接进入 Integration 或验收。重试针对
|
|
|
52
52
|
|
|
53
53
|
## Review
|
|
54
54
|
|
|
55
|
+
捕获 Run 来源的 WorkItem Candidate 时,会在现有不可变 Context Snapshot 存储中
|
|
56
|
+
冻结其精确原始报告与 Candidate 身份。Review 获得带
|
|
57
|
+
`evidenceOf=<work-item>/<candidate>` 的 `source-run` 指针,通过
|
|
58
|
+
`task run context expand` 读取原文与所有内容分页。来源、Candidate 或报告漂移会
|
|
59
|
+
拒绝新的派发,但已经冻结的 Run Context 仍可读取。Task-final 来源证据需要精确
|
|
60
|
+
匹配 Candidate 提交,或匹配固定 head 与 Task-main 目标的已提交 Integration。
|
|
61
|
+
仅共享目标的历史 attempts 不是血缘证明。Task-main 后续直接修复没有匹配报告时,
|
|
62
|
+
仍可审查,ReviewRound 指针明确提示证据缺口。附带报告只描述其命名的 Candidate,
|
|
63
|
+
不是整个 Task head 已通过验证的证明;Reviewer 应审查固定代码、报告验证缺口,
|
|
64
|
+
不能借用旧成功结论。
|
|
65
|
+
缺少冻结证据的历史 Candidate 仍可诊断;新的 Candidate Review 需要新捕获的交付
|
|
66
|
+
证据,不回填旧 Snapshot。
|
|
67
|
+
|
|
55
68
|
ReviewRound 拥有冻结的 Candidate 或 Task-head 身份、工作区来源、执行拓扑、精确
|
|
56
69
|
的 main Reviewer Run、生命周期和 Core 诊断。它的 completed 状态是结构性执行证据,
|
|
57
70
|
而不是从报告里提取出来的“通过”。
|