@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
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { ResponsesWS } from 'openai/resources/responses/ws';
|
|
3
|
-
import OpenAI from 'openai';
|
|
3
|
+
import OpenAI, { InternalServerError } from 'openai';
|
|
4
4
|
import { toCodexResponsesInput } from './codex-turn-converter.js';
|
|
5
5
|
import { sanitizeHeaders } from '../utils/header-sanitizer.js';
|
|
6
6
|
import { AbortedStreamRecorder } from './aborted-stream-recorder.js';
|
|
7
|
-
import { OrphanedChainedToolOutputError } from '../lib/chained-input-filter.js';
|
|
8
|
-
import { AmbiguousModelOutcomeError } from '../services/retry/retry-errors.js';
|
|
7
|
+
import { isOrphanedChainedToolOutputError, OrphanedChainedToolOutputError } from '../lib/chained-input-filter.js';
|
|
8
|
+
import { AmbiguousModelOutcomeError, ConversationStateNoProgressError } from '../services/retry/retry-errors.js';
|
|
9
|
+
import { fingerprintChainRequest } from '../services/retry/chain-recovery-fingerprint.js';
|
|
9
10
|
import { ChainedWireState } from './chained-wire-state.js';
|
|
10
11
|
import { LunaResponsesLiteWireProtocol } from './luna-responses-lite-wire-protocol.js';
|
|
11
12
|
import { captureProviderRequest } from './provider-request-capture.js';
|
|
12
13
|
import { createWebSocketReceiveWatchdog, DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS, } from './websocket-receive-watchdog.js';
|
|
14
|
+
import { readWebSocketDispatch, recordWebSocketDispatch, UnsentWebSocketRequestError, } from './websocket-request-dispatch.js';
|
|
15
|
+
import { WebSocketClosedEarlyError, webSocketCloseError, findWebSocketClosedEarly, readWebSocketCloseFrame, } from './websocket-close-evidence.js';
|
|
13
16
|
import { markContextCompactionFailure, resolveContextManagement } from './openai-responses-model.js';
|
|
17
|
+
import { ResponsesWebSocketSessions } from './responses-websocket-sessions.js';
|
|
14
18
|
const DUMMY_PROVIDER_TRAFFIC = {
|
|
15
19
|
recordRequestStart() { },
|
|
16
20
|
async recordResponseReceived() { },
|
|
@@ -25,18 +29,31 @@ function toCodexToolChoice(choice) {
|
|
|
25
29
|
}
|
|
26
30
|
throw new Error('Unsupported Codex tool choice.');
|
|
27
31
|
}
|
|
32
|
+
const TERMINAL_RESPONSE_EVENT_TYPES = new Set([
|
|
33
|
+
'response.completed',
|
|
34
|
+
'response.failed',
|
|
35
|
+
'response.incomplete',
|
|
36
|
+
'response.error',
|
|
37
|
+
]);
|
|
38
|
+
// RFC 6455 readyState values, named so the send path's evidence is readable.
|
|
39
|
+
const WEBSOCKET_CONNECTING = 0;
|
|
40
|
+
const WEBSOCKET_OPEN = 1;
|
|
28
41
|
/** Provider-owned transport seam used by Codex's HTTP and WebSocket models. */
|
|
29
42
|
export class CodexResponsesTransport {
|
|
30
43
|
client;
|
|
31
44
|
model;
|
|
32
45
|
websocket;
|
|
33
46
|
options;
|
|
47
|
+
#sessions = new ResponsesWebSocketSessions((headers) => new ResponsesWS(this.client, headers ? { headers } : undefined));
|
|
34
48
|
constructor(client = {}, model = '', websocket = false, options = {}) {
|
|
35
49
|
this.client = client;
|
|
36
50
|
this.model = model;
|
|
37
51
|
this.websocket = websocket;
|
|
38
52
|
this.options = options;
|
|
39
53
|
}
|
|
54
|
+
close() {
|
|
55
|
+
this.#sessions.close();
|
|
56
|
+
}
|
|
40
57
|
buildResponsesCreateRequest(request, stream) {
|
|
41
58
|
const providerOptions = request.providerOptions ?? {};
|
|
42
59
|
// contextCompaction is an app-level option; context_management is capability-gated
|
|
@@ -74,40 +91,69 @@ export class CodexResponsesTransport {
|
|
|
74
91
|
return this.client.responses.create(requestData);
|
|
75
92
|
}
|
|
76
93
|
const headers = request.providerOptions?.extraHeaders;
|
|
77
|
-
const socket =
|
|
94
|
+
const socket = this.#sessions.acquire(headers);
|
|
78
95
|
const messages = socket.stream();
|
|
79
96
|
const requestEvent = { type: 'response.create', ...requestData };
|
|
80
|
-
|
|
81
|
-
|
|
97
|
+
// Until the frame is written to an OPEN socket it is still ours, so a
|
|
98
|
+
// receive timeout before that point is provably unsent. `send` on a
|
|
99
|
+
// connecting or closing socket only queues, which proves nothing —
|
|
100
|
+
// record what the socket actually was, and `unknown` when it cannot be
|
|
101
|
+
// observed at all.
|
|
102
|
+
recordWebSocketDispatch(request, 'unsent');
|
|
103
|
+
const dispatchRequestEvent = () => {
|
|
104
|
+
const readyState = socket.socket?.readyState;
|
|
105
|
+
socket.send(requestEvent);
|
|
106
|
+
recordWebSocketDispatch(request, readyState === WEBSOCKET_OPEN ? 'flushed' : 'unknown');
|
|
107
|
+
};
|
|
108
|
+
if (socket.socket?.readyState === WEBSOCKET_CONNECTING) {
|
|
109
|
+
socket.socket.once('open', dispatchRequestEvent);
|
|
82
110
|
}
|
|
83
111
|
else {
|
|
84
|
-
|
|
112
|
+
dispatchRequestEvent();
|
|
85
113
|
}
|
|
86
114
|
const sessionState = this.options.contextCompactionSessionState;
|
|
115
|
+
const sessions = this.#sessions;
|
|
87
116
|
return (async function* () {
|
|
117
|
+
let terminalReceived = false;
|
|
118
|
+
let released = false;
|
|
119
|
+
const release = (keepAlive) => {
|
|
120
|
+
if (released)
|
|
121
|
+
return;
|
|
122
|
+
released = true;
|
|
123
|
+
sessions.release(socket, { keepAlive });
|
|
124
|
+
};
|
|
88
125
|
try {
|
|
89
126
|
for await (const message of messages) {
|
|
90
|
-
if (message.type === 'message')
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
127
|
+
if (message.type === 'message') {
|
|
128
|
+
const event = message.message;
|
|
129
|
+
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type) || event?.type === 'response.completed') {
|
|
130
|
+
terminalReceived = true;
|
|
131
|
+
}
|
|
132
|
+
yield event;
|
|
133
|
+
}
|
|
134
|
+
else if (message.event) {
|
|
135
|
+
const event = message.event;
|
|
136
|
+
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type) || event?.type === 'response.completed') {
|
|
137
|
+
terminalReceived = true;
|
|
138
|
+
}
|
|
139
|
+
yield event;
|
|
140
|
+
}
|
|
141
|
+
else if (message.type === 'error') {
|
|
95
142
|
throw message.error;
|
|
96
|
-
|
|
97
|
-
|
|
143
|
+
}
|
|
144
|
+
else if (message.type === 'close') {
|
|
145
|
+
throw webSocketCloseError(message, readWebSocketDispatch(request));
|
|
146
|
+
}
|
|
98
147
|
}
|
|
99
148
|
}
|
|
100
149
|
catch (error) {
|
|
101
|
-
|
|
102
|
-
|
|
150
|
+
release(false);
|
|
151
|
+
const normalizedError = normalizeExplicitCodexServerError(error);
|
|
152
|
+
markContextCompactionFailure(normalizedError, request, sessionState);
|
|
153
|
+
throw normalizedError;
|
|
103
154
|
}
|
|
104
155
|
finally {
|
|
105
|
-
|
|
106
|
-
socket.close();
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
/* best effort */
|
|
110
|
-
}
|
|
156
|
+
release(terminalReceived);
|
|
111
157
|
}
|
|
112
158
|
})();
|
|
113
159
|
}
|
|
@@ -131,6 +177,9 @@ export class OpenAIResponsesModel {
|
|
|
131
177
|
this.model = model;
|
|
132
178
|
this.transport = transport ?? new CodexResponsesTransport(client, model, websocket);
|
|
133
179
|
}
|
|
180
|
+
async close() {
|
|
181
|
+
this.transport.close?.();
|
|
182
|
+
}
|
|
134
183
|
buildResponsesCreateRequest(request, stream) {
|
|
135
184
|
const built = this.transport.buildResponsesCreateRequest(request, stream);
|
|
136
185
|
if (this.transport instanceof CodexResponsesTransport && built?.requestData) {
|
|
@@ -147,16 +196,47 @@ export class OpenAIResponsesModel {
|
|
|
147
196
|
}
|
|
148
197
|
async *rawStream(request) {
|
|
149
198
|
const source = await this.fetchResponse(request, true);
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
199
|
+
const iterator = source[Symbol.asyncIterator]();
|
|
200
|
+
let terminal = false;
|
|
201
|
+
let iteratorFinished = false;
|
|
202
|
+
try {
|
|
203
|
+
while (true) {
|
|
204
|
+
const next = await iterator.next();
|
|
205
|
+
if (next.done) {
|
|
206
|
+
iteratorFinished = true;
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const event = next.value;
|
|
210
|
+
if (event?.type === 'error')
|
|
211
|
+
throw new Error(event.error?.message ?? 'Codex WebSocket provider error');
|
|
212
|
+
if (event?.type === 'close')
|
|
213
|
+
throw new WebSocketClosedEarlyError(readWebSocketCloseFrame(event));
|
|
214
|
+
terminal =
|
|
215
|
+
event?.type === 'response.completed' ||
|
|
216
|
+
event?.type === 'response.incomplete' ||
|
|
217
|
+
event?.type === 'response.failed';
|
|
218
|
+
yield event;
|
|
219
|
+
if (terminal)
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
if (!iteratorFinished) {
|
|
225
|
+
if (terminal) {
|
|
226
|
+
// The Responses WebSocket stream is session-scoped. Detach this
|
|
227
|
+
// completed request without awaiting an SDK iterator return that
|
|
228
|
+
// waits for the retained socket to close.
|
|
229
|
+
try {
|
|
230
|
+
void iterator.return?.().catch(() => undefined);
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// Completion is authoritative; socket disposal remains best effort.
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
await iterator.return?.();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
160
240
|
}
|
|
161
241
|
}
|
|
162
242
|
async *stream(request) {
|
|
@@ -338,19 +418,29 @@ function toCodexUsage(rawUsage) {
|
|
|
338
418
|
function codexString(value) {
|
|
339
419
|
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
340
420
|
}
|
|
341
|
-
import { isIncompleteStreamTerminalError, isPreviousResponseNotFoundError, isRetryableTransportError, isWebSocketConnectionLimitReachedError, } from '../services/retry/retry-error-classification.js';
|
|
421
|
+
import { isIncompleteStreamTerminalError, isMissingServerToolOutputError, isPreviousResponseNotFoundError, isRetryableTransportError, isWebSocketConnectionLimitReachedError, } from '../services/retry/retry-error-classification.js';
|
|
342
422
|
const SUSPICIOUS_RECONSTRUCTED_OUTPUT_ITEM_COUNT = 20;
|
|
343
|
-
const TERMINAL_RESPONSE_EVENT_TYPES = new Set([
|
|
344
|
-
'response.completed',
|
|
345
|
-
'response.failed',
|
|
346
|
-
'response.incomplete',
|
|
347
|
-
'response.error',
|
|
348
|
-
]);
|
|
349
423
|
const WS_RESPONSE_MODEL_CLASS = 'OpenAIResponsesWSModel';
|
|
350
424
|
const WS_RESPONSE_WRAPPER_CLASS = 'CodexResponsesWSModel';
|
|
351
425
|
const RESPONSES_LITE_MODELS = new Set(['gpt-5.6-luna']);
|
|
352
426
|
const asRecord = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : null;
|
|
353
427
|
const stringValue = (value) => (typeof value === 'string' && value ? value : undefined);
|
|
428
|
+
/**
|
|
429
|
+
* A Codex WebSocket `error` frame is an explicit provider rejection, unlike a
|
|
430
|
+
* socket close after sending a request. Normalize only its documented
|
|
431
|
+
* `server_error` shape to the SDK's 5xx error so the pre-event retry wrapper
|
|
432
|
+
* can retry it without treating an ambiguous outcome as safe to replay.
|
|
433
|
+
*/
|
|
434
|
+
function normalizeExplicitCodexServerError(error) {
|
|
435
|
+
const outer = asRecord(asRecord(error)?.error) ?? asRecord(error);
|
|
436
|
+
const details = asRecord(outer?.error) ?? outer;
|
|
437
|
+
if (!details || (details.type !== 'server_error' && details.code !== 'server_error')) {
|
|
438
|
+
return error;
|
|
439
|
+
}
|
|
440
|
+
const normalized = new InternalServerError(500, details, stringValue(details.message), new Headers());
|
|
441
|
+
Object.defineProperty(normalized, 'cause', { value: error, configurable: true });
|
|
442
|
+
return normalized;
|
|
443
|
+
}
|
|
354
444
|
const CODEX_REPLAY_ITEM_TYPES_WITHOUT_IDS = new Set([
|
|
355
445
|
'message',
|
|
356
446
|
'reasoning',
|
|
@@ -597,6 +687,15 @@ const collectFunctionCallIds = (input) => {
|
|
|
597
687
|
}
|
|
598
688
|
return ids;
|
|
599
689
|
};
|
|
690
|
+
const isExactInputPrefix = (input, prefix) => {
|
|
691
|
+
if (prefix.length > input.length)
|
|
692
|
+
return false;
|
|
693
|
+
return prefix.every((item, index) => JSON.stringify(item) === JSON.stringify(input[index]));
|
|
694
|
+
};
|
|
695
|
+
const collectUnpairedToolResultCallIds = (original, filtered) => {
|
|
696
|
+
const remaining = new Set(collectToolResultCallIds(filtered));
|
|
697
|
+
return collectToolResultCallIds(original).filter((callId) => !remaining.has(callId));
|
|
698
|
+
};
|
|
600
699
|
const dropUnpairedCodexToolItems = (history) => {
|
|
601
700
|
const callIds = new Set();
|
|
602
701
|
const resultIds = new Set();
|
|
@@ -722,10 +821,26 @@ const isDefinitelyUnsentWebSocketError = (error, seen = new Set()) => {
|
|
|
722
821
|
}
|
|
723
822
|
return isDefinitelyUnsentWebSocketError(record.message, seen) || isDefinitelyUnsentWebSocketError(record.cause, seen);
|
|
724
823
|
};
|
|
824
|
+
/**
|
|
825
|
+
* A receive-watchdog timeout that the send path proved never reached the wire.
|
|
826
|
+
*
|
|
827
|
+
* Three conditions must all hold, and each rules out a way of being wrong: the
|
|
828
|
+
* failure is the watchdog's own (not a provider error wearing a timeout
|
|
829
|
+
* message), no frame ever arrived (a single frame means the server had the
|
|
830
|
+
* request), and the send path positively recorded `unsent` (an unrecorded
|
|
831
|
+
* request is not evidence). Anything less stays ambiguous and terminates.
|
|
832
|
+
*/
|
|
833
|
+
const asProvablyUnsentTimeout = (timeoutError, timing, request) => {
|
|
834
|
+
if (!timeoutError || timing.frameCount > 0)
|
|
835
|
+
return undefined;
|
|
836
|
+
if (readWebSocketDispatch(request) !== 'unsent')
|
|
837
|
+
return undefined;
|
|
838
|
+
return new UnsentWebSocketRequestError(timeoutError.message, { cause: timeoutError });
|
|
839
|
+
};
|
|
725
840
|
const asAmbiguousModelOutcome = (error) => {
|
|
726
841
|
// Connection never carried the request: safe to let outer retry / transport
|
|
727
842
|
// fallback policies decide. Do not pretend the model may have run.
|
|
728
|
-
if (isDefinitelyUnsentWebSocketError(error)) {
|
|
843
|
+
if (error instanceof UnsentWebSocketRequestError || isDefinitelyUnsentWebSocketError(error)) {
|
|
729
844
|
return undefined;
|
|
730
845
|
}
|
|
731
846
|
// Incomplete stream terminals keep transportFallback=false so Codex does not
|
|
@@ -740,13 +855,6 @@ const asAmbiguousModelOutcome = (error) => {
|
|
|
740
855
|
return undefined;
|
|
741
856
|
};
|
|
742
857
|
const hasGenerateFalse = (request) => request.providerOptions?.generate === false;
|
|
743
|
-
const withProviderOptions = (request, providerOptions) => ({
|
|
744
|
-
...request,
|
|
745
|
-
providerOptions: {
|
|
746
|
-
...request.providerOptions,
|
|
747
|
-
...providerOptions,
|
|
748
|
-
},
|
|
749
|
-
});
|
|
750
858
|
export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
751
859
|
modelId;
|
|
752
860
|
tokenManager;
|
|
@@ -755,6 +863,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
755
863
|
codexFunctionCallIdsByResponseId = new Map();
|
|
756
864
|
codexTurnIdsBySession = new Map();
|
|
757
865
|
#serverHistoryReuseDisabled = false;
|
|
866
|
+
#lastSentChainFingerprint;
|
|
867
|
+
#lastRejectedChainFingerprint;
|
|
868
|
+
#lastLogicalRequestByKey = new Map();
|
|
758
869
|
providerTraffic;
|
|
759
870
|
diagnosticLogger;
|
|
760
871
|
sessionContextService;
|
|
@@ -805,7 +916,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
805
916
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
806
917
|
});
|
|
807
918
|
}
|
|
808
|
-
#logTrafficReceived(requestId, requestData, response) {
|
|
919
|
+
#logTrafficReceived(requestId, requestData, response, receiveTiming) {
|
|
809
920
|
const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
810
921
|
const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
|
|
811
922
|
providerTraffic.recordResponseReceived({
|
|
@@ -815,11 +926,12 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
815
926
|
status: 200,
|
|
816
927
|
response: response,
|
|
817
928
|
transport: 'websocket',
|
|
929
|
+
...(receiveTiming ? { receiveTiming } : {}),
|
|
818
930
|
modelClass: WS_RESPONSE_MODEL_CLASS,
|
|
819
931
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
820
932
|
});
|
|
821
933
|
}
|
|
822
|
-
#logTrafficFailed(requestId, requestData, error) {
|
|
934
|
+
#logTrafficFailed(requestId, requestData, error, receiveTiming) {
|
|
823
935
|
const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
824
936
|
const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
|
|
825
937
|
providerTraffic.recordRequestFailed({
|
|
@@ -827,6 +939,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
827
939
|
provider: 'codex',
|
|
828
940
|
model,
|
|
829
941
|
error,
|
|
942
|
+
...(receiveTiming ? { receiveTiming } : {}),
|
|
830
943
|
modelClass: WS_RESPONSE_MODEL_CLASS,
|
|
831
944
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
832
945
|
});
|
|
@@ -845,7 +958,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
845
958
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
846
959
|
});
|
|
847
960
|
}
|
|
848
|
-
async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal) {
|
|
961
|
+
async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal, receiveTiming, asProvablyUnsent) {
|
|
849
962
|
const logReceived = this.#logTrafficReceived.bind(this);
|
|
850
963
|
const logFailed = this.#logTrafficFailed.bind(this);
|
|
851
964
|
const logClosed = this.#logTrafficClosed.bind(this);
|
|
@@ -878,7 +991,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
878
991
|
if (wireStateKey && wireStateToken && typeof response.id === 'string' && response.id.length > 0) {
|
|
879
992
|
wireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
|
|
880
993
|
}
|
|
881
|
-
logReceived(requestId, requestData, response);
|
|
994
|
+
logReceived(requestId, requestData, response, receiveTiming?.());
|
|
882
995
|
}
|
|
883
996
|
yield event;
|
|
884
997
|
}
|
|
@@ -889,8 +1002,12 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
889
1002
|
if (wireStateKey && !isWebSocketConnectionLimitReachedError(error)) {
|
|
890
1003
|
wireState.invalidate(wireStateKey);
|
|
891
1004
|
}
|
|
892
|
-
|
|
893
|
-
|
|
1005
|
+
// The watchdog's own timeout may carry proof that the request never
|
|
1006
|
+
// reached the wire; the wire-state decision above still keys off the
|
|
1007
|
+
// error as thrown.
|
|
1008
|
+
const failure = asProvablyUnsent?.() ?? error;
|
|
1009
|
+
logFailed(requestId, requestData, failure, receiveTiming?.());
|
|
1010
|
+
throw failure;
|
|
894
1011
|
}
|
|
895
1012
|
finally {
|
|
896
1013
|
if (!sawTerminalEvent && !sourceExhausted && !streamFailed) {
|
|
@@ -908,29 +1025,6 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
908
1025
|
}
|
|
909
1026
|
return wrapped();
|
|
910
1027
|
}
|
|
911
|
-
async #warmupCodexUnary(request) {
|
|
912
|
-
if (!request) {
|
|
913
|
-
return undefined;
|
|
914
|
-
}
|
|
915
|
-
const response = await super.fetchUnaryResponse(request);
|
|
916
|
-
const responseId = getResponseIdFromResponse(response);
|
|
917
|
-
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, true);
|
|
918
|
-
return responseId;
|
|
919
|
-
}
|
|
920
|
-
async #warmupCodexStream(request) {
|
|
921
|
-
if (!request) {
|
|
922
|
-
return undefined;
|
|
923
|
-
}
|
|
924
|
-
let responseId;
|
|
925
|
-
for await (const event of super.rawStream(request)) {
|
|
926
|
-
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
927
|
-
if (eventResponseId) {
|
|
928
|
-
responseId = eventResponseId;
|
|
929
|
-
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), request.input, true);
|
|
930
|
-
}
|
|
931
|
-
}
|
|
932
|
-
return responseId;
|
|
933
|
-
}
|
|
934
1028
|
#prepareCodexServerHistoryRequest(request) {
|
|
935
1029
|
const explicitPreviousResponseId = typeof request.previousResponseId === 'string' && request.previousResponseId.length > 0
|
|
936
1030
|
? request.previousResponseId
|
|
@@ -960,28 +1054,33 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
960
1054
|
};
|
|
961
1055
|
}
|
|
962
1056
|
#getRememberedCodexResponseIdForRequest(request) {
|
|
963
|
-
if (this.#serverHistoryReuseDisabled) {
|
|
1057
|
+
if (this.#serverHistoryReuseDisabled || hasGenerateFalse(request)) {
|
|
964
1058
|
return undefined;
|
|
965
1059
|
}
|
|
966
1060
|
const key = this.#getCodexServerHistoryKey();
|
|
967
|
-
|
|
1061
|
+
const stored = key ? this.#lastLogicalRequestByKey.get(key) : undefined;
|
|
1062
|
+
if (!stored || !Array.isArray(request.input)) {
|
|
968
1063
|
return undefined;
|
|
969
1064
|
}
|
|
970
|
-
|
|
971
|
-
let endUserIndex = items.length;
|
|
972
|
-
while (endUserIndex > 0 && isUserInputMessage(items[endUserIndex - 1])) {
|
|
973
|
-
endUserIndex--;
|
|
974
|
-
}
|
|
975
|
-
return endUserIndex > 0 && isToolResultItem(items[endUserIndex - 1]);
|
|
976
|
-
};
|
|
977
|
-
const input = request.input;
|
|
978
|
-
const isInternalToolContinuation = Array.isArray(input) &&
|
|
979
|
-
input.length > 1 &&
|
|
980
|
-
input.some(isUserInputMessage) &&
|
|
981
|
-
hasToolResultBeforeTrailingUserMessages(input);
|
|
982
|
-
return isInternalToolContinuation ? this.codexPreviousResponseIds.get(key) : undefined;
|
|
1065
|
+
return isExactInputPrefix(request.input, stored.input) ? stored.responseId : undefined;
|
|
983
1066
|
}
|
|
984
1067
|
#prepareCodexServerHistoryRequests(request) {
|
|
1068
|
+
if (request?.disableChaining === true) {
|
|
1069
|
+
this.#forgetCodexResponseId();
|
|
1070
|
+
const { previousResponseId: _previousResponseId, ...rest } = request;
|
|
1071
|
+
const input = Array.isArray(rest.input) ? dropUnpairedCodexToolItems(rest.input) : rest.input;
|
|
1072
|
+
this.diagnosticLogger?.debug?.('Codex chain recovery bypassed warmup and previous_response_id', {
|
|
1073
|
+
eventType: 'codex.chain_recovery.warmup_bypassed',
|
|
1074
|
+
category: 'provider',
|
|
1075
|
+
phase: 'request_prepare',
|
|
1076
|
+
droppedOrphanCallIds: collectUnpairedToolResultCallIds(rest.input, input),
|
|
1077
|
+
});
|
|
1078
|
+
return { request: input === rest.input ? rest : { ...rest, input } };
|
|
1079
|
+
}
|
|
1080
|
+
if (RESPONSES_LITE_MODELS.has(this.modelId)) {
|
|
1081
|
+
const input = Array.isArray(request.input) ? dropUnpairedCodexToolItems(request.input) : request.input;
|
|
1082
|
+
return { request: input === request.input ? request : { ...request, input } };
|
|
1083
|
+
}
|
|
985
1084
|
const key = this.#getCodexServerHistoryKey();
|
|
986
1085
|
if (!key || hasGenerateFalse(request)) {
|
|
987
1086
|
return { request };
|
|
@@ -990,52 +1089,31 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
990
1089
|
if (preparedRequest.previousResponseId) {
|
|
991
1090
|
return { request: preparedRequest };
|
|
992
1091
|
}
|
|
1092
|
+
// No usable server-held anchor, so this request carries its full history.
|
|
1093
|
+
//
|
|
1094
|
+
// Codex's `generate:false` warmup is deliberately not used here. It is only
|
|
1095
|
+
// a win when it can be issued ahead of an upcoming turn, and this call site
|
|
1096
|
+
// sits immediately before the request it would prepare -- so it bought a
|
|
1097
|
+
// serial round trip while the paired generate call still reported the full
|
|
1098
|
+
// uncached prompt (`cached_tokens: 0`), counting the prompt twice. The
|
|
1099
|
+
// response ID that anchors the next turn comes from the generate response
|
|
1100
|
+
// either way, so dropping warmup costs no chaining.
|
|
993
1101
|
const input = Array.isArray(request.input) ? dropUnpairedCodexToolItems(request.input) : request.input;
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
deltaInput.push(item);
|
|
1010
|
-
}
|
|
1011
|
-
else if (isToolContinuationItem(item)) {
|
|
1012
|
-
warmupItems.push(item);
|
|
1013
|
-
}
|
|
1014
|
-
else {
|
|
1015
|
-
deltaInput.push(item);
|
|
1016
|
-
}
|
|
1017
|
-
}
|
|
1018
|
-
return {
|
|
1019
|
-
warmupRequest: withProviderOptions({
|
|
1020
|
-
...replayRequest,
|
|
1021
|
-
input: warmupItems,
|
|
1022
|
-
}, { generate: false }),
|
|
1023
|
-
request: {
|
|
1024
|
-
...replayRequest,
|
|
1025
|
-
input: deltaInput,
|
|
1026
|
-
},
|
|
1027
|
-
};
|
|
1028
|
-
}
|
|
1029
|
-
#withCodexPreviousResponseId(request, previousResponseId) {
|
|
1030
|
-
if (!previousResponseId) {
|
|
1031
|
-
return request;
|
|
1032
|
-
}
|
|
1033
|
-
return this.#prepareCodexServerHistoryRequest({
|
|
1034
|
-
...request,
|
|
1035
|
-
previousResponseId,
|
|
1036
|
-
});
|
|
1037
|
-
}
|
|
1038
|
-
#rememberCodexResponseId(responseId, output, input, recordChainAnchor = false) {
|
|
1102
|
+
return { request: input === request.input ? request : { ...request, input } };
|
|
1103
|
+
}
|
|
1104
|
+
/**
|
|
1105
|
+
* Records a response ID as the anchor for the next turn's `previous_response_id`.
|
|
1106
|
+
*
|
|
1107
|
+
* The chain anchor -- the set of function call IDs a response is known to hold
|
|
1108
|
+
* -- is recorded only for a full-history request, meaning one sent without
|
|
1109
|
+
* `previous_response_id`. That condition used to be implicit: only the
|
|
1110
|
+
* `generate:false` warmup leg recorded an anchor, and warmup always carried
|
|
1111
|
+
* complete history. Recording it from a chained request instead would be a
|
|
1112
|
+
* false-positive machine, because a chained request's `input` is only the
|
|
1113
|
+
* delta -- the orphan guard below would then reject every genuinely new tool
|
|
1114
|
+
* output as unknown to the chain.
|
|
1115
|
+
*/
|
|
1116
|
+
#rememberCodexResponseId(responseId, output, input, sentAsFullHistory = false) {
|
|
1039
1117
|
if (!responseId) {
|
|
1040
1118
|
return;
|
|
1041
1119
|
}
|
|
@@ -1043,8 +1121,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1043
1121
|
const key = this.#getCodexServerHistoryKey();
|
|
1044
1122
|
if (key) {
|
|
1045
1123
|
this.codexPreviousResponseIds.set(key, responseId);
|
|
1124
|
+
this.#lastLogicalRequestByKey.set(key, {
|
|
1125
|
+
input: Array.isArray(input) ? [...input] : this.#lastLogicalRequestByKey.get(key)?.input ?? [],
|
|
1126
|
+
output: Array.isArray(output) ? [...output] : [],
|
|
1127
|
+
responseId,
|
|
1128
|
+
});
|
|
1046
1129
|
}
|
|
1047
|
-
if (
|
|
1130
|
+
if (sentAsFullHistory && (Array.isArray(output) || Array.isArray(input))) {
|
|
1048
1131
|
this.codexFunctionCallIdsByResponseId.set(responseId, new Set([...collectFunctionCallIds(output), ...collectFunctionCallIds(input)]));
|
|
1049
1132
|
}
|
|
1050
1133
|
}
|
|
@@ -1092,6 +1175,36 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1092
1175
|
this.codexFunctionCallIdsByResponseId.clear();
|
|
1093
1176
|
this.codexTurnIdsBySession.clear();
|
|
1094
1177
|
this.chainedWireState.clear();
|
|
1178
|
+
this.#lastLogicalRequestByKey.clear();
|
|
1179
|
+
this.#lastSentChainFingerprint = undefined;
|
|
1180
|
+
}
|
|
1181
|
+
#fingerprintPreparedRequest(request, recoveryClass = 'chain_recovery') {
|
|
1182
|
+
return fingerprintChainRequest({
|
|
1183
|
+
provider: 'codex',
|
|
1184
|
+
model: this.modelId,
|
|
1185
|
+
previousResponseId: typeof request?.previousResponseId === 'string' ? request.previousResponseId : null,
|
|
1186
|
+
input: Array.isArray(request?.input) ? request.input : [],
|
|
1187
|
+
recoveryClass,
|
|
1188
|
+
});
|
|
1189
|
+
}
|
|
1190
|
+
#assertChainRequestMakesProgress(request) {
|
|
1191
|
+
const fingerprint = this.#fingerprintPreparedRequest(request);
|
|
1192
|
+
if (this.#lastRejectedChainFingerprint && this.#lastRejectedChainFingerprint === fingerprint) {
|
|
1193
|
+
this.diagnosticLogger?.warn?.('Codex chain recovery would repeat a rejected request', {
|
|
1194
|
+
eventType: 'retry.conversation_state_no_progress',
|
|
1195
|
+
category: 'retry',
|
|
1196
|
+
phase: 'request_prepare',
|
|
1197
|
+
});
|
|
1198
|
+
throw new ConversationStateNoProgressError();
|
|
1199
|
+
}
|
|
1200
|
+
this.#lastSentChainFingerprint = fingerprint;
|
|
1201
|
+
}
|
|
1202
|
+
#recordRejectedChainRequest(error) {
|
|
1203
|
+
if (isMissingServerToolOutputError(error) ||
|
|
1204
|
+
isOrphanedChainedToolOutputError(error) ||
|
|
1205
|
+
isPreviousResponseNotFoundError(error)) {
|
|
1206
|
+
this.#lastRejectedChainFingerprint = this.#lastSentChainFingerprint;
|
|
1207
|
+
}
|
|
1095
1208
|
}
|
|
1096
1209
|
#shouldForgetCodexServerHistory(error) {
|
|
1097
1210
|
// This rejects the new request before generation; it expires the socket,
|
|
@@ -1103,6 +1216,8 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1103
1216
|
const message = getErrorMessage(error);
|
|
1104
1217
|
return (isPreviousResponseNotFoundError(error) ||
|
|
1105
1218
|
message.includes('previous_response_not_found') ||
|
|
1219
|
+
isMissingServerToolOutputError(error) ||
|
|
1220
|
+
isOrphanedChainedToolOutputError(error) ||
|
|
1106
1221
|
isRetryableTransportError(error).transportFallback);
|
|
1107
1222
|
}
|
|
1108
1223
|
#getCodexServerHistoryKey() {
|
|
@@ -1115,7 +1230,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1115
1230
|
return undefined;
|
|
1116
1231
|
}
|
|
1117
1232
|
const sessionContext = this.sessionContextService?.getContext();
|
|
1118
|
-
const sessionId = sessionContext?.sessionId ?? requestId;
|
|
1233
|
+
const sessionId = sessionContext?.providerHistoryKey ?? sessionContext?.sessionId ?? requestId;
|
|
1119
1234
|
const threadId = sessionId;
|
|
1120
1235
|
const hasPreviousResponseId = typeof request?.previousResponseId === 'string' && request.previousResponseId.length > 0;
|
|
1121
1236
|
const turnId = hasPreviousResponseId ? this.codexTurnIdsBySession.get(sessionId) ?? randomUUID() : randomUUID();
|
|
@@ -1152,14 +1267,6 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1152
1267
|
},
|
|
1153
1268
|
};
|
|
1154
1269
|
}
|
|
1155
|
-
#getEffectiveCodexRequestAfterWarmup(originalRequest, preparedRequest, warmupResponseId) {
|
|
1156
|
-
if (!preparedRequest.warmupRequest) {
|
|
1157
|
-
return preparedRequest.request;
|
|
1158
|
-
}
|
|
1159
|
-
return warmupResponseId
|
|
1160
|
-
? this.#withCodexPreviousResponseId(preparedRequest.request, warmupResponseId)
|
|
1161
|
-
: originalRequest;
|
|
1162
|
-
}
|
|
1163
1270
|
#withoutCodexServerHistory(request) {
|
|
1164
1271
|
if (!request || typeof request !== 'object') {
|
|
1165
1272
|
return request;
|
|
@@ -1172,16 +1279,17 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1172
1279
|
let attemptedWithServerHistory = false;
|
|
1173
1280
|
try {
|
|
1174
1281
|
const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
|
|
1175
|
-
attemptedWithServerHistory = Boolean(preparedRequest.
|
|
1176
|
-
const
|
|
1177
|
-
|
|
1282
|
+
attemptedWithServerHistory = Boolean(preparedRequest.request?.previousResponseId);
|
|
1283
|
+
const effectiveRequest = preparedRequest.request;
|
|
1284
|
+
this.#assertChainRequestMakesProgress(effectiveRequest);
|
|
1178
1285
|
const response = await super.fetchUnaryResponse(effectiveRequest);
|
|
1179
1286
|
const responseId = getResponseIdFromResponse(response);
|
|
1180
|
-
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, effectiveRequest.
|
|
1287
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, !effectiveRequest.previousResponseId);
|
|
1181
1288
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
1182
1289
|
return response;
|
|
1183
1290
|
}
|
|
1184
1291
|
catch (error) {
|
|
1292
|
+
this.#recordRejectedChainRequest(error);
|
|
1185
1293
|
if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory) {
|
|
1186
1294
|
this.#forgetCodexResponseId();
|
|
1187
1295
|
if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
|
|
@@ -1190,7 +1298,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1190
1298
|
const fallbackRequest = this.#withoutCodexServerHistory(request);
|
|
1191
1299
|
const response = await super.fetchUnaryResponse(fallbackRequest);
|
|
1192
1300
|
const responseId = getResponseIdFromResponse(response);
|
|
1193
|
-
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input);
|
|
1301
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input, true);
|
|
1194
1302
|
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
1195
1303
|
return response;
|
|
1196
1304
|
}
|
|
@@ -1207,15 +1315,15 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1207
1315
|
let attemptedWithServerHistory = false;
|
|
1208
1316
|
try {
|
|
1209
1317
|
const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
|
|
1210
|
-
attemptedWithServerHistory = Boolean(preparedRequest.
|
|
1211
|
-
const
|
|
1212
|
-
|
|
1318
|
+
attemptedWithServerHistory = Boolean(preparedRequest.request?.previousResponseId);
|
|
1319
|
+
const effectiveRequest = preparedRequest.request;
|
|
1320
|
+
this.#assertChainRequestMakesProgress(effectiveRequest);
|
|
1213
1321
|
let responseId;
|
|
1214
1322
|
for await (const event of super.rawStream(effectiveRequest)) {
|
|
1215
1323
|
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
1216
1324
|
if (eventResponseId) {
|
|
1217
1325
|
responseId = eventResponseId;
|
|
1218
|
-
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), effectiveRequest.
|
|
1326
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), request.input, !effectiveRequest.previousResponseId);
|
|
1219
1327
|
}
|
|
1220
1328
|
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
|
|
1221
1329
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
@@ -1226,6 +1334,8 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1226
1334
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
1227
1335
|
}
|
|
1228
1336
|
catch (error) {
|
|
1337
|
+
this.#logWebSocketClosedEarly(error, receivedRawFrame);
|
|
1338
|
+
this.#recordRejectedChainRequest(error);
|
|
1229
1339
|
if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !receivedRawFrame) {
|
|
1230
1340
|
this.#forgetCodexResponseId();
|
|
1231
1341
|
if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
|
|
@@ -1239,7 +1349,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1239
1349
|
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
1240
1350
|
if (eventResponseId) {
|
|
1241
1351
|
responseId = eventResponseId;
|
|
1242
|
-
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input);
|
|
1352
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input, true);
|
|
1243
1353
|
}
|
|
1244
1354
|
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
|
|
1245
1355
|
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
@@ -1259,6 +1369,27 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1259
1369
|
throw asAmbiguousModelOutcome(error) ?? error;
|
|
1260
1370
|
}
|
|
1261
1371
|
}
|
|
1372
|
+
/**
|
|
1373
|
+
* The close code is the only field that distinguishes a network drop from a
|
|
1374
|
+
* deliberate server close, and it is discarded once the error is wrapped for
|
|
1375
|
+
* recovery. Record it here, where the retry decision that follows can be read
|
|
1376
|
+
* against it.
|
|
1377
|
+
*/
|
|
1378
|
+
#logWebSocketClosedEarly(error, receivedRawFrame) {
|
|
1379
|
+
const closed = findWebSocketClosedEarly(error);
|
|
1380
|
+
if (!closed)
|
|
1381
|
+
return;
|
|
1382
|
+
this.diagnosticLogger?.warn?.('Codex WebSocket closed before a terminal response event', {
|
|
1383
|
+
eventType: 'codex.websocket.closed_early',
|
|
1384
|
+
category: 'provider',
|
|
1385
|
+
model: this.modelId,
|
|
1386
|
+
closeCode: closed.closeCode ?? null,
|
|
1387
|
+
closeReason: closed.closeReason ?? null,
|
|
1388
|
+
unsentCount: closed.unsentCount,
|
|
1389
|
+
receivedRawFrame,
|
|
1390
|
+
provablyUnsent: error instanceof UnsentWebSocketRequestError,
|
|
1391
|
+
});
|
|
1392
|
+
}
|
|
1262
1393
|
buildResponsesCreateRequest(request, stream) {
|
|
1263
1394
|
const built = super.buildResponsesCreateRequest(request, stream);
|
|
1264
1395
|
const requestData = normalizeCodexRequestData(built.requestData, request, this.modelId, {
|
|
@@ -1342,13 +1473,14 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1342
1473
|
if (wireStateKey && wireStateToken && typeof response?.id === 'string' && response.id.length > 0) {
|
|
1343
1474
|
this.chainedWireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
|
|
1344
1475
|
}
|
|
1345
|
-
this.#logTrafficReceived(requestId, requestData, response);
|
|
1476
|
+
this.#logTrafficReceived(requestId, requestData, response, watchdog.receiveTiming());
|
|
1346
1477
|
return response;
|
|
1347
1478
|
}
|
|
1348
1479
|
catch (error) {
|
|
1349
1480
|
const timeoutError = watchdog.timeoutError();
|
|
1481
|
+
const receiveTiming = watchdog.receiveTiming();
|
|
1350
1482
|
watchdog.close();
|
|
1351
|
-
const failure = timeoutError ?? error;
|
|
1483
|
+
const failure = asProvablyUnsentTimeout(timeoutError, receiveTiming, updatedRequest) ?? timeoutError ?? error;
|
|
1352
1484
|
if (wireStateKey) {
|
|
1353
1485
|
if (isWebSocketConnectionLimitReachedError(failure)) {
|
|
1354
1486
|
if (wireStateToken)
|
|
@@ -1358,19 +1490,20 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1358
1490
|
this.chainedWireState.invalidate(wireStateKey);
|
|
1359
1491
|
}
|
|
1360
1492
|
}
|
|
1361
|
-
this.#logTrafficFailed(requestId, requestData, failure);
|
|
1493
|
+
this.#logTrafficFailed(requestId, requestData, failure, receiveTiming);
|
|
1362
1494
|
throw failure;
|
|
1363
1495
|
}
|
|
1364
1496
|
}
|
|
1365
1497
|
try {
|
|
1366
1498
|
const response = (await super.fetchResponse(updatedRequest, stream));
|
|
1367
1499
|
const patched = wrapCodexStream(watchdog.wrap(response), this.diagnosticLogger);
|
|
1368
|
-
return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken, updatedRequest.signal);
|
|
1500
|
+
return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken, updatedRequest.signal, () => watchdog.receiveTiming(), () => asProvablyUnsentTimeout(watchdog.timeoutError(), watchdog.receiveTiming(), updatedRequest));
|
|
1369
1501
|
}
|
|
1370
1502
|
catch (error) {
|
|
1371
1503
|
const timeoutError = watchdog.timeoutError();
|
|
1504
|
+
const receiveTiming = watchdog.receiveTiming();
|
|
1372
1505
|
watchdog.close();
|
|
1373
|
-
const failure = timeoutError ?? error;
|
|
1506
|
+
const failure = asProvablyUnsentTimeout(timeoutError, receiveTiming, updatedRequest) ?? timeoutError ?? error;
|
|
1374
1507
|
if (wireStateKey) {
|
|
1375
1508
|
if (isWebSocketConnectionLimitReachedError(failure)) {
|
|
1376
1509
|
if (wireStateToken)
|
|
@@ -1380,7 +1513,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1380
1513
|
this.chainedWireState.invalidate(wireStateKey);
|
|
1381
1514
|
}
|
|
1382
1515
|
}
|
|
1383
|
-
this.#logTrafficFailed(requestId, requestData, failure);
|
|
1516
|
+
this.#logTrafficFailed(requestId, requestData, failure, receiveTiming);
|
|
1384
1517
|
throw failure;
|
|
1385
1518
|
}
|
|
1386
1519
|
}
|