dsh-kingdom 1.0.0 → 2.0.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 (144) hide show
  1. package/ASSETS_NOTICE.md +18 -2
  2. package/LICENSE +661 -661
  3. package/NOTICE +9 -9
  4. package/README.md +26 -20
  5. package/THIRD_PARTY_NOTICES.md +84 -0
  6. package/cordis.patch.yml +6 -6
  7. package/docs/V2.0-RELEASE-NOTES.md +30 -0
  8. package/docs/V2.0-USER-GUIDE.md +74 -0
  9. package/lib/adapter/dsh-backend.js +10 -6
  10. package/lib/adapter/dsh-backend.js.map +1 -1
  11. package/lib/adapter/dsh-cost.js +68 -0
  12. package/lib/adapter/dsh-cost.js.map +1 -0
  13. package/lib/adapter/dsh-session-events.js +86 -0
  14. package/lib/adapter/dsh-session-events.js.map +1 -0
  15. package/lib/adapter/dsh-usage.js +159 -0
  16. package/lib/adapter/dsh-usage.js.map +1 -0
  17. package/lib/capability/admin.js +4 -4
  18. package/lib/capability/admin.js.map +1 -1
  19. package/lib/capability/dsh-enforcement.js +19 -4
  20. package/lib/capability/dsh-enforcement.js.map +1 -1
  21. package/lib/capability/service.js +11 -0
  22. package/lib/capability/service.js.map +1 -1
  23. package/lib/capability/tool-disclosure.js +144 -0
  24. package/lib/capability/tool-disclosure.js.map +1 -0
  25. package/lib/core/binding.js +20 -18
  26. package/lib/core/binding.js.map +1 -1
  27. package/lib/core/budget.js +304 -0
  28. package/lib/core/budget.js.map +1 -0
  29. package/lib/core/collaboration.js +422 -0
  30. package/lib/core/collaboration.js.map +1 -0
  31. package/lib/core/cost.js +212 -0
  32. package/lib/core/cost.js.map +1 -0
  33. package/lib/core/db.js +124 -0
  34. package/lib/core/db.js.map +1 -1
  35. package/lib/core/governed-claim.js +46 -0
  36. package/lib/core/governed-claim.js.map +1 -0
  37. package/lib/core/governed.js +112 -7
  38. package/lib/core/governed.js.map +1 -1
  39. package/lib/core/kingdom.js +58 -56
  40. package/lib/core/kingdom.js.map +1 -1
  41. package/lib/core/owner-control.js +48 -7
  42. package/lib/core/owner-control.js.map +1 -1
  43. package/lib/core/owner-window.js +822 -0
  44. package/lib/core/owner-window.js.map +1 -0
  45. package/lib/core/task-service.js +103 -72
  46. package/lib/core/task-service.js.map +1 -1
  47. package/lib/core/territory.js +33 -11
  48. package/lib/core/territory.js.map +1 -1
  49. package/lib/core/usage.js +39 -0
  50. package/lib/core/usage.js.map +1 -0
  51. package/lib/core/workspace-admission.js +225 -0
  52. package/lib/core/workspace-admission.js.map +1 -0
  53. package/lib/dispatch/evidence.js +5 -2
  54. package/lib/dispatch/evidence.js.map +1 -1
  55. package/lib/dispatch/service.js +136 -5
  56. package/lib/dispatch/service.js.map +1 -1
  57. package/lib/gui/assets/characters/chancellor-idle.svg +67 -221
  58. package/lib/gui/assets/characters/chancellor-sleeping.svg +67 -221
  59. package/lib/gui/assets/characters/chancellor-thinking.svg +67 -221
  60. package/lib/gui/assets/characters/chancellor-working.svg +67 -221
  61. package/lib/gui/assets/characters/knight-redraw-r1-idle.svg +67 -111
  62. package/lib/gui/assets/characters/knight-redraw-r1-sleeping.svg +67 -115
  63. package/lib/gui/assets/characters/knight-redraw-r1-thinking.svg +67 -173
  64. package/lib/gui/assets/characters/knight-redraw-r1-working.svg +67 -248
  65. package/lib/gui/assets/characters/supervisor-idle.svg +67 -266
  66. package/lib/gui/assets/characters/supervisor-sleeping.svg +67 -266
  67. package/lib/gui/assets/characters/supervisor-thinking.svg +67 -266
  68. package/lib/gui/assets/characters/supervisor-working.svg +67 -266
  69. package/lib/gui/console-app.js +1964 -1927
  70. package/lib/gui/console-app.js.map +1 -1
  71. package/lib/gui/contract.js.map +1 -1
  72. package/lib/gui/control-contract.js +2 -0
  73. package/lib/gui/control-contract.js.map +1 -1
  74. package/lib/gui/local-control.js +1 -0
  75. package/lib/gui/local-control.js.map +1 -1
  76. package/lib/gui/owner-control.js +310 -0
  77. package/lib/gui/owner-control.js.map +1 -0
  78. package/lib/gui/owner-ui.js +191 -0
  79. package/lib/gui/owner-ui.js.map +1 -0
  80. package/lib/gui/server.js +4 -0
  81. package/lib/gui/server.js.map +1 -1
  82. package/lib/gui/snapshot.js +150 -15
  83. package/lib/gui/snapshot.js.map +1 -1
  84. package/lib/gui/visual-assets.js +56 -0
  85. package/lib/gui/visual-assets.js.map +1 -0
  86. package/lib/gui/visual-system.js +272 -0
  87. package/lib/gui/visual-system.js.map +1 -0
  88. package/lib/gui/workbench-ui.js +358 -0
  89. package/lib/gui/workbench-ui.js.map +1 -0
  90. package/lib/gui/workbench.js +163 -0
  91. package/lib/gui/workbench.js.map +1 -0
  92. package/lib/index.js +269 -39
  93. package/lib/index.js.map +1 -1
  94. package/lib/runner-context-broker.js +8 -2
  95. package/lib/runner-context-broker.js.map +1 -1
  96. package/lib/runtime-cost-observer.js +145 -0
  97. package/lib/runtime-cost-observer.js.map +1 -0
  98. package/lib/types/adapter/contract.d.ts +2 -0
  99. package/lib/types/adapter/dsh-backend.d.ts +2 -6
  100. package/lib/types/adapter/dsh-cost.d.ts +13 -0
  101. package/lib/types/adapter/dsh-session-events.d.ts +16 -0
  102. package/lib/types/adapter/dsh-usage.d.ts +36 -0
  103. package/lib/types/capability/dsh-enforcement.d.ts +8 -6
  104. package/lib/types/capability/service.d.ts +1 -0
  105. package/lib/types/capability/tool-disclosure.d.ts +36 -0
  106. package/lib/types/core/binding.d.ts +4 -3
  107. package/lib/types/core/budget.d.ts +81 -0
  108. package/lib/types/core/collaboration.d.ts +110 -0
  109. package/lib/types/core/cost.d.ts +99 -0
  110. package/lib/types/core/db.d.ts +21 -0
  111. package/lib/types/core/governed-claim.d.ts +7 -0
  112. package/lib/types/core/governed.d.ts +19 -1
  113. package/lib/types/core/kingdom.d.ts +3 -0
  114. package/lib/types/core/owner-control.d.ts +19 -3
  115. package/lib/types/core/owner-window.d.ts +226 -0
  116. package/lib/types/core/task-service.d.ts +36 -0
  117. package/lib/types/core/territory.d.ts +7 -0
  118. package/lib/types/core/usage.d.ts +26 -0
  119. package/lib/types/core/workspace-admission.d.ts +43 -0
  120. package/lib/types/dispatch/evidence.d.ts +2 -5
  121. package/lib/types/dispatch/service.d.ts +18 -0
  122. package/lib/types/gui/console-app.d.ts +2 -1
  123. package/lib/types/gui/contract.d.ts +176 -2
  124. package/lib/types/gui/control-contract.d.ts +1 -1
  125. package/lib/types/gui/owner-control.d.ts +45 -0
  126. package/lib/types/gui/owner-ui.d.ts +2 -0
  127. package/lib/types/gui/server.d.ts +3 -0
  128. package/lib/types/gui/snapshot.d.ts +3 -10
  129. package/lib/types/gui/visual-assets.d.ts +27 -0
  130. package/lib/types/gui/visual-system.d.ts +2 -0
  131. package/lib/types/gui/workbench-ui.d.ts +5 -0
  132. package/lib/types/gui/workbench.d.ts +33 -0
  133. package/lib/types/index.d.ts +36 -4
  134. package/lib/types/runtime-cost-observer.d.ts +22 -0
  135. package/lib/types/worker/collaboration.d.ts +35 -0
  136. package/lib/types/worker/executor.d.ts +3 -0
  137. package/lib/types/worker/governed-executor.d.ts +2 -0
  138. package/lib/worker/collaboration.js +172 -0
  139. package/lib/worker/collaboration.js.map +1 -0
  140. package/lib/worker/executor.js +5 -1
  141. package/lib/worker/executor.js.map +1 -1
  142. package/lib/worker/governed-executor.js +161 -93
  143. package/lib/worker/governed-executor.js.map +1 -1
  144. package/package.json +19 -8
