@qduc/term2 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +4 -24
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +11 -32
- package/dist/app.js.map +1 -1
- package/dist/app.parseInput.test.js +4 -4
- package/dist/app.parseInput.test.js.map +1 -1
- package/dist/cli.js +44 -29
- package/dist/cli.js.map +1 -1
- package/dist/components/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/ApprovalPrompt.js +14 -11
- package/dist/components/ApprovalPrompt.js.map +1 -1
- package/dist/components/Banner.d.ts.map +1 -1
- package/dist/components/Banner.js +4 -12
- package/dist/components/Banner.js.map +1 -1
- package/dist/components/BottomArea.d.ts.map +1 -1
- package/dist/components/BottomArea.js +4 -7
- package/dist/components/BottomArea.js.map +1 -1
- package/dist/components/BottomArea.test.js +4 -6
- package/dist/components/BottomArea.test.js.map +1 -1
- package/dist/components/ChatMessage.d.ts.map +1 -1
- package/dist/components/ChatMessage.js.map +1 -1
- package/dist/components/CommandMessage.d.ts.map +1 -1
- package/dist/components/CommandMessage.js +19 -30
- package/dist/components/CommandMessage.js.map +1 -1
- package/dist/components/CommandMessage.test.js +2 -2
- package/dist/components/CommandMessage.test.js.map +1 -1
- package/dist/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/components/ErrorBoundary.js +3 -9
- package/dist/components/ErrorBoundary.js.map +1 -1
- package/dist/components/ErrorBoundary.test.js +2 -2
- package/dist/components/ErrorBoundary.test.js.map +1 -1
- package/dist/components/Input/PopupManager.d.ts.map +1 -1
- package/dist/components/Input/PopupManager.js.map +1 -1
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +15 -33
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/InputBox.menu-logic.test.js +6 -7
- package/dist/components/InputBox.menu-logic.test.js.map +1 -1
- package/dist/components/InputBox.test.js +7 -9
- package/dist/components/InputBox.test.js.map +1 -1
- package/dist/components/LiveResponse.d.ts.map +1 -1
- package/dist/components/LiveResponse.js.map +1 -1
- package/dist/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/components/MarkdownRenderer.js +12 -12
- package/dist/components/MarkdownRenderer.js.map +1 -1
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js.map +1 -1
- package/dist/components/MessageList.test.js +1 -1
- package/dist/components/MessageList.test.js.map +1 -1
- package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/ModelSelectionMenu.js +11 -16
- package/dist/components/ModelSelectionMenu.js.map +1 -1
- package/dist/components/ModelSelectionMenu.test.js +9 -9
- package/dist/components/ModelSelectionMenu.test.js.map +1 -1
- package/dist/components/PathSelectionMenu.d.ts.map +1 -1
- package/dist/components/PathSelectionMenu.js +1 -1
- package/dist/components/PathSelectionMenu.js.map +1 -1
- package/dist/components/SettingsSelectionMenu.d.ts.map +1 -1
- package/dist/components/SettingsSelectionMenu.js +1 -1
- package/dist/components/SettingsSelectionMenu.js.map +1 -1
- package/dist/components/SettingsSelectionMenu.test.js +4 -4
- package/dist/components/SettingsSelectionMenu.test.js.map +1 -1
- package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -1
- package/dist/components/SettingsValueSelectionMenu.js +5 -6
- package/dist/components/SettingsValueSelectionMenu.js.map +1 -1
- package/dist/components/SettingsValueSelectionMenu.test.js +5 -5
- package/dist/components/SettingsValueSelectionMenu.test.js.map +1 -1
- package/dist/components/SlashCommandMenu.d.ts.map +1 -1
- package/dist/components/SlashCommandMenu.js +1 -1
- package/dist/components/SlashCommandMenu.js.map +1 -1
- package/dist/components/StatusBar.d.ts.map +1 -1
- package/dist/components/StatusBar.js +3 -4
- package/dist/components/StatusBar.js.map +1 -1
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.js.map +1 -1
- package/dist/context/InputContext.stability.test.js +1 -1
- package/dist/context/InputContext.stability.test.js.map +1 -1
- package/dist/context/InputContext.test.js +15 -15
- package/dist/context/InputContext.test.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +3 -13
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +35 -184
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-input-history.d.ts.map +1 -1
- package/dist/hooks/use-input-history.js +1 -3
- package/dist/hooks/use-input-history.js.map +1 -1
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +8 -10
- 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 +6 -6
- package/dist/hooks/use-path-completion.js.map +1 -1
- package/dist/hooks/use-setting.d.ts.map +1 -1
- package/dist/hooks/use-setting.js +3 -6
- package/dist/hooks/use-setting.js.map +1 -1
- package/dist/hooks/use-settings-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-completion.js +10 -12
- package/dist/hooks/use-settings-completion.js.map +1 -1
- package/dist/hooks/use-settings-completion.test.js +46 -46
- package/dist/hooks/use-settings-completion.test.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-value-completion.js +13 -43
- package/dist/hooks/use-settings-value-completion.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.test.js +12 -18
- package/dist/hooks/use-settings-value-completion.test.js.map +1 -1
- package/dist/hooks/use-slash-commands.d.ts +1 -1
- package/dist/hooks/use-slash-commands.d.ts.map +1 -1
- package/dist/hooks/use-slash-commands.js +6 -11
- package/dist/hooks/use-slash-commands.js.map +1 -1
- package/dist/hooks/use-slash-commands.test.js +24 -24
- package/dist/hooks/use-slash-commands.test.js.map +1 -1
- package/dist/lib/editor-impl.d.ts.map +1 -1
- package/dist/lib/editor-impl.js +6 -16
- package/dist/lib/editor-impl.js.map +1 -1
- package/dist/lib/editor-impl.test.js.map +1 -1
- package/dist/lib/mentor-client.d.ts +41 -0
- package/dist/lib/mentor-client.d.ts.map +1 -0
- package/dist/lib/mentor-client.js +146 -0
- package/dist/lib/mentor-client.js.map +1 -0
- package/dist/lib/mentor-client.test.d.ts +2 -0
- package/dist/lib/mentor-client.test.d.ts.map +1 -0
- package/dist/lib/mentor-client.test.js +440 -0
- package/dist/lib/mentor-client.test.js.map +1 -0
- package/dist/lib/openai-agent-client.chat.test.js +33 -8
- package/dist/lib/openai-agent-client.chat.test.js.map +1 -1
- package/dist/lib/openai-agent-client.d.ts.map +1 -1
- package/dist/lib/openai-agent-client.flex-tier.test.js +5 -5
- package/dist/lib/openai-agent-client.flex-tier.test.js.map +1 -1
- package/dist/lib/openai-agent-client.js +87 -84
- package/dist/lib/openai-agent-client.js.map +1 -1
- package/dist/lib/openai-agent-client.public-methods.test.js +186 -12
- package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -1
- package/dist/lib/openai-agent-client.test.js +17 -17
- package/dist/lib/openai-agent-client.test.js.map +1 -1
- package/dist/lib/retry-strategy.d.ts +43 -0
- package/dist/lib/retry-strategy.d.ts.map +1 -0
- package/dist/lib/retry-strategy.js +93 -0
- package/dist/lib/retry-strategy.js.map +1 -0
- package/dist/lib/retry-strategy.test.d.ts +2 -0
- package/dist/lib/retry-strategy.test.d.ts.map +1 -0
- package/dist/lib/retry-strategy.test.js +200 -0
- package/dist/lib/retry-strategy.test.js.map +1 -0
- package/dist/lib/tool-invoke.d.ts.map +1 -1
- package/dist/lib/tool-invoke.js.map +1 -1
- package/dist/lib/tool-invoke.test.js.map +1 -1
- package/dist/no-singleton-imports.test.js +1 -1
- package/dist/no-singleton-imports.test.js.map +1 -1
- package/dist/non-interactive.d.ts +20 -0
- package/dist/non-interactive.d.ts.map +1 -0
- package/dist/non-interactive.js +86 -0
- package/dist/non-interactive.js.map +1 -0
- package/dist/non-interactive.test.d.ts +2 -0
- package/dist/non-interactive.test.d.ts.map +1 -0
- package/dist/non-interactive.test.js +213 -0
- package/dist/non-interactive.test.js.map +1 -0
- package/dist/prompts/anthropic.md +11 -11
- package/dist/prompts/codex.md +63 -63
- package/dist/prompts/gpt-5.md +95 -95
- package/dist/prompts/mentor-addon.md +6 -5
- package/dist/prompts/prompt-selector.d.ts +8 -0
- package/dist/prompts/prompt-selector.d.ts.map +1 -0
- package/dist/prompts/prompt-selector.js +21 -0
- package/dist/prompts/prompt-selector.js.map +1 -0
- package/dist/prompts/prompt-selector.test.d.ts +2 -0
- package/dist/prompts/prompt-selector.test.d.ts.map +1 -0
- package/dist/prompts/prompt-selector.test.js +21 -0
- package/dist/prompts/prompt-selector.test.js.map +1 -0
- package/dist/prompts/prompt-selector.test.ts +32 -0
- package/dist/prompts/prompt-selector.ts +30 -0
- package/dist/prompts/simple.md +58 -58
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai-compatible/api.d.ts.map +1 -1
- package/dist/providers/openai-compatible/api.js.map +1 -1
- package/dist/providers/openai-compatible/model.d.ts.map +1 -1
- package/dist/providers/openai-compatible/model.js +19 -53
- package/dist/providers/openai-compatible/model.js.map +1 -1
- package/dist/providers/openai-compatible/provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible/provider.js.map +1 -1
- package/dist/providers/openai-compatible/reasoning-content.test.js +2 -2
- package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -1
- package/dist/providers/openai-compatible/utils.d.ts.map +1 -1
- package/dist/providers/openai-compatible/utils.js.map +1 -1
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +5 -1
- package/dist/providers/openai-compatible.provider.js.map +1 -1
- package/dist/providers/openai.provider.js +4 -0
- package/dist/providers/openai.provider.js.map +1 -1
- package/dist/providers/openrouter/api.d.ts.map +1 -1
- package/dist/providers/openrouter/api.js +5 -13
- package/dist/providers/openrouter/api.js.map +1 -1
- package/dist/providers/openrouter/converters.d.ts.map +1 -1
- package/dist/providers/openrouter/converters.js +9 -28
- package/dist/providers/openrouter/converters.js.map +1 -1
- package/dist/providers/openrouter/converters.test.js +7 -11
- package/dist/providers/openrouter/converters.test.js.map +1 -1
- package/dist/providers/openrouter/index.d.ts.map +1 -1
- package/dist/providers/openrouter/index.js.map +1 -1
- package/dist/providers/openrouter/model.d.ts.map +1 -1
- package/dist/providers/openrouter/model.js +19 -55
- package/dist/providers/openrouter/model.js.map +1 -1
- package/dist/providers/openrouter/provider.d.ts.map +1 -1
- package/dist/providers/openrouter/provider.js.map +1 -1
- package/dist/providers/openrouter/reasoning-content.test.js +1 -1
- package/dist/providers/openrouter/reasoning-content.test.js.map +1 -1
- package/dist/providers/openrouter/utils.d.ts.map +1 -1
- package/dist/providers/openrouter/utils.js +2 -3
- package/dist/providers/openrouter/utils.js.map +1 -1
- package/dist/providers/openrouter.api.retry.test.js.map +1 -1
- package/dist/providers/openrouter.provider.createRunner.test.js +1 -1
- package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -1
- package/dist/providers/openrouter.provider.js +6 -4
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/openrouter.test.js +13 -17
- package/dist/providers/openrouter.test.js.map +1 -1
- package/dist/providers/registry.d.ts +5 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/registry.test.js +11 -11
- package/dist/providers/registry.test.js.map +1 -1
- package/dist/providers/web-search/index.d.ts +1 -1
- package/dist/providers/web-search/index.d.ts.map +1 -1
- package/dist/providers/web-search/index.js.map +1 -1
- package/dist/providers/web-search/registry.d.ts.map +1 -1
- package/dist/providers/web-search/registry.js.map +1 -1
- package/dist/providers/web-search/registry.test.js +14 -14
- package/dist/providers/web-search/registry.test.js.map +1 -1
- package/dist/providers/web-search/tavily.provider.d.ts.map +1 -1
- package/dist/providers/web-search/tavily.provider.js +4 -4
- package/dist/providers/web-search/tavily.provider.js.map +1 -1
- package/dist/providers/web-search/tavily.provider.test.js +7 -7
- package/dist/providers/web-search/tavily.provider.test.js.map +1 -1
- package/dist/providers/web-search/types.d.ts.map +1 -1
- package/dist/scripts/extract-provider-traffic.d.ts +3 -0
- package/dist/scripts/extract-provider-traffic.d.ts.map +1 -0
- package/dist/scripts/extract-provider-traffic.js +32 -0
- package/dist/scripts/extract-provider-traffic.js.map +1 -0
- package/dist/services/approval-state.d.ts +24 -0
- package/dist/services/approval-state.d.ts.map +1 -0
- package/dist/services/approval-state.js +41 -0
- package/dist/services/approval-state.js.map +1 -0
- package/dist/services/approval-state.test.d.ts +2 -0
- package/dist/services/approval-state.test.d.ts.map +1 -0
- package/dist/services/approval-state.test.js +59 -0
- package/dist/services/approval-state.test.js.map +1 -0
- package/dist/services/command-message-streaming.d.ts +12 -0
- package/dist/services/command-message-streaming.d.ts.map +1 -0
- package/dist/services/command-message-streaming.js +68 -0
- package/dist/services/command-message-streaming.js.map +1 -0
- package/dist/services/command-message-streaming.test.d.ts +2 -0
- package/dist/services/command-message-streaming.test.d.ts.map +1 -0
- package/dist/services/command-message-streaming.test.js +78 -0
- package/dist/services/command-message-streaming.test.js.map +1 -0
- package/dist/services/conversation-events.d.ts +2 -13
- package/dist/services/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation-integration.test.d.ts +2 -0
- package/dist/services/conversation-integration.test.d.ts.map +1 -0
- package/dist/services/conversation-integration.test.js +155 -0
- package/dist/services/conversation-integration.test.js.map +1 -0
- package/dist/services/conversation-result-builder.d.ts +41 -0
- package/dist/services/conversation-result-builder.d.ts.map +1 -0
- package/dist/services/conversation-result-builder.js +110 -0
- package/dist/services/conversation-result-builder.js.map +1 -0
- package/dist/services/conversation-result-builder.test.d.ts +2 -0
- package/dist/services/conversation-result-builder.test.d.ts.map +1 -0
- package/dist/services/conversation-result-builder.test.js +76 -0
- package/dist/services/conversation-result-builder.test.js.map +1 -0
- package/dist/services/conversation-service.d.ts +1 -1
- package/dist/services/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation-service.js.map +1 -1
- package/dist/services/conversation-session-reasoning.test.js +3 -3
- package/dist/services/conversation-session-reasoning.test.js.map +1 -1
- package/dist/services/conversation-session.d.ts +5 -17
- package/dist/services/conversation-session.d.ts.map +1 -1
- package/dist/services/conversation-session.js +164 -275
- package/dist/services/conversation-session.js.map +1 -1
- package/dist/services/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation-store.js +3 -9
- package/dist/services/conversation-store.js.map +1 -1
- package/dist/services/conversation-store.test.js +17 -14
- package/dist/services/conversation-store.test.js.map +1 -1
- package/dist/services/execution-context.d.ts.map +1 -1
- package/dist/services/execution-context.js.map +1 -1
- package/dist/services/execution-context.test.js +7 -7
- package/dist/services/execution-context.test.js.map +1 -1
- package/dist/services/file-service.d.ts.map +1 -1
- package/dist/services/file-service.js +5 -9
- package/dist/services/file-service.js.map +1 -1
- package/dist/services/history-service.d.ts.map +1 -1
- package/dist/services/history-service.js +3 -7
- package/dist/services/history-service.js.map +1 -1
- package/dist/services/logging-contract.d.ts +74 -0
- package/dist/services/logging-contract.d.ts.map +1 -0
- package/dist/services/logging-contract.js +157 -0
- package/dist/services/logging-contract.js.map +1 -0
- package/dist/services/logging-contract.test.d.ts +2 -0
- package/dist/services/logging-contract.test.d.ts.map +1 -0
- package/dist/services/logging-contract.test.js +66 -0
- package/dist/services/logging-contract.test.js.map +1 -0
- package/dist/services/logging-service.d.ts +5 -0
- package/dist/services/logging-service.d.ts.map +1 -1
- package/dist/services/logging-service.js +93 -21
- package/dist/services/logging-service.js.map +1 -1
- package/dist/services/model-service.d.ts.map +1 -1
- package/dist/services/model-service.js +2 -2
- package/dist/services/model-service.js.map +1 -1
- package/dist/services/model-service.test.js +6 -6
- package/dist/services/model-service.test.js.map +1 -1
- package/dist/services/service-interfaces.d.ts.map +1 -1
- package/dist/services/settings-env.d.ts +9 -0
- package/dist/services/settings-env.d.ts.map +1 -0
- package/dist/services/settings-env.js +75 -0
- package/dist/services/settings-env.js.map +1 -0
- package/dist/services/settings-env.test.d.ts +2 -0
- package/dist/services/settings-env.test.d.ts.map +1 -0
- package/dist/services/settings-env.test.js +32 -0
- package/dist/services/settings-env.test.js.map +1 -0
- package/dist/services/settings-merger.d.ts +26 -0
- package/dist/services/settings-merger.d.ts.map +1 -0
- package/dist/services/settings-merger.js +122 -0
- package/dist/services/settings-merger.js.map +1 -0
- package/dist/services/settings-merger.test.d.ts +2 -0
- package/dist/services/settings-merger.test.d.ts.map +1 -0
- package/dist/services/settings-merger.test.js +26 -0
- package/dist/services/settings-merger.test.js.map +1 -0
- package/dist/services/settings-persistence.d.ts +32 -0
- package/dist/services/settings-persistence.d.ts.map +1 -0
- package/dist/services/settings-persistence.js +134 -0
- package/dist/services/settings-persistence.js.map +1 -0
- package/dist/services/settings-persistence.test.d.ts +2 -0
- package/dist/services/settings-persistence.test.d.ts.map +1 -0
- package/dist/services/settings-persistence.test.js +51 -0
- package/dist/services/settings-persistence.test.js.map +1 -0
- package/dist/services/settings-schema.d.ts +320 -0
- package/dist/services/settings-schema.d.ts.map +1 -0
- package/dist/services/settings-schema.js +272 -0
- package/dist/services/settings-schema.js.map +1 -0
- package/dist/services/settings-service.d.ts +4 -248
- package/dist/services/settings-service.d.ts.map +1 -1
- package/dist/services/settings-service.js +45 -641
- package/dist/services/settings-service.js.map +1 -1
- package/dist/services/settings-service.mock.d.ts.map +1 -1
- package/dist/services/settings-service.mock.js.map +1 -1
- package/dist/services/singleton-deprecation.test.js +2 -2
- package/dist/services/singleton-deprecation.test.js.map +1 -1
- package/dist/services/ssh-service.d.ts.map +1 -1
- package/dist/services/ssh-service.js +8 -7
- package/dist/services/ssh-service.js.map +1 -1
- package/dist/services/ssh-service.test.js +15 -13
- package/dist/services/ssh-service.test.js.map +1 -1
- package/dist/services/stream-event-parsing.d.ts +4 -0
- package/dist/services/stream-event-parsing.d.ts.map +1 -0
- package/dist/services/stream-event-parsing.js +76 -0
- package/dist/services/stream-event-parsing.js.map +1 -0
- package/dist/services/stream-event-parsing.test.d.ts +2 -0
- package/dist/services/stream-event-parsing.test.d.ts.map +1 -0
- package/dist/services/stream-event-parsing.test.js +59 -0
- package/dist/services/stream-event-parsing.test.js.map +1 -0
- package/dist/services/stream-event-processor.d.ts +32 -0
- package/dist/services/stream-event-processor.d.ts.map +1 -0
- package/dist/services/stream-event-processor.js +344 -0
- package/dist/services/stream-event-processor.js.map +1 -0
- package/dist/services/stream-event-processor.test.d.ts +2 -0
- package/dist/services/stream-event-processor.test.d.ts.map +1 -0
- package/dist/services/stream-event-processor.test.js +117 -0
- package/dist/services/stream-event-processor.test.js.map +1 -0
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +45 -35
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/apply-patch.test.js +23 -0
- package/dist/tools/apply-patch.test.js.map +1 -1
- package/dist/tools/ask-mentor.d.ts.map +1 -1
- package/dist/tools/ask-mentor.js +5 -15
- package/dist/tools/ask-mentor.js.map +1 -1
- package/dist/tools/ask-mentor.test.js +1 -1
- package/dist/tools/ask-mentor.test.js.map +1 -1
- package/dist/tools/create-file.d.ts.map +1 -1
- package/dist/tools/create-file.js +2 -2
- package/dist/tools/create-file.js.map +1 -1
- package/dist/tools/create-file.test.js.map +1 -1
- package/dist/tools/edit-healing.d.ts.map +1 -1
- package/dist/tools/edit-healing.js +5 -4
- package/dist/tools/edit-healing.js.map +1 -1
- package/dist/tools/edit-healing.test.js.map +1 -1
- package/dist/tools/find-files.d.ts.map +1 -1
- package/dist/tools/find-files.js +8 -23
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/find-files.test.js +1 -2
- package/dist/tools/find-files.test.js.map +1 -1
- package/dist/tools/format-helpers.d.ts.map +1 -1
- package/dist/tools/format-helpers.js +2 -6
- package/dist/tools/format-helpers.js.map +1 -1
- package/dist/tools/grep.d.ts +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +6 -21
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +3 -7
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/read-file.test.js.map +1 -1
- package/dist/tools/search-replace.d.ts.map +1 -1
- package/dist/tools/search-replace.js +14 -31
- package/dist/tools/search-replace.js.map +1 -1
- package/dist/tools/search-replace.test.js.map +1 -1
- package/dist/tools/search.d.ts +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +6 -16
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shell.d.ts +1 -1
- package/dist/tools/shell.d.ts.map +1 -1
- package/dist/tools/shell.js +25 -51
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/shell.test.d.ts +2 -0
- package/dist/tools/shell.test.d.ts.map +1 -0
- package/dist/tools/shell.test.js +70 -0
- package/dist/tools/shell.test.js.map +1 -0
- package/dist/tools/tool-names.d.ts +3 -0
- package/dist/tools/tool-names.d.ts.map +1 -0
- package/dist/tools/tool-names.js +3 -0
- package/dist/tools/tool-names.js.map +1 -0
- package/dist/tools/tool-names.test.d.ts +2 -0
- package/dist/tools/tool-names.test.d.ts.map +1 -0
- package/dist/tools/tool-names.test.js +7 -0
- package/dist/tools/tool-names.test.js.map +1 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +3 -8
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +4 -8
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +3 -3
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +6 -10
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/web-search.test.js +12 -14
- package/dist/tools/web-search.test.js.map +1 -1
- package/dist/types/messages.d.ts +29 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/utils/command-logger.d.ts.map +1 -1
- package/dist/utils/command-logger.js.map +1 -1
- package/dist/utils/command-safety/constants.d.ts.map +1 -1
- package/dist/utils/command-safety/constants.js +1 -9
- package/dist/utils/command-safety/constants.js.map +1 -1
- package/dist/utils/command-safety/find-helpers.d.ts.map +1 -1
- package/dist/utils/command-safety/find-helpers.js +4 -9
- package/dist/utils/command-safety/find-helpers.js.map +1 -1
- package/dist/utils/command-safety/handlers/find-handler.d.ts.map +1 -1
- package/dist/utils/command-safety/handlers/find-handler.js +3 -10
- package/dist/utils/command-safety/handlers/find-handler.js.map +1 -1
- package/dist/utils/command-safety/handlers/git-handler.d.ts.map +1 -1
- package/dist/utils/command-safety/handlers/git-handler.js +2 -4
- package/dist/utils/command-safety/handlers/git-handler.js.map +1 -1
- package/dist/utils/command-safety/handlers/index.d.ts +1 -1
- package/dist/utils/command-safety/handlers/index.d.ts.map +1 -1
- package/dist/utils/command-safety/handlers/index.js.map +1 -1
- package/dist/utils/command-safety/handlers/sed-handler.d.ts.map +1 -1
- package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -1
- package/dist/utils/command-safety/handlers/types.d.ts.map +1 -1
- package/dist/utils/command-safety/index.d.ts.map +1 -1
- package/dist/utils/command-safety/index.js +4 -10
- package/dist/utils/command-safety/index.js.map +1 -1
- package/dist/utils/command-safety/path-analysis.d.ts.map +1 -1
- package/dist/utils/command-safety/path-analysis.js +9 -20
- package/dist/utils/command-safety/path-analysis.js.map +1 -1
- package/dist/utils/command-safety/utils.d.ts.map +1 -1
- package/dist/utils/command-safety/utils.js +1 -3
- package/dist/utils/command-safety/utils.js.map +1 -1
- package/dist/utils/command-safety.find.test.js +44 -87
- package/dist/utils/command-safety.find.test.js.map +1 -1
- package/dist/utils/command-safety.path.test.js +32 -67
- package/dist/utils/command-safety.path.test.js.map +1 -1
- package/dist/utils/conversation-event-handler.d.ts +4 -16
- package/dist/utils/conversation-event-handler.d.ts.map +1 -1
- package/dist/utils/conversation-event-handler.js +4 -8
- package/dist/utils/conversation-event-handler.js.map +1 -1
- package/dist/utils/conversation-event-handler.test.js +16 -18
- package/dist/utils/conversation-event-handler.test.js.map +1 -1
- package/dist/utils/conversation-utils.d.ts.map +1 -1
- package/dist/utils/conversation-utils.js +5 -8
- package/dist/utils/conversation-utils.js.map +1 -1
- package/dist/utils/conversation-utils.test.js +45 -44
- package/dist/utils/conversation-utils.test.js.map +1 -1
- package/dist/utils/diff.d.ts.map +1 -1
- package/dist/utils/diff.js +2 -4
- package/dist/utils/diff.js.map +1 -1
- package/dist/utils/diff.test.js +12 -12
- package/dist/utils/diff.test.js.map +1 -1
- package/dist/utils/error-helpers.d.ts.map +1 -1
- package/dist/utils/error-helpers.js +2 -6
- package/dist/utils/error-helpers.js.map +1 -1
- package/dist/utils/error-helpers.test.js +32 -32
- package/dist/utils/error-helpers.test.js.map +1 -1
- package/dist/utils/execute-shell.d.ts.map +1 -1
- package/dist/utils/execute-shell.js.map +1 -1
- package/dist/utils/execute-shell.test.js.map +1 -1
- package/dist/utils/extract-command-messages.d.ts.map +1 -1
- package/dist/utils/extract-command-messages.js +16 -21
- package/dist/utils/extract-command-messages.js.map +1 -1
- package/dist/utils/ink-render-options.d.ts.map +1 -1
- package/dist/utils/ink-render-options.js.map +1 -1
- package/dist/utils/log-viewer-filters.d.ts +29 -0
- package/dist/utils/log-viewer-filters.d.ts.map +1 -0
- package/dist/utils/log-viewer-filters.js +49 -0
- package/dist/utils/log-viewer-filters.js.map +1 -0
- package/dist/utils/log-viewer-filters.test.d.ts +2 -0
- package/dist/utils/log-viewer-filters.test.d.ts.map +1 -0
- package/dist/utils/log-viewer-filters.test.js +48 -0
- package/dist/utils/log-viewer-filters.test.js.map +1 -0
- package/dist/utils/message-buffer.d.ts.map +1 -1
- package/dist/utils/message-buffer.js.map +1 -1
- package/dist/utils/message-buffer.test.js +4 -4
- package/dist/utils/message-buffer.test.js.map +1 -1
- package/dist/utils/output-trim.d.ts.map +1 -1
- package/dist/utils/output-trim.js.map +1 -1
- package/dist/utils/provider-credentials.d.ts.map +1 -1
- package/dist/utils/provider-credentials.js +1 -1
- package/dist/utils/provider-credentials.js.map +1 -1
- package/dist/utils/provider-traffic-extractor.d.ts +18 -0
- package/dist/utils/provider-traffic-extractor.d.ts.map +1 -0
- package/dist/utils/provider-traffic-extractor.js +121 -0
- package/dist/utils/provider-traffic-extractor.js.map +1 -0
- package/dist/utils/provider-traffic-extractor.test.d.ts +2 -0
- package/dist/utils/provider-traffic-extractor.test.d.ts.map +1 -0
- package/dist/utils/provider-traffic-extractor.test.js +84 -0
- package/dist/utils/provider-traffic-extractor.test.js.map +1 -0
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +5 -12
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/ssh-config-parser.d.ts.map +1 -1
- package/dist/utils/ssh-config-parser.js.map +1 -1
- package/dist/utils/ssh-config-parser.test.js.map +1 -1
- package/dist/utils/streaming-session-factory.d.ts +33 -0
- package/dist/utils/streaming-session-factory.d.ts.map +1 -0
- package/dist/utils/streaming-session-factory.js +75 -0
- package/dist/utils/streaming-session-factory.js.map +1 -0
- package/dist/utils/streaming-session-factory.test.d.ts +2 -0
- package/dist/utils/streaming-session-factory.test.d.ts.map +1 -0
- package/dist/utils/streaming-session-factory.test.js +74 -0
- package/dist/utils/streaming-session-factory.test.js.map +1 -0
- package/dist/utils/streaming-updater.d.ts.map +1 -1
- package/dist/utils/streaming-updater.js.map +1 -1
- package/dist/utils/throttle.d.ts.map +1 -1
- package/dist/utils/throttle.js.map +1 -1
- package/dist/utils/token-usage.d.ts.map +1 -1
- package/dist/utils/token-usage.js +1 -2
- package/dist/utils/token-usage.js.map +1 -1
- package/dist/utils/token-usage.test.js +8 -8
- package/dist/utils/token-usage.test.js.map +1 -1
- package/dist/utils/trim-tool-output.d.ts.map +1 -1
- package/dist/utils/trim-tool-output.js +1 -1
- package/dist/utils/trim-tool-output.js.map +1 -1
- package/package.json +117 -111
- package/readme.md +196 -145
|
@@ -11,18 +11,17 @@ const mockLogger = {
|
|
|
11
11
|
clearCorrelationId: () => { },
|
|
12
12
|
log: () => { },
|
|
13
13
|
};
|
|
14
|
-
|
|
15
|
-
const mockSettings = {
|
|
14
|
+
const createMockSettings = (providerId) => ({
|
|
16
15
|
get: (key) => {
|
|
17
16
|
if (key === 'agent.provider')
|
|
18
|
-
return
|
|
17
|
+
return providerId;
|
|
19
18
|
if (key === 'agent.model')
|
|
20
19
|
return 'mock-model';
|
|
21
20
|
return undefined;
|
|
22
21
|
},
|
|
23
22
|
set: () => { },
|
|
24
23
|
onChange: () => { },
|
|
25
|
-
};
|
|
24
|
+
});
|
|
26
25
|
// Mock Runner
|
|
27
26
|
let lastRunOptions = null;
|
|
28
27
|
class MockRunner {
|
|
@@ -41,28 +40,54 @@ test.before(() => {
|
|
|
41
40
|
label: 'Mock Provider Chat',
|
|
42
41
|
createRunner: () => new MockRunner(),
|
|
43
42
|
fetchModels: async () => [{ id: 'mock-model' }],
|
|
43
|
+
capabilities: {
|
|
44
|
+
supportsConversationChaining: false,
|
|
45
|
+
supportsTracingControl: false,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
registerProvider({
|
|
49
|
+
id: 'mock-provider-chat-tracing',
|
|
50
|
+
label: 'Mock Provider Chat Tracing',
|
|
51
|
+
createRunner: () => new MockRunner(),
|
|
52
|
+
fetchModels: async () => [{ id: 'mock-model' }],
|
|
53
|
+
capabilities: {
|
|
54
|
+
supportsConversationChaining: false,
|
|
55
|
+
supportsTracingControl: true,
|
|
56
|
+
},
|
|
44
57
|
});
|
|
45
58
|
});
|
|
46
|
-
test('OpenAIAgentClient.chat falls back to messages if finalOutput is missing', async (t) => {
|
|
59
|
+
test.serial('OpenAIAgentClient.chat falls back to messages if finalOutput is missing', async (t) => {
|
|
47
60
|
const client = new OpenAIAgentClient({
|
|
48
61
|
deps: {
|
|
49
62
|
logger: mockLogger,
|
|
50
|
-
settings:
|
|
63
|
+
settings: createMockSettings('mock-provider-chat'),
|
|
51
64
|
},
|
|
52
65
|
});
|
|
53
66
|
const response = await client.chat('Hello');
|
|
54
67
|
t.is(response, 'Fallback content');
|
|
55
68
|
});
|
|
56
|
-
test('disables Agents SDK tracing for non-OpenAI providers', async (t) => {
|
|
69
|
+
test.serial('disables Agents SDK tracing for non-OpenAI providers', async (t) => {
|
|
57
70
|
lastRunOptions = null;
|
|
58
71
|
const client = new OpenAIAgentClient({
|
|
59
72
|
deps: {
|
|
60
73
|
logger: mockLogger,
|
|
61
|
-
settings:
|
|
74
|
+
settings: createMockSettings('mock-provider-chat'),
|
|
62
75
|
},
|
|
63
76
|
});
|
|
64
77
|
await client.chat('Hello again');
|
|
65
78
|
t.truthy(lastRunOptions);
|
|
66
79
|
t.is(lastRunOptions.tracingDisabled, true);
|
|
67
80
|
});
|
|
81
|
+
test.serial('keeps Agents SDK tracing enabled when provider supports it', async (t) => {
|
|
82
|
+
lastRunOptions = null;
|
|
83
|
+
const client = new OpenAIAgentClient({
|
|
84
|
+
deps: {
|
|
85
|
+
logger: mockLogger,
|
|
86
|
+
settings: createMockSettings('mock-provider-chat-tracing'),
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
await client.chat('Hello tracing');
|
|
90
|
+
t.truthy(lastRunOptions);
|
|
91
|
+
t.false(!!lastRunOptions.tracingDisabled);
|
|
92
|
+
});
|
|
68
93
|
//# sourceMappingURL=openai-agent-client.chat.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-agent-client.chat.test.js","sourceRoot":"","sources":["../../source/lib/openai-agent-client.chat.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,
|
|
1
|
+
{"version":3,"file":"openai-agent-client.chat.test.js","sourceRoot":"","sources":["../../source/lib/openai-agent-client.chat.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-agent-client.d.ts","sourceRoot":"","sources":["../../source/lib/openai-agent-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai-agent-client.d.ts","sourceRoot":"","sources":["../../source/lib/openai-agent-client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAI9E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAKpE;;;GAGG;AACH,qBAAa,iBAAiB;;gBAmChB,EACV,KAAK,EACL,eAAe,EACf,QAAQ,EACR,aAAa,EACb,IAAI,GACL,EAAE;QACD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;QAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,IAAI,EAAE;YACJ,MAAM,EAAE,eAAe,CAAC;YACxB,QAAQ,EAAE,gBAAgB,CAAC;YAC3B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;SACrC,CAAC;KACH;IAyBD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ7B,kBAAkB,CAAC,MAAM,CAAC,EAAE,4BAA4B,GAAG,SAAS,GAAG,IAAI;IAQ3E,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAS1C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAWnC,WAAW,IAAI,MAAM;IAIrB,kBAAkB,CAChB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACtF,MAAM,IAAI;IAkDb,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAc5C;;OAEG;IACH,KAAK,IAAI,IAAI;IAkBb,kBAAkB,IAAI,IAAI;IAWpB,WAAW,CACf,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,EACzB,EAAE,kBAAkB,EAAE,GAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO,GAClE,OAAO,CAAC,GAAG,CAAC;IAgET,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,kBAAkB,EAAE,GAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAiB1G,iBAAiB,CACrB,KAAK,EAAE,GAAG,EACV,EAAE,kBAAkB,EAAE,GAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO,GAClE,OAAO,CAAC,GAAG,CAAC;IAsIT,IAAI,CACR,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;QAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB,GACL,OAAO,CAAC,MAAM,CAAC;CA+XnB"}
|
|
@@ -10,7 +10,7 @@ const getTestSettingsDir = () => {
|
|
|
10
10
|
testCounter += 1;
|
|
11
11
|
return path.join(TEST_BASE_DIR, `test-${testCounter}`);
|
|
12
12
|
};
|
|
13
|
-
test('OpenAI Flex Service Tier setting can be enabled', t => {
|
|
13
|
+
test('OpenAI Flex Service Tier setting can be enabled', (t) => {
|
|
14
14
|
const settings = new SettingsService({
|
|
15
15
|
settingsDir: getTestSettingsDir(),
|
|
16
16
|
disableFilePersistence: true,
|
|
@@ -22,7 +22,7 @@ test('OpenAI Flex Service Tier setting can be enabled', t => {
|
|
|
22
22
|
const value = settings.get(SETTING_KEYS.AGENT_USE_FLEX_SERVICE_TIER);
|
|
23
23
|
t.is(value, true);
|
|
24
24
|
});
|
|
25
|
-
test('OpenAI Flex Service Tier setting is disabled by default', t => {
|
|
25
|
+
test('OpenAI Flex Service Tier setting is disabled by default', (t) => {
|
|
26
26
|
const settings = new SettingsService({
|
|
27
27
|
settingsDir: getTestSettingsDir(),
|
|
28
28
|
disableFilePersistence: true,
|
|
@@ -32,7 +32,7 @@ test('OpenAI Flex Service Tier setting is disabled by default', t => {
|
|
|
32
32
|
const value = settings.get(SETTING_KEYS.AGENT_USE_FLEX_SERVICE_TIER);
|
|
33
33
|
t.is(value, false);
|
|
34
34
|
});
|
|
35
|
-
test('OpenAI Flex Service Tier setting can be disabled', t => {
|
|
35
|
+
test('OpenAI Flex Service Tier setting can be disabled', (t) => {
|
|
36
36
|
const settings = new SettingsService({
|
|
37
37
|
settingsDir: getTestSettingsDir(),
|
|
38
38
|
disableFilePersistence: true,
|
|
@@ -45,7 +45,7 @@ test('OpenAI Flex Service Tier setting can be disabled', t => {
|
|
|
45
45
|
const value = settings.get(SETTING_KEYS.AGENT_USE_FLEX_SERVICE_TIER);
|
|
46
46
|
t.is(value, false);
|
|
47
47
|
});
|
|
48
|
-
test('OpenAI Flex Service Tier setting is runtime modifiable', t => {
|
|
48
|
+
test('OpenAI Flex Service Tier setting is runtime modifiable', (t) => {
|
|
49
49
|
const settings = new SettingsService({
|
|
50
50
|
settingsDir: getTestSettingsDir(),
|
|
51
51
|
disableFilePersistence: true,
|
|
@@ -54,7 +54,7 @@ test('OpenAI Flex Service Tier setting is runtime modifiable', t => {
|
|
|
54
54
|
// Verify the setting is runtime modifiable
|
|
55
55
|
t.true(settings.isRuntimeModifiable(SETTING_KEYS.AGENT_USE_FLEX_SERVICE_TIER));
|
|
56
56
|
});
|
|
57
|
-
test('OpenAI Flex Service Tier setting is included in getAll()', t => {
|
|
57
|
+
test('OpenAI Flex Service Tier setting is included in getAll()', (t) => {
|
|
58
58
|
const settings = new SettingsService({
|
|
59
59
|
settingsDir: getTestSettingsDir(),
|
|
60
60
|
disableFilePersistence: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-agent-client.flex-tier.test.js","sourceRoot":"","sources":["../../source/lib/openai-agent-client.flex-tier.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"openai-agent-client.flex-tier.test.js","sourceRoot":"","sources":["../../source/lib/openai-agent-client.flex-tier.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Agent, run, tool as createTool, webSearchTool, applyPatchTool
|
|
2
|
-
import { APIConnectionError, APIConnectionTimeoutError, InternalServerError, RateLimitError
|
|
1
|
+
import { Agent, run, tool as createTool, webSearchTool, applyPatchTool } from '@openai/agents';
|
|
2
|
+
import { APIConnectionError, APIConnectionTimeoutError, InternalServerError, RateLimitError } from 'openai';
|
|
3
3
|
import { OpenRouterError } from '../providers/openrouter.js';
|
|
4
4
|
import { OpenAICompatibleError } from '../providers/openai-compatible/api.js';
|
|
5
5
|
import { getProvider } from '../providers/index.js';
|
|
@@ -36,6 +36,16 @@ export class OpenAIAgentClient {
|
|
|
36
36
|
#mentorAgent = null;
|
|
37
37
|
#mentorStore = null;
|
|
38
38
|
#mentorPreviousResponseId = null;
|
|
39
|
+
#resetMentorState() {
|
|
40
|
+
if (this.#mentorStore) {
|
|
41
|
+
this.#mentorStore.clear();
|
|
42
|
+
}
|
|
43
|
+
this.#mentorPreviousResponseId = null;
|
|
44
|
+
this.#mentorStore = null;
|
|
45
|
+
this.#mentorRunner = null;
|
|
46
|
+
this.#mentorProvider = null;
|
|
47
|
+
this.#mentorAgent = null;
|
|
48
|
+
}
|
|
39
49
|
constructor({ model, reasoningEffort, maxTurns, retryAttempts, deps, }) {
|
|
40
50
|
this.#logger = deps.logger;
|
|
41
51
|
this.#settings = deps.settings;
|
|
@@ -47,8 +57,7 @@ export class OpenAIAgentClient {
|
|
|
47
57
|
});
|
|
48
58
|
this.#reasoningEffort = reasoningEffort;
|
|
49
59
|
this.#temperature = this.#settings.get('agent.temperature');
|
|
50
|
-
this.#provider =
|
|
51
|
-
this.#settings.get('agent.provider') || 'openai';
|
|
60
|
+
this.#provider = this.#settings.get('agent.provider') || 'openai';
|
|
52
61
|
this.#maxTurns = maxTurns ?? 20;
|
|
53
62
|
this.#retryAttempts = retryAttempts ?? 2;
|
|
54
63
|
this.#agent = this.#createAgent({ model, reasoningEffort });
|
|
@@ -66,6 +75,7 @@ export class OpenAIAgentClient {
|
|
|
66
75
|
model,
|
|
67
76
|
reasoningEffort: this.#reasoningEffort,
|
|
68
77
|
});
|
|
78
|
+
this.#resetMentorState();
|
|
69
79
|
}
|
|
70
80
|
setReasoningEffort(effort) {
|
|
71
81
|
this.#reasoningEffort = effort;
|
|
@@ -90,6 +100,7 @@ export class OpenAIAgentClient {
|
|
|
90
100
|
reasoningEffort: this.#reasoningEffort,
|
|
91
101
|
});
|
|
92
102
|
this.#runner = this.#createRunner(this.#provider);
|
|
103
|
+
this.#resetMentorState();
|
|
93
104
|
}
|
|
94
105
|
getProvider() {
|
|
95
106
|
return this.#provider;
|
|
@@ -97,7 +108,7 @@ export class OpenAIAgentClient {
|
|
|
97
108
|
addToolInterceptor(interceptor) {
|
|
98
109
|
this.#toolInterceptors.push(interceptor);
|
|
99
110
|
return () => {
|
|
100
|
-
this.#toolInterceptors = this.#toolInterceptors.filter(i => i !== interceptor);
|
|
111
|
+
this.#toolInterceptors = this.#toolInterceptors.filter((i) => i !== interceptor);
|
|
101
112
|
};
|
|
102
113
|
}
|
|
103
114
|
async #checkToolInterceptors(name, params, toolCallId) {
|
|
@@ -120,6 +131,13 @@ export class OpenAIAgentClient {
|
|
|
120
131
|
}
|
|
121
132
|
return null;
|
|
122
133
|
}
|
|
134
|
+
#getProviderCapabilities(providerId) {
|
|
135
|
+
const providerDef = getProvider(providerId);
|
|
136
|
+
return {
|
|
137
|
+
supportsConversationChaining: providerDef?.capabilities?.supportsConversationChaining ?? false,
|
|
138
|
+
supportsTracingControl: providerDef?.capabilities?.supportsTracingControl ?? false,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
123
141
|
#createRunner(providerId) {
|
|
124
142
|
const providerDef = getProvider(providerId);
|
|
125
143
|
if (!providerDef?.createRunner) {
|
|
@@ -139,13 +157,14 @@ export class OpenAIAgentClient {
|
|
|
139
157
|
reasoningEffort: this.#reasoningEffort,
|
|
140
158
|
temperature: this.#temperature,
|
|
141
159
|
});
|
|
142
|
-
//
|
|
143
|
-
this.#
|
|
160
|
+
// Refreshing core agent should not keep stale mentor state/instructions.
|
|
161
|
+
this.#resetMentorState();
|
|
144
162
|
}
|
|
145
163
|
/**
|
|
146
164
|
* Abort the current running stream/operation
|
|
147
165
|
*/
|
|
148
166
|
abort() {
|
|
167
|
+
const traceIdBeforeClear = this.#currentCorrelationId ?? this.#logger.getCorrelationId?.();
|
|
149
168
|
if (this.#currentAbortController) {
|
|
150
169
|
this.#currentAbortController.abort();
|
|
151
170
|
this.#currentAbortController = null;
|
|
@@ -154,7 +173,12 @@ export class OpenAIAgentClient {
|
|
|
154
173
|
this.#logger.clearCorrelationId();
|
|
155
174
|
this.#currentCorrelationId = null;
|
|
156
175
|
}
|
|
157
|
-
this.#logger.debug('Agent operation aborted'
|
|
176
|
+
this.#logger.debug('Agent operation aborted', {
|
|
177
|
+
eventType: 'stream.aborted',
|
|
178
|
+
category: 'stream',
|
|
179
|
+
phase: 'abort',
|
|
180
|
+
traceId: traceIdBeforeClear,
|
|
181
|
+
});
|
|
158
182
|
}
|
|
159
183
|
clearConversations() {
|
|
160
184
|
const providerDef = getProvider(this.#provider);
|
|
@@ -162,15 +186,6 @@ export class OpenAIAgentClient {
|
|
|
162
186
|
providerDef.clearConversations();
|
|
163
187
|
}
|
|
164
188
|
this.#refreshAgent();
|
|
165
|
-
// Also clear mentor conversation
|
|
166
|
-
if (this.#mentorStore) {
|
|
167
|
-
this.#mentorStore.clear();
|
|
168
|
-
}
|
|
169
|
-
this.#mentorPreviousResponseId = null;
|
|
170
|
-
this.#mentorStore = null;
|
|
171
|
-
this.#mentorRunner = null;
|
|
172
|
-
this.#mentorProvider = null;
|
|
173
|
-
this.#mentorAgent = null;
|
|
174
189
|
this.#logger.info('Conversation and agent refreshed');
|
|
175
190
|
}
|
|
176
191
|
async startStream(userInput, { previousResponseId } = {}) {
|
|
@@ -178,9 +193,7 @@ export class OpenAIAgentClient {
|
|
|
178
193
|
this.abort();
|
|
179
194
|
// Refresh agent instructions for the first message of a session to ensure
|
|
180
195
|
// directory structure and AGENTS.md content are up to date.
|
|
181
|
-
const isFirstMessage = !previousResponseId &&
|
|
182
|
-
(!Array.isArray(userInput) ||
|
|
183
|
-
(userInput.length > 0 && userInput.length <= 1));
|
|
196
|
+
const isFirstMessage = !previousResponseId && (!Array.isArray(userInput) || (userInput.length > 0 && userInput.length <= 1));
|
|
184
197
|
if (isFirstMessage) {
|
|
185
198
|
this.#refreshAgent();
|
|
186
199
|
}
|
|
@@ -190,6 +203,12 @@ export class OpenAIAgentClient {
|
|
|
190
203
|
this.#currentAbortController = new AbortController();
|
|
191
204
|
const signal = this.#currentAbortController.signal;
|
|
192
205
|
this.#logger.info('Agent stream started', {
|
|
206
|
+
eventType: 'provider.request.started',
|
|
207
|
+
category: 'provider',
|
|
208
|
+
phase: 'request_start',
|
|
209
|
+
traceId: this.#currentCorrelationId,
|
|
210
|
+
provider: this.#provider,
|
|
211
|
+
model: this.#model,
|
|
193
212
|
inputType: Array.isArray(userInput) ? 'array' : typeof userInput,
|
|
194
213
|
inputLength: typeof userInput === 'string' ? userInput.length : undefined,
|
|
195
214
|
inputItems: Array.isArray(userInput) ? userInput.length : undefined,
|
|
@@ -201,8 +220,8 @@ export class OpenAIAgentClient {
|
|
|
201
220
|
maxTurns: this.#maxTurns,
|
|
202
221
|
signal,
|
|
203
222
|
};
|
|
204
|
-
|
|
205
|
-
if (
|
|
223
|
+
const { supportsConversationChaining } = this.#getProviderCapabilities(this.#provider);
|
|
224
|
+
if (supportsConversationChaining && previousResponseId) {
|
|
206
225
|
options.previousResponseId = previousResponseId;
|
|
207
226
|
}
|
|
208
227
|
const result = await this.#executeWithRetry(() => this.#runAgent(this.#agent, userInput, options));
|
|
@@ -210,16 +229,16 @@ export class OpenAIAgentClient {
|
|
|
210
229
|
}
|
|
211
230
|
catch (error) {
|
|
212
231
|
this.#logger.error('Agent stream failed', {
|
|
232
|
+
eventType: 'provider.response.failed',
|
|
233
|
+
category: 'provider',
|
|
234
|
+
phase: 'provider_response',
|
|
235
|
+
traceId: this.#currentCorrelationId,
|
|
236
|
+
provider: this.#provider,
|
|
237
|
+
model: this.#model,
|
|
213
238
|
error: error instanceof Error ? error.message : String(error),
|
|
214
|
-
inputType: Array.isArray(userInput)
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
inputLength: typeof userInput === 'string'
|
|
218
|
-
? userInput.length
|
|
219
|
-
: undefined,
|
|
220
|
-
inputItems: Array.isArray(userInput)
|
|
221
|
-
? userInput.length
|
|
222
|
-
: undefined,
|
|
239
|
+
inputType: Array.isArray(userInput) ? 'array' : typeof userInput,
|
|
240
|
+
inputLength: typeof userInput === 'string' ? userInput.length : undefined,
|
|
241
|
+
inputItems: Array.isArray(userInput) ? userInput.length : undefined,
|
|
223
242
|
});
|
|
224
243
|
throw error;
|
|
225
244
|
}
|
|
@@ -231,8 +250,8 @@ export class OpenAIAgentClient {
|
|
|
231
250
|
const options = {
|
|
232
251
|
signal,
|
|
233
252
|
};
|
|
234
|
-
|
|
235
|
-
if (
|
|
253
|
+
const { supportsConversationChaining } = this.#getProviderCapabilities(this.#provider);
|
|
254
|
+
if (supportsConversationChaining && previousResponseId) {
|
|
236
255
|
options.previousResponseId = previousResponseId;
|
|
237
256
|
}
|
|
238
257
|
return this.#executeWithRetry(() => this.#runAgent(this.#agent, state, options));
|
|
@@ -246,8 +265,8 @@ export class OpenAIAgentClient {
|
|
|
246
265
|
maxTurns: this.#maxTurns,
|
|
247
266
|
signal,
|
|
248
267
|
};
|
|
249
|
-
|
|
250
|
-
if (
|
|
268
|
+
const { supportsConversationChaining } = this.#getProviderCapabilities(this.#provider);
|
|
269
|
+
if (supportsConversationChaining && previousResponseId) {
|
|
251
270
|
options.previousResponseId = previousResponseId;
|
|
252
271
|
}
|
|
253
272
|
return this.#executeWithRetry(() => this.#runAgent(this.#agent, state, options));
|
|
@@ -257,7 +276,8 @@ export class OpenAIAgentClient {
|
|
|
257
276
|
// When using non-OpenAI providers (e.g., OpenRouter), this export can fail noisily
|
|
258
277
|
// (e.g., 503 errors). Disable tracing per-run for any non-OpenAI provider.
|
|
259
278
|
const effectiveOptions = options ? { ...options } : {};
|
|
260
|
-
|
|
279
|
+
const { supportsTracingControl } = this.#getProviderCapabilities(providerId);
|
|
280
|
+
if (!supportsTracingControl) {
|
|
261
281
|
effectiveOptions.tracingDisabled = true;
|
|
262
282
|
}
|
|
263
283
|
// Check if provider is configured but runner failed to initialize
|
|
@@ -290,24 +310,16 @@ export class OpenAIAgentClient {
|
|
|
290
310
|
error instanceof InternalServerError ||
|
|
291
311
|
error instanceof RateLimitError;
|
|
292
312
|
// Check if it's an OpenRouter error with retryable status
|
|
293
|
-
const isOpenRouterRetryable = error instanceof OpenRouterError &&
|
|
294
|
-
|
|
295
|
-
const
|
|
296
|
-
(error.status === 429 || error.status >= 500);
|
|
297
|
-
const isRetryable = retries > 0 &&
|
|
298
|
-
(isTransientError ||
|
|
299
|
-
isOpenRouterRetryable ||
|
|
300
|
-
isOpenAICompatibleRetryable);
|
|
313
|
+
const isOpenRouterRetryable = error instanceof OpenRouterError && (error.status === 429 || error.status >= 500);
|
|
314
|
+
const isOpenAICompatibleRetryable = error instanceof OpenAICompatibleError && (error.status === 429 || error.status >= 500);
|
|
315
|
+
const isRetryable = retries > 0 && (isTransientError || isOpenRouterRetryable || isOpenAICompatibleRetryable);
|
|
301
316
|
if (isRetryable) {
|
|
302
317
|
const attemptIndex = this.#retryAttempts - retries;
|
|
303
318
|
let delay;
|
|
304
319
|
// Check for Retry-After header (both OpenAI and OpenRouter)
|
|
305
|
-
const retryAfterHeader = (error instanceof RateLimitError &&
|
|
306
|
-
error.headers
|
|
307
|
-
(error instanceof
|
|
308
|
-
error.headers['retry-after']) ||
|
|
309
|
-
(error instanceof OpenAICompatibleError &&
|
|
310
|
-
error.headers['retry-after']);
|
|
320
|
+
const retryAfterHeader = (error instanceof RateLimitError && error.headers?.['retry-after']) ||
|
|
321
|
+
(error instanceof OpenRouterError && error.headers['retry-after']) ||
|
|
322
|
+
(error instanceof OpenAICompatibleError && error.headers['retry-after']);
|
|
311
323
|
if (retryAfterHeader) {
|
|
312
324
|
// Respect the Retry-After header
|
|
313
325
|
delay = parseInt(retryAfterHeader, 10) * 1000;
|
|
@@ -324,8 +336,16 @@ export class OpenAIAgentClient {
|
|
|
324
336
|
// Apply full jitter: random value between 0 and cappedDelay
|
|
325
337
|
delay = Math.random() * cappedDelay;
|
|
326
338
|
}
|
|
327
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
339
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
328
340
|
this.#logger.warn('Agent operation retry', {
|
|
341
|
+
eventType: 'retry.upstream',
|
|
342
|
+
category: 'retry',
|
|
343
|
+
phase: 'retry',
|
|
344
|
+
traceId: this.#currentCorrelationId,
|
|
345
|
+
provider: this.#provider,
|
|
346
|
+
model: this.#model,
|
|
347
|
+
retryType: 'upstream',
|
|
348
|
+
retryAttempt: attemptIndex + 1,
|
|
329
349
|
errorType: error.constructor.name,
|
|
330
350
|
retriesRemaining: retries - 1,
|
|
331
351
|
delayMs: Math.round(delay),
|
|
@@ -367,9 +387,7 @@ export class OpenAIAgentClient {
|
|
|
367
387
|
agentForChat = new Agent({
|
|
368
388
|
name: 'Mentor',
|
|
369
389
|
model: tempModel,
|
|
370
|
-
...(Object.keys(modelSettings).length > 0
|
|
371
|
-
? { modelSettings }
|
|
372
|
-
: {}),
|
|
390
|
+
...(Object.keys(modelSettings).length > 0 ? { modelSettings } : {}),
|
|
373
391
|
instructions: options.instructions || 'You are a helpful mentor assistant.',
|
|
374
392
|
});
|
|
375
393
|
// Ensure runner is compatible or use run()
|
|
@@ -403,9 +421,7 @@ export class OpenAIAgentClient {
|
|
|
403
421
|
return lastMessage.content;
|
|
404
422
|
}
|
|
405
423
|
if (Array.isArray(lastMessage.content)) {
|
|
406
|
-
return lastMessage.content
|
|
407
|
-
.map((part) => part.text || part.value || '')
|
|
408
|
-
.join('');
|
|
424
|
+
return lastMessage.content.map((part) => part.text || part.value || '').join('');
|
|
409
425
|
}
|
|
410
426
|
}
|
|
411
427
|
}
|
|
@@ -434,14 +450,12 @@ export class OpenAIAgentClient {
|
|
|
434
450
|
'- Suggest alternatives they may have dismissed too quickly\n' +
|
|
435
451
|
'- Ask for evidence when confidence seems misplaced\n\n' +
|
|
436
452
|
'When satisfied, give clear approval with specific next steps. When not, say exactly what needs more investigation.\n\n' +
|
|
437
|
-
|
|
453
|
+
"Be concise. Push back hard, but don't block unnecessarily."
|
|
438
454
|
: 'You are a helpful mentor assistant. Provide advice and guidance on technical problems. Be concise and actionable.';
|
|
439
455
|
// Add environment info and AGENTS.md context
|
|
440
456
|
const envInfo = getEnvInfo(this.#settings, this.#executionContext);
|
|
441
457
|
const cwd = this.#executionContext?.getCwd() ?? process.cwd();
|
|
442
|
-
const agentsInstructions = this.#executionContext?.isRemote()
|
|
443
|
-
? ''
|
|
444
|
-
: getAgentsInstructions(cwd);
|
|
458
|
+
const agentsInstructions = this.#executionContext?.isRemote() ? '' : getAgentsInstructions(cwd);
|
|
445
459
|
const instructions = `${baseInstructions}\n\nEnvironment: ${envInfo}${agentsInstructions}`;
|
|
446
460
|
// If mentor provider changed, reset mentor state to avoid mixing stores/prev ids across providers
|
|
447
461
|
if (this.#mentorProvider !== mentorProvider) {
|
|
@@ -467,9 +481,7 @@ export class OpenAIAgentClient {
|
|
|
467
481
|
this.#mentorAgent = new Agent({
|
|
468
482
|
name: 'Mentor',
|
|
469
483
|
model: mentorModel,
|
|
470
|
-
...(Object.keys(modelSettings).length > 0
|
|
471
|
-
? { modelSettings }
|
|
472
|
-
: {}),
|
|
484
|
+
...(Object.keys(modelSettings).length > 0 ? { modelSettings } : {}),
|
|
473
485
|
instructions,
|
|
474
486
|
});
|
|
475
487
|
this.#mentorStore = new ConversationStore();
|
|
@@ -480,19 +492,18 @@ export class OpenAIAgentClient {
|
|
|
480
492
|
// Determine input based on provider
|
|
481
493
|
// OpenAI uses previousResponseId for server-side history
|
|
482
494
|
// Others need full conversation history from store
|
|
483
|
-
const
|
|
484
|
-
|
|
485
|
-
: question;
|
|
495
|
+
const { supportsConversationChaining } = this.#getProviderCapabilities(mentorProvider);
|
|
496
|
+
const input = supportsConversationChaining ? question : this.#mentorStore.getHistory();
|
|
486
497
|
const result = await this.#runAgentWithProvider(mentorProvider, this.#mentorRunner, this.#mentorAgent, input, {
|
|
487
498
|
stream: false,
|
|
488
499
|
maxTurns: 1,
|
|
489
|
-
...(
|
|
500
|
+
...(supportsConversationChaining && this.#mentorPreviousResponseId
|
|
490
501
|
? { previousResponseId: this.#mentorPreviousResponseId }
|
|
491
502
|
: {}),
|
|
492
503
|
});
|
|
493
504
|
// Update conversation store with result
|
|
494
505
|
this.#mentorStore.updateFromResult(result);
|
|
495
|
-
// Track previousResponseId
|
|
506
|
+
// Track previousResponseId when provided by the provider.
|
|
496
507
|
if (result.responseId) {
|
|
497
508
|
this.#mentorPreviousResponseId = result.responseId;
|
|
498
509
|
}
|
|
@@ -508,9 +519,7 @@ export class OpenAIAgentClient {
|
|
|
508
519
|
response = lastMessage.content;
|
|
509
520
|
}
|
|
510
521
|
else if (Array.isArray(lastMessage.content)) {
|
|
511
|
-
response = lastMessage.content
|
|
512
|
-
.map((part) => part.text || part.value || '')
|
|
513
|
-
.join('');
|
|
522
|
+
response = lastMessage.content.map((part) => part.text || part.value || '').join('');
|
|
514
523
|
}
|
|
515
524
|
}
|
|
516
525
|
}
|
|
@@ -526,8 +535,7 @@ export class OpenAIAgentClient {
|
|
|
526
535
|
#createAgent({ model, reasoningEffort, temperature, } = {}) {
|
|
527
536
|
const resolvedModel = model?.trim() || this.#settings.get('agent.model');
|
|
528
537
|
this.#model = resolvedModel;
|
|
529
|
-
const resolvedTemperature = temperature ??
|
|
530
|
-
this.#settings.get('agent.temperature');
|
|
538
|
+
const resolvedTemperature = temperature ?? this.#settings.get('agent.temperature');
|
|
531
539
|
const { name, instructions, tools: toolDefinitions, } = getAgentDefinition({
|
|
532
540
|
settingsService: this.#settings,
|
|
533
541
|
loggingService: this.#logger,
|
|
@@ -538,15 +546,14 @@ export class OpenAIAgentClient {
|
|
|
538
546
|
// Determine if we should use the native applyPatchTool
|
|
539
547
|
const shouldUseNativePatchTool = this.#provider === 'openai' && resolvedModel.startsWith('gpt-5.1');
|
|
540
548
|
const tools = toolDefinitions
|
|
541
|
-
.filter(definition => {
|
|
549
|
+
.filter((definition) => {
|
|
542
550
|
// Exclude custom apply_patch if we're using native one
|
|
543
|
-
if (shouldUseNativePatchTool &&
|
|
544
|
-
definition.name === 'apply_patch') {
|
|
551
|
+
if (shouldUseNativePatchTool && definition.name === 'apply_patch') {
|
|
545
552
|
return false;
|
|
546
553
|
}
|
|
547
554
|
return true;
|
|
548
555
|
})
|
|
549
|
-
.map(definition => wrapToolInvoke(createTool({
|
|
556
|
+
.map((definition) => wrapToolInvoke(createTool({
|
|
550
557
|
name: definition.name,
|
|
551
558
|
description: definition.description,
|
|
552
559
|
parameters: definition.parameters,
|
|
@@ -594,10 +601,7 @@ export class OpenAIAgentClient {
|
|
|
594
601
|
const normalizedInput = normalizeToolInput(input);
|
|
595
602
|
let params;
|
|
596
603
|
try {
|
|
597
|
-
params =
|
|
598
|
-
typeof input === 'string'
|
|
599
|
-
? JSON.parse(input)
|
|
600
|
-
: input;
|
|
604
|
+
params = typeof input === 'string' ? JSON.parse(input) : input;
|
|
601
605
|
}
|
|
602
606
|
catch {
|
|
603
607
|
params = input;
|
|
@@ -659,8 +663,7 @@ export class OpenAIAgentClient {
|
|
|
659
663
|
}
|
|
660
664
|
// Temperature: only pass when explicitly set (number). Undefined means
|
|
661
665
|
// provider/model default.
|
|
662
|
-
if (typeof resolvedTemperature === 'number' &&
|
|
663
|
-
Number.isFinite(resolvedTemperature)) {
|
|
666
|
+
if (typeof resolvedTemperature === 'number' && Number.isFinite(resolvedTemperature)) {
|
|
664
667
|
modelSettings.temperature = resolvedTemperature;
|
|
665
668
|
}
|
|
666
669
|
// OpenAI Flex Service Tier: only pass when enabled and using OpenAI provider
|