@qduc/term2 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent.d.ts +21 -13
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +123 -35
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +3 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +283 -128
- package/dist/app.js.map +1 -1
- package/dist/cli.js +91 -27
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-approve-command.js.map +1 -1
- package/dist/commands/mode-commands.js.map +1 -1
- package/dist/commands/retry-tool-command.d.ts +13 -0
- package/dist/commands/retry-tool-command.d.ts.map +1 -0
- package/dist/commands/retry-tool-command.js +20 -0
- package/dist/commands/retry-tool-command.js.map +1 -0
- package/dist/commands/rewind-command.d.ts +37 -0
- package/dist/commands/rewind-command.d.ts.map +1 -0
- package/dist/commands/rewind-command.js +97 -0
- package/dist/commands/rewind-command.js.map +1 -0
- package/dist/commands/sandbox-command.js.map +1 -1
- package/dist/components/InputBox.d.ts +18 -32
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +178 -579
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/input/ApplicationInputSurface.d.ts +37 -0
- package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -0
- package/dist/components/input/ApplicationInputSurface.js +78 -0
- package/dist/components/input/ApplicationInputSurface.js.map +1 -0
- package/dist/components/input/MenuStackHost.d.ts +12 -0
- package/dist/components/input/MenuStackHost.d.ts.map +1 -0
- package/dist/components/input/MenuStackHost.js +13 -0
- package/dist/components/input/MenuStackHost.js.map +1 -0
- package/dist/components/input/MenuSurface.d.ts +13 -0
- package/dist/components/input/MenuSurface.d.ts.map +1 -0
- package/dist/components/input/MenuSurface.js +86 -0
- package/dist/components/input/MenuSurface.js.map +1 -0
- package/dist/components/input/ModelMenuSession.d.ts +19 -0
- package/dist/components/input/ModelMenuSession.d.ts.map +1 -0
- package/dist/components/input/ModelMenuSession.js +144 -0
- package/dist/components/input/ModelMenuSession.js.map +1 -0
- package/dist/components/input/PathMenuSession.d.ts +16 -0
- package/dist/components/input/PathMenuSession.d.ts.map +1 -0
- package/dist/components/input/PathMenuSession.js +68 -0
- package/dist/components/input/PathMenuSession.js.map +1 -0
- package/dist/components/input/PendingQueueList.d.ts +20 -0
- package/dist/components/input/PendingQueueList.d.ts.map +1 -0
- package/dist/components/input/PendingQueueList.js +26 -0
- package/dist/components/input/PendingQueueList.js.map +1 -0
- package/dist/components/input/ProviderMenuSession.d.ts +16 -0
- package/dist/components/input/ProviderMenuSession.d.ts.map +1 -0
- package/dist/components/input/ProviderMenuSession.js +93 -0
- package/dist/components/input/ProviderMenuSession.js.map +1 -0
- package/dist/components/input/RewindMenuSession.d.ts +14 -0
- package/dist/components/input/RewindMenuSession.d.ts.map +1 -0
- package/dist/components/input/RewindMenuSession.js +77 -0
- package/dist/components/input/RewindMenuSession.js.map +1 -0
- package/dist/components/input/SettingsMenuSession.d.ts +17 -0
- package/dist/components/input/SettingsMenuSession.d.ts.map +1 -0
- package/dist/components/input/SettingsMenuSession.js +136 -0
- package/dist/components/input/SettingsMenuSession.js.map +1 -0
- package/dist/components/input/SettingsValueMenuSession.d.ts +19 -0
- package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -0
- package/dist/components/input/SettingsValueMenuSession.js +113 -0
- package/dist/components/input/SettingsValueMenuSession.js.map +1 -0
- package/dist/components/input/SkillsMenuSession.d.ts +16 -0
- package/dist/components/input/SkillsMenuSession.d.ts.map +1 -0
- package/dist/components/input/SkillsMenuSession.js +64 -0
- package/dist/components/input/SkillsMenuSession.js.map +1 -0
- package/dist/components/input/SlashMenuSession.d.ts +17 -0
- package/dist/components/input/SlashMenuSession.d.ts.map +1 -0
- package/dist/components/input/SlashMenuSession.js +57 -0
- package/dist/components/input/SlashMenuSession.js.map +1 -0
- package/dist/components/input/determine-active-menu.d.ts +2 -0
- package/dist/components/input/determine-active-menu.d.ts.map +1 -1
- package/dist/components/input/determine-active-menu.js +12 -4
- package/dist/components/input/determine-active-menu.js.map +1 -1
- package/dist/components/input/insertions.d.ts +0 -13
- package/dist/components/input/insertions.d.ts.map +1 -1
- package/dist/components/input/insertions.js +0 -26
- package/dist/components/input/insertions.js.map +1 -1
- package/dist/components/input/menu-controller.d.ts +52 -0
- package/dist/components/input/menu-controller.d.ts.map +1 -0
- package/dist/components/input/menu-controller.js +690 -0
- package/dist/components/input/menu-controller.js.map +1 -0
- package/dist/components/input/menu-editor.d.ts +9 -0
- package/dist/components/input/menu-editor.d.ts.map +1 -0
- package/dist/components/input/menu-editor.js +45 -0
- package/dist/components/input/menu-editor.js.map +1 -0
- package/dist/components/input/menu-registry.d.ts +20 -0
- package/dist/components/input/menu-registry.d.ts.map +1 -0
- package/dist/components/input/menu-registry.js +25 -0
- package/dist/components/input/menu-registry.js.map +1 -0
- package/dist/components/input/menu-types.d.ts +320 -0
- package/dist/components/input/menu-types.d.ts.map +1 -0
- package/dist/components/input/menu-types.js +2 -0
- package/dist/components/input/menu-types.js.map +1 -0
- package/dist/components/input/settings-intent-host.d.ts +22 -0
- package/dist/components/input/settings-intent-host.d.ts.map +1 -0
- package/dist/components/input/settings-intent-host.js +69 -0
- package/dist/components/input/settings-intent-host.js.map +1 -0
- package/dist/components/input/triggers.d.ts +3 -0
- package/dist/components/input/triggers.d.ts.map +1 -1
- package/dist/components/input/triggers.js +258 -0
- package/dist/components/input/triggers.js.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.d.ts +16 -0
- package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -0
- package/dist/components/layout/BackgroundTaskManager.js +236 -0
- package/dist/components/layout/BackgroundTaskManager.js.map +1 -0
- package/dist/components/layout/BackgroundTasksPanel.d.ts +2 -2
- package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.js +64 -24
- package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
- package/dist/components/layout/Banner.js.map +1 -1
- package/dist/components/layout/BottomArea.d.ts +23 -19
- package/dist/components/layout/BottomArea.d.ts.map +1 -1
- package/dist/components/layout/BottomArea.js +74 -48
- package/dist/components/layout/BottomArea.js.map +1 -1
- package/dist/components/layout/StatusBar.d.ts +3 -1
- package/dist/components/layout/StatusBar.d.ts.map +1 -1
- package/dist/components/layout/StatusBar.js +102 -83
- package/dist/components/layout/StatusBar.js.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
- package/dist/components/menu/RewindMenu.d.ts +18 -0
- package/dist/components/menu/RewindMenu.d.ts.map +1 -0
- package/dist/components/menu/RewindMenu.js +59 -0
- package/dist/components/menu/RewindMenu.js.map +1 -0
- package/dist/components/message/ChatMessage.d.ts +2 -1
- package/dist/components/message/ChatMessage.d.ts.map +1 -1
- package/dist/components/message/ChatMessage.js +1 -1
- package/dist/components/message/ChatMessage.js.map +1 -1
- package/dist/components/message/CommandMessage.d.ts.map +1 -1
- package/dist/components/message/CommandMessage.js +138 -15
- package/dist/components/message/CommandMessage.js.map +1 -1
- package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
- package/dist/components/message/MemoryRenderer.js +16 -10
- package/dist/components/message/MemoryRenderer.js.map +1 -1
- package/dist/components/message/MessageList.d.ts +20 -3
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +1 -1
- package/dist/components/message/MessageList.js.map +1 -1
- package/dist/components/message/SubagentActivityMessage.d.ts +5 -1
- package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
- package/dist/components/message/SubagentActivityMessage.js +12 -4
- package/dist/components/message/SubagentActivityMessage.js.map +1 -1
- package/dist/components/message/command-message-helpers.d.ts +40 -3
- package/dist/components/message/command-message-helpers.d.ts.map +1 -1
- package/dist/components/message/command-message-helpers.js +49 -8
- package/dist/components/message/command-message-helpers.js.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts +1 -0
- package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.js +136 -59
- package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
- package/dist/context/InputContext.d.ts +15 -8
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.js +92 -15
- package/dist/context/InputContext.js.map +1 -1
- package/dist/contracts/application-stream.d.ts +38 -0
- package/dist/contracts/application-stream.d.ts.map +1 -0
- package/dist/contracts/application-stream.js +2 -0
- package/dist/contracts/application-stream.js.map +1 -0
- package/dist/contracts/continuation-handle.d.ts +18 -0
- package/dist/contracts/continuation-handle.d.ts.map +1 -0
- package/dist/contracts/continuation-handle.js +22 -0
- package/dist/contracts/continuation-handle.js.map +1 -0
- package/dist/contracts/conversation-items.d.ts +47 -0
- package/dist/contracts/conversation-items.d.ts.map +1 -0
- package/dist/contracts/conversation-items.js +2 -0
- package/dist/contracts/conversation-items.js.map +1 -0
- package/dist/contracts/conversation.d.ts +44 -4
- package/dist/contracts/conversation.d.ts.map +1 -1
- package/dist/contracts/conversation.js +9 -0
- package/dist/contracts/conversation.js.map +1 -1
- package/dist/contracts/model-errors.d.ts +10 -0
- package/dist/contracts/model-errors.d.ts.map +1 -0
- package/dist/contracts/model-errors.js +15 -0
- package/dist/contracts/model-errors.js.map +1 -0
- package/dist/contracts/model-types.d.ts +16 -0
- package/dist/contracts/model-types.d.ts.map +1 -0
- package/dist/contracts/model-types.js +2 -0
- package/dist/contracts/model-types.js.map +1 -0
- package/dist/contracts/patch.d.ts +17 -0
- package/dist/contracts/patch.d.ts.map +1 -0
- package/dist/contracts/patch.js +2 -0
- package/dist/contracts/patch.js.map +1 -0
- package/dist/contracts/provider-input.d.ts +34 -0
- package/dist/contracts/provider-input.d.ts.map +1 -0
- package/dist/contracts/provider-input.js +2 -0
- package/dist/contracts/provider-input.js.map +1 -0
- package/dist/contracts/streamed-model-turn.d.ts +230 -0
- package/dist/contracts/streamed-model-turn.d.ts.map +1 -0
- package/dist/contracts/streamed-model-turn.js +2 -0
- package/dist/contracts/streamed-model-turn.js.map +1 -0
- package/dist/env-setup.js +1 -1
- package/dist/hooks/conversation-ui-reducer.d.ts +27 -4
- package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
- package/dist/hooks/conversation-ui-reducer.js +51 -4
- package/dist/hooks/conversation-ui-reducer.js.map +1 -1
- package/dist/hooks/handoff-flow-reducer.d.ts +1 -36
- package/dist/hooks/handoff-flow-reducer.d.ts.map +1 -1
- package/dist/hooks/handoff-flow-reducer.js +3 -57
- package/dist/hooks/handoff-flow-reducer.js.map +1 -1
- package/dist/hooks/settings-completion-config.d.ts +1 -0
- package/dist/hooks/settings-completion-config.d.ts.map +1 -1
- package/dist/hooks/settings-completion-config.js +30 -6
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/use-app-commands.d.ts +13 -11
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +90 -63
- package/dist/hooks/use-app-commands.js.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts +18 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.js +77 -8
- package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +30 -13
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +85 -18
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-escape-key.d.ts +4 -32
- package/dist/hooks/use-escape-key.d.ts.map +1 -1
- package/dist/hooks/use-escape-key.js +27 -68
- package/dist/hooks/use-escape-key.js.map +1 -1
- package/dist/hooks/use-handoff-flow.d.ts +6 -6
- package/dist/hooks/use-handoff-flow.d.ts.map +1 -1
- package/dist/hooks/use-handoff-flow.js +110 -118
- package/dist/hooks/use-handoff-flow.js.map +1 -1
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +50 -59
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-path-completion.d.ts.map +1 -1
- package/dist/hooks/use-path-completion.js +20 -11
- package/dist/hooks/use-path-completion.js.map +1 -1
- package/dist/hooks/use-provider-selection.d.ts.map +1 -1
- package/dist/hooks/use-provider-selection.js +19 -16
- package/dist/hooks/use-provider-selection.js.map +1 -1
- package/dist/hooks/use-rewind-selection.d.ts +30 -0
- package/dist/hooks/use-rewind-selection.d.ts.map +1 -0
- package/dist/hooks/{use-undo-selection.js → use-rewind-selection.js} +37 -28
- package/dist/hooks/use-rewind-selection.js.map +1 -0
- package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
- package/dist/hooks/use-runtime-settings.js +4 -3
- package/dist/hooks/use-runtime-settings.js.map +1 -1
- package/dist/hooks/use-selection.d.ts +1 -0
- package/dist/hooks/use-selection.d.ts.map +1 -1
- package/dist/hooks/use-selection.js +1 -1
- package/dist/hooks/use-selection.js.map +1 -1
- package/dist/hooks/use-setting.d.ts +3 -2
- package/dist/hooks/use-setting.d.ts.map +1 -1
- package/dist/hooks/use-setting.js +1 -1
- package/dist/hooks/use-setting.js.map +1 -1
- package/dist/hooks/use-settings-completion.d.ts +1 -0
- package/dist/hooks/use-settings-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-completion.js +22 -15
- package/dist/hooks/use-settings-completion.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-value-completion.js +40 -28
- package/dist/hooks/use-settings-value-completion.js.map +1 -1
- package/dist/hooks/use-shell-mode.d.ts +3 -13
- package/dist/hooks/use-shell-mode.d.ts.map +1 -1
- package/dist/hooks/use-shell-mode.js +14 -53
- package/dist/hooks/use-shell-mode.js.map +1 -1
- package/dist/hooks/use-skill-selection.d.ts.map +1 -1
- package/dist/hooks/use-skill-selection.js +17 -11
- package/dist/hooks/use-skill-selection.js.map +1 -1
- package/dist/hooks/use-slash-commands.d.ts.map +1 -1
- package/dist/hooks/use-slash-commands.js +11 -10
- package/dist/hooks/use-slash-commands.js.map +1 -1
- package/dist/hooks/use-terminal-focus-notifier.js.map +1 -1
- package/dist/lib/agent-chat-service.d.ts +12 -8
- package/dist/lib/agent-chat-service.d.ts.map +1 -1
- package/dist/lib/agent-chat-service.js +79 -44
- package/dist/lib/agent-chat-service.js.map +1 -1
- package/dist/lib/agent-client.d.ts +93 -17
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +398 -37
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts +33 -15
- package/dist/lib/agent-configuration.d.ts.map +1 -1
- package/dist/lib/agent-configuration.js +107 -9
- package/dist/lib/agent-configuration.js.map +1 -1
- package/dist/lib/agent-factory.d.ts +33 -4
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +140 -101
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/chained-input-filter.d.ts +27 -1
- package/dist/lib/chained-input-filter.d.ts.map +1 -1
- package/dist/lib/chained-input-filter.js +92 -33
- package/dist/lib/chained-input-filter.js.map +1 -1
- package/dist/lib/continuation-projection-mode.d.ts +3 -0
- package/dist/lib/continuation-projection-mode.d.ts.map +1 -0
- package/dist/lib/continuation-projection-mode.js +2 -0
- package/dist/lib/continuation-projection-mode.js.map +1 -0
- package/dist/lib/editor-impl.d.ts +1 -1
- package/dist/lib/editor-impl.d.ts.map +1 -1
- package/dist/lib/editor-impl.js +1 -1
- package/dist/lib/editor-impl.js.map +1 -1
- package/dist/lib/harness-invariant-error.d.ts +22 -0
- package/dist/lib/harness-invariant-error.d.ts.map +1 -0
- package/dist/lib/harness-invariant-error.js +30 -0
- package/dist/lib/harness-invariant-error.js.map +1 -0
- package/dist/lib/input-owner.d.ts +64 -0
- package/dist/lib/input-owner.d.ts.map +1 -0
- package/dist/lib/input-owner.js +34 -0
- package/dist/lib/input-owner.js.map +1 -0
- package/dist/lib/openai-strict-tool-schema.d.ts +7 -4
- package/dist/lib/openai-strict-tool-schema.d.ts.map +1 -1
- package/dist/lib/openai-strict-tool-schema.js +8 -0
- package/dist/lib/openai-strict-tool-schema.js.map +1 -1
- package/dist/lib/subagent-bridge.d.ts +54 -3
- package/dist/lib/subagent-bridge.d.ts.map +1 -1
- package/dist/lib/subagent-bridge.js +118 -20
- package/dist/lib/subagent-bridge.js.map +1 -1
- package/dist/lib/tool-invoke.d.ts +18 -10
- package/dist/lib/tool-invoke.d.ts.map +1 -1
- package/dist/lib/tool-invoke.js +92 -44
- package/dist/lib/tool-invoke.js.map +1 -1
- package/dist/non-interactive.d.ts +14 -4
- package/dist/non-interactive.d.ts.map +1 -1
- package/dist/non-interactive.js +91 -84
- package/dist/non-interactive.js.map +1 -1
- package/dist/prompts/anthropic.md +6 -55
- package/dist/prompts/async-subagent-delegation.d.ts +3 -5
- package/dist/prompts/async-subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/async-subagent-delegation.js +10 -34
- package/dist/prompts/async-subagent-delegation.js.map +1 -1
- package/dist/prompts/async-subagent-delegation.ts +11 -40
- package/dist/prompts/gpt-5.6.md +49 -0
- package/dist/prompts/kimi.md +25 -63
- package/dist/prompts/memory.md +1 -1
- package/dist/prompts/orchestrator-prompt.test.ts +92 -0
- package/dist/prompts/orchestrator.md +20 -4
- package/dist/prompts/plan-mode-info.md +1 -1
- package/dist/prompts/prompt-constructor.d.ts +2 -0
- package/dist/prompts/prompt-constructor.d.ts.map +1 -1
- package/dist/prompts/prompt-constructor.js +9 -7
- package/dist/prompts/prompt-constructor.js.map +1 -1
- package/dist/prompts/prompt-constructor.test.ts +30 -8
- package/dist/prompts/prompt-constructor.ts +14 -7
- package/dist/prompts/prompt-profiles.d.ts.map +1 -1
- package/dist/prompts/prompt-profiles.js +5 -0
- package/dist/prompts/prompt-profiles.js.map +1 -1
- package/dist/prompts/prompt-profiles.test.ts +20 -0
- package/dist/prompts/prompt-profiles.ts +5 -0
- package/dist/prompts/search-via-shell.d.ts.map +1 -1
- package/dist/prompts/search-via-shell.js +8 -25
- package/dist/prompts/search-via-shell.js.map +1 -1
- package/dist/prompts/search-via-shell.test.ts +18 -0
- package/dist/prompts/search-via-shell.ts +8 -25
- package/dist/prompts/shell-auto-approval.d.ts +2 -2
- package/dist/prompts/shell-auto-approval.d.ts.map +1 -1
- package/dist/prompts/shell-auto-approval.js +20 -5
- package/dist/prompts/shell-auto-approval.js.map +1 -1
- package/dist/prompts/shell-auto-approval.ts +20 -5
- package/dist/prompts/steering-notice.d.ts +16 -0
- package/dist/prompts/steering-notice.d.ts.map +1 -0
- package/dist/prompts/steering-notice.js +24 -0
- package/dist/prompts/steering-notice.js.map +1 -0
- package/dist/prompts/steering-notice.ts +24 -0
- package/dist/prompts/subagent-delegation.d.ts +6 -5
- package/dist/prompts/subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/subagent-delegation.js +36 -13
- package/dist/prompts/subagent-delegation.js.map +1 -1
- package/dist/prompts/subagent-delegation.test.ts +24 -2
- package/dist/prompts/subagent-delegation.ts +54 -14
- package/dist/prompts/subagents/explorer.md +24 -14
- package/dist/prompts/subagents/worker-prompt.test.ts +35 -0
- package/dist/prompts/subagents/worker.md +8 -0
- package/dist/prompts/worktree-hygiene.md +1 -0
- package/dist/providers/ai-sdk-anthropic.provider.d.ts +3 -3
- package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-anthropic.provider.js +8 -4
- package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
- package/dist/providers/ai-sdk-google.provider.d.ts +5 -4
- package/dist/providers/ai-sdk-google.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-google.provider.js +23 -3
- package/dist/providers/ai-sdk-google.provider.js.map +1 -1
- package/dist/providers/ai-sdk-message-normalizer.d.ts +3 -7
- package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -1
- package/dist/providers/ai-sdk-message-normalizer.js +27 -11
- package/dist/providers/ai-sdk-message-normalizer.js.map +1 -1
- package/dist/providers/ai-sdk-openrouter.provider.d.ts +5 -4
- package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-openrouter.provider.js +25 -3
- package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -1
- package/dist/providers/ai-sdk-provider-settings.d.ts +10 -0
- package/dist/providers/ai-sdk-provider-settings.d.ts.map +1 -0
- package/dist/providers/ai-sdk-provider-settings.js +37 -0
- package/dist/providers/ai-sdk-provider-settings.js.map +1 -0
- package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
- package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -0
- package/dist/providers/ai-sdk-streamed-model.js +338 -0
- package/dist/providers/ai-sdk-streamed-model.js.map +1 -0
- package/dist/providers/codex-responses-model.d.ts +39 -12
- package/dist/providers/codex-responses-model.d.ts.map +1 -1
- package/dist/providers/codex-responses-model.js +656 -155
- package/dist/providers/codex-responses-model.js.map +1 -1
- package/dist/providers/codex-turn-converter.d.ts +12 -0
- package/dist/providers/codex-turn-converter.d.ts.map +1 -0
- package/dist/providers/codex-turn-converter.js +168 -0
- package/dist/providers/codex-turn-converter.js.map +1 -0
- package/dist/providers/codex.provider.d.ts +21 -0
- package/dist/providers/codex.provider.d.ts.map +1 -1
- package/dist/providers/codex.provider.js +57 -27
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/providers/common/openai-compatible-message-contract.d.ts +8 -0
- package/dist/providers/common/openai-compatible-message-contract.d.ts.map +1 -0
- package/dist/providers/common/openai-compatible-message-contract.js +23 -0
- package/dist/providers/common/openai-compatible-message-contract.js.map +1 -0
- package/dist/providers/common/openai-compatible-messages.d.ts +0 -4
- package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -1
- package/dist/providers/common/openai-compatible-messages.js +0 -288
- package/dist/providers/common/openai-compatible-messages.js.map +1 -1
- package/dist/providers/fetch/composer.d.ts.map +1 -1
- package/dist/providers/fetch/composer.js +1 -0
- package/dist/providers/fetch/composer.js.map +1 -1
- package/dist/providers/model-catalog/catalog.d.ts +31 -0
- package/dist/providers/model-catalog/catalog.d.ts.map +1 -0
- package/dist/providers/model-catalog/catalog.generated.d.ts +3010 -0
- package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -0
- package/dist/providers/model-catalog/catalog.generated.js +3004 -0
- package/dist/providers/model-catalog/catalog.generated.js.map +1 -0
- package/dist/providers/model-catalog/catalog.js +62 -0
- package/dist/providers/model-catalog/catalog.js.map +1 -0
- package/dist/providers/model-catalog/generate-catalog.d.ts +42 -0
- package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -0
- package/dist/providers/model-catalog/generate-catalog.js +96 -0
- package/dist/providers/model-catalog/generate-catalog.js.map +1 -0
- package/dist/providers/openai-chained-input-compatibility.d.ts +36 -0
- package/dist/providers/openai-chained-input-compatibility.d.ts.map +1 -0
- package/dist/providers/openai-chained-input-compatibility.js +60 -0
- package/dist/providers/openai-chained-input-compatibility.js.map +1 -0
- package/dist/providers/openai-chat-completions-model.d.ts +12 -0
- package/dist/providers/openai-chat-completions-model.d.ts.map +1 -0
- package/dist/providers/openai-chat-completions-model.js +271 -0
- package/dist/providers/openai-chat-completions-model.js.map +1 -0
- package/dist/providers/openai-compatible-lazy.d.ts +1 -1
- package/dist/providers/openai-compatible-lazy.d.ts.map +1 -1
- package/dist/providers/openai-compatible-lazy.js +24 -36
- package/dist/providers/openai-compatible-lazy.js.map +1 -1
- package/dist/providers/openai-compatible-middleware.d.ts +4 -1
- package/dist/providers/openai-compatible-middleware.d.ts.map +1 -1
- package/dist/providers/openai-compatible-middleware.js +15 -14
- package/dist/providers/openai-compatible-middleware.js.map +1 -1
- package/dist/providers/openai-compatible-response-normalizer.d.ts +10 -1
- package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -1
- package/dist/providers/openai-compatible-response-normalizer.js +15 -4
- package/dist/providers/openai-compatible-response-normalizer.js.map +1 -1
- package/dist/providers/openai-compatible.provider.d.ts +7 -10
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +80 -78
- package/dist/providers/openai-compatible.provider.js.map +1 -1
- package/dist/providers/openai-request-prefix-binding.d.ts +28 -0
- package/dist/providers/openai-request-prefix-binding.d.ts.map +1 -0
- package/dist/providers/openai-request-prefix-binding.js +78 -0
- package/dist/providers/openai-request-prefix-binding.js.map +1 -0
- package/dist/providers/openai-responses-model.d.ts +43 -0
- package/dist/providers/openai-responses-model.d.ts.map +1 -0
- package/dist/providers/openai-responses-model.js +564 -0
- package/dist/providers/openai-responses-model.js.map +1 -0
- package/dist/providers/openai.provider.d.ts +11 -8
- package/dist/providers/openai.provider.d.ts.map +1 -1
- package/dist/providers/openai.provider.js +43 -91
- package/dist/providers/openai.provider.js.map +1 -1
- package/dist/providers/opencode-routing.d.ts +1 -1
- package/dist/providers/opencode-routing.d.ts.map +1 -1
- package/dist/providers/opencode-routing.js +4 -2
- package/dist/providers/opencode-routing.js.map +1 -1
- package/dist/providers/opencode-session.d.ts.map +1 -1
- package/dist/providers/opencode-session.js +28 -3
- package/dist/providers/opencode-session.js.map +1 -1
- package/dist/providers/openrouter.provider.d.ts.map +1 -1
- package/dist/providers/openrouter.provider.js +33 -33
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/provider-request-capture.d.ts +35 -0
- package/dist/providers/provider-request-capture.d.ts.map +1 -0
- package/dist/providers/provider-request-capture.js +22 -0
- package/dist/providers/provider-request-capture.js.map +1 -0
- package/dist/providers/provider-service.d.ts +9 -7
- package/dist/providers/provider-service.d.ts.map +1 -1
- package/dist/providers/provider-service.js +29 -28
- package/dist/providers/provider-service.js.map +1 -1
- package/dist/providers/registry.d.ts +14 -9
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/retrying-model.d.ts +8 -6
- package/dist/providers/retrying-model.d.ts.map +1 -1
- package/dist/providers/retrying-model.js +7 -20
- package/dist/providers/retrying-model.js.map +1 -1
- package/dist/providers/web-search/exa.provider.js.map +1 -1
- package/dist/providers/web-search/registry.js.map +1 -1
- package/dist/providers/web-search/tavily.provider.js.map +1 -1
- package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
- package/dist/providers/websocket-receive-watchdog.js +9 -1
- package/dist/providers/websocket-receive-watchdog.js.map +1 -1
- package/dist/scripts/eval-auto-approval/runner.js +2 -0
- package/dist/scripts/eval-auto-approval/runner.js.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts +205 -0
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -0
- package/dist/services/agent-runtime/application-run-loop.js +1236 -0
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -0
- package/dist/services/agent-runtime/compose-agent-runtime.d.ts +3 -0
- package/dist/services/agent-runtime/compose-agent-runtime.d.ts.map +1 -1
- package/dist/services/agent-runtime/compose-agent-runtime.js +4 -0
- package/dist/services/agent-runtime/compose-agent-runtime.js.map +1 -1
- package/dist/services/agent-runtime/generation-guard.d.ts +69 -0
- package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -0
- package/dist/services/agent-runtime/generation-guard.js +270 -0
- package/dist/services/agent-runtime/generation-guard.js.map +1 -0
- package/dist/services/agent-runtime/model-resolver.d.ts.map +1 -1
- package/dist/services/agent-runtime/model-resolver.js +7 -6
- package/dist/services/agent-runtime/model-resolver.js.map +1 -1
- package/dist/services/agent-runtime/structured-output.d.ts.map +1 -1
- package/dist/services/agent-runtime/structured-output.js +1 -21
- package/dist/services/agent-runtime/structured-output.js.map +1 -1
- package/dist/services/agent-runtime/tool-invocation-context.d.ts +73 -0
- package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -0
- package/dist/services/agent-runtime/tool-invocation-context.js +66 -0
- package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -0
- package/dist/services/agent-stream.d.ts +41 -2
- package/dist/services/agent-stream.d.ts.map +1 -1
- package/dist/services/agent-stream.js +46 -1
- package/dist/services/agent-stream.js.map +1 -1
- package/dist/services/approval/approval-decision-executor.d.ts +42 -0
- package/dist/services/approval/approval-decision-executor.d.ts.map +1 -0
- package/dist/services/approval/approval-decision-executor.js +207 -0
- package/dist/services/approval/approval-decision-executor.js.map +1 -0
- package/dist/services/approval/approval-flow-coordinator.d.ts +25 -8
- package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
- package/dist/services/approval/approval-flow-coordinator.js +34 -167
- package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
- package/dist/services/approval/approval-replay.d.ts +52 -0
- package/dist/services/approval/approval-replay.d.ts.map +1 -0
- package/dist/services/approval/approval-replay.js +68 -0
- package/dist/services/approval/approval-replay.js.map +1 -0
- package/dist/services/approval/approval-state.d.ts +3 -6
- package/dist/services/approval/approval-state.d.ts.map +1 -1
- package/dist/services/approval/approval-state.js +0 -10
- package/dist/services/approval/approval-state.js.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.d.ts +25 -0
- package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -0
- package/dist/services/approval/background-subagent-approval-controller.js +65 -0
- package/dist/services/approval/background-subagent-approval-controller.js.map +1 -0
- package/dist/services/approval/background-subagent-approval-queue.d.ts +137 -0
- package/dist/services/approval/background-subagent-approval-queue.d.ts.map +1 -0
- package/dist/services/approval/background-subagent-approval-queue.js +200 -0
- package/dist/services/approval/background-subagent-approval-queue.js.map +1 -0
- package/dist/services/approval/non-interactive-approval-policy.d.ts +33 -0
- package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -0
- package/dist/services/approval/non-interactive-approval-policy.js +85 -0
- package/dist/services/approval/non-interactive-approval-policy.js.map +1 -0
- package/dist/services/approval/session-read-access.d.ts +10 -0
- package/dist/services/approval/session-read-access.d.ts.map +1 -1
- package/dist/services/approval/session-read-access.js +12 -0
- package/dist/services/approval/session-read-access.js.map +1 -1
- package/dist/services/approval/session-read-grant-target.d.ts +7 -0
- package/dist/services/approval/session-read-grant-target.d.ts.map +1 -0
- package/dist/services/approval/session-read-grant-target.js +36 -0
- package/dist/services/approval/session-read-grant-target.js.map +1 -0
- package/dist/services/approval/shell-auto-approval-evaluator.d.ts +11 -3
- package/dist/services/approval/shell-auto-approval-evaluator.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-evaluator.js +140 -46
- package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts +13 -0
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +74 -6
- package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
- package/dist/services/approval/shell-sandbox-approval.d.ts +22 -1
- package/dist/services/approval/shell-sandbox-approval.d.ts.map +1 -1
- package/dist/services/approval/shell-sandbox-approval.js +31 -4
- package/dist/services/approval/shell-sandbox-approval.js.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts +9 -0
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.js +20 -4
- package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
- package/dist/services/approval/tool-owner.d.ts +5 -2
- package/dist/services/approval/tool-owner.d.ts.map +1 -1
- package/dist/services/approval/tool-owner.js +0 -56
- package/dist/services/approval/tool-owner.js.map +1 -1
- package/dist/services/approval/tool-ownership-registry.d.ts +25 -0
- package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -0
- package/dist/services/approval/tool-ownership-registry.js +63 -0
- package/dist/services/approval/tool-ownership-registry.js.map +1 -0
- package/dist/services/command-message-streaming.d.ts +8 -4
- package/dist/services/command-message-streaming.d.ts.map +1 -1
- package/dist/services/command-message-streaming.js +13 -52
- package/dist/services/command-message-streaming.js.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.js +1 -0
- package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts +120 -13
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +378 -63
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-admission-workflow.d.ts +69 -0
- package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -0
- package/dist/services/conversation/conversation-admission-workflow.js +110 -0
- package/dist/services/conversation/conversation-admission-workflow.js.map +1 -0
- package/dist/services/conversation/conversation-decoder.d.ts +14 -0
- package/dist/services/conversation/conversation-decoder.d.ts.map +1 -0
- package/dist/services/conversation/conversation-decoder.js +149 -0
- package/dist/services/conversation/conversation-decoder.js.map +1 -0
- package/dist/services/conversation/conversation-events.d.ts +72 -24
- package/dist/services/conversation/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation/conversation-history-repair.d.ts.map +1 -1
- package/dist/services/conversation/conversation-history-repair.js +34 -37
- package/dist/services/conversation/conversation-history-repair.js.map +1 -1
- package/dist/services/conversation/conversation-message-projection.d.ts +27 -0
- package/dist/services/conversation/conversation-message-projection.d.ts.map +1 -0
- package/dist/services/conversation/conversation-message-projection.js +59 -0
- package/dist/services/conversation/conversation-message-projection.js.map +1 -0
- package/dist/services/conversation/conversation-orchestrator.d.ts +23 -14
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +472 -158
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.types.d.ts +16 -11
- package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence-types.d.ts +15 -38
- package/dist/services/conversation/conversation-persistence-types.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.d.ts +3 -10
- package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.js +66 -15
- package/dist/services/conversation/conversation-persistence.js.map +1 -1
- package/dist/services/conversation/conversation-replay.d.ts +7 -5
- package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
- package/dist/services/conversation/conversation-replay.js +127 -66
- package/dist/services/conversation/conversation-replay.js.map +1 -1
- package/dist/services/conversation/conversation-result-builder.d.ts +16 -2
- package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
- package/dist/services/conversation/conversation-result-builder.js +51 -15
- package/dist/services/conversation/conversation-result-builder.js.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.d.ts +18 -0
- package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts +67 -11
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +133 -16
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/conversation-state-projector.d.ts +3 -3
- package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
- package/dist/services/conversation/conversation-state-projector.js +18 -0
- package/dist/services/conversation/conversation-state-projector.js.map +1 -1
- package/dist/services/conversation/conversation-store.d.ts +69 -12
- package/dist/services/conversation/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation/conversation-store.js +216 -119
- package/dist/services/conversation/conversation-store.js.map +1 -1
- package/dist/services/conversation/conversation-turn-items.d.ts +8 -2
- package/dist/services/conversation/conversation-turn-items.d.ts.map +1 -1
- package/dist/services/conversation/conversation-turn-items.js +96 -275
- package/dist/services/conversation/conversation-turn-items.js.map +1 -1
- package/dist/services/conversation/journal-to-ledger.d.ts.map +1 -1
- package/dist/services/conversation/journal-to-ledger.js +4 -24
- package/dist/services/conversation/journal-to-ledger.js.map +1 -1
- package/dist/services/conversation/run-item-normalizer.d.ts +5 -0
- package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -0
- package/dist/services/conversation/run-item-normalizer.js +245 -0
- package/dist/services/conversation/run-item-normalizer.js.map +1 -0
- package/dist/services/conversation/user-turn-item.d.ts +14 -0
- package/dist/services/conversation/user-turn-item.d.ts.map +1 -0
- package/dist/services/conversation/user-turn-item.js +27 -0
- package/dist/services/conversation/user-turn-item.js.map +1 -0
- package/dist/services/conversation-agent-client.d.ts +77 -6
- package/dist/services/conversation-agent-client.d.ts.map +1 -1
- package/dist/services/cost/model-cost.d.ts +147 -0
- package/dist/services/cost/model-cost.d.ts.map +1 -0
- package/dist/services/cost/model-cost.js +217 -0
- package/dist/services/cost/model-cost.js.map +1 -0
- package/dist/services/cost/pricing-overlay.d.ts +26 -0
- package/dist/services/cost/pricing-overlay.d.ts.map +1 -0
- package/dist/services/cost/pricing-overlay.js +39 -0
- package/dist/services/cost/pricing-overlay.js.map +1 -0
- package/dist/services/cost/pricing.d.ts +13 -0
- package/dist/services/cost/pricing.d.ts.map +1 -0
- package/dist/services/cost/pricing.js +76 -0
- package/dist/services/cost/pricing.js.map +1 -0
- package/dist/services/handoff/handoff-flow-reducer.d.ts +27 -0
- package/dist/services/handoff/handoff-flow-reducer.d.ts.map +1 -0
- package/dist/services/handoff/handoff-flow-reducer.js +26 -0
- package/dist/services/handoff/handoff-flow-reducer.js.map +1 -0
- package/dist/services/handoff/handoff-session.d.ts +35 -0
- package/dist/services/handoff/handoff-session.d.ts.map +1 -0
- package/dist/services/handoff/handoff-session.js +136 -0
- package/dist/services/handoff/handoff-session.js.map +1 -0
- package/dist/services/hooks/hook-contracts.d.ts +124 -0
- package/dist/services/hooks/hook-contracts.d.ts.map +1 -0
- package/dist/services/hooks/hook-contracts.js +92 -0
- package/dist/services/hooks/hook-contracts.js.map +1 -0
- package/dist/services/hooks/hook-discovery.d.ts +45 -0
- package/dist/services/hooks/hook-discovery.d.ts.map +1 -0
- package/dist/services/hooks/hook-discovery.js +255 -0
- package/dist/services/hooks/hook-discovery.js.map +1 -0
- package/dist/services/hooks/hook-editor-shim.d.ts +6 -0
- package/dist/services/hooks/hook-editor-shim.d.ts.map +1 -0
- package/dist/services/hooks/hook-editor-shim.js +190 -0
- package/dist/services/hooks/hook-editor-shim.js.map +1 -0
- package/dist/services/hooks/hook-event-factory.d.ts +19 -0
- package/dist/services/hooks/hook-event-factory.d.ts.map +1 -0
- package/dist/services/hooks/hook-event-factory.js +45 -0
- package/dist/services/hooks/hook-event-factory.js.map +1 -0
- package/dist/services/hooks/hook-module-loader.d.ts +38 -0
- package/dist/services/hooks/hook-module-loader.d.ts.map +1 -0
- package/dist/services/hooks/hook-module-loader.js +69 -0
- package/dist/services/hooks/hook-module-loader.js.map +1 -0
- package/dist/services/hooks/hook-registry.d.ts +47 -0
- package/dist/services/hooks/hook-registry.d.ts.map +1 -0
- package/dist/services/hooks/hook-registry.js +185 -0
- package/dist/services/hooks/hook-registry.js.map +1 -0
- package/dist/services/hooks/hook-service.d.ts +44 -0
- package/dist/services/hooks/hook-service.d.ts.map +1 -0
- package/dist/services/hooks/hook-service.js +138 -0
- package/dist/services/hooks/hook-service.js.map +1 -0
- package/dist/services/hooks/hook-tool-lifecycle.d.ts +6 -0
- package/dist/services/hooks/hook-tool-lifecycle.d.ts.map +1 -0
- package/dist/services/hooks/hook-tool-lifecycle.js +33 -0
- package/dist/services/hooks/hook-tool-lifecycle.js.map +1 -0
- package/dist/services/hooks/index.d.ts +2 -0
- package/dist/services/hooks/index.d.ts.map +1 -0
- package/dist/services/hooks/index.js +2 -0
- package/dist/services/hooks/index.js.map +1 -0
- package/dist/services/input-surge-guard.d.ts.map +1 -1
- package/dist/services/input-surge-guard.js +13 -34
- package/dist/services/input-surge-guard.js.map +1 -1
- package/dist/services/logging/assistant-turn-journal.d.ts +1 -1
- package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
- package/dist/services/logging/assistant-turn-journal.js +21 -36
- package/dist/services/logging/assistant-turn-journal.js.map +1 -1
- package/dist/services/logging/conversation-log-events.d.ts +70 -7
- package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-events.js +9 -0
- package/dist/services/logging/conversation-log-events.js.map +1 -1
- package/dist/services/logging/conversation-log-writer.d.ts +10 -4
- package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-writer.js +184 -57
- package/dist/services/logging/conversation-log-writer.js.map +1 -1
- package/dist/services/logging/conversation-logger.d.ts.map +1 -1
- package/dist/services/logging/conversation-logger.js +34 -1
- package/dist/services/logging/conversation-logger.js.map +1 -1
- package/dist/services/logging/logging-service.d.ts.map +1 -1
- package/dist/services/logging/logging-service.js +6 -2
- package/dist/services/logging/logging-service.js.map +1 -1
- package/dist/services/logging/provider-traffic.d.ts +2 -1
- package/dist/services/logging/provider-traffic.d.ts.map +1 -1
- package/dist/services/logging/provider-traffic.js +81 -5
- package/dist/services/logging/provider-traffic.js.map +1 -1
- package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
- package/dist/services/memory/memory-capabilities.js +13 -8
- package/dist/services/memory/memory-capabilities.js.map +1 -1
- package/dist/services/model-service.d.ts +3 -0
- package/dist/services/model-service.d.ts.map +1 -1
- package/dist/services/model-service.js +3 -1
- package/dist/services/model-service.js.map +1 -1
- package/dist/services/models/model-catalog-session.d.ts +24 -0
- package/dist/services/models/model-catalog-session.d.ts.map +1 -0
- package/dist/services/models/model-catalog-session.js +70 -0
- package/dist/services/models/model-catalog-session.js.map +1 -0
- package/dist/services/openai-candidate-observer.d.ts +18 -0
- package/dist/services/openai-candidate-observer.d.ts.map +1 -0
- package/dist/services/openai-candidate-observer.js +56 -0
- package/dist/services/openai-candidate-observer.js.map +1 -0
- package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts +20 -0
- package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts.map +1 -0
- package/dist/services/openai-root-checkpoint-lifecycle-observer.js +21 -0
- package/dist/services/openai-root-checkpoint-lifecycle-observer.js.map +1 -0
- package/dist/services/openai-root-provider-identity.d.ts +11 -0
- package/dist/services/openai-root-provider-identity.d.ts.map +1 -0
- package/dist/services/openai-root-provider-identity.js +16 -0
- package/dist/services/openai-root-provider-identity.js.map +1 -0
- package/dist/services/openai-root-selector-parity-observer.d.ts +53 -0
- package/dist/services/openai-root-selector-parity-observer.d.ts.map +1 -0
- package/dist/services/openai-root-selector-parity-observer.js +62 -0
- package/dist/services/openai-root-selector-parity-observer.js.map +1 -0
- package/dist/services/plan-mode-interceptor.js +2 -2
- package/dist/services/plan-mode-interceptor.js.map +1 -1
- package/dist/services/provider-continuity.d.ts +79 -0
- package/dist/services/provider-continuity.d.ts.map +1 -1
- package/dist/services/provider-continuity.js +170 -0
- package/dist/services/provider-continuity.js.map +1 -1
- package/dist/services/providers/provider-management-session.d.ts +12 -0
- package/dist/services/providers/provider-management-session.d.ts.map +1 -0
- package/dist/services/providers/provider-management-session.js +21 -0
- package/dist/services/providers/provider-management-session.js.map +1 -0
- package/dist/services/queue/queue-controller.d.ts +10 -14
- package/dist/services/queue/queue-controller.d.ts.map +1 -1
- package/dist/services/queue/queue-controller.js +77 -59
- package/dist/services/queue/queue-controller.js.map +1 -1
- package/dist/services/retry/conversation-retry-policy.js +3 -3
- package/dist/services/retry/conversation-retry-policy.js.map +1 -1
- package/dist/services/retry/recovery-executor.d.ts.map +1 -1
- package/dist/services/retry/recovery-executor.js +7 -8
- package/dist/services/retry/recovery-executor.js.map +1 -1
- package/dist/services/retry/recovery-policy.d.ts.map +1 -1
- package/dist/services/retry/recovery-policy.js +4 -1
- package/dist/services/retry/recovery-policy.js.map +1 -1
- package/dist/services/retry/retry-classifier.d.ts.map +1 -1
- package/dist/services/retry/retry-classifier.js +6 -3
- package/dist/services/retry/retry-classifier.js.map +1 -1
- package/dist/services/retry/retry-contracts.d.ts +3 -5
- package/dist/services/retry/retry-contracts.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.d.ts +1 -0
- package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.js +28 -0
- package/dist/services/retry/retry-error-classification.js.map +1 -1
- package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
- package/dist/services/retry/retry-event-presenter.js +4 -1
- package/dist/services/retry/retry-event-presenter.js.map +1 -1
- package/dist/services/retry/upstream-retry-policy.js +3 -3
- package/dist/services/rtk-service.d.ts.map +1 -1
- package/dist/services/rtk-service.js +3 -15
- package/dist/services/rtk-service.js.map +1 -1
- package/dist/services/runtime-setting-router.d.ts +19 -0
- package/dist/services/runtime-setting-router.d.ts.map +1 -1
- package/dist/services/runtime-setting-router.js +33 -0
- package/dist/services/runtime-setting-router.js.map +1 -1
- package/dist/services/service-interfaces.d.ts +19 -2
- package/dist/services/service-interfaces.d.ts.map +1 -1
- package/dist/services/session/background-task-control.d.ts +123 -0
- package/dist/services/session/background-task-control.d.ts.map +1 -0
- package/dist/services/session/background-task-control.js +183 -0
- package/dist/services/session/background-task-control.js.map +1 -0
- package/dist/services/session/continuation-call-id-resolver.d.ts +16 -9
- package/dist/services/session/continuation-call-id-resolver.d.ts.map +1 -1
- package/dist/services/session/continuation-call-id-resolver.js +34 -48
- package/dist/services/session/continuation-call-id-resolver.js.map +1 -1
- package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
- package/dist/services/session/continuation-plan-applier.js +1 -3
- package/dist/services/session/continuation-plan-applier.js.map +1 -1
- package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/continuation-recovery-handler.js +0 -2
- package/dist/services/session/continuation-recovery-handler.js.map +1 -1
- package/dist/services/session/continuation-state.d.ts +9 -5
- package/dist/services/session/continuation-state.d.ts.map +1 -1
- package/dist/services/session/continuation-state.js +1 -1
- package/dist/services/session/continuation-state.js.map +1 -1
- package/dist/services/session/live-run.d.ts +29 -0
- package/dist/services/session/live-run.d.ts.map +1 -0
- package/dist/services/session/live-run.js +111 -0
- package/dist/services/session/live-run.js.map +1 -0
- package/dist/services/session/nested-tool-compatibility-state.d.ts +20 -0
- package/dist/services/session/nested-tool-compatibility-state.d.ts.map +1 -0
- package/dist/services/session/nested-tool-compatibility-state.js +29 -0
- package/dist/services/session/nested-tool-compatibility-state.js.map +1 -0
- package/dist/services/session/pending-interaction-state.d.ts +60 -0
- package/dist/services/session/pending-interaction-state.d.ts.map +1 -0
- package/dist/services/session/pending-interaction-state.js +132 -0
- package/dist/services/session/pending-interaction-state.js.map +1 -0
- package/dist/services/session/post-execute-pause-capability.d.ts +17 -0
- package/dist/services/session/post-execute-pause-capability.d.ts.map +1 -0
- package/dist/services/session/post-execute-pause-capability.js +27 -0
- package/dist/services/session/post-execute-pause-capability.js.map +1 -0
- package/dist/services/session/post-execute-pause-policy.d.ts +20 -0
- package/dist/services/session/post-execute-pause-policy.d.ts.map +1 -0
- package/dist/services/session/post-execute-pause-policy.js +34 -0
- package/dist/services/session/post-execute-pause-policy.js.map +1 -0
- package/dist/services/session/post-execute-pending-registry.d.ts +63 -0
- package/dist/services/session/post-execute-pending-registry.d.ts.map +1 -0
- package/dist/services/session/post-execute-pending-registry.js +123 -0
- package/dist/services/session/post-execute-pending-registry.js.map +1 -0
- package/dist/services/session/session-access-state.d.ts +24 -0
- package/dist/services/session/session-access-state.d.ts.map +1 -0
- package/dist/services/session/session-access-state.js +91 -0
- package/dist/services/session/session-access-state.js.map +1 -0
- package/dist/services/session/session-client-factory.d.ts +61 -0
- package/dist/services/session/session-client-factory.d.ts.map +1 -0
- package/dist/services/session/session-client-factory.js +103 -0
- package/dist/services/session/session-client-factory.js.map +1 -0
- package/dist/services/session/session-composition.d.ts +58 -0
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +178 -13
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-input-planner.d.ts +6 -2
- package/dist/services/session/session-input-planner.d.ts.map +1 -1
- package/dist/services/session/session-input-planner.js +4 -0
- package/dist/services/session/session-input-planner.js.map +1 -1
- package/dist/services/session/session-lifecycle.d.ts +5 -0
- package/dist/services/session/session-lifecycle.d.ts.map +1 -1
- package/dist/services/session/session-lifecycle.js +16 -6
- package/dist/services/session/session-lifecycle.js.map +1 -1
- package/dist/services/session/session-manager.d.ts +11 -1
- package/dist/services/session/session-manager.d.ts.map +1 -1
- package/dist/services/session/session-manager.js +16 -3
- package/dist/services/session/session-manager.js.map +1 -1
- package/dist/services/session/session-stream-processor.d.ts +5 -0
- package/dist/services/session/session-stream-processor.d.ts.map +1 -1
- package/dist/services/session/session-stream-processor.js +164 -35
- package/dist/services/session/session-stream-processor.js.map +1 -1
- package/dist/services/session/session-tool-tracker.d.ts +10 -21
- package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
- package/dist/services/session/session-tool-tracker.js +12 -52
- package/dist/services/session/session-tool-tracker.js.map +1 -1
- package/dist/services/session/terminal-result-collector.d.ts +8 -0
- package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
- package/dist/services/session/terminal-result-collector.js +18 -4
- package/dist/services/session/terminal-result-collector.js.map +1 -1
- package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts.map +1 -1
- package/dist/services/session/test-helpers/conversation-session-fixtures.js +8 -1
- package/dist/services/session/test-helpers/conversation-session-fixtures.js.map +1 -1
- package/dist/services/session/turn-attempt-factory.d.ts +2 -2
- package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
- package/dist/services/session/turn-attempt.d.ts +4 -2
- package/dist/services/session/turn-attempt.d.ts.map +1 -1
- package/dist/services/session/turn-attempt.js +5 -0
- package/dist/services/session/turn-attempt.js.map +1 -1
- package/dist/services/session/turn-coordinator.d.ts +32 -2
- package/dist/services/session/turn-coordinator.d.ts.map +1 -1
- package/dist/services/session/turn-coordinator.js +180 -9
- package/dist/services/session/turn-coordinator.js.map +1 -1
- package/dist/services/session/turn-status-machine.d.ts +21 -6
- package/dist/services/session/turn-status-machine.d.ts.map +1 -1
- package/dist/services/session/turn-status-machine.js +50 -13
- package/dist/services/session/turn-status-machine.js.map +1 -1
- package/dist/services/session/turn-workflow.d.ts +35 -0
- package/dist/services/session/turn-workflow.d.ts.map +1 -1
- package/dist/services/session/turn-workflow.js +373 -27
- package/dist/services/session/turn-workflow.js.map +1 -1
- package/dist/services/settings/ancillary-settings-migration.js +3 -3
- package/dist/services/settings/ancillary-settings-migration.js.map +1 -1
- package/dist/services/settings/custom-provider-normalization.d.ts +10 -0
- package/dist/services/settings/custom-provider-normalization.d.ts.map +1 -1
- package/dist/services/settings/custom-provider-normalization.js +35 -2
- package/dist/services/settings/custom-provider-normalization.js.map +1 -1
- package/dist/services/settings/settings-env.d.ts +3 -0
- package/dist/services/settings/settings-env.d.ts.map +1 -1
- package/dist/services/settings/settings-env.js +3 -3
- package/dist/services/settings/settings-env.js.map +1 -1
- package/dist/services/settings/settings-merger.d.ts +6 -5
- package/dist/services/settings/settings-merger.d.ts.map +1 -1
- package/dist/services/settings/settings-merger.js +9 -4
- package/dist/services/settings/settings-merger.js.map +1 -1
- package/dist/services/settings/settings-persistence.d.ts +17 -6
- package/dist/services/settings/settings-persistence.d.ts.map +1 -1
- package/dist/services/settings/settings-persistence.js +155 -28
- package/dist/services/settings/settings-persistence.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +100 -4
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +78 -8
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-service.d.ts +34 -5
- package/dist/services/settings/settings-service.d.ts.map +1 -1
- package/dist/services/settings/settings-service.js +200 -8
- package/dist/services/settings/settings-service.js.map +1 -1
- package/dist/services/settings/settings-sources.d.ts.map +1 -1
- package/dist/services/settings/settings-sources.js +6 -0
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/shell/background-shell-registry.d.ts +110 -0
- package/dist/services/shell/background-shell-registry.d.ts.map +1 -0
- package/dist/services/shell/background-shell-registry.js +326 -0
- package/dist/services/shell/background-shell-registry.js.map +1 -0
- package/dist/services/shell/shell-interaction-session.d.ts +43 -0
- package/dist/services/shell/shell-interaction-session.d.ts.map +1 -0
- package/dist/services/shell/shell-interaction-session.js +113 -0
- package/dist/services/shell/shell-interaction-session.js.map +1 -0
- package/dist/services/stream-event-processor.d.ts +11 -12
- package/dist/services/stream-event-processor.d.ts.map +1 -1
- package/dist/services/stream-event-processor.js +115 -352
- package/dist/services/stream-event-processor.js.map +1 -1
- package/dist/services/stream-snapshot.d.ts +0 -1
- package/dist/services/stream-snapshot.d.ts.map +1 -1
- package/dist/services/stream-snapshot.js +0 -1
- package/dist/services/stream-snapshot.js.map +1 -1
- package/dist/services/subagents/codename-run-id.d.ts +43 -0
- package/dist/services/subagents/codename-run-id.d.ts.map +1 -0
- package/dist/services/subagents/codename-run-id.js +683 -0
- package/dist/services/subagents/codename-run-id.js.map +1 -0
- package/dist/services/subagents/execution-runner.d.ts +5 -3
- package/dist/services/subagents/execution-runner.d.ts.map +1 -1
- package/dist/services/subagents/execution-runner.js +109 -10
- package/dist/services/subagents/execution-runner.js.map +1 -1
- package/dist/services/subagents/foreground-subagent-lease.d.ts +77 -0
- package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -0
- package/dist/services/subagents/foreground-subagent-lease.js +156 -0
- package/dist/services/subagents/foreground-subagent-lease.js.map +1 -0
- package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
- package/dist/services/subagents/mentor-runner.js +65 -34
- package/dist/services/subagents/mentor-runner.js.map +1 -1
- package/dist/services/subagents/nested-runner.d.ts +47 -23
- package/dist/services/subagents/nested-runner.d.ts.map +1 -1
- package/dist/services/subagents/nested-runner.js +263 -64
- package/dist/services/subagents/nested-runner.js.map +1 -1
- package/dist/services/subagents/role-loader.d.ts +3 -3
- package/dist/services/subagents/role-loader.d.ts.map +1 -1
- package/dist/services/subagents/role-loader.js +6 -7
- package/dist/services/subagents/role-loader.js.map +1 -1
- package/dist/services/subagents/runtime.d.ts +10 -0
- package/dist/services/subagents/runtime.d.ts.map +1 -1
- package/dist/services/subagents/runtime.js +31 -7
- package/dist/services/subagents/runtime.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.d.ts +50 -3
- package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
- package/dist/services/subagents/subagent-async-registry.js +463 -44
- package/dist/services/subagents/subagent-async-registry.js.map +1 -1
- package/dist/services/subagents/subagent-client-types.d.ts +2 -0
- package/dist/services/subagents/subagent-client-types.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.d.ts +40 -7
- package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.js +47 -1
- package/dist/services/subagents/subagent-manager.js.map +1 -1
- package/dist/services/subagents/subagent-notification-store.d.ts +112 -28
- package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
- package/dist/services/subagents/subagent-notification-store.js +197 -47
- package/dist/services/subagents/subagent-notification-store.js.map +1 -1
- package/dist/services/subagents/subagent-run-control.d.ts +41 -0
- package/dist/services/subagents/subagent-run-control.d.ts.map +1 -0
- package/dist/services/subagents/subagent-run-control.js +166 -0
- package/dist/services/subagents/subagent-run-control.js.map +1 -0
- package/dist/services/subagents/subagent-session.d.ts +12 -7
- package/dist/services/subagents/subagent-session.d.ts.map +1 -1
- package/dist/services/subagents/subagent-session.js +13 -14
- package/dist/services/subagents/subagent-session.js.map +1 -1
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts +4 -5
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts.map +1 -1
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js +66 -65
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
- package/dist/services/subagents/tool-policy.d.ts +39 -17
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +209 -53
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/types.d.ts +114 -2
- package/dist/services/subagents/types.d.ts.map +1 -1
- package/dist/services/subagents/types.js +2 -2
- package/dist/services/subagents/types.js.map +1 -1
- package/dist/services/subagents/utils.d.ts +8 -1
- package/dist/services/subagents/utils.d.ts.map +1 -1
- package/dist/services/subagents/utils.js +43 -16
- package/dist/services/subagents/utils.js.map +1 -1
- package/dist/services/test-helpers/mock-stream.d.ts +3 -0
- package/dist/services/test-helpers/mock-stream.d.ts.map +1 -1
- package/dist/services/test-helpers/mock-stream.js +8 -0
- package/dist/services/test-helpers/mock-stream.js.map +1 -1
- package/dist/services/tool-execution-ledger.d.ts +2 -0
- package/dist/services/tool-execution-ledger.d.ts.map +1 -1
- package/dist/services/tool-execution-ledger.js +59 -81
- package/dist/services/tool-execution-ledger.js.map +1 -1
- package/dist/test-helpers/conversation-session-with-adapter.d.ts +1 -1
- package/dist/test-helpers/conversation-session-with-adapter.d.ts.map +1 -1
- package/dist/test-helpers/conversation-session-with-adapter.js +5 -1
- package/dist/test-helpers/conversation-session-with-adapter.js.map +1 -1
- package/dist/test-helpers/ink-testing.d.ts.map +1 -1
- package/dist/test-helpers/ink-testing.js +2 -1
- package/dist/test-helpers/ink-testing.js.map +1 -1
- package/dist/tools/agent/activate-skill.d.ts +6 -1
- package/dist/tools/agent/activate-skill.d.ts.map +1 -1
- package/dist/tools/agent/activate-skill.js.map +1 -1
- package/dist/tools/agent/ask-mentor.d.ts +1 -1
- package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
- package/dist/tools/agent/ask-mentor.js.map +1 -1
- package/dist/tools/agent/ask-orchestrator.d.ts +11 -0
- package/dist/tools/agent/ask-orchestrator.d.ts.map +1 -0
- package/dist/tools/agent/ask-orchestrator.js +39 -0
- package/dist/tools/agent/ask-orchestrator.js.map +1 -0
- package/dist/tools/agent/ask-user-constants.d.ts +6 -0
- package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
- package/dist/tools/agent/ask-user-constants.js +6 -0
- package/dist/tools/agent/ask-user-constants.js.map +1 -1
- package/dist/tools/agent/run-subagent-async.d.ts +46 -4
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent-async.js +220 -33
- package/dist/tools/agent/run-subagent-async.js.map +1 -1
- package/dist/tools/agent/run-subagent.d.ts +28 -14
- package/dist/tools/agent/run-subagent.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent.js +173 -68
- package/dist/tools/agent/run-subagent.js.map +1 -1
- package/dist/tools/file/apply-patch.d.ts +3 -1
- package/dist/tools/file/apply-patch.d.ts.map +1 -1
- package/dist/tools/file/apply-patch.js +34 -10
- package/dist/tools/file/apply-patch.js.map +1 -1
- package/dist/tools/file/code-context.d.ts +3 -2
- package/dist/tools/file/code-context.d.ts.map +1 -1
- package/dist/tools/file/code-context.js +5 -5
- package/dist/tools/file/code-context.js.map +1 -1
- package/dist/tools/file/create-file.d.ts +4 -2
- package/dist/tools/file/create-file.d.ts.map +1 -1
- package/dist/tools/file/create-file.js +10 -7
- package/dist/tools/file/create-file.js.map +1 -1
- package/dist/tools/file/edit-healing.d.ts.map +1 -1
- package/dist/tools/file/edit-healing.js +54 -35
- package/dist/tools/file/edit-healing.js.map +1 -1
- package/dist/tools/file/glob-target.d.ts +12 -0
- package/dist/tools/file/glob-target.d.ts.map +1 -0
- package/dist/tools/file/glob-target.js +22 -0
- package/dist/tools/file/glob-target.js.map +1 -0
- package/dist/tools/file/glob.d.ts +9 -2
- package/dist/tools/file/glob.d.ts.map +1 -1
- package/dist/tools/file/glob.js +12 -16
- package/dist/tools/file/glob.js.map +1 -1
- package/dist/tools/file/grep.d.ts +9 -1
- package/dist/tools/file/grep.d.ts.map +1 -1
- package/dist/tools/file/grep.js +75 -13
- package/dist/tools/file/grep.js.map +1 -1
- package/dist/tools/file/read-file.d.ts +7 -1
- package/dist/tools/file/read-file.d.ts.map +1 -1
- package/dist/tools/file/read-file.js +3 -4
- package/dist/tools/file/read-file.js.map +1 -1
- package/dist/tools/file/search-replace.d.ts +5 -3
- package/dist/tools/file/search-replace.d.ts.map +1 -1
- package/dist/tools/file/search-replace.js +29 -19
- package/dist/tools/file/search-replace.js.map +1 -1
- package/dist/tools/format-helpers.d.ts +4 -3
- package/dist/tools/format-helpers.d.ts.map +1 -1
- package/dist/tools/format-helpers.js +16 -17
- package/dist/tools/format-helpers.js.map +1 -1
- package/dist/tools/memory/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory/memory-tools.js +61 -49
- package/dist/tools/memory/memory-tools.js.map +1 -1
- package/dist/tools/run-agent-workflow.d.ts +1 -1
- package/dist/tools/run-agent-workflow.d.ts.map +1 -1
- package/dist/tools/system/shell.d.ts +39 -3
- package/dist/tools/system/shell.d.ts.map +1 -1
- package/dist/tools/system/shell.js +380 -149
- package/dist/tools/system/shell.js.map +1 -1
- package/dist/tools/types.d.ts +102 -5
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +4 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/utils.d.ts +18 -0
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +78 -0
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/web/web-fetch.d.ts +1 -1
- package/dist/tools/web/web-fetch.d.ts.map +1 -1
- package/dist/tools/web/web-fetch.js.map +1 -1
- package/dist/tools/web/web-search.d.ts +1 -1
- package/dist/tools/web/web-search.d.ts.map +1 -1
- package/dist/tools/web/web-search.js.map +1 -1
- package/dist/types/message.d.ts +2 -0
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/ai/model-settings.d.ts.map +1 -1
- package/dist/utils/ai/model-settings.js +0 -6
- package/dist/utils/ai/model-settings.js.map +1 -1
- package/dist/utils/ai/token-usage.d.ts +10 -5
- package/dist/utils/ai/token-usage.d.ts.map +1 -1
- package/dist/utils/ai/token-usage.js +48 -35
- package/dist/utils/ai/token-usage.js.map +1 -1
- package/dist/utils/apply-diff.d.ts +3 -0
- package/dist/utils/apply-diff.d.ts.map +1 -0
- package/dist/utils/apply-diff.js +192 -0
- package/dist/utils/apply-diff.js.map +1 -0
- package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-event-handler.js +72 -13
- package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
- package/dist/utils/conversation/conversation-utils.d.ts +5 -0
- package/dist/utils/conversation/conversation-utils.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-utils.js +1 -0
- package/dist/utils/conversation/conversation-utils.js.map +1 -1
- package/dist/utils/conversation/message-utils.d.ts +6 -0
- package/dist/utils/conversation/message-utils.d.ts.map +1 -1
- package/dist/utils/conversation/message-utils.js +17 -14
- package/dist/utils/conversation/message-utils.js.map +1 -1
- package/dist/utils/conversation/rewind-items.d.ts +32 -0
- package/dist/utils/conversation/rewind-items.d.ts.map +1 -0
- package/dist/utils/conversation/rewind-items.js +33 -0
- package/dist/utils/conversation/rewind-items.js.map +1 -0
- package/dist/utils/inject-warning-into-tool-output.d.ts +10 -0
- package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
- package/dist/utils/inject-warning-into-tool-output.js +17 -0
- package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +41 -4
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/shell/command-logger.js.map +1 -1
- package/dist/utils/shell/command-safety/find-helpers.d.ts +3 -2
- package/dist/utils/shell/command-safety/find-helpers.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/find-helpers.js +34 -17
- package/dist/utils/shell/command-safety/find-helpers.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/find-handler.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/handlers/find-handler.js +0 -2
- package/dist/utils/shell/command-safety/handlers/find-handler.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/git-handler.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/handlers/git-handler.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/sed-handler.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/handlers/sed-handler.js +14 -9
- package/dist/utils/shell/command-safety/handlers/sed-handler.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/types.d.ts +5 -4
- package/dist/utils/shell/command-safety/handlers/types.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/index.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/index.js +212 -88
- package/dist/utils/shell/command-safety/index.js.map +1 -1
- package/dist/utils/shell/command-safety/utils.d.ts +2 -1
- package/dist/utils/shell/command-safety/utils.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/utils.js +5 -5
- package/dist/utils/shell/command-safety/utils.js.map +1 -1
- package/dist/utils/shell/execute-shell.d.ts +24 -3
- package/dist/utils/shell/execute-shell.d.ts.map +1 -1
- package/dist/utils/shell/execute-shell.js +228 -28
- package/dist/utils/shell/execute-shell.js.map +1 -1
- package/dist/utils/shell/sandbox/denied-read-stores.d.ts +1 -8
- package/dist/utils/shell/sandbox/denied-read-stores.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/denied-read-stores.js +1 -8
- package/dist/utils/shell/sandbox/denied-read-stores.js.map +1 -1
- package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts +36 -6
- package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/docker-host-control-grants.js +47 -17
- package/dist/utils/shell/sandbox/docker-host-control-grants.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts +21 -0
- package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts.map +1 -0
- package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js +66 -0
- package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js.map +1 -0
- package/dist/utils/shell/shell-session.js.map +1 -1
- package/dist/utils/slash-command-dispatch.d.ts +21 -0
- package/dist/utils/slash-command-dispatch.d.ts.map +1 -0
- package/dist/utils/slash-command-dispatch.js +34 -0
- package/dist/utils/slash-command-dispatch.js.map +1 -0
- package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
- package/dist/utils/streaming/extract-command-messages.js +29 -51
- package/dist/utils/streaming/extract-command-messages.js.map +1 -1
- package/dist/utils/value-suggestions.d.ts.map +1 -1
- package/dist/utils/value-suggestions.js +0 -8
- package/dist/utils/value-suggestions.js.map +1 -1
- package/package.json +21 -19
- package/dist/commands/retry-command.d.ts +0 -20
- package/dist/commands/retry-command.d.ts.map +0 -1
- package/dist/commands/retry-command.js +0 -39
- package/dist/commands/retry-command.js.map +0 -1
- package/dist/commands/undo-command.d.ts +0 -15
- package/dist/commands/undo-command.d.ts.map +0 -1
- package/dist/commands/undo-command.js +0 -28
- package/dist/commands/undo-command.js.map +0 -1
- package/dist/components/input/PopupManager.d.ts +0 -88
- package/dist/components/input/PopupManager.d.ts.map +0 -1
- package/dist/components/input/PopupManager.js +0 -21
- package/dist/components/input/PopupManager.js.map +0 -1
- package/dist/components/input/popup-key-navigation.d.ts +0 -18
- package/dist/components/input/popup-key-navigation.d.ts.map +0 -1
- package/dist/components/input/popup-key-navigation.js +0 -16
- package/dist/components/input/popup-key-navigation.js.map +0 -1
- package/dist/components/input/popup-props.d.ts +0 -24
- package/dist/components/input/popup-props.d.ts.map +0 -1
- package/dist/components/input/popup-props.js +0 -72
- package/dist/components/input/popup-props.js.map +0 -1
- package/dist/components/menu/UndoSelectionMenu.d.ts +0 -12
- package/dist/components/menu/UndoSelectionMenu.d.ts.map +0 -1
- package/dist/components/menu/UndoSelectionMenu.js +0 -19
- package/dist/components/menu/UndoSelectionMenu.js.map +0 -1
- package/dist/hooks/use-mode-handlers.d.ts +0 -79
- package/dist/hooks/use-mode-handlers.d.ts.map +0 -1
- package/dist/hooks/use-mode-handlers.js +0 -183
- package/dist/hooks/use-mode-handlers.js.map +0 -1
- package/dist/hooks/use-pending-turn-guards.d.ts +0 -43
- package/dist/hooks/use-pending-turn-guards.d.ts.map +0 -1
- package/dist/hooks/use-pending-turn-guards.js +0 -120
- package/dist/hooks/use-pending-turn-guards.js.map +0 -1
- package/dist/hooks/use-trigger-detection.d.ts +0 -49
- package/dist/hooks/use-trigger-detection.d.ts.map +0 -1
- package/dist/hooks/use-trigger-detection.js +0 -104
- package/dist/hooks/use-trigger-detection.js.map +0 -1
- package/dist/hooks/use-undo-selection.d.ts +0 -23
- package/dist/hooks/use-undo-selection.d.ts.map +0 -1
- package/dist/hooks/use-undo-selection.js.map +0 -1
- package/dist/lib/agent-run-orchestrator.d.ts +0 -38
- package/dist/lib/agent-run-orchestrator.d.ts.map +0 -1
- package/dist/lib/agent-run-orchestrator.js +0 -266
- package/dist/lib/agent-run-orchestrator.js.map +0 -1
- package/dist/lib/retry-executor.d.ts +0 -16
- package/dist/lib/retry-executor.d.ts.map +0 -1
- package/dist/lib/retry-executor.js +0 -53
- package/dist/lib/retry-executor.js.map +0 -1
- package/dist/lib/runner-manager.d.ts +0 -22
- package/dist/lib/runner-manager.d.ts.map +0 -1
- package/dist/lib/runner-manager.js +0 -56
- package/dist/lib/runner-manager.js.map +0 -1
- package/dist/prompts/shell-sandbox.md +0 -18
- package/dist/prompts/simple.md +0 -53
- package/dist/prompts/simple_prev.md +0 -33
- package/dist/prompts/simple_v2.md +0 -84
- package/dist/prompts/simple_v3.md +0 -267
- package/dist/prompts/subagents/researcher.md +0 -40
- package/dist/providers/ai-sdk-agents-adapter.d.ts +0 -7
- package/dist/providers/ai-sdk-agents-adapter.d.ts.map +0 -1
- package/dist/providers/ai-sdk-agents-adapter.js +0 -80
- package/dist/providers/ai-sdk-agents-adapter.js.map +0 -1
- package/dist/providers/fallback-responses-model.d.ts +0 -46
- package/dist/providers/fallback-responses-model.d.ts.map +0 -1
- package/dist/providers/fallback-responses-model.js +0 -296
- package/dist/providers/fallback-responses-model.js.map +0 -1
- package/dist/services/stream-event-parsing.d.ts +0 -4
- package/dist/services/stream-event-parsing.d.ts.map +0 -1
- package/dist/services/stream-event-parsing.js +0 -79
- package/dist/services/stream-event-parsing.js.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { describeError, isAbortLikeError } from '../../utils/error-helpers.js';
|
|
2
|
-
import { ASK_USER_DECLINE_RESULT } from '../../tools/agent/ask-user-constants.js';
|
|
3
2
|
import { createMessageIdFactory } from '../../utils/message-id-factory.js';
|
|
4
3
|
import { isUserMessage } from '../../types/message.js';
|
|
5
4
|
import { isDeniedReadApproveAnswer } from '../../contracts/conversation.js';
|
|
6
5
|
import { createStreamingSession } from '../../utils/streaming/streaming-session-factory.js';
|
|
7
6
|
import { enhanceApiKeyError, isMaxTurnsError } from '../../utils/conversation/conversation-utils.js';
|
|
8
7
|
import { clearStreamingBotMessage, computeNextMessages } from '../../utils/conversation/apply-conversation-result.js';
|
|
9
|
-
import {
|
|
8
|
+
import { trimTrailingAssistantMessages } from '../../utils/conversation/message-utils.js';
|
|
9
|
+
import { ASK_USER_NO_ANSWER_RESULT } from '../../tools/agent/ask-user-constants.js';
|
|
10
10
|
import { annotateApprovedCommandMessage, filterPendingCommandMessagesForApproval, } from '../approval/approval-presentation-policy.js';
|
|
11
11
|
import { formatUserTurnForDisplay, hasUserTurnContent, injectSkillIntoTurn, normalizeUserTurn, } from '../../types/user-turn.js';
|
|
12
12
|
const REASONING_RESPONSE_THROTTLE_MS = 200;
|
|
@@ -16,34 +16,161 @@ const REASONING_RESPONSE_THROTTLE_MS = 200;
|
|
|
16
16
|
* by reference rather than inlined.
|
|
17
17
|
*/
|
|
18
18
|
function formatBackgroundSubagentNotifications(notifications) {
|
|
19
|
-
const
|
|
20
|
-
const
|
|
19
|
+
const completions = notifications.filter((notification) => notification.kind === 'completion');
|
|
20
|
+
const questions = notifications.filter((notification) => notification.kind === 'question');
|
|
21
|
+
const shellCompletions = notifications.filter((notification) => notification.kind === 'shell_completion');
|
|
22
|
+
const userControls = notifications.filter((notification) => notification.kind === 'user_control');
|
|
23
|
+
const sections = [];
|
|
24
|
+
if (completions.length > 0) {
|
|
25
|
+
const noun = completions.length === 1 ? 'run' : 'runs';
|
|
26
|
+
const entries = completions.map((notification) => {
|
|
27
|
+
const lines = [
|
|
28
|
+
`- runId: ${notification.runId} | role: ${notification.role} | status: ${notification.status}`,
|
|
29
|
+
...(notification.error ? [` error: ${notification.error}`] : []),
|
|
30
|
+
' result:',
|
|
31
|
+
notification.formattedResult
|
|
32
|
+
.split('\n')
|
|
33
|
+
.map((line) => ` ${line}`)
|
|
34
|
+
.join('\n'),
|
|
35
|
+
];
|
|
36
|
+
return lines.join('\n');
|
|
37
|
+
});
|
|
38
|
+
sections.push([
|
|
39
|
+
`Background subagent ${noun} finished (${completions.length}). This is an automatic system notification, not a user message.`,
|
|
40
|
+
'',
|
|
41
|
+
...entries,
|
|
42
|
+
'',
|
|
43
|
+
'The full result is inlined above; you do not need to call get_subagent_result. Assess it against the task before you accept it, then continue through the next necessary steps yourself rather than stopping at the fact that a run finished. Tell the user concisely, in your own words, what you concluded — the report is input to your judgement, not a message to relay.',
|
|
44
|
+
].join('\n'));
|
|
45
|
+
}
|
|
46
|
+
if (questions.length > 0) {
|
|
47
|
+
const entries = questions.map((notification) => {
|
|
48
|
+
const target = notification.name ?? notification.runId;
|
|
49
|
+
return [
|
|
50
|
+
`- messageId: ${notification.messageId} | target: ${target} | runId: ${notification.runId} | role: ${notification.role}`,
|
|
51
|
+
` question: ${notification.question}`,
|
|
52
|
+
].join('\n');
|
|
53
|
+
});
|
|
54
|
+
sections.push([
|
|
55
|
+
`Background subagent question${questions.length === 1 ? '' : 's'} pending (${questions.length}). This is an automatic system notification, not a user message.`,
|
|
56
|
+
'',
|
|
57
|
+
...entries,
|
|
58
|
+
'',
|
|
59
|
+
'Decide the answer, investigate it yourself, or escalate to the user if needed. To answer a specific waiting subagent, call send_message({ target, reply_to: messageId, message }). The subagent has no direct user channel; an answer resumes only its waiting tool call.',
|
|
60
|
+
].join('\n'));
|
|
61
|
+
}
|
|
62
|
+
if (shellCompletions.length > 0) {
|
|
63
|
+
const noun = shellCompletions.length === 1 ? 'job' : 'jobs';
|
|
64
|
+
const entries = shellCompletions.map((notification) => [
|
|
65
|
+
`- jobId: ${notification.jobId} | command: ${notification.command} | status: ${notification.status}`,
|
|
66
|
+
...(notification.error ? [` error: ${notification.error}`] : []),
|
|
67
|
+
' output:',
|
|
68
|
+
notification.output
|
|
69
|
+
.split('\n')
|
|
70
|
+
.map((line) => ` ${line}`)
|
|
71
|
+
.join('\n'),
|
|
72
|
+
].join('\n'));
|
|
73
|
+
sections.push([
|
|
74
|
+
`Background shell ${noun} finished (${shellCompletions.length}). This is an automatic system notification, not a user message.`,
|
|
75
|
+
'',
|
|
76
|
+
...entries,
|
|
77
|
+
'',
|
|
78
|
+
'Assess the command result against the task and continue through the next necessary steps. Tell the user concisely, in your own words, what you concluded.',
|
|
79
|
+
].join('\n'));
|
|
80
|
+
}
|
|
81
|
+
if (userControls.length > 0) {
|
|
82
|
+
const stopControls = userControls.filter((notification) => notification.action === 'stop');
|
|
83
|
+
const backgroundMoves = userControls.filter((notification) => notification.action === 'background');
|
|
84
|
+
const entriesFor = (notifications, verb) => notifications.map((notification) => {
|
|
85
|
+
const details = notification.details;
|
|
86
|
+
return details.kind === 'subagent'
|
|
87
|
+
? `- ${verb} background subagent ${details.name ?? details.id} | runId: ${details.id} | role: ${details.role} | task: ${details.task}`
|
|
88
|
+
: `- ${verb} background shell | jobId: ${details.id} | command: ${details.command}`;
|
|
89
|
+
});
|
|
90
|
+
if (stopControls.length > 0) {
|
|
91
|
+
sections.push([
|
|
92
|
+
`The user requested that ${stopControls.length === 1 ? 'a background task be stopped' : 'background tasks be stopped'}. This is an automatic user control notification, not a user message.`,
|
|
93
|
+
'',
|
|
94
|
+
...entriesFor(stopControls, 'stop requested for'),
|
|
95
|
+
'',
|
|
96
|
+
'Plan the next step around the requested stop. The task may settle later with a cancelled completion notification; do not assume its result is available yet.',
|
|
97
|
+
].join('\n'));
|
|
98
|
+
}
|
|
99
|
+
if (backgroundMoves.length > 0) {
|
|
100
|
+
sections.push([
|
|
101
|
+
`The user moved ${backgroundMoves.length === 1
|
|
102
|
+
? 'a foreground shell into the background'
|
|
103
|
+
: 'foreground shells into the background'}. This is an automatic user control notification, not a user message.`,
|
|
104
|
+
'',
|
|
105
|
+
...entriesFor(backgroundMoves, 'moved to'),
|
|
106
|
+
'',
|
|
107
|
+
'The same execution continues running in the background. Plan the next step without waiting for it, and do not stop or relaunch it unless the task now requires that.',
|
|
108
|
+
].join('\n'));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return sections.join('\n\n');
|
|
112
|
+
}
|
|
113
|
+
/** The user-facing companion to the model-only background notification instruction. */
|
|
114
|
+
function formatBackgroundSubagentNotificationDisplay(notifications) {
|
|
115
|
+
return notifications
|
|
116
|
+
.map((notification) => {
|
|
117
|
+
if (notification.kind === 'question') {
|
|
118
|
+
const target = notification.name ?? notification.runId;
|
|
119
|
+
return [
|
|
120
|
+
`messageId: ${notification.messageId} | target: ${target} | runId: ${notification.runId} | role: ${notification.role}`,
|
|
121
|
+
`question: ${notification.question}`,
|
|
122
|
+
].join('\n');
|
|
123
|
+
}
|
|
124
|
+
if (notification.kind === 'shell_completion') {
|
|
125
|
+
return [
|
|
126
|
+
`- jobId: ${notification.jobId} | command: ${notification.command} | status: ${notification.status}`,
|
|
127
|
+
...(notification.error ? [` error: ${notification.error}`] : []),
|
|
128
|
+
...(notification.output ? [` output: ${notification.output}`] : []),
|
|
129
|
+
].join('\n');
|
|
130
|
+
}
|
|
131
|
+
if (notification.kind === 'user_control') {
|
|
132
|
+
const details = notification.details;
|
|
133
|
+
if (notification.action === 'background') {
|
|
134
|
+
return details.kind === 'subagent'
|
|
135
|
+
? `Moved to background: ${details.name ?? details.id} (${details.role})`
|
|
136
|
+
: `Moved to background: shell ${details.command}`;
|
|
137
|
+
}
|
|
138
|
+
return details.kind === 'subagent'
|
|
139
|
+
? `Stop requested: background ${details.name ?? details.id} (${details.role})`
|
|
140
|
+
: `Stop requested: shell ${details.command}`;
|
|
141
|
+
}
|
|
21
142
|
const lines = [
|
|
22
143
|
`- runId: ${notification.runId} | role: ${notification.role} | status: ${notification.status}`,
|
|
23
144
|
...(notification.error ? [` error: ${notification.error}`] : []),
|
|
24
145
|
...(notification.preview ? [` preview: ${notification.preview}`] : []),
|
|
25
146
|
];
|
|
26
147
|
return lines.join('\n');
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
`Background subagent ${noun} finished (${notifications.length}). This is an automatic system notification, not a user message.`,
|
|
30
|
-
'',
|
|
31
|
-
...entries,
|
|
32
|
-
'',
|
|
33
|
-
'Call get_subagent_result(runId) for the full report, then give the user one concise completion notification.',
|
|
34
|
-
].join('\n');
|
|
148
|
+
})
|
|
149
|
+
.join('\n\n');
|
|
35
150
|
}
|
|
36
151
|
export class ConversationOrchestrator {
|
|
37
152
|
config;
|
|
38
|
-
pendingApproval = null;
|
|
39
|
-
askUserAnswers = [];
|
|
40
|
-
currentAskUserQuestionIndex = 0;
|
|
41
153
|
createMessageId;
|
|
42
154
|
#directlyAppendedMessageIds = new Set();
|
|
155
|
+
#displayedBackgroundNotificationMessageIds = new Set();
|
|
43
156
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
157
|
+
* Deferred queue submissions register an activator here. The orchestrator does
|
|
158
|
+
* not count them as active turns until the queue actually starts executing
|
|
159
|
+
* them — remove/discard/reject must not require a matching `#endTurn`.
|
|
160
|
+
*/
|
|
161
|
+
#deferredTurnActivators = new Map();
|
|
162
|
+
/**
|
|
163
|
+
* A pending steer retracted through the id-addressed mutation path. The
|
|
164
|
+
* adapter intentionally keeps the shared steer API boolean, so this marker
|
|
165
|
+
* distinguishes a deliberate retraction from an ordinary failed steer.
|
|
166
|
+
*/
|
|
167
|
+
#retractedSteerIds = new Set();
|
|
168
|
+
/** Latest user turn for a pending steer edited before admission. */
|
|
169
|
+
#editedSteerTurns = new Map();
|
|
170
|
+
/**
|
|
171
|
+
* Turns this orchestrator currently owns. Count only executions that have
|
|
172
|
+
* actually started (direct submit or queue-start activation), never merely
|
|
173
|
+
* queued awaits.
|
|
47
174
|
*/
|
|
48
175
|
#activeTurns = 0;
|
|
49
176
|
/** True while {@link stopProcessing} is tearing the conversation down. */
|
|
@@ -63,11 +190,19 @@ export class ConversationOrchestrator {
|
|
|
63
190
|
// indicator above the input box.
|
|
64
191
|
if (typeof config.conversationService.setQueuedTurnStartObserver === 'function') {
|
|
65
192
|
config.conversationService.setQueuedTurnStartObserver((execution) => {
|
|
193
|
+
if (execution.suppressUserMessageDisplay) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Deferred submissions activate their orchestrator turn here — the only
|
|
197
|
+
// moment a queued await becomes an owned execution.
|
|
198
|
+
const activateDeferred = this.#deferredTurnActivators.get(execution.requestId);
|
|
199
|
+
if (activateDeferred) {
|
|
200
|
+
activateDeferred();
|
|
201
|
+
}
|
|
66
202
|
const wasAlreadyStarted = this.moveQueuedMessageIntoList(execution.requestId, execution.input);
|
|
67
|
-
if (!wasAlreadyStarted) {
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
// turn actually becomes the queue head.
|
|
203
|
+
if (!wasAlreadyStarted && !activateDeferred) {
|
|
204
|
+
// Recovered or test-only starts without a deferred activator still need
|
|
205
|
+
// the processing indicator when the message enters the transcript.
|
|
71
206
|
config.ui.onTurnStart();
|
|
72
207
|
}
|
|
73
208
|
});
|
|
@@ -87,17 +222,14 @@ export class ConversationOrchestrator {
|
|
|
87
222
|
getSubagentUsage() {
|
|
88
223
|
return this.config.subagentUsageAccumulator?.get() ?? null;
|
|
89
224
|
}
|
|
225
|
+
getCostSummary() {
|
|
226
|
+
return this.config.costAccumulator?.getSummary() ?? null;
|
|
227
|
+
}
|
|
90
228
|
goToPreviousQuestion() {
|
|
91
|
-
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
this.currentAskUserQuestionIndex -= 1;
|
|
95
|
-
this.askUserAnswers.pop();
|
|
96
|
-
this.config.ui.onAskUserGoBack(this.currentAskUserQuestionIndex, this.askUserAnswers.slice());
|
|
229
|
+
this.config.conversationService.goToPreviousPendingInteractionQuestion?.();
|
|
97
230
|
}
|
|
98
231
|
goToNextQuestion() {
|
|
99
|
-
this.
|
|
100
|
-
this.config.ui.onAskUserAdvanceToNext(this.currentAskUserQuestionIndex);
|
|
232
|
+
this.config.conversationService.goToNextPendingInteractionQuestion?.();
|
|
101
233
|
}
|
|
102
234
|
async clearConversation() {
|
|
103
235
|
if (this.config.onClear) {
|
|
@@ -108,12 +240,15 @@ export class ConversationOrchestrator {
|
|
|
108
240
|
}
|
|
109
241
|
this.config.messages.setMessages(() => []);
|
|
110
242
|
this.config.approvedContext.current = null;
|
|
111
|
-
this.
|
|
112
|
-
this.resetAskUserState();
|
|
243
|
+
this.config.conversationService.clearPendingInteraction?.();
|
|
113
244
|
this.config.ui.onResetAll();
|
|
114
245
|
this.config.usageAccumulator?.reset();
|
|
115
246
|
this.config.subagentUsageAccumulator?.reset();
|
|
247
|
+
this.config.costAccumulator?.reset();
|
|
116
248
|
this.#directlyAppendedMessageIds.clear();
|
|
249
|
+
this.#displayedBackgroundNotificationMessageIds.clear();
|
|
250
|
+
this.#retractedSteerIds.clear();
|
|
251
|
+
this.#editedSteerTurns.clear();
|
|
117
252
|
}
|
|
118
253
|
stopProcessing() {
|
|
119
254
|
// The user asked everything to stop, so background subagent runs go too.
|
|
@@ -130,60 +265,68 @@ export class ConversationOrchestrator {
|
|
|
130
265
|
? { ...message, status: 'aborted' }
|
|
131
266
|
: message));
|
|
132
267
|
this.config.approvedContext.current = null;
|
|
133
|
-
this.
|
|
134
|
-
this.resetAskUserState();
|
|
268
|
+
this.config.conversationService.clearPendingInteraction?.();
|
|
135
269
|
this.config.ui.onResetTransient();
|
|
136
270
|
this.#directlyAppendedMessageIds.clear();
|
|
271
|
+
this.#displayedBackgroundNotificationMessageIds.clear();
|
|
272
|
+
this.#retractedSteerIds.clear();
|
|
273
|
+
this.#editedSteerTurns.clear();
|
|
137
274
|
this.config.conversationService.backgroundSubagentNotifications?.drain();
|
|
138
275
|
}
|
|
139
276
|
finally {
|
|
140
277
|
this.#stoppingByUser = false;
|
|
141
278
|
}
|
|
142
279
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
280
|
+
/**
|
|
281
|
+
* Rewind through an opaque store target. `uiIndex` is used only to trim the
|
|
282
|
+
* rendered projection after the domain operation accepted the same target.
|
|
283
|
+
*/
|
|
284
|
+
rewindToTarget(targetId, uiIndex) {
|
|
285
|
+
const restored = this.config.conversationService.rewindToTarget(targetId);
|
|
286
|
+
if (restored === null)
|
|
147
287
|
return null;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
const uiText = isUserMessage(lastUserMessage) ? lastUserMessage.text : '';
|
|
288
|
+
// Keep rewind's historical foreground-only cancellation behavior, but do
|
|
289
|
+
// not abort an active turn for a stale picker target that the store rejects.
|
|
151
290
|
this.config.conversationService.abort();
|
|
152
|
-
|
|
153
|
-
const restored = removed ?? { text: uiText };
|
|
154
|
-
this.config.messages.setMessages((prev) => prev.slice(0, lastUserIndex));
|
|
291
|
+
this.config.messages.setMessages((prev) => prev.slice(0, uiIndex));
|
|
155
292
|
this.config.approvedContext.current = null;
|
|
156
|
-
this.
|
|
157
|
-
this.resetAskUserState();
|
|
293
|
+
this.config.conversationService.clearPendingInteraction?.();
|
|
158
294
|
this.config.ui.onResetTransient();
|
|
159
295
|
this.#directlyAppendedMessageIds.clear();
|
|
296
|
+
this.#displayedBackgroundNotificationMessageIds.clear();
|
|
160
297
|
return restored;
|
|
161
298
|
}
|
|
162
|
-
|
|
163
|
-
* Cancel the most recently queued message and return its text so the UI
|
|
164
|
-
* can move it back into the input box. Returns null when there are no
|
|
165
|
-
* pending queued messages, the service cannot cancel the tail item, or the
|
|
166
|
-
* service does not implement cancellation.
|
|
167
|
-
*/
|
|
168
|
-
async removeLastQueuedPendingMessage() {
|
|
299
|
+
async retractPendingSubmission(id) {
|
|
169
300
|
const service = this.config.conversationService;
|
|
170
|
-
if (typeof service.
|
|
171
|
-
return
|
|
301
|
+
if (typeof service.retractSubmission !== 'function')
|
|
302
|
+
return { kind: 'unknown_id' };
|
|
303
|
+
const result = await service.retractSubmission(id);
|
|
304
|
+
if (result.kind === 'applied') {
|
|
305
|
+
if (result.stage === 'pending_steer') {
|
|
306
|
+
this.#retractedSteerIds.add(id);
|
|
307
|
+
this.#editedSteerTurns.delete(id);
|
|
308
|
+
}
|
|
309
|
+
this.config.ui.onQueuedMessageRemoved?.(id);
|
|
172
310
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
311
|
+
return result;
|
|
312
|
+
}
|
|
313
|
+
async editPendingSubmission(id, turn) {
|
|
314
|
+
const service = this.config.conversationService;
|
|
315
|
+
if (typeof service.editSubmission !== 'function')
|
|
316
|
+
return { kind: 'unknown_id' };
|
|
317
|
+
const result = await service.editSubmission(id, turn);
|
|
318
|
+
if (result.kind === 'applied') {
|
|
319
|
+
if (result.stage === 'pending_steer') {
|
|
320
|
+
this.#editedSteerTurns.set(id, structuredClone(normalizeUserTurn(turn)));
|
|
321
|
+
}
|
|
322
|
+
this.config.ui.onQueuedMessageEdited?.(id, formatUserTurnForDisplay(normalizeUserTurn(turn)));
|
|
323
|
+
}
|
|
324
|
+
return result;
|
|
181
325
|
}
|
|
182
326
|
async retryLastToolOutput() {
|
|
183
327
|
this.config.conversationService.abort();
|
|
184
328
|
this.config.approvedContext.current = null;
|
|
185
|
-
this.
|
|
186
|
-
this.resetAskUserState();
|
|
329
|
+
this.config.conversationService.clearPendingInteraction?.();
|
|
187
330
|
this.config.ui.onResetTransient();
|
|
188
331
|
if (!this.config.conversationService.peekLastToolOutput()) {
|
|
189
332
|
return false;
|
|
@@ -210,7 +353,6 @@ export class ConversationOrchestrator {
|
|
|
210
353
|
}
|
|
211
354
|
const errorMessage = enhanceApiKeyError(describeError(error));
|
|
212
355
|
this.appendBotError(errorMessage);
|
|
213
|
-
this.config.ui.onApprovalResolved();
|
|
214
356
|
return true;
|
|
215
357
|
}
|
|
216
358
|
finally {
|
|
@@ -220,25 +362,6 @@ export class ConversationOrchestrator {
|
|
|
220
362
|
this.#endTurn();
|
|
221
363
|
}
|
|
222
364
|
}
|
|
223
|
-
undoToUserMessage(uiIndex) {
|
|
224
|
-
const messages = this.config.messages.getMessages();
|
|
225
|
-
const undoCount = countUndoableUserTurnsFrom(messages, uiIndex);
|
|
226
|
-
if (undoCount === 0) {
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
const selectedMessage = messages[uiIndex];
|
|
230
|
-
const uiText = isUserMessage(selectedMessage) ? selectedMessage.text : '';
|
|
231
|
-
this.config.conversationService.abort();
|
|
232
|
-
const removed = this.config.conversationService.undoNUserTurns(undoCount);
|
|
233
|
-
const restored = removed?.text ?? uiText;
|
|
234
|
-
this.config.messages.setMessages((prev) => prev.slice(0, uiIndex));
|
|
235
|
-
this.config.approvedContext.current = null;
|
|
236
|
-
this.pendingApproval = null;
|
|
237
|
-
this.resetAskUserState();
|
|
238
|
-
this.config.ui.onResetTransient();
|
|
239
|
-
this.#directlyAppendedMessageIds.clear();
|
|
240
|
-
return restored;
|
|
241
|
-
}
|
|
242
365
|
async sendUserMessage(input, options) {
|
|
243
366
|
const turn = normalizeUserTurn(input);
|
|
244
367
|
if (!hasUserTurnContent(turn)) {
|
|
@@ -256,12 +379,83 @@ export class ConversationOrchestrator {
|
|
|
256
379
|
// second append. When a turn is already in flight, show the message
|
|
257
380
|
// above the input box until the queue actually starts processing it; the
|
|
258
381
|
// message list will be updated when the queue pops this turn.
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
382
|
+
const queueOwnsSubmission = this.config.conversationService.isQueueOwningSubmissions?.() ??
|
|
383
|
+
this.config.conversationService.isQueueActive?.() ??
|
|
384
|
+
false;
|
|
385
|
+
// Logged before the branch below, not inside it. "Steer attempt resolved"
|
|
386
|
+
// only exists on the path that actually tries to steer, so a submission
|
|
387
|
+
// that never enters that path — because it arrived without busyMode
|
|
388
|
+
// 'steer', or because the queue did not claim it — is indistinguishable in
|
|
389
|
+
// the logs from one that was never submitted at all. That gap hid a real
|
|
390
|
+
// report of a steer silently queueing: the queue file held the message and
|
|
391
|
+
// the transcript held the user_message, and nothing recorded the decision
|
|
392
|
+
// in between. These four fields name that decision.
|
|
393
|
+
this.config.loggingService.info('Submission routing decided', {
|
|
394
|
+
busyMode: options?.busyMode ?? 'none',
|
|
395
|
+
queueOwnsSubmission,
|
|
396
|
+
queueStateKind: this.config.conversationService.queueStateKind?.() ?? 'unknown',
|
|
397
|
+
canSteer: Boolean(this.config.conversationService.steerActiveTurn),
|
|
398
|
+
messageId: userMessage.id,
|
|
399
|
+
});
|
|
400
|
+
if (queueOwnsSubmission) {
|
|
401
|
+
// A turn is already in flight or the queue is paused with retained work.
|
|
402
|
+
// Show the message above the input box until the queue actually starts
|
|
403
|
+
// processing it; the message list will be updated when the queue pops
|
|
404
|
+
// this turn.
|
|
264
405
|
this.config.ui.onQueuedMessagePending?.(userMessage.id, userMessage.text);
|
|
406
|
+
// A steer belongs to the turn already running: hand it to that turn so
|
|
407
|
+
// the model reads it at its next request, rather than making the user
|
|
408
|
+
// wait for the whole turn to end. The message joins the transcript at the
|
|
409
|
+
// moment the turn takes it, which is when the model actually sees it.
|
|
410
|
+
if (options?.busyMode === 'steer' && this.config.conversationService.steerActiveTurn) {
|
|
411
|
+
// Diagnostics for "my steer just queued". The three fields below
|
|
412
|
+
// separate the ways delivery can fail, which otherwise look identical
|
|
413
|
+
// in the UI because the queued label is drawn before this even runs:
|
|
414
|
+
// queueActive=false → refused by the adapter's predicate;
|
|
415
|
+
// the queue owns the submission but is not in a state that offers
|
|
416
|
+
// steering (awaiting_preflight, paused, idle with retained work).
|
|
417
|
+
// queueActive=true, waited≈0ms → refused synchronously downstream:
|
|
418
|
+
// awaiting an approval, or no run in flight at the run loop.
|
|
419
|
+
// queueActive=true, waited>0ms → held as pending and released when
|
|
420
|
+
// the run ended: the turn never reached another request boundary.
|
|
421
|
+
// steered=true → admitted; waitedMs is how long the
|
|
422
|
+
// user waited for the turn to reach that boundary.
|
|
423
|
+
const queueActive = this.config.conversationService.isQueueActive?.() ?? false;
|
|
424
|
+
const queueStateKind = this.config.conversationService.queueStateKind?.() ?? 'unknown';
|
|
425
|
+
const steerStartedAt = Date.now();
|
|
426
|
+
const steered = await this.config.conversationService
|
|
427
|
+
.steerActiveTurn(turn, { id: userMessage.id })
|
|
428
|
+
.catch((error) => {
|
|
429
|
+
this.logError('Error steering the active turn', error);
|
|
430
|
+
return false;
|
|
431
|
+
});
|
|
432
|
+
this.config.loggingService.info('Steer attempt resolved', {
|
|
433
|
+
steered,
|
|
434
|
+
queueActive,
|
|
435
|
+
queueStateKind,
|
|
436
|
+
waitedMs: Date.now() - steerStartedAt,
|
|
437
|
+
messageId: userMessage.id,
|
|
438
|
+
});
|
|
439
|
+
if (steered) {
|
|
440
|
+
const admittedTurn = this.#editedSteerTurns.get(userMessage.id) ?? turn;
|
|
441
|
+
this.#editedSteerTurns.delete(userMessage.id);
|
|
442
|
+
const { skill: _originalSkill, ...messageWithoutSkill } = userMessage;
|
|
443
|
+
const admittedMessage = {
|
|
444
|
+
...messageWithoutSkill,
|
|
445
|
+
text: formatUserTurnForDisplay(admittedTurn),
|
|
446
|
+
...(admittedTurn.skill ? { skill: admittedTurn.skill } : {}),
|
|
447
|
+
};
|
|
448
|
+
this.config.ui.onQueuedMessageStarted?.(userMessage.id);
|
|
449
|
+
this.config.messages.appendMessages([admittedMessage]);
|
|
450
|
+
this.config.logWriter?.append({ type: 'user_message', message: { ...admittedMessage } });
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
if (this.#retractedSteerIds.delete(userMessage.id)) {
|
|
454
|
+
this.#editedSteerTurns.delete(userMessage.id);
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
this.#editedSteerTurns.delete(userMessage.id);
|
|
458
|
+
}
|
|
265
459
|
}
|
|
266
460
|
else {
|
|
267
461
|
// No turn is in flight — append directly. The queue observer will also
|
|
@@ -270,13 +464,29 @@ export class ConversationOrchestrator {
|
|
|
270
464
|
this.config.messages.appendMessages([userMessage]);
|
|
271
465
|
this.#directlyAppendedMessageIds.add(userMessage.id);
|
|
272
466
|
}
|
|
273
|
-
this.config.logWriter?.append({ type: 'user_message', message: userMessage });
|
|
274
|
-
|
|
467
|
+
this.config.logWriter?.append({ type: 'user_message', message: { ...userMessage } });
|
|
468
|
+
// Streaming callbacks are bound at submit time, but deferred submissions
|
|
469
|
+
// must not count as active turns until the queue starts them. Otherwise
|
|
470
|
+
// remove/discard would need a matching endTurn for work that never ran.
|
|
471
|
+
let turnActivated = !queueOwnsSubmission;
|
|
472
|
+
const { botResponseUpdater, reasoningUpdater, applyConversationEvent, streamingState } = queueOwnsSubmission
|
|
473
|
+
? this.createTurnSession('sendUserMessage')
|
|
474
|
+
: this.#beginTurn('sendUserMessage');
|
|
475
|
+
if (queueOwnsSubmission) {
|
|
476
|
+
this.#deferredTurnActivators.set(userMessage.id, () => {
|
|
477
|
+
if (turnActivated)
|
|
478
|
+
return;
|
|
479
|
+
turnActivated = true;
|
|
480
|
+
this.#activeTurns += 1;
|
|
481
|
+
this.config.ui.onTurnStart();
|
|
482
|
+
});
|
|
483
|
+
}
|
|
275
484
|
try {
|
|
276
485
|
const turnToSend = turn.skill ? injectSkillIntoTurn(turn) : turn;
|
|
277
486
|
const result = await this.config.conversationService.sendMessage(turnToSend, {
|
|
278
487
|
onEvent: this.createOnEventHandler(applyConversationEvent),
|
|
279
488
|
bypassInputSurgeGuard: options?.bypassInputSurgeGuard,
|
|
489
|
+
busyMode: options?.busyMode,
|
|
280
490
|
preferredMessageId: userMessage.id,
|
|
281
491
|
});
|
|
282
492
|
applyConversationEvent({ type: 'final', finalText: '' });
|
|
@@ -285,10 +495,21 @@ export class ConversationOrchestrator {
|
|
|
285
495
|
}
|
|
286
496
|
catch (error) {
|
|
287
497
|
this.logError('Error in sendUserMessage', error);
|
|
498
|
+
if (queueOwnsSubmission) {
|
|
499
|
+
this.config.ui.onQueuedMessageRemoved?.(userMessage.id);
|
|
500
|
+
}
|
|
288
501
|
if (isAbortLikeError(error)) {
|
|
289
502
|
this.config.loggingService.debug('Suppressing abort error in sendUserMessage');
|
|
290
503
|
return;
|
|
291
504
|
}
|
|
505
|
+
// A submission that never left the pending queue produced no turn to
|
|
506
|
+
// report on, but it also produced no answer: the pending indicator has
|
|
507
|
+
// just been cleared, so saying nothing would make the user's text vanish
|
|
508
|
+
// without explanation. Report the rejection and hand the text back.
|
|
509
|
+
if (queueOwnsSubmission && !turnActivated) {
|
|
510
|
+
this.appendBotError(`${enhanceApiKeyError(describeError(error))}\n\nThis message was not sent: ${userMessage.text}`);
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
292
513
|
const rawErrorMessage = describeError(error);
|
|
293
514
|
const errorMessage = enhanceApiKeyError(rawErrorMessage);
|
|
294
515
|
const dropped = error?.rawEvent?.droppedUserMessage;
|
|
@@ -311,71 +532,44 @@ export class ConversationOrchestrator {
|
|
|
311
532
|
rawInterruption: null,
|
|
312
533
|
isMaxTurnsPrompt: true,
|
|
313
534
|
};
|
|
314
|
-
this.pendingApproval
|
|
535
|
+
this.config.conversationService.presentPendingInteraction?.(pendingApproval);
|
|
315
536
|
this.config.ui.onApprovalRequested(pendingApproval);
|
|
316
537
|
}
|
|
317
538
|
else {
|
|
318
539
|
this.appendBotError(errorMessage);
|
|
319
|
-
this.config.ui.onApprovalResolved();
|
|
320
540
|
}
|
|
321
541
|
}
|
|
322
542
|
finally {
|
|
323
543
|
this.config.loggingService.debug('sendUserMessage finally block - resetting state');
|
|
544
|
+
this.#deferredTurnActivators.delete(userMessage.id);
|
|
324
545
|
reasoningUpdater.flush();
|
|
325
546
|
botResponseUpdater.cancel();
|
|
326
|
-
|
|
547
|
+
if (turnActivated) {
|
|
548
|
+
this.#endTurn();
|
|
549
|
+
}
|
|
327
550
|
}
|
|
328
551
|
}
|
|
329
|
-
async handleApprovalDecision(answer, rejectionReason, approvalAnswer) {
|
|
330
|
-
const
|
|
331
|
-
|
|
552
|
+
async handleApprovalDecision(answer, rejectionReason, approvalAnswer, expectedInteractionId, options = {}) {
|
|
553
|
+
const resolution = this.config.conversationService.resolvePendingInteraction?.({
|
|
554
|
+
expectedInteractionId,
|
|
555
|
+
answer,
|
|
556
|
+
rejectionReason,
|
|
557
|
+
approvalAnswer,
|
|
558
|
+
});
|
|
559
|
+
if (!resolution || resolution.kind === 'none' || resolution.kind === 'stale_interaction') {
|
|
332
560
|
return;
|
|
333
561
|
}
|
|
562
|
+
if (resolution.kind === 'awaiting_next_question')
|
|
563
|
+
return;
|
|
564
|
+
const pendingApproval = resolution.approval;
|
|
334
565
|
const isMaxTurnsPrompt = pendingApproval.isMaxTurnsPrompt;
|
|
335
|
-
|
|
336
|
-
if (isAskUser && answer === 'y' && approvalAnswer !== ASK_USER_DECLINE_RESULT) {
|
|
337
|
-
let questions = [];
|
|
338
|
-
try {
|
|
339
|
-
const parsed = JSON.parse(pendingApproval.argumentsText);
|
|
340
|
-
questions = parsed.questions || [];
|
|
341
|
-
}
|
|
342
|
-
catch {
|
|
343
|
-
// noop
|
|
344
|
-
}
|
|
345
|
-
let parsedAns = approvalAnswer ?? '';
|
|
346
|
-
const currentQuestion = questions[this.askUserAnswers.length];
|
|
347
|
-
if (currentQuestion?.is_multi_select) {
|
|
348
|
-
try {
|
|
349
|
-
const maybeArray = JSON.parse(approvalAnswer ?? '');
|
|
350
|
-
if (Array.isArray(maybeArray)) {
|
|
351
|
-
parsedAns = maybeArray;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
catch {
|
|
355
|
-
// keep plain string
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
const nextAnswers = [...this.askUserAnswers, parsedAns];
|
|
359
|
-
this.config.ui.onAskUserAnswerSubmitted(parsedAns);
|
|
360
|
-
if (nextAnswers.length < questions.length) {
|
|
361
|
-
this.askUserAnswers = nextAnswers;
|
|
362
|
-
this.currentAskUserQuestionIndex = nextAnswers.length;
|
|
363
|
-
this.config.ui.onAskUserAdvanceToNext(nextAnswers.length);
|
|
364
|
-
return;
|
|
365
|
-
}
|
|
366
|
-
this.askUserAnswers = nextAnswers;
|
|
367
|
-
this.currentAskUserQuestionIndex = nextAnswers.length;
|
|
368
|
-
approvalAnswer = JSON.stringify(nextAnswers);
|
|
369
|
-
}
|
|
566
|
+
this.config.ui.onApprovalResolved();
|
|
370
567
|
if (answer === 'y' || isDeniedReadApproveAnswer(answer)) {
|
|
371
568
|
this.config.approvedContext.current = {
|
|
372
569
|
callId: pendingApproval.callId,
|
|
373
570
|
toolName: pendingApproval.toolName,
|
|
374
571
|
};
|
|
375
572
|
}
|
|
376
|
-
this.config.ui.onApprovalResolved();
|
|
377
|
-
this.pendingApproval = null;
|
|
378
|
-
this.resetAskUserState();
|
|
379
573
|
if (isMaxTurnsPrompt && answer === 'n') {
|
|
380
574
|
this.#endTurn();
|
|
381
575
|
return;
|
|
@@ -397,7 +591,6 @@ export class ConversationOrchestrator {
|
|
|
397
591
|
}
|
|
398
592
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
399
593
|
this.appendBotError(errorMessage);
|
|
400
|
-
this.config.ui.onApprovalResolved();
|
|
401
594
|
}
|
|
402
595
|
finally {
|
|
403
596
|
reasoningUpdater.flush();
|
|
@@ -410,7 +603,8 @@ export class ConversationOrchestrator {
|
|
|
410
603
|
try {
|
|
411
604
|
const result = await this.config.conversationService.handleApprovalDecision(answer, rejectionReason, {
|
|
412
605
|
onEvent: this.createOnEventHandler(applyConversationEvent),
|
|
413
|
-
approvalAnswer,
|
|
606
|
+
approvalAnswer: resolution.approvalAnswer,
|
|
607
|
+
...(options.stopAfterApprovalResolution ? { stopAfterApprovalResolution: true } : {}),
|
|
414
608
|
});
|
|
415
609
|
applyConversationEvent({ type: 'final', finalText: '' });
|
|
416
610
|
botResponseUpdater.flush();
|
|
@@ -424,7 +618,6 @@ export class ConversationOrchestrator {
|
|
|
424
618
|
}
|
|
425
619
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
426
620
|
this.appendBotError(errorMessage);
|
|
427
|
-
this.config.ui.onApprovalResolved();
|
|
428
621
|
}
|
|
429
622
|
finally {
|
|
430
623
|
this.config.loggingService.debug('handleApprovalDecision finally block - resetting state');
|
|
@@ -433,6 +626,18 @@ export class ConversationOrchestrator {
|
|
|
433
626
|
this.#endTurn();
|
|
434
627
|
}
|
|
435
628
|
}
|
|
629
|
+
/**
|
|
630
|
+
* Escape on an `ask_user` prompt. The tool still returns
|
|
631
|
+
* {@link ASK_USER_NO_ANSWER_RESULT}, so the question and the fact that it
|
|
632
|
+
* went unanswered are committed to history and travel with the user's next
|
|
633
|
+
* message. The turn then ends instead of handing the model another turn:
|
|
634
|
+
* cancelling means the user speaks next.
|
|
635
|
+
*/
|
|
636
|
+
async cancelAskUser(expectedInteractionId) {
|
|
637
|
+
return this.handleApprovalDecision('y', undefined, ASK_USER_NO_ANSWER_RESULT, expectedInteractionId, {
|
|
638
|
+
stopAfterApprovalResolution: true,
|
|
639
|
+
});
|
|
640
|
+
}
|
|
436
641
|
/** Open a turn this orchestrator owns, and its streaming session. */
|
|
437
642
|
#beginTurn(label) {
|
|
438
643
|
this.#activeTurns += 1;
|
|
@@ -452,10 +657,115 @@ export class ConversationOrchestrator {
|
|
|
452
657
|
}
|
|
453
658
|
}
|
|
454
659
|
/**
|
|
455
|
-
*
|
|
456
|
-
*
|
|
457
|
-
*
|
|
458
|
-
*
|
|
660
|
+
* Announce settled runs in the transcript, once each.
|
|
661
|
+
*
|
|
662
|
+
* Display is deliberately not tied to the agent receiving them: the user
|
|
663
|
+
* should see a run land the moment it does, whether the report reaches the
|
|
664
|
+
* agent at the next request boundary or waits for a turn of its own.
|
|
665
|
+
*/
|
|
666
|
+
#announceBackgroundSubagentNotifications(notifications) {
|
|
667
|
+
const newlyDisplayed = notifications.filter((notification) => !this.#displayedBackgroundNotificationMessageIds.has(notification.messageId));
|
|
668
|
+
if (newlyDisplayed.length === 0)
|
|
669
|
+
return;
|
|
670
|
+
for (const notification of newlyDisplayed) {
|
|
671
|
+
this.#displayedBackgroundNotificationMessageIds.add(notification.messageId);
|
|
672
|
+
}
|
|
673
|
+
const subagentNotifications = newlyDisplayed.filter((notification) => notification.kind === 'completion' || notification.kind === 'question');
|
|
674
|
+
const runs = subagentNotifications
|
|
675
|
+
.filter((notification) => notification.kind === 'completion')
|
|
676
|
+
.map(({ name, role, status, error }) => ({
|
|
677
|
+
...(name !== undefined ? { name } : {}),
|
|
678
|
+
role,
|
|
679
|
+
status,
|
|
680
|
+
...(error ? { error } : {}),
|
|
681
|
+
}));
|
|
682
|
+
const shellJobs = newlyDisplayed.filter((notification) => notification.kind === 'shell_completion');
|
|
683
|
+
const userControls = newlyDisplayed.filter((notification) => notification.kind === 'user_control');
|
|
684
|
+
this.config.messages.appendMessages([
|
|
685
|
+
...(subagentNotifications.length > 0
|
|
686
|
+
? [
|
|
687
|
+
{
|
|
688
|
+
id: this.createMessageId(),
|
|
689
|
+
sender: 'command',
|
|
690
|
+
status: 'completed',
|
|
691
|
+
command: 'background_subagent_notification',
|
|
692
|
+
output: formatBackgroundSubagentNotificationDisplay(subagentNotifications),
|
|
693
|
+
success: true,
|
|
694
|
+
toolName: 'background_subagent_notification',
|
|
695
|
+
toolArgs: { runs },
|
|
696
|
+
},
|
|
697
|
+
]
|
|
698
|
+
: []),
|
|
699
|
+
...(shellJobs.length > 0
|
|
700
|
+
? [
|
|
701
|
+
{
|
|
702
|
+
id: this.createMessageId(),
|
|
703
|
+
sender: 'command',
|
|
704
|
+
status: 'completed',
|
|
705
|
+
command: 'background_shell_notification',
|
|
706
|
+
output: formatBackgroundSubagentNotificationDisplay(shellJobs),
|
|
707
|
+
success: true,
|
|
708
|
+
toolName: 'background_shell_notification',
|
|
709
|
+
toolArgs: {
|
|
710
|
+
jobs: shellJobs.map(({ jobId, command, status, error }) => ({
|
|
711
|
+
jobId,
|
|
712
|
+
command,
|
|
713
|
+
status,
|
|
714
|
+
...(error ? { error } : {}),
|
|
715
|
+
})),
|
|
716
|
+
},
|
|
717
|
+
},
|
|
718
|
+
]
|
|
719
|
+
: []),
|
|
720
|
+
...(userControls.length > 0
|
|
721
|
+
? [
|
|
722
|
+
{
|
|
723
|
+
id: this.createMessageId(),
|
|
724
|
+
sender: 'command',
|
|
725
|
+
status: 'completed',
|
|
726
|
+
command: 'background_task_control_notification',
|
|
727
|
+
output: formatBackgroundSubagentNotificationDisplay(userControls),
|
|
728
|
+
success: true,
|
|
729
|
+
toolName: 'background_task_control_notification',
|
|
730
|
+
toolArgs: {
|
|
731
|
+
actions: userControls.map(({ action, target }) => ({ action, target })),
|
|
732
|
+
},
|
|
733
|
+
},
|
|
734
|
+
]
|
|
735
|
+
: []),
|
|
736
|
+
]);
|
|
737
|
+
}
|
|
738
|
+
/**
|
|
739
|
+
* Offer settled runs to the turn already in flight.
|
|
740
|
+
*
|
|
741
|
+
* Taken as one report at that turn's next request boundary. If the turn will
|
|
742
|
+
* not take them they go back to the store unchanged, so the idle path still
|
|
743
|
+
* delivers them and the agent never sees the same run twice.
|
|
744
|
+
*/
|
|
745
|
+
async #injectBackgroundSubagentNotifications(pending) {
|
|
746
|
+
if (!this.config.conversationService.injectIntoActiveTurn)
|
|
747
|
+
return;
|
|
748
|
+
const notifications = pending.drain();
|
|
749
|
+
if (notifications.length === 0)
|
|
750
|
+
return;
|
|
751
|
+
this.#announceBackgroundSubagentNotifications(notifications);
|
|
752
|
+
const injected = await this.config.conversationService
|
|
753
|
+
.injectIntoActiveTurn([
|
|
754
|
+
{ type: 'message', role: 'user', content: formatBackgroundSubagentNotifications(notifications) },
|
|
755
|
+
])
|
|
756
|
+
.catch((error) => {
|
|
757
|
+
this.logError('Error delivering background subagent notifications', error);
|
|
758
|
+
return false;
|
|
759
|
+
});
|
|
760
|
+
if (!injected)
|
|
761
|
+
pending.retain(notifications);
|
|
762
|
+
}
|
|
763
|
+
/**
|
|
764
|
+
* Hand every settled background subagent run to the main agent.
|
|
765
|
+
*
|
|
766
|
+
* The agent that launched these runs is usually still working when they
|
|
767
|
+
* settle, so delivery goes into that turn at its next request boundary. Only
|
|
768
|
+
* when no turn will take them does this open one of its own.
|
|
459
769
|
*/
|
|
460
770
|
async #deliverBackgroundSubagentNotifications() {
|
|
461
771
|
const pending = this.config.conversationService.backgroundSubagentNotifications;
|
|
@@ -463,17 +773,24 @@ export class ConversationOrchestrator {
|
|
|
463
773
|
return;
|
|
464
774
|
if (this.#stoppingByUser)
|
|
465
775
|
return;
|
|
466
|
-
|
|
776
|
+
const turnIsRunning = this.#activeTurns > 0 || this.config.conversationService.isQueueActive?.() === true;
|
|
777
|
+
if (turnIsRunning) {
|
|
778
|
+
await this.#injectBackgroundSubagentNotifications(pending);
|
|
467
779
|
return;
|
|
468
|
-
|
|
780
|
+
}
|
|
781
|
+
if (this.config.conversationService.getPendingInteractionSnapshot?.())
|
|
469
782
|
return;
|
|
470
783
|
const notifications = pending.drain();
|
|
471
784
|
if (notifications.length === 0)
|
|
472
785
|
return;
|
|
786
|
+
this.#announceBackgroundSubagentNotifications(notifications);
|
|
473
787
|
const { botResponseUpdater, reasoningUpdater, applyConversationEvent, streamingState } = this.#beginTurn('backgroundSubagentNotification');
|
|
474
788
|
let delivered = false;
|
|
475
789
|
try {
|
|
476
|
-
const result = await this.config.conversationService.sendMessage(formatBackgroundSubagentNotifications(notifications), {
|
|
790
|
+
const result = await this.config.conversationService.sendMessage(formatBackgroundSubagentNotifications(notifications), {
|
|
791
|
+
onEvent: this.createOnEventHandler(applyConversationEvent),
|
|
792
|
+
suppressUserMessageDisplay: true,
|
|
793
|
+
});
|
|
477
794
|
// A turn the queue refused to admit resolves without a terminal, so the
|
|
478
795
|
// notifications were never seen and must go back on the queue.
|
|
479
796
|
delivered = Boolean(result);
|
|
@@ -488,7 +805,6 @@ export class ConversationOrchestrator {
|
|
|
488
805
|
return;
|
|
489
806
|
}
|
|
490
807
|
this.appendBotError(enhanceApiKeyError(describeError(error)));
|
|
491
|
-
this.config.ui.onApprovalResolved();
|
|
492
808
|
}
|
|
493
809
|
finally {
|
|
494
810
|
reasoningUpdater.flush();
|
|
@@ -516,11 +832,11 @@ export class ConversationOrchestrator {
|
|
|
516
832
|
}
|
|
517
833
|
createOnEventHandler(baseOnEvent) {
|
|
518
834
|
return (event) => {
|
|
519
|
-
const eventType =
|
|
835
|
+
const eventType = event.type;
|
|
520
836
|
if (eventType === 'reasoning_delta') {
|
|
521
837
|
this.config.ui.onStreamingThinkingStarted((this.config.now ?? Date.now)());
|
|
522
838
|
}
|
|
523
|
-
else if (
|
|
839
|
+
else if (this.clearsThinkingIndicator(eventType)) {
|
|
524
840
|
this.config.ui.onStreamingThinkingCleared();
|
|
525
841
|
}
|
|
526
842
|
if (eventType === 'tool_call_streaming_delta') {
|
|
@@ -529,7 +845,7 @@ export class ConversationOrchestrator {
|
|
|
529
845
|
else if (eventType === 'tool_started' || eventType === 'text_delta' || eventType === 'final') {
|
|
530
846
|
this.config.ui.onStreamingToolInfo(null);
|
|
531
847
|
}
|
|
532
|
-
if (
|
|
848
|
+
if (eventType === 'user_message_consumed_for_abort') {
|
|
533
849
|
this.config.messages.setMessages((prev) => {
|
|
534
850
|
for (let i = prev.length - 1; i >= 0; i--) {
|
|
535
851
|
const msg = prev[i];
|
|
@@ -546,8 +862,11 @@ export class ConversationOrchestrator {
|
|
|
546
862
|
return;
|
|
547
863
|
}
|
|
548
864
|
baseOnEvent(event);
|
|
549
|
-
if (
|
|
550
|
-
|
|
865
|
+
if (eventType === 'subagent_completed') {
|
|
866
|
+
if (event.result.usage) {
|
|
867
|
+
this.config.subagentUsageAccumulator?.add(event.result.usage);
|
|
868
|
+
}
|
|
869
|
+
this.config.costAccumulator?.addRecords(event.result.costRecords ?? []);
|
|
551
870
|
}
|
|
552
871
|
};
|
|
553
872
|
}
|
|
@@ -559,13 +878,11 @@ export class ConversationOrchestrator {
|
|
|
559
878
|
if (result.usage) {
|
|
560
879
|
this.config.ui.onUsageUpdate(latestStreamedUsage ?? result.usage);
|
|
561
880
|
}
|
|
562
|
-
this.pendingApproval = result.approval;
|
|
563
881
|
this.config.messages.setMessages((prev) => this.config.messages.trimMessages(filterPendingCommandMessagesForApproval(prev, result.approval)));
|
|
564
882
|
this.config.ui.onApprovalRequested({ ...result.approval, llmAdvisory: result.approval.llmAdvisory });
|
|
565
883
|
this.config.notifier?.approvalNeeded();
|
|
566
884
|
return;
|
|
567
885
|
}
|
|
568
|
-
this.pendingApproval = null;
|
|
569
886
|
this.config.messages.setMessages((prev) => computeNextMessages({
|
|
570
887
|
prev,
|
|
571
888
|
result,
|
|
@@ -583,6 +900,7 @@ export class ConversationOrchestrator {
|
|
|
583
900
|
this.config.usageAccumulator?.add(result.usage);
|
|
584
901
|
this.config.ui.onUsageUpdate(latestStreamedUsage ?? result.usage);
|
|
585
902
|
}
|
|
903
|
+
this.config.costAccumulator?.addRecords(result.costRecords ?? []);
|
|
586
904
|
}
|
|
587
905
|
/**
|
|
588
906
|
* Append a previously-queued user message into the message list. Called by
|
|
@@ -637,10 +955,6 @@ export class ConversationOrchestrator {
|
|
|
637
955
|
eventType === 'tool_call_streaming_delta' ||
|
|
638
956
|
eventType === 'final');
|
|
639
957
|
}
|
|
640
|
-
resetAskUserState() {
|
|
641
|
-
this.askUserAnswers = [];
|
|
642
|
-
this.currentAskUserQuestionIndex = 0;
|
|
643
|
-
}
|
|
644
958
|
appendBotError(errorMessage) {
|
|
645
959
|
const botErrorMessage = {
|
|
646
960
|
id: this.createMessageId(),
|