@qduc/term2 0.13.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 +142 -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/compact-command.d.ts +6 -0
- package/dist/commands/compact-command.d.ts.map +1 -0
- package/dist/commands/compact-command.js +12 -0
- package/dist/commands/compact-command.js.map +1 -0
- 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/ApplicationInputSurface.d.ts.map +1 -1
- package/dist/components/input/ApplicationInputSurface.js +2 -0
- package/dist/components/input/ApplicationInputSurface.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/MentorPoolMenuSession.d.ts +9 -0
- package/dist/components/input/MentorPoolMenuSession.d.ts.map +1 -0
- package/dist/components/input/MentorPoolMenuSession.js +131 -0
- package/dist/components/input/MentorPoolMenuSession.js.map +1 -0
- package/dist/components/input/MenuSurface.d.ts.map +1 -1
- package/dist/components/input/MenuSurface.js +16 -3
- package/dist/components/input/MenuSurface.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/SettingsMenuSession.d.ts.map +1 -1
- package/dist/components/input/SettingsMenuSession.js +35 -22
- package/dist/components/input/SettingsMenuSession.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/input/menu-controller.d.ts.map +1 -1
- package/dist/components/input/menu-controller.js +18 -1
- package/dist/components/input/menu-controller.js.map +1 -1
- package/dist/components/input/menu-registry.d.ts.map +1 -1
- package/dist/components/input/menu-registry.js +2 -0
- package/dist/components/input/menu-registry.js.map +1 -1
- package/dist/components/input/menu-types.d.ts +5 -0
- package/dist/components/input/menu-types.d.ts.map +1 -1
- package/dist/components/input/triggers.d.ts.map +1 -1
- package/dist/components/input/triggers.js +33 -0
- package/dist/components/input/triggers.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 +12 -1
- package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.js +208 -53
- 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/CopyMenu.d.ts +1 -0
- package/dist/components/menu/CopyMenu.d.ts.map +1 -1
- package/dist/components/menu/CopyMenu.js +15 -2
- package/dist/components/menu/CopyMenu.js.map +1 -1
- package/dist/components/menu/MentorPoolSelectionMenu.d.ts +13 -0
- package/dist/components/menu/MentorPoolSelectionMenu.d.ts.map +1 -0
- package/dist/components/menu/MentorPoolSelectionMenu.js +98 -0
- package/dist/components/menu/MentorPoolSelectionMenu.js.map +1 -0
- package/dist/components/menu/ModelSelectionMenu.d.ts +1 -0
- package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.js +22 -7
- 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/menu/SlashCommandMenu.d.ts.map +1 -1
- package/dist/components/menu/SlashCommandMenu.js +12 -9
- package/dist/components/menu/SlashCommandMenu.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.d.ts +1 -0
- package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
- package/dist/components/message/SubagentActivityMessage.js +18 -3
- 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/context/InputContext.d.ts +1 -1
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.js +2 -0
- package/dist/context/InputContext.js.map +1 -1
- package/dist/contracts/application-stream.d.ts +14 -0
- package/dist/contracts/application-stream.d.ts.map +1 -1
- package/dist/contracts/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/provider-input.d.ts +15 -0
- package/dist/contracts/provider-input.d.ts.map +1 -1
- package/dist/contracts/provider-input.js +6 -1
- package/dist/contracts/provider-input.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 +39 -3
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/use-app-commands.d.ts +5 -1
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +17 -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 +22 -4
- 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-mentor-pool-selection.d.ts +103 -0
- package/dist/hooks/use-mentor-pool-selection.d.ts.map +1 -0
- package/dist/hooks/use-mentor-pool-selection.js +642 -0
- package/dist/hooks/use-mentor-pool-selection.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-chat-service.d.ts +3 -6
- package/dist/lib/agent-chat-service.d.ts.map +1 -1
- package/dist/lib/agent-chat-service.js +11 -1
- package/dist/lib/agent-chat-service.js.map +1 -1
- package/dist/lib/agent-client.d.ts +23 -3
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +227 -20
- 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 +8 -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 +33 -7
- 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/context-compaction.d.ts +4 -0
- package/dist/prompts/context-compaction.d.ts.map +1 -0
- package/dist/prompts/context-compaction.js +18 -0
- package/dist/prompts/context-compaction.js.map +1 -0
- package/dist/prompts/context-compaction.ts +23 -0
- package/dist/prompts/explorer-delegation-contract.test.ts +44 -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 +4 -4
- 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/subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/subagent-delegation.js +4 -2
- package/dist/prompts/subagent-delegation.js.map +1 -1
- package/dist/prompts/subagent-delegation.test.ts +10 -0
- package/dist/prompts/subagent-delegation.ts +4 -2
- package/dist/prompts/subagents/explorer.md +16 -5
- package/dist/prompts/subagents/librarian.md +3 -1
- package/dist/prompts/subagents/mentor.md +2 -0
- package/dist/prompts/subagents/worker.md +3 -1
- package/dist/providers/aborted-stream-recorder.d.ts +20 -0
- package/dist/providers/aborted-stream-recorder.d.ts.map +1 -0
- package/dist/providers/aborted-stream-recorder.js +63 -0
- package/dist/providers/aborted-stream-recorder.js.map +1 -0
- package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
- package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -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 +10 -2
- package/dist/providers/codex-responses-model.d.ts.map +1 -1
- package/dist/providers/codex-responses-model.js +348 -184
- 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 +28 -4
- package/dist/providers/codex.provider.d.ts.map +1 -1
- package/dist/providers/codex.provider.js +106 -81
- 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 +643 -275
- package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
- package/dist/providers/model-catalog/catalog.generated.js +643 -275
- 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 +22 -4
- package/dist/providers/openai-responses-model.d.ts.map +1 -1
- package/dist/providers/openai-responses-model.js +126 -51
- 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.d.ts +2 -0
- package/dist/scripts/eval-context-compaction/runner.d.ts.map +1 -0
- package/dist/scripts/eval-context-compaction/runner.js +159 -0
- package/dist/scripts/eval-context-compaction/runner.js.map +1 -0
- 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 +61 -7
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.js +476 -141
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
- package/dist/services/agent-runtime/context-compaction/index.d.ts +56 -0
- package/dist/services/agent-runtime/context-compaction/index.d.ts.map +1 -0
- package/dist/services/agent-runtime/context-compaction/index.js +131 -0
- package/dist/services/agent-runtime/context-compaction/index.js.map +1 -0
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +81 -0
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -0
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +214 -0
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -0
- 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 +17 -2
- package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
- package/dist/services/agent-runtime/generation-guard.js +41 -4
- 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 +58 -2
- package/dist/services/conversation/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation/conversation-message-projection.d.ts.map +1 -1
- package/dist/services/conversation/conversation-message-projection.js +7 -3
- package/dist/services/conversation/conversation-message-projection.js.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 +33 -3
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +149 -1
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/conversation-state-projector.d.ts +9 -2
- package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
- package/dist/services/conversation/conversation-state-projector.js +51 -6
- package/dist/services/conversation/conversation-state-projector.js.map +1 -1
- package/dist/services/conversation/conversation-state-schema.d.ts +8 -4
- package/dist/services/conversation/conversation-state-schema.d.ts.map +1 -1
- package/dist/services/conversation/conversation-state-schema.js +24 -2
- package/dist/services/conversation/conversation-state-schema.js.map +1 -1
- package/dist/services/conversation/conversation-store.d.ts +2 -0
- package/dist/services/conversation/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation/conversation-store.js +8 -0
- package/dist/services/conversation/conversation-store.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 +30 -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 +36 -2
- 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 +18 -2
- package/dist/services/logging/provider-traffic.d.ts.map +1 -1
- package/dist/services/logging/provider-traffic.js +293 -142
- 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 +10 -9
- 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 +111 -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 +10 -0
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +130 -7
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-manager.d.ts +3 -0
- package/dist/services/session/session-manager.d.ts.map +1 -1
- package/dist/services/session/session-manager.js +6 -0
- package/dist/services/session/session-manager.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 +7 -1
- package/dist/services/session/session-stream-processor.js.map +1 -1
- package/dist/services/session/session-tool-tracker.d.ts +17 -6
- package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
- package/dist/services/session/session-tool-tracker.js +19 -7
- package/dist/services/session/session-tool-tracker.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 +122 -2
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +120 -5
- 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 +18 -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 +44 -8
- 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 +60 -23
- 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 +121 -16
- 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 +99 -35
- package/dist/services/subagents/nested-runner.js.map +1 -1
- package/dist/services/subagents/role-loader.d.ts +6 -0
- package/dist/services/subagents/role-loader.d.ts.map +1 -1
- package/dist/services/subagents/role-loader.js +6 -1
- package/dist/services/subagents/role-loader.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 +20 -1
- package/dist/services/subagents/utils.d.ts.map +1 -1
- package/dist/services/subagents/utils.js +40 -2
- package/dist/services/subagents/utils.js.map +1 -1
- package/dist/services/tool-execution-ledger.d.ts +26 -1
- package/dist/services/tool-execution-ledger.d.ts.map +1 -1
- package/dist/services/tool-execution-ledger.js +103 -33
- package/dist/services/tool-execution-ledger.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 +3 -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 +7 -3
- 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 +10 -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 +15 -7
- 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 +64 -17
- 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 +20 -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 +10 -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 +11 -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 +5 -0
- package/dist/tools/file/read-file.d.ts.map +1 -1
- package/dist/tools/file/read-file.js +44 -17
- 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 +91 -25
- package/dist/tools/system/shell.js.map +1 -1
- package/dist/tools/types.d.ts +9 -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 +12 -14
- 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 +3 -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 +73 -3
- 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/bound-tool-result.d.ts +42 -0
- package/dist/utils/output/bound-tool-result.d.ts.map +1 -0
- package/dist/utils/output/bound-tool-result.js +81 -0
- package/dist/utils/output/bound-tool-result.js.map +1 -0
- 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 +122 -8
- 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 +11 -0
- package/dist/utils/shell/shell-output.d.ts.map +1 -1
- package/dist/utils/shell/shell-output.js +24 -10
- 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,14 +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
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { AbortedStreamRecorder } from './aborted-stream-recorder.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';
|
|
8
10
|
import { ChainedWireState } from './chained-wire-state.js';
|
|
9
11
|
import { LunaResponsesLiteWireProtocol } from './luna-responses-lite-wire-protocol.js';
|
|
10
12
|
import { captureProviderRequest } from './provider-request-capture.js';
|
|
11
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';
|
|
16
|
+
import { markContextCompactionFailure, resolveContextManagement } from './openai-responses-model.js';
|
|
17
|
+
import { ResponsesWebSocketSessions } from './responses-websocket-sessions.js';
|
|
12
18
|
const DUMMY_PROVIDER_TRAFFIC = {
|
|
13
19
|
recordRequestStart() { },
|
|
14
20
|
async recordResponseReceived() { },
|
|
@@ -23,19 +29,38 @@ function toCodexToolChoice(choice) {
|
|
|
23
29
|
}
|
|
24
30
|
throw new Error('Unsupported Codex tool choice.');
|
|
25
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;
|
|
26
41
|
/** Provider-owned transport seam used by Codex's HTTP and WebSocket models. */
|
|
27
42
|
export class CodexResponsesTransport {
|
|
28
43
|
client;
|
|
29
44
|
model;
|
|
30
45
|
websocket;
|
|
31
|
-
|
|
46
|
+
options;
|
|
47
|
+
#sessions = new ResponsesWebSocketSessions((headers) => new ResponsesWS(this.client, headers ? { headers } : undefined));
|
|
48
|
+
constructor(client = {}, model = '', websocket = false, options = {}) {
|
|
32
49
|
this.client = client;
|
|
33
50
|
this.model = model;
|
|
34
51
|
this.websocket = websocket;
|
|
52
|
+
this.options = options;
|
|
53
|
+
}
|
|
54
|
+
close() {
|
|
55
|
+
this.#sessions.close();
|
|
35
56
|
}
|
|
36
57
|
buildResponsesCreateRequest(request, stream) {
|
|
37
58
|
const providerOptions = request.providerOptions ?? {};
|
|
38
|
-
|
|
59
|
+
// contextCompaction is an app-level option; context_management is capability-gated
|
|
60
|
+
// below. Do not let either leak through native provider data or extraBody.
|
|
61
|
+
const { extraBody, extraHeaders: _extraHeaders, contextCompaction: _contextCompaction, ...nativeProviderData } = providerOptions;
|
|
62
|
+
const { context_management: _reservedContextManagement, ...safeExtraBody } = (extraBody ?? {});
|
|
63
|
+
const contextManagement = resolveContextManagement(providerOptions, this.model, this.options.supportsContextCompaction === true, this.options.contextCompactionSessionState);
|
|
39
64
|
return {
|
|
40
65
|
requestData: {
|
|
41
66
|
model: this.model,
|
|
@@ -51,55 +76,96 @@ export class CodexResponsesTransport {
|
|
|
51
76
|
...(request.maxTokens !== undefined ? { max_output_tokens: request.maxTokens } : {}),
|
|
52
77
|
...(request.reasoning !== undefined ? { reasoning: request.reasoning } : {}),
|
|
53
78
|
...nativeProviderData,
|
|
54
|
-
...
|
|
79
|
+
...safeExtraBody,
|
|
55
80
|
...(request.previousResponseId ? { previous_response_id: request.previousResponseId } : {}),
|
|
56
81
|
...(request.codex?.promptCacheKey ? { prompt_cache_key: request.codex.promptCacheKey } : {}),
|
|
57
82
|
...(request.codex?.include ? { include: request.codex.include } : {}),
|
|
83
|
+
...(contextManagement ? { context_management: contextManagement } : {}),
|
|
58
84
|
},
|
|
59
85
|
};
|
|
60
86
|
}
|
|
61
87
|
async fetchResponse(request, stream, requestData) {
|
|
62
|
-
|
|
63
|
-
if (
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const headers = request.providerOptions?.extraHeaders;
|
|
67
|
-
const socket = new ResponsesWS(this.client, headers ? { headers: headers } : undefined);
|
|
68
|
-
const messages = socket.stream();
|
|
69
|
-
const requestEvent = { type: 'response.create', ...requestData };
|
|
70
|
-
if (socket.socket?.readyState === 0) {
|
|
71
|
-
socket.socket.once('open', () => socket.send(requestEvent));
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
socket.send(requestEvent);
|
|
75
|
-
}
|
|
76
|
-
return (async function* () {
|
|
77
|
-
try {
|
|
78
|
-
for await (const message of messages) {
|
|
79
|
-
if (message.type === 'message')
|
|
80
|
-
yield message.message;
|
|
81
|
-
else if (message.event)
|
|
82
|
-
yield message.event;
|
|
83
|
-
else if (message.type === 'error')
|
|
84
|
-
throw message.error;
|
|
85
|
-
else if (message.type === 'close')
|
|
86
|
-
throw new Error('Codex WebSocket connection closed before a terminal response event.');
|
|
87
|
-
}
|
|
88
|
+
try {
|
|
89
|
+
if (stream && this.websocket) {
|
|
90
|
+
if (!(this.client instanceof OpenAI) && typeof this.client?.responses?.create === 'function') {
|
|
91
|
+
return this.client.responses.create(requestData);
|
|
88
92
|
}
|
|
89
|
-
|
|
93
|
+
const headers = request.providerOptions?.extraHeaders;
|
|
94
|
+
const socket = this.#sessions.acquire(headers);
|
|
95
|
+
const messages = socket.stream();
|
|
96
|
+
const requestEvent = { type: 'response.create', ...requestData };
|
|
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);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
dispatchRequestEvent();
|
|
113
|
+
}
|
|
114
|
+
const sessionState = this.options.contextCompactionSessionState;
|
|
115
|
+
const sessions = this.#sessions;
|
|
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
|
+
};
|
|
90
125
|
try {
|
|
91
|
-
|
|
126
|
+
for await (const message of messages) {
|
|
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') {
|
|
142
|
+
throw message.error;
|
|
143
|
+
}
|
|
144
|
+
else if (message.type === 'close') {
|
|
145
|
+
throw webSocketCloseError(message, readWebSocketDispatch(request));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
92
148
|
}
|
|
93
|
-
catch {
|
|
94
|
-
|
|
149
|
+
catch (error) {
|
|
150
|
+
release(false);
|
|
151
|
+
const normalizedError = normalizeExplicitCodexServerError(error);
|
|
152
|
+
markContextCompactionFailure(normalizedError, request, sessionState);
|
|
153
|
+
throw normalizedError;
|
|
95
154
|
}
|
|
96
|
-
|
|
97
|
-
|
|
155
|
+
finally {
|
|
156
|
+
release(terminalReceived);
|
|
157
|
+
}
|
|
158
|
+
})();
|
|
159
|
+
}
|
|
160
|
+
return await this.client.responses.create(requestData, {
|
|
161
|
+
...(request.signal ? { signal: request.signal } : {}),
|
|
162
|
+
...(request.providerOptions?.extraHeaders ? { headers: request.providerOptions.extraHeaders } : {}),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
markContextCompactionFailure(error, request, this.options.contextCompactionSessionState);
|
|
167
|
+
throw error;
|
|
98
168
|
}
|
|
99
|
-
return this.client.responses.create(requestData, {
|
|
100
|
-
...(request.signal ? { signal: request.signal } : {}),
|
|
101
|
-
...(request.providerOptions?.extraHeaders ? { headers: request.providerOptions.extraHeaders } : {}),
|
|
102
|
-
});
|
|
103
169
|
}
|
|
104
170
|
}
|
|
105
171
|
export class OpenAIResponsesModel {
|
|
@@ -111,6 +177,9 @@ export class OpenAIResponsesModel {
|
|
|
111
177
|
this.model = model;
|
|
112
178
|
this.transport = transport ?? new CodexResponsesTransport(client, model, websocket);
|
|
113
179
|
}
|
|
180
|
+
async close() {
|
|
181
|
+
this.transport.close?.();
|
|
182
|
+
}
|
|
114
183
|
buildResponsesCreateRequest(request, stream) {
|
|
115
184
|
const built = this.transport.buildResponsesCreateRequest(request, stream);
|
|
116
185
|
if (this.transport instanceof CodexResponsesTransport && built?.requestData) {
|
|
@@ -127,16 +196,47 @@ export class OpenAIResponsesModel {
|
|
|
127
196
|
}
|
|
128
197
|
async *rawStream(request) {
|
|
129
198
|
const source = await this.fetchResponse(request, true);
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
+
}
|
|
140
240
|
}
|
|
141
241
|
}
|
|
142
242
|
async *stream(request) {
|
|
@@ -318,19 +418,29 @@ function toCodexUsage(rawUsage) {
|
|
|
318
418
|
function codexString(value) {
|
|
319
419
|
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
320
420
|
}
|
|
321
|
-
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';
|
|
322
422
|
const SUSPICIOUS_RECONSTRUCTED_OUTPUT_ITEM_COUNT = 20;
|
|
323
|
-
const TERMINAL_RESPONSE_EVENT_TYPES = new Set([
|
|
324
|
-
'response.completed',
|
|
325
|
-
'response.failed',
|
|
326
|
-
'response.incomplete',
|
|
327
|
-
'response.error',
|
|
328
|
-
]);
|
|
329
423
|
const WS_RESPONSE_MODEL_CLASS = 'OpenAIResponsesWSModel';
|
|
330
424
|
const WS_RESPONSE_WRAPPER_CLASS = 'CodexResponsesWSModel';
|
|
331
425
|
const RESPONSES_LITE_MODELS = new Set(['gpt-5.6-luna']);
|
|
332
426
|
const asRecord = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : null;
|
|
333
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
|
+
}
|
|
334
444
|
const CODEX_REPLAY_ITEM_TYPES_WITHOUT_IDS = new Set([
|
|
335
445
|
'message',
|
|
336
446
|
'reasoning',
|
|
@@ -577,6 +687,15 @@ const collectFunctionCallIds = (input) => {
|
|
|
577
687
|
}
|
|
578
688
|
return ids;
|
|
579
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
|
+
};
|
|
580
699
|
const dropUnpairedCodexToolItems = (history) => {
|
|
581
700
|
const callIds = new Set();
|
|
582
701
|
const resultIds = new Set();
|
|
@@ -702,10 +821,26 @@ const isDefinitelyUnsentWebSocketError = (error, seen = new Set()) => {
|
|
|
702
821
|
}
|
|
703
822
|
return isDefinitelyUnsentWebSocketError(record.message, seen) || isDefinitelyUnsentWebSocketError(record.cause, seen);
|
|
704
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
|
+
};
|
|
705
840
|
const asAmbiguousModelOutcome = (error) => {
|
|
706
841
|
// Connection never carried the request: safe to let outer retry / transport
|
|
707
842
|
// fallback policies decide. Do not pretend the model may have run.
|
|
708
|
-
if (isDefinitelyUnsentWebSocketError(error)) {
|
|
843
|
+
if (error instanceof UnsentWebSocketRequestError || isDefinitelyUnsentWebSocketError(error)) {
|
|
709
844
|
return undefined;
|
|
710
845
|
}
|
|
711
846
|
// Incomplete stream terminals keep transportFallback=false so Codex does not
|
|
@@ -720,13 +855,6 @@ const asAmbiguousModelOutcome = (error) => {
|
|
|
720
855
|
return undefined;
|
|
721
856
|
};
|
|
722
857
|
const hasGenerateFalse = (request) => request.providerOptions?.generate === false;
|
|
723
|
-
const withProviderOptions = (request, providerOptions) => ({
|
|
724
|
-
...request,
|
|
725
|
-
providerOptions: {
|
|
726
|
-
...request.providerOptions,
|
|
727
|
-
...providerOptions,
|
|
728
|
-
},
|
|
729
|
-
});
|
|
730
858
|
export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
731
859
|
modelId;
|
|
732
860
|
tokenManager;
|
|
@@ -735,6 +863,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
735
863
|
codexFunctionCallIdsByResponseId = new Map();
|
|
736
864
|
codexTurnIdsBySession = new Map();
|
|
737
865
|
#serverHistoryReuseDisabled = false;
|
|
866
|
+
#lastSentChainFingerprint;
|
|
867
|
+
#lastRejectedChainFingerprint;
|
|
868
|
+
#lastLogicalRequestByKey = new Map();
|
|
738
869
|
providerTraffic;
|
|
739
870
|
diagnosticLogger;
|
|
740
871
|
sessionContextService;
|
|
@@ -785,7 +916,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
785
916
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
786
917
|
});
|
|
787
918
|
}
|
|
788
|
-
#logTrafficReceived(requestId, requestData, response) {
|
|
919
|
+
#logTrafficReceived(requestId, requestData, response, receiveTiming) {
|
|
789
920
|
const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
790
921
|
const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
|
|
791
922
|
providerTraffic.recordResponseReceived({
|
|
@@ -795,11 +926,12 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
795
926
|
status: 200,
|
|
796
927
|
response: response,
|
|
797
928
|
transport: 'websocket',
|
|
929
|
+
...(receiveTiming ? { receiveTiming } : {}),
|
|
798
930
|
modelClass: WS_RESPONSE_MODEL_CLASS,
|
|
799
931
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
800
932
|
});
|
|
801
933
|
}
|
|
802
|
-
#logTrafficFailed(requestId, requestData, error) {
|
|
934
|
+
#logTrafficFailed(requestId, requestData, error, receiveTiming) {
|
|
803
935
|
const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
804
936
|
const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
|
|
805
937
|
providerTraffic.recordRequestFailed({
|
|
@@ -807,11 +939,12 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
807
939
|
provider: 'codex',
|
|
808
940
|
model,
|
|
809
941
|
error,
|
|
942
|
+
...(receiveTiming ? { receiveTiming } : {}),
|
|
810
943
|
modelClass: WS_RESPONSE_MODEL_CLASS,
|
|
811
944
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
812
945
|
});
|
|
813
946
|
}
|
|
814
|
-
#logTrafficClosed(requestId, requestData, outcome, eventCount) {
|
|
947
|
+
#logTrafficClosed(requestId, requestData, outcome, eventCount, diagnostics) {
|
|
815
948
|
const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
816
949
|
const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
|
|
817
950
|
providerTraffic.recordResponseClosed({
|
|
@@ -820,11 +953,12 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
820
953
|
model,
|
|
821
954
|
outcome,
|
|
822
955
|
eventCount,
|
|
956
|
+
...(diagnostics ? { diagnostics } : {}),
|
|
823
957
|
modelClass: WS_RESPONSE_MODEL_CLASS,
|
|
824
958
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
825
959
|
});
|
|
826
960
|
}
|
|
827
|
-
async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal) {
|
|
961
|
+
async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal, receiveTiming, asProvablyUnsent) {
|
|
828
962
|
const logReceived = this.#logTrafficReceived.bind(this);
|
|
829
963
|
const logFailed = this.#logTrafficFailed.bind(this);
|
|
830
964
|
const logClosed = this.#logTrafficClosed.bind(this);
|
|
@@ -834,9 +968,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
834
968
|
let sourceExhausted = false;
|
|
835
969
|
let streamFailed = false;
|
|
836
970
|
let eventCount = 0;
|
|
971
|
+
// A stream cut off mid-flight produces no payload to summarize later, so
|
|
972
|
+
// the transcript is retained until a terminal event proves it redundant.
|
|
973
|
+
const recorder = new AbortedStreamRecorder();
|
|
837
974
|
try {
|
|
838
975
|
for await (const event of responseStream) {
|
|
839
976
|
eventCount += 1;
|
|
977
|
+
recorder.observe(event);
|
|
840
978
|
if (event &&
|
|
841
979
|
typeof event === 'object' &&
|
|
842
980
|
(event.type === 'response.completed' ||
|
|
@@ -848,11 +986,12 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
848
986
|
typeof event === 'object' &&
|
|
849
987
|
(event.type === 'response.completed' || event.type === 'response.incomplete') &&
|
|
850
988
|
event.response) {
|
|
989
|
+
recorder.release();
|
|
851
990
|
const response = event.response;
|
|
852
991
|
if (wireStateKey && wireStateToken && typeof response.id === 'string' && response.id.length > 0) {
|
|
853
992
|
wireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
|
|
854
993
|
}
|
|
855
|
-
logReceived(requestId, requestData, response);
|
|
994
|
+
logReceived(requestId, requestData, response, receiveTiming?.());
|
|
856
995
|
}
|
|
857
996
|
yield event;
|
|
858
997
|
}
|
|
@@ -863,13 +1002,22 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
863
1002
|
if (wireStateKey && !isWebSocketConnectionLimitReachedError(error)) {
|
|
864
1003
|
wireState.invalidate(wireStateKey);
|
|
865
1004
|
}
|
|
866
|
-
|
|
867
|
-
|
|
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;
|
|
868
1011
|
}
|
|
869
1012
|
finally {
|
|
870
1013
|
if (!sawTerminalEvent && !sourceExhausted && !streamFailed) {
|
|
871
|
-
|
|
1014
|
+
// A consumer-closed stream ended because we stopped reading, which is
|
|
1015
|
+
// ordinary; its partial output stays out of the log. An abort is the
|
|
1016
|
+
// failure we cannot otherwise explain, so it keeps the transcript.
|
|
1017
|
+
const outcome = signal?.aborted ? 'aborted' : 'consumer_closed';
|
|
1018
|
+
logClosed(requestId, requestData, outcome, eventCount, outcome === 'aborted' ? recorder.diagnostics() : undefined);
|
|
872
1019
|
}
|
|
1020
|
+
recorder.release();
|
|
873
1021
|
if (wireStateKey && wireStateToken) {
|
|
874
1022
|
wireState.abandon(wireStateKey, wireStateToken);
|
|
875
1023
|
}
|
|
@@ -877,29 +1025,6 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
877
1025
|
}
|
|
878
1026
|
return wrapped();
|
|
879
1027
|
}
|
|
880
|
-
async #warmupCodexUnary(request) {
|
|
881
|
-
if (!request) {
|
|
882
|
-
return undefined;
|
|
883
|
-
}
|
|
884
|
-
const response = await super.fetchUnaryResponse(request);
|
|
885
|
-
const responseId = getResponseIdFromResponse(response);
|
|
886
|
-
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, true);
|
|
887
|
-
return responseId;
|
|
888
|
-
}
|
|
889
|
-
async #warmupCodexStream(request) {
|
|
890
|
-
if (!request) {
|
|
891
|
-
return undefined;
|
|
892
|
-
}
|
|
893
|
-
let responseId;
|
|
894
|
-
for await (const event of super.rawStream(request)) {
|
|
895
|
-
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
896
|
-
if (eventResponseId) {
|
|
897
|
-
responseId = eventResponseId;
|
|
898
|
-
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), request.input, true);
|
|
899
|
-
}
|
|
900
|
-
}
|
|
901
|
-
return responseId;
|
|
902
|
-
}
|
|
903
1028
|
#prepareCodexServerHistoryRequest(request) {
|
|
904
1029
|
const explicitPreviousResponseId = typeof request.previousResponseId === 'string' && request.previousResponseId.length > 0
|
|
905
1030
|
? request.previousResponseId
|
|
@@ -929,28 +1054,33 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
929
1054
|
};
|
|
930
1055
|
}
|
|
931
1056
|
#getRememberedCodexResponseIdForRequest(request) {
|
|
932
|
-
if (this.#serverHistoryReuseDisabled) {
|
|
1057
|
+
if (this.#serverHistoryReuseDisabled || hasGenerateFalse(request)) {
|
|
933
1058
|
return undefined;
|
|
934
1059
|
}
|
|
935
1060
|
const key = this.#getCodexServerHistoryKey();
|
|
936
|
-
|
|
1061
|
+
const stored = key ? this.#lastLogicalRequestByKey.get(key) : undefined;
|
|
1062
|
+
if (!stored || !Array.isArray(request.input)) {
|
|
937
1063
|
return undefined;
|
|
938
1064
|
}
|
|
939
|
-
|
|
940
|
-
let endUserIndex = items.length;
|
|
941
|
-
while (endUserIndex > 0 && isUserInputMessage(items[endUserIndex - 1])) {
|
|
942
|
-
endUserIndex--;
|
|
943
|
-
}
|
|
944
|
-
return endUserIndex > 0 && isToolResultItem(items[endUserIndex - 1]);
|
|
945
|
-
};
|
|
946
|
-
const input = request.input;
|
|
947
|
-
const isInternalToolContinuation = Array.isArray(input) &&
|
|
948
|
-
input.length > 1 &&
|
|
949
|
-
input.some(isUserInputMessage) &&
|
|
950
|
-
hasToolResultBeforeTrailingUserMessages(input);
|
|
951
|
-
return isInternalToolContinuation ? this.codexPreviousResponseIds.get(key) : undefined;
|
|
1065
|
+
return isExactInputPrefix(request.input, stored.input) ? stored.responseId : undefined;
|
|
952
1066
|
}
|
|
953
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
|
+
}
|
|
954
1084
|
const key = this.#getCodexServerHistoryKey();
|
|
955
1085
|
if (!key || hasGenerateFalse(request)) {
|
|
956
1086
|
return { request };
|
|
@@ -959,52 +1089,31 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
959
1089
|
if (preparedRequest.previousResponseId) {
|
|
960
1090
|
return { request: preparedRequest };
|
|
961
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.
|
|
962
1101
|
const input = Array.isArray(request.input) ? dropUnpairedCodexToolItems(request.input) : request.input;
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
deltaInput.push(item);
|
|
979
|
-
}
|
|
980
|
-
else if (isToolContinuationItem(item)) {
|
|
981
|
-
warmupItems.push(item);
|
|
982
|
-
}
|
|
983
|
-
else {
|
|
984
|
-
deltaInput.push(item);
|
|
985
|
-
}
|
|
986
|
-
}
|
|
987
|
-
return {
|
|
988
|
-
warmupRequest: withProviderOptions({
|
|
989
|
-
...replayRequest,
|
|
990
|
-
input: warmupItems,
|
|
991
|
-
}, { generate: false }),
|
|
992
|
-
request: {
|
|
993
|
-
...replayRequest,
|
|
994
|
-
input: deltaInput,
|
|
995
|
-
},
|
|
996
|
-
};
|
|
997
|
-
}
|
|
998
|
-
#withCodexPreviousResponseId(request, previousResponseId) {
|
|
999
|
-
if (!previousResponseId) {
|
|
1000
|
-
return request;
|
|
1001
|
-
}
|
|
1002
|
-
return this.#prepareCodexServerHistoryRequest({
|
|
1003
|
-
...request,
|
|
1004
|
-
previousResponseId,
|
|
1005
|
-
});
|
|
1006
|
-
}
|
|
1007
|
-
#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) {
|
|
1008
1117
|
if (!responseId) {
|
|
1009
1118
|
return;
|
|
1010
1119
|
}
|
|
@@ -1012,8 +1121,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1012
1121
|
const key = this.#getCodexServerHistoryKey();
|
|
1013
1122
|
if (key) {
|
|
1014
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
|
+
});
|
|
1015
1129
|
}
|
|
1016
|
-
if (
|
|
1130
|
+
if (sentAsFullHistory && (Array.isArray(output) || Array.isArray(input))) {
|
|
1017
1131
|
this.codexFunctionCallIdsByResponseId.set(responseId, new Set([...collectFunctionCallIds(output), ...collectFunctionCallIds(input)]));
|
|
1018
1132
|
}
|
|
1019
1133
|
}
|
|
@@ -1061,6 +1175,36 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1061
1175
|
this.codexFunctionCallIdsByResponseId.clear();
|
|
1062
1176
|
this.codexTurnIdsBySession.clear();
|
|
1063
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
|
+
}
|
|
1064
1208
|
}
|
|
1065
1209
|
#shouldForgetCodexServerHistory(error) {
|
|
1066
1210
|
// This rejects the new request before generation; it expires the socket,
|
|
@@ -1072,6 +1216,8 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1072
1216
|
const message = getErrorMessage(error);
|
|
1073
1217
|
return (isPreviousResponseNotFoundError(error) ||
|
|
1074
1218
|
message.includes('previous_response_not_found') ||
|
|
1219
|
+
isMissingServerToolOutputError(error) ||
|
|
1220
|
+
isOrphanedChainedToolOutputError(error) ||
|
|
1075
1221
|
isRetryableTransportError(error).transportFallback);
|
|
1076
1222
|
}
|
|
1077
1223
|
#getCodexServerHistoryKey() {
|
|
@@ -1084,7 +1230,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1084
1230
|
return undefined;
|
|
1085
1231
|
}
|
|
1086
1232
|
const sessionContext = this.sessionContextService?.getContext();
|
|
1087
|
-
const sessionId = sessionContext?.sessionId ?? requestId;
|
|
1233
|
+
const sessionId = sessionContext?.providerHistoryKey ?? sessionContext?.sessionId ?? requestId;
|
|
1088
1234
|
const threadId = sessionId;
|
|
1089
1235
|
const hasPreviousResponseId = typeof request?.previousResponseId === 'string' && request.previousResponseId.length > 0;
|
|
1090
1236
|
const turnId = hasPreviousResponseId ? this.codexTurnIdsBySession.get(sessionId) ?? randomUUID() : randomUUID();
|
|
@@ -1121,14 +1267,6 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1121
1267
|
},
|
|
1122
1268
|
};
|
|
1123
1269
|
}
|
|
1124
|
-
#getEffectiveCodexRequestAfterWarmup(originalRequest, preparedRequest, warmupResponseId) {
|
|
1125
|
-
if (!preparedRequest.warmupRequest) {
|
|
1126
|
-
return preparedRequest.request;
|
|
1127
|
-
}
|
|
1128
|
-
return warmupResponseId
|
|
1129
|
-
? this.#withCodexPreviousResponseId(preparedRequest.request, warmupResponseId)
|
|
1130
|
-
: originalRequest;
|
|
1131
|
-
}
|
|
1132
1270
|
#withoutCodexServerHistory(request) {
|
|
1133
1271
|
if (!request || typeof request !== 'object') {
|
|
1134
1272
|
return request;
|
|
@@ -1141,16 +1279,17 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1141
1279
|
let attemptedWithServerHistory = false;
|
|
1142
1280
|
try {
|
|
1143
1281
|
const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
|
|
1144
|
-
attemptedWithServerHistory = Boolean(preparedRequest.
|
|
1145
|
-
const
|
|
1146
|
-
|
|
1282
|
+
attemptedWithServerHistory = Boolean(preparedRequest.request?.previousResponseId);
|
|
1283
|
+
const effectiveRequest = preparedRequest.request;
|
|
1284
|
+
this.#assertChainRequestMakesProgress(effectiveRequest);
|
|
1147
1285
|
const response = await super.fetchUnaryResponse(effectiveRequest);
|
|
1148
1286
|
const responseId = getResponseIdFromResponse(response);
|
|
1149
|
-
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, effectiveRequest.
|
|
1287
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, !effectiveRequest.previousResponseId);
|
|
1150
1288
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
1151
1289
|
return response;
|
|
1152
1290
|
}
|
|
1153
1291
|
catch (error) {
|
|
1292
|
+
this.#recordRejectedChainRequest(error);
|
|
1154
1293
|
if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory) {
|
|
1155
1294
|
this.#forgetCodexResponseId();
|
|
1156
1295
|
if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
|
|
@@ -1159,7 +1298,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1159
1298
|
const fallbackRequest = this.#withoutCodexServerHistory(request);
|
|
1160
1299
|
const response = await super.fetchUnaryResponse(fallbackRequest);
|
|
1161
1300
|
const responseId = getResponseIdFromResponse(response);
|
|
1162
|
-
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input);
|
|
1301
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input, true);
|
|
1163
1302
|
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
1164
1303
|
return response;
|
|
1165
1304
|
}
|
|
@@ -1176,15 +1315,15 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1176
1315
|
let attemptedWithServerHistory = false;
|
|
1177
1316
|
try {
|
|
1178
1317
|
const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
|
|
1179
|
-
attemptedWithServerHistory = Boolean(preparedRequest.
|
|
1180
|
-
const
|
|
1181
|
-
|
|
1318
|
+
attemptedWithServerHistory = Boolean(preparedRequest.request?.previousResponseId);
|
|
1319
|
+
const effectiveRequest = preparedRequest.request;
|
|
1320
|
+
this.#assertChainRequestMakesProgress(effectiveRequest);
|
|
1182
1321
|
let responseId;
|
|
1183
1322
|
for await (const event of super.rawStream(effectiveRequest)) {
|
|
1184
1323
|
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
1185
1324
|
if (eventResponseId) {
|
|
1186
1325
|
responseId = eventResponseId;
|
|
1187
|
-
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), effectiveRequest.
|
|
1326
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), request.input, !effectiveRequest.previousResponseId);
|
|
1188
1327
|
}
|
|
1189
1328
|
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
|
|
1190
1329
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
@@ -1195,6 +1334,8 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1195
1334
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
1196
1335
|
}
|
|
1197
1336
|
catch (error) {
|
|
1337
|
+
this.#logWebSocketClosedEarly(error, receivedRawFrame);
|
|
1338
|
+
this.#recordRejectedChainRequest(error);
|
|
1198
1339
|
if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !receivedRawFrame) {
|
|
1199
1340
|
this.#forgetCodexResponseId();
|
|
1200
1341
|
if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
|
|
@@ -1208,7 +1349,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1208
1349
|
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
1209
1350
|
if (eventResponseId) {
|
|
1210
1351
|
responseId = eventResponseId;
|
|
1211
|
-
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input);
|
|
1352
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input, true);
|
|
1212
1353
|
}
|
|
1213
1354
|
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
|
|
1214
1355
|
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
@@ -1228,6 +1369,27 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1228
1369
|
throw asAmbiguousModelOutcome(error) ?? error;
|
|
1229
1370
|
}
|
|
1230
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
|
+
}
|
|
1231
1393
|
buildResponsesCreateRequest(request, stream) {
|
|
1232
1394
|
const built = super.buildResponsesCreateRequest(request, stream);
|
|
1233
1395
|
const requestData = normalizeCodexRequestData(built.requestData, request, this.modelId, {
|
|
@@ -1311,13 +1473,14 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1311
1473
|
if (wireStateKey && wireStateToken && typeof response?.id === 'string' && response.id.length > 0) {
|
|
1312
1474
|
this.chainedWireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
|
|
1313
1475
|
}
|
|
1314
|
-
this.#logTrafficReceived(requestId, requestData, response);
|
|
1476
|
+
this.#logTrafficReceived(requestId, requestData, response, watchdog.receiveTiming());
|
|
1315
1477
|
return response;
|
|
1316
1478
|
}
|
|
1317
1479
|
catch (error) {
|
|
1318
1480
|
const timeoutError = watchdog.timeoutError();
|
|
1481
|
+
const receiveTiming = watchdog.receiveTiming();
|
|
1319
1482
|
watchdog.close();
|
|
1320
|
-
const failure = timeoutError ?? error;
|
|
1483
|
+
const failure = asProvablyUnsentTimeout(timeoutError, receiveTiming, updatedRequest) ?? timeoutError ?? error;
|
|
1321
1484
|
if (wireStateKey) {
|
|
1322
1485
|
if (isWebSocketConnectionLimitReachedError(failure)) {
|
|
1323
1486
|
if (wireStateToken)
|
|
@@ -1327,19 +1490,20 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1327
1490
|
this.chainedWireState.invalidate(wireStateKey);
|
|
1328
1491
|
}
|
|
1329
1492
|
}
|
|
1330
|
-
this.#logTrafficFailed(requestId, requestData, failure);
|
|
1493
|
+
this.#logTrafficFailed(requestId, requestData, failure, receiveTiming);
|
|
1331
1494
|
throw failure;
|
|
1332
1495
|
}
|
|
1333
1496
|
}
|
|
1334
1497
|
try {
|
|
1335
1498
|
const response = (await super.fetchResponse(updatedRequest, stream));
|
|
1336
1499
|
const patched = wrapCodexStream(watchdog.wrap(response), this.diagnosticLogger);
|
|
1337
|
-
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));
|
|
1338
1501
|
}
|
|
1339
1502
|
catch (error) {
|
|
1340
1503
|
const timeoutError = watchdog.timeoutError();
|
|
1504
|
+
const receiveTiming = watchdog.receiveTiming();
|
|
1341
1505
|
watchdog.close();
|
|
1342
|
-
const failure = timeoutError ?? error;
|
|
1506
|
+
const failure = asProvablyUnsentTimeout(timeoutError, receiveTiming, updatedRequest) ?? timeoutError ?? error;
|
|
1343
1507
|
if (wireStateKey) {
|
|
1344
1508
|
if (isWebSocketConnectionLimitReachedError(failure)) {
|
|
1345
1509
|
if (wireStateToken)
|
|
@@ -1349,7 +1513,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
1349
1513
|
this.chainedWireState.invalidate(wireStateKey);
|
|
1350
1514
|
}
|
|
1351
1515
|
}
|
|
1352
|
-
this.#logTrafficFailed(requestId, requestData, failure);
|
|
1516
|
+
this.#logTrafficFailed(requestId, requestData, failure, receiveTiming);
|
|
1353
1517
|
throw failure;
|
|
1354
1518
|
}
|
|
1355
1519
|
}
|