@zq-silk/yui 2.0.0 → 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.
Files changed (61) hide show
  1. package/dist/cli/commandCatalog.js +294 -286
  2. package/dist/cli/commandDiscovery.js +69 -0
  3. package/dist/cli/completion.js +22 -227
  4. package/dist/cli/dynamicCompletion.js +12 -6
  5. package/dist/cli/invocationAuthority.js +2 -2
  6. package/dist/cli/invocationRouter.js +18 -7
  7. package/dist/cli.js +71 -23
  8. package/dist/commands/capabilityCommands.js +5 -5
  9. package/dist/commands/globalRoleCommands.js +2 -1
  10. package/dist/commands/taskCommands.js +11 -0
  11. package/dist/context/taskContext.js +6 -2
  12. package/dist/kernel/accessAssessment.js +1 -0
  13. package/dist/kernel/builtinCapabilities.js +28 -1
  14. package/dist/kernel/capabilityRegistry.js +64 -19
  15. package/dist/nativeAgent/agent.js +173 -0
  16. package/dist/nativeAgent/contracts.js +1 -0
  17. package/dist/nativeAgent/demo.js +29 -0
  18. package/dist/nativeAgent/index.js +3 -0
  19. package/dist/nativeAgent/mockProvider.js +43 -0
  20. package/dist/nativeAgent/textTools.js +156 -0
  21. package/dist/nativeAgent/validation.js +95 -0
  22. package/dist/plugins/pluginService.js +98 -8
  23. package/dist/resources/projectResourceService.js +23 -1
  24. package/dist/runtime/managedIdentity.js +6 -0
  25. package/dist/surface/surfaceContributions.js +3 -0
  26. package/dist/task/taskAuthority.js +5 -10
  27. package/dist/web/assets/assetManifest.js +38 -22
  28. package/dist/web/assets/client/api.js +115 -0
  29. package/dist/web/assets/client/app.js +555 -863
  30. package/dist/web/assets/client/components.js +323 -897
  31. package/dist/web/assets/client/detail.js +333 -0
  32. package/dist/web/assets/client/dock.js +225 -0
  33. package/dist/web/assets/client/dom.js +55 -3
  34. package/dist/web/assets/client/evidence.js +172 -0
  35. package/dist/web/assets/client/format.js +25 -14
  36. package/dist/web/assets/client/forms.js +230 -0
  37. package/dist/web/assets/client/i18n.js +1020 -791
  38. package/dist/web/assets/client/overview.js +115 -0
  39. package/dist/web/assets/client/records.js +63 -0
  40. package/dist/web/assets/client/sections.js +313 -0
  41. package/dist/web/assets/client/sidebar.js +117 -0
  42. package/dist/web/assets/client/theme.js +61 -22
  43. package/dist/web/assets/icons.js +39 -0
  44. package/dist/web/assets/shell.js +124 -118
  45. package/dist/web/assets/styles/base.js +41 -0
  46. package/dist/web/assets/styles/components.js +167 -0
  47. package/dist/web/assets/styles/layout.js +49 -77
  48. package/dist/web/assets/styles/markdown.js +16 -24
  49. package/dist/web/assets/styles/responsive.js +33 -44
  50. package/dist/web/assets/styles/tokens.js +65 -89
  51. package/dist/web/assets/styles/views.js +289 -0
  52. package/dist/web/webServer.js +2 -1
  53. package/docs/release-workflow.md +23 -0
  54. package/docs/release-workflow.zh-CN.md +16 -0
  55. package/package.json +1 -1
  56. package/skills/yui-runtime/SKILL.md +26 -0
  57. package/dist/web/assets/client/taskSummary.js +0 -350
  58. package/dist/web/assets/client/taskSurface.js +0 -616
  59. package/dist/web/assets/client/view.js +0 -608
  60. package/dist/web/assets/styles/cards.js +0 -247
  61. package/dist/web/assets/styles/widgets.js +0 -168