@@ -0,0 +1,191 @@
1
+ /** Self-contained management surface; all business values are rendered as text. */
2
+ export function renderOwnerApp(nonce) {
3
+ if (!/^[A-Za-z0-9_-]{20,100}$/u.test(nonce))
4
+ throw new Error('invalid owner page nonce');
5
+ return OWNER_APP_HTML.replaceAll('__OWNER_NONCE__', nonce);
6
+ }
7
+ const OWNER_APP_HTML = String.raw `<!doctype html>
8
+ <html lang="zh-CN" data-theme="forest"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>王国管理 · dsh-Kingdom</title>
9
+ <style nonce="__OWNER_NONCE__">
10
+ :root{color-scheme:dark;--bg:#132920;--panel:#1d372b;--soft:#243f31;--ink:#f4ecda;--muted:#bec5b4;--line:#526346;--accent:#e4c483;--button:#f0d49a;--button-ink:#213123;font-family:system-ui,"Microsoft YaHei",sans-serif}
11
+ :root[data-theme=parchment]{color-scheme:light;--bg:#efe4cb;--panel:#faf3e3;--soft:#eee1c5;--ink:#392d21;--muted:#6e624d;--line:#b7a47d;--accent:#745326;--button:#674c28;--button-ink:#fff7e6}
12
+ :root[data-theme=night]{--bg:#101f35;--panel:#1b2c45;--soft:#223750;--ink:#edf1fa;--muted:#bac8dd;--line:#526a8a;--accent:#bbd2ee;--button:#c7dcef;--button-ink:#142239}
13
+ :root[data-theme=wine]{--bg:#301e29;--panel:#402a36;--soft:#4f3342;--ink:#f9e8e9;--muted:#d6b9c6;--line:#866573;--accent:#efc4b6;--button:#f0cbb6;--button-ink:#3b2430}
14
+ *{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);line-height:1.55}main{width:min(100% - 40px,1020px);margin:auto;padding:26px 0 64px}header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:28px}a{color:var(--accent);text-underline-offset:4px}h1{font-size:clamp(1.7rem,4vw,2.5rem);font-weight:650;letter-spacing:.02em;margin:0 0 8px}h2{font-size:1.12rem;margin:0 0 12px}p{margin:8px 0}.eyebrow{letter-spacing:.15em;font-size:.76rem;color:var(--accent)}.muted,small{color:var(--muted)}.panel{padding:24px;border:1px solid var(--line);background:var(--panel);border-radius:14px;margin:18px 0;overflow-wrap:anywhere}.bar{display:flex;gap:16px;justify-content:space-between;align-items:start}.stack{display:grid;gap:15px}.fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.field{display:grid;gap:7px;min-width:0}.field.wide{grid-column:1/-1}label{font-weight:600}input,select,textarea,button{font:inherit}input,select,textarea{width:100%;min-width:0;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:7px;padding:10px 12px}textarea{min-height:90px;resize:vertical}button{border:1px solid var(--line);padding:10px 18px;border-radius:8px;cursor:pointer;background:var(--soft);color:var(--ink)}button.primary{background:var(--button);color:var(--button-ink);border-color:var(--button);font-weight:700}button:disabled{opacity:.5;cursor:default}:focus-visible{outline:3px solid var(--accent);outline-offset:3px}fieldset{border:0;margin:0;padding:0;min-width:0}.actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:20px}.status{padding:12px 0;min-height:30px;white-space:pre-wrap}.tag{display:inline-block;border:1px solid var(--line);border-radius:20px;padding:3px 10px;margin:4px 7px 0 0;font-size:.84rem}.changes{margin:0}.change{border-top:1px solid var(--line);padding:12px 0}.change dt{font-weight:700}.change dd{margin:6px 0 0;white-space:pre-wrap}.before{color:var(--muted)}.after{color:var(--accent)}code{display:block;white-space:pre-wrap;overflow-wrap:anywhere;background:var(--bg);padding:14px;border-radius:8px;font-size:.85rem}.ceiling-row{display:grid;grid-template-columns:minmax(0,1fr) 100px auto;gap:10px;align-items:end}.receipt-meta{font-size:.8rem;color:var(--muted);overflow-wrap:anywhere}[hidden]{display:none!important}#theme{width:auto}.title-note{max-width:70ch}.scope-summary{white-space:pre-line}.danger{border-color:var(--accent)}
15
+ @media(max-width:600px){main{width:calc(100% - 24px);padding-top:16px}header{align-items:start}.panel{padding:17px}.fields{grid-template-columns:minmax(0,1fr)}.bar{display:grid;gap:12px}.bar button{justify-self:start}.ceiling-row{grid-template-columns:minmax(0,1fr) 92px}.ceiling-row button{grid-column:1/-1;justify-self:start}.actions button{flex:1 1 auto}h1{font-size:1.85rem}}
16
+ @media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
17
+ </style></head><body><main>
18
+ <header><a href="/console#settings">← 返回工作台设置</a><label class="field" for="theme"><span class="muted">外观</span><select id="theme"><option value="forest">森林墨绿</option><option value="parchment">羊皮纸</option><option value="night">夜蓝星图</option><option value="wine">酒红议会</option></select></label></header>
19
+ <div class="eyebrow">KINGDOM / OWNER</div><h1>王国管理</h1><p class="title-note muted">在已授权范围内管理领地、角色与执行配置。每次变更先查看影响,再确认应用。</p>
20
+ <p id="status" class="status" role="status" aria-live="polite">正在检查管理窗口…</p>
21
+ <section id="activation" class="panel" hidden><h2>从本地打开管理窗口</h2><p>当前没有可用的管理授权。请由人类在 DSH 的直接命令入口打开一次管理窗口,再使用返回的短期链接。</p><p class="muted">普通工作台会话不会自动获得管理权;每个窗口都需要明确操作范围,并在十分钟内到期。</p><details><summary>首次初始化的本地命令</summary><p>只用于尚未建立王国的空库;初始化后需要按实际范围重新激活。</p><code>/kingdom owner.gui {"kingdomId":null,"actions":["init"],"scope":{"kingdomWide":false,"territoryIds":[],"bindingIds":[],"roleTypes":[],"targetSessionIds":[],"workspaceRoots":[]},"ttlMs":600000}</code></details></section>
22
+ <section id="window" class="panel" hidden><div class="bar"><div><h2>本次管理范围</h2><p id="scope" class="scope-summary"></p><p id="expiry" class="muted"></p></div><button id="revoke" class="danger" type="button">立即撤销管理窗口</button></div></section>
23
+ <section id="editor" class="panel" hidden><h2>准备变更</h2><form id="operation-form"><fieldset id="edit-fields"><div class="field"><label for="action">要进行的操作</label><select id="action" required></select></div><p id="action-note" class="muted"></p><div id="fields" class="fields"></div><div class="actions"><button id="prepare" class="primary" type="submit">查看变更预览</button></div></fieldset></form></section>
24
+ <section id="preview-panel" class="panel" hidden><h2>确认本次变更</h2><p id="preview-summary"></p><dl id="changes" class="changes"></dl><p id="preview-expiry" class="muted"></p><div class="actions"><button id="commit" class="primary" type="button">确认应用此变更</button><button id="edit-again" type="button">返回修改</button></div></section>
25
+ <section id="result-panel" class="panel" hidden><h2 id="result-title">操作结果</h2><p id="result-message"></p><p id="result-meta" class="receipt-meta"></p><div class="actions"><button id="lookup" type="button" hidden>查询本次操作结果</button><button id="next" type="button" hidden>准备下一项变更</button></div></section>
26
+ </main><script nonce="__OWNER_NONCE__">
27
+ (() => {
28
+ 'use strict';
29
+ const el = id => document.getElementById(id);
30
+ const state = { control: null, decisionId: null, preview: null, busy: false, uncertain: false };
31
+ const pendingKey = 'dsh-kingdom.owner.pending.v1';
32
+ let pendingInvalid = false;
33
+ try { const raw=sessionStorage.getItem(pendingKey); if(raw) { const value=JSON.parse(raw);
34
+ if(!value || !['decisionId','prepareId','operationId'].every(key=>typeof value[key]==='string' && value[key].length>0 && value[key].length<=768)) throw new Error('invalid pending reference');
35
+ state.decisionId=value.decisionId; state.preview={prepareId:value.prepareId,operationId:value.operationId}; state.uncertain=true;
36
+ } } catch { pendingInvalid=true; state.uncertain=true; }
37
+ function rememberPending() { const raw=JSON.stringify({decisionId:state.decisionId,prepareId:state.preview.prepareId,operationId:state.preview.operationId});
38
+ try { sessionStorage.setItem(pendingKey,raw); if(sessionStorage.getItem(pendingKey)!==raw) throw new Error(); }
39
+ catch { const error=new Error('浏览器无法保留操作编号,本次尚未发送。请允许此页面使用会话存储后重新预览。'); error.confirmedRejection=true; throw error; }
40
+ }
41
+ function clearPending() { try { sessionStorage.removeItem(pendingKey); } catch {} }
42
+ const names = { init:'初始化王国', 'territory.create':'创建领地', 'territory.update':'修改领地名称与说明', 'territory.supervisor':'任命领地主管', 'role.bind':'登记新角色', 'role.session':'调整角色会话', ceiling:'调整王国权限上限', 'execution-profile':'设置执行模型', 'budget.policy':'调整软预算政策', 'plan.adopt':'采纳一份协作计划' };
43
+ const roleNames = { CHANCELLOR:'宰相', SUPERVISOR:'主管', WORKER:'执行者' };
44
+ const notes = { init:'初始化只创建王国与人类所有者,完成后本次授权即结束。', 'territory.create':'选择已存在且在授权根目录内的工作目录;这里不会创建目录。', 'territory.update':'保留工作目录和已有会话关系。', 'territory.supervisor':'仍有未决执行或工作占用时,变更将被拒绝。', 'role.bind':'主管与宰相需要真实运行会话;执行者会话由正常执行流程建立。', 'role.session':'仅调整主管或宰相;不会迁移执行者的持久会话。', ceiling:'此映射将替换王国上限。请完整列出本次需要配置的能力;它不会改变已在途的运行限制。', 'execution-profile':'保存的是请求配置;只有后续真实运行才能确认实际使用的模型。', 'budget.policy':'软预算按 Token 管理新增执行,不是费用硬上限。每次启动的预留是估计;关闭不重置统计起点,调整不会终止在途工作或释放恢复中的占用。' };
45
+ notes['plan.adopt']='一次采纳完整计划及其固定版本。采纳只创建子任务;主管仍须合法分配、启动和审查,主执行者仍须实际整合。不会自动授权、派发或接受产物。';
46
+ const text = (id, value) => { el(id).textContent = String(value ?? ''); };
47
+ const status = value => text('status', value);
48
+ const show = (id, visible) => { el(id).hidden = !visible; };
49
+ const active = () => state.control?.decision?.state === 'ACTIVE' && Date.parse(state.control.decision.expiresAt) > Date.now();
50
+ function applyTheme(value) { const theme = ['forest','parchment','night','wine'].includes(value) ? value : 'forest'; document.documentElement.dataset.theme = theme; el('theme').value = theme; try { localStorage.setItem('dsh-kingdom.console.theme', theme); } catch {} }
51
+ let stored = 'forest'; try { stored = localStorage.getItem('dsh-kingdom.console.theme'); } catch {} applyTheme(stored);
52
+ el('theme').addEventListener('change', () => applyTheme(el('theme').value));
53
+ const make = (tag, value, className) => { const node = document.createElement(tag); if (value !== undefined) node.textContent = value; if (className) node.className = className; return node; };
54
+ const options = (select, values) => { select.replaceChildren(); for (const value of values) { const option = make('option', value.label); option.value = value.id; select.append(option); } };
55
+ function field(key, label, kind = 'text', choices, required = true) {
56
+ const box = make('div', undefined, 'field' + (kind === 'textarea' ? ' wide' : ''));
57
+ const input = make(kind === 'textarea' ? 'textarea' : kind === 'select' ? 'select' : 'input'); input.id = 'param-' + key; input.name = key; input.required = required;
58
+ if (input.tagName === 'INPUT') input.type = kind;
59
+ if (kind === 'select') options(input, choices || []);
60
+ if (kind === 'text' || kind === 'textarea') input.maxLength = kind === 'textarea' ? 4000 : 2000;
61
+ const title = make('label', label); title.htmlFor = input.id; box.append(title, input); el('fields').append(box); return input;
62
+ }
63
+ function allowedBindings(filter) { return (state.control.catalog?.bindings || []).filter(filter || (() => true)).map(item => ({id:item.id,label:(roleNames[item.roleType] || item.roleType) + ' · ' + item.roleName + ' · ' + item.id})); }
64
+ function ceilingRow() {
65
+ const row = make('div', undefined, 'ceiling-row');
66
+ const box = make('label', '能力名称', 'field'); const input = make('input'); input.required = true; input.maxLength = 200; input.setAttribute('aria-label', '能力名称'); box.append(input);
67
+ const selectBox = make('label', '是否允许', 'field'); const select = make('select'); select.setAttribute('aria-label', '是否允许'); options(select,[{id:'true',label:'允许'},{id:'false',label:'禁止'}]); selectBox.append(select);
68
+ const remove = make('button','移除此项'); remove.type='button'; remove.addEventListener('click',()=>row.remove()); row.append(box,selectBox,remove); return row;
69
+ }
70
+ function renderFields() {
71
+ state.preview = null; state.uncertain = false; show('preview-panel',false); show('result-panel',false); el('fields').replaceChildren();
72
+ const action = el('action').value; const catalog = state.control.catalog || {}; text('action-note', notes[action]);
73
+ const territories = (catalog.territories || []).map(item => ({id:item.id,label:item.name + ' · ' + item.id}));
74
+ const sessions = (catalog.runtimeSessions || []).map(item => ({id:item.id,label:item.label + ' · ' + item.id}));
75
+ if (action === 'init') { field('kingdom_name','王国名称'); field('owner_name','所有者显示名'); }
76
+ if (action === 'territory.create') { field('name','领地名称'); field('workspace_path','已存在的工作目录'); field('summary','领地说明','textarea',undefined,false); const roots = make('p','允许的根目录:' + (catalog.workspaceRoots || []).join(';'),'muted'); roots.classList.add('wide'); el('fields').append(roots); }
77
+ if (action === 'territory.update') { field('territory_id','领地','select',territories); field('name','新名称(不改请留空)','text',undefined,false); field('summary','新说明(不改请留空)','textarea',undefined,false); }
78
+ if (action === 'territory.supervisor') { field('territory_id','领地','select',territories); field('supervisor_binding_id','主管','select',allowedBindings(item=>item.roleType==='SUPERVISOR')); }
79
+ if (action === 'role.bind') {
80
+ const role = field('role_type','角色','select',(state.control.decision.scope.roleTypes || []).map(id=>({id,label:roleNames[id]}))); field('role_name','角色名称');
81
+ const session = field('session_id','运行会话','select',sessions); const update = () => { const needed = role.value !== 'WORKER'; session.required = needed; session.disabled = !needed; session.parentElement.hidden = !needed; }; role.addEventListener('change',update); update();
82
+ }
83
+ if (action === 'role.session') { field('binding_id','要调整的角色','select',allowedBindings(item=>['CHANCELLOR','SUPERVISOR'].includes(item.roleType))); field('session_id','新的运行会话','select',sessions); }
84
+ if (action === 'execution-profile') {
85
+ field('binding_id','要配置的角色','select',allowedBindings(item=>['CHANCELLOR','SUPERVISOR','WORKER'].includes(item.roleType)));
86
+ field('provider','模型服务商(可选,留空使用现有配置默认值)','text',undefined,false); field('model','模型名称');
87
+ }
88
+ if (action === 'ceiling') { const rows=make('div',undefined,'stack field wide'); rows.id='ceiling-rows'; rows.append(ceilingRow()); const add=make('button','添加能力'); add.type='button'; add.addEventListener('click',()=>rows.append(ceilingRow())); el('fields').append(rows,add); }
89
+ if (action === 'budget.policy') {
90
+ field('enabled','预算拦截','select',[{id:'true',label:'启用,按政策检查新增执行'},{id:'false',label:'关闭,保留统计起点与已有记录'}]);
91
+ const limit=field('limit_tokens','周期 Token 额度','number'); limit.min='1'; limit.step='1';
92
+ const reserve=field('reserve_tokens','每次新执行预留 Token(估计)','number'); reserve.min='1'; reserve.step='1';
93
+ field('unknown_policy','存在未知用量时','select',[{id:'BLOCK',label:'阻止新增执行,先核对未知用量'},{id:'WARN',label:'提示后继续,可能超过估计额度'}]);
94
+ const warning=field('warning_percent','提醒阈值(百分比)','number'); warning.min='1'; warning.max='100'; warning.step='1'; warning.value='80';
95
+ }
96
+ if (action === 'plan.adopt') {
97
+ const plans=(Array.isArray(catalog.plans)?catalog.plans:[]).filter(plan=>plan.state==='PROPOSED');
98
+ const selection=field('plan_id','本次采纳的完整计划','select',plans.map(plan=>({id:plan.planId,label:plan.parentTaskId+' · 第 '+plan.version+' 版 · '+(plan.mode==='EXPERT'?'只读专家':'独立小团队')})));
99
+ const version=field('version','固定版本','number'); version.readOnly=true;
100
+ const digest=field('digest','内容指纹(固定)','textarea'); digest.readOnly=true; digest.rows=3; digest.style.overflowWrap='anywhere'; digest.style.wordBreak='break-all';
101
+ const review=make('section',undefined,'field wide'); review.id='plan-adoption-review'; review.setAttribute('aria-live','polite'); el('fields').append(review);
102
+ const update=()=>{ review.replaceChildren(); const plan=plans.find(item=>item.planId===selection.value); version.value=plan?String(plan.version):''; digest.value=plan?plan.digest:'';
103
+ if(!plan){review.append(make('p',plans.length?'请选择一份计划,再核对完整分工。':'当前授权范围内没有可采纳计划;请先核对计划状态及本窗口范围。','muted'));return;}
104
+ const binding=id=>(catalog.bindings || []).find(item=>item.id===id)?.roleName || id;
105
+ const territory=id=>(catalog.territories || []).find(item=>item.id===id)?.name || id;
106
+ review.append(make('h3','整份计划 · '+plan.parentTaskId),make('p','拆分理由:'+plan.reason),make('p','主整合者:'+binding(plan.integratorBindingId)),make('p','整项软额度 '+plan.budgetTokens+' Tokens;每次估计预留 '+plan.reserveTokens+' Tokens。金额未知。'));
107
+ plan.items.forEach(item=>{const row=make('article',undefined,'change');row.append(make('h4',item.title),make('p','负责人:'+binding(item.workerBindingId)+' · 领地:'+territory(item.territoryId)+' · '+(item.access==='READ_ONLY'?'只读':'范围内写入')),make('p','范围:'+item.description),make('p','验收:'+item.acceptanceCriteria),make('p','前置工作:'+(item.dependsOn.length?item.dependsOn.map(key=>plan.items.find(other=>other.key===key)?.title || key).join('、'):'无')),make('p','预期产物:'+item.expectedArtifact));review.append(row);});
108
+ review.append(make('p','所有子项接受后,由指定主执行者实际整合,再由主管正常审查父任务。此采纳不代表产物验收。','muted'));
109
+ }; selection.addEventListener('change',update); update();
110
+ }
111
+ }
112
+ function payload() {
113
+ const action=el('action').value; const parameters={};
114
+ for (const field of el('fields').querySelectorAll('[name]')) if (!field.disabled && field.value.trim() !== '') parameters[field.name]=field.value.trim();
115
+ if (action==='execution-profile') { const binding_id=parameters.binding_id; if (!parameters.model) throw new Error('请填写明确的模型名称。'); const profile={...(parameters.provider?{provider:parameters.provider}:{}),model:parameters.model}; return {action,parameters:{binding_id,profile}}; }
116
+ if (action==='ceiling') { const ceiling=Object.create(null); for (const row of el('ceiling-rows').children) { const name=row.querySelector('input').value.trim(); if (!name || Object.hasOwn(ceiling,name)) throw new Error('能力名称不能为空或重复。'); ceiling[name]=row.querySelector('select').value==='true'; } if (!Object.keys(ceiling).length) throw new Error('请至少配置一项能力。'); return {action,parameters:{ceiling}}; }
117
+ if (action==='budget.policy') { const numeric={}; for (const key of ['limit_tokens','reserve_tokens','warning_percent']) { const value=Number(parameters[key]); if (!Number.isSafeInteger(value) || value<1 || key==='warning_percent' && value>100) throw new Error('预算额度、预留和阈值必须是范围内的正整数。'); numeric[key]=value; } if (numeric.reserve_tokens>numeric.limit_tokens) throw new Error('每次预留不能超过周期额度。'); return {action,parameters:{enabled:parameters.enabled==='true',...numeric,unknown_policy:parameters.unknown_policy}}; }
118
+ if (action==='plan.adopt') { const plan=(state.control.catalog?.plans || []).find(item=>item.planId===parameters.plan_id && item.state==='PROPOSED'); const version=Number(parameters.version); if(!plan || !Number.isSafeInteger(version) || version<1 || version!==plan.version || parameters.digest!==plan.digest) throw new Error('请选择当前范围内的完整计划;版本或内容指纹已变化时请重新读取。'); return {action,parameters:{plan_id:plan.planId,version:plan.version,digest:plan.digest}}; }
119
+ if (action==='territory.update' && !parameters.name && !parameters.summary) throw new Error('请填写要修改的名称或说明。');
120
+ return {action,parameters};
121
+ }
122
+ async function request(path, body) {
123
+ const config={credentials:'same-origin',cache:'no-store',headers:{Accept:'application/json'}};
124
+ if (path.startsWith('receipts/')) config.headers['X-Kingdom-Decision-Id']=state.decisionId;
125
+ if (body !== undefined) { config.method='POST'; config.headers['Content-Type']='application/json'; config.headers['X-Kingdom-Client']='owner-gui'; config.headers['X-Kingdom-CSRF']=state.control.csrfToken; config.headers['X-Kingdom-Request-Id']=crypto.randomUUID(); config.body=JSON.stringify(body); }
126
+ const response=await fetch('/api/owner/'+path,config); let result;
127
+ try { result=await response.json(); } catch { throw new Error('未收到可核对的服务端结果。'); }
128
+ if (!response.ok || result.ok===false) { const error=new Error(result.message || '请求未成功。'); error.confirmedRejection=response.status===409 && ['PREVIEW_STALE','PREVIEW_EXPIRED','MUTATION_NOT_APPLIED'].includes(result.errorCode); throw error; }
129
+ return result;
130
+ }
131
+ function lock(value) { state.busy=value; el('edit-fields').disabled=value || !!state.preview || state.uncertain || !active(); el('commit').disabled=value || !state.preview || !active() || state.uncertain; el('edit-again').disabled=value || state.uncertain; el('next').disabled=value || state.uncertain; }
132
+ function scopeText(view) {
133
+ const scope=view.scope; const catalog=state.control.catalog || {};
134
+ const lines=[view.kingdomId?'王国:'+view.kingdomId:'仅允许初始化空王国', '操作:'+view.actions.map(action=>names[action] || action).join('、')];
135
+ if (scope.kingdomWide) lines.push('包含明确授权的王国级配置');
136
+ if (scope.territoryIds.length) lines.push('领地:'+(catalog.territories || []).map(item=>item.name).join('、'));
137
+ if (scope.bindingIds.length) lines.push('角色:'+(catalog.bindings || []).map(item=>item.roleName).join('、'));
138
+ return lines.join('\n');
139
+ }
140
+ async function load() {
141
+ try {
142
+ if(pendingInvalid) throw new Error('浏览器中的待确认操作引用无法读取。请保留当前页面并核对原操作记录后再继续。');
143
+ if(state.uncertain && state.preview) { show('result-panel',true); show('lookup',true); show('next',false); text('result-title','正在恢复待确认操作'); text('result-meta','决定 '+state.decisionId+' · 操作 '+state.preview.operationId); }
144
+ const control=await request('control');
145
+ if (state.decisionId !== null && control.decision.decisionId !== state.decisionId) throw new Error('管理窗口已被替换。请保留原决定与操作编号核对结果,不要重新提交原变更。');
146
+ if (state.decisionId === null) state.decisionId=control.decision.decisionId;
147
+ state.control=control;
148
+ if(state.uncertain && state.preview) { show('editor',false); show('preview-panel',false); lock(false); await lookupReceipt(); tick(); return; }
149
+ if (!active()) { tick(); return; }
150
+ show('activation',false); show('window',true); show('editor',true); text('scope',scopeText(control.decision));
151
+ options(el('action'),control.decision.actions.filter(action=>Object.hasOwn(names,action)).map(id=>({id,label:names[id]}))); renderFields(); lock(false); status('管理窗口已就绪。填写变更后先查看预览。'); tick();
152
+ } catch(error) { show('activation',true); show('editor',false); show('window',false); status(error.message); }
153
+ }
154
+ function expire(message) { show('activation',true); show('editor',false); el('commit').disabled=true; el('revoke').disabled=true; status(message); }
155
+ function tick() { if (!state.control) return; const seconds=Math.max(0,Math.ceil((Date.parse(state.control.decision.expiresAt)-Date.now())/1000)); text('expiry','授权剩余 '+Math.floor(seconds/60)+' 分 '+seconds%60+' 秒'); if (!active()) { const receiptUntil=Date.parse(state.control.receiptExpiresAt || ''); expire(Number.isFinite(receiptUntil) && receiptUntil>Date.now()?'写窗口已到期或撤销,仍可在五分钟宽限期内查询已提交结果;新变更需要重新激活。':'管理窗口及结果查询宽限期已结束。请保留操作编号并重新核对。'); } }
156
+ setInterval(tick,1000);
157
+ el('action').addEventListener('change',renderFields);
158
+ el('operation-form').addEventListener('submit',async event=>{
159
+ event.preventDefault(); if (state.busy || state.uncertain || !active()) return; lock(true); status('正在核对范围与当前状态…');
160
+ try { const result=await request('prepare',payload()); state.preview=result.preview; show('preview-panel',true); text('preview-summary',result.preview.summary); el('changes').replaceChildren();
161
+ for (const change of result.preview.changes) { const row=make('div',undefined,'change'); row.append(make('dt',change.label),make('dd','当前:'+(change.before ?? '无'),'before'),make('dd','应用后:'+(change.after ?? '无'),'after')); el('changes').append(row); }
162
+ text('preview-expiry','预览有效至 '+new Date(result.preview.expiresAt).toLocaleTimeString()+'。提交前会再次检查当前状态。'); status('请确认下面的准确变更。'); el('commit').focus();
163
+ } catch(error) { status(error.message); } finally { lock(false); }
164
+ });
165
+ el('edit-again').addEventListener('click',()=>{ if (state.busy || state.uncertain) return; state.preview=null; show('preview-panel',false); lock(false); el('action').focus(); status('可修改内容;修改后需要重新生成预览。'); });
166
+ function receiptView(receipt) { clearPending(); state.uncertain=false; if (receipt.action==='init' && state.control) { state.control.decision.state='CONSUMED'; show('editor',false); show('activation',true); el('revoke').disabled=true; } show('result-panel',true); show('lookup',false); show('next',active()); text('result-title','变更已应用'); text('result-message',receipt.message); text('result-meta','操作 '+receipt.operationId+' · 记录 '+receipt.receiptSeq+' · '+new Date(receipt.appliedAt).toLocaleString()); show('preview-panel',false); status(receipt.action==='init'?'初始化已完成。本次单次授权已用完,日常管理需要按实际范围重新激活。':'已收到本次变更的服务端记录。'); }
167
+ el('commit').addEventListener('click',async()=>{
168
+ if (state.busy || !state.preview || state.uncertain || !active()) return; lock(true); status('正在提交已确认的变更…');
169
+ try { rememberPending(); receiptView((await request('commit',{prepareId:state.preview.prepareId,operationId:state.preview.operationId})).receipt); }
170
+ catch(error) { state.uncertain=!error.confirmedRejection; show('result-panel',true); show('lookup',state.uncertain); show('next',false); text('result-title',error.confirmedRejection?'本次提交未应用':'结果待确认'); text('result-meta','决定 '+state.decisionId+' · 操作 '+state.preview.operationId);
171
+ if(error.confirmedRejection) { clearPending(); state.preview=null; show('preview-panel',false); text('result-message',error.message+' 原输入已保留,请重新查看变更预览。'); status('本次未应用,可以修改内容并重新预览。'); }
172
+ else { text('result-message',error.message+' 请查询同一操作的记录。页面不会自动重发变更;刷新页面后也会恢复此操作。'); status('请先查询本次结果,再决定下一步。'); }
173
+ }
174
+ finally { lock(false); }
175
+ });
176
+ async function lookupReceipt() {
177
+ if (!state.preview || state.busy) return; lock(true);
178
+ try { const result=await request('receipts/'+encodeURIComponent(state.preview.operationId)); if (result.receipt) receiptView(result.receipt); else { text('result-message','暂未发现本次操作的完成记录。这不等于确认没有副作用;请保留操作编号,待核对后再创建新变更。'); status('尚无完成记录;原操作不会被自动重试。'); } }
179
+ catch(error) { status(error.message+' 原决定 '+state.decisionId+';原操作 '+state.preview.operationId+'。'); } finally { lock(false); }
180
+ }
181
+ el('lookup').addEventListener('click',lookupReceipt);
182
+ el('next').addEventListener('click',()=>{ if(state.busy || state.uncertain) return; state.preview=null; void load(); });
183
+ el('revoke').addEventListener('click',async()=>{
184
+ if (!state.control) return; el('revoke').disabled=true;
185
+ try { const result=await request('revoke',{}); state.control.decision.state='REVOKED'; state.control.receiptExpiresAt=result.receiptExpiresAt; expire('管理窗口已撤销。五分钟内仍可查询已提交结果;未提交预览不能继续应用。'); }
186
+ catch(error) { status(error.message+' 撤销尚未确认。'); el('revoke').disabled=false; }
187
+ });
188
+ void load();
189
+ })();
190
+ </script></body></html>`;
191
+ //# sourceMappingURL=owner-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-ui.js","sourceRoot":"","sources":["../../src/gui/owner-ui.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACxF,OAAO,cAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAuLT,CAAA"}
package/lib/gui/server.js CHANGED
@@ -22,6 +22,7 @@ import { readFileSync } from 'node:fs';
22
22
  import { createServer } from 'node:http';
