@zhushanwen/subagent-core 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-4KN4TTG7.js → chunk-43ONBFZX.js} +1 -1
- package/dist/{chunk-X7SZ5HLQ.js → chunk-V3VHZ2VX.js} +20 -27
- package/dist/execution/engine/engines/zcode/constants.cjs +29 -41
- package/dist/execution/engine/engines/zcode/constants.d.cts +65 -53
- package/dist/execution/engine/engines/zcode/constants.d.ts +65 -53
- package/dist/execution/engine/engines/zcode/constants.js +17 -27
- package/dist/execution/engine/engines/zcode/reader.d.cts +2 -1
- package/dist/execution/engine/engines/zcode/reader.d.ts +2 -1
- package/dist/execution/engine/engines/zcode/reader.js +2 -2
- package/dist/index.cjs +16418 -14070
- package/dist/index.d.cts +5136 -4016
- package/dist/index.d.ts +5136 -4016
- package/dist/index.js +16343 -14048
- package/dist/{types-DpUO16pj.d.cts → types-Dv4QhSJ_.d.cts} +215 -112
- package/dist/{types-DpUO16pj.d.ts → types-Dv4QhSJ_.d.ts} +215 -112
- package/package.json +3 -3
- package/src/__tests__/agent-opts-resolver-schema-prompt.test.ts +0 -1
- package/src/__tests__/append-system-prompt-assembly.test.ts +8 -7
- package/src/__tests__/fr4-get-state-handshake.test.ts +2 -2
- package/src/__tests__/m2-append-content-probe.test.ts +0 -1
- package/src/__tests__/manifest-store.test.ts +10 -9
- package/src/__tests__/record-store-cache.test.ts +0 -2
- package/src/__tests__/record-store-index.test.ts +1 -2
- package/src/__tests__/review-fix-loop-script.test.ts +4 -2
- package/src/__tests__/review-fix-loop-utils.test.ts +10 -10
- package/src/__tests__/robustness-low-batch1.test.ts +6 -5
- package/src/__tests__/robustness-medium-batch1.test.ts +2 -2
- package/src/__tests__/robustness-medium-batch2.test.ts +17 -6
- package/src/__tests__/robustness-medium-batch4.test.ts +2 -2
- package/src/__tests__/session-runner.test.ts +1 -1
- package/src/core/__tests__/host-services.test.ts +2 -2
- package/src/core/__tests__/logger.test.ts +1 -1
- package/src/core/error-message.ts +9 -0
- package/src/core/host-services.ts +21 -5
- package/src/core/notify-ports.ts +18 -5
- package/src/execution/__tests__/agent-profile.test.ts +4 -4
- package/src/execution/__tests__/agent-registry.test.ts +370 -0
- package/src/execution/__tests__/agent-result-mapper.test.ts +18 -2
- package/src/execution/__tests__/agents-assembly.test.ts +2 -2
- package/src/execution/__tests__/ask-user-transit-e2e.test.ts +6 -6
- package/src/execution/__tests__/chat-engine-routing.test.ts +68 -33
- package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +4 -4
- package/src/execution/__tests__/cold-resurrect.test.ts +283 -0
- package/src/execution/__tests__/delivery-methods.test.ts +75 -62
- package/src/execution/__tests__/descendant-sweep-guards.test.ts +220 -0
- package/src/execution/__tests__/descendant-sweep.test.ts +6 -6
- package/src/execution/__tests__/dialog-queue.test.ts +2 -2
- package/src/execution/__tests__/engine-model-validation.test.ts +741 -0
- package/src/execution/__tests__/epipe-fallback.test.ts +29 -24
- package/src/execution/__tests__/execute-and-await-worktree.test.ts +21 -91
- package/src/execution/__tests__/execute-nesting.test.ts +34 -188
- package/src/execution/__tests__/execution-record.test.ts +217 -60
- package/src/execution/__tests__/execution-runtime-face.test.ts +5 -5
- package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +3 -3
- package/src/execution/__tests__/finalize-record.test.ts +173 -17
- package/src/execution/__tests__/gc-timer.test.ts +55 -2
- package/src/execution/__tests__/get-record-for-action-restart.test.ts +12 -12
- package/src/execution/__tests__/get-state-handshake.test.ts +1 -1
- package/src/execution/__tests__/helpers/mock-extension-api.ts +1 -1
- package/src/execution/__tests__/helpers/session-runner-mocks.ts +113 -0
- package/src/execution/__tests__/helpers/spawn-mock.ts +150 -3
- package/src/execution/__tests__/helpers/subagent-service-mocks.ts +137 -0
- package/src/execution/__tests__/keep-alive-no-progress.test.ts +50 -148
- package/src/execution/__tests__/kill-all-escalation.test.ts +2 -2
- package/src/execution/__tests__/lifecycle-predicates.test.ts +1 -2
- package/src/execution/__tests__/manifest-parentid.test.ts +4 -4
- package/src/execution/__tests__/max-turns-to-watchdog-ms.test.ts +1 -1
- package/src/execution/__tests__/model-resolver.test.ts +2 -2
- package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +23 -121
- package/src/execution/__tests__/nested-visibility.test.ts +2 -0
- package/src/execution/__tests__/notify-ledger.test.ts +973 -18
- package/src/execution/__tests__/output-collector.test.ts +117 -6
- package/src/execution/__tests__/pi-invocation.test.ts +1 -1
- package/src/execution/__tests__/record-store.test.ts +10 -9
- package/src/execution/__tests__/records-cwd-isolation.test.ts +2 -2
- package/src/execution/__tests__/recursive-visibility-baseline.test.ts +29 -132
- package/src/execution/__tests__/recursive-visibility-env.test.ts +55 -179
- package/src/execution/__tests__/rpc-mode.test.ts +2 -2
- package/src/execution/__tests__/run-and-finalize-anchoring.test.ts +387 -0
- package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +15 -9
- package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +4 -4
- package/src/execution/__tests__/run-spawn-edges.test.ts +17 -15
- package/src/execution/__tests__/run-spawn-integration.test.ts +2 -2
- package/src/execution/__tests__/run-spawn-resume.test.ts +2 -2
- package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +2 -2
- package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +4 -4
- package/src/execution/__tests__/service-kill-escalation.test.ts +7 -5
- package/src/execution/__tests__/session-context-resolver.test.ts +0 -2
- package/src/execution/__tests__/session-file-gc.test.ts +35 -0
- package/src/execution/__tests__/session-pending.test.ts +257 -14
- package/src/execution/__tests__/session-reconstructor.test.ts +366 -15
- package/src/execution/__tests__/session-runner-branch-cache-lru.test.ts +1 -1
- package/src/execution/__tests__/session-runner-close-prune.test.ts +2 -2
- package/src/execution/__tests__/session-runner-dispatch.test.ts +489 -0
- package/src/execution/__tests__/session-runner-epipe.test.ts +3 -3
- package/src/execution/__tests__/session-runner-heartbeat-idle-fallback.test.ts +5 -4
- package/src/execution/__tests__/session-runner-lifecycle-helpers.test.ts +290 -0
- package/src/execution/__tests__/session-runner-schema-env.test.ts +7 -5
- package/src/execution/__tests__/settled-watchdog.test.ts +282 -47
- package/src/execution/__tests__/spawn-args.test.ts +11 -10
- package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +26 -23
- package/src/execution/__tests__/spawn-event-adapter.test.ts +1 -1
- package/src/execution/__tests__/spawn-worktree-guidance.test.ts +5 -4
- package/src/execution/__tests__/spawned-children.test.ts +2 -1
- package/src/execution/__tests__/start-sync-model-guard.test.ts +4 -4
- package/src/execution/__tests__/stdin-writer.test.ts +6 -4
- package/src/execution/__tests__/stream-sink-retirement.test.ts +6 -6
- package/src/execution/__tests__/subagent-actions-core.test.ts +42 -22
- package/src/execution/__tests__/subagent-service-message-close.test.ts +29 -26
- package/src/execution/__tests__/subagent-service-multiproc-guard.test.ts +8 -8
- package/src/execution/__tests__/subagent-service-notify-gate.test.ts +27 -22
- package/src/execution/__tests__/subagent-service-parent-guard.test.ts +30 -29
- package/src/execution/__tests__/subagent-service-recovery-bounds.test.ts +45 -20
- package/src/execution/__tests__/subagent-service.test.ts +37 -30
- package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +88 -12
- package/src/execution/__tests__/subprocess-agent-runner-timeout.test.ts +75 -0
- package/src/execution/__tests__/subprocess-agent-runner.test.ts +22 -20
- package/src/execution/__tests__/temp-prompt.test.ts +1 -1
- package/src/execution/__tests__/timeout-integration.test.ts +6 -5
- package/src/execution/__tests__/turn-limiter-semantics.test.ts +1 -1
- package/src/execution/__tests__/turn-limiter.test.ts +1 -1
- package/src/execution/__tests__/ui-request-handler-factory.test.ts +12 -6
- package/src/execution/__tests__/ui-request-handler.test.ts +4 -3
- package/src/execution/__tests__/ui-request-queue.test.ts +142 -2
- package/src/execution/__tests__/worktree-manager.test.ts +14 -5
- package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +4 -3
- package/src/execution/agent-registry.ts +74 -30
- package/src/execution/agent-result-mapper.ts +3 -0
- package/src/execution/cold-resurrect.ts +199 -0
- package/src/execution/engine/__tests__/common/capability-gate.test.ts +91 -0
- package/src/execution/engine/__tests__/common/data-dir.test.ts +1 -1
- package/src/execution/engine/__tests__/common/journal-wiring.test.ts +84 -0
- package/src/execution/engine/__tests__/common/kill-chain.test.ts +34 -7
- package/src/execution/engine/__tests__/common/persona-router.test.ts +4 -5
- package/src/execution/engine/__tests__/common/pool-manager.test.ts +211 -51
- package/src/execution/engine/__tests__/common/session-view-service-zcode-dbpath.test.ts +149 -0
- package/src/execution/engine/__tests__/common/session-view-service.test.ts +499 -0
- package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +22 -112
- package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +15 -28
- package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +12 -12
- package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +1 -1
- package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +21 -82
- package/src/execution/engine/__tests__/conformance/zcode-appserver-harness.ts +4 -7
- package/src/execution/engine/__tests__/engine-discovery.test.ts +15 -3
- package/src/execution/engine/__tests__/model-prompt.test.ts +15 -3
- package/src/execution/engine/__tests__/registry.test.ts +4 -2
- package/src/execution/engine/__tests__/routing.test.ts +115 -6
- package/src/execution/engine/common/capability-gate.ts +92 -0
- package/src/execution/engine/common/journal-wiring.ts +97 -0
- package/src/execution/engine/common/kill-chain.ts +42 -10
- package/src/execution/engine/common/nesting-guard.ts +66 -0
- package/src/execution/engine/common/persona-router.ts +18 -8
- package/src/execution/engine/common/pool-manager.ts +332 -78
- package/src/execution/engine/common/session-view-service.ts +506 -0
- package/src/execution/engine/common/session-view-types.ts +125 -0
- package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +174 -28
- package/src/execution/engine/engines/pi/__tests__/spawn-opts-direct.test.ts +257 -0
- package/src/execution/{argv-mirror.ts → engine/engines/pi/argv-mirror.ts} +43 -21
- package/src/execution/{get-state-handshake.ts → engine/engines/pi/get-state-handshake.ts} +1 -1
- package/src/execution/{output-collector.ts → engine/engines/pi/output-collector.ts} +108 -19
- package/src/execution/engine/engines/pi/pi-engine.ts +434 -38
- package/src/execution/{pi-invocation.ts → engine/engines/pi/pi-invocation.ts} +2 -2
- package/src/execution/engine/engines/pi/reader.ts +11 -0
- package/src/execution/engine/engines/pi/registration.ts +4 -2
- package/src/execution/{session-runner.ts → engine/engines/pi/session-runner.ts} +617 -412
- package/src/execution/{spawn-event-adapter.ts → engine/engines/pi/spawn-event-adapter.ts} +75 -34
- package/src/execution/{stdin-writer.ts → engine/engines/pi/stdin-writer.ts} +10 -9
- package/src/execution/{temp-prompt.ts → engine/engines/pi/temp-prompt.ts} +2 -2
- package/src/execution/{turn-limiter.ts → engine/engines/pi/turn-limiter.ts} +1 -1
- package/src/execution/engine/engines/zcode/__tests__/__fixtures__/fake-appserver.mjs +54 -27
- package/src/execution/engine/engines/zcode/__tests__/appserver-launcher.test.ts +321 -0
- package/src/execution/engine/engines/zcode/__tests__/connection.test.ts +13 -12
- package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +7 -210
- package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +6 -110
- package/src/execution/engine/engines/zcode/__tests__/session-channel-dispose-harvest.test.ts +247 -0
- package/src/execution/engine/engines/zcode/__tests__/session-channel-turn-timers.test.ts +451 -0
- package/src/execution/engine/engines/zcode/__tests__/session-channel.test.ts +20 -8
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-appserver.test.ts +77 -110
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-degrade.test.ts +25 -319
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-dispose.test.ts +210 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-retry.test.ts +353 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-status.test.ts +282 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-timeout.test.ts +372 -0
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +48 -148
- package/src/execution/engine/engines/zcode/appserver-launcher.ts +167 -0
- package/src/execution/engine/engines/zcode/connection.ts +24 -11
- package/src/execution/engine/engines/zcode/constants.ts +75 -71
- package/src/execution/engine/engines/zcode/golden-sample.ts +8 -46
- package/src/execution/engine/engines/zcode/parser.ts +12 -346
- package/src/execution/engine/engines/zcode/preparer.ts +12 -143
- package/src/execution/engine/engines/zcode/session-channel.ts +351 -39
- package/src/execution/engine/engines/zcode/zcode-engine.ts +665 -760
- package/src/execution/engine/host-task-spec.ts +32 -36
- package/src/execution/engine/model-validation.ts +177 -0
- package/src/execution/engine/port.ts +24 -6
- package/src/execution/engine/routing.ts +75 -1
- package/src/execution/engine/types.ts +30 -103
- package/src/execution/execution-record.ts +222 -144
- package/src/execution/finalize-record.ts +131 -93
- package/src/execution/idle-gc.ts +28 -0
- package/src/execution/lifecycle-predicates.ts +1 -1
- package/src/execution/notify-host.ts +212 -0
- package/src/execution/record-store.ts +119 -73
- package/src/execution/round-settlement.ts +93 -0
- package/src/execution/session-file-gc.ts +96 -62
- package/src/execution/session-reconstructor.ts +256 -143
- package/src/execution/sessions-index.ts +117 -47
- package/src/execution/settled-watchdog.ts +264 -52
- package/src/execution/subagent-actions-core.ts +22 -22
- package/src/execution/subagent-service.ts +815 -963
- package/src/execution/subprocess-agent-runner.ts +144 -97
- package/src/execution/types.ts +9 -0
- package/src/execution/ui-request-handler-factory.ts +102 -74
- package/src/execution/ui-request-queue.ts +50 -19
- package/src/index.ts +442 -316
- package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +1 -1
- package/src/orchestration/__tests__/agent-call-stream.test.ts +2 -2
- package/src/orchestration/__tests__/args-validator.test.ts +14 -0
- package/src/orchestration/__tests__/error-recovery-rebuild-failure.test.ts +1 -1
- package/src/orchestration/__tests__/error-recovery-terminal-hardening.test.ts +11 -9
- package/src/orchestration/__tests__/execute-agent-call.test.ts +151 -11
- package/src/orchestration/__tests__/file-run-store.test.ts +7 -6
- package/src/orchestration/__tests__/launcher-nested-workflow.test.ts +2 -2
- package/src/orchestration/__tests__/lifecycle-abort-broadcast-signal.test.ts +1 -1
- package/src/orchestration/__tests__/lifecycle-runid-injection.test.ts +3 -3
- package/src/orchestration/__tests__/lifecycle.test.ts +7 -5
- package/src/orchestration/__tests__/non-cloneable-return-e2e.test.ts +1 -1
- package/src/orchestration/__tests__/run-snapshot.test.ts +8 -5
- package/src/orchestration/__tests__/script-lint.test.ts +17 -0
- package/src/orchestration/__tests__/test-mocks.ts +2 -0
- package/src/orchestration/__tests__/worker-exit-without-result.test.ts +7 -6
- package/src/orchestration/__tests__/worker-message-pump-finalize-run.test.ts +229 -0
- package/src/orchestration/__tests__/{error-recovery-handlers.test.ts → worker-message-pump-handlers.test.ts} +27 -19
- package/src/orchestration/__tests__/{error-recovery-postmessage-defense.test.ts → worker-message-pump-postmessage-defense.test.ts} +8 -8
- package/src/orchestration/__tests__/{error-recovery-serialize-failed-result.test.ts → worker-message-pump-serialize-failed-result.test.ts} +2 -2
- package/src/orchestration/__tests__/{error-recovery-workflow-call.test.ts → worker-message-pump-workflow-call.test.ts} +1 -1
- package/src/orchestration/__tests__/worker-pending-timeout-abort.test.ts +1 -1
- package/src/orchestration/__tests__/worker-script-builder.test.ts +1 -1
- package/src/orchestration/__tests__/workflow-nesting-e2e.test.ts +1 -1
- package/src/orchestration/agent-opts-resolver.ts +1 -1
- package/src/orchestration/args-validator.ts +53 -31
- package/src/orchestration/execute-agent-call.ts +19 -73
- package/src/orchestration/launcher.ts +128 -81
- package/src/orchestration/lifecycle.ts +43 -45
- package/src/orchestration/models/ports.ts +4 -4
- package/src/orchestration/models/run-runtime.ts +2 -2
- package/src/orchestration/models/trace.ts +1 -1
- package/src/orchestration/models/types.ts +111 -22
- package/src/orchestration/models/workflow-run.ts +1 -1
- package/src/orchestration/script-lint.ts +91 -58
- package/src/orchestration/{error-recovery.ts → worker-message-pump.ts} +157 -150
- package/src/shared/__tests__/meta-parser.test.ts +151 -0
- package/src/shared/__tests__/resource-discovery.test.ts +258 -215
- package/src/shared/atomic-write.ts +12 -9
- package/src/shared/meta-parser.ts +158 -84
- package/src/shared/model-ref.ts +15 -2
- package/src/shared/resource-discovery.ts +9 -183
- package/src/shared/schema-jsonify.ts +1 -1
- package/workflows/review-fix-loop-utils.cjs +151 -89
- package/workflows/review-fix-loop-utils.d.cts +287 -0
- package/src/execution/__tests__/execute-options-mapper.test.ts +0 -200
- package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +0 -164
- package/src/execution/engine/engines/pi/task-spec-mapper.ts +0 -100
- package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-spawn.json +0 -39
- package/src/execution/engine/engines/zcode/__tests__/launcher.test.ts +0 -150
- package/src/execution/engine/engines/zcode/__tests__/preparer-appserver.test.ts +0 -387
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +0 -710
- package/src/execution/engine/engines/zcode/appserver-home.ts +0 -442
- package/src/execution/engine/engines/zcode/appserver-probe.ts +0 -141
- package/src/execution/engine/engines/zcode/launcher.ts +0 -161
- package/src/execution/execute-options-mapper.ts +0 -115
- package/src/shared/__tests__/resource-discovery-manifest-cache.test.ts +0 -288
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import { computeElapsedSeconds, projectOutcome } from "./execution-record.ts";
|
|
18
18
|
import { isResumable } from "./lifecycle-predicates.ts";
|
|
19
|
-
import { SLUG_MAX_LENGTH } from "
|
|
19
|
+
import { SLUG_MAX_LENGTH } from "../orchestration/models/types.ts";
|
|
20
20
|
import type { ModelInfo } from "./model-resolver.ts";
|
|
21
21
|
import type { SubagentService } from "./subagent-service.ts";
|
|
22
22
|
import { displayAgentName } from "../shared/agent-ref.ts";
|
|
@@ -209,7 +209,7 @@ export function endedMessageGuard(service: SubagentService, id: string, original
|
|
|
209
209
|
if (original instanceof ResurrectDeniedError) return original;
|
|
210
210
|
let snap: SubagentRecord | undefined;
|
|
211
211
|
try {
|
|
212
|
-
snap = service.lookupRecordAnyState(id);
|
|
212
|
+
snap = service.queries.lookupRecordAnyState(id);
|
|
213
213
|
} catch {
|
|
214
214
|
snap = undefined;
|
|
215
215
|
}
|
|
@@ -400,12 +400,12 @@ export function listHandler(
|
|
|
400
400
|
// collectRecords 是 service 核心能力:statusFilter 决定 running-only 还是全部。
|
|
401
401
|
// 防截断(先多取再过滤)已下沉到 store 层——这里直接传 limit + filter。
|
|
402
402
|
const filter = includeFinished ? "all" : "running";
|
|
403
|
-
const all = service.collectRecords(limit, filter);
|
|
403
|
+
const all = service.queries.collectRecords(limit, filter);
|
|
404
404
|
// collectRecords 磁盘源是 light(无 totalTokens/model 等):SubagentListItem 对
|
|
405
405
|
// LLM 消费方暴露 totalTokens/model,逐项 getFullRecord 补全(per-file 缓存,仅首次
|
|
406
406
|
// 全量解析;显式 tool 调用非渲染热路径,成本可接受)。
|
|
407
407
|
const items: SubagentListItem[] = all.map((r) =>
|
|
408
|
-
recordToListItem(service.getFullRecord(r.id) ?? r),
|
|
408
|
+
recordToListItem(service.queries.getFullRecord(r.id) ?? r),
|
|
409
409
|
);
|
|
410
410
|
const running = items.filter((i) => i.status === "running").length;
|
|
411
411
|
|
|
@@ -424,13 +424,13 @@ export async function cancelHandler(
|
|
|
424
424
|
if (!id) throw new Error("cancelParam.subagentId is required for action:'cancel'");
|
|
425
425
|
|
|
426
426
|
// step 1: id 不存在(findRecord 只查内存 running record,不从 session.jsonl 重建)
|
|
427
|
-
const rec = service.findRecord(id);
|
|
427
|
+
const rec = service.queries.findRecord(id);
|
|
428
428
|
if (!rec) {
|
|
429
429
|
// 全树可见后,list/completion 可能列出其他进程(父/兄弟)的 running record
|
|
430
430
|
//(collectRecords 扫共享 sessionsDir 按 rootSessionId 过滤,跨进程互相可见),而 cancel
|
|
431
431
|
// 只作用于本进程内存 record。区分两种失败,避免「may have finished」误导(该 record 正
|
|
432
432
|
// 被列出且未 finished,只是不属于本进程内存)。仅文案区分,不改 cancel 作用域。
|
|
433
|
-
const treeRec = service.collectRecords(DEFAULT_LIST_LIMIT, "all").find((r) => r.id === id);
|
|
433
|
+
const treeRec = service.queries.collectRecords(DEFAULT_LIST_LIMIT, "all").find((r) => r.id === id);
|
|
434
434
|
if (treeRec && treeRec.status === "running") {
|
|
435
435
|
throw new Error(
|
|
436
436
|
`Subagent record "${id}" is running but owned by another process in the tree ` +
|
|
@@ -448,8 +448,8 @@ export async function cancelHandler(
|
|
|
448
448
|
// 走 close 行为路径(idle 终态化 done;running 立即 SIGTERM cancelled),
|
|
449
449
|
// 返回 cancel 响应(向后兼容 cancel action 的返回类型)。非 chatMode 保持现有 cancel 行为。
|
|
450
450
|
if (rec.chatMode) {
|
|
451
|
-
const chatRecord = service.getRecordForAction(id);
|
|
452
|
-
await service.closeSubagent(chatRecord, true);
|
|
451
|
+
const chatRecord = service.chatActions.getRecordForAction(id);
|
|
452
|
+
await service.chatActions.closeSubagent(chatRecord, true);
|
|
453
453
|
return { subagentId: id, response: { cancelled: true } };
|
|
454
454
|
}
|
|
455
455
|
// step 3: service.cancel boolean(list-view 契约不变);false = 已终态(CAS 抢锁失败)。
|
|
@@ -459,7 +459,7 @@ export async function cancelHandler(
|
|
|
459
459
|
// CAS 失败 = record 在 cancel 期间被 detached 路径 finalize(done/failed)。
|
|
460
460
|
// re-query 查当前真实状态。终态 record 被 archive 立即移出内存,
|
|
461
461
|
// 诚实报告 "unknown (evicted from memory)" 而非回落到可能过期的 rec.status。
|
|
462
|
-
const now = service.findRecord(id);
|
|
462
|
+
const now = service.queries.findRecord(id);
|
|
463
463
|
const statusDesc = now ? now.status : "unknown (evicted from memory)";
|
|
464
464
|
throw new Error(`Subagent ${id} could not be cancelled (it likely just finished; status: ${statusDesc})`);
|
|
465
465
|
}
|
|
@@ -474,9 +474,9 @@ export async function cancelHandler(
|
|
|
474
474
|
* message action handler:向对话模式 subagent 续聊/插入消息。
|
|
475
475
|
*
|
|
476
476
|
* 状态 × interrupt 自动映射(agent 只表达意图):
|
|
477
|
-
* running →
|
|
477
|
+
* running → deliverChatMessage 热路径(进程活:prompt + streamingBehavior,interrupt=true
|
|
478
478
|
* 抢占 / false 排队)
|
|
479
|
-
* 进程死 →
|
|
479
|
+
* 进程死 → deliverChatMessage 冷路径(resumeRound 重开 session + prompt,interrupt 自动
|
|
480
480
|
* 退化,agent 无感)
|
|
481
481
|
* 终态 → throw ended(正常路径不命中——终态 record 已 archive,getRecordForAction 先 throw not found)
|
|
482
482
|
*
|
|
@@ -503,13 +503,13 @@ export async function messageHandler(
|
|
|
503
503
|
// 升级文案——close/cancel 维持原语义(它们不需要恢复通道)。
|
|
504
504
|
let record: ExecutionRecord;
|
|
505
505
|
try {
|
|
506
|
-
record = service.getRecordForAction(id, { allowReconnect: true });
|
|
506
|
+
record = service.chatActions.getRecordForAction(id, { allowReconnect: true });
|
|
507
507
|
} catch (err) {
|
|
508
508
|
throw endedMessageGuard(service, id, err);
|
|
509
509
|
}
|
|
510
510
|
|
|
511
511
|
// one-shot upgrade:非 chatMode 的 active record(running/idle)收到 message 时
|
|
512
|
-
// 自动升级为 chatMode,后续走
|
|
512
|
+
// 自动升级为 chatMode,后续走 deliverChatMessage 统一投递路径(热路径或冷路径 resume)。
|
|
513
513
|
// closed/cancelled 终态 record 不可 upgrade(getRecordForAction 已抛 not found)。
|
|
514
514
|
// chatMode 是 ExecutionRecord 的 readonly 字段,用 Mutable<T> 显式断言绕过 readonly 约束(upgrade 语义)。
|
|
515
515
|
// Object.assign 隐式绕过 readonly 不可追踪,改为单字段显式赋值。
|
|
@@ -526,7 +526,7 @@ export async function messageHandler(
|
|
|
526
526
|
// 不按 record.status(进程长驻,idle 态进程仍活,续聊走热路径 prompt 而非重开 session)。
|
|
527
527
|
// upgrade 后 record.chatMode 已为 true,统一进此分支。
|
|
528
528
|
if (record.chatMode) {
|
|
529
|
-
await service.
|
|
529
|
+
await service.chatActions.deliverChatMessage(record, text, interrupt);
|
|
530
530
|
} else {
|
|
531
531
|
// 终态(closed/cancelled):防御性兜底(终态 record 已 archive,正常走 not found)
|
|
532
532
|
throw new Error(
|
|
@@ -550,7 +550,7 @@ export async function messageHandler(
|
|
|
550
550
|
* 有活进程在跑轮 → 置 closeAfterRound,轮完成时终态化——返回 {closed:true} 即承诺轮结束后资源已释放
|
|
551
551
|
* force:true = 立即终止——running 立即 SIGTERM(cancelBackground 显式 kill)+ closed+cancelled
|
|
552
552
|
*
|
|
553
|
-
* 行为分流委托
|
|
553
|
+
* 行为分流委托 chatActions.closeSubagent(归属守卫由 chatActions.getRecordForAction 把关)。
|
|
554
554
|
* 已终态 record 由 getRecordForAction throw not found(「已结束的不能再操作」语义)。
|
|
555
555
|
*/
|
|
556
556
|
export async function closeHandler(
|
|
@@ -561,9 +561,9 @@ export async function closeHandler(
|
|
|
561
561
|
if (!id) throw new Error("closeParam.subagentId is required for action:'close'");
|
|
562
562
|
const force = input?.force === true;
|
|
563
563
|
|
|
564
|
-
// 归属守卫(决策 3)+ 行为分流(
|
|
565
|
-
const record = service.getRecordForAction(id);
|
|
566
|
-
await service.closeSubagent(record, force);
|
|
564
|
+
// 归属守卫(决策 3)+ 行为分流(chatActions.closeSubagent)
|
|
565
|
+
const record = service.chatActions.getRecordForAction(id);
|
|
566
|
+
await service.chatActions.closeSubagent(record, force);
|
|
567
567
|
|
|
568
568
|
return { kind: "close", subagentId: id, response: { closed: true } };
|
|
569
569
|
}
|
|
@@ -621,7 +621,7 @@ export async function forkFromHandler(
|
|
|
621
621
|
* (守卫 6 已保证 sessionFile 非空,返回类型随之收窄)。 */
|
|
622
622
|
function assertAndLookupForkFromSource(service: SubagentService, id: string): SubagentRecord & { sessionFile: string } {
|
|
623
623
|
// 守卫 1:本进程内存 running —— 直接 message 即可,fork-from 会双写其 session 文件。
|
|
624
|
-
if (service.findRecord(id)) {
|
|
624
|
+
if (service.queries.findRecord(id)) {
|
|
625
625
|
throw new Error(
|
|
626
626
|
`subagent ${id} is still active in this process — use action:'message' to continue it directly. ` +
|
|
627
627
|
`If you want a parallel branch from its history, close it first (action:'close'), then fork-from.`,
|
|
@@ -629,7 +629,7 @@ function assertAndLookupForkFromSource(service: SubagentService, id: string): Su
|
|
|
629
629
|
}
|
|
630
630
|
|
|
631
631
|
// 守卫 2:全态查找(内存 archived + 磁盘重建)。
|
|
632
|
-
const source = service.lookupRecordAnyState(id);
|
|
632
|
+
const source = service.queries.lookupRecordAnyState(id);
|
|
633
633
|
if (!source) {
|
|
634
634
|
throw new Error(
|
|
635
635
|
`No subagent record with id "${id}". It may never have existed or been garbage-collected — ` +
|
|
@@ -652,7 +652,7 @@ function assertAndLookupForkFromSource(service: SubagentService, id: string): Su
|
|
|
652
652
|
|
|
653
653
|
// 守卫 4:主动告别(cancelled tombstone / user-close 正式关闭)——close 语义无旁路:
|
|
654
654
|
// fork-from 与 message 一致拒绝(guard 一致性规格),文案升级为统一「主动关闭」形态
|
|
655
|
-
//(含 closedReason 显式列入),与
|
|
655
|
+
//(含 closedReason 显式列入),与 deliverChatMessage 的同类分支同语系不同落地(此处强调不可 branch)。
|
|
656
656
|
if (source.status === "closed" && (source.closedReason === "cancelled" || source.closedReason === "user-close")) {
|
|
657
657
|
throw new Error(
|
|
658
658
|
`subagent ${id} was deliberately closed by user (closedReason: ${source.closedReason}) — ` +
|
|
@@ -662,7 +662,7 @@ function assertAndLookupForkFromSource(service: SubagentService, id: string): Su
|
|
|
662
662
|
}
|
|
663
663
|
|
|
664
664
|
// 守卫 5:worktree 记录 —— WorktreeHandle 不可序列化,checkout 已被 reaper/cleanup
|
|
665
|
-
// 回收;fork 子进程若复用旧路径会回落主 repo(破坏文件隔离)。与
|
|
665
|
+
// 回收;fork 子进程若复用旧路径会回落主 repo(破坏文件隔离)。与 deliverChatMessage 的
|
|
666
666
|
// hadWorktree 守卫同一判据同一理由。
|
|
667
667
|
if (source.worktree === true) {
|
|
668
668
|
throw new Error(
|