@@ -1,101 +1,77 @@
1
1
  /*
2
- * DESIGN TOKEN CONTRACT
3
- * ---------------------
4
- * Layout is fully decoupled from themes. Geometry, type, metrics, and motion
5
- * live once in the theme-independent :root block below and are shared by every
6
- * theme. A [data-theme="..."] block defines ONLY color / surface / effect
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
- * To add a theme: copy a color block, rename the selector, retune the color
12
- * values, then register the name in client/theme.ts (THEMES) and add an
13
- * <option> in shell.ts. Do NOT put layout tokens in a theme block; if a future
14
- * theme genuinely needs to affect layout, revisit this contract deliberately.
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
- * Theme-independent (:root, shared by all themes)
17
- * Geometry --radius --radius-lg --radius-pill
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
- --radius:10px;--radius-lg:16px;--radius-pill:999px;
35
- --font-mono:"JetBrains Mono","SFMono-Regular",Consolas,monospace;
36
- --font-display:"Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
37
- --font-body:"Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
38
- --page-space:clamp(18px,2.6vw,40px);--sidebar-w:clamp(232px,18vw,288px);--terminal-w:clamp(420px,34vw,640px);--pane-w:clamp(300px,29vw,500px);
39
- --motion-fast:150ms;--motion-slow:320ms;--ease:cubic-bezier(.16,.84,.44,1);
40
- }
41
- :root,[data-theme="control-room"]{
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="atlas"]{
29
+ :root,[data-theme="sumi"]{
62
30
  color-scheme:dark;
63
- --bg:#051221;--bg-1:#081a2c;--bg-2:#0c2436;--bg-3:#122d44;
64
- --border:#153349;--border-strong:#2a4a63;
65
- --text:#e6f2fb;--muted:#8ba9c2;--faint:#567184;
66
- --accent:#38e1d4;--accent-2:#7cabf2;--on-accent:#04131d;
67
- --accent-soft:rgba(56,225,212,.1);--accent-line:rgba(56,225,212,.32);
68
- --active:#38e1d4;--active-soft:rgba(56,225,212,.12);
69
- --success:#49db9e;--success-soft:rgba(73,219,158,.12);
70
- --warning:#ffc86b;--warning-soft:rgba(255,200,107,.12);
71
- --danger:#ff7a8f;--danger-soft:rgba(255,122,143,.12);
72
- --glow:0 0 18px rgba(56,225,212,.4);
73
- --shadow-card:0 1px 2px rgba(0,0,0,.32),0 4px 12px rgba(0,0,0,.18);
74
- --shadow-pop:0 18px 48px rgba(0,0,0,.5);
75
- --ambient:
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="paper"]{
45
+ [data-theme="washi"]{
82
46
  color-scheme:light;
83
- --bg:#e9eef6;--bg-1:#f2f6fc;--bg-2:#ffffff;--bg-3:#f7fafe;
84
- --border:#d4deec;--border-strong:#b2c0d6;
85
- --text:#132030;--muted:#54637a;--faint:#8493a8;
86
- --accent:#2563eb;--accent-2:#7c3aed;--on-accent:#ffffff;
87
- --accent-soft:rgba(37,99,235,.08);--accent-line:rgba(37,99,235,.3);
88
- --active:#2563eb;--active-soft:rgba(37,99,235,.1);
89
- --success:#0f9d68;--success-soft:rgba(15,157,104,.1);
90
- --warning:#b26a00;--warning-soft:rgba(178,106,0,.1);
91
- --danger:#d33a52;--danger-soft:rgba(211,58,82,.1);
92
- --glow:0 0 16px rgba(37,99,235,.28);
93
- --shadow-card:0 1px 2px rgba(24,45,78,.05),0 4px 14px rgba(24,45,78,.07);
94
- --shadow-pop:0 18px 44px rgba(24,45,78,.18);
95
- --ambient:
96
- radial-gradient(1000px 560px at 8% -12%,rgba(37,99,235,.09),transparent 58%),
97
- radial-gradient(900px 520px at 104% -6%,rgba(124,58,237,.08),transparent 55%),
98
- linear-gradient(rgba(24,45,78,.03) 1px,transparent 1px) 0 0/100% 44px,
99
- linear-gradient(90deg,rgba(24,45,78,.03) 1px,transparent 1px) 0 0/44px 100%;
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,289 @@
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{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px;border-bottom:1px solid var(--line)}
29
+ .tabs-row::-webkit-scrollbar{display:none}
30
+ .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}
31
+ .status-tab:hover{color:var(--ink)}
32
+ .status-tab[aria-pressed="true"]{color:var(--ink)}
33
+ .status-tab[aria-pressed="true"]::after{content:"";position:absolute;left:6px;right:6px;bottom:-3px;height:2px;border-radius:2px;background:var(--accent)}
34
+ .status-tab-count{color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
35
+ .task-group{margin-top:10px}
36
+ .task-group-head{display:flex;align-items:center;gap:6px;padding:4px 8px 6px;color:var(--ink-4);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.07em}
37
+ .task-group-head .count{background:transparent;padding:0;min-width:0}
38
+ .task-row{position:relative;display:flex;align-items:flex-start;gap:10px;width:100%;padding:9px 10px;border:0;border-radius:var(--r-md);background:transparent;text-align:left;transition:background var(--t-fast)}
39
+ .task-row>.dot{margin-top:6px}
40
+ .task-row:hover{background:var(--surface-3)}
41
+ .task-row[aria-current="true"]{background:var(--surface-3);box-shadow:inset 0 0 0 1px var(--line-2)}
42
+ .task-row[aria-current="true"]::before{content:"";position:absolute;left:-8px;top:10px;bottom:10px;width:3px;border-radius:0 3px 3px 0;background:var(--accent)}
43
+ .task-body{display:grid;gap:3px;flex:1;min-width:0}
44
+ .task-line{display:flex;align-items:center;gap:8px;min-width:0}
45
+ .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}
46
+ .task-time{flex:none;color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
47
+ .task-sub{gap:8px;height:18px;color:var(--ink-4);font-size:var(--fs-2xs)}
48
+ .task-id{font-size:var(--fs-2xs);line-height:1;color:var(--ink-3)}
49
+ .task-meta{display:inline-flex;align-items:center;gap:3px;line-height:1;white-space:nowrap}
50
+ .task-meta .icon{width:11px;height:11px}
51
+ .task-signals{display:inline-flex;gap:4px;margin-left:auto}
52
+ .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}
53
+ .signal .icon{width:11px;height:11px;stroke-width:2}
54
+ .list-empty{display:grid;justify-items:center;gap:8px;padding:36px 16px;color:var(--ink-4);font-size:var(--fs-sm);text-align:center}
55
+ .list-empty.is-error{color:var(--bad)}
56
+ .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)}
57
+ .pager-btn:hover:not(:disabled){border-color:var(--line-3);color:var(--ink)}
58
+ .pager-btn:disabled{opacity:.4}
59
+ .pager-count{grid-column:2;text-align:center;color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
60
+ .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)}
61
+ .pager-clear:hover{color:var(--accent);border-color:var(--accent-line)}
62
+ .foot-btn{display:inline-flex;align-items:center;gap:7px;height:32px;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);font-weight:500;min-width:0}
63
+ .foot-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
64
+ .foot-btn:hover{color:var(--ink);border-color:var(--line-3);background:var(--surface-3)}
65
+ .foot-btn[aria-pressed="true"]{color:var(--accent);border-color:var(--accent-line);background:var(--accent-soft)}
66
+ .foot-btn kbd{margin-left:2px}
67
+ .side-foot .foot-btn:first-child{flex:1}
68
+ .side-foot .icon-btn{margin-left:auto}
69
+
70
+ /* ---------- Page scaffolding ---------- */
71
+ .page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:36px 0 24px}
72
+ .kicker{color:var(--accent);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.1em}
73
+ .page-title{margin-top:6px;font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.025em}
74
+ .page-sub{margin-top:4px;color:var(--ink-3)}
75
+ .page-foot{margin-top:20px;color:var(--ink-4);font-size:var(--fs-xs);text-align:center}
76
+ .section{margin-top:28px;min-width:0}
77
+ .section-title{display:flex;align-items:center;gap:10px;margin-bottom:12px}
78
+ .section-title h2{display:flex;align-items:center;gap:8px;font-size:var(--fs-lg);font-weight:600}
79
+ .section-actions{margin-left:auto}
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:14px}
84
+ .metric-strip .metric{padding:14px 16px;border-radius:var(--r-lg)}
85
+ .metric-strip .metric-value{font-size:var(--fs-2xl)}
86
+ .overview-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:14px;align-items:start}
87
+ .overview>.card{margin-bottom:14px}
88
+ .row-list{display:grid;gap:2px;margin:-4px -8px}
89
+ .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)}
90
+ .list-row:hover:not(:disabled){background:var(--surface-3)}
91
+ .list-row:disabled{opacity:.45;cursor:default}
92
+ .list-row[aria-pressed="true"]{background:var(--accent-soft)}
93
+ .list-row-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
94
+ .list-row-count{font-weight:600;font-variant-numeric:tabular-nums}
95
+ .list-row-go{display:inline-flex;align-items:center;gap:2px;color:var(--accent);font-size:var(--fs-xs);font-weight:500}
96
+ .list-row-wrap{flex-wrap:wrap}
97
+ .list-row-wrap .chip-row{flex-basis:100%}
98
+
99
+ /* ---------- Task page ---------- */
100
+ .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)}
101
+ .task-bar{display:flex;align-items:center;gap:6px;height:var(--header-h)}
102
+ .back-btn{display:none}
103
+ .crumbs{display:flex;align-items:center;gap:6px;min-width:0;font-size:var(--fs-sm)}
104
+ .crumb{padding:3px 6px;border:0;border-radius:var(--r-xs);background:transparent;color:var(--ink-3)}
105
+ .crumb:hover{color:var(--ink);background:var(--surface-3)}
106
+ .crumb-sep{color:var(--ink-4)}
107
+ .crumb-current{color:var(--ink-2);font-size:var(--fs-xs)}
108
+ .dock-toggle{height:30px}
109
+ .task-hero{padding:14px 0 18px}
110
+ .task-title{font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.025em;line-height:1.25;overflow-wrap:anywhere}
111
+ .task-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;color:var(--ink-3);font-size:var(--fs-xs)}
112
+ .task-meta:empty{display:none}
113
+ .meta-item{display:inline-flex;align-items:center;gap:5px}
114
+ .meta-item .when{font-size:inherit}
115
+ .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)}
116
+ .tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
117
+ .tabs::-webkit-scrollbar{display:none}
118
+ .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}
119
+ .tab:hover{color:var(--ink)}
120
+ .tab[aria-selected="true"]{color:var(--ink)}
121
+ .tab[aria-selected="true"]::after{content:"";position:absolute;left:8px;right:8px;bottom:-1px;height:2px;border-radius:2px;background:var(--accent)}
122
+ .tab .icon{color:var(--ink-4)}
123
+ .tab[aria-selected="true"] .icon{color:var(--accent)}
124
+ .tab:focus-visible{box-shadow:inset var(--focus)}
125
+ .tab-panel{padding-top:20px;min-width:0}
126
+ .tab-panel>.card{margin-bottom:14px}
127
+ .tab-panel>.section:first-child{margin-top:4px}
128
+
129
+ /* Now card */
130
+ .now-card{border-color:var(--line-2);background:linear-gradient(180deg,var(--surface-2),var(--surface))}
131
+ .now-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
132
+ .now-owner{color:var(--ink-2);font-size:var(--fs-sm);font-weight:500}
133
+ .now-summary{margin-top:10px;font-size:var(--fs-lg);line-height:1.45;color:var(--ink)}
134
+ .now-reason{margin-top:4px;color:var(--ink-3);font-size:var(--fs-sm)}
135
+ .now-note{margin-top:8px;color:var(--ink-3);font-size:var(--fs-sm)}
136
+ .signal-list{list-style:none;display:grid;gap:6px;margin:12px 0 0;padding:0}
137
+ .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)}
138
+ .signal-row>.icon{align-self:center;color:var(--tone)}
139
+ .signal-kind{color:var(--tone);font-weight:600}
140
+ .next-line{display:flex;flex-wrap:wrap;align-items:center;gap:4px;color:var(--ink-3);font-size:var(--fs-xs)}
141
+ .next-line:empty{display:none}
142
+ .next-line .icon{color:var(--accent)}
143
+ .next-line strong{color:var(--ink)}
144
+
145
+ /* Needs you / input requests */
146
+ .needs-card{border-color:var(--warn);box-shadow:0 0 0 3px var(--warn-soft)}
147
+ .needs-card .card-title .icon{color:var(--warn)}
148
+ .input-card{display:grid;gap:10px;padding:14px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface-2)}
149
+ .input-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:var(--ink-3);font-size:var(--fs-xs)}
150
+ .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)}
151
+ .input-timeout{display:inline-flex;align-items:center;gap:4px}
152
+ .input-head .when{margin-left:auto}
153
+ .input-question{font-size:var(--fs-lg);font-weight:500;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
154
+ .input-facts{color:var(--ink-3);font-size:var(--fs-xs);overflow-wrap:anywhere}
155
+ .input-choices{display:flex;flex-wrap:wrap;gap:8px}
156
+ .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}
157
+ .choice:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft)}
158
+ .choice.is-recommended{border-color:var(--accent-line)}
159
+ .choice:disabled{opacity:.5}
160
+ .input-form{display:flex;gap:8px}
161
+ .input-form input{flex:1}
162
+
163
+ /* Decisions, sessions, planning */
164
+ .decision{display:grid;gap:4px;padding-top:10px;border-top:1px solid var(--line)}
165
+ .decision:first-child{padding-top:0;border-top:0}
166
+ .decision-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
167
+ .decision-head strong{flex:1;min-width:0;font-weight:600}
168
+ .session-list{list-style:none;display:grid;gap:8px;margin:0;padding:0}
169
+ .session-row{display:grid;gap:3px;padding:9px 11px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line)}
170
+ .session-row-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
171
+ .session-row p{color:var(--ink-2)}
172
+ .planning-card .kv{font-size:var(--fs-xs)}
173
+
174
+ /* Work items */
175
+ .work-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1);min-width:0}
176
+ .work-head{display:flex;align-items:center;gap:10px;padding:13px 16px;list-style:none}
177
+ summary.work-head{cursor:pointer}
178
+ summary.work-head::-webkit-details-marker{display:none}
179
+ .work-title{flex:1;min-width:0;font-weight:600;font-size:var(--fs-md);overflow-wrap:anywhere}
180
+ .work-body{display:grid;gap:12px;padding:0 16px 16px 34px}
181
+ .work-card.is-settled .work-title{color:var(--ink-2);font-weight:500}
182
+ .meta-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;color:var(--ink-3);font-size:var(--fs-xs)}
183
+ .meta-strong{display:inline-flex;align-items:center;gap:4px;color:var(--ink-2);font-weight:500}
184
+ .meta-label{color:var(--ink-4)}
185
+ .candidates{margin:0;padding:0;list-style:none;display:grid;gap:4px;font-size:var(--fs-xs)}
186
+ .candidates li{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
187
+ .candidate-seq{font-family:var(--font-mono);color:var(--accent)}
188
+
189
+ /* Records, runs, roles */
190
+ .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)}
191
+ .record.is-compact{padding:9px 12px;background:var(--surface-2)}
192
+ .record-head,.run-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;font-size:var(--fs-sm)}
193
+ .record-store{color:var(--ink-3);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
194
+ .record-actions{display:flex;gap:8px}
195
+ .run-card[data-status="failed"]{border-color:color-mix(in srgb,var(--bad) 35%,var(--line))}
196
+ .run-role{font-weight:600}
197
+ .role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
198
+ .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)}
199
+ .role-head{display:flex;align-items:center;gap:10px}
200
+ .role-title{display:grid;flex:1;min-width:0;line-height:1.3}
201
+ .role-title .faint{font-size:var(--fs-xs)}
202
+ .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)}
203
+ .role-card .kv{font-size:var(--fs-xs)}
204
+ .role-actions{display:flex;justify-content:flex-end;margin:-4px -6px -6px}
205
+
206
+ /* History timeline */
207
+ .timeline{list-style:none;margin:0;padding:0;position:relative;display:grid;gap:0}
208
+ .timeline::before{content:"";position:absolute;left:13px;top:6px;bottom:6px;width:1px;background:var(--line-2)}
209
+ .timeline-item{position:relative;display:grid;grid-template-columns:28px minmax(0,1fr);gap:12px;padding:0 0 18px}
210
+ .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)}
211
+ .kind-decision .timeline-mark{color:var(--ok);border-color:var(--ok-soft);background:var(--ok-soft)}
212
+ .kind-milestone .timeline-mark{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft)}
213
+ .timeline-body{display:grid;gap:6px;min-width:0;padding-top:3px}
214
+ .timeline-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:var(--fs-sm)}
215
+ .timeline-empty{list-style:none}
216
+ .timeline .show-more{margin-left:40px}
217
+
218
+ /* Evidence */
219
+ .file-list{display:grid;gap:2px}
220
+ .file-list:empty{display:none}
221
+ .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)}
222
+ .file-row:hover{background:var(--surface-3);color:var(--ink)}
223
+ .file-row[aria-current="true"]{background:var(--accent-soft);color:var(--ink)}
224
+ .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)}
225
+ .file-viewer{display:grid;gap:8px}
226
+ .file-viewer:empty{display:none}
227
+ .viewer-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
228
+ .viewer-ref code{white-space:normal;overflow-wrap:anywhere}
229
+ .artifact-text{max-height:480px;color:var(--ink)}
230
+
231
+ /* ---------- Dock ---------- */
232
+ .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)}
233
+ .dock-sub-title{font-weight:600;font-size:var(--fs-sm)}
234
+ .dock-sub-note{color:var(--ink-4);font-size:var(--fs-2xs)}
235
+ .feed{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:14px;padding:16px;scrollbar-gutter:stable}
236
+ .feed:focus-visible{box-shadow:inset var(--focus)}
237
+ .feed>.empty{margin:auto 0}
238
+ .feed-note{color:var(--ink-4);font-size:var(--fs-2xs);text-align:center}
239
+ .feed-day{display:flex;align-items:center;gap:10px;color:var(--ink-4);font-size:var(--fs-2xs);font-weight:500}
240
+ .feed-day::before,.feed-day::after{content:"";flex:1;height:1px;background:var(--line)}
241
+ .msg{display:flex;gap:10px;max-width:100%;min-width:0}
242
+ .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}
243
+ .msg-main{display:grid;gap:5px;min-width:0;flex:1}
244
+ .msg-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:var(--fs-xs)}
245
+ .msg-head strong{font-weight:600}
246
+ .msg-head time{margin-left:auto;color:var(--ink-4);font-size:var(--fs-2xs)}
247
+ .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}
248
+ .msg.from-user{flex-direction:row-reverse}
249
+ .msg.from-user .msg-head{flex-direction:row-reverse}
250
+ .msg.from-user .msg-head time{margin-left:0;margin-right:auto}
251
+ .msg.from-user .msg-avatar{background:var(--accent);color:var(--accent-ink)}
252
+ .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)}
253
+ .msg.from-system .msg-bubble{background:transparent;border-style:dashed}
254
+ .composer-wrap{flex:none;padding:10px 12px 12px;border-top:1px solid var(--line);background:var(--surface)}
255
+ .composer{display:grid;gap:6px}
256
+ .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)}
257
+ .composer-box:focus-within{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
258
+ .composer-input{display:block;min-height:64px;max-height:240px;padding:10px 12px 4px;border:0;background:transparent;resize:none}
259
+ .composer-input:focus,.composer-input:hover{border:0;box-shadow:none;background:transparent}
260
+ .composer-bar{display:flex;align-items:center;gap:8px;padding:6px 6px 6px 8px}
261
+ .composer-send{height:30px}
262
+ .facets:empty{display:none}
263
+ .facets{display:grid;gap:6px;padding:8px 10px;border-radius:var(--r-sm);background:var(--surface-2)}
264
+ .next-step{display:flex;gap:6px;align-items:flex-start;font-size:var(--fs-xs);color:var(--ink-2)}
265
+ .next-step .icon{margin-top:2px;color:var(--accent)}
266
+
267
+ /* Live session (always dark: it renders a native terminal) */
268
+ .dock-session{color:#e6e6e8}
269
+ .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}
270
+ .target-chip:hover{color:#fff;border-color:rgba(255,255,255,.3)}
271
+ .target-chip[aria-pressed="true"]{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.3);color:#fff}
272
+ .target-chip .dot{width:7px;height:7px;box-shadow:none}
273
+ .dock-session .faint{color:rgba(255,255,255,.4)}
274
+ .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}
275
+ .conn i{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.3)}
276
+ .conn[data-state="connecting"] i{background:var(--warn);animation:blink 1s infinite}
277
+ .conn[data-state="writable"] i{background:#4fd18b;box-shadow:0 0 0 3px rgba(79,209,139,.2)}
278
+ .conn[data-state="readonly"] i{background:#6cb6ff}
279
+ .conn[data-state="error"] i{background:#ff6b7a}
280
+ .conn[data-state="error"]{color:#ff9aa5}
281
+ .terminal-empty{color:rgba(255,255,255,.55)}
282
+ .terminal-empty .icon{color:rgba(255,255,255,.35)}
283
+ .terminal-empty-title{color:#fff;font-weight:600}
284
+ .terminal-empty-text{max-width:300px;font-size:var(--fs-xs);line-height:1.5}
285
+ .session-foot{color:rgba(255,255,255,.45);font-size:var(--fs-2xs)}
286
+ .session-foot code{color:rgba(255,255,255,.8);user-select:all}
287
+ .terminal-host .xterm{height:100%}
288
+ .terminal-host .xterm-viewport{background:transparent!important}
289
+ `;
@@ -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") {
@@ -27,6 +27,29 @@ system sits behind `ReleaseWorkflowPorts`
27
27
  external ports exercise recovery without real GitHub, npm, git, Controller,
28
28
  or model effects.
29
29
 
30
+ ## Yui's default release boundary
31
+
32
+ For development of Yui itself, the repository's `AGENTS.md` owns the release policy:
33
+ do not release a version by default. Development, tests, acceptance, PR creation
34
+ and merge do not include changing version numbers, creating release tags or
35
+ GitHub Releases, or publishing to npm. Each external effect still requires the
36
+ Task's actual authorization. A workflow containing only PR, CI and merge steps
37
+ is a valid delivery plan; its `ReleaseWorkflow` name does not authorize any
38
+ package release, global CLI update or Controller replacement.
39
+
40
+ When the user explicitly asks to release a new version without naming its
41
+ level, select only minor or patch according to the actual changes and project
42
+ version rules. A major release requires explicit user authorization for major
43
+ or a specific major version. If breaking changes cannot honestly be represented
44
+ by minor/patch, explain the compatibility conflict and wait for the necessary
45
+ explicit user choice: neither silently publish major nor mislabel incompatible
46
+ behavior as compatible. This does not require adding historical compatibility
47
+ mechanisms. Package release versions are distinct from storage migration
48
+ versions; the storage rules below do not authorize a package release.
49
+
50
+ The operations and examples below describe how to execute already-authorized
51
+ effects, not a default sequence to run after completing or merging a Task.
52
+
30
53
  ## Stable 1.0 baseline and release evidence
31
54
 
32
55
  Package 1.0.0 defines the storage **1.0** contract directly. The runtime and
@@ -20,6 +20,22 @@ Agent 选择一个预先声明的计划,设施从持久状态驱动该计划
20
20
  (`src/release/releaseWorkflowPorts.ts`)之后。可用临时 SQLite 和确定性的外部端口测试
21
21
  恢复逻辑,无需真实 GitHub、npm、git、Controller 或模型效果。
22
22
 
23
+ ## Yui 的默认发版边界
24
+
25
+ 开发 Yui 本身时,发版规则以仓库中的 `AGENTS.md` 为准:默认不发布新版本。
26
+ 开发、测试、验收、创建 PR 和合并不包含修改版本号、创建发布 tag 或 GitHub Release、
27
+ 发布 npm;每项外部效果仍需 Task 的实际授权。仅包含 PR、CI 和合并步骤也是合法的交付
28
+ 计划,`ReleaseWorkflow` 这个名称不授予包发布、全局 CLI 更新或 Controller 替换权限。
29
+
30
+ 用户明确要求「发布新版本」但没有指定级别时,根据实际变更和项目版本规则,仅选择
31
+ minor(中版本)或 patch(小版本)。major(大版本)必须得到用户对大版本或具体 major
32
+ 版本号的明确授权。如果破坏性变更无法诚实地用 minor/patch 表达,说明兼容性冲突,
33
+ 等待必要的明确用户选择:既不能静默发布 major,也不能把不兼容行为冒称为兼容。
34
+ 这不要求为了回避选择而新增历史兼容机制。包发布版本与存储迁移版本是不同契约,
35
+ 下文的存储规则不授予包发布权限。
36
+
37
+ 下文操作及示例说明如何执行已经获授权的效果,不是 Task 完成或合并后默认运行的步骤。
38
+
23
39
  ## 稳定的 1.0 基线与发布证据
24
40
 
25
41
  1.0.0 软件包直接定义存储 **1.0** 契约。运行包和当前源码不携带任何历史
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zq-silk/yui",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Local control plane for long-running native agent CLI sessions backed by tmux.",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -169,6 +169,32 @@ For unrelated discovery, stop once the necessary evidence is found. Task
169
169
  event deltas retain their fixed upper bound and are history, not replacement
170
170
  current state. No read acknowledges implementation or consumes a queue.
171
171
 
172
+ ## Discover operations for the current caller
173
+
174
+ Use `yui help` or `yui --json help [command ...]` through the authorized CLI
175
+ entry for the current caller's command view. Help, examples and shell completion
176
+ share the catalog projection; public terminals and unmanaged Agents share one
177
+ public view. This offline view is only guidance, not an authenticated permission
178
+ or a way to switch Roles. An incomplete or stale managed identity must not be
179
+ cleared to obtain public execution authority.
180
+
181
+ When capability discovery appears in that view, use `capability search` for
182
+ templates and `capability describe <name> --task
183
+ <task-id> --input '<json>'` for supported exact authorization assessments.
184
+ No `access` field means no exact authorization conclusion was made: supply the
185
+ required parameters and follow the domain's existing execution checks. Hidden
186
+ operations are omitted; `requestable` includes the exact missing Grant bounds
187
+ and existing request route; `authorized` remains subject to execution-time
188
+ revalidation. Provider outages do not change this authorization observation.
189
+
190
+ Discovery never sends requests, consumes Grants, starts plugins or approves
191
+ effects. If the Task actually needs a requestable operation, use the existing
192
+ Assignment Message to Leader, Leader InputRequest, or Operator path. Preserve
193
+ the exact action, resource/plugin, digest, environment and phase. A response is
194
+ not a Grant. Existing source-authorized Leader Grant operations and Operator
195
+ Grant authority remain unchanged; never expand an authorization source or
196
+ solicit real-resource validation merely because an operation is requestable.
197
+
172
198
  ## Preserve intent and authority
173
199
 
174
200
  An analysis, diagnosis, or review request is read-only unless the user also