23
23
  import { GUI_SCHEMA_VERSION } from './contract.js';
24
24
  import { CONSOLE_APP_HTML, guiCharacterAssetLocations, isGuiCharacterAssetFile } from './console-app.js';
25
+ import { handleOwnerRequest } from './owner-control.js';
25
26
  import { DuplicateJsonKeyError, GUI_COMMAND_PAYLOAD_FIELDS, GUI_FORBIDDEN_PAYLOAD_FIELDS, GUI_OWNER_ONLY_HTTP_COMMANDS, GUI_SESSION_COMMANDS, parseStrictJsonObject, } from './control-contract.js';
26
27
  /** 写命令必须带的自定义头(存在即可,值不校验)。 */
27
28
  const CLIENT_HEADER = 'x-kingdom-client';
@@ -329,6 +330,8 @@ export function startGuiServer(handlers, options) {
329
330
  async function handleRequest(req, res) {
330
331
  const url = new URL(req.url ?? '/', `http://${host}`);
331
332
  const path = url.pathname.replace(/\/+$/, '') || '/';
333
+ if (await handleOwnerRequest(req, res, url, options.ownerControl))
334
+ return;
332
335
  const address = server.address();
333
336
  const localOrigin = typeof address === 'object' && address !== null
334
337
  ? `http://${host}:${address.port}`
@@ -608,6 +611,7 @@ export function startGuiServer(handlers, options) {
608
611
  server.close();
609
612
  server.closeAllConnections?.();
610
613
  options.control?.dispose();
614
+ options.ownerControl?.dispose();
611
615
  };
612
616
  }
613
617
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/gui/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/gui/server.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,18 @@
1
+ /**
2
+ * dsh-kingdom — DB 行 → GUI 视图的投影(Phase 3)。
3
+ *
4
+ * 全部是**纯函数**:给定 (库状态, now) 就唯一确定输出。
5
+ * 因此 GUI 轮询即可拿到正确的表演状态,服务端不需要任何定时器或推送状态机。
6
+ *
7
+ * 再次强调边界:本文件只产出 `{ role, state, activity }` 这类语义,
8
+ * 绝不产出贴图、clip、场景文件名——那些是 GUI 的 visual-map 的事。
9
+ */
10
+ import { readDispatchUsage } from '../core/usage.js';
11
+ import { readAdditionalRoleCost, readLatestPromptCosts } from '../core/cost.js';
12
+ import { readBudgetView } from '../core/budget.js';
13
+ import { listCollaborationPlans, readCollaborationReadiness, readPlanBudgetView } from '../core/collaboration.js';
14
+ import { readWorkspaceReservations } from '../core/workspace-admission.js';
15
+ import { buildPersonalWorkbench } from './workbench.js';
1
16
  import { GUI_SCHEMA_VERSION, TRANSIENT_WINDOW_MS } from './contract.js';
2
17
  import { asExecutionState, isLiveExecutionState, isTerminalExecutionState } from '../core/execution.js';
3
18
  import { asTaskStatus } from '../core/task.js';
@@ -577,8 +592,9 @@ function toDecisionView(row) {
577
592
  createdAt: row.created_at,
578
593
  };
579
594
  }
