@zhushanwen/subagent-core 0.6.0 → 0.7.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/README.md +1 -1
- package/dist/chunk-KXVBIVOU.js +16 -0
- package/dist/chunk-T2SYBW3I.js +24 -0
- package/dist/chunk-VURUAGMM.js +2305 -0
- package/dist/{types-C3fE3R9x.d.cts → engine-discovery-scan-ocpM8FmI.d.cts} +770 -668
- package/dist/{types-C3fE3R9x.d.ts → engine-discovery-scan-ocpM8FmI.d.ts} +770 -668
- package/dist/execution/engine/engine-discovery-scan.cjs +2210 -0
- package/dist/execution/engine/engine-discovery-scan.d.cts +4 -0
- package/dist/execution/engine/engine-discovery-scan.d.ts +4 -0
- package/dist/execution/engine/engine-discovery-scan.js +20 -0
- package/dist/execution/engine/paths.cjs +6 -23
- package/dist/execution/engine/paths.d.cts +1 -8
- package/dist/execution/engine/paths.d.ts +1 -8
- package/dist/execution/engine/paths.js +1 -1
- package/dist/execution/relay-env.cjs +12 -28
- package/dist/execution/relay-env.d.cts +1 -33
- package/dist/execution/relay-env.d.ts +1 -33
- package/dist/execution/relay-env.js +5 -3
- package/dist/index.cjs +14045 -16059
- package/dist/index.d.cts +1035 -1579
- package/dist/index.d.ts +1035 -1579
- package/dist/index.js +9838 -13800
- package/dist.bundle/index.cjs +28875 -30323
- package/package.json +20 -26
- package/src/__tests__/record-store-last-line.test.ts +16 -7
- package/src/core/error-message.ts +7 -6
- package/src/core/host-services.ts +8 -2
- package/src/core/notify-ports.ts +17 -2
- package/src/execution/__tests__/chat-engine-routing.test.ts +62 -28
- package/src/execution/__tests__/chat-round-first-round-watchdog.test.ts +255 -0
- package/src/execution/__tests__/collect-coordinator-service.test.ts +36 -47
- package/src/execution/__tests__/collect-mixed-dispatch.test.ts +20 -53
- package/src/execution/__tests__/delivery-methods.test.ts +179 -237
- package/src/execution/__tests__/execute-and-await-worktree.test.ts +0 -2
- package/src/execution/__tests__/execute-nesting.test.ts +20 -13
- package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +20 -33
- package/src/execution/__tests__/gc-timer.test.ts +7 -22
- package/src/execution/__tests__/get-record-for-action-restart.test.ts +20 -10
- package/src/execution/__tests__/helpers/fake-engine-port.ts +187 -0
- package/src/execution/__tests__/helpers/spawn-mock.ts +36 -9
- package/src/execution/__tests__/helpers/subagent-service-mocks.ts +1 -1
- package/src/execution/__tests__/idle-gc.test.ts +200 -0
- package/src/execution/__tests__/lifecycle-predicates.test.ts +26 -21
- package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +5 -2
- package/src/execution/__tests__/reconcile-sweep.test.ts +200 -0
- package/src/execution/__tests__/record-store.test.ts +60 -6
- package/src/execution/__tests__/recursive-visibility-baseline.test.ts +20 -13
- package/src/execution/__tests__/round-supervisor.test.ts +293 -0
- package/src/execution/__tests__/session-pending.test.ts +119 -17
- package/src/execution/__tests__/stream-sink-retirement.test.ts +10 -10
- package/src/execution/__tests__/subagent-service-multiproc-guard.test.ts +1 -11
- package/src/execution/__tests__/subagent-service-notify-gate.test.ts +33 -30
- package/src/execution/__tests__/subagent-service-parent-guard.test.ts +2 -9
- package/src/execution/__tests__/subagent-service-recovery-bounds.test.ts +59 -129
- package/src/execution/__tests__/subagent-service.test.ts +2 -2
- package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +109 -7
- package/src/execution/__tests__/subprocess-agent-runner.test.ts +108 -36
- package/src/execution/__tests__/sync-collect-recovery.test.ts +21 -36
- package/src/execution/__tests__/workflow-state-root.test.ts +232 -0
- package/src/execution/agent-registry.ts +6 -2
- package/src/execution/dialog-queue.ts +6 -73
- package/src/execution/engine/__tests__/common/capability-gate.test.ts +115 -15
- package/src/execution/engine/__tests__/common/errors.test.ts +11 -18
- package/src/execution/engine/__tests__/common/kill-chain.test.ts +7 -0
- package/src/execution/engine/__tests__/common/nesting-guard.test.ts +9 -3
- package/src/execution/engine/__tests__/common/session-view-service.test.ts +90 -3
- package/src/execution/engine/__tests__/conformance/H9-test-disposition.md +116 -0
- package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/fake-engine-protocol.mjs +377 -0
- package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/recorded.fixture.json +331 -0
- package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/smoke-run.fixture.json +213 -0
- package/src/execution/engine/__tests__/conformance/chat-round-protocol.test.ts +230 -0
- package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +69 -42
- package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +4 -81
- package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +67 -44
- package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +81 -54
- package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +133 -70
- package/src/execution/engine/__tests__/conformance/engine-crash.test.ts +143 -0
- package/src/execution/engine/__tests__/conformance/fake-engine-capabilities.ts +19 -0
- package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +7 -2
- package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +6 -5
- package/src/execution/engine/__tests__/conformance/protocol-blackbox.test.ts +398 -0
- package/src/execution/engine/__tests__/conformance/registry-fork-filter.test.ts +221 -0
- package/src/execution/engine/__tests__/conformance/round-liveness-supervisor.test.ts +302 -0
- package/src/execution/engine/__tests__/conformance/static-spawn-guard.test.ts +58 -0
- package/src/execution/engine/__tests__/engine-discovery-scan.test.ts +558 -0
- package/src/execution/engine/__tests__/host-task-spec.test.ts +45 -0
- package/src/execution/engine/__tests__/model-ref-split.test.ts +74 -0
- package/src/execution/engine/__tests__/registry.test.ts +206 -1
- package/src/execution/engine/__tests__/routing.test.ts +97 -0
- package/src/execution/engine/__tests__/run-failure-worktree-cleanup.test.ts +97 -0
- package/src/execution/engine/client/__tests__/__fixtures__/fake-engine.mjs +294 -0
- package/src/execution/engine/client/__tests__/engine-client.test.ts +516 -0
- package/src/execution/engine/client/__tests__/mirror.test.ts +67 -0
- package/src/execution/engine/client/__tests__/pid-file.test.ts +257 -0
- package/src/execution/engine/client/__tests__/protocol-closure.test.ts +95 -0
- package/src/execution/engine/client/__tests__/remote-engine.test.ts +457 -0
- package/src/execution/engine/client/client-options.ts +103 -0
- package/src/execution/engine/client/engine-client.ts +687 -0
- package/src/execution/engine/client/mirror.ts +167 -0
- package/src/execution/engine/client/pid-file.ts +392 -0
- package/src/execution/engine/client/reaper.ts +95 -0
- package/src/execution/engine/client/remote-engine.ts +441 -0
- package/src/execution/engine/client/reverse-router.ts +255 -0
- package/src/execution/engine/common/capability-gate.ts +109 -22
- package/src/execution/engine/common/errors.ts +9 -25
- package/src/execution/engine/common/event-journal.ts +4 -50
- package/src/execution/engine/common/journal-replay.ts +3 -1
- package/src/execution/engine/common/kill-chain.ts +18 -251
- package/src/execution/engine/common/nesting-guard.ts +18 -114
- package/src/execution/engine/common/pool-manager.ts +4 -0
- package/src/execution/engine/common/session-view-service.ts +56 -84
- package/src/execution/engine/config.ts +151 -0
- package/src/execution/engine/d8-compat.ts +346 -0
- package/src/execution/engine/engine-discovery-roots.ts +107 -0
- package/src/execution/engine/engine-discovery-scan.ts +269 -0
- package/src/execution/engine/engine-discovery.ts +30 -7
- package/src/execution/engine/engine-inspect-package.ts +282 -0
- package/src/execution/engine/engine-manifest.ts +244 -0
- package/src/execution/engine/host/__tests__/host-askuser-endpoint.test.ts +123 -0
- package/src/execution/engine/host/__tests__/host-bridge.test.ts +135 -0
- package/src/execution/engine/host/__tests__/spawned-children.test.ts +73 -0
- package/src/execution/engine/host/host-bridge.ts +150 -0
- package/src/execution/engine/host/host-ui-endpoint.ts +47 -0
- package/src/execution/engine/host/pi-host-binding.ts +91 -0
- package/src/execution/engine/host/spawned-children.ts +139 -0
- package/src/execution/engine/host-task-spec.ts +29 -2
- package/src/execution/engine/model-validation.ts +55 -2
- package/src/execution/engine/paths.ts +16 -41
- package/src/execution/engine/port.ts +48 -2
- package/src/execution/engine/registry.ts +153 -34
- package/src/execution/engine/routing.ts +225 -52
- package/src/execution/engine/types.ts +25 -200
- package/src/execution/finalize-record.ts +25 -0
- package/src/execution/idle-gc.ts +89 -14
- package/src/execution/lifecycle-manager.ts +10 -7
- package/src/execution/lifecycle-predicates.ts +10 -8
- package/src/execution/record-store.ts +29 -2
- package/src/execution/relay-env.ts +19 -36
- package/src/execution/round-supervisor/domain.ts +89 -0
- package/src/execution/round-supervisor/index.ts +33 -0
- package/src/execution/round-supervisor/notify-accounting.ts +87 -0
- package/src/execution/round-supervisor/reconcile-sweep.ts +235 -0
- package/src/execution/round-supervisor/service-binding.test.ts +661 -0
- package/src/execution/round-supervisor/service-binding.ts +273 -0
- package/src/execution/round-supervisor/supervisor.ts +426 -0
- package/src/execution/session-pending.ts +68 -74
- package/src/execution/settled-watchdog.ts +39 -0
- package/src/execution/subagent-service.ts +746 -400
- package/src/execution/subprocess-agent-runner.ts +16 -8
- package/src/execution/types.ts +41 -117
- package/src/execution/ui-channels.ts +13 -214
- package/src/execution/ui-request-handler-factory.ts +7 -4
- package/src/execution/ui-request-observability.ts +2 -2
- package/src/execution/workflow-state-root.ts +67 -0
- package/src/execution/worktree-git-ops.ts +5 -0
- package/src/execution/worktree-manager.ts +11 -1
- package/src/index.ts +55 -26
- package/src/orchestration/__tests__/execute-agent-call.test.ts +1 -1
- package/src/orchestration/execute-agent-call.ts +1 -1
- package/src/orchestration/file-run-store.ts +144 -59
- package/src/orchestration/models/types.ts +43 -42
- package/src/shared/zcode-model-ref.ts +31 -0
- package/dist/chunk-43ONBFZX.js +0 -240
- package/dist/chunk-A4IVZWVX.js +0 -31
- package/dist/chunk-APZY4IME.js +0 -27
- package/dist/chunk-V3VHZ2VX.js +0 -59
- package/dist/execution/engine/engines/zcode/constants.cjs +0 -107
- package/dist/execution/engine/engines/zcode/constants.d.cts +0 -135
- package/dist/execution/engine/engines/zcode/constants.d.ts +0 -135
- package/dist/execution/engine/engines/zcode/constants.js +0 -54
- package/dist/execution/engine/engines/zcode/reader.cjs +0 -276
- package/dist/execution/engine/engines/zcode/reader.d.cts +0 -21
- package/dist/execution/engine/engines/zcode/reader.d.ts +0 -21
- package/dist/execution/engine/engines/zcode/reader.js +0 -9
- package/src/__tests__/append-system-prompt-assembly.test.ts +0 -243
- package/src/__tests__/fr4-get-state-handshake.test.ts +0 -125
- package/src/__tests__/session-runner.test.ts +0 -69
- package/src/execution/__tests__/ask-user-transit-e2e.test.ts +0 -490
- package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +0 -191
- package/src/execution/__tests__/descendant-sweep-guards.test.ts +0 -220
- package/src/execution/__tests__/descendant-sweep.test.ts +0 -269
- package/src/execution/__tests__/engine-model-validation.test.ts +0 -741
- package/src/execution/__tests__/epipe-fallback.test.ts +0 -248
- package/src/execution/__tests__/execution-runtime-face.test.ts +0 -272
- package/src/execution/__tests__/get-state-handshake.test.ts +0 -127
- package/src/execution/__tests__/helpers/session-runner-mocks.ts +0 -113
- package/src/execution/__tests__/keep-alive-no-progress.test.ts +0 -280
- package/src/execution/__tests__/kill-all-escalation.test.ts +0 -196
- package/src/execution/__tests__/max-turns-to-watchdog-ms.test.ts +0 -113
- package/src/execution/__tests__/output-collector.test.ts +0 -469
- package/src/execution/__tests__/pi-invocation.test.ts +0 -166
- package/src/execution/__tests__/recursive-visibility-env.test.ts +0 -149
- package/src/execution/__tests__/rpc-mode.test.ts +0 -89
- package/src/execution/__tests__/run-and-finalize-anchoring.test.ts +0 -387
- package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +0 -277
- package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +0 -254
- package/src/execution/__tests__/run-spawn-edges.test.ts +0 -1079
- package/src/execution/__tests__/run-spawn-integration.test.ts +0 -933
- package/src/execution/__tests__/run-spawn-resume.test.ts +0 -322
- package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +0 -196
- package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +0 -207
- package/src/execution/__tests__/service-kill-escalation.test.ts +0 -91
- package/src/execution/__tests__/session-runner-branch-cache-lru.test.ts +0 -110
- package/src/execution/__tests__/session-runner-close-prune.test.ts +0 -181
- package/src/execution/__tests__/session-runner-dispatch.test.ts +0 -489
- package/src/execution/__tests__/session-runner-epipe.test.ts +0 -179
- package/src/execution/__tests__/session-runner-heartbeat-idle-fallback.test.ts +0 -227
- package/src/execution/__tests__/session-runner-lifecycle-helpers.test.ts +0 -290
- package/src/execution/__tests__/session-runner-schema-env.test.ts +0 -352
- package/src/execution/__tests__/settled-watchdog.test.ts +0 -524
- package/src/execution/__tests__/spawn-args.test.ts +0 -446
- package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +0 -192
- package/src/execution/__tests__/spawn-event-adapter.test.ts +0 -167
- package/src/execution/__tests__/spawn-worktree-guidance.test.ts +0 -208
- package/src/execution/__tests__/spawned-children.test.ts +0 -236
- package/src/execution/__tests__/start-sync-model-guard.test.ts +0 -150
- package/src/execution/__tests__/stdin-writer.test.ts +0 -464
- package/src/execution/__tests__/subagent-service-message-close.test.ts +0 -693
- package/src/execution/__tests__/temp-prompt.test.ts +0 -53
- package/src/execution/__tests__/timeout-integration.test.ts +0 -616
- package/src/execution/__tests__/turn-limiter-semantics.test.ts +0 -194
- package/src/execution/__tests__/turn-limiter.test.ts +0 -65
- package/src/execution/__tests__/ui-request-handler.test.ts +0 -205
- package/src/execution/__tests__/ui-request-queue.test.ts +0 -298
- package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +0 -230
- package/src/execution/engine/__tests__/common/schema-emulation.test.ts +0 -128
- package/src/execution/engine/__tests__/common/session-view-service-zcode-dbpath.test.ts +0 -149
- package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +0 -28
- package/src/execution/engine/__tests__/conformance/zcode-appserver-harness.ts +0 -128
- package/src/execution/engine/__tests__/paths.test.ts +0 -39
- package/src/execution/engine/common/schema-emulation.ts +0 -189
- package/src/execution/engine/common/session-view-projection.ts +0 -51
- package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +0 -615
- package/src/execution/engine/engines/pi/__tests__/reader.test.ts +0 -155
- package/src/execution/engine/engines/pi/__tests__/spawn-opts-direct.test.ts +0 -257
- package/src/execution/engine/engines/pi/argv-mirror.ts +0 -135
- package/src/execution/engine/engines/pi/get-state-handshake.ts +0 -179
- package/src/execution/engine/engines/pi/output-collector.ts +0 -317
- package/src/execution/engine/engines/pi/pi-engine.ts +0 -811
- package/src/execution/engine/engines/pi/pi-invocation.ts +0 -120
- package/src/execution/engine/engines/pi/reader.ts +0 -59
- package/src/execution/engine/engines/pi/registration.ts +0 -37
- package/src/execution/engine/engines/pi/session-runner.ts +0 -2840
- package/src/execution/engine/engines/pi/spawn-event-adapter.ts +0 -404
- package/src/execution/engine/engines/pi/stdin-writer.ts +0 -199
- package/src/execution/engine/engines/pi/temp-prompt.ts +0 -62
- package/src/execution/engine/engines/pi/turn-limiter.ts +0 -102
- package/src/execution/engine/engines/zcode/__tests__/__fixtures__/fake-appserver.mjs +0 -301
- package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-appserver.json +0 -36
- package/src/execution/engine/engines/zcode/__tests__/appserver-launcher.test.ts +0 -321
- package/src/execution/engine/engines/zcode/__tests__/connection.test.ts +0 -473
- package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +0 -43
- package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +0 -124
- package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +0 -210
- package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +0 -71
- package/src/execution/engine/engines/zcode/__tests__/session-channel-dispose-harvest.test.ts +0 -247
- package/src/execution/engine/engines/zcode/__tests__/session-channel-turn-timers.test.ts +0 -451
- package/src/execution/engine/engines/zcode/__tests__/session-channel.test.ts +0 -792
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-appserver.test.ts +0 -782
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-degrade.test.ts +0 -168
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-dispose.test.ts +0 -210
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-retry.test.ts +0 -353
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-status.test.ts +0 -282
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine-timeout.test.ts +0 -372
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +0 -145
- package/src/execution/engine/engines/zcode/appserver-launcher.ts +0 -167
- package/src/execution/engine/engines/zcode/connection.ts +0 -598
- package/src/execution/engine/engines/zcode/constants.ts +0 -176
- package/src/execution/engine/engines/zcode/golden-sample.ts +0 -47
- package/src/execution/engine/engines/zcode/parser.ts +0 -102
- package/src/execution/engine/engines/zcode/preparer.ts +0 -235
- package/src/execution/engine/engines/zcode/reader.ts +0 -381
- package/src/execution/engine/engines/zcode/registration.ts +0 -37
- package/src/execution/engine/engines/zcode/session-channel.ts +0 -968
- package/src/execution/engine/engines/zcode/zcode-engine.ts +0 -1431
- package/src/execution/round-settlement.ts +0 -93
- package/src/execution/ui-request-queue.ts +0 -215
- package/src/shared/schema-env.ts +0 -44
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
// src/execution/engine/engines/pi/pi-invocation.ts
|
|
2
|
-
//
|
|
3
|
-
// 定位 pi 二进制并组装 spawn 调用。Core 叶子原语(仅依赖 node 内置)。
|
|
4
|
-
//
|
|
5
|
-
// spawn 改造(in-process → spawn pi --mode json)的基座模块。
|
|
6
|
-
// 被 runSpawn(session-runner)调用,决定子进程用哪个命令启动。
|
|
7
|
-
//
|
|
8
|
-
// 移植自 nicobailon subagent example 的 getPiInvocation,处理三种运行时:
|
|
9
|
-
// 1. bun bundle(/$bunfs/root/ 虚拟脚本)→ 退化到 pi-in-PATH
|
|
10
|
-
// 2. 有真实脚本路径(node + script)→ node <script> <args>
|
|
11
|
-
// 3. node/bun generic runtime(无脚本)→ pi <args>(依赖 PATH)
|
|
12
|
-
//
|
|
13
|
-
// 注意:pi 在扩展进程内运行时 process.execPath 是 node/bun,process.argv[1]
|
|
14
|
-
// 是 pi 的入口脚本。子进程需要复现同样的启动方式才能保证扩展/配置一致加载。
|
|
15
|
-
|
|
16
|
-
import * as fs from "node:fs";
|
|
17
|
-
import * as path from "node:path";
|
|
18
|
-
|
|
19
|
-
import { isRelayActive, RELAY_ENV_NODE, RELAY_ENV_SCRIPT } from "../../../relay-env.ts";
|
|
20
|
-
|
|
21
|
-
/** spawn 调用描述符:command + args(透传给 child_process.spawn)。 */
|
|
22
|
-
export interface PiInvocation {
|
|
23
|
-
/** 可执行文件路径(node/bun/pi 二进制)。 */
|
|
24
|
-
command: string;
|
|
25
|
-
/** 命令行参数(可能含 [scriptPath, ...userArgs] 或直接 [...userArgs])。 */
|
|
26
|
-
args: string[];
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** getPiInvocation 可选项。 */
|
|
30
|
-
export interface PiInvocationOptions {
|
|
31
|
-
/**
|
|
32
|
-
* false = 强制直连 spawn 真实 pi(不经 relay 代理)。唯一现役消费点是 PiEngine.probe
|
|
33
|
-
* ——探针意图是 pi 本体可解析性,经 relay 探到的是 runtime 健康,语义错位(E 方案 §5.1)。
|
|
34
|
-
* 缺省(undefined / true)时按 relay env 激活判定走代理。
|
|
35
|
-
*/
|
|
36
|
-
relay?: boolean;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* bun 虚拟文件系统前缀。bun bundle 模式下 process.argv[1] 形如
|
|
41
|
-
* /$bunfs/root/pi——这不是磁盘上的真实文件,不能直接 spawn。
|
|
42
|
-
*/
|
|
43
|
-
const BUN_VIRTUAL_PREFIX = "/$bunfs/root/";
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* 判断 execPath 的 basename 是否为通用运行时(node/bun)。
|
|
47
|
-
* 通用运行时需要脚本路径才能启动 pi;非通用(如 pi 的 standalone binary)可直接执行。
|
|
48
|
-
*/
|
|
49
|
-
function isGenericRuntime(execPath: string): boolean {
|
|
50
|
-
const execName = path.basename(execPath).toLowerCase();
|
|
51
|
-
return /^(node|bun)(\.exe)?$/.test(execName);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* 组装 pi 子进程的 spawn 调用。
|
|
56
|
-
*
|
|
57
|
-
* @param userArgs pi CLI 参数(如 ["--mode", "rpc", "--session-dir", "..."])
|
|
58
|
-
* @param opts 可选项(relay:false 强制直连——probe 用,见 PiInvocationOptions)
|
|
59
|
-
* @returns spawn 描述符(command + 完整 args)
|
|
60
|
-
*
|
|
61
|
-
* 决策链(按优先级):
|
|
62
|
-
* 0. relay 激活(三 env 齐备且未显式禁用)→ <RELAY_NODE> <RELAY_SCRIPT> <userArgs>
|
|
63
|
-
* (E 方案 §5.1:xyz-agent runtime 存在时经代理 spawn,改的是进程拓扑不是 pi 语义)
|
|
64
|
-
* 1. process.argv[1] 是真实磁盘文件且非 bun 虚拟路径 → <execPath> <argv[1]> <userArgs>
|
|
65
|
-
* (复现当前 pi 进程的启动方式,确保扩展/配置/版本一致)
|
|
66
|
-
* 2. execPath 非通用运行时(pi standalone binary)→ <execPath> <userArgs>
|
|
67
|
-
* 3. 通用运行时但无可用脚本路径 → "pi" <userArgs>(依赖 PATH 中可找到 pi)
|
|
68
|
-
*/
|
|
69
|
-
// [perf] 决策链只依赖 process.argv[1] / process.execPath(进程内恒定),其中唯一的
|
|
70
|
-
// 磁盘探测(existsSync)结果 memo 一次——每次 spawn 免重复 syscall。memo 键含
|
|
71
|
-
// argv[1] 值:测试 mock 切换 argv[1] 模拟不同运行时时自动失效重算。
|
|
72
|
-
let scriptExistsCache: { script: string | undefined; exists: boolean } | undefined;
|
|
73
|
-
|
|
74
|
-
/** process.argv[1] 是真实磁盘脚本(非 bun 虚拟路径)且存在。 */
|
|
75
|
-
function currentScriptExists(): boolean {
|
|
76
|
-
const currentScript = process.argv[1];
|
|
77
|
-
if (scriptExistsCache === undefined || scriptExistsCache.script !== currentScript) {
|
|
78
|
-
scriptExistsCache = {
|
|
79
|
-
script: currentScript,
|
|
80
|
-
exists:
|
|
81
|
-
currentScript !== undefined &&
|
|
82
|
-
!currentScript.startsWith(BUN_VIRTUAL_PREFIX) &&
|
|
83
|
-
fs.existsSync(currentScript),
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
return scriptExistsCache.exists;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export function getPiInvocation(userArgs: string[], opts?: PiInvocationOptions): PiInvocation {
|
|
90
|
-
const currentScript = process.argv[1];
|
|
91
|
-
const isBunVirtualScript = currentScript?.startsWith(BUN_VIRTUAL_PREFIX);
|
|
92
|
-
|
|
93
|
-
// 分支 0(前置):relay 激活(E 方案 §5.1)——runtime 注入三 env 齐备且未显式禁用时,
|
|
94
|
-
// spawn 目标切换为 <RELAY_NODE> <RELAY_SCRIPT> <原 pi spawnArgs>,形态与分支 1「node +
|
|
95
|
-
// script」同构(command 是执行器、args[0] 是脚本)。ELECTRON_RUN_AS_NODE 不在此补:
|
|
96
|
-
// 打包态执行器为 Electron 时由 runtime 与三 env 同点注入主 pi 进程 env(E-2
|
|
97
|
-
// getRelaySpawnEnv),本进程 {...process.env} 继承即达代理进程,extension 不重复判定。
|
|
98
|
-
// isRelayActive 已保证三 env 非空,下方取局部变量仅为 TS 收窄(isRelayActive 的
|
|
99
|
-
// 收窄不跨函数边界传导)。
|
|
100
|
-
if (opts?.relay !== false && isRelayActive(process.env)) {
|
|
101
|
-
const relayNode = process.env[RELAY_ENV_NODE];
|
|
102
|
-
const relayScript = process.env[RELAY_ENV_SCRIPT];
|
|
103
|
-
if (relayNode !== undefined && relayScript !== undefined) {
|
|
104
|
-
return { command: relayNode, args: [relayScript, ...userArgs] };
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// 分支 1:有真实脚本路径 → 复现启动方式(node <pi-script> <args>)
|
|
109
|
-
if (currentScript && !isBunVirtualScript && currentScriptExists()) {
|
|
110
|
-
return { command: process.execPath, args: [currentScript, ...userArgs] };
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 分支 2:非通用运行时(pi 自带 binary)→ 直接执行
|
|
114
|
-
if (!isGenericRuntime(process.execPath)) {
|
|
115
|
-
return { command: process.execPath, args: userArgs };
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// 分支 3:通用运行时但脚本不可用 → 依赖 PATH
|
|
119
|
-
return { command: "pi", args: userArgs };
|
|
120
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// src/execution/engine/engines/pi/reader.ts
|
|
2
|
-
//
|
|
3
|
-
// PiEngine reader(P5):pi subagent session JSONL → SessionView(设计 D6 read
|
|
4
|
-
// 降级链第①级的 pi 侧实现)。
|
|
5
|
-
//
|
|
6
|
-
// 双端复用约束(设计 §3.3.7,与 zcode/reader.ts 同款):本模块必须保持无状态
|
|
7
|
-
// 纯函数、无 spawn/进程依赖、不 import 同包 launcher/preparer/parser。因此
|
|
8
|
-
// PI_ENGINE_ID 在此本地锚定(pi-engine.ts 的同名常量会连带运行时件 import,
|
|
9
|
-
// 破坏「共享 reader 是唯一允许被 xyz-agent runtime import 的引擎模块」约束)。
|
|
10
|
-
//
|
|
11
|
-
// 下沉说明(A1 守护):turns 重建逻辑本体 = session-reconstructor.reconstructFromFile
|
|
12
|
-
// (pi JSONL → ReconstructedRecord,extension 侧唯一 source of truth)。本模块只做
|
|
13
|
-
// ReconstructedRecord → SessionView 的投影(投影原语 toReplayedTurn / aggregateUsage
|
|
14
|
-
// 收敛在 common/session-view-projection.ts 单一实现),不改 reconstructor 本体——
|
|
15
|
-
// pi 现有直读行为零变化。
|
|
16
|
-
//
|
|
17
|
-
// xyz-agent runtime 侧的 pi 历史读取链(getHistoryFromFilePath)是独立实现(shared
|
|
18
|
-
// Message 投影),不消费本模块——两链各自保持现状(P5 只对非 pi 引擎引入共享
|
|
19
|
-
// reader;pi 的 runtime 链路回归由现有测试守护)。
|
|
20
|
-
//
|
|
21
|
-
// [D2 实施期门②裁决:保留(2026-09-02,u-2a)] 现状 readPiSessionView 仅被
|
|
22
|
-
// PiEngine.read(①级原生层)消费、read 面生产零调用(pi 历史走 runtime 自有 JSONL
|
|
23
|
-
// 直读链)——但 EnginePort.read 是四能力面的非可选成员(port.ts),pi 的
|
|
24
|
-
// capabilities.sessionRead='full' 与 conformance read 降级契约(contract.read-
|
|
25
|
-
// degradation)以此为①级实现;删除本模块会使 pi 的 read 面空心化(②③级兜底直通),
|
|
26
|
-
// 与终态图(dual-track-convergence §3.5:engines/pi/ 四件套含 reader)矛盾。保留
|
|
27
|
-
// 不构成第三个 SessionView 装配实现:u-1a 的 session-view-service(GUI 生产链)对
|
|
28
|
-
// pi 分支维持防御性空返回(A1 守护,不 import 本模块),两链零交叠;read 面的
|
|
29
|
-
// 生产调用方归属终态「extension 内 EnginePort.read() 复用同一 module」接线
|
|
30
|
-
// (§3.5 GUI 读取路径),不在 u-2a 范围。
|
|
31
|
-
|
|
32
|
-
import { reconstructFromFile } from "../../../session-reconstructor.ts";
|
|
33
|
-
import type { SessionView } from "../../types.ts";
|
|
34
|
-
import { aggregateUsage, toReplayedTurn } from "../../common/session-view-projection.ts";
|
|
35
|
-
|
|
36
|
-
/** pi 引擎的 registry key(与 engines/pi/pi-engine.ts 的 PI_ENGINE_ID 同值锚定)。 */
|
|
37
|
-
export const PI_ENGINE_ID = "pi";
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 读取 pi subagent session 的引擎中立视图(read 第①级)。
|
|
41
|
-
*
|
|
42
|
-
* @param sessionFile pi session JSONL 绝对路径
|
|
43
|
-
* @returns undefined = 文件缺失/损坏/缺 identity entry/无 assistant message
|
|
44
|
-
* (reconstructFromFile 的降级语义,不 throw——降级链由宿主编排)。
|
|
45
|
-
*/
|
|
46
|
-
export async function readPiSessionView(sessionFile: string): Promise<SessionView | undefined> {
|
|
47
|
-
const recon = reconstructFromFile(sessionFile);
|
|
48
|
-
if (recon === undefined) return undefined;
|
|
49
|
-
const usage = aggregateUsage(recon.turns);
|
|
50
|
-
return {
|
|
51
|
-
engineId: PI_ENGINE_ID,
|
|
52
|
-
// recon.id 是 subagent record id——pi 链路的 sessionId 约定即 header id 兜底
|
|
53
|
-
// record.id(collectResult 同源,与 pi-engine read 的既有约定一致)
|
|
54
|
-
sessionId: recon.id,
|
|
55
|
-
turns: recon.turns.map(toReplayedTurn),
|
|
56
|
-
...(usage !== undefined ? { usage } : {}),
|
|
57
|
-
source: "native",
|
|
58
|
-
};
|
|
59
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// src/execution/engine/engines/pi/registration.ts
|
|
2
|
-
//
|
|
3
|
-
// pi 引擎注册入口(P1 接线)。设计权威源:§3.3.1(注册表 id → factory)+ D9(缺省
|
|
4
|
-
// 引擎 = 'pi')。组合根(src/index.ts 扩展初始化)调用 registerPiEngine(),把进程级
|
|
5
|
-
// SubagentService 单例登记为 registry 里的 'pi' 引擎——此后引擎获取统一经
|
|
6
|
-
// getEngine('pi') / getEngine(DEFAULT_ENGINE_ID),上层不再硬编码「spawn pi」这一选择。
|
|
7
|
-
//
|
|
8
|
-
// 为什么独立文件:pi-engine.ts 保持零注册副作用(被 SAR 等 DI 场景 import 时只拿类),
|
|
9
|
-
// 注册是组合根的职责——依赖方向 registry ← registration ← pi-engine 单向,无循环。
|
|
10
|
-
|
|
11
|
-
import { getSubagentService } from "../../../subagent-service.ts";
|
|
12
|
-
import { registerEngine } from "../../registry.ts";
|
|
13
|
-
import { PI_ENGINE_ID, PiEngine } from "./pi-engine.ts";
|
|
14
|
-
import type { PiEngineService } from "./pi-engine.ts";
|
|
15
|
-
|
|
16
|
-
export { PI_ADAPTER_VERSION, PI_ENGINE_ID, PiEngine } from "./pi-engine.ts";
|
|
17
|
-
export type { PiEngineDeps, PiEngineService } from "./pi-engine.ts";
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* 构造绑定到指定服务定位器的 PiEngine(DI 工厂)。
|
|
21
|
-
* SAR(per-session DI 构造,注入 mock 的测试场景)用本工厂绑定自身持有的服务引用;
|
|
22
|
-
* registry 全局单例绑定的是进程级 getSubagentService()——生产环境两者是同一对象。
|
|
23
|
-
*/
|
|
24
|
-
export function createPiEngine(getService: () => PiEngineService | null): PiEngine {
|
|
25
|
-
return new PiEngine({ getService });
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* 把 'pi' 引擎登记进 registry(幂等——组合根可能多次执行,如每次 session_start)。
|
|
30
|
-
* 工厂绑进程单例 getSubagentService:惰性求值,session_start 注入前调用 getEngine
|
|
31
|
-
* 只会拿到引擎实例,真正 run 时才解析服务。
|
|
32
|
-
*/
|
|
33
|
-
export function registerPiEngine(): void {
|
|
34
|
-
// [D4 聚合连带] 查询/交互面聚合后 Service 不再整体结构化兼容 PiEngineService——
|
|
35
|
-
// 经 asEngineService 显式视图适配(成员集合与原直绑等价)。
|
|
36
|
-
registerEngine(PI_ENGINE_ID, () => createPiEngine(() => getSubagentService()?.asEngineService ?? null));
|
|
37
|
-
}
|