dsh-kingdom 3.2.0 → 3.3.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 (51) hide show
  1. package/README.md +267 -246
  2. package/docs/CURRENT-USER-GUIDE.md +106 -0
  3. package/docs/DISPATCH-IDENTITY-PROBE.md +79 -0
  4. package/docs/V3.2-RELEASE-NOTES.md +108 -103
  5. package/docs/V3.2.1-RELEASE-NOTES.md +39 -0
  6. package/docs/V3.3-RELEASE-NOTES.md +46 -0
  7. package/lib/adapter/dsh-backend.js +189 -11
  8. package/lib/adapter/dsh-backend.js.map +1 -1
  9. package/lib/adapter/dsh-session-events.js +51 -7
  10. package/lib/adapter/dsh-session-events.js.map +1 -1
  11. package/lib/core/db.js +557 -546
  12. package/lib/core/db.js.map +1 -1
  13. package/lib/core/governed.js +20 -6
  14. package/lib/core/governed.js.map +1 -1
  15. package/lib/core/owner-binding-intent.js +168 -11
  16. package/lib/core/owner-binding-intent.js.map +1 -1
  17. package/lib/core/task-service.js +4 -1
  18. package/lib/core/task-service.js.map +1 -1
  19. package/lib/core/usage.js +10 -6
  20. package/lib/core/usage.js.map +1 -1
  21. package/lib/core/workspace-admission.js +31 -7
  22. package/lib/core/workspace-admission.js.map +1 -1
  23. package/lib/dispatch/service.js +141 -7
  24. package/lib/dispatch/service.js.map +1 -1
  25. package/lib/gui/console-app.js +34 -30
  26. package/lib/gui/console-app.js.map +1 -1
  27. package/lib/gui/local-control.js +59 -3
  28. package/lib/gui/local-control.js.map +1 -1
  29. package/lib/gui/owner-ui.js +71 -8
  30. package/lib/gui/owner-ui.js.map +1 -1
  31. package/lib/gui/server.js +1 -1
  32. package/lib/gui/server.js.map +1 -1
  33. package/lib/gui/workbench-ui.js +179 -10
  34. package/lib/gui/workbench-ui.js.map +1 -1
  35. package/lib/index.js +52 -13
  36. package/lib/index.js.map +1 -1
  37. package/lib/types/adapter/contract.d.ts +20 -0
  38. package/lib/types/adapter/dsh-backend.d.ts +5 -1
  39. package/lib/types/adapter/dsh-session-events.d.ts +10 -1
  40. package/lib/types/core/db.d.ts +2 -0
  41. package/lib/types/core/governed.d.ts +5 -0
  42. package/lib/types/core/owner-binding-intent.d.ts +26 -0
  43. package/lib/types/core/workspace-admission.d.ts +13 -1
  44. package/lib/types/dispatch/service.d.ts +18 -14
  45. package/lib/types/gui/console-app.d.ts +1 -1
  46. package/lib/types/gui/control-contract.d.ts +5 -3
  47. package/lib/types/gui/local-control.d.ts +14 -2
  48. package/lib/types/gui/owner-ui.d.ts +31 -0
  49. package/lib/worker/governed-executor.js +18 -0
  50. package/lib/worker/governed-executor.js.map +1 -1
  51. package/package.json +10 -4
@@ -2,7 +2,55 @@
2
2
  export function renderOwnerApp(nonce) {
3
3
  if (!/^[A-Za-z0-9_-]{20,100}$/u.test(nonce))
4
4
  throw new Error('invalid owner page nonce');
5
- return OWNER_APP_HTML.replaceAll('__OWNER_NONCE__', nonce);
5
+ return OWNER_APP_HTML.replace('__BINDING_PREFILL__', ownerBindingFormPrefill.toString()).replaceAll('__OWNER_NONCE__', nonce);
6
+ }
7
+ /** Pure form convenience only; preview/commit still recheck scope and current facts. */
8
+ export function ownerBindingFormPrefill(control) {
9
+ const decision = control?.decision, scope = decision?.scope, catalog = control?.catalog;
10
+ if (!scope || !catalog || decision.actions.length !== 1)
11
+ return null;
12
+ const action = decision.actions[0];
13
+ if (!['role.bind', 'role.session'].includes(action))
14
+ return null;
15
+ if (!['roleTypes', 'territoryIds', 'bindingIds', 'targetSessionIds', 'workspaceRoots']
16
+ .every(key => Array.isArray(scope[key])))
17
+ return null;
18
+ if (scope.kingdomWide || scope.workspaceRoots.length
19
+ || scope.roleTypes.length !== 1 || scope.targetSessionIds.length !== 1)
20
+ return null;
21
+ const role = scope.roleTypes[0], sessionId = scope.targetSessionIds[0];
22
+ if (!['SUPERVISOR', 'CHANCELLOR'].includes(role))
23
+ return null;
24
+ const sessions = (catalog.runtimeSessions ?? []).filter(item => item.id === sessionId);
25
+ if (sessions.length !== 1)
26
+ return null;
27
+ let territory = null;
28
+ if (role === 'SUPERVISOR') {
29
+ if (!scope.territoryIds.length || new Set(scope.territoryIds).size !== scope.territoryIds.length
30
+ || (action === 'role.bind' && scope.territoryIds.length !== 1))
31
+ return null;
32
+ for (const territoryId of scope.territoryIds) {
33
+ const territories = (catalog.territories ?? []).filter(item => item.id === territoryId);
34
+ if (territories.length !== 1)
35
+ return null;
36
+ if (action === 'role.bind')
37
+ territory = territories[0];
38
+ }
39
+ }
40
+ else if (scope.territoryIds.length)
41
+ return null;
42
+ if (action === 'role.bind') {
43
+ if (scope.bindingIds.length)
44
+ return null;
45
+ return { role_type: role, role_name: territory ? territory.name + '主管' : '宰相', session_id: sessionId,
46
+ ...(territory ? { territory_id: territory.id } : {}) };
47
+ }
48
+ if (scope.bindingIds.length !== 1)
49
+ return null;
50
+ const bindings = (catalog.bindings ?? []).filter(item => item.id === scope.bindingIds[0] && item.roleType === role);
51
+ if (bindings.length !== 1)
52
+ return null;
53
+ return { binding_id: bindings[0].id, session_id: sessionId };
6
54
  }
