@qduc/term2 0.11.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -5
- package/dist/agent.d.ts +24 -24
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +107 -31
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +3 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +359 -131
- package/dist/app.js.map +1 -1
- package/dist/cli.js +124 -49
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-approve-command.d.ts.map +1 -1
- package/dist/commands/auto-approve-command.js +12 -4
- package/dist/commands/auto-approve-command.js.map +1 -1
- package/dist/commands/copy-command.d.ts +3 -1
- package/dist/commands/copy-command.d.ts.map +1 -1
- package/dist/commands/copy-command.js +36 -9
- package/dist/commands/copy-command.js.map +1 -1
- package/dist/commands/mode-commands.js.map +1 -1
- package/dist/commands/retry-tool-command.d.ts +13 -0
- package/dist/commands/retry-tool-command.d.ts.map +1 -0
- package/dist/commands/retry-tool-command.js +20 -0
- package/dist/commands/retry-tool-command.js.map +1 -0
- package/dist/commands/rewind-command.d.ts +37 -0
- package/dist/commands/rewind-command.d.ts.map +1 -0
- package/dist/commands/rewind-command.js +97 -0
- package/dist/commands/rewind-command.js.map +1 -0
- package/dist/commands/sandbox-command.d.ts.map +1 -1
- package/dist/commands/sandbox-command.js +6 -1
- package/dist/commands/sandbox-command.js.map +1 -1
- package/dist/components/InputBox.d.ts +17 -32
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +182 -579
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/input/ApplicationInputSurface.d.ts +42 -0
- package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -0
- package/dist/components/input/ApplicationInputSurface.js +82 -0
- package/dist/components/input/ApplicationInputSurface.js.map +1 -0
- package/dist/components/input/CopyMenuSession.d.ts +16 -0
- package/dist/components/input/CopyMenuSession.d.ts.map +1 -0
- package/dist/components/input/CopyMenuSession.js +49 -0
- package/dist/components/input/CopyMenuSession.js.map +1 -0
- package/dist/components/input/FirstRunSetupPrompt.d.ts +9 -0
- package/dist/components/input/FirstRunSetupPrompt.d.ts.map +1 -0
- package/dist/components/input/FirstRunSetupPrompt.js +20 -0
- package/dist/components/input/FirstRunSetupPrompt.js.map +1 -0
- package/dist/components/input/MenuStackHost.d.ts +12 -0
- package/dist/components/input/MenuStackHost.d.ts.map +1 -0
- package/dist/components/input/MenuStackHost.js +13 -0
- package/dist/components/input/MenuStackHost.js.map +1 -0
- package/dist/components/input/MenuSurface.d.ts +13 -0
- package/dist/components/input/MenuSurface.d.ts.map +1 -0
- package/dist/components/input/MenuSurface.js +87 -0
- package/dist/components/input/MenuSurface.js.map +1 -0
- package/dist/components/input/ModelMenuSession.d.ts +19 -0
- package/dist/components/input/ModelMenuSession.d.ts.map +1 -0
- package/dist/components/input/ModelMenuSession.js +154 -0
- package/dist/components/input/ModelMenuSession.js.map +1 -0
- package/dist/components/input/PathMenuSession.d.ts +16 -0
- package/dist/components/input/PathMenuSession.d.ts.map +1 -0
- package/dist/components/input/PathMenuSession.js +68 -0
- package/dist/components/input/PathMenuSession.js.map +1 -0
- package/dist/components/input/PendingQueueList.d.ts +20 -0
- package/dist/components/input/PendingQueueList.d.ts.map +1 -0
- package/dist/components/input/PendingQueueList.js +26 -0
- package/dist/components/input/PendingQueueList.js.map +1 -0
- package/dist/components/input/ProviderMenuSession.d.ts +16 -0
- package/dist/components/input/ProviderMenuSession.d.ts.map +1 -0
- package/dist/components/input/ProviderMenuSession.js +99 -0
- package/dist/components/input/ProviderMenuSession.js.map +1 -0
- package/dist/components/input/RewindMenuSession.d.ts +14 -0
- package/dist/components/input/RewindMenuSession.d.ts.map +1 -0
- package/dist/components/input/RewindMenuSession.js +77 -0
- package/dist/components/input/RewindMenuSession.js.map +1 -0
- package/dist/components/input/SettingsMenuSession.d.ts +17 -0
- package/dist/components/input/SettingsMenuSession.d.ts.map +1 -0
- package/dist/components/input/SettingsMenuSession.js +136 -0
- package/dist/components/input/SettingsMenuSession.js.map +1 -0
- package/dist/components/input/SettingsValueMenuSession.d.ts +19 -0
- package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -0
- package/dist/components/input/SettingsValueMenuSession.js +113 -0
- package/dist/components/input/SettingsValueMenuSession.js.map +1 -0
- package/dist/components/input/SkillsMenuSession.d.ts +19 -0
- package/dist/components/input/SkillsMenuSession.d.ts.map +1 -0
- package/dist/components/input/SkillsMenuSession.js +58 -0
- package/dist/components/input/SkillsMenuSession.js.map +1 -0
- package/dist/components/input/SlashMenuSession.d.ts +25 -0
- package/dist/components/input/SlashMenuSession.d.ts.map +1 -0
- package/dist/components/input/SlashMenuSession.js +69 -0
- package/dist/components/input/SlashMenuSession.js.map +1 -0
- package/dist/components/input/determine-active-menu.d.ts +2 -0
- package/dist/components/input/determine-active-menu.d.ts.map +1 -1
- package/dist/components/input/determine-active-menu.js +12 -4
- package/dist/components/input/determine-active-menu.js.map +1 -1
- package/dist/components/input/insertions.d.ts +0 -13
- package/dist/components/input/insertions.d.ts.map +1 -1
- package/dist/components/input/insertions.js +0 -26
- package/dist/components/input/insertions.js.map +1 -1
- package/dist/components/input/menu-controller.d.ts +52 -0
- package/dist/components/input/menu-controller.d.ts.map +1 -0
- package/dist/components/input/menu-controller.js +690 -0
- package/dist/components/input/menu-controller.js.map +1 -0
- package/dist/components/input/menu-editor.d.ts +9 -0
- package/dist/components/input/menu-editor.d.ts.map +1 -0
- package/dist/components/input/menu-editor.js +45 -0
- package/dist/components/input/menu-editor.js.map +1 -0
- package/dist/components/input/menu-registry.d.ts +20 -0
- package/dist/components/input/menu-registry.d.ts.map +1 -0
- package/dist/components/input/menu-registry.js +27 -0
- package/dist/components/input/menu-registry.js.map +1 -0
- package/dist/components/input/menu-types.d.ts +327 -0
- package/dist/components/input/menu-types.d.ts.map +1 -0
- package/dist/components/input/menu-types.js +2 -0
- package/dist/components/input/menu-types.js.map +1 -0
- package/dist/components/input/settings-intent-host.d.ts +22 -0
- package/dist/components/input/settings-intent-host.d.ts.map +1 -0
- package/dist/components/input/settings-intent-host.js +69 -0
- package/dist/components/input/settings-intent-host.js.map +1 -0
- package/dist/components/input/triggers.d.ts +3 -0
- package/dist/components/input/triggers.d.ts.map +1 -1
- package/dist/components/input/triggers.js +258 -0
- package/dist/components/input/triggers.js.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.d.ts +16 -0
- package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -0
- package/dist/components/layout/BackgroundTaskManager.js +254 -0
- package/dist/components/layout/BackgroundTaskManager.js.map +1 -0
- package/dist/components/layout/BackgroundTasksPanel.d.ts +3 -2
- package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.js +80 -34
- package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
- package/dist/components/layout/Banner.js.map +1 -1
- package/dist/components/layout/BottomArea.d.ts +39 -21
- package/dist/components/layout/BottomArea.d.ts.map +1 -1
- package/dist/components/layout/BottomArea.js +77 -48
- package/dist/components/layout/BottomArea.js.map +1 -1
- package/dist/components/layout/StatusBar.d.ts +3 -1
- package/dist/components/layout/StatusBar.d.ts.map +1 -1
- package/dist/components/layout/StatusBar.js +100 -66
- package/dist/components/layout/StatusBar.js.map +1 -1
- package/dist/components/menu/CopyMenu.d.ts +9 -0
- package/dist/components/menu/CopyMenu.d.ts.map +1 -0
- package/dist/components/menu/CopyMenu.js +7 -0
- package/dist/components/menu/CopyMenu.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 +23 -6
- package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
- package/dist/components/menu/ProviderSelectionMenu.d.ts +1 -0
- package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ProviderSelectionMenu.js +12 -4
- package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
- package/dist/components/menu/RewindMenu.d.ts +18 -0
- package/dist/components/menu/RewindMenu.d.ts.map +1 -0
- package/dist/components/menu/RewindMenu.js +59 -0
- package/dist/components/menu/RewindMenu.js.map +1 -0
- package/dist/components/message/ChatMessage.d.ts +2 -1
- package/dist/components/message/ChatMessage.d.ts.map +1 -1
- package/dist/components/message/ChatMessage.js +1 -1
- package/dist/components/message/ChatMessage.js.map +1 -1
- package/dist/components/message/CommandMessage.d.ts.map +1 -1
- package/dist/components/message/CommandMessage.js +142 -17
- package/dist/components/message/CommandMessage.js.map +1 -1
- package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
- package/dist/components/message/MemoryRenderer.js +16 -10
- package/dist/components/message/MemoryRenderer.js.map +1 -1
- package/dist/components/message/MessageList.d.ts +20 -3
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +1 -1
- package/dist/components/message/MessageList.js.map +1 -1
- package/dist/components/message/SubagentActivityMessage.d.ts +5 -1
- package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
- package/dist/components/message/SubagentActivityMessage.js +12 -4
- package/dist/components/message/SubagentActivityMessage.js.map +1 -1
- package/dist/components/message/command-message-helpers.d.ts +37 -0
- package/dist/components/message/command-message-helpers.d.ts.map +1 -1
- package/dist/components/message/command-message-helpers.js +49 -8
- package/dist/components/message/command-message-helpers.js.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts +1 -0
- package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.js +135 -83
- package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
- package/dist/context/InputContext.d.ts +15 -8
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.js +94 -15
- package/dist/context/InputContext.js.map +1 -1
- package/dist/contracts/application-stream.d.ts +44 -0
- package/dist/contracts/application-stream.d.ts.map +1 -0
- package/dist/contracts/application-stream.js +2 -0
- package/dist/contracts/application-stream.js.map +1 -0
- package/dist/contracts/continuation-handle.d.ts +18 -0
- package/dist/contracts/continuation-handle.d.ts.map +1 -0
- package/dist/contracts/continuation-handle.js +22 -0
- package/dist/contracts/continuation-handle.js.map +1 -0
- package/dist/contracts/conversation-items.d.ts +47 -0
- package/dist/contracts/conversation-items.d.ts.map +1 -0
- package/dist/contracts/conversation-items.js +2 -0
- package/dist/contracts/conversation-items.js.map +1 -0
- package/dist/contracts/conversation.d.ts +44 -4
- package/dist/contracts/conversation.d.ts.map +1 -1
- package/dist/contracts/conversation.js +9 -0
- package/dist/contracts/conversation.js.map +1 -1
- package/dist/contracts/model-errors.d.ts +10 -0
- package/dist/contracts/model-errors.d.ts.map +1 -0
- package/dist/contracts/model-errors.js +15 -0
- package/dist/contracts/model-errors.js.map +1 -0
- package/dist/contracts/model-types.d.ts +16 -0
- package/dist/contracts/model-types.d.ts.map +1 -0
- package/dist/contracts/model-types.js +2 -0
- package/dist/contracts/model-types.js.map +1 -0
- package/dist/contracts/patch.d.ts +17 -0
- package/dist/contracts/patch.d.ts.map +1 -0
- package/dist/contracts/patch.js +2 -0
- package/dist/contracts/patch.js.map +1 -0
- package/dist/contracts/provider-input.d.ts +34 -0
- package/dist/contracts/provider-input.d.ts.map +1 -0
- package/dist/contracts/provider-input.js +2 -0
- package/dist/contracts/provider-input.js.map +1 -0
- package/dist/contracts/streamed-model-turn.d.ts +230 -0
- package/dist/contracts/streamed-model-turn.d.ts.map +1 -0
- package/dist/contracts/streamed-model-turn.js +2 -0
- package/dist/contracts/streamed-model-turn.js.map +1 -0
- package/dist/env-setup.js +1 -1
- package/dist/hooks/conversation-ui-reducer.d.ts +28 -4
- package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
- package/dist/hooks/conversation-ui-reducer.js +46 -4
- package/dist/hooks/conversation-ui-reducer.js.map +1 -1
- package/dist/hooks/handoff-flow-reducer.d.ts +1 -36
- package/dist/hooks/handoff-flow-reducer.d.ts.map +1 -1
- package/dist/hooks/handoff-flow-reducer.js +3 -57
- package/dist/hooks/handoff-flow-reducer.js.map +1 -1
- package/dist/hooks/settings-completion-config.d.ts +1 -0
- package/dist/hooks/settings-completion-config.d.ts.map +1 -1
- package/dist/hooks/settings-completion-config.js +32 -6
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/use-app-commands.d.ts +15 -11
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +91 -63
- package/dist/hooks/use-app-commands.js.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts +24 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.js +145 -6
- package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +34 -13
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +96 -20
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-debounced-value.d.ts +13 -0
- package/dist/hooks/use-debounced-value.d.ts.map +1 -0
- package/dist/hooks/use-debounced-value.js +27 -0
- package/dist/hooks/use-debounced-value.js.map +1 -0
- package/dist/hooks/use-escape-key.d.ts +4 -32
- package/dist/hooks/use-escape-key.d.ts.map +1 -1
- package/dist/hooks/use-escape-key.js +27 -68
- package/dist/hooks/use-escape-key.js.map +1 -1
- package/dist/hooks/use-first-run-setup.d.ts +24 -0
- package/dist/hooks/use-first-run-setup.d.ts.map +1 -0
- package/dist/hooks/use-first-run-setup.js +114 -0
- package/dist/hooks/use-first-run-setup.js.map +1 -0
- package/dist/hooks/use-handoff-flow.d.ts +6 -6
- package/dist/hooks/use-handoff-flow.d.ts.map +1 -1
- package/dist/hooks/use-handoff-flow.js +110 -118
- package/dist/hooks/use-handoff-flow.js.map +1 -1
- package/dist/hooks/use-model-selection.d.ts +1 -0
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +93 -59
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-path-completion.d.ts.map +1 -1
- package/dist/hooks/use-path-completion.js +20 -11
- package/dist/hooks/use-path-completion.js.map +1 -1
- package/dist/hooks/use-provider-selection.d.ts +5 -1
- package/dist/hooks/use-provider-selection.d.ts.map +1 -1
- package/dist/hooks/use-provider-selection.js +55 -27
- package/dist/hooks/use-provider-selection.js.map +1 -1
- package/dist/hooks/use-rewind-selection.d.ts +30 -0
- package/dist/hooks/use-rewind-selection.d.ts.map +1 -0
- package/dist/hooks/{use-undo-selection.js → use-rewind-selection.js} +37 -28
- package/dist/hooks/use-rewind-selection.js.map +1 -0
- package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
- package/dist/hooks/use-runtime-settings.js +4 -3
- package/dist/hooks/use-runtime-settings.js.map +1 -1
- package/dist/hooks/use-selection.d.ts +1 -0
- package/dist/hooks/use-selection.d.ts.map +1 -1
- package/dist/hooks/use-selection.js +1 -1
- package/dist/hooks/use-selection.js.map +1 -1
- package/dist/hooks/use-setting.d.ts +3 -2
- package/dist/hooks/use-setting.d.ts.map +1 -1
- package/dist/hooks/use-setting.js +1 -1
- package/dist/hooks/use-setting.js.map +1 -1
- package/dist/hooks/use-settings-completion.d.ts +1 -0
- package/dist/hooks/use-settings-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-completion.js +22 -15
- package/dist/hooks/use-settings-completion.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-value-completion.js +40 -28
- package/dist/hooks/use-settings-value-completion.js.map +1 -1
- package/dist/hooks/use-shell-mode.d.ts +3 -13
- package/dist/hooks/use-shell-mode.d.ts.map +1 -1
- package/dist/hooks/use-shell-mode.js +14 -53
- package/dist/hooks/use-shell-mode.js.map +1 -1
- package/dist/hooks/use-skill-selection.d.ts.map +1 -1
- package/dist/hooks/use-skill-selection.js +17 -11
- package/dist/hooks/use-skill-selection.js.map +1 -1
- package/dist/hooks/use-slash-commands.d.ts +0 -1
- package/dist/hooks/use-slash-commands.d.ts.map +1 -1
- package/dist/hooks/use-slash-commands.js +11 -18
- package/dist/hooks/use-slash-commands.js.map +1 -1
- package/dist/hooks/use-terminal-focus-notifier.js.map +1 -1
- package/dist/lib/agent-chat-service.d.ts +12 -8
- package/dist/lib/agent-chat-service.d.ts.map +1 -1
- package/dist/lib/agent-chat-service.js +88 -49
- package/dist/lib/agent-chat-service.js.map +1 -1
- package/dist/lib/agent-client.d.ts +98 -17
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +427 -37
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts +36 -15
- package/dist/lib/agent-configuration.d.ts.map +1 -1
- package/dist/lib/agent-configuration.js +107 -9
- package/dist/lib/agent-configuration.js.map +1 -1
- package/dist/lib/agent-factory.d.ts +25 -4
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +143 -106
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/chained-input-filter.d.ts +7 -1
- package/dist/lib/chained-input-filter.d.ts.map +1 -1
- package/dist/lib/chained-input-filter.js +46 -62
- package/dist/lib/chained-input-filter.js.map +1 -1
- package/dist/lib/continuation-projection-mode.d.ts +3 -0
- package/dist/lib/continuation-projection-mode.d.ts.map +1 -0
- package/dist/lib/continuation-projection-mode.js +2 -0
- package/dist/lib/continuation-projection-mode.js.map +1 -0
- package/dist/lib/editor-impl.d.ts +1 -1
- package/dist/lib/editor-impl.d.ts.map +1 -1
- package/dist/lib/editor-impl.js +1 -1
- package/dist/lib/editor-impl.js.map +1 -1
- package/dist/lib/harness-invariant-error.d.ts +22 -0
- package/dist/lib/harness-invariant-error.d.ts.map +1 -0
- package/dist/lib/harness-invariant-error.js +30 -0
- package/dist/lib/harness-invariant-error.js.map +1 -0
- package/dist/lib/input-owner.d.ts +67 -0
- package/dist/lib/input-owner.d.ts.map +1 -0
- package/dist/lib/input-owner.js +39 -0
- package/dist/lib/input-owner.js.map +1 -0
- package/dist/lib/openai-strict-tool-schema.d.ts +7 -4
- package/dist/lib/openai-strict-tool-schema.d.ts.map +1 -1
- package/dist/lib/openai-strict-tool-schema.js +8 -0
- package/dist/lib/openai-strict-tool-schema.js.map +1 -1
- package/dist/lib/subagent-bridge.d.ts +38 -4
- package/dist/lib/subagent-bridge.d.ts.map +1 -1
- package/dist/lib/subagent-bridge.js +96 -21
- package/dist/lib/subagent-bridge.js.map +1 -1
- package/dist/lib/tool-invoke.d.ts +18 -10
- package/dist/lib/tool-invoke.d.ts.map +1 -1
- package/dist/lib/tool-invoke.js +92 -44
- package/dist/lib/tool-invoke.js.map +1 -1
- package/dist/non-interactive.d.ts +14 -4
- package/dist/non-interactive.d.ts.map +1 -1
- package/dist/non-interactive.js +91 -84
- package/dist/non-interactive.js.map +1 -1
- package/dist/prompts/async-subagent-delegation.d.ts +1 -4
- package/dist/prompts/async-subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/async-subagent-delegation.js +9 -47
- package/dist/prompts/async-subagent-delegation.js.map +1 -1
- package/dist/prompts/async-subagent-delegation.ts +9 -58
- package/dist/prompts/background-shell.d.ts +3 -0
- package/dist/prompts/background-shell.d.ts.map +1 -0
- package/dist/prompts/background-shell.js +11 -0
- package/dist/prompts/background-shell.js.map +1 -0
- package/dist/prompts/background-shell.ts +10 -0
- package/dist/prompts/memory.md +1 -1
- package/dist/prompts/orchestrator-prompt.test.ts +22 -0
- package/dist/prompts/orchestrator.md +7 -5
- package/dist/prompts/plan-mode-info.md +1 -1
- package/dist/prompts/prompt-constructor.d.ts +2 -0
- package/dist/prompts/prompt-constructor.d.ts.map +1 -1
- package/dist/prompts/prompt-constructor.js +9 -7
- package/dist/prompts/prompt-constructor.js.map +1 -1
- package/dist/prompts/prompt-constructor.test.ts +25 -9
- package/dist/prompts/prompt-constructor.ts +13 -7
- package/dist/prompts/shell-auto-approval.d.ts +2 -2
- package/dist/prompts/shell-auto-approval.d.ts.map +1 -1
- package/dist/prompts/shell-auto-approval.js +20 -5
- package/dist/prompts/shell-auto-approval.js.map +1 -1
- package/dist/prompts/shell-auto-approval.ts +20 -5
- package/dist/prompts/steering-notice.d.ts +16 -0
- package/dist/prompts/steering-notice.d.ts.map +1 -0
- package/dist/prompts/steering-notice.js +24 -0
- package/dist/prompts/steering-notice.js.map +1 -0
- package/dist/prompts/steering-notice.ts +24 -0
- package/dist/prompts/subagent-delegation.d.ts +6 -5
- package/dist/prompts/subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/subagent-delegation.js +36 -13
- package/dist/prompts/subagent-delegation.js.map +1 -1
- package/dist/prompts/subagent-delegation.test.ts +9 -2
- package/dist/prompts/subagent-delegation.ts +54 -14
- package/dist/prompts/subagents/explorer.md +24 -14
- package/dist/prompts/subagents/worker-prompt.test.ts +2 -2
- package/dist/prompts/subagents/worker.md +1 -1
- package/dist/prompts/worktree-hygiene.md +1 -0
- package/dist/providers/ai-sdk-anthropic.provider.d.ts +3 -3
- package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-anthropic.provider.js +8 -4
- package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
- package/dist/providers/ai-sdk-google.provider.d.ts +5 -4
- package/dist/providers/ai-sdk-google.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-google.provider.js +23 -3
- package/dist/providers/ai-sdk-google.provider.js.map +1 -1
- package/dist/providers/ai-sdk-message-normalizer.d.ts +3 -7
- package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -1
- package/dist/providers/ai-sdk-message-normalizer.js +27 -11
- package/dist/providers/ai-sdk-message-normalizer.js.map +1 -1
- package/dist/providers/ai-sdk-openrouter.provider.d.ts +5 -4
- package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -1
- package/dist/providers/ai-sdk-openrouter.provider.js +25 -3
- package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -1
- package/dist/providers/ai-sdk-provider-settings.d.ts +10 -0
- package/dist/providers/ai-sdk-provider-settings.d.ts.map +1 -0
- package/dist/providers/ai-sdk-provider-settings.js +37 -0
- package/dist/providers/ai-sdk-provider-settings.js.map +1 -0
- package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
- package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -0
- package/dist/providers/ai-sdk-streamed-model.js +338 -0
- package/dist/providers/ai-sdk-streamed-model.js.map +1 -0
- package/dist/providers/codex-auth.d.ts +6 -0
- package/dist/providers/codex-auth.d.ts.map +1 -0
- package/dist/providers/codex-auth.js +35 -0
- package/dist/providers/codex-auth.js.map +1 -0
- package/dist/providers/codex-responses-model.d.ts +39 -12
- package/dist/providers/codex-responses-model.d.ts.map +1 -1
- package/dist/providers/codex-responses-model.js +669 -159
- package/dist/providers/codex-responses-model.js.map +1 -1
- package/dist/providers/codex-turn-converter.d.ts +12 -0
- package/dist/providers/codex-turn-converter.d.ts.map +1 -0
- package/dist/providers/codex-turn-converter.js +168 -0
- package/dist/providers/codex-turn-converter.js.map +1 -0
- package/dist/providers/codex.provider.d.ts +23 -1
- package/dist/providers/codex.provider.d.ts.map +1 -1
- package/dist/providers/codex.provider.js +60 -55
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/providers/common/openai-compatible-message-contract.d.ts +8 -0
- package/dist/providers/common/openai-compatible-message-contract.d.ts.map +1 -0
- package/dist/providers/common/openai-compatible-message-contract.js +23 -0
- package/dist/providers/common/openai-compatible-message-contract.js.map +1 -0
- package/dist/providers/common/openai-compatible-messages.d.ts +0 -4
- package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -1
- package/dist/providers/common/openai-compatible-messages.js +0 -288
- package/dist/providers/common/openai-compatible-messages.js.map +1 -1
- package/dist/providers/fetch/composer.d.ts.map +1 -1
- package/dist/providers/fetch/composer.js +1 -0
- package/dist/providers/fetch/composer.js.map +1 -1
- package/dist/providers/model-catalog/catalog.d.ts +64 -0
- package/dist/providers/model-catalog/catalog.d.ts.map +1 -0
- package/dist/providers/model-catalog/catalog.generated.d.ts +3010 -0
- package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -0
- package/dist/providers/model-catalog/catalog.generated.js +3004 -0
- package/dist/providers/model-catalog/catalog.generated.js.map +1 -0
- package/dist/providers/model-catalog/catalog.js +126 -0
- package/dist/providers/model-catalog/catalog.js.map +1 -0
- package/dist/providers/model-catalog/generate-catalog.d.ts +42 -0
- package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -0
- package/dist/providers/model-catalog/generate-catalog.js +96 -0
- package/dist/providers/model-catalog/generate-catalog.js.map +1 -0
- package/dist/providers/openai-chained-input-compatibility.d.ts +36 -0
- package/dist/providers/openai-chained-input-compatibility.d.ts.map +1 -0
- package/dist/providers/openai-chained-input-compatibility.js +60 -0
- package/dist/providers/openai-chained-input-compatibility.js.map +1 -0
- package/dist/providers/openai-chat-completions-model.d.ts +13 -0
- package/dist/providers/openai-chat-completions-model.d.ts.map +1 -0
- package/dist/providers/openai-chat-completions-model.js +441 -0
- package/dist/providers/openai-chat-completions-model.js.map +1 -0
- package/dist/providers/openai-compatible-lazy.d.ts +1 -1
- package/dist/providers/openai-compatible-lazy.d.ts.map +1 -1
- package/dist/providers/openai-compatible-lazy.js +25 -36
- package/dist/providers/openai-compatible-lazy.js.map +1 -1
- package/dist/providers/openai-compatible-middleware.d.ts +4 -1
- package/dist/providers/openai-compatible-middleware.d.ts.map +1 -1
- package/dist/providers/openai-compatible-middleware.js +16 -27
- package/dist/providers/openai-compatible-middleware.js.map +1 -1
- package/dist/providers/openai-compatible-response-normalizer.d.ts +12 -2
- package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -1
- package/dist/providers/openai-compatible-response-normalizer.js +18 -18
- package/dist/providers/openai-compatible-response-normalizer.js.map +1 -1
- package/dist/providers/openai-compatible.provider.d.ts +8 -10
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +89 -78
- package/dist/providers/openai-compatible.provider.js.map +1 -1
- package/dist/providers/openai-request-prefix-binding.d.ts +28 -0
- package/dist/providers/openai-request-prefix-binding.d.ts.map +1 -0
- package/dist/providers/openai-request-prefix-binding.js +78 -0
- package/dist/providers/openai-request-prefix-binding.js.map +1 -0
- package/dist/providers/openai-responses-model.d.ts +43 -0
- package/dist/providers/openai-responses-model.d.ts.map +1 -0
- package/dist/providers/openai-responses-model.js +564 -0
- package/dist/providers/openai-responses-model.js.map +1 -0
- package/dist/providers/openai.provider.d.ts +11 -8
- package/dist/providers/openai.provider.d.ts.map +1 -1
- package/dist/providers/openai.provider.js +43 -91
- package/dist/providers/openai.provider.js.map +1 -1
- package/dist/providers/opencode-routing.d.ts +1 -1
- package/dist/providers/opencode-routing.d.ts.map +1 -1
- package/dist/providers/opencode-routing.js +4 -2
- package/dist/providers/opencode-routing.js.map +1 -1
- package/dist/providers/opencode-session.d.ts.map +1 -1
- package/dist/providers/opencode-session.js +28 -3
- package/dist/providers/opencode-session.js.map +1 -1
- package/dist/providers/openrouter.provider.d.ts.map +1 -1
- package/dist/providers/openrouter.provider.js +33 -33
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/provider-request-capture.d.ts +35 -0
- package/dist/providers/provider-request-capture.d.ts.map +1 -0
- package/dist/providers/provider-request-capture.js +22 -0
- package/dist/providers/provider-request-capture.js.map +1 -0
- package/dist/providers/provider-service.d.ts +10 -7
- package/dist/providers/provider-service.d.ts.map +1 -1
- package/dist/providers/provider-service.js +33 -28
- package/dist/providers/provider-service.js.map +1 -1
- package/dist/providers/registry.d.ts +14 -9
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/retrying-model.d.ts +8 -6
- package/dist/providers/retrying-model.d.ts.map +1 -1
- package/dist/providers/retrying-model.js +7 -20
- package/dist/providers/retrying-model.js.map +1 -1
- package/dist/providers/web-search/exa.provider.js.map +1 -1
- package/dist/providers/web-search/registry.js.map +1 -1
- package/dist/providers/web-search/tavily.provider.js.map +1 -1
- package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
- package/dist/providers/websocket-receive-watchdog.js +9 -1
- package/dist/providers/websocket-receive-watchdog.js.map +1 -1
- package/dist/scripts/eval-auto-approval/runner.js +2 -0
- package/dist/scripts/eval-auto-approval/runner.js.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.d.ts +205 -0
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -0
- package/dist/services/agent-runtime/application-run-loop.js +1258 -0
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -0
- package/dist/services/agent-runtime/compose-agent-runtime.d.ts +3 -0
- package/dist/services/agent-runtime/compose-agent-runtime.d.ts.map +1 -1
- package/dist/services/agent-runtime/compose-agent-runtime.js +4 -0
- package/dist/services/agent-runtime/compose-agent-runtime.js.map +1 -1
- package/dist/services/agent-runtime/generation-guard.d.ts +69 -0
- package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -0
- package/dist/services/agent-runtime/generation-guard.js +270 -0
- package/dist/services/agent-runtime/generation-guard.js.map +1 -0
- package/dist/services/agent-runtime/model-resolver.d.ts.map +1 -1
- package/dist/services/agent-runtime/model-resolver.js +7 -6
- package/dist/services/agent-runtime/model-resolver.js.map +1 -1
- package/dist/services/agent-runtime/scope-resolver.d.ts.map +1 -1
- package/dist/services/agent-runtime/scope-resolver.js +2 -1
- package/dist/services/agent-runtime/scope-resolver.js.map +1 -1
- package/dist/services/agent-runtime/structured-output.d.ts.map +1 -1
- package/dist/services/agent-runtime/structured-output.js +1 -21
- package/dist/services/agent-runtime/structured-output.js.map +1 -1
- package/dist/services/agent-runtime/tool-invocation-context.d.ts +73 -0
- package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -0
- package/dist/services/agent-runtime/tool-invocation-context.js +66 -0
- package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -0
- package/dist/services/agent-stream.d.ts +41 -2
- package/dist/services/agent-stream.d.ts.map +1 -1
- package/dist/services/agent-stream.js +47 -1
- package/dist/services/agent-stream.js.map +1 -1
- package/dist/services/approval/approval-decision-executor.d.ts +42 -0
- package/dist/services/approval/approval-decision-executor.d.ts.map +1 -0
- package/dist/services/approval/approval-decision-executor.js +210 -0
- package/dist/services/approval/approval-decision-executor.js.map +1 -0
- package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
- package/dist/services/approval/approval-decision-policy.js +0 -2
- package/dist/services/approval/approval-decision-policy.js.map +1 -1
- package/dist/services/approval/approval-flow-coordinator.d.ts +25 -8
- package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
- package/dist/services/approval/approval-flow-coordinator.js +34 -167
- package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
- package/dist/services/approval/approval-replay.d.ts +52 -0
- package/dist/services/approval/approval-replay.d.ts.map +1 -0
- package/dist/services/approval/approval-replay.js +68 -0
- package/dist/services/approval/approval-replay.js.map +1 -0
- package/dist/services/approval/approval-state.d.ts +3 -6
- package/dist/services/approval/approval-state.d.ts.map +1 -1
- package/dist/services/approval/approval-state.js +0 -10
- package/dist/services/approval/approval-state.js.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.d.ts +25 -0
- package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -0
- package/dist/services/approval/background-subagent-approval-controller.js +65 -0
- package/dist/services/approval/background-subagent-approval-controller.js.map +1 -0
- package/dist/services/approval/background-subagent-approval-queue.d.ts +137 -0
- package/dist/services/approval/background-subagent-approval-queue.d.ts.map +1 -0
- package/dist/services/approval/background-subagent-approval-queue.js +200 -0
- package/dist/services/approval/background-subagent-approval-queue.js.map +1 -0
- package/dist/services/approval/non-interactive-approval-policy.d.ts +33 -0
- package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -0
- package/dist/services/approval/non-interactive-approval-policy.js +85 -0
- package/dist/services/approval/non-interactive-approval-policy.js.map +1 -0
- package/dist/services/approval/session-read-access.d.ts +10 -0
- package/dist/services/approval/session-read-access.d.ts.map +1 -1
- package/dist/services/approval/session-read-access.js +14 -1
- package/dist/services/approval/session-read-access.js.map +1 -1
- package/dist/services/approval/session-read-grant-target.d.ts +7 -0
- package/dist/services/approval/session-read-grant-target.d.ts.map +1 -0
- package/dist/services/approval/session-read-grant-target.js +36 -0
- package/dist/services/approval/session-read-grant-target.js.map +1 -0
- package/dist/services/approval/shell-auto-approval-evaluator.d.ts +11 -3
- package/dist/services/approval/shell-auto-approval-evaluator.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-evaluator.js +140 -46
- package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts +14 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +83 -7
- package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
- package/dist/services/approval/shell-sandbox-approval.d.ts +22 -1
- package/dist/services/approval/shell-sandbox-approval.d.ts.map +1 -1
- package/dist/services/approval/shell-sandbox-approval.js +31 -4
- package/dist/services/approval/shell-sandbox-approval.js.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts +9 -0
- package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
- package/dist/services/approval/tool-approval-batch-coordinator.js +22 -5
- package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
- package/dist/services/approval/tool-owner.d.ts +5 -2
- package/dist/services/approval/tool-owner.d.ts.map +1 -1
- package/dist/services/approval/tool-owner.js +0 -56
- package/dist/services/approval/tool-owner.js.map +1 -1
- package/dist/services/approval/tool-ownership-registry.d.ts +25 -0
- package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -0
- package/dist/services/approval/tool-ownership-registry.js +63 -0
- package/dist/services/approval/tool-ownership-registry.js.map +1 -0
- package/dist/services/command-message-streaming.d.ts +8 -4
- package/dist/services/command-message-streaming.d.ts.map +1 -1
- package/dist/services/command-message-streaming.js +13 -52
- package/dist/services/command-message-streaming.js.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.js +1 -0
- package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts +112 -13
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +270 -47
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-admission-workflow.d.ts +69 -0
- package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -0
- package/dist/services/conversation/conversation-admission-workflow.js +112 -0
- package/dist/services/conversation/conversation-admission-workflow.js.map +1 -0
- package/dist/services/conversation/conversation-decoder.d.ts +14 -0
- package/dist/services/conversation/conversation-decoder.d.ts.map +1 -0
- package/dist/services/conversation/conversation-decoder.js +155 -0
- package/dist/services/conversation/conversation-decoder.js.map +1 -0
- package/dist/services/conversation/conversation-events.d.ts +80 -26
- package/dist/services/conversation/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation/conversation-history-repair.d.ts.map +1 -1
- package/dist/services/conversation/conversation-history-repair.js +34 -37
- package/dist/services/conversation/conversation-history-repair.js.map +1 -1
- package/dist/services/conversation/conversation-message-projection.d.ts +27 -0
- package/dist/services/conversation/conversation-message-projection.d.ts.map +1 -0
- package/dist/services/conversation/conversation-message-projection.js +59 -0
- package/dist/services/conversation/conversation-message-projection.js.map +1 -0
- package/dist/services/conversation/conversation-orchestrator.d.ts +25 -14
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +471 -160
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.types.d.ts +16 -11
- package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence-types.d.ts +15 -38
- package/dist/services/conversation/conversation-persistence-types.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.d.ts +3 -10
- package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
- package/dist/services/conversation/conversation-persistence.js +66 -15
- package/dist/services/conversation/conversation-persistence.js.map +1 -1
- package/dist/services/conversation/conversation-replay.d.ts +7 -5
- package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
- package/dist/services/conversation/conversation-replay.js +172 -66
- package/dist/services/conversation/conversation-replay.js.map +1 -1
- package/dist/services/conversation/conversation-result-builder.d.ts +16 -2
- package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
- package/dist/services/conversation/conversation-result-builder.js +63 -15
- package/dist/services/conversation/conversation-result-builder.js.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.d.ts +18 -0
- package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts +65 -12
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +129 -16
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/conversation-state-projector.d.ts +3 -3
- package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
- package/dist/services/conversation/conversation-state-projector.js +18 -0
- package/dist/services/conversation/conversation-state-projector.js.map +1 -1
- package/dist/services/conversation/conversation-store.d.ts +78 -12
- package/dist/services/conversation/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation/conversation-store.js +228 -119
- package/dist/services/conversation/conversation-store.js.map +1 -1
- package/dist/services/conversation/conversation-turn-items.d.ts +8 -2
- package/dist/services/conversation/conversation-turn-items.d.ts.map +1 -1
- package/dist/services/conversation/conversation-turn-items.js +96 -275
- package/dist/services/conversation/conversation-turn-items.js.map +1 -1
- package/dist/services/conversation/journal-to-ledger.d.ts.map +1 -1
- package/dist/services/conversation/journal-to-ledger.js +4 -24
- package/dist/services/conversation/journal-to-ledger.js.map +1 -1
- package/dist/services/conversation/run-item-normalizer.d.ts +5 -0
- package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -0
- package/dist/services/conversation/run-item-normalizer.js +245 -0
- package/dist/services/conversation/run-item-normalizer.js.map +1 -0
- package/dist/services/conversation/user-turn-item.d.ts +14 -0
- package/dist/services/conversation/user-turn-item.d.ts.map +1 -0
- package/dist/services/conversation/user-turn-item.js +27 -0
- package/dist/services/conversation/user-turn-item.js.map +1 -0
- package/dist/services/conversation-agent-client.d.ts +77 -6
- package/dist/services/conversation-agent-client.d.ts.map +1 -1
- package/dist/services/cost/model-cost.d.ts +158 -0
- package/dist/services/cost/model-cost.d.ts.map +1 -0
- package/dist/services/cost/model-cost.js +218 -0
- package/dist/services/cost/model-cost.js.map +1 -0
- package/dist/services/cost/pricing-overlay.d.ts +26 -0
- package/dist/services/cost/pricing-overlay.d.ts.map +1 -0
- package/dist/services/cost/pricing-overlay.js +39 -0
- package/dist/services/cost/pricing-overlay.js.map +1 -0
- package/dist/services/cost/pricing.d.ts +13 -0
- package/dist/services/cost/pricing.d.ts.map +1 -0
- package/dist/services/cost/pricing.js +82 -0
- package/dist/services/cost/pricing.js.map +1 -0
- package/dist/services/execution-context.d.ts +31 -0
- package/dist/services/execution-context.d.ts.map +1 -1
- package/dist/services/execution-context.js +59 -0
- package/dist/services/execution-context.js.map +1 -1
- package/dist/services/file-service.d.ts.map +1 -1
- package/dist/services/file-service.js +12 -3
- package/dist/services/file-service.js.map +1 -1
- package/dist/services/handoff/handoff-flow-reducer.d.ts +27 -0
- package/dist/services/handoff/handoff-flow-reducer.d.ts.map +1 -0
- package/dist/services/handoff/handoff-flow-reducer.js +26 -0
- package/dist/services/handoff/handoff-flow-reducer.js.map +1 -0
- package/dist/services/handoff/handoff-session.d.ts +35 -0
- package/dist/services/handoff/handoff-session.d.ts.map +1 -0
- package/dist/services/handoff/handoff-session.js +136 -0
- package/dist/services/handoff/handoff-session.js.map +1 -0
- package/dist/services/hooks/hook-contracts.d.ts +124 -0
- package/dist/services/hooks/hook-contracts.d.ts.map +1 -0
- package/dist/services/hooks/hook-contracts.js +92 -0
- package/dist/services/hooks/hook-contracts.js.map +1 -0
- package/dist/services/hooks/hook-discovery.d.ts +45 -0
- package/dist/services/hooks/hook-discovery.d.ts.map +1 -0
- package/dist/services/hooks/hook-discovery.js +255 -0
- package/dist/services/hooks/hook-discovery.js.map +1 -0
- package/dist/services/hooks/hook-editor-shim.d.ts +6 -0
- package/dist/services/hooks/hook-editor-shim.d.ts.map +1 -0
- package/dist/services/hooks/hook-editor-shim.js +190 -0
- package/dist/services/hooks/hook-editor-shim.js.map +1 -0
- package/dist/services/hooks/hook-event-factory.d.ts +19 -0
- package/dist/services/hooks/hook-event-factory.d.ts.map +1 -0
- package/dist/services/hooks/hook-event-factory.js +45 -0
- package/dist/services/hooks/hook-event-factory.js.map +1 -0
- package/dist/services/hooks/hook-module-loader.d.ts +38 -0
- package/dist/services/hooks/hook-module-loader.d.ts.map +1 -0
- package/dist/services/hooks/hook-module-loader.js +69 -0
- package/dist/services/hooks/hook-module-loader.js.map +1 -0
- package/dist/services/hooks/hook-registry.d.ts +47 -0
- package/dist/services/hooks/hook-registry.d.ts.map +1 -0
- package/dist/services/hooks/hook-registry.js +185 -0
- package/dist/services/hooks/hook-registry.js.map +1 -0
- package/dist/services/hooks/hook-service.d.ts +44 -0
- package/dist/services/hooks/hook-service.d.ts.map +1 -0
- package/dist/services/hooks/hook-service.js +138 -0
- package/dist/services/hooks/hook-service.js.map +1 -0
- package/dist/services/hooks/hook-tool-lifecycle.d.ts +6 -0
- package/dist/services/hooks/hook-tool-lifecycle.d.ts.map +1 -0
- package/dist/services/hooks/hook-tool-lifecycle.js +33 -0
- package/dist/services/hooks/hook-tool-lifecycle.js.map +1 -0
- package/dist/services/hooks/index.d.ts +2 -0
- package/dist/services/hooks/index.d.ts.map +1 -0
- package/dist/services/hooks/index.js +2 -0
- package/dist/services/hooks/index.js.map +1 -0
- package/dist/services/input-surge-guard.d.ts.map +1 -1
- package/dist/services/input-surge-guard.js +13 -34
- package/dist/services/input-surge-guard.js.map +1 -1
- package/dist/services/large-uncached-input-guard.d.ts +26 -1
- package/dist/services/large-uncached-input-guard.d.ts.map +1 -1
- package/dist/services/large-uncached-input-guard.js +73 -38
- package/dist/services/large-uncached-input-guard.js.map +1 -1
- package/dist/services/logging/assistant-turn-journal.d.ts +1 -1
- package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
- package/dist/services/logging/assistant-turn-journal.js +21 -36
- package/dist/services/logging/assistant-turn-journal.js.map +1 -1
- package/dist/services/logging/conversation-log-events.d.ts +75 -7
- package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-events.js +9 -0
- package/dist/services/logging/conversation-log-events.js.map +1 -1
- package/dist/services/logging/conversation-log-writer.d.ts +9 -4
- package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-writer.js +183 -56
- 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 +35 -1
- package/dist/services/logging/conversation-logger.js.map +1 -1
- package/dist/services/logging/logging-contract.d.ts.map +1 -1
- package/dist/services/logging/logging-contract.js +4 -0
- package/dist/services/logging/logging-contract.js.map +1 -1
- package/dist/services/logging/logging-service.d.ts.map +1 -1
- package/dist/services/logging/logging-service.js +6 -2
- package/dist/services/logging/logging-service.js.map +1 -1
- package/dist/services/logging/provider-traffic.d.ts +2 -1
- package/dist/services/logging/provider-traffic.d.ts.map +1 -1
- package/dist/services/logging/provider-traffic.js +81 -5
- package/dist/services/logging/provider-traffic.js.map +1 -1
- package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
- package/dist/services/memory/memory-capabilities.js +13 -8
- package/dist/services/memory/memory-capabilities.js.map +1 -1
- package/dist/services/model-service.d.ts +10 -0
- package/dist/services/model-service.d.ts.map +1 -1
- package/dist/services/model-service.js +24 -1
- package/dist/services/model-service.js.map +1 -1
- package/dist/services/models/model-catalog-session.d.ts +26 -0
- package/dist/services/models/model-catalog-session.d.ts.map +1 -0
- package/dist/services/models/model-catalog-session.js +77 -0
- package/dist/services/models/model-catalog-session.js.map +1 -0
- package/dist/services/openai-candidate-observer.d.ts +18 -0
- package/dist/services/openai-candidate-observer.d.ts.map +1 -0
- package/dist/services/openai-candidate-observer.js +56 -0
- package/dist/services/openai-candidate-observer.js.map +1 -0
- package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts +20 -0
- package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts.map +1 -0
- package/dist/services/openai-root-checkpoint-lifecycle-observer.js +21 -0
- package/dist/services/openai-root-checkpoint-lifecycle-observer.js.map +1 -0
- package/dist/services/openai-root-provider-identity.d.ts +11 -0
- package/dist/services/openai-root-provider-identity.d.ts.map +1 -0
- package/dist/services/openai-root-provider-identity.js +16 -0
- package/dist/services/openai-root-provider-identity.js.map +1 -0
- package/dist/services/openai-root-selector-parity-observer.d.ts +53 -0
- package/dist/services/openai-root-selector-parity-observer.d.ts.map +1 -0
- package/dist/services/openai-root-selector-parity-observer.js +62 -0
- package/dist/services/openai-root-selector-parity-observer.js.map +1 -0
- package/dist/services/plan-mode-interceptor.js +2 -2
- package/dist/services/plan-mode-interceptor.js.map +1 -1
- package/dist/services/provider-continuity.d.ts +94 -0
- package/dist/services/provider-continuity.d.ts.map +1 -1
- package/dist/services/provider-continuity.js +203 -0
- package/dist/services/provider-continuity.js.map +1 -1
- package/dist/services/providers/provider-management-session.d.ts +12 -0
- package/dist/services/providers/provider-management-session.d.ts.map +1 -0
- package/dist/services/providers/provider-management-session.js +21 -0
- package/dist/services/providers/provider-management-session.js.map +1 -0
- package/dist/services/queue/queue-controller.d.ts +9 -14
- package/dist/services/queue/queue-controller.d.ts.map +1 -1
- package/dist/services/queue/queue-controller.js +75 -60
- package/dist/services/queue/queue-controller.js.map +1 -1
- package/dist/services/retry/conversation-retry-policy.js +3 -3
- package/dist/services/retry/conversation-retry-policy.js.map +1 -1
- package/dist/services/retry/recovery-executor.d.ts.map +1 -1
- package/dist/services/retry/recovery-executor.js +15 -8
- package/dist/services/retry/recovery-executor.js.map +1 -1
- package/dist/services/retry/recovery-policy.d.ts.map +1 -1
- package/dist/services/retry/recovery-policy.js +4 -1
- package/dist/services/retry/recovery-policy.js.map +1 -1
- package/dist/services/retry/retry-classifier.d.ts.map +1 -1
- package/dist/services/retry/retry-classifier.js +3 -1
- package/dist/services/retry/retry-classifier.js.map +1 -1
- package/dist/services/retry/retry-contracts.d.ts +3 -5
- package/dist/services/retry/retry-contracts.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.d.ts +20 -0
- package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.js +82 -0
- package/dist/services/retry/retry-error-classification.js.map +1 -1
- package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
- package/dist/services/retry/retry-event-presenter.js +4 -1
- package/dist/services/retry/retry-event-presenter.js.map +1 -1
- package/dist/services/retry/upstream-retry-policy.js +3 -3
- package/dist/services/rtk-service.d.ts.map +1 -1
- package/dist/services/rtk-service.js +3 -15
- package/dist/services/rtk-service.js.map +1 -1
- package/dist/services/runtime-setting-router.d.ts +19 -0
- package/dist/services/runtime-setting-router.d.ts.map +1 -1
- package/dist/services/runtime-setting-router.js +33 -0
- package/dist/services/runtime-setting-router.js.map +1 -1
- package/dist/services/service-interfaces.d.ts +19 -2
- package/dist/services/service-interfaces.d.ts.map +1 -1
- package/dist/services/session/background-task-control.d.ts +128 -0
- package/dist/services/session/background-task-control.d.ts.map +1 -0
- package/dist/services/session/background-task-control.js +217 -0
- package/dist/services/session/background-task-control.js.map +1 -0
- package/dist/services/session/background-task-liveness.d.ts +24 -0
- package/dist/services/session/background-task-liveness.d.ts.map +1 -0
- package/dist/services/session/background-task-liveness.js +23 -0
- package/dist/services/session/background-task-liveness.js.map +1 -0
- package/dist/services/session/continuation-call-id-resolver.d.ts +16 -9
- package/dist/services/session/continuation-call-id-resolver.d.ts.map +1 -1
- package/dist/services/session/continuation-call-id-resolver.js +34 -48
- package/dist/services/session/continuation-call-id-resolver.js.map +1 -1
- package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
- package/dist/services/session/continuation-plan-applier.js +1 -3
- package/dist/services/session/continuation-plan-applier.js.map +1 -1
- package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/continuation-recovery-handler.js +0 -2
- package/dist/services/session/continuation-recovery-handler.js.map +1 -1
- package/dist/services/session/continuation-state.d.ts +9 -5
- package/dist/services/session/continuation-state.d.ts.map +1 -1
- package/dist/services/session/continuation-state.js +1 -1
- package/dist/services/session/continuation-state.js.map +1 -1
- package/dist/services/session/live-run.d.ts +29 -0
- package/dist/services/session/live-run.d.ts.map +1 -0
- package/dist/services/session/live-run.js +111 -0
- package/dist/services/session/live-run.js.map +1 -0
- package/dist/services/session/nested-tool-compatibility-state.d.ts +20 -0
- package/dist/services/session/nested-tool-compatibility-state.d.ts.map +1 -0
- package/dist/services/session/nested-tool-compatibility-state.js +29 -0
- package/dist/services/session/nested-tool-compatibility-state.js.map +1 -0
- package/dist/services/session/pending-interaction-state.d.ts +60 -0
- package/dist/services/session/pending-interaction-state.d.ts.map +1 -0
- package/dist/services/session/pending-interaction-state.js +132 -0
- package/dist/services/session/pending-interaction-state.js.map +1 -0
- package/dist/services/session/post-execute-pause-capability.d.ts +17 -0
- package/dist/services/session/post-execute-pause-capability.d.ts.map +1 -0
- package/dist/services/session/post-execute-pause-capability.js +27 -0
- package/dist/services/session/post-execute-pause-capability.js.map +1 -0
- package/dist/services/session/post-execute-pause-policy.d.ts +20 -0
- package/dist/services/session/post-execute-pause-policy.d.ts.map +1 -0
- package/dist/services/session/post-execute-pause-policy.js +34 -0
- package/dist/services/session/post-execute-pause-policy.js.map +1 -0
- package/dist/services/session/post-execute-pending-registry.d.ts +63 -0
- package/dist/services/session/post-execute-pending-registry.d.ts.map +1 -0
- package/dist/services/session/post-execute-pending-registry.js +123 -0
- package/dist/services/session/post-execute-pending-registry.js.map +1 -0
- package/dist/services/session/session-access-state.d.ts +24 -0
- package/dist/services/session/session-access-state.d.ts.map +1 -0
- package/dist/services/session/session-access-state.js +92 -0
- package/dist/services/session/session-access-state.js.map +1 -0
- package/dist/services/session/session-client-factory.d.ts +71 -0
- package/dist/services/session/session-client-factory.d.ts.map +1 -0
- package/dist/services/session/session-client-factory.js +130 -0
- package/dist/services/session/session-client-factory.js.map +1 -0
- package/dist/services/session/session-composition.d.ts +58 -0
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +179 -13
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-input-planner.d.ts +22 -2
- package/dist/services/session/session-input-planner.d.ts.map +1 -1
- package/dist/services/session/session-input-planner.js +121 -10
- package/dist/services/session/session-input-planner.js.map +1 -1
- package/dist/services/session/session-lifecycle.d.ts +5 -0
- package/dist/services/session/session-lifecycle.d.ts.map +1 -1
- package/dist/services/session/session-lifecycle.js +16 -6
- package/dist/services/session/session-lifecycle.js.map +1 -1
- package/dist/services/session/session-manager.d.ts +11 -1
- package/dist/services/session/session-manager.d.ts.map +1 -1
- package/dist/services/session/session-manager.js +16 -3
- package/dist/services/session/session-manager.js.map +1 -1
- package/dist/services/session/session-stream-processor.d.ts +6 -0
- package/dist/services/session/session-stream-processor.d.ts.map +1 -1
- package/dist/services/session/session-stream-processor.js +177 -35
- package/dist/services/session/session-stream-processor.js.map +1 -1
- package/dist/services/session/session-tool-tracker.d.ts +16 -21
- package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
- package/dist/services/session/session-tool-tracker.js +21 -52
- package/dist/services/session/session-tool-tracker.js.map +1 -1
- package/dist/services/session/terminal-result-collector.d.ts +8 -0
- package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
- package/dist/services/session/terminal-result-collector.js +30 -4
- package/dist/services/session/terminal-result-collector.js.map +1 -1
- package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts.map +1 -1
- package/dist/services/session/test-helpers/conversation-session-fixtures.js +8 -1
- package/dist/services/session/test-helpers/conversation-session-fixtures.js.map +1 -1
- package/dist/services/session/turn-attempt-factory.d.ts +2 -2
- package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
- package/dist/services/session/turn-attempt.d.ts +4 -2
- package/dist/services/session/turn-attempt.d.ts.map +1 -1
- package/dist/services/session/turn-attempt.js +5 -0
- package/dist/services/session/turn-attempt.js.map +1 -1
- package/dist/services/session/turn-coordinator.d.ts +32 -2
- package/dist/services/session/turn-coordinator.d.ts.map +1 -1
- package/dist/services/session/turn-coordinator.js +180 -9
- package/dist/services/session/turn-coordinator.js.map +1 -1
- package/dist/services/session/turn-status-machine.d.ts +21 -6
- package/dist/services/session/turn-status-machine.d.ts.map +1 -1
- package/dist/services/session/turn-status-machine.js +50 -13
- package/dist/services/session/turn-status-machine.js.map +1 -1
- package/dist/services/session/turn-workflow.d.ts +35 -0
- package/dist/services/session/turn-workflow.d.ts.map +1 -1
- package/dist/services/session/turn-workflow.js +377 -27
- package/dist/services/session/turn-workflow.js.map +1 -1
- package/dist/services/settings/ancillary-settings-migration.js +3 -3
- package/dist/services/settings/ancillary-settings-migration.js.map +1 -1
- package/dist/services/settings/custom-provider-normalization.d.ts +10 -0
- package/dist/services/settings/custom-provider-normalization.d.ts.map +1 -1
- package/dist/services/settings/custom-provider-normalization.js +35 -2
- package/dist/services/settings/custom-provider-normalization.js.map +1 -1
- package/dist/services/settings/settings-env.d.ts +3 -0
- package/dist/services/settings/settings-env.d.ts.map +1 -1
- package/dist/services/settings/settings-env.js +3 -3
- package/dist/services/settings/settings-env.js.map +1 -1
- package/dist/services/settings/settings-merger.d.ts +6 -5
- package/dist/services/settings/settings-merger.d.ts.map +1 -1
- package/dist/services/settings/settings-merger.js +9 -4
- package/dist/services/settings/settings-merger.js.map +1 -1
- package/dist/services/settings/settings-path.d.ts +6 -0
- package/dist/services/settings/settings-path.d.ts.map +1 -0
- package/dist/services/settings/settings-path.js +15 -0
- package/dist/services/settings/settings-path.js.map +1 -0
- package/dist/services/settings/settings-persistence.d.ts +17 -6
- package/dist/services/settings/settings-persistence.d.ts.map +1 -1
- package/dist/services/settings/settings-persistence.js +155 -28
- package/dist/services/settings/settings-persistence.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +107 -5
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +91 -9
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-service.d.ts +42 -5
- package/dist/services/settings/settings-service.d.ts.map +1 -1
- package/dist/services/settings/settings-service.js +282 -12
- package/dist/services/settings/settings-service.js.map +1 -1
- package/dist/services/settings/settings-sources.d.ts.map +1 -1
- package/dist/services/settings/settings-sources.js +7 -0
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/shell/background-shell-output-store.d.ts +90 -0
- package/dist/services/shell/background-shell-output-store.d.ts.map +1 -0
- package/dist/services/shell/background-shell-output-store.js +207 -0
- package/dist/services/shell/background-shell-output-store.js.map +1 -0
- package/dist/services/shell/background-shell-registry.d.ts +128 -0
- package/dist/services/shell/background-shell-registry.d.ts.map +1 -0
- package/dist/services/shell/background-shell-registry.js +341 -0
- package/dist/services/shell/background-shell-registry.js.map +1 -0
- package/dist/services/shell/background-shell-watches.d.ts +141 -0
- package/dist/services/shell/background-shell-watches.d.ts.map +1 -0
- package/dist/services/shell/background-shell-watches.js +245 -0
- package/dist/services/shell/background-shell-watches.js.map +1 -0
- package/dist/services/shell/shell-interaction-session.d.ts +43 -0
- package/dist/services/shell/shell-interaction-session.d.ts.map +1 -0
- package/dist/services/shell/shell-interaction-session.js +113 -0
- package/dist/services/shell/shell-interaction-session.js.map +1 -0
- package/dist/services/stream-event-processor.d.ts +11 -12
- package/dist/services/stream-event-processor.d.ts.map +1 -1
- package/dist/services/stream-event-processor.js +119 -352
- package/dist/services/stream-event-processor.js.map +1 -1
- package/dist/services/stream-snapshot.d.ts +0 -1
- package/dist/services/stream-snapshot.d.ts.map +1 -1
- package/dist/services/stream-snapshot.js +0 -1
- package/dist/services/stream-snapshot.js.map +1 -1
- package/dist/services/subagents/codename-run-id.d.ts +43 -0
- package/dist/services/subagents/codename-run-id.d.ts.map +1 -0
- package/dist/services/subagents/codename-run-id.js +683 -0
- package/dist/services/subagents/codename-run-id.js.map +1 -0
- package/dist/services/subagents/execution-runner.d.ts +2 -0
- package/dist/services/subagents/execution-runner.d.ts.map +1 -1
- package/dist/services/subagents/execution-runner.js +60 -6
- package/dist/services/subagents/execution-runner.js.map +1 -1
- package/dist/services/subagents/foreground-subagent-lease.d.ts +77 -0
- package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -0
- package/dist/services/subagents/foreground-subagent-lease.js +156 -0
- package/dist/services/subagents/foreground-subagent-lease.js.map +1 -0
- package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
- package/dist/services/subagents/mentor-runner.js +50 -31
- package/dist/services/subagents/mentor-runner.js.map +1 -1
- package/dist/services/subagents/nested-runner.d.ts +47 -23
- package/dist/services/subagents/nested-runner.d.ts.map +1 -1
- package/dist/services/subagents/nested-runner.js +313 -66
- package/dist/services/subagents/nested-runner.js.map +1 -1
- package/dist/services/subagents/role-loader.d.ts +3 -3
- package/dist/services/subagents/role-loader.d.ts.map +1 -1
- package/dist/services/subagents/role-loader.js +6 -7
- package/dist/services/subagents/role-loader.js.map +1 -1
- package/dist/services/subagents/runtime.d.ts +10 -0
- package/dist/services/subagents/runtime.d.ts.map +1 -1
- package/dist/services/subagents/runtime.js +15 -1
- package/dist/services/subagents/runtime.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.d.ts +21 -2
- package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
- package/dist/services/subagents/subagent-async-registry.js +193 -13
- package/dist/services/subagents/subagent-async-registry.js.map +1 -1
- package/dist/services/subagents/subagent-client-types.d.ts +2 -0
- package/dist/services/subagents/subagent-client-types.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.d.ts +26 -7
- package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.js +31 -1
- package/dist/services/subagents/subagent-manager.js.map +1 -1
- package/dist/services/subagents/subagent-notification-store.d.ts +91 -6
- package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
- package/dist/services/subagents/subagent-notification-store.js +140 -10
- package/dist/services/subagents/subagent-notification-store.js.map +1 -1
- package/dist/services/subagents/subagent-session.d.ts +12 -7
- package/dist/services/subagents/subagent-session.d.ts.map +1 -1
- package/dist/services/subagents/subagent-session.js +13 -14
- package/dist/services/subagents/subagent-session.js.map +1 -1
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts +4 -5
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts.map +1 -1
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js +72 -70
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
- package/dist/services/subagents/tool-policy.d.ts +21 -17
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +100 -60
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/types.d.ts +37 -3
- package/dist/services/subagents/types.d.ts.map +1 -1
- package/dist/services/subagents/types.js +2 -2
- package/dist/services/subagents/types.js.map +1 -1
- package/dist/services/subagents/utils.d.ts +8 -1
- package/dist/services/subagents/utils.d.ts.map +1 -1
- package/dist/services/subagents/utils.js +46 -16
- package/dist/services/subagents/utils.js.map +1 -1
- package/dist/services/subagents/worker-worktree.d.ts +25 -0
- package/dist/services/subagents/worker-worktree.d.ts.map +1 -0
- package/dist/services/subagents/worker-worktree.js +74 -0
- package/dist/services/subagents/worker-worktree.js.map +1 -0
- package/dist/services/test-helpers/mock-stream.d.ts +3 -0
- package/dist/services/test-helpers/mock-stream.d.ts.map +1 -1
- package/dist/services/test-helpers/mock-stream.js +8 -0
- package/dist/services/test-helpers/mock-stream.js.map +1 -1
- package/dist/services/tool-execution-ledger.d.ts +2 -0
- package/dist/services/tool-execution-ledger.d.ts.map +1 -1
- package/dist/services/tool-execution-ledger.js +59 -81
- package/dist/services/tool-execution-ledger.js.map +1 -1
- package/dist/services/workspace/active-workspace-root.d.ts +5 -0
- package/dist/services/workspace/active-workspace-root.d.ts.map +1 -0
- package/dist/services/workspace/active-workspace-root.js +24 -0
- package/dist/services/workspace/active-workspace-root.js.map +1 -0
- package/dist/services/workspace/parse-worktree-list.d.ts +24 -0
- package/dist/services/workspace/parse-worktree-list.d.ts.map +1 -0
- package/dist/services/workspace/parse-worktree-list.js +59 -0
- package/dist/services/workspace/parse-worktree-list.js.map +1 -0
- package/dist/services/workspace/worktree-inventory.d.ts +10 -0
- package/dist/services/workspace/worktree-inventory.d.ts.map +1 -0
- package/dist/services/workspace/worktree-inventory.js +28 -0
- package/dist/services/workspace/worktree-inventory.js.map +1 -0
- package/dist/services/workspace/worktree-transition.d.ts +85 -0
- package/dist/services/workspace/worktree-transition.d.ts.map +1 -0
- package/dist/services/workspace/worktree-transition.js +70 -0
- package/dist/services/workspace/worktree-transition.js.map +1 -0
- package/dist/test-helpers/conversation-session-with-adapter.d.ts +1 -1
- package/dist/test-helpers/conversation-session-with-adapter.d.ts.map +1 -1
- package/dist/test-helpers/conversation-session-with-adapter.js +5 -1
- package/dist/test-helpers/conversation-session-with-adapter.js.map +1 -1
- package/dist/test-helpers/ink-testing.d.ts.map +1 -1
- package/dist/test-helpers/ink-testing.js +2 -1
- package/dist/test-helpers/ink-testing.js.map +1 -1
- package/dist/tools/agent/activate-skill.d.ts +6 -1
- package/dist/tools/agent/activate-skill.d.ts.map +1 -1
- package/dist/tools/agent/activate-skill.js.map +1 -1
- package/dist/tools/agent/ask-mentor.d.ts +1 -1
- package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
- package/dist/tools/agent/ask-mentor.js.map +1 -1
- package/dist/tools/agent/ask-orchestrator.d.ts +1 -1
- package/dist/tools/agent/ask-orchestrator.d.ts.map +1 -1
- package/dist/tools/agent/ask-user-constants.d.ts +6 -0
- package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
- package/dist/tools/agent/ask-user-constants.js +6 -0
- package/dist/tools/agent/ask-user-constants.js.map +1 -1
- package/dist/tools/agent/run-subagent-async.d.ts +6 -6
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent-async.js +34 -55
- package/dist/tools/agent/run-subagent-async.js.map +1 -1
- package/dist/tools/agent/run-subagent.d.ts +30 -14
- package/dist/tools/agent/run-subagent.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent.js +191 -68
- package/dist/tools/agent/run-subagent.js.map +1 -1
- package/dist/tools/file/apply-patch.d.ts +3 -1
- package/dist/tools/file/apply-patch.d.ts.map +1 -1
- package/dist/tools/file/apply-patch.js +34 -10
- package/dist/tools/file/apply-patch.js.map +1 -1
- package/dist/tools/file/code-context.d.ts +2 -2
- package/dist/tools/file/code-context.d.ts.map +1 -1
- package/dist/tools/file/code-context.js +1 -1
- package/dist/tools/file/code-context.js.map +1 -1
- package/dist/tools/file/create-file.d.ts +4 -2
- package/dist/tools/file/create-file.d.ts.map +1 -1
- package/dist/tools/file/create-file.js +10 -7
- package/dist/tools/file/create-file.js.map +1 -1
- package/dist/tools/file/edit-healing.d.ts.map +1 -1
- package/dist/tools/file/edit-healing.js +54 -35
- package/dist/tools/file/edit-healing.js.map +1 -1
- package/dist/tools/file/glob-target.d.ts +12 -0
- package/dist/tools/file/glob-target.d.ts.map +1 -0
- package/dist/tools/file/glob-target.js +22 -0
- package/dist/tools/file/glob-target.js.map +1 -0
- package/dist/tools/file/glob.d.ts +9 -2
- package/dist/tools/file/glob.d.ts.map +1 -1
- package/dist/tools/file/glob.js +12 -16
- package/dist/tools/file/glob.js.map +1 -1
- package/dist/tools/file/grep.d.ts +8 -1
- package/dist/tools/file/grep.d.ts.map +1 -1
- package/dist/tools/file/grep.js +60 -4
- package/dist/tools/file/grep.js.map +1 -1
- package/dist/tools/file/read-file.d.ts +7 -1
- package/dist/tools/file/read-file.d.ts.map +1 -1
- package/dist/tools/file/read-file.js +3 -4
- package/dist/tools/file/read-file.js.map +1 -1
- package/dist/tools/file/search-replace.d.ts +5 -3
- package/dist/tools/file/search-replace.d.ts.map +1 -1
- package/dist/tools/file/search-replace.js +29 -19
- package/dist/tools/file/search-replace.js.map +1 -1
- package/dist/tools/format-helpers.d.ts +4 -3
- package/dist/tools/format-helpers.d.ts.map +1 -1
- package/dist/tools/format-helpers.js +16 -17
- package/dist/tools/format-helpers.js.map +1 -1
- package/dist/tools/memory/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory/memory-tools.js +61 -49
- package/dist/tools/memory/memory-tools.js.map +1 -1
- package/dist/tools/run-agent-workflow.d.ts +1 -1
- package/dist/tools/run-agent-workflow.d.ts.map +1 -1
- package/dist/tools/system/shell.d.ts +80 -3
- package/dist/tools/system/shell.d.ts.map +1 -1
- package/dist/tools/system/shell.js +657 -152
- package/dist/tools/system/shell.js.map +1 -1
- package/dist/tools/system/worktree.d.ts +22 -0
- package/dist/tools/system/worktree.d.ts.map +1 -0
- package/dist/tools/system/worktree.js +138 -0
- package/dist/tools/system/worktree.js.map +1 -0
- package/dist/tools/types.d.ts +102 -5
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +4 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/utils.d.ts +18 -0
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +80 -1
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/web/web-fetch.d.ts +1 -1
- package/dist/tools/web/web-fetch.d.ts.map +1 -1
- package/dist/tools/web/web-fetch.js.map +1 -1
- package/dist/tools/web/web-search.d.ts +1 -1
- package/dist/tools/web/web-search.d.ts.map +1 -1
- package/dist/tools/web/web-search.js.map +1 -1
- package/dist/types/message.d.ts +2 -0
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/ai/model-settings.d.ts.map +1 -1
- package/dist/utils/ai/model-settings.js +0 -6
- package/dist/utils/ai/model-settings.js.map +1 -1
- package/dist/utils/ai/provider-credentials.d.ts +31 -2
- package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
- package/dist/utils/ai/provider-credentials.js +119 -11
- package/dist/utils/ai/provider-credentials.js.map +1 -1
- package/dist/utils/ai/token-usage.d.ts +10 -5
- package/dist/utils/ai/token-usage.d.ts.map +1 -1
- package/dist/utils/ai/token-usage.js +48 -35
- package/dist/utils/ai/token-usage.js.map +1 -1
- package/dist/utils/apply-diff.d.ts +3 -0
- package/dist/utils/apply-diff.d.ts.map +1 -0
- package/dist/utils/apply-diff.js +192 -0
- package/dist/utils/apply-diff.js.map +1 -0
- package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-event-handler.js +72 -16
- package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
- package/dist/utils/conversation/conversation-utils.d.ts +5 -0
- package/dist/utils/conversation/conversation-utils.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-utils.js +1 -0
- package/dist/utils/conversation/conversation-utils.js.map +1 -1
- package/dist/utils/conversation/message-utils.d.ts +14 -2
- package/dist/utils/conversation/message-utils.d.ts.map +1 -1
- package/dist/utils/conversation/message-utils.js +55 -35
- package/dist/utils/conversation/message-utils.js.map +1 -1
- package/dist/utils/conversation/rewind-items.d.ts +32 -0
- package/dist/utils/conversation/rewind-items.d.ts.map +1 -0
- package/dist/utils/conversation/rewind-items.js +33 -0
- package/dist/utils/conversation/rewind-items.js.map +1 -0
- package/dist/utils/copy-selections.d.ts +8 -0
- package/dist/utils/copy-selections.d.ts.map +1 -0
- package/dist/utils/copy-selections.js +42 -0
- package/dist/utils/copy-selections.js.map +1 -0
- package/dist/utils/inject-warning-into-tool-output.d.ts +10 -0
- package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
- package/dist/utils/inject-warning-into-tool-output.js +17 -0
- package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +46 -4
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/shell/command-logger.js.map +1 -1
- package/dist/utils/shell/command-safety/find-helpers.d.ts +3 -2
- package/dist/utils/shell/command-safety/find-helpers.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/find-helpers.js +34 -17
- package/dist/utils/shell/command-safety/find-helpers.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/find-handler.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/handlers/find-handler.js +0 -2
- package/dist/utils/shell/command-safety/handlers/find-handler.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/git-handler.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/handlers/git-handler.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/sed-handler.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/handlers/sed-handler.js +14 -9
- package/dist/utils/shell/command-safety/handlers/sed-handler.js.map +1 -1
- package/dist/utils/shell/command-safety/handlers/types.d.ts +5 -4
- package/dist/utils/shell/command-safety/handlers/types.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/index.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/index.js +212 -88
- package/dist/utils/shell/command-safety/index.js.map +1 -1
- package/dist/utils/shell/command-safety/path-analysis.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/path-analysis.js +5 -1
- package/dist/utils/shell/command-safety/path-analysis.js.map +1 -1
- package/dist/utils/shell/command-safety/utils.d.ts +2 -1
- package/dist/utils/shell/command-safety/utils.d.ts.map +1 -1
- package/dist/utils/shell/command-safety/utils.js +5 -5
- package/dist/utils/shell/command-safety/utils.js.map +1 -1
- package/dist/utils/shell/execute-shell.d.ts +49 -3
- package/dist/utils/shell/execute-shell.d.ts.map +1 -1
- package/dist/utils/shell/execute-shell.js +245 -28
- package/dist/utils/shell/execute-shell.js.map +1 -1
- package/dist/utils/shell/sandbox/denied-read-stores.d.ts +1 -8
- package/dist/utils/shell/sandbox/denied-read-stores.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/denied-read-stores.js +1 -8
- package/dist/utils/shell/sandbox/denied-read-stores.js.map +1 -1
- package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts +36 -6
- package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/docker-host-control-grants.js +47 -17
- package/dist/utils/shell/sandbox/docker-host-control-grants.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-env.js +2 -1
- package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts +21 -0
- package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts.map +1 -0
- package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js +66 -0
- package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js.map +1 -0
- package/dist/utils/shell/sandbox/sandbox-network-store.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-network-store.js +3 -2
- package/dist/utils/shell/sandbox/sandbox-network-store.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-policy.js +2 -1
- package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
- package/dist/utils/shell/shell-session.js.map +1 -1
- package/dist/utils/slash-command-dispatch.d.ts +21 -0
- package/dist/utils/slash-command-dispatch.d.ts.map +1 -0
- package/dist/utils/slash-command-dispatch.js +34 -0
- package/dist/utils/slash-command-dispatch.js.map +1 -0
- package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
- package/dist/utils/streaming/extract-command-messages.js +29 -51
- package/dist/utils/streaming/extract-command-messages.js.map +1 -1
- package/dist/utils/value-suggestions.d.ts.map +1 -1
- package/dist/utils/value-suggestions.js +6 -8
- package/dist/utils/value-suggestions.js.map +1 -1
- package/package.json +21 -19
- package/dist/commands/retry-command.d.ts +0 -20
- package/dist/commands/retry-command.d.ts.map +0 -1
- package/dist/commands/retry-command.js +0 -39
- package/dist/commands/retry-command.js.map +0 -1
- package/dist/commands/undo-command.d.ts +0 -15
- package/dist/commands/undo-command.d.ts.map +0 -1
- package/dist/commands/undo-command.js +0 -28
- package/dist/commands/undo-command.js.map +0 -1
- package/dist/components/input/PopupManager.d.ts +0 -88
- package/dist/components/input/PopupManager.d.ts.map +0 -1
- package/dist/components/input/PopupManager.js +0 -21
- package/dist/components/input/PopupManager.js.map +0 -1
- package/dist/components/input/popup-key-navigation.d.ts +0 -18
- package/dist/components/input/popup-key-navigation.d.ts.map +0 -1
- package/dist/components/input/popup-key-navigation.js +0 -16
- package/dist/components/input/popup-key-navigation.js.map +0 -1
- package/dist/components/input/popup-props.d.ts +0 -24
- package/dist/components/input/popup-props.d.ts.map +0 -1
- package/dist/components/input/popup-props.js +0 -72
- package/dist/components/input/popup-props.js.map +0 -1
- package/dist/components/menu/UndoSelectionMenu.d.ts +0 -12
- package/dist/components/menu/UndoSelectionMenu.d.ts.map +0 -1
- package/dist/components/menu/UndoSelectionMenu.js +0 -19
- package/dist/components/menu/UndoSelectionMenu.js.map +0 -1
- package/dist/hooks/use-mode-handlers.d.ts +0 -79
- package/dist/hooks/use-mode-handlers.d.ts.map +0 -1
- package/dist/hooks/use-mode-handlers.js +0 -183
- package/dist/hooks/use-mode-handlers.js.map +0 -1
- package/dist/hooks/use-pending-turn-guards.d.ts +0 -43
- package/dist/hooks/use-pending-turn-guards.d.ts.map +0 -1
- package/dist/hooks/use-pending-turn-guards.js +0 -120
- package/dist/hooks/use-pending-turn-guards.js.map +0 -1
- package/dist/hooks/use-trigger-detection.d.ts +0 -49
- package/dist/hooks/use-trigger-detection.d.ts.map +0 -1
- package/dist/hooks/use-trigger-detection.js +0 -104
- package/dist/hooks/use-trigger-detection.js.map +0 -1
- package/dist/hooks/use-undo-selection.d.ts +0 -23
- package/dist/hooks/use-undo-selection.d.ts.map +0 -1
- package/dist/hooks/use-undo-selection.js.map +0 -1
- package/dist/lib/agent-run-orchestrator.d.ts +0 -38
- package/dist/lib/agent-run-orchestrator.d.ts.map +0 -1
- package/dist/lib/agent-run-orchestrator.js +0 -266
- package/dist/lib/agent-run-orchestrator.js.map +0 -1
- package/dist/lib/retry-executor.d.ts +0 -16
- package/dist/lib/retry-executor.d.ts.map +0 -1
- package/dist/lib/retry-executor.js +0 -53
- package/dist/lib/retry-executor.js.map +0 -1
- package/dist/lib/runner-manager.d.ts +0 -22
- package/dist/lib/runner-manager.d.ts.map +0 -1
- package/dist/lib/runner-manager.js +0 -56
- package/dist/lib/runner-manager.js.map +0 -1
- package/dist/prompts/shell-sandbox.md +0 -18
- package/dist/prompts/simple.md +0 -53
- package/dist/prompts/simple_prev.md +0 -33
- package/dist/prompts/simple_v2.md +0 -84
- package/dist/prompts/simple_v3.md +0 -267
- package/dist/prompts/subagents/researcher.md +0 -46
- package/dist/providers/ai-sdk-agents-adapter.d.ts +0 -7
- package/dist/providers/ai-sdk-agents-adapter.d.ts.map +0 -1
- package/dist/providers/ai-sdk-agents-adapter.js +0 -80
- package/dist/providers/ai-sdk-agents-adapter.js.map +0 -1
- package/dist/providers/fallback-responses-model.d.ts +0 -46
- package/dist/providers/fallback-responses-model.d.ts.map +0 -1
- package/dist/providers/fallback-responses-model.js +0 -296
- package/dist/providers/fallback-responses-model.js.map +0 -1
- package/dist/services/stream-event-parsing.d.ts +0 -4
- package/dist/services/stream-event-parsing.d.ts.map +0 -1
- package/dist/services/stream-event-parsing.js +0 -79
- package/dist/services/stream-event-parsing.js.map +0 -1
|
@@ -1,18 +1,324 @@
|
|
|
1
|
-
import { OpenAIResponsesModel, OpenAIResponsesWSModel } from '@openai/agents-openai';
|
|
2
|
-
import { getCurrentTrace, withTrace } from '@openai/agents-core';
|
|
3
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { ResponsesWS } from 'openai/resources/responses/ws';
|
|
3
|
+
import OpenAI from 'openai';
|
|
4
|
+
import { toCodexResponsesInput } from './codex-turn-converter.js';
|
|
4
5
|
import { sanitizeHeaders } from '../utils/header-sanitizer.js';
|
|
5
|
-
import {
|
|
6
|
+
import { OrphanedChainedToolOutputError } from '../lib/chained-input-filter.js';
|
|
6
7
|
import { AmbiguousModelOutcomeError } from '../services/retry/retry-errors.js';
|
|
7
8
|
import { ChainedWireState } from './chained-wire-state.js';
|
|
8
9
|
import { LunaResponsesLiteWireProtocol } from './luna-responses-lite-wire-protocol.js';
|
|
10
|
+
import { captureProviderRequest } from './provider-request-capture.js';
|
|
9
11
|
import { createWebSocketReceiveWatchdog, DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS, } from './websocket-receive-watchdog.js';
|
|
10
12
|
const DUMMY_PROVIDER_TRAFFIC = {
|
|
11
13
|
recordRequestStart() { },
|
|
12
14
|
async recordResponseReceived() { },
|
|
15
|
+
recordResponseClosed() { },
|
|
13
16
|
recordRequestFailed() { },
|
|
14
17
|
};
|
|
15
|
-
|
|
18
|
+
function toCodexToolChoice(choice) {
|
|
19
|
+
if (choice === 'auto' || choice === 'required' || choice === 'none')
|
|
20
|
+
return choice;
|
|
21
|
+
if (choice && typeof choice === 'object' && typeof choice.name === 'string') {
|
|
22
|
+
return { type: 'function', name: choice.name };
|
|
23
|
+
}
|
|
24
|
+
throw new Error('Unsupported Codex tool choice.');
|
|
25
|
+
}
|
|
26
|
+
/** Provider-owned transport seam used by Codex's HTTP and WebSocket models. */
|
|
27
|
+
export class CodexResponsesTransport {
|
|
28
|
+
client;
|
|
29
|
+
model;
|
|
30
|
+
websocket;
|
|
31
|
+
constructor(client = {}, model = '', websocket = false) {
|
|
32
|
+
this.client = client;
|
|
33
|
+
this.model = model;
|
|
34
|
+
this.websocket = websocket;
|
|
35
|
+
}
|
|
36
|
+
buildResponsesCreateRequest(request, stream) {
|
|
37
|
+
const providerOptions = request.providerOptions ?? {};
|
|
38
|
+
const { extraBody, extraHeaders: _extraHeaders, ...nativeProviderData } = providerOptions;
|
|
39
|
+
return {
|
|
40
|
+
requestData: {
|
|
41
|
+
model: this.model,
|
|
42
|
+
input: toCodexResponsesInput(request.input),
|
|
43
|
+
stream,
|
|
44
|
+
...(request.instructions !== undefined ? { instructions: request.instructions } : {}),
|
|
45
|
+
...(request.tools.length > 0 ? { tools: request.tools.map((tool) => ({ type: 'function', ...tool })) } : {}),
|
|
46
|
+
...(request.toolChoice !== undefined ? { tool_choice: toCodexToolChoice(request.toolChoice) } : {}),
|
|
47
|
+
...(request.temperature !== undefined ? { temperature: request.temperature } : {}),
|
|
48
|
+
...(request.topP !== undefined ? { top_p: request.topP } : {}),
|
|
49
|
+
...(request.frequencyPenalty !== undefined ? { frequency_penalty: request.frequencyPenalty } : {}),
|
|
50
|
+
...(request.presencePenalty !== undefined ? { presence_penalty: request.presencePenalty } : {}),
|
|
51
|
+
...(request.maxTokens !== undefined ? { max_output_tokens: request.maxTokens } : {}),
|
|
52
|
+
...(request.reasoning !== undefined ? { reasoning: request.reasoning } : {}),
|
|
53
|
+
...nativeProviderData,
|
|
54
|
+
...(extraBody ?? {}),
|
|
55
|
+
...(request.previousResponseId ? { previous_response_id: request.previousResponseId } : {}),
|
|
56
|
+
...(request.codex?.promptCacheKey ? { prompt_cache_key: request.codex.promptCacheKey } : {}),
|
|
57
|
+
...(request.codex?.include ? { include: request.codex.include } : {}),
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async fetchResponse(request, stream, requestData) {
|
|
62
|
+
if (stream && this.websocket) {
|
|
63
|
+
if (!(this.client instanceof OpenAI) && typeof this.client?.responses?.create === 'function') {
|
|
64
|
+
return this.client.responses.create(requestData);
|
|
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
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
try {
|
|
91
|
+
socket.close();
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
/* best effort */
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
})();
|
|
98
|
+
}
|
|
99
|
+
return this.client.responses.create(requestData, {
|
|
100
|
+
...(request.signal ? { signal: request.signal } : {}),
|
|
101
|
+
...(request.providerOptions?.extraHeaders ? { headers: request.providerOptions.extraHeaders } : {}),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export class OpenAIResponsesModel {
|
|
106
|
+
client;
|
|
107
|
+
model;
|
|
108
|
+
transport;
|
|
109
|
+
constructor(client, model, transport, websocket = false) {
|
|
110
|
+
this.client = client;
|
|
111
|
+
this.model = model;
|
|
112
|
+
this.transport = transport ?? new CodexResponsesTransport(client, model, websocket);
|
|
113
|
+
}
|
|
114
|
+
buildResponsesCreateRequest(request, stream) {
|
|
115
|
+
const built = this.transport.buildResponsesCreateRequest(request, stream);
|
|
116
|
+
if (this.transport instanceof CodexResponsesTransport && built?.requestData) {
|
|
117
|
+
built.requestData.model = this.model;
|
|
118
|
+
}
|
|
119
|
+
return built;
|
|
120
|
+
}
|
|
121
|
+
async fetchResponse(request, stream) {
|
|
122
|
+
const built = this.buildResponsesCreateRequest(request, stream);
|
|
123
|
+
return this.transport.fetchResponse(request, stream, built.requestData);
|
|
124
|
+
}
|
|
125
|
+
async fetchUnaryResponse(request) {
|
|
126
|
+
return this.fetchResponse(request, false);
|
|
127
|
+
}
|
|
128
|
+
async *rawStream(request) {
|
|
129
|
+
const source = await this.fetchResponse(request, true);
|
|
130
|
+
for await (const event of source) {
|
|
131
|
+
if (event?.type === 'error')
|
|
132
|
+
throw new Error(event.error?.message ?? 'Codex WebSocket provider error');
|
|
133
|
+
if (event?.type === 'close')
|
|
134
|
+
throw new Error('Codex WebSocket connection closed before a terminal response event.');
|
|
135
|
+
yield event;
|
|
136
|
+
if (event?.type === 'response.completed' ||
|
|
137
|
+
event?.type === 'response.incomplete' ||
|
|
138
|
+
event?.type === 'response.failed')
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async *stream(request) {
|
|
143
|
+
yield* convertCodexRawStream(this.rawStream(request));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export class OpenAIResponsesWSModel extends OpenAIResponsesModel {
|
|
147
|
+
constructor(client, model, transport) {
|
|
148
|
+
super(client, model, transport, true);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async function* convertCodexRawStream(source) {
|
|
152
|
+
const output = [];
|
|
153
|
+
const pendingToolCalls = [];
|
|
154
|
+
const terminalReasoning = [];
|
|
155
|
+
const toolNamesByIndex = new Map();
|
|
156
|
+
const toolArgumentLengthsByIndex = new Map();
|
|
157
|
+
let sawReasoningDelta = false;
|
|
158
|
+
let responseId = '';
|
|
159
|
+
let finishReason;
|
|
160
|
+
let usage;
|
|
161
|
+
let sawCompletedResponse = false;
|
|
162
|
+
for await (const event of source) {
|
|
163
|
+
if (event?.type === 'codex.rate_limits') {
|
|
164
|
+
const rateLimits = event.rate_limits ?? event;
|
|
165
|
+
if (rateLimits && typeof rateLimits === 'object')
|
|
166
|
+
yield { type: 'codex_rate_limits', rateLimits };
|
|
167
|
+
}
|
|
168
|
+
else if (event?.type === 'response.output_text.delta') {
|
|
169
|
+
yield { type: 'text_delta', text: String(event.delta ?? '') };
|
|
170
|
+
}
|
|
171
|
+
else if (event?.type === 'response.reasoning_summary_text.delta') {
|
|
172
|
+
const text = String(event.delta ?? '');
|
|
173
|
+
if (text) {
|
|
174
|
+
sawReasoningDelta = true;
|
|
175
|
+
yield {
|
|
176
|
+
type: 'reasoning_delta',
|
|
177
|
+
...(typeof event.item_id === 'string' ? { id: event.item_id } : {}),
|
|
178
|
+
text,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (event?.type === 'response.output_item.added' && event.output_item?.type === 'function_call') {
|
|
183
|
+
const index = typeof event.output_index === 'number' ? event.output_index : event.output_item.id ?? 0;
|
|
184
|
+
if (typeof event.output_item.name === 'string')
|
|
185
|
+
toolNamesByIndex.set(index, event.output_item.name);
|
|
186
|
+
toolArgumentLengthsByIndex.set(index, 0);
|
|
187
|
+
}
|
|
188
|
+
else if ((event?.type === 'response.function_call_arguments.delta' ||
|
|
189
|
+
event?.type === 'response.custom_tool_call_input.delta' ||
|
|
190
|
+
event?.type === 'response.mcp_call_arguments.delta') &&
|
|
191
|
+
typeof event.delta === 'string' &&
|
|
192
|
+
event.delta) {
|
|
193
|
+
const index = typeof event.output_index === 'number' ? event.output_index : event.item_id ?? 0;
|
|
194
|
+
const argumentCharCount = (toolArgumentLengthsByIndex.get(index) ?? 0) + event.delta.length;
|
|
195
|
+
toolArgumentLengthsByIndex.set(index, argumentCharCount);
|
|
196
|
+
const toolName = toolNamesByIndex.get(index);
|
|
197
|
+
yield { type: 'tool_call_streaming_delta', ...(toolName ? { toolName } : {}), argumentCharCount };
|
|
198
|
+
}
|
|
199
|
+
else if (event?.type === 'response.output_item.done' && event.item?.type === 'function_call') {
|
|
200
|
+
const call = toCodexToolCallOutput(event.item);
|
|
201
|
+
output.push(call);
|
|
202
|
+
pendingToolCalls.push(call);
|
|
203
|
+
}
|
|
204
|
+
else if (event?.type === 'response.completed') {
|
|
205
|
+
sawCompletedResponse = true;
|
|
206
|
+
responseId = codexString(event.response?.id) ?? responseId;
|
|
207
|
+
finishReason = codexString(event.response?.status) ?? codexString(event.response?.incomplete_details?.reason);
|
|
208
|
+
usage = toCodexUsage(event.response?.usage);
|
|
209
|
+
for (const item of event.response?.output ?? []) {
|
|
210
|
+
const converted = toCodexOutputItem(item);
|
|
211
|
+
if (converted.type !== 'tool_call') {
|
|
212
|
+
output.push(converted);
|
|
213
|
+
if (converted.type === 'reasoning')
|
|
214
|
+
terminalReasoning.push(converted);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const authoritativeReasoning = sawReasoningDelta ? [] : terminalReasoning;
|
|
218
|
+
for (const reasoning of authoritativeReasoning) {
|
|
219
|
+
yield {
|
|
220
|
+
type: 'reasoning_delta',
|
|
221
|
+
...(reasoning.id ? { id: reasoning.id } : {}),
|
|
222
|
+
text: reasoning.text,
|
|
223
|
+
...(reasoning.providerMetadata ? { providerMetadata: reasoning.providerMetadata } : {}),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
for (const call of pendingToolCalls)
|
|
227
|
+
yield call;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
else if (event?.type === 'response.incomplete' ||
|
|
231
|
+
event?.type === 'response.failed' ||
|
|
232
|
+
event?.type === 'response.error') {
|
|
233
|
+
const status = String(event.type).slice('response.'.length);
|
|
234
|
+
const message = event.response?.error?.message ?? event.error?.message ?? `Codex response ${status}`;
|
|
235
|
+
throw new Error(`Codex provider response ${status}: ${message}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (!sawCompletedResponse)
|
|
239
|
+
throw new Error('Codex streamed response ended without a completed response event.');
|
|
240
|
+
if (!responseId)
|
|
241
|
+
throw new Error('Codex completed response did not include an id.');
|
|
242
|
+
yield {
|
|
243
|
+
type: 'completion',
|
|
244
|
+
responseId,
|
|
245
|
+
output,
|
|
246
|
+
...(finishReason ? { finishReason } : {}),
|
|
247
|
+
...(usage ? { usage } : {}),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
function toCodexToolCallOutput(item) {
|
|
251
|
+
const id = codexString(item?.call_id) ?? codexString(item?.id);
|
|
252
|
+
const name = codexString(item?.name);
|
|
253
|
+
if (!id || !name)
|
|
254
|
+
throw new Error('Codex function call output is missing its call id or name.');
|
|
255
|
+
return { type: 'tool_call', id, name, arguments: typeof item.arguments === 'string' ? item.arguments : '{}' };
|
|
256
|
+
}
|
|
257
|
+
function toCodexOutputItem(item) {
|
|
258
|
+
if (!item || typeof item !== 'object')
|
|
259
|
+
throw new Error('Unsupported Codex response output item.');
|
|
260
|
+
if (item.type === 'function_call')
|
|
261
|
+
return toCodexToolCallOutput(item);
|
|
262
|
+
if (item.type === 'message') {
|
|
263
|
+
const content = Array.isArray(item.content) ? item.content : [];
|
|
264
|
+
return {
|
|
265
|
+
type: 'message',
|
|
266
|
+
content: content.map((part) => {
|
|
267
|
+
if (part?.type && !['output_text', 'input_text', 'text'].includes(part.type))
|
|
268
|
+
throw new Error(`Unsupported Codex response message content: ${String(part.type)}.`);
|
|
269
|
+
if (typeof part?.text !== 'string')
|
|
270
|
+
throw new Error('Unsupported Codex response message content without text.');
|
|
271
|
+
return { type: 'text', text: part.text };
|
|
272
|
+
}),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
if (item.type === 'reasoning') {
|
|
276
|
+
return {
|
|
277
|
+
type: 'reasoning',
|
|
278
|
+
...(codexString(item.id) ? { id: item.id } : {}),
|
|
279
|
+
text: codexReasoningText(item.summary ?? item.content ?? ''),
|
|
280
|
+
providerMetadata: { codex: codexReasoningMetadata(item) },
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
throw new Error(`Unsupported Codex response output item type: ${String(item.type)}.`);
|
|
284
|
+
}
|
|
285
|
+
function codexReasoningText(value) {
|
|
286
|
+
if (typeof value === 'string')
|
|
287
|
+
return value;
|
|
288
|
+
if (!Array.isArray(value))
|
|
289
|
+
return '';
|
|
290
|
+
return value
|
|
291
|
+
.map((part) => {
|
|
292
|
+
if (!part || typeof part !== 'object' || typeof part.text !== 'string')
|
|
293
|
+
throw new Error('Unsupported Codex reasoning content without text.');
|
|
294
|
+
return part.text;
|
|
295
|
+
})
|
|
296
|
+
.join('');
|
|
297
|
+
}
|
|
298
|
+
function codexReasoningMetadata(item) {
|
|
299
|
+
const { type: _type, id: _id, summary: _summary, content: _content, ...metadata } = item;
|
|
300
|
+
return metadata;
|
|
301
|
+
}
|
|
302
|
+
function toCodexUsage(rawUsage) {
|
|
303
|
+
if (!rawUsage || typeof rawUsage !== 'object')
|
|
304
|
+
return undefined;
|
|
305
|
+
const inputTokens = rawUsage.input_tokens ?? rawUsage.inputTokens;
|
|
306
|
+
const outputTokens = rawUsage.output_tokens ?? rawUsage.outputTokens;
|
|
307
|
+
if (inputTokens === undefined && outputTokens === undefined)
|
|
308
|
+
return undefined;
|
|
309
|
+
const cachedInputTokens = rawUsage.input_tokens_details?.cached_tokens ?? rawUsage.inputTokensDetails?.cachedTokens;
|
|
310
|
+
const cacheWriteTokens = rawUsage.input_tokens_details?.cache_write_tokens ?? rawUsage.inputTokensDetails?.cacheWriteTokens;
|
|
311
|
+
return {
|
|
312
|
+
...(inputTokens !== undefined ? { inputTokens } : {}),
|
|
313
|
+
...(outputTokens !== undefined ? { outputTokens } : {}),
|
|
314
|
+
...(cachedInputTokens !== undefined ? { cachedInputTokens } : {}),
|
|
315
|
+
...(cacheWriteTokens !== undefined ? { cacheWriteTokens } : {}),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
function codexString(value) {
|
|
319
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
320
|
+
}
|
|
321
|
+
import { isIncompleteStreamTerminalError, isPreviousResponseNotFoundError, isRetryableTransportError, isWebSocketConnectionLimitReachedError, } from '../services/retry/retry-error-classification.js';
|
|
16
322
|
const SUSPICIOUS_RECONSTRUCTED_OUTPUT_ITEM_COUNT = 20;
|
|
17
323
|
const TERMINAL_RESPONSE_EVENT_TYPES = new Set([
|
|
18
324
|
'response.completed',
|
|
@@ -53,23 +359,52 @@ function stripCodexReplayIds(input) {
|
|
|
53
359
|
}
|
|
54
360
|
function normalizeCodexRequestData(requestData, request, model, options = {}) {
|
|
55
361
|
const normalizedRequestData = { ...requestData };
|
|
56
|
-
// Codex responses endpoint rejects temperature; always omit
|
|
362
|
+
// Codex responses endpoint rejects temperature and max_output_tokens; always omit them.
|
|
57
363
|
if ('temperature' in normalizedRequestData) {
|
|
58
364
|
delete normalizedRequestData.temperature;
|
|
59
365
|
}
|
|
366
|
+
if ('max_output_tokens' in normalizedRequestData) {
|
|
367
|
+
delete normalizedRequestData.max_output_tokens;
|
|
368
|
+
}
|
|
60
369
|
const hasPreviousResponseId = (typeof normalizedRequestData.previous_response_id === 'string' &&
|
|
61
370
|
normalizedRequestData.previous_response_id.length > 0) ||
|
|
62
371
|
(typeof request?.previousResponseId === 'string' && request.previousResponseId.length > 0);
|
|
63
372
|
const normalizedInput = !hasPreviousResponseId && Array.isArray(normalizedRequestData.input)
|
|
64
|
-
?
|
|
373
|
+
? dropUnpairedCodexToolItems(normalizedRequestData.input)
|
|
65
374
|
: normalizedRequestData.input;
|
|
66
|
-
normalizedRequestData.input = stripCodexReplayIds(normalizedInput)
|
|
67
|
-
|
|
375
|
+
normalizedRequestData.input = stripCodexReplayIds(Array.isArray(normalizedInput)
|
|
376
|
+
? normalizedInput.map((item) => {
|
|
377
|
+
if (item?.type === 'function_call_result' || item?.type === 'function_call_output') {
|
|
378
|
+
// The Responses API rejects unknown parameters, so the camelCase
|
|
379
|
+
// spellings must be dropped, not just shadowed by the snake_case one
|
|
380
|
+
// added below — spreading `...item` alone leaves `callId` on the
|
|
381
|
+
// object alongside the new `call_id`.
|
|
382
|
+
const { callId: _callId, call_id: _call_id, tool_call_id: _toolCallId, ...rest } = item;
|
|
383
|
+
return {
|
|
384
|
+
...rest,
|
|
385
|
+
type: 'function_call_output',
|
|
386
|
+
call_id: item.call_id ?? item.callId ?? item.tool_call_id,
|
|
387
|
+
// Responses supports rich function output content (input text,
|
|
388
|
+
// images, and files). Preserve the already-normalized array;
|
|
389
|
+
// only legacy object output needs JSON serialization.
|
|
390
|
+
output: typeof item.output === 'string' || Array.isArray(item.output)
|
|
391
|
+
? item.output
|
|
392
|
+
: JSON.stringify(item.output ?? ''),
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
if (item?.type === 'function_call' && item.callId && !item.call_id) {
|
|
396
|
+
const { callId: _callId, ...rest } = item;
|
|
397
|
+
return { ...rest, call_id: item.callId };
|
|
398
|
+
}
|
|
399
|
+
return item;
|
|
400
|
+
})
|
|
401
|
+
: normalizedInput);
|
|
402
|
+
const modelInclude = request?.codex?.include;
|
|
68
403
|
if (Array.isArray(modelInclude) && modelInclude.length > 0) {
|
|
69
404
|
const existingInclude = Array.isArray(normalizedRequestData.include) ? normalizedRequestData.include : [];
|
|
70
405
|
normalizedRequestData.include = Array.from(new Set([...existingInclude, ...modelInclude].filter((entry) => typeof entry === 'string' && entry.length > 0)));
|
|
71
406
|
}
|
|
72
|
-
const promptCacheKey = request?.
|
|
407
|
+
const promptCacheKey = request?.codex?.promptCacheKey;
|
|
73
408
|
if (typeof promptCacheKey === 'string' && promptCacheKey.length > 0) {
|
|
74
409
|
normalizedRequestData.prompt_cache_key = promptCacheKey;
|
|
75
410
|
}
|
|
@@ -133,17 +468,13 @@ const summarizeReconstructedItems = (items) => {
|
|
|
133
468
|
// Codex's `/backend-api/codex/responses` endpoint can ship terminal response
|
|
134
469
|
// frames with either an empty `output` array or no `output` field at all, even
|
|
135
470
|
// when the assistant message was already delivered via
|
|
136
|
-
// `response.output_item.done`. The
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
// converting the terminal payload.
|
|
471
|
+
// `response.output_item.done`. The application transport must treat the
|
|
472
|
+
// terminal frame as authoritative; when it is empty or missing, retaining the
|
|
473
|
+
// completed output items prevents a false empty completion.
|
|
140
474
|
//
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
// items
|
|
144
|
-
// `response.output` is empty or missing, swaps in the accumulated items so the
|
|
145
|
-
// parent's existing conversion logic (`convertToOutputItem`) produces a normal
|
|
146
|
-
// `response_done` event.
|
|
475
|
+
// The Codex transport accumulates raw items from `response.output_item.done`
|
|
476
|
+
// and, only when terminal `response.output` is empty or missing, uses those
|
|
477
|
+
// accumulated items for its application-owned completion event.
|
|
147
478
|
const CODEX_SERVER_HISTORY_TOOL_RESULT_TYPES = new Set([
|
|
148
479
|
'function_call_output',
|
|
149
480
|
'function_call_result',
|
|
@@ -161,13 +492,16 @@ const normalizeCodexServerHistoryItem = (item) => {
|
|
|
161
492
|
const record = asRecord(item);
|
|
162
493
|
const type = stringValue(record?.type);
|
|
163
494
|
const itemId = stringValue(record?.id);
|
|
164
|
-
const callId = stringValue(record?.call_id) ??
|
|
495
|
+
const callId = stringValue(record?.call_id) ??
|
|
496
|
+
stringValue(record?.callId) ??
|
|
497
|
+
stringValue(record?.tool_call_id) ??
|
|
498
|
+
(type === 'tool_call' || type === 'tool_result' ? stringValue(record?.id) : undefined);
|
|
165
499
|
return {
|
|
166
500
|
type,
|
|
167
501
|
itemId,
|
|
168
502
|
callId,
|
|
169
|
-
isFunctionCall: type === 'function_call',
|
|
170
|
-
isToolResult: typeof type === 'string' && CODEX_SERVER_HISTORY_TOOL_RESULT_TYPES.has(type),
|
|
503
|
+
isFunctionCall: type === 'function_call' || type === 'tool_call',
|
|
504
|
+
isToolResult: type === 'tool_result' || (typeof type === 'string' && CODEX_SERVER_HISTORY_TOOL_RESULT_TYPES.has(type)),
|
|
171
505
|
};
|
|
172
506
|
};
|
|
173
507
|
const isUserInputMessage = (item) => asRecord(item)?.role === 'user';
|
|
@@ -190,17 +524,16 @@ const isToolContinuationItem = (item) => {
|
|
|
190
524
|
return normalized.isFunctionCall && Boolean(normalized.itemId);
|
|
191
525
|
};
|
|
192
526
|
const findServerManagedDeltaStart = (input) => {
|
|
193
|
-
let
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
return trailingToolResultStart;
|
|
527
|
+
let endUserIndex = input.length;
|
|
528
|
+
while (endUserIndex > 0 && isUserInputMessage(input[endUserIndex - 1])) {
|
|
529
|
+
endUserIndex--;
|
|
530
|
+
}
|
|
531
|
+
if (endUserIndex > 0 && isToolContinuationItem(input[endUserIndex - 1])) {
|
|
532
|
+
let toolStart = endUserIndex;
|
|
533
|
+
while (toolStart > 0 && isToolContinuationItem(input[toolStart - 1])) {
|
|
534
|
+
toolStart--;
|
|
535
|
+
}
|
|
536
|
+
return toolStart;
|
|
204
537
|
}
|
|
205
538
|
for (let index = input.length - 1; index >= 0; index--) {
|
|
206
539
|
if (isUserInputMessage(input[index])) {
|
|
@@ -231,6 +564,45 @@ const collectToolResultCallIds = (input) => {
|
|
|
231
564
|
}
|
|
232
565
|
return ids;
|
|
233
566
|
};
|
|
567
|
+
const collectFunctionCallIds = (input) => {
|
|
568
|
+
if (!Array.isArray(input)) {
|
|
569
|
+
return [];
|
|
570
|
+
}
|
|
571
|
+
const ids = [];
|
|
572
|
+
for (const item of input) {
|
|
573
|
+
const normalized = normalizeCodexServerHistoryItem(item);
|
|
574
|
+
if (normalized.isFunctionCall && normalized.callId) {
|
|
575
|
+
ids.push(normalized.callId);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
return ids;
|
|
579
|
+
};
|
|
580
|
+
const dropUnpairedCodexToolItems = (history) => {
|
|
581
|
+
const callIds = new Set();
|
|
582
|
+
const resultIds = new Set();
|
|
583
|
+
for (const item of history) {
|
|
584
|
+
const normalized = normalizeCodexServerHistoryItem(item);
|
|
585
|
+
if (!normalized.callId)
|
|
586
|
+
continue;
|
|
587
|
+
if (normalized.isFunctionCall)
|
|
588
|
+
callIds.add(normalized.callId);
|
|
589
|
+
if (normalized.isToolResult)
|
|
590
|
+
resultIds.add(normalized.callId);
|
|
591
|
+
}
|
|
592
|
+
if (callIds.size === 0 && resultIds.size === 0)
|
|
593
|
+
return history;
|
|
594
|
+
const filtered = history.filter((item) => {
|
|
595
|
+
const normalized = normalizeCodexServerHistoryItem(item);
|
|
596
|
+
if (!normalized.callId)
|
|
597
|
+
return true;
|
|
598
|
+
if (normalized.isFunctionCall)
|
|
599
|
+
return resultIds.has(normalized.callId);
|
|
600
|
+
if (normalized.isToolResult)
|
|
601
|
+
return callIds.has(normalized.callId);
|
|
602
|
+
return true;
|
|
603
|
+
});
|
|
604
|
+
return filtered.length === history.length ? history : filtered;
|
|
605
|
+
};
|
|
234
606
|
const filterServerManagedInput = (input, consumedToolResultCallIds) => {
|
|
235
607
|
if (!Array.isArray(input)) {
|
|
236
608
|
return input;
|
|
@@ -245,27 +617,24 @@ const filterServerManagedInput = (input, consumedToolResultCallIds) => {
|
|
|
245
617
|
// function calls it issued). The request only needs the *new* items
|
|
246
618
|
// produced since then.
|
|
247
619
|
// Tool continuation: the input ends with a tool-call output answering the
|
|
248
|
-
// previous response's function call(s)
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
// ("No tool output found for function call …"). The interleaved
|
|
257
|
-
// function-call items are then dropped because the server already holds
|
|
258
|
-
// them via previous_response_id.
|
|
259
|
-
if (isToolResultItem(input[input.length - 1])) {
|
|
260
|
-
let start = input.length - 1;
|
|
620
|
+
// previous response's function call(s) — or tool-call output(s) followed by
|
|
621
|
+
// user steer message(s) admitted mid-turn.
|
|
622
|
+
let endUserIndex = input.length;
|
|
623
|
+
while (endUserIndex > 0 && isUserInputMessage(input[endUserIndex - 1])) {
|
|
624
|
+
endUserIndex--;
|
|
625
|
+
}
|
|
626
|
+
if (endUserIndex > 0 && isToolResultItem(input[endUserIndex - 1])) {
|
|
627
|
+
let start = endUserIndex - 1;
|
|
261
628
|
while (start > 0 && isToolContinuationItem(input[start - 1])) {
|
|
262
629
|
start--;
|
|
263
630
|
}
|
|
264
|
-
const trailing = input.slice(start);
|
|
631
|
+
const trailing = input.slice(start, endUserIndex);
|
|
265
632
|
// A clean run of tool results (grouped layout) needs no filtering; for
|
|
266
633
|
// the paired layout, drop the interleaved function-call items.
|
|
267
634
|
const toolResults = trailing.every(isToolResultItem) ? trailing : trailing.filter(isToolResultItem);
|
|
268
|
-
|
|
635
|
+
const filteredToolResults = filterConsumedToolResults(toolResults, consumedToolResultCallIds);
|
|
636
|
+
const trailingUserMessages = input.slice(endUserIndex);
|
|
637
|
+
return [...filteredToolResults, ...trailingUserMessages];
|
|
269
638
|
}
|
|
270
639
|
// Fresh user turn with no trailing tool output: the delta is the latest
|
|
271
640
|
// user message onward.
|
|
@@ -278,11 +647,21 @@ const getResponseIdFromResponse = (response) => {
|
|
|
278
647
|
return typeof responseId === 'string' && responseId.length > 0 ? responseId : undefined;
|
|
279
648
|
};
|
|
280
649
|
const getResponseIdFromStreamEvent = (event) => {
|
|
281
|
-
const
|
|
282
|
-
if (
|
|
650
|
+
const candidate = asRecord(event);
|
|
651
|
+
if (!candidate ||
|
|
652
|
+
!['response.completed', 'response.incomplete', 'response.failed'].includes(String(candidate.type))) {
|
|
653
|
+
return undefined;
|
|
654
|
+
}
|
|
655
|
+
return getResponseIdFromResponse(candidate.response) ?? getResponseIdFromResponse(candidate);
|
|
656
|
+
};
|
|
657
|
+
const getResponseOutputFromStreamEvent = (event) => {
|
|
658
|
+
const candidate = asRecord(event);
|
|
659
|
+
if (!candidate ||
|
|
660
|
+
!['response.completed', 'response.incomplete', 'response.failed'].includes(String(candidate.type))) {
|
|
283
661
|
return undefined;
|
|
284
662
|
}
|
|
285
|
-
|
|
663
|
+
const response = asRecord(candidate.response);
|
|
664
|
+
return Array.isArray(response?.output) ? response.output : undefined;
|
|
286
665
|
};
|
|
287
666
|
const getErrorMessage = (error) => {
|
|
288
667
|
if (typeof error === 'string') {
|
|
@@ -301,6 +680,11 @@ const isDefinitelyUnsentWebSocketError = (error, seen = new Set()) => {
|
|
|
301
680
|
if (!error || seen.has(error))
|
|
302
681
|
return false;
|
|
303
682
|
seen.add(error);
|
|
683
|
+
// The server explicitly rejects this request before model generation and
|
|
684
|
+
// instructs the client to reconnect. Retrying from durable history is safe;
|
|
685
|
+
// treating it as an ambiguous model outcome would suppress recovery.
|
|
686
|
+
if (isWebSocketConnectionLimitReachedError(error))
|
|
687
|
+
return true;
|
|
304
688
|
if (typeof error === 'string') {
|
|
305
689
|
const message = error.toLowerCase();
|
|
306
690
|
return (message.includes('before opening') ||
|
|
@@ -319,45 +703,70 @@ const isDefinitelyUnsentWebSocketError = (error, seen = new Set()) => {
|
|
|
319
703
|
return isDefinitelyUnsentWebSocketError(record.message, seen) || isDefinitelyUnsentWebSocketError(record.cause, seen);
|
|
320
704
|
};
|
|
321
705
|
const asAmbiguousModelOutcome = (error) => {
|
|
322
|
-
|
|
706
|
+
// Connection never carried the request: safe to let outer retry / transport
|
|
707
|
+
// fallback policies decide. Do not pretend the model may have run.
|
|
708
|
+
if (isDefinitelyUnsentWebSocketError(error)) {
|
|
323
709
|
return undefined;
|
|
324
710
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
711
|
+
// Incomplete stream terminals keep transportFallback=false so Codex does not
|
|
712
|
+
// force an HTTP/WS switch — but the request may already have been accepted,
|
|
713
|
+
// so replaying is unsafe. Wrap them the same way as transport-fallback
|
|
714
|
+
// failures so RetryingModel and the conversation classifier terminate.
|
|
715
|
+
if (isIncompleteStreamTerminalError(error) || isRetryableTransportError(error).transportFallback) {
|
|
716
|
+
return new AmbiguousModelOutcomeError(getErrorMessage(error) || 'Codex request outcome is unknown.', {
|
|
717
|
+
cause: error,
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
return undefined;
|
|
328
721
|
};
|
|
329
|
-
const hasGenerateFalse = (request) => request.
|
|
330
|
-
const
|
|
722
|
+
const hasGenerateFalse = (request) => request.providerOptions?.generate === false;
|
|
723
|
+
const withProviderOptions = (request, providerOptions) => ({
|
|
331
724
|
...request,
|
|
332
|
-
|
|
333
|
-
...request.
|
|
334
|
-
|
|
335
|
-
...request.modelSettings?.providerData,
|
|
336
|
-
...providerData,
|
|
337
|
-
},
|
|
725
|
+
providerOptions: {
|
|
726
|
+
...request.providerOptions,
|
|
727
|
+
...providerOptions,
|
|
338
728
|
},
|
|
339
729
|
});
|
|
340
730
|
export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
341
731
|
modelId;
|
|
342
732
|
tokenManager;
|
|
343
|
-
diagnosticLogger;
|
|
344
|
-
sessionContextService;
|
|
345
|
-
websocketReceiveTimeouts;
|
|
346
733
|
codexPreviousResponseIds = new Map();
|
|
347
734
|
codexConsumedToolResultCallIdsByResponseId = new Map();
|
|
735
|
+
codexFunctionCallIdsByResponseId = new Map();
|
|
348
736
|
codexTurnIdsBySession = new Map();
|
|
349
737
|
#serverHistoryReuseDisabled = false;
|
|
350
738
|
providerTraffic;
|
|
739
|
+
diagnosticLogger;
|
|
740
|
+
sessionContextService;
|
|
741
|
+
requestCapture;
|
|
351
742
|
chainedWireState = new ChainedWireState(new LunaResponsesLiteWireProtocol());
|
|
352
743
|
requestTokens = new WeakMap();
|
|
353
|
-
|
|
354
|
-
|
|
744
|
+
websocketReceiveTimeouts;
|
|
745
|
+
constructor(client, modelId, tokenManager, diagnosticLogger, providerTraffic, sessionContextService, websocketReceiveTimeouts = DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS, requestCapture, transport) {
|
|
746
|
+
const candidates = [
|
|
747
|
+
transport,
|
|
748
|
+
diagnosticLogger,
|
|
749
|
+
providerTraffic,
|
|
750
|
+
sessionContextService,
|
|
751
|
+
websocketReceiveTimeouts,
|
|
752
|
+
requestCapture,
|
|
753
|
+
];
|
|
754
|
+
const injectedTransport = candidates.find((candidate) => candidate instanceof CodexResponsesTransport);
|
|
755
|
+
super(client, modelId, injectedTransport);
|
|
355
756
|
this.modelId = modelId;
|
|
356
757
|
this.tokenManager = tokenManager;
|
|
357
|
-
this.diagnosticLogger = diagnosticLogger;
|
|
358
|
-
this.
|
|
359
|
-
|
|
360
|
-
|
|
758
|
+
this.diagnosticLogger = diagnosticLogger instanceof CodexResponsesTransport ? undefined : diagnosticLogger;
|
|
759
|
+
this.providerTraffic =
|
|
760
|
+
providerTraffic instanceof CodexResponsesTransport
|
|
761
|
+
? DUMMY_PROVIDER_TRAFFIC
|
|
762
|
+
: providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
763
|
+
this.sessionContextService =
|
|
764
|
+
sessionContextService instanceof CodexResponsesTransport ? undefined : sessionContextService;
|
|
765
|
+
this.websocketReceiveTimeouts =
|
|
766
|
+
websocketReceiveTimeouts instanceof CodexResponsesTransport
|
|
767
|
+
? DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS
|
|
768
|
+
: websocketReceiveTimeouts;
|
|
769
|
+
this.requestCapture = requestCapture instanceof CodexResponsesTransport ? undefined : requestCapture;
|
|
361
770
|
}
|
|
362
771
|
#modelNameFallback() {
|
|
363
772
|
return this.modelId;
|
|
@@ -402,13 +811,39 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
402
811
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
403
812
|
});
|
|
404
813
|
}
|
|
405
|
-
|
|
814
|
+
#logTrafficClosed(requestId, requestData, outcome, eventCount) {
|
|
815
|
+
const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
816
|
+
const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
|
|
817
|
+
providerTraffic.recordResponseClosed({
|
|
818
|
+
requestId,
|
|
819
|
+
provider: 'codex',
|
|
820
|
+
model,
|
|
821
|
+
outcome,
|
|
822
|
+
eventCount,
|
|
823
|
+
modelClass: WS_RESPONSE_MODEL_CLASS,
|
|
824
|
+
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal) {
|
|
406
828
|
const logReceived = this.#logTrafficReceived.bind(this);
|
|
407
829
|
const logFailed = this.#logTrafficFailed.bind(this);
|
|
830
|
+
const logClosed = this.#logTrafficClosed.bind(this);
|
|
408
831
|
const wireState = this.chainedWireState;
|
|
409
832
|
async function* wrapped() {
|
|
833
|
+
let sawTerminalEvent = false;
|
|
834
|
+
let sourceExhausted = false;
|
|
835
|
+
let streamFailed = false;
|
|
836
|
+
let eventCount = 0;
|
|
410
837
|
try {
|
|
411
838
|
for await (const event of responseStream) {
|
|
839
|
+
eventCount += 1;
|
|
840
|
+
if (event &&
|
|
841
|
+
typeof event === 'object' &&
|
|
842
|
+
(event.type === 'response.completed' ||
|
|
843
|
+
event.type === 'response.incomplete' ||
|
|
844
|
+
event.type === 'response.failed')) {
|
|
845
|
+
sawTerminalEvent = true;
|
|
846
|
+
}
|
|
412
847
|
if (event &&
|
|
413
848
|
typeof event === 'object' &&
|
|
414
849
|
(event.type === 'response.completed' || event.type === 'response.incomplete') &&
|
|
@@ -421,15 +856,20 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
421
856
|
}
|
|
422
857
|
yield event;
|
|
423
858
|
}
|
|
859
|
+
sourceExhausted = true;
|
|
424
860
|
}
|
|
425
861
|
catch (error) {
|
|
426
|
-
|
|
862
|
+
streamFailed = true;
|
|
863
|
+
if (wireStateKey && !isWebSocketConnectionLimitReachedError(error)) {
|
|
427
864
|
wireState.invalidate(wireStateKey);
|
|
428
865
|
}
|
|
429
866
|
logFailed(requestId, requestData, error);
|
|
430
867
|
throw error;
|
|
431
868
|
}
|
|
432
869
|
finally {
|
|
870
|
+
if (!sawTerminalEvent && !sourceExhausted && !streamFailed) {
|
|
871
|
+
logClosed(requestId, requestData, signal?.aborted ? 'aborted' : 'consumer_closed', eventCount);
|
|
872
|
+
}
|
|
433
873
|
if (wireStateKey && wireStateToken) {
|
|
434
874
|
wireState.abandon(wireStateKey, wireStateToken);
|
|
435
875
|
}
|
|
@@ -441,9 +881,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
441
881
|
if (!request) {
|
|
442
882
|
return undefined;
|
|
443
883
|
}
|
|
444
|
-
const response = await super.
|
|
884
|
+
const response = await super.fetchUnaryResponse(request);
|
|
445
885
|
const responseId = getResponseIdFromResponse(response);
|
|
446
|
-
this.#rememberCodexResponseId(responseId);
|
|
886
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, true);
|
|
447
887
|
return responseId;
|
|
448
888
|
}
|
|
449
889
|
async #warmupCodexStream(request) {
|
|
@@ -451,10 +891,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
451
891
|
return undefined;
|
|
452
892
|
}
|
|
453
893
|
let responseId;
|
|
454
|
-
for await (const event of super.
|
|
455
|
-
|
|
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
|
+
}
|
|
456
900
|
}
|
|
457
|
-
this.#rememberCodexResponseId(responseId);
|
|
458
901
|
return responseId;
|
|
459
902
|
}
|
|
460
903
|
#prepareCodexServerHistoryRequest(request) {
|
|
@@ -468,6 +911,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
468
911
|
}
|
|
469
912
|
const consumedToolResultCallIds = this.#getConsumedToolResultCallIds(previousResponseId);
|
|
470
913
|
const filteredInput = filterServerManagedInput(input, consumedToolResultCallIds);
|
|
914
|
+
const knownFunctionCallIds = this.codexFunctionCallIdsByResponseId.get(previousResponseId);
|
|
915
|
+
if (request.previousResponseId === previousResponseId && knownFunctionCallIds) {
|
|
916
|
+
const orphanedCallIds = collectToolResultCallIds(filteredInput).filter((callId) => !knownFunctionCallIds.has(callId));
|
|
917
|
+
if (orphanedCallIds.length > 0) {
|
|
918
|
+
throw new OrphanedChainedToolOutputError([...new Set(orphanedCallIds)]);
|
|
919
|
+
}
|
|
920
|
+
}
|
|
471
921
|
this.#warnIfConsumedToolResultsWereDropped(previousResponseId, input, filteredInput, consumedToolResultCallIds);
|
|
472
922
|
if (request.previousResponseId === previousResponseId && filteredInput === input) {
|
|
473
923
|
return request;
|
|
@@ -486,11 +936,18 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
486
936
|
if (!key || hasGenerateFalse(request)) {
|
|
487
937
|
return undefined;
|
|
488
938
|
}
|
|
939
|
+
const hasToolResultBeforeTrailingUserMessages = (items) => {
|
|
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
|
+
};
|
|
489
946
|
const input = request.input;
|
|
490
947
|
const isInternalToolContinuation = Array.isArray(input) &&
|
|
491
948
|
input.length > 1 &&
|
|
492
949
|
input.some(isUserInputMessage) &&
|
|
493
|
-
|
|
950
|
+
hasToolResultBeforeTrailingUserMessages(input);
|
|
494
951
|
return isInternalToolContinuation ? this.codexPreviousResponseIds.get(key) : undefined;
|
|
495
952
|
}
|
|
496
953
|
#prepareCodexServerHistoryRequests(request) {
|
|
@@ -502,7 +959,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
502
959
|
if (preparedRequest.previousResponseId) {
|
|
503
960
|
return { request: preparedRequest };
|
|
504
961
|
}
|
|
505
|
-
const input = Array.isArray(request.input) ?
|
|
962
|
+
const input = Array.isArray(request.input) ? dropUnpairedCodexToolItems(request.input) : request.input;
|
|
506
963
|
const replayRequest = input === request.input ? request : { ...request, input };
|
|
507
964
|
if (!Array.isArray(input) || input.length === 0) {
|
|
508
965
|
return { request: replayRequest };
|
|
@@ -528,7 +985,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
528
985
|
}
|
|
529
986
|
}
|
|
530
987
|
return {
|
|
531
|
-
warmupRequest:
|
|
988
|
+
warmupRequest: withProviderOptions({
|
|
532
989
|
...replayRequest,
|
|
533
990
|
input: warmupItems,
|
|
534
991
|
}, { generate: false }),
|
|
@@ -547,7 +1004,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
547
1004
|
previousResponseId,
|
|
548
1005
|
});
|
|
549
1006
|
}
|
|
550
|
-
#rememberCodexResponseId(responseId) {
|
|
1007
|
+
#rememberCodexResponseId(responseId, output, input, recordChainAnchor = false) {
|
|
551
1008
|
if (!responseId) {
|
|
552
1009
|
return;
|
|
553
1010
|
}
|
|
@@ -556,6 +1013,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
556
1013
|
if (key) {
|
|
557
1014
|
this.codexPreviousResponseIds.set(key, responseId);
|
|
558
1015
|
}
|
|
1016
|
+
if (recordChainAnchor && (Array.isArray(output) || Array.isArray(input))) {
|
|
1017
|
+
this.codexFunctionCallIdsByResponseId.set(responseId, new Set([...collectFunctionCallIds(output), ...collectFunctionCallIds(input)]));
|
|
1018
|
+
}
|
|
559
1019
|
}
|
|
560
1020
|
#getConsumedToolResultCallIds(responseId) {
|
|
561
1021
|
if (!responseId) {
|
|
@@ -589,15 +1049,26 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
589
1049
|
consumed.add(callId);
|
|
590
1050
|
}
|
|
591
1051
|
this.codexConsumedToolResultCallIdsByResponseId.set(responseId, consumed);
|
|
1052
|
+
// A continuation may explicitly reuse the prior response ID; retain the
|
|
1053
|
+
// consumed-output checkpoint under that anchor as well as the new response.
|
|
1054
|
+
if (previousResponseId)
|
|
1055
|
+
this.codexConsumedToolResultCallIdsByResponseId.set(previousResponseId, consumed);
|
|
592
1056
|
}
|
|
593
1057
|
#forgetCodexResponseId() {
|
|
594
1058
|
this.#serverHistoryReuseDisabled = true;
|
|
595
1059
|
this.codexPreviousResponseIds.clear();
|
|
596
1060
|
this.codexConsumedToolResultCallIdsByResponseId.clear();
|
|
1061
|
+
this.codexFunctionCallIdsByResponseId.clear();
|
|
597
1062
|
this.codexTurnIdsBySession.clear();
|
|
598
1063
|
this.chainedWireState.clear();
|
|
599
1064
|
}
|
|
600
1065
|
#shouldForgetCodexServerHistory(error) {
|
|
1066
|
+
// This rejects the new request before generation; it expires the socket,
|
|
1067
|
+
// not the last acknowledged response. Retaining that response keeps an
|
|
1068
|
+
// already-executed tool output paired with the call that introduced it.
|
|
1069
|
+
if (isWebSocketConnectionLimitReachedError(error)) {
|
|
1070
|
+
return false;
|
|
1071
|
+
}
|
|
601
1072
|
const message = getErrorMessage(error);
|
|
602
1073
|
return (isPreviousResponseNotFoundError(error) ||
|
|
603
1074
|
message.includes('previous_response_not_found') ||
|
|
@@ -665,7 +1136,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
665
1136
|
const { previousResponseId: _previousResponseId, ...rest } = request;
|
|
666
1137
|
return rest;
|
|
667
1138
|
}
|
|
668
|
-
async
|
|
1139
|
+
async fetchUnaryResponse(request) {
|
|
669
1140
|
const run = async () => {
|
|
670
1141
|
let attemptedWithServerHistory = false;
|
|
671
1142
|
try {
|
|
@@ -673,9 +1144,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
673
1144
|
attemptedWithServerHistory = Boolean(preparedRequest.warmupRequest || preparedRequest.request?.previousResponseId);
|
|
674
1145
|
const warmupResponseId = await this.#warmupCodexUnary(preparedRequest.warmupRequest);
|
|
675
1146
|
const effectiveRequest = this.#getEffectiveCodexRequestAfterWarmup(request, preparedRequest, warmupResponseId);
|
|
676
|
-
const response = await super.
|
|
1147
|
+
const response = await super.fetchUnaryResponse(effectiveRequest);
|
|
677
1148
|
const responseId = getResponseIdFromResponse(response);
|
|
678
|
-
this.#rememberCodexResponseId(responseId);
|
|
1149
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, effectiveRequest.input);
|
|
679
1150
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
680
1151
|
return response;
|
|
681
1152
|
}
|
|
@@ -686,9 +1157,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
686
1157
|
throw error;
|
|
687
1158
|
}
|
|
688
1159
|
const fallbackRequest = this.#withoutCodexServerHistory(request);
|
|
689
|
-
const response = await super.
|
|
1160
|
+
const response = await super.fetchUnaryResponse(fallbackRequest);
|
|
690
1161
|
const responseId = getResponseIdFromResponse(response);
|
|
691
|
-
this.#rememberCodexResponseId(responseId);
|
|
1162
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input);
|
|
692
1163
|
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
693
1164
|
return response;
|
|
694
1165
|
}
|
|
@@ -698,14 +1169,10 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
698
1169
|
throw asAmbiguousModelOutcome(error) ?? error;
|
|
699
1170
|
}
|
|
700
1171
|
};
|
|
701
|
-
|
|
702
|
-
if (currentTrace) {
|
|
703
|
-
return run();
|
|
704
|
-
}
|
|
705
|
-
return withTrace('codex-responses-ws-model-trace', run);
|
|
1172
|
+
return run();
|
|
706
1173
|
}
|
|
707
|
-
async *
|
|
708
|
-
let
|
|
1174
|
+
async *rawStream(request) {
|
|
1175
|
+
let receivedRawFrame = false;
|
|
709
1176
|
let attemptedWithServerHistory = false;
|
|
710
1177
|
try {
|
|
711
1178
|
const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
|
|
@@ -713,38 +1180,56 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
713
1180
|
const warmupResponseId = await this.#warmupCodexStream(preparedRequest.warmupRequest);
|
|
714
1181
|
const effectiveRequest = this.#getEffectiveCodexRequestAfterWarmup(request, preparedRequest, warmupResponseId);
|
|
715
1182
|
let responseId;
|
|
716
|
-
for await (const event of super.
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
1183
|
+
for await (const event of super.rawStream(effectiveRequest)) {
|
|
1184
|
+
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
1185
|
+
if (eventResponseId) {
|
|
1186
|
+
responseId = eventResponseId;
|
|
1187
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), effectiveRequest.input);
|
|
1188
|
+
}
|
|
1189
|
+
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
|
|
1190
|
+
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
1191
|
+
}
|
|
1192
|
+
receivedRawFrame = true;
|
|
720
1193
|
yield event;
|
|
721
1194
|
}
|
|
722
1195
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
723
1196
|
}
|
|
724
1197
|
catch (error) {
|
|
725
|
-
if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !
|
|
1198
|
+
if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !receivedRawFrame) {
|
|
726
1199
|
this.#forgetCodexResponseId();
|
|
727
1200
|
if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
|
|
728
1201
|
throw error;
|
|
729
1202
|
}
|
|
730
1203
|
const fallbackRequest = this.#withoutCodexServerHistory(request);
|
|
731
1204
|
let responseId;
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
1205
|
+
try {
|
|
1206
|
+
for await (const event of super.rawStream(fallbackRequest)) {
|
|
1207
|
+
receivedRawFrame = true;
|
|
1208
|
+
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
1209
|
+
if (eventResponseId) {
|
|
1210
|
+
responseId = eventResponseId;
|
|
1211
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input);
|
|
1212
|
+
}
|
|
1213
|
+
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
|
|
1214
|
+
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
1215
|
+
}
|
|
1216
|
+
yield event;
|
|
1217
|
+
}
|
|
1218
|
+
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
1219
|
+
return;
|
|
1220
|
+
}
|
|
1221
|
+
catch (fallbackError) {
|
|
1222
|
+
throw asAmbiguousModelOutcome(fallbackError) ?? fallbackError;
|
|
736
1223
|
}
|
|
737
|
-
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
738
|
-
return;
|
|
739
1224
|
}
|
|
740
1225
|
if (this.#shouldForgetCodexServerHistory(error)) {
|
|
741
1226
|
this.#forgetCodexResponseId();
|
|
742
1227
|
}
|
|
743
|
-
throw
|
|
1228
|
+
throw asAmbiguousModelOutcome(error) ?? error;
|
|
744
1229
|
}
|
|
745
1230
|
}
|
|
746
|
-
|
|
747
|
-
const built = super.
|
|
1231
|
+
buildResponsesCreateRequest(request, stream) {
|
|
1232
|
+
const built = super.buildResponsesCreateRequest(request, stream);
|
|
748
1233
|
const requestData = normalizeCodexRequestData(built.requestData, request, this.modelId, {
|
|
749
1234
|
includeDeveloperInstructionsOnChainedRequest: true,
|
|
750
1235
|
});
|
|
@@ -760,7 +1245,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
760
1245
|
requestData: prepared.requestData,
|
|
761
1246
|
};
|
|
762
1247
|
}
|
|
763
|
-
async
|
|
1248
|
+
async fetchResponse(request, stream) {
|
|
764
1249
|
const requestId = randomUUID();
|
|
765
1250
|
const wireStateKey = RESPONSES_LITE_MODELS.has(this.modelId)
|
|
766
1251
|
? this.#getCodexServerHistoryKey() ?? undefined
|
|
@@ -783,46 +1268,46 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
783
1268
|
if (accountId) {
|
|
784
1269
|
extraHeaders['chatgpt-account-id'] = accountId;
|
|
785
1270
|
}
|
|
1271
|
+
const watchdog = createWebSocketReceiveWatchdog(request.signal, this.websocketReceiveTimeouts);
|
|
786
1272
|
const updatedRequest = {
|
|
787
1273
|
...request,
|
|
788
|
-
signal:
|
|
789
|
-
|
|
790
|
-
...request.
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
extraHeaders
|
|
811
|
-
...request.modelSettings?.providerData?.extraHeaders,
|
|
812
|
-
...extraHeaders,
|
|
813
|
-
},
|
|
1274
|
+
signal: watchdog.signal,
|
|
1275
|
+
providerOptions: {
|
|
1276
|
+
...request.providerOptions,
|
|
1277
|
+
...(codexIdentity
|
|
1278
|
+
? {
|
|
1279
|
+
client_metadata: {
|
|
1280
|
+
...asRecord(request.providerOptions?.client_metadata),
|
|
1281
|
+
...codexIdentity.clientMetadata,
|
|
1282
|
+
},
|
|
1283
|
+
}
|
|
1284
|
+
: {}),
|
|
1285
|
+
...(isResponsesLite
|
|
1286
|
+
? {
|
|
1287
|
+
client_metadata: {
|
|
1288
|
+
...asRecord(request.providerOptions?.client_metadata),
|
|
1289
|
+
...(codexIdentity?.clientMetadata ?? {}),
|
|
1290
|
+
ws_request_header_x_openai_internal_codex_responses_lite: 'true',
|
|
1291
|
+
},
|
|
1292
|
+
}
|
|
1293
|
+
: {}),
|
|
1294
|
+
extraHeaders: {
|
|
1295
|
+
...asRecord(request.providerOptions?.extraHeaders),
|
|
1296
|
+
...extraHeaders,
|
|
814
1297
|
},
|
|
815
1298
|
},
|
|
816
1299
|
};
|
|
817
|
-
const
|
|
818
|
-
updatedRequest.signal = watchdog.signal;
|
|
819
|
-
const builtRequest = this._buildResponsesCreateRequest(updatedRequest, true);
|
|
1300
|
+
const builtRequest = this.buildResponsesCreateRequest(updatedRequest, true);
|
|
820
1301
|
const requestData = (asRecord(builtRequest?.requestData) ?? {});
|
|
821
1302
|
const wireStateToken = this.requestTokens.get(updatedRequest);
|
|
1303
|
+
// This is the last application-owned point before the inherited
|
|
1304
|
+
// transport's private fetch path. Capture it without changing the
|
|
1305
|
+
// prepared request or wire state.
|
|
1306
|
+
captureProviderRequest(this.requestCapture, { provider: 'codex', transport: 'websocket', requestData });
|
|
822
1307
|
this.#logTrafficStarted(requestId, requestData, extraHeaders);
|
|
823
1308
|
if (!stream) {
|
|
824
1309
|
try {
|
|
825
|
-
const response = await fetchAndReconstructUnaryResponse(async () => watchdog.wrap(await super.
|
|
1310
|
+
const response = await fetchAndReconstructUnaryResponse(async () => watchdog.wrap(await super.fetchResponse(updatedRequest, true)), this.diagnosticLogger);
|
|
826
1311
|
if (wireStateKey && wireStateToken && typeof response?.id === 'string' && response.id.length > 0) {
|
|
827
1312
|
this.chainedWireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
|
|
828
1313
|
}
|
|
@@ -832,49 +1317,73 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
832
1317
|
catch (error) {
|
|
833
1318
|
const timeoutError = watchdog.timeoutError();
|
|
834
1319
|
watchdog.close();
|
|
1320
|
+
const failure = timeoutError ?? error;
|
|
835
1321
|
if (wireStateKey) {
|
|
836
|
-
|
|
1322
|
+
if (isWebSocketConnectionLimitReachedError(failure)) {
|
|
1323
|
+
if (wireStateToken)
|
|
1324
|
+
this.chainedWireState.abandon(wireStateKey, wireStateToken);
|
|
1325
|
+
}
|
|
1326
|
+
else {
|
|
1327
|
+
this.chainedWireState.invalidate(wireStateKey);
|
|
1328
|
+
}
|
|
837
1329
|
}
|
|
838
|
-
this.#logTrafficFailed(requestId, requestData,
|
|
839
|
-
throw
|
|
1330
|
+
this.#logTrafficFailed(requestId, requestData, failure);
|
|
1331
|
+
throw failure;
|
|
840
1332
|
}
|
|
841
1333
|
}
|
|
842
1334
|
try {
|
|
843
|
-
const response = (await super.
|
|
1335
|
+
const response = (await super.fetchResponse(updatedRequest, stream));
|
|
844
1336
|
const patched = wrapCodexStream(watchdog.wrap(response), this.diagnosticLogger);
|
|
845
|
-
return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken);
|
|
1337
|
+
return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken, updatedRequest.signal);
|
|
846
1338
|
}
|
|
847
1339
|
catch (error) {
|
|
848
1340
|
const timeoutError = watchdog.timeoutError();
|
|
849
1341
|
watchdog.close();
|
|
1342
|
+
const failure = timeoutError ?? error;
|
|
850
1343
|
if (wireStateKey) {
|
|
851
|
-
|
|
1344
|
+
if (isWebSocketConnectionLimitReachedError(failure)) {
|
|
1345
|
+
if (wireStateToken)
|
|
1346
|
+
this.chainedWireState.abandon(wireStateKey, wireStateToken);
|
|
1347
|
+
}
|
|
1348
|
+
else {
|
|
1349
|
+
this.chainedWireState.invalidate(wireStateKey);
|
|
1350
|
+
}
|
|
852
1351
|
}
|
|
853
|
-
this.#logTrafficFailed(requestId, requestData,
|
|
854
|
-
throw
|
|
1352
|
+
this.#logTrafficFailed(requestId, requestData, failure);
|
|
1353
|
+
throw failure;
|
|
855
1354
|
}
|
|
856
1355
|
}
|
|
857
1356
|
}
|
|
858
1357
|
export class CodexResponsesModel extends OpenAIResponsesModel {
|
|
859
1358
|
modelId;
|
|
860
1359
|
diagnosticLogger;
|
|
861
|
-
|
|
862
|
-
|
|
1360
|
+
requestCapture;
|
|
1361
|
+
constructor(client, modelId, diagnosticLogger, requestCapture, transport) {
|
|
1362
|
+
const candidates = [transport, diagnosticLogger, requestCapture];
|
|
1363
|
+
const injectedTransport = candidates.find((candidate) => candidate instanceof CodexResponsesTransport);
|
|
1364
|
+
super(client, modelId, injectedTransport);
|
|
863
1365
|
this.modelId = modelId;
|
|
864
|
-
this.diagnosticLogger = diagnosticLogger;
|
|
1366
|
+
this.diagnosticLogger = diagnosticLogger instanceof CodexResponsesTransport ? undefined : diagnosticLogger;
|
|
1367
|
+
this.requestCapture = requestCapture instanceof CodexResponsesTransport ? undefined : requestCapture;
|
|
865
1368
|
}
|
|
866
|
-
|
|
867
|
-
const built =
|
|
868
|
-
|
|
1369
|
+
buildResponsesCreateRequest(request, stream) {
|
|
1370
|
+
const built = super.buildResponsesCreateRequest(request, stream);
|
|
1371
|
+
const result = {
|
|
869
1372
|
...built,
|
|
870
1373
|
requestData: normalizeCodexRequestData(built.requestData, request, this.modelId),
|
|
871
1374
|
};
|
|
1375
|
+
captureProviderRequest(this.requestCapture, {
|
|
1376
|
+
provider: 'codex',
|
|
1377
|
+
transport: 'http',
|
|
1378
|
+
requestData: result.requestData,
|
|
1379
|
+
});
|
|
1380
|
+
return result;
|
|
872
1381
|
}
|
|
873
|
-
async
|
|
1382
|
+
async fetchResponse(request, stream) {
|
|
874
1383
|
if (!stream) {
|
|
875
|
-
return fetchAndReconstructUnaryResponse(() =>
|
|
1384
|
+
return fetchAndReconstructUnaryResponse(() => super.fetchResponse(request, true), this.diagnosticLogger);
|
|
876
1385
|
}
|
|
877
|
-
const response = await
|
|
1386
|
+
const response = await super.fetchResponse(request, stream);
|
|
878
1387
|
return wrapCodexStream(response, this.diagnosticLogger);
|
|
879
1388
|
}
|
|
880
1389
|
}
|
|
@@ -917,8 +1426,9 @@ export async function* wrapCodexStream(source, logger) {
|
|
|
917
1426
|
const item = event.item;
|
|
918
1427
|
const itemRecord = asRecord(item);
|
|
919
1428
|
// If the accumulated function_call item is missing call_id, backfill it
|
|
920
|
-
// from the itemCallIds map so the
|
|
921
|
-
//
|
|
1429
|
+
// from the itemCallIds map so the inherited transport's
|
|
1430
|
+
// convertToOutputItem picks up the correct identifier and the continuation
|
|
1431
|
+
// request sends the right call_id.
|
|
922
1432
|
if (itemRecord?.type === 'function_call' &&
|
|
923
1433
|
!stringValue(itemRecord?.call_id) &&
|
|
924
1434
|
typeof itemRecord?.id === 'string') {
|