@ashx-j/lunr 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builtin-extensions/ashxj-spinners.d.ts +1 -1
- package/dist/builtin-extensions/ashxj-spinners.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-spinners.js.map +1 -1
- package/dist/builtin-extensions/ashxj-thinking.d.ts +5 -5
- package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-thinking.js +3 -3
- package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts +2 -2
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +2 -2
- package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
- package/dist/builtin-extensions/lunr-cron.d.ts +1 -1
- package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-cron.js.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/index.d.ts +1 -1
- package/dist/builtin-extensions/lunr-local-providers/index.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.d.ts +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.js +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -1
- package/dist/builtin-extensions/lunr-skill-creator/index.d.ts +1 -1
- package/dist/builtin-extensions/lunr-skill-creator/index.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-skill-creator/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-todos.d.ts +1 -1
- package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-todos.js +1 -1
- package/dist/builtin-extensions/lunr-todos.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts +2 -2
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.js +2 -2
- package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts +2 -2
- package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/compose.js +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/compose.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts +2 -2
- package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/inline-message.js +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/inline-message.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts +2 -2
- package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/session-list.js +1 -1
- package/dist/builtin-extensions/pi-intercom/ui/session-list.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts +2 -2
- package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts +2 -2
- package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/types.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/utils.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.generated.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/model-selection.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/notifications.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts +3 -3
- 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 +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts +2 -2
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/rpc.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts +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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts +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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts +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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js.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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +2 -2
- 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.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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +2 -2
- 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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +3 -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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.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 +2 -2
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +3 -3
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +3 -3
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
- package/dist/builtin-extensions/pi-tps.d.ts +1 -1
- package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-tps.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.js +2 -2
- package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/openai-search.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/openai-search.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/openai-search.js +1 -1
- package/dist/builtin-extensions/pi-web-access/openai-search.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/summary-review.d.ts +1 -1
- package/dist/builtin-extensions/pi-web-access/summary-review.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/summary-review.js +1 -1
- package/dist/builtin-extensions/pi-web-access/summary-review.js.map +1 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/register-bedrock.js +2 -2
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/opencode-go.json +1 -1
- package/dist/catalog/providers/openrouter.json +1 -1
- package/dist/catalog/providers/qwen-token-plan-cn.json +1 -1
- package/dist/catalog/providers/qwen-token-plan.json +1 -1
- package/dist/catalog/publication.json +3 -3
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +2 -2
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -2
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/cache-stats.d.ts +1 -1
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/catalog-merge.d.ts +1 -1
- package/dist/core/catalog-merge.d.ts.map +1 -1
- package/dist/core/catalog-merge.js +7 -1
- package/dist/core/catalog-merge.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -2
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +2 -2
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/context-breakdown.d.ts +1 -1
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/export-html/index.d.ts +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +25 -25
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +5 -5
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/grok-cli-auth.d.ts +32 -0
- package/dist/core/grok-cli-auth.d.ts.map +1 -0
- package/dist/core/grok-cli-auth.js +218 -0
- package/dist/core/grok-cli-auth.js.map +1 -0
- package/dist/core/keybindings.d.ts +2 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/live-catalog.d.ts +1 -1
- package/dist/core/live-catalog.d.ts.map +1 -1
- package/dist/core/live-catalog.js.map +1 -1
- package/dist/core/messages.d.ts +3 -3
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +10 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +24 -5
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/official-catalog.d.ts +1 -1
- package/dist/core/official-catalog.d.ts.map +1 -1
- package/dist/core/official-catalog.js.map +1 -1
- package/dist/core/provider-attribution.d.ts +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/provider-composer.d.ts +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +2 -2
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +1 -1
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk.d.ts +3 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +3 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/subscriptions.d.ts +1 -1
- package/dist/core/subscriptions.d.ts.map +1 -1
- package/dist/core/subscriptions.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +1 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +2 -2
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/write.d.ts +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +1 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
- package/dist/core/usage-adapters/openai-codex.js.map +1 -1
- package/dist/core/usage-adapters/xai.d.ts.map +1 -1
- package/dist/core/usage-adapters/xai.js +4 -0
- package/dist/core/usage-adapters/xai.js.map +1 -1
- package/dist/core/usage-history.d.ts.map +1 -1
- package/dist/core/usage-history.js.map +1 -1
- package/dist/core/usage-service.d.ts +11 -1
- package/dist/core/usage-service.d.ts.map +1 -1
- package/dist/core/usage-service.js +45 -9
- package/dist/core/usage-service.js.map +1 -1
- package/dist/core/user-models.d.ts +1 -1
- package/dist/core/user-models.d.ts.map +1 -1
- package/dist/core/user-models.js.map +1 -1
- package/dist/gateway/agent-bridge.d.ts +3 -3
- package/dist/gateway/agent-bridge.d.ts.map +1 -1
- package/dist/gateway/agent-bridge.js.map +1 -1
- package/dist/gateway/commands.d.ts.map +1 -1
- package/dist/gateway/commands.js.map +1 -1
- package/dist/gateway/cron.d.ts.map +1 -1
- package/dist/gateway/cron.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/boot-screen.d.ts +1 -1
- package/dist/modes/interactive/components/boot-screen.d.ts.map +1 -1
- package/dist/modes/interactive/components/boot-screen.js +1 -1
- package/dist/modes/interactive/components/boot-screen.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +1 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +1 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.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/keybinding-hints.d.ts +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -2
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +2 -2
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/processes-selector.d.ts +1 -1
- package/dist/modes/interactive/components/processes-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/processes-selector.js +1 -1
- package/dist/modes/interactive/components/processes-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +1 -1
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-summary.d.ts +1 -1
- package/dist/modes/interactive/components/thinking-summary.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-summary.js.map +1 -1
- package/dist/modes/interactive/components/thinking-tail.d.ts +1 -1
- package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-tail.js +1 -1
- package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +1 -1
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/usage-view.js +1 -1
- package/dist/modes/interactive/components/usage-view.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +29 -4
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/smooth-streaming.d.ts +1 -1
- package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
- package/dist/modes/interactive/smooth-streaming.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +2 -2
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +2 -2
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +2 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/examples/extensions/auto-commit-on-exit.ts +1 -1
- package/examples/extensions/bash-spawn-hook.ts +2 -2
- package/examples/extensions/bookmark.ts +1 -1
- package/examples/extensions/border-status-editor.ts +3 -3
- package/examples/extensions/built-in-tool-renderer.ts +3 -3
- package/examples/extensions/claude-rules.ts +1 -1
- package/examples/extensions/commands.ts +1 -1
- package/examples/extensions/confirm-destructive.ts +1 -1
- package/examples/extensions/custom-compaction.ts +3 -3
- package/examples/extensions/custom-footer.ts +3 -3
- package/examples/extensions/custom-header.ts +2 -2
- package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
- 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/index.ts +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
- package/examples/extensions/dirty-repo-guard.ts +1 -1
- package/examples/extensions/doom-overlay/doom-component.ts +2 -2
- package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
- package/examples/extensions/doom-overlay/index.ts +1 -1
- package/examples/extensions/dynamic-resources/index.ts +1 -1
- package/examples/extensions/dynamic-tools.ts +1 -1
- package/examples/extensions/entry-renderer.ts +2 -2
- package/examples/extensions/event-bus.ts +1 -1
- package/examples/extensions/file-trigger.ts +1 -1
- package/examples/extensions/git-checkpoint.ts +1 -1
- package/examples/extensions/git-merge-and-resolve.ts +1 -1
- package/examples/extensions/github-issue-autocomplete.ts +2 -2
- package/examples/extensions/gondolin/index.ts +2 -2
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +4 -4
- package/examples/extensions/hello.ts +2 -2
- package/examples/extensions/hidden-thinking-label.ts +1 -1
- package/examples/extensions/inline-bash.ts +1 -1
- package/examples/extensions/input-transform-streaming.ts +1 -1
- package/examples/extensions/input-transform.ts +1 -1
- package/examples/extensions/interactive-shell.ts +1 -1
- package/examples/extensions/kimi-deferred-tools.ts +1 -1
- package/examples/extensions/mac-system-theme.ts +1 -1
- package/examples/extensions/message-renderer.ts +2 -2
- package/examples/extensions/minimal-mode.ts +3 -3
- package/examples/extensions/modal-editor.ts +2 -2
- package/examples/extensions/model-status.ts +1 -1
- package/examples/extensions/notify.ts +1 -1
- package/examples/extensions/overlay-qa-tests.ts +3 -3
- package/examples/extensions/overlay-test.ts +2 -2
- package/examples/extensions/permission-gate.ts +1 -1
- package/examples/extensions/pirate.ts +1 -1
- package/examples/extensions/plan-mode/index.ts +4 -4
- package/examples/extensions/preset.ts +4 -4
- package/examples/extensions/project-trust.ts +1 -1
- package/examples/extensions/prompt-customizer.ts +1 -1
- package/examples/extensions/protected-paths.ts +1 -1
- package/examples/extensions/provider-payload.ts +1 -1
- package/examples/extensions/qna.ts +3 -3
- package/examples/extensions/question.ts +2 -2
- package/examples/extensions/questionnaire.ts +2 -2
- package/examples/extensions/rainbow-editor.ts +1 -1
- package/examples/extensions/reload-runtime.ts +1 -1
- package/examples/extensions/rpc-demo.ts +1 -1
- package/examples/extensions/sandbox/index.ts +2 -2
- package/examples/extensions/send-user-message.ts +1 -1
- package/examples/extensions/session-name.ts +1 -1
- package/examples/extensions/shutdown-command.ts +1 -1
- package/examples/extensions/snake.ts +2 -2
- package/examples/extensions/space-invaders.ts +2 -2
- package/examples/extensions/ssh.ts +2 -2
- package/examples/extensions/status-line.ts +1 -1
- package/examples/extensions/structured-output.ts +2 -2
- package/examples/extensions/subagent/agents.ts +1 -1
- package/examples/extensions/subagent/index.ts +5 -5
- package/examples/extensions/summarize.ts +4 -4
- package/examples/extensions/system-prompt-header.ts +1 -1
- package/examples/extensions/tic-tac-toe.ts +3 -3
- package/examples/extensions/timed-confirm.ts +1 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/extensions/todo.ts +3 -3
- package/examples/extensions/tool-override.ts +2 -2
- package/examples/extensions/tools.ts +3 -3
- package/examples/extensions/trigger-compact.ts +1 -1
- package/examples/extensions/truncated-tool.ts +3 -3
- package/examples/extensions/widget-placement.ts +1 -1
- package/examples/extensions/with-deps/index.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/working-indicator.ts +1 -1
- package/examples/extensions/working-message-test.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/01-minimal.ts +1 -1
- package/examples/sdk/02-custom-model.ts +2 -2
- package/examples/sdk/03-custom-prompt.ts +1 -1
- package/examples/sdk/04-skills.ts +1 -1
- package/examples/sdk/05-tools.ts +1 -1
- package/examples/sdk/06-extensions.ts +2 -2
- package/examples/sdk/07-context-files.ts +1 -1
- package/examples/sdk/08-prompt-templates.ts +1 -1
- package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
- package/examples/sdk/10-settings.ts +1 -1
- package/examples/sdk/11-sessions.ts +1 -1
- package/examples/sdk/12-full-control.ts +2 -2
- package/examples/sdk/13-session-runtime.ts +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fleet-view.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/fleet-view.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport { formatDuration, formatModelThinking, formatTokens, shortenPath } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport {\n\tASYNC_DIR,\n\tRESULTS_DIR,\n\ttype ActivityState,\n\ttype AsyncJobStep,\n\ttype AsyncStatus,\n\ttype Details,\n\ttype NestedRunSummary,\n\ttype SubagentRunMode,\n\ttype SubagentState,\n} from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns, type AsyncRunSummary } from \"./async-status.ts\";\n\nconst DEFAULT_TRANSCRIPT_LINES = 80;\nconst MAX_TRANSCRIPT_LINES = 500;\nconst TRANSCRIPT_TAIL_BYTES = 256 * 1024;\n\ntype ForegroundControl = SubagentState[\"foregroundControls\"] extends Map<string, infer T> ? T : never;\ntype ForegroundRun = NonNullable<SubagentState[\"foregroundRuns\"]> extends Map<string, infer T> ? T : never;\n\ninterface FleetViewParams {\n\tlines?: number;\n}\n\ninterface FleetViewDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tchildSafe?: boolean;\n}\n\ninterface TranscriptOptions {\n\tindex?: number;\n\tlines?: number;\n\tsessionRoots?: string[];\n}\n\ninterface TextTailResult {\n\tpath: string;\n\tlines: string[];\n\ttruncated: boolean;\n\terror?: string;\n}\n\nfunction transcriptLineLimit(value: number | undefined): number {\n\tif (value === undefined) return DEFAULT_TRANSCRIPT_LINES;\n\tif (!Number.isFinite(value)) return DEFAULT_TRANSCRIPT_LINES;\n\treturn Math.max(1, Math.min(MAX_TRANSCRIPT_LINES, Math.trunc(value)));\n}\n\nfunction uniqueStrings(values: Array<string | undefined>): string[] {\n\tconst seen = new Set<string>();\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tif (!value || seen.has(value)) continue;\n\t\tseen.add(value);\n\t\tresult.push(value);\n\t}\n\treturn result;\n}\n\nfunction resolveMaybeRelative(asyncDir: string, filePath: string | undefined): string | undefined {\n\tif (!filePath) return undefined;\n\treturn path.resolve(asyncDir, filePath);\n}\n\nfunction pathWithin(base: string, candidate: string): boolean {\n\tconst resolvedBase = path.resolve(base);\n\tconst resolvedCandidate = path.resolve(candidate);\n\treturn resolvedCandidate === resolvedBase || resolvedCandidate.startsWith(`${resolvedBase}${path.sep}`);\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 readTextTail(filePath: string, maxLines: number): TextTailResult {\n\tlet stat: fs.Stats;\n\ttry {\n\t\tstat = fs.statSync(filePath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (stat.size === 0) return { path: filePath, lines: [], truncated: false };\n\n\tlet fd: number | undefined;\n\ttry {\n\t\tconst bytesToRead = Math.min(stat.size, TRANSCRIPT_TAIL_BYTES);\n\t\tconst start = stat.size - bytesToRead;\n\t\tconst buffer = Buffer.alloc(bytesToRead);\n\t\tfd = fs.openSync(filePath, \"r\");\n\t\tconst bytesRead = fs.readSync(fd, buffer, 0, bytesToRead, start);\n\t\tconst content = buffer.subarray(0, bytesRead).toString(\"utf-8\");\n\t\tlet lines = content.split(/\\r?\\n/);\n\t\tif (start > 0 && lines.length > 0) lines = lines.slice(1);\n\t\tif (lines.at(-1) === \"\") lines = lines.slice(0, -1);\n\t\treturn { path: filePath, lines: lines.slice(-maxLines), truncated: start > 0 || lines.length > maxLines };\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t} finally {\n\t\tif (fd !== undefined) fs.closeSync(fd);\n\t}\n}\n\nfunction readContainedTextTail(filePath: string, maxLines: number, trustedRoots: string[], label: string): TextTailResult {\n\tif (trustedRoots.length === 0) return { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path without a trusted root: ${filePath}` };\n\tconst resolvedPath = path.resolve(filePath);\n\tif (!trustedRoots.some((root) => pathWithin(root, resolvedPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\tlet lstat: fs.Stats;\n\ttry {\n\t\tlstat = fs.lstatSync(resolvedPath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (lstat.isSymbolicLink()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read symlink ${label} transcript path: ${filePath}` };\n\tif (!lstat.isFile()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read non-file ${label} transcript path: ${filePath}` };\n\tlet realPath: string;\n\tlet realRoots: string[];\n\ttry {\n\t\trealPath = fs.realpathSync(resolvedPath);\n\t\trealRoots = trustedRoots.filter((root) => fs.existsSync(root)).map((root) => fs.realpathSync(root));\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (!realRoots.some((root) => pathWithin(root, realPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\treturn readTextTail(resolvedPath, maxLines);\n}\n\nfunction stringifyJsonPreview(value: unknown, maxLength = 240): string {\n\tlet raw: string;\n\tif (typeof value === \"string\") raw = value;\n\telse raw = JSON.stringify(value);\n\treturn raw.length > maxLength ? `${raw.slice(0, maxLength)}…` : raw;\n}\n\nfunction contentText(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content.map((part) => {\n\t\tif (!part || typeof part !== \"object\") return \"\";\n\t\tconst entry = part as { type?: unknown; text?: unknown; name?: unknown; toolName?: unknown; args?: unknown; result?: unknown; content?: unknown };\n\t\tif (typeof entry.text === \"string\") return entry.text;\n\t\tif (entry.type === \"toolCall\" || entry.type === \"tool_call\") {\n\t\t\tconst name = typeof entry.name === \"string\" ? entry.name : typeof entry.toolName === \"string\" ? entry.toolName : \"tool\";\n\t\t\treturn `[tool: ${name}${entry.args === undefined ? \"\" : ` ${stringifyJsonPreview(entry.args)}`}]`;\n\t\t}\n\t\tif (entry.type === \"toolResult\" || entry.type === \"tool_result\") {\n\t\t\treturn `[tool result${entry.result === undefined ? \"\" : `: ${stringifyJsonPreview(entry.result)}`}]`;\n\t\t}\n\t\tif (entry.content !== undefined) return stringifyJsonPreview(entry.content);\n\t\treturn \"\";\n\t}).filter(Boolean).join(\"\\n\");\n}\n\nfunction sessionMessageLine(record: unknown): string | undefined {\n\tif (!record || typeof record !== \"object\") return undefined;\n\tconst outer = record as { message?: unknown; role?: unknown; content?: unknown; type?: unknown };\n\tconst message = outer.message && typeof outer.message === \"object\" ? outer.message as { role?: unknown; content?: unknown } : outer;\n\tconst role = typeof message.role === \"string\" ? message.role : undefined;\n\tif (!role) return undefined;\n\tconst text = contentText(message.content).trim();\n\tif (!text) return undefined;\n\treturn `${role}: ${text}`;\n}\n\nfunction readSessionTranscriptTail(sessionFile: string, maxLines: number, trustedRoots: string[]): { lines: string[]; warnings: string[] } {\n\tconst tail = readContainedTextTail(sessionFile, Math.max(maxLines * 4, maxLines), trustedRoots, \"session\");\n\tconst warnings: string[] = [];\n\tif (tail.error) warnings.push(`Session read failed for ${sessionFile}: ${tail.error}`);\n\tconst lines: string[] = [];\n\tlet malformed = 0;\n\tfor (const line of tail.lines) {\n\t\tif (!line.trim()) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(line) as unknown;\n\t\t\tconst messageLine = sessionMessageLine(parsed);\n\t\t\tif (messageLine) lines.push(messageLine);\n\t\t} catch {\n\t\t\tmalformed++;\n\t\t}\n\t}\n\tif (malformed > 0) warnings.push(`Skipped ${malformed} malformed session tail line${malformed === 1 ? \"\" : \"s\"}.`);\n\treturn { lines: lines.slice(-maxLines), warnings };\n}\n\nfunction formatActivityFacts(input: {\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\ttokens?: { total: number };\n}): 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.toolCount !== undefined) facts.push(`${input.toolCount} tools`);\n\tif (input.tokens?.total) facts.push(`${formatTokens(input.tokens.total)} tok`);\n\tconst activity = formatActivityLabel(input.lastActivityAt, input.activityState);\n\treturn activity || facts.length ? [activity, ...facts].filter(Boolean).join(\" | \") : undefined;\n}\n\nfunction foregroundModeName(control: ForegroundControl): string {\n\tif (control.mode === \"single\" && control.currentAgent) return control.currentAgent;\n\treturn control.mode;\n}\n\nfunction formatForegroundFleetLines(controls: ForegroundControl[]): string[] {\n\tif (controls.length === 0) return [];\n\tconst lines = [\"Foreground runs:\"];\n\tconst ordered = [...controls].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const control of ordered) {\n\t\tconst activity = formatActivityFacts({\n\t\t\tactivityState: control.currentActivityState,\n\t\t\tlastActivityAt: control.lastActivityAt,\n\t\t\tcurrentTool: control.currentTool,\n\t\t\tcurrentToolStartedAt: control.currentToolStartedAt,\n\t\t\tcurrentPath: control.currentPath,\n\t\t\tturnCount: control.turnCount,\n\t\t\ttoolCount: control.toolCount,\n\t\t\t...(control.tokens !== undefined ? { tokens: { total: control.tokens } } : {}),\n\t\t});\n\t\tconst current = control.currentAgent ? ` | ${control.currentAgent}${control.currentIndex !== undefined ? ` #${control.currentIndex}` : \"\"}` : \"\";\n\t\tlines.push(`- ${control.runId} | running | ${foregroundModeName(control)}${current}${activity ? ` | ${activity}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${control.runId}\" })`);\n\t\tlines.push(\" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled.\");\n\t\tlines.push(...formatNestedRunStatusLines(control.nestedChildren, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t}\n\treturn lines;\n}\n\nfunction formatDetachedForegroundFleetLines(runs: ForegroundRun[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Detached foreground runs:\"];\n\tconst ordered = [...runs].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const run of ordered) {\n\t\tconst detachedChildren = run.children.filter((child) => child.status === \"detached\");\n\t\tconst childSummary = detachedChildren.map((child) => `${child.agent} #${child.index}`).join(\", \");\n\t\tlines.push(`- ${run.runId} | detached | ${run.mode}${childSummary ? ` | ${childSummary}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\t\tlines.push(` recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t}\n\treturn lines;\n}\n\nfunction formatAsyncFleetLines(runs: AsyncRunSummary[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Async runs:\"];\n\tfor (const run of runs) {\n\t\tconst progress = formatAsyncRunProgressLabel(run);\n\t\tconst activity = formatActivityFacts(run);\n\t\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\t\tconst pending = run.pendingAppends ? ` | ${run.pendingAppends} pending append${run.pendingAppends === 1 ? \"\" : \"s\"}` : \"\";\n\t\tlines.push(`- ${run.id} | ${run.state}${activity ? ` | ${activity}` : \"\"} | ${run.mode} | ${progress}${pending} | ${cwd}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.id}\" })`);\n\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", view: \"transcript\" })`);\n\t\tfor (const step of run.steps) {\n\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\tconst stepActivity = formatActivityFacts(step);\n\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\tconst parts = [`${step.index}. ${phase}${display}`, step.status, stepActivity, modelThinking].filter(Boolean);\n\t\t\tlines.push(` ${parts.join(\" | \")}`);\n\t\t\tconst output = path.join(run.asyncDir, `output-${step.index}.log`);\n\t\t\tif (fs.existsSync(output)) lines.push(` output: ${shortenPath(output)}`);\n\t\t\tif (step.sessionFile) lines.push(` session: ${shortenPath(step.sessionFile)}`);\n\t\t\tif (step.status === \"running\" || step.recentOutput?.length || fs.existsSync(output)) {\n\t\t\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", index: ${step.index}, view: \"transcript\" })`);\n\t\t\t}\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, 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: \" \", commandHints: true, 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}\n\treturn lines;\n}\n\nexport function inspectSubagentFleet(_params: FleetViewParams, deps: FleetViewDeps = {}): AgentToolResult<Details> {\n\tif (deps.childSafe) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: \\\"status\\\", id: \\\"...\\\" }) for the delegated run you can see.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tlet asyncRuns: AsyncRunSummary[];\n\ttry {\n\t\tasyncRuns = listAsyncRuns(deps.asyncDirRoot ?? ASYNC_DIR, {\n\t\t\tstates: [\"queued\", \"running\"],\n\t\t\tsessionId: deps.state?.currentSessionId ?? undefined,\n\t\t\tresultsDir: deps.resultsDir ?? RESULTS_DIR,\n\t\t\tkill: deps.kill,\n\t\t\tnow: deps.now,\n\t\t});\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"management\", results: [] } };\n\t}\n\n\tconst foregroundControls = deps.state ? [...deps.state.foregroundControls.values()] : [];\n\tconst activeForegroundIds = new Set(foregroundControls.map((control) => control.runId));\n\tconst detachedForegroundRuns = deps.state?.foregroundRuns\n\t\t? [...deps.state.foregroundRuns.values()].filter((run) => run.sessionId === deps.state?.currentSessionId && !activeForegroundIds.has(run.runId) && run.children.some((child) => child.status === \"detached\"))\n\t\t: [];\n\tconst total = foregroundControls.length + detachedForegroundRuns.length + asyncRuns.length;\n\tif (total === 0) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: \\\"status\\\", id: \\\"...\\\" }).\" }],\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tconst lines = [`Subagent fleet: ${total} tracked`, \"\"];\n\tconst foregroundLines = formatForegroundFleetLines(foregroundControls);\n\tif (foregroundLines.length) lines.push(...foregroundLines, \"\");\n\tconst detachedForegroundLines = formatDetachedForegroundFleetLines(detachedForegroundRuns);\n\tif (detachedForegroundLines.length) lines.push(...detachedForegroundLines, \"\");\n\tconst asyncLines = formatAsyncFleetLines(asyncRuns);\n\tif (asyncLines.length) lines.push(...asyncLines, \"\");\n\tlines.push(\"Commands:\");\n\tlines.push(\" Refresh fleet: subagent({ action: \\\"status\\\", view: \\\"fleet\\\" })\");\n\tlines.push(\" Tail run transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", view: \\\"transcript\\\" })\");\n\tlines.push(\" Tail child transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", index: 0, view: \\\"transcript\\\" })\");\n\n\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\").trimEnd() }], details: { mode: \"management\", results: [] } };\n}\n\nfunction validateTranscriptIndex(index: number | undefined, steps: AsyncJobStep[]): number | undefined {\n\tif (index === undefined) return undefined;\n\tif (!Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index < 0 || index >= steps.length) throw new Error(`Transcript index ${index} is out of range for ${steps.length} child step${steps.length === 1 ? \"\" : \"s\"}.`);\n\treturn index;\n}\n\nfunction selectTranscriptStep(status: AsyncStatus, options: TranscriptOptions): { index?: number; step?: AsyncJobStep; hint?: string } {\n\tconst steps = status.steps ?? [];\n\tlet selectedIndex = validateTranscriptIndex(options.index, steps);\n\tif (selectedIndex === undefined) {\n\t\tif (status.state === \"running\" && typeof status.currentStep === \"number\" && status.currentStep >= 0 && status.currentStep < steps.length) {\n\t\t\tselectedIndex = status.currentStep;\n\t\t} else if (steps.length === 1) {\n\t\t\tselectedIndex = 0;\n\t\t}\n\t}\n\tconst step = selectedIndex !== undefined ? steps[selectedIndex] : undefined;\n\tconst hint = options.index === undefined && steps.length > 1\n\t\t? `Tip: pass index to inspect a specific child transcript (${steps.map((candidate, index) => `${index}=${candidate.agent}`).join(\", \")}).`\n\t\t: undefined;\n\treturn { index: selectedIndex, step, hint };\n}\n\nfunction stepStateLine(mode: SubagentRunMode, index: number | undefined, step: AsyncJobStep | undefined): string | undefined {\n\tif (index === undefined || !step) return undefined;\n\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\tconst parts = [\n\t\t`${mode === \"parallel\" ? \"Agent\" : \"Step\"}: ${index} (${step.agent})`,\n\t\tstep.status,\n\t\tformatActivityFacts(step),\n\t\tmodelThinking,\n\t\tstep.error ? `error: ${step.error}` : undefined,\n\t].filter(Boolean);\n\treturn parts.join(\" | \");\n}\n\nfunction appendKnownArtifacts(lines: string[], input: { outputPaths: string[]; sessionFile?: string; eventsPath?: string; logPath?: string; resultPath?: string }): void {\n\tconst artifacts: string[] = [];\n\tfor (const outputPath of input.outputPaths) artifacts.push(`Output: ${outputPath}`);\n\tif (input.sessionFile) artifacts.push(`Session: ${input.sessionFile}`);\n\tif (input.eventsPath) artifacts.push(`Events: ${input.eventsPath}`);\n\tif (input.logPath) artifacts.push(`Log: ${input.logPath}`);\n\tif (input.resultPath) artifacts.push(`Result: ${input.resultPath}`);\n\tif (!artifacts.length) return;\n\tlines.push(\"Artifacts:\");\n\tfor (const artifact of artifacts) lines.push(` ${artifact}`);\n}\n\nfunction appendTranscriptBody(lines: string[], sourceLabel: string, sourceLines: string[], truncated: boolean): void {\n\tlines.push(`${sourceLabel}${truncated ? \" (tail truncated)\" : \"\"}:`);\n\tif (sourceLines.length === 0) {\n\t\tlines.push(\" (no transcript lines available yet)\");\n\t\treturn;\n\t}\n\tfor (const line of sourceLines) lines.push(` ${line}`);\n}\n\nexport function formatAsyncRunTranscript(status: AsyncStatus, asyncDir: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst selected = selectTranscriptStep(status, options);\n\tconst stepOutputPath = selected.index !== undefined ? path.join(asyncDir, `output-${selected.index}.log`) : undefined;\n\tconst runOutputPath = resolveMaybeRelative(asyncDir, status.outputFile);\n\tconst logPath = path.join(asyncDir, `subagent-log-${status.runId}.md`);\n\tconst outputPaths = selected.index !== undefined\n\t\t? uniqueStrings([stepOutputPath, runOutputPath && stepOutputPath && path.resolve(runOutputPath) === path.resolve(stepOutputPath) ? runOutputPath : undefined])\n\t\t: uniqueStrings([runOutputPath]);\n\tconst sessionFile = selected.index !== undefined ? selected.step?.sessionFile : status.sessionFile;\n\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\n\tconst lines = [\n\t\t`Run: ${status.runId}`,\n\t\t`State: ${status.state}`,\n\t\t`Mode: ${status.mode}`,\n\t\tstepStateLine(status.mode, selected.index, selected.step),\n\t\tselected.hint,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths, sessionFile, eventsPath: fs.existsSync(eventsPath) ? eventsPath : undefined, logPath: fs.existsSync(logPath) ? logPath : undefined });\n\n\tconst warnings: string[] = [];\n\tlet transcriptLines: string[] = [];\n\tlet transcriptSource = \"Transcript tail\";\n\tlet truncated = false;\n\tfor (const outputPath of outputPaths) {\n\t\tconst tail = readContainedTextTail(outputPath, lineLimit, [asyncDir], \"output\");\n\t\tif (tail.error) warnings.push(`Output read failed for ${tail.path}: ${tail.error}`);\n\t\tif (tail.lines.length === 0) continue;\n\t\ttranscriptLines = tail.lines;\n\t\ttranscriptSource = \"Transcript tail\";\n\t\ttruncated = tail.truncated;\n\t\tbreak;\n\t}\n\tif (transcriptLines.length === 0 && selected.step?.recentOutput?.length) {\n\t\ttranscriptLines = selected.step.recentOutput.slice(-lineLimit);\n\t\ttranscriptSource = \"Recent output\";\n\t}\n\tif (transcriptLines.length === 0 && sessionFile) {\n\t\tconst sessionTail = readSessionTranscriptTail(sessionFile, lineLimit, options.sessionRoots ?? []);\n\t\ttranscriptLines = sessionTail.lines;\n\t\twarnings.push(...sessionTail.warnings);\n\t\tif (transcriptLines.length > 0) transcriptSource = \"Session transcript tail\";\n\t}\n\n\tif (warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, transcriptSource, transcriptLines, truncated);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatNestedRunTranscript(run: NestedRunSummary, options: TranscriptOptions = {}): string {\n\tif (run.asyncDir) {\n\t\tconst status = readStatus(run.asyncDir);\n\t\tif (status) return formatAsyncRunTranscript(status, run.asyncDir, options);\n\t}\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`State: ${run.state}`,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\trun.agent ? `Agent: ${run.agent}` : run.agents?.length ? `Agents: ${run.agents.join(\", \")}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile: run.sessionFile });\n\tif (!run.sessionFile) {\n\t\tappendTranscriptBody(lines, \"Transcript tail\", [], false);\n\t\treturn lines.join(\"\\n\");\n\t}\n\tconst sessionTail = readSessionTranscriptTail(run.sessionFile, lineLimit, options.sessionRoots ?? []);\n\tif (sessionTail.warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of sessionTail.warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, `Session transcript tail from ${run.sessionFile}`, sessionTail.lines, false);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatAsyncResultTranscript(data: {\n\tid?: string;\n\trunId?: string;\n\tstate?: string;\n\tsuccess?: boolean;\n\tsummary?: string;\n\toutput?: string;\n\tsessionFile?: string;\n\tagent?: string;\n\texitCode?: number | null;\n\tresults?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }>;\n}, resultPath: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst runId = data.runId ?? data.id ?? path.basename(resultPath, \".json\");\n\tconst children = Array.isArray(data.results)\n\t\t? data.results\n\t\t: data.agent\n\t\t\t? [{ agent: data.agent, output: data.output, summary: data.summary, sessionFile: data.sessionFile, state: data.state, success: data.success, exitCode: data.exitCode }]\n\t\t\t: [];\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && children.length === 1) index = 0;\n\tif (index !== undefined && (index < 0 || index >= children.length)) throw new Error(`Transcript index ${index} is out of range for ${children.length} result child${children.length === 1 ? \"\" : \"ren\"}.`);\n\tconst child = index !== undefined ? children[index] : undefined;\n\tconst output = index !== undefined\n\t\t? child?.output ?? child?.summary ?? (children.length === 1 ? data.output ?? data.summary : undefined) ?? \"\"\n\t\t: data.output ?? data.summary ?? \"\";\n\tconst transcriptLines = output.split(/\\r?\\n/).slice(-lineLimit);\n\tconst sessionFile = child?.sessionFile ?? data.sessionFile;\n\tconst lines = [\n\t\t`Run: ${runId}`,\n\t\t`State: ${data.state ?? (data.success ? \"complete\" : \"failed\")}`,\n\t\tindex !== undefined && child ? `Child: ${index} (${child.agent ?? \"subagent\"})` : undefined,\n\t\tindex === undefined && children.length > 1 ? `Tip: pass index to inspect a specific child transcript (${children.map((candidate, childIndex) => `${childIndex}=${candidate.agent ?? \"subagent\"}`).join(\", \")}).` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile, resultPath });\n\tappendTranscriptBody(lines, \"Result transcript tail\", transcriptLines.filter((line) => line.trim()), output.split(/\\r?\\n/).length > lineLimit);\n\treturn lines.join(\"\\n\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fleet-view.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/fleet-view.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatDuration, formatModelThinking, formatTokens, shortenPath } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport {\n\tASYNC_DIR,\n\tRESULTS_DIR,\n\ttype ActivityState,\n\ttype AsyncJobStep,\n\ttype AsyncStatus,\n\ttype Details,\n\ttype NestedRunSummary,\n\ttype SubagentRunMode,\n\ttype SubagentState,\n} from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns, type AsyncRunSummary } from \"./async-status.ts\";\n\nconst DEFAULT_TRANSCRIPT_LINES = 80;\nconst MAX_TRANSCRIPT_LINES = 500;\nconst TRANSCRIPT_TAIL_BYTES = 256 * 1024;\n\ntype ForegroundControl = SubagentState[\"foregroundControls\"] extends Map<string, infer T> ? T : never;\ntype ForegroundRun = NonNullable<SubagentState[\"foregroundRuns\"]> extends Map<string, infer T> ? T : never;\n\ninterface FleetViewParams {\n\tlines?: number;\n}\n\ninterface FleetViewDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tchildSafe?: boolean;\n}\n\ninterface TranscriptOptions {\n\tindex?: number;\n\tlines?: number;\n\tsessionRoots?: string[];\n}\n\ninterface TextTailResult {\n\tpath: string;\n\tlines: string[];\n\ttruncated: boolean;\n\terror?: string;\n}\n\nfunction transcriptLineLimit(value: number | undefined): number {\n\tif (value === undefined) return DEFAULT_TRANSCRIPT_LINES;\n\tif (!Number.isFinite(value)) return DEFAULT_TRANSCRIPT_LINES;\n\treturn Math.max(1, Math.min(MAX_TRANSCRIPT_LINES, Math.trunc(value)));\n}\n\nfunction uniqueStrings(values: Array<string | undefined>): string[] {\n\tconst seen = new Set<string>();\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tif (!value || seen.has(value)) continue;\n\t\tseen.add(value);\n\t\tresult.push(value);\n\t}\n\treturn result;\n}\n\nfunction resolveMaybeRelative(asyncDir: string, filePath: string | undefined): string | undefined {\n\tif (!filePath) return undefined;\n\treturn path.resolve(asyncDir, filePath);\n}\n\nfunction pathWithin(base: string, candidate: string): boolean {\n\tconst resolvedBase = path.resolve(base);\n\tconst resolvedCandidate = path.resolve(candidate);\n\treturn resolvedCandidate === resolvedBase || resolvedCandidate.startsWith(`${resolvedBase}${path.sep}`);\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 readTextTail(filePath: string, maxLines: number): TextTailResult {\n\tlet stat: fs.Stats;\n\ttry {\n\t\tstat = fs.statSync(filePath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (stat.size === 0) return { path: filePath, lines: [], truncated: false };\n\n\tlet fd: number | undefined;\n\ttry {\n\t\tconst bytesToRead = Math.min(stat.size, TRANSCRIPT_TAIL_BYTES);\n\t\tconst start = stat.size - bytesToRead;\n\t\tconst buffer = Buffer.alloc(bytesToRead);\n\t\tfd = fs.openSync(filePath, \"r\");\n\t\tconst bytesRead = fs.readSync(fd, buffer, 0, bytesToRead, start);\n\t\tconst content = buffer.subarray(0, bytesRead).toString(\"utf-8\");\n\t\tlet lines = content.split(/\\r?\\n/);\n\t\tif (start > 0 && lines.length > 0) lines = lines.slice(1);\n\t\tif (lines.at(-1) === \"\") lines = lines.slice(0, -1);\n\t\treturn { path: filePath, lines: lines.slice(-maxLines), truncated: start > 0 || lines.length > maxLines };\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t} finally {\n\t\tif (fd !== undefined) fs.closeSync(fd);\n\t}\n}\n\nfunction readContainedTextTail(filePath: string, maxLines: number, trustedRoots: string[], label: string): TextTailResult {\n\tif (trustedRoots.length === 0) return { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path without a trusted root: ${filePath}` };\n\tconst resolvedPath = path.resolve(filePath);\n\tif (!trustedRoots.some((root) => pathWithin(root, resolvedPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\tlet lstat: fs.Stats;\n\ttry {\n\t\tlstat = fs.lstatSync(resolvedPath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (lstat.isSymbolicLink()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read symlink ${label} transcript path: ${filePath}` };\n\tif (!lstat.isFile()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read non-file ${label} transcript path: ${filePath}` };\n\tlet realPath: string;\n\tlet realRoots: string[];\n\ttry {\n\t\trealPath = fs.realpathSync(resolvedPath);\n\t\trealRoots = trustedRoots.filter((root) => fs.existsSync(root)).map((root) => fs.realpathSync(root));\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (!realRoots.some((root) => pathWithin(root, realPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\treturn readTextTail(resolvedPath, maxLines);\n}\n\nfunction stringifyJsonPreview(value: unknown, maxLength = 240): string {\n\tlet raw: string;\n\tif (typeof value === \"string\") raw = value;\n\telse raw = JSON.stringify(value);\n\treturn raw.length > maxLength ? `${raw.slice(0, maxLength)}…` : raw;\n}\n\nfunction contentText(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content.map((part) => {\n\t\tif (!part || typeof part !== \"object\") return \"\";\n\t\tconst entry = part as { type?: unknown; text?: unknown; name?: unknown; toolName?: unknown; args?: unknown; result?: unknown; content?: unknown };\n\t\tif (typeof entry.text === \"string\") return entry.text;\n\t\tif (entry.type === \"toolCall\" || entry.type === \"tool_call\") {\n\t\t\tconst name = typeof entry.name === \"string\" ? entry.name : typeof entry.toolName === \"string\" ? entry.toolName : \"tool\";\n\t\t\treturn `[tool: ${name}${entry.args === undefined ? \"\" : ` ${stringifyJsonPreview(entry.args)}`}]`;\n\t\t}\n\t\tif (entry.type === \"toolResult\" || entry.type === \"tool_result\") {\n\t\t\treturn `[tool result${entry.result === undefined ? \"\" : `: ${stringifyJsonPreview(entry.result)}`}]`;\n\t\t}\n\t\tif (entry.content !== undefined) return stringifyJsonPreview(entry.content);\n\t\treturn \"\";\n\t}).filter(Boolean).join(\"\\n\");\n}\n\nfunction sessionMessageLine(record: unknown): string | undefined {\n\tif (!record || typeof record !== \"object\") return undefined;\n\tconst outer = record as { message?: unknown; role?: unknown; content?: unknown; type?: unknown };\n\tconst message = outer.message && typeof outer.message === \"object\" ? outer.message as { role?: unknown; content?: unknown } : outer;\n\tconst role = typeof message.role === \"string\" ? message.role : undefined;\n\tif (!role) return undefined;\n\tconst text = contentText(message.content).trim();\n\tif (!text) return undefined;\n\treturn `${role}: ${text}`;\n}\n\nfunction readSessionTranscriptTail(sessionFile: string, maxLines: number, trustedRoots: string[]): { lines: string[]; warnings: string[] } {\n\tconst tail = readContainedTextTail(sessionFile, Math.max(maxLines * 4, maxLines), trustedRoots, \"session\");\n\tconst warnings: string[] = [];\n\tif (tail.error) warnings.push(`Session read failed for ${sessionFile}: ${tail.error}`);\n\tconst lines: string[] = [];\n\tlet malformed = 0;\n\tfor (const line of tail.lines) {\n\t\tif (!line.trim()) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(line) as unknown;\n\t\t\tconst messageLine = sessionMessageLine(parsed);\n\t\t\tif (messageLine) lines.push(messageLine);\n\t\t} catch {\n\t\t\tmalformed++;\n\t\t}\n\t}\n\tif (malformed > 0) warnings.push(`Skipped ${malformed} malformed session tail line${malformed === 1 ? \"\" : \"s\"}.`);\n\treturn { lines: lines.slice(-maxLines), warnings };\n}\n\nfunction formatActivityFacts(input: {\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\ttokens?: { total: number };\n}): 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.toolCount !== undefined) facts.push(`${input.toolCount} tools`);\n\tif (input.tokens?.total) facts.push(`${formatTokens(input.tokens.total)} tok`);\n\tconst activity = formatActivityLabel(input.lastActivityAt, input.activityState);\n\treturn activity || facts.length ? [activity, ...facts].filter(Boolean).join(\" | \") : undefined;\n}\n\nfunction foregroundModeName(control: ForegroundControl): string {\n\tif (control.mode === \"single\" && control.currentAgent) return control.currentAgent;\n\treturn control.mode;\n}\n\nfunction formatForegroundFleetLines(controls: ForegroundControl[]): string[] {\n\tif (controls.length === 0) return [];\n\tconst lines = [\"Foreground runs:\"];\n\tconst ordered = [...controls].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const control of ordered) {\n\t\tconst activity = formatActivityFacts({\n\t\t\tactivityState: control.currentActivityState,\n\t\t\tlastActivityAt: control.lastActivityAt,\n\t\t\tcurrentTool: control.currentTool,\n\t\t\tcurrentToolStartedAt: control.currentToolStartedAt,\n\t\t\tcurrentPath: control.currentPath,\n\t\t\tturnCount: control.turnCount,\n\t\t\ttoolCount: control.toolCount,\n\t\t\t...(control.tokens !== undefined ? { tokens: { total: control.tokens } } : {}),\n\t\t});\n\t\tconst current = control.currentAgent ? ` | ${control.currentAgent}${control.currentIndex !== undefined ? ` #${control.currentIndex}` : \"\"}` : \"\";\n\t\tlines.push(`- ${control.runId} | running | ${foregroundModeName(control)}${current}${activity ? ` | ${activity}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${control.runId}\" })`);\n\t\tlines.push(\" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled.\");\n\t\tlines.push(...formatNestedRunStatusLines(control.nestedChildren, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t}\n\treturn lines;\n}\n\nfunction formatDetachedForegroundFleetLines(runs: ForegroundRun[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Detached foreground runs:\"];\n\tconst ordered = [...runs].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const run of ordered) {\n\t\tconst detachedChildren = run.children.filter((child) => child.status === \"detached\");\n\t\tconst childSummary = detachedChildren.map((child) => `${child.agent} #${child.index}`).join(\", \");\n\t\tlines.push(`- ${run.runId} | detached | ${run.mode}${childSummary ? ` | ${childSummary}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\t\tlines.push(` recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t}\n\treturn lines;\n}\n\nfunction formatAsyncFleetLines(runs: AsyncRunSummary[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Async runs:\"];\n\tfor (const run of runs) {\n\t\tconst progress = formatAsyncRunProgressLabel(run);\n\t\tconst activity = formatActivityFacts(run);\n\t\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\t\tconst pending = run.pendingAppends ? ` | ${run.pendingAppends} pending append${run.pendingAppends === 1 ? \"\" : \"s\"}` : \"\";\n\t\tlines.push(`- ${run.id} | ${run.state}${activity ? ` | ${activity}` : \"\"} | ${run.mode} | ${progress}${pending} | ${cwd}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.id}\" })`);\n\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", view: \"transcript\" })`);\n\t\tfor (const step of run.steps) {\n\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\tconst stepActivity = formatActivityFacts(step);\n\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\tconst parts = [`${step.index}. ${phase}${display}`, step.status, stepActivity, modelThinking].filter(Boolean);\n\t\t\tlines.push(` ${parts.join(\" | \")}`);\n\t\t\tconst output = path.join(run.asyncDir, `output-${step.index}.log`);\n\t\t\tif (fs.existsSync(output)) lines.push(` output: ${shortenPath(output)}`);\n\t\t\tif (step.sessionFile) lines.push(` session: ${shortenPath(step.sessionFile)}`);\n\t\t\tif (step.status === \"running\" || step.recentOutput?.length || fs.existsSync(output)) {\n\t\t\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", index: ${step.index}, view: \"transcript\" })`);\n\t\t\t}\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, 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: \" \", commandHints: true, 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}\n\treturn lines;\n}\n\nexport function inspectSubagentFleet(_params: FleetViewParams, deps: FleetViewDeps = {}): AgentToolResult<Details> {\n\tif (deps.childSafe) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: \\\"status\\\", id: \\\"...\\\" }) for the delegated run you can see.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tlet asyncRuns: AsyncRunSummary[];\n\ttry {\n\t\tasyncRuns = listAsyncRuns(deps.asyncDirRoot ?? ASYNC_DIR, {\n\t\t\tstates: [\"queued\", \"running\"],\n\t\t\tsessionId: deps.state?.currentSessionId ?? undefined,\n\t\t\tresultsDir: deps.resultsDir ?? RESULTS_DIR,\n\t\t\tkill: deps.kill,\n\t\t\tnow: deps.now,\n\t\t});\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"management\", results: [] } };\n\t}\n\n\tconst foregroundControls = deps.state ? [...deps.state.foregroundControls.values()] : [];\n\tconst activeForegroundIds = new Set(foregroundControls.map((control) => control.runId));\n\tconst detachedForegroundRuns = deps.state?.foregroundRuns\n\t\t? [...deps.state.foregroundRuns.values()].filter((run) => run.sessionId === deps.state?.currentSessionId && !activeForegroundIds.has(run.runId) && run.children.some((child) => child.status === \"detached\"))\n\t\t: [];\n\tconst total = foregroundControls.length + detachedForegroundRuns.length + asyncRuns.length;\n\tif (total === 0) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: \\\"status\\\", id: \\\"...\\\" }).\" }],\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tconst lines = [`Subagent fleet: ${total} tracked`, \"\"];\n\tconst foregroundLines = formatForegroundFleetLines(foregroundControls);\n\tif (foregroundLines.length) lines.push(...foregroundLines, \"\");\n\tconst detachedForegroundLines = formatDetachedForegroundFleetLines(detachedForegroundRuns);\n\tif (detachedForegroundLines.length) lines.push(...detachedForegroundLines, \"\");\n\tconst asyncLines = formatAsyncFleetLines(asyncRuns);\n\tif (asyncLines.length) lines.push(...asyncLines, \"\");\n\tlines.push(\"Commands:\");\n\tlines.push(\" Refresh fleet: subagent({ action: \\\"status\\\", view: \\\"fleet\\\" })\");\n\tlines.push(\" Tail run transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", view: \\\"transcript\\\" })\");\n\tlines.push(\" Tail child transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", index: 0, view: \\\"transcript\\\" })\");\n\n\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\").trimEnd() }], details: { mode: \"management\", results: [] } };\n}\n\nfunction validateTranscriptIndex(index: number | undefined, steps: AsyncJobStep[]): number | undefined {\n\tif (index === undefined) return undefined;\n\tif (!Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index < 0 || index >= steps.length) throw new Error(`Transcript index ${index} is out of range for ${steps.length} child step${steps.length === 1 ? \"\" : \"s\"}.`);\n\treturn index;\n}\n\nfunction selectTranscriptStep(status: AsyncStatus, options: TranscriptOptions): { index?: number; step?: AsyncJobStep; hint?: string } {\n\tconst steps = status.steps ?? [];\n\tlet selectedIndex = validateTranscriptIndex(options.index, steps);\n\tif (selectedIndex === undefined) {\n\t\tif (status.state === \"running\" && typeof status.currentStep === \"number\" && status.currentStep >= 0 && status.currentStep < steps.length) {\n\t\t\tselectedIndex = status.currentStep;\n\t\t} else if (steps.length === 1) {\n\t\t\tselectedIndex = 0;\n\t\t}\n\t}\n\tconst step = selectedIndex !== undefined ? steps[selectedIndex] : undefined;\n\tconst hint = options.index === undefined && steps.length > 1\n\t\t? `Tip: pass index to inspect a specific child transcript (${steps.map((candidate, index) => `${index}=${candidate.agent}`).join(\", \")}).`\n\t\t: undefined;\n\treturn { index: selectedIndex, step, hint };\n}\n\nfunction stepStateLine(mode: SubagentRunMode, index: number | undefined, step: AsyncJobStep | undefined): string | undefined {\n\tif (index === undefined || !step) return undefined;\n\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\tconst parts = [\n\t\t`${mode === \"parallel\" ? \"Agent\" : \"Step\"}: ${index} (${step.agent})`,\n\t\tstep.status,\n\t\tformatActivityFacts(step),\n\t\tmodelThinking,\n\t\tstep.error ? `error: ${step.error}` : undefined,\n\t].filter(Boolean);\n\treturn parts.join(\" | \");\n}\n\nfunction appendKnownArtifacts(lines: string[], input: { outputPaths: string[]; sessionFile?: string; eventsPath?: string; logPath?: string; resultPath?: string }): void {\n\tconst artifacts: string[] = [];\n\tfor (const outputPath of input.outputPaths) artifacts.push(`Output: ${outputPath}`);\n\tif (input.sessionFile) artifacts.push(`Session: ${input.sessionFile}`);\n\tif (input.eventsPath) artifacts.push(`Events: ${input.eventsPath}`);\n\tif (input.logPath) artifacts.push(`Log: ${input.logPath}`);\n\tif (input.resultPath) artifacts.push(`Result: ${input.resultPath}`);\n\tif (!artifacts.length) return;\n\tlines.push(\"Artifacts:\");\n\tfor (const artifact of artifacts) lines.push(` ${artifact}`);\n}\n\nfunction appendTranscriptBody(lines: string[], sourceLabel: string, sourceLines: string[], truncated: boolean): void {\n\tlines.push(`${sourceLabel}${truncated ? \" (tail truncated)\" : \"\"}:`);\n\tif (sourceLines.length === 0) {\n\t\tlines.push(\" (no transcript lines available yet)\");\n\t\treturn;\n\t}\n\tfor (const line of sourceLines) lines.push(` ${line}`);\n}\n\nexport function formatAsyncRunTranscript(status: AsyncStatus, asyncDir: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst selected = selectTranscriptStep(status, options);\n\tconst stepOutputPath = selected.index !== undefined ? path.join(asyncDir, `output-${selected.index}.log`) : undefined;\n\tconst runOutputPath = resolveMaybeRelative(asyncDir, status.outputFile);\n\tconst logPath = path.join(asyncDir, `subagent-log-${status.runId}.md`);\n\tconst outputPaths = selected.index !== undefined\n\t\t? uniqueStrings([stepOutputPath, runOutputPath && stepOutputPath && path.resolve(runOutputPath) === path.resolve(stepOutputPath) ? runOutputPath : undefined])\n\t\t: uniqueStrings([runOutputPath]);\n\tconst sessionFile = selected.index !== undefined ? selected.step?.sessionFile : status.sessionFile;\n\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\n\tconst lines = [\n\t\t`Run: ${status.runId}`,\n\t\t`State: ${status.state}`,\n\t\t`Mode: ${status.mode}`,\n\t\tstepStateLine(status.mode, selected.index, selected.step),\n\t\tselected.hint,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths, sessionFile, eventsPath: fs.existsSync(eventsPath) ? eventsPath : undefined, logPath: fs.existsSync(logPath) ? logPath : undefined });\n\n\tconst warnings: string[] = [];\n\tlet transcriptLines: string[] = [];\n\tlet transcriptSource = \"Transcript tail\";\n\tlet truncated = false;\n\tfor (const outputPath of outputPaths) {\n\t\tconst tail = readContainedTextTail(outputPath, lineLimit, [asyncDir], \"output\");\n\t\tif (tail.error) warnings.push(`Output read failed for ${tail.path}: ${tail.error}`);\n\t\tif (tail.lines.length === 0) continue;\n\t\ttranscriptLines = tail.lines;\n\t\ttranscriptSource = \"Transcript tail\";\n\t\ttruncated = tail.truncated;\n\t\tbreak;\n\t}\n\tif (transcriptLines.length === 0 && selected.step?.recentOutput?.length) {\n\t\ttranscriptLines = selected.step.recentOutput.slice(-lineLimit);\n\t\ttranscriptSource = \"Recent output\";\n\t}\n\tif (transcriptLines.length === 0 && sessionFile) {\n\t\tconst sessionTail = readSessionTranscriptTail(sessionFile, lineLimit, options.sessionRoots ?? []);\n\t\ttranscriptLines = sessionTail.lines;\n\t\twarnings.push(...sessionTail.warnings);\n\t\tif (transcriptLines.length > 0) transcriptSource = \"Session transcript tail\";\n\t}\n\n\tif (warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, transcriptSource, transcriptLines, truncated);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatNestedRunTranscript(run: NestedRunSummary, options: TranscriptOptions = {}): string {\n\tif (run.asyncDir) {\n\t\tconst status = readStatus(run.asyncDir);\n\t\tif (status) return formatAsyncRunTranscript(status, run.asyncDir, options);\n\t}\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`State: ${run.state}`,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\trun.agent ? `Agent: ${run.agent}` : run.agents?.length ? `Agents: ${run.agents.join(\", \")}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile: run.sessionFile });\n\tif (!run.sessionFile) {\n\t\tappendTranscriptBody(lines, \"Transcript tail\", [], false);\n\t\treturn lines.join(\"\\n\");\n\t}\n\tconst sessionTail = readSessionTranscriptTail(run.sessionFile, lineLimit, options.sessionRoots ?? []);\n\tif (sessionTail.warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of sessionTail.warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, `Session transcript tail from ${run.sessionFile}`, sessionTail.lines, false);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatAsyncResultTranscript(data: {\n\tid?: string;\n\trunId?: string;\n\tstate?: string;\n\tsuccess?: boolean;\n\tsummary?: string;\n\toutput?: string;\n\tsessionFile?: string;\n\tagent?: string;\n\texitCode?: number | null;\n\tresults?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }>;\n}, resultPath: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst runId = data.runId ?? data.id ?? path.basename(resultPath, \".json\");\n\tconst children = Array.isArray(data.results)\n\t\t? data.results\n\t\t: data.agent\n\t\t\t? [{ agent: data.agent, output: data.output, summary: data.summary, sessionFile: data.sessionFile, state: data.state, success: data.success, exitCode: data.exitCode }]\n\t\t\t: [];\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && children.length === 1) index = 0;\n\tif (index !== undefined && (index < 0 || index >= children.length)) throw new Error(`Transcript index ${index} is out of range for ${children.length} result child${children.length === 1 ? \"\" : \"ren\"}.`);\n\tconst child = index !== undefined ? children[index] : undefined;\n\tconst output = index !== undefined\n\t\t? child?.output ?? child?.summary ?? (children.length === 1 ? data.output ?? data.summary : undefined) ?? \"\"\n\t\t: data.output ?? data.summary ?? \"\";\n\tconst transcriptLines = output.split(/\\r?\\n/).slice(-lineLimit);\n\tconst sessionFile = child?.sessionFile ?? data.sessionFile;\n\tconst lines = [\n\t\t`Run: ${runId}`,\n\t\t`State: ${data.state ?? (data.success ? \"complete\" : \"failed\")}`,\n\t\tindex !== undefined && child ? `Child: ${index} (${child.agent ?? \"subagent\"})` : undefined,\n\t\tindex === undefined && children.length > 1 ? `Tip: pass index to inspect a specific child transcript (${children.map((candidate, childIndex) => `${childIndex}=${candidate.agent ?? \"subagent\"}`).join(\", \")}).` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile, resultPath });\n\tappendTranscriptBody(lines, \"Result transcript tail\", transcriptLines.filter((line) => line.trim()), output.split(/\\r?\\n/).length > lineLimit);\n\treturn lines.join(\"\\n\");\n}\n"]}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* immediately, flushing any held successes first, so failure and attention
|
|
8
8
|
* signals are never delayed.
|
|
9
9
|
*/
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
10
|
+
import type { ExtensionAPI } from "@ashx-j/lunr";
|
|
11
11
|
import { type CompletionBatchConfig } from "./completion-batcher.ts";
|
|
12
12
|
import { type SubagentState } from "../../shared/types.ts";
|
|
13
13
|
interface ChainStepResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/notify.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EACN,KAAK,qBAAqB,EAI1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAqE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE9H,UAAU,eAAe;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,UAAU,cAAc;IACvB,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,6BAA6B;IAC7C,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAOD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAY7E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CA6B7F;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAahF;AAwBD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAiCpF;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC7C,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAC9C,OAAO,GAAE,6BAAkC,GACzC,IAAI,CA0EN","sourcesContent":["// @ts-nocheck\n/**\n * Subagent completion notifications.\n *\n * Successful (completed) async results are held briefly and emitted as a\n * single grouped message when sibling jobs finish within a short window (see\n * `completion-batcher.ts`). Failed and paused results bypass grouping and fire\n * immediately, flushing any held successes first, so failure and attention\n * signals are never delayed.\n */\n\nimport type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { buildCompletionKey, getGlobalSeenMap, markSeenWithTtl } from \"./completion-dedupe.ts\";\nimport {\n\ttype CompletionBatchConfig,\n\ttype CompletionBatcher,\n\tcreateCompletionBatcher,\n\tresolveCompletionBatchConfig,\n} from \"./completion-batcher.ts\";\nimport { SUBAGENT_ASYNC_COMPLETE_EVENT, SUBAGENT_FOREGROUND_COMPLETE_EVENT, type SubagentState } from \"../../shared/types.ts\";\n\ninterface ChainStepResult {\n\tagent: string;\n\toutput: string;\n\tsuccess: boolean;\n}\n\nexport interface SubagentNotifyDetails {\n\tagent: string;\n\tstatus: \"completed\" | \"failed\" | \"paused\";\n\tsource?: \"async\" | \"foreground\";\n\ttaskInfo?: string;\n\tresultPreview: string;\n\tdurationMs?: number;\n\tsessionLabel?: string;\n\tsessionValue?: string;\n}\n\ninterface SubagentResult {\n\tid: string | null;\n\tsource?: \"async\" | \"foreground\";\n\tagent: string | null;\n\tsuccess: boolean;\n\tsummary: string;\n\texitCode?: number;\n\tstate?: string;\n\ttimestamp: number;\n\tdurationMs?: number;\n\tcwd?: string;\n\tsessionFile?: string;\n\tshareUrl?: string;\n\tgistUrl?: string;\n\tshareError?: string;\n\tresults?: ChainStepResult[];\n\ttaskIndex?: number;\n\ttotalTasks?: number;\n\tsessionId?: string | null;\n}\n\ninterface NotifyTimerApi {\n\tsetTimeout(handler: () => void, delayMs: number): unknown;\n\tclearTimeout(handle: unknown): void;\n}\n\nexport interface RegisterSubagentNotifyOptions {\n\tbatchConfig?: CompletionBatchConfig;\n\ttimers?: NotifyTimerApi;\n\tnow?: () => number;\n}\n\nfunction formatSessionLine(details: SubagentNotifyDetails): string | undefined {\n\tif (!details.sessionValue) return undefined;\n\treturn details.sessionLabel ? `${details.sessionLabel}: ${details.sessionValue}` : details.sessionValue;\n}\n\nexport function formatSingleCompletion(details: SubagentNotifyDetails): string {\n\tconst sessionLine = formatSessionLine(details);\n\tconst taskKind = details.source === \"foreground\" ? \"Detached foreground task\" : \"Background task\";\n\treturn [\n\t\t`${taskKind} ${details.status}: **${details.agent}**${details.taskInfo ?? \"\"}`,\n\t\t\"\",\n\t\tdetails.resultPreview.trim() ? details.resultPreview : \"(no output)\",\n\t\tsessionLine ? \"\" : undefined,\n\t\tsessionLine,\n\t]\n\t\t.filter((line) => line !== undefined)\n\t\t.join(\"\\n\");\n}\n\nexport function parseSubagentNotifyContent(content: string): SubagentNotifyDetails | undefined {\n\tconst lines = content.split(\"\\n\");\n\tconst match = (lines[0] ?? \"\").match(/^(Background task|Detached foreground task) (completed|failed|paused): \\*\\*(.+?)\\*\\*(?:\\s+(\\([^)]*\\)))?$/);\n\tif (!match) return undefined;\n\tconst body = lines.slice(2);\n\tlet sessionIndex = -1;\n\tfor (let i = body.length - 1; i >= 1; i--) {\n\t\tif (body[i - 1]?.trim() === \"\" && /^(Session|Session file|Session share error):\\s+/.test(body[i]!)) {\n\t\t\tsessionIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tconst sessionLine = sessionIndex >= 0 ? body[sessionIndex] : undefined;\n\tconst resultPreview = (sessionIndex >= 0 ? body.slice(0, sessionIndex) : body).join(\"\\n\").trim() || \"(no output)\";\n\tlet sessionLabel: string | undefined;\n\tlet sessionValue: string | undefined;\n\tif (sessionLine) {\n\t\tconst separator = sessionLine.indexOf(\":\");\n\t\tsessionLabel = sessionLine.slice(0, separator).toLowerCase();\n\t\tsessionValue = sessionLine.slice(separator + 1).trim();\n\t}\n\treturn {\n\t\tagent: match[3]!,\n\t\tstatus: match[2] as SubagentNotifyDetails[\"status\"],\n\t\t...(match[1] === \"Detached foreground task\" ? { source: \"foreground\" as const } : {}),\n\t\t...(match[4] ? { taskInfo: match[4] } : {}),\n\t\tresultPreview,\n\t\t...(sessionLabel && sessionValue ? { sessionLabel, sessionValue } : {}),\n\t};\n}\n\nexport function formatGroupedCompletion(details: SubagentNotifyDetails[]): string {\n\tconst header = `Background tasks completed (${details.length}): ${details.map((d) => `**${d.agent}**${d.taskInfo ?? \"\"}`).join(\", \")}`;\n\tconst blocks: string[] = [header, \"\"];\n\tfor (let index = 0; index < details.length; index++) {\n\t\tconst detail = details[index];\n\t\tif (!detail) continue;\n\t\tconst sessionLine = formatSessionLine(detail);\n\t\tblocks.push(`${index + 1}. ${detail.agent}${detail.taskInfo ?? \"\"}`);\n\t\tblocks.push(detail.resultPreview.trim() ? detail.resultPreview : \"(no output)\");\n\t\tif (sessionLine) blocks.push(sessionLine);\n\t\tblocks.push(\"\");\n\t}\n\treturn blocks.join(\"\\n\").trimEnd();\n}\n\nfunction sendCompletion(pi: Pick<ExtensionAPI, \"sendMessage\">, details: SubagentNotifyDetails[]): void {\n\tif (details.length === 0) return;\n\tconst content = details.length === 1\n\t\t? formatSingleCompletion(details[0]!)\n\t\t: formatGroupedCompletion(details);\n\tpi.sendMessage(\n\t\t{\n\t\t\tcustomType: \"subagent-notify\",\n\t\t\tcontent,\n\t\t\tdisplay: true,\n\t\t},\n\t\t{ triggerTurn: true },\n\t);\n}\n\nfunction completionBatchKey(result: SubagentResult): string {\n\tconst sessionId = typeof result.sessionId === \"string\" ? result.sessionId.trim() : \"\";\n\tif (sessionId) return `session:${sessionId}`;\n\tconst cwd = typeof result.cwd === \"string\" ? result.cwd.trim() : \"\";\n\treturn cwd ? `cwd:${cwd}` : \"unknown\";\n}\n\nexport function buildCompletionDetails(result: SubagentResult): SubagentNotifyDetails {\n\tconst agent = result.agent ?? \"unknown\";\n\tconst summary = typeof result.summary === \"string\" ? result.summary : \"\";\n\tconst paused = !result.success && (\n\t\tresult.exitCode === 0\n\t\t|| result.state === \"paused\"\n\t\t|| summary.startsWith(\"Paused after interrupt.\")\n\t);\n\tconst status = paused ? \"paused\" : result.success ? \"completed\" : \"failed\";\n\n\tconst taskInfo =\n\t\tresult.taskIndex !== undefined && result.totalTasks !== undefined\n\t\t\t? ` (${result.taskIndex + 1}/${result.totalTasks})`\n\t\t\t: undefined;\n\n\tconst session =\n\t\tresult.shareUrl\n\t\t\t? { label: \"Session\", value: result.shareUrl }\n\t\t\t: result.shareError\n\t\t\t\t? { label: \"Session share error\", value: result.shareError }\n\t\t\t\t: result.sessionFile\n\t\t\t\t\t? { label: \"Session file\", value: result.sessionFile }\n\t\t\t\t\t: undefined;\n\n\treturn {\n\t\tagent,\n\t\tstatus,\n\t\t...(result.source ? { source: result.source } : {}),\n\t\t...(taskInfo ? { taskInfo } : {}),\n\t\tresultPreview: summary,\n\t\t...(typeof result.durationMs === \"number\" ? { durationMs: result.durationMs } : {}),\n\t\t...(session ? { sessionLabel: session.label, sessionValue: session.value } : {}),\n\t};\n}\n\nexport default function registerSubagentNotify(\n\tpi: ExtensionAPI,\n\tstate: Pick<SubagentState, \"currentSessionId\">,\n\toptions: RegisterSubagentNotifyOptions = {},\n): void {\n\tconst unsubscribeStoreKey = \"__pi_subagents_notify_unsubscribe__\";\n\tconst batcherStoreKey = \"__pi_subagents_notify_batcher__\";\n\tconst globalStore = globalThis as Record<string, unknown>;\n\tconst previousUnsubscribe = globalStore[unsubscribeStoreKey];\n\tif (typeof previousUnsubscribe === \"function\") {\n\t\ttry {\n\t\t\tpreviousUnsubscribe();\n\t\t} catch {\n\t\t\t// Best effort cleanup for stale handlers from an older reload.\n\t\t}\n\t}\n\tconst previousBatcher = globalStore[batcherStoreKey];\n\tif (previousBatcher && typeof (previousBatcher as { dispose?: () => void }).dispose === \"function\") {\n\t\ttry {\n\t\t\t(previousBatcher as { dispose: () => void }).dispose();\n\t\t} catch {\n\t\t\t// Best effort cleanup for a stale batcher from an older reload.\n\t\t}\n\t}\n\n\tconst seen = getGlobalSeenMap(\"__pi_subagents_notify_seen__\");\n\tconst ttlMs = 10 * 60 * 1000;\n\tconst nowFn = options.now ?? Date.now;\n\tconst batchConfig = resolveCompletionBatchConfig(options.batchConfig);\n\tconst batchers = new Map<string, CompletionBatcher<SubagentNotifyDetails>>();\n\tglobalStore[batcherStoreKey] = {\n\t\tdispose() {\n\t\t\tfor (const batcher of batchers.values()) batcher.dispose();\n\t\t\tbatchers.clear();\n\t\t},\n\t};\n\n\tconst handleComplete = (data: unknown) => {\n\t\tconst result = data as SubagentResult;\n\t\tif (typeof result.sessionId !== \"string\" || result.sessionId !== state.currentSessionId) return;\n\t\tconst now = nowFn();\n\t\tconst key = buildCompletionKey(result, \"notify\");\n\t\tif (markSeenWithTtl(seen, key, now, ttlMs)) return;\n\n\t\tconst details = buildCompletionDetails(result);\n\t\tif (result.source === \"foreground\") {\n\t\t\tsendCompletion(pi, [details]);\n\t\t\treturn;\n\t\t}\n\t\tconst batchKey = completionBatchKey(result);\n\t\tlet batcher = batchers.get(batchKey);\n\t\tif (!batcher) {\n\t\t\tbatcher = createCompletionBatcher<SubagentNotifyDetails>({\n\t\t\t\tconfig: batchConfig,\n\t\t\t\temit: (items) => sendCompletion(pi, items),\n\t\t\t\t...(options.timers ? { timers: options.timers } : {}),\n\t\t\t\tnow: nowFn,\n\t\t\t});\n\t\t\tbatchers.set(batchKey, batcher);\n\t\t}\n\t\tif (details.status !== \"completed\") {\n\t\t\t// Failures and paused runs bypass grouping. Flush any held\n\t\t\t// successes for the same owner first so they are not stranded\n\t\t\t// behind this signal, then emit the non-completion result immediately.\n\t\t\tbatcher.flush();\n\t\t\tsendCompletion(pi, [details]);\n\t\t\treturn;\n\t\t}\n\t\tbatcher.push(details);\n\t};\n\n\tconst unsubscribers = [\n\t\tpi.events.on(SUBAGENT_ASYNC_COMPLETE_EVENT, handleComplete),\n\t\tpi.events.on(SUBAGENT_FOREGROUND_COMPLETE_EVENT, handleComplete),\n\t].filter((unsubscribe): unsubscribe is () => void => typeof unsubscribe === \"function\");\n\tglobalStore[unsubscribeStoreKey] = () => {\n\t\tfor (const unsubscribe of unsubscribers) unsubscribe();\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/notify.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EACN,KAAK,qBAAqB,EAI1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAqE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE9H,UAAU,eAAe;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,UAAU,cAAc;IACvB,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,6BAA6B;IAC7C,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAOD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAY7E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CA6B7F;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAahF;AAwBD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAiCpF;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC7C,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAC9C,OAAO,GAAE,6BAAkC,GACzC,IAAI,CA0EN","sourcesContent":["// @ts-nocheck\n/**\n * Subagent completion notifications.\n *\n * Successful (completed) async results are held briefly and emitted as a\n * single grouped message when sibling jobs finish within a short window (see\n * `completion-batcher.ts`). Failed and paused results bypass grouping and fire\n * immediately, flushing any held successes first, so failure and attention\n * signals are never delayed.\n */\n\nimport type { ExtensionAPI } from \"@ashx-j/lunr\";\nimport { buildCompletionKey, getGlobalSeenMap, markSeenWithTtl } from \"./completion-dedupe.ts\";\nimport {\n\ttype CompletionBatchConfig,\n\ttype CompletionBatcher,\n\tcreateCompletionBatcher,\n\tresolveCompletionBatchConfig,\n} from \"./completion-batcher.ts\";\nimport { SUBAGENT_ASYNC_COMPLETE_EVENT, SUBAGENT_FOREGROUND_COMPLETE_EVENT, type SubagentState } from \"../../shared/types.ts\";\n\ninterface ChainStepResult {\n\tagent: string;\n\toutput: string;\n\tsuccess: boolean;\n}\n\nexport interface SubagentNotifyDetails {\n\tagent: string;\n\tstatus: \"completed\" | \"failed\" | \"paused\";\n\tsource?: \"async\" | \"foreground\";\n\ttaskInfo?: string;\n\tresultPreview: string;\n\tdurationMs?: number;\n\tsessionLabel?: string;\n\tsessionValue?: string;\n}\n\ninterface SubagentResult {\n\tid: string | null;\n\tsource?: \"async\" | \"foreground\";\n\tagent: string | null;\n\tsuccess: boolean;\n\tsummary: string;\n\texitCode?: number;\n\tstate?: string;\n\ttimestamp: number;\n\tdurationMs?: number;\n\tcwd?: string;\n\tsessionFile?: string;\n\tshareUrl?: string;\n\tgistUrl?: string;\n\tshareError?: string;\n\tresults?: ChainStepResult[];\n\ttaskIndex?: number;\n\ttotalTasks?: number;\n\tsessionId?: string | null;\n}\n\ninterface NotifyTimerApi {\n\tsetTimeout(handler: () => void, delayMs: number): unknown;\n\tclearTimeout(handle: unknown): void;\n}\n\nexport interface RegisterSubagentNotifyOptions {\n\tbatchConfig?: CompletionBatchConfig;\n\ttimers?: NotifyTimerApi;\n\tnow?: () => number;\n}\n\nfunction formatSessionLine(details: SubagentNotifyDetails): string | undefined {\n\tif (!details.sessionValue) return undefined;\n\treturn details.sessionLabel ? `${details.sessionLabel}: ${details.sessionValue}` : details.sessionValue;\n}\n\nexport function formatSingleCompletion(details: SubagentNotifyDetails): string {\n\tconst sessionLine = formatSessionLine(details);\n\tconst taskKind = details.source === \"foreground\" ? \"Detached foreground task\" : \"Background task\";\n\treturn [\n\t\t`${taskKind} ${details.status}: **${details.agent}**${details.taskInfo ?? \"\"}`,\n\t\t\"\",\n\t\tdetails.resultPreview.trim() ? details.resultPreview : \"(no output)\",\n\t\tsessionLine ? \"\" : undefined,\n\t\tsessionLine,\n\t]\n\t\t.filter((line) => line !== undefined)\n\t\t.join(\"\\n\");\n}\n\nexport function parseSubagentNotifyContent(content: string): SubagentNotifyDetails | undefined {\n\tconst lines = content.split(\"\\n\");\n\tconst match = (lines[0] ?? \"\").match(/^(Background task|Detached foreground task) (completed|failed|paused): \\*\\*(.+?)\\*\\*(?:\\s+(\\([^)]*\\)))?$/);\n\tif (!match) return undefined;\n\tconst body = lines.slice(2);\n\tlet sessionIndex = -1;\n\tfor (let i = body.length - 1; i >= 1; i--) {\n\t\tif (body[i - 1]?.trim() === \"\" && /^(Session|Session file|Session share error):\\s+/.test(body[i]!)) {\n\t\t\tsessionIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tconst sessionLine = sessionIndex >= 0 ? body[sessionIndex] : undefined;\n\tconst resultPreview = (sessionIndex >= 0 ? body.slice(0, sessionIndex) : body).join(\"\\n\").trim() || \"(no output)\";\n\tlet sessionLabel: string | undefined;\n\tlet sessionValue: string | undefined;\n\tif (sessionLine) {\n\t\tconst separator = sessionLine.indexOf(\":\");\n\t\tsessionLabel = sessionLine.slice(0, separator).toLowerCase();\n\t\tsessionValue = sessionLine.slice(separator + 1).trim();\n\t}\n\treturn {\n\t\tagent: match[3]!,\n\t\tstatus: match[2] as SubagentNotifyDetails[\"status\"],\n\t\t...(match[1] === \"Detached foreground task\" ? { source: \"foreground\" as const } : {}),\n\t\t...(match[4] ? { taskInfo: match[4] } : {}),\n\t\tresultPreview,\n\t\t...(sessionLabel && sessionValue ? { sessionLabel, sessionValue } : {}),\n\t};\n}\n\nexport function formatGroupedCompletion(details: SubagentNotifyDetails[]): string {\n\tconst header = `Background tasks completed (${details.length}): ${details.map((d) => `**${d.agent}**${d.taskInfo ?? \"\"}`).join(\", \")}`;\n\tconst blocks: string[] = [header, \"\"];\n\tfor (let index = 0; index < details.length; index++) {\n\t\tconst detail = details[index];\n\t\tif (!detail) continue;\n\t\tconst sessionLine = formatSessionLine(detail);\n\t\tblocks.push(`${index + 1}. ${detail.agent}${detail.taskInfo ?? \"\"}`);\n\t\tblocks.push(detail.resultPreview.trim() ? detail.resultPreview : \"(no output)\");\n\t\tif (sessionLine) blocks.push(sessionLine);\n\t\tblocks.push(\"\");\n\t}\n\treturn blocks.join(\"\\n\").trimEnd();\n}\n\nfunction sendCompletion(pi: Pick<ExtensionAPI, \"sendMessage\">, details: SubagentNotifyDetails[]): void {\n\tif (details.length === 0) return;\n\tconst content = details.length === 1\n\t\t? formatSingleCompletion(details[0]!)\n\t\t: formatGroupedCompletion(details);\n\tpi.sendMessage(\n\t\t{\n\t\t\tcustomType: \"subagent-notify\",\n\t\t\tcontent,\n\t\t\tdisplay: true,\n\t\t},\n\t\t{ triggerTurn: true },\n\t);\n}\n\nfunction completionBatchKey(result: SubagentResult): string {\n\tconst sessionId = typeof result.sessionId === \"string\" ? result.sessionId.trim() : \"\";\n\tif (sessionId) return `session:${sessionId}`;\n\tconst cwd = typeof result.cwd === \"string\" ? result.cwd.trim() : \"\";\n\treturn cwd ? `cwd:${cwd}` : \"unknown\";\n}\n\nexport function buildCompletionDetails(result: SubagentResult): SubagentNotifyDetails {\n\tconst agent = result.agent ?? \"unknown\";\n\tconst summary = typeof result.summary === \"string\" ? result.summary : \"\";\n\tconst paused = !result.success && (\n\t\tresult.exitCode === 0\n\t\t|| result.state === \"paused\"\n\t\t|| summary.startsWith(\"Paused after interrupt.\")\n\t);\n\tconst status = paused ? \"paused\" : result.success ? \"completed\" : \"failed\";\n\n\tconst taskInfo =\n\t\tresult.taskIndex !== undefined && result.totalTasks !== undefined\n\t\t\t? ` (${result.taskIndex + 1}/${result.totalTasks})`\n\t\t\t: undefined;\n\n\tconst session =\n\t\tresult.shareUrl\n\t\t\t? { label: \"Session\", value: result.shareUrl }\n\t\t\t: result.shareError\n\t\t\t\t? { label: \"Session share error\", value: result.shareError }\n\t\t\t\t: result.sessionFile\n\t\t\t\t\t? { label: \"Session file\", value: result.sessionFile }\n\t\t\t\t\t: undefined;\n\n\treturn {\n\t\tagent,\n\t\tstatus,\n\t\t...(result.source ? { source: result.source } : {}),\n\t\t...(taskInfo ? { taskInfo } : {}),\n\t\tresultPreview: summary,\n\t\t...(typeof result.durationMs === \"number\" ? { durationMs: result.durationMs } : {}),\n\t\t...(session ? { sessionLabel: session.label, sessionValue: session.value } : {}),\n\t};\n}\n\nexport default function registerSubagentNotify(\n\tpi: ExtensionAPI,\n\tstate: Pick<SubagentState, \"currentSessionId\">,\n\toptions: RegisterSubagentNotifyOptions = {},\n): void {\n\tconst unsubscribeStoreKey = \"__pi_subagents_notify_unsubscribe__\";\n\tconst batcherStoreKey = \"__pi_subagents_notify_batcher__\";\n\tconst globalStore = globalThis as Record<string, unknown>;\n\tconst previousUnsubscribe = globalStore[unsubscribeStoreKey];\n\tif (typeof previousUnsubscribe === \"function\") {\n\t\ttry {\n\t\t\tpreviousUnsubscribe();\n\t\t} catch {\n\t\t\t// Best effort cleanup for stale handlers from an older reload.\n\t\t}\n\t}\n\tconst previousBatcher = globalStore[batcherStoreKey];\n\tif (previousBatcher && typeof (previousBatcher as { dispose?: () => void }).dispose === \"function\") {\n\t\ttry {\n\t\t\t(previousBatcher as { dispose: () => void }).dispose();\n\t\t} catch {\n\t\t\t// Best effort cleanup for a stale batcher from an older reload.\n\t\t}\n\t}\n\n\tconst seen = getGlobalSeenMap(\"__pi_subagents_notify_seen__\");\n\tconst ttlMs = 10 * 60 * 1000;\n\tconst nowFn = options.now ?? Date.now;\n\tconst batchConfig = resolveCompletionBatchConfig(options.batchConfig);\n\tconst batchers = new Map<string, CompletionBatcher<SubagentNotifyDetails>>();\n\tglobalStore[batcherStoreKey] = {\n\t\tdispose() {\n\t\t\tfor (const batcher of batchers.values()) batcher.dispose();\n\t\t\tbatchers.clear();\n\t\t},\n\t};\n\n\tconst handleComplete = (data: unknown) => {\n\t\tconst result = data as SubagentResult;\n\t\tif (typeof result.sessionId !== \"string\" || result.sessionId !== state.currentSessionId) return;\n\t\tconst now = nowFn();\n\t\tconst key = buildCompletionKey(result, \"notify\");\n\t\tif (markSeenWithTtl(seen, key, now, ttlMs)) return;\n\n\t\tconst details = buildCompletionDetails(result);\n\t\tif (result.source === \"foreground\") {\n\t\t\tsendCompletion(pi, [details]);\n\t\t\treturn;\n\t\t}\n\t\tconst batchKey = completionBatchKey(result);\n\t\tlet batcher = batchers.get(batchKey);\n\t\tif (!batcher) {\n\t\t\tbatcher = createCompletionBatcher<SubagentNotifyDetails>({\n\t\t\t\tconfig: batchConfig,\n\t\t\t\temit: (items) => sendCompletion(pi, items),\n\t\t\t\t...(options.timers ? { timers: options.timers } : {}),\n\t\t\t\tnow: nowFn,\n\t\t\t});\n\t\t\tbatchers.set(batchKey, batcher);\n\t\t}\n\t\tif (details.status !== \"completed\") {\n\t\t\t// Failures and paused runs bypass grouping. Flush any held\n\t\t\t// successes for the same owner first so they are not stranded\n\t\t\t// behind this signal, then emit the non-completion result immediately.\n\t\t\tbatcher.flush();\n\t\t\tsendCompletion(pi, [details]);\n\t\t\treturn;\n\t\t}\n\t\tbatcher.push(details);\n\t};\n\n\tconst unsubscribers = [\n\t\tpi.events.on(SUBAGENT_ASYNC_COMPLETE_EVENT, handleComplete),\n\t\tpi.events.on(SUBAGENT_FOREGROUND_COMPLETE_EVENT, handleComplete),\n\t].filter((unsubscribe): unsubscribe is () => void => typeof unsubscribe === \"function\");\n\tglobalStore[unsubscribeStoreKey] = () => {\n\t\tfor (const unsubscribe of unsubscribers) unsubscribe();\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/notify.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Subagent completion notifications.\n *\n * Successful (completed) async results are held briefly and emitted as a\n * single grouped message when sibling jobs finish within a short window (see\n * `completion-batcher.ts`). Failed and paused results bypass grouping and fire\n * immediately, flushing any held successes first, so failure and attention\n * signals are never delayed.\n */\n\nimport type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { buildCompletionKey, getGlobalSeenMap, markSeenWithTtl } from \"./completion-dedupe.ts\";\nimport {\n\ttype CompletionBatchConfig,\n\ttype CompletionBatcher,\n\tcreateCompletionBatcher,\n\tresolveCompletionBatchConfig,\n} from \"./completion-batcher.ts\";\nimport { SUBAGENT_ASYNC_COMPLETE_EVENT, SUBAGENT_FOREGROUND_COMPLETE_EVENT, type SubagentState } from \"../../shared/types.ts\";\n\ninterface ChainStepResult {\n\tagent: string;\n\toutput: string;\n\tsuccess: boolean;\n}\n\nexport interface SubagentNotifyDetails {\n\tagent: string;\n\tstatus: \"completed\" | \"failed\" | \"paused\";\n\tsource?: \"async\" | \"foreground\";\n\ttaskInfo?: string;\n\tresultPreview: string;\n\tdurationMs?: number;\n\tsessionLabel?: string;\n\tsessionValue?: string;\n}\n\ninterface SubagentResult {\n\tid: string | null;\n\tsource?: \"async\" | \"foreground\";\n\tagent: string | null;\n\tsuccess: boolean;\n\tsummary: string;\n\texitCode?: number;\n\tstate?: string;\n\ttimestamp: number;\n\tdurationMs?: number;\n\tcwd?: string;\n\tsessionFile?: string;\n\tshareUrl?: string;\n\tgistUrl?: string;\n\tshareError?: string;\n\tresults?: ChainStepResult[];\n\ttaskIndex?: number;\n\ttotalTasks?: number;\n\tsessionId?: string | null;\n}\n\ninterface NotifyTimerApi {\n\tsetTimeout(handler: () => void, delayMs: number): unknown;\n\tclearTimeout(handle: unknown): void;\n}\n\nexport interface RegisterSubagentNotifyOptions {\n\tbatchConfig?: CompletionBatchConfig;\n\ttimers?: NotifyTimerApi;\n\tnow?: () => number;\n}\n\nfunction formatSessionLine(details: SubagentNotifyDetails): string | undefined {\n\tif (!details.sessionValue) return undefined;\n\treturn details.sessionLabel ? `${details.sessionLabel}: ${details.sessionValue}` : details.sessionValue;\n}\n\nexport function formatSingleCompletion(details: SubagentNotifyDetails): string {\n\tconst sessionLine = formatSessionLine(details);\n\tconst taskKind = details.source === \"foreground\" ? \"Detached foreground task\" : \"Background task\";\n\treturn [\n\t\t`${taskKind} ${details.status}: **${details.agent}**${details.taskInfo ?? \"\"}`,\n\t\t\"\",\n\t\tdetails.resultPreview.trim() ? details.resultPreview : \"(no output)\",\n\t\tsessionLine ? \"\" : undefined,\n\t\tsessionLine,\n\t]\n\t\t.filter((line) => line !== undefined)\n\t\t.join(\"\\n\");\n}\n\nexport function parseSubagentNotifyContent(content: string): SubagentNotifyDetails | undefined {\n\tconst lines = content.split(\"\\n\");\n\tconst match = (lines[0] ?? \"\").match(/^(Background task|Detached foreground task) (completed|failed|paused): \\*\\*(.+?)\\*\\*(?:\\s+(\\([^)]*\\)))?$/);\n\tif (!match) return undefined;\n\tconst body = lines.slice(2);\n\tlet sessionIndex = -1;\n\tfor (let i = body.length - 1; i >= 1; i--) {\n\t\tif (body[i - 1]?.trim() === \"\" && /^(Session|Session file|Session share error):\\s+/.test(body[i]!)) {\n\t\t\tsessionIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tconst sessionLine = sessionIndex >= 0 ? body[sessionIndex] : undefined;\n\tconst resultPreview = (sessionIndex >= 0 ? body.slice(0, sessionIndex) : body).join(\"\\n\").trim() || \"(no output)\";\n\tlet sessionLabel: string | undefined;\n\tlet sessionValue: string | undefined;\n\tif (sessionLine) {\n\t\tconst separator = sessionLine.indexOf(\":\");\n\t\tsessionLabel = sessionLine.slice(0, separator).toLowerCase();\n\t\tsessionValue = sessionLine.slice(separator + 1).trim();\n\t}\n\treturn {\n\t\tagent: match[3]!,\n\t\tstatus: match[2] as SubagentNotifyDetails[\"status\"],\n\t\t...(match[1] === \"Detached foreground task\" ? { source: \"foreground\" as const } : {}),\n\t\t...(match[4] ? { taskInfo: match[4] } : {}),\n\t\tresultPreview,\n\t\t...(sessionLabel && sessionValue ? { sessionLabel, sessionValue } : {}),\n\t};\n}\n\nexport function formatGroupedCompletion(details: SubagentNotifyDetails[]): string {\n\tconst header = `Background tasks completed (${details.length}): ${details.map((d) => `**${d.agent}**${d.taskInfo ?? \"\"}`).join(\", \")}`;\n\tconst blocks: string[] = [header, \"\"];\n\tfor (let index = 0; index < details.length; index++) {\n\t\tconst detail = details[index];\n\t\tif (!detail) continue;\n\t\tconst sessionLine = formatSessionLine(detail);\n\t\tblocks.push(`${index + 1}. ${detail.agent}${detail.taskInfo ?? \"\"}`);\n\t\tblocks.push(detail.resultPreview.trim() ? detail.resultPreview : \"(no output)\");\n\t\tif (sessionLine) blocks.push(sessionLine);\n\t\tblocks.push(\"\");\n\t}\n\treturn blocks.join(\"\\n\").trimEnd();\n}\n\nfunction sendCompletion(pi: Pick<ExtensionAPI, \"sendMessage\">, details: SubagentNotifyDetails[]): void {\n\tif (details.length === 0) return;\n\tconst content = details.length === 1\n\t\t? formatSingleCompletion(details[0]!)\n\t\t: formatGroupedCompletion(details);\n\tpi.sendMessage(\n\t\t{\n\t\t\tcustomType: \"subagent-notify\",\n\t\t\tcontent,\n\t\t\tdisplay: true,\n\t\t},\n\t\t{ triggerTurn: true },\n\t);\n}\n\nfunction completionBatchKey(result: SubagentResult): string {\n\tconst sessionId = typeof result.sessionId === \"string\" ? result.sessionId.trim() : \"\";\n\tif (sessionId) return `session:${sessionId}`;\n\tconst cwd = typeof result.cwd === \"string\" ? result.cwd.trim() : \"\";\n\treturn cwd ? `cwd:${cwd}` : \"unknown\";\n}\n\nexport function buildCompletionDetails(result: SubagentResult): SubagentNotifyDetails {\n\tconst agent = result.agent ?? \"unknown\";\n\tconst summary = typeof result.summary === \"string\" ? result.summary : \"\";\n\tconst paused = !result.success && (\n\t\tresult.exitCode === 0\n\t\t|| result.state === \"paused\"\n\t\t|| summary.startsWith(\"Paused after interrupt.\")\n\t);\n\tconst status = paused ? \"paused\" : result.success ? \"completed\" : \"failed\";\n\n\tconst taskInfo =\n\t\tresult.taskIndex !== undefined && result.totalTasks !== undefined\n\t\t\t? ` (${result.taskIndex + 1}/${result.totalTasks})`\n\t\t\t: undefined;\n\n\tconst session =\n\t\tresult.shareUrl\n\t\t\t? { label: \"Session\", value: result.shareUrl }\n\t\t\t: result.shareError\n\t\t\t\t? { label: \"Session share error\", value: result.shareError }\n\t\t\t\t: result.sessionFile\n\t\t\t\t\t? { label: \"Session file\", value: result.sessionFile }\n\t\t\t\t\t: undefined;\n\n\treturn {\n\t\tagent,\n\t\tstatus,\n\t\t...(result.source ? { source: result.source } : {}),\n\t\t...(taskInfo ? { taskInfo } : {}),\n\t\tresultPreview: summary,\n\t\t...(typeof result.durationMs === \"number\" ? { durationMs: result.durationMs } : {}),\n\t\t...(session ? { sessionLabel: session.label, sessionValue: session.value } : {}),\n\t};\n}\n\nexport default function registerSubagentNotify(\n\tpi: ExtensionAPI,\n\tstate: Pick<SubagentState, \"currentSessionId\">,\n\toptions: RegisterSubagentNotifyOptions = {},\n): void {\n\tconst unsubscribeStoreKey = \"__pi_subagents_notify_unsubscribe__\";\n\tconst batcherStoreKey = \"__pi_subagents_notify_batcher__\";\n\tconst globalStore = globalThis as Record<string, unknown>;\n\tconst previousUnsubscribe = globalStore[unsubscribeStoreKey];\n\tif (typeof previousUnsubscribe === \"function\") {\n\t\ttry {\n\t\t\tpreviousUnsubscribe();\n\t\t} catch {\n\t\t\t// Best effort cleanup for stale handlers from an older reload.\n\t\t}\n\t}\n\tconst previousBatcher = globalStore[batcherStoreKey];\n\tif (previousBatcher && typeof (previousBatcher as { dispose?: () => void }).dispose === \"function\") {\n\t\ttry {\n\t\t\t(previousBatcher as { dispose: () => void }).dispose();\n\t\t} catch {\n\t\t\t// Best effort cleanup for a stale batcher from an older reload.\n\t\t}\n\t}\n\n\tconst seen = getGlobalSeenMap(\"__pi_subagents_notify_seen__\");\n\tconst ttlMs = 10 * 60 * 1000;\n\tconst nowFn = options.now ?? Date.now;\n\tconst batchConfig = resolveCompletionBatchConfig(options.batchConfig);\n\tconst batchers = new Map<string, CompletionBatcher<SubagentNotifyDetails>>();\n\tglobalStore[batcherStoreKey] = {\n\t\tdispose() {\n\t\t\tfor (const batcher of batchers.values()) batcher.dispose();\n\t\t\tbatchers.clear();\n\t\t},\n\t};\n\n\tconst handleComplete = (data: unknown) => {\n\t\tconst result = data as SubagentResult;\n\t\tif (typeof result.sessionId !== \"string\" || result.sessionId !== state.currentSessionId) return;\n\t\tconst now = nowFn();\n\t\tconst key = buildCompletionKey(result, \"notify\");\n\t\tif (markSeenWithTtl(seen, key, now, ttlMs)) return;\n\n\t\tconst details = buildCompletionDetails(result);\n\t\tif (result.source === \"foreground\") {\n\t\t\tsendCompletion(pi, [details]);\n\t\t\treturn;\n\t\t}\n\t\tconst batchKey = completionBatchKey(result);\n\t\tlet batcher = batchers.get(batchKey);\n\t\tif (!batcher) {\n\t\t\tbatcher = createCompletionBatcher<SubagentNotifyDetails>({\n\t\t\t\tconfig: batchConfig,\n\t\t\t\temit: (items) => sendCompletion(pi, items),\n\t\t\t\t...(options.timers ? { timers: options.timers } : {}),\n\t\t\t\tnow: nowFn,\n\t\t\t});\n\t\t\tbatchers.set(batchKey, batcher);\n\t\t}\n\t\tif (details.status !== \"completed\") {\n\t\t\t// Failures and paused runs bypass grouping. Flush any held\n\t\t\t// successes for the same owner first so they are not stranded\n\t\t\t// behind this signal, then emit the non-completion result immediately.\n\t\t\tbatcher.flush();\n\t\t\tsendCompletion(pi, [details]);\n\t\t\treturn;\n\t\t}\n\t\tbatcher.push(details);\n\t};\n\n\tconst unsubscribers = [\n\t\tpi.events.on(SUBAGENT_ASYNC_COMPLETE_EVENT, handleComplete),\n\t\tpi.events.on(SUBAGENT_FOREGROUND_COMPLETE_EVENT, handleComplete),\n\t].filter((unsubscribe): unsubscribe is () => void => typeof unsubscribe === \"function\");\n\tglobalStore[unsubscribeStoreKey] = () => {\n\t\tfor (const unsubscribe of unsubscribers) unsubscribe();\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/notify.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Subagent completion notifications.\n *\n * Successful (completed) async results are held briefly and emitted as a\n * single grouped message when sibling jobs finish within a short window (see\n * `completion-batcher.ts`). Failed and paused results bypass grouping and fire\n * immediately, flushing any held successes first, so failure and attention\n * signals are never delayed.\n */\n\nimport type { ExtensionAPI } from \"@ashx-j/lunr\";\nimport { buildCompletionKey, getGlobalSeenMap, markSeenWithTtl } from \"./completion-dedupe.ts\";\nimport {\n\ttype CompletionBatchConfig,\n\ttype CompletionBatcher,\n\tcreateCompletionBatcher,\n\tresolveCompletionBatchConfig,\n} from \"./completion-batcher.ts\";\nimport { SUBAGENT_ASYNC_COMPLETE_EVENT, SUBAGENT_FOREGROUND_COMPLETE_EVENT, type SubagentState } from \"../../shared/types.ts\";\n\ninterface ChainStepResult {\n\tagent: string;\n\toutput: string;\n\tsuccess: boolean;\n}\n\nexport interface SubagentNotifyDetails {\n\tagent: string;\n\tstatus: \"completed\" | \"failed\" | \"paused\";\n\tsource?: \"async\" | \"foreground\";\n\ttaskInfo?: string;\n\tresultPreview: string;\n\tdurationMs?: number;\n\tsessionLabel?: string;\n\tsessionValue?: string;\n}\n\ninterface SubagentResult {\n\tid: string | null;\n\tsource?: \"async\" | \"foreground\";\n\tagent: string | null;\n\tsuccess: boolean;\n\tsummary: string;\n\texitCode?: number;\n\tstate?: string;\n\ttimestamp: number;\n\tdurationMs?: number;\n\tcwd?: string;\n\tsessionFile?: string;\n\tshareUrl?: string;\n\tgistUrl?: string;\n\tshareError?: string;\n\tresults?: ChainStepResult[];\n\ttaskIndex?: number;\n\ttotalTasks?: number;\n\tsessionId?: string | null;\n}\n\ninterface NotifyTimerApi {\n\tsetTimeout(handler: () => void, delayMs: number): unknown;\n\tclearTimeout(handle: unknown): void;\n}\n\nexport interface RegisterSubagentNotifyOptions {\n\tbatchConfig?: CompletionBatchConfig;\n\ttimers?: NotifyTimerApi;\n\tnow?: () => number;\n}\n\nfunction formatSessionLine(details: SubagentNotifyDetails): string | undefined {\n\tif (!details.sessionValue) return undefined;\n\treturn details.sessionLabel ? `${details.sessionLabel}: ${details.sessionValue}` : details.sessionValue;\n}\n\nexport function formatSingleCompletion(details: SubagentNotifyDetails): string {\n\tconst sessionLine = formatSessionLine(details);\n\tconst taskKind = details.source === \"foreground\" ? \"Detached foreground task\" : \"Background task\";\n\treturn [\n\t\t`${taskKind} ${details.status}: **${details.agent}**${details.taskInfo ?? \"\"}`,\n\t\t\"\",\n\t\tdetails.resultPreview.trim() ? details.resultPreview : \"(no output)\",\n\t\tsessionLine ? \"\" : undefined,\n\t\tsessionLine,\n\t]\n\t\t.filter((line) => line !== undefined)\n\t\t.join(\"\\n\");\n}\n\nexport function parseSubagentNotifyContent(content: string): SubagentNotifyDetails | undefined {\n\tconst lines = content.split(\"\\n\");\n\tconst match = (lines[0] ?? \"\").match(/^(Background task|Detached foreground task) (completed|failed|paused): \\*\\*(.+?)\\*\\*(?:\\s+(\\([^)]*\\)))?$/);\n\tif (!match) return undefined;\n\tconst body = lines.slice(2);\n\tlet sessionIndex = -1;\n\tfor (let i = body.length - 1; i >= 1; i--) {\n\t\tif (body[i - 1]?.trim() === \"\" && /^(Session|Session file|Session share error):\\s+/.test(body[i]!)) {\n\t\t\tsessionIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tconst sessionLine = sessionIndex >= 0 ? body[sessionIndex] : undefined;\n\tconst resultPreview = (sessionIndex >= 0 ? body.slice(0, sessionIndex) : body).join(\"\\n\").trim() || \"(no output)\";\n\tlet sessionLabel: string | undefined;\n\tlet sessionValue: string | undefined;\n\tif (sessionLine) {\n\t\tconst separator = sessionLine.indexOf(\":\");\n\t\tsessionLabel = sessionLine.slice(0, separator).toLowerCase();\n\t\tsessionValue = sessionLine.slice(separator + 1).trim();\n\t}\n\treturn {\n\t\tagent: match[3]!,\n\t\tstatus: match[2] as SubagentNotifyDetails[\"status\"],\n\t\t...(match[1] === \"Detached foreground task\" ? { source: \"foreground\" as const } : {}),\n\t\t...(match[4] ? { taskInfo: match[4] } : {}),\n\t\tresultPreview,\n\t\t...(sessionLabel && sessionValue ? { sessionLabel, sessionValue } : {}),\n\t};\n}\n\nexport function formatGroupedCompletion(details: SubagentNotifyDetails[]): string {\n\tconst header = `Background tasks completed (${details.length}): ${details.map((d) => `**${d.agent}**${d.taskInfo ?? \"\"}`).join(\", \")}`;\n\tconst blocks: string[] = [header, \"\"];\n\tfor (let index = 0; index < details.length; index++) {\n\t\tconst detail = details[index];\n\t\tif (!detail) continue;\n\t\tconst sessionLine = formatSessionLine(detail);\n\t\tblocks.push(`${index + 1}. ${detail.agent}${detail.taskInfo ?? \"\"}`);\n\t\tblocks.push(detail.resultPreview.trim() ? detail.resultPreview : \"(no output)\");\n\t\tif (sessionLine) blocks.push(sessionLine);\n\t\tblocks.push(\"\");\n\t}\n\treturn blocks.join(\"\\n\").trimEnd();\n}\n\nfunction sendCompletion(pi: Pick<ExtensionAPI, \"sendMessage\">, details: SubagentNotifyDetails[]): void {\n\tif (details.length === 0) return;\n\tconst content = details.length === 1\n\t\t? formatSingleCompletion(details[0]!)\n\t\t: formatGroupedCompletion(details);\n\tpi.sendMessage(\n\t\t{\n\t\t\tcustomType: \"subagent-notify\",\n\t\t\tcontent,\n\t\t\tdisplay: true,\n\t\t},\n\t\t{ triggerTurn: true },\n\t);\n}\n\nfunction completionBatchKey(result: SubagentResult): string {\n\tconst sessionId = typeof result.sessionId === \"string\" ? result.sessionId.trim() : \"\";\n\tif (sessionId) return `session:${sessionId}`;\n\tconst cwd = typeof result.cwd === \"string\" ? result.cwd.trim() : \"\";\n\treturn cwd ? `cwd:${cwd}` : \"unknown\";\n}\n\nexport function buildCompletionDetails(result: SubagentResult): SubagentNotifyDetails {\n\tconst agent = result.agent ?? \"unknown\";\n\tconst summary = typeof result.summary === \"string\" ? result.summary : \"\";\n\tconst paused = !result.success && (\n\t\tresult.exitCode === 0\n\t\t|| result.state === \"paused\"\n\t\t|| summary.startsWith(\"Paused after interrupt.\")\n\t);\n\tconst status = paused ? \"paused\" : result.success ? \"completed\" : \"failed\";\n\n\tconst taskInfo =\n\t\tresult.taskIndex !== undefined && result.totalTasks !== undefined\n\t\t\t? ` (${result.taskIndex + 1}/${result.totalTasks})`\n\t\t\t: undefined;\n\n\tconst session =\n\t\tresult.shareUrl\n\t\t\t? { label: \"Session\", value: result.shareUrl }\n\t\t\t: result.shareError\n\t\t\t\t? { label: \"Session share error\", value: result.shareError }\n\t\t\t\t: result.sessionFile\n\t\t\t\t\t? { label: \"Session file\", value: result.sessionFile }\n\t\t\t\t\t: undefined;\n\n\treturn {\n\t\tagent,\n\t\tstatus,\n\t\t...(result.source ? { source: result.source } : {}),\n\t\t...(taskInfo ? { taskInfo } : {}),\n\t\tresultPreview: summary,\n\t\t...(typeof result.durationMs === \"number\" ? { durationMs: result.durationMs } : {}),\n\t\t...(session ? { sessionLabel: session.label, sessionValue: session.value } : {}),\n\t};\n}\n\nexport default function registerSubagentNotify(\n\tpi: ExtensionAPI,\n\tstate: Pick<SubagentState, \"currentSessionId\">,\n\toptions: RegisterSubagentNotifyOptions = {},\n): void {\n\tconst unsubscribeStoreKey = \"__pi_subagents_notify_unsubscribe__\";\n\tconst batcherStoreKey = \"__pi_subagents_notify_batcher__\";\n\tconst globalStore = globalThis as Record<string, unknown>;\n\tconst previousUnsubscribe = globalStore[unsubscribeStoreKey];\n\tif (typeof previousUnsubscribe === \"function\") {\n\t\ttry {\n\t\t\tpreviousUnsubscribe();\n\t\t} catch {\n\t\t\t// Best effort cleanup for stale handlers from an older reload.\n\t\t}\n\t}\n\tconst previousBatcher = globalStore[batcherStoreKey];\n\tif (previousBatcher && typeof (previousBatcher as { dispose?: () => void }).dispose === \"function\") {\n\t\ttry {\n\t\t\t(previousBatcher as { dispose: () => void }).dispose();\n\t\t} catch {\n\t\t\t// Best effort cleanup for a stale batcher from an older reload.\n\t\t}\n\t}\n\n\tconst seen = getGlobalSeenMap(\"__pi_subagents_notify_seen__\");\n\tconst ttlMs = 10 * 60 * 1000;\n\tconst nowFn = options.now ?? Date.now;\n\tconst batchConfig = resolveCompletionBatchConfig(options.batchConfig);\n\tconst batchers = new Map<string, CompletionBatcher<SubagentNotifyDetails>>();\n\tglobalStore[batcherStoreKey] = {\n\t\tdispose() {\n\t\t\tfor (const batcher of batchers.values()) batcher.dispose();\n\t\t\tbatchers.clear();\n\t\t},\n\t};\n\n\tconst handleComplete = (data: unknown) => {\n\t\tconst result = data as SubagentResult;\n\t\tif (typeof result.sessionId !== \"string\" || result.sessionId !== state.currentSessionId) return;\n\t\tconst now = nowFn();\n\t\tconst key = buildCompletionKey(result, \"notify\");\n\t\tif (markSeenWithTtl(seen, key, now, ttlMs)) return;\n\n\t\tconst details = buildCompletionDetails(result);\n\t\tif (result.source === \"foreground\") {\n\t\t\tsendCompletion(pi, [details]);\n\t\t\treturn;\n\t\t}\n\t\tconst batchKey = completionBatchKey(result);\n\t\tlet batcher = batchers.get(batchKey);\n\t\tif (!batcher) {\n\t\t\tbatcher = createCompletionBatcher<SubagentNotifyDetails>({\n\t\t\t\tconfig: batchConfig,\n\t\t\t\temit: (items) => sendCompletion(pi, items),\n\t\t\t\t...(options.timers ? { timers: options.timers } : {}),\n\t\t\t\tnow: nowFn,\n\t\t\t});\n\t\t\tbatchers.set(batchKey, batcher);\n\t\t}\n\t\tif (details.status !== \"completed\") {\n\t\t\t// Failures and paused runs bypass grouping. Flush any held\n\t\t\t// successes for the same owner first so they are not stranded\n\t\t\t// behind this signal, then emit the non-completion result immediately.\n\t\t\tbatcher.flush();\n\t\t\tsendCompletion(pi, [details]);\n\t\t\treturn;\n\t\t}\n\t\tbatcher.push(details);\n\t};\n\n\tconst unsubscribers = [\n\t\tpi.events.on(SUBAGENT_ASYNC_COMPLETE_EVENT, handleComplete),\n\t\tpi.events.on(SUBAGENT_FOREGROUND_COMPLETE_EVENT, handleComplete),\n\t].filter((unsubscribe): unsubscribe is () => void => typeof unsubscribe === \"function\");\n\tglobalStore[unsubscribeStoreKey] = () => {\n\t\tfor (const unsubscribe of unsubscribers) unsubscribe();\n\t};\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentToolResult } from "@
|
|
1
|
+
import type { AgentToolResult } from "@ashx-j/lunr-agent";
|
|
2
2
|
import { type Details, type SubagentState } from "../../shared/types.ts";
|
|
3
3
|
import { type NestedRunResolutionScope } from "../shared/nested-events.ts";
|
|
4
4
|
interface RunStatusParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-status.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/run-status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMrE,OAAO,EAA4C,KAAK,OAAO,EAAwE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMzL,OAAO,EAAqF,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE9J,UAAU,eAAe;IACxB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAkKD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE,aAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,CAqPjH","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport { formatAsyncRunList, formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns } from \"./async-status.ts\";\nimport { formatAsyncResultTranscript, formatAsyncRunTranscript, formatNestedRunTranscript, inspectSubagentFleet } from \"./fleet-view.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatModelThinking } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport { ASYNC_DIR, RESULTS_DIR, type AsyncStatus, type Details, type ForegroundResumeRun, type NestedRunSummary, type SteeringStatus, type SubagentState } from \"../../shared/types.ts\";\nimport { resolveSubagentIntercomTarget } from \"../../intercom/intercom-bridge.ts\";\nimport { resolveAsyncRunLocation } from \"./async-resume.ts\";\nimport { resolveSubagentRunId } from \"./run-id-resolver.ts\";\nimport { flatToLogicalStepIndex, normalizeParallelGroups } from \"./parallel-groups.ts\";\nimport { reconcileAsyncRun, reconcileNestedAsyncDescendants } from \"./stale-run-reconciler.ts\";\nimport { attachRootChildrenToSteps, findNestedRouteForRootId, projectNestedRegistryForRoot, type NestedRunResolutionScope } from \"../shared/nested-events.ts\";\n\ninterface RunStatusParams {\n\taction?: \"status\";\n\tid?: string;\n\trunId?: string;\n\tdir?: string;\n\tindex?: number;\n\tview?: \"fleet\" | \"transcript\";\n\tlines?: number;\n}\n\ninterface RunStatusDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tnested?: NestedRunResolutionScope;\n\tsessionRoots?: string[];\n}\n\nfunction hasExistingSessionFile(value: unknown): value is string {\n\treturn typeof value === \"string\" && fs.existsSync(value);\n}\n\nfunction formatResumeGuidance(runId: string | undefined, children: Array<{ agent?: unknown; sessionFile?: unknown }>, fallbackSessionFile?: unknown, options: { stopped?: boolean } = {}): string {\n\tif (options.stopped) return \"Resume: unavailable; stopped runs are not resumable. Start a new run instead.\";\n\tconst knownChildren = children\n\t\t.map((child, index) => ({ child, index }))\n\t\t.filter(({ child }) => typeof child.agent === \"string\");\n\tif (!runId || knownChildren.length === 0) return \"Resume: unavailable; no child session file was persisted.\";\n\tconst singleSessionFile = knownChildren[0]?.child.sessionFile ?? fallbackSessionFile;\n\tif (children.length === 1 && knownChildren.length === 1 && hasExistingSessionFile(singleSessionFile)) {\n\t\treturn `Revive: subagent({ action: \"resume\", id: \"${runId}\", message: \"...\" })`;\n\t}\n\tconst childWithSession = knownChildren.find(({ child }) => hasExistingSessionFile(child.sessionFile));\n\tif (childWithSession) {\n\t\treturn `Revive child: subagent({ action: \"resume\", id: \"${runId}\", index: ${childWithSession.index}, message: \"...\" })`;\n\t}\n\treturn \"Resume: unavailable; no child session file was persisted.\";\n}\n\nfunction stepLineLabel(status: AsyncStatus, index: number): string {\n\tconst steps = status.steps ?? [];\n\tif (status.mode === \"parallel\") return `Agent ${index + 1}/${steps.length || 1}`;\n\tif (status.mode === \"chain\") {\n\t\tconst chainStepCount = status.chainStepCount ?? (steps.length || 1);\n\t\tconst groups = normalizeParallelGroups(status.parallelGroups, steps.length, chainStepCount);\n\t\tconst group = groups.find((candidate) => index >= candidate.start && index < candidate.start + candidate.count);\n\t\tif (group) return `Step ${group.stepIndex + 1}/${chainStepCount} Agent ${index - group.start + 1}/${group.count}`;\n\t\treturn `Step ${flatToLogicalStepIndex(index, chainStepCount, groups) + 1}/${chainStepCount}`;\n\t}\n\treturn `Step ${index + 1}`;\n}\n\nfunction nestedRunDisplayName(run: NestedRunSummary): string {\n\tif (run.agent) return run.agent;\n\tif (run.agents?.length) return run.agents.join(\", \");\n\treturn run.id;\n}\n\nfunction formatSteeringSummary(input: { steering?: SteeringStatus }): string | undefined {\n\tconst steering = input.steering;\n\tif (!steering || steering.requested === 0) return undefined;\n\tconst lateAcknowledgments = steering.recent.reduce((count, request) => count + request.targets.filter((target) => target.lateDeliveredAt !== undefined).length, 0);\n\treturn `${steering.requested} requested, ${steering.scheduled} scheduled, ${steering.pending} pending, ${steering.delivered} delivered, ${steering.failed} failed, ${steering.recovered} recovered${lateAcknowledgments ? `, ${lateAcknowledgments} late acknowledged` : \"\"}`;\n}\n\nfunction rememberedForegroundChildOutput(child: ForegroundResumeRun[\"children\"][number]): string {\n\tconst outputPath = child.artifactPaths?.outputPath ?? child.savedOutputPath;\n\tif (outputPath && fs.existsSync(outputPath)) {\n\t\ttry {\n\t\t\tconst artifactOutput = fs.readFileSync(outputPath, \"utf-8\").trim();\n\t\t\tif (artifactOutput) return artifactOutput;\n\t\t} catch {\n\t\t\t// Fall back to the remembered snapshot below.\n\t\t}\n\t}\n\treturn child.finalOutput ?? \"\";\n}\n\nfunction formatRememberedForegroundStatus(run: ForegroundResumeRun): string {\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t\"State: remembered foreground\",\n\t\t`Mode: ${run.mode}`,\n\t\t`Updated: ${new Date(run.updatedAt).toISOString()}`,\n\t\t`Cwd: ${run.cwd}`,\n\t];\n\tfor (const child of run.children) {\n\t\tconst output = rememberedForegroundChildOutput(child).trim().split(/\\r?\\n/).find((line) => line.trim());\n\t\tconst parts = [\n\t\t\t`${child.index + 1}. ${child.agent} ${child.status}`,\n\t\t\tchild.exitCode !== undefined ? `exit ${child.exitCode}` : undefined,\n\t\t\tchild.detachedReason ? `detached: ${child.detachedReason}` : undefined,\n\t\t\tchild.acceptance ? `acceptance: ${child.acceptance.status}` : undefined,\n\t\t\tchild.error ? `error: ${child.error}` : undefined,\n\t\t\toutput ? `output: ${output.slice(0, 160)}` : undefined,\n\t\t].filter(Boolean);\n\t\tlines.push(parts.join(\", \"));\n\t\tif (child.sessionFile) lines.push(` Session: ${child.sessionFile}`);\n\t\tif (child.transcriptPath) lines.push(` Transcript: ${child.transcriptPath}`);\n\t\tif (child.artifactPaths?.outputPath) lines.push(` Output: ${child.artifactPaths.outputPath}`);\n\t\tif (child.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath) lines.push(` Saved output: ${child.savedOutputPath}`);\n\t\tif (child.outputSaveError) lines.push(` Output warning: ${child.outputSaveError}`);\n\t\tif (child.transcriptError) lines.push(` Transcript warning: ${child.transcriptError}`);\n\t}\n\tlines.push(\"\", `Status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\tif (run.children.length === 1) lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", view: \"transcript\" })`);\n\telse lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", index: 0, view: \"transcript\" })`);\n\tconst detached = run.children.some((child) => child.status === \"detached\");\n\tconst resumable = run.children.find((child) => hasExistingSessionFile(child.sessionFile));\n\tif (detached) {\n\t\tlines.push(`Recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t} else if (resumable) {\n\t\tlines.push(run.children.length === 1\n\t\t\t? `Revive: subagent({ action: \"resume\", id: \"${run.runId}\", message: \"...\" })`\n\t\t\t: `Revive child: subagent({ action: \"resume\", id: \"${run.runId}\", index: ${resumable.index}, message: \"...\" })`);\n\t} else {\n\t\tlines.push(\"Resume: unavailable; no child session file was persisted.\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatRememberedForegroundTranscript(run: ForegroundResumeRun, options: { index?: number; lines?: number }): string {\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && run.children.length === 1) index = 0;\n\tif (index === undefined) return `Transcript view requires index for foreground run '${run.runId}' with ${run.children.length} children.`;\n\tif (index < 0 || index >= run.children.length) throw new Error(`Transcript index ${index} is out of range for ${run.children.length} foreground children.`);\n\tconst child = run.children[index]!;\n\tconst lineLimit = Math.max(1, Math.min(options.lines ?? 80, 1000));\n\tconst outputLines = rememberedForegroundChildOutput(child).split(/\\r?\\n/).filter((line) => line.trim()).slice(-lineLimit);\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t`State: ${child.status}`,\n\t\t`Child: ${index} (${child.agent})`,\n\t\tchild.sessionFile ? `Session: ${child.sessionFile}` : undefined,\n\t\tchild.transcriptPath ? `Transcript: ${child.transcriptPath}` : undefined,\n\t\tchild.artifactPaths?.outputPath ? `Output: ${child.artifactPaths.outputPath}` : undefined,\n\t\tchild.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath ? `Saved output: ${child.savedOutputPath}` : undefined,\n\t\tchild.outputSaveError ? `Output warning: ${child.outputSaveError}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tlines.push(\"Result transcript tail:\");\n\tif (outputLines.length === 0) lines.push(\" (no recovered final output available yet)\");\n\telse for (const line of outputLines) lines.push(` ${line}`);\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatNestedExactStatus(rootRunId: string, run: NestedRunSummary): string {\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`Root: ${rootRunId}`,\n\t\t`Parent: ${run.parentRunId}${run.parentStepIndex !== undefined ? ` step ${run.parentStepIndex + 1}` : \"\"}`,\n\t\t`State: ${run.state}`,\n\t\trun.activityState || run.lastActivityAt ? `Activity: ${formatActivityLabel(run.lastActivityAt, run.activityState)}` : undefined,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\t`Agent: ${nestedRunDisplayName(run)}`,\n\t\trun.currentStep !== undefined ? `Progress: step ${run.currentStep + 1}/${run.chainStepCount ?? run.steps?.length ?? 1}` : undefined,\n\t\trun.turnBudget ? `Turn budget: ${run.turnBudget.turnCount}/${run.turnBudget.maxTurns}+${run.turnBudget.graceTurns} (${run.turnBudget.outcome})` : undefined,\n\t\trun.asyncDir ? `Dir: ${run.asyncDir}` : undefined,\n\t\trun.sessionFile ? `Session: ${run.sessionFile}` : undefined,\n\t\trun.error ? `Error: ${run.error}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tif (run.path.length) {\n\t\tlines.push(`Path: ${run.path.map((part) => `${part.runId}${part.stepIndex !== undefined ? `:${part.stepIndex + 1}` : \"\"}${part.agent ? `:${part.agent}` : \"\"}`).join(\" > \")} > ${run.id}`);\n\t}\n\tif (run.steps?.length) {\n\t\tlines.push(\"Steps:\");\n\t\tfor (const [index, step] of run.steps.entries()) {\n\t\t\tconst activity = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\tconst budget = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\tlines.push(` ${index + 1}. ${step.agent} ${step.status}${activity ? `, ${activity}` : \"\"}${budget}${step.error ? `, error: ${step.error}` : \"\"}`);\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true }));\n\t\t}\n\t}\n\tlines.push(...formatNestedRunStatusLines(run.children, { indent: \" \", commandHints: true }));\n\tlines.push(\"Commands:\", ` Status: subagent({ action: \"status\", id: \"${run.id}\" })`, ` Interrupt: subagent({ action: \"interrupt\", id: \"${run.id}\" })`, ` Resume: subagent({ action: \"resume\", id: \"${run.id}\", message: \"...\" })`, ` Steer: subagent({ action: \"steer\", id: \"${run.id}\", message: \"...\" })`, ` Root status: subagent({ action: \"status\", id: \"${rootRunId}\" })`);\n\treturn lines.join(\"\\n\");\n}\n\nexport function inspectSubagentStatus(params: RunStatusParams, deps: RunStatusDeps = {}): AgentToolResult<Details> {\n\tconst asyncDirRoot = deps.asyncDirRoot ?? ASYNC_DIR;\n\tconst resultsDir = deps.resultsDir ?? RESULTS_DIR;\n\tconst currentSessionId = deps.state?.currentSessionId ?? undefined;\n\tif (params.view && params.view !== \"fleet\" && params.view !== \"transcript\") {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Unknown status view: ${params.view}. Valid: fleet, transcript.` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tif (params.view === \"fleet\") {\n\t\treturn inspectSubagentFleet(params, { asyncDirRoot, resultsDir, kill: deps.kill, now: deps.now, state: deps.state, childSafe: Boolean(deps.nested) });\n\t}\n\tif (!params.id && !params.runId && !params.dir) {\n\t\tif (deps.nested) {\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent status requires an id when no foreground run is active.\" }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst runs = listAsyncRuns(asyncDirRoot, { states: [\"queued\", \"running\"], sessionId: currentSessionId, resultsDir, kill: deps.kill, now: deps.now });\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (runs.length === 1) return inspectSubagentStatus({ ...params, id: runs[0]!.id }, deps);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: runs.length === 0 ? \"No active async run transcript is available.\" : `Transcript view requires an id when ${runs.length} active async runs exist. Use subagent({ action: \"status\", view: \"fleet\" }) to choose one.` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: formatAsyncRunList(runs) }],\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\tlet location;\n\ttry {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!params.dir && requestedId) {\n\t\t\tconst resolved = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\tif (resolved?.kind === \"foreground\") {\n\t\t\t\tconst run = deps.state?.foregroundRuns?.get(resolved.id);\n\t\t\t\tif (run) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: params.view === \"transcript\" ? formatRememberedForegroundTranscript(run, { index: params.index, lines: params.lines }) : formatRememberedForegroundStatus(run) }],\n\t\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t\t};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (resolved?.kind === \"nested\") {\n\t\t\t\treconcileNestedAsyncDescendants(resolved.match.route, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tconst refreshed = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\t\tconst nested = refreshed?.kind === \"nested\" ? refreshed : resolved;\n\t\t\t\tif (params.view === \"transcript\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedRunTranscript(nested.match.run, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedExactStatus(nested.match.rootRunId, nested.match.run) }], details: { mode: \"single\", results: [] } };\n\t\t\t}\n\t\t\tif (resolved?.kind === \"async\") location = resolved.location;\n\t\t\telse location = { asyncDir: null, resultPath: null, resolvedId: requestedId };\n\t\t} else {\n\t\t\tlocation = resolveAsyncRunLocation(params, asyncDirRoot, resultsDir);\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tconst { asyncDir, resultPath, resolvedId } = location;\n\n\tif (!asyncDir && !resultPath) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Async run not found. Provide id or dir.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\n\tif (asyncDir) {\n\t\tlet reconciliation;\n\t\ttry {\n\t\t\treconciliation = reconcileAsyncRun(asyncDir, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\tconst status = reconciliation.status;\n\t\tconst effectiveRunId = status?.runId ?? resolvedId ?? \"unknown\";\n\t\tconst logPath = path.join(asyncDir, `subagent-log-${effectiveRunId}.md`);\n\t\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\t\tif (status) {\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (currentSessionId && status.sessionId !== currentSessionId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Transcript view is only available for async runs owned by the current session.\" }],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncRunTranscript(status, asyncDir, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet nestedChildren: NestedRunSummary[] = [];\n\t\t\tlet nestedWarning: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst nestedRoute = findNestedRouteForRootId(status.runId);\n\t\t\t\tif (nestedRoute) reconcileNestedAsyncDescendants(nestedRoute, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tnestedChildren = projectNestedRegistryForRoot(status.runId)?.children ?? [];\n\t\t\t\tattachRootChildrenToSteps(status.runId, status.steps, nestedChildren);\n\t\t\t} catch (error) {\n\t\t\t\tnestedWarning = `Nested status unavailable: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t}\n\t\t\tconst outputPath = formatAsyncRunOutputPath({ asyncDir, outputFile: status.outputFile });\n\t\t\tconst progressLabel = formatAsyncRunProgressLabel({\n\t\t\t\tmode: status.mode,\n\t\t\t\tstate: status.state,\n\t\t\t\tcurrentStep: status.currentStep,\n\t\t\t\tchainStepCount: status.chainStepCount,\n\t\t\t\tparallelGroups: status.parallelGroups,\n\t\t\t\tsteps: (status.steps ?? []).map((step, index) => ({ index, agent: step.agent, status: step.status })),\n\t\t\t});\n\t\t\tconst started = new Date(status.startedAt).toISOString();\n\t\t\tconst updated = status.lastUpdate ? new Date(status.lastUpdate).toISOString() : \"n/a\";\n\t\t\tconst statusActivityText = status.state === \"running\" ? formatActivityLabel(status.lastActivityAt, status.activityState) : undefined;\n\t\t\tconst steeringText = formatSteeringSummary(status);\n\n\t\t\tconst lines = [\n\t\t\t\t`Run: ${status.runId}`,\n\t\t\t\t`State: ${status.state}`,\n\t\t\t\tstatus.error ? `Error: ${status.error}` : undefined,\n\t\t\t\tstatusActivityText ? `Activity: ${statusActivityText}` : undefined,\n\t\t\t\tsteeringText ? `Steering: ${steeringText}` : undefined,\n\t\t\t\t`Mode: ${status.mode}`,\n\t\t\t\t`Progress: ${progressLabel}`,\n\t\t\t\tstatus.pendingAppends ? `Pending appends: ${status.pendingAppends}` : undefined,\n\t\t\t\t`Started: ${started}`,\n\t\t\t\t`Updated: ${updated}`,\n\t\t\t\tstatus.turnBudget ? `Turn budget: ${status.turnBudget.turnCount}/${status.turnBudget.maxTurns}+${status.turnBudget.graceTurns} (${status.turnBudget.outcome})` : undefined,\n\t\t\t\t`Dir: ${asyncDir}`,\n\t\t\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\t\t\treconciliation.message ? `Diagnosis: ${reconciliation.message}` : undefined,\n\t\t\t\treconciliation.resultPath && fs.existsSync(reconciliation.resultPath) ? `Result: ${reconciliation.resultPath}` : undefined,\n\t\t\t].filter((line): line is string => Boolean(line));\n\t\t\tfor (const [index, step] of (status.steps ?? []).entries()) {\n\t\t\t\tconst stepActivityText = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\t\tconst modelText = modelThinking ? ` (${modelThinking})` : \"\";\n\t\t\t\tconst steeringText = formatSteeringSummary(step);\n\t\t\t\tconst steeringSuffix = steeringText ? `, steering: ${steeringText}` : \"\";\n\t\t\t\tconst errorText = step.error ? `, error: ${step.error}` : \"\";\n\t\t\t\tconst acceptanceText = step.acceptance?.status ? `, acceptance: ${step.acceptance.status}` : \"\";\n\t\t\t\tconst budgetText = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\t\tlines.push(`${stepLineLabel(status, index)}: ${phase}${display} ${step.status}${modelText}${stepActivityText ? `, ${stepActivityText}` : \"\"}${steeringSuffix}${acceptanceText}${budgetText}${errorText}`);\n\t\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 20 }));\n\t\t\t\tconst stepOutputPath = path.join(asyncDir, `output-${index}.log`);\n\t\t\t\tif (stepOutputPath !== outputPath && fs.existsSync(stepOutputPath)) lines.push(` Output: ${stepOutputPath}`);\n\t\t\t\tif (step.status === \"running\") {\n\t\t\t\t\tlines.push(` Intercom target: ${resolveSubagentIntercomTarget(status.runId, step.agent, index)} (if registered)`);\n\t\t\t\t\tlines.push(` Steer: subagent({ action: \"steer\", id: \"${status.runId}\", index: ${index}, message: \"...\" })`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst attached = new Set((status.steps ?? []).flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\t\tconst unattached = nestedChildren.filter((child) => !attached.has(child.id));\n\t\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \"\", commandHints: true, maxLines: 20 }));\n\t\t\tif (nestedWarning) lines.push(`Warning: ${nestedWarning}`);\n\t\t\tif (status.sessionFile) lines.push(`Session: ${status.sessionFile}`);\n\t\t\tif (status.state === \"running\") lines.push(`Steer running child: subagent({ action: \"steer\", id: \"${status.runId}\", message: \"...\" })`);\n\t\t\tif (status.state !== \"running\") {\n\t\t\t\tlines.push(formatResumeGuidance(status.runId, status.steps ?? [], status.sessionFile, { stopped: status.state === \"stopped\" || status.stopped === true }));\n\t\t\t}\n\t\t\tif (fs.existsSync(logPath)) lines.push(`Log: ${logPath}`);\n\t\t\tif (fs.existsSync(eventsPath)) lines.push(`Events: ${eventsPath}`);\n\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t}\n\t}\n\n\tif (resultPath) {\n\t\ttry {\n\t\t\tconst raw = fs.readFileSync(resultPath, \"utf-8\");\n\t\t\tconst data = JSON.parse(raw) as { id?: string; runId?: string; agent?: string; success?: boolean; summary?: string; output?: string; exitCode?: number; state?: string; sessionFile?: string; results?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }> };\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncResultTranscript(data, resultPath, { index: params.index, lines: params.lines }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst status = data.state === \"stopped\" ? \"stopped\" : data.success ? \"complete\" : data.state === \"paused\" || data.exitCode === 0 ? \"paused\" : \"failed\";\n\t\t\tconst runId = data.runId ?? data.id ?? resolvedId;\n\t\t\tconst lines = [`Run: ${runId}`, `State: ${status}`, `Result: ${resultPath}`];\n\t\t\tconst children = Array.isArray(data.results) ? data.results : data.agent ? [{ agent: data.agent, sessionFile: data.sessionFile }] : [];\n\t\t\tlines.push(formatResumeGuidance(runId, children, data.sessionFile, { stopped: status === \"stopped\" }));\n\t\t\tif (data.summary) lines.push(\"\", data.summary);\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Failed to read async result file: ${message}` }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: \"Status file not found.\" }],\n\t\tisError: true,\n\t\tdetails: { mode: \"single\", results: [] },\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run-status.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/run-status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMrE,OAAO,EAA4C,KAAK,OAAO,EAAwE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMzL,OAAO,EAAqF,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE9J,UAAU,eAAe;IACxB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAkKD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE,aAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,CAqPjH","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatAsyncRunList, formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns } from \"./async-status.ts\";\nimport { formatAsyncResultTranscript, formatAsyncRunTranscript, formatNestedRunTranscript, inspectSubagentFleet } from \"./fleet-view.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatModelThinking } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport { ASYNC_DIR, RESULTS_DIR, type AsyncStatus, type Details, type ForegroundResumeRun, type NestedRunSummary, type SteeringStatus, type SubagentState } from \"../../shared/types.ts\";\nimport { resolveSubagentIntercomTarget } from \"../../intercom/intercom-bridge.ts\";\nimport { resolveAsyncRunLocation } from \"./async-resume.ts\";\nimport { resolveSubagentRunId } from \"./run-id-resolver.ts\";\nimport { flatToLogicalStepIndex, normalizeParallelGroups } from \"./parallel-groups.ts\";\nimport { reconcileAsyncRun, reconcileNestedAsyncDescendants } from \"./stale-run-reconciler.ts\";\nimport { attachRootChildrenToSteps, findNestedRouteForRootId, projectNestedRegistryForRoot, type NestedRunResolutionScope } from \"../shared/nested-events.ts\";\n\ninterface RunStatusParams {\n\taction?: \"status\";\n\tid?: string;\n\trunId?: string;\n\tdir?: string;\n\tindex?: number;\n\tview?: \"fleet\" | \"transcript\";\n\tlines?: number;\n}\n\ninterface RunStatusDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tnested?: NestedRunResolutionScope;\n\tsessionRoots?: string[];\n}\n\nfunction hasExistingSessionFile(value: unknown): value is string {\n\treturn typeof value === \"string\" && fs.existsSync(value);\n}\n\nfunction formatResumeGuidance(runId: string | undefined, children: Array<{ agent?: unknown; sessionFile?: unknown }>, fallbackSessionFile?: unknown, options: { stopped?: boolean } = {}): string {\n\tif (options.stopped) return \"Resume: unavailable; stopped runs are not resumable. Start a new run instead.\";\n\tconst knownChildren = children\n\t\t.map((child, index) => ({ child, index }))\n\t\t.filter(({ child }) => typeof child.agent === \"string\");\n\tif (!runId || knownChildren.length === 0) return \"Resume: unavailable; no child session file was persisted.\";\n\tconst singleSessionFile = knownChildren[0]?.child.sessionFile ?? fallbackSessionFile;\n\tif (children.length === 1 && knownChildren.length === 1 && hasExistingSessionFile(singleSessionFile)) {\n\t\treturn `Revive: subagent({ action: \"resume\", id: \"${runId}\", message: \"...\" })`;\n\t}\n\tconst childWithSession = knownChildren.find(({ child }) => hasExistingSessionFile(child.sessionFile));\n\tif (childWithSession) {\n\t\treturn `Revive child: subagent({ action: \"resume\", id: \"${runId}\", index: ${childWithSession.index}, message: \"...\" })`;\n\t}\n\treturn \"Resume: unavailable; no child session file was persisted.\";\n}\n\nfunction stepLineLabel(status: AsyncStatus, index: number): string {\n\tconst steps = status.steps ?? [];\n\tif (status.mode === \"parallel\") return `Agent ${index + 1}/${steps.length || 1}`;\n\tif (status.mode === \"chain\") {\n\t\tconst chainStepCount = status.chainStepCount ?? (steps.length || 1);\n\t\tconst groups = normalizeParallelGroups(status.parallelGroups, steps.length, chainStepCount);\n\t\tconst group = groups.find((candidate) => index >= candidate.start && index < candidate.start + candidate.count);\n\t\tif (group) return `Step ${group.stepIndex + 1}/${chainStepCount} Agent ${index - group.start + 1}/${group.count}`;\n\t\treturn `Step ${flatToLogicalStepIndex(index, chainStepCount, groups) + 1}/${chainStepCount}`;\n\t}\n\treturn `Step ${index + 1}`;\n}\n\nfunction nestedRunDisplayName(run: NestedRunSummary): string {\n\tif (run.agent) return run.agent;\n\tif (run.agents?.length) return run.agents.join(\", \");\n\treturn run.id;\n}\n\nfunction formatSteeringSummary(input: { steering?: SteeringStatus }): string | undefined {\n\tconst steering = input.steering;\n\tif (!steering || steering.requested === 0) return undefined;\n\tconst lateAcknowledgments = steering.recent.reduce((count, request) => count + request.targets.filter((target) => target.lateDeliveredAt !== undefined).length, 0);\n\treturn `${steering.requested} requested, ${steering.scheduled} scheduled, ${steering.pending} pending, ${steering.delivered} delivered, ${steering.failed} failed, ${steering.recovered} recovered${lateAcknowledgments ? `, ${lateAcknowledgments} late acknowledged` : \"\"}`;\n}\n\nfunction rememberedForegroundChildOutput(child: ForegroundResumeRun[\"children\"][number]): string {\n\tconst outputPath = child.artifactPaths?.outputPath ?? child.savedOutputPath;\n\tif (outputPath && fs.existsSync(outputPath)) {\n\t\ttry {\n\t\t\tconst artifactOutput = fs.readFileSync(outputPath, \"utf-8\").trim();\n\t\t\tif (artifactOutput) return artifactOutput;\n\t\t} catch {\n\t\t\t// Fall back to the remembered snapshot below.\n\t\t}\n\t}\n\treturn child.finalOutput ?? \"\";\n}\n\nfunction formatRememberedForegroundStatus(run: ForegroundResumeRun): string {\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t\"State: remembered foreground\",\n\t\t`Mode: ${run.mode}`,\n\t\t`Updated: ${new Date(run.updatedAt).toISOString()}`,\n\t\t`Cwd: ${run.cwd}`,\n\t];\n\tfor (const child of run.children) {\n\t\tconst output = rememberedForegroundChildOutput(child).trim().split(/\\r?\\n/).find((line) => line.trim());\n\t\tconst parts = [\n\t\t\t`${child.index + 1}. ${child.agent} ${child.status}`,\n\t\t\tchild.exitCode !== undefined ? `exit ${child.exitCode}` : undefined,\n\t\t\tchild.detachedReason ? `detached: ${child.detachedReason}` : undefined,\n\t\t\tchild.acceptance ? `acceptance: ${child.acceptance.status}` : undefined,\n\t\t\tchild.error ? `error: ${child.error}` : undefined,\n\t\t\toutput ? `output: ${output.slice(0, 160)}` : undefined,\n\t\t].filter(Boolean);\n\t\tlines.push(parts.join(\", \"));\n\t\tif (child.sessionFile) lines.push(` Session: ${child.sessionFile}`);\n\t\tif (child.transcriptPath) lines.push(` Transcript: ${child.transcriptPath}`);\n\t\tif (child.artifactPaths?.outputPath) lines.push(` Output: ${child.artifactPaths.outputPath}`);\n\t\tif (child.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath) lines.push(` Saved output: ${child.savedOutputPath}`);\n\t\tif (child.outputSaveError) lines.push(` Output warning: ${child.outputSaveError}`);\n\t\tif (child.transcriptError) lines.push(` Transcript warning: ${child.transcriptError}`);\n\t}\n\tlines.push(\"\", `Status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\tif (run.children.length === 1) lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", view: \"transcript\" })`);\n\telse lines.push(`Transcript: subagent({ action: \"status\", id: \"${run.runId}\", index: 0, view: \"transcript\" })`);\n\tconst detached = run.children.some((child) => child.status === \"detached\");\n\tconst resumable = run.children.find((child) => hasExistingSessionFile(child.sessionFile));\n\tif (detached) {\n\t\tlines.push(`Recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t} else if (resumable) {\n\t\tlines.push(run.children.length === 1\n\t\t\t? `Revive: subagent({ action: \"resume\", id: \"${run.runId}\", message: \"...\" })`\n\t\t\t: `Revive child: subagent({ action: \"resume\", id: \"${run.runId}\", index: ${resumable.index}, message: \"...\" })`);\n\t} else {\n\t\tlines.push(\"Resume: unavailable; no child session file was persisted.\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatRememberedForegroundTranscript(run: ForegroundResumeRun, options: { index?: number; lines?: number }): string {\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && run.children.length === 1) index = 0;\n\tif (index === undefined) return `Transcript view requires index for foreground run '${run.runId}' with ${run.children.length} children.`;\n\tif (index < 0 || index >= run.children.length) throw new Error(`Transcript index ${index} is out of range for ${run.children.length} foreground children.`);\n\tconst child = run.children[index]!;\n\tconst lineLimit = Math.max(1, Math.min(options.lines ?? 80, 1000));\n\tconst outputLines = rememberedForegroundChildOutput(child).split(/\\r?\\n/).filter((line) => line.trim()).slice(-lineLimit);\n\tconst lines = [\n\t\t`Run: ${run.runId}`,\n\t\t`State: ${child.status}`,\n\t\t`Child: ${index} (${child.agent})`,\n\t\tchild.sessionFile ? `Session: ${child.sessionFile}` : undefined,\n\t\tchild.transcriptPath ? `Transcript: ${child.transcriptPath}` : undefined,\n\t\tchild.artifactPaths?.outputPath ? `Output: ${child.artifactPaths.outputPath}` : undefined,\n\t\tchild.savedOutputPath && child.savedOutputPath !== child.artifactPaths?.outputPath ? `Saved output: ${child.savedOutputPath}` : undefined,\n\t\tchild.outputSaveError ? `Output warning: ${child.outputSaveError}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tlines.push(\"Result transcript tail:\");\n\tif (outputLines.length === 0) lines.push(\" (no recovered final output available yet)\");\n\telse for (const line of outputLines) lines.push(` ${line}`);\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatNestedExactStatus(rootRunId: string, run: NestedRunSummary): string {\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`Root: ${rootRunId}`,\n\t\t`Parent: ${run.parentRunId}${run.parentStepIndex !== undefined ? ` step ${run.parentStepIndex + 1}` : \"\"}`,\n\t\t`State: ${run.state}`,\n\t\trun.activityState || run.lastActivityAt ? `Activity: ${formatActivityLabel(run.lastActivityAt, run.activityState)}` : undefined,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\t`Agent: ${nestedRunDisplayName(run)}`,\n\t\trun.currentStep !== undefined ? `Progress: step ${run.currentStep + 1}/${run.chainStepCount ?? run.steps?.length ?? 1}` : undefined,\n\t\trun.turnBudget ? `Turn budget: ${run.turnBudget.turnCount}/${run.turnBudget.maxTurns}+${run.turnBudget.graceTurns} (${run.turnBudget.outcome})` : undefined,\n\t\trun.asyncDir ? `Dir: ${run.asyncDir}` : undefined,\n\t\trun.sessionFile ? `Session: ${run.sessionFile}` : undefined,\n\t\trun.error ? `Error: ${run.error}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tif (run.path.length) {\n\t\tlines.push(`Path: ${run.path.map((part) => `${part.runId}${part.stepIndex !== undefined ? `:${part.stepIndex + 1}` : \"\"}${part.agent ? `:${part.agent}` : \"\"}`).join(\" > \")} > ${run.id}`);\n\t}\n\tif (run.steps?.length) {\n\t\tlines.push(\"Steps:\");\n\t\tfor (const [index, step] of run.steps.entries()) {\n\t\t\tconst activity = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\tconst budget = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\tlines.push(` ${index + 1}. ${step.agent} ${step.status}${activity ? `, ${activity}` : \"\"}${budget}${step.error ? `, error: ${step.error}` : \"\"}`);\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true }));\n\t\t}\n\t}\n\tlines.push(...formatNestedRunStatusLines(run.children, { indent: \" \", commandHints: true }));\n\tlines.push(\"Commands:\", ` Status: subagent({ action: \"status\", id: \"${run.id}\" })`, ` Interrupt: subagent({ action: \"interrupt\", id: \"${run.id}\" })`, ` Resume: subagent({ action: \"resume\", id: \"${run.id}\", message: \"...\" })`, ` Steer: subagent({ action: \"steer\", id: \"${run.id}\", message: \"...\" })`, ` Root status: subagent({ action: \"status\", id: \"${rootRunId}\" })`);\n\treturn lines.join(\"\\n\");\n}\n\nexport function inspectSubagentStatus(params: RunStatusParams, deps: RunStatusDeps = {}): AgentToolResult<Details> {\n\tconst asyncDirRoot = deps.asyncDirRoot ?? ASYNC_DIR;\n\tconst resultsDir = deps.resultsDir ?? RESULTS_DIR;\n\tconst currentSessionId = deps.state?.currentSessionId ?? undefined;\n\tif (params.view && params.view !== \"fleet\" && params.view !== \"transcript\") {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Unknown status view: ${params.view}. Valid: fleet, transcript.` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tif (params.view === \"fleet\") {\n\t\treturn inspectSubagentFleet(params, { asyncDirRoot, resultsDir, kill: deps.kill, now: deps.now, state: deps.state, childSafe: Boolean(deps.nested) });\n\t}\n\tif (!params.id && !params.runId && !params.dir) {\n\t\tif (deps.nested) {\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent status requires an id when no foreground run is active.\" }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst runs = listAsyncRuns(asyncDirRoot, { states: [\"queued\", \"running\"], sessionId: currentSessionId, resultsDir, kill: deps.kill, now: deps.now });\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (runs.length === 1) return inspectSubagentStatus({ ...params, id: runs[0]!.id }, deps);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: runs.length === 0 ? \"No active async run transcript is available.\" : `Transcript view requires an id when ${runs.length} active async runs exist. Use subagent({ action: \"status\", view: \"fleet\" }) to choose one.` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: formatAsyncRunList(runs) }],\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\tlet location;\n\ttry {\n\t\tconst requestedId = params.id ?? params.runId;\n\t\tif (!params.dir && requestedId) {\n\t\t\tconst resolved = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\tif (resolved?.kind === \"foreground\") {\n\t\t\t\tconst run = deps.state?.foregroundRuns?.get(resolved.id);\n\t\t\t\tif (run) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: params.view === \"transcript\" ? formatRememberedForegroundTranscript(run, { index: params.index, lines: params.lines }) : formatRememberedForegroundStatus(run) }],\n\t\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t\t};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (resolved?.kind === \"nested\") {\n\t\t\t\treconcileNestedAsyncDescendants(resolved.match.route, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tconst refreshed = resolveSubagentRunId(requestedId, { asyncDirRoot, resultsDir, state: deps.state, nested: deps.nested });\n\t\t\t\tconst nested = refreshed?.kind === \"nested\" ? refreshed : resolved;\n\t\t\t\tif (params.view === \"transcript\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedRunTranscript(nested.match.run, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: formatNestedExactStatus(nested.match.rootRunId, nested.match.run) }], details: { mode: \"single\", results: [] } };\n\t\t\t}\n\t\t\tif (resolved?.kind === \"async\") location = resolved.location;\n\t\t\telse location = { asyncDir: null, resultPath: null, resolvedId: requestedId };\n\t\t} else {\n\t\t\tlocation = resolveAsyncRunLocation(params, asyncDirRoot, resultsDir);\n\t\t}\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\tconst { asyncDir, resultPath, resolvedId } = location;\n\n\tif (!asyncDir && !resultPath) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Async run not found. Provide id or dir.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t};\n\t}\n\n\tif (asyncDir) {\n\t\tlet reconciliation;\n\t\ttry {\n\t\t\treconciliation = reconcileAsyncRun(asyncDir, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t\tconst status = reconciliation.status;\n\t\tconst effectiveRunId = status?.runId ?? resolvedId ?? \"unknown\";\n\t\tconst logPath = path.join(asyncDir, `subagent-log-${effectiveRunId}.md`);\n\t\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\t\tif (status) {\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\tif (currentSessionId && status.sessionId !== currentSessionId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Transcript view is only available for async runs owned by the current session.\" }],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncRunTranscript(status, asyncDir, { index: params.index, lines: params.lines, sessionRoots: deps.sessionRoots }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet nestedChildren: NestedRunSummary[] = [];\n\t\t\tlet nestedWarning: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst nestedRoute = findNestedRouteForRootId(status.runId);\n\t\t\t\tif (nestedRoute) reconcileNestedAsyncDescendants(nestedRoute, { resultsDir, kill: deps.kill, now: deps.now });\n\t\t\t\tnestedChildren = projectNestedRegistryForRoot(status.runId)?.children ?? [];\n\t\t\t\tattachRootChildrenToSteps(status.runId, status.steps, nestedChildren);\n\t\t\t} catch (error) {\n\t\t\t\tnestedWarning = `Nested status unavailable: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t}\n\t\t\tconst outputPath = formatAsyncRunOutputPath({ asyncDir, outputFile: status.outputFile });\n\t\t\tconst progressLabel = formatAsyncRunProgressLabel({\n\t\t\t\tmode: status.mode,\n\t\t\t\tstate: status.state,\n\t\t\t\tcurrentStep: status.currentStep,\n\t\t\t\tchainStepCount: status.chainStepCount,\n\t\t\t\tparallelGroups: status.parallelGroups,\n\t\t\t\tsteps: (status.steps ?? []).map((step, index) => ({ index, agent: step.agent, status: step.status })),\n\t\t\t});\n\t\t\tconst started = new Date(status.startedAt).toISOString();\n\t\t\tconst updated = status.lastUpdate ? new Date(status.lastUpdate).toISOString() : \"n/a\";\n\t\t\tconst statusActivityText = status.state === \"running\" ? formatActivityLabel(status.lastActivityAt, status.activityState) : undefined;\n\t\t\tconst steeringText = formatSteeringSummary(status);\n\n\t\t\tconst lines = [\n\t\t\t\t`Run: ${status.runId}`,\n\t\t\t\t`State: ${status.state}`,\n\t\t\t\tstatus.error ? `Error: ${status.error}` : undefined,\n\t\t\t\tstatusActivityText ? `Activity: ${statusActivityText}` : undefined,\n\t\t\t\tsteeringText ? `Steering: ${steeringText}` : undefined,\n\t\t\t\t`Mode: ${status.mode}`,\n\t\t\t\t`Progress: ${progressLabel}`,\n\t\t\t\tstatus.pendingAppends ? `Pending appends: ${status.pendingAppends}` : undefined,\n\t\t\t\t`Started: ${started}`,\n\t\t\t\t`Updated: ${updated}`,\n\t\t\t\tstatus.turnBudget ? `Turn budget: ${status.turnBudget.turnCount}/${status.turnBudget.maxTurns}+${status.turnBudget.graceTurns} (${status.turnBudget.outcome})` : undefined,\n\t\t\t\t`Dir: ${asyncDir}`,\n\t\t\t\toutputPath ? `Output: ${outputPath}` : undefined,\n\t\t\t\treconciliation.message ? `Diagnosis: ${reconciliation.message}` : undefined,\n\t\t\t\treconciliation.resultPath && fs.existsSync(reconciliation.resultPath) ? `Result: ${reconciliation.resultPath}` : undefined,\n\t\t\t].filter((line): line is string => Boolean(line));\n\t\t\tfor (const [index, step] of (status.steps ?? []).entries()) {\n\t\t\t\tconst stepActivityText = step.status === \"running\" ? formatActivityLabel(step.lastActivityAt, step.activityState) : undefined;\n\t\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\t\tconst modelText = modelThinking ? ` (${modelThinking})` : \"\";\n\t\t\t\tconst steeringText = formatSteeringSummary(step);\n\t\t\t\tconst steeringSuffix = steeringText ? `, steering: ${steeringText}` : \"\";\n\t\t\t\tconst errorText = step.error ? `, error: ${step.error}` : \"\";\n\t\t\t\tconst acceptanceText = step.acceptance?.status ? `, acceptance: ${step.acceptance.status}` : \"\";\n\t\t\t\tconst budgetText = step.turnBudget ? `, turn budget: ${step.turnBudget.turnCount}/${step.turnBudget.maxTurns}+${step.turnBudget.graceTurns} (${step.turnBudget.outcome})` : \"\";\n\t\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\t\tlines.push(`${stepLineLabel(status, index)}: ${phase}${display} ${step.status}${modelText}${stepActivityText ? `, ${stepActivityText}` : \"\"}${steeringSuffix}${acceptanceText}${budgetText}${errorText}`);\n\t\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 20 }));\n\t\t\t\tconst stepOutputPath = path.join(asyncDir, `output-${index}.log`);\n\t\t\t\tif (stepOutputPath !== outputPath && fs.existsSync(stepOutputPath)) lines.push(` Output: ${stepOutputPath}`);\n\t\t\t\tif (step.status === \"running\") {\n\t\t\t\t\tlines.push(` Intercom target: ${resolveSubagentIntercomTarget(status.runId, step.agent, index)} (if registered)`);\n\t\t\t\t\tlines.push(` Steer: subagent({ action: \"steer\", id: \"${status.runId}\", index: ${index}, message: \"...\" })`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst attached = new Set((status.steps ?? []).flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\t\tconst unattached = nestedChildren.filter((child) => !attached.has(child.id));\n\t\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \"\", commandHints: true, maxLines: 20 }));\n\t\t\tif (nestedWarning) lines.push(`Warning: ${nestedWarning}`);\n\t\t\tif (status.sessionFile) lines.push(`Session: ${status.sessionFile}`);\n\t\t\tif (status.state === \"running\") lines.push(`Steer running child: subagent({ action: \"steer\", id: \"${status.runId}\", message: \"...\" })`);\n\t\t\tif (status.state !== \"running\") {\n\t\t\t\tlines.push(formatResumeGuidance(status.runId, status.steps ?? [], status.sessionFile, { stopped: status.state === \"stopped\" || status.stopped === true }));\n\t\t\t}\n\t\t\tif (fs.existsSync(logPath)) lines.push(`Log: ${logPath}`);\n\t\t\tif (fs.existsSync(eventsPath)) lines.push(`Events: ${eventsPath}`);\n\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t}\n\t}\n\n\tif (resultPath) {\n\t\ttry {\n\t\t\tconst raw = fs.readFileSync(resultPath, \"utf-8\");\n\t\t\tconst data = JSON.parse(raw) as { id?: string; runId?: string; agent?: string; success?: boolean; summary?: string; output?: string; exitCode?: number; state?: string; sessionFile?: string; results?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }> };\n\t\t\tif (params.view === \"transcript\") {\n\t\t\t\ttry {\n\t\t\t\t\treturn { content: [{ type: \"text\", text: formatAsyncResultTranscript(data, resultPath, { index: params.index, lines: params.lines }) }], details: { mode: \"single\", results: [] } };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"single\", results: [] } };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst status = data.state === \"stopped\" ? \"stopped\" : data.success ? \"complete\" : data.state === \"paused\" || data.exitCode === 0 ? \"paused\" : \"failed\";\n\t\t\tconst runId = data.runId ?? data.id ?? resolvedId;\n\t\t\tconst lines = [`Run: ${runId}`, `State: ${status}`, `Result: ${resultPath}`];\n\t\t\tconst children = Array.isArray(data.results) ? data.results : data.agent ? [{ agent: data.agent, sessionFile: data.sessionFile }] : [];\n\t\t\tlines.push(formatResumeGuidance(runId, children, data.sessionFile, { stopped: status === \"stopped\" }));\n\t\t\tif (data.summary) lines.push(\"\", data.summary);\n\t\t\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\") }], details: { mode: \"single\", results: [] } };\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Failed to read async result file: ${message}` }],\n\t\t\t\tisError: true,\n\t\t\t\tdetails: { mode: \"single\", results: [] },\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: \"Status file not found.\" }],\n\t\tisError: true,\n\t\tdetails: { mode: \"single\", results: [] },\n\t};\n}\n"]}
|