580
- function toDispatchView(row) {
595
+ function toDispatchView(row, store) {
581
596
  return {
597
+ usage: readDispatchUsage(store, row.dispatch_id),
582
598
  dispatchId: row.dispatch_id,
583
599
  leaseId: row.lease_id,
584
600
  executionId: row.execution_id,
@@ -600,7 +616,7 @@ export function buildGovernance(store, kingdomId) {
600
616
  workerSessions: store.listAffinities(kingdomId).map(toAffinityView),
601
617
  leases: store.listLeases(kingdomId).map(toLeaseView),
602
618
  decisions: store.listCapabilityDecisions(kingdomId).map(toDecisionView),
603
- dispatches: store.listDispatches(kingdomId).map(toDispatchView),
619
+ dispatches: store.listDispatches(kingdomId).map(row => toDispatchView(row, store)),
604
620
  };
605
621
  }
606
622
  /** 任务级 Runtime Governance 投影(TaskDetail 用)。 */
@@ -611,7 +627,7 @@ export function buildTaskGovernance(store, taskId) {
611
627
  workerSessions: [],
612
628
  leases: store.listLeases(store.getDefaultKingdom()?.kingdom_id ?? '').filter(l => l.task_id === taskId).map(toLeaseView),
613
629
  decisions: store.listCapabilityDecisions(store.getDefaultKingdom()?.kingdom_id ?? '').filter(d => d.task_id === taskId).map(toDecisionView),
614
- dispatches: store.listDispatches(store.getDefaultKingdom()?.kingdom_id ?? '').filter(d => d.task_id === taskId).map(toDispatchView),
630
+ dispatches: store.listDispatches(store.getDefaultKingdom()?.kingdom_id ?? '').filter(d => d.task_id === taskId).map(row => toDispatchView(row, store)),
615
631
  };
616
632
  }
617
633
  /**
@@ -628,12 +644,12 @@ export function allowedActionsFor(task, execution) {
628
644
  case 'CREATED':
629
645
  return ['assign'];
630
646
  case 'ASSIGNED':
631
- return isGovernedStartBlocked(execution) ? [] : ['start'];
647
+ return executionState === 'RECOVERING' && execution?.execution_contract === 'GOVERNED_PERSISTENT' ? ['reconcile'] : isGovernedStartBlocked(execution) ? [] : ['start'];
632
648
  case 'RUNNING': {
633
649
  // RECOVERING means the Runtime outcome is unknown. Exposing start here would
634
650
  // invite a duplicate attempt before reconciliation, so the projection fails closed.
635
651
  if (executionState === 'RECOVERING')
636
- return [];
652
+ return execution?.execution_contract === 'GOVERNED_PERSISTENT' ? ['reconcile'] : [];
637
653
  if (execution === null || !live) {
638
654
  // REWORK 之后:任务已回 RUNNING,但还没有新的 Execution。
639
655
  return ['start'];
@@ -1093,19 +1109,20 @@ export function buildTimeline(store, kingdomId, options = {}) {
1093
1109
  const items = [];
1094
1110
  const events = store.listEvents(kingdomId, Math.min(options.eventLimit ?? 50, MAX_PROJECTION_TIMELINE_ITEMS));
1095
1111
  for (const event of events) {
1112
+ const usageObservation = event.event_type === 'DISPATCH_USAGE_OBSERVED';
1096
1113
  const refs = [eventSource(event.seq)];
1097
1114
  const entityRef = event.target_type ? publicEntityRef(event.target_type, event.target_id) : null;
1098
1115
  items.push({
1099
1116
  id: `event:${event.seq}`,
1100
- kind: 'GOVERNANCE_FACT',
1117
+ kind: usageObservation ? 'RUNTIME_OBSERVATION' : 'GOVERNANCE_FACT',
1101
1118
  occurredAt: safeDate(event.created_at),
1102
1119
  entityRef,
1103
- authoritativeState: stateValue(event.event_type, 'GOVERNANCE_FACT', refs),
1120
+ authoritativeState: stateValue(event.event_type, usageObservation ? 'RUNTIME_OBSERVATION' : 'GOVERNANCE_FACT', refs),
1104
1121
  sourceRefs: boundedSourceRefs(refs),
1105
1122
  allowedActions: null,
1106
1123
  attentionReason: timelineAttention(attentions, entityRef),
1107
1124
  terminality: 'UNKNOWN',
1108
- summary: `Governance Fact: ${boundedText(event.event_type)}`,
1125
+ summary: usageObservation ? 'Provider usage observation (coverage may be partial)' : `Governance Fact: ${boundedText(event.event_type)}`,
1109
1126
  requiresOwnerAction: false,
1110
1127
  rawEvidenceAvailable: false,
1111
1128
  });
@@ -1447,6 +1464,113 @@ function buildExecutionProjectionData(store, tasks, attentions, security) {
1447
1464
  truncated: candidates.length > items.length,
1448
1465
  };
1449
1466
  }
1467
+ /** Keep runtime references and prompt text outside the public cost projection. */
1468
+ function buildWorkbenchCost(store, kingdomId, present, runtime) {
1469
+ const number = (value) => Number.isSafeInteger(value) && Number(value) >= 0 ? Number(value) : null;
1470
+ const rows = present ? readLatestPromptCosts(store, kingdomId) : [];
1471
+ const parts = (value) => Array.isArray(value)
1472
+ ? value.slice(0, 24).map(item => ({ name: boundedText(typeof item?.name === 'string' ? item.name : 'UNKNOWN'), bytes: number(item?.bytes) })) : [];
1473
+ return {
1474
+ additionalRoles: present ? readAdditionalRoleCost(store, kingdomId) : null,
1475
+ budget: present ? readBudgetView(store, kingdomId) : null,
1476
+ prompts: { totalCount: rows.length, truncated: rows.length > 40, items: rows.slice(0, 40).map(row => ({
1477
+ bindingId: publicReferenceId(row.bindingId), roleType: boundedText(row.roleType),
1478
+ toolsBefore: number(row.toolsBefore), toolsAfter: number(row.toolsAfter), toolsBytesBefore: number(row.toolsBytesBefore), toolsBytesAfter: number(row.toolsBytesAfter),
1479
+ sections: parts(row.sections), contexts: parts(row.contexts),
1480
+ partsTruncated: (Array.isArray(row.sections) && row.sections.length > 24) || (Array.isArray(row.contexts) && row.contexts.length > 24),
1481
+ historyBytes: null, tokenEstimate: null, mode: row.mode === 'off' || row.mode === 'pilot' ? row.mode : 'UNKNOWN',
1482
+ reasonCode: typeof row.reasonCode === 'string' ? boundedText(row.reasonCode) : null,
1483
+ })) },
1484
+ runtime: { toolDisclosureMode: runtime?.toolDisclosureMode === 'off' || runtime?.toolDisclosureMode === 'pilot' ? runtime.toolDisclosureMode : 'UNKNOWN',
1485
+ observerAvailable: typeof runtime?.observerAvailable === 'boolean' ? runtime.observerAvailable : null },
1486
+ };
1487
+ }
1488
+ /** Apply the bound after exact task selection, so unrelated activity cannot erase task history. */
1489
+ function readTaskEvents(store, kingdomId, taskId, limit) {
1490
+ return store.db.prepare('SELECT * FROM events WHERE kingdom_id = ? AND target_type = ? AND target_id = ? ORDER BY seq DESC LIMIT ?')
1491
+ .all(kingdomId, 'task', taskId, limit);
1492
+ }
1493
+ function readTaskReviewEvents(store, kingdomId, taskId, limit) {
1494
+ return store.db.prepare("SELECT * FROM events WHERE kingdom_id = ? AND target_type = 'task' AND target_id = ? AND actor_role = 'SUPERVISOR' AND event_type IN ('TASK_ACCEPTED', 'TASK_REWORK_REQUESTED', 'TASK_FAILED', 'TASK_HANDED_OFF') ORDER BY seq DESC LIMIT ?")
1495
+ .all(kingdomId, taskId, limit);
1496
+ }
1497
+ /** Canonical reads remain here; the workbench builder only receives public projection values. */
1498
+ function buildWorkbenchCollaboration(store, kingdomId, present) {
1499
+ const publicId = (id) => publicReferenceId(id) ?? 'redacted';
1500
+ const plans = present ? listCollaborationPlans(store, kingdomId) : [];
1501
+ const resources = present && store.isSchemaV4 ? readWorkspaceReservations(store, kingdomId) : [];
1502
+ const readiness = (value) => value ? {
1503
+ ready: value.ready, reasonCode: value.reasonCode, blockingTaskIds: value.blockingTaskIds.map(publicId),
1504
+ acceptedResults: value.handoffs.map(item => ({ taskId: publicId(item.taskId), attemptNo: item.attemptNo,
1505
+ resultId: publicId(item.resultId), resultDigest: item.resultDigest, acceptEventId: publicId(item.acceptEventId) })),
1506
+ } : null;
1507
+ return {
1508
+ pendingAdoptionCount: plans.filter(plan => plan.state === 'PROPOSED').length,
1509
+ plans: { totalCount: plans.length, truncated: plans.length > 40, items: plans.slice(0, 40).map(plan => ({
1510
+ planId: publicId(plan.planId), parentTaskId: publicId(plan.parentTaskId), title: boundedText(store.getTask(plan.parentTaskId)?.title),
1511
+ version: plan.version, digest: plan.digest, state: plan.state, mode: plan.mode, reason: boundedText(plan.reason),
1512
+ integratorBindingId: publicId(plan.integratorBindingId), integratorName: boundedText(store.getBindingById(plan.integratorBindingId)?.role_name),
1513
+ parentStatus: store.getTask(plan.parentTaskId)?.status ?? 'UNKNOWN', budgetTokens: plan.budgetTokens, reserveTokens: plan.reserveTokens,
1514
+ adoptedAt: plan.adoptedAt, integration: readiness(readCollaborationReadiness(store, kingdomId, plan.parentTaskId)),
1515
+ budget: readPlanBudgetView(store, kingdomId, plan.planId),
1516
+ items: plan.items.map(item => ({ key: boundedText(item.key), taskId: publicId(item.taskId), title: boundedText(item.title),
1517
+ description: boundedText(item.description), acceptanceCriteria: boundedText(item.acceptanceCriteria),
1518
+ territoryId: publicId(item.territoryId), territoryName: boundedText(store.getTerritoryById(item.territoryId)?.name),
1519
+ workerBindingId: publicId(item.workerBindingId), workerName: boundedText(store.getBindingById(item.workerBindingId)?.role_name),
1520
+ access: item.access, dependsOn: item.dependsOn.map(boundedText), expectedArtifact: boundedText(item.expectedArtifact),
1521
+ status: store.getTask(item.taskId)?.status ?? 'NOT_CREATED', readiness: readiness(readCollaborationReadiness(store, kingdomId, item.taskId)) })),
1522
+ })) },
1523
+ resources: { totalCount: resources.length, truncated: resources.length > 80, items: resources.slice(0, 80).map(item => ({
1524
+ taskId: publicId(item.taskId), attemptNo: item.attemptNo, access: item.access, state: boundedText(item.state), recovery: item.recovery,
1525
+ })) },
1526
+ };
1527
+ }
1528
+ function buildWorkbenchData(store, kingdomId, tasks, security, costRuntime) {
1529
+ const kingdom = store.getDefaultKingdom();
1530
+ const present = kingdom?.kingdom_id === kingdomId;
1531
+ const bindings = present ? store.listBindings(kingdomId) : [];
1532
+ const territories = present ? store.listTerritories(kingdomId) : [];
1533
+ const publicId = (id) => publicReferenceId(id) ?? 'redacted';
1534
+ const taskInputs = tasks.map(task => {
1535
+ const view = toTaskView(store, task);
1536
+ const claim = store.latestWorkerResult(task.task_id);
1537
+ const execution = store.latestExecution(task.task_id);
1538
+ const review = readTaskReviewEvents(store, kingdomId, task.task_id, 1)[0];
1539
+ return {
1540
+ task: {
1541
+ taskId: publicId(task.task_id), territoryId: publicId(task.territory_id), title: boundedText(task.title),
1542
+ status: boundedText(task.status), assignedBindingId: publicReferenceId(task.assigned_binding_id), updatedAt: safeDate(task.updated_at) ?? '',
1543
+ latestClaim: view.latestClaim ? { ...view.latestClaim, resultId: publicId(view.latestClaim.resultId),
1544
+ workerBindingId: publicReferenceId(view.latestClaim.workerBindingId), sessionId: null } : null,
1545
+ latestExecution: view.latestExecution ? { ...view.latestExecution, executionId: publicId(view.latestExecution.executionId),
1546
+ taskId: publicId(task.task_id), workerBindingId: publicReferenceId(view.latestExecution.workerBindingId), sessionId: null,
1547
+ leaseId: publicReferenceId(view.latestExecution.leaseId), capabilityDecisionId: publicReferenceId(view.latestExecution.capabilityDecisionId) } : null,
1548
+ },
1549
+ actionAvailability: buildActionAvailability(store, task, execution, security),
1550
+ latestReview: review ? toSupervisorDecisionView(review) : null,
1551
+ claimExecutionMismatch: Boolean(claim && execution && claimExecutionMismatch(claim, execution)),
1552
+ };
1553
+ });
1554
+ const governance = present ? buildGovernance(store, kingdomId) : emptyGovernance();
1555
+ // Only public IDs, reason codes and typed token observations can be consumed by the workbench.
1556
+ governance.decisions = governance.decisions.map(decision => ({ ...decision, decisionId: publicId(decision.decisionId), taskId: publicId(decision.taskId), reasonCode: boundedText(decision.reasonCode) || null }));
1557
+ governance.dispatches = governance.dispatches.map(dispatch => ({ ...dispatch, dispatchId: publicId(dispatch.dispatchId), taskId: publicId(dispatch.taskId),
1558
+ executionId: publicId(dispatch.executionId), leaseId: publicId(dispatch.leaseId), runtimeDispatchRef: null, runtimeExecutionRef: null }));
1559
+ governance.leases = governance.leases.map(lease => ({ ...lease, leaseId: publicId(lease.leaseId), taskId: publicId(lease.taskId) }));
1560
+ return buildPersonalWorkbench({
1561
+ kingdomPresent: present,
1562
+ bindings: bindings.map(binding => ({ bindingId: publicId(binding.binding_id), roleType: boundedText(binding.role_type), roleName: boundedText(binding.role_name),
1563
+ status: boundedText(binding.status), sessionBound: binding.session_id !== null })),
1564
+ territories: territories.map(territory => ({ territoryId: publicId(territory.territory_id), name: boundedText(territory.name), status: boundedText(territory.status),
1565
+ supervisorBindingId: publicReferenceId(territory.supervisor_binding_id) })),
1566
+ tasks: taskInputs,
1567
+ executions: tasks.flatMap(task => store.listExecutions(task.task_id).map(execution => ({ executionId: publicId(execution.execution_id), taskId: publicId(task.task_id),
1568
+ workerBindingId: publicReferenceId(execution.worker_binding_id), state: boundedText(execution.state) }))),
1569
+ governance,
1570
+ cost: buildWorkbenchCost(store, kingdomId, present, costRuntime),
1571
+ collaboration: buildWorkbenchCollaboration(store, kingdomId, present),
1572
+ });
1573
+ }
1450
1574
  /** S1 顶层只读 Projection;没有 kingdom 时显式返回 UNKNOWN/空数据。 */
1451
1575
  export function buildReadonlySnapshotProjection(store, kingdomId, options = {}) {
1452
1576
  const nowMs = options.nowMs ?? Date.now();
@@ -1523,6 +1647,14 @@ export function buildReadonlySnapshotProjection(store, kingdomId, options = {})
1523
1647
  attentionReason: topAttention,
1524
1648
  data: attentions,
1525
1649
  }),
