@lemoncat7/dsh-partner 1.8.3 → 1.9.2

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 (102) hide show
  1. package/README.md +25 -1
  2. package/docs/architecture.md +87 -1
  3. package/lib/agent-runtime.d.ts +8 -0
  4. package/lib/agent-runtime.d.ts.map +1 -1
  5. package/lib/agent-runtime.js +71 -4
  6. package/lib/agent-runtime.js.map +1 -1
  7. package/lib/api.js +13 -31
  8. package/lib/api.js.map +1 -1
  9. package/lib/channels/delivery-policy.d.ts +7 -0
  10. package/lib/channels/delivery-policy.d.ts.map +1 -0
  11. package/lib/channels/delivery-policy.js +47 -0
  12. package/lib/channels/delivery-policy.js.map +1 -0
  13. package/lib/channels/manager.d.ts +1 -2
  14. package/lib/channels/manager.d.ts.map +1 -1
  15. package/lib/channels/manager.js +5 -9
  16. package/lib/channels/manager.js.map +1 -1
  17. package/lib/client-api.d.ts +1 -0
  18. package/lib/client-api.d.ts.map +1 -1
  19. package/lib/client-api.js.map +1 -1
  20. package/lib/client.js +1146 -1040
  21. package/lib/client.js.map +4 -4
  22. package/lib/collaboration/composition.d.ts.map +1 -1
  23. package/lib/collaboration/composition.js +24 -8
  24. package/lib/collaboration/composition.js.map +1 -1
  25. package/lib/collaboration/service.d.ts +4 -0
  26. package/lib/collaboration/service.d.ts.map +1 -1
  27. package/lib/collaboration/service.js +109 -35
  28. package/lib/collaboration/service.js.map +1 -1
  29. package/lib/collaboration/task-dispatch.d.ts +18 -0
  30. package/lib/collaboration/task-dispatch.d.ts.map +1 -0
  31. package/lib/collaboration/task-dispatch.js +44 -0
  32. package/lib/collaboration/task-dispatch.js.map +1 -0
  33. package/lib/collaboration/task-recovery.d.ts +8 -0
  34. package/lib/collaboration/task-recovery.d.ts.map +1 -0
  35. package/lib/collaboration/task-recovery.js +30 -0
  36. package/lib/collaboration/task-recovery.js.map +1 -0
  37. package/lib/companions/directory-cleanup.d.ts +4 -0
  38. package/lib/companions/directory-cleanup.d.ts.map +1 -0
  39. package/lib/companions/directory-cleanup.js +77 -0
  40. package/lib/companions/directory-cleanup.js.map +1 -0
  41. package/lib/companions/removal.d.ts +20 -0
  42. package/lib/companions/removal.d.ts.map +1 -0
  43. package/lib/companions/removal.js +84 -0
  44. package/lib/companions/removal.js.map +1 -0
  45. package/lib/companions/service.d.ts +3 -0
  46. package/lib/companions/service.d.ts.map +1 -1
  47. package/lib/companions/service.js +4 -0
  48. package/lib/companions/service.js.map +1 -1
  49. package/lib/companions/session-configuration.js +1 -1
  50. package/lib/companions/session-configuration.js.map +1 -1
  51. package/lib/companions/workspace-cleanup.d.ts +4 -0
  52. package/lib/companions/workspace-cleanup.d.ts.map +1 -0
  53. package/lib/companions/workspace-cleanup.js +37 -0
  54. package/lib/companions/workspace-cleanup.js.map +1 -0
  55. package/lib/daily-review.d.ts +1 -0
  56. package/lib/daily-review.d.ts.map +1 -1
  57. package/lib/daily-review.js +3 -0
  58. package/lib/daily-review.js.map +1 -1
  59. package/lib/execution/service.d.ts.map +1 -1
  60. package/lib/execution/service.js +2 -0
  61. package/lib/execution/service.js.map +1 -1
  62. package/lib/heartbeat.d.ts +1 -0
  63. package/lib/heartbeat.d.ts.map +1 -1
  64. package/lib/heartbeat.js +3 -0
  65. package/lib/heartbeat.js.map +1 -1
  66. package/lib/index.d.ts.map +1 -1
  67. package/lib/index.js +4 -9
  68. package/lib/index.js.map +1 -1
  69. package/lib/skills/builtin.d.ts.map +1 -1
  70. package/lib/skills/builtin.js +3 -2
  71. package/lib/skills/builtin.js.map +1 -1
  72. package/lib/skills/service.js +1 -1
  73. package/lib/skills/service.js.map +1 -1
  74. package/lib/skills/task-planning.d.ts +3 -0
  75. package/lib/skills/task-planning.d.ts.map +1 -0
  76. package/lib/skills/task-planning.js +31 -0
  77. package/lib/skills/task-planning.js.map +1 -0
  78. package/lib/store.d.ts +3 -0
  79. package/lib/store.d.ts.map +1 -1
  80. package/lib/store.js +8 -0
  81. package/lib/store.js.map +1 -1
  82. package/lib/tasks/domain.d.ts +2 -0
  83. package/lib/tasks/domain.d.ts.map +1 -1
  84. package/lib/tasks/progress-notifier.d.ts +4 -0
  85. package/lib/tasks/progress-notifier.d.ts.map +1 -0
  86. package/lib/tasks/progress-notifier.js +20 -0
  87. package/lib/tasks/progress-notifier.js.map +1 -0
  88. package/lib/tasks/service.d.ts.map +1 -1
  89. package/lib/tasks/service.js +22 -2
  90. package/lib/tasks/service.js.map +1 -1
  91. package/lib/ui/identity-editor.d.ts +11 -0
  92. package/lib/ui/identity-editor.d.ts.map +1 -0
  93. package/lib/ui/identity-editor.js +78 -0
  94. package/lib/ui/identity-editor.js.map +1 -0
  95. package/lib/ui/task-board-panel.d.ts.map +1 -1
  96. package/lib/ui/task-board-panel.js +15 -10
  97. package/lib/ui/task-board-panel.js.map +1 -1
  98. package/lib/ui/task-board-stage.d.ts +12 -0
  99. package/lib/ui/task-board-stage.d.ts.map +1 -0
  100. package/lib/ui/task-board-stage.js +13 -0
  101. package/lib/ui/task-board-stage.js.map +1 -0
  102. package/package.json +1 -1
