@zhushanwen/pi-subagent-workflow 8.6.0 → 8.8.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.
- package/README.md +5 -11
- package/package.json +13 -20
- package/relay/relay.mjs +1 -1
- package/skills/workflow-script-format/SKILL.md +32 -13
- package/src/host/__tests__/pi-host.test.ts +235 -0
- package/src/host/pi-host.ts +163 -0
- package/src/index.ts +141 -138
- package/src/injectors/__tests__/engine-awareness.test.ts +292 -0
- package/src/injectors/__tests__/engine-section-stability.test.ts +343 -0
- package/src/injectors/__tests__/model-list-injector.test.ts +18 -21
- package/src/injectors/__tests__/subagent-list-injector.test.ts +59 -19
- package/src/injectors/__tests__/workflow-list-injector.test.ts +31 -17
- package/src/injectors/engine-awareness.ts +119 -0
- package/src/injectors/model-list-injector.ts +15 -58
- package/src/injectors/subagent-list-injector.ts +56 -114
- package/src/injectors/workflow-list-injector.ts +37 -70
- package/src/interface/__tests__/detectors.test.ts +48 -37
- package/src/interface/__tests__/subagent-tool-path-guard.test.ts +2 -2
- package/src/interface/__tests__/subagent-tool-prompt.test.ts +6 -3
- package/src/interface/__tests__/tool-workflow-run-builtin-name.test.ts +216 -0
- package/src/interface/__tests__/tool-workflow-script-generate.test.ts +17 -6
- package/src/interface/__tests__/tool-workflow-throw-paths.test.ts +38 -2
- package/src/interface/bg-notify-render.ts +7 -17
- package/src/interface/command-actions.ts +5 -15
- package/src/interface/commands.ts +4 -4
- package/src/interface/format.ts +17 -6
- package/src/interface/gui-mappers.ts +18 -22
- package/src/interface/helpers.ts +9 -130
- package/src/interface/list-component.ts +5 -5
- package/src/interface/list-shared.ts +3 -3
- package/src/interface/list-view.ts +3 -3
- package/src/interface/subagent-actions.ts +66 -439
- package/src/interface/subagent-tool-schema.ts +21 -17
- package/src/interface/subagent-tool.ts +12 -7
- package/src/interface/subagents.ts +4 -4
- package/src/interface/tool-render.ts +37 -15
- package/src/interface/tool-workflow-script.ts +34 -76
- package/src/interface/tool-workflow.ts +57 -94
- package/src/interface/views/WorkflowsView.ts +8 -16
- package/src/interface/views/__tests__/WorkflowsView-signature.test.ts +3 -3
- package/src/interface/views/__tests__/detail-content-session-file.test.ts +2 -2
- package/src/interface/views/detail-content.ts +4 -4
- package/src/interface/views/format.ts +23 -62
- package/src/{orchestration/jsonl-run-store.ts → jsonl-run-store.ts} +137 -225
- package/agents/analyst.md +0 -61
- package/agents/coder.md +0 -70
- package/agents/debugger.md +0 -67
- package/agents/doc-reviewer.md +0 -50
- package/agents/explorer.md +0 -64
- package/agents/general-purpose.md +0 -32
- package/agents/orchestrator.md +0 -63
- package/agents/planner.md +0 -54
- package/agents/researcher.md +0 -65
- package/agents/reviewer.md +0 -74
- package/src/execution/__tests__/__fixtures__/notifier-golden-snapshots.json +0 -53
- package/src/execution/__tests__/__fixtures__/truncline.snapshot.json +0 -1
- package/src/execution/__tests__/agent-registry.test.ts +0 -363
- package/src/execution/__tests__/agent-result-mapper.test.ts +0 -150
- package/src/execution/__tests__/alive-store.test.ts +0 -147
- package/src/execution/__tests__/ask-user-transit-e2e.test.ts +0 -490
- package/src/execution/__tests__/before-agent-start-injection.test.ts +0 -132
- package/src/execution/__tests__/bg-notify-render.test.ts +0 -329
- package/src/execution/__tests__/channel-registry-handshake.test.ts +0 -243
- package/src/execution/__tests__/chat-engine-routing.test.ts +0 -601
- package/src/execution/__tests__/chatmode-first-round-closure-service.test.ts +0 -365
- package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +0 -190
- package/src/execution/__tests__/chatmode-round-notify-real-chain.test.ts +0 -215
- package/src/execution/__tests__/concurrency-pool.test.ts +0 -250
- package/src/execution/__tests__/config.test.ts +0 -110
- package/src/execution/__tests__/conversation-wiring.test.ts +0 -198
- package/src/execution/__tests__/crash-recovery.test.ts +0 -320
- package/src/execution/__tests__/delivery-methods.test.ts +0 -422
- package/src/execution/__tests__/dialog-queue.test.ts +0 -299
- package/src/execution/__tests__/epipe-fallback.test.ts +0 -241
- package/src/execution/__tests__/execute-and-await-worktree.test.ts +0 -243
- package/src/execution/__tests__/execute-nesting.test.ts +0 -323
- package/src/execution/__tests__/execute-options-mapper.test.ts +0 -200
- package/src/execution/__tests__/execution-record.test.ts +0 -1394
- package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +0 -171
- package/src/execution/__tests__/finalize-record.test.ts +0 -368
- package/src/execution/__tests__/finalized-marker.test.ts +0 -82
- package/src/execution/__tests__/format-schema-instruction.test.ts +0 -169
- package/src/execution/__tests__/format.test.ts +0 -458
- package/src/execution/__tests__/gc-timer.test.ts +0 -184
- package/src/execution/__tests__/get-record-for-action-restart.test.ts +0 -254
- package/src/execution/__tests__/gui-mode-dispatch.test.ts +0 -59
- package/src/execution/__tests__/helpers/mock-extension-api.ts +0 -30
- package/src/execution/__tests__/helpers/spawn-mock.ts +0 -242
- package/src/execution/__tests__/host-mode.test.ts +0 -87
- package/src/execution/__tests__/index-session-start-identity.test.ts +0 -371
- package/src/execution/__tests__/index-session-start.test.ts +0 -672
- package/src/execution/__tests__/lifecycle-manager-lock.test.ts +0 -211
- package/src/execution/__tests__/lifecycle-manager.test.ts +0 -383
- package/src/execution/__tests__/lifecycle-predicates.test.ts +0 -116
- package/src/execution/__tests__/list-component.test.ts +0 -401
- package/src/execution/__tests__/list-fields.test.ts +0 -140
- package/src/execution/__tests__/manifest-parentid.test.ts +0 -117
- package/src/execution/__tests__/model-resolver.test.ts +0 -465
- package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +0 -287
- package/src/execution/__tests__/nested-visibility.test.ts +0 -325
- package/src/execution/__tests__/notifier-flush.test.ts +0 -612
- package/src/execution/__tests__/notifier-golden-snapshot.test.ts +0 -261
- package/src/execution/__tests__/notify-ledger.test.ts +0 -826
- package/src/execution/__tests__/one-shot-upgrade.test.ts +0 -205
- package/src/execution/__tests__/output-collector.test.ts +0 -358
- package/src/execution/__tests__/parent-child-matrix.test.ts +0 -336
- package/src/execution/__tests__/path-encoding.test.ts +0 -104
- package/src/execution/__tests__/pi-invocation.test.ts +0 -134
- package/src/execution/__tests__/record-store.test.ts +0 -1057
- package/src/execution/__tests__/records-cwd-isolation.test.ts +0 -91
- package/src/execution/__tests__/recursive-visibility-baseline.test.ts +0 -339
- package/src/execution/__tests__/recursive-visibility-env.test.ts +0 -273
- package/src/execution/__tests__/relay-agent.test.ts +0 -448
- package/src/execution/__tests__/relay-env.test.ts +0 -42
- package/src/execution/__tests__/resource-policy.test.ts +0 -109
- package/src/execution/__tests__/rpc-mode.test.ts +0 -89
- package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +0 -267
- package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +0 -253
- package/src/execution/__tests__/run-spawn-edges.test.ts +0 -687
- 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 -199
- package/src/execution/__tests__/sdk-contract.test.ts +0 -273
- package/src/execution/__tests__/session-context-resolver.test.ts +0 -167
- package/src/execution/__tests__/session-file-gc.test.ts +0 -293
- package/src/execution/__tests__/session-pending.test.ts +0 -197
- package/src/execution/__tests__/session-reconstructor.test.ts +0 -379
- package/src/execution/__tests__/session-runner-epipe.test.ts +0 -178
- package/src/execution/__tests__/session-runner-schema-env.test.ts +0 -350
- package/src/execution/__tests__/session-start-reaper.test.ts +0 -233
- package/src/execution/__tests__/spawn-args.test.ts +0 -445
- package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +0 -189
- package/src/execution/__tests__/spawn-event-adapter.test.ts +0 -167
- package/src/execution/__tests__/spawn-worktree-guidance.test.ts +0 -207
- package/src/execution/__tests__/spawned-children.test.ts +0 -92
- package/src/execution/__tests__/start-sync-model-guard.test.ts +0 -150
- package/src/execution/__tests__/startup-config-declaration.test.ts +0 -35
- package/src/execution/__tests__/status-refactor.test.ts +0 -345
- package/src/execution/__tests__/stdin-writer.test.ts +0 -463
- package/src/execution/__tests__/stream-sink-retirement.test.ts +0 -261
- package/src/execution/__tests__/subagent-service-abort.test.ts +0 -60
- package/src/execution/__tests__/subagent-service-message-close.test.ts +0 -629
- package/src/execution/__tests__/subagent-service-parent-guard.test.ts +0 -180
- package/src/execution/__tests__/subagent-service.test.ts +0 -788
- package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +0 -310
- package/src/execution/__tests__/subprocess-agent-runner.test.ts +0 -599
- package/src/execution/__tests__/temp-prompt.test.ts +0 -53
- package/src/execution/__tests__/timeout-integration.test.ts +0 -615
- package/src/execution/__tests__/tombstone-store.test.ts +0 -73
- package/src/execution/__tests__/tool-action.test.ts +0 -476
- package/src/execution/__tests__/truncline-snapshot.test.ts +0 -81
- 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-channels.test.ts +0 -187
- package/src/execution/__tests__/ui-interaction-model.test.ts +0 -67
- package/src/execution/__tests__/ui-request-handler-factory.test.ts +0 -370
- package/src/execution/__tests__/ui-request-handler.test.ts +0 -204
- package/src/execution/__tests__/ui-request-observability.test.ts +0 -114
- package/src/execution/__tests__/ui-request-queue.test.ts +0 -133
- package/src/execution/__tests__/worktree-manager.test.ts +0 -633
- package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +0 -229
- package/src/execution/__tests__/worktree-reconcile.integration.test.ts +0 -181
- package/src/execution/__tests__/worktree-registry.test.ts +0 -199
- package/src/execution/agent-registry.ts +0 -199
- package/src/execution/agent-result-mapper.ts +0 -90
- package/src/execution/alive-store.ts +0 -92
- package/src/execution/argv-mirror.ts +0 -113
- package/src/execution/best-effort.ts +0 -38
- package/src/execution/channel-registry-access.ts +0 -144
- package/src/execution/concurrency-pool.ts +0 -116
- package/src/execution/config.ts +0 -96
- package/src/execution/dialog-queue.ts +0 -330
- package/src/execution/engine/__tests__/common/data-dir.test.ts +0 -53
- package/src/execution/engine/__tests__/common/errors.test.ts +0 -132
- package/src/execution/engine/__tests__/common/event-journal.test.ts +0 -177
- package/src/execution/engine/__tests__/common/kill-chain.test.ts +0 -192
- package/src/execution/engine/__tests__/common/nesting-guard.test.ts +0 -81
- package/src/execution/engine/__tests__/common/persona-router.test.ts +0 -123
- package/src/execution/engine/__tests__/common/pool-manager.test.ts +0 -154
- package/src/execution/engine/__tests__/common/schema-emulation.test.ts +0 -128
- package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +0 -28
- package/src/execution/engine/__tests__/conformance/agent-event-invariants.ts +0 -141
- package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +0 -109
- package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +0 -101
- package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +0 -77
- package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +0 -104
- package/src/execution/engine/__tests__/conformance/contract.relay.test.ts +0 -342
- package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +0 -201
- package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +0 -76
- package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +0 -79
- package/src/execution/engine/__tests__/engine-discovery.test.ts +0 -87
- package/src/execution/engine/__tests__/engines-declaration.test.ts +0 -36
- package/src/execution/engine/__tests__/model-prompt.test.ts +0 -85
- package/src/execution/engine/__tests__/paths.test.ts +0 -39
- package/src/execution/engine/__tests__/registry.test.ts +0 -120
- package/src/execution/engine/__tests__/routing.test.ts +0 -231
- package/src/execution/engine/common/data-dir.ts +0 -62
- package/src/execution/engine/common/errors.ts +0 -183
- package/src/execution/engine/common/event-journal.ts +0 -254
- package/src/execution/engine/common/journal-replay.ts +0 -62
- package/src/execution/engine/common/kill-chain.ts +0 -221
- package/src/execution/engine/common/nesting-guard.ts +0 -50
- package/src/execution/engine/common/persona-router.ts +0 -108
- package/src/execution/engine/common/pool-manager.ts +0 -226
- 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/engine-discovery.ts +0 -65
- package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +0 -469
- package/src/execution/engine/engines/pi/__tests__/reader.test.ts +0 -155
- package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +0 -164
- package/src/execution/engine/engines/pi/pi-engine.ts +0 -415
- package/src/execution/engine/engines/pi/reader.ts +0 -48
- package/src/execution/engine/engines/pi/registration.ts +0 -35
- 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__/parser.test.ts +0 -246
- package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +0 -228
- package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +0 -210
- package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +0 -64
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +0 -127
- package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +0 -580
- package/src/execution/engine/engines/zcode/constants.ts +0 -43
- package/src/execution/engine/engines/zcode/golden-sample.ts +0 -39
- package/src/execution/engine/engines/zcode/launcher.ts +0 -161
- package/src/execution/engine/engines/zcode/parser.ts +0 -436
- package/src/execution/engine/engines/zcode/preparer.ts +0 -363
- 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/zcode-engine.ts +0 -658
- package/src/execution/engine/host-task-spec.ts +0 -47
- package/src/execution/engine/model-prompt.ts +0 -59
- package/src/execution/engine/paths.ts +0 -42
- package/src/execution/engine/port.ts +0 -153
- package/src/execution/engine/registry.ts +0 -123
- package/src/execution/engine/routing.ts +0 -218
- package/src/execution/engine/types.ts +0 -309
- package/src/execution/execute-options-mapper.ts +0 -112
- package/src/execution/execution-record.ts +0 -965
- package/src/execution/finalize-record.ts +0 -251
- package/src/execution/finalized-marker.ts +0 -51
- package/src/execution/get-state-handshake.ts +0 -104
- package/src/execution/host-mode.ts +0 -56
- package/src/execution/idle-gc.ts +0 -47
- package/src/execution/lifecycle-manager.ts +0 -513
- package/src/execution/lifecycle-predicates.ts +0 -65
- package/src/execution/manifest-store.ts +0 -256
- package/src/execution/model-config-service.ts +0 -219
- package/src/execution/model-resolver.ts +0 -248
- package/src/execution/notifier.ts +0 -330
- package/src/execution/notify-ledger.ts +0 -580
- package/src/execution/output-collector.ts +0 -228
- package/src/execution/path-encoding.ts +0 -60
- package/src/execution/pi-invocation.ts +0 -120
- package/src/execution/record-entry.ts +0 -132
- package/src/execution/record-store.ts +0 -1234
- package/src/execution/relay-env.ts +0 -37
- package/src/execution/session-context-resolver.ts +0 -64
- package/src/execution/session-file-gc.ts +0 -120
- package/src/execution/session-pending.ts +0 -164
- package/src/execution/session-reconstructor.ts +0 -678
- package/src/execution/session-runner.ts +0 -1781
- package/src/execution/sessions-index.ts +0 -304
- package/src/execution/spawn-event-adapter.ts +0 -363
- package/src/execution/stdin-writer.ts +0 -198
- package/src/execution/stream-sink.ts +0 -126
- package/src/execution/subagent-service.ts +0 -2141
- package/src/execution/subprocess-agent-runner.ts +0 -317
- package/src/execution/temp-prompt.ts +0 -62
- package/src/execution/tombstone-store.ts +0 -72
- package/src/execution/turn-limiter.ts +0 -102
- package/src/execution/types.ts +0 -973
- package/src/execution/ui-channels.ts +0 -216
- package/src/execution/ui-interaction-model.ts +0 -48
- package/src/execution/ui-request-handler-factory.ts +0 -212
- package/src/execution/ui-request-observability.ts +0 -81
- package/src/execution/ui-request-queue.ts +0 -184
- package/src/execution/worktree-manager.ts +0 -688
- package/src/execution/worktree-registry.ts +0 -222
- package/src/orchestration/__tests__/__fixtures__/worker-template.snapshot.txt +0 -349
- package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +0 -202
- package/src/orchestration/__tests__/agent-call-stream.test.ts +0 -152
- package/src/orchestration/__tests__/args-validator.test.ts +0 -143
- package/src/orchestration/__tests__/config-loader.test.ts +0 -503
- package/src/orchestration/__tests__/error-recovery-handlers.test.ts +0 -809
- package/src/orchestration/__tests__/error-recovery-postmessage-defense.test.ts +0 -405
- package/src/orchestration/__tests__/error-recovery-serialize-failed-result.test.ts +0 -56
- package/src/orchestration/__tests__/error-recovery-workflow-call.test.ts +0 -166
- package/src/orchestration/__tests__/execute-agent-call.test.ts +0 -451
- package/src/orchestration/__tests__/jsonl-run-store-corrupt-entry.test.ts +0 -150
- package/src/orchestration/__tests__/jsonl-run-store-loadall-sources.test.ts +0 -171
- package/src/orchestration/__tests__/jsonl-run-store-retention.test.ts +0 -202
- package/src/orchestration/__tests__/jsonl-run-store-session-file.test.ts +0 -1030
- package/src/orchestration/__tests__/launcher-nested-workflow.test.ts +0 -600
- package/src/orchestration/__tests__/lifecycle-runid-injection.test.ts +0 -96
- package/src/orchestration/__tests__/lifecycle.test.ts +0 -659
- package/src/orchestration/__tests__/non-cloneable-return-e2e.test.ts +0 -95
- package/src/orchestration/__tests__/review-fix-loop-e2e.test.ts +0 -2025
- package/src/orchestration/__tests__/script-lint.test.ts +0 -831
- package/src/orchestration/__tests__/skill-discovery.test.ts +0 -201
- package/src/orchestration/__tests__/test-mocks.ts +0 -197
- package/src/orchestration/__tests__/worker-exit-without-result.test.ts +0 -368
- package/src/orchestration/__tests__/worker-host.test.ts +0 -120
- package/src/orchestration/__tests__/worker-returnmeta-passthrough.test.ts +0 -164
- package/src/orchestration/__tests__/worker-script-builder-runtime.test.ts +0 -563
- package/src/orchestration/__tests__/worker-script-builder.test.ts +0 -309
- package/src/orchestration/__tests__/worker-script-template-snapshot.test.ts +0 -129
- package/src/orchestration/__tests__/workflow-nesting-e2e.test.ts +0 -317
- package/src/orchestration/__tests__/workflow-script-lint-memo.test.ts +0 -110
- package/src/orchestration/__tests__/workflows-e2e.test.ts +0 -537
- package/src/orchestration/agent-opts-resolver.ts +0 -174
- package/src/orchestration/args-validator.ts +0 -127
- package/src/orchestration/config-loader.ts +0 -315
- package/src/orchestration/error-recovery.ts +0 -1018
- package/src/orchestration/execute-agent-call.ts +0 -256
- package/src/orchestration/launcher.ts +0 -455
- package/src/orchestration/lifecycle.ts +0 -399
- package/src/orchestration/models/__tests__/budget.test.ts +0 -307
- package/src/orchestration/models/__tests__/trace.test.ts +0 -408
- package/src/orchestration/models/agent-call.ts +0 -83
- package/src/orchestration/models/budget.ts +0 -118
- package/src/orchestration/models/ports.ts +0 -164
- package/src/orchestration/models/run-runtime.ts +0 -104
- package/src/orchestration/models/run-spec.ts +0 -83
- package/src/orchestration/models/run-state.ts +0 -44
- package/src/orchestration/models/trace.ts +0 -183
- package/src/orchestration/models/types.ts +0 -301
- package/src/orchestration/models/workflow-run.ts +0 -254
- package/src/orchestration/models/workflow-script-registry.ts +0 -35
- package/src/orchestration/models/workflow-script.ts +0 -117
- package/src/orchestration/script-lint.ts +0 -766
- package/src/orchestration/skill-discovery.ts +0 -115
- package/src/orchestration/worker-handle.ts +0 -115
- package/src/orchestration/worker-host.ts +0 -98
- package/src/orchestration/worker-script-builder.ts +0 -421
- package/src/orchestration/workflow-files.ts +0 -85
- package/src/orchestration/workflow-script-registry-impl.ts +0 -133
- package/src/shared/__tests__/agent-ref.test.ts +0 -34
- package/src/shared/__tests__/meta-parser.test.ts +0 -304
- package/src/shared/__tests__/model-ref.test.ts +0 -306
- package/src/shared/__tests__/resource-discovery-manifest-cache.test.ts +0 -280
- package/src/shared/__tests__/resource-discovery.test.ts +0 -736
- package/src/shared/__tests__/resource-meta.test.ts +0 -51
- package/src/shared/__tests__/schema-jsonify.test.ts +0 -81
- package/src/shared/__tests__/timer-delay.test.ts +0 -61
- package/src/shared/agent-event.ts +0 -13
- package/src/shared/agent-ref.ts +0 -57
- package/src/shared/meta-parser.ts +0 -261
- package/src/shared/model-ref.ts +0 -286
- package/src/shared/resource-discovery.ts +0 -811
- package/src/shared/resource-meta.ts +0 -65
- package/src/shared/schema-env.ts +0 -44
- package/src/shared/schema-jsonify.ts +0 -58
- package/src/shared/timer-delay.ts +0 -54
- package/src/shared/xml-injection.ts +0 -35
- package/workflows/README.md +0 -81
- package/workflows/_shared/agent-refs.cjs +0 -40
- package/workflows/chain.js +0 -131
- package/workflows/map-reduce.js +0 -174
- package/workflows/parallel.js +0 -148
- package/workflows/review-fix-loop-utils.cjs +0 -1309
- package/workflows/review-fix-loop.js +0 -1404
- package/workflows/scatter-gather.js +0 -178
package/src/index.ts
CHANGED
|
@@ -20,37 +20,50 @@ import type { BeforeAgentStartEvent, ExtensionAPI, ExtensionContext, SessionComp
|
|
|
20
20
|
import { getAgentDir } from "@earendil-works/pi-coding-agent";
|
|
21
21
|
import { getLogger, setPiHandle } from "@zhushanwen/pi-extension-logger";
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
// ═══ core 宿主端口接线(subagent-core 包抽离 u0-wire;实现见 src/host/pi-host.ts) ═══
|
|
24
|
+
import { configureCore } from "@zhushanwen/subagent-core/core/host-services.ts";
|
|
25
|
+
import { configureNotifyDomain } from "@zhushanwen/subagent-core/core/notify-ports.ts";
|
|
26
|
+
import { createPiHostServices, createPiNotifyDomainPorts } from "./host/pi-host.ts";
|
|
27
|
+
|
|
28
|
+
import { oncePerProcess } from "@zhushanwen/pi-ext-guards";
|
|
29
|
+
import { bestEffort } from "@zhushanwen/subagent-core/execution/best-effort.ts";
|
|
24
30
|
// ═══ execution/ 层(subagents 核心 + 运行时) ═══
|
|
25
|
-
import { getOrCreateChannelRegistry } from "
|
|
26
|
-
import { DialogGlobalQueue } from "
|
|
31
|
+
import { getOrCreateChannelRegistry } from "@zhushanwen/subagent-core/execution/channel-registry-access.ts";
|
|
32
|
+
import { DialogGlobalQueue } from "@zhushanwen/subagent-core/execution/dialog-queue.ts";
|
|
33
|
+
// [engine-awareness U3] 全局 config 三态读取(检测 poll 与 session_start 基线共用)
|
|
34
|
+
import { readGlobalConfig } from "@zhushanwen/subagent-core/execution/config.ts";
|
|
27
35
|
// [U7] 引擎列表状态文件(registry → engines.json,GUI 引擎选择器数据源)
|
|
28
|
-
import { syncEnginesFile } from "
|
|
36
|
+
import { syncEnginesFile } from "@zhushanwen/subagent-core/execution/engine/engine-discovery.ts";
|
|
29
37
|
// [U7] 引擎模型段注入(defaultEngine 非 pi 时 system prompt 补 <available_<engine>_models>)
|
|
30
|
-
|
|
38
|
+
// [engine-awareness U3] 补恒在状态段 <current_subagent_engine>(D6,pi 引擎也声明)
|
|
39
|
+
import { buildEngineModelsPromptAppend, buildSubagentEngineSection } from "@zhushanwen/subagent-core/execution/engine/model-prompt.ts";
|
|
31
40
|
// [P1 引擎接线] 组合根登记 'pi' 引擎进 registry(引擎获取统一经 getEngine,缺省 id 'pi')
|
|
32
|
-
import { registerPiEngine } from "
|
|
41
|
+
import { registerPiEngine } from "@zhushanwen/subagent-core/execution/engine/engines/pi/registration.ts";
|
|
33
42
|
// [P3 引擎接线] 组合根登记 'zcode' 引擎(spawn 单轮模式;engineDataDir 默认走
|
|
34
43
|
// common/data-dir SSOT,见 engines/zcode/registration.ts)
|
|
35
|
-
import { registerZcodeEngine } from "
|
|
36
|
-
import { createUiRequestHandlerForMode } from "
|
|
44
|
+
import { registerZcodeEngine } from "@zhushanwen/subagent-core/execution/engine/engines/zcode/registration.ts";
|
|
45
|
+
import { createUiRequestHandlerForMode } from "@zhushanwen/subagent-core/execution/ui-request-handler-factory.ts";
|
|
37
46
|
import {
|
|
38
47
|
getModelConfigService,
|
|
39
48
|
ModelConfigService,
|
|
40
49
|
setModelConfigService,
|
|
41
|
-
} from "
|
|
42
|
-
import { bindNotifyLedgerHost, getBoundNotifyLedger, type NotifyLedgerHost } from "
|
|
43
|
-
import { IDENTITY_CUSTOM_TYPE, type SubagentIdentityData } from "
|
|
44
|
-
import type { ExecutionMode
|
|
45
|
-
import { maybeCleanupExpiredSessionFiles } from "
|
|
50
|
+
} from "@zhushanwen/subagent-core/execution/model-config-service.ts";
|
|
51
|
+
import { bindNotifyLedgerHost, getBoundNotifyLedger, type NotifyLedgerHost } from "@zhushanwen/subagent-core/execution/notify-ledger.ts";
|
|
52
|
+
import { IDENTITY_CUSTOM_TYPE, type SubagentIdentityData } from "@zhushanwen/subagent-core/execution/session-reconstructor.ts";
|
|
53
|
+
import type { ExecutionMode } from "@zhushanwen/subagent-core/execution/types.ts";
|
|
54
|
+
import { maybeCleanupExpiredSessionFiles } from "@zhushanwen/subagent-core/execution/session-file-gc.ts";
|
|
46
55
|
import {
|
|
47
56
|
getSubagentService,
|
|
48
57
|
setSubagentService,
|
|
49
58
|
SubagentService,
|
|
50
|
-
} from "
|
|
51
|
-
import { killAllSpawnedChildren } from "
|
|
52
|
-
import { SubprocessAgentRunner } from "
|
|
53
|
-
import { WorktreeManager } from "
|
|
59
|
+
} from "@zhushanwen/subagent-core/execution/subagent-service.ts";
|
|
60
|
+
import { killAllSpawnedChildren } from "@zhushanwen/subagent-core/execution/session-runner.ts";
|
|
61
|
+
import { SubprocessAgentRunner } from "@zhushanwen/subagent-core/execution/subprocess-agent-runner.ts";
|
|
62
|
+
import { WorktreeManager } from "@zhushanwen/subagent-core/execution/worktree-manager.ts";
|
|
63
|
+
// [engine-awareness U3] per-turn 引擎检测编排(D1/D1b/D2/D3/D5);normalizeEngineId
|
|
64
|
+
// 单一权威源在 core registry(原经 engine-awareness 再导出,导入面已折叠直连)
|
|
65
|
+
import { normalizeEngineId } from "@zhushanwen/subagent-core/execution/engine/registry.ts";
|
|
66
|
+
import { runEngineAwarenessTurn } from "./injectors/engine-awareness.ts";
|
|
54
67
|
import { setupModelListInjector } from "./injectors/model-list-injector.ts";
|
|
55
68
|
import { setupSubagentListInjector } from "./injectors/subagent-list-injector.ts";
|
|
56
69
|
import { setupWorkflowListInjector } from "./injectors/workflow-list-injector.ts";
|
|
@@ -63,20 +76,21 @@ import { registerSubagentTool } from "./interface/subagent-tool.ts";
|
|
|
63
76
|
import { registerSubagentsCommand } from "./interface/subagents.ts";
|
|
64
77
|
import { registerWorkflowTool } from "./interface/tool-workflow.ts";
|
|
65
78
|
import { registerWorkflowScriptTool } from "./interface/tool-workflow-script.ts";
|
|
66
|
-
import { JsonlRunStore } from "./
|
|
67
|
-
import { clearSkillPathCache } from "
|
|
79
|
+
import { JsonlRunStore } from "./jsonl-run-store.ts";
|
|
80
|
+
import { clearSkillPathCache } from "@zhushanwen/subagent-core/orchestration/skill-discovery.ts";
|
|
68
81
|
// ═══ orchestration/ 层(workflow engine + infra) ═══
|
|
69
|
-
import type { LauncherDeps } from "
|
|
70
|
-
import { executeNestedWorkflow, runAndWait, type WorkflowRunResult } from "
|
|
82
|
+
import type { LauncherDeps } from "@zhushanwen/subagent-core/orchestration/launcher.ts";
|
|
83
|
+
import { executeNestedWorkflow, runAndWait, type WorkflowRunResult } from "@zhushanwen/subagent-core/orchestration/launcher.ts";
|
|
71
84
|
import {
|
|
72
85
|
evictDoneRunsBeyondCap,
|
|
73
86
|
MAX_RETAINED_DONE_RUNS,
|
|
87
|
+
recoverCrashedRuns,
|
|
74
88
|
scheduleTimeBudget,
|
|
75
89
|
terminateRunningRuns,
|
|
76
|
-
} from "
|
|
77
|
-
import type { WorkflowRun } from "
|
|
78
|
-
import { WorkerHostImpl } from "
|
|
79
|
-
import { WorkflowScriptRegistryImpl } from "
|
|
90
|
+
} from "@zhushanwen/subagent-core/orchestration/lifecycle.ts";
|
|
91
|
+
import type { WorkflowRun } from "@zhushanwen/subagent-core/orchestration/models/workflow-run.ts";
|
|
92
|
+
import { WorkerHostImpl } from "@zhushanwen/subagent-core/orchestration/worker-host.ts";
|
|
93
|
+
import { WorkflowScriptRegistryImpl } from "@zhushanwen/subagent-core/orchestration/workflow-script-registry-impl.ts";
|
|
80
94
|
|
|
81
95
|
// ── pi.__workflowRun 类型扩展(D-8 签名) ─────────────────
|
|
82
96
|
|
|
@@ -96,42 +110,6 @@ declare module "@earendil-works/pi-coding-agent" {
|
|
|
96
110
|
// 模块级 logger(setPiHandle 注入后自动走 appendEntry)
|
|
97
111
|
const logger = getLogger("subagents");
|
|
98
112
|
|
|
99
|
-
// ── subagent 状态快照格式化 ──
|
|
100
|
-
//
|
|
101
|
-
// [v4 A-6] before_agent_start 注入 hook 已删(活跃 subagent 清单改由 agent 按需调
|
|
102
|
-
// action:'list' 拉取,消除每 loop 注入的上下文税与盲点)。本函数保留为纯格式化工具:
|
|
103
|
-
// before-agent-start-injection / parent-child-matrix 测试覆盖其正确性,未来 list
|
|
104
|
-
// 视图或其他注入点可复用。
|
|
105
|
-
|
|
106
|
-
/** 活跃 subagent 数量上限(超过截断显示)。 */
|
|
107
|
-
const MAX_STATUS_INJECTION = 10;
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* 将活跃 subagent record 格式化为一行一条的快照文本。
|
|
111
|
-
*
|
|
112
|
-
* 格式:
|
|
113
|
-
* [subagent-status] N active subagents:
|
|
114
|
-
* - sa-xxx (slug): running, rounds 0
|
|
115
|
-
* - sa-yyy (slug): idle, rounds 3
|
|
116
|
-
* +2 more, use action:'list'
|
|
117
|
-
*
|
|
118
|
-
* @param records 已筛选的活跃 record(running + idle)
|
|
119
|
-
*/
|
|
120
|
-
export function formatSubagentStatusSnapshot(records: SubagentRecord[]): string {
|
|
121
|
-
const lines = [`[subagent-status] ${records.length} active subagent${records.length === 1 ? "" : "s"}:`];
|
|
122
|
-
const shown = records.slice(0, MAX_STATUS_INJECTION);
|
|
123
|
-
for (const r of shown) {
|
|
124
|
-
const slug = r.slug || r.agent;
|
|
125
|
-
const roundPart = r.round !== undefined && r.round > 0 ? `, rounds ${r.round}` : "";
|
|
126
|
-
lines.push(`- ${r.id} (${slug}): ${r.status}${roundPart}`);
|
|
127
|
-
}
|
|
128
|
-
const remaining = records.length - MAX_STATUS_INJECTION;
|
|
129
|
-
if (remaining > 0) {
|
|
130
|
-
lines.push(`+${remaining} more, use action:'list'`);
|
|
131
|
-
}
|
|
132
|
-
return lines.join("\n");
|
|
133
|
-
}
|
|
134
|
-
|
|
135
113
|
// ═══ [V2 决策 7 防线 i] process 级 shutdown hook ═══
|
|
136
114
|
//
|
|
137
115
|
// session_shutdown 是 pi 的 async hook,进程被 SIGTERM/SIGINT 强杀或崩溃时来不及
|
|
@@ -170,6 +148,14 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
170
148
|
// 的 getLogger("subagents") 也能走 appendEntry。
|
|
171
149
|
setPiHandle(pi);
|
|
172
150
|
|
|
151
|
+
// [u0-wire] core 宿主端口接线:本波端口尚无 core 消费方(消费切换在 u0-log /
|
|
152
|
+
// u0-data-discovery / u0-notify 波次),接线本身零行为变化。紧随 setPiHandle——
|
|
153
|
+
// core log 桥接走 pi-extension-logger,其 pi handle 先注入则配置完成即桥接链路
|
|
154
|
+
// 完整;且先于任何可能消费 core 端口的初始化逻辑(引擎登记等)。缺省态若被消费,
|
|
155
|
+
// dataRoot 抛 core_host_not_configured(§3.4),接线后不再可达。
|
|
156
|
+
configureCore(createPiHostServices());
|
|
157
|
+
configureNotifyDomain(createPiNotifyDomainPorts());
|
|
158
|
+
|
|
173
159
|
// [P1 引擎接线] 组合根登记缺省引擎:进程级 SubagentService 单例(session_start 注入)
|
|
174
160
|
// 经 registry 以 'pi' 暴露——引擎获取从此统一走 getEngine(DEFAULT_ENGINE_ID),上层
|
|
175
161
|
// 不再硬编码「spawn pi」。幂等(registerEngine 覆盖语义),工厂惰性解析服务单例。
|
|
@@ -230,12 +216,10 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
230
216
|
}
|
|
231
217
|
}
|
|
232
218
|
|
|
233
|
-
// resources_discover
|
|
234
|
-
// pi 核心 auto-discovery 已覆盖 .agents/skills
|
|
235
|
-
// --skill 由 agent({skill}) 调用方显式传入,无需
|
|
236
|
-
|
|
237
|
-
return {};
|
|
238
|
-
});
|
|
219
|
+
// resources_discover:不再注册 handler(v4 决策:不再注入额外 skill 目录,
|
|
220
|
+
// ADR-031 废弃 discovery.json)。pi 核心 auto-discovery 已覆盖 .agents/skills
|
|
221
|
+
// 等标准目录,子 session 的 --skill 由 agent({skill}) 调用方显式传入,无需
|
|
222
|
+
// extension 额外补充。
|
|
239
223
|
|
|
240
224
|
// ════════════════════════════════════════════════════════════
|
|
241
225
|
// workflow 域:tools + command + pi.__workflowRun + state
|
|
@@ -267,6 +251,10 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
267
251
|
* workflow 域启动时 fail-fast,避免后续 store.save 再次失败导致 run 状态不落地。
|
|
268
252
|
* subagent 域不依赖 store,不受此标志影响。 */
|
|
269
253
|
storeHealthy: boolean;
|
|
254
|
+
/** [engine-awareness D1b] 上一次已知默认引擎(session_start 初始化,per-turn 检测
|
|
255
|
+
* diff 基准)。undefined = 初始化时 config 读失败——首 turn 检测遇 undefined
|
|
256
|
+
* 静默基线化,不算变更、不发通知(防首 turn 伪通知)。 */
|
|
257
|
+
lastEngine?: string;
|
|
270
258
|
}
|
|
271
259
|
>();
|
|
272
260
|
|
|
@@ -359,8 +347,9 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
359
347
|
lsRef.lastSessionId = sessionId;
|
|
360
348
|
|
|
361
349
|
// [U7] 引擎列表同步 engines.json(幂等零写 + fail-safe;组合根注册已在
|
|
362
|
-
// extension 工厂体完成,此处 registry
|
|
363
|
-
|
|
350
|
+
// extension 工厂体完成,此处 registry 已含全部引擎)。写 agentDir 全局文件属
|
|
351
|
+
// 跨 session 副作用——oncePerProcess 守卫防 factory 二调/handler 累积双跑(u-audit-fix)。
|
|
352
|
+
oncePerProcess("subagent-workflow:sync-engines-file", () => syncEnginesFile(agentDir));
|
|
364
353
|
|
|
365
354
|
// skill 路径两级缓存 session 级失效:pi 同进程可能有多个 session(TUI /new、/fork),
|
|
366
355
|
// 运行中安装的 skill 需对新 session 可见(含曾 miss 缓存的 undefined 条目与 npm 新装
|
|
@@ -505,21 +494,27 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
505
494
|
setSubagentService(service);
|
|
506
495
|
}
|
|
507
496
|
|
|
508
|
-
// S-2: 启动 idle record GC 定时器(30 天 TTL
|
|
509
|
-
|
|
497
|
+
// S-2: 启动 idle record GC 定时器(30 天 TTL,每小时检查一次)。
|
|
498
|
+
// 注册 setInterval 属进程级副作用——oncePerProcess 守卫防双跑(u-audit-fix)。
|
|
499
|
+
oncePerProcess("subagent-workflow:start-gc-timer", () => service.startGcTimer());
|
|
510
500
|
|
|
511
501
|
try {
|
|
512
|
-
|
|
502
|
+
// 递归扫描 <agentDir>/subagents + unlink 超 TTL 跨 session 文件属进程级维护
|
|
503
|
+
// ——oncePerProcess 守卫防双跑(u-audit-fix)。
|
|
504
|
+
oncePerProcess("subagent-workflow:cleanup-expired-session-files", () =>
|
|
505
|
+
maybeCleanupExpiredSessionFiles(agentDir, cwd));
|
|
513
506
|
} catch (err) {
|
|
514
507
|
logger.warn("[subagents] expired session file cleanup failed", {
|
|
515
508
|
reason: err instanceof Error ? err.message : String(err),
|
|
516
509
|
});
|
|
517
510
|
}
|
|
518
511
|
|
|
519
|
-
// ADR-035 启动恢复:扫描 manifest tmp 残留(崩溃打断的 writeManifest
|
|
520
|
-
//
|
|
512
|
+
// ADR-035 启动恢复:扫描 manifest tmp 残留(崩溃打断的 writeManifest 留下,promote/unlink)。
|
|
513
|
+
// 扫描属进程级维护——oncePerProcess 守卫防双跑(u-audit-fix);第二派发重放首次
|
|
514
|
+
// Promise(结果缓存语义),recovered 计数日志可能重打,无文件副作用。
|
|
521
515
|
try {
|
|
522
|
-
const recovered = await
|
|
516
|
+
const recovered = await oncePerProcess("subagent-workflow:recover-manifest-tmp-files", () =>
|
|
517
|
+
service.recoverManifestTmpFiles());
|
|
523
518
|
if (recovered.recovered > 0 || recovered.deleted > 0) {
|
|
524
519
|
logger.warn(`[subagents] manifest tmp recovery: ${recovered.recovered} promoted, ${recovered.deleted} deleted`);
|
|
525
520
|
}
|
|
@@ -530,8 +525,9 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
530
525
|
}
|
|
531
526
|
|
|
532
527
|
try {
|
|
533
|
-
|
|
534
|
-
|
|
528
|
+
// 孤儿 worktree 清理(git/rm 进程操作 + 注册表/目录扫描)属进程级维护
|
|
529
|
+
// ——oncePerProcess 守卫防双跑(u-audit-fix)。
|
|
530
|
+
await oncePerProcess("subagent-workflow:worktree-scan", () => new WorktreeManager(agentDir).scan());
|
|
535
531
|
} catch (err) {
|
|
536
532
|
logger.warn("[subagents] worktree reaper scan failed", {
|
|
537
533
|
reason: err instanceof Error ? err.message : String(err),
|
|
@@ -553,49 +549,30 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
553
549
|
// resolveIdentity),无需经 state 透传——modelService 是唯一 registry 源。
|
|
554
550
|
|
|
555
551
|
// MF-1: store 健康度跟踪。loadAll 失败 → storeHealthy=false,workflow 域启动时 fail-fast。
|
|
552
|
+
// 崩溃恢复四步(loadAll → failed → save → evict)收口到 core recoverCrashedRuns(D8:
|
|
553
|
+
// 宿主各写一遍正是 failure-mode-B);pending:unregister 经 hooks 外置发射(位置在
|
|
554
|
+
// transition 后、save 前,对齐原内联实现);save 走 store 冷路径(done 绕过去抖)——
|
|
555
|
+
// 冷路径语义在 JsonlRunStore.save 内,不随循环归属转移。loadAll 失败的 fail-fast
|
|
556
|
+
// (storeHealthy=false 停初始化)是宿主职责,core 原样上抛、这里 catch 兜住。
|
|
556
557
|
let storeHealthy = true;
|
|
557
558
|
try {
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
logger.error("[subagent-workflow] kill-9 recovery store.save failed", {
|
|
576
|
-
runId: run.runId,
|
|
577
|
-
reason: err instanceof Error ? err.message : String(err),
|
|
578
|
-
});
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
runs.set(run.runId, run);
|
|
582
|
-
}
|
|
583
|
-
// done run 内存有界性:loadAll 全量重水合后立即裁剪到 K。kill-9 恢复(上方
|
|
584
|
-
// running → transition("done","failed"))的 run completedAt 为 transition 时刻
|
|
585
|
-
// (当前时间=全局最新)参与排序且必在保留端;多条恢复 run 同 ms completedAt →
|
|
586
|
-
// tie 稳定排序。淘汰只 delete runs Map 条目——磁盘 state 文件与
|
|
587
|
-
// workflow-state-link 指针条目均不动(历史审计保留);下次 session_start loadAll
|
|
588
|
-
// 从指针全量重水合后再次裁剪,该循环每次 session 启动重复且可接受:内存峰值只在
|
|
589
|
-
// 启动期,常驻 O(K + 活跃 run)。消除启动峰值需指针 compaction,属 append+replay
|
|
590
|
-
// 长期方案问题域,非本范围。
|
|
591
|
-
const evicted = evictDoneRunsBeyondCap(runs, MAX_RETAINED_DONE_RUNS);
|
|
592
|
-
if (evicted > 0) {
|
|
593
|
-
logger.debug("[subagent-workflow] evicted done runs beyond cap after loadAll", {
|
|
594
|
-
evicted,
|
|
595
|
-
keep: MAX_RETAINED_DONE_RUNS,
|
|
596
|
-
sessionId,
|
|
597
|
-
});
|
|
598
|
-
}
|
|
559
|
+
// 崩溃恢复 loadAll 扫 cwd 共享 sessionDir(同 cwd 跨 session 共享)并把 running run
|
|
560
|
+
// 转 failed 落盘——写非本 session 的 run state 文件属跨 session 副作用,oncePerProcess
|
|
561
|
+
// 守卫防双跑(u-audit-fix)。第二派发重放首次 Promise:不再落盘、不再 emit。
|
|
562
|
+
await oncePerProcess(
|
|
563
|
+
"subagent-workflow:recover-crashed-runs",
|
|
564
|
+
() =>
|
|
565
|
+
recoverCrashedRuns(
|
|
566
|
+
store,
|
|
567
|
+
runs,
|
|
568
|
+
"Process killed (kill-9 or crash recovery)",
|
|
569
|
+
{
|
|
570
|
+
onRunRecovered: (payload) => {
|
|
571
|
+
pi.events.emit("pending:unregister", payload);
|
|
572
|
+
},
|
|
573
|
+
},
|
|
574
|
+
),
|
|
575
|
+
);
|
|
599
576
|
} catch (err) {
|
|
600
577
|
// QMF-4 fix: store.loadAll 失败是关键路径错误,workflow 域将未初始化
|
|
601
578
|
logger.error("[subagent-workflow] store.loadAll failed, workflow domain uninitialized", {
|
|
@@ -612,6 +589,13 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
612
589
|
ctxModel: ctx.model ?? undefined,
|
|
613
590
|
});
|
|
614
591
|
|
|
592
|
+
// [engine-awareness D1b] lastEngine 初始化:构造性同源——单次 reloadGlobalConfig
|
|
593
|
+
// 读取同时刷新 Service 路由缓存与 lastEngine 基准,消灭 initModel 与本处两次独立
|
|
594
|
+
// 读取间的分叉窗口(两读值不一致时检测走 unchanged 分支不 reload,状态段/路由
|
|
595
|
+
// 永停旧值且永不通知)。ok/absent → 归一后的当前引擎;failed → undefined(首 turn
|
|
596
|
+
// 检测静默基线化兜底,此时缓存亦保持不动)。/resume、/fork 同样走 session_start
|
|
597
|
+
// (SR-3),基线天然覆盖。
|
|
598
|
+
const engineRead = modelService.reloadGlobalConfig();
|
|
615
599
|
sessionState.set(sessionId, {
|
|
616
600
|
store,
|
|
617
601
|
runs,
|
|
@@ -619,6 +603,8 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
619
603
|
runner,
|
|
620
604
|
ctx,
|
|
621
605
|
storeHealthy,
|
|
606
|
+
lastEngine:
|
|
607
|
+
engineRead.status === "failed" ? undefined : normalizeEngineId(engineRead.config.defaultEngine),
|
|
622
608
|
});
|
|
623
609
|
});
|
|
624
610
|
|
|
@@ -642,15 +628,41 @@ export default function subagentsWorkflowExtension(pi: ExtensionAPI): void {
|
|
|
642
628
|
});
|
|
643
629
|
|
|
644
630
|
// ════════════════════════════════════════════════════════════
|
|
645
|
-
// [U7
|
|
646
|
-
//
|
|
647
|
-
//
|
|
631
|
+
// [U7 + engine-awareness U3] before_agent_start:引擎感知注入(链尾注册,D7——
|
|
632
|
+
// 段内容变化只断 system prompt 尾部 cache 前缀)。
|
|
633
|
+
// ① per-turn 检测编排(§2.3 数据流):三态 poll config → lastEngine diff →
|
|
634
|
+
// 变更时读取结果先行提交缓存(D2,applyGlobalConfig 纯赋值,本 turn 路由生效)
|
|
635
|
+
// → sendMessage 通知
|
|
636
|
+
// (D3,不设 triggerTurn——P1 探针已证此形态消息进入本 turn LLM 上下文,
|
|
637
|
+
// 证据:真机 pi rpc payload dump + 0.84.4 dist sendMessage→_appendCustomMessage
|
|
638
|
+
// →agent.state.messages.push→createContextSnapshot 调用链)→ 更新 lastEngine。
|
|
639
|
+
// ② 恒在状态段 <current_subagent_engine>(D6)+ 引擎清单段 <available_<engine>_models>。
|
|
640
|
+
// apply 后 getGlobalConfig() 即新值——通知、状态段、路由三处同 turn 对齐(G2)。
|
|
641
|
+
// 段序:状态段在前(文案声明 "listed ... below"),清单段在后;provider models 段
|
|
642
|
+
// 由更早注册的 handler 注入、位于上方。fail-safe 任何异常不注入不阻塞 agent loop。
|
|
648
643
|
// ════════════════════════════════════════════════════════════
|
|
649
|
-
pi.on("before_agent_start", (event: BeforeAgentStartEvent) => {
|
|
644
|
+
pi.on("before_agent_start", (event: BeforeAgentStartEvent, ctx: ExtensionContext) => {
|
|
650
645
|
try {
|
|
651
646
|
const service = getModelConfigService();
|
|
652
|
-
|
|
653
|
-
|
|
647
|
+
if (service === null || typeof event.systemPrompt !== "string") return undefined;
|
|
648
|
+
const sid = ctx.sessionManager.getSessionId();
|
|
649
|
+
runEngineAwarenessTurn({
|
|
650
|
+
readConfig: () => readGlobalConfig(getAgentDir()),
|
|
651
|
+
applyRead: (read) => service.applyGlobalConfig(read),
|
|
652
|
+
sendMessage: (message) => {
|
|
653
|
+
// D3:不设 triggerTurn——切换是用户主动行为,无需唤醒 AI 立即行动
|
|
654
|
+
pi.sendMessage(message, {});
|
|
655
|
+
},
|
|
656
|
+
getLastEngine: () => sessionState.get(sid)?.lastEngine,
|
|
657
|
+
setLastEngine: (engine) => {
|
|
658
|
+
const state = sessionState.get(sid);
|
|
659
|
+
if (state) state.lastEngine = engine;
|
|
660
|
+
},
|
|
661
|
+
});
|
|
662
|
+
const defaultEngine = service.getGlobalConfig().defaultEngine;
|
|
663
|
+
const append = [buildSubagentEngineSection(defaultEngine), buildEngineModelsPromptAppend(defaultEngine)]
|
|
664
|
+
.filter((part) => part !== "")
|
|
665
|
+
.join("\n\n");
|
|
654
666
|
return { systemPrompt: `${event.systemPrompt}\n\n${append}` };
|
|
655
667
|
} catch {
|
|
656
668
|
return undefined;
|
|
@@ -940,17 +952,8 @@ function getOrCreateDialogQueue(): DialogGlobalQueue {
|
|
|
940
952
|
return queue;
|
|
941
953
|
}
|
|
942
954
|
|
|
943
|
-
//
|
|
944
|
-
//
|
|
945
|
-
//
|
|
946
|
-
//
|
|
947
|
-
//
|
|
948
|
-
// 让 subagent 子进程的 UI 请求(ask_user 等)透传到主进程渲染。
|
|
949
|
-
// 重新导出 channel-registry-access 的公开 API——稳定 surface,
|
|
950
|
-
// 内部存储实现演进不影响消费者。
|
|
951
|
-
|
|
952
|
-
export {
|
|
953
|
-
getOrCreateChannelRegistry,
|
|
954
|
-
type UiChannelRegistry,
|
|
955
|
-
type ChannelHandler,
|
|
956
|
-
} from "./execution/channel-registry-access.ts";
|
|
955
|
+
// 跨扩展 channel handler 注册入口已收口到 core 深路径
|
|
956
|
+
// `@zhushanwen/subagent-core/execution/channel-registry-access.ts`
|
|
957
|
+
// (getOrCreateChannelRegistry / UiChannelRegistry / ChannelHandler)。
|
|
958
|
+
// 历史上的包根 re-export 已删:ask-user 等跨扩展消费者经 globalThis 握手
|
|
959
|
+
// (DIALOG_QUEUE_KEY 同款进程级单例),不再经包根 import 消费本模块。
|