@ashx-j/lunr 0.2.21 → 0.2.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -2
- package/README.md +23 -5
- package/dist/builtin-extensions/index.d.ts.map +1 -1
- package/dist/builtin-extensions/index.js +1 -0
- package/dist/builtin-extensions/index.js.map +1 -1
- package/dist/builtin-extensions/lunr-browser.d.ts +9 -0
- package/dist/builtin-extensions/lunr-browser.d.ts.map +1 -0
- package/dist/builtin-extensions/lunr-browser.js +169 -0
- package/dist/builtin-extensions/lunr-browser.js.map +1 -0
- package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-todos.js +15 -0
- package/dist/builtin-extensions/lunr-todos.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.js +3 -0
- package/dist/builtin-extensions/pi-intercom/index.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 +5 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -2
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +18 -5
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -3
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/communication.d.ts +17 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/communication.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/communication.js +45 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/communication.js.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js +4 -11
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +4 -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 +160 -51
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js +5 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js +3 -2
- package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -0
- 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 +2 -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/subagent-wait.d.ts +3 -0
- 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 +11 -0
- 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.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +41 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
- 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 +4 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +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/types.d.ts +1 -0
- 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/tui/communication.d.ts +18 -0
- package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-subagents/src/tui/communication.js +48 -0
- package/dist/builtin-extensions/pi-subagents/src/tui/communication.js.map +1 -0
- package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.js +11 -7
- package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/install-cli.d.ts.map +1 -1
- package/dist/cli/install-cli.js +15 -45
- package/dist/cli/install-cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +9 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +126 -29
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +22 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +250 -105
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/browser/network.d.ts +9 -0
- package/dist/core/browser/network.d.ts.map +1 -0
- package/dist/core/browser/network.js +146 -0
- package/dist/core/browser/network.js.map +1 -0
- package/dist/core/browser/runtime.d.ts +24 -0
- package/dist/core/browser/runtime.d.ts.map +1 -0
- package/dist/core/browser/runtime.js +289 -0
- package/dist/core/browser/runtime.js.map +1 -0
- package/dist/core/browser/schema.d.ts +16 -0
- package/dist/core/browser/schema.d.ts.map +1 -0
- package/dist/core/browser/schema.js +36 -0
- package/dist/core/browser/schema.js.map +1 -0
- package/dist/core/browser/settings.d.ts +8 -0
- package/dist/core/browser/settings.d.ts.map +1 -0
- package/dist/core/browser/settings.js +30 -0
- package/dist/core/browser/settings.js.map +1 -0
- package/dist/core/browser/setup.d.ts +2 -0
- package/dist/core/browser/setup.d.ts.map +1 -0
- package/dist/core/browser/setup.js +16 -0
- package/dist/core/browser/setup.js.map +1 -0
- package/dist/core/customize.d.ts.map +1 -1
- package/dist/core/customize.js +15 -14
- package/dist/core/customize.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +1 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/install-features.d.ts.map +1 -1
- package/dist/core/install-features.js +10 -8
- package/dist/core/install-features.js.map +1 -1
- package/dist/core/memory-cap.d.ts.map +1 -1
- package/dist/core/memory-cap.js +5 -3
- package/dist/core/memory-cap.js.map +1 -1
- package/dist/core/model-tiers.d.ts.map +1 -1
- package/dist/core/model-tiers.js +9 -6
- package/dist/core/model-tiers.js.map +1 -1
- package/dist/core/permissions.d.ts.map +1 -1
- package/dist/core/permissions.js +9 -0
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/plan-mode.d.ts.map +1 -1
- package/dist/core/plan-mode.js +3 -0
- package/dist/core/plan-mode.js.map +1 -1
- package/dist/core/process-registry.d.ts.map +1 -1
- package/dist/core/process-registry.js +6 -4
- package/dist/core/process-registry.js.map +1 -1
- package/dist/core/runtime-scope.d.ts +11 -0
- package/dist/core/runtime-scope.d.ts.map +1 -0
- package/dist/core/runtime-scope.js +3 -0
- package/dist/core/runtime-scope.js.map +1 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +13 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-handoff.d.ts +35 -0
- package/dist/core/session-handoff.d.ts.map +1 -0
- package/dist/core/session-handoff.js +214 -0
- package/dist/core/session-handoff.js.map +1 -0
- package/dist/core/session-manager.d.ts +20 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +184 -22
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-ownership.d.ts +28 -0
- package/dist/core/session-ownership.d.ts.map +1 -0
- package/dist/core/session-ownership.js +138 -0
- package/dist/core/session-ownership.js.map +1 -0
- package/dist/core/session-retention.d.ts.map +1 -1
- package/dist/core/session-retention.js +11 -2
- package/dist/core/session-retention.js.map +1 -1
- package/dist/core/settings-manager.d.ts +11 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +27 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/subagent-wait-interruption.d.ts +11 -0
- package/dist/core/subagent-wait-interruption.d.ts.map +1 -0
- package/dist/core/subagent-wait-interruption.js +19 -0
- package/dist/core/subagent-wait-interruption.js.map +1 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +7 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/todo-settings.d.ts +5 -0
- package/dist/core/todo-settings.d.ts.map +1 -0
- package/dist/core/todo-settings.js +7 -0
- package/dist/core/todo-settings.js.map +1 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +4 -4
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +5 -3
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +4 -4
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +4 -4
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +4 -4
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +4 -4
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +14 -5
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +34 -7
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +4 -4
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/usage-service.d.ts.map +1 -1
- package/dist/core/usage-service.js +5 -3
- package/dist/core/usage-service.js.map +1 -1
- package/dist/gateway/adapters/discord.d.ts +12 -1
- package/dist/gateway/adapters/discord.d.ts.map +1 -1
- package/dist/gateway/adapters/discord.js +112 -17
- package/dist/gateway/adapters/discord.js.map +1 -1
- package/dist/gateway/adapters/telegram.d.ts +4 -2
- package/dist/gateway/adapters/telegram.d.ts.map +1 -1
- package/dist/gateway/adapters/telegram.js +34 -11
- package/dist/gateway/adapters/telegram.js.map +1 -1
- package/dist/gateway/agent-bridge.d.ts +14 -3
- package/dist/gateway/agent-bridge.d.ts.map +1 -1
- package/dist/gateway/agent-bridge.js +252 -60
- package/dist/gateway/agent-bridge.js.map +1 -1
- package/dist/gateway/approval.d.ts +1 -0
- package/dist/gateway/approval.d.ts.map +1 -1
- package/dist/gateway/approval.js +60 -18
- package/dist/gateway/approval.js.map +1 -1
- package/dist/gateway/authz.d.ts +2 -0
- package/dist/gateway/authz.d.ts.map +1 -1
- package/dist/gateway/authz.js +13 -0
- package/dist/gateway/authz.js.map +1 -1
- package/dist/gateway/buttons.d.ts +3 -1
- package/dist/gateway/buttons.d.ts.map +1 -1
- package/dist/gateway/buttons.js +18 -3
- package/dist/gateway/buttons.js.map +1 -1
- package/dist/gateway/command.d.ts.map +1 -1
- package/dist/gateway/command.js +49 -4
- package/dist/gateway/command.js.map +1 -1
- package/dist/gateway/commands.d.ts.map +1 -1
- package/dist/gateway/commands.js +18 -3
- package/dist/gateway/commands.js.map +1 -1
- package/dist/gateway/config.d.ts +5 -0
- package/dist/gateway/config.d.ts.map +1 -1
- package/dist/gateway/config.js +5 -0
- package/dist/gateway/config.js.map +1 -1
- package/dist/gateway/conversations.d.ts +14 -0
- package/dist/gateway/conversations.d.ts.map +1 -0
- package/dist/gateway/conversations.js +30 -0
- package/dist/gateway/conversations.js.map +1 -0
- package/dist/gateway/download.d.ts +2 -0
- package/dist/gateway/download.d.ts.map +1 -0
- package/dist/gateway/download.js +36 -0
- package/dist/gateway/download.js.map +1 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +85 -26
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/mobile-commands.d.ts +24 -0
- package/dist/gateway/mobile-commands.d.ts.map +1 -0
- package/dist/gateway/mobile-commands.js +422 -0
- package/dist/gateway/mobile-commands.js.map +1 -0
- package/dist/gateway/presenter.d.ts +16 -0
- package/dist/gateway/presenter.d.ts.map +1 -0
- package/dist/gateway/presenter.js +210 -0
- package/dist/gateway/presenter.js.map +1 -0
- package/dist/gateway/router.d.ts +1 -0
- package/dist/gateway/router.d.ts.map +1 -1
- package/dist/gateway/router.js +32 -3
- package/dist/gateway/router.js.map +1 -1
- package/dist/gateway/service.d.ts +46 -0
- package/dist/gateway/service.d.ts.map +1 -0
- package/dist/gateway/service.js +395 -0
- package/dist/gateway/service.js.map +1 -0
- package/dist/gateway/setup.d.ts +4 -0
- package/dist/gateway/setup.d.ts.map +1 -0
- package/dist/gateway/setup.js +146 -0
- package/dist/gateway/setup.js.map +1 -0
- package/dist/gateway/types.d.ts +4 -2
- package/dist/gateway/types.d.ts.map +1 -1
- package/dist/gateway/types.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +2 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +19 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +78 -17
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/copyable-text.d.ts +27 -0
- package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -0
- package/dist/modes/interactive/components/copyable-text.js +156 -0
- package/dist/modes/interactive/components/copyable-text.js.map +1 -0
- package/dist/modes/interactive/components/custom-entry.d.ts +1 -0
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +8 -0
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +8 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +16 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +8 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +51 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-tail.d.ts +9 -2
- package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-tail.js +43 -1
- package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +4 -3
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +34 -45
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +9 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +267 -44
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +1 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +23 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/node-runtime/agent-session-services-GZVSOGYR.js +49 -0
- package/dist/node-runtime/{builtin-extensions-JCOPAAB5.js → builtin-extensions-QVCXNQT4.js} +6 -5
- package/dist/node-runtime/{chunk-LTYWTR3V.js → chunk-2MI5OPMN.js} +17 -2
- package/dist/node-runtime/{chunk-W3CVH5RX.js → chunk-2TKODGBZ.js} +11 -6
- package/dist/node-runtime/chunk-4EULYYR4.js +62 -0
- package/dist/node-runtime/{chunk-6N22HULO.js → chunk-5D7LC2ZQ.js} +7 -2
- package/dist/node-runtime/{chunk-KBKMCJDU.js → chunk-5ZQXRPMC.js} +19 -4
- package/dist/node-runtime/{chunk-BOHIDQT4.js → chunk-6VYZ5UFP.js} +1 -1
- package/dist/node-runtime/chunk-AZJHNQKQ.js +205 -0
- package/dist/node-runtime/{chunk-A3KMVBZV.js → chunk-BBUVIEZB.js} +1 -10
- package/dist/node-runtime/{chunk-IRPJXI6U.js → chunk-BX2RB477.js} +1 -1
- package/dist/node-runtime/chunk-CCCN2UCX.js +14 -0
- package/dist/node-runtime/{chunk-25I2BHAA.js → chunk-CSUZVNYE.js} +1 -1
- package/dist/node-runtime/chunk-DD5YWFSJ.js +708 -0
- package/dist/node-runtime/chunk-DQMGU675.js +3409 -0
- package/dist/node-runtime/{chunk-QZMODZQ2.js → chunk-E24EO34J.js} +2 -1
- package/dist/node-runtime/chunk-EKVFP6YF.js +355 -0
- package/dist/node-runtime/chunk-GJ2RDBRL.js +672 -0
- package/dist/node-runtime/{chunk-W3SILANP.js → chunk-GMHJCCEN.js} +8 -8
- package/dist/node-runtime/{chunk-DDWHZ633.js → chunk-GS42T6MX.js} +1 -1
- package/dist/node-runtime/chunk-GS66LV4M.js +2830 -0
- package/dist/node-runtime/chunk-H4K3JDRB.js +47 -0
- package/dist/node-runtime/{chunk-2SJB2AWP.js → chunk-HMBGROQK.js} +3 -3
- package/dist/node-runtime/{chunk-GB2MGFLI.js → chunk-HPUP7E4T.js} +216 -201
- package/dist/node-runtime/{chunk-YMEAYRBE.js → chunk-HTFRRDSF.js} +2 -7
- package/dist/node-runtime/{chunk-OPEK5RRY.js → chunk-IF24A3FH.js} +1 -1
- package/dist/node-runtime/chunk-IMLCWLPI.js +9 -0
- package/dist/node-runtime/chunk-KKUTQQV7.js +144 -0
- package/dist/node-runtime/chunk-LFZDVKSP.js +521 -0
- package/dist/node-runtime/{chunk-2BUAYZ7K.js → chunk-LLUIPGDR.js} +581 -197
- package/dist/node-runtime/{chunk-7NBZ5P7I.js → chunk-NAY6UUQZ.js} +1 -1
- package/dist/node-runtime/chunk-OAR4TYZE.js +146 -0
- package/dist/node-runtime/{chunk-STERBGUB.js → chunk-OFKSVRV7.js} +2 -2
- package/dist/node-runtime/{chunk-JZQ7F36T.js → chunk-PCEW76PM.js} +19 -3
- package/dist/node-runtime/{chunk-WLLDXJRT.js → chunk-QAZOULTU.js} +29 -1014
- package/dist/node-runtime/{chunk-6KDIOJL3.js → chunk-QH6YL7VK.js} +3 -3
- package/dist/node-runtime/chunk-R3K2F5GI.js +122 -0
- package/dist/node-runtime/{chunk-RNBHABBA.js → chunk-RDDAZOMU.js} +23 -0
- package/dist/node-runtime/{chunk-SY2TFMLO.js → chunk-RIR5EDDJ.js} +46 -151
- package/dist/node-runtime/chunk-RMQZU2YU.js +117 -0
- package/dist/node-runtime/{chunk-6BEIBLQ3.js → chunk-RWTKOC3B.js} +1 -1
- package/dist/node-runtime/{chunk-G6LRAP36.js → chunk-TQGPP4SC.js} +1 -1
- package/dist/node-runtime/{chunk-Y5KOEMBH.js → chunk-TVJUOJZJ.js} +9 -674
- package/dist/node-runtime/chunk-UAEOTO52.js +119 -0
- package/dist/node-runtime/{chunk-AY6CAJSL.js → chunk-UJOCPOMX.js} +6 -3
- package/dist/node-runtime/chunk-UP2XBVH5.js +40 -0
- package/dist/node-runtime/{chunk-WJVFOIB5.js → chunk-UQUCFAJ3.js} +1 -1
- package/dist/node-runtime/chunk-URD2SLIT.js +1019 -0
- package/dist/node-runtime/chunk-US544NN6.js +13 -0
- package/dist/node-runtime/chunk-UWPJL22I.js +341 -0
- package/dist/node-runtime/{chunk-4I23VTC4.js → chunk-VWCE2HSZ.js} +21 -124
- package/dist/node-runtime/{chunk-VZR3NCM7.js → chunk-W64JC4E7.js} +18 -14
- package/dist/node-runtime/{chunk-AWVD5IEY.js → chunk-X3URCYCU.js} +23 -12
- package/dist/node-runtime/{chunk-GKLEQ3I4.js → chunk-XLTL257W.js} +126 -27
- package/dist/node-runtime/{chunk-WKDK4C5P.js → chunk-YDO2F2IA.js} +38 -164
- package/dist/node-runtime/{chunk-PDNXVXMD.js → chunk-YHQ3NBB3.js} +58 -48
- package/dist/node-runtime/chunk-YPHAIRZT.js +10 -0
- package/dist/node-runtime/cli-runtime.js +2 -2
- package/dist/node-runtime/command-PDVTBRWA.js +45 -0
- package/dist/node-runtime/{commands-MV5KOZ64.js → commands-KAMO2T6P.js} +10 -10
- package/dist/node-runtime/commands-XDCFGIGW.js +36 -0
- package/dist/node-runtime/config-RORQUQFG.js +20 -0
- package/dist/node-runtime/{customize-LF5VST47.js → customize-VFJV3U6A.js} +2 -1
- package/dist/node-runtime/{direct-tool-executor-BK7CLEBX.js → direct-tool-executor-YAVOLDFY.js} +8 -8
- package/dist/node-runtime/{export-html-TEXVV5RP.js → export-html-KSOIMVPI.js} +4 -3
- package/dist/node-runtime/{extension-input-O4HSAEM4.js → extension-input-E7BJZ35H.js} +4 -4
- package/dist/node-runtime/{extension-selector-X5FCX43D.js → extension-selector-WU42XDTU.js} +4 -4
- package/dist/node-runtime/{extract-XLQSJN4V.js → extract-EQJE7FZZ.js} +2 -2
- package/dist/node-runtime/{gateway-BM6NLOH4.js → gateway-AYWM5DIO.js} +275 -994
- package/dist/node-runtime/{gemini-search-U7SUMPQA.js → gemini-search-35OCRFLN.js} +1 -1
- package/dist/node-runtime/{gemini-url-context-PXWCBQHK.js → gemini-url-context-UQY3PHHW.js} +2 -2
- package/dist/node-runtime/index.js +104 -65
- package/dist/node-runtime/{init-3C7Z24OI.js → init-X2LIUB2H.js} +3 -3
- package/dist/node-runtime/{install-cli-EXMJQESX.js → install-cli-3BO4MMQ6.js} +21 -82
- package/dist/node-runtime/interactive-mode-4MFRKAHG.js +72 -0
- package/dist/node-runtime/{interactive-view-ILS6TAN5.js → interactive-view-TUZHCQM3.js} +8 -8
- package/dist/node-runtime/lunr-browser-RYFIIVJN.js +174 -0
- package/dist/node-runtime/{lunr-cron-4VHP4E4B.js → lunr-cron-YWXEPZMQ.js} +19 -5
- package/dist/node-runtime/main.js +44 -31
- package/dist/node-runtime/{memory-cap-3S4XRLNP.js → memory-cap-EL3KL4JJ.js} +2 -1
- package/dist/node-runtime/mobile-commands-LVHDAUDP.js +32 -0
- package/dist/node-runtime/model-runtime-PLQKAG4B.js +16 -0
- package/dist/node-runtime/{model-tiers-NJLHUEGK.js → model-tiers-OU3U5CZG.js} +2 -1
- package/dist/node-runtime/{package-manager-cli-N37546V5.js → package-manager-cli-6GT3Z3CK.js} +22 -15
- package/dist/node-runtime/{pi-intercom-NV2LW6X7.js → pi-intercom-HBPK5HSJ.js} +4 -1
- package/dist/node-runtime/{pi-mcp-adapter-GUFZWW54.js → pi-mcp-adapter-E6WULBKF.js} +4 -4
- package/dist/node-runtime/{pi-subagents-6MUIFNDM.js → pi-subagents-CDWK2AKY.js} +236 -79
- package/dist/node-runtime/{pi-web-access-2CQGFLT2.js → pi-web-access-WTGMNZ32.js} +15 -15
- package/dist/node-runtime/process-registry-4FAKZQOL.js +31 -0
- package/dist/node-runtime/{proxy-modes-V6YVFH3C.js → proxy-modes-OSQCWRBI.js} +9 -9
- package/dist/node-runtime/rpc-entry.js +44 -31
- package/dist/node-runtime/{rpc-mode-W5ZTLTMZ.js → rpc-mode-O3XV4SID.js} +2 -2
- package/dist/node-runtime/runtime-4VA6JKNF.js +373 -0
- package/dist/node-runtime/{runtime-bridges-2VQTLPOZ.js → runtime-bridges-3XUQ46XW.js} +6 -5
- package/dist/node-runtime/service-ISSP6VHE.js +36 -0
- package/dist/node-runtime/session-handoff-HC7R5E24.js +33 -0
- package/dist/node-runtime/{session-manager-E7AREDTV.js → session-manager-CFN4UFM2.js} +2 -1
- package/dist/node-runtime/{session-selector-FJ7M2AIX.js → session-selector-GIM4DHQ2.js} +5 -4
- package/dist/node-runtime/{settings-manager-CUGAZWAB.js → settings-manager-6VEMXRDL.js} +7 -2
- package/dist/node-runtime/setup-5SR2J35A.js +155 -0
- package/dist/node-runtime/setup-JBKOLJ6F.js +18 -0
- package/dist/node-runtime/{subagent-executor-MH4A7CCF.js → subagent-executor-M5VWB3D3.js} +26 -18
- package/dist/node-runtime/theme-UOO5RVFN.js +68 -0
- package/dist/node-runtime/trust-manager-MMISNCYO.js +17 -0
- package/dist/node-runtime/{update-cli-XTZMZGOL.js → update-cli-UVKJWRRJ.js} +7 -2
- package/dist/node-runtime/usage-service-LFB2SWYV.js +37 -0
- package/dist/node-runtime/{video-extract-OYT5WKS5.js → video-extract-OOZHR7SU.js} +2 -2
- package/dist/node-runtime/{youtube-extract-TQYKGFGS.js → youtube-extract-FNPAUNHU.js} +6 -6
- package/docs/browser.md +86 -0
- package/docs/extensions.md +2 -0
- package/docs/features.md +96 -16
- package/docs/interactive-startup.md +2 -1
- package/docs/sessions.md +10 -0
- package/docs/settings.md +2 -0
- package/docs/tui.md +2 -0
- package/docs/usage.md +16 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +7 -4
- package/scripts/install-browser.mjs +20 -0
- package/dist/node-runtime/agent-session-services-C743TYQE.js +0 -37
- package/dist/node-runtime/chunk-VGYZ3APQ.js +0 -59
- package/dist/node-runtime/chunk-XI77KVKA.js +0 -6009
- package/dist/node-runtime/command-P4NYCJ2M.js +0 -13
- package/dist/node-runtime/interactive-mode-EVVBA64D.js +0 -59
- package/dist/node-runtime/{chunk-UWQYRSYQ.js → chunk-YJMMG7C6.js} +25 -25
- package/dist/node-runtime/{mcp-panel-IIGMXQGP.js → mcp-panel-KTTFXJZ4.js} +3 -3
- package/dist/node-runtime/{src-BPQFJR76.js → src-IVPNZ2BX.js} +9 -9
|
@@ -27,6 +27,8 @@ import {
|
|
|
27
27
|
SUBAGENT_PARENT_SESSION_ENV,
|
|
28
28
|
SUBAGENT_RESULT_INTERCOM_EVENT,
|
|
29
29
|
SUBAGENT_STEERING_NOTICE_EVENT,
|
|
30
|
+
SUPERVISOR_PROGRESS_TYPE,
|
|
31
|
+
SUPERVISOR_REQUEST_TYPE,
|
|
30
32
|
TEMP_ROOT_DIR,
|
|
31
33
|
WIDGET_KEY,
|
|
32
34
|
assertJsonSchemaObject,
|
|
@@ -45,7 +47,6 @@ import {
|
|
|
45
47
|
formatAsyncRunProgressLabel,
|
|
46
48
|
formatAsyncRunTranscript,
|
|
47
49
|
formatCompactModelBadge,
|
|
48
|
-
formatControlNoticeMessage,
|
|
49
50
|
formatDuration,
|
|
50
51
|
formatModelSelection,
|
|
51
52
|
formatNestedAggregate,
|
|
@@ -61,10 +62,12 @@ import {
|
|
|
61
62
|
handleSubagentControlNotice,
|
|
62
63
|
hasLiveNestedDescendants,
|
|
63
64
|
isAsyncSubagentExecution,
|
|
65
|
+
legacySupervisorBody,
|
|
64
66
|
listAsyncRuns,
|
|
65
67
|
normalizeAsyncLaunchConfig,
|
|
66
68
|
normalizeParallelGroups,
|
|
67
69
|
projectNestedRegistryForRoot,
|
|
70
|
+
readCommunication,
|
|
68
71
|
readStatus,
|
|
69
72
|
readSteerCapability,
|
|
70
73
|
reconcileAsyncRun,
|
|
@@ -72,6 +75,7 @@ import {
|
|
|
72
75
|
registerMainWatchdog,
|
|
73
76
|
requestAsyncSteer,
|
|
74
77
|
resolveAsyncRunLocation,
|
|
78
|
+
resolveCommunicationPeer,
|
|
75
79
|
resolveCurrentSessionId,
|
|
76
80
|
resolveSubagentRequestParams,
|
|
77
81
|
resolveSubagentResultStatus,
|
|
@@ -82,6 +86,7 @@ import {
|
|
|
82
86
|
sanitizeChildDescription,
|
|
83
87
|
sanitizeSummary,
|
|
84
88
|
shortenPath,
|
|
89
|
+
stopRequestPath,
|
|
85
90
|
subagentLaunchRunsAsync,
|
|
86
91
|
summarizeAsyncStatus,
|
|
87
92
|
updateAsyncJobNestedProjection,
|
|
@@ -89,30 +94,36 @@ import {
|
|
|
89
94
|
validateExecutionAcceptance,
|
|
90
95
|
validateToolBudgetConfig,
|
|
91
96
|
writeAtomicJson
|
|
92
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-RIR5EDDJ.js";
|
|
93
98
|
import {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
formatControlNoticeMessage
|
|
100
|
+
} from "./chunk-OAR4TYZE.js";
|
|
101
|
+
import {
|
|
102
|
+
getSubagentSpinnerDefinition
|
|
103
|
+
} from "./chunk-US544NN6.js";
|
|
98
104
|
import "./chunk-5ZH3ZFIZ.js";
|
|
99
|
-
import "./chunk-
|
|
100
|
-
import "./chunk-
|
|
105
|
+
import "./chunk-CSUZVNYE.js";
|
|
106
|
+
import "./chunk-YDO2F2IA.js";
|
|
101
107
|
import "./chunk-53YJI7JU.js";
|
|
102
|
-
import "./chunk-
|
|
103
|
-
import "./chunk-CSFI6YXL.js";
|
|
104
|
-
import "./chunk-LISUTZS3.js";
|
|
105
|
-
import "./chunk-FVDOXRUD.js";
|
|
108
|
+
import "./chunk-5ZQXRPMC.js";
|
|
106
109
|
import "./chunk-AD6VXAO7.js";
|
|
107
|
-
import "./chunk-
|
|
110
|
+
import "./chunk-LISUTZS3.js";
|
|
111
|
+
import {
|
|
112
|
+
createSubagentCancellation,
|
|
113
|
+
registerSubagentCancellation
|
|
114
|
+
} from "./chunk-BBUVIEZB.js";
|
|
115
|
+
import "./chunk-5D7LC2ZQ.js";
|
|
108
116
|
import "./chunk-M3LZLQW2.js";
|
|
117
|
+
import "./chunk-KKUTQQV7.js";
|
|
118
|
+
import "./chunk-CSFI6YXL.js";
|
|
119
|
+
import "./chunk-FVDOXRUD.js";
|
|
109
120
|
import "./chunk-RQ2Q5IYR.js";
|
|
110
121
|
import {
|
|
111
122
|
keyText
|
|
112
|
-
} from "./chunk-
|
|
123
|
+
} from "./chunk-GS42T6MX.js";
|
|
113
124
|
import {
|
|
114
125
|
getMarkdownTheme
|
|
115
|
-
} from "./chunk-
|
|
126
|
+
} from "./chunk-RDDAZOMU.js";
|
|
116
127
|
import "./chunk-FQMM2EZ2.js";
|
|
117
128
|
import "./chunk-Q4Q6D4IY.js";
|
|
118
129
|
import "./chunk-BRJX2PRC.js";
|
|
@@ -122,7 +133,7 @@ import { randomUUID as randomUUID4 } from "node:crypto";
|
|
|
122
133
|
import * as fs10 from "node:fs";
|
|
123
134
|
import * as os from "node:os";
|
|
124
135
|
import * as path12 from "node:path";
|
|
125
|
-
import { Box, Container as
|
|
136
|
+
import { Box as Box2, Container as Container3, Spacer as Spacer2, Text as Text3, truncateToWidth as truncateToWidth2, visibleWidth as visibleWidth3, wrapTextWithAnsi as wrapTextWithAnsi2 } from "@ashx-j/lunr-tui";
|
|
126
137
|
|
|
127
138
|
// packages/coding-agent/dist/builtin-extensions/pi-subagents/src/tui/render.js
|
|
128
139
|
import { Container, Markdown, Spacer, Text, visibleWidth } from "@ashx-j/lunr-tui";
|
|
@@ -4467,6 +4478,7 @@ function parseQuestionRecord(raw) {
|
|
|
4467
4478
|
runId: input.runId.trim(),
|
|
4468
4479
|
childIndex,
|
|
4469
4480
|
childId: input.childId.trim(),
|
|
4481
|
+
...typeof input.childDescription == "string" && input.childDescription.trim() ? { childDescription: input.childDescription.trim() } : {},
|
|
4470
4482
|
parentSessionId: input.parentSessionId.trim(),
|
|
4471
4483
|
parentGeneration,
|
|
4472
4484
|
...incarnation ? { childIncarnation: incarnation } : {}
|
|
@@ -4575,6 +4587,7 @@ function createSupervisorQuestion(input) {
|
|
|
4575
4587
|
runId: input.runId,
|
|
4576
4588
|
childIndex: input.childIndex,
|
|
4577
4589
|
childId: input.childId,
|
|
4590
|
+
...input.childDescription ? { childDescription: input.childDescription } : {},
|
|
4578
4591
|
parentSessionId: input.parentSessionId,
|
|
4579
4592
|
parentGeneration: input.parentGeneration,
|
|
4580
4593
|
...input.childIncarnation ? { childIncarnation: input.childIncarnation } : {}
|
|
@@ -4640,8 +4653,7 @@ function formatParentQuestionForChild(question) {
|
|
|
4640
4653
|
function formatSupervisorQuestionAnswer(question) {
|
|
4641
4654
|
let state = supervisorQuestionPublicState(question), lines = [
|
|
4642
4655
|
state === "answered" ? `Subagent answer (${question.id})` : `Subagent question ${state} (${question.id})`,
|
|
4643
|
-
`
|
|
4644
|
-
`Child: ${question.childId} [#${question.childIndex}]`,
|
|
4656
|
+
`From: ${question.childDescription ?? `Subagent ${question.childIndex + 1}`}`,
|
|
4645
4657
|
`Decision: ${question.reason}`
|
|
4646
4658
|
];
|
|
4647
4659
|
return state === "answered" && question.answer?.trim() ? lines.push("", question.answer.trim()) : question.cancelReason && lines.push("", question.cancelReason), lines.join(`
|
|
@@ -4798,8 +4810,9 @@ function askRunningAsyncChild(input) {
|
|
|
4798
4810
|
let capability = readSteerCapability(resolved.location.asyncDir, child.index);
|
|
4799
4811
|
if (!capability?.supported)
|
|
4800
4812
|
throw new Error("This child is not ready to receive questions. Continue other work until it is ready; no question was queued.");
|
|
4801
|
-
let incarnation = { pid: capability.pid, readyAt: capability.readyAt }, question = createSupervisorQuestion({
|
|
4813
|
+
let incarnation = { pid: capability.pid, readyAt: capability.readyAt }, step = status.steps?.[child.index], childDescription = resolveCommunicationPeer(input.state, status.runId, child.index, child.childId, step?.description ?? child.agent), question = createSupervisorQuestion({
|
|
4802
4814
|
channelDir,
|
|
4815
|
+
childDescription,
|
|
4803
4816
|
reason,
|
|
4804
4817
|
message,
|
|
4805
4818
|
runId: status.runId,
|
|
@@ -4829,12 +4842,50 @@ function askRunningAsyncChild(input) {
|
|
|
4829
4842
|
runId: status.runId,
|
|
4830
4843
|
childIndex: child.index,
|
|
4831
4844
|
childId: child.childId,
|
|
4845
|
+
communication: { direction: "to", peer: childDescription, message, kind: "question" },
|
|
4832
4846
|
delivered: !1,
|
|
4833
4847
|
answered: !1
|
|
4834
4848
|
}
|
|
4835
4849
|
};
|
|
4836
4850
|
}
|
|
4837
4851
|
|
|
4852
|
+
// packages/coding-agent/dist/builtin-extensions/pi-subagents/src/tui/communication.js
|
|
4853
|
+
import { Box, Container as Container2, Text as Text2 } from "@ashx-j/lunr-tui";
|
|
4854
|
+
function renderCommunicationBody(communication, theme) {
|
|
4855
|
+
let direction = communication.direction === "from" ? "From" : "To";
|
|
4856
|
+
return new Text2(`${theme.fg("muted", `${direction}: ${communication.peer}`)}
|
|
4857
|
+
|
|
4858
|
+
${communication.message}`, 0, 0);
|
|
4859
|
+
}
|
|
4860
|
+
function renderCommunicationCard(communication, expanded, theme) {
|
|
4861
|
+
let box = new Box(1, 1, (text) => theme.bg("toolSuccessBg", text));
|
|
4862
|
+
return box.addChild(new Text2(theme.fg("toolTitle", theme.bold(`\u25CF subagent ${communication.kind}`)), 0, 0)), expanded && box.addChild(renderCommunicationBody(communication, theme)), box;
|
|
4863
|
+
}
|
|
4864
|
+
function renderCommunicationCall(name, args, theme, context, communication, displayTitle) {
|
|
4865
|
+
let container = new Container2(), details = context?.result?.details, saved = readCommunication(details?.communication) ?? communication, action = args.action ?? (args.reason === "need_decision" ? "request" : args.reason === "interview_request" ? "interview" : args.reason === "progress_update" ? "progress" : args.reason), title = theme.fg("toolTitle", theme.bold(`${name}${action ? ` ${action}` : ""}`));
|
|
4866
|
+
return container.addChild(new Text2(displayTitle ? `${title} ${theme.fg("accent", displayTitle)}` : title, 0, 0)), context?.expanded && saved && container.addChild(renderCommunicationBody(saved, theme)), container;
|
|
4867
|
+
}
|
|
4868
|
+
function renderCommunicationResult(content, details, expanded, isError, theme) {
|
|
4869
|
+
let container = new Container2();
|
|
4870
|
+
if (!expanded)
|
|
4871
|
+
return container;
|
|
4872
|
+
if (isError)
|
|
4873
|
+
container.addChild(new Text2(theme.fg("error", content.filter((part) => part.type === "text").map((part) => part.text ?? "").join(`
|
|
4874
|
+
`)), 0, 0));
|
|
4875
|
+
else {
|
|
4876
|
+
let saved = details;
|
|
4877
|
+
saved?.response ? container.addChild(new Text2(`
|
|
4878
|
+
${theme.fg("muted", "From: Supervisor")}
|
|
4879
|
+
|
|
4880
|
+
${saved.response}`, 0, 0)) : saved?.steering?.state ? container.addChild(new Text2(`
|
|
4881
|
+
Delivery: ${saved.steering.state === "recovered" ? "recovered; replacement launched" : saved.steering.state}`, 0, 0)) : saved?.asyncId && saved.communication ? container.addChild(new Text2(`
|
|
4882
|
+
Continuation launched.`, 0, 0)) : saved?.state && saved.communication ? container.addChild(new Text2(`
|
|
4883
|
+
${saved.state === "pending" ? "Question queued; awaiting an answer." : saved.state}`, 0, 0)) : saved?.communication || container.addChild(new Text2(content.filter((part) => part.type === "text").map((part) => part.text ?? "").join(`
|
|
4884
|
+
`), 0, 0));
|
|
4885
|
+
}
|
|
4886
|
+
return container;
|
|
4887
|
+
}
|
|
4888
|
+
|
|
4838
4889
|
// packages/coding-agent/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js
|
|
4839
4890
|
var REQUESTS_DIR = "requests", REPLIES_DIR = "replies", NATIVE_SUPERVISOR_TOOL_NAME = "subagent_supervisor";
|
|
4840
4891
|
var MAX_MESSAGE_BYTES2 = 64 * 1024, DEFAULT_ASK_TIMEOUT_MS2 = 600 * 1e3, CHANNEL_POLL_MS = Math.min(POLL_INTERVAL_MS, 500), STALE_EMPTY_CHANNEL_AGE_MS = 60 * 1e3, STALE_EMPTY_CHANNEL_CLEANUP_INTERVAL_MS = 60 * 1e3, PARENT_ASK_DESCRIPTION = [
|
|
@@ -4846,11 +4897,13 @@ var MAX_MESSAGE_BYTES2 = 64 * 1024, DEFAULT_ASK_TIMEOUT_MS2 = 600 * 1e3, CHANNEL
|
|
|
4846
4897
|
"Use pending or list to find child requests awaiting your reply; status reports channel availability. Free-form send is unsupported. Asking never revives a child or changes its assignment.",
|
|
4847
4898
|
'Reply: { action: "reply", replyTo: "<requestId>", message: "..." }'
|
|
4848
4899
|
].join(" "), CHILD_CONTACT_DESCRIPTION = [
|
|
4849
|
-
"Contact the
|
|
4900
|
+
"Contact the supervisor for decisions outside your assigned authority, safety concerns, or blockers. Make reversible implementation choices within your scope yourself.",
|
|
4901
|
+
"need_decision/interview_request wait for a reply: state the blocked decision, evidence, and recommended choice. Consolidate related questions; continue independent work before opening a blocking request.",
|
|
4902
|
+
"Return one self-contained final report with outcomes, verification, blockers, and artifact paths; the runtime delivers it. Routine work already appears in activity indicators.",
|
|
4850
4903
|
"For parent questions use action='reply' with replyTo set to the question id. Answer from current findings and uncertainty; do not start extra investigation just to reply. Continue the assigned task after replying.",
|
|
4851
4904
|
"Do not open a blocking need_decision while a parent question is already outstanding for this child."
|
|
4852
4905
|
].join(" "), ContactSupervisorParamsSchema = Type2.Object({
|
|
4853
|
-
reason: Type2.Optional(Type2.String({ enum: ["need_decision", "interview_request", "progress_update"] })),
|
|
4906
|
+
reason: Type2.Optional(Type2.String({ enum: ["need_decision", "interview_request", "progress_update", "handoff"] })),
|
|
4854
4907
|
message: Type2.Optional(Type2.String()),
|
|
4855
4908
|
interview: Type2.Optional(Type2.Unsafe({ type: "object", additionalProperties: !0 })),
|
|
4856
4909
|
action: Type2.Optional(Type2.String({ enum: ["reply"] })),
|
|
@@ -4874,6 +4927,40 @@ function safeSegment2(value) {
|
|
|
4874
4927
|
function replyPath(channelDir, requestId) {
|
|
4875
4928
|
return path8.join(channelDir, REPLIES_DIR, `${safeSegment2(requestId)}.json`);
|
|
4876
4929
|
}
|
|
4930
|
+
function communicationKind(reason) {
|
|
4931
|
+
return reason === "progress_update" ? "progress" : reason === "handoff" ? "handoff" : reason === "interview_request" ? "interview" : "request";
|
|
4932
|
+
}
|
|
4933
|
+
function communicationBody(message, interview, protocolVersion) {
|
|
4934
|
+
let body = protocolVersion === 2 ? message : legacySupervisorBody(message);
|
|
4935
|
+
return interview !== void 0 && protocolVersion === 2 ? `${body}
|
|
4936
|
+
|
|
4937
|
+
${JSON.stringify(interview, null, 2)}` : body;
|
|
4938
|
+
}
|
|
4939
|
+
function requestCommunication(request, state) {
|
|
4940
|
+
return {
|
|
4941
|
+
direction: "from",
|
|
4942
|
+
peer: resolveCommunicationPeer(state, request.runId, request.childIndex, request.agent, request.description),
|
|
4943
|
+
message: communicationBody(request.message, request.interview, request.protocolVersion),
|
|
4944
|
+
kind: communicationKind(request.reason)
|
|
4945
|
+
};
|
|
4946
|
+
}
|
|
4947
|
+
function registerSupervisorRenderers(pi, state) {
|
|
4948
|
+
for (let customType of [SUPERVISOR_REQUEST_TYPE, SUBAGENT_SUPERVISOR_ANSWER_TYPE])
|
|
4949
|
+
pi.registerMessageRenderer(customType, (message, options, theme) => {
|
|
4950
|
+
let details = message.details, communication = readCommunication(details?.communication) ?? {
|
|
4951
|
+
direction: "from",
|
|
4952
|
+
peer: details?.runId ? resolveCommunicationPeer(state, details.runId, details.childIndex ?? 0, details.childId ?? details.agent) : "Subagent",
|
|
4953
|
+
message: legacySupervisorBody(typeof message.content == "string" ? message.content : message.content.filter((part) => part.type === "text").map((part) => part.text).join(`
|
|
4954
|
+
`)),
|
|
4955
|
+
kind: customType === SUBAGENT_SUPERVISOR_ANSWER_TYPE ? "answer" : communicationKind(details?.reason)
|
|
4956
|
+
};
|
|
4957
|
+
return renderCommunicationCard(communication, options.expanded, theme);
|
|
4958
|
+
});
|
|
4959
|
+
pi.registerEntryRenderer(SUPERVISOR_PROGRESS_TYPE, (entry, options, theme) => {
|
|
4960
|
+
let communication = readCommunication(entry.data?.communication);
|
|
4961
|
+
return communication ? renderCommunicationCard(communication, options.expanded, theme) : void 0;
|
|
4962
|
+
});
|
|
4963
|
+
}
|
|
4877
4964
|
function askTimeoutMs2() {
|
|
4878
4965
|
let parsed = Number(process.env.PI_INTERCOM_ASK_TIMEOUT_MS);
|
|
4879
4966
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_ASK_TIMEOUT_MS2;
|
|
@@ -4888,7 +4975,7 @@ function hasTool(pi, name) {
|
|
|
4888
4975
|
function parseRequestFile(file, channelDir) {
|
|
4889
4976
|
try {
|
|
4890
4977
|
let parsed = JSON.parse(fs7.readFileSync(file, "utf-8"));
|
|
4891
|
-
return parsed.type !== "subagent.supervisor.request" || parsed.supervisorSessionId !== void 0 && (typeof parsed.supervisorSessionId != "string" || !parsed.supervisorSessionId.trim()) || typeof parsed.id != "string" || !parsed.id || parsed.reason !== "need_decision" && parsed.reason !== "interview_request" && parsed.reason !== "progress_update" || typeof parsed.message != "string" || !parsed.message || typeof parsed.runId != "string" || typeof parsed.agent != "string" || typeof parsed.childIndex != "number" ? void 0 : { ...parsed, channelDir, requestFile: file };
|
|
4978
|
+
return parsed.type !== "subagent.supervisor.request" || parsed.supervisorSessionId !== void 0 && (typeof parsed.supervisorSessionId != "string" || !parsed.supervisorSessionId.trim()) || typeof parsed.id != "string" || !parsed.id || parsed.reason !== "need_decision" && parsed.reason !== "interview_request" && parsed.reason !== "progress_update" && parsed.reason !== "handoff" || parsed.protocolVersion !== void 0 && parsed.protocolVersion !== 2 || parsed.protocolVersion === 2 && parsed.expectsReply !== (parsed.reason === "need_decision" || parsed.reason === "interview_request") || parsed.reason === "handoff" && parsed.protocolVersion !== 2 || parsed.description !== void 0 && typeof parsed.description != "string" || typeof parsed.message != "string" || !parsed.message || typeof parsed.runId != "string" || typeof parsed.agent != "string" || typeof parsed.childIndex != "number" ? void 0 : { ...parsed, channelDir, requestFile: file };
|
|
4892
4979
|
} catch {
|
|
4893
4980
|
return;
|
|
4894
4981
|
}
|
|
@@ -5014,22 +5101,26 @@ function requestExpiresAt(request, now) {
|
|
|
5014
5101
|
let expiresAt = request.expiresAt;
|
|
5015
5102
|
return typeof expiresAt == "number" && Number.isFinite(expiresAt) ? expiresAt : Number.isFinite(request.createdAt) ? request.createdAt + askTimeoutMs2() : now;
|
|
5016
5103
|
}
|
|
5017
|
-
function
|
|
5104
|
+
function requestRunState(request, state) {
|
|
5018
5105
|
if (state.foregroundControls.has(request.runId))
|
|
5019
|
-
return
|
|
5106
|
+
return "active";
|
|
5020
5107
|
let foregroundRun = state.foregroundRuns?.get(request.runId), foregroundChild = foregroundRun?.children.find((child) => child.index === request.childIndex && child.agent === request.agent) ?? foregroundRun?.children[request.childIndex];
|
|
5021
5108
|
if (foregroundChild)
|
|
5022
|
-
return foregroundChild.status
|
|
5023
|
-
let
|
|
5024
|
-
|
|
5025
|
-
return !1;
|
|
5026
|
-
if (asyncJob.status === "complete" || asyncJob.status === "failed" || asyncJob.status === "paused")
|
|
5027
|
-
return !0;
|
|
5028
|
-
let stepStatus = asyncJob.steps?.[request.childIndex]?.status;
|
|
5029
|
-
return stepStatus === "complete" || stepStatus === "completed" || stepStatus === "failed" || stepStatus === "paused";
|
|
5109
|
+
return foregroundChild.status === "stopped" ? "stopped" : foregroundChild.status === "detached" ? "active" : "inactive";
|
|
5110
|
+
let job = state.asyncJobs.get(request.runId) ?? state.fleetJobs?.get(request.runId), asyncDir = job?.asyncDir ?? path8.join(ASYNC_DIR, safeSegment2(request.runId)), status = readStatus(asyncDir), runStatus = status?.state ?? job?.status, stepStatus = (status?.steps ?? job?.steps)?.[request.childIndex]?.status;
|
|
5111
|
+
return fs7.existsSync(stopRequestPath(asyncDir)) || runStatus === "stopped" || job?.status === "stopped" || status?.stopped || stepStatus === "stopped" ? "stopped" : ["complete", "failed", "paused"].includes(runStatus ?? "") || ["complete", "completed", "failed", "paused"].includes(stepStatus ?? "") ? "inactive" : "active";
|
|
5030
5112
|
}
|
|
5031
5113
|
function requestLifecycle(request, state, ctx, now) {
|
|
5032
|
-
|
|
5114
|
+
if (ctx && !requestMatchesContext(request, state, ctx))
|
|
5115
|
+
return "wrong-session";
|
|
5116
|
+
if (!fs7.existsSync(request.requestFile))
|
|
5117
|
+
return "missing";
|
|
5118
|
+
if (request.expectsReply && fs7.existsSync(replyPath(request.channelDir, request.id)))
|
|
5119
|
+
return "resolved";
|
|
5120
|
+
if (request.expectsReply && now > requestExpiresAt(request, now))
|
|
5121
|
+
return "expired";
|
|
5122
|
+
let runState = requestRunState(request, state);
|
|
5123
|
+
return runState === "stopped" || request.expectsReply && runState === "inactive" ? "inactive" : "pending";
|
|
5033
5124
|
}
|
|
5034
5125
|
function cleanupRequestLifecycle(request, lifecycle) {
|
|
5035
5126
|
(lifecycle === "resolved" || lifecycle === "expired" || lifecycle === "inactive") && removeRequestFile(request.requestFile);
|
|
@@ -5045,9 +5136,9 @@ function formatPendingLine(request) {
|
|
|
5045
5136
|
let replyHint = request.expectsReply ? ` Reply: ${NATIVE_SUPERVISOR_TOOL_NAME}({ action: "reply", replyTo: "${request.id}", message: "..." })` : "";
|
|
5046
5137
|
return `- ${request.id}: ${request.agent} [${request.runId}#${request.childIndex}] ${request.reason}.${replyHint}`;
|
|
5047
5138
|
}
|
|
5048
|
-
function requestVisibleText(request) {
|
|
5049
|
-
let lines = [
|
|
5050
|
-
return request.expectsReply && lines.push("", `Reply with: ${NATIVE_SUPERVISOR_TOOL_NAME}({ action: "reply", replyTo: "${request.id}", message: "..." })`), lines.join(`
|
|
5139
|
+
function requestVisibleText(request, communication) {
|
|
5140
|
+
let lines = [`From: ${communication.peer}`, "", communication.message];
|
|
5141
|
+
return request.reason === "interview_request" && lines.push("", "Reply with JSON matching the requested interview shape."), request.expectsReply && lines.push("", `Reply with: ${NATIVE_SUPERVISOR_TOOL_NAME}({ action: "reply", replyTo: "${request.id}", message: "..." })`), lines.join(`
|
|
5051
5142
|
`);
|
|
5052
5143
|
}
|
|
5053
5144
|
function writeReply(request, message) {
|
|
@@ -5096,6 +5187,13 @@ function buildParentIntercomTool(pending, state, name = "intercom") {
|
|
|
5096
5187
|
label: name === "intercom" ? "Intercom" : "Subagent Supervisor",
|
|
5097
5188
|
description: PARENT_ASK_DESCRIPTION,
|
|
5098
5189
|
parameters: ParentSupervisorParamsSchema,
|
|
5190
|
+
renderCall(args, theme, context) {
|
|
5191
|
+
let request = args.action === "reply" ? pending.get(args.replyTo) : void 0, peer = request ? requestCommunication(request, state).peer : args.id ? resolveCommunicationPeer(state, args.id, args.index ?? 0, args.childId) : "Subagent";
|
|
5192
|
+
return renderCommunicationCall(name, args, theme, context, args.message ? { direction: "to", peer, message: args.message, kind: args.action === "ask" ? "question" : "reply" } : void 0);
|
|
5193
|
+
},
|
|
5194
|
+
renderResult(result2, options, theme, context) {
|
|
5195
|
+
return renderCommunicationResult(result2.content, result2.details, options.expanded, context.isError, theme);
|
|
5196
|
+
},
|
|
5099
5197
|
async execute(_id, params) {
|
|
5100
5198
|
refreshPendingRequests(pending, state, state.lastUiContext ?? void 0);
|
|
5101
5199
|
let input = params;
|
|
@@ -5108,7 +5206,7 @@ function buildParentIntercomTool(pending, state, name = "intercom") {
|
|
|
5108
5206
|
}
|
|
5109
5207
|
if (input.action === "reply") {
|
|
5110
5208
|
let request = resolvePendingRequest(pending, input);
|
|
5111
|
-
return writeReply(request, input.message ?? ""), pending.delete(request.id), { content: [{ type: "text", text: `Replied to
|
|
5209
|
+
return writeReply(request, input.message ?? ""), pending.delete(request.id), { content: [{ type: "text", text: `Replied to ${requestCommunication(request, state).peer}.` }], details: { replyTo: request.id, runId: request.runId, agent: request.agent, communication: { ...requestCommunication(request, state), direction: "to", kind: "reply", message: input.message } } };
|
|
5112
5210
|
}
|
|
5113
5211
|
if (input.action === "ask")
|
|
5114
5212
|
return askRunningAsyncChild({
|
|
@@ -5130,29 +5228,30 @@ function questionMatchesParentContext(question, state, ctx) {
|
|
|
5130
5228
|
let sessionId = currentSupervisorSessionId(state, ctx);
|
|
5131
5229
|
return !(!sessionId || question.parentSessionId !== sessionId || (state.sessionGeneration ?? 0) !== question.parentGeneration);
|
|
5132
5230
|
}
|
|
5133
|
-
function notifyQuestionTerminal(pi, question, channelDir) {
|
|
5231
|
+
function notifyQuestionTerminal(pi, question, channelDir, state) {
|
|
5134
5232
|
if (!supervisorQuestionIsTerminal(question) || question.notifiedAt || (pi.events?.emit(SUBAGENT_QUESTION_EVENT, {
|
|
5135
5233
|
questionId: question.id,
|
|
5136
5234
|
state: supervisorQuestionPublicState(question),
|
|
5137
5235
|
runId: question.runId
|
|
5138
5236
|
}), isQuestionWaitActive(question.id)) || !claimQuestionNotification(channelDir, question.id))
|
|
5139
5237
|
return;
|
|
5140
|
-
let
|
|
5238
|
+
let outcome = supervisorQuestionPublicState(question), communication = { direction: "from", peer: question.childDescription ?? resolveCommunicationPeer(state, question.runId, question.childIndex, question.childId), message: question.answer ?? question.cancelReason ?? outcome, kind: "answer" };
|
|
5141
5239
|
pi.sendMessage({
|
|
5142
5240
|
customType: SUBAGENT_SUPERVISOR_ANSWER_TYPE,
|
|
5143
5241
|
content: formatSupervisorQuestionAnswer(question),
|
|
5144
|
-
display:
|
|
5242
|
+
display: outcome === "answered",
|
|
5145
5243
|
details: {
|
|
5146
5244
|
questionId: question.id,
|
|
5147
|
-
state,
|
|
5245
|
+
state: outcome,
|
|
5246
|
+
communication,
|
|
5148
5247
|
runId: question.runId,
|
|
5149
5248
|
childIndex: question.childIndex,
|
|
5150
5249
|
childId: question.childId,
|
|
5151
5250
|
reason: question.reason,
|
|
5152
|
-
answered:
|
|
5251
|
+
answered: outcome === "answered",
|
|
5153
5252
|
delivered: !!question.deliveredAt
|
|
5154
5253
|
}
|
|
5155
|
-
}, { triggerTurn:
|
|
5254
|
+
}, { triggerTurn: outcome === "answered" });
|
|
5156
5255
|
}
|
|
5157
5256
|
function pollSupervisorQuestions(pi, state, ctx) {
|
|
5158
5257
|
for (let channelDir of listSupervisorChannelDirs())
|
|
@@ -5160,11 +5259,11 @@ function pollSupervisorQuestions(pi, state, ctx) {
|
|
|
5160
5259
|
if (!questionMatchesParentContext(question, state, ctx))
|
|
5161
5260
|
continue;
|
|
5162
5261
|
let current = reconcileAsyncQuestion(channelDir, question, state);
|
|
5163
|
-
notifyQuestionTerminal(pi, current, channelDir);
|
|
5262
|
+
notifyQuestionTerminal(pi, current, channelDir, state);
|
|
5164
5263
|
}
|
|
5165
5264
|
}
|
|
5166
5265
|
function createNativeSupervisorChannel(pi, state) {
|
|
5167
|
-
let pending = /* @__PURE__ */ new Map(), seenFiles = /* @__PURE__ */ new Set(), poller, lastStaleCleanupAt = 0, registerParentTools = () => {
|
|
5266
|
+
let pending = /* @__PURE__ */ new Map(), seenFiles = /* @__PURE__ */ new Set(), deliveredRequests = /* @__PURE__ */ new Set(), poller, lastStaleCleanupAt = 0, registerParentTools = () => {
|
|
5168
5267
|
hasTool(pi, NATIVE_SUPERVISOR_TOOL_NAME) || pi.registerTool(buildParentIntercomTool(pending, state, NATIVE_SUPERVISOR_TOOL_NAME)), hasTool(pi, "intercom") || pi.registerTool(buildParentIntercomTool(pending, state));
|
|
5169
5268
|
}, cleanupStaleChannelsIfDue = () => {
|
|
5170
5269
|
let nowMs = Date.now();
|
|
@@ -5205,19 +5304,25 @@ function createNativeSupervisorChannel(pi, state) {
|
|
|
5205
5304
|
seenFiles.add(file), cleanupRequestLifecycle(request, lifecycle);
|
|
5206
5305
|
continue;
|
|
5207
5306
|
}
|
|
5208
|
-
if (
|
|
5209
|
-
|
|
5210
|
-
|
|
5307
|
+
if (request.expectsReply && pending.set(request.id, request), deliveredRequests.has(request.id)) {
|
|
5308
|
+
seenFiles.add(file);
|
|
5309
|
+
continue;
|
|
5310
|
+
}
|
|
5311
|
+
let communication = requestCommunication(request, state), details = {
|
|
5312
|
+
id: request.id,
|
|
5313
|
+
reason: request.reason,
|
|
5314
|
+
expectsReply: request.expectsReply,
|
|
5315
|
+
runId: request.runId,
|
|
5316
|
+
agent: request.agent,
|
|
5317
|
+
childIndex: request.childIndex,
|
|
5318
|
+
communication
|
|
5319
|
+
};
|
|
5320
|
+
if (request.reason === "progress_update" && request.protocolVersion === 2 ? pi.appendEntry(SUPERVISOR_PROGRESS_TYPE, details) : pi.sendMessage({
|
|
5321
|
+
customType: SUPERVISOR_REQUEST_TYPE,
|
|
5322
|
+
content: requestVisibleText(request, communication),
|
|
5211
5323
|
display: !0,
|
|
5212
|
-
details
|
|
5213
|
-
|
|
5214
|
-
reason: request.reason,
|
|
5215
|
-
expectsReply: request.expectsReply,
|
|
5216
|
-
runId: request.runId,
|
|
5217
|
-
agent: request.agent,
|
|
5218
|
-
childIndex: request.childIndex
|
|
5219
|
-
}
|
|
5220
|
-
}), request.expectsReply) {
|
|
5324
|
+
details
|
|
5325
|
+
}, { triggerTurn: request.expectsReply || request.reason === "handoff" }), deliveredRequests.add(request.id), seenFiles.add(file), request.expectsReply || removeRequestFile(request.requestFile), request.expectsReply) {
|
|
5221
5326
|
let job = state.asyncJobs.get(request.runId);
|
|
5222
5327
|
job && (job.activityState = "needs_attention");
|
|
5223
5328
|
let events = pi.events;
|
|
@@ -5238,10 +5343,17 @@ function createNativeSupervisorChannel(pi, state) {
|
|
|
5238
5343
|
};
|
|
5239
5344
|
return {
|
|
5240
5345
|
start: () => {
|
|
5241
|
-
|
|
5346
|
+
if (!poller) {
|
|
5347
|
+
registerParentTools();
|
|
5348
|
+
for (let entry of state.lastUiContext?.sessionManager.getBranch?.() ?? []) {
|
|
5349
|
+
let data = entry.type === "custom_message" && entry.customType === SUPERVISOR_REQUEST_TYPE ? entry.details : entry.type === "custom" && entry.customType === SUPERVISOR_PROGRESS_TYPE ? entry.data : void 0;
|
|
5350
|
+
data && typeof data == "object" && "id" in data && typeof data.id == "string" && deliveredRequests.add(data.id);
|
|
5351
|
+
}
|
|
5352
|
+
poll(), poller = setInterval(poll, CHANNEL_POLL_MS), poller.unref?.();
|
|
5353
|
+
}
|
|
5242
5354
|
},
|
|
5243
5355
|
dispose: () => {
|
|
5244
|
-
cancelOwnedQuestions("parent supervisor channel disposed"), poller && clearInterval(poller), poller = void 0, pending.clear(), seenFiles.clear();
|
|
5356
|
+
cancelOwnedQuestions("parent supervisor channel disposed"), poller && clearInterval(poller), poller = void 0, pending.clear(), seenFiles.clear(), deliveredRequests.clear();
|
|
5245
5357
|
},
|
|
5246
5358
|
pending,
|
|
5247
5359
|
cancelOwnedQuestions,
|
|
@@ -5722,6 +5834,8 @@ async function waitForDetachedForegroundRun(run, signal, deps, startedAt, now, p
|
|
|
5722
5834
|
let outcome = summarizeForegroundChildren(current, initialDetachedIndices);
|
|
5723
5835
|
return result(`Waited ${formatDuration(now() - startedAt)} for remembered detached foreground run "${run.runId}"; done. Outcome: ${outcome || "no recovered child status"}. Completion event observed; inspect with subagent({ action: "status", id: "${run.runId}" }) for recovered output.`);
|
|
5724
5836
|
}
|
|
5837
|
+
if (deps.wasInterrupted?.())
|
|
5838
|
+
return result("Wait interrupted by user input; background work remains active.");
|
|
5725
5839
|
if (signal?.aborted)
|
|
5726
5840
|
return result(`Wait aborted after ${formatDuration(now() - startedAt)}. Remembered foreground run "${run.runId}" remains detached.`, !0);
|
|
5727
5841
|
if (now() - startedAt >= timeoutMs)
|
|
@@ -5761,6 +5875,8 @@ async function waitForSupervisorQuestion(questionId, signal, deps, startedAt, no
|
|
|
5761
5875
|
}
|
|
5762
5876
|
};
|
|
5763
5877
|
}
|
|
5878
|
+
if (deps.wasInterrupted?.())
|
|
5879
|
+
return result("Wait interrupted by user input; background work remains active.");
|
|
5764
5880
|
if (signal?.aborted)
|
|
5765
5881
|
return result(`Wait aborted after ${formatDuration(now() - startedAt)} for supervisor question "${questionId}".`, !0);
|
|
5766
5882
|
if (now() - startedAt >= timeoutMs)
|
|
@@ -5811,8 +5927,12 @@ async function waitForSubagents(params, signal, deps) {
|
|
|
5811
5927
|
...activeInitialRuns.map((run) => `${run.id} (${run.state})`),
|
|
5812
5928
|
...activeInitialProviderItems.map((item) => `${item.provider}/${item.id}`)
|
|
5813
5929
|
].join(", ");
|
|
5930
|
+
if (deps.wasInterrupted?.())
|
|
5931
|
+
return result("Wait interrupted by user input; background work remains active.");
|
|
5814
5932
|
if (signal?.aborted)
|
|
5815
5933
|
return result(`Wait aborted after ${formatDuration(now() - startedAt)}. Still active: ${stillActive}.`, !0);
|
|
5934
|
+
if (deps.shouldYield?.())
|
|
5935
|
+
return result("Wait yielded for pending session messages; background work remains active.");
|
|
5816
5936
|
if (now() - startedAt >= timeoutMs)
|
|
5817
5937
|
return result(`Wait timed out after ${formatDuration(timeoutMs)} with ${activeInitialRuns.length} async run(s) and ${activeInitialProviderItems.length} provider item(s) still active: ${stillActive}. The work keeps going; call subagent_wait again or inspect subagent status.`, !0);
|
|
5818
5938
|
try {
|
|
@@ -5842,6 +5962,16 @@ async function waitForSubagents(params, signal, deps) {
|
|
|
5842
5962
|
}
|
|
5843
5963
|
|
|
5844
5964
|
// packages/coding-agent/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js
|
|
5965
|
+
var WAIT_INTERRUPTION_SYMBOL = /* @__PURE__ */ Symbol.for("@lunr/subagent-wait-interruption");
|
|
5966
|
+
function registerWaitInterruption(sessionId) {
|
|
5967
|
+
return sessionId ? globalThis[WAIT_INTERRUPTION_SYMBOL]?.owners?.get(sessionId)?.register() : void 0;
|
|
5968
|
+
}
|
|
5969
|
+
function interruptedResult() {
|
|
5970
|
+
return {
|
|
5971
|
+
content: [{ type: "text", text: "Wait interrupted by user input; background work remains active." }],
|
|
5972
|
+
details: { mode: "management", results: [] }
|
|
5973
|
+
};
|
|
5974
|
+
}
|
|
5845
5975
|
function registerWaitTool(pi, state, enabled = resolveWaitToolConfig().enabled, waitForPendingLaunches) {
|
|
5846
5976
|
let tool = {
|
|
5847
5977
|
name: "subagent_wait",
|
|
@@ -5861,7 +5991,25 @@ Provider jobs are session-scoped and identified exactly, so replacing one job wi
|
|
|
5861
5991
|
Configured behavior: subagent_wait is disabled by config.waitTool or PI_SUBAGENT_WAIT_TOOL_ENABLED and returns immediately without blocking.`}`,
|
|
5862
5992
|
parameters: SubagentWaitParams,
|
|
5863
5993
|
async execute(_id, params, signal) {
|
|
5864
|
-
|
|
5994
|
+
await Promise.resolve();
|
|
5995
|
+
let interruption = registerWaitInterruption(state.currentSessionId), waitSignal = interruption ? signal ? AbortSignal.any([signal, interruption.signal]) : interruption.signal : signal;
|
|
5996
|
+
try {
|
|
5997
|
+
try {
|
|
5998
|
+
await waitForPendingLaunches?.(waitSignal);
|
|
5999
|
+
} catch (error) {
|
|
6000
|
+
if (interruption?.wasInterrupted())
|
|
6001
|
+
return interruptedResult();
|
|
6002
|
+
throw error;
|
|
6003
|
+
}
|
|
6004
|
+
return interruption?.wasInterrupted() ? interruptedResult() : (signal?.throwIfAborted(), waitForSubagents(params, waitSignal, {
|
|
6005
|
+
state,
|
|
6006
|
+
events: pi.events,
|
|
6007
|
+
enabled,
|
|
6008
|
+
wasInterrupted: interruption?.wasInterrupted
|
|
6009
|
+
}));
|
|
6010
|
+
} finally {
|
|
6011
|
+
interruption?.unregister();
|
|
6012
|
+
}
|
|
5865
6013
|
}
|
|
5866
6014
|
};
|
|
5867
6015
|
pi.registerTool(tool);
|
|
@@ -5888,7 +6036,7 @@ async function drainOutstandingWork(deps) {
|
|
|
5888
6036
|
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
|
|
5889
6037
|
throw new Error("Auto-drain timeoutMs must be a positive finite number.");
|
|
5890
6038
|
let deadlineAt = now() + timeoutMs, hasWork = deps.hasWork ?? hasOutstandingWork, wait = deps.wait ?? waitForSubagents;
|
|
5891
|
-
for (; hasWork(sessionId, now()); ) {
|
|
6039
|
+
for (; !deps.hasPendingMessages?.() && hasWork(sessionId, now()); ) {
|
|
5892
6040
|
let remainingMs = deadlineAt - now();
|
|
5893
6041
|
if (remainingMs <= 0)
|
|
5894
6042
|
throw new Error(`Auto-drain timed out after ${timeoutMs}ms with background work still active in session '${sessionId}'.`);
|
|
@@ -5897,6 +6045,7 @@ async function drainOutstandingWork(deps) {
|
|
|
5897
6045
|
events: deps.events,
|
|
5898
6046
|
now,
|
|
5899
6047
|
stopOnAttention: !1,
|
|
6048
|
+
shouldYield: deps.hasPendingMessages,
|
|
5900
6049
|
failOnFailedRuns: !0
|
|
5901
6050
|
});
|
|
5902
6051
|
if (waitResult.isError)
|
|
@@ -6186,7 +6335,7 @@ var CUSTOM_TOOL_DESCRIPTION_FILE = "subagent-tool-description.md", CUSTOM_TOOL_D
|
|
|
6186
6335
|
\u2022 Choose the lowest tier that can reliably complete the task.
|
|
6187
6336
|
\u2022 light: Use for simple, straightforward tasks that require little reasoning. Good for quick checks, finding information, collecting facts for research, inspecting a small amount of code, or verifying a specific fact.
|
|
6188
6337
|
\u2022 standard: Use for moderately difficult work and everyday coding tasks. Good for writing simple code, fixing a clearly described bug, reviewing a focused change, or completing work with clear requirements. Use heavy when the task requires deep architectural understanding or complex reasoning.
|
|
6189
|
-
\u2022 heavy: Use for complex or ambiguous tasks that require deep reasoning and strong code understanding. Good for implementing complex plans, debugging difficult or poorly understood problems, reviewing large or high-risk changes, and making architectural decisions.`, SUBAGENT_SAFETY_GUIDANCE = `SAFETY-CRITICAL SUBAGENT GUIDANCE:
|
|
6338
|
+
\u2022 heavy: Use for complex or ambiguous tasks that require deep reasoning and strong code understanding. Good for implementing complex plans, debugging difficult or poorly understood problems, reviewing large or high-risk changes, and making architectural decisions.`, SUBAGENT_COORDINATION_GUIDANCE = "Define file ownership, local decision authority, and required outputs at launch. Establish shared contracts before dependent parallel work; use chains and artifacts to pass results. Native child intercom reaches the supervisor only, not siblings. Reserve parent relays for actionable exceptions, not routine progress or implementation approvals.", SUBAGENT_SAFETY_GUIDANCE = `SAFETY-CRITICAL SUBAGENT GUIDANCE:
|
|
6190
6339
|
\u2022 Prompt children directly. There is no agent roster. Every execution task needs task (the full child prompt) and description (a concise UI label).
|
|
6191
6340
|
\u2022 Every executable child chooses exactly one of tier: "light"|"standard"|"heavy" (default) or model: "provider/id" when the user names a model. Do not pass both, and do not use inherit. Missing, disabled, unconfigured, unavailable, or unauthenticated selections fail before launch.
|
|
6192
6341
|
\u2022 Optional thinking (off/minimal/low/medium/high/xhigh/max) is only valid with an explicit model. Tier launches use the configured tier thinking level.
|
|
@@ -6196,6 +6345,7 @@ ${SUBAGENT_TIER_GUIDANCE}
|
|
|
6196
6345
|
\u2022 ${SUBAGENT_ASYNC_GUIDANCE}
|
|
6197
6346
|
\u2022 Child-safety boundary: ordinary children are not orchestrators and must not run subagents. Only explicitly configured fanout children may use the child-safe subagent tool, still bounded by depth/session limits.
|
|
6198
6347
|
\u2022 Writing/review safety: keep one full-access writer for the same cwd/worktree. Use fresh-context permissions: "read-only" children for independent review, then have the parent synthesize and apply fixes as the sole writer unless an isolated worktree was intentionally requested.
|
|
6348
|
+
\u2022 ${SUBAGENT_COORDINATION_GUIDANCE}
|
|
6199
6349
|
\u2022 Artifacts/status essentials: chain outputs live under {chain_dir}; async runs expose asyncId/asyncDir with status.json, events.jsonl, output logs, and status via { action: "status", id }. Include output paths and residual risks when reporting results.`, FULL_SUBAGENT_TOOL_DESCRIPTION = `Delegate work to generic children by prompting them directly. There are no named agent types.
|
|
6200
6350
|
|
|
6201
6351
|
EXECUTION (use exactly ONE mode):
|
|
@@ -6247,6 +6397,7 @@ EXECUTE:
|
|
|
6247
6397
|
\u2022 description is required (single-line, max 80 chars, UI only). task is the full child prompt. permissions omitted = full. Plan-mode parents must pass permissions:"read-only".
|
|
6248
6398
|
\u2022 Exactly one of tier:"light"|"standard"|"heavy" (default) or model:"provider/id" when the user names a model. thinking only with model. No inherit; fail closed on unavailable selections. Children always start fresh. timeoutMs/maxRuntimeMs apply to foreground and async/background runs.
|
|
6249
6399
|
${SUBAGENT_TIER_GUIDANCE}
|
|
6400
|
+
\u2022 ${SUBAGENT_COORDINATION_GUIDANCE}
|
|
6250
6401
|
\u2022 Chain templates may use {task}, {previous}, {chain_dir}, and named outputs. Parallel worktree isolation requires a clean git repo.
|
|
6251
6402
|
\u2022 Chain example: { chain: [{task:"Analyze {task}", description:"Analyze request", tier:"standard"}, {parallel: [{task:"Check {previous}", description:"Check prior result", tier:"light", permissions:"read-only", count: 3}]}] }
|
|
6252
6403
|
|
|
@@ -6419,20 +6570,20 @@ function resolveSubagentActionDisplayTitle(args, state) {
|
|
|
6419
6570
|
function renderSubagentCall(rawArgs, theme, context, options) {
|
|
6420
6571
|
let args = resolveSubagentRequestParams(rawArgs);
|
|
6421
6572
|
if (args.action) {
|
|
6422
|
-
let
|
|
6423
|
-
return new
|
|
6573
|
+
let resolvedTitle = context?.result?.details?.displayTitle || options?.resolveActionTitle?.(args), target = resolvedTitle || args.id || args.runId || "";
|
|
6574
|
+
return (args.action === "steer" || args.action === "resume") && args.message ? renderCommunicationCall("subagent", args, theme, context, { direction: "to", peer: resolvedTitle || "Subagent", kind: "steer", message: args.message }, resolvedTitle) : new Text3(`${theme.fg("toolTitle", theme.bold("subagent "))}${args.action}${target ? ` ${theme.fg("accent", target)}` : ""}`, 0, 0);
|
|
6424
6575
|
}
|
|
6425
6576
|
let isParallel = (args.tasks?.length ?? 0) > 0, parallelCount = effectiveParallelTaskCount(args.tasks), asyncMark = subagentLaunchRunsAsync(args) ? `${theme.fg("warning", "async")} ` : "";
|
|
6426
6577
|
if (args.chain?.length)
|
|
6427
|
-
return new
|
|
6578
|
+
return new Text3(`${theme.fg("toolTitle", theme.bold("subagent "))}${asyncMark}chain (${args.chain.length})`, 0, 0);
|
|
6428
6579
|
if (isParallel)
|
|
6429
|
-
return new
|
|
6580
|
+
return new Text3(`${theme.fg("toolTitle", theme.bold("subagent "))}${asyncMark}parallel (${parallelCount})`, 0, 0);
|
|
6430
6581
|
let description = !context?.result && !context?.isPartial && !context?.expanded && !context?.isError ? theme.fg("accent", args.description || args.task || "?") : "", title = theme.fg("toolTitle", theme.bold("subagent")), rest = [asyncMark.trim() ? theme.fg("warning", "async") : "", description].filter(Boolean).join(" ");
|
|
6431
|
-
return new
|
|
6582
|
+
return new Text3(rest ? `${title} ${rest}` : title, 0, 0);
|
|
6432
6583
|
}
|
|
6433
6584
|
function renderSubagentNotify(details, theme) {
|
|
6434
6585
|
let status = typeof details?.status == "string" ? details.status : "", icon = status === "completed" ? theme.fg("success", "\u2713") : status === "failed" ? theme.fg("error", "\u2717") : theme.fg("warning", "\u25A0"), title = details?.agent || "child";
|
|
6435
|
-
return new
|
|
6586
|
+
return new Text3(`${icon} ${theme.bold(title)} ${theme.fg("dim", status)}`, 0, 0);
|
|
6436
6587
|
}
|
|
6437
6588
|
function ensureSubagentResultAnimation(context) {
|
|
6438
6589
|
let state = context.state;
|
|
@@ -6459,14 +6610,14 @@ function isStaleExtensionContextError(error) {
|
|
|
6459
6610
|
}
|
|
6460
6611
|
function rebuildSlashResultContainer(container, result2, options, theme) {
|
|
6461
6612
|
container.clear(), container.addChild(new Spacer2(1));
|
|
6462
|
-
let boxTheme = isSlashResultRunning(result2) ? "toolPendingBg" : isSlashResultError(result2) ? "toolErrorBg" : "toolSuccessBg", box = new
|
|
6613
|
+
let boxTheme = isSlashResultRunning(result2) ? "toolPendingBg" : isSlashResultError(result2) ? "toolErrorBg" : "toolSuccessBg", box = new Box2(1, 1, (text) => theme.bg(boxTheme, text));
|
|
6463
6614
|
box.addChild(renderSubagentResult(result2, options, theme)), container.addChild(box);
|
|
6464
6615
|
}
|
|
6465
6616
|
function createSlashResultComponent(details, options, theme) {
|
|
6466
|
-
let container = new
|
|
6617
|
+
let container = new Container3(), lastVersion = -1;
|
|
6467
6618
|
return container.render = (width) => {
|
|
6468
6619
|
let snapshot = getSlashRenderableSnapshot(details);
|
|
6469
|
-
return (snapshot.version !== lastVersion || isSlashResultRunning(snapshot.result)) && (lastVersion = snapshot.version, rebuildSlashResultContainer(container, snapshot.result, options, theme)),
|
|
6620
|
+
return (snapshot.version !== lastVersion || isSlashResultRunning(snapshot.result)) && (lastVersion = snapshot.version, rebuildSlashResultContainer(container, snapshot.result, options, theme)), Container3.prototype.render.call(container, width);
|
|
6470
6621
|
}, container;
|
|
6471
6622
|
}
|
|
6472
6623
|
function registerSubagentExtension(pi) {
|
|
@@ -6534,7 +6685,7 @@ function registerSubagentExtension(pi) {
|
|
|
6534
6685
|
try {
|
|
6535
6686
|
let currentGeneration = generation;
|
|
6536
6687
|
if (signal?.throwIfAborted(), !executorPromise) {
|
|
6537
|
-
let pending = import("./subagent-executor-
|
|
6688
|
+
let pending = import("./subagent-executor-M5VWB3D3.js").then(({ createSubagentExecutor }) => {
|
|
6538
6689
|
if (generation !== currentGeneration)
|
|
6539
6690
|
throw new Error("Subagent session changed before initialization");
|
|
6540
6691
|
return createSubagentExecutor({
|
|
@@ -6563,27 +6714,31 @@ function registerSubagentExtension(pi) {
|
|
|
6563
6714
|
}
|
|
6564
6715
|
}
|
|
6565
6716
|
};
|
|
6566
|
-
executorExecute = executor.execute, pi.registerMessageRenderer(SLASH_RESULT_TYPE, (message, options, theme) => {
|
|
6717
|
+
executorExecute = executor.execute, registerSupervisorRenderers(pi, state), pi.registerMessageRenderer(SLASH_RESULT_TYPE, (message, options, theme) => {
|
|
6567
6718
|
let details = resolveSlashMessageDetails(message.details);
|
|
6568
6719
|
if (details)
|
|
6569
6720
|
return createSlashResultComponent(details, options, theme);
|
|
6570
6721
|
}), pi.registerMessageRenderer(SLASH_TEXT_RESULT_TYPE, (message, _options, _theme) => {
|
|
6571
6722
|
let content = typeof message.content == "string" ? message.content : message.content.filter((entry) => entry.type === "text").map((entry) => entry.text).join(`
|
|
6572
6723
|
`);
|
|
6573
|
-
return new
|
|
6724
|
+
return new Text3(content, 0, 0);
|
|
6574
6725
|
}), pi.registerMessageRenderer("subagent-notify", (message, _options, theme) => {
|
|
6575
6726
|
let content = typeof message.content == "string" ? message.content : "", details = message.details ?? parseSubagentNotifyContent(content);
|
|
6576
|
-
return details ? renderSubagentNotify(details, theme) : new
|
|
6727
|
+
return details ? renderSubagentNotify(details, theme) : new Text3(content, 0, 0);
|
|
6577
6728
|
}), pi.registerMessageRenderer(SUBAGENT_STEERING_MESSAGE_TYPE, (message, _options, theme) => {
|
|
6578
6729
|
let details = message.details;
|
|
6579
6730
|
if (details)
|
|
6580
|
-
return new
|
|
6731
|
+
return new Text3(theme.fg(details.state === "recovered" ? "warning" : "error", formatSteeringNotice(details)), 0, 0);
|
|
6581
6732
|
}), pi.registerMessageRenderer(SUBAGENT_CONTROL_MESSAGE_TYPE, () => {
|
|
6582
6733
|
});
|
|
6583
6734
|
let executeSubagentCollapsed = async (id, params, signal, onUpdate, ctx) => {
|
|
6584
6735
|
ctx.hasUI && ctx.ui.setToolsExpanded(!1);
|
|
6585
|
-
let
|
|
6586
|
-
|
|
6736
|
+
let isCommunication = (params.action === "steer" || params.action === "resume") && typeof params.message == "string", displayTitle = isCommunication ? resolveSubagentActionDisplayTitle(params, state) : void 0, jobs = isCommunication ? matchingActionJobs(state, (params.id || params.runId || "").trim()) : [], targetNames = new Map(jobs.length === 1 ? jobs[0].steps?.map((step, index) => [step.index ?? index, childRowLabel(step)]) : []), result2 = await executor.execute(id, params, signal, onUpdate, ctx);
|
|
6737
|
+
if (displayTitle && result2.details && (result2.details.displayTitle = displayTitle), isCommunication && result2.details) {
|
|
6738
|
+
let targets = result2.details.steering?.targets.map((target) => targetNames.get(target.index) ?? `Subagent ${target.index + 1}`), peer = targets?.length ? targets.join(", ") : displayTitle || "Subagent";
|
|
6739
|
+
result2.details.communication = { direction: "to", peer, kind: "steer", message: params.message };
|
|
6740
|
+
}
|
|
6741
|
+
return result2;
|
|
6587
6742
|
}, slashBridge = registerSlashSubagentBridge({
|
|
6588
6743
|
events: pi.events,
|
|
6589
6744
|
getContext: () => state.lastUiContext,
|
|
@@ -6613,6 +6768,8 @@ function registerSubagentExtension(pi) {
|
|
|
6613
6768
|
resolveActionTitle: (params) => resolveSubagentActionDisplayTitle(params, state)
|
|
6614
6769
|
}),
|
|
6615
6770
|
renderResult(result2, options, theme, context) {
|
|
6771
|
+
if (result2.details?.communication)
|
|
6772
|
+
return renderCommunicationResult(result2.content, result2.details, options.expanded, context.isError, theme);
|
|
6616
6773
|
subagentResultIsRunning(result2) ? ensureSubagentResultAnimation(context) : clearLegacyResultAnimationTimer(context);
|
|
6617
6774
|
let state2 = context.state, entries = [];
|
|
6618
6775
|
state2.animEntries = entries, subagentAnimSink.current = entries;
|
|
@@ -6630,7 +6787,7 @@ function registerSubagentExtension(pi) {
|
|
|
6630
6787
|
launches.length !== 0 && await awaitWithAbort(Promise.all(launches).then(() => {
|
|
6631
6788
|
}), signal);
|
|
6632
6789
|
}), pi.on("agent_end", async (_event, ctx) => {
|
|
6633
|
-
ctx.hasUI || await drainOutstandingWork({ state, events: pi.events });
|
|
6790
|
+
ctx.hasUI || await drainOutstandingWork({ state, events: pi.events, hasPendingMessages: () => ctx.hasPendingMessages() });
|
|
6634
6791
|
}), registerSlashCommands(pi, state);
|
|
6635
6792
|
let eventUnsubscribeStoreKey = "__piSubagentEventUnsubscribes", controlNoticeSeenStoreKey = "__piSubagentVisibleControlNotices", previousEventUnsubscribes = globalStore[eventUnsubscribeStoreKey];
|
|
6636
6793
|
if (Array.isArray(previousEventUnsubscribes)) {
|