package/README.md CHANGED
@@ -6,7 +6,31 @@
6
6
 
7
7
  ## 兼容性
8
8
 
9
- 正式版 `1.8.3` 适配 DeepSeek Harness `0.1.2-rc.1`,需要 Node.js `22.19+` 或 `24+`。DSH 官方 Agent、Session、Settings、Tools 与客户端 UI 依赖均锁定到 `0.1.2-rc.1` 接口族。
9
+ 正式版 `1.9.2` 适配 DeepSeek Harness `0.1.2-rc.1`,需要 Node.js `22.19+` 或 `24+`。DSH 官方 Agent、Session、Settings、Tools 与客户端 UI 依赖均锁定到 `0.1.2-rc.1` 接口族。
10
+
11
+ ### 1.9.2 修复:中断后的待验收任务恢复
12
+
13
+ - 执行伙伴提前标记待验收、但尚未提交结果时,服务重启或暂时网络故障后可继续恢复交付,不再误取消执行。
14
+ - 对已被旧调度器误取消的记录,校验停止记录、负责人、当前授权和是否有更新的执行后定向恢复;有结果、已验收、正常取消或已结束的任务不会因此重跑。
15
+ - 启动时先注册结果通知再启动恢复队列,避免快速完成的恢复任务漏发通知;恢复前仍检查依赖和并发限制。
16
+ - 渠道只保留创建后的分工确认与验收通过后的最终交付;核验、重试、accept 等内部回调静默,自动目标续轮也不能绕过过滤。真正受阻时仍可请求用户介入,用户主动询问进度仍正常回答。
17
+ - 已保存的最终结果先投递渠道,再创建内部进度回调,二者错误独立记录。搭配知识库 `2.6.0` 的持久化回写队列,会话结束只等待快照入队,不等待知识提取或写入完成;回写失败在原回答下单独重试,不重发渠道消息。
18
+
19
+ ### 1.9.1 更新:伙伴删除与目录清理
20
+
21
+ - 删除确认绑定当前伙伴,切换伙伴时重置;删除中防止重复操作,成功返回总览,不再把下一位伙伴置于删除确认状态。
22
+ - 页面明确确认后,移除伙伴专属 `partners/<id>` 目录及文件、工作区注册和关联配置;共享目录、链接根目录与挂载点拒绝自动清理,不扫描历史遗留目录。
23
+ - 删除期间阻止新会话、后台任务与执行队列重新占用目录;运行中的伙伴、已绑定渠道与最后一个伙伴受到保护,清理失败保留身份供重试。
24
+ - DSH 当前公开接口不支持永久清理全局原始会话日志,因此这些日志仍保留;目录删除不是跨存储事务,文件删除失败时可能已有部分文件被移除。
25
+ - 180 项自动化测试及手机、横屏、桌面深浅色共 6 组隔离交互验证通过。
26
+
27
+ ### 1.9.0 更新:主动任务拆解与执行
28
+
29
+ - 匹配已启用的拆解 Skill 和授权伙伴专长时,主动拆分真实交付物、安排负责人及依赖,不要求用户反复说“使用 Skill”或逐个 @;简单问答和明确只规划的请求不自动执行。
30
+ - 工具创建任务并指定负责人后默认提交执行;前置任务验收通过后,后续任务自动接续。支持 `autoRun=false` 仅规划;已有历史任务不会因为升级突然启动。
31
+ - 执行队列持久化、重复提交去重、启动前复核授权,最多三个任务执行并发;提交后先返回分工摘要,不阻塞等待所有结果。
32
+ - 看板改为阶段内横向卡片排列、按需展开与整页滚动,移动端使用紧凑筛选栏,保留现有配色。
33
+ - 169 项自动化测试通过;60 条任务的隔离浏览器检查覆盖手机、横屏与桌面、深浅色共 6 组场景,包括筛选、展开、详情和提交模式。
10
34
 
