@qduc/term2 0.15.0 → 0.17.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 +324 -316
- package/dist/agent.d.ts +5 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +16 -64
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +129 -19
- package/dist/app.js.map +1 -1
- package/dist/cli.js +52 -17
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-approve-command.d.ts +2 -1
- package/dist/commands/auto-approve-command.d.ts.map +1 -1
- package/dist/commands/auto-approve-command.js +16 -27
- package/dist/commands/auto-approve-command.js.map +1 -1
- package/dist/commands/compact-command.d.ts.map +1 -1
- package/dist/commands/compact-command.js +4 -0
- package/dist/commands/compact-command.js.map +1 -1
- package/dist/commands/effort-command.js +1 -1
- package/dist/commands/effort-command.js.map +1 -1
- package/dist/commands/guarded-settings-command.d.ts.map +1 -1
- package/dist/commands/guarded-settings-command.js +4 -8
- package/dist/commands/guarded-settings-command.js.map +1 -1
- package/dist/commands/model-command.js +1 -1
- package/dist/commands/model-command.js.map +1 -1
- package/dist/commands/resume-command.d.ts +11 -0
- package/dist/commands/resume-command.d.ts.map +1 -0
- package/dist/commands/resume-command.js +41 -0
- package/dist/commands/resume-command.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/components/ErrorBoundary.js +5 -4
- package/dist/components/ErrorBoundary.js.map +1 -1
- package/dist/components/InputBox.d.ts +2 -0
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +56 -18
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/components/MarkdownRenderer.js +16 -15
- package/dist/components/MarkdownRenderer.js.map +1 -1
- package/dist/components/common/MenuContainer.d.ts +25 -2
- package/dist/components/common/MenuContainer.d.ts.map +1 -1
- package/dist/components/common/MenuContainer.js +35 -11
- package/dist/components/common/MenuContainer.js.map +1 -1
- package/dist/components/common/ScrollableTabBar.d.ts.map +1 -1
- package/dist/components/common/ScrollableTabBar.js +5 -4
- package/dist/components/common/ScrollableTabBar.js.map +1 -1
- package/dist/components/input/ApplicationInputSurface.d.ts +7 -5
- package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -1
- package/dist/components/input/ApplicationInputSurface.js +7 -0
- package/dist/components/input/ApplicationInputSurface.js.map +1 -1
- package/dist/components/input/FirstRunSetupPrompt.d.ts.map +1 -1
- package/dist/components/input/FirstRunSetupPrompt.js +5 -4
- package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
- package/dist/components/input/MenuSurface.d.ts.map +1 -1
- package/dist/components/input/MenuSurface.js +10 -3
- package/dist/components/input/MenuSurface.js.map +1 -1
- package/dist/components/input/ModelMenuSession.d.ts.map +1 -1
- package/dist/components/input/ModelMenuSession.js +2 -1
- package/dist/components/input/ModelMenuSession.js.map +1 -1
- package/dist/components/input/PendingQueueList.d.ts +2 -0
- package/dist/components/input/PendingQueueList.d.ts.map +1 -1
- package/dist/components/input/PendingQueueList.js +17 -14
- package/dist/components/input/PendingQueueList.js.map +1 -1
- package/dist/components/input/ResumeMenuSession.d.ts +17 -0
- package/dist/components/input/ResumeMenuSession.d.ts.map +1 -0
- package/dist/components/input/ResumeMenuSession.js +57 -0
- package/dist/components/input/ResumeMenuSession.js.map +1 -0
- package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
- package/dist/components/input/SettingsValueMenuSession.js +2 -1
- package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
- package/dist/components/input/determine-active-menu.d.ts +3 -0
- package/dist/components/input/determine-active-menu.d.ts.map +1 -1
- package/dist/components/input/determine-active-menu.js +10 -5
- package/dist/components/input/determine-active-menu.js.map +1 -1
- package/dist/components/input/menu-registry.d.ts.map +1 -1
- package/dist/components/input/menu-registry.js +2 -0
- package/dist/components/input/menu-registry.js.map +1 -1
- package/dist/components/input/menu-types.d.ts +4 -0
- package/dist/components/input/menu-types.d.ts.map +1 -1
- package/dist/components/input/triggers.d.ts +1 -0
- package/dist/components/input/triggers.d.ts.map +1 -1
- package/dist/components/input/triggers.js +26 -0
- package/dist/components/input/triggers.js.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.js +12 -11
- package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
- 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 +10 -9
- package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
- package/dist/components/layout/Banner.d.ts +0 -1
- package/dist/components/layout/Banner.d.ts.map +1 -1
- package/dist/components/layout/Banner.js +43 -73
- package/dist/components/layout/Banner.js.map +1 -1
- package/dist/components/layout/BottomArea.d.ts +8 -5
- package/dist/components/layout/BottomArea.d.ts.map +1 -1
- package/dist/components/layout/BottomArea.js +17 -9
- package/dist/components/layout/BottomArea.js.map +1 -1
- package/dist/components/layout/DiffView.js +5 -5
- package/dist/components/layout/DiffView.js.map +1 -1
- package/dist/components/layout/StatusBar.d.ts +4 -1
- package/dist/components/layout/StatusBar.d.ts.map +1 -1
- package/dist/components/layout/StatusBar.js +305 -95
- package/dist/components/layout/StatusBar.js.map +1 -1
- package/dist/components/layout/background-task-clock.d.ts +43 -0
- package/dist/components/layout/background-task-clock.d.ts.map +1 -0
- package/dist/components/layout/background-task-clock.js +46 -0
- package/dist/components/layout/background-task-clock.js.map +1 -0
- package/dist/components/menu/CopyMenu.d.ts.map +1 -1
- package/dist/components/menu/CopyMenu.js +4 -3
- package/dist/components/menu/CopyMenu.js.map +1 -1
- package/dist/components/menu/MentorPoolSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/MentorPoolSelectionMenu.js +28 -21
- package/dist/components/menu/MentorPoolSelectionMenu.js.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.js +26 -13
- package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
- package/dist/components/menu/PathSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/PathSelectionMenu.js +4 -3
- package/dist/components/menu/PathSelectionMenu.js.map +1 -1
- package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ProviderSelectionMenu.js +46 -26
- package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
- package/dist/components/menu/ResumeSelectionMenu.d.ts +11 -0
- package/dist/components/menu/ResumeSelectionMenu.d.ts.map +1 -0
- package/dist/components/menu/ResumeSelectionMenu.js +91 -0
- package/dist/components/menu/ResumeSelectionMenu.js.map +1 -0
- package/dist/components/menu/RewindMenu.d.ts.map +1 -1
- package/dist/components/menu/RewindMenu.js +4 -3
- package/dist/components/menu/RewindMenu.js.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.js +26 -26
- package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
- package/dist/components/menu/SettingsValueSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SettingsValueSelectionMenu.js +22 -20
- package/dist/components/menu/SettingsValueSelectionMenu.js.map +1 -1
- package/dist/components/menu/SkillSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SkillSelectionMenu.js +33 -23
- package/dist/components/menu/SkillSelectionMenu.js.map +1 -1
- package/dist/components/menu/SlashCommandMenu.d.ts.map +1 -1
- package/dist/components/menu/SlashCommandMenu.js +11 -6
- package/dist/components/menu/SlashCommandMenu.js.map +1 -1
- package/dist/components/message/ChatMessage.js +2 -2
- package/dist/components/message/ChatMessage.js.map +1 -1
- package/dist/components/message/CodeContextSearchRenderer.d.ts.map +1 -1
- package/dist/components/message/CodeContextSearchRenderer.js +8 -11
- package/dist/components/message/CodeContextSearchRenderer.js.map +1 -1
- package/dist/components/message/CommandGroupSummary.d.ts.map +1 -1
- package/dist/components/message/CommandGroupSummary.js +21 -9
- package/dist/components/message/CommandGroupSummary.js.map +1 -1
- package/dist/components/message/CommandMessage.d.ts.map +1 -1
- package/dist/components/message/CommandMessage.js +111 -91
- package/dist/components/message/CommandMessage.js.map +1 -1
- package/dist/components/message/GrepRenderer.d.ts.map +1 -1
- package/dist/components/message/GrepRenderer.js +5 -8
- package/dist/components/message/GrepRenderer.js.map +1 -1
- package/dist/components/message/MemoryRenderer.d.ts +1 -0
- package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
- package/dist/components/message/MemoryRenderer.js +19 -17
- package/dist/components/message/MemoryRenderer.js.map +1 -1
- package/dist/components/message/MessageList.d.ts +1 -2
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +12 -11
- package/dist/components/message/MessageList.js.map +1 -1
- package/dist/components/message/ReadFileRenderer.d.ts.map +1 -1
- package/dist/components/message/ReadFileRenderer.js +5 -6
- package/dist/components/message/ReadFileRenderer.js.map +1 -1
- package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
- package/dist/components/message/SubagentActivityMessage.js +17 -13
- package/dist/components/message/SubagentActivityMessage.js.map +1 -1
- package/dist/components/message/WebFetchRenderer.d.ts.map +1 -1
- package/dist/components/message/WebFetchRenderer.js +7 -11
- package/dist/components/message/WebFetchRenderer.js.map +1 -1
- package/dist/components/message/WebSearchRenderer.d.ts.map +1 -1
- package/dist/components/message/WebSearchRenderer.js +5 -10
- package/dist/components/message/WebSearchRenderer.js.map +1 -1
- package/dist/components/message/command-grouping.d.ts +29 -6
- package/dist/components/message/command-grouping.d.ts.map +1 -1
- package/dist/components/message/command-grouping.js +62 -20
- package/dist/components/message/command-grouping.js.map +1 -1
- package/dist/components/message/command-message-helpers.d.ts +10 -37
- package/dist/components/message/command-message-helpers.d.ts.map +1 -1
- package/dist/components/message/command-message-helpers.js +26 -8
- package/dist/components/message/command-message-helpers.js.map +1 -1
- package/dist/components/message/useCommandVisibility.d.ts.map +1 -1
- package/dist/components/message/useCommandVisibility.js +5 -4
- package/dist/components/message/useCommandVisibility.js.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.js +232 -106
- package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
- package/dist/components/prompt/HandoffConfirmationPrompt.d.ts.map +1 -1
- package/dist/components/prompt/HandoffConfirmationPrompt.js +3 -2
- package/dist/components/prompt/HandoffConfirmationPrompt.js.map +1 -1
- package/dist/components/prompt/InputSurgeConfirmationPrompt.d.ts.map +1 -1
- package/dist/components/prompt/InputSurgeConfirmationPrompt.js +5 -4
- package/dist/components/prompt/InputSurgeConfirmationPrompt.js.map +1 -1
- package/dist/components/prompt/LargeUncachedConfirmationPrompt.d.ts.map +1 -1
- package/dist/components/prompt/LargeUncachedConfirmationPrompt.js +4 -3
- package/dist/components/prompt/LargeUncachedConfirmationPrompt.js.map +1 -1
- package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ModeSwitchConfirmationPrompt.js +4 -3
- package/dist/components/prompt/ModeSwitchConfirmationPrompt.js.map +1 -1
- package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
- package/dist/components/prompt/QueuePausedPrompt.js +6 -5
- package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
- package/dist/components/prompt/StandardModeConfirmationPrompt.d.ts.map +1 -1
- package/dist/components/prompt/StandardModeConfirmationPrompt.js +3 -2
- package/dist/components/prompt/StandardModeConfirmationPrompt.js.map +1 -1
- package/dist/components/theme.d.ts +58 -3
- package/dist/components/theme.d.ts.map +1 -1
- package/dist/components/theme.js +84 -17
- package/dist/components/theme.js.map +1 -1
- package/dist/context/InputContext.d.ts +1 -1
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.js +2 -0
- package/dist/context/InputContext.js.map +1 -1
- package/dist/contracts/application-stream.d.ts +14 -0
- package/dist/contracts/application-stream.d.ts.map +1 -1
- package/dist/contracts/streamed-model-turn.d.ts +13 -1
- package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
- package/dist/gateway/assertion.d.ts +4 -1
- package/dist/gateway/assertion.d.ts.map +1 -1
- package/dist/gateway/assertion.js +24 -2
- package/dist/gateway/assertion.js.map +1 -1
- package/dist/gateway/contracts.d.ts +21 -4
- package/dist/gateway/contracts.d.ts.map +1 -1
- package/dist/gateway/contracts.js +11 -0
- package/dist/gateway/contracts.js.map +1 -1
- package/dist/gateway/dynamic-workspace-registry.d.ts +76 -0
- package/dist/gateway/dynamic-workspace-registry.d.ts.map +1 -0
- package/dist/gateway/dynamic-workspace-registry.js +403 -0
- package/dist/gateway/dynamic-workspace-registry.js.map +1 -0
- package/dist/gateway/gateway.d.ts +24 -1
- package/dist/gateway/gateway.d.ts.map +1 -1
- package/dist/gateway/gateway.js +704 -21
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/launcher-seam.d.ts +18 -0
- package/dist/gateway/launcher-seam.d.ts.map +1 -0
- package/dist/gateway/launcher-seam.js +43 -0
- package/dist/gateway/launcher-seam.js.map +1 -0
- package/dist/gateway/pairing.d.ts +25 -0
- package/dist/gateway/pairing.d.ts.map +1 -0
- package/dist/gateway/pairing.js +107 -0
- package/dist/gateway/pairing.js.map +1 -0
- package/dist/gateway/persistence/coordinator.d.ts +2 -0
- package/dist/gateway/persistence/coordinator.d.ts.map +1 -1
- package/dist/gateway/persistence/coordinator.js +13 -0
- package/dist/gateway/persistence/coordinator.js.map +1 -1
- package/dist/gateway/runtime-factory.d.ts +15 -6
- package/dist/gateway/runtime-factory.d.ts.map +1 -1
- package/dist/gateway/runtime-factory.js +38 -9
- package/dist/gateway/runtime-factory.js.map +1 -1
- package/dist/gateway/safe-log.d.ts.map +1 -1
- package/dist/gateway/safe-log.js +19 -0
- package/dist/gateway/safe-log.js.map +1 -1
- package/dist/gateway/server-session.d.ts.map +1 -1
- package/dist/gateway/server-session.js +36 -4
- package/dist/gateway/server-session.js.map +1 -1
- package/dist/gateway/server.d.ts +26 -3
- package/dist/gateway/server.d.ts.map +1 -1
- package/dist/gateway/server.js +105 -17
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/settings-rpc.d.ts +95 -0
- package/dist/gateway/settings-rpc.d.ts.map +1 -0
- package/dist/gateway/settings-rpc.js +227 -0
- package/dist/gateway/settings-rpc.js.map +1 -0
- package/dist/gateway/trusted-clients.d.ts +27 -0
- package/dist/gateway/trusted-clients.d.ts.map +1 -0
- package/dist/gateway/trusted-clients.js +157 -0
- package/dist/gateway/trusted-clients.js.map +1 -0
- package/dist/gateway/worker-boundary.d.ts +6 -5
- package/dist/gateway/worker-boundary.d.ts.map +1 -1
- package/dist/gateway/worker-boundary.js +20 -10
- package/dist/gateway/worker-boundary.js.map +1 -1
- package/dist/gateway/workspace-admission.d.ts +11 -0
- package/dist/gateway/workspace-admission.d.ts.map +1 -1
- package/dist/gateway/workspace-admission.js +89 -16
- package/dist/gateway/workspace-admission.js.map +1 -1
- package/dist/gateway/workspace-boundary-probe.d.ts +18 -0
- package/dist/gateway/workspace-boundary-probe.d.ts.map +1 -0
- package/dist/gateway/workspace-boundary-probe.js +37 -0
- package/dist/gateway/workspace-boundary-probe.js.map +1 -0
- package/dist/hooks/conversation-ui-reducer.d.ts +6 -0
- package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
- package/dist/hooks/conversation-ui-reducer.js +9 -1
- package/dist/hooks/conversation-ui-reducer.js.map +1 -1
- package/dist/hooks/settings-completion-config.d.ts.map +1 -1
- package/dist/hooks/settings-completion-config.js +11 -3
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/use-app-commands.d.ts +6 -1
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +23 -14
- package/dist/hooks/use-app-commands.js.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts +1 -3
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.js +11 -9
- package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +8 -0
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +27 -18
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-opencode-go-usage.d.ts +8 -0
- package/dist/hooks/use-opencode-go-usage.d.ts.map +1 -0
- package/dist/hooks/use-opencode-go-usage.js +45 -0
- package/dist/hooks/use-opencode-go-usage.js.map +1 -0
- package/dist/hooks/use-resume-selection.d.ts +22 -0
- package/dist/hooks/use-resume-selection.d.ts.map +1 -0
- package/dist/hooks/use-resume-selection.js +76 -0
- package/dist/hooks/use-resume-selection.js.map +1 -0
- package/dist/hooks/use-shell-mode.d.ts +3 -4
- package/dist/hooks/use-shell-mode.d.ts.map +1 -1
- package/dist/hooks/use-shell-mode.js +14 -12
- package/dist/hooks/use-shell-mode.js.map +1 -1
- package/dist/hooks/use-terminal-columns.d.ts +15 -0
- package/dist/hooks/use-terminal-columns.d.ts.map +1 -0
- package/dist/hooks/use-terminal-columns.js +45 -0
- package/dist/hooks/use-terminal-columns.js.map +1 -0
- package/dist/lib/agent-client.d.ts +14 -1
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +112 -37
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts +5 -0
- package/dist/lib/agent-configuration.d.ts.map +1 -1
- package/dist/lib/agent-configuration.js +14 -5
- package/dist/lib/agent-configuration.js.map +1 -1
- package/dist/lib/agent-factory.d.ts +7 -2
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +22 -11
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/harness-input-idle.d.ts.map +1 -1
- package/dist/lib/harness-input-idle.js +1 -1
- package/dist/lib/harness-input-idle.js.map +1 -1
- package/dist/non-interactive.d.ts +3 -0
- package/dist/non-interactive.d.ts.map +1 -1
- package/dist/non-interactive.js +106 -22
- package/dist/non-interactive.js.map +1 -1
- package/dist/prompts/approval-model.md +22 -0
- package/dist/prompts/gpt-5.6.md +3 -2
- package/dist/prompts/mentor-mode-stub.md +3 -0
- package/dist/prompts/orchestrator-mode-stub.md +3 -0
- package/dist/prompts/prefix-quality.test.ts +10 -0
- 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 +23 -13
- package/dist/prompts/prompt-constructor.js.map +1 -1
- package/dist/prompts/prompt-constructor.test.ts +39 -5
- package/dist/prompts/prompt-constructor.ts +27 -15
- package/dist/prompts/prompt-profiles.d.ts +1 -3
- package/dist/prompts/prompt-profiles.d.ts.map +1 -1
- package/dist/prompts/prompt-profiles.js +2 -7
- package/dist/prompts/prompt-profiles.js.map +1 -1
- package/dist/prompts/prompt-profiles.ts +3 -16
- package/dist/prompts/session-browser.md +3 -0
- package/dist/prompts/subagent-delegation.d.ts +4 -3
- package/dist/prompts/subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/subagent-delegation.js +14 -18
- package/dist/prompts/subagent-delegation.js.map +1 -1
- package/dist/prompts/subagent-delegation.test.ts +2 -2
- package/dist/prompts/subagent-delegation.ts +13 -20
- package/dist/providers/chained-wire-state.d.ts +7 -2
- package/dist/providers/chained-wire-state.d.ts.map +1 -1
- package/dist/providers/chained-wire-state.js +16 -7
- package/dist/providers/chained-wire-state.js.map +1 -1
- package/dist/providers/codex-auth.d.ts +2 -5
- package/dist/providers/codex-auth.d.ts.map +1 -1
- package/dist/providers/codex-auth.js +2 -0
- package/dist/providers/codex-auth.js.map +1 -1
- package/dist/providers/codex-compact.d.ts +9 -0
- package/dist/providers/codex-compact.d.ts.map +1 -0
- package/dist/providers/codex-compact.js +23 -0
- package/dist/providers/codex-compact.js.map +1 -0
- package/dist/providers/codex-responses-model.d.ts +17 -1
- package/dist/providers/codex-responses-model.d.ts.map +1 -1
- package/dist/providers/codex-responses-model.js +75 -8
- package/dist/providers/codex-responses-model.js.map +1 -1
- package/dist/providers/codex-turn-converter.d.ts.map +1 -1
- package/dist/providers/codex-turn-converter.js +8 -4
- package/dist/providers/codex-turn-converter.js.map +1 -1
- package/dist/providers/codex.provider.js +2 -2
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/providers/grok-auth.d.ts +2 -5
- package/dist/providers/grok-auth.d.ts.map +1 -1
- package/dist/providers/grok-auth.js +2 -0
- package/dist/providers/grok-auth.js.map +1 -1
- package/dist/providers/oauth-account-store.d.ts +5 -0
- package/dist/providers/oauth-account-store.d.ts.map +1 -1
- package/dist/providers/oauth-account-store.js +56 -5
- package/dist/providers/oauth-account-store.js.map +1 -1
- package/dist/providers/oauth-pkce.d.ts +8 -0
- package/dist/providers/oauth-pkce.d.ts.map +1 -1
- package/dist/providers/oauth-pkce.js +91 -19
- package/dist/providers/oauth-pkce.js.map +1 -1
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +8 -1
- package/dist/providers/openai-compatible.provider.js.map +1 -1
- package/dist/providers/openai-responses-model.d.ts.map +1 -1
- package/dist/providers/openai-responses-model.js +2 -0
- package/dist/providers/openai-responses-model.js.map +1 -1
- package/dist/providers/opencode-go-usage.d.ts +24 -0
- package/dist/providers/opencode-go-usage.d.ts.map +1 -0
- package/dist/providers/opencode-go-usage.js +37 -0
- package/dist/providers/opencode-go-usage.js.map +1 -0
- package/dist/providers/openrouter.provider.d.ts.map +1 -1
- package/dist/providers/openrouter.provider.js +8 -1
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/responses-websocket-sessions.d.ts +1 -0
- package/dist/providers/responses-websocket-sessions.d.ts.map +1 -1
- package/dist/providers/responses-websocket-sessions.js +16 -2
- package/dist/providers/responses-websocket-sessions.js.map +1 -1
- package/dist/providers/retrying-model.d.ts +1 -0
- package/dist/providers/retrying-model.d.ts.map +1 -1
- package/dist/providers/retrying-model.js +37 -3
- package/dist/providers/retrying-model.js.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts +5 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.js +231 -149
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
- package/dist/services/agent-runtime/generation-guard.d.ts +39 -25
- package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
- package/dist/services/agent-runtime/generation-guard.js +98 -100
- package/dist/services/agent-runtime/generation-guard.js.map +1 -1
- package/dist/services/agent-runtime/run-budget.d.ts +1 -1
- package/dist/services/agent-runtime/run-budget.d.ts.map +1 -1
- package/dist/services/agent-runtime/run-budget.js +4 -0
- package/dist/services/agent-runtime/run-budget.js.map +1 -1
- package/dist/services/agent-stream.d.ts.map +1 -1
- package/dist/services/agent-stream.js +1 -0
- package/dist/services/agent-stream.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-evaluator.d.ts +3 -1
- package/dist/services/approval/shell-auto-approval-evaluator.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-evaluator.js +4 -2
- package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts +2 -0
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +2 -0
- package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts +13 -2
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +35 -7
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-admission-workflow.d.ts +3 -2
- package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -1
- package/dist/services/conversation/conversation-admission-workflow.js +6 -1
- package/dist/services/conversation/conversation-admission-workflow.js.map +1 -1
- package/dist/services/conversation/conversation-events.d.ts +43 -2
- package/dist/services/conversation/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.d.ts +14 -1
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +142 -11
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.types.d.ts +3 -1
- package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.d.ts +22 -1
- package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.js +61 -0
- package/dist/services/conversation/conversation-persistence.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +45 -29
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/session-audit.d.ts +70 -0
- package/dist/services/conversation/session-audit.d.ts.map +1 -0
- package/dist/services/conversation/session-audit.js +164 -0
- package/dist/services/conversation/session-audit.js.map +1 -0
- package/dist/services/conversation/session-browser.d.ts +49 -0
- package/dist/services/conversation/session-browser.d.ts.map +1 -0
- package/dist/services/conversation/session-browser.js +411 -0
- package/dist/services/conversation/session-browser.js.map +1 -0
- package/dist/services/input-surge-approval.d.ts +21 -0
- package/dist/services/input-surge-approval.d.ts.map +1 -0
- package/dist/services/input-surge-approval.js +42 -0
- package/dist/services/input-surge-approval.js.map +1 -0
- package/dist/services/large-uncached-input-guard.js +4 -4
- package/dist/services/large-uncached-input-guard.js.map +1 -1
- package/dist/services/logging/assistant-turn-journal.d.ts +15 -0
- package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
- package/dist/services/logging/assistant-turn-journal.js +27 -0
- package/dist/services/logging/assistant-turn-journal.js.map +1 -1
- package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
- package/dist/services/memory/memory-capabilities.js +7 -4
- package/dist/services/memory/memory-capabilities.js.map +1 -1
- package/dist/services/memory/memory-search.d.ts +16 -0
- package/dist/services/memory/memory-search.d.ts.map +1 -0
- package/dist/services/memory/memory-search.js +55 -0
- package/dist/services/memory/memory-search.js.map +1 -0
- package/dist/services/memory/memory-store.d.ts +12 -0
- package/dist/services/memory/memory-store.d.ts.map +1 -1
- package/dist/services/memory/memory-store.js +14 -35
- package/dist/services/memory/memory-store.js.map +1 -1
- package/dist/services/mode-notices.d.ts +11 -0
- package/dist/services/mode-notices.d.ts.map +1 -1
- package/dist/services/mode-notices.js +37 -3
- package/dist/services/mode-notices.js.map +1 -1
- package/dist/services/queue/queue-controller.d.ts +13 -0
- package/dist/services/queue/queue-controller.d.ts.map +1 -1
- package/dist/services/queue/queue-controller.js +32 -1
- package/dist/services/queue/queue-controller.js.map +1 -1
- package/dist/services/retry/in-loop-model-retry.d.ts +16 -0
- package/dist/services/retry/in-loop-model-retry.d.ts.map +1 -0
- package/dist/services/retry/in-loop-model-retry.js +125 -0
- package/dist/services/retry/in-loop-model-retry.js.map +1 -0
- package/dist/services/retry/retry-classifier.d.ts.map +1 -1
- package/dist/services/retry/retry-classifier.js +18 -12
- package/dist/services/retry/retry-classifier.js.map +1 -1
- package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.js +10 -6
- package/dist/services/retry/retry-error-classification.js.map +1 -1
- package/dist/services/retry/upstream-retry-policy.d.ts.map +1 -1
- package/dist/services/retry/upstream-retry-policy.js +40 -7
- package/dist/services/retry/upstream-retry-policy.js.map +1 -1
- package/dist/services/runtime-setting-router.d.ts.map +1 -1
- package/dist/services/runtime-setting-router.js +7 -2
- package/dist/services/runtime-setting-router.js.map +1 -1
- package/dist/services/session/background-check-in-scheduler.d.ts +44 -0
- package/dist/services/session/background-check-in-scheduler.d.ts.map +1 -0
- package/dist/services/session/background-check-in-scheduler.js +88 -0
- package/dist/services/session/background-check-in-scheduler.js.map +1 -0
- package/dist/services/session/background-task-control.js +4 -1
- package/dist/services/session/background-task-control.js.map +1 -1
- package/dist/services/session/initial-input-preparer.d.ts +2 -1
- package/dist/services/session/initial-input-preparer.d.ts.map +1 -1
- package/dist/services/session/initial-input-preparer.js +4 -1
- package/dist/services/session/initial-input-preparer.js.map +1 -1
- package/dist/services/session/repetition-detector.d.ts +0 -4
- package/dist/services/session/repetition-detector.d.ts.map +1 -1
- package/dist/services/session/repetition-detector.js +0 -7
- package/dist/services/session/repetition-detector.js.map +1 -1
- package/dist/services/session/session-access-state.d.ts +3 -0
- package/dist/services/session/session-access-state.d.ts.map +1 -1
- package/dist/services/session/session-access-state.js +12 -0
- package/dist/services/session/session-access-state.js.map +1 -1
- package/dist/services/session/session-client-factory.d.ts +3 -1
- package/dist/services/session/session-client-factory.d.ts.map +1 -1
- package/dist/services/session/session-client-factory.js +2 -1
- package/dist/services/session/session-client-factory.js.map +1 -1
- package/dist/services/session/session-composition.d.ts +6 -2
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +148 -29
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-input-planner.d.ts +9 -0
- package/dist/services/session/session-input-planner.d.ts.map +1 -1
- package/dist/services/session/session-input-planner.js +23 -0
- package/dist/services/session/session-input-planner.js.map +1 -1
- package/dist/services/session/session-lifecycle.d.ts +8 -0
- package/dist/services/session/session-lifecycle.d.ts.map +1 -1
- package/dist/services/session/session-lifecycle.js +4 -0
- package/dist/services/session/session-lifecycle.js.map +1 -1
- package/dist/services/session/session-stream-processor.d.ts.map +1 -1
- package/dist/services/session/session-stream-processor.js +5 -15
- package/dist/services/session/session-stream-processor.js.map +1 -1
- package/dist/services/session/turn-attempt-factory.d.ts +2 -1
- package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
- package/dist/services/session/turn-attempt-factory.js +1 -0
- package/dist/services/session/turn-attempt-factory.js.map +1 -1
- package/dist/services/session/turn-attempt.d.ts +3 -0
- 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 +1 -1
- package/dist/services/session/turn-coordinator.d.ts.map +1 -1
- package/dist/services/session/turn-workflow.d.ts.map +1 -1
- package/dist/services/session/turn-workflow.js +4 -1
- package/dist/services/session/turn-workflow.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +27 -3
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +35 -11
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-service.d.ts +9 -0
- package/dist/services/settings/settings-service.d.ts.map +1 -1
- package/dist/services/settings/settings-service.js +40 -0
- 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 +5 -0
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +2 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js +6 -0
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
- package/dist/services/shell/shell-interaction-session.d.ts +4 -5
- package/dist/services/shell/shell-interaction-session.d.ts.map +1 -1
- package/dist/services/shell/shell-interaction-session.js +8 -20
- package/dist/services/shell/shell-interaction-session.js.map +1 -1
- package/dist/services/stream-event-processor.d.ts.map +1 -1
- package/dist/services/stream-event-processor.js +15 -0
- package/dist/services/stream-event-processor.js.map +1 -1
- package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
- package/dist/services/subagents/mentor-runner.js +2 -0
- package/dist/services/subagents/mentor-runner.js.map +1 -1
- package/dist/services/subagents/nested-runner.d.ts.map +1 -1
- package/dist/services/subagents/nested-runner.js +34 -1
- package/dist/services/subagents/nested-runner.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.js +1 -1
- package/dist/services/subagents/subagent-async-registry.js.map +1 -1
- package/dist/services/subagents/subagent-notification-store.d.ts +28 -1
- package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
- package/dist/services/subagents/subagent-notification-store.js +11 -0
- package/dist/services/subagents/subagent-notification-store.js.map +1 -1
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +10 -5
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/utils.d.ts +2 -0
- package/dist/services/subagents/utils.d.ts.map +1 -1
- package/dist/services/subagents/utils.js +29 -0
- package/dist/services/subagents/utils.js.map +1 -1
- package/dist/services/tool-execution-ledger.d.ts.map +1 -1
- package/dist/services/tool-execution-ledger.js +5 -1
- package/dist/services/tool-execution-ledger.js.map +1 -1
- package/dist/slash-commands.d.ts +3 -0
- package/dist/slash-commands.d.ts.map +1 -1
- package/dist/slash-commands.js.map +1 -1
- package/dist/tools/agent/ask-user.d.ts.map +1 -1
- package/dist/tools/agent/ask-user.js +2 -0
- package/dist/tools/agent/ask-user.js.map +1 -1
- package/dist/tools/agent/run-subagent-async.d.ts +0 -1
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent-async.js +3 -3
- package/dist/tools/agent/run-subagent-async.js.map +1 -1
- package/dist/tools/agent/run-subagent.d.ts +2 -2
- package/dist/tools/agent/run-subagent.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent.js +44 -28
- package/dist/tools/agent/run-subagent.js.map +1 -1
- package/dist/tools/file/apply-patch.d.ts.map +1 -1
- package/dist/tools/file/apply-patch.js +11 -3
- package/dist/tools/file/apply-patch.js.map +1 -1
- package/dist/tools/file/create-file.d.ts.map +1 -1
- package/dist/tools/file/create-file.js +12 -4
- package/dist/tools/file/create-file.js.map +1 -1
- package/dist/tools/file/search-replace.d.ts.map +1 -1
- package/dist/tools/file/search-replace.js +10 -3
- package/dist/tools/file/search-replace.js.map +1 -1
- package/dist/tools/memory/memory-tools.d.ts +5 -1
- package/dist/tools/memory/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory/memory-tools.js +445 -62
- package/dist/tools/memory/memory-tools.js.map +1 -1
- package/dist/tools/session-browser/session-browser-tools.d.ts +4 -0
- package/dist/tools/session-browser/session-browser-tools.d.ts.map +1 -0
- package/dist/tools/session-browser/session-browser-tools.js +47 -0
- package/dist/tools/session-browser/session-browser-tools.js.map +1 -0
- package/dist/tools/system/shell.d.ts.map +1 -1
- package/dist/tools/system/shell.js +7 -0
- package/dist/tools/system/shell.js.map +1 -1
- package/dist/tools/types.d.ts +4 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/utils/busy-turn-guard.d.ts +17 -0
- package/dist/utils/busy-turn-guard.d.ts.map +1 -0
- package/dist/utils/busy-turn-guard.js +24 -0
- package/dist/utils/busy-turn-guard.js.map +1 -0
- package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-event-handler.js +28 -7
- package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
- package/dist/utils/output/bounded-json.d.ts +33 -0
- package/dist/utils/output/bounded-json.d.ts.map +1 -0
- package/dist/utils/output/bounded-json.js +59 -0
- package/dist/utils/output/bounded-json.js.map +1 -0
- package/dist/utils/output/output-trim.d.ts.map +1 -1
- package/dist/utils/output/output-trim.js +7 -7
- package/dist/utils/output/output-trim.js.map +1 -1
- package/dist/utils/output/text-snippet.d.ts +6 -0
- package/dist/utils/output/text-snippet.d.ts.map +1 -0
- package/dist/utils/output/text-snippet.js +106 -0
- package/dist/utils/output/text-snippet.js.map +1 -0
- package/dist/utils/resume-list.d.ts +3 -1
- package/dist/utils/resume-list.d.ts.map +1 -1
- package/dist/utils/resume-list.js +3 -2
- package/dist/utils/resume-list.js.map +1 -1
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +15 -0
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/index.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/handlers/index.js +3 -0
- package/dist/utils/shell/command-safety/handlers/index.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/rm-handler.d.ts +3 -0
- package/dist/utils/shell/command-safety/handlers/rm-handler.d.ts.map +1 -0
- package/dist/utils/shell/command-safety/handlers/rm-handler.js +97 -0
- package/dist/utils/shell/command-safety/handlers/rm-handler.js.map +1 -0
- package/dist/utils/shell/command-safety/handlers/types.d.ts +1 -0
- package/dist/utils/shell/command-safety/handlers/types.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/index.d.ts +6 -2
- package/dist/utils/shell/command-safety/index.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/index.js +13 -12
- package/dist/utils/shell/command-safety/index.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-policy.d.ts +2 -0
- package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
- package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts +1 -0
- package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/shell-sandbox-runner.js +20 -1
- package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -1
- package/dist/utils/shell/temp-dir.d.ts +1 -0
- package/dist/utils/shell/temp-dir.d.ts.map +1 -1
- package/dist/utils/shell/temp-dir.js +12 -4
- package/dist/utils/shell/temp-dir.js.map +1 -1
- package/dist/utils/value-suggestions.d.ts.map +1 -1
- package/dist/utils/value-suggestions.js +1 -0
- package/dist/utils/value-suggestions.js.map +1 -1
- package/package.json +4 -2
|
@@ -9,7 +9,8 @@ import { RunBudget, isRunBudgetInteraction, } from './run-budget.js';
|
|
|
9
9
|
import { addTokenUsage, normalizeUsage } from '../../utils/ai/token-usage.js';
|
|
10
10
|
import { computeModelCost } from '../../services/cost/model-cost.js';
|
|
11
11
|
import { getCatalogPricingVersion, getModelPricing } from '../../services/cost/pricing.js';
|
|
12
|
-
import {
|
|
12
|
+
import { GenerationGuard, GenerationGuardError, GenerationStreamDeadlines, } from './generation-guard.js';
|
|
13
|
+
import { classifyInLoopModelRetry, sleepWithAbort } from '../retry/in-loop-model-retry.js';
|
|
13
14
|
/**
|
|
14
15
|
* Compatibility error for legacy callers without a staged run budget. The loop
|
|
15
16
|
* owns turn counting — the SDK-era `callModelInputFilter` hook is deliberately
|
|
@@ -657,150 +658,220 @@ export class ApplicationRunLoop {
|
|
|
657
658
|
state.requestBoundaryReady = undefined;
|
|
658
659
|
}
|
|
659
660
|
const model = await this.#deps.resolveModel(state.agent.model);
|
|
660
|
-
|
|
661
|
-
|
|
661
|
+
const maxRetries = state.agent.modelSettings?.retry?.maxRetries ?? 0;
|
|
662
|
+
let attempt = 0;
|
|
663
|
+
let streamedToolCalls = [];
|
|
662
664
|
let completion;
|
|
665
|
+
let sawToolCall = false;
|
|
666
|
+
let activeRequestId = '';
|
|
667
|
+
let activeRequest;
|
|
663
668
|
let pendingNativeReasoning;
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
:
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
:
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
let iteratorFinished = false;
|
|
722
|
-
try {
|
|
723
|
-
iterator = model.stream(request)[Symbol.asyncIterator]();
|
|
724
|
-
while (true) {
|
|
725
|
-
const next = await deadline.wait(iterator.next());
|
|
726
|
-
if (next.done) {
|
|
727
|
-
iteratorFinished = true;
|
|
728
|
-
return;
|
|
729
|
-
}
|
|
730
|
-
const event = next.value;
|
|
731
|
-
if (event.type === 'completion') {
|
|
732
|
-
generationGuard.observeCompletion(event.output);
|
|
733
|
-
completion = event;
|
|
734
|
-
continue;
|
|
735
|
-
}
|
|
736
|
-
if (event.type === 'text_delta') {
|
|
737
|
-
generationGuard.observeText(event.text);
|
|
738
|
-
outputPush(stream, queue, { type: 'text_delta', text: event.text });
|
|
739
|
-
continue;
|
|
740
|
-
}
|
|
741
|
-
if (event.type === 'codex_rate_limits') {
|
|
742
|
-
outputPush(stream, queue, { type: 'codex_rate_limits', rateLimits: event.rateLimits });
|
|
743
|
-
continue;
|
|
669
|
+
let criticalWrapUp = false;
|
|
670
|
+
while (true) {
|
|
671
|
+
streamedToolCalls = [];
|
|
672
|
+
completion = undefined;
|
|
673
|
+
sawToolCall = false;
|
|
674
|
+
pendingNativeReasoning = undefined;
|
|
675
|
+
// Stable process-unique request id, allocated immediately before dispatch
|
|
676
|
+
// so a cost record can be settled exactly once (success or failure).
|
|
677
|
+
activeRequestId = this.#nextRequestId();
|
|
678
|
+
const requestId = activeRequestId;
|
|
679
|
+
const outputLengthBefore = stream.output.length;
|
|
680
|
+
const newItemsLengthBefore = stream.newItems.length;
|
|
681
|
+
const inputLengthBefore = state.input.length;
|
|
682
|
+
const historyLengthBefore = state.history.length;
|
|
683
|
+
const criticalWrapUpDispatchedBefore = state.criticalWrapUpDispatched;
|
|
684
|
+
let provisionalTextCharacters = 0;
|
|
685
|
+
let provisionalReasoningCharacters = 0;
|
|
686
|
+
let provisionalTextDeltas = 0;
|
|
687
|
+
let provisionalReasoningDeltas = 0;
|
|
688
|
+
criticalWrapUp = state.criticalWrapUpPending === true && state.criticalWrapUpDispatched !== true;
|
|
689
|
+
if (criticalWrapUp)
|
|
690
|
+
state.criticalWrapUpDispatched = true;
|
|
691
|
+
const disableChaining = state.disableChainingForAttempt === true;
|
|
692
|
+
if (disableChaining) {
|
|
693
|
+
state.disableChainingForAttempt = false;
|
|
694
|
+
state.responseId = undefined;
|
|
695
|
+
state.responseProviderId = undefined;
|
|
696
|
+
}
|
|
697
|
+
const request = {
|
|
698
|
+
instructions: criticalWrapUp
|
|
699
|
+
? `${state.agent.instructions}\n\nBudget containment is terminal. Do not call tools. In this one final response, summarize what you completed, the evidence you have, and what remains.`
|
|
700
|
+
: state.agent.instructions,
|
|
701
|
+
...(state.supportsConversationChaining &&
|
|
702
|
+
!disableChaining &&
|
|
703
|
+
state.responseId &&
|
|
704
|
+
state.responseProviderId !== undefined &&
|
|
705
|
+
state.responseProviderId === state.currentProviderId
|
|
706
|
+
? { previousResponseId: state.responseId }
|
|
707
|
+
: {}),
|
|
708
|
+
...(disableChaining ? { disableChaining: true } : {}),
|
|
709
|
+
input: state.input,
|
|
710
|
+
tools: toModelTools(criticalWrapUp ? [] : state.agent.tools),
|
|
711
|
+
applicationTools: criticalWrapUp ? [] : state.agent.tools,
|
|
712
|
+
...(state.agent.modelSettings?.temperature !== undefined
|
|
713
|
+
? { temperature: state.agent.modelSettings.temperature }
|
|
714
|
+
: {}),
|
|
715
|
+
...(state.agent.modelSettings?.reasoning ? { reasoning: state.agent.modelSettings.reasoning } : {}),
|
|
716
|
+
...(state.agent.modelSettings?.maxTokens !== undefined
|
|
717
|
+
? { maxTokens: state.agent.modelSettings.maxTokens }
|
|
718
|
+
: {}),
|
|
719
|
+
...(state.agent.outputType !== undefined ? { outputType: state.agent.outputType } : {}),
|
|
720
|
+
...(state.agent.modelSettings?.codex ? { codex: state.agent.modelSettings.codex } : {}),
|
|
721
|
+
...(state.agent.modelSettings?.providerData
|
|
722
|
+
? {
|
|
723
|
+
providerOptions: this.#contextCompactionSessionState.disabled
|
|
724
|
+
? Object.fromEntries(Object.entries(state.agent.modelSettings.providerData).filter(([key]) => key !== 'contextCompaction'))
|
|
725
|
+
: state.agent.modelSettings.providerData,
|
|
744
726
|
}
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
727
|
+
: {}),
|
|
728
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
729
|
+
};
|
|
730
|
+
activeRequest = request;
|
|
731
|
+
const generationGuard = new GenerationGuard({
|
|
732
|
+
maxOutputCharacters: state.agent.modelSettings?.maxStreamOutputChars,
|
|
733
|
+
maxTextCharacters: state.agent.modelSettings?.maxStreamOutputChars,
|
|
734
|
+
maxReasoningCharacters: state.agent.modelSettings?.maxStreamOutputChars,
|
|
735
|
+
maxToolArgumentCharacters: state.agent.modelSettings?.maxStreamOutputChars,
|
|
736
|
+
maxCumulativeToolArgumentCharacters: state.agent.modelSettings?.maxStreamOutputChars,
|
|
737
|
+
requestDeadlineMs: state.agent.modelSettings?.maxModelRequestDurationMs,
|
|
738
|
+
maxStreamIdleMs: state.agent.modelSettings?.maxModelStreamIdleMs,
|
|
739
|
+
...options.generationGuard,
|
|
740
|
+
});
|
|
741
|
+
const consume = async () => {
|
|
742
|
+
const deadline = new GenerationStreamDeadlines({ totalMs: generationGuard.requestDeadlineMs, idleMs: generationGuard.maxStreamIdleMs }, () => requestAbortController.abort(), () => generationGuard.progress);
|
|
743
|
+
let iterator;
|
|
744
|
+
let iteratorFinished = false;
|
|
745
|
+
try {
|
|
746
|
+
iterator = model.stream(request)[Symbol.asyncIterator]();
|
|
747
|
+
while (true) {
|
|
748
|
+
const next = await deadline.wait(iterator.next());
|
|
749
|
+
if (next.done) {
|
|
750
|
+
iteratorFinished = true;
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
753
|
+
// Any streamed event is transport activity: re-arm the inactivity
|
|
754
|
+
// window so long legitimate reasoning is never mistaken for a stall.
|
|
755
|
+
deadline.recordActivity();
|
|
756
|
+
const event = next.value;
|
|
757
|
+
if (event.type === 'completion') {
|
|
758
|
+
generationGuard.observeCompletion(event.output);
|
|
759
|
+
completion = event;
|
|
760
|
+
continue;
|
|
761
|
+
}
|
|
762
|
+
if (event.type === 'text_delta') {
|
|
763
|
+
generationGuard.observeText(event.text);
|
|
764
|
+
provisionalTextCharacters += event.text.length;
|
|
765
|
+
provisionalTextDeltas++;
|
|
766
|
+
outputPush(stream, queue, { type: 'text_delta', text: event.text });
|
|
767
|
+
continue;
|
|
768
|
+
}
|
|
769
|
+
if (event.type === 'codex_rate_limits') {
|
|
770
|
+
outputPush(stream, queue, { type: 'codex_rate_limits', rateLimits: event.rateLimits });
|
|
771
|
+
continue;
|
|
772
|
+
}
|
|
773
|
+
if (event.type === 'reasoning_delta') {
|
|
774
|
+
const accepted = generationGuard.observeReasoning(event.text);
|
|
775
|
+
if (!accepted)
|
|
776
|
+
continue;
|
|
777
|
+
const forwarded = accepted === event.text ? event : { ...event, text: accepted };
|
|
778
|
+
pendingNativeReasoning = appendNativeReasoning(pendingNativeReasoning, forwarded);
|
|
779
|
+
provisionalReasoningCharacters += accepted.length;
|
|
780
|
+
provisionalReasoningDeltas++;
|
|
781
|
+
outputPush(stream, queue, { type: 'reasoning_delta', text: accepted });
|
|
782
|
+
continue;
|
|
783
|
+
}
|
|
784
|
+
if (event.type === 'tool_call_streaming_delta') {
|
|
785
|
+
generationGuard.observeToolArgumentProgress(event.argumentCharCount);
|
|
786
|
+
outputPush(stream, queue, event);
|
|
787
|
+
continue;
|
|
788
|
+
}
|
|
789
|
+
if (event.type === 'context_compaction_started' || event.type === 'context_compaction_completed') {
|
|
790
|
+
outputPush(stream, queue, event);
|
|
791
|
+
continue;
|
|
792
|
+
}
|
|
793
|
+
if (event.type === 'tool_call') {
|
|
794
|
+
generationGuard.observeToolCall(event.arguments);
|
|
795
|
+
pendingNativeReasoning = commitPendingNativeReasoning(state, stream, queue, pendingNativeReasoning);
|
|
796
|
+
sawToolCall = true;
|
|
797
|
+
streamedToolCalls.push(event);
|
|
798
|
+
}
|
|
750
799
|
}
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
800
|
+
}
|
|
801
|
+
finally {
|
|
802
|
+
deadline.dispose();
|
|
803
|
+
if (iterator && !iteratorFinished)
|
|
804
|
+
void iterator.return?.().catch(() => undefined);
|
|
805
|
+
}
|
|
806
|
+
};
|
|
807
|
+
const dispatch = async () => {
|
|
808
|
+
state.requestPreparation?.prepare(request);
|
|
809
|
+
await consume();
|
|
810
|
+
};
|
|
811
|
+
try {
|
|
812
|
+
if (state.requestPreparation)
|
|
813
|
+
await state.requestPreparation.run(dispatch);
|
|
814
|
+
else
|
|
815
|
+
await dispatch();
|
|
816
|
+
break;
|
|
817
|
+
}
|
|
818
|
+
catch (error) {
|
|
819
|
+
if (error instanceof GenerationGuardError)
|
|
820
|
+
requestAbortController.abort();
|
|
821
|
+
const decision = classifyInLoopModelRetry(error, attempt, maxRetries, Math.random, {
|
|
822
|
+
previousResponseId: activeRequest?.previousResponseId,
|
|
823
|
+
});
|
|
824
|
+
if (decision.retryable && !options.signal?.aborted) {
|
|
825
|
+
attempt++;
|
|
826
|
+
state.input.splice(inputLengthBefore);
|
|
827
|
+
state.history.splice(historyLengthBefore);
|
|
828
|
+
state.criticalWrapUpDispatched = criticalWrapUpDispatchedBefore;
|
|
829
|
+
stream.output.splice(outputLengthBefore);
|
|
830
|
+
if (stream.newItems !== stream.output) {
|
|
831
|
+
stream.newItems.splice(newItemsLengthBefore);
|
|
755
832
|
}
|
|
756
|
-
if (
|
|
757
|
-
|
|
758
|
-
|
|
833
|
+
if (provisionalTextDeltas > 0 || provisionalReasoningDeltas > 0) {
|
|
834
|
+
queue.push({
|
|
835
|
+
type: 'model_attempt_rollback',
|
|
836
|
+
textCharacters: provisionalTextCharacters,
|
|
837
|
+
reasoningCharacters: provisionalReasoningCharacters,
|
|
838
|
+
textDeltas: provisionalTextDeltas,
|
|
839
|
+
reasoningDeltas: provisionalReasoningDeltas,
|
|
840
|
+
});
|
|
759
841
|
}
|
|
760
|
-
if (
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
streamedToolCalls.push(event);
|
|
842
|
+
if (decision.kind === 'chain_recovery') {
|
|
843
|
+
state.disableChainingForAttempt = true;
|
|
844
|
+
state.responseId = undefined;
|
|
845
|
+
state.responseProviderId = undefined;
|
|
765
846
|
}
|
|
847
|
+
this.#deps.logDiagnostic?.('Retrying model request in run loop', {
|
|
848
|
+
attempt,
|
|
849
|
+
maxRetries,
|
|
850
|
+
kind: decision.kind,
|
|
851
|
+
delayMs: decision.delayMs,
|
|
852
|
+
error: error instanceof Error ? error.message : String(error),
|
|
853
|
+
});
|
|
854
|
+
await (this.#deps.waitBeforeModelRetry ?? sleepWithAbort)(decision.delayMs, options.signal);
|
|
855
|
+
continue;
|
|
766
856
|
}
|
|
857
|
+
// Dispatch began, but no terminal completion was accepted. Record an
|
|
858
|
+
// unpriced marker so the summary stays honest (partial) rather than
|
|
859
|
+
// appearing exact. Observational only: the error still propagates.
|
|
860
|
+
const cancelled = error instanceof Error && error.name === 'AbortError';
|
|
861
|
+
const record = this.#appendCostRecord(state, {
|
|
862
|
+
requestId,
|
|
863
|
+
provider: state.currentProviderId,
|
|
864
|
+
model: state.agent.model,
|
|
865
|
+
tier: resolveServiceTier(request),
|
|
866
|
+
outcome: cancelled ? 'cancelled' : 'failed',
|
|
867
|
+
});
|
|
868
|
+
// Only the live queue sees cost records: `output`/`newItems` feed
|
|
869
|
+
// persistence and replay, and a cost event must never become a
|
|
870
|
+
// restored history item.
|
|
871
|
+
queue.push({ type: 'cost_update', record });
|
|
872
|
+
this.#evaluateRunBudget(state, stream, queue);
|
|
873
|
+
throw error;
|
|
767
874
|
}
|
|
768
|
-
finally {
|
|
769
|
-
deadline.dispose();
|
|
770
|
-
if (iterator && !iteratorFinished)
|
|
771
|
-
void iterator.return?.().catch(() => undefined);
|
|
772
|
-
}
|
|
773
|
-
};
|
|
774
|
-
const dispatch = async () => {
|
|
775
|
-
state.requestPreparation?.prepare(request);
|
|
776
|
-
await consume();
|
|
777
|
-
};
|
|
778
|
-
try {
|
|
779
|
-
if (state.requestPreparation)
|
|
780
|
-
await state.requestPreparation.run(dispatch);
|
|
781
|
-
else
|
|
782
|
-
await dispatch();
|
|
783
|
-
}
|
|
784
|
-
catch (error) {
|
|
785
|
-
if (error instanceof GenerationGuardError)
|
|
786
|
-
requestAbortController.abort();
|
|
787
|
-
// Dispatch began, but no terminal completion was accepted. Record an
|
|
788
|
-
// unpriced marker so the summary stays honest (partial) rather than
|
|
789
|
-
// appearing exact. Observational only: the error still propagates.
|
|
790
|
-
const cancelled = error instanceof Error && error.name === 'AbortError';
|
|
791
|
-
const record = this.#appendCostRecord(state, {
|
|
792
|
-
requestId,
|
|
793
|
-
provider: state.currentProviderId,
|
|
794
|
-
model: state.agent.model,
|
|
795
|
-
tier: resolveServiceTier(request),
|
|
796
|
-
outcome: cancelled ? 'cancelled' : 'failed',
|
|
797
|
-
});
|
|
798
|
-
// Only the live queue sees cost records: `output`/`newItems` feed
|
|
799
|
-
// persistence and replay, and a cost event must never become a
|
|
800
|
-
// restored history item.
|
|
801
|
-
queue.push({ type: 'cost_update', record });
|
|
802
|
-
this.#evaluateRunBudget(state, stream, queue);
|
|
803
|
-
throw error;
|
|
804
875
|
}
|
|
805
876
|
if (!completion) {
|
|
806
877
|
// A few application-owned model fixtures (and legacy adapters) end a
|
|
@@ -820,6 +891,7 @@ export class ApplicationRunLoop {
|
|
|
820
891
|
}
|
|
821
892
|
continue;
|
|
822
893
|
}
|
|
894
|
+
const finalCompletion = completion;
|
|
823
895
|
// Commit the authoritative terminal state before handling terminal-only
|
|
824
896
|
// tool calls. Approval may pause immediately after this point, and the
|
|
825
897
|
// continuation must still carry the response that produced the calls.
|
|
@@ -828,7 +900,7 @@ export class ApplicationRunLoop {
|
|
|
828
900
|
// chaining, while still exposing the completed provider response on the
|
|
829
901
|
// current stream for diagnostics.
|
|
830
902
|
if (state.supportsConversationChaining && state.currentProviderId !== undefined) {
|
|
831
|
-
state.responseId =
|
|
903
|
+
state.responseId = finalCompletion.responseId;
|
|
832
904
|
state.responseProviderId = state.currentProviderId;
|
|
833
905
|
}
|
|
834
906
|
else {
|
|
@@ -836,8 +908,8 @@ export class ApplicationRunLoop {
|
|
|
836
908
|
state.responseProviderId = undefined;
|
|
837
909
|
}
|
|
838
910
|
let normalizedCompletionUsage;
|
|
839
|
-
if (
|
|
840
|
-
normalizedCompletionUsage = normalizeModelUsage(
|
|
911
|
+
if (finalCompletion.usage !== undefined) {
|
|
912
|
+
normalizedCompletionUsage = normalizeModelUsage(finalCompletion.usage);
|
|
841
913
|
if (normalizedCompletionUsage) {
|
|
842
914
|
const accumulated = addTokenUsage(normalizeModelUsage(state.usage), normalizedCompletionUsage);
|
|
843
915
|
state.usage = {
|
|
@@ -858,7 +930,7 @@ export class ApplicationRunLoop {
|
|
|
858
930
|
else {
|
|
859
931
|
// Providers may carry a future/opaque usage shape. Preserve the old
|
|
860
932
|
// pass-through behavior when normalization cannot recognize it.
|
|
861
|
-
state.usage =
|
|
933
|
+
state.usage = finalCompletion.usage;
|
|
862
934
|
}
|
|
863
935
|
}
|
|
864
936
|
else {
|
|
@@ -872,13 +944,13 @@ export class ApplicationRunLoop {
|
|
|
872
944
|
// persistence and replay, and a cost event must never become a restored
|
|
873
945
|
// history item.
|
|
874
946
|
const record = this.#appendCostRecord(state, {
|
|
875
|
-
requestId,
|
|
947
|
+
requestId: activeRequestId,
|
|
876
948
|
provider: state.currentProviderId,
|
|
877
949
|
model: state.agent.model,
|
|
878
|
-
tier: resolveServiceTier(
|
|
950
|
+
tier: activeRequest ? resolveServiceTier(activeRequest) : 'standard',
|
|
879
951
|
outcome: 'completed',
|
|
880
952
|
usage: normalizedCompletionUsage,
|
|
881
|
-
providerUsd:
|
|
953
|
+
providerUsd: finalCompletion.costUsd,
|
|
882
954
|
});
|
|
883
955
|
queue.push({ type: 'cost_update', record });
|
|
884
956
|
// Cost and usage arrive in the same completion metadata, so surface both
|
|
@@ -887,18 +959,18 @@ export class ApplicationRunLoop {
|
|
|
887
959
|
if (normalizedCompletionUsage)
|
|
888
960
|
queue.push({ type: 'usage_update', usage: normalizedCompletionUsage });
|
|
889
961
|
this.#evaluateRunBudget(state, stream, queue);
|
|
890
|
-
stream.lastResponseId =
|
|
891
|
-
stream.rawResponses?.push(
|
|
962
|
+
stream.lastResponseId = finalCompletion.responseId;
|
|
963
|
+
stream.rawResponses?.push(finalCompletion);
|
|
892
964
|
// Some provider adapters report function calls only in the terminal
|
|
893
965
|
// completion rather than as separate stream events. Their reasoning may
|
|
894
966
|
// likewise be terminal-only, so associate it before replaying calls.
|
|
895
967
|
const toolCalls = [...streamedToolCalls];
|
|
896
968
|
if (!sawToolCall) {
|
|
897
|
-
for (const item of
|
|
969
|
+
for (const item of finalCompletion.output) {
|
|
898
970
|
if (item.type === 'reasoning')
|
|
899
971
|
pendingNativeReasoning = appendNativeReasoning(pendingNativeReasoning, item);
|
|
900
972
|
}
|
|
901
|
-
for (const item of
|
|
973
|
+
for (const item of finalCompletion.output) {
|
|
902
974
|
if (item.type !== 'tool_call')
|
|
903
975
|
continue;
|
|
904
976
|
pendingNativeReasoning = commitPendingNativeReasoning(state, stream, queue, pendingNativeReasoning);
|
|
@@ -916,7 +988,7 @@ export class ApplicationRunLoop {
|
|
|
916
988
|
// applies compaction's replacement rule; keeping the item here also
|
|
917
989
|
// makes it available to an in-flight tool continuation before that
|
|
918
990
|
// terminal history commit occurs.
|
|
919
|
-
for (const item of
|
|
991
|
+
for (const item of finalCompletion.output) {
|
|
920
992
|
if (item.type !== 'provider_opaque')
|
|
921
993
|
continue;
|
|
922
994
|
const historyItem = {
|
|
@@ -927,7 +999,7 @@ export class ApplicationRunLoop {
|
|
|
927
999
|
state.input.push(item);
|
|
928
1000
|
outputPush(stream, queue, { type: 'item', item });
|
|
929
1001
|
}
|
|
930
|
-
const assistantText =
|
|
1002
|
+
const assistantText = finalCompletion.output
|
|
931
1003
|
.filter((item) => item.type === 'message')
|
|
932
1004
|
.flatMap((item) => item.content)
|
|
933
1005
|
.map((part) => part.text)
|
|
@@ -1092,6 +1164,13 @@ export class ApplicationRunLoop {
|
|
|
1092
1164
|
maxParallelToolCalls,
|
|
1093
1165
|
dispatchOrder: group.map((entry) => entry.event.id),
|
|
1094
1166
|
});
|
|
1167
|
+
for (const entry of group) {
|
|
1168
|
+
outputPush(stream, queue, {
|
|
1169
|
+
type: 'tool_call_dispatched',
|
|
1170
|
+
callId: entry.event.id,
|
|
1171
|
+
toolName: entry.event.name,
|
|
1172
|
+
});
|
|
1173
|
+
}
|
|
1095
1174
|
if (group.length > 1) {
|
|
1096
1175
|
const results = await Promise.allSettled(group.map((entry) => this.#invokePlannedTool(entry, toolContext, state)));
|
|
1097
1176
|
const rejected = results.find((result) => result.status === 'rejected');
|
|
@@ -1211,6 +1290,9 @@ export class ApplicationRunLoop {
|
|
|
1211
1290
|
}
|
|
1212
1291
|
}
|
|
1213
1292
|
#emitRunBudgetEvent(state, event, message, stream, queue) {
|
|
1293
|
+
if (state.runBudgetEscalation === 'disabled') {
|
|
1294
|
+
return;
|
|
1295
|
+
}
|
|
1214
1296
|
if (event.type === 'budget_stage' && event.stage === 'critical' && state.wrapUpOnCriticalRunBudget) {
|
|
1215
1297
|
state.criticalWrapUpPending = true;
|
|
1216
1298
|
}
|