1650
+ workbench: projectionEnvelope({
1651
+ revision,
1652
+ refreshedAt,
1653
+ entityRef: kingdomRef,
1654
+ authoritativeState: null,
1655
+ sourceRefs: [...sourceRefs, ruleSource('PERSONAL_WORKBENCH_DERIVED')],
1656
+ data: buildWorkbenchData(store, actualKingdomId, tasks, options.security, options.costRuntime),
1657
+ }),
1526
1658
  };
1527
1659
  }
1528
1660
  export function buildSnapshot(store, options) {
@@ -1547,6 +1679,7 @@ export function buildSnapshot(store, options) {
1547
1679
  eventLimit: options.eventLimit,
1548
1680
  nowMs,
1549
1681
  security: options.security,
1682
+ costRuntime: options.costRuntime,
1550
1683
  }),
1551
1684
  };
1552
1685
  }
@@ -1587,6 +1720,7 @@ export function buildSnapshot(store, options) {
1587
1720
  eventLimit: options.eventLimit,
1588
1721
  nowMs,
1589
1722
  security: options.security,
1723
+ costRuntime: options.costRuntime,
1590
1724
  }),
1591
1725
  };
1592
1726
  }
@@ -1600,13 +1734,10 @@ export function buildTaskDetail(store, kingdomId, taskId, options = {}) {
1600
1734
  const binding = task.assigned_binding_id ? store.getBindingById(task.assigned_binding_id) : null;
1601
1735
  const assignments = store.listTaskAssignments(taskId);
1602
1736
  const executions = store.listExecutions(taskId);
1603
- const related = store
1604
- .listEvents(kingdomId, 500)
1605
- .filter(e => e.target_id === taskId)
1606
- .sort((a, b) => a.seq - b.seq);
1607
- const reviews = related
1608
- .filter(e => ['TASK_ACCEPTED', 'TASK_REWORK_REQUESTED', 'TASK_FAILED', 'TASK_HANDED_OFF'].includes(e.event_type))
1609
- .map(toSupervisorDecisionView);
1737
+ const taskEvents = readTaskEvents(store, kingdomId, taskId, 501);
1738
+ const related = taskEvents.slice(0, 500).sort((a, b) => a.seq - b.seq);
1739
+ const reviewEvents = readTaskReviewEvents(store, kingdomId, taskId, 501);
1740
+ const reviews = reviewEvents.slice(0, 500).sort((a, b) => a.seq - b.seq).map(toSupervisorDecisionView);
1610
1741
  const view = toTaskView(store, task);
1611
1742
  return {
1612
1743
  schemaVersion: GUI_SCHEMA_VERSION,
@@ -1618,9 +1749,13 @@ export function buildTaskDetail(store, kingdomId, taskId, options = {}) {
1618
1749
  claims: store.listWorkerResults(taskId).map(toClaimView),
1619
1750
  executions: executions.map(toExecutionView),
1620
1751
  reviews,
1752
+ reviewsTruncated: reviewEvents.length > reviews.length,
1621
1753
  relatedEvents: related.map(toEventView),
1754
+ relatedEventsTruncated: taskEvents.length > related.length,
1755
+ humanAcceptance: 'NOT_RECORDED',
1622
1756
  allowedActions: view.allowedActions,
1623
1757
  governance: buildTaskGovernance(store, taskId),
1758
+ additionalRoleCost: readAdditionalRoleCost(store, kingdomId, taskId),
1624
1759
  projection: buildTaskProjection(store, kingdomId, task, options),
1625
1760
  };
1626
1761
  }