11
35
  ### 1.8.3 更新
12
36
 
@@ -12,6 +12,13 @@ client -> HTTP feature routers -> application services -> repositories/store
12
12
 
13
13
  ## Module boundaries
14
14
 
15
+ `tasks/progress-notifier.ts` orders persisted final-result delivery before internal
16
+ agent follow-ups, with separate error boundaries. Knowledge 2.6.0 owns durable
17
+ writeback snapshots, plans, retries and status; Partner does not copy its queue or
18
+ patch the DSH loop. Channel results do not wait for extraction. Retrying writeback
19
+ does not rerun the partner's turn or resend its channel message. This does not
20
+ make channel delivery and knowledge writes one atomic transaction.
21
+
15
22
  Configuration saves only commit state. The awaited `agent/pre-step` hook compares
16
23
  the saved configuration with the installed revision before each new turn, covering
17
24
  native history resume as well as local, channel and task-board conversations.
@@ -135,8 +142,87 @@ form and save feedback, using the shared companion draft and existing UI tokens.
135
142
  receives only A's granted directory and the service checks the same edge
136
143
  again at execution time. User-initiated board delegation is a separate actor
137
144
  and may target any created companion without impersonating another partner.
138
- - Delegation depth is bounded and self-delegation is rejected.
145
+ - A companion may submit its own assigned stage without a cross-companion
146
+ grant. Other-companion execution always requires the directed grant above;
147
+ assigned-stage instructions forbid recreating the same work recursively.
139
148
  - Scheduled jobs default to non-overlapping execution and a disposable session.
