@qduc/term2 0.14.0 → 0.15.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/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +17 -7
- package/dist/agent.js.map +1 -1
- package/dist/app-helpers.d.ts +4 -0
- package/dist/app-helpers.d.ts.map +1 -1
- package/dist/app-helpers.js +6 -0
- package/dist/app-helpers.js.map +1 -1
- package/dist/app.d.ts +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +141 -13
- package/dist/app.js.map +1 -1
- package/dist/cli.js +112 -28
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-approve-command.js +3 -3
- package/dist/commands/auto-approve-command.js.map +1 -1
- package/dist/commands/guarded-settings-command.d.ts +3 -1
- package/dist/commands/guarded-settings-command.d.ts.map +1 -1
- package/dist/commands/guarded-settings-command.js +21 -5
- package/dist/commands/guarded-settings-command.js.map +1 -1
- package/dist/commands/mode-commands.d.ts +9 -2
- package/dist/commands/mode-commands.d.ts.map +1 -1
- package/dist/commands/mode-commands.js +12 -3
- package/dist/commands/mode-commands.js.map +1 -1
- package/dist/commands/usage-command.d.ts +10 -1
- package/dist/commands/usage-command.d.ts.map +1 -1
- package/dist/commands/usage-command.js +11 -1
- package/dist/commands/usage-command.js.map +1 -1
- package/dist/components/InputBox.js +14 -1
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/input/FirstRunSetupPrompt.js +1 -1
- package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
- package/dist/components/input/PendingQueueList.d.ts.map +1 -1
- package/dist/components/input/PendingQueueList.js +22 -5
- package/dist/components/input/PendingQueueList.js.map +1 -1
- package/dist/components/input/ProviderMenuSession.d.ts.map +1 -1
- package/dist/components/input/ProviderMenuSession.js +1 -0
- package/dist/components/input/ProviderMenuSession.js.map +1 -1
- package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
- package/dist/components/input/SettingsValueMenuSession.js +6 -0
- package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.d.ts +2 -0
- package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.js +156 -64
- package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.d.ts +10 -1
- package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.js +193 -59
- package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
- package/dist/components/layout/BottomArea.d.ts +11 -1
- package/dist/components/layout/BottomArea.d.ts.map +1 -1
- package/dist/components/layout/BottomArea.js +30 -13
- package/dist/components/layout/BottomArea.js.map +1 -1
- package/dist/components/layout/StatusBar.d.ts +5 -0
- package/dist/components/layout/StatusBar.d.ts.map +1 -1
- package/dist/components/layout/StatusBar.js +45 -3
- package/dist/components/layout/StatusBar.js.map +1 -1
- package/dist/components/layout/live-task-rows.d.ts +16 -0
- package/dist/components/layout/live-task-rows.d.ts.map +1 -0
- package/dist/components/layout/live-task-rows.js +28 -0
- package/dist/components/layout/live-task-rows.js.map +1 -0
- package/dist/components/layout/terminal-text-budget.d.ts +4 -0
- package/dist/components/layout/terminal-text-budget.d.ts.map +1 -0
- package/dist/components/layout/terminal-text-budget.js +18 -0
- package/dist/components/layout/terminal-text-budget.js.map +1 -0
- package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.js +18 -5
- package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
- package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ProviderSelectionMenu.js +27 -2
- package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.js +5 -0
- package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
- package/dist/components/message/CommandGroupSummary.d.ts +9 -0
- package/dist/components/message/CommandGroupSummary.d.ts.map +1 -0
- package/dist/components/message/CommandGroupSummary.js +31 -0
- package/dist/components/message/CommandGroupSummary.js.map +1 -0
- package/dist/components/message/CommandMessage.d.ts +8 -0
- package/dist/components/message/CommandMessage.d.ts.map +1 -1
- package/dist/components/message/CommandMessage.js +54 -25
- package/dist/components/message/CommandMessage.js.map +1 -1
- package/dist/components/message/MessageList.d.ts +6 -2
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +64 -10
- package/dist/components/message/MessageList.js.map +1 -1
- package/dist/components/message/SubagentActivityMessage.js +4 -2
- package/dist/components/message/SubagentActivityMessage.js.map +1 -1
- package/dist/components/message/command-grouping.d.ts +43 -0
- package/dist/components/message/command-grouping.d.ts.map +1 -0
- package/dist/components/message/command-grouping.js +142 -0
- package/dist/components/message/command-grouping.js.map +1 -0
- package/dist/components/message/command-message-helpers.d.ts +6 -5
- package/dist/components/message/command-message-helpers.d.ts.map +1 -1
- package/dist/components/message/command-message-helpers.js +36 -0
- package/dist/components/message/command-message-helpers.js.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts +1 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.js +136 -90
- package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
- package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts +11 -0
- package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts.map +1 -0
- package/dist/components/prompt/ModeSwitchConfirmationPrompt.js +50 -0
- package/dist/components/prompt/ModeSwitchConfirmationPrompt.js.map +1 -0
- package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
- package/dist/components/prompt/QueuePausedPrompt.js +14 -8
- package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
- package/dist/contracts/application-stream.d.ts +7 -0
- package/dist/contracts/application-stream.d.ts.map +1 -1
- package/dist/contracts/conversation.d.ts +24 -1
- package/dist/contracts/conversation.d.ts.map +1 -1
- package/dist/contracts/conversation.js +8 -0
- package/dist/contracts/conversation.js.map +1 -1
- package/dist/contracts/streamed-model-turn.d.ts +22 -1
- package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/session-runtime.d.ts +10 -0
- package/dist/core/session-runtime.d.ts.map +1 -0
- package/dist/core/session-runtime.js +9 -0
- package/dist/core/session-runtime.js.map +1 -0
- package/dist/gateway/assertion.d.ts +38 -0
- package/dist/gateway/assertion.d.ts.map +1 -0
- package/dist/gateway/assertion.js +146 -0
- package/dist/gateway/assertion.js.map +1 -0
- package/dist/gateway/contracts.d.ts +124 -0
- package/dist/gateway/contracts.d.ts.map +1 -0
- package/dist/gateway/contracts.js +13 -0
- package/dist/gateway/contracts.js.map +1 -0
- package/dist/gateway/gateway.d.ts +72 -0
- package/dist/gateway/gateway.d.ts.map +1 -0
- package/dist/gateway/gateway.js +1277 -0
- package/dist/gateway/gateway.js.map +1 -0
- package/dist/gateway/index.d.ts +22 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +22 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/interaction-protocol.d.ts +76 -0
- package/dist/gateway/interaction-protocol.d.ts.map +1 -0
- package/dist/gateway/interaction-protocol.js +548 -0
- package/dist/gateway/interaction-protocol.js.map +1 -0
- package/dist/gateway/launcher.d.ts +8 -0
- package/dist/gateway/launcher.d.ts.map +1 -0
- package/dist/gateway/launcher.js +20 -0
- package/dist/gateway/launcher.js.map +1 -0
- package/dist/gateway/lifecycle.d.ts +12 -0
- package/dist/gateway/lifecycle.d.ts.map +1 -0
- package/dist/gateway/lifecycle.js +38 -0
- package/dist/gateway/lifecycle.js.map +1 -0
- package/dist/gateway/persistence/admission-persistence.d.ts +82 -0
- package/dist/gateway/persistence/admission-persistence.d.ts.map +1 -0
- package/dist/gateway/persistence/admission-persistence.js +215 -0
- package/dist/gateway/persistence/admission-persistence.js.map +1 -0
- package/dist/gateway/persistence/contracts.d.ts +94 -0
- package/dist/gateway/persistence/contracts.d.ts.map +1 -0
- package/dist/gateway/persistence/contracts.js +32 -0
- package/dist/gateway/persistence/contracts.js.map +1 -0
- package/dist/gateway/persistence/coordinator.d.ts +25 -0
- package/dist/gateway/persistence/coordinator.d.ts.map +1 -0
- package/dist/gateway/persistence/coordinator.js +181 -0
- package/dist/gateway/persistence/coordinator.js.map +1 -0
- package/dist/gateway/persistence/event-journal.d.ts +31 -0
- package/dist/gateway/persistence/event-journal.d.ts.map +1 -0
- package/dist/gateway/persistence/event-journal.js +378 -0
- package/dist/gateway/persistence/event-journal.js.map +1 -0
- package/dist/gateway/persistence/interaction-checkpoint.d.ts +17 -0
- package/dist/gateway/persistence/interaction-checkpoint.d.ts.map +1 -0
- package/dist/gateway/persistence/interaction-checkpoint.js +75 -0
- package/dist/gateway/persistence/interaction-checkpoint.js.map +1 -0
- package/dist/gateway/persistence/projection.d.ts +53 -0
- package/dist/gateway/persistence/projection.d.ts.map +1 -0
- package/dist/gateway/persistence/projection.js +226 -0
- package/dist/gateway/persistence/projection.js.map +1 -0
- package/dist/gateway/persistence/retention.d.ts +16 -0
- package/dist/gateway/persistence/retention.d.ts.map +1 -0
- package/dist/gateway/persistence/retention.js +93 -0
- package/dist/gateway/persistence/retention.js.map +1 -0
- package/dist/gateway/persistence/session-index.d.ts +34 -0
- package/dist/gateway/persistence/session-index.d.ts.map +1 -0
- package/dist/gateway/persistence/session-index.js +348 -0
- package/dist/gateway/persistence/session-index.js.map +1 -0
- package/dist/gateway/persistence/session-persistence.d.ts +68 -0
- package/dist/gateway/persistence/session-persistence.d.ts.map +1 -0
- package/dist/gateway/persistence/session-persistence.js +165 -0
- package/dist/gateway/persistence/session-persistence.js.map +1 -0
- package/dist/gateway/persistence/storage.d.ts +13 -0
- package/dist/gateway/persistence/storage.d.ts.map +1 -0
- package/dist/gateway/persistence/storage.js +87 -0
- package/dist/gateway/persistence/storage.js.map +1 -0
- package/dist/gateway/replay-ledger.d.ts +30 -0
- package/dist/gateway/replay-ledger.d.ts.map +1 -0
- package/dist/gateway/replay-ledger.js +83 -0
- package/dist/gateway/replay-ledger.js.map +1 -0
- package/dist/gateway/runtime-factory.d.ts +84 -0
- package/dist/gateway/runtime-factory.d.ts.map +1 -0
- package/dist/gateway/runtime-factory.js +213 -0
- package/dist/gateway/runtime-factory.js.map +1 -0
- package/dist/gateway/safe-log.d.ts +15 -0
- package/dist/gateway/safe-log.d.ts.map +1 -0
- package/dist/gateway/safe-log.js +89 -0
- package/dist/gateway/safe-log.js.map +1 -0
- package/dist/gateway/server-session.d.ts +65 -0
- package/dist/gateway/server-session.d.ts.map +1 -0
- package/dist/gateway/server-session.js +252 -0
- package/dist/gateway/server-session.js.map +1 -0
- package/dist/gateway/server.d.ts +42 -0
- package/dist/gateway/server.d.ts.map +1 -0
- package/dist/gateway/server.js +126 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/worker-boundary.d.ts +40 -0
- package/dist/gateway/worker-boundary.d.ts.map +1 -0
- package/dist/gateway/worker-boundary.js +149 -0
- package/dist/gateway/worker-boundary.js.map +1 -0
- package/dist/gateway/workspace-admission.d.ts +37 -0
- package/dist/gateway/workspace-admission.d.ts.map +1 -0
- package/dist/gateway/workspace-admission.js +285 -0
- package/dist/gateway/workspace-admission.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 +3 -0
- 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 +30 -2
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/use-app-commands.d.ts +4 -1
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +14 -3
- package/dist/hooks/use-app-commands.js.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts +5 -0
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.js +11 -0
- package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +1 -0
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +14 -3
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-grok-credit-usage.d.ts +20 -0
- package/dist/hooks/use-grok-credit-usage.d.ts.map +1 -0
- package/dist/hooks/use-grok-credit-usage.js +48 -0
- package/dist/hooks/use-grok-credit-usage.js.map +1 -0
- package/dist/hooks/use-provider-selection.d.ts +10 -0
- package/dist/hooks/use-provider-selection.d.ts.map +1 -1
- package/dist/hooks/use-provider-selection.js +105 -6
- package/dist/hooks/use-provider-selection.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-value-completion.js +10 -2
- package/dist/hooks/use-settings-value-completion.js.map +1 -1
- package/dist/lib/agent-client.d.ts +10 -3
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +115 -23
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts +2 -0
- package/dist/lib/agent-configuration.d.ts.map +1 -1
- package/dist/lib/agent-configuration.js +6 -2
- package/dist/lib/agent-configuration.js.map +1 -1
- package/dist/lib/agent-factory.d.ts +2 -0
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +28 -10
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/editor-impl.d.ts.map +1 -1
- package/dist/lib/editor-impl.js +14 -17
- package/dist/lib/editor-impl.js.map +1 -1
- package/dist/lib/harness-input-idle.d.ts +16 -0
- package/dist/lib/harness-input-idle.d.ts.map +1 -0
- package/dist/lib/harness-input-idle.js +51 -0
- package/dist/lib/harness-input-idle.js.map +1 -0
- package/dist/lib/input-owner.d.ts +3 -0
- package/dist/lib/input-owner.d.ts.map +1 -1
- package/dist/lib/input-owner.js +2 -0
- package/dist/lib/input-owner.js.map +1 -1
- package/dist/lib/subagent-bridge.d.ts +3 -3
- package/dist/lib/subagent-bridge.d.ts.map +1 -1
- package/dist/lib/subagent-bridge.js +16 -9
- package/dist/lib/subagent-bridge.js.map +1 -1
- package/dist/lib/tool-invoke.d.ts +2 -0
- package/dist/lib/tool-invoke.d.ts.map +1 -1
- package/dist/lib/tool-invoke.js +3 -0
- package/dist/lib/tool-invoke.js.map +1 -1
- package/dist/non-interactive.d.ts.map +1 -1
- package/dist/non-interactive.js +5 -0
- package/dist/non-interactive.js.map +1 -1
- package/dist/prompts/explorer-delegation-contract.test.ts +22 -0
- package/dist/prompts/gpt-5.6.md +1 -1
- package/dist/prompts/kimi.md +1 -1
- package/dist/prompts/orchestrator.md +10 -1
- package/dist/prompts/plan-mode-info.md +3 -3
- package/dist/prompts/plan-mode-stub.md +7 -0
- package/dist/prompts/prefix-quality.test.ts +102 -0
- package/dist/prompts/prompt-constructor.d.ts.map +1 -1
- package/dist/prompts/prompt-constructor.js +4 -1
- package/dist/prompts/prompt-constructor.js.map +1 -1
- package/dist/prompts/prompt-constructor.test.ts +12 -4
- package/dist/prompts/prompt-constructor.ts +4 -1
- package/dist/prompts/subagents/explorer.md +7 -1
- package/dist/prompts/subagents/librarian.md +2 -0
- package/dist/prompts/subagents/mentor.md +2 -0
- package/dist/prompts/subagents/worker.md +2 -0
- package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
- package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
- package/dist/providers/ai-sdk-streamed-model.js +64 -1
- package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
- package/dist/providers/chained-wire-state.d.ts +6 -0
- package/dist/providers/chained-wire-state.d.ts.map +1 -1
- package/dist/providers/chained-wire-state.js +1 -3
- package/dist/providers/chained-wire-state.js.map +1 -1
- package/dist/providers/codex-auth.d.ts +73 -2
- package/dist/providers/codex-auth.d.ts.map +1 -1
- package/dist/providers/codex-auth.js +166 -2
- package/dist/providers/codex-auth.js.map +1 -1
- package/dist/providers/codex-responses-model.d.ts +3 -0
- package/dist/providers/codex-responses-model.d.ts.map +1 -1
- package/dist/providers/codex-responses-model.js +295 -162
- 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 +7 -1
- package/dist/providers/codex-turn-converter.js.map +1 -1
- package/dist/providers/codex.provider.d.ts +25 -2
- package/dist/providers/codex.provider.d.ts.map +1 -1
- package/dist/providers/codex.provider.js +83 -71
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/providers/common/provider-errors.d.ts +20 -0
- package/dist/providers/common/provider-errors.d.ts.map +1 -1
- package/dist/providers/common/provider-errors.js +35 -0
- package/dist/providers/common/provider-errors.js.map +1 -1
- package/dist/providers/grok-auth.d.ts +105 -0
- package/dist/providers/grok-auth.d.ts.map +1 -0
- package/dist/providers/grok-auth.js +316 -0
- package/dist/providers/grok-auth.js.map +1 -0
- package/dist/providers/grok-credit-usage.d.ts +53 -0
- package/dist/providers/grok-credit-usage.d.ts.map +1 -0
- package/dist/providers/grok-credit-usage.js +108 -0
- package/dist/providers/grok-credit-usage.js.map +1 -0
- package/dist/providers/grok.provider.d.ts +24 -0
- package/dist/providers/grok.provider.d.ts.map +1 -0
- package/dist/providers/grok.provider.js +153 -0
- package/dist/providers/grok.provider.js.map +1 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jwt-claims.d.ts +12 -0
- package/dist/providers/jwt-claims.d.ts.map +1 -0
- package/dist/providers/jwt-claims.js +25 -0
- package/dist/providers/jwt-claims.js.map +1 -0
- package/dist/providers/luna-responses-lite-wire-protocol.d.ts +1 -0
- package/dist/providers/luna-responses-lite-wire-protocol.d.ts.map +1 -1
- package/dist/providers/luna-responses-lite-wire-protocol.js +19 -0
- package/dist/providers/luna-responses-lite-wire-protocol.js.map +1 -1
- package/dist/providers/model-catalog/catalog.generated.d.ts +360 -232
- package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
- package/dist/providers/model-catalog/catalog.generated.js +360 -232
- package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
- package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -1
- package/dist/providers/model-catalog/generate-catalog.js +21 -1
- package/dist/providers/model-catalog/generate-catalog.js.map +1 -1
- package/dist/providers/oauth-account-store.d.ts +84 -0
- package/dist/providers/oauth-account-store.d.ts.map +1 -0
- package/dist/providers/oauth-account-store.js +142 -0
- package/dist/providers/oauth-account-store.js.map +1 -0
- package/dist/providers/oauth-accounts.d.ts +24 -0
- package/dist/providers/oauth-accounts.d.ts.map +1 -0
- package/dist/providers/oauth-accounts.js +37 -0
- package/dist/providers/oauth-accounts.js.map +1 -0
- package/dist/providers/oauth-pkce.d.ts +53 -0
- package/dist/providers/oauth-pkce.d.ts.map +1 -0
- package/dist/providers/oauth-pkce.js +200 -0
- package/dist/providers/oauth-pkce.js.map +1 -0
- package/dist/providers/oauth-session-account.d.ts +5 -0
- package/dist/providers/oauth-session-account.d.ts.map +1 -0
- package/dist/providers/oauth-session-account.js +24 -0
- package/dist/providers/oauth-session-account.js.map +1 -0
- package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
- package/dist/providers/openai-chat-completions-model.js +37 -16
- package/dist/providers/openai-chat-completions-model.js.map +1 -1
- package/dist/providers/openai-compatible-lazy.js.map +1 -1
- package/dist/providers/openai-compatible.provider.d.ts +5 -0
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +32 -2
- package/dist/providers/openai-compatible.provider.js.map +1 -1
- package/dist/providers/openai-responses-model.d.ts +13 -3
- package/dist/providers/openai-responses-model.d.ts.map +1 -1
- package/dist/providers/openai-responses-model.js +92 -39
- package/dist/providers/openai-responses-model.js.map +1 -1
- package/dist/providers/openai.provider.d.ts.map +1 -1
- package/dist/providers/openai.provider.js +23 -2
- package/dist/providers/openai.provider.js.map +1 -1
- package/dist/providers/opencode-routing.d.ts +2 -0
- package/dist/providers/opencode-routing.d.ts.map +1 -1
- package/dist/providers/opencode-routing.js +12 -6
- package/dist/providers/opencode-routing.js.map +1 -1
- package/dist/providers/opencode-transport-discovery.d.ts +18 -0
- package/dist/providers/opencode-transport-discovery.d.ts.map +1 -0
- package/dist/providers/opencode-transport-discovery.js +115 -0
- package/dist/providers/opencode-transport-discovery.js.map +1 -0
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/provider-opaque-compatibility.d.ts +58 -0
- package/dist/providers/provider-opaque-compatibility.d.ts.map +1 -0
- package/dist/providers/provider-opaque-compatibility.js +80 -0
- package/dist/providers/provider-opaque-compatibility.js.map +1 -0
- package/dist/providers/provider-service.d.ts +1 -1
- package/dist/providers/provider-service.d.ts.map +1 -1
- package/dist/providers/provider-service.js.map +1 -1
- package/dist/providers/registry.d.ts +10 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/responses-websocket-sessions.d.ts +25 -0
- package/dist/providers/responses-websocket-sessions.d.ts.map +1 -0
- package/dist/providers/responses-websocket-sessions.js +102 -0
- package/dist/providers/responses-websocket-sessions.js.map +1 -0
- package/dist/providers/websocket-close-evidence.d.ts +45 -0
- package/dist/providers/websocket-close-evidence.d.ts.map +1 -0
- package/dist/providers/websocket-close-evidence.js +78 -0
- package/dist/providers/websocket-close-evidence.js.map +1 -0
- package/dist/providers/websocket-receive-watchdog.d.ts +9 -1
- package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
- package/dist/providers/websocket-receive-watchdog.js +27 -1
- package/dist/providers/websocket-receive-watchdog.js.map +1 -1
- package/dist/providers/websocket-request-dispatch.d.ts +35 -0
- package/dist/providers/websocket-request-dispatch.d.ts.map +1 -0
- package/dist/providers/websocket-request-dispatch.js +23 -0
- package/dist/providers/websocket-request-dispatch.js.map +1 -0
- package/dist/scripts/eval-context-compaction/runner.js +1 -1
- package/dist/scripts/eval-context-compaction/runner.js.map +1 -1
- package/dist/services/agent-runtime/agent-handle.d.ts.map +1 -1
- package/dist/services/agent-runtime/agent-handle.js +8 -5
- package/dist/services/agent-runtime/agent-handle.js.map +1 -1
- package/dist/services/agent-runtime/agent-runtime.d.ts +1 -1
- package/dist/services/agent-runtime/agent-runtime.js +1 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts +33 -9
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.js +300 -87
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +6 -1
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -1
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +72 -4
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -1
- package/dist/services/agent-runtime/executor.d.ts +1 -1
- package/dist/services/agent-runtime/executor.d.ts.map +1 -1
- package/dist/services/agent-runtime/executor.js +5 -5
- package/dist/services/agent-runtime/executor.js.map +1 -1
- package/dist/services/agent-runtime/generation-guard.d.ts +2 -1
- package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
- package/dist/services/agent-runtime/generation-guard.js +7 -2
- package/dist/services/agent-runtime/generation-guard.js.map +1 -1
- package/dist/services/agent-runtime/run-budget.d.ts +131 -0
- package/dist/services/agent-runtime/run-budget.d.ts.map +1 -0
- package/dist/services/agent-runtime/run-budget.js +268 -0
- package/dist/services/agent-runtime/run-budget.js.map +1 -0
- package/dist/services/agent-runtime/tool-invocation-context.d.ts +12 -0
- package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -1
- package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -1
- package/dist/services/agent-runtime/types.d.ts +5 -4
- package/dist/services/agent-runtime/types.d.ts.map +1 -1
- package/dist/services/agent-stream.d.ts.map +1 -1
- package/dist/services/agent-stream.js +2 -1
- package/dist/services/agent-stream.js.map +1 -1
- package/dist/services/approval/approval-decision-executor.d.ts +6 -1
- package/dist/services/approval/approval-decision-executor.d.ts.map +1 -1
- package/dist/services/approval/approval-decision-executor.js +15 -3
- package/dist/services/approval/approval-decision-executor.js.map +1 -1
- package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
- package/dist/services/approval/approval-decision-policy.js +3 -0
- package/dist/services/approval/approval-decision-policy.js.map +1 -1
- package/dist/services/approval/approval-flow-coordinator.d.ts +2 -0
- package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
- package/dist/services/approval/approval-flow-coordinator.js +14 -2
- package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.d.ts +3 -1
- package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.js +7 -4
- package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts +5 -0
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +8 -0
- package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.js +20 -11
- package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
- package/dist/services/approval/tool-ownership-registry.d.ts +5 -1
- package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -1
- package/dist/services/approval/tool-ownership-registry.js +5 -22
- package/dist/services/approval/tool-ownership-registry.js.map +1 -1
- package/dist/services/background-task-activity.d.ts +79 -0
- package/dist/services/background-task-activity.d.ts.map +1 -0
- package/dist/services/background-task-activity.js +34 -0
- package/dist/services/background-task-activity.js.map +1 -0
- package/dist/services/command-message-streaming.d.ts +4 -2
- package/dist/services/command-message-streaming.d.ts.map +1 -1
- package/dist/services/command-message-streaming.js +2 -2
- package/dist/services/command-message-streaming.js.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.d.ts +6 -2
- package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.js +5 -1
- package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts +41 -9
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +218 -37
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-decoder.d.ts.map +1 -1
- package/dist/services/conversation/conversation-decoder.js +4 -0
- package/dist/services/conversation/conversation-decoder.js.map +1 -1
- package/dist/services/conversation/conversation-events.d.ts +55 -2
- package/dist/services/conversation/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +103 -11
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.types.d.ts +3 -0
- package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.d.ts +38 -2
- package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.js +160 -16
- package/dist/services/conversation/conversation-persistence.js.map +1 -1
- package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
- package/dist/services/conversation/conversation-replay.js +27 -0
- package/dist/services/conversation/conversation-replay.js.map +1 -1
- package/dist/services/conversation/conversation-result-builder.d.ts +6 -2
- package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
- package/dist/services/conversation/conversation-result-builder.js +60 -1
- package/dist/services/conversation/conversation-result-builder.js.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.d.ts +9 -1
- package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.js +5 -1
- package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts +32 -3
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +82 -8
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/conversation-state-projector.d.ts +2 -1
- package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
- package/dist/services/conversation/conversation-state-projector.js +31 -3
- package/dist/services/conversation/conversation-state-projector.js.map +1 -1
- package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -1
- package/dist/services/conversation/run-item-normalizer.js +24 -1
- package/dist/services/conversation/run-item-normalizer.js.map +1 -1
- package/dist/services/conversation-agent-client.d.ts +21 -2
- package/dist/services/conversation-agent-client.d.ts.map +1 -1
- package/dist/services/cost/model-cost.d.ts +13 -1
- package/dist/services/cost/model-cost.d.ts.map +1 -1
- package/dist/services/cost/model-cost.js +59 -0
- package/dist/services/cost/model-cost.js.map +1 -1
- package/dist/services/cost/subscription-providers.d.ts +2 -0
- package/dist/services/cost/subscription-providers.d.ts.map +1 -0
- package/dist/services/cost/subscription-providers.js +14 -0
- package/dist/services/cost/subscription-providers.js.map +1 -0
- package/dist/services/grok/grok-credit-usage-service.d.ts +62 -0
- package/dist/services/grok/grok-credit-usage-service.d.ts.map +1 -0
- package/dist/services/grok/grok-credit-usage-service.js +137 -0
- package/dist/services/grok/grok-credit-usage-service.js.map +1 -0
- package/dist/services/history-service.d.ts +9 -0
- package/dist/services/history-service.d.ts.map +1 -1
- package/dist/services/history-service.js +49 -2
- package/dist/services/history-service.js.map +1 -1
- package/dist/services/hooks/hook-composition.d.ts +17 -0
- package/dist/services/hooks/hook-composition.d.ts.map +1 -0
- package/dist/services/hooks/hook-composition.js +19 -0
- package/dist/services/hooks/hook-composition.js.map +1 -0
- package/dist/services/logging/conversation-log-events.d.ts +35 -1
- package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-events.js +17 -0
- package/dist/services/logging/conversation-log-events.js.map +1 -1
- package/dist/services/logging/conversation-log-writer.d.ts +8 -1
- package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-writer.js +145 -10
- 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 +18 -0
- package/dist/services/logging/conversation-logger.js.map +1 -1
- package/dist/services/logging/logging-service.d.ts +6 -6
- package/dist/services/logging/logging-service.d.ts.map +1 -1
- package/dist/services/logging/logging-service.js.map +1 -1
- package/dist/services/logging/provider-traffic.d.ts +17 -1
- package/dist/services/logging/provider-traffic.d.ts.map +1 -1
- package/dist/services/logging/provider-traffic.js +283 -139
- 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 +20 -1
- package/dist/services/memory/memory-capabilities.js.map +1 -1
- package/dist/services/mode-notices.d.ts +1 -6
- package/dist/services/mode-notices.d.ts.map +1 -1
- package/dist/services/mode-notices.js +16 -3
- package/dist/services/mode-notices.js.map +1 -1
- package/dist/services/model-service.d.ts +2 -2
- package/dist/services/model-service.d.ts.map +1 -1
- package/dist/services/model-service.js.map +1 -1
- package/dist/services/queue/queue-controller.d.ts +1 -1
- package/dist/services/queue/queue-controller.d.ts.map +1 -1
- package/dist/services/queue/queue-controller.js +19 -5
- package/dist/services/queue/queue-controller.js.map +1 -1
- package/dist/services/retry/chain-recovery-fingerprint.d.ts +10 -0
- package/dist/services/retry/chain-recovery-fingerprint.d.ts.map +1 -0
- package/dist/services/retry/chain-recovery-fingerprint.js +23 -0
- package/dist/services/retry/chain-recovery-fingerprint.js.map +1 -0
- package/dist/services/retry/recovery-executor.d.ts.map +1 -1
- package/dist/services/retry/recovery-executor.js +2 -0
- 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 -0
- 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 +34 -2
- package/dist/services/retry/retry-classifier.js.map +1 -1
- package/dist/services/retry/retry-contracts.d.ts +14 -0
- package/dist/services/retry/retry-contracts.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.d.ts +17 -3
- package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.js +48 -7
- package/dist/services/retry/retry-error-classification.js.map +1 -1
- package/dist/services/retry/retry-errors.d.ts +4 -0
- package/dist/services/retry/retry-errors.d.ts.map +1 -1
- package/dist/services/retry/retry-errors.js +7 -0
- package/dist/services/retry/retry-errors.js.map +1 -1
- package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
- package/dist/services/retry/retry-event-presenter.js +20 -0
- package/dist/services/retry/retry-event-presenter.js.map +1 -1
- package/dist/services/runtime-setting-router.d.ts.map +1 -1
- package/dist/services/runtime-setting-router.js +6 -0
- package/dist/services/runtime-setting-router.js.map +1 -1
- package/dist/services/service-interfaces.d.ts +96 -13
- package/dist/services/service-interfaces.d.ts.map +1 -1
- package/dist/services/session/background-task-control.d.ts +6 -0
- package/dist/services/session/background-task-control.d.ts.map +1 -1
- package/dist/services/session/background-task-control.js +31 -6
- package/dist/services/session/background-task-control.js.map +1 -1
- package/dist/services/session/background-task-liveness.d.ts +2 -18
- package/dist/services/session/background-task-liveness.d.ts.map +1 -1
- package/dist/services/session/background-task-liveness.js +7 -22
- package/dist/services/session/background-task-liveness.js.map +1 -1
- package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
- package/dist/services/session/continuation-plan-applier.js +23 -0
- package/dist/services/session/continuation-plan-applier.js.map +1 -1
- package/dist/services/session/continuation-recovery-handler.d.ts +2 -0
- package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/continuation-recovery-handler.js +7 -1
- package/dist/services/session/continuation-recovery-handler.js.map +1 -1
- package/dist/services/session/initial-turn-recovery-handler.d.ts +1 -0
- package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/initial-turn-recovery-handler.js +12 -2
- package/dist/services/session/initial-turn-recovery-handler.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 -2
- package/dist/services/session/session-client-factory.js.map +1 -1
- package/dist/services/session/session-composition.d.ts +3 -0
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +52 -8
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-stream-processor.d.ts +2 -0
- package/dist/services/session/session-stream-processor.d.ts.map +1 -1
- package/dist/services/session/session-stream-processor.js +4 -0
- package/dist/services/session/session-stream-processor.js.map +1 -1
- package/dist/services/session/terminal-result-collector.d.ts +2 -2
- package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
- package/dist/services/session/terminal-result-collector.js +2 -1
- package/dist/services/session/terminal-result-collector.js.map +1 -1
- package/dist/services/session/turn-attempt-factory.d.ts +1 -0
- package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
- package/dist/services/session/turn-attempt-factory.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-coordinator.js +31 -6
- package/dist/services/session/turn-coordinator.js.map +1 -1
- package/dist/services/session/turn-workflow.d.ts +4 -1
- package/dist/services/session/turn-workflow.d.ts.map +1 -1
- package/dist/services/session/turn-workflow.js +48 -7
- package/dist/services/session/turn-workflow.js.map +1 -1
- package/dist/services/settings/settings-persistence.d.ts +33 -0
- package/dist/services/settings/settings-persistence.d.ts.map +1 -1
- package/dist/services/settings/settings-persistence.js +102 -4
- package/dist/services/settings/settings-persistence.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +70 -2
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +92 -6
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-service.d.ts +57 -3
- package/dist/services/settings/settings-service.d.ts.map +1 -1
- package/dist/services/settings/settings-service.js +171 -28
- package/dist/services/settings/settings-service.js.map +1 -1
- package/dist/services/settings/settings-service.mock.d.ts +1 -1
- package/dist/services/settings/settings-service.mock.d.ts.map +1 -1
- package/dist/services/settings/settings-service.mock.js +3 -6
- package/dist/services/settings/settings-service.mock.js.map +1 -1
- package/dist/services/settings/settings-sources.d.ts.map +1 -1
- package/dist/services/settings/settings-sources.js +16 -0
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +27 -0
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -0
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js +165 -0
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -0
- package/dist/services/shell/background-shell-registry.d.ts +10 -0
- package/dist/services/shell/background-shell-registry.d.ts.map +1 -1
- package/dist/services/shell/background-shell-registry.js +9 -1
- package/dist/services/shell/background-shell-registry.js.map +1 -1
- package/dist/services/shell/background-shell-watches.d.ts +28 -3
- package/dist/services/shell/background-shell-watches.d.ts.map +1 -1
- package/dist/services/shell/background-shell-watches.js +41 -9
- package/dist/services/shell/background-shell-watches.js.map +1 -1
- package/dist/services/ssh-service.d.ts +81 -9
- package/dist/services/ssh-service.d.ts.map +1 -1
- package/dist/services/ssh-service.js +211 -37
- package/dist/services/ssh-service.js.map +1 -1
- package/dist/services/stream-event-processor.d.ts +2 -0
- package/dist/services/stream-event-processor.d.ts.map +1 -1
- package/dist/services/stream-event-processor.js +17 -7
- package/dist/services/stream-event-processor.js.map +1 -1
- package/dist/services/subagents/execution-runner.d.ts +1 -1
- package/dist/services/subagents/execution-runner.d.ts.map +1 -1
- package/dist/services/subagents/execution-runner.js +34 -22
- package/dist/services/subagents/execution-runner.js.map +1 -1
- package/dist/services/subagents/foreground-subagent-lease.d.ts +11 -1
- package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -1
- package/dist/services/subagents/foreground-subagent-lease.js +10 -1
- package/dist/services/subagents/foreground-subagent-lease.js.map +1 -1
- package/dist/services/subagents/mentor-runner.d.ts +1 -1
- package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
- package/dist/services/subagents/mentor-runner.js +10 -3
- package/dist/services/subagents/mentor-runner.js.map +1 -1
- package/dist/services/subagents/nested-runner.d.ts +11 -1
- package/dist/services/subagents/nested-runner.d.ts.map +1 -1
- package/dist/services/subagents/nested-runner.js +45 -10
- package/dist/services/subagents/nested-runner.js.map +1 -1
- package/dist/services/subagents/runtime.d.ts.map +1 -1
- package/dist/services/subagents/runtime.js +7 -0
- package/dist/services/subagents/runtime.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.d.ts +4 -0
- package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
- package/dist/services/subagents/subagent-async-registry.js +80 -16
- package/dist/services/subagents/subagent-async-registry.js.map +1 -1
- package/dist/services/subagents/subagent-manager.d.ts +1 -1
- package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.js +4 -4
- package/dist/services/subagents/subagent-manager.js.map +1 -1
- package/dist/services/subagents/subagent-notification-store.d.ts +19 -1
- package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
- package/dist/services/subagents/subagent-notification-store.js +22 -0
- package/dist/services/subagents/subagent-notification-store.js.map +1 -1
- package/dist/services/subagents/subagent-run-control.d.ts +9 -1
- package/dist/services/subagents/subagent-run-control.d.ts.map +1 -1
- package/dist/services/subagents/subagent-run-control.js +12 -13
- package/dist/services/subagents/subagent-run-control.js.map +1 -1
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +11 -3
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/types.d.ts +25 -2
- package/dist/services/subagents/types.d.ts.map +1 -1
- package/dist/services/subagents/types.js.map +1 -1
- package/dist/services/subagents/utils.d.ts +3 -1
- package/dist/services/subagents/utils.d.ts.map +1 -1
- package/dist/services/subagents/utils.js +4 -2
- package/dist/services/subagents/utils.js.map +1 -1
- package/dist/services/workspace/active-workspace-root.d.ts +6 -0
- package/dist/services/workspace/active-workspace-root.d.ts.map +1 -1
- package/dist/services/workspace/active-workspace-root.js +22 -0
- package/dist/services/workspace/active-workspace-root.js.map +1 -1
- package/dist/test-helpers/ink-testing.d.ts.map +1 -1
- package/dist/test-helpers/ink-testing.js +4 -1
- package/dist/test-helpers/ink-testing.js.map +1 -1
- package/dist/test-helpers/terminal-e2e.d.ts.map +1 -1
- package/dist/test-helpers/terminal-e2e.js +12 -2
- package/dist/test-helpers/terminal-e2e.js.map +1 -1
- package/dist/tools/agent/activate-skill.d.ts.map +1 -1
- package/dist/tools/agent/activate-skill.js +2 -2
- package/dist/tools/agent/activate-skill.js.map +1 -1
- package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
- package/dist/tools/agent/ask-mentor.js +2 -2
- package/dist/tools/agent/ask-mentor.js.map +1 -1
- package/dist/tools/agent/ask-user-constants.d.ts +2 -2
- package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
- package/dist/tools/agent/ask-user-constants.js +1 -1
- package/dist/tools/agent/ask-user-constants.js.map +1 -1
- package/dist/tools/agent/run-subagent-async.d.ts +2 -11
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent-async.js +8 -2
- package/dist/tools/agent/run-subagent-async.js.map +1 -1
- package/dist/tools/agent/run-subagent.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent.js +8 -9
- package/dist/tools/agent/run-subagent.js.map +1 -1
- package/dist/tools/file/apply-patch.d.ts +2 -0
- package/dist/tools/file/apply-patch.d.ts.map +1 -1
- package/dist/tools/file/apply-patch.js +58 -14
- package/dist/tools/file/apply-patch.js.map +1 -1
- package/dist/tools/file/code-context.d.ts +5 -0
- package/dist/tools/file/code-context.d.ts.map +1 -1
- package/dist/tools/file/code-context.js +18 -6
- package/dist/tools/file/code-context.js.map +1 -1
- package/dist/tools/file/create-file.d.ts.map +1 -1
- package/dist/tools/file/create-file.js +11 -5
- package/dist/tools/file/create-file.js.map +1 -1
- package/dist/tools/file/edit-healing.d.ts +7 -0
- package/dist/tools/file/edit-healing.d.ts.map +1 -1
- package/dist/tools/file/edit-healing.js +7 -7
- package/dist/tools/file/edit-healing.js.map +1 -1
- package/dist/tools/file/glob.d.ts +3 -0
- package/dist/tools/file/glob.d.ts.map +1 -1
- package/dist/tools/file/glob.js +9 -3
- package/dist/tools/file/glob.js.map +1 -1
- package/dist/tools/file/grep.d.ts +5 -0
- package/dist/tools/file/grep.d.ts.map +1 -1
- package/dist/tools/file/grep.js +10 -6
- package/dist/tools/file/grep.js.map +1 -1
- package/dist/tools/file/patch-healing.d.ts +31 -0
- package/dist/tools/file/patch-healing.d.ts.map +1 -0
- package/dist/tools/file/patch-healing.js +231 -0
- package/dist/tools/file/patch-healing.js.map +1 -0
- package/dist/tools/file/read-file.d.ts +3 -0
- package/dist/tools/file/read-file.d.ts.map +1 -1
- package/dist/tools/file/read-file.js +9 -3
- package/dist/tools/file/read-file.js.map +1 -1
- package/dist/tools/file/search-replace.d.ts.map +1 -1
- package/dist/tools/file/search-replace.js +24 -6
- package/dist/tools/file/search-replace.js.map +1 -1
- package/dist/tools/format-helpers.d.ts +6 -0
- package/dist/tools/format-helpers.d.ts.map +1 -1
- package/dist/tools/format-helpers.js +23 -0
- 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 +2 -2
- package/dist/tools/memory/memory-tools.js.map +1 -1
- package/dist/tools/system/shell.d.ts +16 -1
- package/dist/tools/system/shell.d.ts.map +1 -1
- package/dist/tools/system/shell.js +90 -25
- 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/tools/web/web-fetch.d.ts.map +1 -1
- package/dist/tools/web/web-fetch.js +2 -2
- package/dist/tools/web/web-fetch.js.map +1 -1
- package/dist/tools/web/web-search.d.ts.map +1 -1
- package/dist/tools/web/web-search.js +2 -2
- package/dist/tools/web/web-search.js.map +1 -1
- package/dist/types/message.d.ts +1 -1
- package/dist/types/message.d.ts.map +1 -1
- package/dist/utils/ai/provider-credentials.d.ts +1 -1
- package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
- package/dist/utils/ai/provider-credentials.js +18 -2
- package/dist/utils/ai/provider-credentials.js.map +1 -1
- package/dist/utils/ai/token-usage.d.ts +3 -1
- package/dist/utils/ai/token-usage.d.ts.map +1 -1
- package/dist/utils/ai/token-usage.js +7 -2
- package/dist/utils/ai/token-usage.js.map +1 -1
- package/dist/utils/apply-diff.d.ts.map +1 -1
- package/dist/utils/apply-diff.js +8 -0
- package/dist/utils/apply-diff.js.map +1 -1
- package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-event-handler.js +60 -2
- package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
- package/dist/utils/error-helpers.d.ts.map +1 -1
- package/dist/utils/error-helpers.js +8 -0
- package/dist/utils/error-helpers.js.map +1 -1
- package/dist/utils/inject-warning-into-tool-output.d.ts +30 -0
- package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
- package/dist/utils/inject-warning-into-tool-output.js +39 -0
- package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
- package/dist/utils/output/tty-osc.d.ts +1 -1
- package/dist/utils/output/tty-osc.js +1 -1
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +105 -6
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/shell/execute-shell.d.ts +8 -0
- package/dist/utils/shell/execute-shell.d.ts.map +1 -1
- package/dist/utils/shell/execute-shell.js +36 -30
- package/dist/utils/shell/execute-shell.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-env.d.ts +1 -0
- package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-env.js +2 -0
- package/dist/utils/shell/sandbox/sandbox-env.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 +1 -1
- package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
- package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/shell-sandbox-runner.js +1 -2
- package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -1
- package/dist/utils/shell/shell-child-registry.d.ts +11 -0
- package/dist/utils/shell/shell-child-registry.d.ts.map +1 -0
- package/dist/utils/shell/shell-child-registry.js +40 -0
- package/dist/utils/shell/shell-child-registry.js.map +1 -0
- package/dist/utils/shell/shell-output.d.ts.map +1 -1
- package/dist/utils/shell/shell-output.js +10 -6
- package/dist/utils/shell/shell-output.js.map +1 -1
- package/dist/utils/shell/temp-sweep.d.ts +28 -0
- package/dist/utils/shell/temp-sweep.d.ts.map +1 -0
- package/dist/utils/shell/temp-sweep.js +140 -0
- package/dist/utils/shell/temp-sweep.js.map +1 -0
- package/dist/utils/streaming/extract-command-messages.d.ts +12 -5
- package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
- package/dist/utils/streaming/extract-command-messages.js +29 -33
- package/dist/utils/streaming/extract-command-messages.js.map +1 -1
- package/dist/utils/streaming/streaming-session-factory.d.ts +8 -0
- package/dist/utils/streaming/streaming-session-factory.d.ts.map +1 -1
- package/dist/utils/streaming/streaming-session-factory.js +3 -0
- package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
- package/dist/utils/value-suggestions.d.ts +8 -0
- package/dist/utils/value-suggestions.d.ts.map +1 -1
- package/dist/utils/value-suggestions.js +71 -0
- package/dist/utils/value-suggestions.js.map +1 -1
- package/package.json +14 -10
- package/dist/utils/output/synchronized-output.d.ts +0 -35
- package/dist/utils/output/synchronized-output.d.ts.map +0 -1
- package/dist/utils/output/synchronized-output.js +0 -66
- package/dist/utils/output/synchronized-output.js.map +0 -1
|
@@ -5,13 +5,15 @@ import { isZodToolParameterSchema } from '../../tools/types.js';
|
|
|
5
5
|
import { normalizeToolParameters } from '../../lib/tool-invoke.js';
|
|
6
6
|
import { isCancellationError, isHarnessInvariantError } from '../../lib/harness-invariant-error.js';
|
|
7
7
|
import { ApprovalLedger } from './tool-invocation-context.js';
|
|
8
|
+
import { RunBudget, isRunBudgetInteraction, } from './run-budget.js';
|
|
8
9
|
import { addTokenUsage, normalizeUsage } from '../../utils/ai/token-usage.js';
|
|
9
10
|
import { computeModelCost } from '../../services/cost/model-cost.js';
|
|
10
11
|
import { getCatalogPricingVersion, getModelPricing } from '../../services/cost/pricing.js';
|
|
11
12
|
import { GenerationDeadline, GenerationGuard, GenerationGuardError, } from './generation-guard.js';
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
* — the SDK-era `callModelInputFilter` hook is deliberately
|
|
14
|
+
* Compatibility error for legacy callers without a staged run budget. The loop
|
|
15
|
+
* owns turn counting — the SDK-era `callModelInputFilter` hook is deliberately
|
|
16
|
+
* not reintroduced.
|
|
15
17
|
*/
|
|
16
18
|
export class MaxTurnsExceededError extends Error {
|
|
17
19
|
maxTurns;
|
|
@@ -66,7 +68,7 @@ class EventQueue {
|
|
|
66
68
|
*/
|
|
67
69
|
let nextCostRequestSeq = 0;
|
|
68
70
|
let nextToolBatchSeq = 0;
|
|
69
|
-
const DEFAULT_MAX_PARALLEL_TOOL_CALLS =
|
|
71
|
+
const DEFAULT_MAX_PARALLEL_TOOL_CALLS = 3;
|
|
70
72
|
/**
|
|
71
73
|
* Small provider-neutral agent loop. It owns model-turn sequencing and tool
|
|
72
74
|
* execution; providers only implement `StreamedModelTurn`.
|
|
@@ -74,7 +76,6 @@ const DEFAULT_MAX_PARALLEL_TOOL_CALLS = 4;
|
|
|
74
76
|
export class ApplicationRunLoop {
|
|
75
77
|
#deps;
|
|
76
78
|
#contextCompactionSessionState;
|
|
77
|
-
#maxParallelToolCalls;
|
|
78
79
|
#activeAbortController = null;
|
|
79
80
|
#runInFlight = false;
|
|
80
81
|
#segmentGeneration = 0;
|
|
@@ -97,10 +98,11 @@ export class ApplicationRunLoop {
|
|
|
97
98
|
*/
|
|
98
99
|
#turnOpen = false;
|
|
99
100
|
#pendingSteers = [];
|
|
101
|
+
/** The run whose budget an out-of-band grant applies to, held across a pause. */
|
|
102
|
+
#activeRunBudgetState;
|
|
100
103
|
constructor(deps) {
|
|
101
104
|
this.#deps = deps;
|
|
102
105
|
this.#contextCompactionSessionState = deps.contextCompactionSessionState ?? { disabled: false };
|
|
103
|
-
this.#maxParallelToolCalls = Math.max(1, Math.floor(deps.maxParallelToolCalls ?? DEFAULT_MAX_PARALLEL_TOOL_CALLS));
|
|
104
106
|
}
|
|
105
107
|
/**
|
|
106
108
|
* Declare a turn open, making it steerable before its first run exists.
|
|
@@ -139,6 +141,38 @@ export class ApplicationRunLoop {
|
|
|
139
141
|
this.#activeAbortController?.abort();
|
|
140
142
|
this.#activeAbortController = null;
|
|
141
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Grant one finite continuation extension to the current logical run.
|
|
146
|
+
*
|
|
147
|
+
* The interactive prompt calls this before resuming because it has to show
|
|
148
|
+
* the human a refusal rather than a silent stop. The grant is recorded so the
|
|
149
|
+
* matching `approve` does not charge a second one.
|
|
150
|
+
*/
|
|
151
|
+
grantRunBudgetExtension(grantedBy = 'human') {
|
|
152
|
+
const state = this.#activeRunBudgetState;
|
|
153
|
+
if (!state?.runBudget)
|
|
154
|
+
return { granted: false, extensionsGranted: 0 };
|
|
155
|
+
const grant = state.runBudget.grantExtension(grantedBy);
|
|
156
|
+
if (grant.granted)
|
|
157
|
+
state.runBudgetGrantConsumed = true;
|
|
158
|
+
return grant;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Charge this interaction's extension unless a caller already took it.
|
|
162
|
+
*
|
|
163
|
+
* An ungranted arrival here means nobody was prompted — the continuation
|
|
164
|
+
* applier, non-interactive mode, `--auto-approve`. That is a parent-class
|
|
165
|
+
* grant, so it is capped and eventually refuses.
|
|
166
|
+
*/
|
|
167
|
+
#takeRunBudgetGrant(state) {
|
|
168
|
+
if (state.runBudgetGrantConsumed) {
|
|
169
|
+
state.runBudgetGrantConsumed = false;
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
if (!state.runBudget)
|
|
173
|
+
return true;
|
|
174
|
+
return state.runBudget.grantExtension('parent').granted;
|
|
175
|
+
}
|
|
142
176
|
/**
|
|
143
177
|
* Hand the running turn a user message to send with its next model request.
|
|
144
178
|
*
|
|
@@ -255,7 +289,9 @@ export class ApplicationRunLoop {
|
|
|
255
289
|
history: normalizeHistory(input),
|
|
256
290
|
// A response ID is usable only after its provider origin is recorded.
|
|
257
291
|
// This also makes old callers that omit providerId fail closed.
|
|
258
|
-
responseId: options.
|
|
292
|
+
responseId: options.disableChainingForAttempt !== true &&
|
|
293
|
+
options.providerId &&
|
|
294
|
+
options.supportsConversationChaining === true
|
|
259
295
|
? options.previousResponseId ?? undefined
|
|
260
296
|
: undefined,
|
|
261
297
|
pendingApprovals: [],
|
|
@@ -265,6 +301,7 @@ export class ApplicationRunLoop {
|
|
|
265
301
|
? options.providerId
|
|
266
302
|
: undefined,
|
|
267
303
|
requestPreparation: options.requestPreparation,
|
|
304
|
+
disableChainingForAttempt: options.disableChainingForAttempt === true,
|
|
268
305
|
sessionId: options.sessionId,
|
|
269
306
|
turnId: options.turnId,
|
|
270
307
|
hookScope: options.hookScope,
|
|
@@ -272,13 +309,36 @@ export class ApplicationRunLoop {
|
|
|
272
309
|
approvals: options.approvals ?? new ApprovalLedger(),
|
|
273
310
|
turnCount: 0,
|
|
274
311
|
maxTurns: options.maxTurns,
|
|
312
|
+
...(options.runBudget
|
|
313
|
+
? {
|
|
314
|
+
runBudget: new RunBudget(options.runBudget),
|
|
315
|
+
onRunBudgetEvent: options.onRunBudgetEvent,
|
|
316
|
+
wrapUpOnCriticalRunBudget: options.wrapUpOnCriticalRunBudget,
|
|
317
|
+
runBudgetEscalation: options.runBudget.escalation,
|
|
318
|
+
}
|
|
319
|
+
: {}),
|
|
275
320
|
automaticCompactionsThisRun: 0,
|
|
276
321
|
};
|
|
277
322
|
state.approve = (interruption) => {
|
|
323
|
+
if (isRunBudgetInteraction(interruption)) {
|
|
324
|
+
// Continuing past an exhausted envelope must cost a finite extension no
|
|
325
|
+
// matter which surface answered. A caller that already took the grant
|
|
326
|
+
// (the interactive prompt, which needs the outcome before resuming)
|
|
327
|
+
// marks it consumed; every other path — the continuation applier,
|
|
328
|
+
// non-interactive, --auto-approve — lands here ungranted and takes it
|
|
329
|
+
// now. Without this, an auto-approved 'y' would resume with every stage
|
|
330
|
+
// still latched and never check in again.
|
|
331
|
+
state.runBudgetInteractionDecision = this.#takeRunBudgetGrant(state) ? 'continue' : 'stop';
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
278
334
|
state.approvalDecision = 'approved';
|
|
279
335
|
state.approvalDecisionCallId = getInterruptionCallId(interruption);
|
|
280
336
|
};
|
|
281
337
|
state.reject = (interruption, approvalOptions) => {
|
|
338
|
+
if (isRunBudgetInteraction(interruption)) {
|
|
339
|
+
state.runBudgetInteractionDecision = 'stop';
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
282
342
|
state.approvalDecision = 'rejected';
|
|
283
343
|
state.approvalDecisionCallId = getInterruptionCallId(interruption);
|
|
284
344
|
state.approvalMessage = approvalOptions?.message;
|
|
@@ -304,6 +364,15 @@ export class ApplicationRunLoop {
|
|
|
304
364
|
// Handles created before cost accounting existed have no record list.
|
|
305
365
|
if (!state.costRecords)
|
|
306
366
|
state.costRecords = [];
|
|
367
|
+
if (!state.runBudget && options.runBudget) {
|
|
368
|
+
state.runBudget = new RunBudget(options.runBudget);
|
|
369
|
+
}
|
|
370
|
+
if (options.runBudget)
|
|
371
|
+
state.runBudgetEscalation = options.runBudget.escalation;
|
|
372
|
+
if (options.onRunBudgetEvent)
|
|
373
|
+
state.onRunBudgetEvent = options.onRunBudgetEvent;
|
|
374
|
+
if (options.wrapUpOnCriticalRunBudget)
|
|
375
|
+
state.wrapUpOnCriticalRunBudget = true;
|
|
307
376
|
// Response IDs are provider-owned. A handle from before provenance was
|
|
308
377
|
// recorded, a missing providerId, or a provider switch must never forward
|
|
309
378
|
// its opaque ID. In particular, do not use previousResponseId as a
|
|
@@ -342,6 +411,11 @@ export class ApplicationRunLoop {
|
|
|
342
411
|
// root closure for callers that do not provide one again.
|
|
343
412
|
if (options.requestPreparation)
|
|
344
413
|
state.requestPreparation = options.requestPreparation;
|
|
414
|
+
if (options.disableChainingForAttempt === true) {
|
|
415
|
+
state.disableChainingForAttempt = true;
|
|
416
|
+
state.responseId = undefined;
|
|
417
|
+
state.responseProviderId = undefined;
|
|
418
|
+
}
|
|
345
419
|
if (options.sessionId !== undefined)
|
|
346
420
|
state.sessionId = options.sessionId;
|
|
347
421
|
if (options.turnId !== undefined)
|
|
@@ -357,6 +431,7 @@ export class ApplicationRunLoop {
|
|
|
357
431
|
const controller = new AbortController();
|
|
358
432
|
this.#activeAbortController = controller;
|
|
359
433
|
this.#runInFlight = true;
|
|
434
|
+
state.runBudget?.resume();
|
|
360
435
|
// This segment is running, so the turn is no longer paused between them.
|
|
361
436
|
this.#turnPaused = false;
|
|
362
437
|
if (options.signal) {
|
|
@@ -375,6 +450,15 @@ export class ApplicationRunLoop {
|
|
|
375
450
|
get turn() {
|
|
376
451
|
return { count: state.turnCount, max: state.maxTurns };
|
|
377
452
|
},
|
|
453
|
+
get budget() {
|
|
454
|
+
return state.runBudget
|
|
455
|
+
? {
|
|
456
|
+
takeSoftEvidence: () => state.runBudget?.takeSoftEvidence(),
|
|
457
|
+
takeStallEvidence: () => state.runBudget?.takeStallEvidence(),
|
|
458
|
+
remainingPolicy: () => state.runBudget?.remainingPolicy(),
|
|
459
|
+
}
|
|
460
|
+
: undefined;
|
|
461
|
+
},
|
|
378
462
|
};
|
|
379
463
|
const output = [];
|
|
380
464
|
const stream = createAgentStream({
|
|
@@ -404,6 +488,7 @@ export class ApplicationRunLoop {
|
|
|
404
488
|
throw error;
|
|
405
489
|
})
|
|
406
490
|
.finally(() => {
|
|
491
|
+
state.runBudget?.pause();
|
|
407
492
|
if (segmentGeneration !== this.#segmentGeneration)
|
|
408
493
|
return;
|
|
409
494
|
if (this.#activeAbortController === controller)
|
|
@@ -415,10 +500,13 @@ export class ApplicationRunLoop {
|
|
|
415
500
|
// that ends with nothing outstanding has truly finished the turn, and
|
|
416
501
|
// then anything still waiting has to be sent as its own turn instead.
|
|
417
502
|
const pendingApprovals = state.pendingApprovals?.length ?? 0;
|
|
503
|
+
const pendingBudgetInteraction = state.pendingRunBudgetInteraction !== undefined;
|
|
418
504
|
const cancelled = stream.cancelled === true;
|
|
419
|
-
this.#turnPaused = pendingApprovals > 0 && !cancelled && exitError === undefined;
|
|
505
|
+
this.#turnPaused = (pendingApprovals > 0 || pendingBudgetInteraction) && !cancelled && exitError === undefined;
|
|
420
506
|
if (this.#turnPaused)
|
|
421
507
|
return;
|
|
508
|
+
if (this.#activeRunBudgetState === state)
|
|
509
|
+
this.#activeRunBudgetState = undefined;
|
|
422
510
|
// A declared turn outlives its segments — this one may be about to be
|
|
423
511
|
// retried, or resumed past a post-execute gate. Its owner says when it
|
|
424
512
|
// is over.
|
|
@@ -426,17 +514,33 @@ export class ApplicationRunLoop {
|
|
|
426
514
|
return;
|
|
427
515
|
this.#releasePendingSteers({
|
|
428
516
|
pendingApprovals,
|
|
517
|
+
pendingBudgetInteraction,
|
|
429
518
|
cancelled,
|
|
430
519
|
error: exitError instanceof Error ? exitError.name : exitError ? String(exitError) : undefined,
|
|
431
520
|
turnCount: state.turnCount,
|
|
432
521
|
});
|
|
433
522
|
});
|
|
523
|
+
this.#activeRunBudgetState = state.runBudget ? state : undefined;
|
|
434
524
|
return stream;
|
|
435
525
|
}
|
|
436
526
|
async #execute(state, stream, queue, options, toolContext, requestAbortController) {
|
|
437
527
|
while (true) {
|
|
438
528
|
if (options.signal?.aborted)
|
|
439
529
|
throw Object.assign(new Error('Operation aborted'), { name: 'AbortError' });
|
|
530
|
+
if (state.pendingRunBudgetInteraction) {
|
|
531
|
+
if (state.runBudgetInteractionDecision === 'stop') {
|
|
532
|
+
state.pendingRunBudgetInteraction = undefined;
|
|
533
|
+
state.runBudgetInteractionDecision = undefined;
|
|
534
|
+
return finish(stream, state, queue);
|
|
535
|
+
}
|
|
536
|
+
if (state.runBudgetInteractionDecision === 'continue') {
|
|
537
|
+
state.pendingRunBudgetInteraction = undefined;
|
|
538
|
+
state.runBudgetInteractionDecision = undefined;
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
return this.#pauseForRunBudgetInteraction(state, stream, queue);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
440
544
|
state.pendingApprovals ??= state.pendingApproval ? [state.pendingApproval] : [];
|
|
441
545
|
if (state.pendingApprovals.length > 0 && state.approvalDecision) {
|
|
442
546
|
const selectedIndex = state.approvalDecisionCallId
|
|
@@ -475,52 +579,82 @@ export class ApplicationRunLoop {
|
|
|
475
579
|
if (options.stopAfterApprovalResolution)
|
|
476
580
|
return finish(stream, state, queue);
|
|
477
581
|
}
|
|
582
|
+
// A budget interaction can park a response after its tool calls are
|
|
583
|
+
// recorded but before any body runs. Resume those retained calls only
|
|
584
|
+
// after processing an ordinary approval decision for that same plan.
|
|
585
|
+
if (state.toolPlan) {
|
|
586
|
+
await this.#settleToolPlan(state, stream, queue, toolContext);
|
|
587
|
+
if (state.pendingApprovals?.length) {
|
|
588
|
+
stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
|
|
589
|
+
this.#turnPaused = true;
|
|
590
|
+
return finish(stream, state, queue);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
478
593
|
// The request boundary: every tool result of the previous round is in
|
|
479
594
|
// history, and the next request has not been built. A user message
|
|
480
595
|
// admitted here reaches the model in sequence, mid-turn.
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
state.responseId = undefined;
|
|
494
|
-
state.responseProviderId = undefined;
|
|
495
|
-
if (compaction.costRecords?.length) {
|
|
496
|
-
state.costRecords ??= [];
|
|
497
|
-
state.costRecords.push(...compaction.costRecords);
|
|
498
|
-
}
|
|
499
|
-
state.automaticCompactionsThisRun = (state.automaticCompactionsThisRun ?? 0) + 1;
|
|
500
|
-
outputPush(stream, queue, {
|
|
501
|
-
type: 'context_compaction_completed',
|
|
502
|
-
provider: state.currentProviderId ?? 'unknown',
|
|
503
|
-
strategy: 'local',
|
|
504
|
-
durationMs: Math.max(0, Date.now() - compactionStartedAt),
|
|
596
|
+
if (!state.requestBoundaryReady) {
|
|
597
|
+
this.#admitPendingSteers(state, stream, queue);
|
|
598
|
+
this.#evaluateRunBudget(state, stream, queue);
|
|
599
|
+
if (state.pendingRunBudgetInteraction)
|
|
600
|
+
return this.#pauseForRunBudgetInteraction(state, stream, queue);
|
|
601
|
+
if (options.boundaryCompaction) {
|
|
602
|
+
const compactionStartedAt = Date.now();
|
|
603
|
+
const compaction = await options.boundaryCompaction.compact({
|
|
604
|
+
history: state.history,
|
|
605
|
+
automaticCompactionsThisRun: state.automaticCompactionsThisRun ?? 0,
|
|
606
|
+
signal: options.signal,
|
|
607
|
+
onStarted: (provider) => outputPush(stream, queue, { type: 'context_compaction_started', provider, strategy: 'local' }),
|
|
505
608
|
});
|
|
609
|
+
if (compaction.kind === 'compacted') {
|
|
610
|
+
state.history.splice(0, state.history.length, ...compaction.history);
|
|
611
|
+
state.input.splice(0, state.input.length, ...normalizeApplicationInput(compaction.modelInput));
|
|
612
|
+
state.responseId = undefined;
|
|
613
|
+
state.responseProviderId = undefined;
|
|
614
|
+
if (compaction.costRecords?.length) {
|
|
615
|
+
state.costRecords ??= [];
|
|
616
|
+
state.costRecords.push(...compaction.costRecords);
|
|
617
|
+
}
|
|
618
|
+
state.automaticCompactionsThisRun = (state.automaticCompactionsThisRun ?? 0) + 1;
|
|
619
|
+
outputPush(stream, queue, {
|
|
620
|
+
type: 'context_compaction_completed',
|
|
621
|
+
provider: state.currentProviderId ?? 'unknown',
|
|
622
|
+
strategy: 'local',
|
|
623
|
+
durationMs: Math.max(0, Date.now() - compactionStartedAt),
|
|
624
|
+
});
|
|
625
|
+
}
|
|
626
|
+
else if (compaction.kind === 'failed') {
|
|
627
|
+
outputPush(stream, queue, {
|
|
628
|
+
type: 'context_compaction_failed',
|
|
629
|
+
provider: compaction.provider,
|
|
630
|
+
strategy: 'local',
|
|
631
|
+
durationMs: Math.max(0, Date.now() - compactionStartedAt),
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
// Summarization is an asynchronous part of this same request
|
|
635
|
+
// boundary. Admit anything that arrived while it was in flight after
|
|
636
|
+
// applying a replacement, so the steer cannot be overwritten by the
|
|
637
|
+
// checkpoint or miss a terminal model request.
|
|
638
|
+
this.#admitPendingSteers(state, stream, queue);
|
|
639
|
+
this.#evaluateRunBudget(state, stream, queue);
|
|
640
|
+
if (state.pendingRunBudgetInteraction)
|
|
641
|
+
return this.#pauseForRunBudgetInteraction(state, stream, queue);
|
|
506
642
|
}
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
643
|
+
state.turnCount += 1;
|
|
644
|
+
this.#evaluateRunBudget(state, stream, queue);
|
|
645
|
+
if (state.pendingRunBudgetInteraction) {
|
|
646
|
+
state.requestBoundaryReady = true;
|
|
647
|
+
return this.#pauseForRunBudgetInteraction(state, stream, queue);
|
|
648
|
+
}
|
|
649
|
+
// Retain the legacy error only for callers that have not adopted staged
|
|
650
|
+
// budgets. A configured run budget turns the same count into critical
|
|
651
|
+
// evidence and lets the decision surface choose what happens next.
|
|
652
|
+
if (!state.runBudget && state.maxTurns !== undefined && state.turnCount > state.maxTurns) {
|
|
653
|
+
throw new MaxTurnsExceededError(state.maxTurns);
|
|
514
654
|
}
|
|
515
|
-
// Summarization is an asynchronous part of this same request
|
|
516
|
-
// boundary. Admit anything that arrived while it was in flight after
|
|
517
|
-
// applying a replacement, so the steer cannot be overwritten by the
|
|
518
|
-
// checkpoint or miss a terminal model request.
|
|
519
|
-
this.#admitPendingSteers(state, stream, queue);
|
|
520
655
|
}
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
throw new MaxTurnsExceededError(state.maxTurns);
|
|
656
|
+
else {
|
|
657
|
+
state.requestBoundaryReady = undefined;
|
|
524
658
|
}
|
|
525
659
|
const model = await this.#deps.resolveModel(state.agent.model);
|
|
526
660
|
let sawToolCall = false;
|
|
@@ -530,17 +664,30 @@ export class ApplicationRunLoop {
|
|
|
530
664
|
// Stable process-unique request id, allocated immediately before dispatch
|
|
531
665
|
// so a cost record can be settled exactly once (success or failure).
|
|
532
666
|
const requestId = this.#nextRequestId();
|
|
667
|
+
const criticalWrapUp = state.criticalWrapUpPending === true && state.criticalWrapUpDispatched !== true;
|
|
668
|
+
if (criticalWrapUp)
|
|
669
|
+
state.criticalWrapUpDispatched = true;
|
|
670
|
+
const disableChaining = state.disableChainingForAttempt === true;
|
|
671
|
+
if (disableChaining) {
|
|
672
|
+
state.disableChainingForAttempt = false;
|
|
673
|
+
state.responseId = undefined;
|
|
674
|
+
state.responseProviderId = undefined;
|
|
675
|
+
}
|
|
533
676
|
const request = {
|
|
534
|
-
instructions:
|
|
677
|
+
instructions: criticalWrapUp
|
|
678
|
+
? `${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.`
|
|
679
|
+
: state.agent.instructions,
|
|
535
680
|
...(state.supportsConversationChaining &&
|
|
681
|
+
!disableChaining &&
|
|
536
682
|
state.responseId &&
|
|
537
683
|
state.responseProviderId !== undefined &&
|
|
538
684
|
state.responseProviderId === state.currentProviderId
|
|
539
685
|
? { previousResponseId: state.responseId }
|
|
540
686
|
: {}),
|
|
687
|
+
...(disableChaining ? { disableChaining: true } : {}),
|
|
541
688
|
input: state.input,
|
|
542
|
-
tools: toModelTools(state.agent.tools),
|
|
543
|
-
applicationTools: state.agent.tools,
|
|
689
|
+
tools: toModelTools(criticalWrapUp ? [] : state.agent.tools),
|
|
690
|
+
applicationTools: criticalWrapUp ? [] : state.agent.tools,
|
|
544
691
|
...(state.agent.modelSettings?.temperature !== undefined
|
|
545
692
|
? { temperature: state.agent.modelSettings.temperature }
|
|
546
693
|
: {}),
|
|
@@ -652,6 +799,7 @@ export class ApplicationRunLoop {
|
|
|
652
799
|
// persistence and replay, and a cost event must never become a
|
|
653
800
|
// restored history item.
|
|
654
801
|
queue.push({ type: 'cost_update', record });
|
|
802
|
+
this.#evaluateRunBudget(state, stream, queue);
|
|
655
803
|
throw error;
|
|
656
804
|
}
|
|
657
805
|
if (!completion) {
|
|
@@ -662,6 +810,8 @@ export class ApplicationRunLoop {
|
|
|
662
810
|
// fails closed as an incomplete model turn.
|
|
663
811
|
if (streamedToolCalls.length === 0)
|
|
664
812
|
throw new Error('Application model turn ended without completion');
|
|
813
|
+
if (criticalWrapUp)
|
|
814
|
+
return finish(stream, state, queue);
|
|
665
815
|
await this.#dispatchToolCalls(state, stream, queue, streamedToolCalls, toolContext);
|
|
666
816
|
if (state.pendingApprovals && state.pendingApprovals.length > 0) {
|
|
667
817
|
stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
|
|
@@ -731,6 +881,12 @@ export class ApplicationRunLoop {
|
|
|
731
881
|
providerUsd: completion.costUsd,
|
|
732
882
|
});
|
|
733
883
|
queue.push({ type: 'cost_update', record });
|
|
884
|
+
// Cost and usage arrive in the same completion metadata, so surface both
|
|
885
|
+
// live. The footer is a per-request indicator: emit this request's own
|
|
886
|
+
// usage, never the run accumulator in `state.usage`.
|
|
887
|
+
if (normalizedCompletionUsage)
|
|
888
|
+
queue.push({ type: 'usage_update', usage: normalizedCompletionUsage });
|
|
889
|
+
this.#evaluateRunBudget(state, stream, queue);
|
|
734
890
|
stream.lastResponseId = completion.responseId;
|
|
735
891
|
stream.rawResponses?.push(completion);
|
|
736
892
|
// Some provider adapters report function calls only in the terminal
|
|
@@ -750,8 +906,6 @@ export class ApplicationRunLoop {
|
|
|
750
906
|
toolCalls.push(item);
|
|
751
907
|
}
|
|
752
908
|
}
|
|
753
|
-
if (toolCalls.length > 0)
|
|
754
|
-
await this.#dispatchToolCalls(state, stream, queue, toolCalls, toolContext);
|
|
755
909
|
// A native reasoning item belongs to the completed assistant turn even
|
|
756
910
|
// when no tool call follows it. Commit it before assistant text so both
|
|
757
911
|
// stateless continuation and persisted canonical history retain the
|
|
@@ -789,13 +943,34 @@ export class ApplicationRunLoop {
|
|
|
789
943
|
outputPush(stream, queue, { type: 'item', item });
|
|
790
944
|
state.input.push({ type: 'message', role: 'assistant', content: [{ type: 'text', text: assistantText }] });
|
|
791
945
|
}
|
|
946
|
+
// Tool calls are dispatched only after the reasoning, provider-opaque,
|
|
947
|
+
// and assistant-text items from the same completion are committed. A
|
|
948
|
+
// response that carries both prose and a tool call must serialize as
|
|
949
|
+
// text -> function_call -> function_call_result; dispatching first left
|
|
950
|
+
// the text stranded after its own tool result, where the assistant
|
|
951
|
+
// message merger glued it onto the *next* turn's tool call and every
|
|
952
|
+
// request ended with a bare assistant message. Models read that as a
|
|
953
|
+
// turn truncated mid-sentence and restart instead of progressing.
|
|
954
|
+
if (!state.criticalWrapUpPending && toolCalls.length > 0) {
|
|
955
|
+
await this.#dispatchToolCalls(state, stream, queue, toolCalls, toolContext);
|
|
956
|
+
}
|
|
957
|
+
// A critical subagent gets exactly this final tool-free model call.
|
|
958
|
+
if (criticalWrapUp)
|
|
959
|
+
return finish(stream, state, queue);
|
|
960
|
+
if (state.pendingRunBudgetInteraction && toolCalls.length > 0) {
|
|
961
|
+
return this.#pauseForRunBudgetInteraction(state, stream, queue);
|
|
962
|
+
}
|
|
792
963
|
if (state.pendingApprovals.length > 0) {
|
|
793
964
|
stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
|
|
794
965
|
this.#turnPaused = true;
|
|
795
966
|
return finish(stream, state, queue);
|
|
796
967
|
}
|
|
797
|
-
if (!sawToolCall)
|
|
968
|
+
if (!sawToolCall) {
|
|
969
|
+
// Evidence discovered when a response has already completed needs no
|
|
970
|
+
// human boundary: there is no later request or tool to block.
|
|
971
|
+
state.pendingRunBudgetInteraction = undefined;
|
|
798
972
|
return finish(stream, state, queue);
|
|
973
|
+
}
|
|
799
974
|
}
|
|
800
975
|
}
|
|
801
976
|
async #dispatchToolCalls(state, stream, queue, events, toolContext) {
|
|
@@ -829,6 +1004,14 @@ export class ApplicationRunLoop {
|
|
|
829
1004
|
// would apply schema defaults before execute. web_fetch relies on its
|
|
830
1005
|
// executor fallbacks on the strict JSON-schema path.
|
|
831
1006
|
entry.params = normalizeToolParameters(parseArguments(event.arguments), definition.parameters);
|
|
1007
|
+
const stallEvent = state.runBudget?.observeToolCall({
|
|
1008
|
+
name: event.name,
|
|
1009
|
+
argumentsText: event.arguments,
|
|
1010
|
+
effect: definition.effect,
|
|
1011
|
+
});
|
|
1012
|
+
if (stallEvent) {
|
|
1013
|
+
this.#emitRunBudgetEvent(state, stallEvent, 'Tool stall evidence', stream, queue);
|
|
1014
|
+
}
|
|
832
1015
|
// Consult this run's ledger before prompting: a decision already taken
|
|
833
1016
|
// (in the parent run and replayed in, or earlier in this run) must not
|
|
834
1017
|
// prompt again. This is what makes approval replay observable.
|
|
@@ -870,12 +1053,17 @@ export class ApplicationRunLoop {
|
|
|
870
1053
|
approvalPending: entry.status === 'approval_pending',
|
|
871
1054
|
})),
|
|
872
1055
|
});
|
|
873
|
-
|
|
1056
|
+
// A main-agent budget escalation is a real boundary: retain the planned
|
|
1057
|
+
// calls, but do not execute one more tool while human judgement is pending.
|
|
1058
|
+
if (!state.pendingRunBudgetInteraction) {
|
|
1059
|
+
await this.#settleToolPlan(state, stream, queue, toolContext);
|
|
1060
|
+
}
|
|
874
1061
|
}
|
|
875
1062
|
async #settleToolPlan(state, stream, queue, toolContext) {
|
|
876
1063
|
const plan = state.toolPlan;
|
|
877
1064
|
if (!plan)
|
|
878
1065
|
return;
|
|
1066
|
+
const maxParallelToolCalls = Math.max(1, Math.floor(this.#deps.resolveMaxParallelToolCalls?.() ?? DEFAULT_MAX_PARALLEL_TOOL_CALLS));
|
|
879
1067
|
while (true) {
|
|
880
1068
|
const firstPending = plan.find((entry) => entry.status !== 'completed');
|
|
881
1069
|
if (!firstPending) {
|
|
@@ -890,8 +1078,7 @@ export class ApplicationRunLoop {
|
|
|
890
1078
|
continue;
|
|
891
1079
|
if (entry.status === 'approval_pending')
|
|
892
1080
|
break;
|
|
893
|
-
if (group.length > 0 &&
|
|
894
|
-
(!entry.parallelSafe || !group[0].parallelSafe || group.length >= this.#maxParallelToolCalls))
|
|
1081
|
+
if (group.length > 0 && (!entry.parallelSafe || !group[0].parallelSafe || group.length >= maxParallelToolCalls))
|
|
895
1082
|
break;
|
|
896
1083
|
group.push(entry);
|
|
897
1084
|
if (!entry.parallelSafe)
|
|
@@ -902,6 +1089,7 @@ export class ApplicationRunLoop {
|
|
|
902
1089
|
batchId,
|
|
903
1090
|
callIds: group.map((entry) => entry.event.id),
|
|
904
1091
|
parallel: group.length > 1,
|
|
1092
|
+
maxParallelToolCalls,
|
|
905
1093
|
dispatchOrder: group.map((entry) => entry.event.id),
|
|
906
1094
|
});
|
|
907
1095
|
if (group.length > 1) {
|
|
@@ -940,6 +1128,7 @@ export class ApplicationRunLoop {
|
|
|
940
1128
|
state.history.push(resultItem);
|
|
941
1129
|
state.input.push({ type: 'tool_result', id: entry.event.id, output });
|
|
942
1130
|
outputPush(stream, queue, { type: 'item', item: resultItem });
|
|
1131
|
+
this.#evaluateRunBudget(state, stream, queue);
|
|
943
1132
|
}
|
|
944
1133
|
/**
|
|
945
1134
|
* A tool that throws must not take the run down with it.
|
|
@@ -987,15 +1176,6 @@ export class ApplicationRunLoop {
|
|
|
987
1176
|
throw error;
|
|
988
1177
|
}
|
|
989
1178
|
const message = error instanceof Error ? error.message : String(error);
|
|
990
|
-
// Feeding the same failure back forever is its own failure mode: some
|
|
991
|
-
// errors no argument can fix. Repeat the identical result once, then say
|
|
992
|
-
// so plainly rather than inviting a third identical attempt.
|
|
993
|
-
const repeated = state ? countRepeatedFailure(state, definition.name, params, message) : 1;
|
|
994
|
-
if (repeated > MAX_IDENTICAL_TOOL_FAILURES) {
|
|
995
|
-
const result = `Error: ${message}\n\nThis exact call has now failed ${repeated} times with the same error. Do not call ${definition.name} with these arguments again — either change your approach or report the problem to the user.`;
|
|
996
|
-
await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.error(lifecycleContext, error, Date.now() - startedAt, true));
|
|
997
|
-
return result;
|
|
998
|
-
}
|
|
999
1179
|
const result = `Error: ${message}`;
|
|
1000
1180
|
await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.error(lifecycleContext, error, Date.now() - startedAt, true));
|
|
1001
1181
|
return result;
|
|
@@ -1020,6 +1200,49 @@ export class ApplicationRunLoop {
|
|
|
1020
1200
|
state.costRecords = [...(state.costRecords ?? []), record];
|
|
1021
1201
|
return record;
|
|
1022
1202
|
}
|
|
1203
|
+
#evaluateRunBudget(state, stream, queue) {
|
|
1204
|
+
if (!state.runBudget)
|
|
1205
|
+
return;
|
|
1206
|
+
for (const event of state.runBudget.evaluate({
|
|
1207
|
+
turns: state.turnCount,
|
|
1208
|
+
costRecords: state.costRecords ?? [],
|
|
1209
|
+
})) {
|
|
1210
|
+
this.#emitRunBudgetEvent(state, event, 'Run budget evidence', stream, queue);
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
#emitRunBudgetEvent(state, event, message, stream, queue) {
|
|
1214
|
+
if (event.type === 'budget_stage' && event.stage === 'critical' && state.wrapUpOnCriticalRunBudget) {
|
|
1215
|
+
state.criticalWrapUpPending = true;
|
|
1216
|
+
}
|
|
1217
|
+
if (!state.wrapUpOnCriticalRunBudget &&
|
|
1218
|
+
!state.pendingRunBudgetInteraction &&
|
|
1219
|
+
state.runBudgetEscalation !== 'warn' &&
|
|
1220
|
+
this.#requiresHumanBudgetDecision(event)) {
|
|
1221
|
+
state.pendingRunBudgetInteraction = { type: 'run_budget_interaction', event };
|
|
1222
|
+
state.runBudgetGrantConsumed = false;
|
|
1223
|
+
}
|
|
1224
|
+
if (stream && queue)
|
|
1225
|
+
outputPush(stream, queue, { type: 'run_budget', evidence: event });
|
|
1226
|
+
try {
|
|
1227
|
+
state.onRunBudgetEvent?.(event);
|
|
1228
|
+
}
|
|
1229
|
+
catch {
|
|
1230
|
+
// Evidence observers are delivery adapters, not budget owners.
|
|
1231
|
+
this.#deps.logDiagnostic?.('Run budget event observer failed', { type: event.type });
|
|
1232
|
+
}
|
|
1233
|
+
this.#deps.logDiagnostic?.(message, event);
|
|
1234
|
+
}
|
|
1235
|
+
#requiresHumanBudgetDecision(event) {
|
|
1236
|
+
return event.type === 'tool_stall' || (event.type === 'budget_stage' && event.stage !== 'soft');
|
|
1237
|
+
}
|
|
1238
|
+
#pauseForRunBudgetInteraction(state, stream, queue) {
|
|
1239
|
+
const interaction = state.pendingRunBudgetInteraction;
|
|
1240
|
+
if (!interaction)
|
|
1241
|
+
return finish(stream, state, queue);
|
|
1242
|
+
stream.interruptions = [interaction];
|
|
1243
|
+
this.#turnPaused = true;
|
|
1244
|
+
return finish(stream, state, queue);
|
|
1245
|
+
}
|
|
1023
1246
|
async #notifyToolLifecycle(operation) {
|
|
1024
1247
|
if (!operation)
|
|
1025
1248
|
return;
|
|
@@ -1032,27 +1255,6 @@ export class ApplicationRunLoop {
|
|
|
1032
1255
|
}
|
|
1033
1256
|
}
|
|
1034
1257
|
}
|
|
1035
|
-
/**
|
|
1036
|
-
* How many times an identical failing call is fed back before the loop stops
|
|
1037
|
-
* inviting retries. One repeat is worth allowing: a transient failure resolves,
|
|
1038
|
-
* and a model given the error often corrects on its second attempt.
|
|
1039
|
-
*/
|
|
1040
|
-
const MAX_IDENTICAL_TOOL_FAILURES = 2;
|
|
1041
|
-
function countRepeatedFailure(state, toolName, params, message) {
|
|
1042
|
-
let key;
|
|
1043
|
-
try {
|
|
1044
|
-
key = JSON.stringify([toolName, params, message]);
|
|
1045
|
-
}
|
|
1046
|
-
catch {
|
|
1047
|
-
// Unserializable params cannot be compared for identity; treat every such
|
|
1048
|
-
// failure as distinct rather than collapsing unrelated calls together.
|
|
1049
|
-
return 1;
|
|
1050
|
-
}
|
|
1051
|
-
state.toolFailureCounts ??= new Map();
|
|
1052
|
-
const count = (state.toolFailureCounts.get(key) ?? 0) + 1;
|
|
1053
|
-
state.toolFailureCounts.set(key, count);
|
|
1054
|
-
return count;
|
|
1055
|
-
}
|
|
1056
1258
|
function outputPush(stream, queue, item) {
|
|
1057
1259
|
stream.output.push(item);
|
|
1058
1260
|
if (stream.newItems !== stream.output)
|
|
@@ -1078,6 +1280,15 @@ function finish(stream, state, queue) {
|
|
|
1078
1280
|
* Chat-Completions continuation field. Generic reasoning remains display-only
|
|
1079
1281
|
* so providers with different native formats are not given a foreign field.
|
|
1080
1282
|
*/
|
|
1283
|
+
/**
|
|
1284
|
+
* True when any lane namespace in the metadata carries an `encrypted_content`
|
|
1285
|
+
* blob — the shape every Responses adapter produces, whichever vendor it is.
|
|
1286
|
+
*/
|
|
1287
|
+
function hasNamespacedEncryptedReasoning(metadata) {
|
|
1288
|
+
if (!metadata)
|
|
1289
|
+
return false;
|
|
1290
|
+
return Object.values(metadata).some((value) => asRecord(value)?.encrypted_content !== undefined);
|
|
1291
|
+
}
|
|
1081
1292
|
function appendNativeReasoning(current, event) {
|
|
1082
1293
|
const nativeReasoning = event.providerMetadata?.reasoning_content;
|
|
1083
1294
|
if (typeof nativeReasoning === 'string') {
|
|
@@ -1094,8 +1305,10 @@ function appendNativeReasoning(current, event) {
|
|
|
1094
1305
|
}
|
|
1095
1306
|
// Responses providers return encrypted reasoning only on their terminal
|
|
1096
1307
|
// output. Their metadata is namespaced, so retain it without turning it into
|
|
1097
|
-
// the Chat-Completions-only reasoning_content convention.
|
|
1098
|
-
|
|
1308
|
+
// the Chat-Completions-only reasoning_content convention. Match on the
|
|
1309
|
+
// namespaced shape rather than an allowlist of lane names: an allowlist
|
|
1310
|
+
// silently drops the reasoning of every Responses lane added later.
|
|
1311
|
+
if (hasNamespacedEncryptedReasoning(event.providerMetadata)) {
|
|
1099
1312
|
return {
|
|
1100
1313
|
...(event.id ? { id: event.id } : current?.id ? { id: current.id } : {}),
|
|
1101
1314
|
text: event.text,
|