@zq-silk/yui 1.1.2 → 2.1.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/ARCHITECTURE.md +2 -1
- package/ARCHITECTURE.zh-CN.md +2 -1
- package/README.md +2 -0
- package/dist/cli/commandCatalog.js +344 -324
- package/dist/cli/commandDiscovery.js +69 -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/managedDiagnostics.js +2 -1
- package/dist/cli/updatePorts.js +0 -5
- package/dist/cli.js +184 -130
- package/dist/commands/capabilityCommands.js +5 -5
- package/dist/commands/controllerCommands.js +2 -1
- package/dist/commands/globalRoleCommands.js +86 -44
- package/dist/commands/grantCommands.js +48 -8
- package/dist/commands/taskCommands.js +157 -196
- package/dist/commands/taskContextCommand.js +29 -6
- package/dist/commands/taskFactCommands.js +10 -69
- package/dist/commands/taskInputCommands.js +26 -35
- package/dist/commands/taskPublicationCommands.js +2 -35
- package/dist/commands/taskPublicationVerifyCommand.js +1 -2
- package/dist/commands/taskUpstreamCommands.js +2 -1
- package/dist/context/runContextPack.js +8 -29
- package/dist/context/sessionBootstrapManifest.js +5 -101
- package/dist/context/taskContext.js +104 -41
- package/dist/controller/clientRuntime.js +16 -8
- package/dist/controller/fileSchedulerStoreAdapter.js +24 -0
- package/dist/controller/runtime.js +6 -0
- package/dist/core/controllerClient.js +46 -21
- package/dist/core/protocol.js +12 -7
- package/dist/doctor/doctor.js +4 -3
- package/dist/errors/cliError.js +4 -4
- package/dist/errors/cliFailure.js +213 -0
- package/dist/executor/fileRoleLaunchPlanner.js +1 -4
- package/dist/grant/capabilityGrant.js +13 -0
- package/dist/grant/taskAuthorization.js +127 -0
- package/dist/kernel/accessAssessment.js +1 -0
- package/dist/kernel/builtinCapabilities.js +88 -9
- package/dist/kernel/capabilityRegistry.js +64 -19
- package/dist/kernel/kernelPorts.js +2 -2
- package/dist/nativeAgent/agent.js +173 -0
- package/dist/nativeAgent/contracts.js +1 -0
- package/dist/nativeAgent/demo.js +29 -0
- package/dist/nativeAgent/index.js +3 -0
- package/dist/nativeAgent/mockProvider.js +43 -0
- package/dist/nativeAgent/textTools.js +156 -0
- package/dist/nativeAgent/validation.js +95 -0
- package/dist/output/boundedRead.js +118 -0
- package/dist/plugins/pluginService.js +98 -8
- package/dist/release/releaseWorkflowEngine.js +8 -1
- package/dist/resources/projectResourceService.js +23 -1
- package/dist/runtime/managedCaller.js +2 -2
- package/dist/runtime/managedIdentity.js +6 -0
- package/dist/runtime/runtimeCoherence.js +10 -8
- package/dist/storage/sqliteSchema.js +10 -0
- package/dist/storage/storageVersions.js +1 -1
- package/dist/storage/taskStore.js +3 -0
- package/dist/surface/surfaceContributions.js +3 -0
- package/dist/task/leaderArchive.js +111 -0
- package/dist/task/leaderArchiveAuthority.js +24 -0
- package/dist/task/taskAuthority.js +5 -10
- package/dist/tmux/commandExecutor.js +7 -5
- package/dist/web/assets/assetManifest.js +38 -22
- package/dist/web/assets/client/api.js +115 -0
- package/dist/web/assets/client/app.js +555 -863
- 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 +1020 -791
- package/dist/web/assets/client/overview.js +115 -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 +117 -0
- package/dist/web/assets/client/theme.js +61 -22
- package/dist/web/assets/icons.js +39 -0
- package/dist/web/assets/shell.js +124 -118
- package/dist/web/assets/styles/base.js +41 -0
- package/dist/web/assets/styles/components.js +167 -0
- package/dist/web/assets/styles/layout.js +49 -77
- package/dist/web/assets/styles/markdown.js +16 -24
- package/dist/web/assets/styles/responsive.js +33 -44
- package/dist/web/assets/styles/tokens.js +65 -89
- package/dist/web/assets/styles/views.js +289 -0
- package/dist/web/webServer.js +2 -1
- package/docs/architecture/README.md +1 -0
- package/docs/architecture/README.zh-CN.md +1 -0
- package/docs/cli-information-contract.md +107 -0
- package/docs/cli-information-contract.zh-CN.md +81 -0
- package/docs/managed-turn-and-session-runtime.md +9 -0
- package/docs/managed-turn-and-session-runtime.zh-CN.md +6 -0
- package/docs/plugin-sdk.md +7 -3
- package/docs/plugin-sdk.zh-CN.md +5 -2
- package/docs/release-workflow.md +42 -9
- package/docs/release-workflow.zh-CN.md +30 -7
- package/docs/storage-baseline.md +5 -0
- package/docs/testing/verification-levels.md +2 -2
- package/i18n/README.zh-CN.md +2 -0
- package/package.json +1 -1
- package/skills/yui-leader/SKILL.md +8 -1
- package/skills/yui-leader/references/authorization.md +64 -0
- package/skills/yui-leader/references/execution.md +18 -4
- package/skills/yui-leader/references/task-plugins.md +4 -2
- package/skills/yui-operator/SKILL.md +9 -2
- package/skills/yui-runtime/SKILL.md +77 -9
- package/skills/yui-runtime/references/publication.md +3 -1
- 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
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* COMPONENTS — reusable controls and primitives: buttons, segmented
|
|
3
|
+
* controls, badges, dots, chips, cards, disclosures, key/value lists, empty
|
|
4
|
+
* states, metrics, dialogs and the toast. Colour comes only from tokens.
|
|
5
|
+
*/
|
|
6
|
+
export const COMPONENT_STYLES = `
|
|
7
|
+
/* Tones: one semantic colour per tone, used by dots, badges and signals */
|
|
8
|
+
.tone-info{--tone:var(--info);--tone-soft:var(--info-soft)}
|
|
9
|
+
.tone-ok{--tone:var(--ok);--tone-soft:var(--ok-soft)}
|
|
10
|
+
.tone-warn{--tone:var(--warn);--tone-soft:var(--warn-soft)}
|
|
11
|
+
.tone-bad{--tone:var(--bad);--tone-soft:var(--bad-soft)}
|
|
12
|
+
.tone-idle{--tone:var(--idle);--tone-soft:var(--idle-soft)}
|
|
13
|
+
.tone-accent{--tone:var(--accent);--tone-soft:var(--accent-soft)}
|
|
14
|
+
|
|
15
|
+
/* Buttons */
|
|
16
|
+
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);font-size:var(--fs-sm);font-weight:500;white-space:nowrap;transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast),transform var(--t-fast)}
|
|
17
|
+
.btn:hover:not(:disabled){border-color:var(--line-3);background:var(--surface-3)}
|
|
18
|
+
.btn:active:not(:disabled){transform:translateY(1px)}
|
|
19
|
+
.btn:disabled{opacity:.45}
|
|
20
|
+
.btn .icon{width:15px;height:15px}
|
|
21
|
+
.btn-primary{background:var(--accent);border-color:transparent;color:var(--accent-ink);font-weight:600}
|
|
22
|
+
.btn-primary:hover:not(:disabled){background:var(--accent);border-color:transparent;filter:brightness(1.08)}
|
|
23
|
+
.btn-ghost{background:transparent;border-color:transparent;color:var(--ink-2)}
|
|
24
|
+
.btn-ghost:hover:not(:disabled){background:var(--surface-3);border-color:transparent;color:var(--ink)}
|
|
25
|
+
.btn-ghost[aria-pressed="true"]{background:var(--accent-soft);color:var(--accent)}
|
|
26
|
+
.btn-link{height:auto;padding:2px 0;border:0;background:transparent;color:var(--accent);font-weight:500}
|
|
27
|
+
.btn-link:hover:not(:disabled){background:transparent;text-decoration:underline;text-underline-offset:3px}
|
|
28
|
+
.link-btn{justify-self:start;padding:0;border:0;background:none;color:var(--accent);font-size:var(--fs-xs);font-weight:500}
|
|
29
|
+
.link-btn:hover{text-decoration:underline;text-underline-offset:3px}
|
|
30
|
+
.icon-btn{display:inline-grid;place-items:center;width:32px;height:32px;flex:none;padding:0;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink-3);transition:background var(--t-fast),color var(--t-fast)}
|
|
31
|
+
.icon-btn:hover:not(:disabled){background:var(--surface-3);color:var(--ink)}
|
|
32
|
+
.icon-btn[aria-pressed="true"]{background:var(--accent-soft);color:var(--accent)}
|
|
33
|
+
.icon-btn:disabled{opacity:.4}
|
|
34
|
+
.icon-btn .icon{width:17px;height:17px}
|
|
35
|
+
|
|
36
|
+
/* Segmented control */
|
|
37
|
+
.seg{display:inline-flex;gap:2px;padding:3px;border-radius:var(--r-md);background:var(--sunken);border:1px solid var(--line)}
|
|
38
|
+
.seg-btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 11px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink-3);font-size:var(--fs-sm);font-weight:500;white-space:nowrap;transition:background var(--t-fast),color var(--t-fast),box-shadow var(--t-fast)}
|
|
39
|
+
.seg-btn:hover:not(:disabled){color:var(--ink)}
|
|
40
|
+
.seg-btn[aria-selected="true"],.seg-btn[aria-checked="true"]{background:var(--surface-2);color:var(--ink);box-shadow:var(--shadow-1),0 0 0 1px var(--line-2)}
|
|
41
|
+
.seg-btn:disabled{opacity:.4}
|
|
42
|
+
.seg-btn .icon{width:15px;height:15px}
|
|
43
|
+
.seg-sm .seg-btn{height:24px;padding:0 9px;font-size:var(--fs-xs)}
|
|
44
|
+
|
|
45
|
+
/* Badges, dots, chips */
|
|
46
|
+
.badge{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:var(--r-pill);background:var(--tone-soft,var(--idle-soft));color:var(--tone,var(--ink-2));font-size:var(--fs-xs);font-weight:600;white-space:nowrap;line-height:1}
|
|
47
|
+
.badge-dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
|
|
48
|
+
.dot{display:inline-block;width:8px;height:8px;flex:none;border-radius:50%;background:var(--tone,var(--idle));box-shadow:0 0 0 3px var(--tone-soft,transparent)}
|
|
49
|
+
.chip{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:var(--r-xs);background:var(--surface-3);color:var(--ink-2);font-size:var(--fs-2xs);font-weight:500;white-space:nowrap}
|
|
50
|
+
.chip-strong{color:var(--ink);background:var(--line-2)}
|
|
51
|
+
.chip-row{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px}
|
|
52
|
+
code.id{padding:1px 6px;border-radius:var(--r-xs);background:var(--surface-3);color:var(--ink-2);font-size:var(--fs-2xs);white-space:nowrap}
|
|
53
|
+
.when{color:var(--ink-3);font-size:var(--fs-xs);white-space:nowrap}
|
|
54
|
+
.count{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;border-radius:var(--r-pill);background:var(--surface-3);color:var(--ink-3);font-size:10.5px;font-weight:600;line-height:1}
|
|
55
|
+
.spacer{flex:1}
|
|
56
|
+
.small{font-size:var(--fs-xs)}
|
|
57
|
+
.mono-line{font-family:var(--font-mono);font-size:var(--fs-2xs);overflow-wrap:anywhere}
|
|
58
|
+
|
|
59
|
+
/* Chip tabs (local filters) */
|
|
60
|
+
.chip-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
|
|
61
|
+
.chip-tab{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border:1px solid var(--line-2);border-radius:var(--r-pill);background:transparent;color:var(--ink-3);font-size:var(--fs-xs);font-weight:500}
|
|
62
|
+
.chip-tab:hover{color:var(--ink);border-color:var(--line-3)}
|
|
63
|
+
.chip-tab[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--canvas)}
|
|
64
|
+
.chip-tab[aria-pressed="true"] .count{background:rgba(127,127,127,.25);color:inherit}
|
|
65
|
+
|
|
66
|
+
/* Cards */
|
|
67
|
+
.card{display:flex;flex-direction:column;min-width:0;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1)}
|
|
68
|
+
.card-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 10px;padding:14px 16px 0}
|
|
69
|
+
.card-title{display:flex;align-items:center;gap:8px;flex:1;min-width:0;font-size:var(--fs-md);font-weight:600;color:var(--ink)}
|
|
70
|
+
.card-title .icon{color:var(--ink-3)}
|
|
71
|
+
.card-actions{grid-row:1;grid-column:2;display:flex;gap:6px;margin:-4px -6px -4px 0}
|
|
72
|
+
.card-hint{grid-column:1/-1;color:var(--ink-3);font-size:var(--fs-xs);line-height:1.45}
|
|
73
|
+
.card-body{display:grid;gap:12px;padding:14px 16px 16px;min-width:0}
|
|
74
|
+
.card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start}
|
|
75
|
+
.card-grid-1{grid-template-columns:minmax(0,1fr)}
|
|
76
|
+
.stack{display:grid;gap:10px;min-width:0}
|
|
77
|
+
|
|
78
|
+
/* Disclosure */
|
|
79
|
+
.disclosure{min-width:0;border-top:1px solid var(--line)}
|
|
80
|
+
.disclosure>summary{display:flex;align-items:center;gap:8px;padding:10px 0;list-style:none;cursor:pointer;color:var(--ink-2);font-size:var(--fs-sm);font-weight:500;user-select:none}
|
|
81
|
+
.disclosure>summary::-webkit-details-marker{display:none}
|
|
82
|
+
.disclosure>summary:hover{color:var(--ink)}
|
|
83
|
+
.disclosure-chevron{width:14px;height:14px;color:var(--ink-4);transition:transform var(--t-med) var(--ease)}
|
|
84
|
+
details[open]>summary .disclosure-chevron{transform:rotate(90deg)}
|
|
85
|
+
.disclosure-meta{margin-left:auto;color:var(--ink-4);font-size:var(--fs-xs);font-weight:400}
|
|
86
|
+
.disclosure-body{display:grid;gap:10px;padding:0 0 12px 22px;min-width:0}
|
|
87
|
+
.card-disclosure{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1)}
|
|
88
|
+
.card-disclosure>summary{padding:14px 16px;color:var(--ink);font-weight:600;font-size:var(--fs-md)}
|
|
89
|
+
.card-disclosure>.disclosure-body{padding:0 16px 16px}
|
|
90
|
+
|
|
91
|
+
/* Key/value */
|
|
92
|
+
.kv{display:grid;grid-template-columns:minmax(96px,max-content) minmax(0,1fr);gap:7px 16px;margin:0;font-size:var(--fs-sm)}
|
|
93
|
+
.kv dt{color:var(--ink-3)}
|
|
94
|
+
.kv dd{margin:0;min-width:0;color:var(--ink);overflow-wrap:anywhere}
|
|
95
|
+
.kv-compact{gap:3px 12px;font-size:var(--fs-xs)}
|
|
96
|
+
|
|
97
|
+
/* Prose */
|
|
98
|
+
.prose-block{display:grid;gap:5px;min-width:0}
|
|
99
|
+
.prose-label{color:var(--ink-3);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
|
|
100
|
+
.prose-block.is-collapsed .md{max-height:180px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 65%,transparent);mask-image:linear-gradient(#000 65%,transparent)}
|
|
101
|
+
.callout{padding:10px 12px;border-radius:var(--r-md);background:var(--tone-soft,var(--surface-3));border-left:2px solid var(--tone,var(--line-3))}
|
|
102
|
+
.bullets{margin:0;padding-left:18px;display:grid;gap:3px;font-size:var(--fs-sm);color:var(--ink-2)}
|
|
103
|
+
.checklist{list-style:none;margin:0;padding:0;display:grid;gap:5px;font-size:var(--fs-sm)}
|
|
104
|
+
.checklist li{display:flex;gap:8px;align-items:flex-start;color:var(--ink-2)}
|
|
105
|
+
.checklist li .icon{margin-top:3px;color:var(--ink-4)}
|
|
106
|
+
.checklist li.is-done .icon{color:var(--ok)}
|
|
107
|
+
|
|
108
|
+
/* Notes, empty states, receipts */
|
|
109
|
+
.note{padding:8px 11px;border-radius:var(--r-sm);background:var(--tone-soft,var(--surface-3));color:var(--ink-2);font-size:var(--fs-xs);line-height:1.5}
|
|
110
|
+
.note.tone-bad{color:var(--bad)}
|
|
111
|
+
.note.tone-warn{color:var(--ink)}
|
|
112
|
+
.empty{display:flex;align-items:center;gap:10px;padding:14px;border:1px dashed var(--line-2);border-radius:var(--r-md);color:var(--ink-3);font-size:var(--fs-sm)}
|
|
113
|
+
.empty .icon{color:var(--ink-4)}
|
|
114
|
+
.receipt{color:var(--ink-3);font-size:var(--fs-xs);overflow-wrap:anywhere}
|
|
115
|
+
.receipt[data-state="pending"]{color:var(--info)}
|
|
116
|
+
.receipt[data-state="ok"]{color:var(--ok)}
|
|
117
|
+
.receipt[data-state="warn"]{color:var(--warn)}
|
|
118
|
+
.receipt[data-state="bad"]{color:var(--bad)}
|
|
119
|
+
.code-block{margin:0;max-height:360px;overflow:auto;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--sunken);color:var(--ink-2);font-size:var(--fs-2xs);line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
120
|
+
.show-more{justify-self:start;display:inline-flex;align-items:center;height:30px;padding:0 12px;border:1px dashed var(--line-3);border-radius:var(--r-sm);background:transparent;color:var(--ink-3);font-size:var(--fs-xs);font-weight:500}
|
|
121
|
+
.show-more:hover{color:var(--accent);border-color:var(--accent-line)}
|
|
122
|
+
.loading-block{display:flex;align-items:center;gap:10px;padding:32px 8px;color:var(--ink-3)}
|
|
123
|
+
.spinner{width:14px;height:14px;border-radius:50%;border:2px solid var(--line-3);border-top-color:var(--accent);animation:spin .8s linear infinite}
|
|
124
|
+
@keyframes spin{to{transform:rotate(360deg)}}
|
|
125
|
+
|
|
126
|
+
/* Metrics */
|
|
127
|
+
.metric{display:grid;gap:4px;align-content:start;min-width:0;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
|
|
128
|
+
.metric-label{color:var(--ink-3);font-size:var(--fs-xs)}
|
|
129
|
+
.metric-value{font-size:var(--fs-xl);font-weight:600;letter-spacing:-.02em;color:var(--tone,var(--ink));font-variant-numeric:tabular-nums;line-height:1.2}
|
|
130
|
+
.metric-note{color:var(--ink-4);font-size:var(--fs-2xs);line-height:1.4}
|
|
131
|
+
.metric-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}
|
|
132
|
+
.usage{display:grid;gap:10px}
|
|
133
|
+
.usage-meta{display:flex;flex-wrap:wrap;gap:4px 16px;color:var(--ink-3);font-size:var(--fs-2xs)}
|
|
134
|
+
|
|
135
|
+
/* Forms */
|
|
136
|
+
.field{display:grid;gap:6px;min-width:0;margin:0;padding:0;border:0;font-size:var(--fs-sm)}
|
|
137
|
+
.field>span,.field>legend{color:var(--ink-2);font-size:var(--fs-xs);font-weight:500;padding:0}
|
|
138
|
+
.field-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
|
|
139
|
+
.form-actions{display:flex;gap:8px;justify-content:flex-end}
|
|
140
|
+
.inline-form{display:grid;gap:8px}
|
|
141
|
+
.inline-row{display:flex;gap:8px}
|
|
142
|
+
.inline-row input{flex:1}
|
|
143
|
+
|
|
144
|
+
/* Dialogs */
|
|
145
|
+
.dialog{width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 48px);padding:0;overflow:auto;border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--surface);color:var(--ink);box-shadow:var(--shadow-2)}
|
|
146
|
+
.dialog::backdrop{background:rgba(0,0,0,.45);backdrop-filter:blur(2px)}
|
|
147
|
+
.dialog-body{display:grid;gap:16px;padding:20px}
|
|
148
|
+
.dialog-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
|
|
149
|
+
.dialog-head h2{font-size:var(--fs-lg)}
|
|
150
|
+
.dialog-sub{margin-top:4px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
151
|
+
.dialog-actions{display:flex;gap:8px;justify-content:flex-end}
|
|
152
|
+
.settings-dialog{width:min(460px,calc(100vw - 32px))}
|
|
153
|
+
.theme-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
|
|
154
|
+
.theme-option{display:grid;gap:8px;padding:8px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface-2);text-align:left;font-size:var(--fs-sm);font-weight:500}
|
|
155
|
+
.theme-option:hover{border-color:var(--line-3)}
|
|
156
|
+
.theme-option[aria-pressed="true"]{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
|
|
157
|
+
.theme-swatch{display:flex;height:34px;overflow:hidden;border-radius:var(--r-sm);border:1px solid var(--line)}
|
|
158
|
+
.theme-swatch i{flex:2}
|
|
159
|
+
.theme-swatch i[data-part="2"]{flex:1}
|
|
160
|
+
.shortcut-list{display:grid;grid-template-columns:max-content 1fr;gap:6px 14px;margin:0;font-size:var(--fs-sm);color:var(--ink-2)}
|
|
161
|
+
.shortcut-list dt{display:flex;gap:3px;align-items:center}
|
|
162
|
+
.shortcut-list dd{margin:0}
|
|
163
|
+
|
|
164
|
+
/* Toast */
|
|
165
|
+
.toast{position:fixed;left:50%;bottom:24px;z-index:90;max-width:min(520px,calc(100vw - 32px));padding:10px 16px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface-2);color:var(--ink);box-shadow:var(--shadow-2);font-size:var(--fs-sm);opacity:0;transform:translate(-50%,8px);pointer-events:none;transition:opacity var(--t-med),transform var(--t-med) var(--ease)}
|
|
166
|
+
.toast.show{opacity:1;transform:translate(-50%,0)}
|
|
167
|
+
`;
|
|
@@ -1,81 +1,53 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* LAYOUT —
|
|
3
|
-
*
|
|
2
|
+
* LAYOUT — the three-region workspace.
|
|
3
|
+
* sidebar | center (task details) | divider | dock (session)
|
|
4
|
+
* body.dock-open shows the dock; body.dock-center swaps the dock into the
|
|
5
|
+
* middle so the order becomes sidebar | dock | divider | center.
|
|
4
6
|
*/
|
|
5
7
|
export const LAYOUT_STYLES = `
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
.app
|
|
10
|
-
body.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
.
|
|
16
|
-
.
|
|
17
|
-
.
|
|
18
|
-
.
|
|
19
|
-
.
|
|
20
|
-
.
|
|
21
|
-
.
|
|
22
|
-
.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
.
|
|
27
|
-
.
|
|
28
|
-
.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
.
|
|
34
|
-
.
|
|
35
|
-
.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
.
|
|
39
|
-
.
|
|
40
|
-
|
|
41
|
-
.
|
|
42
|
-
|
|
43
|
-
.
|
|
44
|
-
.
|
|
45
|
-
.
|
|
46
|
-
.
|
|
47
|
-
.
|
|
48
|
-
.
|
|
49
|
-
|
|
50
|
-
.
|
|
51
|
-
.pane-divider[hidden]{display:none}
|
|
52
|
-
.pane-divider span{position:absolute;inset:0 3px;background:var(--border-strong);transition:background var(--motion-fast)}
|
|
53
|
-
.pane-divider:hover span,.pane-divider:focus-visible span,body.pane-resizing .pane-divider span{background:var(--accent)}
|
|
54
|
-
.pane-divider:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
|
|
55
|
-
.conversation-panel{grid-area:pane;min-width:0;height:100vh;min-height:0;display:flex;flex-direction:column;overflow:hidden}
|
|
56
|
-
.conversation-panel[hidden]{display:none}
|
|
57
|
-
.conversation-head{flex:none;min-height:72px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 16px}
|
|
58
|
-
.conversation-head>div:first-child{min-width:0}
|
|
59
|
-
.conversation-eyebrow{display:block;font-size:10px;line-height:1.4}
|
|
60
|
-
.conversation-head h2{margin:4px 0 0;font-size:16px;font-family:var(--font-display);line-height:1.25}
|
|
61
|
-
.conversation-head-actions{display:flex;gap:4px;align-items:center}
|
|
62
|
-
.conversation-content{display:flex;flex:1;flex-direction:column;min-height:0;padding:14px;gap:14px}
|
|
63
|
-
.conversation-feed{display:flex;flex:1;flex-direction:column;gap:10px;min-height:0;overflow-y:auto;scrollbar-gutter:stable;padding:2px 2px 12px}
|
|
64
|
-
.conversation-item{flex:none;padding:11px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-2);min-width:0;overflow-wrap:anywhere}
|
|
65
|
-
.conversation-item.is-user{border-color:var(--accent-line);background:var(--accent-soft)}
|
|
66
|
-
.conversation-item-head{display:flex;justify-content:space-between;gap:10px;color:var(--muted);font-size:11px;margin-bottom:8px}
|
|
67
|
-
.conversation-item-head time{white-space:nowrap}
|
|
68
|
-
.conversation-item .rich-text{font-size:13px}
|
|
69
|
-
.conversation-compose{flex:none;max-height:55%;overflow-y:auto}
|
|
70
|
-
.conversation-compose h3{margin:2px 0;font-size:13px}
|
|
71
|
-
.conversation-compose form{display:grid;gap:9px}
|
|
72
|
-
.conversation-compose textarea{min-height:76px}
|
|
73
|
-
/* Native Session occupies the pane temporarily; it is not the Task message feed. */
|
|
74
|
-
.terminal-panel{grid-area:pane;min-width:0;height:100vh;display:flex;flex-direction:column;overflow:hidden}
|
|
75
|
-
.terminal-panel[hidden]{display:none}
|
|
76
|
-
.terminal-head{flex:none;height:62px;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 14px}
|
|
77
|
-
.terminal-head>div{display:flex;align-items:center;gap:12px;min-width:0}
|
|
78
|
-
.terminal-head h2{margin:0}
|
|
79
|
-
.terminal-host{flex:1;min-height:0;padding:8px 10px;overflow:hidden;position:relative}
|
|
80
|
-
.terminal-hint{position:absolute;inset:0;display:grid;place-content:center;gap:8px;text-align:center;padding:20px}
|
|
8
|
+
.app{display:grid;height:100vh;height:100dvh;grid-template-rows:minmax(0,1fr);
|
|
9
|
+
grid-template-areas:"sidebar center divider dock";
|
|
10
|
+
grid-template-columns:var(--sidebar-w) minmax(0,1fr) 0 0}
|
|
11
|
+
body.dock-open .app{grid-template-columns:var(--sidebar-w) minmax(0,1fr) var(--divider-w) var(--dock-w)}
|
|
12
|
+
body.dock-open.dock-center .app{grid-template-areas:"sidebar dock divider center";grid-template-columns:var(--sidebar-w) var(--dock-w) var(--divider-w) minmax(0,1fr)}
|
|
13
|
+
|
|
14
|
+
/* Sidebar */
|
|
15
|
+
.sidebar{grid-area:sidebar;display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--surface);border-right:1px solid var(--line)}
|
|
16
|
+
.side-head{flex:none;display:flex;align-items:center;gap:10px;height:var(--header-h);padding:0 12px 0 16px;border-bottom:1px solid var(--line)}
|
|
17
|
+
.brand{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
|
|
18
|
+
.search-field{flex:none;margin:12px 12px 0}
|
|
19
|
+
.attention-bar{flex:none;margin:10px 12px 0}
|
|
20
|
+
.status-tabs{flex:none;margin:10px 0 0;padding:0 12px}
|
|
21
|
+
.task-list{flex:1;min-height:0;overflow-y:auto;padding:6px 8px 12px;scrollbar-gutter:stable}
|
|
22
|
+
.pager{flex:none;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:6px;padding:8px 12px;border-top:1px solid var(--line)}
|
|
23
|
+
.pager .pager-clear{grid-column:1/-1}
|
|
24
|
+
.side-foot{flex:none;display:flex;align-items:center;gap:6px;padding:10px 12px;border-top:1px solid var(--line)}
|
|
25
|
+
|
|
26
|
+
/* Center */
|
|
27
|
+
.center{grid-area:center;min-width:0;min-height:0;overflow-y:auto;scrollbar-gutter:stable;background:var(--canvas)}
|
|
28
|
+
.center:focus-visible{box-shadow:none}
|
|
29
|
+
.detail{min-height:100%}
|
|
30
|
+
.page{max-width:var(--center-max);margin:0 auto;padding:0 clamp(16px,3vw,40px) 64px}
|
|
31
|
+
|
|
32
|
+
/* Dock divider */
|
|
33
|
+
.dock-divider{grid-area:divider;position:relative;cursor:col-resize;touch-action:none;background:var(--canvas);z-index:5}
|
|
34
|
+
.dock-divider span{position:absolute;top:0;bottom:0;left:4px;width:1px;background:var(--line-2);transition:background var(--t-fast),box-shadow var(--t-fast)}
|
|
35
|
+
.dock-divider:hover span,.dock-divider:focus-visible span,body.dock-resizing .dock-divider span{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}
|
|
36
|
+
.dock-divider:focus-visible{box-shadow:none}
|
|
37
|
+
body.dock-resizing{cursor:col-resize;user-select:none}
|
|
38
|
+
|
|
39
|
+
/* Dock */
|
|
40
|
+
.dock{grid-area:dock;display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--surface)}
|
|
41
|
+
body.dock-open:not(.dock-center) .dock{border-left:0}
|
|
42
|
+
.dock-head{flex:none;display:flex;align-items:center;justify-content:space-between;gap:8px;height:var(--header-h);padding:0 10px 0 12px;border-bottom:1px solid var(--line)}
|
|
43
|
+
.dock-actions{display:flex;gap:2px}
|
|
44
|
+
.dock-pane{flex:1;min-height:0;display:flex;flex-direction:column}
|
|
45
|
+
.dock-discussion{position:relative}
|
|
46
|
+
.dock-session{background:var(--term-bg)}
|
|
47
|
+
.session-bar{flex:none;display:flex;align-items:center;gap:8px;min-height:44px;padding:6px 10px;border-bottom:1px solid rgba(255,255,255,.07)}
|
|
48
|
+
.session-targets{display:flex;gap:4px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}
|
|
49
|
+
.terminal-host{flex:1;min-height:0;padding:10px 4px 6px 12px;overflow:hidden}
|
|
50
|
+
.terminal-host:empty{display:none}
|
|
51
|
+
.terminal-empty{flex:1;display:grid;place-content:center;justify-items:center;gap:8px;padding:24px;text-align:center}
|
|
52
|
+
.session-foot{flex:none;display:flex;align-items:center;gap:8px;padding:8px 12px;border-top:1px solid rgba(255,255,255,.07)}
|
|
81
53
|
`;
|
|
@@ -1,29 +1,21 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* MARKDOWN — rendered
|
|
3
|
-
*
|
|
4
|
-
* Also owns the collapse affordances (.md-toggle, .show-more) that long
|
|
5
|
-
* blocks and paged lists share.
|
|
2
|
+
* MARKDOWN — rendered Agent/user prose. .md is produced by client/markdown.ts
|
|
3
|
+
* (escaped HTML plus a small set of our own inline and block tags).
|
|
6
4
|
*/
|
|
7
5
|
export const MARKDOWN_STYLES = `
|
|
8
|
-
.md{display:grid;gap:
|
|
6
|
+
.md{display:grid;gap:7px;min-width:0;font-size:var(--fs-sm);line-height:1.62;color:var(--ink);overflow-wrap:anywhere}
|
|
9
7
|
.md p{margin:0}
|
|
10
|
-
.md h4,.md h5,.md h6{margin:
|
|
11
|
-
.md h4{font-size:
|
|
12
|
-
.md h5{font-size:
|
|
13
|
-
.md h6{font-size:
|
|
14
|
-
.md ul,.md ol{margin:0;padding-left:
|
|
15
|
-
.md li{
|
|
16
|
-
.md code{
|
|
17
|
-
.md pre{margin:0;padding:
|
|
18
|
-
.md pre code{
|
|
19
|
-
.md a{color:var(--accent);text-decoration:
|
|
20
|
-
.md a:hover{
|
|
21
|
-
.md
|
|
22
|
-
|
|
23
|
-
.record-block.is-collapsed .md,
|
|
24
|
-
.execute-io.is-collapsed .md{max-height:200px;overflow:hidden;mask-image:linear-gradient(#000 70%,transparent);-webkit-mask-image:linear-gradient(#000 70%,transparent)}
|
|
25
|
-
.md-toggle{justify-self:start;display:inline-flex;align-items:center;padding:3px 11px;color:var(--muted);background:transparent;border:1px solid var(--border);border-radius:var(--radius-pill);font-family:var(--font-body);font-size:11px;line-height:1.4;transition:color var(--motion-fast),border-color var(--motion-fast),background var(--motion-fast)}
|
|
26
|
-
.md-toggle:hover{color:var(--accent);border-color:var(--accent-line);background:var(--accent-soft)}
|
|
27
|
-
.show-more{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 13px;color:var(--muted);background:transparent;border:1px dashed var(--border);border-radius:var(--radius);font-family:var(--font-body);font-size:12px;font-weight:600;transition:color var(--motion-fast),border-color var(--motion-fast),background var(--motion-fast)}
|
|
28
|
-
.show-more:hover{color:var(--accent);border-color:var(--accent-line);background:var(--accent-soft)}
|
|
8
|
+
.md h4,.md h5,.md h6{margin:6px 0 0;font-weight:600;line-height:1.35}
|
|
9
|
+
.md h4{font-size:var(--fs-md)}
|
|
10
|
+
.md h5{font-size:var(--fs-sm)}
|
|
11
|
+
.md h6{font-size:var(--fs-sm);color:var(--ink-2)}
|
|
12
|
+
.md ul,.md ol{margin:0;padding-left:20px;display:grid;gap:3px}
|
|
13
|
+
.md li::marker{color:var(--ink-4)}
|
|
14
|
+
.md code{padding:1px 5px;border-radius:var(--r-xs);background:var(--surface-3);font-size:.88em}
|
|
15
|
+
.md pre{margin:0;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--sunken);overflow-x:auto}
|
|
16
|
+
.md pre code{padding:0;background:transparent;font-size:var(--fs-2xs);line-height:1.55}
|
|
17
|
+
.md a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-line);text-underline-offset:3px}
|
|
18
|
+
.md a:hover{text-decoration-color:currentColor}
|
|
19
|
+
.md strong{font-weight:600}
|
|
20
|
+
.md.muted{color:var(--ink-2)}
|
|
29
21
|
`;
|
|
@@ -1,54 +1,43 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* RESPONSIVE — breakpoints only.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* ≤1200px narrower sidebar and dock defaults
|
|
4
|
+
* ≤900px master–detail: task list OR task page; the dock becomes a
|
|
5
|
+
* full-screen sheet over the task page
|
|
5
6
|
*/
|
|
6
7
|
export const RESPONSIVE_STYLES = `
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
.
|
|
8
|
+
@media(max-width:1200px){
|
|
9
|
+
:root{--sidebar-w:264px}
|
|
10
|
+
.card-grid{grid-template-columns:minmax(0,1fr)}
|
|
11
|
+
.metric-strip{grid-template-columns:repeat(3,minmax(0,1fr))}
|
|
12
|
+
}
|
|
13
|
+
@media(max-width:1040px){
|
|
14
|
+
body.dock-open .overview-grid{grid-template-columns:minmax(0,1fr)}
|
|
10
15
|
}
|
|
11
16
|
@media(max-width:900px){
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
.
|
|
15
|
-
.sidebar{
|
|
16
|
-
.task-
|
|
17
|
-
.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
.
|
|
23
|
-
.
|
|
24
|
-
.
|
|
25
|
-
.conversation-head-actions #conversation-swap{display:none}
|
|
26
|
-
body.conversation-active .main-col{display:none}
|
|
27
|
-
body.conversation-active .conversation-panel{display:flex}
|
|
28
|
-
.overview-duo{grid-template-columns:1fr}
|
|
29
|
-
.observability-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}
|
|
30
|
-
/* Terminal panel overlays full-screen instead of occupying a grid column */
|
|
31
|
-
.terminal-panel{position:fixed;inset:0;z-index:80;height:100dvh;border-left:0}
|
|
17
|
+
.app,body.dock-open .app,body.dock-open.dock-center .app{grid-template-areas:"main";grid-template-columns:minmax(0,1fr)}
|
|
18
|
+
.sidebar{grid-area:main;border-right:0}
|
|
19
|
+
.center{grid-area:main;display:none}
|
|
20
|
+
body.task-open .sidebar{display:none}
|
|
21
|
+
body.task-open .center{display:block}
|
|
22
|
+
.back-btn{display:inline-grid}
|
|
23
|
+
.crumbs .crumb,.crumbs .crumb-sep{display:none}
|
|
24
|
+
.dock-divider{display:none}
|
|
25
|
+
.dock{position:fixed;inset:0;z-index:60;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
|
|
26
|
+
#dock-swap{display:none}
|
|
27
|
+
.overview-grid{grid-template-columns:minmax(0,1fr)}
|
|
28
|
+
.dock-toggle span{display:none}
|
|
29
|
+
.dock-toggle{width:32px;padding:0}
|
|
32
30
|
}
|
|
33
31
|
@media(max-width:620px){
|
|
34
|
-
.
|
|
35
|
-
.
|
|
36
|
-
.
|
|
37
|
-
|
|
38
|
-
.
|
|
39
|
-
.
|
|
40
|
-
.
|
|
41
|
-
.
|
|
42
|
-
.
|
|
43
|
-
|
|
44
|
-
#conversation-toggle{font-size:0}
|
|
45
|
-
#conversation-toggle::before{content:"▤";font-size:19px}
|
|
46
|
-
#operator-terminal .operator-title,#operator-terminal .operator-shortcuts,#refresh span,#refresh kbd{display:none}
|
|
47
|
-
#operator-terminal::before{content:">_";font-family:var(--font-mono);font-size:15px}
|
|
48
|
-
#refresh::before{content:"↻";font-size:20px}
|
|
49
|
-
.detail-tabs{mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}
|
|
50
|
-
.record-cols{grid-template-columns:1fr}
|
|
51
|
-
.observability-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
|
|
32
|
+
.metric-strip{grid-template-columns:repeat(2,minmax(0,1fr))}
|
|
33
|
+
.page-head{padding-top:24px;flex-wrap:wrap}
|
|
34
|
+
.task-title{font-size:var(--fs-xl)}
|
|
35
|
+
.tab:not([aria-selected="true"]) span:not(.count){display:none}
|
|
36
|
+
.tab{padding:0 12px}
|
|
37
|
+
.field-row{grid-template-columns:minmax(0,1fr)}
|
|
38
|
+
.work-body{padding-left:16px}
|
|
39
|
+
.kv{grid-template-columns:minmax(0,1fr)}
|
|
40
|
+
.kv dt{margin-top:4px}
|
|
41
|
+
.foot-btn kbd{display:none}
|
|
52
42
|
}
|
|
53
|
-
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
|
|
54
43
|
`;
|