@ashx-j/lunr 0.2.13 → 0.2.15
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 +27 -1
- package/README.md +10 -7
- package/dist/builtin-extensions/ashxj-tui.d.ts +16 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +48 -24
- 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 +2 -0
- package/dist/builtin-extensions/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-settings-tools.d.ts +4 -0
- package/dist/builtin-extensions/lunr-settings-tools.d.ts.map +1 -0
- package/dist/builtin-extensions/lunr-settings-tools.js +120 -0
- package/dist/builtin-extensions/lunr-settings-tools.js.map +1 -0
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +3 -3
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/api/delegation.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/api/delegation.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +29 -23
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +5 -11
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +12 -15
- 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 +14 -27
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
- 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 +9 -4
- 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-job-tracker.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js +2 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
- 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 +16 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +7 -4
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.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 +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.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 +3 -0
- 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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +3 -35
- 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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +7 -8
- 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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +2 -0
- 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 +1 -0
- 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 +20 -21
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +12 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +42 -17
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +2 -0
- 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/shared/child-spec.d.ts +2 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +23 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +3 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +15 -4
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +14 -3
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts +3 -3
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js +7 -6
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +1 -1
- 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 +6 -4
- 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 +1 -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 +15 -10
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +5 -4
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +86 -52
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/amazon-bedrock.json +1 -1
- package/dist/catalog/providers/anthropic.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/fireworks.json +1 -1
- package/dist/catalog/providers/github-copilot.json +1 -1
- package/dist/catalog/providers/google-vertex.json +1 -1
- package/dist/catalog/providers/google.json +1 -1
- package/dist/catalog/providers/groq.json +1 -1
- package/dist/catalog/providers/huggingface.json +1 -1
- package/dist/catalog/providers/nvidia.json +1 -1
- package/dist/catalog/providers/openai-codex.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/vercel-ai-gateway.json +1 -1
- package/dist/catalog/publication.json +131 -3
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -0
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -27
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +5 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +7 -2
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +18 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/catalog-cache-scope.d.ts +3 -0
- package/dist/core/catalog-cache-scope.d.ts.map +1 -0
- package/dist/core/catalog-cache-scope.js +12 -0
- package/dist/core/catalog-cache-scope.js.map +1 -0
- package/dist/core/catalog-merge.d.ts +2 -0
- package/dist/core/catalog-merge.d.ts.map +1 -1
- package/dist/core/catalog-merge.js +29 -2
- package/dist/core/catalog-merge.js.map +1 -1
- package/dist/core/catalog-refresh-polling.d.ts +8 -0
- package/dist/core/catalog-refresh-polling.d.ts.map +1 -0
- package/dist/core/catalog-refresh-polling.js +30 -0
- package/dist/core/catalog-refresh-polling.js.map +1 -0
- package/dist/core/codex-catalog.d.ts +3 -0
- package/dist/core/codex-catalog.d.ts.map +1 -0
- package/dist/core/codex-catalog.js +15 -0
- package/dist/core/codex-catalog.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +2 -0
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js +6 -2
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/customize.d.ts +2 -4
- package/dist/core/customize.d.ts.map +1 -1
- package/dist/core/customize.js +2 -8
- package/dist/core/customize.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +3 -4
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +54 -82
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/injected-prompt.d.ts +3 -3
- package/dist/core/injected-prompt.d.ts.map +1 -1
- package/dist/core/injected-prompt.js +2 -7
- package/dist/core/injected-prompt.js.map +1 -1
- package/dist/core/large-subagent-launch.d.ts +13 -0
- package/dist/core/large-subagent-launch.d.ts.map +1 -0
- package/dist/core/large-subagent-launch.js +54 -0
- package/dist/core/large-subagent-launch.js.map +1 -0
- package/dist/core/live-catalog.d.ts +5 -2
- package/dist/core/live-catalog.d.ts.map +1 -1
- package/dist/core/live-catalog.js +108 -27
- package/dist/core/live-catalog.js.map +1 -1
- package/dist/core/model-instructions.d.ts +24 -0
- package/dist/core/model-instructions.d.ts.map +1 -0
- package/dist/core/model-instructions.js +123 -0
- package/dist/core/model-instructions.js.map +1 -0
- package/dist/core/model-runtime.d.ts +8 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +64 -12
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/official-catalog.d.ts +4 -0
- package/dist/core/official-catalog.d.ts.map +1 -1
- package/dist/core/official-catalog.js +86 -21
- package/dist/core/official-catalog.js.map +1 -1
- package/dist/core/permissions.d.ts +10 -11
- package/dist/core/permissions.d.ts.map +1 -1
- package/dist/core/permissions.js +107 -40
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/plan-mode.d.ts.map +1 -1
- package/dist/core/plan-mode.js +10 -1
- package/dist/core/plan-mode.js.map +1 -1
- package/dist/core/resource-loader.d.ts +3 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +13 -4
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-bridges.d.ts +4 -0
- package/dist/core/runtime-bridges.d.ts.map +1 -0
- package/dist/core/runtime-bridges.js +16 -0
- package/dist/core/runtime-bridges.js.map +1 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -6
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +32 -17
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-tools-bridge.d.ts +35 -0
- package/dist/core/settings-tools-bridge.d.ts.map +1 -0
- package/dist/core/settings-tools-bridge.js +56 -0
- package/dist/core/settings-tools-bridge.js.map +1 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/gateway/agent-bridge.d.ts.map +1 -1
- package/dist/gateway/agent-bridge.js +3 -2
- package/dist/gateway/agent-bridge.js.map +1 -1
- package/dist/gateway/approval.d.ts.map +1 -1
- package/dist/gateway/approval.js +4 -3
- package/dist/gateway/approval.js.map +1 -1
- package/dist/gateway/commands.d.ts +1 -1
- package/dist/gateway/commands.d.ts.map +1 -1
- package/dist/gateway/commands.js +1 -18
- package/dist/gateway/commands.js.map +1 -1
- package/dist/gateway/cron.d.ts.map +1 -1
- package/dist/gateway/cron.js +3 -2
- package/dist/gateway/cron.js.map +1 -1
- package/dist/gateway/router.d.ts +1 -1
- package/dist/gateway/router.d.ts.map +1 -1
- package/dist/gateway/router.js +1 -1
- package/dist/gateway/router.js.map +1 -1
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +108 -58
- 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 +18 -4
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +1 -3
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +4 -32
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +2 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/injected-prompt-message.d.ts +1 -1
- package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/injected-prompt-message.js +1 -1
- package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +4 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/plan-message.d.ts +1 -3
- package/dist/modes/interactive/components/plan-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/plan-message.js +1 -16
- package/dist/modes/interactive/components/plan-message.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +8 -5
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +71 -31
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +1 -3
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +2 -19
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +13 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +163 -177
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/moon.json +0 -1
- package/dist/modes/interactive/theme/theme-schema.json +3 -3
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +95 -90
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/startup/interactive-view.d.ts +55 -0
- package/dist/startup/interactive-view.d.ts.map +1 -0
- package/dist/startup/interactive-view.js +332 -0
- package/dist/startup/interactive-view.js.map +1 -0
- package/dist/startup/launch-routing.d.ts +8 -0
- package/dist/startup/launch-routing.d.ts.map +1 -0
- package/dist/startup/launch-routing.js +29 -0
- package/dist/startup/launch-routing.js.map +1 -0
- package/dist/startup/startup-milestones.d.ts +4 -0
- package/dist/startup/startup-milestones.d.ts.map +1 -0
- package/dist/startup/startup-milestones.js +14 -0
- package/dist/startup/startup-milestones.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +10 -4
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/docs/features.md +9 -9
- package/docs/interactive-startup.md +58 -0
- package/docs/keybindings.md +1 -1
- package/docs/model-catalog.md +29 -0
- package/docs/quickstart.md +3 -2
- package/docs/settings.md +4 -4
- package/docs/terminal-setup.md +2 -2
- package/docs/termux.md +1 -1
- package/docs/usage.md +4 -3
- package/docs/windows.md +1 -1
- 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/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/README.md +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +16 -16
- package/dist/core/swarm.d.ts +0 -54
- package/dist/core/swarm.d.ts.map +0 -1
- package/dist/core/swarm.js +0 -119
- package/dist/core/swarm.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":"AAAA,cAAc;AACd,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,mCAAmC,EAAE,sCAAsC,EAAyE,MAAM,uBAAuB,CAAC;AACnN,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,CAAC,MAAM,6BAA6B,GAAmB,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAwCnH,MAAM,UAAU,8BAA8B,CAAC,KAM9C,EAAkE;IAClE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,OAAO,6DAA6D,EAAE,CAAC;IAClH,CAAC;IACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;IACnI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC7E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,OAAO,yDAAyD,EAAE,CAAC;IAC9G,CAAC;IACD,IAAI,CAAC;QACJ,uBAAuB,CAAC;YACvB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;YAC/B,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,6BAA6B;YACrC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,cAAc;SACtB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;YAClC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,iCAAiC,OAAO,KAAK,OAAO,EAAE,EAAE,CAAC;IACvF,CAAC;AAAA,CACD;AAsBD,SAAS,eAAe,CAAC,KAAc,EAAU;IAChD,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAA,CAC9D;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,MAAc,EAA2B;IAC9E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,+BAA+B,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAgC,CAAC;AAAA,CACxC;AAED,SAAS,sBAAsB,CAAC,KAA8B,EAAE,KAAa,EAAE,MAAc,EAAE,YAAY,GAAG,KAAK,EAAsB;IACxI,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,MAAM,YAAY,oBAAoB,CAAC,CAAC;IAChI,OAAO,UAAU,CAAC;AAAA,CAClB;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,UAAkB,EAAmB;IAChF,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;IAClC,IAAI,OAAmC,CAAC;IACxC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,8BAA8B,CAAC,CAAC;QAC1H,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,UAAU,YAAY,KAAK,GAAG,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;YAC5F,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,KAAK,eAAe,CAAC,CAAC;YAC9G,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,KAAK,kBAAkB,CAAC,CAAC;YACvH,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,KAAK,YAAY,CAAC,CAAC;YACrG,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,cAAc,KAAK,8BAA8B,CAAC,CAAC;YACtK,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAAA,CACrH,CAAC,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,+BAA+B,CAAC,CAAC;IACpJ,OAAO;QACN,EAAE,EAAE,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;QAClD,KAAK,EAAE,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;QACxD,KAAK,EAAE,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;QACxD,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;QACtD,KAAK,EAAE,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;QACxD,GAAG,EAAE,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;QACpD,WAAW,EAAE,sBAAsB,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC;QACpE,KAAK,EAAE,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;QACxD,QAAQ,EAAE,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;QAC9D,GAAG,CAAC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/B,CAAC;AAAA,CACF;AAED,SAAS,cAAc,CAAC,UAAkB,EAAmB;IAC5D,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACJ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,qCAAqC,UAAU,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE;YAC9F,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SACjD,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,sCAAsC,UAAU,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC/F,KAAK,EAAE,KAAK;aACZ,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AAAA,CACD;AAED,SAAS,WAAW,CAAC,KAAyB,EAAE,KAAqB,EAAsB;IAC1F,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IACxE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iDAAiD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,MAAc,EAAE,KAAa,EAAQ;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO;IAC1F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mBAAmB,QAAQ,GAAG,CAAC,CAAC;AAAA,CACxD;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,MAAc,EAAE,MAAM,GAAG,EAAE,EAAY;IAC3E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;SACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;SAClF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SAC/D,IAAI,EAAE,CAAC;AAAA,CACT;AAED,SAAS,eAAe,CAAC,UAAkB,EAAE,KAAa,EAAiB;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;IAC1D,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAC9D,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAAA,CACrD;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAc,EAAE,YAAoB,EAAE,UAAkB,EAAqD;IACtJ,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;YAC/B,GAAG,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC;YACzC,GAAG,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC;SACnD,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACX,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1C,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAC7D,OAAO;YACN,EAAE;YACF,QAAQ,EAAE;gBACT,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBACnD,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC3C,UAAU,EAAE,EAAE;aACd;SACD,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACH;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAyB,EAAE,YAAoB,EAAE,UAAkB,EAAoB;IAC9H,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvF,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,WAAW,IAAI,WAAW,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,+BAA+B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzG,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IACtF,CAAC;IACD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAE9D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzD,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,qBAAqB,CAAC,CAAC;IACnE,MAAM,gBAAgB,GAAG,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAClE,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACvD,OAAO;YACN,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;YAC/D,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EAAE,WAAW;SACvB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,yBAAyB,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC/E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAChG,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAW,cAAc,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAClJ,CAAC;IACD,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC;AAAA,CAC7B;AAED,SAAS,WAAW,CAAC,MAAuB,EAAwB;IACnE,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACpL,OAAO,MAAM,CAAC,KAAK,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AAAA,CAC9C;AAED,SAAS,uBAAuB,CAAC,MAA0B,EAAE,MAAc,EAAQ;IAClF,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,4BAA4B,CAAC,CAAC;IACnH,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,gCAAgC,CAAC,CAAC;IAC7J,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,0BAA0B,CAAC,CAAC;IAC3I,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,kCAAkC,CAAC,CAAC;IACnK,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,4BAA4B,CAAC,CAAC;QAC/G,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,YAAY,KAAK,sBAAsB,CAAC,CAAC;YACtJ,MAAM,UAAU,GAAG,IAA+B,CAAC;YACnD,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,YAAY,KAAK,2BAA2B,CAAC,CAAC;YACvI,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,YAAY,KAAK,uCAAuC,CAAC,CAAC;YACzN,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS;gBAAE,wBAAwB,CAAC,UAAU,CAAC,WAAW,EAAE,iBAAiB,MAAM,WAAW,KAAK,eAAe,CAAC,CAAC;YACnJ,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,IAAI,UAAU,CAAC,WAAW,KAAK,MAAM,IAAI,UAAU,CAAC,WAAW,KAAK,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,YAAY,KAAK,0CAA0C,CAAC,CAAC;YACrO,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,YAAY,KAAK,iCAAiC,CAAC,CAAC;YAC3L,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,YAAY,KAAK,2BAA2B,CAAC,CAAC;YACzK,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,YAAY,KAAK,8BAA8B,CAAC,CAAC;QAAA,CAClL,CAAC,CAAC;IACJ,CAAC;AAAA,CACD;AAED,MAAM,UAAU,2BAA2B,CAAC,QAA4B,EAA0C;IACjH,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,SAAS,CAAC;IACrD,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACJ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8CAA8C,cAAc,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACpK,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,wBAAwB,CAAC,CAAC;IAC/J,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;QAC7B,SAAS,EAAE,0BAA0B,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ;QAC3J,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB;QACxE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,OAAO;KACzI,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,qBAAqB,KAAK,IAAI,CAAC,CAAC;IACpI,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,uBAAuB,CAAC,CAAC;IACvH,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,wBAAwB,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACnI,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAU,CAAC;IACzG,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAE,MAAM,CAAC,KAAK,CAAY,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,MAAM,KAAK,8BAA8B,CAAC,CAAC;IAC5L,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,2CAA2C,CAAC,CAAC;IAC1L,wBAAwB,CAAC,MAAM,CAAC,WAAW,EAAE,8BAA8B,cAAc,eAAe,CAAC,CAAC;IAC1G,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,2BAA2B,CAAC,CAAC;IAC1K,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,CAAU,EAAE,CAAC;QACxC,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,MAAM,KAAK,qBAAqB,CAAC,CAAC;IAC/I,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAK,MAAM,CAAC,gBAA2B,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,qDAAqD,CAAC,CAAC;IACtN,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAU,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,MAAM,KAAK,kCAAkC,CAAC,CAAC;IAC1O,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,CAAU,EAAE,CAAC;QAC/G,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAE,MAAM,CAAC,KAAK,CAAY,CAAC,IAAI,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,MAAM,KAAK,8BAA8B,CAAC,CAAC;IAC7N,CAAC;IACD,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAK,MAAM,CAAC,kBAA6B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,qDAAqD,CAAC,CAAC;IACvQ,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;QACzG,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;QAC1G,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,iCAAiC,CAAC,CAAC;QACzM,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;YACjD,MAAM,IAAI,GAAI,MAAM,CAAC,SAAqC,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAK,IAAe,GAAG,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,gBAAgB,KAAK,8BAA8B,CAAC,CAAC;QACvM,CAAC;IACF,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,sCAAsC,CAAC,CAAC;QAC7N,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAyC,CAAC;QAClE,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,CAAU,EAAE,CAAC;YAC9G,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,qBAAqB,KAAK,qBAAqB,CAAC,CAAC;QAChK,CAAC;QACD,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,iBAAiB,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,wDAAwD,CAAC,CAAC;QAC/N,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAK,QAAQ,CAAC,WAAsB,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,+DAA+D,CAAC,CAAC;IAC3N,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,qCAAqC,CAAC,CAAC;QACzN,MAAM,OAAO,GAAG,MAAM,CAAC,aAAwC,CAAC;QAChE,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,6CAA6C,CAAC,CAAC;QAC7J,KAAK,MAAM,KAAK,IAAI,CAAC,uBAAuB,EAAE,qBAAqB,EAAE,mCAAmC,CAAU,EAAE,CAAC;YACpH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAK,OAAO,CAAC,KAAK,CAAY,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,oBAAoB,KAAK,8BAA8B,CAAC,CAAC;QACvM,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAU,EAAE,CAAC;YACpF,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAK,OAAO,CAAC,KAAK,CAAY,GAAG,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,oBAAoB,KAAK,8BAA8B,CAAC,CAAC;QACzO,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,KAAK,iBAAiB,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,uCAAuC,CAAC,CAAC;QACpP,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,6CAA6C,CAAC,CAAC;IACtQ,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAC;QAC3F,IAAI,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClH,CAAC;IACD,OAAO,MAA+C,CAAC;AAAA,CACvD;AAED,SAAS,yBAAyB,CAAC,KAAa,EAAE,WAAmB,EAAU;IAC9E,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,yCAAyC,WAAW,EAAE,CAAC,CAAC;IACvI,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,kCAAkC,WAAW,EAAE,CAAC,CAAC;IAClH,OAAO,QAAQ,CAAC;AAAA,CAChB;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAyB,EAAE,IAAI,GAAoB,EAAE,EAAE,OAAO,GAAuB,EAAE,EAAqB;IACpJ,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC;IAClD,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC;IAC9D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC3E,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ;QACvC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACtF,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,MAAM,GAAG,cAAc,EAAE,MAAM,IAAI,IAAI,CAAC;IAC9C,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACjH,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,EAAE,IAAI,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxJ,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,WAAW,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,yDAAyD,CAAC,CAAC;IAClK,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,IAAI,CAAC,CAAC;IAC/E,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,+DAA+D,CAAC,CAAC;IAE7H,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;IACpC,IAAI,cAAc,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,6BAA6B,CAAC,CAAC;IACzI,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEpF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,IAAI,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,SAAS,oBAAoB,cAAc,mBAAmB,CAAC,CAAC;YACnK,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;YACjD,IAAI,YAAY,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gBACxC,OAAO;oBACN,IAAI,EAAE,MAAM;oBACZ,KAAK;oBACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,SAAS;oBACxC,KAAK;oBACL,KAAK,EAAE,YAAY,CAAC,KAAK;oBACzB,OAAO,EAAE,YAAY,CAAC,OAAO;oBAC7B,WAAW,EAAE,YAAY,CAAC,WAAW;oBACrC,WAAW,EAAE,YAAY,CAAC,WAAW;oBACrC,KAAK,EAAE,cAAc;oBACrB,cAAc,EAAE,6BAA6B,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC;oBAChH,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG;oBAC/B,WAAW,EAAE,YAAY,CAAC,WAAW,IAAI,MAAM,EAAE,WAAW,IAAI,MAAM,EAAE,WAAW;oBACnF,KAAK,EAAE,YAAY,CAAC,KAAK;oBACzB,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrD,CAAC;YACH,CAAC;YACD,IAAI,YAAY,EAAE,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,WAAW,cAAc,sFAAsF,CAAC,CAAC;YAC5L,IAAI,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,WAAW,cAAc,OAAO,YAAY,CAAC,MAAM,6BAA6B,CAAC,CAAC;QAC1L,CAAC;aAAM,CAAC;YACP,MAAM,OAAO,GAAG,WAAW;iBACzB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;iBACvC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,OAAO,CAAC,MAAM,iDAAiD,CAAC,CAAC;YAC9G,CAAC;YACD,OAAO;gBACN,IAAI,EAAE,MAAM;gBACZ,KAAK;gBACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,SAAS;gBACxC,KAAK;gBACL,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK;gBAC1B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;gBAC9B,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW;gBACtC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW;gBACtC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,cAAc,EAAE,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;gBAClH,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG;gBAC/B,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,EAAE,WAAW,IAAI,MAAM,EAAE,WAAW;gBACpF,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK;gBAC1B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;gBAChC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrD,CAAC;QACH,CAAC;IACF,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,SAAS,yCAAyC,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,6BAA6B,CAAC,CAAC;IAChG,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,SAAS,oBAAoB,KAAK,mBAAmB,CAAC,CAAC;IACxI,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,CAAC;IACtF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,KAAK,IAAI,CAAC,CAAC;IACzF,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,KAAK,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,oCAAoC,kBAAkB,CAAC,KAAK,WAAW,KAAK,IAAI,CAAC,CAAC;IACnL,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW;WAC/C,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW;WAC/B,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/E,IAAI,CAAC,WAAW,IAAI,kBAAkB;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,WAAW,KAAK,yDAAyD,CAAC,CAAC;IACtJ,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1H,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,QAAQ,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtI,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAE3E,OAAO;QACN,IAAI,EAAE,QAAQ;QACd,KAAK;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,SAAS;QACxC,KAAK;QACL,KAAK;QACL,OAAO;QACP,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW;QAC/E,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW;QAC/E,KAAK;QACL,cAAc,EAAE,6BAA6B,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,KAAK,CAAC;QAC7E,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG;QAC/B,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC;AAAA,CACF;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAyB,EAAE,OAAe,EAAU;IACzF,OAAO;QACN,oDAAoD;QACpD,EAAE;QACF,iBAAiB,MAAM,CAAC,KAAK,EAAE;QAC/B,mBAAmB,MAAM,CAAC,KAAK,EAAE;QACjC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,0BAA0B,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;QAC/E,EAAE;QACF,mJAAmJ;QACnJ,EAAE;QACF,YAAY;QACZ,OAAO;KACP,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CAClE","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
|
+
{"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\", \"tier\", \"modelSelection\", \"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 !== 4) throw new Error(`Invalid async recovery descriptor '${descriptorPath}': version must be 4.`);\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\tif (parsed.tier !== \"light\" && parsed.tier !== \"standard\" && parsed.tier !== \"heavy\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': tier must be light, standard, or heavy.`);\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.modelSelection !== undefined) {\n\t\tconst selection = parsed.modelSelection as { kind?: unknown; tier?: unknown };\n\t\tif (!selection || typeof selection !== \"object\") throw new Error(`Invalid async recovery descriptor '${descriptorPath}': modelSelection must be an object.`);\n\t\tif (selection.kind !== \"tier\") {\n\t\t\tthrow new Error(`Invalid async recovery descriptor '${descriptorPath}': modelSelection.kind is invalid.`);\n\t\t}\n\t\tif (selection.kind === \"tier\" && selection.tier !== \"light\" && selection.tier !== \"standard\" && selection.tier !== \"heavy\") {\n\t\t\tthrow new Error(`Invalid async recovery descriptor '${descriptorPath}': modelSelection.tier is invalid.`);\n\t\t}\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":"async-status.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/async-status.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { formatDuration, formatModelThinking, formatTokens, shortenPath } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel, formatParallelOutcome } from \"../../shared/status-format.ts\";\nimport { type ActivityState, type AsyncJobStep, type AsyncParallelGroupStatus, type AsyncStatus, type CostSummary, type NestedRunSummary, type SteeringStatus, type SubagentRunMode, type TokenUsage, type TurnBudgetState } from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\nimport { attachRootChildrenToSteps, buildNestedRouteIndex, type NestedRoute, projectNestedEvents } from \"../shared/nested-events.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { flatToLogicalStepIndex, normalizeParallelGroups } from \"./parallel-groups.ts\";\nimport { reconcileAsyncRun, reconcileNestedAsyncDescendants } from \"./stale-run-reconciler.ts\";\n\ninterface AsyncRunStepSummary {\n\tindex: number;\n\tagent: string;\n\tlabel?: string;\n\tphase?: string;\n\toutputName?: string;\n\tstructured?: boolean;\n\tstatus: AsyncJobStep[\"status\"];\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\trecentTools?: Array<{ tool: string; args: string; endMs: number }>;\n\trecentOutput?: string[];\n\tturnCount?: number;\n\ttoolCount?: number;\n\tsteering?: SteeringStatus;\n\tdurationMs?: number;\n\ttokens?: TokenUsage;\n\ttotalCost?: CostSummary;\n\tskills?: string[];\n\tmodel?: string;\n\tthinking?: string;\n\tattemptedModels?: string[];\n\terror?: string;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\tchildren?: NestedRunSummary[];\n}\n\nexport interface AsyncRunSummary {\n\tid: string;\n\tasyncDir: string;\n\tsessionId?: string;\n\tstate: \"queued\" | \"running\" | \"complete\" | \"failed\" | \"paused\" | \"stopped\";\n\terror?: string;\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\tsteering?: SteeringStatus;\n\tmode: SubagentRunMode;\n\tcwd?: string;\n\tstartedAt: number;\n\tlastUpdate?: number;\n\tendedAt?: number;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\tcurrentStep?: number;\n\tchainStepCount?: number;\n\tpendingAppends?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tsteps: AsyncRunStepSummary[];\n\tsessionDir?: string;\n\toutputFile?: string;\n\ttotalTokens?: TokenUsage;\n\ttotalCost?: CostSummary;\n\tsessionFile?: string;\n\tnestedChildren?: NestedRunSummary[];\n\tnestedWarnings?: string[];\n}\n\ninterface AsyncRunListOptions {\n\tstates?: Array<AsyncRunSummary[\"state\"]>;\n\tsessionId?: string;\n\tlimit?: number;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\treconcile?: boolean;\n}\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n\treturn typeof error === \"object\"\n\t\t&& error !== null\n\t\t&& \"code\" in error\n\t\t&& (error as NodeJS.ErrnoException).code === \"ENOENT\";\n}\n\nfunction isAsyncRunDir(root: string, entry: string): boolean {\n\tconst entryPath = path.join(root, entry);\n\ttry {\n\t\treturn fs.statSync(entryPath).isDirectory();\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return false;\n\t\tthrow new Error(`Failed to inspect async run path '${entryPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n}\n\nfunction outputFileMtime(outputFile: string | undefined): number | undefined {\n\tif (!outputFile) return undefined;\n\ttry {\n\t\treturn fs.statSync(outputFile).mtimeMs;\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return undefined;\n\t\tthrow new Error(`Failed to inspect async output file '${outputFile}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n}\n\nfunction deriveAsyncActivityState(asyncDir: string, status: AsyncStatus): { activityState?: ActivityState; lastActivityAt?: number } {\n\tif (status.state !== \"running\") return { activityState: status.activityState, lastActivityAt: status.lastActivityAt };\n\tconst outputPath = status.outputFile ? (path.isAbsolute(status.outputFile) ? status.outputFile : path.join(asyncDir, status.outputFile)) : undefined;\n\tconst currentStep = typeof status.currentStep === \"number\" ? status.steps?.[status.currentStep] : undefined;\n\treturn {\n\t\tactivityState: status.activityState,\n\t\tlastActivityAt: status.lastActivityAt ?? outputFileMtime(outputPath) ?? currentStep?.lastActivityAt ?? currentStep?.startedAt ?? status.startedAt,\n\t};\n}\n\nfunction statusToSummary(asyncDir: string, status: AsyncStatus & { cwd?: string }, nestedWarnings: string[] = [], nestedRoute?: NestedRoute): AsyncRunSummary {\n\tif (status.sessionId !== undefined && typeof status.sessionId !== \"string\") {\n\t\tthrow new Error(`Invalid async status '${path.join(asyncDir, \"status.json\")}': sessionId must be a string.`);\n\t}\n\tconst { activityState, lastActivityAt } = deriveAsyncActivityState(asyncDir, status);\n\tconst steps = status.steps ?? [];\n\tconst chainStepCount = status.chainStepCount ?? steps.length;\n\tconst parallelGroups = normalizeParallelGroups(status.parallelGroups, steps.length, chainStepCount);\n\tlet nestedChildren: NestedRunSummary[] = [];\n\tif (nestedWarnings.length === 0 && nestedRoute) {\n\t\ttry {\n\t\t\t// The route is resolved by the caller via buildNestedRouteIndex, so this\n\t\t\t// avoids a fresh scan of the nested-events directory per run.\n\t\t\tnestedChildren = projectNestedEvents(nestedRoute)?.children ?? [];\n\t\t} catch (error) {\n\t\t\tnestedWarnings.push(`Nested status unavailable: ${getErrorMessage(error)}`);\n\t\t}\n\t}\n\tconst summarizedSteps = steps.map((step, index) => {\n\t\tconst stepActivityState = step.activityState;\n\t\tconst stepLastActivityAt = step.lastActivityAt;\n\t\treturn {\n\t\t\tindex,\n\t\t\tagent: step.agent,\n\t\t\t...(step.label ? { label: step.label } : {}),\n\t\t\t...(step.phase ? { phase: step.phase } : {}),\n\t\t\t...(step.outputName ? { outputName: step.outputName } : {}),\n\t\t\t...(step.structured ? { structured: step.structured } : {}),\n\t\t\tstatus: step.status,\n\t\t\t...(stepActivityState ? { activityState: stepActivityState } : {}),\n\t\t\t...(stepLastActivityAt ? { lastActivityAt: stepLastActivityAt } : {}),\n\t\t\t...(step.currentTool ? { currentTool: step.currentTool } : {}),\n\t\t\t...(step.currentToolArgs ? { currentToolArgs: step.currentToolArgs } : {}),\n\t\t\t...(step.currentToolStartedAt ? { currentToolStartedAt: step.currentToolStartedAt } : {}),\n\t\t\t...(step.currentPath ? { currentPath: step.currentPath } : {}),\n\t\t\t...(step.recentTools ? { recentTools: step.recentTools.map((tool) => ({ ...tool })) } : {}),\n\t\t\t...(step.recentOutput ? { recentOutput: [...step.recentOutput] } : {}),\n\t\t\t...(step.turnCount !== undefined ? { turnCount: step.turnCount } : {}),\n\t\t\t...(step.toolCount !== undefined ? { toolCount: step.toolCount } : {}),\n\t\t\t...(step.steering ? { steering: step.steering } : {}),\n\t\t\t...(step.durationMs !== undefined ? { durationMs: step.durationMs } : {}),\n\t\t\t...(step.tokens ? { tokens: step.tokens } : {}),\n\t\t\t...(step.totalCost ? { totalCost: step.totalCost } : {}),\n\t\t\t...(step.skills ? { skills: step.skills } : {}),\n\t\t\t...(step.model ? { model: step.model } : {}),\n\t\t\t...(step.thinking ? { thinking: step.thinking } : {}),\n\t\t\t...(step.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),\n\t\t\t...(step.error ? { error: step.error } : {}),\n\t\t\t...(step.timedOut !== undefined ? { timedOut: step.timedOut } : {}),\n\t\t\t...(step.stopped !== undefined ? { stopped: step.stopped } : {}),\n\t\t\t...(step.turnBudget ? { turnBudget: step.turnBudget } : {}),\n\t\t\t...(step.turnBudgetExceeded !== undefined ? { turnBudgetExceeded: step.turnBudgetExceeded } : {}),\n\t\t\t...(step.wrapUpRequested !== undefined ? { wrapUpRequested: step.wrapUpRequested } : {}),\n\t\t\t...(step.children?.length ? { children: step.children } : {}),\n\t\t};\n\t});\n\tattachRootChildrenToSteps(status.runId || path.basename(asyncDir), summarizedSteps, nestedChildren);\n\treturn {\n\t\tid: status.runId || path.basename(asyncDir),\n\t\tasyncDir,\n\t\t...(status.sessionId ? { sessionId: status.sessionId } : {}),\n\t\tstate: status.state,\n\t\t...(status.error ? { error: status.error } : {}),\n\t\tactivityState,\n\t\tlastActivityAt,\n\t\tcurrentTool: status.currentTool,\n\t\tcurrentToolStartedAt: status.currentToolStartedAt,\n\t\tcurrentPath: status.currentPath,\n\t\tturnCount: status.turnCount,\n\t\ttoolCount: status.toolCount,\n\t\tsteering: status.steering,\n\t\tmode: status.mode,\n\t\tcwd: status.cwd,\n\t\tstartedAt: status.startedAt,\n\t\tlastUpdate: status.lastUpdate,\n\t\tendedAt: status.endedAt,\n\t\t...(status.timeoutMs !== undefined ? { timeoutMs: status.timeoutMs } : {}),\n\t\t...(status.deadlineAt !== undefined ? { deadlineAt: status.deadlineAt } : {}),\n\t\t...(status.timedOut !== undefined ? { timedOut: status.timedOut } : {}),\n\t\t...(status.stopped !== undefined ? { stopped: status.stopped } : {}),\n\t\t...(status.turnBudget ? { turnBudget: status.turnBudget } : {}),\n\t\t...(status.turnBudgetExceeded !== undefined ? { turnBudgetExceeded: status.turnBudgetExceeded } : {}),\n\t\t...(status.wrapUpRequested !== undefined ? { wrapUpRequested: status.wrapUpRequested } : {}),\n\t\tcurrentStep: status.currentStep,\n\t\t...(status.chainStepCount !== undefined ? { chainStepCount: status.chainStepCount } : {}),\n\t\t...(status.pendingAppends !== undefined ? { pendingAppends: status.pendingAppends } : {}),\n\t\t...(parallelGroups.length ? { parallelGroups } : {}),\n\t\tsteps: summarizedSteps,\n\t\t...(nestedChildren.length ? { nestedChildren } : {}),\n\t\t...(nestedWarnings.length ? { nestedWarnings } : {}),\n\t\t...(status.sessionDir ? { sessionDir: status.sessionDir } : {}),\n\t\t...(status.outputFile ? { outputFile: status.outputFile } : {}),\n\t\t...(status.totalTokens ? { totalTokens: status.totalTokens } : {}),\n\t\t...(status.totalCost ? { totalCost: status.totalCost } : {}),\n\t\t...(status.sessionFile ? { sessionFile: status.sessionFile } : {}),\n\t};\n}\n\nexport function summarizeAsyncStatus(asyncDir: string, status: AsyncStatus & { cwd?: string }): AsyncRunSummary {\n\treturn statusToSummary(asyncDir, status);\n}\n\nfunction sortRuns(runs: AsyncRunSummary[]): AsyncRunSummary[] {\n\tconst rank = (state: AsyncRunSummary[\"state\"]): number => {\n\t\tswitch (state) {\n\t\t\tcase \"running\": return 0;\n\t\t\tcase \"queued\": return 1;\n\t\t\tcase \"failed\": return 2;\n\t\t\tcase \"stopped\": return 2;\n\t\t\tcase \"paused\": return 2;\n\t\t\tcase \"complete\": return 3;\n\t\t}\n\t};\n\treturn [...runs].sort((a, b) => {\n\t\tconst byState = rank(a.state) - rank(b.state);\n\t\tif (byState !== 0) return byState;\n\t\tconst aTime = a.lastUpdate ?? a.endedAt ?? a.startedAt;\n\t\tconst bTime = b.lastUpdate ?? b.endedAt ?? b.startedAt;\n\t\treturn bTime - aTime;\n\t});\n}\n\nexport function listAsyncRuns(asyncDirRoot: string, options: AsyncRunListOptions = {}): AsyncRunSummary[] {\n\tlet entries: string[];\n\ttry {\n\t\tentries = fs.readdirSync(asyncDirRoot).filter((entry) => isAsyncRunDir(asyncDirRoot, entry));\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return [];\n\t\tthrow new Error(`Failed to list async runs in '${asyncDirRoot}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\n\tconst allowedStates = options.states ? new Set(options.states) : undefined;\n\tconst runs: AsyncRunSummary[] = [];\n\t// Route resolution for every run shares a single index built from the\n\t// nested-events directory, so the per-run lookup is O(1) instead of scanning\n\t// the directory once per run. The index is built lazily on first use, so\n\t// load-time restoration (which only wants queued/running runs) skips it\n\t// entirely when no active runs match.\n\tlet nestedRouteIndex: Map<string, NestedRoute> | undefined;\n\tconst resolveNestedRoute = (rootRunId: string): NestedRoute | undefined => {\n\t\tif (!nestedRouteIndex) nestedRouteIndex = buildNestedRouteIndex();\n\t\treturn nestedRouteIndex.get(rootRunId);\n\t};\n\tfor (const entry of entries) {\n\t\tconst asyncDir = path.join(asyncDirRoot, entry);\n\t\tconst reconciliation = options.reconcile === false\n\t\t\t? undefined\n\t\t\t: reconcileAsyncRun(asyncDir, { resultsDir: options.resultsDir, kill: options.kill, now: options.now });\n\t\tconst status = (reconciliation?.status ?? readStatus(asyncDir)) as (AsyncStatus & { cwd?: string }) | null;\n\t\tif (!status) continue;\n\t\t// Filter before the nested-route lookup: the lookup builds an index over\n\t\t// the nested-events directory, so deferring it for filtered-out runs keeps\n\t\t// restoration at load from scanning that directory when no active runs\n\t\t// match.\n\t\tif (allowedStates && !allowedStates.has(status.state)) continue;\n\t\tif (options.sessionId && status.sessionId !== options.sessionId) continue;\n\t\tconst nestedWarnings: string[] = [];\n\t\tlet nestedRoute: NestedRoute | undefined;\n\t\tif (options.reconcile !== false) {\n\t\t\ttry {\n\t\t\t\tnestedRoute = resolveNestedRoute(status.runId || path.basename(asyncDir));\n\t\t\t\tif (nestedRoute) reconcileNestedAsyncDescendants(nestedRoute, { resultsDir: options.resultsDir, kill: options.kill, now: options.now });\n\t\t\t} catch (error) {\n\t\t\t\tnestedWarnings.push(`Nested status unavailable: ${getErrorMessage(error)}`);\n\t\t\t}\n\t\t}\n\t\tconst summary = statusToSummary(asyncDir, status, nestedWarnings, nestedRoute);\n\t\truns.push(summary);\n\t}\n\n\tconst sorted = sortRuns(runs);\n\treturn options.limit !== undefined ? sorted.slice(0, options.limit) : sorted;\n}\n\nfunction formatActivityFacts(input: { activityState?: ActivityState; lastActivityAt?: number; currentTool?: string; currentToolStartedAt?: number; currentPath?: string; turnCount?: number; toolCount?: number; steering?: SteeringStatus; turnBudget?: TurnBudgetState; turnBudgetExceeded?: boolean; wrapUpRequested?: boolean }): string | undefined {\n\tconst facts: string[] = [];\n\tif (input.currentTool && input.currentToolStartedAt !== undefined) facts.push(`tool ${input.currentTool} ${formatDuration(Math.max(0, Date.now() - input.currentToolStartedAt))}`);\n\telse if (input.currentTool) facts.push(`tool ${input.currentTool}`);\n\tif (input.currentPath) facts.push(shortenPath(input.currentPath));\n\tif (input.turnCount !== undefined) facts.push(`${input.turnCount} turns`);\n\tif (input.turnBudgetExceeded && input.turnBudget) facts.push(`turn budget exceeded ${input.turnBudget.turnCount}/${input.turnBudget.maxTurns}+${input.turnBudget.graceTurns}`);\n\telse if (input.wrapUpRequested && input.turnBudget) facts.push(`wrap-up requested ${input.turnBudget.turnCount}/${input.turnBudget.maxTurns}`);\n\telse if (input.turnBudget) facts.push(`turn budget ${input.turnBudget.turnCount}/${input.turnBudget.maxTurns}+${input.turnBudget.graceTurns}`);\n\tif (input.toolCount !== undefined) facts.push(`${input.toolCount} tools`);\n\tif (input.steering) facts.push(`steering ${input.steering.scheduled} scheduled, ${input.steering.pending} pending, ${input.steering.delivered} delivered, ${input.steering.failed} failed, ${input.steering.recovered} recovered`);\n\tconst activity = formatActivityLabel(input.lastActivityAt, input.activityState);\n\treturn activity || facts.length ? [activity, ...facts].filter(Boolean).join(\" | \") : undefined;\n}\n\nfunction formatStepLine(step: AsyncRunStepSummary): string {\n\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\tconst parts = [`${step.index + 1}. ${phase}${display}`, step.status];\n\tconst activity = formatActivityFacts(step);\n\tif (activity) parts.push(activity);\n\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\tif (modelThinking) parts.push(modelThinking);\n\tif (step.durationMs !== undefined) parts.push(formatDuration(step.durationMs));\n\tif (step.tokens) parts.push(`${formatTokens(step.tokens.total)} tok`);\n\treturn parts.join(\" | \");\n}\n\nexport function formatAsyncRunOutputPath(run: Pick<AsyncRunSummary, \"asyncDir\" | \"outputFile\">): string | undefined {\n\tif (!run.outputFile) return undefined;\n\treturn path.isAbsolute(run.outputFile) ? run.outputFile : path.join(run.asyncDir, run.outputFile);\n}\n\nexport function formatAsyncRunProgressLabel(run: Pick<AsyncRunSummary, \"mode\" | \"state\" | \"currentStep\" | \"chainStepCount\" | \"parallelGroups\" | \"steps\">): string {\n\tconst stepCount = run.steps.length || 1;\n\tconst chainStepCount = run.chainStepCount ?? stepCount;\n\tconst groups = normalizeParallelGroups(run.parallelGroups, run.steps.length, chainStepCount);\n\tconst activeGroup = run.currentStep !== undefined\n\t\t? groups.find((group) => run.currentStep! >= group.start && run.currentStep! < group.start + group.count)\n\t\t: undefined;\n\tif (activeGroup) {\n\t\tconst groupSteps = run.steps.slice(activeGroup.start, activeGroup.start + activeGroup.count);\n\t\tconst groupLabel = formatParallelOutcome(groupSteps, activeGroup.count, { showRunning: run.state === \"running\" });\n\t\tif (run.mode === \"parallel\") return groupLabel;\n\t\treturn `step ${activeGroup.stepIndex + 1}/${chainStepCount} · parallel group: ${groupLabel}`;\n\t}\n\tif (run.mode === \"parallel\") return formatParallelOutcome(run.steps, stepCount, { showRunning: run.state === \"running\" });\n\tif (run.mode === \"chain\" && run.currentStep !== undefined && groups.length > 0) {\n\t\tconst logicalStep = flatToLogicalStepIndex(run.currentStep, chainStepCount, groups);\n\t\treturn `step ${logicalStep + 1}/${chainStepCount}`;\n\t}\n\treturn run.currentStep !== undefined ? `step ${run.currentStep + 1}/${stepCount}` : `steps ${stepCount}`;\n}\n\nfunction formatRunHeader(run: AsyncRunSummary): string {\n\tconst stepLabel = formatAsyncRunProgressLabel(run);\n\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\tconst activity = formatActivityFacts(run);\n\tconst pending = run.pendingAppends ? ` | ${run.pendingAppends} pending append${run.pendingAppends === 1 ? \"\" : \"s\"}` : \"\";\n\treturn `${run.id} | ${run.state}${activity ? ` | ${activity}` : \"\"} | ${run.mode} | ${stepLabel}${pending} | ${cwd}`;\n}\n\nexport function formatAsyncRunList(runs: AsyncRunSummary[], heading = \"Active async runs\"): string {\n\tif (runs.length === 0) return `No ${heading.toLowerCase()}.`;\n\n\tconst lines = [`${heading}: ${runs.length}`, \"\"];\n\tfor (const run of runs) {\n\t\tlines.push(`- ${formatRunHeader(run)}`);\n\t\tfor (const step of run.steps) {\n\t\t\tlines.push(` ${formatStepLine(step)}`);\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", maxLines: 12 }));\n\t\t}\n\t\tconst attached = new Set(run.steps.flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\tconst unattached = run.nestedChildren?.filter((child) => !attached.has(child.id)) ?? [];\n\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \" \", maxLines: 12 }));\n\t\tif (run.error) lines.push(` Error: ${run.error}`);\n\t\tfor (const warning of run.nestedWarnings ?? []) lines.push(` Warning: ${warning}`);\n\t\tconst outputPath = formatAsyncRunOutputPath(run);\n\t\tif (outputPath) lines.push(` output: ${shortenPath(outputPath)}`);\n\t\tif (run.sessionFile) lines.push(` session: ${shortenPath(run.sessionFile)}`);\n\t\tlines.push(\"\");\n\t}\n\treturn lines.join(\"\\n\").trimEnd();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"async-status.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/async-status.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,wBAAwB,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO1P,UAAU,mBAAmB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,uBAAuB,EAAE,cAAc,CAAC;IAChE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC5C,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,mBAAmB;IAC5B,MAAM,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,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,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAkJD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAE9G;AAsBD,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,eAAe,EAAE,CAoDxG;AAiCD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,YAAY,CAAC,GAAG,MAAM,GAAG,SAAS,CAGlH;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,OAAO,CAAC,GAAG,MAAM,CAmBhK;AAUD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,OAAO,SAAsB,GAAG,MAAM,CAqBjG","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { formatDuration, formatModelSelection, formatTokens, shortenPath } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel, formatParallelOutcome } from \"../../shared/status-format.ts\";\nimport { type ActivityState, type AsyncJobStep, type AsyncParallelGroupStatus, type AsyncStatus, type CostSummary, type NestedRunSummary, type SteeringStatus, type SubagentRunMode, type TokenUsage, type TurnBudgetState } from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\nimport { attachRootChildrenToSteps, buildNestedRouteIndex, type NestedRoute, projectNestedEvents } from \"../shared/nested-events.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { flatToLogicalStepIndex, normalizeParallelGroups } from \"./parallel-groups.ts\";\nimport { reconcileAsyncRun, reconcileNestedAsyncDescendants } from \"./stale-run-reconciler.ts\";\n\ninterface AsyncRunStepSummary {\n\tindex: number;\n\tagent: string;\n\tlabel?: string;\n\tphase?: string;\n\toutputName?: string;\n\tstructured?: boolean;\n\tstatus: AsyncJobStep[\"status\"];\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\trecentTools?: Array<{ tool: string; args: string; endMs: number }>;\n\trecentOutput?: string[];\n\tturnCount?: number;\n\ttoolCount?: number;\n\tsteering?: SteeringStatus;\n\tdurationMs?: number;\n\ttokens?: TokenUsage;\n\ttotalCost?: CostSummary;\n\tskills?: string[];\n\tmodel?: string;\n\tthinking?: string;\n\tmodelSelection?: import(\"../../shared/types.ts\").ModelSelection;\n\tattemptedModels?: string[];\n\terror?: string;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\tchildren?: NestedRunSummary[];\n}\n\nexport interface AsyncRunSummary {\n\tid: string;\n\tasyncDir: string;\n\tsessionId?: string;\n\tstate: \"queued\" | \"running\" | \"complete\" | \"failed\" | \"paused\" | \"stopped\";\n\terror?: string;\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\tsteering?: SteeringStatus;\n\tmode: SubagentRunMode;\n\tcwd?: string;\n\tstartedAt: number;\n\tlastUpdate?: number;\n\tendedAt?: number;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\tcurrentStep?: number;\n\tchainStepCount?: number;\n\tpendingAppends?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tsteps: AsyncRunStepSummary[];\n\tsessionDir?: string;\n\toutputFile?: string;\n\ttotalTokens?: TokenUsage;\n\ttotalCost?: CostSummary;\n\tsessionFile?: string;\n\tnestedChildren?: NestedRunSummary[];\n\tnestedWarnings?: string[];\n}\n\ninterface AsyncRunListOptions {\n\tstates?: Array<AsyncRunSummary[\"state\"]>;\n\tsessionId?: string;\n\tlimit?: number;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\treconcile?: boolean;\n}\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n\treturn typeof error === \"object\"\n\t\t&& error !== null\n\t\t&& \"code\" in error\n\t\t&& (error as NodeJS.ErrnoException).code === \"ENOENT\";\n}\n\nfunction isAsyncRunDir(root: string, entry: string): boolean {\n\tconst entryPath = path.join(root, entry);\n\ttry {\n\t\treturn fs.statSync(entryPath).isDirectory();\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return false;\n\t\tthrow new Error(`Failed to inspect async run path '${entryPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n}\n\nfunction outputFileMtime(outputFile: string | undefined): number | undefined {\n\tif (!outputFile) return undefined;\n\ttry {\n\t\treturn fs.statSync(outputFile).mtimeMs;\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return undefined;\n\t\tthrow new Error(`Failed to inspect async output file '${outputFile}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n}\n\nfunction deriveAsyncActivityState(asyncDir: string, status: AsyncStatus): { activityState?: ActivityState; lastActivityAt?: number } {\n\tif (status.state !== \"running\") return { activityState: status.activityState, lastActivityAt: status.lastActivityAt };\n\tconst outputPath = status.outputFile ? (path.isAbsolute(status.outputFile) ? status.outputFile : path.join(asyncDir, status.outputFile)) : undefined;\n\tconst currentStep = typeof status.currentStep === \"number\" ? status.steps?.[status.currentStep] : undefined;\n\treturn {\n\t\tactivityState: status.activityState,\n\t\tlastActivityAt: status.lastActivityAt ?? outputFileMtime(outputPath) ?? currentStep?.lastActivityAt ?? currentStep?.startedAt ?? status.startedAt,\n\t};\n}\n\nfunction statusToSummary(asyncDir: string, status: AsyncStatus & { cwd?: string }, nestedWarnings: string[] = [], nestedRoute?: NestedRoute): AsyncRunSummary {\n\tif (status.sessionId !== undefined && typeof status.sessionId !== \"string\") {\n\t\tthrow new Error(`Invalid async status '${path.join(asyncDir, \"status.json\")}': sessionId must be a string.`);\n\t}\n\tconst { activityState, lastActivityAt } = deriveAsyncActivityState(asyncDir, status);\n\tconst steps = status.steps ?? [];\n\tconst chainStepCount = status.chainStepCount ?? steps.length;\n\tconst parallelGroups = normalizeParallelGroups(status.parallelGroups, steps.length, chainStepCount);\n\tlet nestedChildren: NestedRunSummary[] = [];\n\tif (nestedWarnings.length === 0 && nestedRoute) {\n\t\ttry {\n\t\t\t// The route is resolved by the caller via buildNestedRouteIndex, so this\n\t\t\t// avoids a fresh scan of the nested-events directory per run.\n\t\t\tnestedChildren = projectNestedEvents(nestedRoute)?.children ?? [];\n\t\t} catch (error) {\n\t\t\tnestedWarnings.push(`Nested status unavailable: ${getErrorMessage(error)}`);\n\t\t}\n\t}\n\tconst summarizedSteps = steps.map((step, index) => {\n\t\tconst stepActivityState = step.activityState;\n\t\tconst stepLastActivityAt = step.lastActivityAt;\n\t\treturn {\n\t\t\tindex,\n\t\t\tagent: step.agent,\n\t\t\t...(step.label ? { label: step.label } : {}),\n\t\t\t...(step.phase ? { phase: step.phase } : {}),\n\t\t\t...(step.outputName ? { outputName: step.outputName } : {}),\n\t\t\t...(step.structured ? { structured: step.structured } : {}),\n\t\t\tstatus: step.status,\n\t\t\t...(stepActivityState ? { activityState: stepActivityState } : {}),\n\t\t\t...(stepLastActivityAt ? { lastActivityAt: stepLastActivityAt } : {}),\n\t\t\t...(step.currentTool ? { currentTool: step.currentTool } : {}),\n\t\t\t...(step.currentToolArgs ? { currentToolArgs: step.currentToolArgs } : {}),\n\t\t\t...(step.currentToolStartedAt ? { currentToolStartedAt: step.currentToolStartedAt } : {}),\n\t\t\t...(step.currentPath ? { currentPath: step.currentPath } : {}),\n\t\t\t...(step.recentTools ? { recentTools: step.recentTools.map((tool) => ({ ...tool })) } : {}),\n\t\t\t...(step.recentOutput ? { recentOutput: [...step.recentOutput] } : {}),\n\t\t\t...(step.turnCount !== undefined ? { turnCount: step.turnCount } : {}),\n\t\t\t...(step.toolCount !== undefined ? { toolCount: step.toolCount } : {}),\n\t\t\t...(step.steering ? { steering: step.steering } : {}),\n\t\t\t...(step.durationMs !== undefined ? { durationMs: step.durationMs } : {}),\n\t\t\t...(step.tokens ? { tokens: step.tokens } : {}),\n\t\t\t...(step.totalCost ? { totalCost: step.totalCost } : {}),\n\t\t\t...(step.skills ? { skills: step.skills } : {}),\n\t\t\t...(step.model ? { model: step.model } : {}),\n\t\t\t...(step.thinking ? { thinking: step.thinking } : {}),\n\t\t\t...(step.modelSelection ? { modelSelection: step.modelSelection } : {}),\n\t\t\t...(step.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),\n\t\t\t...(step.error ? { error: step.error } : {}),\n\t\t\t...(step.timedOut !== undefined ? { timedOut: step.timedOut } : {}),\n\t\t\t...(step.stopped !== undefined ? { stopped: step.stopped } : {}),\n\t\t\t...(step.turnBudget ? { turnBudget: step.turnBudget } : {}),\n\t\t\t...(step.turnBudgetExceeded !== undefined ? { turnBudgetExceeded: step.turnBudgetExceeded } : {}),\n\t\t\t...(step.wrapUpRequested !== undefined ? { wrapUpRequested: step.wrapUpRequested } : {}),\n\t\t\t...(step.children?.length ? { children: step.children } : {}),\n\t\t};\n\t});\n\tattachRootChildrenToSteps(status.runId || path.basename(asyncDir), summarizedSteps, nestedChildren);\n\treturn {\n\t\tid: status.runId || path.basename(asyncDir),\n\t\tasyncDir,\n\t\t...(status.sessionId ? { sessionId: status.sessionId } : {}),\n\t\tstate: status.state,\n\t\t...(status.error ? { error: status.error } : {}),\n\t\tactivityState,\n\t\tlastActivityAt,\n\t\tcurrentTool: status.currentTool,\n\t\tcurrentToolStartedAt: status.currentToolStartedAt,\n\t\tcurrentPath: status.currentPath,\n\t\tturnCount: status.turnCount,\n\t\ttoolCount: status.toolCount,\n\t\tsteering: status.steering,\n\t\tmode: status.mode,\n\t\tcwd: status.cwd,\n\t\tstartedAt: status.startedAt,\n\t\tlastUpdate: status.lastUpdate,\n\t\tendedAt: status.endedAt,\n\t\t...(status.timeoutMs !== undefined ? { timeoutMs: status.timeoutMs } : {}),\n\t\t...(status.deadlineAt !== undefined ? { deadlineAt: status.deadlineAt } : {}),\n\t\t...(status.timedOut !== undefined ? { timedOut: status.timedOut } : {}),\n\t\t...(status.stopped !== undefined ? { stopped: status.stopped } : {}),\n\t\t...(status.turnBudget ? { turnBudget: status.turnBudget } : {}),\n\t\t...(status.turnBudgetExceeded !== undefined ? { turnBudgetExceeded: status.turnBudgetExceeded } : {}),\n\t\t...(status.wrapUpRequested !== undefined ? { wrapUpRequested: status.wrapUpRequested } : {}),\n\t\tcurrentStep: status.currentStep,\n\t\t...(status.chainStepCount !== undefined ? { chainStepCount: status.chainStepCount } : {}),\n\t\t...(status.pendingAppends !== undefined ? { pendingAppends: status.pendingAppends } : {}),\n\t\t...(parallelGroups.length ? { parallelGroups } : {}),\n\t\tsteps: summarizedSteps,\n\t\t...(nestedChildren.length ? { nestedChildren } : {}),\n\t\t...(nestedWarnings.length ? { nestedWarnings } : {}),\n\t\t...(status.sessionDir ? { sessionDir: status.sessionDir } : {}),\n\t\t...(status.outputFile ? { outputFile: status.outputFile } : {}),\n\t\t...(status.totalTokens ? { totalTokens: status.totalTokens } : {}),\n\t\t...(status.totalCost ? { totalCost: status.totalCost } : {}),\n\t\t...(status.sessionFile ? { sessionFile: status.sessionFile } : {}),\n\t};\n}\n\nexport function summarizeAsyncStatus(asyncDir: string, status: AsyncStatus & { cwd?: string }): AsyncRunSummary {\n\treturn statusToSummary(asyncDir, status);\n}\n\nfunction sortRuns(runs: AsyncRunSummary[]): AsyncRunSummary[] {\n\tconst rank = (state: AsyncRunSummary[\"state\"]): number => {\n\t\tswitch (state) {\n\t\t\tcase \"running\": return 0;\n\t\t\tcase \"queued\": return 1;\n\t\t\tcase \"failed\": return 2;\n\t\t\tcase \"stopped\": return 2;\n\t\t\tcase \"paused\": return 2;\n\t\t\tcase \"complete\": return 3;\n\t\t}\n\t};\n\treturn [...runs].sort((a, b) => {\n\t\tconst byState = rank(a.state) - rank(b.state);\n\t\tif (byState !== 0) return byState;\n\t\tconst aTime = a.lastUpdate ?? a.endedAt ?? a.startedAt;\n\t\tconst bTime = b.lastUpdate ?? b.endedAt ?? b.startedAt;\n\t\treturn bTime - aTime;\n\t});\n}\n\nexport function listAsyncRuns(asyncDirRoot: string, options: AsyncRunListOptions = {}): AsyncRunSummary[] {\n\tlet entries: string[];\n\ttry {\n\t\tentries = fs.readdirSync(asyncDirRoot).filter((entry) => isAsyncRunDir(asyncDirRoot, entry));\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return [];\n\t\tthrow new Error(`Failed to list async runs in '${asyncDirRoot}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\n\tconst allowedStates = options.states ? new Set(options.states) : undefined;\n\tconst runs: AsyncRunSummary[] = [];\n\t// Route resolution for every run shares a single index built from the\n\t// nested-events directory, so the per-run lookup is O(1) instead of scanning\n\t// the directory once per run. The index is built lazily on first use, so\n\t// load-time restoration (which only wants queued/running runs) skips it\n\t// entirely when no active runs match.\n\tlet nestedRouteIndex: Map<string, NestedRoute> | undefined;\n\tconst resolveNestedRoute = (rootRunId: string): NestedRoute | undefined => {\n\t\tif (!nestedRouteIndex) nestedRouteIndex = buildNestedRouteIndex();\n\t\treturn nestedRouteIndex.get(rootRunId);\n\t};\n\tfor (const entry of entries) {\n\t\tconst asyncDir = path.join(asyncDirRoot, entry);\n\t\tconst reconciliation = options.reconcile === false\n\t\t\t? undefined\n\t\t\t: reconcileAsyncRun(asyncDir, { resultsDir: options.resultsDir, kill: options.kill, now: options.now });\n\t\tconst status = (reconciliation?.status ?? readStatus(asyncDir)) as (AsyncStatus & { cwd?: string }) | null;\n\t\tif (!status) continue;\n\t\t// Filter before the nested-route lookup: the lookup builds an index over\n\t\t// the nested-events directory, so deferring it for filtered-out runs keeps\n\t\t// restoration at load from scanning that directory when no active runs\n\t\t// match.\n\t\tif (allowedStates && !allowedStates.has(status.state)) continue;\n\t\tif (options.sessionId && status.sessionId !== options.sessionId) continue;\n\t\tconst nestedWarnings: string[] = [];\n\t\tlet nestedRoute: NestedRoute | undefined;\n\t\tif (options.reconcile !== false) {\n\t\t\ttry {\n\t\t\t\tnestedRoute = resolveNestedRoute(status.runId || path.basename(asyncDir));\n\t\t\t\tif (nestedRoute) reconcileNestedAsyncDescendants(nestedRoute, { resultsDir: options.resultsDir, kill: options.kill, now: options.now });\n\t\t\t} catch (error) {\n\t\t\t\tnestedWarnings.push(`Nested status unavailable: ${getErrorMessage(error)}`);\n\t\t\t}\n\t\t}\n\t\tconst summary = statusToSummary(asyncDir, status, nestedWarnings, nestedRoute);\n\t\truns.push(summary);\n\t}\n\n\tconst sorted = sortRuns(runs);\n\treturn options.limit !== undefined ? sorted.slice(0, options.limit) : sorted;\n}\n\nfunction formatActivityFacts(input: { activityState?: ActivityState; lastActivityAt?: number; currentTool?: string; currentToolStartedAt?: number; currentPath?: string; turnCount?: number; toolCount?: number; steering?: SteeringStatus; turnBudget?: TurnBudgetState; turnBudgetExceeded?: boolean; wrapUpRequested?: boolean }): string | undefined {\n\tconst facts: string[] = [];\n\tif (input.currentTool && input.currentToolStartedAt !== undefined) facts.push(`tool ${input.currentTool} ${formatDuration(Math.max(0, Date.now() - input.currentToolStartedAt))}`);\n\telse if (input.currentTool) facts.push(`tool ${input.currentTool}`);\n\tif (input.currentPath) facts.push(shortenPath(input.currentPath));\n\tif (input.turnCount !== undefined) facts.push(`${input.turnCount} turns`);\n\tif (input.turnBudgetExceeded && input.turnBudget) facts.push(`turn budget exceeded ${input.turnBudget.turnCount}/${input.turnBudget.maxTurns}+${input.turnBudget.graceTurns}`);\n\telse if (input.wrapUpRequested && input.turnBudget) facts.push(`wrap-up requested ${input.turnBudget.turnCount}/${input.turnBudget.maxTurns}`);\n\telse if (input.turnBudget) facts.push(`turn budget ${input.turnBudget.turnCount}/${input.turnBudget.maxTurns}+${input.turnBudget.graceTurns}`);\n\tif (input.toolCount !== undefined) facts.push(`${input.toolCount} tools`);\n\tif (input.steering) facts.push(`steering ${input.steering.scheduled} scheduled, ${input.steering.pending} pending, ${input.steering.delivered} delivered, ${input.steering.failed} failed, ${input.steering.recovered} recovered`);\n\tconst activity = formatActivityLabel(input.lastActivityAt, input.activityState);\n\treturn activity || facts.length ? [activity, ...facts].filter(Boolean).join(\" | \") : undefined;\n}\n\nfunction formatStepLine(step: AsyncRunStepSummary): string {\n\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\tconst parts = [`${step.index + 1}. ${phase}${display}`, step.status];\n\tconst activity = formatActivityFacts(step);\n\tif (activity) parts.push(activity);\n\tconst modelThinking = formatModelSelection(step.modelSelection, step.model, step.thinking);\n\tif (modelThinking) parts.push(modelThinking);\n\tif (step.durationMs !== undefined) {\n\t\tconst duration = step.durationMs + (step.status === \"running\" && step.lastActivityAt !== undefined ? Math.max(0, Date.now() - step.lastActivityAt) : 0);\n\t\tparts.push(`${step.status === \"running\" ? \"\" : \"ran for \"}${formatDuration(duration)}`);\n\t}\n\tif (step.tokens) parts.push(`${formatTokens(step.tokens.total)} tok`);\n\treturn parts.join(\" | \");\n}\n\nexport function formatAsyncRunOutputPath(run: Pick<AsyncRunSummary, \"asyncDir\" | \"outputFile\">): string | undefined {\n\tif (!run.outputFile) return undefined;\n\treturn path.isAbsolute(run.outputFile) ? run.outputFile : path.join(run.asyncDir, run.outputFile);\n}\n\nexport function formatAsyncRunProgressLabel(run: Pick<AsyncRunSummary, \"mode\" | \"state\" | \"currentStep\" | \"chainStepCount\" | \"parallelGroups\" | \"steps\">): string {\n\tconst stepCount = run.steps.length || 1;\n\tconst chainStepCount = run.chainStepCount ?? stepCount;\n\tconst groups = normalizeParallelGroups(run.parallelGroups, run.steps.length, chainStepCount);\n\tconst activeGroup = run.currentStep !== undefined\n\t\t? groups.find((group) => run.currentStep! >= group.start && run.currentStep! < group.start + group.count)\n\t\t: undefined;\n\tif (activeGroup) {\n\t\tconst groupSteps = run.steps.slice(activeGroup.start, activeGroup.start + activeGroup.count);\n\t\tconst groupLabel = formatParallelOutcome(groupSteps, activeGroup.count, { showRunning: run.state === \"running\" });\n\t\tif (run.mode === \"parallel\") return groupLabel;\n\t\treturn `step ${activeGroup.stepIndex + 1}/${chainStepCount} · parallel group: ${groupLabel}`;\n\t}\n\tif (run.mode === \"parallel\") return formatParallelOutcome(run.steps, stepCount, { showRunning: run.state === \"running\" });\n\tif (run.mode === \"chain\" && run.currentStep !== undefined && groups.length > 0) {\n\t\tconst logicalStep = flatToLogicalStepIndex(run.currentStep, chainStepCount, groups);\n\t\treturn `step ${logicalStep + 1}/${chainStepCount}`;\n\t}\n\treturn run.currentStep !== undefined ? `step ${run.currentStep + 1}/${stepCount}` : `steps ${stepCount}`;\n}\n\nfunction formatRunHeader(run: AsyncRunSummary): string {\n\tconst stepLabel = formatAsyncRunProgressLabel(run);\n\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\tconst activity = formatActivityFacts(run);\n\tconst pending = run.pendingAppends ? ` | ${run.pendingAppends} pending append${run.pendingAppends === 1 ? \"\" : \"s\"}` : \"\";\n\treturn `${run.id} | ${run.state}${activity ? ` | ${activity}` : \"\"} | ${run.mode} | ${stepLabel}${pending} | ${cwd}`;\n}\n\nexport function formatAsyncRunList(runs: AsyncRunSummary[], heading = \"Active async runs\"): string {\n\tif (runs.length === 0) return `No ${heading.toLowerCase()}.`;\n\n\tconst lines = [`${heading}: ${runs.length}`, \"\"];\n\tfor (const run of runs) {\n\t\tlines.push(`- ${formatRunHeader(run)}`);\n\t\tfor (const step of run.steps) {\n\t\t\tlines.push(` ${formatStepLine(step)}`);\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", maxLines: 12 }));\n\t\t}\n\t\tconst attached = new Set(run.steps.flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\tconst unattached = run.nestedChildren?.filter((child) => !attached.has(child.id)) ?? [];\n\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \" \", maxLines: 12 }));\n\t\tif (run.error) lines.push(` Error: ${run.error}`);\n\t\tfor (const warning of run.nestedWarnings ?? []) lines.push(` Warning: ${warning}`);\n\t\tconst outputPath = formatAsyncRunOutputPath(run);\n\t\tif (outputPath) lines.push(` output: ${shortenPath(outputPath)}`);\n\t\tif (run.sessionFile) lines.push(` session: ${shortenPath(run.sessionFile)}`);\n\t\tlines.push(\"\");\n\t}\n\treturn lines.join(\"\\n\").trimEnd();\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import * as path from "node:path";
|
|
4
|
-
import { formatDuration,
|
|
4
|
+
import { formatDuration, formatModelSelection, formatTokens, shortenPath } from "../../shared/formatters.js";
|
|
5
5
|
import { formatActivityLabel, formatParallelOutcome } from "../../shared/status-format.js";
|
|
6
6
|
import { readStatus } from "../../shared/utils.js";
|
|
7
7
|
import { attachRootChildrenToSteps, buildNestedRouteIndex, projectNestedEvents } from "../shared/nested-events.js";
|
|
@@ -101,6 +101,7 @@ function statusToSummary(asyncDir, status, nestedWarnings = [], nestedRoute) {
|
|
|
101
101
|
...(step.skills ? { skills: step.skills } : {}),
|
|
102
102
|
...(step.model ? { model: step.model } : {}),
|
|
103
103
|
...(step.thinking ? { thinking: step.thinking } : {}),
|
|
104
|
+
...(step.modelSelection ? { modelSelection: step.modelSelection } : {}),
|
|
104
105
|
...(step.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),
|
|
105
106
|
...(step.error ? { error: step.error } : {}),
|
|
106
107
|
...(step.timedOut !== undefined ? { timedOut: step.timedOut } : {}),
|
|
@@ -264,11 +265,13 @@ function formatStepLine(step) {
|
|
|
264
265
|
const activity = formatActivityFacts(step);
|
|
265
266
|
if (activity)
|
|
266
267
|
parts.push(activity);
|
|
267
|
-
const modelThinking =
|
|
268
|
+
const modelThinking = formatModelSelection(step.modelSelection, step.model, step.thinking);
|
|
268
269
|
if (modelThinking)
|
|
269
270
|
parts.push(modelThinking);
|
|
270
|
-
if (step.durationMs !== undefined)
|
|
271
|
-
|
|
271
|
+
if (step.durationMs !== undefined) {
|
|
272
|
+
const duration = step.durationMs + (step.status === "running" && step.lastActivityAt !== undefined ? Math.max(0, Date.now() - step.lastActivityAt) : 0);
|
|
273
|
+
parts.push(`${step.status === "running" ? "" : "ran for "}${formatDuration(duration)}`);
|
|
274
|
+
}
|
|
272
275
|
if (step.tokens)
|
|
273
276
|
parts.push(`${formatTokens(step.tokens.total)} tok`);
|
|
274
277
|
return parts.join(" | ");
|