@qduc/term2 0.11.0 → 0.12.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 +6 -4
- package/dist/agent.d.ts +21 -13
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +123 -35
- 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 +283 -128
- package/dist/app.js.map +1 -1
- package/dist/cli.js +91 -27
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-approve-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.js.map +1 -1
- package/dist/components/InputBox.d.ts +18 -32
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +178 -579
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/input/ApplicationInputSurface.d.ts +37 -0
- package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -0
- package/dist/components/input/ApplicationInputSurface.js +78 -0
- package/dist/components/input/ApplicationInputSurface.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 +86 -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 +144 -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 +93 -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 +16 -0
- package/dist/components/input/SkillsMenuSession.d.ts.map +1 -0
- package/dist/components/input/SkillsMenuSession.js +64 -0
- package/dist/components/input/SkillsMenuSession.js.map +1 -0
- package/dist/components/input/SlashMenuSession.d.ts +17 -0
- package/dist/components/input/SlashMenuSession.d.ts.map +1 -0
- package/dist/components/input/SlashMenuSession.js +57 -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 +25 -0
- package/dist/components/input/menu-registry.js.map +1 -0
- package/dist/components/input/menu-types.d.ts +320 -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 +236 -0
- package/dist/components/layout/BackgroundTaskManager.js.map +1 -0
- package/dist/components/layout/BackgroundTasksPanel.d.ts +2 -2
- package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.js +64 -24
- 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 +23 -19
- package/dist/components/layout/BottomArea.d.ts.map +1 -1
- package/dist/components/layout/BottomArea.js +74 -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 +102 -83
- package/dist/components/layout/StatusBar.js.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.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 +138 -15
- 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 +40 -3
- 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 +136 -59
- 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 +92 -15
- package/dist/context/InputContext.js.map +1 -1
- package/dist/contracts/application-stream.d.ts +38 -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 +27 -4
- package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
- package/dist/hooks/conversation-ui-reducer.js +51 -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 +30 -6
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/use-app-commands.d.ts +13 -11
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +90 -63
- package/dist/hooks/use-app-commands.js.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts +18 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.js +77 -8
- package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +30 -13
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +85 -18
- package/dist/hooks/use-conversation.js.map +1 -1
- 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-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.map +1 -1
- package/dist/hooks/use-model-selection.js +50 -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.map +1 -1
- package/dist/hooks/use-provider-selection.js +19 -16
- 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.map +1 -1
- package/dist/hooks/use-slash-commands.js +11 -10
- 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 +79 -44
- package/dist/lib/agent-chat-service.js.map +1 -1
- package/dist/lib/agent-client.d.ts +93 -17
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +398 -37
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts +33 -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 +33 -4
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +140 -101
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/chained-input-filter.d.ts +27 -1
- package/dist/lib/chained-input-filter.d.ts.map +1 -1
- package/dist/lib/chained-input-filter.js +92 -33
- 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 +64 -0
- package/dist/lib/input-owner.d.ts.map +1 -0
- package/dist/lib/input-owner.js +34 -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 +54 -3
- package/dist/lib/subagent-bridge.d.ts.map +1 -1
- package/dist/lib/subagent-bridge.js +118 -20
- 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/anthropic.md +6 -55
- package/dist/prompts/async-subagent-delegation.d.ts +3 -5
- package/dist/prompts/async-subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/async-subagent-delegation.js +10 -34
- package/dist/prompts/async-subagent-delegation.js.map +1 -1
- package/dist/prompts/async-subagent-delegation.ts +11 -40
- package/dist/prompts/gpt-5.6.md +49 -0
- package/dist/prompts/kimi.md +25 -63
- package/dist/prompts/memory.md +1 -1
- package/dist/prompts/orchestrator-prompt.test.ts +92 -0
- package/dist/prompts/orchestrator.md +20 -4
- 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 +30 -8
- package/dist/prompts/prompt-constructor.ts +14 -7
- package/dist/prompts/prompt-profiles.d.ts.map +1 -1
- package/dist/prompts/prompt-profiles.js +5 -0
- package/dist/prompts/prompt-profiles.js.map +1 -1
- package/dist/prompts/prompt-profiles.test.ts +20 -0
- package/dist/prompts/prompt-profiles.ts +5 -0
- package/dist/prompts/search-via-shell.d.ts.map +1 -1
- package/dist/prompts/search-via-shell.js +8 -25
- package/dist/prompts/search-via-shell.js.map +1 -1
- package/dist/prompts/search-via-shell.test.ts +18 -0
- package/dist/prompts/search-via-shell.ts +8 -25
- 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 +24 -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 +35 -0
- package/dist/prompts/subagents/worker.md +8 -0
- 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-responses-model.d.ts +39 -12
- package/dist/providers/codex-responses-model.d.ts.map +1 -1
- package/dist/providers/codex-responses-model.js +656 -155
- 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 +21 -0
- package/dist/providers/codex.provider.d.ts.map +1 -1
- package/dist/providers/codex.provider.js +57 -27
- 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 +31 -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 +62 -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 +12 -0
- package/dist/providers/openai-chat-completions-model.d.ts.map +1 -0
- package/dist/providers/openai-chat-completions-model.js +271 -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 +24 -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 +15 -14
- package/dist/providers/openai-compatible-middleware.js.map +1 -1
- package/dist/providers/openai-compatible-response-normalizer.d.ts +10 -1
- package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -1
- package/dist/providers/openai-compatible-response-normalizer.js +15 -4
- package/dist/providers/openai-compatible-response-normalizer.js.map +1 -1
- package/dist/providers/openai-compatible.provider.d.ts +7 -10
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +80 -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 +9 -7
- package/dist/providers/provider-service.d.ts.map +1 -1
- package/dist/providers/provider-service.js +29 -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 +1236 -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/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 +46 -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 +207 -0
- package/dist/services/approval/approval-decision-executor.js.map +1 -0
- 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 +12 -0
- 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 +13 -0
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +74 -6
- 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 +20 -4
- 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 +120 -13
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +378 -63
- 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 +110 -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 +149 -0
- package/dist/services/conversation/conversation-decoder.js.map +1 -0
- package/dist/services/conversation/conversation-events.d.ts +72 -24
- 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 +23 -14
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +472 -158
- 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 +127 -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 +51 -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 +67 -11
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +133 -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 +69 -12
- package/dist/services/conversation/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation/conversation-store.js +216 -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 +147 -0
- package/dist/services/cost/model-cost.d.ts.map +1 -0
- package/dist/services/cost/model-cost.js +217 -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 +76 -0
- package/dist/services/cost/pricing.js.map +1 -0
- 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/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 +70 -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 +10 -4
- package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-writer.js +184 -57
- 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 +34 -1
- package/dist/services/logging/conversation-logger.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 +3 -0
- package/dist/services/model-service.d.ts.map +1 -1
- package/dist/services/model-service.js +3 -1
- package/dist/services/model-service.js.map +1 -1
- package/dist/services/models/model-catalog-session.d.ts +24 -0
- package/dist/services/models/model-catalog-session.d.ts.map +1 -0
- package/dist/services/models/model-catalog-session.js +70 -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 +79 -0
- package/dist/services/provider-continuity.d.ts.map +1 -1
- package/dist/services/provider-continuity.js +170 -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 +10 -14
- package/dist/services/queue/queue-controller.d.ts.map +1 -1
- package/dist/services/queue/queue-controller.js +77 -59
- 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 +7 -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 +6 -3
- 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 +1 -0
- package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
- package/dist/services/retry/retry-error-classification.js +28 -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 +123 -0
- package/dist/services/session/background-task-control.d.ts.map +1 -0
- package/dist/services/session/background-task-control.js +183 -0
- package/dist/services/session/background-task-control.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 +91 -0
- package/dist/services/session/session-access-state.js.map +1 -0
- package/dist/services/session/session-client-factory.d.ts +61 -0
- package/dist/services/session/session-client-factory.d.ts.map +1 -0
- package/dist/services/session/session-client-factory.js +103 -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 +178 -13
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-input-planner.d.ts +6 -2
- package/dist/services/session/session-input-planner.d.ts.map +1 -1
- package/dist/services/session/session-input-planner.js +4 -0
- 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 +5 -0
- package/dist/services/session/session-stream-processor.d.ts.map +1 -1
- package/dist/services/session/session-stream-processor.js +164 -35
- package/dist/services/session/session-stream-processor.js.map +1 -1
- package/dist/services/session/session-tool-tracker.d.ts +10 -21
- package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
- package/dist/services/session/session-tool-tracker.js +12 -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 +18 -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 +373 -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-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 +100 -4
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +78 -8
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-service.d.ts +34 -5
- package/dist/services/settings/settings-service.d.ts.map +1 -1
- package/dist/services/settings/settings-service.js +200 -8
- 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 +6 -0
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/shell/background-shell-registry.d.ts +110 -0
- package/dist/services/shell/background-shell-registry.d.ts.map +1 -0
- package/dist/services/shell/background-shell-registry.js +326 -0
- package/dist/services/shell/background-shell-registry.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 +115 -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 +5 -3
- package/dist/services/subagents/execution-runner.d.ts.map +1 -1
- package/dist/services/subagents/execution-runner.js +109 -10
- 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 +65 -34
- 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 +263 -64
- 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 +31 -7
- package/dist/services/subagents/runtime.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.d.ts +50 -3
- package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
- package/dist/services/subagents/subagent-async-registry.js +463 -44
- 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 +40 -7
- package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.js +47 -1
- package/dist/services/subagents/subagent-manager.js.map +1 -1
- package/dist/services/subagents/subagent-notification-store.d.ts +112 -28
- package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
- package/dist/services/subagents/subagent-notification-store.js +197 -47
- package/dist/services/subagents/subagent-notification-store.js.map +1 -1
- package/dist/services/subagents/subagent-run-control.d.ts +41 -0
- package/dist/services/subagents/subagent-run-control.d.ts.map +1 -0
- package/dist/services/subagents/subagent-run-control.js +166 -0
- package/dist/services/subagents/subagent-run-control.js.map +1 -0
- 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 +66 -65
- package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
- package/dist/services/subagents/tool-policy.d.ts +39 -17
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +209 -53
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/types.d.ts +114 -2
- 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 +43 -16
- package/dist/services/subagents/utils.js.map +1 -1
- 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/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 +11 -0
- package/dist/tools/agent/ask-orchestrator.d.ts.map +1 -0
- package/dist/tools/agent/ask-orchestrator.js +39 -0
- package/dist/tools/agent/ask-orchestrator.js.map +1 -0
- 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 +46 -4
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent-async.js +220 -33
- package/dist/tools/agent/run-subagent-async.js.map +1 -1
- package/dist/tools/agent/run-subagent.d.ts +28 -14
- package/dist/tools/agent/run-subagent.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent.js +173 -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 +3 -2
- package/dist/tools/file/code-context.d.ts.map +1 -1
- package/dist/tools/file/code-context.js +5 -5
- 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 +9 -1
- package/dist/tools/file/grep.d.ts.map +1 -1
- package/dist/tools/file/grep.js +75 -13
- 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 +39 -3
- package/dist/tools/system/shell.d.ts.map +1 -1
- package/dist/tools/system/shell.js +380 -149
- package/dist/tools/system/shell.js.map +1 -1
- 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 +78 -0
- 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/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 -13
- 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 +6 -0
- package/dist/utils/conversation/message-utils.d.ts.map +1 -1
- package/dist/utils/conversation/message-utils.js +17 -14
- 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/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 +41 -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/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 +24 -3
- package/dist/utils/shell/execute-shell.d.ts.map +1 -1
- package/dist/utils/shell/execute-shell.js +228 -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-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/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 +0 -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 -40
- 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 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 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 { 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))) {
|
|
283
653
|
return undefined;
|
|
284
654
|
}
|
|
285
|
-
return getResponseIdFromResponse(
|
|
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))) {
|
|
661
|
+
return undefined;
|
|
662
|
+
}
|
|
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') ||
|
|
@@ -326,38 +710,54 @@ const asAmbiguousModelOutcome = (error) => {
|
|
|
326
710
|
cause: error,
|
|
327
711
|
});
|
|
328
712
|
};
|
|
329
|
-
const hasGenerateFalse = (request) => request.
|
|
330
|
-
const
|
|
713
|
+
const hasGenerateFalse = (request) => request.providerOptions?.generate === false;
|
|
714
|
+
const withProviderOptions = (request, providerOptions) => ({
|
|
331
715
|
...request,
|
|
332
|
-
|
|
333
|
-
...request.
|
|
334
|
-
|
|
335
|
-
...request.modelSettings?.providerData,
|
|
336
|
-
...providerData,
|
|
337
|
-
},
|
|
716
|
+
providerOptions: {
|
|
717
|
+
...request.providerOptions,
|
|
718
|
+
...providerOptions,
|
|
338
719
|
},
|
|
339
720
|
});
|
|
340
721
|
export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
341
722
|
modelId;
|
|
342
723
|
tokenManager;
|
|
343
|
-
diagnosticLogger;
|
|
344
|
-
sessionContextService;
|
|
345
|
-
websocketReceiveTimeouts;
|
|
346
724
|
codexPreviousResponseIds = new Map();
|
|
347
725
|
codexConsumedToolResultCallIdsByResponseId = new Map();
|
|
726
|
+
codexFunctionCallIdsByResponseId = new Map();
|
|
348
727
|
codexTurnIdsBySession = new Map();
|
|
349
728
|
#serverHistoryReuseDisabled = false;
|
|
350
729
|
providerTraffic;
|
|
730
|
+
diagnosticLogger;
|
|
731
|
+
sessionContextService;
|
|
732
|
+
requestCapture;
|
|
351
733
|
chainedWireState = new ChainedWireState(new LunaResponsesLiteWireProtocol());
|
|
352
734
|
requestTokens = new WeakMap();
|
|
353
|
-
|
|
354
|
-
|
|
735
|
+
websocketReceiveTimeouts;
|
|
736
|
+
constructor(client, modelId, tokenManager, diagnosticLogger, providerTraffic, sessionContextService, websocketReceiveTimeouts = DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS, requestCapture, transport) {
|
|
737
|
+
const candidates = [
|
|
738
|
+
transport,
|
|
739
|
+
diagnosticLogger,
|
|
740
|
+
providerTraffic,
|
|
741
|
+
sessionContextService,
|
|
742
|
+
websocketReceiveTimeouts,
|
|
743
|
+
requestCapture,
|
|
744
|
+
];
|
|
745
|
+
const injectedTransport = candidates.find((candidate) => candidate instanceof CodexResponsesTransport);
|
|
746
|
+
super(client, modelId, injectedTransport);
|
|
355
747
|
this.modelId = modelId;
|
|
356
748
|
this.tokenManager = tokenManager;
|
|
357
|
-
this.diagnosticLogger = diagnosticLogger;
|
|
358
|
-
this.
|
|
359
|
-
|
|
360
|
-
|
|
749
|
+
this.diagnosticLogger = diagnosticLogger instanceof CodexResponsesTransport ? undefined : diagnosticLogger;
|
|
750
|
+
this.providerTraffic =
|
|
751
|
+
providerTraffic instanceof CodexResponsesTransport
|
|
752
|
+
? DUMMY_PROVIDER_TRAFFIC
|
|
753
|
+
: providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
754
|
+
this.sessionContextService =
|
|
755
|
+
sessionContextService instanceof CodexResponsesTransport ? undefined : sessionContextService;
|
|
756
|
+
this.websocketReceiveTimeouts =
|
|
757
|
+
websocketReceiveTimeouts instanceof CodexResponsesTransport
|
|
758
|
+
? DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS
|
|
759
|
+
: websocketReceiveTimeouts;
|
|
760
|
+
this.requestCapture = requestCapture instanceof CodexResponsesTransport ? undefined : requestCapture;
|
|
361
761
|
}
|
|
362
762
|
#modelNameFallback() {
|
|
363
763
|
return this.modelId;
|
|
@@ -402,13 +802,39 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
402
802
|
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
403
803
|
});
|
|
404
804
|
}
|
|
405
|
-
|
|
805
|
+
#logTrafficClosed(requestId, requestData, outcome, eventCount) {
|
|
806
|
+
const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
|
|
807
|
+
const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
|
|
808
|
+
providerTraffic.recordResponseClosed({
|
|
809
|
+
requestId,
|
|
810
|
+
provider: 'codex',
|
|
811
|
+
model,
|
|
812
|
+
outcome,
|
|
813
|
+
eventCount,
|
|
814
|
+
modelClass: WS_RESPONSE_MODEL_CLASS,
|
|
815
|
+
modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
|
|
816
|
+
});
|
|
817
|
+
}
|
|
818
|
+
async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal) {
|
|
406
819
|
const logReceived = this.#logTrafficReceived.bind(this);
|
|
407
820
|
const logFailed = this.#logTrafficFailed.bind(this);
|
|
821
|
+
const logClosed = this.#logTrafficClosed.bind(this);
|
|
408
822
|
const wireState = this.chainedWireState;
|
|
409
823
|
async function* wrapped() {
|
|
824
|
+
let sawTerminalEvent = false;
|
|
825
|
+
let sourceExhausted = false;
|
|
826
|
+
let streamFailed = false;
|
|
827
|
+
let eventCount = 0;
|
|
410
828
|
try {
|
|
411
829
|
for await (const event of responseStream) {
|
|
830
|
+
eventCount += 1;
|
|
831
|
+
if (event &&
|
|
832
|
+
typeof event === 'object' &&
|
|
833
|
+
(event.type === 'response.completed' ||
|
|
834
|
+
event.type === 'response.incomplete' ||
|
|
835
|
+
event.type === 'response.failed')) {
|
|
836
|
+
sawTerminalEvent = true;
|
|
837
|
+
}
|
|
412
838
|
if (event &&
|
|
413
839
|
typeof event === 'object' &&
|
|
414
840
|
(event.type === 'response.completed' || event.type === 'response.incomplete') &&
|
|
@@ -421,15 +847,20 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
421
847
|
}
|
|
422
848
|
yield event;
|
|
423
849
|
}
|
|
850
|
+
sourceExhausted = true;
|
|
424
851
|
}
|
|
425
852
|
catch (error) {
|
|
426
|
-
|
|
853
|
+
streamFailed = true;
|
|
854
|
+
if (wireStateKey && !isWebSocketConnectionLimitReachedError(error)) {
|
|
427
855
|
wireState.invalidate(wireStateKey);
|
|
428
856
|
}
|
|
429
857
|
logFailed(requestId, requestData, error);
|
|
430
858
|
throw error;
|
|
431
859
|
}
|
|
432
860
|
finally {
|
|
861
|
+
if (!sawTerminalEvent && !sourceExhausted && !streamFailed) {
|
|
862
|
+
logClosed(requestId, requestData, signal?.aborted ? 'aborted' : 'consumer_closed', eventCount);
|
|
863
|
+
}
|
|
433
864
|
if (wireStateKey && wireStateToken) {
|
|
434
865
|
wireState.abandon(wireStateKey, wireStateToken);
|
|
435
866
|
}
|
|
@@ -441,9 +872,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
441
872
|
if (!request) {
|
|
442
873
|
return undefined;
|
|
443
874
|
}
|
|
444
|
-
const response = await super.
|
|
875
|
+
const response = await super.fetchUnaryResponse(request);
|
|
445
876
|
const responseId = getResponseIdFromResponse(response);
|
|
446
|
-
this.#rememberCodexResponseId(responseId);
|
|
877
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, true);
|
|
447
878
|
return responseId;
|
|
448
879
|
}
|
|
449
880
|
async #warmupCodexStream(request) {
|
|
@@ -451,10 +882,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
451
882
|
return undefined;
|
|
452
883
|
}
|
|
453
884
|
let responseId;
|
|
454
|
-
for await (const event of super.
|
|
455
|
-
|
|
885
|
+
for await (const event of super.rawStream(request)) {
|
|
886
|
+
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
887
|
+
if (eventResponseId) {
|
|
888
|
+
responseId = eventResponseId;
|
|
889
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), request.input, true);
|
|
890
|
+
}
|
|
456
891
|
}
|
|
457
|
-
this.#rememberCodexResponseId(responseId);
|
|
458
892
|
return responseId;
|
|
459
893
|
}
|
|
460
894
|
#prepareCodexServerHistoryRequest(request) {
|
|
@@ -468,6 +902,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
468
902
|
}
|
|
469
903
|
const consumedToolResultCallIds = this.#getConsumedToolResultCallIds(previousResponseId);
|
|
470
904
|
const filteredInput = filterServerManagedInput(input, consumedToolResultCallIds);
|
|
905
|
+
const knownFunctionCallIds = this.codexFunctionCallIdsByResponseId.get(previousResponseId);
|
|
906
|
+
if (request.previousResponseId === previousResponseId && knownFunctionCallIds) {
|
|
907
|
+
const orphanedCallIds = collectToolResultCallIds(filteredInput).filter((callId) => !knownFunctionCallIds.has(callId));
|
|
908
|
+
if (orphanedCallIds.length > 0) {
|
|
909
|
+
throw new OrphanedChainedToolOutputError([...new Set(orphanedCallIds)]);
|
|
910
|
+
}
|
|
911
|
+
}
|
|
471
912
|
this.#warnIfConsumedToolResultsWereDropped(previousResponseId, input, filteredInput, consumedToolResultCallIds);
|
|
472
913
|
if (request.previousResponseId === previousResponseId && filteredInput === input) {
|
|
473
914
|
return request;
|
|
@@ -486,11 +927,18 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
486
927
|
if (!key || hasGenerateFalse(request)) {
|
|
487
928
|
return undefined;
|
|
488
929
|
}
|
|
930
|
+
const hasToolResultBeforeTrailingUserMessages = (items) => {
|
|
931
|
+
let endUserIndex = items.length;
|
|
932
|
+
while (endUserIndex > 0 && isUserInputMessage(items[endUserIndex - 1])) {
|
|
933
|
+
endUserIndex--;
|
|
934
|
+
}
|
|
935
|
+
return endUserIndex > 0 && isToolResultItem(items[endUserIndex - 1]);
|
|
936
|
+
};
|
|
489
937
|
const input = request.input;
|
|
490
938
|
const isInternalToolContinuation = Array.isArray(input) &&
|
|
491
939
|
input.length > 1 &&
|
|
492
940
|
input.some(isUserInputMessage) &&
|
|
493
|
-
|
|
941
|
+
hasToolResultBeforeTrailingUserMessages(input);
|
|
494
942
|
return isInternalToolContinuation ? this.codexPreviousResponseIds.get(key) : undefined;
|
|
495
943
|
}
|
|
496
944
|
#prepareCodexServerHistoryRequests(request) {
|
|
@@ -502,7 +950,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
502
950
|
if (preparedRequest.previousResponseId) {
|
|
503
951
|
return { request: preparedRequest };
|
|
504
952
|
}
|
|
505
|
-
const input = Array.isArray(request.input) ?
|
|
953
|
+
const input = Array.isArray(request.input) ? dropUnpairedCodexToolItems(request.input) : request.input;
|
|
506
954
|
const replayRequest = input === request.input ? request : { ...request, input };
|
|
507
955
|
if (!Array.isArray(input) || input.length === 0) {
|
|
508
956
|
return { request: replayRequest };
|
|
@@ -528,7 +976,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
528
976
|
}
|
|
529
977
|
}
|
|
530
978
|
return {
|
|
531
|
-
warmupRequest:
|
|
979
|
+
warmupRequest: withProviderOptions({
|
|
532
980
|
...replayRequest,
|
|
533
981
|
input: warmupItems,
|
|
534
982
|
}, { generate: false }),
|
|
@@ -547,7 +995,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
547
995
|
previousResponseId,
|
|
548
996
|
});
|
|
549
997
|
}
|
|
550
|
-
#rememberCodexResponseId(responseId) {
|
|
998
|
+
#rememberCodexResponseId(responseId, output, input, recordChainAnchor = false) {
|
|
551
999
|
if (!responseId) {
|
|
552
1000
|
return;
|
|
553
1001
|
}
|
|
@@ -556,6 +1004,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
556
1004
|
if (key) {
|
|
557
1005
|
this.codexPreviousResponseIds.set(key, responseId);
|
|
558
1006
|
}
|
|
1007
|
+
if (recordChainAnchor && (Array.isArray(output) || Array.isArray(input))) {
|
|
1008
|
+
this.codexFunctionCallIdsByResponseId.set(responseId, new Set([...collectFunctionCallIds(output), ...collectFunctionCallIds(input)]));
|
|
1009
|
+
}
|
|
559
1010
|
}
|
|
560
1011
|
#getConsumedToolResultCallIds(responseId) {
|
|
561
1012
|
if (!responseId) {
|
|
@@ -589,15 +1040,26 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
589
1040
|
consumed.add(callId);
|
|
590
1041
|
}
|
|
591
1042
|
this.codexConsumedToolResultCallIdsByResponseId.set(responseId, consumed);
|
|
1043
|
+
// A continuation may explicitly reuse the prior response ID; retain the
|
|
1044
|
+
// consumed-output checkpoint under that anchor as well as the new response.
|
|
1045
|
+
if (previousResponseId)
|
|
1046
|
+
this.codexConsumedToolResultCallIdsByResponseId.set(previousResponseId, consumed);
|
|
592
1047
|
}
|
|
593
1048
|
#forgetCodexResponseId() {
|
|
594
1049
|
this.#serverHistoryReuseDisabled = true;
|
|
595
1050
|
this.codexPreviousResponseIds.clear();
|
|
596
1051
|
this.codexConsumedToolResultCallIdsByResponseId.clear();
|
|
1052
|
+
this.codexFunctionCallIdsByResponseId.clear();
|
|
597
1053
|
this.codexTurnIdsBySession.clear();
|
|
598
1054
|
this.chainedWireState.clear();
|
|
599
1055
|
}
|
|
600
1056
|
#shouldForgetCodexServerHistory(error) {
|
|
1057
|
+
// This rejects the new request before generation; it expires the socket,
|
|
1058
|
+
// not the last acknowledged response. Retaining that response keeps an
|
|
1059
|
+
// already-executed tool output paired with the call that introduced it.
|
|
1060
|
+
if (isWebSocketConnectionLimitReachedError(error)) {
|
|
1061
|
+
return false;
|
|
1062
|
+
}
|
|
601
1063
|
const message = getErrorMessage(error);
|
|
602
1064
|
return (isPreviousResponseNotFoundError(error) ||
|
|
603
1065
|
message.includes('previous_response_not_found') ||
|
|
@@ -665,7 +1127,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
665
1127
|
const { previousResponseId: _previousResponseId, ...rest } = request;
|
|
666
1128
|
return rest;
|
|
667
1129
|
}
|
|
668
|
-
async
|
|
1130
|
+
async fetchUnaryResponse(request) {
|
|
669
1131
|
const run = async () => {
|
|
670
1132
|
let attemptedWithServerHistory = false;
|
|
671
1133
|
try {
|
|
@@ -673,9 +1135,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
673
1135
|
attemptedWithServerHistory = Boolean(preparedRequest.warmupRequest || preparedRequest.request?.previousResponseId);
|
|
674
1136
|
const warmupResponseId = await this.#warmupCodexUnary(preparedRequest.warmupRequest);
|
|
675
1137
|
const effectiveRequest = this.#getEffectiveCodexRequestAfterWarmup(request, preparedRequest, warmupResponseId);
|
|
676
|
-
const response = await super.
|
|
1138
|
+
const response = await super.fetchUnaryResponse(effectiveRequest);
|
|
677
1139
|
const responseId = getResponseIdFromResponse(response);
|
|
678
|
-
this.#rememberCodexResponseId(responseId);
|
|
1140
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, effectiveRequest.input);
|
|
679
1141
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
680
1142
|
return response;
|
|
681
1143
|
}
|
|
@@ -686,9 +1148,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
686
1148
|
throw error;
|
|
687
1149
|
}
|
|
688
1150
|
const fallbackRequest = this.#withoutCodexServerHistory(request);
|
|
689
|
-
const response = await super.
|
|
1151
|
+
const response = await super.fetchUnaryResponse(fallbackRequest);
|
|
690
1152
|
const responseId = getResponseIdFromResponse(response);
|
|
691
|
-
this.#rememberCodexResponseId(responseId);
|
|
1153
|
+
this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input);
|
|
692
1154
|
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
693
1155
|
return response;
|
|
694
1156
|
}
|
|
@@ -698,14 +1160,10 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
698
1160
|
throw asAmbiguousModelOutcome(error) ?? error;
|
|
699
1161
|
}
|
|
700
1162
|
};
|
|
701
|
-
|
|
702
|
-
if (currentTrace) {
|
|
703
|
-
return run();
|
|
704
|
-
}
|
|
705
|
-
return withTrace('codex-responses-ws-model-trace', run);
|
|
1163
|
+
return run();
|
|
706
1164
|
}
|
|
707
|
-
async *
|
|
708
|
-
let
|
|
1165
|
+
async *rawStream(request) {
|
|
1166
|
+
let receivedRawFrame = false;
|
|
709
1167
|
let attemptedWithServerHistory = false;
|
|
710
1168
|
try {
|
|
711
1169
|
const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
|
|
@@ -713,38 +1171,56 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
713
1171
|
const warmupResponseId = await this.#warmupCodexStream(preparedRequest.warmupRequest);
|
|
714
1172
|
const effectiveRequest = this.#getEffectiveCodexRequestAfterWarmup(request, preparedRequest, warmupResponseId);
|
|
715
1173
|
let responseId;
|
|
716
|
-
for await (const event of super.
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
1174
|
+
for await (const event of super.rawStream(effectiveRequest)) {
|
|
1175
|
+
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
1176
|
+
if (eventResponseId) {
|
|
1177
|
+
responseId = eventResponseId;
|
|
1178
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), effectiveRequest.input);
|
|
1179
|
+
}
|
|
1180
|
+
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
|
|
1181
|
+
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
1182
|
+
}
|
|
1183
|
+
receivedRawFrame = true;
|
|
720
1184
|
yield event;
|
|
721
1185
|
}
|
|
722
1186
|
this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
|
|
723
1187
|
}
|
|
724
1188
|
catch (error) {
|
|
725
|
-
if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !
|
|
1189
|
+
if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !receivedRawFrame) {
|
|
726
1190
|
this.#forgetCodexResponseId();
|
|
727
1191
|
if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
|
|
728
1192
|
throw error;
|
|
729
1193
|
}
|
|
730
1194
|
const fallbackRequest = this.#withoutCodexServerHistory(request);
|
|
731
1195
|
let responseId;
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
1196
|
+
try {
|
|
1197
|
+
for await (const event of super.rawStream(fallbackRequest)) {
|
|
1198
|
+
receivedRawFrame = true;
|
|
1199
|
+
const eventResponseId = getResponseIdFromStreamEvent(event);
|
|
1200
|
+
if (eventResponseId) {
|
|
1201
|
+
responseId = eventResponseId;
|
|
1202
|
+
this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input);
|
|
1203
|
+
}
|
|
1204
|
+
if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
|
|
1205
|
+
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
1206
|
+
}
|
|
1207
|
+
yield event;
|
|
1208
|
+
}
|
|
1209
|
+
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
1210
|
+
return;
|
|
1211
|
+
}
|
|
1212
|
+
catch (fallbackError) {
|
|
1213
|
+
throw asAmbiguousModelOutcome(fallbackError) ?? fallbackError;
|
|
736
1214
|
}
|
|
737
|
-
this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
|
|
738
|
-
return;
|
|
739
1215
|
}
|
|
740
1216
|
if (this.#shouldForgetCodexServerHistory(error)) {
|
|
741
1217
|
this.#forgetCodexResponseId();
|
|
742
1218
|
}
|
|
743
|
-
throw (
|
|
1219
|
+
throw (receivedRawFrame ? asAmbiguousModelOutcome(error) : undefined) ?? error;
|
|
744
1220
|
}
|
|
745
1221
|
}
|
|
746
|
-
|
|
747
|
-
const built = super.
|
|
1222
|
+
buildResponsesCreateRequest(request, stream) {
|
|
1223
|
+
const built = super.buildResponsesCreateRequest(request, stream);
|
|
748
1224
|
const requestData = normalizeCodexRequestData(built.requestData, request, this.modelId, {
|
|
749
1225
|
includeDeveloperInstructionsOnChainedRequest: true,
|
|
750
1226
|
});
|
|
@@ -760,7 +1236,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
760
1236
|
requestData: prepared.requestData,
|
|
761
1237
|
};
|
|
762
1238
|
}
|
|
763
|
-
async
|
|
1239
|
+
async fetchResponse(request, stream) {
|
|
764
1240
|
const requestId = randomUUID();
|
|
765
1241
|
const wireStateKey = RESPONSES_LITE_MODELS.has(this.modelId)
|
|
766
1242
|
? this.#getCodexServerHistoryKey() ?? undefined
|
|
@@ -783,46 +1259,46 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
783
1259
|
if (accountId) {
|
|
784
1260
|
extraHeaders['chatgpt-account-id'] = accountId;
|
|
785
1261
|
}
|
|
1262
|
+
const watchdog = createWebSocketReceiveWatchdog(request.signal, this.websocketReceiveTimeouts);
|
|
786
1263
|
const updatedRequest = {
|
|
787
1264
|
...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
|
-
},
|
|
1265
|
+
signal: watchdog.signal,
|
|
1266
|
+
providerOptions: {
|
|
1267
|
+
...request.providerOptions,
|
|
1268
|
+
...(codexIdentity
|
|
1269
|
+
? {
|
|
1270
|
+
client_metadata: {
|
|
1271
|
+
...asRecord(request.providerOptions?.client_metadata),
|
|
1272
|
+
...codexIdentity.clientMetadata,
|
|
1273
|
+
},
|
|
1274
|
+
}
|
|
1275
|
+
: {}),
|
|
1276
|
+
...(isResponsesLite
|
|
1277
|
+
? {
|
|
1278
|
+
client_metadata: {
|
|
1279
|
+
...asRecord(request.providerOptions?.client_metadata),
|
|
1280
|
+
...(codexIdentity?.clientMetadata ?? {}),
|
|
1281
|
+
ws_request_header_x_openai_internal_codex_responses_lite: 'true',
|
|
1282
|
+
},
|
|
1283
|
+
}
|
|
1284
|
+
: {}),
|
|
1285
|
+
extraHeaders: {
|
|
1286
|
+
...asRecord(request.providerOptions?.extraHeaders),
|
|
1287
|
+
...extraHeaders,
|
|
814
1288
|
},
|
|
815
1289
|
},
|
|
816
1290
|
};
|
|
817
|
-
const
|
|
818
|
-
updatedRequest.signal = watchdog.signal;
|
|
819
|
-
const builtRequest = this._buildResponsesCreateRequest(updatedRequest, true);
|
|
1291
|
+
const builtRequest = this.buildResponsesCreateRequest(updatedRequest, true);
|
|
820
1292
|
const requestData = (asRecord(builtRequest?.requestData) ?? {});
|
|
821
1293
|
const wireStateToken = this.requestTokens.get(updatedRequest);
|
|
1294
|
+
// This is the last application-owned point before the inherited
|
|
1295
|
+
// transport's private fetch path. Capture it without changing the
|
|
1296
|
+
// prepared request or wire state.
|
|
1297
|
+
captureProviderRequest(this.requestCapture, { provider: 'codex', transport: 'websocket', requestData });
|
|
822
1298
|
this.#logTrafficStarted(requestId, requestData, extraHeaders);
|
|
823
1299
|
if (!stream) {
|
|
824
1300
|
try {
|
|
825
|
-
const response = await fetchAndReconstructUnaryResponse(async () => watchdog.wrap(await super.
|
|
1301
|
+
const response = await fetchAndReconstructUnaryResponse(async () => watchdog.wrap(await super.fetchResponse(updatedRequest, true)), this.diagnosticLogger);
|
|
826
1302
|
if (wireStateKey && wireStateToken && typeof response?.id === 'string' && response.id.length > 0) {
|
|
827
1303
|
this.chainedWireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
|
|
828
1304
|
}
|
|
@@ -832,49 +1308,73 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
|
|
|
832
1308
|
catch (error) {
|
|
833
1309
|
const timeoutError = watchdog.timeoutError();
|
|
834
1310
|
watchdog.close();
|
|
1311
|
+
const failure = timeoutError ?? error;
|
|
835
1312
|
if (wireStateKey) {
|
|
836
|
-
|
|
1313
|
+
if (isWebSocketConnectionLimitReachedError(failure)) {
|
|
1314
|
+
if (wireStateToken)
|
|
1315
|
+
this.chainedWireState.abandon(wireStateKey, wireStateToken);
|
|
1316
|
+
}
|
|
1317
|
+
else {
|
|
1318
|
+
this.chainedWireState.invalidate(wireStateKey);
|
|
1319
|
+
}
|
|
837
1320
|
}
|
|
838
|
-
this.#logTrafficFailed(requestId, requestData,
|
|
839
|
-
throw
|
|
1321
|
+
this.#logTrafficFailed(requestId, requestData, failure);
|
|
1322
|
+
throw failure;
|
|
840
1323
|
}
|
|
841
1324
|
}
|
|
842
1325
|
try {
|
|
843
|
-
const response = (await super.
|
|
1326
|
+
const response = (await super.fetchResponse(updatedRequest, stream));
|
|
844
1327
|
const patched = wrapCodexStream(watchdog.wrap(response), this.diagnosticLogger);
|
|
845
|
-
return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken);
|
|
1328
|
+
return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken, updatedRequest.signal);
|
|
846
1329
|
}
|
|
847
1330
|
catch (error) {
|
|
848
1331
|
const timeoutError = watchdog.timeoutError();
|
|
849
1332
|
watchdog.close();
|
|
1333
|
+
const failure = timeoutError ?? error;
|
|
850
1334
|
if (wireStateKey) {
|
|
851
|
-
|
|
1335
|
+
if (isWebSocketConnectionLimitReachedError(failure)) {
|
|
1336
|
+
if (wireStateToken)
|
|
1337
|
+
this.chainedWireState.abandon(wireStateKey, wireStateToken);
|
|
1338
|
+
}
|
|
1339
|
+
else {
|
|
1340
|
+
this.chainedWireState.invalidate(wireStateKey);
|
|
1341
|
+
}
|
|
852
1342
|
}
|
|
853
|
-
this.#logTrafficFailed(requestId, requestData,
|
|
854
|
-
throw
|
|
1343
|
+
this.#logTrafficFailed(requestId, requestData, failure);
|
|
1344
|
+
throw failure;
|
|
855
1345
|
}
|
|
856
1346
|
}
|
|
857
1347
|
}
|
|
858
1348
|
export class CodexResponsesModel extends OpenAIResponsesModel {
|
|
859
1349
|
modelId;
|
|
860
1350
|
diagnosticLogger;
|
|
861
|
-
|
|
862
|
-
|
|
1351
|
+
requestCapture;
|
|
1352
|
+
constructor(client, modelId, diagnosticLogger, requestCapture, transport) {
|
|
1353
|
+
const candidates = [transport, diagnosticLogger, requestCapture];
|
|
1354
|
+
const injectedTransport = candidates.find((candidate) => candidate instanceof CodexResponsesTransport);
|
|
1355
|
+
super(client, modelId, injectedTransport);
|
|
863
1356
|
this.modelId = modelId;
|
|
864
|
-
this.diagnosticLogger = diagnosticLogger;
|
|
1357
|
+
this.diagnosticLogger = diagnosticLogger instanceof CodexResponsesTransport ? undefined : diagnosticLogger;
|
|
1358
|
+
this.requestCapture = requestCapture instanceof CodexResponsesTransport ? undefined : requestCapture;
|
|
865
1359
|
}
|
|
866
|
-
|
|
867
|
-
const built =
|
|
868
|
-
|
|
1360
|
+
buildResponsesCreateRequest(request, stream) {
|
|
1361
|
+
const built = super.buildResponsesCreateRequest(request, stream);
|
|
1362
|
+
const result = {
|
|
869
1363
|
...built,
|
|
870
1364
|
requestData: normalizeCodexRequestData(built.requestData, request, this.modelId),
|
|
871
1365
|
};
|
|
1366
|
+
captureProviderRequest(this.requestCapture, {
|
|
1367
|
+
provider: 'codex',
|
|
1368
|
+
transport: 'http',
|
|
1369
|
+
requestData: result.requestData,
|
|
1370
|
+
});
|
|
1371
|
+
return result;
|
|
872
1372
|
}
|
|
873
|
-
async
|
|
1373
|
+
async fetchResponse(request, stream) {
|
|
874
1374
|
if (!stream) {
|
|
875
|
-
return fetchAndReconstructUnaryResponse(() =>
|
|
1375
|
+
return fetchAndReconstructUnaryResponse(() => super.fetchResponse(request, true), this.diagnosticLogger);
|
|
876
1376
|
}
|
|
877
|
-
const response = await
|
|
1377
|
+
const response = await super.fetchResponse(request, stream);
|
|
878
1378
|
return wrapCodexStream(response, this.diagnosticLogger);
|
|
879
1379
|
}
|
|
880
1380
|
}
|
|
@@ -917,8 +1417,9 @@ export async function* wrapCodexStream(source, logger) {
|
|
|
917
1417
|
const item = event.item;
|
|
918
1418
|
const itemRecord = asRecord(item);
|
|
919
1419
|
// If the accumulated function_call item is missing call_id, backfill it
|
|
920
|
-
// from the itemCallIds map so the
|
|
921
|
-
//
|
|
1420
|
+
// from the itemCallIds map so the inherited transport's
|
|
1421
|
+
// convertToOutputItem picks up the correct identifier and the continuation
|
|
1422
|
+
// request sends the right call_id.
|
|
922
1423
|
if (itemRecord?.type === 'function_call' &&
|
|
923
1424
|
!stringValue(itemRecord?.call_id) &&
|
|
924
1425
|
typeof itemRecord?.id === 'string') {
|