@ashx-j/lunr 0.2.11 → 0.2.13
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/CHANGELOG.md +13 -0
- package/README.md +211 -236
- package/dist/builtin-extensions/ashxj-tui.d.ts +3 -0
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +28 -11
- package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
- package/dist/builtin-extensions/index.d.ts.map +1 -1
- package/dist/builtin-extensions/index.js +0 -2
- package/dist/builtin-extensions/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-cron.d.ts +1 -1
- package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-cron.js +1 -1
- package/dist/builtin-extensions/lunr-cron.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/doctor.d.ts +0 -2
- package/dist/builtin-extensions/pi-subagents/src/extension/doctor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/doctor.js +1 -23
- package/dist/builtin-extensions/pi-subagents/src/extension/doctor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js +6 -7
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +7 -14
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +12 -9
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +38 -34
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +3 -3
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +32 -47
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +7 -10
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +90 -109
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts +3 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +37 -50
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +4 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js +5 -5
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +31 -13
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +4 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +48 -20
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +90 -64
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +6 -8
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +262 -161
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts +2 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js +24 -33
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +25 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +51 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.js +20 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +4 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts +5 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +9 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js +20 -17
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +70 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +153 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/settings.d.ts +13 -8
- package/dist/builtin-extensions/pi-subagents/src/shared/settings.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/settings.js +20 -51
- package/dist/builtin-extensions/pi-subagents/src/shared/settings.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +80 -20
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js +10 -2
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +20 -32
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +2 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +23 -449
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +13 -11
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +2 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js +18 -17
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -1
- package/dist/builtin-extensions/simple-pi-memory.d.ts +2 -2
- package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
- package/dist/builtin-extensions/simple-pi-memory.js +41 -17
- package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/amazon-bedrock.json +1 -1
- package/dist/catalog/providers/azure-openai-responses.json +1 -1
- package/dist/catalog/providers/cloudflare-ai-gateway.json +1 -1
- package/dist/catalog/providers/cloudflare-workers-ai.json +1 -1
- package/dist/catalog/providers/fireworks.json +1 -1
- package/dist/catalog/providers/github-copilot.json +1 -1
- package/dist/catalog/providers/huggingface.json +1 -1
- package/dist/catalog/providers/minimax-cn.json +1 -1
- package/dist/catalog/providers/minimax.json +1 -1
- package/dist/catalog/providers/mistral.json +1 -1
- package/dist/catalog/providers/nvidia.json +1 -1
- package/dist/catalog/providers/openai.json +1 -1
- package/dist/catalog/providers/opencode-go.json +1 -1
- package/dist/catalog/providers/opencode.json +1 -1
- package/dist/catalog/providers/openrouter.json +1 -1
- package/dist/catalog/providers/qwen-cloud-cn.json +1 -1
- package/dist/catalog/providers/qwen-cloud.json +1 -1
- package/dist/catalog/providers/qwen-token-plan-cn.json +1 -1
- package/dist/catalog/providers/qwen-token-plan.json +1 -1
- package/dist/catalog/providers/together.json +1 -1
- package/dist/catalog/providers/vercel-ai-gateway.json +1 -1
- package/dist/catalog/providers/zai-coding-cn.json +1 -1
- package/dist/catalog/providers/zai.json +1 -1
- package/dist/catalog/publication.json +3 -3
- package/dist/core/agent-session.d.ts +7 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +34 -4
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/context-breakdown.d.ts +3 -1
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js +5 -2
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/customize.d.ts +2 -0
- package/dist/core/customize.d.ts.map +1 -1
- package/dist/core/customize.js +6 -0
- package/dist/core/customize.js.map +1 -1
- package/dist/core/memory-cap.d.ts +4 -8
- package/dist/core/memory-cap.d.ts.map +1 -1
- package/dist/core/memory-cap.js +8 -8
- package/dist/core/memory-cap.js.map +1 -1
- package/dist/core/permissions.d.ts +2 -0
- package/dist/core/permissions.d.ts.map +1 -1
- package/dist/core/permissions.js +30 -14
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/plan-mode.d.ts.map +1 -1
- package/dist/core/plan-mode.js +1 -9
- package/dist/core/plan-mode.js.map +1 -1
- package/dist/core/rollback.d.ts.map +1 -1
- package/dist/core/rollback.js +1 -1
- package/dist/core/rollback.js.map +1 -1
- package/dist/core/settings-manager.d.ts +16 -5
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +37 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/subagent-permission-inherit.d.ts +34 -22
- package/dist/core/subagent-permission-inherit.d.ts.map +1 -1
- package/dist/core/subagent-permission-inherit.js +37 -80
- package/dist/core/subagent-permission-inherit.js.map +1 -1
- package/dist/core/swarm.d.ts.map +1 -1
- package/dist/core/swarm.js +13 -7
- package/dist/core/swarm.js.map +1 -1
- package/dist/core/system-prompt.d.ts +6 -4
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +38 -48
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/usage-adapters/openai-codex.d.ts +1 -1
- package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
- package/dist/core/usage-adapters/openai-codex.js +22 -17
- package/dist/core/usage-adapters/openai-codex.js.map +1 -1
- package/dist/core/usage-service.d.ts +10 -1
- package/dist/core/usage-service.d.ts.map +1 -1
- package/dist/core/usage-service.js +17 -6
- package/dist/core/usage-service.js.map +1 -1
- package/dist/gateway/agent-bridge.d.ts.map +1 -1
- package/dist/gateway/agent-bridge.js +1 -4
- package/dist/gateway/agent-bridge.js.map +1 -1
- package/dist/gateway/cron.d.ts.map +1 -1
- package/dist/gateway/cron.js +1 -4
- package/dist/gateway/cron.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +0 -5
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +2 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +21 -0
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +7 -4
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +122 -162
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/usage-view.d.ts +1 -1
- package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/usage-view.js +7 -4
- package/dist/modes/interactive/components/usage-view.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +55 -96
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/skill-tag-autocomplete.d.ts +13 -0
- package/dist/modes/interactive/skill-tag-autocomplete.d.ts.map +1 -0
- package/dist/modes/interactive/skill-tag-autocomplete.js +72 -0
- package/dist/modes/interactive/skill-tag-autocomplete.js.map +1 -0
- package/docs/compaction.md +23 -23
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +18 -18
- package/docs/development.md +16 -15
- package/docs/docs.json +6 -2
- package/docs/extensions.md +82 -80
- package/docs/features.md +102 -0
- package/docs/index.md +25 -19
- package/docs/json.md +7 -7
- package/docs/keybindings.md +4 -4
- package/docs/models.md +2 -2
- package/docs/packages.md +38 -42
- package/docs/prompt-templates.md +4 -4
- package/docs/providers.md +22 -10
- package/docs/quickstart.md +81 -46
- package/docs/rpc.md +7 -13
- package/docs/sdk.md +43 -41
- package/docs/security.md +18 -18
- package/docs/session-format.md +9 -9
- package/docs/sessions.md +13 -12
- package/docs/settings.md +63 -24
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +21 -11
- package/docs/terminal-setup.md +5 -5
- package/docs/termux.md +7 -7
- package/docs/themes.md +12 -14
- package/docs/tmux.md +4 -4
- package/docs/tui.md +23 -23
- package/docs/usage.md +112 -87
- package/docs/windows.md +10 -2
- package/examples/README.md +3 -1
- package/examples/extensions/README.md +6 -6
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/doom-overlay/README.md +2 -2
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/plan-mode/README.md +3 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/README.md +13 -11
- package/examples/extensions/todo.ts +2 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/README.md +9 -5
- package/package.json +6 -7
- package/dist/builtin-extensions/lunr-behavior.d.ts +0 -44
- package/dist/builtin-extensions/lunr-behavior.d.ts.map +0 -1
- package/dist/builtin-extensions/lunr-behavior.js +0 -213
- package/dist/builtin-extensions/lunr-behavior.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/agents/context-builder.md +0 -46
- package/dist/builtin-extensions/pi-subagents/agents/deep-researcher.md +0 -36
- package/dist/builtin-extensions/pi-subagents/agents/delegate.md +0 -12
- package/dist/builtin-extensions/pi-subagents/agents/oracle.md +0 -73
- package/dist/builtin-extensions/pi-subagents/agents/planner.md +0 -55
- package/dist/builtin-extensions/pi-subagents/agents/research-writer.md +0 -37
- package/dist/builtin-extensions/pi-subagents/agents/researcher.md +0 -52
- package/dist/builtin-extensions/pi-subagents/agents/reviewer.md +0 -79
- package/dist/builtin-extensions/pi-subagents/agents/scout.md +0 -50
- package/dist/builtin-extensions/pi-subagents/agents/worker.md +0 -55
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts +0 -20
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js +0 -1273
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-memory.d.ts +0 -49
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-memory.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-memory.js +0 -252
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-memory.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-scope.d.ts +0 -3
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-scope.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-scope.js +0 -6
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-scope.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-selection.d.ts +0 -3
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-selection.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-selection.js +0 -23
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-selection.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-serializer.d.ts +0 -8
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-serializer.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-serializer.js +0 -143
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-serializer.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agents.d.ts +0 -176
- package/dist/builtin-extensions/pi-subagents/src/agents/agents.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agents.js +0 -1326
- package/dist/builtin-extensions/pi-subagents/src/agents/agents.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/chain-serializer.d.ts +0 -7
- package/dist/builtin-extensions/pi-subagents/src/agents/chain-serializer.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/chain-serializer.js +0 -307
- package/dist/builtin-extensions/pi-subagents/src/agents/chain-serializer.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/identity.d.ts +0 -8
- package/dist/builtin-extensions/pi-subagents/src/agents/identity.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/identity.js +0 -30
- package/dist/builtin-extensions/pi-subagents/src/agents/identity.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/proactive-skills.d.ts +0 -35
- package/dist/builtin-extensions/pi-subagents/src/agents/proactive-skills.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/proactive-skills.js +0 -151
- package/dist/builtin-extensions/pi-subagents/src/agents/proactive-skills.js.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts +0 -131
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts.map +0 -1
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js +0 -491
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js.map +0 -1
- package/dist/core/behavior-preset.d.ts +0 -60
- package/dist/core/behavior-preset.d.ts.map +0 -1
- package/dist/core/behavior-preset.js +0 -257
- package/dist/core/behavior-preset.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-resume.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/async-resume.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { ASYNC_DIR, RESULTS_DIR, type AsyncStatus, type SteeringRecoveryDescriptor, type SubagentState } from \"../../shared/types.ts\";\nimport { resolveSubagentIntercomTarget } from \"../../intercom/intercom-bridge.ts\";\nimport type { AgentConfig } from \"../../agents/agents.ts\";\nimport { validateAcceptanceInput } from \"../shared/acceptance.ts\";\nimport { validateToolBudgetConfig } from \"../shared/tool-budget.ts\";\nimport { resolveTurnBudgetConfig } from \"../shared/turn-budget.ts\";\nimport { deliverInterruptRequest } from \"./control-channel.ts\";\nimport { reconcileAsyncRun } from \"./stale-run-reconciler.ts\";\n\nexport const ASYNC_RESUME_INTERRUPT_SIGNAL: NodeJS.Signals = process.platform === \"win32\" ? \"SIGBREAK\" : \"SIGUSR2\";\n\nexport interface AsyncResumeParams {\n\tid?: string;\n\trunId?: string;\n\tdir?: string;\n\tindex?: number;\n}\n\nexport interface AsyncResumeDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n}\n\nexport interface AsyncResumeOptions {\n\trequireSessionFile?: boolean;\n}\n\nexport type AsyncResumeTarget = {\n\tkind: \"live\" | \"revive\";\n\trunId: string;\n\tasyncDir?: string;\n\tstate: AsyncStatus[\"state\"];\n\tagent: string;\n\tindex: number;\n\tintercomTarget: string;\n\tcwd?: string;\n\tsessionFile?: string;\n\tmodel?: string;\n\tthinking?: string;\n\trecoveryDescriptor?: SteeringRecoveryDescriptor;\n};\n\ntype KillFn = (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\nexport function interruptLiveAsyncResumeTarget(input: {\n\ttarget: AsyncResumeTarget & { kind: \"live\" };\n\tstate?: Pick<SubagentState, \"asyncJobs\">;\n\tkill?: KillFn;\n\tnow?: () => number;\n\tresultsDir?: string;\n}): { ok: true; asyncId: string } | { ok: false; message: string } {\n\tconst asyncId = input.target.runId;\n\tif (!input.target.asyncDir) {\n\t\treturn { ok: false, message: `Async run ${asyncId} is live but does not have an async directory to interrupt.` };\n\t}\n\tconst status = reconcileAsyncRun(input.target.asyncDir, { resultsDir: input.resultsDir, kill: input.kill, now: input.now }).status;\n\tif (!status || status.state !== \"running\" || typeof status.pid !== \"number\") {\n\t\treturn { ok: false, message: `Async run ${asyncId} is live but no interrupt-capable runner pid was found.` };\n\t}\n\ttry {\n\t\tdeliverInterruptRequest({\n\t\t\tasyncDir: input.target.asyncDir,\n\t\t\tpid: status.pid,\n\t\t\tkill: input.kill,\n\t\t\tsignal: ASYNC_RESUME_INTERRUPT_SIGNAL,\n\t\t\tnow: input.now,\n\t\t\tsource: \"async-resume\",\n\t\t});\n\t\tconst tracked = input.state?.asyncJobs.get(asyncId);\n\t\tif (tracked) {\n\t\t\ttracked.activityState = undefined;\n\t\t\ttracked.updatedAt = input.now?.() ?? Date.now();\n\t\t}\n\t\treturn { ok: true, asyncId };\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn { ok: false, message: `Failed to interrupt async run ${asyncId}: ${message}` };\n\t}\n}\n\ninterface AsyncResultFile {\n\tid?: string;\n\trunId?: string;\n\tagent?: string;\n\tmode?: string;\n\tstate?: string;\n\tsuccess?: boolean;\n\tcwd?: string;\n\tsessionFile?: string;\n\tmodel?: string;\n\tthinking?: string;\n\tresults?: Array<{ agent?: string; success?: boolean; sessionFile?: string; intercomTarget?: string; model?: string; thinking?: string }>;\n}\n\nexport interface AsyncRunLocation {\n\tasyncDir: string | null;\n\tresultPath: string | null;\n\tresolvedId?: string;\n}\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction ensureObject(value: unknown, source: string): Record<string, unknown> {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(`Async result file '${source}' must contain a JSON object.`);\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction validateOptionalString(value: Record<string, unknown>, field: string, source: string, displayField = field): string | undefined {\n\tconst fieldValue = value[field];\n\tif (fieldValue === undefined) return undefined;\n\tif (typeof fieldValue !== \"string\") throw new Error(`Invalid async result file '${source}': ${displayField} must be a string.`);\n\treturn fieldValue;\n}\n\nfunction validateResultFile(value: unknown, resultPath: string): AsyncResultFile {\n\tconst data = ensureObject(value, resultPath);\n\tconst resultsValue = data.results;\n\tlet results: AsyncResultFile[\"results\"];\n\tif (resultsValue !== undefined) {\n\t\tif (!Array.isArray(resultsValue)) throw new Error(`Invalid async result file '${resultPath}': results must be an array.`);\n\t\tresults = resultsValue.map((entry, index) => {\n\t\t\tconst child = ensureObject(entry, `${resultPath} results[${index}]`);\n\t\t\tconst agent = validateOptionalString(child, \"agent\", resultPath, `results[${index}].agent`);\n\t\t\tconst sessionFile = validateOptionalString(child, \"sessionFile\", resultPath, `results[${index}].sessionFile`);\n\t\t\tconst intercomTarget = validateOptionalString(child, \"intercomTarget\", resultPath, `results[${index}].intercomTarget`);\n\t\t\tconst model = validateOptionalString(child, \"model\", resultPath, `results[${index}].model`);\n\t\t\tconst thinking = validateOptionalString(child, \"thinking\", resultPath, `results[${index}].thinking`);\n\t\t\tconst success = child.success;\n\t\t\tif (success !== undefined && typeof success !== \"boolean\") throw new Error(`Invalid async result file '${resultPath}': results[${index}].success must be a boolean.`);\n\t\t\treturn { agent, sessionFile, intercomTarget, model, thinking, ...(typeof success === \"boolean\" ? { success } : {}) };\n\t\t});\n\t}\n\tconst success = data.success;\n\tif (success !== undefined && typeof success !== \"boolean\") throw new Error(`Invalid async result file '${resultPath}': success must be a boolean.`);\n\treturn {\n\t\tid: validateOptionalString(data, \"id\", resultPath),\n\t\trunId: validateOptionalString(data, \"runId\", resultPath),\n\t\tagent: validateOptionalString(data, \"agent\", resultPath),\n\t\tmode: validateOptionalString(data, \"mode\", resultPath),\n\t\tstate: validateOptionalString(data, \"state\", resultPath),\n\t\tcwd: validateOptionalString(data, \"cwd\", resultPath),\n\t\tsessionFile: validateOptionalString(data, \"sessionFile\", resultPath),\n\t\tmodel: validateOptionalString(data, \"model\", resultPath),\n\t\tthinking: validateOptionalString(data, \"thinking\", resultPath),\n\t\t...(typeof success === \"boolean\" ? { success } : {}),\n\t\t...(results ? { results } : {}),\n\t};\n}\n\nfunction readResultFile(resultPath: string): AsyncResultFile {\n\tlet raw: string;\n\ttry {\n\t\traw = fs.readFileSync(resultPath, \"utf-8\");\n\t} catch (error) {\n\t\tthrow new Error(`Failed to read async result file '${resultPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\ttry {\n\t\treturn validateResultFile(JSON.parse(raw), resultPath);\n\t} catch (error) {\n\t\tif (error instanceof SyntaxError) {\n\t\t\tthrow new Error(`Failed to parse async result file '${resultPath}': ${getErrorMessage(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction assertRunId(value: string | undefined, field: \"id\" | \"runId\"): string | undefined {\n\tif (value === undefined) return undefined;\n\tif (value.trim() === \"\") throw new Error(`${field} must not be empty.`);\n\tif (path.isAbsolute(value) || /[\\\\/]/.test(value) || value.includes(\"..\")) {\n\t\tthrow new Error(`${field} must be an async run id or prefix, not a path.`);\n\t}\n\treturn value;\n}\n\nfunction assertInsideRoot(root: string, target: string, label: string): void {\n\tconst rootPath = path.resolve(root);\n\tconst targetPath = path.resolve(target);\n\tconst relative = path.relative(rootPath, targetPath);\n\tif (relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative))) return;\n\tthrow new Error(`${label} must be inside ${rootPath}.`);\n}\n\nfunction prefixedRunIds(dir: string, prefix: string, suffix = \"\"): string[] {\n\tif (!fs.existsSync(dir)) return [];\n\treturn fs.readdirSync(dir)\n\t\t.filter((entry) => entry.startsWith(prefix) && (!suffix || entry.endsWith(suffix)))\n\t\t.map((entry) => suffix ? entry.slice(0, -suffix.length) : entry)\n\t\t.sort();\n}\n\nfunction exactResultPath(resultsDir: string, runId: string): string | null {\n\tconst resultPath = path.join(resultsDir, `${runId}.json`);\n\tassertInsideRoot(resultsDir, resultPath, \"Async result file\");\n\treturn fs.existsSync(resultPath) ? resultPath : null;\n}\n\nexport function findAsyncRunPrefixMatches(prefix: string, asyncDirRoot: string, resultsDir: string): Array<{ id: string; location: AsyncRunLocation }> {\n\tconst requestedId = assertRunId(prefix, \"id\");\n\tif (!requestedId) return [];\n\tconst asyncRoot = path.resolve(asyncDirRoot);\n\tconst resultRoot = path.resolve(resultsDir);\n\tconst matchingIds = [...new Set([\n\t\t...prefixedRunIds(asyncRoot, requestedId),\n\t\t...prefixedRunIds(resultRoot, requestedId, \".json\"),\n\t])].sort();\n\treturn matchingIds.map((id) => {\n\t\tconst asyncDir = path.join(asyncRoot, id);\n\t\tassertInsideRoot(asyncRoot, asyncDir, \"Async run directory\");\n\t\treturn {\n\t\t\tid,\n\t\t\tlocation: {\n\t\t\t\tasyncDir: fs.existsSync(asyncDir) ? asyncDir : null,\n\t\t\t\tresultPath: exactResultPath(resultRoot, id),\n\t\t\t\tresolvedId: id,\n\t\t\t},\n\t\t};\n\t});\n}\n\nexport function resolveAsyncRunLocation(params: AsyncResumeParams, asyncDirRoot: string, resultsDir: string): AsyncRunLocation {\n\tconst asyncRoot = path.resolve(asyncDirRoot);\n\tconst resultRoot = path.resolve(resultsDir);\n\tconst requestedId = assertRunId(params.id, \"id\") ?? assertRunId(params.runId, \"runId\");\n\tif (params.dir) {\n\t\tconst asyncDir = path.resolve(params.dir);\n\t\tassertInsideRoot(asyncRoot, asyncDir, \"Async run directory\");\n\t\tconst resolvedId = requestedId ?? path.basename(asyncDir);\n\t\tif (requestedId && requestedId !== path.basename(asyncDir)) {\n\t\t\tthrow new Error(`Async run id '${requestedId}' does not match directory '${path.basename(asyncDir)}'.`);\n\t\t}\n\t\treturn { asyncDir, resultPath: exactResultPath(resultRoot, resolvedId), resolvedId };\n\t}\n\tif (!requestedId) return { asyncDir: null, resultPath: null };\n\n\tconst directAsyncDir = path.join(asyncRoot, requestedId);\n\tassertInsideRoot(asyncRoot, directAsyncDir, \"Async run directory\");\n\tconst directResultPath = exactResultPath(resultRoot, requestedId);\n\tif (fs.existsSync(directAsyncDir) || directResultPath) {\n\t\treturn {\n\t\t\tasyncDir: fs.existsSync(directAsyncDir) ? directAsyncDir : null,\n\t\t\tresultPath: directResultPath,\n\t\t\tresolvedId: requestedId,\n\t\t};\n\t}\n\n\tconst matching = findAsyncRunPrefixMatches(requestedId, asyncRoot, resultRoot);\n\tif (matching.length === 0) return { asyncDir: null, resultPath: null, resolvedId: requestedId };\n\tif (matching.length > 1) {\n\t\tthrow new Error(`Ambiguous async run id prefix '${requestedId}' matched: ${matching.map((match) => match.id).join(\", \")}. Provide a longer id.`);\n\t}\n\treturn matching[0]!.location;\n}\n\nfunction resultState(result: AsyncResultFile): AsyncStatus[\"state\"] {\n\tif (result.state === \"complete\" || result.state === \"failed\" || result.state === \"paused\" || result.state === \"stopped\" || result.state === \"running\" || result.state === \"queued\") {\n\t\treturn result.state;\n\t}\n\treturn result.success ? \"complete\" : \"failed\";\n}\n\nfunction validateStatusForResume(status: AsyncStatus | null, source: string): void {\n\tif (!status) return;\n\tif (typeof status.runId !== \"string\") throw new Error(`Invalid async status '${source}': runId must be a string.`);\n\tif (status.sessionId !== undefined && typeof status.sessionId !== \"string\") throw new Error(`Invalid async status '${source}': sessionId must be a string.`);\n\tif (status.cwd !== undefined && typeof status.cwd !== \"string\") throw new Error(`Invalid async status '${source}': cwd must be a string.`);\n\tif (status.sessionFile !== undefined && typeof status.sessionFile !== \"string\") throw new Error(`Invalid async status '${source}': sessionFile must be a string.`);\n\tif (status.steps !== undefined) {\n\t\tif (!Array.isArray(status.steps)) throw new Error(`Invalid async status '${source}': steps must be an array.`);\n\t\tstatus.steps.forEach((step, index) => {\n\t\t\tif (!step || typeof step !== \"object\" || Array.isArray(step)) throw new Error(`Invalid async status '${source}': steps[${index}] must be an object.`);\n\t\t\tconst stepRecord = step as Record<string, unknown>;\n\t\t\tif (typeof stepRecord.agent !== \"string\") throw new Error(`Invalid async status '${source}': steps[${index}].agent must be a string.`);\n\t\t\tif (stepRecord.sessionFile !== undefined && typeof stepRecord.sessionFile !== \"string\") throw new Error(`Invalid async status '${source}': steps[${index}].sessionFile must be a string.`);\n\t\t\tif (stepRecord.model !== undefined && typeof stepRecord.model !== \"string\") throw new Error(`Invalid async status '${source}': steps[${index}].model must be a string.`);\n\t\t\tif (stepRecord.thinking !== undefined && typeof stepRecord.thinking !== \"string\") throw new Error(`Invalid async status '${source}': steps[${index}].thinking must be a string.`);\n\t\t});\n\t}\n}\n\nexport function readAsyncRecoveryDescriptor(asyncDir: string | undefined): SteeringRecoveryDescriptor | undefined {\n\tif (!asyncDir) return undefined;\n\tconst descriptorPath = path.join(asyncDir, \"recovery-descriptor.json\");\n\tif (!fs.existsSync(descriptorPath)) return undefined;\n\tlet value: unknown;\n\ttry {\n\t\tvalue = JSON.parse(fs.readFileSync(descriptorPath, \"utf-8\"));\n\t} catch (error) {\n\t\tthrow new Error(`Failed to parse async recovery descriptor '${descriptorPath}': ${getErrorMessage(error)}`, { cause: error instanceof Error ? error : undefined });\n\t}\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': expected an object.`);\n\tconst parsed = value as Record<string, unknown>;\n\tconst allowedFields = new Set([\n\t\t\"version\", \"sourceRunId\", \"agent\", \"sessionFile\", \"cwd\", \"model\", \"fallbackModels\", \"thinking\", \"tools\", \"extensions\",\n\t\t\"subagentOnlyExtensions\", \"mcpDirectTools\", \"systemPrompt\", \"systemPromptMode\", \"inheritProjectContext\", \"inheritSkills\", \"skills\",\n\t\t\"skillPath\", \"agentFilePath\", \"completionGuard\", \"memory\", \"outputPath\", \"outputMode\", \"acceptance\", \"sessionDir\", \"artifactConfig\",\n\t\t\"artifactsDir\", \"maxOutput\", \"controlConfig\", \"absoluteDeadlineAt\", \"initialTurnBudget\", \"initialToolBudget\", \"maxSubagentDepth\", \"share\",\n\t]);\n\tfor (const field of Object.keys(parsed)) {\n\t\tif (!allowedFields.has(field)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': unknown field '${field}'.`);\n\t}\n\tconst requiredStrings = [\"sourceRunId\", \"agent\", \"cwd\", \"systemPromptMode\", \"outputMode\"] as const;\n\tfor (const field of requiredStrings) {\n\t\tif (typeof parsed[field] !== \"string\" || !(parsed[field] as string).trim()) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${field} must be a non-empty string.`);\n\t}\n\tif (parsed.version !== 1) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': version must be 1.`);\n\tif (parsed.systemPromptMode !== \"append\" && parsed.systemPromptMode !== \"replace\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': systemPromptMode is invalid.`);\n\tif (parsed.outputMode !== \"inline\" && parsed.outputMode !== \"file-only\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': outputMode is invalid.`);\n\tfor (const field of [\"inheritProjectContext\", \"inheritSkills\", \"share\"] as const) {\n\t\tif (typeof parsed[field] !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${field} must be a boolean.`);\n\t}\n\tif (!Number.isInteger(parsed.maxSubagentDepth) || (parsed.maxSubagentDepth as number) < 0) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': maxSubagentDepth must be a non-negative integer.`);\n\tfor (const field of [\"fallbackModels\", \"tools\", \"extensions\", \"subagentOnlyExtensions\", \"mcpDirectTools\", \"skills\", \"skillPath\"] as const) {\n\t\tconst item = parsed[field];\n\t\tif (item !== undefined && (!Array.isArray(item) || item.some((entry) => typeof entry !== \"string\" || !entry.trim()))) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${field} must contain non-empty strings.`);\n\t}\n\tif (parsed.systemPrompt !== undefined && typeof parsed.systemPrompt !== \"string\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': systemPrompt must be a string.`);\n\tfor (const field of [\"sessionFile\", \"model\", \"thinking\", \"agentFilePath\", \"outputPath\", \"sessionDir\", \"artifactsDir\"] as const) {\n\t\tif (parsed[field] !== undefined && (typeof parsed[field] !== \"string\" || !(parsed[field] as string).trim())) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${field} must be a non-empty string.`);\n\t}\n\tif (parsed.completionGuard !== undefined && typeof parsed.completionGuard !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': completionGuard must be a boolean.`);\n\tif (parsed.memory !== undefined) {\n\t\tif (!parsed.memory || typeof parsed.memory !== \"object\" || Array.isArray(parsed.memory)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': memory must be an object.`);\n\t\tconst memory = parsed.memory as Record<string, unknown>;\n\t\tif ((memory.scope !== \"project\" && memory.scope !== \"user\") || typeof memory.path !== \"string\" || !memory.path.trim()) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': memory is invalid.`);\n\t}\n\tif (parsed.absoluteDeadlineAt !== undefined && (!Number.isFinite(parsed.absoluteDeadlineAt) || (parsed.absoluteDeadlineAt as number) <= 0)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': absoluteDeadlineAt must be a positive timestamp.`);\n\tif (parsed.initialTurnBudget !== undefined) {\n\t\tconst result = resolveTurnBudgetConfig(parsed.initialTurnBudget, \"recoveryDescriptor.initialTurnBudget\");\n\t\tif (result.error) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${result.error}`);\n\t}\n\tif (parsed.initialToolBudget !== undefined) {\n\t\tconst result = validateToolBudgetConfig(parsed.initialToolBudget, \"recoveryDescriptor.initialToolBudget\");\n\t\tif (result.error) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${result.error}`);\n\t}\n\tif (parsed.maxOutput !== undefined) {\n\t\tif (!parsed.maxOutput || typeof parsed.maxOutput !== \"object\" || Array.isArray(parsed.maxOutput)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': maxOutput must be an object.`);\n\t\tfor (const field of [\"bytes\", \"lines\"] as const) {\n\t\t\tconst item = (parsed.maxOutput as Record<string, unknown>)[field];\n\t\t\tif (item !== undefined && (!Number.isInteger(item) || (item as number) < 1)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': maxOutput.${field} must be a positive integer.`);\n\t\t}\n\t}\n\tif (parsed.artifactConfig !== undefined) {\n\t\tif (!parsed.artifactConfig || typeof parsed.artifactConfig !== \"object\" || Array.isArray(parsed.artifactConfig)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': artifactConfig must be an object.`);\n\t\tconst artifact = parsed.artifactConfig as Record<string, unknown>;\n\t\tfor (const field of [\"enabled\", \"includeInput\", \"includeOutput\", \"includeJsonl\", \"includeMetadata\"] as const) {\n\t\t\tif (typeof artifact[field] !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': artifactConfig.${field} must be a boolean.`);\n\t\t}\n\t\tif (artifact.includeTranscript !== undefined && typeof artifact.includeTranscript !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': artifactConfig.includeTranscript must be a boolean.`);\n\t\tif (!Number.isInteger(artifact.cleanupDays) || (artifact.cleanupDays as number) < 0) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': artifactConfig.cleanupDays must be a non-negative integer.`);\n\t}\n\tif (parsed.controlConfig !== undefined) {\n\t\tif (!parsed.controlConfig || typeof parsed.controlConfig !== \"object\" || Array.isArray(parsed.controlConfig)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig must be an object.`);\n\t\tconst control = parsed.controlConfig as Record<string, unknown>;\n\t\tif (typeof control.enabled !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.enabled must be a boolean.`);\n\t\tfor (const field of [\"needsAttentionAfterMs\", \"activeNoticeAfterMs\", \"failedToolAttemptsBeforeAttention\"] as const) {\n\t\t\tif (!Number.isInteger(control[field]) || (control[field] as number) < 1) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.${field} must be a positive integer.`);\n\t\t}\n\t\tfor (const field of [\"activeNoticeAfterTurns\", \"activeNoticeAfterTokens\"] as const) {\n\t\t\tif (control[field] !== undefined && (!Number.isInteger(control[field]) || (control[field] as number) < 1)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.${field} must be a positive integer.`);\n\t\t}\n\t\tif (!Array.isArray(control.notifyOn) || control.notifyOn.some((item) => item !== \"active_long_running\" && item !== \"needs_attention\")) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.notifyOn is invalid.`);\n\t\tif (!Array.isArray(control.notifyChannels) || control.notifyChannels.some((item) => item !== \"event\" && item !== \"async\" && item !== \"intercom\")) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.notifyChannels is invalid.`);\n\t}\n\tif (parsed.acceptance !== undefined) {\n\t\tconst errors = validateAcceptanceInput(parsed.acceptance, \"recoveryDescriptor.acceptance\");\n\t\tif (errors.length) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${errors.join(\" \")}`);\n\t}\n\treturn parsed as unknown as SteeringRecoveryDescriptor;\n}\n\nfunction validateResumeSessionFile(runId: string, sessionFile: string): string {\n\tif (path.extname(sessionFile) !== \".jsonl\") throw new Error(`Async run '${runId}' session file must be a .jsonl file: ${sessionFile}`);\n\tconst resolved = path.resolve(sessionFile);\n\tif (!fs.existsSync(resolved)) throw new Error(`Async run '${runId}' session file does not exist: ${sessionFile}`);\n\treturn resolved;\n}\n\nexport function resolveAsyncResumeTarget(params: AsyncResumeParams, deps: AsyncResumeDeps = {}, options: AsyncResumeOptions = {}): AsyncResumeTarget {\n\tconst asyncDirRoot = deps.asyncDirRoot ?? ASYNC_DIR;\n\tconst resultsDir = deps.resultsDir ?? RESULTS_DIR;\n\tconst requireSessionFile = options.requireSessionFile ?? true;\n\tconst location = resolveAsyncRunLocation(params, asyncDirRoot, resultsDir);\n\tif (!location.asyncDir && !location.resultPath) {\n\t\tthrow new Error(\"Async run not found. Provide id or dir.\");\n\t}\n\n\tconst reconciliation = location.asyncDir\n\t\t? reconcileAsyncRun(location.asyncDir, { resultsDir, kill: deps.kill, now: deps.now })\n\t\t: undefined;\n\tconst status = reconciliation?.status ?? null;\n\tvalidateStatusForResume(status, location.asyncDir ? path.join(location.asyncDir, \"status.json\") : \"status.json\");\n\tconst recoveryDescriptor = readAsyncRecoveryDescriptor(location.asyncDir);\n\tconst result = location.resultPath ? readResultFile(location.resultPath) : undefined;\n\tconst runId = status?.runId ?? result?.runId ?? result?.id ?? location.resolvedId ?? (location.asyncDir ? path.basename(location.asyncDir) : \"unknown\");\n\tif (recoveryDescriptor && recoveryDescriptor.sourceRunId !== runId) throw new Error(`Async run '${runId}' has a recovery descriptor for a different source run.`);\n\tconst state = status?.state ?? (result ? resultState(result) : undefined);\n\tif (!state) throw new Error(`Status file not found for async run '${runId}'.`);\n\tif (state === \"stopped\") throw new Error(`Async run '${runId}' was stopped and cannot be resumed. Start a new run instead.`);\n\n\tconst statusSteps = status?.steps ?? [];\n\tconst resultSteps = result?.results ?? [];\n\tconst stepCount = statusSteps.length || resultSteps.length || (result?.agent ? 1 : 0);\n\tconst requestedIndex = params.index;\n\tif (requestedIndex !== undefined && !Number.isInteger(requestedIndex)) throw new Error(`Async run '${runId}' index must be an integer.`);\n\tconst terminalStepStatuses = new Set([\"complete\", \"completed\", \"failed\", \"paused\"]);\n\n\tif (state === \"running\") {\n\t\tif (requestedIndex !== undefined) {\n\t\t\tif (requestedIndex < 0 || requestedIndex >= stepCount) throw new Error(`Async run '${runId}' has ${stepCount} children. Index ${requestedIndex} is out of range.`);\n\t\t\tconst selectedStep = statusSteps[requestedIndex];\n\t\t\tif (selectedStep?.status === \"running\") {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"live\",\n\t\t\t\t\trunId,\n\t\t\t\t\tasyncDir: location.asyncDir ?? undefined,\n\t\t\t\t\tstate,\n\t\t\t\t\tagent: selectedStep.agent,\n\t\t\t\t\tindex: requestedIndex,\n\t\t\t\t\tintercomTarget: resolveSubagentIntercomTarget(runId, selectedStep.agent, requestedIndex),\n\t\t\t\t\tcwd: status?.cwd ?? result?.cwd,\n\t\t\t\t\tsessionFile: selectedStep.sessionFile ?? status?.sessionFile ?? result?.sessionFile,\n\t\t\t\t\tmodel: selectedStep.model,\n\t\t\t\t\tthinking: selectedStep.thinking,\n\t\t\t\t\t...(recoveryDescriptor ? { recoveryDescriptor } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (selectedStep?.status === \"pending\") throw new Error(`Async run '${runId}' child ${requestedIndex} is pending and has not started yet. Wait for it to run or complete before resuming.`);\n\t\t\tif (selectedStep && !terminalStepStatuses.has(selectedStep.status)) throw new Error(`Async run '${runId}' child ${requestedIndex} is ${selectedStep.status} and cannot be revived yet.`);\n\t\t} else {\n\t\t\tconst running = statusSteps\n\t\t\t\t.map((step, index) => ({ step, index }))\n\t\t\t\t.filter(({ step }) => step.status === \"running\");\n\t\t\tconst selected = running.length === 1 ? running[0] : undefined;\n\t\t\tif (!selected) {\n\t\t\t\tthrow new Error(`Async run '${runId}' has ${running.length} running children. Provide index to choose one.`);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: \"live\",\n\t\t\t\trunId,\n\t\t\t\tasyncDir: location.asyncDir ?? undefined,\n\t\t\t\tstate,\n\t\t\t\tagent: selected.step.agent,\n\t\t\t\tindex: selected.index,\n\t\t\t\tintercomTarget: resolveSubagentIntercomTarget(runId, selected.step.agent, selected.index),\n\t\t\t\tcwd: status?.cwd ?? result?.cwd,\n\t\t\t\tsessionFile: selected.step.sessionFile ?? status?.sessionFile ?? result?.sessionFile,\n\t\t\t\tmodel: selected.step.model,\n\t\t\t\tthinking: selected.step.thinking,\n\t\t\t\t...(recoveryDescriptor ? { recoveryDescriptor } : {}),\n\t\t\t};\n\t\t}\n\t}\n\n\tif (stepCount > 1 && requestedIndex === undefined) {\n\t\tthrow new Error(`Async run '${runId}' has ${stepCount} children. Provide index to choose one.`);\n\t}\n\tconst index = requestedIndex ?? 0;\n\tif (!Number.isInteger(index)) throw new Error(`Async run '${runId}' index must be an integer.`);\n\tif (index < 0 || index >= stepCount) throw new Error(`Async run '${runId}' has ${stepCount} children. Index ${index} is out of range.`);\n\tconst agent = statusSteps[index]?.agent ?? resultSteps[index]?.agent ?? result?.agent;\n\tif (!agent) throw new Error(`Could not determine child agent for async run '${runId}'.`);\n\tif (recoveryDescriptor && recoveryDescriptor.agent !== agent) throw new Error(`Async run '${runId}' has a recovery descriptor for '${recoveryDescriptor.agent}', not '${agent}'.`);\n\tconst sessionFile = statusSteps[index]?.sessionFile\n\t\t?? resultSteps[index]?.sessionFile\n\t\t?? (stepCount === 1 ? status?.sessionFile ?? result?.sessionFile : undefined);\n\tif (!sessionFile && requireSessionFile) throw new Error(`Async run '${runId}' child ${index} does not have a persisted session file to resume from.`);\n\tconst resolvedSessionFile = sessionFile ? validateResumeSessionFile(runId, sessionFile) : undefined;\n\tconst stepModel = statusSteps[index]?.model ?? resultSteps[index]?.model ?? (stepCount === 1 ? result?.model : undefined);\n\tconst stepThinking = statusSteps[index]?.thinking ?? resultSteps[index]?.thinking ?? (stepCount === 1 ? result?.thinking : undefined);\n\n\treturn {\n\t\tkind: \"revive\",\n\t\trunId,\n\t\tasyncDir: location.asyncDir ?? undefined,\n\t\tstate,\n\t\tagent,\n\t\tindex,\n\t\tintercomTarget: resolveSubagentIntercomTarget(runId, agent, index),\n\t\tcwd: status?.cwd ?? result?.cwd,\n\t\t...(resolvedSessionFile ? { sessionFile: resolvedSessionFile } : {}),\n\t\t...(stepModel ? { model: stepModel } : {}),\n\t\t...(stepThinking ? { thinking: stepThinking } : {}),\n\t\t...(recoveryDescriptor ? { recoveryDescriptor } : {}),\n\t};\n}\n\nexport function applySteeringRecoveryAgentConfig(agentConfig: AgentConfig, descriptor: SteeringRecoveryDescriptor): AgentConfig {\n\treturn {\n\t\t...agentConfig,\n\t\tmodel: descriptor.model,\n\t\tfallbackModels: descriptor.fallbackModels ? [...descriptor.fallbackModels] : undefined,\n\t\tthinking: descriptor.thinking,\n\t\ttools: descriptor.tools ? [...descriptor.tools] : undefined,\n\t\textensions: descriptor.extensions ? [...descriptor.extensions] : undefined,\n\t\tsubagentOnlyExtensions: descriptor.subagentOnlyExtensions ? [...descriptor.subagentOnlyExtensions] : undefined,\n\t\tmcpDirectTools: descriptor.mcpDirectTools ? [...descriptor.mcpDirectTools] : undefined,\n\t\tsystemPrompt: descriptor.systemPrompt,\n\t\tsystemPromptMode: descriptor.systemPromptMode,\n\t\tinheritProjectContext: descriptor.inheritProjectContext,\n\t\tinheritSkills: descriptor.inheritSkills,\n\t\tskills: descriptor.skills ? [...descriptor.skills] : undefined,\n\t\tskillPath: descriptor.skillPath ? [...descriptor.skillPath] : undefined,\n\t\tfilePath: descriptor.agentFilePath,\n\t\tcompletionGuard: descriptor.completionGuard,\n\t\tmemory: descriptor.memory ? { ...descriptor.memory } : undefined,\n\t\toutput: descriptor.outputPath,\n\t\ttoolBudget: descriptor.initialToolBudget,\n\t\tmaxSubagentDepth: descriptor.maxSubagentDepth,\n\t};\n}\n\nexport function buildRevivedAsyncTask(target: AsyncResumeTarget, message: string): string {\n\treturn [\n\t\t\"You are reviving a previous subagent conversation.\",\n\t\t\"\",\n\t\t`Original run: ${target.runId}`,\n\t\t`Original agent: ${target.agent}`,\n\t\ttarget.sessionFile ? `Original session file: ${target.sessionFile}` : undefined,\n\t\t\"\",\n\t\t\"Use the stored session context as background. Answer the orchestrator's follow-up below. Do not assume the original child process is still alive.\",\n\t\t\"\",\n\t\t\"Follow-up:\",\n\t\tmessage,\n\t].filter((line): line is string => line !== undefined).join(\"\\n\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"async-resume.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/async-resume.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { ASYNC_DIR, RESULTS_DIR, isSupportedSubagentLifecycleVersion, UNSUPPORTED_SUBAGENT_LIFECYCLE_MESSAGE, type AsyncStatus, type SteeringRecoveryDescriptor, type SubagentState } from \"../../shared/types.ts\";\nimport { validateChildDescription } from \"../../shared/child-spec.ts\";\nimport { resolveSubagentIntercomTarget } from \"../../intercom/intercom-bridge.ts\";\nimport { validateAcceptanceInput } from \"../shared/acceptance.ts\";\nimport { validateToolBudgetConfig } from \"../shared/tool-budget.ts\";\nimport { resolveTurnBudgetConfig } from \"../shared/turn-budget.ts\";\nimport { deliverInterruptRequest } from \"./control-channel.ts\";\nimport { reconcileAsyncRun } from \"./stale-run-reconciler.ts\";\n\nexport const ASYNC_RESUME_INTERRUPT_SIGNAL: NodeJS.Signals = process.platform === \"win32\" ? \"SIGBREAK\" : \"SIGUSR2\";\n\nexport interface AsyncResumeParams {\n\tid?: string;\n\trunId?: string;\n\tdir?: string;\n\tindex?: number;\n}\n\nexport interface AsyncResumeDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n}\n\nexport interface AsyncResumeOptions {\n\trequireSessionFile?: boolean;\n}\n\nexport type AsyncResumeTarget = {\n\tkind: \"live\" | \"revive\";\n\trunId: string;\n\tasyncDir?: string;\n\tstate: AsyncStatus[\"state\"];\n\tagent: string;\n\tchildId?: string;\n\tdescription?: string;\n\tpermissions?: \"full\" | \"read-only\";\n\tindex: number;\n\tintercomTarget: string;\n\tcwd?: string;\n\tsessionFile?: string;\n\tmodel?: string;\n\tthinking?: string;\n\trecoveryDescriptor?: SteeringRecoveryDescriptor;\n};\n\ntype KillFn = (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\nexport function interruptLiveAsyncResumeTarget(input: {\n\ttarget: AsyncResumeTarget & { kind: \"live\" };\n\tstate?: Pick<SubagentState, \"asyncJobs\">;\n\tkill?: KillFn;\n\tnow?: () => number;\n\tresultsDir?: string;\n}): { ok: true; asyncId: string } | { ok: false; message: string } {\n\tconst asyncId = input.target.runId;\n\tif (!input.target.asyncDir) {\n\t\treturn { ok: false, message: `Async run ${asyncId} is live but does not have an async directory to interrupt.` };\n\t}\n\tconst status = reconcileAsyncRun(input.target.asyncDir, { resultsDir: input.resultsDir, kill: input.kill, now: input.now }).status;\n\tif (!status || status.state !== \"running\" || typeof status.pid !== \"number\") {\n\t\treturn { ok: false, message: `Async run ${asyncId} is live but no interrupt-capable runner pid was found.` };\n\t}\n\ttry {\n\t\tdeliverInterruptRequest({\n\t\t\tasyncDir: input.target.asyncDir,\n\t\t\tpid: status.pid,\n\t\t\tkill: input.kill,\n\t\t\tsignal: ASYNC_RESUME_INTERRUPT_SIGNAL,\n\t\t\tnow: input.now,\n\t\t\tsource: \"async-resume\",\n\t\t});\n\t\tconst tracked = input.state?.asyncJobs.get(asyncId);\n\t\tif (tracked) {\n\t\t\ttracked.activityState = undefined;\n\t\t\ttracked.updatedAt = input.now?.() ?? Date.now();\n\t\t}\n\t\treturn { ok: true, asyncId };\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn { ok: false, message: `Failed to interrupt async run ${asyncId}: ${message}` };\n\t}\n}\n\ninterface AsyncResultFile {\n\tid?: string;\n\trunId?: string;\n\tagent?: string;\n\tmode?: string;\n\tstate?: string;\n\tsuccess?: boolean;\n\tcwd?: string;\n\tsessionFile?: string;\n\tmodel?: string;\n\tthinking?: string;\n\tresults?: Array<{ agent?: string; success?: boolean; sessionFile?: string; intercomTarget?: string; model?: string; thinking?: string }>;\n}\n\nexport interface AsyncRunLocation {\n\tasyncDir: string | null;\n\tresultPath: string | null;\n\tresolvedId?: string;\n}\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction ensureObject(value: unknown, source: string): Record<string, unknown> {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(`Async result file '${source}' must contain a JSON object.`);\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction validateOptionalString(value: Record<string, unknown>, field: string, source: string, displayField = field): string | undefined {\n\tconst fieldValue = value[field];\n\tif (fieldValue === undefined) return undefined;\n\tif (typeof fieldValue !== \"string\") throw new Error(`Invalid async result file '${source}': ${displayField} must be a string.`);\n\treturn fieldValue;\n}\n\nfunction validateResultFile(value: unknown, resultPath: string): AsyncResultFile {\n\tconst data = ensureObject(value, resultPath);\n\tif (!isSupportedSubagentLifecycleVersion(data.lifecycleArtifactVersion)) {\n\t\tthrow new Error(UNSUPPORTED_SUBAGENT_LIFECYCLE_MESSAGE);\n\t}\n\tconst resultsValue = data.results;\n\tlet results: AsyncResultFile[\"results\"];\n\tif (resultsValue !== undefined) {\n\t\tif (!Array.isArray(resultsValue)) throw new Error(`Invalid async result file '${resultPath}': results must be an array.`);\n\t\tresults = resultsValue.map((entry, index) => {\n\t\t\tconst child = ensureObject(entry, `${resultPath} results[${index}]`);\n\t\t\tconst agent = validateOptionalString(child, \"agent\", resultPath, `results[${index}].agent`);\n\t\t\tconst sessionFile = validateOptionalString(child, \"sessionFile\", resultPath, `results[${index}].sessionFile`);\n\t\t\tconst intercomTarget = validateOptionalString(child, \"intercomTarget\", resultPath, `results[${index}].intercomTarget`);\n\t\t\tconst model = validateOptionalString(child, \"model\", resultPath, `results[${index}].model`);\n\t\t\tconst thinking = validateOptionalString(child, \"thinking\", resultPath, `results[${index}].thinking`);\n\t\t\tconst success = child.success;\n\t\t\tif (success !== undefined && typeof success !== \"boolean\") throw new Error(`Invalid async result file '${resultPath}': results[${index}].success must be a boolean.`);\n\t\t\treturn { agent, sessionFile, intercomTarget, model, thinking, ...(typeof success === \"boolean\" ? { success } : {}) };\n\t\t});\n\t}\n\tconst success = data.success;\n\tif (success !== undefined && typeof success !== \"boolean\") throw new Error(`Invalid async result file '${resultPath}': success must be a boolean.`);\n\treturn {\n\t\tid: validateOptionalString(data, \"id\", resultPath),\n\t\trunId: validateOptionalString(data, \"runId\", resultPath),\n\t\tagent: validateOptionalString(data, \"agent\", resultPath),\n\t\tmode: validateOptionalString(data, \"mode\", resultPath),\n\t\tstate: validateOptionalString(data, \"state\", resultPath),\n\t\tcwd: validateOptionalString(data, \"cwd\", resultPath),\n\t\tsessionFile: validateOptionalString(data, \"sessionFile\", resultPath),\n\t\tmodel: validateOptionalString(data, \"model\", resultPath),\n\t\tthinking: validateOptionalString(data, \"thinking\", resultPath),\n\t\t...(typeof success === \"boolean\" ? { success } : {}),\n\t\t...(results ? { results } : {}),\n\t};\n}\n\nfunction readResultFile(resultPath: string): AsyncResultFile {\n\tlet raw: string;\n\ttry {\n\t\traw = fs.readFileSync(resultPath, \"utf-8\");\n\t} catch (error) {\n\t\tthrow new Error(`Failed to read async result file '${resultPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\ttry {\n\t\treturn validateResultFile(JSON.parse(raw), resultPath);\n\t} catch (error) {\n\t\tif (error instanceof SyntaxError) {\n\t\t\tthrow new Error(`Failed to parse async result file '${resultPath}': ${getErrorMessage(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction assertRunId(value: string | undefined, field: \"id\" | \"runId\"): string | undefined {\n\tif (value === undefined) return undefined;\n\tif (value.trim() === \"\") throw new Error(`${field} must not be empty.`);\n\tif (path.isAbsolute(value) || /[\\\\/]/.test(value) || value.includes(\"..\")) {\n\t\tthrow new Error(`${field} must be an async run id or prefix, not a path.`);\n\t}\n\treturn value;\n}\n\nfunction assertInsideRoot(root: string, target: string, label: string): void {\n\tconst rootPath = path.resolve(root);\n\tconst targetPath = path.resolve(target);\n\tconst relative = path.relative(rootPath, targetPath);\n\tif (relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative))) return;\n\tthrow new Error(`${label} must be inside ${rootPath}.`);\n}\n\nfunction prefixedRunIds(dir: string, prefix: string, suffix = \"\"): string[] {\n\tif (!fs.existsSync(dir)) return [];\n\treturn fs.readdirSync(dir)\n\t\t.filter((entry) => entry.startsWith(prefix) && (!suffix || entry.endsWith(suffix)))\n\t\t.map((entry) => suffix ? entry.slice(0, -suffix.length) : entry)\n\t\t.sort();\n}\n\nfunction exactResultPath(resultsDir: string, runId: string): string | null {\n\tconst resultPath = path.join(resultsDir, `${runId}.json`);\n\tassertInsideRoot(resultsDir, resultPath, \"Async result file\");\n\treturn fs.existsSync(resultPath) ? resultPath : null;\n}\n\nexport function findAsyncRunPrefixMatches(prefix: string, asyncDirRoot: string, resultsDir: string): Array<{ id: string; location: AsyncRunLocation }> {\n\tconst requestedId = assertRunId(prefix, \"id\");\n\tif (!requestedId) return [];\n\tconst asyncRoot = path.resolve(asyncDirRoot);\n\tconst resultRoot = path.resolve(resultsDir);\n\tconst matchingIds = [...new Set([\n\t\t...prefixedRunIds(asyncRoot, requestedId),\n\t\t...prefixedRunIds(resultRoot, requestedId, \".json\"),\n\t])].sort();\n\treturn matchingIds.map((id) => {\n\t\tconst asyncDir = path.join(asyncRoot, id);\n\t\tassertInsideRoot(asyncRoot, asyncDir, \"Async run directory\");\n\t\treturn {\n\t\t\tid,\n\t\t\tlocation: {\n\t\t\t\tasyncDir: fs.existsSync(asyncDir) ? asyncDir : null,\n\t\t\t\tresultPath: exactResultPath(resultRoot, id),\n\t\t\t\tresolvedId: id,\n\t\t\t},\n\t\t};\n\t});\n}\n\nexport function resolveAsyncRunLocation(params: AsyncResumeParams, asyncDirRoot: string, resultsDir: string): AsyncRunLocation {\n\tconst asyncRoot = path.resolve(asyncDirRoot);\n\tconst resultRoot = path.resolve(resultsDir);\n\tconst requestedId = assertRunId(params.id, \"id\") ?? assertRunId(params.runId, \"runId\");\n\tif (params.dir) {\n\t\tconst asyncDir = path.resolve(params.dir);\n\t\tassertInsideRoot(asyncRoot, asyncDir, \"Async run directory\");\n\t\tconst resolvedId = requestedId ?? path.basename(asyncDir);\n\t\tif (requestedId && requestedId !== path.basename(asyncDir)) {\n\t\t\tthrow new Error(`Async run id '${requestedId}' does not match directory '${path.basename(asyncDir)}'.`);\n\t\t}\n\t\treturn { asyncDir, resultPath: exactResultPath(resultRoot, resolvedId), resolvedId };\n\t}\n\tif (!requestedId) return { asyncDir: null, resultPath: null };\n\n\tconst directAsyncDir = path.join(asyncRoot, requestedId);\n\tassertInsideRoot(asyncRoot, directAsyncDir, \"Async run directory\");\n\tconst directResultPath = exactResultPath(resultRoot, requestedId);\n\tif (fs.existsSync(directAsyncDir) || directResultPath) {\n\t\treturn {\n\t\t\tasyncDir: fs.existsSync(directAsyncDir) ? directAsyncDir : null,\n\t\t\tresultPath: directResultPath,\n\t\t\tresolvedId: requestedId,\n\t\t};\n\t}\n\n\tconst matching = findAsyncRunPrefixMatches(requestedId, asyncRoot, resultRoot);\n\tif (matching.length === 0) return { asyncDir: null, resultPath: null, resolvedId: requestedId };\n\tif (matching.length > 1) {\n\t\tthrow new Error(`Ambiguous async run id prefix '${requestedId}' matched: ${matching.map((match) => match.id).join(\", \")}. Provide a longer id.`);\n\t}\n\treturn matching[0]!.location;\n}\n\nfunction resultState(result: AsyncResultFile): AsyncStatus[\"state\"] {\n\tif (result.state === \"complete\" || result.state === \"failed\" || result.state === \"paused\" || result.state === \"stopped\" || result.state === \"running\" || result.state === \"queued\") {\n\t\treturn result.state;\n\t}\n\treturn result.success ? \"complete\" : \"failed\";\n}\n\nfunction validateStatusForResume(status: AsyncStatus | null, source: string): void {\n\tif (!status) return;\n\tif (typeof status.runId !== \"string\") throw new Error(`Invalid async status '${source}': runId must be a string.`);\n\tif (status.sessionId !== undefined && typeof status.sessionId !== \"string\") throw new Error(`Invalid async status '${source}': sessionId must be a string.`);\n\tif (status.cwd !== undefined && typeof status.cwd !== \"string\") throw new Error(`Invalid async status '${source}': cwd must be a string.`);\n\tif (status.sessionFile !== undefined && typeof status.sessionFile !== \"string\") throw new Error(`Invalid async status '${source}': sessionFile must be a string.`);\n\tif (status.steps !== undefined) {\n\t\tif (!Array.isArray(status.steps)) throw new Error(`Invalid async status '${source}': steps must be an array.`);\n\t\tstatus.steps.forEach((step, index) => {\n\t\t\tif (!step || typeof step !== \"object\" || Array.isArray(step)) throw new Error(`Invalid async status '${source}': steps[${index}] must be an object.`);\n\t\t\tconst stepRecord = step as Record<string, unknown>;\n\t\t\tif (typeof stepRecord.agent !== \"string\") throw new Error(`Invalid async status '${source}': steps[${index}].agent must be a string.`);\n\t\t\tif (stepRecord.childId !== undefined && (typeof stepRecord.childId !== \"string\" || !stepRecord.childId.trim())) throw new Error(`Invalid async status '${source}': steps[${index}].childId must be a non-empty string.`);\n\t\t\tif (stepRecord.description !== undefined) validateChildDescription(stepRecord.description, `Async status '${source}' steps[${index}].description`);\n\t\t\tif (stepRecord.permissions !== undefined && stepRecord.permissions !== \"full\" && stepRecord.permissions !== \"read-only\") throw new Error(`Invalid async status '${source}': steps[${index}].permissions must be full or read-only.`);\n\t\t\tif (stepRecord.sessionFile !== undefined && typeof stepRecord.sessionFile !== \"string\") throw new Error(`Invalid async status '${source}': steps[${index}].sessionFile must be a string.`);\n\t\t\tif (stepRecord.model !== undefined && typeof stepRecord.model !== \"string\") throw new Error(`Invalid async status '${source}': steps[${index}].model must be a string.`);\n\t\t\tif (stepRecord.thinking !== undefined && typeof stepRecord.thinking !== \"string\") throw new Error(`Invalid async status '${source}': steps[${index}].thinking must be a string.`);\n\t\t});\n\t}\n}\n\nexport function readAsyncRecoveryDescriptor(asyncDir: string | undefined): SteeringRecoveryDescriptor | undefined {\n\tif (!asyncDir) return undefined;\n\tconst descriptorPath = path.join(asyncDir, \"recovery-descriptor.json\");\n\tif (!fs.existsSync(descriptorPath)) return undefined;\n\tlet value: unknown;\n\ttry {\n\t\tvalue = JSON.parse(fs.readFileSync(descriptorPath, \"utf-8\"));\n\t} catch (error) {\n\t\tthrow new Error(`Failed to parse async recovery descriptor '${descriptorPath}': ${getErrorMessage(error)}`, { cause: error instanceof Error ? error : undefined });\n\t}\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': expected an object.`);\n\tconst parsed = value as Record<string, unknown>;\n\tconst allowedFields = new Set([\n\t\t\"version\", \"lifecycleArtifactVersion\", \"sourceRunId\", \"childId\", \"description\", \"permissions\", \"agent\", \"sessionFile\", \"cwd\", \"model\", \"thinking\", \"skills\",\n\t\t\"outputPath\", \"outputMode\", \"acceptance\", \"sessionDir\", \"artifactConfig\",\n\t\t\"artifactsDir\", \"maxOutput\", \"controlConfig\", \"absoluteDeadlineAt\", \"initialTurnBudget\", \"initialToolBudget\", \"maxSubagentDepth\", \"share\",\n\t]);\n\tfor (const field of Object.keys(parsed)) {\n\t\tif (!allowedFields.has(field)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': unknown field '${field}'.`);\n\t}\n\tif (parsed.version !== 3) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': version must be 3.`);\n\tif (!isSupportedSubagentLifecycleVersion(parsed.lifecycleArtifactVersion)) throw new Error(UNSUPPORTED_SUBAGENT_LIFECYCLE_MESSAGE);\n\tconst requiredStrings = [\"sourceRunId\", \"childId\", \"description\", \"agent\", \"cwd\", \"outputMode\"] as const;\n\tfor (const field of requiredStrings) {\n\t\tif (typeof parsed[field] !== \"string\" || !(parsed[field] as string).trim()) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${field} must be a non-empty string.`);\n\t}\n\tif (parsed.permissions !== \"full\" && parsed.permissions !== \"read-only\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': permissions must be full or read-only.`);\n\tvalidateChildDescription(parsed.description, `Async recovery descriptor '${descriptorPath}' description`);\n\tif (parsed.outputMode !== \"inline\" && parsed.outputMode !== \"file-only\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': outputMode is invalid.`);\n\tfor (const field of [\"share\"] as const) {\n\t\tif (typeof parsed[field] !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${field} must be a boolean.`);\n\t}\n\tif (!Number.isInteger(parsed.maxSubagentDepth) || (parsed.maxSubagentDepth as number) < 0) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': maxSubagentDepth must be a non-negative integer.`);\n\tfor (const field of [\"skills\"] as const) {\n\t\tconst item = parsed[field];\n\t\tif (item !== undefined && (!Array.isArray(item) || item.some((entry) => typeof entry !== \"string\" || !entry.trim()))) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${field} must contain non-empty strings.`);\n\t}\n\tfor (const field of [\"sessionFile\", \"model\", \"thinking\", \"outputPath\", \"sessionDir\", \"artifactsDir\"] as const) {\n\t\tif (parsed[field] !== undefined && (typeof parsed[field] !== \"string\" || !(parsed[field] as string).trim())) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${field} must be a non-empty string.`);\n\t}\n\tif (parsed.absoluteDeadlineAt !== undefined && (!Number.isFinite(parsed.absoluteDeadlineAt) || (parsed.absoluteDeadlineAt as number) <= 0)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': absoluteDeadlineAt must be a positive timestamp.`);\n\tif (parsed.initialTurnBudget !== undefined) {\n\t\tconst result = resolveTurnBudgetConfig(parsed.initialTurnBudget, \"recoveryDescriptor.initialTurnBudget\");\n\t\tif (result.error) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${result.error}`);\n\t}\n\tif (parsed.initialToolBudget !== undefined) {\n\t\tconst result = validateToolBudgetConfig(parsed.initialToolBudget, \"recoveryDescriptor.initialToolBudget\");\n\t\tif (result.error) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${result.error}`);\n\t}\n\tif (parsed.maxOutput !== undefined) {\n\t\tif (!parsed.maxOutput || typeof parsed.maxOutput !== \"object\" || Array.isArray(parsed.maxOutput)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': maxOutput must be an object.`);\n\t\tfor (const field of [\"bytes\", \"lines\"] as const) {\n\t\t\tconst item = (parsed.maxOutput as Record<string, unknown>)[field];\n\t\t\tif (item !== undefined && (!Number.isInteger(item) || (item as number) < 1)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': maxOutput.${field} must be a positive integer.`);\n\t\t}\n\t}\n\tif (parsed.artifactConfig !== undefined) {\n\t\tif (!parsed.artifactConfig || typeof parsed.artifactConfig !== \"object\" || Array.isArray(parsed.artifactConfig)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': artifactConfig must be an object.`);\n\t\tconst artifact = parsed.artifactConfig as Record<string, unknown>;\n\t\tfor (const field of [\"enabled\", \"includeInput\", \"includeOutput\", \"includeJsonl\", \"includeMetadata\"] as const) {\n\t\t\tif (typeof artifact[field] !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': artifactConfig.${field} must be a boolean.`);\n\t\t}\n\t\tif (artifact.includeTranscript !== undefined && typeof artifact.includeTranscript !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': artifactConfig.includeTranscript must be a boolean.`);\n\t\tif (!Number.isInteger(artifact.cleanupDays) || (artifact.cleanupDays as number) < 0) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': artifactConfig.cleanupDays must be a non-negative integer.`);\n\t}\n\tif (parsed.controlConfig !== undefined) {\n\t\tif (!parsed.controlConfig || typeof parsed.controlConfig !== \"object\" || Array.isArray(parsed.controlConfig)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig must be an object.`);\n\t\tconst control = parsed.controlConfig as Record<string, unknown>;\n\t\tif (typeof control.enabled !== \"boolean\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.enabled must be a boolean.`);\n\t\tfor (const field of [\"needsAttentionAfterMs\", \"activeNoticeAfterMs\", \"failedToolAttemptsBeforeAttention\"] as const) {\n\t\t\tif (!Number.isInteger(control[field]) || (control[field] as number) < 1) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.${field} must be a positive integer.`);\n\t\t}\n\t\tfor (const field of [\"activeNoticeAfterTurns\", \"activeNoticeAfterTokens\"] as const) {\n\t\t\tif (control[field] !== undefined && (!Number.isInteger(control[field]) || (control[field] as number) < 1)) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.${field} must be a positive integer.`);\n\t\t}\n\t\tif (!Array.isArray(control.notifyOn) || control.notifyOn.some((item) => item !== \"active_long_running\" && item !== \"needs_attention\")) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.notifyOn is invalid.`);\n\t\tif (!Array.isArray(control.notifyChannels) || control.notifyChannels.some((item) => item !== \"event\" && item !== \"async\" && item !== \"intercom\")) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': controlConfig.notifyChannels is invalid.`);\n\t}\n\tif (parsed.acceptance !== undefined) {\n\t\tconst errors = validateAcceptanceInput(parsed.acceptance, \"recoveryDescriptor.acceptance\");\n\t\tif (errors.length) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': ${errors.join(\" \")}`);\n\t}\n\treturn parsed as unknown as SteeringRecoveryDescriptor;\n}\n\nfunction validateResumeSessionFile(runId: string, sessionFile: string): string {\n\tif (path.extname(sessionFile) !== \".jsonl\") throw new Error(`Async run '${runId}' session file must be a .jsonl file: ${sessionFile}`);\n\tconst resolved = path.resolve(sessionFile);\n\tif (!fs.existsSync(resolved)) throw new Error(`Async run '${runId}' session file does not exist: ${sessionFile}`);\n\treturn resolved;\n}\n\nexport function resolveAsyncResumeTarget(params: AsyncResumeParams, deps: AsyncResumeDeps = {}, options: AsyncResumeOptions = {}): AsyncResumeTarget {\n\tconst asyncDirRoot = deps.asyncDirRoot ?? ASYNC_DIR;\n\tconst resultsDir = deps.resultsDir ?? RESULTS_DIR;\n\tconst requireSessionFile = options.requireSessionFile ?? true;\n\tconst location = resolveAsyncRunLocation(params, asyncDirRoot, resultsDir);\n\tif (!location.asyncDir && !location.resultPath) {\n\t\tthrow new Error(\"Async run not found. Provide id or dir.\");\n\t}\n\n\tconst reconciliation = location.asyncDir\n\t\t? reconcileAsyncRun(location.asyncDir, { resultsDir, kill: deps.kill, now: deps.now })\n\t\t: undefined;\n\tconst status = reconciliation?.status ?? null;\n\tvalidateStatusForResume(status, location.asyncDir ? path.join(location.asyncDir, \"status.json\") : \"status.json\");\n\tconst recoveryDescriptor = readAsyncRecoveryDescriptor(location.asyncDir);\n\tconst result = location.resultPath ? readResultFile(location.resultPath) : undefined;\n\tconst runId = status?.runId ?? result?.runId ?? result?.id ?? location.resolvedId ?? (location.asyncDir ? path.basename(location.asyncDir) : \"unknown\");\n\tif (recoveryDescriptor && recoveryDescriptor.sourceRunId !== runId) throw new Error(`Async run '${runId}' has a recovery descriptor for a different source run.`);\n\tconst state = status?.state ?? (result ? resultState(result) : undefined);\n\tif (!state) throw new Error(`Status file not found for async run '${runId}'.`);\n\tif (state === \"stopped\") throw new Error(`Async run '${runId}' was stopped and cannot be resumed. Start a new run instead.`);\n\n\tconst statusSteps = status?.steps ?? [];\n\tconst resultSteps = result?.results ?? [];\n\tconst stepCount = statusSteps.length || resultSteps.length || (result?.agent ? 1 : 0);\n\tconst requestedIndex = params.index;\n\tif (requestedIndex !== undefined && !Number.isInteger(requestedIndex)) throw new Error(`Async run '${runId}' index must be an integer.`);\n\tconst terminalStepStatuses = new Set([\"complete\", \"completed\", \"failed\", \"paused\"]);\n\n\tif (state === \"running\") {\n\t\tif (requestedIndex !== undefined) {\n\t\t\tif (requestedIndex < 0 || requestedIndex >= stepCount) throw new Error(`Async run '${runId}' has ${stepCount} children. Index ${requestedIndex} is out of range.`);\n\t\t\tconst selectedStep = statusSteps[requestedIndex];\n\t\t\tif (selectedStep?.status === \"running\") {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"live\",\n\t\t\t\t\trunId,\n\t\t\t\t\tasyncDir: location.asyncDir ?? undefined,\n\t\t\t\t\tstate,\n\t\t\t\t\tagent: selectedStep.agent,\n\t\t\t\t\tchildId: selectedStep.childId,\n\t\t\t\t\tdescription: selectedStep.description,\n\t\t\t\t\tpermissions: selectedStep.permissions,\n\t\t\t\t\tindex: requestedIndex,\n\t\t\t\t\tintercomTarget: resolveSubagentIntercomTarget(runId, selectedStep.childId ?? selectedStep.agent, requestedIndex),\n\t\t\t\t\tcwd: status?.cwd ?? result?.cwd,\n\t\t\t\t\tsessionFile: selectedStep.sessionFile ?? status?.sessionFile ?? result?.sessionFile,\n\t\t\t\t\tmodel: selectedStep.model,\n\t\t\t\t\tthinking: selectedStep.thinking,\n\t\t\t\t\t...(recoveryDescriptor ? { recoveryDescriptor } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (selectedStep?.status === \"pending\") throw new Error(`Async run '${runId}' child ${requestedIndex} is pending and has not started yet. Wait for it to run or complete before resuming.`);\n\t\t\tif (selectedStep && !terminalStepStatuses.has(selectedStep.status)) throw new Error(`Async run '${runId}' child ${requestedIndex} is ${selectedStep.status} and cannot be revived yet.`);\n\t\t} else {\n\t\t\tconst running = statusSteps\n\t\t\t\t.map((step, index) => ({ step, index }))\n\t\t\t\t.filter(({ step }) => step.status === \"running\");\n\t\t\tconst selected = running.length === 1 ? running[0] : undefined;\n\t\t\tif (!selected) {\n\t\t\t\tthrow new Error(`Async run '${runId}' has ${running.length} running children. Provide index to choose one.`);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: \"live\",\n\t\t\t\trunId,\n\t\t\t\tasyncDir: location.asyncDir ?? undefined,\n\t\t\t\tstate,\n\t\t\t\tagent: selected.step.agent,\n\t\t\t\tchildId: selected.step.childId,\n\t\t\t\tdescription: selected.step.description,\n\t\t\t\tpermissions: selected.step.permissions,\n\t\t\t\tindex: selected.index,\n\t\t\t\tintercomTarget: resolveSubagentIntercomTarget(runId, selected.step.childId ?? selected.step.agent, selected.index),\n\t\t\t\tcwd: status?.cwd ?? result?.cwd,\n\t\t\t\tsessionFile: selected.step.sessionFile ?? status?.sessionFile ?? result?.sessionFile,\n\t\t\t\tmodel: selected.step.model,\n\t\t\t\tthinking: selected.step.thinking,\n\t\t\t\t...(recoveryDescriptor ? { recoveryDescriptor } : {}),\n\t\t\t};\n\t\t}\n\t}\n\n\tif (stepCount > 1 && requestedIndex === undefined) {\n\t\tthrow new Error(`Async run '${runId}' has ${stepCount} children. Provide index to choose one.`);\n\t}\n\tconst index = requestedIndex ?? 0;\n\tif (!Number.isInteger(index)) throw new Error(`Async run '${runId}' index must be an integer.`);\n\tif (index < 0 || index >= stepCount) throw new Error(`Async run '${runId}' has ${stepCount} children. Index ${index} is out of range.`);\n\tconst agent = statusSteps[index]?.agent ?? resultSteps[index]?.agent ?? result?.agent;\n\tif (!agent) throw new Error(`Could not determine child agent for async run '${runId}'.`);\n\tif (recoveryDescriptor && recoveryDescriptor.agent !== agent) throw new Error(`Async run '${runId}' has a recovery descriptor for '${recoveryDescriptor.agent}', not '${agent}'.`);\n\tconst sessionFile = statusSteps[index]?.sessionFile\n\t\t?? resultSteps[index]?.sessionFile\n\t\t?? (stepCount === 1 ? status?.sessionFile ?? result?.sessionFile : undefined);\n\tif (!sessionFile && requireSessionFile) throw new Error(`Async run '${runId}' child ${index} does not have a persisted session file to resume from.`);\n\tconst resolvedSessionFile = sessionFile ? validateResumeSessionFile(runId, sessionFile) : undefined;\n\tconst stepModel = statusSteps[index]?.model ?? resultSteps[index]?.model ?? (stepCount === 1 ? result?.model : undefined);\n\tconst stepThinking = statusSteps[index]?.thinking ?? resultSteps[index]?.thinking ?? (stepCount === 1 ? result?.thinking : undefined);\n\tconst childId = statusSteps[index]?.childId ?? resultSteps[index]?.childId;\n\n\treturn {\n\t\tkind: \"revive\",\n\t\trunId,\n\t\tasyncDir: location.asyncDir ?? undefined,\n\t\tstate,\n\t\tagent,\n\t\tchildId,\n\t\tdescription: statusSteps[index]?.description ?? resultSteps[index]?.description,\n\t\tpermissions: statusSteps[index]?.permissions ?? resultSteps[index]?.permissions,\n\t\tindex,\n\t\tintercomTarget: resolveSubagentIntercomTarget(runId, childId ?? agent, index),\n\t\tcwd: status?.cwd ?? result?.cwd,\n\t\t...(resolvedSessionFile ? { sessionFile: resolvedSessionFile } : {}),\n\t\t...(stepModel ? { model: stepModel } : {}),\n\t\t...(stepThinking ? { thinking: stepThinking } : {}),\n\t\t...(recoveryDescriptor ? { recoveryDescriptor } : {}),\n\t};\n}\n\nexport function buildRevivedAsyncTask(target: AsyncResumeTarget, message: string): string {\n\treturn [\n\t\t\"You are reviving a previous subagent conversation.\",\n\t\t\"\",\n\t\t`Original run: ${target.runId}`,\n\t\t`Original agent: ${target.agent}`,\n\t\ttarget.sessionFile ? `Original session file: ${target.sessionFile}` : undefined,\n\t\t\"\",\n\t\t\"Use the stored session context as background. Answer the orchestrator's follow-up below. Do not assume the original child process is still alive.\",\n\t\t\"\",\n\t\t\"Follow-up:\",\n\t\tmessage,\n\t].filter((line): line is string => line !== undefined).join(\"\\n\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-status.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/run-status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMrE,OAAO,EAA4C,KAAK,OAAO,EAAwE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMzL,OAAO,EAAqF,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE9J,UAAU,eAAe;IACxB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAkKD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE,aAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,CAqPjH","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatAsyncRunList, formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns } from \"./async-status.ts\";\nimport { formatAsyncResultTranscript, formatAsyncRunTranscript, formatNestedRunTranscript, inspectSubagentFleet } from \"./fleet-view.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatModelThinking } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport { ASYNC_DIR, RESULTS_DIR, type AsyncStatus, type Details, type ForegroundResumeRun, type NestedRunSummary, type SteeringStatus, type SubagentState } from \"../../shared/types.ts\";\nimport { resolveSubagentIntercomTarget } from \"../../intercom/intercom-bridge.ts\";\nimport { resolveAsyncRunLocation } from \"./async-resume.ts\";\nimport { resolveSubagentRunId } from \"./run-id-resolver.ts\";\nimport { flatToLogicalStepIndex, normalizeParallelGroups } from \"./parallel-groups.ts\";\nimport { reconcileAsyncRun, reconcileNestedAsyncDescendants } from \"./stale-run-reconciler.ts\";\nimport { attachRootChildrenToSteps, findNestedRouteForRootId, projectNestedRegistryForRoot, type NestedRunResolutionScope } from \"../shared/nested-events.ts\";\n\ninterface RunStatusParams {\n\taction?: \"status\";\n\tid?: string;\n\trunId?: string;\n\tdir?: string;\n\tindex?: number;\n\tview?: \"fleet\" | \"transcript\";\n\tlines?: number;\n}\n\ninterface RunStatusDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tnested?: NestedRunResolutionScope;\n\tsessionRoots?: string[];\n}\n\nfunction hasExistingSessionFile(value: unknown): value is string {\n\treturn typeof value === \"string\" && fs.existsSync(value);\n}\n\nfunction formatResumeGuidance(runId: string | undefined, children: Array<{ agent?: unknown; sessionFile?: unknown }>, fallbackSessionFile?: unknown, options: { stopped?: boolean } = {}): string {\n\tif (options.stopped) return \"Resume: unavailable; stopped runs are not resumable. Start a new run instead.\";\n\tconst knownChildren = children\n\t\t.map((child, index) => ({ child, index }))\n\t\t.filter(({ child }) => typeof child.agent === \"string\");\n\tif (!runId || knownChildren.length === 0) return \"Resume: unavailable; no child session file was persisted.\";\n\tconst singleSessionFile = knownChildren[0]?.child.sessionFile ?? fallbackSessionFile;\n\tif (children.length === 1 && knownChildren.length === 1 && hasExistingSessionFile(singleSessionFile)) {\n\t\treturn `Revive: subagent({ action: \"resume\", id: \"${runId}\", message: \"...\" })`;\n\t}\n\tconst childWithSession = knownChildren.find(({ child }) => hasExistingSessionFile(child.sessionFile));\n\tif (childWithSession) {\n\t\treturn `Revive child: subagent({ action: \"resume\", id: \"${runId}\", index: ${childWithSession.index}, message: \"...\" })`;\n\t}\n\treturn \"Resume: unavailable; no child session file was persisted.\";\n}\n\nfunction stepLineLabel(status: AsyncStatus, index: number): string {\n\tconst steps = status.steps ?? [];\n\tif (status.mode === \"parallel\") return `Agent ${index + 1}/${steps.length || 1}`;\n\tif (status.mode === \"chain\") {\n\t\tconst chainStepCount = status.chainStepCount ?? (steps.length || 1);\n\t\tconst groups = normalizeParallelGroups(status.parallelGroups, steps.length, chainStepCount);\n\t\tconst group = groups.find((candidate) => index >= candidate.start && index < candidate.start + candidate.count);\n\t\tif (group) return `Step ${group.stepIndex + 1}/${chainStepCount} Agent ${index - group.start + 1}/${group.count}`;\n\t\treturn `Step ${flatToLogicalStepIndex(index, chainStepCount, groups) + 1}/${chainStepCount}`;\n\t}\n\treturn `Step ${index + 1}`;\n}\n\nfunction nestedRunDisplayName(run: NestedRunSummary): string {\n\tif (run.agent) return run.agent;\n\tif (run.agents?.length) return run.agents.join(\", \");\n\treturn run.id;\n}\n\nfunction formatSteeringSummary(input: { steering?: SteeringStatus }): string | undefined {\n\tconst steering = input.steering;\n\tif (!steering || steering.requested === 0) return undefined;\n\tconst lateAcknowledgments = steering.recent.reduce((count, request) => count + request.targets.filter((target) => target.lateDeliveredAt !== undefined).length, 0);\n\treturn `${steering.requested} requested, ${steering.scheduled} scheduled, ${steering.pending} pending, ${steering.delivered} delivered, ${steering.failed} failed, ${steering.recovered} recovered${lateAcknowledgments ? `, ${lateAcknowledgments} late acknowledged` : \"\"}`;\n}\n\nfunction rememberedForegroundChildOutput(child: ForegroundResumeRun[\"children\"][number]): string {\n\tconst outputPath = child.artifactPaths?.outputPath ?? child.savedOutputPath;\n\tif (outputPath && fs.existsSync(outputPath)) {\n\t\ttry {\n\t\t\tconst artifactOutput = fs.readFileSync(outputPath, \"utf-8\").trim();\n\t\t\tif (artifactOutput) return artifactOutput;\n\t\t} catch {\n\t\t\t// Fall back to the remembered snapshot below.\n\t\t}\n\t}\n\treturn child.finalOutput ?? \"\";\n}\n\nfunction formatRememberedForegroundStatus(run: ForegroundResumeRun): string {\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t\"State: remembered foreground\",\n\t\t`Mode: ${run.mode}`,\n\t\t`Updated: ${new Date(run.updatedAt).toISOString()}`,\n\t\t`Cwd: ${run.cwd}`,\n\t];\n\tfor (const child of run.children) {\n\t\tconst output = rememberedForegroundChildOutput(child).trim().split(/\\r?\\n/).find((line) => line.trim());\n\t\tconst parts = [\n\t\t\t`${child.index + 1}. ${child.agent} ${child.status}`,\n\t\t\tchild.exitCode !== undefined ? `exit ${child.exitCode}` : undefined,\n\t\t\tchild.detachedReason ? `detached: ${child.detachedReason}` : undefined,\n\t\t\tchild.acceptance ? `acceptance: ${child.acceptance.status}` : undefined,\n\t\t\tchild.error ? `error: ${child.error}` : undefined,\n\t\t\toutput ? `output: ${output.slice(0, 160)}` : undefined,\n\t\t].filter(Boolean);\n\t\tlines.push(parts.join(\", \"));\n\t\tif (child.sessionFile) lines.push(` Session: ${child.sessionFile}`);\n\t\tif (child.transcriptPath) lines.push(` Transcript: ${child.transcriptPath}`);\n\t\tif (child.artifactPaths?.outputPath) lines.push(` Output: ${child.artifactPaths.outputPath}`);\n\t\tif (child.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath) lines.push(` Saved output: ${child.savedOutputPath}`);\n\t\tif (child.outputSaveError) lines.push(` Output warning: ${child.outputSaveError}`);\n\t\tif (child.transcriptError) lines.push(` Transcript warning: ${child.transcriptError}`);\n\t}\n\tlines.push(\"\", `Status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\tif (run.children.length === 1) lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", view: \"transcript\" })`);\n\telse lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", index: 0, view: \"transcript\" })`);\n\tconst detached = run.children.some((child) => child.status === \"detached\");\n\tconst resumable = run.children.find((child) => hasExistingSessionFile(child.sessionFile));\n\tif (detached) {\n\t\tlines.push(`Recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t} else if (resumable) {\n\t\tlines.push(run.children.length === 1\n\t\t\t? `Revive: subagent({ action: \"resume\", id: \"${run.runId}\", message: \"...\" })`\n\t\t\t: `Revive child: subagent({ action: \"resume\", id: \"${run.runId}\", index: ${resumable.index}, message: \"...\" })`);\n\t} else {\n\t\tlines.push(\"Resume: unavailable; no child session file was persisted.\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatRememberedForegroundTranscript(run: ForegroundResumeRun, options: { index?: number; lines?: number }): string {\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && run.children.length === 1) index = 0;\n\tif (index === undefined) return `Transcript view requires index for foreground run '${run.runId}' with ${run.children.length} children.`;\n\tif (index < 0 || index >= run.children.length) throw new Error(`Transcript index ${index} is out of range for ${run.children.length} foreground children.`);\n\tconst child = run.children[index]!;\n\tconst lineLimit = Math.max(1, Math.min(options.lines ?? 80, 1000));\n\tconst outputLines = rememberedForegroundChildOutput(child).split(/\\r?\\n/).filter((line) => line.trim()).slice(-lineLimit);\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t`State: ${child.status}`,\n\t\t`Child: ${index} (${child.agent})`,\n\t\tchild.sessionFile ? `Session: ${child.sessionFile}` : undefined,\n\t\tchild.transcriptPath ? `Transcript: ${child.transcriptPath}` : undefined,\n\t\tchild.artifactPaths?.outputPath ? `Output: ${child.artifactPaths.outputPath}` : undefined,\n\t\tchild.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath ? `Saved output: ${child.savedOutputPath}` : undefined,\n\t\tchild.outputSaveError ? `Output warning: ${child.outputSaveError}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tlines.push(\"Result transcript tail:\");\n\tif (outputLines.length === 0) lines.push(\" (no recovered final output available yet)\");\n\telse for (const line of outputLines) lines.push(` ${line}`);\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatNestedExactStatus(rootRunId: string, run: NestedRunSummary): string {\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`Root: ${rootRunId}`,\n\t\t`Parent: ${run.parentRunId}${run.parentStepIndex !== undefined ? ` step ${run.parentStepIndex + 1}` : \"\"}`,\n\t\t`State: ${run.state}`,\n\t\trun.activityState || run.lastActivityAt ? `Activity: ${formatActivityLabel(run.lastActivityAt, run.activityState)}` : undefined,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\t`Agent: ${nestedRunDisplayName(run)}`,\n\t\trun.currentStep !== undefined ? `Progress: step ${run.currentStep + 1}/${run.chainStepCount ?? run.steps?.length ?? 1}` : undefined,\n\t\trun.turnBudget ? `Turn budget: ${run.turnBudget.turnCount}/${run.turnBudget.maxTurns}+${run.turnBudget.graceTurns} (${run.turnBudget.outcome})` : undefined,\n\t\trun.asyncDir ? `Dir: ${run.asyncDir}` : undefined,\n\t\trun.sessionFile ? `Session: ${run.sessionFile}` : undefined,\n\t\trun.error ? `Error: ${run.error}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tif (run.path.length) {\n\t\tlines.push(`Path: ${run.path.map((part) => `${part.runId}${part.stepIndex !== undefined ? `:${part.stepIndex + 1}` : \"\"}${part.agent ? `:${part.agent}` : \"\"}`).join(\" > \")} > ${run.id}`);\n\t}\n\tif (run.steps?.length) {\n\t\tlines.push(\"Steps:\");\n\t\tfor (const [index, step] of run.steps.entries()) {\n\t\t\tconst activity = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\tconst budget = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\tlines.push(` ${index + 1}. ${step.agent} ${step.status}${activity ? `, ${activity}` : \"\"}${budget}${step.error ? `, error: ${step.error}` : \"\"}`);\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true }));\n\t\t}\n\t}\n\tlines.push(...formatNestedRunStatusLines(run.children, { indent: \" \", commandHints: true }));\n\tlines.push(\"Commands:\", ` Status: subagent({ action: \"status\", id: \"${run.id}\" })`, ` Interrupt: subagent({ action: \"interrupt\", id: \"${run.id}\" })`, ` Resume: subagent({ action: \"resume\", id: \"${run.id}\", message: \"...\" })`, ` Steer: subagent({ action: \"steer\", id: \"${run.id}\", message: \"...\" })`, ` Root status: subagent({ action: \"status\", id: \"${rootRunId}\" })`);\n\treturn lines.join(\"\\n\");\n}\n\nexport function inspectSubagentStatus(params: RunStatusParams, deps: RunStatusDeps = {}): AgentToolResult<Details> {\n\tconst asyncDirRoot = deps.asyncDirRoot ?? ASYNC_DIR;\n\tconst resultsDir = deps.resultsDir ?? RESULTS_DIR;\n\tconst currentSessionId = deps.state?.currentSessionId ?? undefined;\n\tif (params.view && params.view !== \"fleet\" && params.view !== \"transcript\") {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Unknown status view: ${params.view}. Valid: fleet, transcript.` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tif (params.view === \"fleet\") {\n\t\treturn inspectSubagentFleet(params, { asyncDirRoot, resultsDir, kill: deps.kill, now: deps.now, state: deps.state, childSafe: Boolean(deps.nested) });\n\t}\n\tif (!params.id && !params.runId && !params.dir) {\n\t\tif (deps.nested) {\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent status requires an id when no foreground run is active.\" }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst runs = listAsyncRuns(asyncDirRoot, { states: [\"queued\", \"running\"], sessionId: currentSessionId, resultsDir, kill: deps.kill, now: deps.now });\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (runs.length === 1) return inspectSubagentStatus({ ...params, id: runs[0]!.id }, deps);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: runs.length === 0 ? \"No active async run transcript is available.\" : `Transcript view requires an id when ${runs.length} active async runs exist. Use subagent({ action: \"status\", view: \"fleet\" }) to choose one.` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: formatAsyncRunList(runs) }],\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\tlet location;\n\ttry {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!params.dir && requestedId) {\n\t\t\tconst resolved = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\tif (resolved?.kind === \"foreground\") {\n\t\t\t\tconst run = deps.state?.foregroundRuns?.get(resolved.id);\n\t\t\t\tif (run) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: params.view === \"transcript\" ? formatRememberedForegroundTranscript(run, { index: params.index, lines: params.lines }) : formatRememberedForegroundStatus(run) }],\n\t\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t\t};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (resolved?.kind === \"nested\") {\n\t\t\t\treconcileNestedAsyncDescendants(resolved.match.route, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tconst refreshed = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\t\tconst nested = refreshed?.kind === \"nested\" ? refreshed : resolved;\n\t\t\t\tif (params.view === \"transcript\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedRunTranscript(nested.match.run, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedExactStatus(nested.match.rootRunId, nested.match.run) }], details: { mode: \"single\", results: [] } };\n\t\t\t}\n\t\t\tif (resolved?.kind === \"async\") location = resolved.location;\n\t\t\telse location = { asyncDir: null, resultPath: null, resolvedId: requestedId };\n\t\t} else {\n\t\t\tlocation = resolveAsyncRunLocation(params, asyncDirRoot, resultsDir);\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tconst { asyncDir, resultPath, resolvedId } = location;\n\n\tif (!asyncDir && !resultPath) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Async run not found. Provide id or dir.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\n\tif (asyncDir) {\n\t\tlet reconciliation;\n\t\ttry {\n\t\t\treconciliation = reconcileAsyncRun(asyncDir, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\tconst status = reconciliation.status;\n\t\tconst effectiveRunId = status?.runId ?? resolvedId ?? \"unknown\";\n\t\tconst logPath = path.join(asyncDir, `subagent-log-${effectiveRunId}.md`);\n\t\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\t\tif (status) {\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (currentSessionId && status.sessionId !== currentSessionId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Transcript view is only available for async runs owned by the current session.\" }],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncRunTranscript(status, asyncDir, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet nestedChildren: NestedRunSummary[] = [];\n\t\t\tlet nestedWarning: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst nestedRoute = findNestedRouteForRootId(status.runId);\n\t\t\t\tif (nestedRoute) reconcileNestedAsyncDescendants(nestedRoute, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tnestedChildren = projectNestedRegistryForRoot(status.runId)?.children ?? [];\n\t\t\t\tattachRootChildrenToSteps(status.runId, status.steps, nestedChildren);\n\t\t\t} catch (error) {\n\t\t\t\tnestedWarning = `Nested status unavailable: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t}\n\t\t\tconst outputPath = formatAsyncRunOutputPath({ asyncDir, outputFile: status.outputFile });\n\t\t\tconst progressLabel = formatAsyncRunProgressLabel({\n\t\t\t\tmode: status.mode,\n\t\t\t\tstate: status.state,\n\t\t\t\tcurrentStep: status.currentStep,\n\t\t\t\tchainStepCount: status.chainStepCount,\n\t\t\t\tparallelGroups: status.parallelGroups,\n\t\t\t\tsteps: (status.steps ?? []).map((step, index) => ({ index, agent: step.agent, status: step.status })),\n\t\t\t});\n\t\t\tconst started = new Date(status.startedAt).toISOString();\n\t\t\tconst updated = status.lastUpdate ? new Date(status.lastUpdate).toISOString() : \"n/a\";\n\t\t\tconst statusActivityText = status.state === \"running\" ? formatActivityLabel(status.lastActivityAt, status.activityState) : undefined;\n\t\t\tconst steeringText = formatSteeringSummary(status);\n\n\t\t\tconst lines = [\n\t\t\t\t`Run: ${status.runId}`,\n\t\t\t\t`State: ${status.state}`,\n\t\t\t\tstatus.error ? `Error: ${status.error}` : undefined,\n\t\t\t\tstatusActivityText ? `Activity: ${statusActivityText}` : undefined,\n\t\t\t\tsteeringText ? `Steering: ${steeringText}` : undefined,\n\t\t\t\t`Mode: ${status.mode}`,\n\t\t\t\t`Progress: ${progressLabel}`,\n\t\t\t\tstatus.pendingAppends ? `Pending appends: ${status.pendingAppends}` : undefined,\n\t\t\t\t`Started: ${started}`,\n\t\t\t\t`Updated: ${updated}`,\n\t\t\t\tstatus.turnBudget ? `Turn budget: ${status.turnBudget.turnCount}/${status.turnBudget.maxTurns}+${status.turnBudget.graceTurns} (${status.turnBudget.outcome})` : undefined,\n\t\t\t\t`Dir: ${asyncDir}`,\n\t\t\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\t\t\treconciliation.message ? `Diagnosis: ${reconciliation.message}` : undefined,\n\t\t\t\treconciliation.resultPath && fs.existsSync(reconciliation.resultPath) ? `Result: ${reconciliation.resultPath}` : undefined,\n\t\t\t].filter((line): line is string => Boolean(line));\n\t\t\tfor (const [index, step] of (status.steps ?? []).entries()) {\n\t\t\t\tconst stepActivityText = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\t\tconst modelText = modelThinking ? ` (${modelThinking})` : \"\";\n\t\t\t\tconst steeringText = formatSteeringSummary(step);\n\t\t\t\tconst steeringSuffix = steeringText ? `, steering: ${steeringText}` : \"\";\n\t\t\t\tconst errorText = step.error ? `, error: ${step.error}` : \"\";\n\t\t\t\tconst acceptanceText = step.acceptance?.status ? `, acceptance: ${step.acceptance.status}` : \"\";\n\t\t\t\tconst budgetText = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\t\tlines.push(`${stepLineLabel(status, index)}: ${phase}${display} ${step.status}${modelText}${stepActivityText ? `, ${stepActivityText}` : \"\"}${steeringSuffix}${acceptanceText}${budgetText}${errorText}`);\n\t\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 20 }));\n\t\t\t\tconst stepOutputPath = path.join(asyncDir, `output-${index}.log`);\n\t\t\t\tif (stepOutputPath !== outputPath && fs.existsSync(stepOutputPath)) lines.push(` Output: ${stepOutputPath}`);\n\t\t\t\tif (step.status === \"running\") {\n\t\t\t\t\tlines.push(` Intercom target: ${resolveSubagentIntercomTarget(status.runId, step.agent, index)} (if registered)`);\n\t\t\t\t\tlines.push(` Steer: subagent({ action: \"steer\", id: \"${status.runId}\", index: ${index}, message: \"...\" })`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst attached = new Set((status.steps ?? []).flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\t\tconst unattached = nestedChildren.filter((child) => !attached.has(child.id));\n\t\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \"\", commandHints: true, maxLines: 20 }));\n\t\t\tif (nestedWarning) lines.push(`Warning: ${nestedWarning}`);\n\t\t\tif (status.sessionFile) lines.push(`Session: ${status.sessionFile}`);\n\t\t\tif (status.state === \"running\") lines.push(`Steer running child: subagent({ action: \"steer\", id: \"${status.runId}\", message: \"...\" })`);\n\t\t\tif (status.state !== \"running\") {\n\t\t\t\tlines.push(formatResumeGuidance(status.runId, status.steps ?? [], status.sessionFile, { stopped: status.state === \"stopped\" || status.stopped === true }));\n\t\t\t}\n\t\t\tif (fs.existsSync(logPath)) lines.push(`Log: ${logPath}`);\n\t\t\tif (fs.existsSync(eventsPath)) lines.push(`Events: ${eventsPath}`);\n\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t}\n\t}\n\n\tif (resultPath) {\n\t\ttry {\n\t\t\tconst raw = fs.readFileSync(resultPath, \"utf-8\");\n\t\t\tconst data = JSON.parse(raw) as { id?: string; runId?: string; agent?: string; success?: boolean; summary?: string; output?: string; exitCode?: number; state?: string; sessionFile?: string; results?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }> };\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncResultTranscript(data, resultPath, { index: params.index, lines: params.lines }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst status = data.state === \"stopped\" ? \"stopped\" : data.success ? \"complete\" : data.state === \"paused\" || data.exitCode === 0 ? \"paused\" : \"failed\";\n\t\t\tconst runId = data.runId ?? data.id ?? resolvedId;\n\t\t\tconst lines = [`Run: ${runId}`, `State: ${status}`, `Result: ${resultPath}`];\n\t\t\tconst children = Array.isArray(data.results) ? data.results : data.agent ? [{ agent: data.agent, sessionFile: data.sessionFile }] : [];\n\t\t\tlines.push(formatResumeGuidance(runId, children, data.sessionFile, { stopped: status === \"stopped\" }));\n\t\t\tif (data.summary) lines.push(\"\", data.summary);\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Failed to read async result file: ${message}` }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: \"Status file not found.\" }],\n\t\tisError: true,\n\t\tdetails: { mode: \"single\", results: [] },\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run-status.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/run-status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMrE,OAAO,EAA4C,KAAK,OAAO,EAAwE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMzL,OAAO,EAAqF,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE9J,UAAU,eAAe;IACxB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAkKD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE,aAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,CAqPjH","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatAsyncRunList, formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns } from \"./async-status.ts\";\nimport { formatAsyncResultTranscript, formatAsyncRunTranscript, formatNestedRunTranscript, inspectSubagentFleet } from \"./fleet-view.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatModelThinking } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport { ASYNC_DIR, RESULTS_DIR, type AsyncStatus, type Details, type ForegroundResumeRun, type NestedRunSummary, type SteeringStatus, type SubagentState } from \"../../shared/types.ts\";\nimport { resolveSubagentIntercomTarget } from \"../../intercom/intercom-bridge.ts\";\nimport { resolveAsyncRunLocation } from \"./async-resume.ts\";\nimport { resolveSubagentRunId } from \"./run-id-resolver.ts\";\nimport { flatToLogicalStepIndex, normalizeParallelGroups } from \"./parallel-groups.ts\";\nimport { reconcileAsyncRun, reconcileNestedAsyncDescendants } from \"./stale-run-reconciler.ts\";\nimport { attachRootChildrenToSteps, findNestedRouteForRootId, projectNestedRegistryForRoot, type NestedRunResolutionScope } from \"../shared/nested-events.ts\";\n\ninterface RunStatusParams {\n\taction?: \"status\";\n\tid?: string;\n\trunId?: string;\n\tdir?: string;\n\tindex?: number;\n\tview?: \"fleet\" | \"transcript\";\n\tlines?: number;\n}\n\ninterface RunStatusDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tnested?: NestedRunResolutionScope;\n\tsessionRoots?: string[];\n}\n\nfunction hasExistingSessionFile(value: unknown): value is string {\n\treturn typeof value === \"string\" && fs.existsSync(value);\n}\n\nfunction formatResumeGuidance(runId: string | undefined, children: Array<{ agent?: unknown; sessionFile?: unknown }>, fallbackSessionFile?: unknown, options: { stopped?: boolean } = {}): string {\n\tif (options.stopped) return \"Resume: unavailable; stopped runs are not resumable. Start a new run instead.\";\n\tconst knownChildren = children\n\t\t.map((child, index) => ({ child, index }))\n\t\t.filter(({ child }) => typeof child.agent === \"string\");\n\tif (!runId || knownChildren.length === 0) return \"Resume: unavailable; no child session file was persisted.\";\n\tconst singleSessionFile = knownChildren[0]?.child.sessionFile ?? fallbackSessionFile;\n\tif (children.length === 1 && knownChildren.length === 1 && hasExistingSessionFile(singleSessionFile)) {\n\t\treturn `Revive: subagent({ action: \"resume\", id: \"${runId}\", message: \"...\" })`;\n\t}\n\tconst childWithSession = knownChildren.find(({ child }) => hasExistingSessionFile(child.sessionFile));\n\tif (childWithSession) {\n\t\treturn `Revive child: subagent({ action: \"resume\", id: \"${runId}\", index: ${childWithSession.index}, message: \"...\" })`;\n\t}\n\treturn \"Resume: unavailable; no child session file was persisted.\";\n}\n\nfunction stepLineLabel(status: AsyncStatus, index: number): string {\n\tconst steps = status.steps ?? [];\n\tif (status.mode === \"parallel\") return `Agent ${index + 1}/${steps.length || 1}`;\n\tif (status.mode === \"chain\") {\n\t\tconst chainStepCount = status.chainStepCount ?? (steps.length || 1);\n\t\tconst groups = normalizeParallelGroups(status.parallelGroups, steps.length, chainStepCount);\n\t\tconst group = groups.find((candidate) => index >= candidate.start && index < candidate.start + candidate.count);\n\t\tif (group) return `Step ${group.stepIndex + 1}/${chainStepCount} Agent ${index - group.start + 1}/${group.count}`;\n\t\treturn `Step ${flatToLogicalStepIndex(index, chainStepCount, groups) + 1}/${chainStepCount}`;\n\t}\n\treturn `Step ${index + 1}`;\n}\n\nfunction nestedRunDisplayName(run: NestedRunSummary): string {\n\tif (run.agent) return run.agent;\n\tif (run.agents?.length) return run.agents.join(\", \");\n\treturn run.id;\n}\n\nfunction formatSteeringSummary(input: { steering?: SteeringStatus }): string | undefined {\n\tconst steering = input.steering;\n\tif (!steering || steering.requested === 0) return undefined;\n\tconst lateAcknowledgments = steering.recent.reduce((count, request) => count + request.targets.filter((target) => target.lateDeliveredAt !== undefined).length, 0);\n\treturn `${steering.requested} requested, ${steering.scheduled} scheduled, ${steering.pending} pending, ${steering.delivered} delivered, ${steering.failed} failed, ${steering.recovered} recovered${lateAcknowledgments ? `, ${lateAcknowledgments} late acknowledged` : \"\"}`;\n}\n\nfunction rememberedForegroundChildOutput(child: ForegroundResumeRun[\"children\"][number]): string {\n\tconst outputPath = child.artifactPaths?.outputPath ?? child.savedOutputPath;\n\tif (outputPath && fs.existsSync(outputPath)) {\n\t\ttry {\n\t\t\tconst artifactOutput = fs.readFileSync(outputPath, \"utf-8\").trim();\n\t\t\tif (artifactOutput) return artifactOutput;\n\t\t} catch {\n\t\t\t// Fall back to the remembered snapshot below.\n\t\t}\n\t}\n\treturn child.finalOutput ?? \"\";\n}\n\nfunction formatRememberedForegroundStatus(run: ForegroundResumeRun): string {\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t\"State: remembered foreground\",\n\t\t`Mode: ${run.mode}`,\n\t\t`Updated: ${new Date(run.updatedAt).toISOString()}`,\n\t\t`Cwd: ${run.cwd}`,\n\t];\n\tfor (const child of run.children) {\n\t\tconst output = rememberedForegroundChildOutput(child).trim().split(/\\r?\\n/).find((line) => line.trim());\n\t\tconst parts = [\n\t\t\t`${child.index + 1}. ${child.agent} ${child.status}`,\n\t\t\tchild.exitCode !== undefined ? `exit ${child.exitCode}` : undefined,\n\t\t\tchild.detachedReason ? `detached: ${child.detachedReason}` : undefined,\n\t\t\tchild.acceptance ? `acceptance: ${child.acceptance.status}` : undefined,\n\t\t\tchild.error ? `error: ${child.error}` : undefined,\n\t\t\toutput ? `output: ${output.slice(0, 160)}` : undefined,\n\t\t].filter(Boolean);\n\t\tlines.push(parts.join(\", \"));\n\t\tif (child.sessionFile) lines.push(` Session: ${child.sessionFile}`);\n\t\tif (child.transcriptPath) lines.push(` Transcript: ${child.transcriptPath}`);\n\t\tif (child.artifactPaths?.outputPath) lines.push(` Output: ${child.artifactPaths.outputPath}`);\n\t\tif (child.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath) lines.push(` Saved output: ${child.savedOutputPath}`);\n\t\tif (child.outputSaveError) lines.push(` Output warning: ${child.outputSaveError}`);\n\t\tif (child.transcriptError) lines.push(` Transcript warning: ${child.transcriptError}`);\n\t}\n\tlines.push(\"\", `Status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\tif (run.children.length === 1) lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", view: \"transcript\" })`);\n\telse lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", index: 0, view: \"transcript\" })`);\n\tconst detached = run.children.some((child) => child.status === \"detached\");\n\tconst resumable = run.children.find((child) => hasExistingSessionFile(child.sessionFile));\n\tif (detached) {\n\t\tlines.push(`Recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t} else if (resumable) {\n\t\tlines.push(run.children.length === 1\n\t\t\t? `Revive: subagent({ action: \"resume\", id: \"${run.runId}\", message: \"...\" })`\n\t\t\t: `Revive child: subagent({ action: \"resume\", id: \"${run.runId}\", index: ${resumable.index}, message: \"...\" })`);\n\t} else {\n\t\tlines.push(\"Resume: unavailable; no child session file was persisted.\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatRememberedForegroundTranscript(run: ForegroundResumeRun, options: { index?: number; lines?: number }): string {\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && run.children.length === 1) index = 0;\n\tif (index === undefined) return `Transcript view requires index for foreground run '${run.runId}' with ${run.children.length} children.`;\n\tif (index < 0 || index >= run.children.length) throw new Error(`Transcript index ${index} is out of range for ${run.children.length} foreground children.`);\n\tconst child = run.children[index]!;\n\tconst lineLimit = Math.max(1, Math.min(options.lines ?? 80, 1000));\n\tconst outputLines = rememberedForegroundChildOutput(child).split(/\\r?\\n/).filter((line) => line.trim()).slice(-lineLimit);\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t`State: ${child.status}`,\n\t\t`Child: ${index} (${child.agent})`,\n\t\tchild.sessionFile ? `Session: ${child.sessionFile}` : undefined,\n\t\tchild.transcriptPath ? `Transcript: ${child.transcriptPath}` : undefined,\n\t\tchild.artifactPaths?.outputPath ? `Output: ${child.artifactPaths.outputPath}` : undefined,\n\t\tchild.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath ? `Saved output: ${child.savedOutputPath}` : undefined,\n\t\tchild.outputSaveError ? `Output warning: ${child.outputSaveError}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tlines.push(\"Result transcript tail:\");\n\tif (outputLines.length === 0) lines.push(\" (no recovered final output available yet)\");\n\telse for (const line of outputLines) lines.push(` ${line}`);\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatNestedExactStatus(rootRunId: string, run: NestedRunSummary): string {\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`Root: ${rootRunId}`,\n\t\t`Parent: ${run.parentRunId}${run.parentStepIndex !== undefined ? ` step ${run.parentStepIndex + 1}` : \"\"}`,\n\t\t`State: ${run.state}`,\n\t\trun.activityState || run.lastActivityAt ? `Activity: ${formatActivityLabel(run.lastActivityAt, run.activityState)}` : undefined,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\t`Agent: ${nestedRunDisplayName(run)}`,\n\t\trun.currentStep !== undefined ? `Progress: step ${run.currentStep + 1}/${run.chainStepCount ?? run.steps?.length ?? 1}` : undefined,\n\t\trun.turnBudget ? `Turn budget: ${run.turnBudget.turnCount}/${run.turnBudget.maxTurns}+${run.turnBudget.graceTurns} (${run.turnBudget.outcome})` : undefined,\n\t\trun.asyncDir ? `Dir: ${run.asyncDir}` : undefined,\n\t\trun.sessionFile ? `Session: ${run.sessionFile}` : undefined,\n\t\trun.error ? `Error: ${run.error}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tif (run.path.length) {\n\t\tlines.push(`Path: ${run.path.map((part) => `${part.runId}${part.stepIndex !== undefined ? `:${part.stepIndex + 1}` : \"\"}${part.agent ? `:${part.agent}` : \"\"}`).join(\" > \")} > ${run.id}`);\n\t}\n\tif (run.steps?.length) {\n\t\tlines.push(\"Steps:\");\n\t\tfor (const [index, step] of run.steps.entries()) {\n\t\t\tconst activity = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\tconst budget = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\tlines.push(` ${index + 1}. ${step.agent} ${step.status}${activity ? `, ${activity}` : \"\"}${budget}${step.error ? `, error: ${step.error}` : \"\"}`);\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true }));\n\t\t}\n\t}\n\tlines.push(...formatNestedRunStatusLines(run.children, { indent: \" \", commandHints: true }));\n\tlines.push(\"Commands:\", ` Status: subagent({ action: \"status\", id: \"${run.id}\" })`, ` Interrupt: subagent({ action: \"interrupt\", id: \"${run.id}\" })`, ` Resume: subagent({ action: \"resume\", id: \"${run.id}\", message: \"...\" })`, ` Steer: subagent({ action: \"steer\", id: \"${run.id}\", message: \"...\" })`, ` Root status: subagent({ action: \"status\", id: \"${rootRunId}\" })`);\n\treturn lines.join(\"\\n\");\n}\n\nexport function inspectSubagentStatus(params: RunStatusParams, deps: RunStatusDeps = {}): AgentToolResult<Details> {\n\tconst asyncDirRoot = deps.asyncDirRoot ?? ASYNC_DIR;\n\tconst resultsDir = deps.resultsDir ?? RESULTS_DIR;\n\tconst currentSessionId = deps.state?.currentSessionId ?? undefined;\n\tif (params.view && params.view !== \"fleet\" && params.view !== \"transcript\") {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Unknown status view: ${params.view}. Valid: fleet, transcript.` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tif (params.view === \"fleet\") {\n\t\treturn inspectSubagentFleet(params, { asyncDirRoot, resultsDir, kill: deps.kill, now: deps.now, state: deps.state, childSafe: Boolean(deps.nested) });\n\t}\n\tif (!params.id && !params.runId && !params.dir) {\n\t\tif (deps.nested) {\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent status requires an id when no foreground run is active.\" }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst runs = listAsyncRuns(asyncDirRoot, { states: [\"queued\", \"running\"], sessionId: currentSessionId, resultsDir, kill: deps.kill, now: deps.now });\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (runs.length === 1) return inspectSubagentStatus({ ...params, id: runs[0]!.id }, deps);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: runs.length === 0 ? \"No active async run transcript is available.\" : `Transcript view requires an id when ${runs.length} active async runs exist. Use subagent({ action: \"status\", view: \"fleet\" }) to choose one.` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: formatAsyncRunList(runs) }],\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\tlet location;\n\ttry {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!params.dir && requestedId) {\n\t\t\tconst resolved = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\tif (resolved?.kind === \"foreground\") {\n\t\t\t\tconst run = deps.state?.foregroundRuns?.get(resolved.id);\n\t\t\t\tif (run) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: params.view === \"transcript\" ? formatRememberedForegroundTranscript(run, { index: params.index, lines: params.lines }) : formatRememberedForegroundStatus(run) }],\n\t\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t\t};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (resolved?.kind === \"nested\") {\n\t\t\t\treconcileNestedAsyncDescendants(resolved.match.route, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tconst refreshed = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\t\tconst nested = refreshed?.kind === \"nested\" ? refreshed : resolved;\n\t\t\t\tif (params.view === \"transcript\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedRunTranscript(nested.match.run, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedExactStatus(nested.match.rootRunId, nested.match.run) }], details: { mode: \"single\", results: [] } };\n\t\t\t}\n\t\t\tif (resolved?.kind === \"async\") location = resolved.location;\n\t\t\telse location = { asyncDir: null, resultPath: null, resolvedId: requestedId };\n\t\t} else {\n\t\t\tlocation = resolveAsyncRunLocation(params, asyncDirRoot, resultsDir);\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tconst { asyncDir, resultPath, resolvedId } = location;\n\n\tif (!asyncDir && !resultPath) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Async run not found. Provide id or dir.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\n\tif (asyncDir) {\n\t\tlet reconciliation;\n\t\ttry {\n\t\t\treconciliation = reconcileAsyncRun(asyncDir, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\tconst status = reconciliation.status;\n\t\tconst effectiveRunId = status?.runId ?? resolvedId ?? \"unknown\";\n\t\tconst logPath = path.join(asyncDir, `subagent-log-${effectiveRunId}.md`);\n\t\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\t\tif (status) {\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (currentSessionId && status.sessionId !== currentSessionId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Transcript view is only available for async runs owned by the current session.\" }],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncRunTranscript(status, asyncDir, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet nestedChildren: NestedRunSummary[] = [];\n\t\t\tlet nestedWarning: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst nestedRoute = findNestedRouteForRootId(status.runId);\n\t\t\t\tif (nestedRoute) reconcileNestedAsyncDescendants(nestedRoute, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tnestedChildren = projectNestedRegistryForRoot(status.runId)?.children ?? [];\n\t\t\t\tattachRootChildrenToSteps(status.runId, status.steps, nestedChildren);\n\t\t\t} catch (error) {\n\t\t\t\tnestedWarning = `Nested status unavailable: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t}\n\t\t\tconst outputPath = formatAsyncRunOutputPath({ asyncDir, outputFile: status.outputFile });\n\t\t\tconst progressLabel = formatAsyncRunProgressLabel({\n\t\t\t\tmode: status.mode,\n\t\t\t\tstate: status.state,\n\t\t\t\tcurrentStep: status.currentStep,\n\t\t\t\tchainStepCount: status.chainStepCount,\n\t\t\t\tparallelGroups: status.parallelGroups,\n\t\t\t\tsteps: (status.steps ?? []).map((step, index) => ({ index, agent: step.agent, status: step.status })),\n\t\t\t});\n\t\t\tconst started = new Date(status.startedAt).toISOString();\n\t\t\tconst updated = status.lastUpdate ? new Date(status.lastUpdate).toISOString() : \"n/a\";\n\t\t\tconst statusActivityText = status.state === \"running\" ? formatActivityLabel(status.lastActivityAt, status.activityState) : undefined;\n\t\t\tconst steeringText = formatSteeringSummary(status);\n\n\t\t\tconst lines = [\n\t\t\t\t`Run: ${status.runId}`,\n\t\t\t\t`State: ${status.state}`,\n\t\t\t\tstatus.error ? `Error: ${status.error}` : undefined,\n\t\t\t\tstatusActivityText ? `Activity: ${statusActivityText}` : undefined,\n\t\t\t\tsteeringText ? `Steering: ${steeringText}` : undefined,\n\t\t\t\t`Mode: ${status.mode}`,\n\t\t\t\t`Progress: ${progressLabel}`,\n\t\t\t\tstatus.pendingAppends ? `Pending appends: ${status.pendingAppends}` : undefined,\n\t\t\t\t`Started: ${started}`,\n\t\t\t\t`Updated: ${updated}`,\n\t\t\t\tstatus.turnBudget ? `Turn budget: ${status.turnBudget.turnCount}/${status.turnBudget.maxTurns}+${status.turnBudget.graceTurns} (${status.turnBudget.outcome})` : undefined,\n\t\t\t\t`Dir: ${asyncDir}`,\n\t\t\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\t\t\treconciliation.message ? `Diagnosis: ${reconciliation.message}` : undefined,\n\t\t\t\treconciliation.resultPath && fs.existsSync(reconciliation.resultPath) ? `Result: ${reconciliation.resultPath}` : undefined,\n\t\t\t].filter((line): line is string => Boolean(line));\n\t\t\tfor (const [index, step] of (status.steps ?? []).entries()) {\n\t\t\t\tconst stepActivityText = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\t\tconst modelText = modelThinking ? ` (${modelThinking})` : \"\";\n\t\t\t\tconst steeringText = formatSteeringSummary(step);\n\t\t\t\tconst steeringSuffix = steeringText ? `, steering: ${steeringText}` : \"\";\n\t\t\t\tconst errorText = step.error ? `, error: ${step.error}` : \"\";\n\t\t\t\tconst acceptanceText = step.acceptance?.status ? `, acceptance: ${step.acceptance.status}` : \"\";\n\t\t\t\tconst budgetText = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\t\tlines.push(`${stepLineLabel(status, index)}: ${phase}${display} ${step.status}${modelText}${stepActivityText ? `, ${stepActivityText}` : \"\"}${steeringSuffix}${acceptanceText}${budgetText}${errorText}`);\n\t\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 20 }));\n\t\t\t\tconst stepOutputPath = path.join(asyncDir, `output-${index}.log`);\n\t\t\t\tif (stepOutputPath !== outputPath && fs.existsSync(stepOutputPath)) lines.push(` Output: ${stepOutputPath}`);\n\t\t\t\tif (step.status === \"running\") {\n\t\t\t\t\tlines.push(` Intercom target: ${resolveSubagentIntercomTarget(status.runId, step.childId ?? step.agent, index)} (if registered)`);\n\t\t\t\t\tlines.push(` Steer: subagent({ action: \"steer\", id: \"${status.runId}\", index: ${index}, message: \"...\" })`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst attached = new Set((status.steps ?? []).flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\t\tconst unattached = nestedChildren.filter((child) => !attached.has(child.id));\n\t\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \"\", commandHints: true, maxLines: 20 }));\n\t\t\tif (nestedWarning) lines.push(`Warning: ${nestedWarning}`);\n\t\t\tif (status.sessionFile) lines.push(`Session: ${status.sessionFile}`);\n\t\t\tif (status.state === \"running\") lines.push(`Steer running child: subagent({ action: \"steer\", id: \"${status.runId}\", message: \"...\" })`);\n\t\t\tif (status.state !== \"running\") {\n\t\t\t\tlines.push(formatResumeGuidance(status.runId, status.steps ?? [], status.sessionFile, { stopped: status.state === \"stopped\" || status.stopped === true }));\n\t\t\t}\n\t\t\tif (fs.existsSync(logPath)) lines.push(`Log: ${logPath}`);\n\t\t\tif (fs.existsSync(eventsPath)) lines.push(`Events: ${eventsPath}`);\n\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t}\n\t}\n\n\tif (resultPath) {\n\t\ttry {\n\t\t\tconst raw = fs.readFileSync(resultPath, \"utf-8\");\n\t\t\tconst data = JSON.parse(raw) as { id?: string; runId?: string; agent?: string; success?: boolean; summary?: string; output?: string; exitCode?: number; state?: string; sessionFile?: string; results?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }> };\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncResultTranscript(data, resultPath, { index: params.index, lines: params.lines }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst status = data.state === \"stopped\" ? \"stopped\" : data.success ? \"complete\" : data.state === \"paused\" || data.exitCode === 0 ? \"paused\" : \"failed\";\n\t\t\tconst runId = data.runId ?? data.id ?? resolvedId;\n\t\t\tconst lines = [`Run: ${runId}`, `State: ${status}`, `Result: ${resultPath}`];\n\t\t\tconst children = Array.isArray(data.results) ? data.results : data.agent ? [{ agent: data.agent, sessionFile: data.sessionFile }] : [];\n\t\t\tlines.push(formatResumeGuidance(runId, children, data.sessionFile, { stopped: status === \"stopped\" }));\n\t\t\tif (data.summary) lines.push(\"\", data.summary);\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Failed to read async result file: ${message}` }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: \"Status file not found.\" }],\n\t\tisError: true,\n\t\tdetails: { mode: \"single\", results: [] },\n\t};\n}\n"]}
|
|
@@ -390,7 +390,7 @@ export function inspectSubagentStatus(params, deps = {}) {
|
|
|
390
390
|
if (stepOutputPath !== outputPath && fs.existsSync(stepOutputPath))
|
|
391
391
|
lines.push(` Output: ${stepOutputPath}`);
|
|
392
392
|
if (step.status === "running") {
|
|
393
|
-
lines.push(` Intercom target: ${resolveSubagentIntercomTarget(status.runId, step.agent, index)} (if registered)`);
|
|
393
|
+
lines.push(` Intercom target: ${resolveSubagentIntercomTarget(status.runId, step.childId ?? step.agent, index)} (if registered)`);
|
|
394
394
|
lines.push(` Steer: subagent({ action: "steer", id: "${status.runId}", index: ${index}, message: "..." })`);
|
|
395
395
|
}
|
|
396
396
|
}
|