149
+
150
+ ## Companion deletion safety
151
+
152
+ - `companions/removal.ts` serializes removals, binds each operation to one ID,
153
+ blocks active work/last-companion deletion, and keeps the identity retryable
154
+ if directory cleanup fails. An in-memory removal guard prevents new partner
155
+ sessions, task claims, heartbeat and daily-review work during deletion.
156
+ - `companions/directory-cleanup.ts` derives only `<defaultCwd>/partners/<id>`;
157
+ it rejects traversal, shared/nested workspace paths, symlinked roots and
158
+ mounted volumes. Nested symlinks are removed without following their targets.
159
+ Filesystem cleanup finishes before deleting identity. This is not a cross-store
160
+ transaction: a failed filesystem deletion can have removed some files, and a
161
+ later state-write failure leaves the identity available for retry.
162
+ - The identity editor sends `DELETE ...?removeFiles=1` only after a named
163
+ confirmation describing permanent deletion. Older callers without this flag
164
+ retain file-preserving behavior. Neither path scans historical orphan folders
165
+ nor purges DSH's global session persistence; the current host has no supported
166
+ permanent session-log deletion API. `workspace-cleanup.ts` removes only the
167
+ dedicated workspace registration through the public host API.
168
+ - `ui/identity-editor.tsx` isolates confirmation and async feedback per companion,
169
+ prevents duplicate clicks and returns the selected deletion to the overview.
170
+ `test/companion-removal.test.mjs` and `scripts/verify-companion-removal.mjs`
171
+ use disposable fixtures; physical deletion never runs against live user data
172
+ as part of these regression tests.
173
+
174
+ ## Proactive planning and durable task dispatch
175
+
176
+ - `collaboration/task-recovery.ts` distinguishes an early review status from a
177
+ committed deliverable. Previously started task delegations may resume an empty
178
+ review after interruption, subject to assignment, access, dependency and
179
+ concurrency checks. Saved results/reviews are never rerun through this path.
180
+ Startup repairs only known coordinator cancellations, with shutdown evidence
181
+ for the status-mismatch bug and no superseding task delegation. Arbitrary user
182
+ cancellations are not revived. Result notification is wired before recovery
183
+ starts claiming work.
184
+ - `channels/delivery-policy.ts` keeps internal task/review continuations out of
185
+ channel replies, including nested goal completion notices. User-origin turns
186
+ retain creation acknowledgments and explicit progress answers. Accepted task
187
+ results use the separate deterministic delivery path and persistent receipts;
188
+ intermediate execution/review notices are not additional channel messages.
189
+ - `skills/task-planning.ts` owns the built-in planning instructions (1.2.0).
190
+ Matching multi-deliverable requests proactively use enabled Skills and the
191
+ authorized directory's stable IDs, roles, descriptions and Skill names.
192
+ Inline Skills are already injected and do not require a redundant load call.
193
+ Simple answers and explicit discussion/planning-only requests do not launch
194
+ work. This is a model instruction contract, not a guarantee of model choices.
195
+ - `collaboration/composition.ts` maps assigned tool-created tasks to explicit
196
+ `autoRun` intent by default; `autoRun=false` or explicit backlog preserves
197
+ planning-only behavior. The board creation form exposes the same choice.
198
+ The storage service itself defaults to planning-only, so legacy records and
199
+ other callers do not silently acquire execution permission after an upgrade.
200
+ - `tasks/service.ts` persists intent and validates task state/dependencies.
201
+ `collaboration/task-dispatch.ts` owns pure eligibility, authorization and
202
+ bounded-queue helpers. `collaboration/service.ts` uses its existing recovery
203
+ timer to enroll intent and claim work atomically, with at most three running
204
+ delegations. No additional polling loop or external queue is introduced.
205
+ - Assignment plus explicit delegation commits atomically. Repeat submissions
206
+ of the same task to the same pending executor return that job, not another
207
+ execution. Missing or unaccepted dependencies prevent execution; all
208
+ prerequisites must be `done` after acceptance before downstream work starts.
209
+ Accepted prerequisite summaries enter the executor prompt with bounded size.
210
+ - The scheduler rechecks directed grants, executor identity and current task
211
+ state before claiming and again checks authorization before execution.
212
+ Queued/running jobs are never evicted to retain terminal history. Switching
213
+ to planning-only cancels waiting task jobs, not already-running work or review.
214
+ Restart recovery retains submission intent; old tasks without `autoRun=true`
215
+ are not enrolled automatically. Submission returns without awaiting results.
216
+ - `ui/task-board-stage.tsx` owns stage collapse and progressive disclosure:
217
+ six cards initially per stage (twelve when focused), then twelve per expansion.
218
+ Responsive horizontal card grids share the page scroll instead of fixed-height
219
+ nested scrollboxes. Mobile uses compact stage/assignee filters. Existing
220
+ semantic colors and dialogs are retained without new card animations.
221
+ - Regression coverage: `test/task-dispatch.test.mjs` exercises real storage,
222
+ composition tools, dependency chains, restart intent, idempotency, concurrency
223
+ and permission changes. `scripts/verify-task-board.mjs` tests the actual panel
224
+ with isolated fixtures across phone, landscape and desktop in both themes.
225
+
140
226
  ## 主界面挂饰与消息