7
55
  const OWNER_APP_HTML = String.raw `<!doctype html>
8
56
  <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>
@@ -36,6 +84,7 @@ const OWNER_APP_HTML = String.raw `<!doctype html>
36
84
  </main><script nonce="__OWNER_NONCE__">
37
85
  (() => {
38
86
  'use strict';
87
+ const ownerBindingFormPrefill = __BINDING_PREFILL__;
39
88
  const el = id => document.getElementById(id);
40
89
  const state = { control: null, decisionId: null, preview: null, busy: false, uncertain: false, ackTarget: null, ackHintInvalid: false, askTarget: null, askHintInvalid: false, askThread: null, changeTarget: null, changeHintInvalid: false, questionLimit: 50, questionSeq: 0 };
41
90
  /**
@@ -189,6 +238,12 @@ const OWNER_APP_HTML = String.raw `<!doctype html>
189
238
  const action = el('action').value; const catalog = state.control.catalog || {}; text('action-note', notes[action]);
190
239
  const territories = (catalog.territories || []).map(item => ({id:item.id,label:item.name + ' · ' + item.id}));
191
240
  const sessions = (catalog.runtimeSessions || []).map(item => ({id:item.id,label:item.label + ' · ' + item.id}));
241
+ const requireChoice = (values, label) => [{id:'',label}, ...values];
242
+ const applyBindingPrefill = () => {
243
+ const prefill = ownerBindingFormPrefill(state.control);
244
+ if (!prefill) return;
245
+ for (const [key, value] of Object.entries(prefill)) { const input=el('param-' + key); if(input) input.value=value; }
246
+ };
192
247
  if (action === 'init') { field('kingdom_name','王国名称'); field('owner_name','所有者显示名'); }
193
248
  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); }
194
249
  if (action === 'territory.update') { field('territory_id','领地','select',territories); field('name','新名称(不改请留空)','text',undefined,false); field('summary','新说明(不改请留空)','textarea',undefined,false); }
@@ -211,13 +266,13 @@ const OWNER_APP_HTML = String.raw `<!doctype html>
211
266
  release.addEventListener('change', update); update();
212
267
  }
213
268
  if (action === 'role.bind') {
214
- const role = field('role_type','角色','select',(state.control.decision.scope.roleTypes || []).map(id=>({id,label:roleNames[id]}))); field('role_name','角色名称');
215
- const session = field('session_id','运行会话','select',sessions);
269
+ const role = field('role_type','角色','select',requireChoice((state.control.decision.scope.roleTypes || []).map(id=>({id,label:roleNames[id]})), '请选择角色')); field('role_name','角色名称');
270
+ const session = field('session_id','运行会话','select',requireChoice(sessions, '请选择运行会话'));
216
271
  // v3.2.0:主管必须同时隶属一个领地(席位与主理同一事务写入),因此这里强制选择领地;
217
272
  // 其它角色不隶属领地,字段隐藏并禁用,不进入 payload。
218
- const territory = field('territory_id','主理领地(主管必选)','select',territories);
273
+ const territory = field('territory_id','主理领地(主管必选)','select',requireChoice(territories, '请选择领地'));
219
274
  const territoryHint = make('p', territories.length
220
- ? '领地和主管完全绑定:任命主管时会同时把该领地的主理设为此席位;领地当前已有主理时会被拒绝,请先解除现有主理再指派。'
275
+ ? '本次确认会让所选会话负责该领地。领地已有主管时,请回到要接任的会话说“把「准确领地名」主管换成当前会话”,由会话准备更换引导。'
221
276
  : '本次授权范围内没有任何可用领地:无法任命主管。请先创建领地,或重新激活本包含目标领地的管理窗口。','muted');
222
277
  territoryHint.classList.add('wide'); el('fields').append(territoryHint);
223
278
  const update = () => {
@@ -227,9 +282,17 @@ const OWNER_APP_HTML = String.raw `<!doctype html>
227
282
  territoryHint.hidden = !supervisor;
228
283
  el('prepare').disabled = supervisor && !territories.length;
229
284
  };
230
- role.addEventListener('change',update); update();
285
+ applyBindingPrefill(); role.addEventListener('change',update); update();
286
+ }
287
+ if (action === 'role.session') {
288
+ field('binding_id','要接替的角色','select',requireChoice(allowedBindings(item=>['CHANCELLOR','SUPERVISOR'].includes(item.roleType)), '请选择要接替的角色'));
289
+ field('session_id','接任的运行会话','select',requireChoice(sessions, '请选择接任会话')); applyBindingPrefill();
290
+ if (ownerBindingFormPrefill(state.control) && state.control.decision.scope.roleTypes[0] === 'SUPERVISOR') {
291
+ const names = state.control.decision.scope.territoryIds.map(id => '「' + catalog.territories.find(item => item.id === id).name + '」').join('、');
292
+ const hint = make('p','本次更换同一主管席位的会话,会同时接替全部领地:' + names + '。若只想接替其中一个领地,请停止确认,不提交此变更。','evidence-weak field wide');
293
+ hint.id='supervisor-session-scope'; el('fields').append(hint);
294
+ }
231
295
  }
232
- if (action === 'role.session') { field('binding_id','要调整的角色','select',allowedBindings(item=>['CHANCELLOR','SUPERVISOR'].includes(item.roleType))); field('session_id','新的运行会话','select',sessions); }
233
296
  if (action === 'execution-profile') {
234
297
  field('binding_id','要配置的角色','select',allowedBindings(item=>['CHANCELLOR','SUPERVISOR','WORKER'].includes(item.roleType)));
235
298
  field('provider','模型服务商(可选,留空使用现有配置默认值)','text',undefined,false); field('model','模型名称');
@@ -596,7 +659,7 @@ const OWNER_APP_HTML = String.raw `<!doctype html>
596
659
  }
597
660
  if(state.ackTarget) el('action').value='delivery.item.ack';
598
661
  if(state.askTarget) el('action').value='delivery.item.question';
599
- renderFields(); lock(false); status(openNotice || '管理窗口已就绪。填写变更后先查看预览。'); tick();
662
+ renderFields(); lock(false); status(openNotice || (ownerBindingFormPrefill(control) ? '本次唯一目标已填好。核对领地、角色和会话后查看变更预览。' : '管理窗口已就绪。填写变更后先查看预览。')); tick();
600
663
  // 只读问答线程与历史入口在窗口就绪后单独渲染:它们不参与授权,也不写任何事实。
601
664
  renderQuestionHistory();
602
665
  void renderQuestions();
@@ -1 +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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAqoBT,CAAA"}
1
+ {"version":3,"file":"owner-ui.js","sourceRoot":"","sources":["../../src/gui/owner-ui.ts"],"names":[],"mappings":"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"}
package/lib/gui/server.js CHANGED
@@ -518,7 +518,7 @@ export function startGuiServer(handlers, options) {
518
518
  sendError(res, 401, 'CONTROL_SESSION_REQUIRED', 'GUI/HTTP 本身没有 Authority;请先直接执行 /kingdom gui。');
519
519
  return;
520
520
  }
521
- const admitted = options.control.authorize(controlCookie, typeof req.headers[CSRF_HEADER] === 'string' ? req.headers[CSRF_HEADER] : null, typeof req.headers[REQUEST_ID_HEADER] === 'string' ? req.headers[REQUEST_ID_HEADER] : null, meta);
521
+ const admitted = options.control.authorize(controlCookie, typeof req.headers[CSRF_HEADER] === 'string' ? req.headers[CSRF_HEADER] : null, typeof req.headers[REQUEST_ID_HEADER] === 'string' ? req.headers[REQUEST_ID_HEADER] : null, meta, command);
522
522
  if (!admitted.ok) {
523
523
  sendControlFailure(res, admitted);
524
524
  return;
@@ -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,6 +1,7 @@
1
1
  /** Personal workbench presentation. No model calls or authority are created here. */
2
2
  export const WORKBENCH_CSS = String.raw `
3
- .workbench-page { grid-column: 1 / -1; min-width: 0; width: 100%; }
3
+ .workbench-page { grid-column: 1 / -1; min-width: 0; width: 100%; scroll-margin-top: 130px; }
4
+ .runtime-table-scroll-hint { display: none; color: var(--muted); font-size: .8rem; }
4
5
  .workbench-heading { display: flex; justify-content: space-between; align-items: start; gap: 24px; margin: 18px 0 24px; }
5
6
  .workbench-heading h2 { font-size: clamp(25px, 3vw, 36px); margin: 6px 0; }
6
7
  .workbench-heading p, .workbench-block > p { color: var(--muted); }
@@ -21,6 +22,26 @@ export const WORKBENCH_CSS = String.raw `
21
22
  .quick-task-form input { flex: 1; min-width: 0; min-height: 48px; }
22
23
  .quick-task-form button { flex: 0 0 auto; }
23
24
  .workbench-section-link { color: var(--gold); font-size: 13px; }
25
+ .runtime-overview { display: grid; gap: 18px; }
26
+ .runtime-table-scroll { overflow-x: auto; margin-top: 16px; }
27
+ .runtime-table { width: 100%; border-collapse: collapse; text-align: left; font-size: 14px; }
28
+ .runtime-table caption { text-align: left; color: var(--muted); margin-bottom: 10px; }
29
+ .runtime-table th, .runtime-table td { padding: 13px 10px; border-bottom: 1px solid var(--line); vertical-align: top; overflow-wrap: anywhere; }
30
+ .runtime-table th { color: var(--muted); font-weight: 500; }
31
+ .runtime-table td:first-child { min-width: 150px; }
32
+ .runtime-table a { color: var(--bamboo); text-underline-offset: 3px; }
33
+ .runtime-table small { display: block; color: var(--muted); margin-top: 5px; }
34
+ .runtime-table .runtime-related-task { display: block; margin-bottom: 5px; }
35
+ .runtime-overview-note { margin: 8px 0 0; color: var(--muted); font-size: 13px; }
36
+ .workbench-advanced { margin-top: 18px; }
37
+ .workbench-advanced > summary, .settings-list > details > summary { cursor: pointer; font-weight: 600; }
38
+ .workbench-advanced[open] > .workbench-grid { margin-top: 18px; }
39
+ .dispatch-content { display: grid; gap: 18px; }
40
+ .dispatch-step { min-width: 0; padding: 20px; border: 1px solid var(--line); border-radius: 12px; background: var(--patina); }
41
+ .dispatch-step h3 { margin-bottom: 12px; }
42
+ .dispatch-step > form { border: 0; padding: 0; box-shadow: none; }
43
+ .dispatch-content > .task-draft-panel { margin: 0; }
44
+ .supervisor-request { margin-top: 8px; min-height: 44px; }
24
45
  .task-detail-section { padding: 20px 0; border-bottom: 1px solid var(--line); }
25
46
  .task-detail-section h3 { margin-bottom: 12px; font-size: 18px; }
26
47
  .task-detail-section p { white-space: pre-wrap; overflow-wrap: anywhere; }
@@ -135,9 +156,14 @@ export const WORKBENCH_CSS = String.raw `
135
156
  }
136
157
  @media (max-width: 1050px) { .role-workbench-layout:has(.role-inspector:not([hidden])) { grid-template-columns: minmax(0, 1fr); } .role-inspector { position: static; } }
137
158
  @media (max-width: 700px) {
159
+ .runtime-table-scroll-hint { display: block; margin-bottom: 12px; }
160
+ .workbench-page { scroll-margin-top: 185px; }
138
161
  .workbench-grid, .task-evidence-states { grid-template-columns: minmax(0, 1fr); }
139
162
  .workbench-heading { flex-direction: column; gap: 12px; }
140
163
  .workbench-block { padding: 16px; }
164
+ .dispatch-step { padding: 16px; }
165
+ .runtime-table { font-size: 13px; min-width: 640px; }
166
+ .runtime-table th, .runtime-table td { padding: 11px 8px; }
141
167
  .quick-task-form { flex-direction: column; }
142
168
  .usage-table { font-size: 12px; }
143
169
  .usage-table th, .usage-table td { padding: 9px 4px; }
@@ -147,16 +173,26 @@ export const WORKBENCH_CSS = String.raw `
147
173
  `;
148
174
  export const WORKBENCH_HTML = String.raw `
149
175
  <section id="today" data-console-section="today" data-console-page="today" class="workbench-page" aria-labelledby="today-title">
150
- <header class="workbench-heading"><div><p class="section-kicker">个人工作台</p><h2 id="today-title">今天,从要紧的事开始</h2><p>需要你决定的事、执行进展和最近交付,都在这里。</p></div><button id="workbench-refresh" class="refresh" type="button">重新读取</button></header>
151
- <form id="quick-task-form" class="quick-task-form"><label class="sr-only" for="quick-task-goal">写下一句话目标</label><input id="quick-task-goal" autocomplete="off" placeholder="写下一句话目标,先整理为草稿" required><button class="primary" type="submit">整理任务草稿</button></form>
152
- <div class="workbench-grid">
176
+ <header class="workbench-heading"><div><p class="section-kicker">个人工作台</p><h2 id="today-title">运行总览</h2><p>查看任务在哪个领地推进,以及已登记会话的执行状态。</p></div><button id="workbench-refresh" class="refresh" type="button">重新读取</button></header>
177
+ <div class="runtime-overview">
178
+ <section class="workbench-block" aria-labelledby="runtime-tasks-title"><div class="delivery-head"><h3 id="runtime-tasks-title">任务</h3><a class="workbench-section-link" href="#dispatch">派发新任务 →</a></div><div id="runtime-tasks" class="runtime-table-scroll"></div></section>
179
+ <section class="workbench-block" aria-labelledby="runtime-sessions-title"><h3 id="runtime-sessions-title">会话</h3><p class="runtime-overview-note">展示王国已登记角色与 Worker 长期会话。任务在推进,不代表主管会话正在调用模型;未提供运行观测时显示未知。</p><div id="runtime-sessions" class="runtime-table-scroll"></div></section>
180
+ </div>
181
+ <details class="workbench-block workbench-advanced" id="today-advanced"><summary>待处理、异常与交付</summary><div class="workbench-grid">
153
182
  <section class="workbench-block" data-priority="owner"><h3>待我处理</h3><p>仅列出已明确需要人类决定的事项。</p><div id="today-owner" class="workbench-list"></div><a class="workbench-section-link" href="#inbox">查看待我处理 →</a></section>
154
183
  <section class="workbench-block"><h3>执行异常</h3><p>说明发生了什么、由谁继续处理。</p><div id="today-exceptions" class="workbench-list"></div></section>
155
184
  <section class="workbench-block"><h3>正在推进</h3><div id="today-active" class="workbench-list"></div></section>
156
185
  <section class="workbench-block"><h3>最近交付</h3><p>呈报、主管接受与人类验收分别展示。</p><div id="today-deliveries" class="workbench-list"></div></section>
157
186
  </div>
158
187
  <section class="workbench-block" style="margin-top:18px"><h3>团队内部处理</h3><p>主管审查与返工由团队继续推进,不计入你的待办。</p><div id="today-internal" class="workbench-list"></div></section>
159
- <section class="workbench-block" style="margin-top:18px" aria-labelledby="collaboration-title"><h3 id="collaboration-title">按需协作计划</h3><p>单执行者仍是默认。需要协作时,只采纳一份分工明确的计划,由指定主执行者负责整合。</p><div id="collaboration-plans"></div><details data-read-key="collaboration:resources"><summary>当前工作区占用</summary><div id="collaboration-resources"></div></details></section>
188
+ </details>
189
+ <details class="workbench-block workbench-advanced" id="today-collaboration"><summary id="collaboration-title">协作计划与工作区占用</summary><p>单执行者仍是默认。需要协作时,由指定主执行者负责整合。</p><div id="collaboration-plans"></div><details data-read-key="collaboration:resources"><summary>当前工作区占用</summary><div id="collaboration-resources"></div></details></details>
190
+ </section>
191
+ <section id="dispatch-page" data-console-section="dispatch" data-console-page="dispatch" class="workbench-page" hidden aria-labelledby="dispatch-title">
192
+ <header class="workbench-heading"><div><p class="section-kicker">把事情交给团队</p><h2 id="dispatch-title">派发任务</h2><p>写清任务目标与所属领地,再由该领地主管指定执行者并启动。</p></div></header>
193
+ <form id="quick-task-form" class="quick-task-form"><label class="sr-only" for="quick-task-goal">任务目标</label><input id="quick-task-goal" autocomplete="off" placeholder="先写一句话目标" required><button class="primary" type="submit">填入任务草稿</button></form>
194
+ <div id="dispatch-content" class="dispatch-content"></div>
195
+ <p class="runtime-overview-note">按钮是否可用取决于打开本页的 DSH 会话身份。需要绑定或更换主管时,去<a class="workbench-section-link" href="#settings">主管设置</a>复制一句话请求,发给目标会话中的 AI。</p>
160
196
  </section>
161
197
  <section id="inbox" data-console-section="inbox" data-console-page="inbox" class="workbench-page" hidden aria-labelledby="inbox-title">
162
198
  <header class="workbench-heading"><div><p class="section-kicker">你的决定</p><h2 id="inbox-title">待我处理</h2><p>当前版本的人类治理入口仍为直接 Slash;这里帮助你找到准确事项。</p></div></header>
@@ -169,8 +205,8 @@ export const WORKBENCH_HTML = String.raw `
169
205
  <section class="workbench-block"><div id="usage-summary"></div><div id="usage-content"></div></section>
170
206
  </section>
171
207
  <section id="settings" data-console-section="settings" data-console-page="settings" class="workbench-page" hidden aria-labelledby="settings-title">
172
- <header class="workbench-heading"><div><p class="section-kicker">运行与治理</p><h2 id="settings-title">设置</h2><p>现有入口及真实操作权限;未开放的能力不会显示为可执行按钮。</p></div></header>
173
- <div class="settings-list"><section class="workbench-block"><h3>当前控制通道</h3><p>角色操作来自激活本页的合法会话,每次提交仍由宿主重新核验。</p><div id="settings-control-slot"></div><p class="hint">在已绑定角色的 DSH 会话直接输入 /kingdom gui,按宿主提供的链接重新打开本页。</p></section><section class="workbench-block"><h3>人类所有者设置</h3><p>通过短期人类管理窗口配置王国、领地、任命、权限上限与模型。先由人类在 DSH 直接激活具体管理范围,再在网页预览并提交。</p><a class="workbench-section-link" href="/owner">打开人类管理窗口 →</a><div id="settings-owner-slot"></div></section><section class="workbench-block"><h3>外观与动态效果</h3><p>顶部可选择羊皮纸、夜蓝、森林与酒红主题。人物动作沿用当前王国风格;减少动态效果跟随系统偏好。</p></section><details class="workbench-block" id="settings-advanced"><summary>高级治理记录</summary><nav class="task-detail-jump"><a href="#ledger">王国账本</a><a href="#organization">领地名册</a><a href="#executions">执行记录</a><a href="#activity">治理史册</a></nav></details></div>
208
+ <header class="workbench-heading"><div><p class="section-kicker">让会话负责领地</p><h2 id="settings-title">主管设置</h2><p>把下面的一句话发给目标 DSH 会话中的 AI,让它引导你确认绑定或更换主管。</p></div></header>
209
+ <div class="settings-list"><section class="workbench-block"><h3>各领地主管</h3><div id="settings-supervisors" class="runtime-table-scroll"></div><p class="hint">复制请求不会更改主管。到你希望担任主管的 DSH 会话发送请求,AI 会说明当前绑定并引导你确认;原生的人类确认仍需由你完成。</p></section><details class="workbench-block" id="settings-control"><summary>当前会话权限</summary><p>角色操作来自激活本页的合法会话,每次提交仍由宿主重新核验。</p><div id="settings-control-slot"></div><p class="hint">在已绑定角色的 DSH 会话输入 /kingdom gui,按宿主提供的链接重新打开本页。</p></details><details class="workbench-block" id="settings-owner"><summary>其他王国配置</summary><p>需要调整领地、权限或模型时,让当前 DSH 会话中的 AI 说明所需步骤并引导确认。</p><a class="workbench-section-link" href="/owner">打开人类管理窗口 →</a><div id="settings-owner-slot"></div></details><details class="workbench-block" id="settings-appearance"><summary>外观与动态效果</summary><p>顶部可选择羊皮纸、夜蓝、森林与酒红主题。人物动作沿用当前王国风格;减少动态效果跟随系统偏好。</p></details><details class="workbench-block" id="settings-advanced"><summary>高级记录与组织</summary><nav class="task-detail-jump"><a href="#map">王国地图</a><a href="#usage">用量</a><a href="#ledger">王国账本</a><a href="#organization">领地名册</a><a href="#executions">执行记录</a><a href="#activity">治理史册</a><a href="#tasks">任务详情</a></nav></details></div>
174
210
  </section>
175
211
  `;
176
212
  /** Injected into the existing console closure; all Host text uses append/textContent. */
@@ -217,6 +253,132 @@ export const WORKBENCH_SCRIPT = String.raw `
217
253
  if (String(task.status) === 'RUNNING' && !['STARTING', 'RUNNING', 'PAUSED'].includes(value)) return '任务处于处理中;当前没有正在运行的执行。返工决定不会自动启动下一次执行。';
218
254
  return '任务治理:' + stateDisplay(task.status) + ' · 本次执行:' + stateDisplay(value);
219
255
  };
256
+ const runtimeView = snapshot => {
257
+ const source = record(snapshot); const governance = record(source.governance);
258
+ const organization = record(record(record(source.projection).organization).data);
259
+ // Top-level bindings preserve retired history and do not expose status. The stage
260
+ // contains every exact ACTIVE binding; it must be used before listing current roles.
261
+ const activeIds = Array.isArray(source.stage) ? new Set(source.stage.map(actor => actor.bindingId).filter(Boolean)) : null;
262
+ const bindings = Array.isArray(source.bindings) ? source.bindings : [];
263
+ const territories = Array.isArray(source.territories) ? source.territories : [];
264
+ const seats = Array.isArray(organization.territories) ? organization.territories : [];
265
+ return { tasks: Array.isArray(source.tasks) ? source.tasks : [], bindings: activeIds ? bindings.filter(item => activeIds.has(item.bindingId)) : bindings,
266
+ territories, seats, roles: queueItems(workbenchData(source).roles),
267
+ seatCoverageComplete: Array.isArray(source.territories) && Array.isArray(organization.territories) && organization.territoriesTruncated !== true
268
+ && territories.every(territory => seats.some(seat => typedEntityId(seat.territoryRef, 'territory') === territory.territoryId)),
269
+ affinities: Array.isArray(governance.workerSessions) ? governance.workerSessions.filter(item => item.isCurrent === true) : [],
270
+ executions: Array.isArray(source.liveExecutions) ? source.liveExecutions : [] };
271
+ };
272
+ const runtimeTerritoryName = (view, id) => {
273
+ const territory = view.territories.find(item => item.territoryId === id);
274
+ return territory ? friendly(territory.name, '领地名称未提供') : '领地未确认';
275
+ };
276
+ const runtimeSupervisorLookup = (view, id) => {
277
+ const seat = view.seats.find(item => typedEntityId(item.territoryRef, 'territory') === id);
278
+ if (seat) return { known: true, bindingId: typedEntityId(record(seat).supervisorBindingRef, 'binding') };
279
+ const roles = view.roles.filter(role => role.roleType === 'SUPERVISOR' && view.bindings.some(binding => binding.bindingId === role.bindingId && binding.roleType === 'SUPERVISOR')
280
+ && Array.isArray(role.territories) && role.territories.some(territory => territory.territoryId === id));
281
+ return roles.length === 1 ? { known: true, bindingId: roles[0].bindingId } : { known: false, bindingId: null };
282
+ };
283
+ const runtimeSupervisorScope = (view, bindingId) => {
284
+ const role = view.roles.find(item => item.bindingId === bindingId && item.roleType === 'SUPERVISOR' && Array.isArray(item.territories));
285
+ if (role) return { known: true, territories: role.territories.map(territory => view.territories.find(item => item.territoryId === territory.territoryId) || territory) };
286
+ return { known: view.seatCoverageComplete, territories: view.territories.filter(territory => runtimeSupervisorLookup(view, territory.territoryId).bindingId === bindingId) };
287
+ };
288
+ const runtimeBindingName = (view, id) => {
289
+ const binding = view.bindings.find(item => item.bindingId === id);
290
+ return binding ? friendly(binding.roleName, '角色名称未提供') : '尚未指定或角色不可见';
291
+ };
292
+ const runtimeTable = (parent, columns, label) => {
293
+ append(parent, 'p', '左右滑动表格,可查看完整信息与操作按钮。', 'runtime-table-scroll-hint');
294
+ const table = document.createElement('table'); table.className = 'runtime-table';
295
+ if (label) append(table, 'caption', label);
296
+ const head = document.createElement('thead'); const row = document.createElement('tr');
297
+ columns.forEach(label => { const cell = append(row, 'th', label); cell.setAttribute('scope', 'col'); }); head.append(row); table.append(head);
298
+ const body = document.createElement('tbody'); table.append(body); parent.append(table); return body;
299
+ };
300
+ const runtimeLinkCell = row => { const cell = document.createElement('td'); row.append(cell); return cell; };
301
+ const addRuntimeTasks = (parent, tasks, key, scopeKnown = true) => {
302
+ if (!tasks.length) { append(parent, 'span', scopeKnown ? '暂无关联任务' : '关联任务未确认'); return; }
303
+ tasks.slice(0, 8).forEach(task => { const link = addTaskLink(parent, task.taskId, friendly(task.title, '未命名任务'), key + ':' + task.taskId); link.className = 'runtime-related-task'; });
304
+ if (tasks.length > 8) append(parent, 'small', '另有 ' + (tasks.length - 8) + ' 项,去任务详情查看。');
305
+ if (!scopeKnown) append(parent, 'small', '其他关联任务未确认;当前领地关系投影不完整。');
306
+ };
307
+ const renderRuntimeOverview = snapshot => {
308
+ const view = runtimeView(snapshot); const tasksParent = clear('runtime-tasks'); const sessionsParent = clear('runtime-sessions');
309
+ if (tasksParent) {
310
+ if (!view.tasks.length) addEmpty(tasksParent, '暂无任务。去“派发任务”填写目标并选择领地。');
311
+ else {
312
+ const body = runtimeTable(tasksParent, ['任务', '领地', '执行者', '任务状态', '本次执行'], '当前快照中的 ' + view.tasks.length + ' 个任务;点击名称查看详情。');
313
+ view.tasks.forEach(task => {
314
+ const row = document.createElement('tr'); row.setAttribute('data-runtime-task', task.taskId);
315
+ addTaskLink(runtimeLinkCell(row), task.taskId, friendly(task.title, '未命名任务'), 'runtime-task:' + task.taskId);
316
+ append(row, 'td', runtimeTerritoryName(view, task.territoryId)); append(row, 'td', runtimeBindingName(view, task.assignedBindingId));
317
+ append(row, 'td', stateDisplay(task.status)); const cell = append(row, 'td', task.latestExecution ? stateDisplay(record(task.latestExecution).state || 'UNKNOWN') : '尚无执行');
318
+ if (record(task.latestExecution).state === 'RECOVERING') append(cell, 'small', '等待主管核对,不会自动重发');
319
+ body.append(row);
320
+ });
321
+ }
322
+ }
323
+ if (!sessionsParent) return;
324
+ const rows = [];
325
+ view.bindings.forEach(binding => {
326
+ const affinities = binding.roleType === 'WORKER' ? view.affinities.filter(item => item.workerBindingId === binding.bindingId) : [];
327
+ if (affinities.length) affinities.forEach(affinity => rows.push({ binding, affinity }));
328
+ else rows.push({ binding, affinity: null });
329
+ });
330
+ view.affinities.filter(affinity => !view.bindings.some(binding => binding.bindingId === affinity.workerBindingId)).forEach(affinity => rows.push({ binding: { bindingId: affinity.workerBindingId, roleType: 'WORKER', roleName: '执行者(登记角色不可见)' }, affinity }));
331
+ if (!rows.length) { addEmpty(sessionsParent, '尚未登记角色或 Worker 长期会话。可在“主管设置”让会话引导配置。'); return; }
332
+ const body = runtimeTable(sessionsParent, ['角色名称', '绑定会话', '领地', '关联任务', '执行观察'], '仅含王国已登记角色与当前 Worker 长期会话,非平台全部会话。');
333
+ rows.forEach(({ binding, affinity }) => {
334
+ const row = document.createElement('tr'); row.setAttribute('data-runtime-binding', binding.bindingId);
335
+ if (affinity) row.setAttribute('data-runtime-affinity', affinity.affinityId);
336
+ const roleCell = append(row, 'td', friendly(binding.roleName, '角色名称未提供'));
337
+ append(roleCell, 'small', ({ CHANCELLOR: '宰相', SUPERVISOR: '领地主管', WORKER: '执行者', OWNER: '人类所有者' })[binding.roleType] || '登记角色');
338
+ const session = affinity ? affinity.sessionDisplay : binding.sessionDisplay;
339
+ const sessionCell = append(row, 'td', friendly(session, binding.sessionBound ? '已绑定(标识未提供)' : '尚未绑定'));
340
+ if (binding.roleType === 'WORKER') append(sessionCell, 'small', affinity ? '长期执行会话' : '登记会话;长期执行会话尚未建立');
341
+ const supervisorScope = binding.roleType === 'SUPERVISOR' ? runtimeSupervisorScope(view, binding.bindingId) : null;
342
+ const territories = affinity ? view.territories.filter(item => item.territoryId === affinity.territoryId)
343
+ : supervisorScope ? supervisorScope.territories
344
+ : binding.roleType === 'WORKER' ? view.territories.filter(item => view.tasks.some(task => task.territoryId === item.territoryId && task.assignedBindingId === binding.bindingId)) : [];
345
+ const territoryCell = append(row, 'td', territories.length ? territories.map(item => friendly(item.name, '领地名称未提供')).join('、') : affinity || supervisorScope && !supervisorScope.known ? '领地未确认' : binding.roleType === 'CHANCELLOR' || binding.roleType === 'OWNER' ? '王国范围' : '尚未隶属领地');
346
+ if (territories.length && supervisorScope && !supervisorScope.known) append(territoryCell, 'small', '其他领地未确认');
347
+ const tasks = view.tasks.filter(task => binding.roleType === 'WORKER' ? task.assignedBindingId === binding.bindingId && (!affinity || task.territoryId === affinity.territoryId)
348
+ : supervisorScope ? supervisorScope.territories.some(territory => territory.territoryId === task.territoryId) : binding.roleType === 'CHANCELLOR');
349
+ addRuntimeTasks(runtimeLinkCell(row), tasks, 'runtime-session-task:' + binding.bindingId + ':' + (affinity ? affinity.affinityId : 'binding'), !supervisorScope || supervisorScope.known);
350
+ // Supervisor responsibilities and task counts are not a model activity observation.
351
+ // Worker observations must identify this binding, its task and the projected session.
352
+ const executions = binding.roleType === 'WORKER' && session ? view.executions.filter(execution => execution.workerBindingId === binding.bindingId
353
+ && execution.sessionId === session && tasks.some(task => task.taskId === execution.taskId)
354
+ && ['STARTING', 'RUNNING', 'PAUSED', 'RECOVERING'].includes(execution.state)) : [];
355
+ const observed = append(row, 'td', executions.length ? '执行记录:' + Array.from(new Set(executions.map(item => stateDisplay(item.state)))).join('、') : '未知:未提供该会话的运行观测');
356
+ if (executions.length) append(observed, 'small', executions.length + ' 条关联执行;不表示模型持续生成中');
357
+ body.append(row);
358
+ });
359
+ };
360
+ const renderSupervisorSettings = snapshot => {
361
+ const parent = clear('settings-supervisors'); if (!parent) return; const view = runtimeView(snapshot);
362
+ if (!view.territories.length) { addEmpty(parent, '尚无领地。请在 DSH 会话中告诉 AI“帮我创建项目领地,并引导我设置主管”。'); return; }
363
+ const body = runtimeTable(parent, ['领地', '当前主管', '绑定会话', '交给会话处理'], null);
364
+ view.territories.forEach(territory => {
365
+ const lookup = runtimeSupervisorLookup(view, territory.territoryId); const seatKnown = lookup.known; const bindingId = lookup.bindingId;
366
+ const supervisor = view.bindings.find(item => item.bindingId === bindingId && item.roleType === 'SUPERVISOR');
367
+ const row = document.createElement('tr'); row.setAttribute('data-supervisor-territory', territory.territoryId);
368
+ append(row, 'td', friendly(territory.name, '未命名领地')); append(row, 'td', supervisor ? friendly(supervisor.roleName, '主管名称未提供') : seatKnown ? '尚未绑定可用主管' : '当前主管未确认');
369
+ append(row, 'td', supervisor ? friendly(supervisor.sessionDisplay, supervisor.sessionBound ? '已绑定(标识未提供)' : '尚未绑定会话') : seatKnown ? '尚未绑定' : '尚未确认');
370
+ const cell = runtimeLinkCell(row); const request = supervisor ? '把「' + territory.name + '」主管换成当前会话' : '让当前会话负责「' + territory.name + '」';
371
+ append(cell, 'p', request); const button = append(cell, 'button', supervisor ? '复制更换主管请求' : '复制绑定主管请求', 'refresh supervisor-request');
372
+ button.type = 'button'; button.setAttribute('data-focus-key', 'supervisor-request:' + territory.territoryId);
373
+ button.onclick = () => {
374
+ const clipboard = globalThis.navigator && globalThis.navigator.clipboard;
375
+ const succeeded = () => addCopyStatus(button, '已复制。到目标 DSH 会话发给 AI,让它引导确认。', true);
376
+ const failed = () => addCopyStatus(button, '未能复制。请选中上面的一句话,发给目标 DSH 会话中的 AI。', false);
377
+ try { if (!clipboard || typeof clipboard.writeText !== 'function') { failed(); return; } Promise.resolve(clipboard.writeText(request)).then(succeeded, failed); } catch (_) { failed(); }
378
+ };
379
+ body.append(row);
380
+ });
381
+ };
220
382
  const claimSummaryPreview = value => {
221
383
  let preview = friendly(value, '尚无呈报摘要');
222
384
  if (typeof value === 'string' && value.length <= 32768) {
@@ -568,6 +730,7 @@ export const WORKBENCH_SCRIPT = String.raw `
568
730
  };
569
731
  const renderWorkbench = snapshot => {
570
732
  const data = workbenchData(snapshot);
733
+ renderRuntimeOverview(snapshot); renderSupervisorSettings(snapshot);
571
734
  renderWorkbenchQueue('today-owner', data.ownerActions, '当前没有明确需要你处理的事项。');
572
735
  renderWorkbenchQueue('inbox-owner', data.ownerActions, '当前没有明确需要你处理的事项。主管审查与返工会在下方单独列出。');
573
736
  renderWorkbenchQueue('today-exceptions', data.exceptions, '当前没有已投影的执行异常。');
@@ -701,7 +864,7 @@ export const WORKBENCH_SCRIPT = String.raw `
701
864
  const trusted = detail && state.detailTaskId === state.selectedTaskId && record(detail.task).taskId === state.selectedTaskId ? detail : null;
702
865
  const task = trusted ? trusted.task : selectedTask();
703
866
  if (!task) { addEmpty(parent, state.selectedTaskId ? '所选任务暂不可用,请重新读取;不会改选其他任务。' : '尚无任务,先展开任务草稿,写清目标和验收。'); return; }
704
- const id = task.taskId; const back = append(parent, 'a', '← 返回' + ({ today: '今日工作台', inbox: '待我处理', overview: '王国地图', map: '王国地图', usage: '用量' }[state.taskReturnSection] || '今日工作台'), 'task-return'); back.href = '#' + (state.taskReturnSection || 'today'); back.setAttribute('data-focus-key', 'task-back');
867
+ const id = task.taskId; const back = append(parent, 'a', '← 返回' + ({ today: '运行总览', dispatch: '派发任务', settings: '主管设置', inbox: '待我处理', overview: '王国地图', map: '王国地图', usage: '用量' }[state.taskReturnSection] || '运行总览'), 'task-return'); back.href = '#' + (state.taskReturnSection || 'today'); back.setAttribute('data-focus-key', 'task-back');
705
868
  const summary = document.createElement('article'); summary.className = 'task-summary-card'; summary.setAttribute('data-read-anchor', id + ':summary'); append(summary, 'h3', task.title); append(summary, 'p', executionExplanation(task)); parent.append(summary);
706
869
  const nav = document.createElement('nav'); nav.className = 'task-detail-jump'; nav.setAttribute('aria-label', '任务内容'); ['目标与验收', '当前进展', '交付及验证', '参与者', '用量', '历史'].forEach((label, index) => { const button = append(nav, 'button', label, 'role-inspect-button'); button.type = 'button'; button.setAttribute('data-focus-key', 'detail-jump:' + index); button.onclick = () => { const target = byId('task-section-' + ['goal', 'progress', 'delivery', 'participants', 'usage', 'history'][index]); if (target) { target.tabIndex = -1; target.focus({ preventScroll: true }); target.scrollIntoView({ block: 'start' }); } }; }); parent.append(nav);
707
870
  const goal = detailSection(parent, id, 'goal', '目标与验收'); addParagraph(goal, '目标', task.title, '尚未填写'); addParagraph(goal, '范围', task.description, '尚未填写范围'); addParagraph(goal, '验收条件', task.acceptanceCriteria, '尚未填写验收条件');
@@ -755,12 +918,18 @@ export const WORKBENCH_SCRIPT = String.raw `
755
918
  const mountWorkbench = () => {
756
919
  const tasks = byId('tasks'); const zones = document.querySelector('.zones'); if (tasks && zones) { tasks.setAttribute('data-console-page', 'tasks'); tasks.hidden = true; zones.append(tasks); }
757
920
  const management = byId('management'); if (management) management.setAttribute('data-console-page', 'legacy-management');
758
- const composer = document.querySelector('.task-composer-card'); if (composer && tasks) { const draft = document.createElement('details'); draft.id = 'task-draft-panel'; draft.className = 'task-draft-panel'; append(draft, 'summary', '新建任务 · 编辑草稿'); draft.append(composer); tasks.insertBefore(draft, tasks.firstChild); }
921
+ const dispatch = byId('dispatch-content'); const composer = document.querySelector('.task-composer-card');
922
+ if (composer && dispatch) { const draft = document.createElement('details'); draft.id = 'task-draft-panel'; draft.className = 'task-draft-panel'; draft.open = true; append(draft, 'summary', '1. 写清任务与领地'); draft.append(composer); dispatch.append(draft); }
923
+ [['assign-form', '2. 指定执行者'], ['start-form', '3. 启动执行']].forEach(([id, title]) => {
924
+ const form = byId(id); if (!form || !dispatch) return; const oldWrapper = form.closest('details');
925
+ const section = document.createElement('section'); section.className = 'dispatch-step'; append(section, 'h3', title); section.append(form); dispatch.append(section);
926
+ if (oldWrapper) oldWrapper.remove();
927
+ });
759
928
  const actionDock = byId('operation-forms'); const detailParent = byId('task-detail-content'); if (actionDock && detailParent) { actionDock.classList.add('task-actions-inline'); detailParent.parentElement.append(actionDock); }
760
929
  const capability = document.querySelector('.capability-card'); if (capability) byId('settings-control-slot').append(capability);
761
930
  const owner = document.querySelector('.owner-management'); if (owner) { owner.querySelectorAll('.owner-actions').forEach(node => node.remove()); byId('settings-owner-slot').append(owner); }
762
931
  const overview = byId('overview'); const grid = overview && overview.querySelector('.council-grid'); if (grid) { grid.classList.add('role-workbench-layout'); const inspector = document.createElement('aside'); inspector.id = 'role-inspector'; inspector.className = 'role-inspector'; inspector.hidden = true; inspector.tabIndex = -1; inspector.setAttribute('aria-label', '角色职责与任务'); const close = append(inspector, 'button', '关闭角色侧栏', 'refresh'); close.type = 'button'; close.onclick = () => { const roleId = state.selectedRoleId; state.selectedRoleId = ''; inspector.hidden = true; const original = Array.from(document.querySelectorAll('[data-focus-key]')).find(node => node.getAttribute('data-focus-key') === 'role:' + roleId); if (original) original.focus(); }; const content = document.createElement('div'); content.id = 'role-inspector-content'; inspector.append(content); grid.append(inspector); }
763
- const quick = byId('quick-task-form'); if (quick) quick.addEventListener('submit', event => { event.preventDefault(); const goal = String(byId('quick-task-goal').value || '').trim(); if (!goal) return; const title = byId('task-title'); if (!stageWorkbenchGoal(goal)) status('已有未提交草稿,请在任务页继续编辑。新目标保留在工作台输入框中。', 'neutral'); else status('草稿尚未提交,请补充范围和验收条件。', 'neutral'); history.pushState(null, '', '#tasks'); applyNavigationFromLocation(false); const draft = byId('task-draft-panel'); if (draft) { draft.open = true; readerDetails.set(draft.id, true); } if (title) { title.focus(); title.scrollIntoView({ block: 'center' }); } });
932
+ const quick = byId('quick-task-form'); if (quick) quick.addEventListener('submit', event => { event.preventDefault(); const goal = String(byId('quick-task-goal').value || '').trim(); if (!goal) return; const title = byId('task-title'); if (!stageWorkbenchGoal(goal)) status('已有未提交草稿,请继续编辑。新目标保留在输入框中。', 'neutral'); else status('草稿尚未提交,请补充范围和验收条件。', 'neutral'); history.pushState(null, '', '#dispatch'); applyNavigationFromLocation(false); const draft = byId('task-draft-panel'); if (draft) { draft.open = true; readerDetails.set(draft.id, true); } if (title) { title.focus(); title.scrollIntoView({ block: 'center' }); } });
764
933
  const refresh = byId('workbench-refresh'); if (refresh) refresh.onclick = () => { void load(false); };
765
934
  const territory = byId('task-territory'); if (territory) territory.addEventListener('change', () => { state.selectedTerritoryId = territory.value; const chip = byId('task-territory-chip'); if (chip) chip.hidden = true; });
766
935
  document.addEventListener('click', event => { const target = event.target && typeof event.target.closest === 'function' ? event.target.closest('a[href]') : null; if (target && String(target.getAttribute('href') || '').startsWith('#task=') && state.activeSection !== 'tasks') state.taskReturnSection = state.activeSection === 'overview' ? 'map' : state.activeSection; });
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-ui.js","sourceRoot":"","sources":["../../src/gui/workbench-ui.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiJtC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BvC,CAAC;AAEF,yFAAyF;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAilBzC,CAAC"}
1
+ {"version":3,"file":"workbench-ui.js","sourceRoot":"","sources":["../../src/gui/workbench-ui.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2KtC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCvC,CAAC;AAEF,yFAAyF;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAstBzC,CAAC"}