141
227
 
142
228
  - `pendant/frame-loop.ts` 独立负责可选 24/30/60 FPS 绘制调度(默认 30,旧配置自动兼容):定时器临近截止时间再进入 RAF,保留非整除刷新率的小数节奏,高频输入合并唤醒;运行时切换只重排唯一待执行回调,不重建 WebGL/物理场景,休眠中切换不启动循环。隐藏/卸载取消计时器和 RAF。物理仍以 120 Hz 固定小步推进,停顿后不追赶后台时间。握持状态不再强制常驻循环,绳子平稳后可休眠,保持弹簧位置和储能,移动/松手重新唤醒。
@@ -70,6 +70,8 @@ export declare class PartnerAgentRuntime {
70
70
  private readonly disposeConfigurationListener;
71
71
  private readonly configurations;
72
72
  private readonly preparedTurns;
73
+ private readonly observationJobs;
74
+ private readonly agentSetupJobs;
73
75
  private closed;
74
76
  private questionAnswerer;
75
77
  constructor(ctx: RuntimeContext, store: PartnerStore, defaultCwd: string, memory?: PartnerMemoryStore | undefined, reflection?: MemoryReflectionService | undefined, concerns?: PartnerConcernStore | undefined, composer?: PartnerAgentComposer | undefined);
@@ -99,11 +101,16 @@ export declare class PartnerAgentRuntime {
99
101
  concernSources(companion: Companion, query?: string): Promise<ConcernSource[]>;
100
102
  private runHeartbeatWhenIdle;
101
103
  observeSessionEvent(session: Session, event: SessionEvent): Promise<void>;
104
+ private processSessionEvent;
102
105
  recordConcernCreatedNotice(companion: Companion, scopeId: string, concerns: PartnerConcern[]): Promise<boolean>;
103
106
  private driveScopedHeartbeat;
104
107
  private driveEphemeralHeartbeat;
105
108
  recordHeartbeatActivity(companion: Companion, route: ChannelSession, execution: HeartbeatExecution, outcome: HeartbeatOutcome, deliveryError?: string): Promise<void>;
106
109
  resetCompanion(companionId: string): Promise<void>;
110
+ removeCompanionWorkspace(companionId: string): Promise<void>;
111
+ private sharedDirectoryPaths;
112
+ validateCompanionDirectory(companionId: string): Promise<void>;
113
+ removeCompanionDirectory(companionId: string): Promise<void>;
107
114
  reloadCompanion(companionId: string): Promise<void>;
108
115
  /** Awaited by the host before prompt/tool assembly, never from a running tool. */
109
116
  prepareAgentTurn(agent: Agent, turn: number, signal: AbortSignal): Promise<void>;
@@ -116,6 +123,7 @@ export declare class PartnerAgentRuntime {
116
123
  private persistInbound;
117
124
  private ensureSession;
118
125
  private ensureAgent;
126
+ private ensureAgentReady;
119
127
  private composeRestoredAgent;
120
128
  private injectProfileUpdate;
121
129
  private attachSession;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ import { basename, extname, isAbsolute, join, relative, resolve, sep } from 'nod
4
4
  import { BlockAssembler, createToolResultMessage, createUserMessage } from '@deepseek-ai/dsh-llm';
5
5
  import { createScope, scopeOf, scopeParentOf } from '@deepseek-ai/dsh-scope';
6
6
  import { SessionConfigurationIndex } from './companions/session-configuration.js';
7
+ import { removeOwnedWorkspace } from './companions/workspace-cleanup.js';
8
+ import { assertOwnedDirectory, removeOwnedDirectory } from './companions/directory-cleanup.js';
7
9
  import { concernObservationPrompt } from './autonomy.js';
8
10
  import { boundedConcernCheckMinutes } from './concern-domain.js';
9
11
  import { PARTNER_MEDIA_MAX_BYTES, safeMediaName } from './channel-message.js';
@@ -11,6 +13,7 @@ import { listConcernFileSources } from './concern-sources.js';
11
13
  import { CONCERN_CREATED_NOTICE, renderConcernCreatedNotice } from './concern-notification.js';
12
14
  import { HEARTBEAT_LOCAL_COMMAND, heartbeatLocalCommandTool } from './heartbeat-command.js';
13
15
  import { assistantTextAfter, renderPartnerPersona, renderToolProtocol, resolvePartnerAgentOptions as resolveAgentOptions } from './execution/agent-support.js';
16
+ import { channelReplyTextAfter } from './channels/delivery-policy.js';
14
17
  export { renderToolProtocol, resolvePartnerAgentOptions as resolveAgentOptions } from './execution/agent-support.js';
15
18
  const HEARTBEAT_TIMEOUT_MS = 115_000;
16
19
  const HEARTBEAT_DISCOVERY_BUDGET_MS = 72_000;
@@ -58,6 +61,8 @@ export class PartnerAgentRuntime {
58
61
  disposeConfigurationListener;
59
62
  configurations;
60
63
  preparedTurns = new WeakMap();
64
+ observationJobs = new Map();
65
+ agentSetupJobs = new Map();
61
66
  closed = false;
62
67
  questionAnswerer;
63
68
  constructor(ctx, store, defaultCwd, memory, reflection, concerns, composer) {
@@ -157,6 +162,8 @@ export class PartnerAgentRuntime {
157
162
  return route;
158
163
  }
159
164
  async ensureLocalSessionRecord(companionId) {
165
+ if (this.store.isCompanionRemoving(companionId))
166
+ throw new Error('伙伴正在删除,不能创建会话');
160
167
  const companion = this.store.snapshot().companions.find(item => item.id === companionId);
161
168
  if (companion === undefined)
162
169
  throw new Error('伙伴身份不存在');
@@ -176,6 +183,8 @@ export class PartnerAgentRuntime {
176
183
  lastMessageAt: now,
177
184
  };
178
185
  await this.store.update(state => {
186
+ if (this.store.isCompanionRemoving(companion.id) || !state.companions.some(item => item.id === companion.id))
187
+ throw new Error('伙伴正在删除或已不存在');
179
188
  state.sessions = state.sessions.filter(item => !(item.companionId === companion.id && item.kind === 'local'));
180
189
  state.sessions.push(route);
181
190
  });
@@ -203,9 +212,9 @@ export class PartnerAgentRuntime {
203
212
  const agent = await this.ensureAgent(companion, route);
204
213
  const isReviewer = task.status === 'review' && task.reviewerCompanionId === companion.id;
205
214
  const instruction = isReviewer
206
- ? '这是你创建并分配的看板任务,执行伙伴已提交结果,现在默认由你验收。请根据任务要求真实核验已有产出;通过后必须调用 partner_task_board accept,不通过则调用 reject 并写明原因。不要重新执行该任务。'
215
+ ? '这是伙伴内部验收,不是用户的新消息。执行伙伴已提交结果,现在默认由你验收。请根据任务要求真实核验已有产出;通过后必须调用 partner_task_board accept,不通过则调用 reject 并写明原因。不要重新执行该任务,不要向用户播报核验过程或 accept 操作;最终结果由系统直接投递。'
207
216
  : task.status === 'review'
208
- ? '这是你创建并分配的看板任务进度事件。执行结果已提交并等待指定伙伴验收;不要重新执行,请向用户简要说明当前进度。'
217
+ ? '这是伙伴内部进度事件。执行结果已提交并等待指定伙伴验收;不要重新执行,也不要向用户播报中间进度。只在看板中推进必要的协作,最终结果由系统直接投递。'
209
218
  : task.status === 'done'
210
219
  ? '这是你创建并分配的看板任务终态事件。不要重新执行已完成的工作。请检查依赖它的后续任务是否解锁,需要时继续在看板上分配。对用户的终态结果由系统直接投递,不要只改写成“已完成”或进度摘要。'
211
220
  : '这是你创建并分配的看板任务受阻事件。请保留已有产出、检查是否能调整分工或解锁依赖;需要用户介入时,明确说明阻塞原因与所需动作。';
@@ -376,6 +385,25 @@ export class PartnerAgentRuntime {
376
385
  }
377
386
  }
378
387
  async observeSessionEvent(session, event) {
388
+ if (event.type !== 'turn/end' || event.data.reason.kind !== 'completed')
389
+ return;
390
+ const route = this.store.snapshot().sessions.find(item => item.sessionId === session.id);
391
+ if (!route || this.store.isCompanionRemoving(route.companionId))
392
+ return;
393
+ const id = route.companionId;
394
+ this.observationJobs.set(id, (this.observationJobs.get(id) ?? 0) + 1);
395
+ try {
396
+ await this.processSessionEvent(session, event);
397
+ }
398
+ finally {
399
+ const left = (this.observationJobs.get(id) ?? 1) - 1;
400
+ if (left)
401
+ this.observationJobs.set(id, left);
402
+ else
403
+ this.observationJobs.delete(id);
404
+ }
405
+ }
406
+ async processSessionEvent(session, event) {
379
407
  if (event.type !== 'turn/end' || event.data.reason.kind !== 'completed')
380
408
  return;
381
409
  const route = this.store.snapshot().sessions.find(item => item.sessionId === session.id);
@@ -488,6 +516,27 @@ export class PartnerAgentRuntime {
488
516
  await this.releaseCompanion(companionId);
489
517
  await this.store.update(state => { state.sessions = state.sessions.filter(item => item.companionId !== companionId); });
490
518
  }
519
+ async removeCompanionWorkspace(companionId) {
520
+ const cwd = partnerCwd(this.defaultCwd, companionId);
521
+ const sharedPaths = this.store.snapshot().sessions.filter(route => route.companionId !== companionId).map(route => route.cwd ?? this.defaultCwd);
522
+ await removeOwnedWorkspace(this.ctx.workspaceRegistry, cwd, companionId, sharedPaths);
523
+ this.workspaces.delete(cwd);
524
+ }
525
+ sharedDirectoryPaths(companionId) {
526
+ const state = this.store.snapshot();
527
+ const cwd = resolve(partnerCwd(this.defaultCwd, companionId));
528
+ return [
529
+ ...state.companions.filter(item => item.id !== companionId).map(item => partnerCwd(this.defaultCwd, item.id)),
530
+ ...state.sessions.filter(route => route.companionId !== companionId).map(route => route.cwd ?? this.defaultCwd),
531
+ ...this.ctx.workspaceRegistry.list().filter(item => resolve(item.path) !== cwd).map(item => item.path),
532
+ ];
533
+ }
534
+ async validateCompanionDirectory(companionId) {
535
+ await assertOwnedDirectory(this.defaultCwd, companionId, this.sharedDirectoryPaths(companionId));
536
+ }
537
+ async removeCompanionDirectory(companionId) {
538
+ await removeOwnedDirectory(this.defaultCwd, companionId, this.sharedDirectoryPaths(companionId));
539
+ }
491
540
  async reloadCompanion(companionId) {
492
541
  // Compatibility for callers that saved a configuration. The index already
493
542
  // observes committed writes; do not tear down or wake any Agent here.
@@ -503,6 +552,8 @@ export class PartnerAgentRuntime {
503
552
  const configuration = this.configurations.forSession(agent.session.id);
504
553
  if (!configuration)
505
554
  return;
555
+ if (this.store.isCompanionRemoving(configuration.companion.id))
556
+ throw new Error('伙伴正在删除,不能启动新轮次');
506
557
  signal.throwIfAborted();
507
558
  const installed = this.restoredCompositions.get(agent.session.id);
508
559
  if (installed?.agent !== agent || installed.revision !== configuration.revision) {
@@ -523,7 +574,7 @@ export class PartnerAgentRuntime {
523
574
  this.preparedTurns.set(agent, turn);
524
575
  }
525
576
  isCompanionBusy(companionId) {
526
- return this.store.snapshot().sessions.some(route => route.companionId === companionId
577
+ return this.observationJobs.has(companionId) || this.agentSetupJobs.has(companionId) || this.store.snapshot().sessions.some(route => route.companionId === companionId
527
578
  && (this.handles.get(route.sessionId)?.agent ?? this.ctx.agents.get(route.sessionId))?.status === 'running');
528
579
  }
529
580
  async releaseCompanion(companionId) {
@@ -599,7 +650,7 @@ export class PartnerAgentRuntime {
599
650
  source: { kind: 'user' },
600
651
  }));
601
652
  await agent.whenIdle();
602
- const response = assistantTextAfter(agent, startSeq);
653
+ const response = channelReplyTextAfter(agent.session.snapshotEvents(), startSeq);
603
654
  await this.store.update(state => {
604
655
  const target = state.sessions.find(item => item.id === session.id);
605
656
  if (target)
@@ -659,6 +710,22 @@ export class PartnerAgentRuntime {
659
710
  return session;
660
711
  }
661
712
  async ensureAgent(companion, route) {
713
+ if (this.store.isCompanionRemoving(companion.id) || !this.store.snapshot().companions.some(item => item.id === companion.id))
714
+ throw new Error('伙伴正在删除或已不存在');
715
+ const id = companion.id;
716
+ this.agentSetupJobs.set(id, (this.agentSetupJobs.get(id) ?? 0) + 1);
717
+ try {
718
+ return await this.ensureAgentReady(companion, route);
719
+ }
720
+ finally {
721
+ const left = (this.agentSetupJobs.get(id) ?? 1) - 1;
722
+ if (left)
723
+ this.agentSetupJobs.set(id, left);
724
+ else
725
+ this.agentSetupJobs.delete(id);
726
+ }
727
+ }
728
+ async ensureAgentReady(companion, route) {
662
729
  const cwd = route.cwd ?? this.defaultCwd;
663
730
  await mkdir(cwd, { recursive: true, mode: 0o700 });
664
731
  const profile = await this.memory?.profileSnapshot(companion.id, memoryScope(route.channelId, route.userId)).catch(() => undefined);