@qduc/term2 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +5 -3
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +1 -5
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +31 -274
- package/dist/app.js.map +1 -1
- package/dist/app.parseInput.test.js +1 -9
- package/dist/app.parseInput.test.js.map +1 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/components/ApprovalPrompt.d.ts +2 -1
- package/dist/components/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/ApprovalPrompt.js +15 -0
- package/dist/components/ApprovalPrompt.js.map +1 -1
- package/dist/components/BottomArea.d.ts +1 -1
- package/dist/components/BottomArea.d.ts.map +1 -1
- package/dist/components/Input/determine-active-menu.d.ts +23 -0
- package/dist/components/Input/determine-active-menu.d.ts.map +1 -0
- package/dist/components/Input/determine-active-menu.js +57 -0
- package/dist/components/Input/determine-active-menu.js.map +1 -0
- package/dist/components/Input/input-width.d.ts +7 -0
- package/dist/components/Input/input-width.d.ts.map +1 -0
- package/dist/components/Input/input-width.js +20 -0
- package/dist/components/Input/input-width.js.map +1 -0
- package/dist/components/Input/insertions.d.ts +34 -0
- package/dist/components/Input/insertions.d.ts.map +1 -0
- package/dist/components/Input/insertions.js +52 -0
- package/dist/components/Input/insertions.js.map +1 -0
- package/dist/components/Input/popup-props.d.ts +18 -0
- package/dist/components/Input/popup-props.d.ts.map +1 -0
- package/dist/components/Input/popup-props.js +42 -0
- package/dist/components/Input/popup-props.js.map +1 -0
- package/dist/components/Input/triggers.d.ts +9 -0
- package/dist/components/Input/triggers.d.ts.map +1 -0
- package/dist/components/Input/triggers.js +25 -0
- package/dist/components/Input/triggers.js.map +1 -0
- package/dist/components/InputBox.d.ts +2 -6
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +118 -406
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/InputBox.menu-logic.test.js +82 -99
- package/dist/components/InputBox.menu-logic.test.js.map +1 -1
- package/dist/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/components/MarkdownRenderer.js +96 -23
- package/dist/components/MarkdownRenderer.js.map +1 -1
- package/dist/components/MessageList.d.ts +8 -0
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +25 -7
- package/dist/components/MessageList.js.map +1 -1
- package/dist/components/MessageList.test.js +48 -1
- package/dist/components/MessageList.test.js.map +1 -1
- package/dist/components/StatusBar.d.ts +1 -1
- package/dist/components/StatusBar.d.ts.map +1 -1
- package/dist/components/StatusBar.js +49 -38
- package/dist/components/StatusBar.js.map +1 -1
- package/dist/contracts/conversation.d.ts +9 -0
- package/dist/contracts/conversation.d.ts.map +1 -1
- package/dist/hooks/message-id.d.ts +3 -0
- package/dist/hooks/message-id.d.ts.map +1 -0
- package/dist/hooks/message-id.js +17 -0
- package/dist/hooks/message-id.js.map +1 -0
- package/dist/hooks/message-id.test.d.ts +2 -0
- package/dist/hooks/message-id.test.d.ts.map +1 -0
- package/dist/hooks/message-id.test.js +17 -0
- package/dist/hooks/message-id.test.js.map +1 -0
- package/dist/hooks/use-app-commands.d.ts +20 -0
- package/dist/hooks/use-app-commands.d.ts.map +1 -0
- package/dist/hooks/use-app-commands.js +197 -0
- package/dist/hooks/use-app-commands.js.map +1 -0
- package/dist/hooks/use-app-commands.test.d.ts +2 -0
- package/dist/hooks/use-app-commands.test.d.ts.map +1 -0
- package/dist/hooks/use-app-commands.test.js +34 -0
- package/dist/hooks/use-app-commands.test.js.map +1 -0
- package/dist/hooks/use-conversation.d.ts +11 -11
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +13 -10
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-escape-key.d.ts +24 -0
- package/dist/hooks/use-escape-key.d.ts.map +1 -0
- package/dist/hooks/use-escape-key.js +60 -0
- package/dist/hooks/use-escape-key.js.map +1 -0
- package/dist/hooks/use-escape-key.test.d.ts +2 -0
- package/dist/hooks/use-escape-key.test.d.ts.map +1 -0
- package/dist/hooks/use-escape-key.test.js +49 -0
- package/dist/hooks/use-escape-key.test.js.map +1 -0
- package/dist/hooks/use-mode-handlers.d.ts +35 -0
- package/dist/hooks/use-mode-handlers.d.ts.map +1 -0
- package/dist/hooks/use-mode-handlers.js +79 -0
- package/dist/hooks/use-mode-handlers.js.map +1 -0
- package/dist/hooks/use-model-selection.d.ts +6 -3
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +19 -16
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-model-selection.test.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.test.js +53 -22
- package/dist/hooks/use-model-selection.test.js.map +1 -1
- package/dist/hooks/use-path-completion.d.ts.map +1 -1
- package/dist/hooks/use-path-completion.js +5 -36
- package/dist/hooks/use-path-completion.js.map +1 -1
- package/dist/hooks/use-runtime-settings.d.ts +12 -0
- package/dist/hooks/use-runtime-settings.d.ts.map +1 -0
- package/dist/hooks/use-runtime-settings.js +68 -0
- package/dist/hooks/use-runtime-settings.js.map +1 -0
- package/dist/hooks/use-selection.d.ts +8 -0
- package/dist/hooks/use-selection.d.ts.map +1 -0
- package/dist/hooks/use-selection.js +31 -0
- package/dist/hooks/use-selection.js.map +1 -0
- package/dist/hooks/use-settings-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-completion.js +15 -30
- package/dist/hooks/use-settings-completion.js.map +1 -1
- package/dist/hooks/use-settings-completion.test.js +9 -9
- 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 +30 -28
- package/dist/hooks/use-settings-value-completion.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.test.js +13 -0
- package/dist/hooks/use-settings-value-completion.test.js.map +1 -1
- package/dist/hooks/use-shell-mode.d.ts +31 -0
- package/dist/hooks/use-shell-mode.d.ts.map +1 -0
- package/dist/hooks/use-shell-mode.js +85 -0
- package/dist/hooks/use-shell-mode.js.map +1 -0
- package/dist/hooks/use-slash-commands.d.ts +1 -0
- package/dist/hooks/use-slash-commands.d.ts.map +1 -1
- package/dist/hooks/use-slash-commands.js +32 -23
- package/dist/hooks/use-slash-commands.js.map +1 -1
- package/dist/hooks/use-terminal-width.d.ts +7 -0
- package/dist/hooks/use-terminal-width.d.ts.map +1 -0
- package/dist/hooks/use-terminal-width.js +33 -0
- package/dist/hooks/use-terminal-width.js.map +1 -0
- package/dist/hooks/use-trigger-detection.d.ts +40 -0
- package/dist/hooks/use-trigger-detection.d.ts.map +1 -0
- package/dist/hooks/use-trigger-detection.js +45 -0
- package/dist/hooks/use-trigger-detection.js.map +1 -0
- package/dist/lib/editor-impl.js +6 -6
- package/dist/lib/editor-impl.js.map +1 -1
- package/dist/lib/openai-agent-client.d.ts +2 -0
- package/dist/lib/openai-agent-client.d.ts.map +1 -1
- package/dist/lib/openai-agent-client.js +187 -191
- package/dist/lib/openai-agent-client.js.map +1 -1
- package/dist/lib/openai-agent-client.public-methods.test.js +61 -13
- package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -1
- package/dist/lib/retry-executor.d.ts +16 -0
- package/dist/lib/retry-executor.d.ts.map +1 -0
- package/dist/lib/retry-executor.js +71 -0
- package/dist/lib/retry-executor.js.map +1 -0
- package/dist/lib/retry-executor.test.d.ts +2 -0
- package/dist/lib/retry-executor.test.d.ts.map +1 -0
- package/dist/lib/retry-executor.test.js +178 -0
- package/dist/lib/retry-executor.test.js.map +1 -0
- package/dist/lib/tool-selection-policy.d.ts +14 -0
- package/dist/lib/tool-selection-policy.d.ts.map +1 -0
- package/dist/lib/tool-selection-policy.js +17 -0
- package/dist/lib/tool-selection-policy.js.map +1 -0
- package/dist/lib/tool-selection-policy.test.d.ts +2 -0
- package/dist/lib/tool-selection-policy.test.d.ts.map +1 -0
- package/dist/lib/tool-selection-policy.test.js +69 -0
- package/dist/lib/tool-selection-policy.test.js.map +1 -0
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai-compatible/model.d.ts.map +1 -1
- package/dist/providers/openai-compatible/model.js +68 -7
- package/dist/providers/openai-compatible/model.js.map +1 -1
- package/dist/providers/openai-compatible/reasoning-content.test.js +107 -6
- package/dist/providers/openai-compatible/reasoning-content.test.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.provider.js +2 -0
- package/dist/providers/openai.provider.js.map +1 -1
- package/dist/providers/openrouter/converters.d.ts.map +1 -1
- package/dist/providers/openrouter/converters.js +8 -6
- package/dist/providers/openrouter/converters.js.map +1 -1
- package/dist/providers/openrouter/converters.test.js +24 -0
- package/dist/providers/openrouter/converters.test.js.map +1 -1
- package/dist/providers/openrouter/model.d.ts.map +1 -1
- package/dist/providers/openrouter/model.js +13 -5
- package/dist/providers/openrouter/model.js.map +1 -1
- package/dist/providers/openrouter/reasoning-content.test.js +48 -2
- package/dist/providers/openrouter/reasoning-content.test.js.map +1 -1
- package/dist/providers/openrouter.provider.createRunner.test.js +17 -9
- package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -1
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/openrouter.test.js +0 -2
- package/dist/providers/openrouter.test.js.map +1 -1
- package/dist/providers/registry.d.ts +17 -8
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +9 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/web-search/exa.provider.d.ts +15 -0
- package/dist/providers/web-search/exa.provider.d.ts.map +1 -0
- package/dist/providers/web-search/exa.provider.js +82 -0
- package/dist/providers/web-search/exa.provider.js.map +1 -0
- package/dist/providers/web-search/exa.provider.test.d.ts +2 -0
- package/dist/providers/web-search/exa.provider.test.d.ts.map +1 -0
- package/dist/providers/web-search/exa.provider.test.js +67 -0
- package/dist/providers/web-search/exa.provider.test.js.map +1 -0
- package/dist/providers/web-search/index.d.ts +1 -0
- package/dist/providers/web-search/index.d.ts.map +1 -1
- package/dist/providers/web-search/index.js +1 -0
- package/dist/providers/web-search/index.js.map +1 -1
- package/dist/scripts/eval-auto-approval/cache.d.ts +9 -0
- package/dist/scripts/eval-auto-approval/cache.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/cache.js +64 -0
- package/dist/scripts/eval-auto-approval/cache.js.map +1 -0
- package/dist/scripts/eval-auto-approval/dataset.d.ts +45 -0
- package/dist/scripts/eval-auto-approval/dataset.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/dataset.js +65 -0
- package/dist/scripts/eval-auto-approval/dataset.js.map +1 -0
- package/dist/scripts/eval-auto-approval/dataset.test.d.ts +2 -0
- package/dist/scripts/eval-auto-approval/dataset.test.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/dataset.test.js +88 -0
- package/dist/scripts/eval-auto-approval/dataset.test.js.map +1 -0
- package/dist/scripts/eval-auto-approval/leaderboard.d.ts +92 -0
- package/dist/scripts/eval-auto-approval/leaderboard.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/leaderboard.js +402 -0
- package/dist/scripts/eval-auto-approval/leaderboard.js.map +1 -0
- package/dist/scripts/eval-auto-approval/leaderboard.test.d.ts +2 -0
- package/dist/scripts/eval-auto-approval/leaderboard.test.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/leaderboard.test.js +689 -0
- package/dist/scripts/eval-auto-approval/leaderboard.test.js.map +1 -0
- package/dist/scripts/eval-auto-approval/metrics.d.ts +34 -0
- package/dist/scripts/eval-auto-approval/metrics.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/metrics.js +74 -0
- package/dist/scripts/eval-auto-approval/metrics.js.map +1 -0
- package/dist/scripts/eval-auto-approval/metrics.test.d.ts +2 -0
- package/dist/scripts/eval-auto-approval/metrics.test.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/metrics.test.js +79 -0
- package/dist/scripts/eval-auto-approval/metrics.test.js.map +1 -0
- package/dist/scripts/eval-auto-approval/report.d.ts +5 -0
- package/dist/scripts/eval-auto-approval/report.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/report.js +51 -0
- package/dist/scripts/eval-auto-approval/report.js.map +1 -0
- package/dist/scripts/eval-auto-approval/report.test.d.ts +2 -0
- package/dist/scripts/eval-auto-approval/report.test.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/report.test.js +23 -0
- package/dist/scripts/eval-auto-approval/report.test.js.map +1 -0
- package/dist/scripts/eval-auto-approval/runner-utils.d.ts +41 -0
- package/dist/scripts/eval-auto-approval/runner-utils.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/runner-utils.js +187 -0
- package/dist/scripts/eval-auto-approval/runner-utils.js.map +1 -0
- package/dist/scripts/eval-auto-approval/runner-utils.test.d.ts +2 -0
- package/dist/scripts/eval-auto-approval/runner-utils.test.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/runner-utils.test.js +135 -0
- package/dist/scripts/eval-auto-approval/runner-utils.test.js.map +1 -0
- package/dist/scripts/eval-auto-approval/runner.d.ts +2 -0
- package/dist/scripts/eval-auto-approval/runner.d.ts.map +1 -0
- package/dist/scripts/eval-auto-approval/runner.js +326 -0
- package/dist/scripts/eval-auto-approval/runner.js.map +1 -0
- package/dist/services/agent-stream.d.ts +11 -0
- package/dist/services/agent-stream.d.ts.map +1 -0
- package/dist/services/agent-stream.js +2 -0
- package/dist/services/agent-stream.js.map +1 -0
- package/dist/services/approval-flow-coordinator.d.ts +43 -0
- package/dist/services/approval-flow-coordinator.d.ts.map +1 -0
- package/dist/services/approval-flow-coordinator.js +120 -0
- package/dist/services/approval-flow-coordinator.js.map +1 -0
- package/dist/services/approval-flow-coordinator.test.d.ts +2 -0
- package/dist/services/approval-flow-coordinator.test.d.ts.map +1 -0
- package/dist/services/approval-flow-coordinator.test.js +168 -0
- package/dist/services/approval-flow-coordinator.test.js.map +1 -0
- package/dist/services/approval-rejection-interceptor.d.ts +16 -0
- package/dist/services/approval-rejection-interceptor.d.ts.map +1 -0
- package/dist/services/approval-rejection-interceptor.js +20 -0
- package/dist/services/approval-rejection-interceptor.js.map +1 -0
- package/dist/services/approval-rejection-interceptor.test.d.ts +2 -0
- package/dist/services/approval-rejection-interceptor.test.d.ts.map +1 -0
- package/dist/services/approval-rejection-interceptor.test.js +60 -0
- package/dist/services/approval-rejection-interceptor.test.js.map +1 -0
- package/dist/services/conversation-events.d.ts +4 -2
- package/dist/services/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation-result-builder.d.ts +34 -34
- package/dist/services/conversation-result-builder.d.ts.map +1 -1
- package/dist/services/conversation-result-builder.js +64 -76
- package/dist/services/conversation-result-builder.js.map +1 -1
- package/dist/services/conversation-result-builder.test.js +145 -65
- package/dist/services/conversation-result-builder.test.js.map +1 -1
- package/dist/services/conversation-retry-policy.d.ts +37 -0
- package/dist/services/conversation-retry-policy.d.ts.map +1 -0
- package/dist/services/conversation-retry-policy.js +51 -0
- package/dist/services/conversation-retry-policy.js.map +1 -0
- package/dist/services/conversation-retry-policy.test.d.ts +2 -0
- package/dist/services/conversation-retry-policy.test.d.ts.map +1 -0
- package/dist/services/conversation-retry-policy.test.js +79 -0
- package/dist/services/conversation-retry-policy.test.js.map +1 -0
- package/dist/services/conversation-service.d.ts +2 -1
- package/dist/services/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation-session.auto-approval.test.d.ts +2 -0
- package/dist/services/conversation-session.auto-approval.test.d.ts.map +1 -0
- package/dist/services/conversation-session.auto-approval.test.js +617 -0
- package/dist/services/conversation-session.auto-approval.test.js.map +1 -0
- package/dist/services/conversation-session.d.ts +6 -3
- package/dist/services/conversation-session.d.ts.map +1 -1
- package/dist/services/conversation-session.js +164 -696
- package/dist/services/conversation-session.js.map +1 -1
- package/dist/services/interruption-info.d.ts +13 -0
- package/dist/services/interruption-info.d.ts.map +1 -0
- package/dist/services/interruption-info.js +89 -0
- package/dist/services/interruption-info.js.map +1 -0
- package/dist/services/interruption-info.test.d.ts +2 -0
- package/dist/services/interruption-info.test.d.ts.map +1 -0
- package/dist/services/interruption-info.test.js +84 -0
- package/dist/services/interruption-info.test.js.map +1 -0
- package/dist/services/logging-contract.d.ts +1 -1
- package/dist/services/logging-service.d.ts +6 -2
- package/dist/services/logging-service.d.ts.map +1 -1
- package/dist/services/logging-service.js +48 -91
- package/dist/services/logging-service.js.map +1 -1
- package/dist/services/settings-env.d.ts.map +1 -1
- package/dist/services/settings-env.js +3 -0
- package/dist/services/settings-env.js.map +1 -1
- package/dist/services/settings-schema.d.ts +34 -0
- package/dist/services/settings-schema.d.ts.map +1 -1
- package/dist/services/settings-schema.js +37 -0
- package/dist/services/settings-schema.js.map +1 -1
- package/dist/services/settings-service.d.ts.map +1 -1
- package/dist/services/settings-service.js +12 -166
- package/dist/services/settings-service.js.map +1 -1
- package/dist/services/settings-sources.d.ts +5 -0
- package/dist/services/settings-sources.d.ts.map +1 -0
- package/dist/services/settings-sources.js +92 -0
- package/dist/services/settings-sources.js.map +1 -0
- package/dist/services/settings-sources.test.d.ts +2 -0
- package/dist/services/settings-sources.test.d.ts.map +1 -0
- package/dist/services/settings-sources.test.js +34 -0
- package/dist/services/settings-sources.test.js.map +1 -0
- package/dist/services/shell-auto-approval-evaluator.d.ts +19 -0
- package/dist/services/shell-auto-approval-evaluator.d.ts.map +1 -0
- package/dist/services/shell-auto-approval-evaluator.js +207 -0
- package/dist/services/shell-auto-approval-evaluator.js.map +1 -0
- package/dist/services/shell-auto-approval-evaluator.test.d.ts +2 -0
- package/dist/services/shell-auto-approval-evaluator.test.d.ts.map +1 -0
- package/dist/services/shell-auto-approval-evaluator.test.js +211 -0
- package/dist/services/shell-auto-approval-evaluator.test.js.map +1 -0
- package/dist/services/shell-auto-approval-resolver.d.ts +24 -0
- package/dist/services/shell-auto-approval-resolver.d.ts.map +1 -0
- package/dist/services/shell-auto-approval-resolver.js +59 -0
- package/dist/services/shell-auto-approval-resolver.js.map +1 -0
- package/dist/services/shell-auto-approval-resolver.test.d.ts +2 -0
- package/dist/services/shell-auto-approval-resolver.test.d.ts.map +1 -0
- package/dist/services/shell-auto-approval-resolver.test.js +110 -0
- package/dist/services/shell-auto-approval-resolver.test.js.map +1 -0
- package/dist/services/ssh-service.test.js +2 -2
- package/dist/services/ssh-service.test.js.map +1 -1
- package/dist/services/stream-event-processor.d.ts +18 -23
- package/dist/services/stream-event-processor.d.ts.map +1 -1
- package/dist/services/stream-event-processor.js +186 -325
- package/dist/services/stream-event-processor.js.map +1 -1
- package/dist/services/stream-event-processor.test.js +143 -90
- package/dist/services/stream-event-processor.test.js.map +1 -1
- package/dist/services/terminal-result-collector.d.ts +12 -0
- package/dist/services/terminal-result-collector.d.ts.map +1 -0
- package/dist/services/terminal-result-collector.js +64 -0
- package/dist/services/terminal-result-collector.js.map +1 -0
- package/dist/services/terminal-result-collector.test.d.ts +2 -0
- package/dist/services/terminal-result-collector.test.d.ts.map +1 -0
- package/dist/services/terminal-result-collector.test.js +93 -0
- package/dist/services/terminal-result-collector.test.js.map +1 -0
- package/dist/tools/apply-patch.js +5 -5
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/create-file.js +2 -2
- package/dist/tools/create-file.js.map +1 -1
- package/dist/tools/edit-healing.d.ts.map +1 -1
- package/dist/tools/edit-healing.js +4 -1
- package/dist/tools/edit-healing.js.map +1 -1
- package/dist/tools/edit-healing.test.js +22 -0
- package/dist/tools/edit-healing.test.js.map +1 -1
- package/dist/tools/search-replace.d.ts.map +1 -1
- package/dist/tools/search-replace.js +114 -194
- package/dist/tools/search-replace.js.map +1 -1
- package/dist/tools/search-replace.test.js +38 -0
- package/dist/tools/search-replace.test.js.map +1 -1
- package/dist/tools/shell.js +2 -2
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/shell.test.js +0 -5
- package/dist/tools/shell.test.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/utils/clipboard.d.ts +16 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +55 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/clipboard.test.d.ts +2 -0
- package/dist/utils/clipboard.test.d.ts.map +1 -0
- package/dist/utils/clipboard.test.js +59 -0
- package/dist/utils/clipboard.test.js.map +1 -0
- package/dist/utils/command-safety/constants.d.ts.map +1 -1
- package/dist/utils/command-safety/constants.js +3 -21
- 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 +13 -95
- package/dist/utils/command-safety/find-helpers.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 +2 -4
- package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -1
- package/dist/utils/command-safety/index.d.ts +9 -0
- package/dist/utils/command-safety/index.d.ts.map +1 -1
- package/dist/utils/command-safety/index.js +12 -2
- 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 +7 -6
- package/dist/utils/command-safety/path-analysis.js.map +1 -1
- package/dist/utils/command-safety.find.test.js +56 -39
- package/dist/utils/command-safety.find.test.js.map +1 -1
- package/dist/utils/command-safety.path.test.js +7 -7
- package/dist/utils/command-safety.path.test.js.map +1 -1
- package/dist/utils/command-safety.red-yellow-policy.test.d.ts +2 -0
- package/dist/utils/command-safety.red-yellow-policy.test.d.ts.map +1 -0
- package/dist/utils/command-safety.red-yellow-policy.test.js +36 -0
- package/dist/utils/command-safety.red-yellow-policy.test.js.map +1 -0
- package/dist/utils/conversation-event-handler.d.ts +4 -3
- package/dist/utils/conversation-event-handler.d.ts.map +1 -1
- package/dist/utils/conversation-event-handler.js +15 -5
- package/dist/utils/conversation-event-handler.js.map +1 -1
- package/dist/utils/conversation-event-handler.test.js +24 -0
- package/dist/utils/conversation-event-handler.test.js.map +1 -1
- package/dist/utils/conversation-utils.d.ts +1 -1
- package/dist/utils/execute-shell.d.ts +10 -0
- package/dist/utils/execute-shell.d.ts.map +1 -1
- package/dist/utils/execute-shell.js +3 -3
- package/dist/utils/execute-shell.js.map +1 -1
- package/dist/utils/execute-shell.test.js +19 -3
- package/dist/utils/execute-shell.test.js.map +1 -1
- package/dist/utils/input-parser.d.ts +13 -0
- package/dist/utils/input-parser.d.ts.map +1 -0
- package/dist/utils/input-parser.js +10 -0
- package/dist/utils/input-parser.js.map +1 -0
- package/dist/utils/model-provider-arg.d.ts +5 -0
- package/dist/utils/model-provider-arg.d.ts.map +1 -0
- package/dist/utils/model-provider-arg.js +15 -0
- package/dist/utils/model-provider-arg.js.map +1 -0
- package/dist/utils/model-provider-arg.test.d.ts +2 -0
- package/dist/utils/model-provider-arg.test.d.ts.map +1 -0
- package/dist/utils/model-provider-arg.test.js +21 -0
- package/dist/utils/model-provider-arg.test.js.map +1 -0
- package/dist/utils/model-settings.d.ts +12 -0
- package/dist/utils/model-settings.d.ts.map +1 -0
- package/dist/utils/model-settings.js +35 -0
- package/dist/utils/model-settings.js.map +1 -0
- package/dist/utils/provider-traffic-extractor.d.ts +1 -0
- package/dist/utils/provider-traffic-extractor.d.ts.map +1 -1
- package/dist/utils/provider-traffic-extractor.js +90 -5
- package/dist/utils/provider-traffic-extractor.js.map +1 -1
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +10 -8
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/streaming-session-factory.d.ts +1 -1
- package/dist/utils/streaming-session-factory.d.ts.map +1 -1
- package/dist/utils/streaming-session-factory.js +5 -2
- package/dist/utils/streaming-session-factory.js.map +1 -1
- package/dist/utils/streaming-session-factory.test.js +2 -2
- package/dist/utils/streaming-session-factory.test.js.map +1 -1
- package/dist/utils/streaming-updater.d.ts +2 -1
- package/dist/utils/streaming-updater.d.ts.map +1 -1
- package/dist/utils/streaming-updater.js +2 -2
- package/dist/utils/streaming-updater.js.map +1 -1
- package/dist/utils/throttle.d.ts +6 -1
- package/dist/utils/throttle.d.ts.map +1 -1
- package/dist/utils/throttle.js +11 -6
- package/dist/utils/throttle.js.map +1 -1
- package/dist/utils/viewport.d.ts +6 -0
- package/dist/utils/viewport.d.ts.map +1 -0
- package/dist/utils/viewport.js +20 -0
- package/dist/utils/viewport.js.map +1 -0
- package/dist/utils/viewport.test.d.ts +2 -0
- package/dist/utils/viewport.test.d.ts.map +1 -0
- package/dist/utils/viewport.test.js +43 -0
- package/dist/utils/viewport.test.js.map +1 -0
- package/package.json +5 -4
- package/dist/app.model-command-feedback.test.d.ts +0 -2
- package/dist/app.model-command-feedback.test.d.ts.map +0 -1
- package/dist/app.model-command-feedback.test.js +0 -19
- package/dist/app.model-command-feedback.test.js.map +0 -1
- package/dist/components/MentorMode.test.d.ts +0 -2
- package/dist/components/MentorMode.test.d.ts.map +0 -1
- package/dist/components/MentorMode.test.js.map +0 -1
- package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts +0 -2
- package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +0 -1
- package/dist/components/ModelSelectionMenu.error-tabs.test.js +0 -18
- package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +0 -1
- package/dist/components/StatusBar.test.d.ts +0 -2
- package/dist/components/StatusBar.test.d.ts.map +0 -1
- package/dist/components/StatusBar.test.js +0 -19
- package/dist/components/StatusBar.test.js.map +0 -1
- package/dist/components/TextInput.d.ts +0 -42
- package/dist/components/TextInput.d.ts.map +0 -1
- package/dist/components/TextInput.js +0 -397
- package/dist/components/TextInput.js.map +0 -1
- package/dist/components/TextInput.test.d.ts +0 -2
- package/dist/components/TextInput.test.d.ts.map +0 -1
- package/dist/components/TextInput.test.js +0 -75
- package/dist/components/TextInput.test.js.map +0 -1
- package/dist/debug-schema.d.ts +0 -2
- package/dist/debug-schema.d.ts.map +0 -1
- package/dist/debug-schema.js +0 -22
- package/dist/debug-schema.js.map +0 -1
- package/dist/hooks/use-path-completion.test.d.ts +0 -2
- package/dist/hooks/use-path-completion.test.d.ts.map +0 -1
- package/dist/hooks/use-path-completion.test.js +0 -29
- package/dist/hooks/use-path-completion.test.js.map +0 -1
- package/dist/lib/mentor-client.d.ts +0 -41
- package/dist/lib/mentor-client.d.ts.map +0 -1
- package/dist/lib/mentor-client.js +0 -146
- package/dist/lib/mentor-client.js.map +0 -1
- package/dist/lib/mentor-client.test.d.ts +0 -2
- package/dist/lib/mentor-client.test.d.ts.map +0 -1
- package/dist/lib/mentor-client.test.js +0 -440
- package/dist/lib/mentor-client.test.js.map +0 -1
- package/dist/lib/retry-strategy.d.ts +0 -43
- package/dist/lib/retry-strategy.d.ts.map +0 -1
- package/dist/lib/retry-strategy.js +0 -93
- package/dist/lib/retry-strategy.js.map +0 -1
- package/dist/lib/retry-strategy.test.d.ts +0 -2
- package/dist/lib/retry-strategy.test.d.ts.map +0 -1
- package/dist/lib/retry-strategy.test.js +0 -200
- package/dist/lib/retry-strategy.test.js.map +0 -1
- package/dist/lib/shell.d.ts +0 -7
- package/dist/lib/shell.d.ts.map +0 -1
- package/dist/lib/shell.js +0 -56
- package/dist/lib/shell.js.map +0 -1
- package/dist/prompts/default.md.bak +0 -77
- package/dist/prompts/simple-mentor.md +0 -207
- package/dist/providers/github-copilot/converters.d.ts +0 -45
- package/dist/providers/github-copilot/converters.d.ts.map +0 -1
- package/dist/providers/github-copilot/converters.js +0 -118
- package/dist/providers/github-copilot/converters.js.map +0 -1
- package/dist/providers/github-copilot/converters.test.d.ts +0 -2
- package/dist/providers/github-copilot/converters.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/converters.test.js +0 -162
- package/dist/providers/github-copilot/converters.test.js.map +0 -1
- package/dist/providers/github-copilot/github-copilot.provider.d.ts +0 -2
- package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +0 -1
- package/dist/providers/github-copilot/github-copilot.provider.js +0 -75
- package/dist/providers/github-copilot/github-copilot.provider.js.map +0 -1
- package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +0 -2
- package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/github-copilot.provider.test.js +0 -26
- package/dist/providers/github-copilot/github-copilot.provider.test.js.map +0 -1
- package/dist/providers/github-copilot/index.d.ts +0 -4
- package/dist/providers/github-copilot/index.d.ts.map +0 -1
- package/dist/providers/github-copilot/index.js +0 -4
- package/dist/providers/github-copilot/index.js.map +0 -1
- package/dist/providers/github-copilot/model-direct.d.ts +0 -34
- package/dist/providers/github-copilot/model-direct.d.ts.map +0 -1
- package/dist/providers/github-copilot/model-direct.js +0 -443
- package/dist/providers/github-copilot/model-direct.js.map +0 -1
- package/dist/providers/github-copilot/model.d.ts +0 -24
- package/dist/providers/github-copilot/model.d.ts.map +0 -1
- package/dist/providers/github-copilot/model.delta.test.d.ts +0 -2
- package/dist/providers/github-copilot/model.delta.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/model.delta.test.js +0 -15
- package/dist/providers/github-copilot/model.delta.test.js.map +0 -1
- package/dist/providers/github-copilot/model.js +0 -581
- package/dist/providers/github-copilot/model.js.map +0 -1
- package/dist/providers/github-copilot/provider.d.ts +0 -20
- package/dist/providers/github-copilot/provider.d.ts.map +0 -1
- package/dist/providers/github-copilot/provider.js +0 -30
- package/dist/providers/github-copilot/provider.js.map +0 -1
- package/dist/providers/github-copilot/provider.test.d.ts +0 -2
- package/dist/providers/github-copilot/provider.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/provider.test.js +0 -52
- package/dist/providers/github-copilot/provider.test.js.map +0 -1
- package/dist/providers/github-copilot/utils.d.ts +0 -20
- package/dist/providers/github-copilot/utils.d.ts.map +0 -1
- package/dist/providers/github-copilot/utils.js +0 -142
- package/dist/providers/github-copilot/utils.js.map +0 -1
- package/dist/providers/github-copilot/utils.test.d.ts +0 -2
- package/dist/providers/github-copilot/utils.test.d.ts.map +0 -1
- package/dist/providers/github-copilot/utils.test.js +0 -21
- package/dist/providers/github-copilot/utils.test.js.map +0 -1
- package/dist/providers/openrouter/merge-messages.test.d.ts +0 -2
- package/dist/providers/openrouter/merge-messages.test.d.ts.map +0 -1
- package/dist/providers/openrouter/merge-messages.test.js +0 -83
- package/dist/providers/openrouter/merge-messages.test.js.map +0 -1
- package/dist/providers/openrouter.history.test.d.ts +0 -2
- package/dist/providers/openrouter.history.test.d.ts.map +0 -1
- package/dist/providers/openrouter.history.test.js +0 -533
- package/dist/providers/openrouter.history.test.js.map +0 -1
- package/dist/reproduce_issue.test.d.ts +0 -2
- package/dist/reproduce_issue.test.d.ts.map +0 -1
- package/dist/reproduce_issue.test.js +0 -31
- package/dist/reproduce_issue.test.js.map +0 -1
- package/dist/safety-checker.js +0 -57
- package/dist/services/conversation-service.test.js +0 -190
- package/dist/services/conversation-session.usage.test.d.ts +0 -2
- package/dist/services/conversation-session.usage.test.d.ts.map +0 -1
- package/dist/services/conversation-session.usage.test.js +0 -59
- package/dist/services/conversation-session.usage.test.js.map +0 -1
- package/dist/test-search-tool.d.ts +0 -2
- package/dist/test-search-tool.d.ts.map +0 -1
- package/dist/test-search-tool.js +0 -36
- package/dist/test-search-tool.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -10
- package/dist/tools/bash.d.ts.map +0 -1
- package/dist/tools/bash.js +0 -55
- package/dist/tools/bash.js.map +0 -1
- package/dist/types/messages.d.ts +0 -29
- package/dist/types/messages.d.ts.map +0 -1
- package/dist/types/messages.js +0 -2
- package/dist/types/messages.js.map +0 -1
- package/dist/utils/command-safety.d.ts +0 -21
- package/dist/utils/command-safety.d.ts.map +0 -1
- package/dist/utils/command-safety.js +0 -702
- package/dist/utils/command-safety.js.map +0 -1
- package/dist/utils/extract-command-messages.repro.test.d.ts +0 -2
- package/dist/utils/extract-command-messages.repro.test.d.ts.map +0 -1
- package/dist/utils/extract-command-messages.repro.test.js +0 -31
- package/dist/utils/extract-command-messages.repro.test.js.map +0 -1
- package/dist/utils/extract-command-messages.test.js +0 -57
- package/dist/utils/message-utils.d.ts +0 -17
- package/dist/utils/message-utils.d.ts.map +0 -1
- package/dist/utils/message-utils.js +0 -52
- package/dist/utils/message-utils.js.map +0 -1
- package/dist/utils/message-utils.test.d.ts +0 -2
- package/dist/utils/message-utils.test.d.ts.map +0 -1
- package/dist/utils/message-utils.test.js +0 -48
- package/dist/utils/message-utils.test.js.map +0 -1
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { Agent, run, tool as createTool, webSearchTool, applyPatchTool } from '@openai/agents';
|
|
2
|
-
import { APIConnectionError, APIConnectionTimeoutError, InternalServerError, RateLimitError } from 'openai';
|
|
3
|
-
import { OpenRouterError } from '../providers/openrouter.js';
|
|
4
|
-
import { OpenAICompatibleError } from '../providers/openai-compatible/api.js';
|
|
5
2
|
import { getProvider } from '../providers/index.js';
|
|
6
3
|
import { randomUUID } from 'node:crypto';
|
|
7
4
|
import { getAgentDefinition, getEnvInfo, getAgentsInstructions } from '../agent.js';
|
|
@@ -10,6 +7,80 @@ import { createEditorImpl } from './editor-impl.js';
|
|
|
10
7
|
import { ConversationStore } from '../services/conversation-store.js';
|
|
11
8
|
import { trimToolOutput } from '../utils/trim-tool-output.js';
|
|
12
9
|
import { toOpenAIStrictToolSchema } from './openai-strict-tool-schema.js';
|
|
10
|
+
import { executeWithRetry } from './retry-executor.js';
|
|
11
|
+
import { shouldUseNativePatchTool, shouldUseStrictToolSchema } from './tool-selection-policy.js';
|
|
12
|
+
class MentorSession {
|
|
13
|
+
#provider = null;
|
|
14
|
+
#runner = null;
|
|
15
|
+
#agent = null;
|
|
16
|
+
#store = null;
|
|
17
|
+
#previousResponseId = null;
|
|
18
|
+
get provider() {
|
|
19
|
+
return this.#provider;
|
|
20
|
+
}
|
|
21
|
+
get runner() {
|
|
22
|
+
return this.#runner;
|
|
23
|
+
}
|
|
24
|
+
get agent() {
|
|
25
|
+
return this.#agent;
|
|
26
|
+
}
|
|
27
|
+
get previousResponseId() {
|
|
28
|
+
return this.#previousResponseId;
|
|
29
|
+
}
|
|
30
|
+
reset() {
|
|
31
|
+
if (this.#store) {
|
|
32
|
+
this.#store.clear();
|
|
33
|
+
}
|
|
34
|
+
this.#previousResponseId = null;
|
|
35
|
+
this.#store = null;
|
|
36
|
+
this.#runner = null;
|
|
37
|
+
this.#provider = null;
|
|
38
|
+
this.#agent = null;
|
|
39
|
+
}
|
|
40
|
+
switchProvider(provider) {
|
|
41
|
+
if (this.#provider !== provider) {
|
|
42
|
+
this.#agent = null;
|
|
43
|
+
this.#store = null;
|
|
44
|
+
this.#previousResponseId = null;
|
|
45
|
+
this.#runner = null;
|
|
46
|
+
this.#provider = provider;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
ensureRunner(provider, createRunner) {
|
|
50
|
+
if (!this.#runner && provider !== 'openai') {
|
|
51
|
+
this.#runner = createRunner(provider);
|
|
52
|
+
}
|
|
53
|
+
return this.#runner;
|
|
54
|
+
}
|
|
55
|
+
ensureAgent(createAgent) {
|
|
56
|
+
if (!this.#agent) {
|
|
57
|
+
this.#agent = createAgent();
|
|
58
|
+
this.#store = new ConversationStore();
|
|
59
|
+
}
|
|
60
|
+
return this.#agent;
|
|
61
|
+
}
|
|
62
|
+
addUserMessage(message) {
|
|
63
|
+
this.#store.addUserMessage(message);
|
|
64
|
+
}
|
|
65
|
+
getInput(question, supportsConversationChaining) {
|
|
66
|
+
return supportsConversationChaining ? question : this.#store.getHistory();
|
|
67
|
+
}
|
|
68
|
+
getRunOptions(supportsConversationChaining) {
|
|
69
|
+
return {
|
|
70
|
+
stream: false,
|
|
71
|
+
maxTurns: 1,
|
|
72
|
+
...(supportsConversationChaining && this.#previousResponseId
|
|
73
|
+
? { previousResponseId: this.#previousResponseId }
|
|
74
|
+
: {}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
updateFromResult(result) {
|
|
78
|
+
this.#store.updateFromResult(result);
|
|
79
|
+
if (result.responseId) {
|
|
80
|
+
this.#previousResponseId = result.responseId;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
13
84
|
/**
|
|
14
85
|
* Minimal adapter that isolates usage of @openai/agents.
|
|
15
86
|
* Swap this module to change the underlying agent provider without touching the UI.
|
|
@@ -21,8 +92,6 @@ export class OpenAIAgentClient {
|
|
|
21
92
|
#reasoningEffort;
|
|
22
93
|
#temperature;
|
|
23
94
|
#provider;
|
|
24
|
-
#mentorProvider = null;
|
|
25
|
-
#mentorRunner = null;
|
|
26
95
|
#maxTurns;
|
|
27
96
|
#retryAttempts;
|
|
28
97
|
#currentAbortController = null;
|
|
@@ -34,23 +103,15 @@ export class OpenAIAgentClient {
|
|
|
34
103
|
#settings;
|
|
35
104
|
#executionContext;
|
|
36
105
|
#editor;
|
|
37
|
-
#
|
|
38
|
-
#mentorStore = null;
|
|
39
|
-
#mentorPreviousResponseId = null;
|
|
106
|
+
#mentorSession;
|
|
40
107
|
#resetMentorState() {
|
|
41
|
-
|
|
42
|
-
this.#mentorStore.clear();
|
|
43
|
-
}
|
|
44
|
-
this.#mentorPreviousResponseId = null;
|
|
45
|
-
this.#mentorStore = null;
|
|
46
|
-
this.#mentorRunner = null;
|
|
47
|
-
this.#mentorProvider = null;
|
|
48
|
-
this.#mentorAgent = null;
|
|
108
|
+
this.#mentorSession.reset();
|
|
49
109
|
}
|
|
50
110
|
constructor({ model, reasoningEffort, maxTurns, retryAttempts, deps, }) {
|
|
51
111
|
this.#logger = deps.logger;
|
|
52
112
|
this.#settings = deps.settings;
|
|
53
113
|
this.#executionContext = deps.executionContext;
|
|
114
|
+
this.#mentorSession = new MentorSession();
|
|
54
115
|
this.#editor = createEditorImpl({
|
|
55
116
|
loggingService: this.#logger,
|
|
56
117
|
settingsService: this.#settings,
|
|
@@ -63,7 +124,7 @@ export class OpenAIAgentClient {
|
|
|
63
124
|
this.#retryAttempts = retryAttempts ?? 2;
|
|
64
125
|
this.#agent = this.#createAgent({ model, reasoningEffort });
|
|
65
126
|
this.#runner = this.#createRunner(this.#provider);
|
|
66
|
-
this.#logger.
|
|
127
|
+
this.#logger.debug('OpenAI Agent Client initialized', {
|
|
67
128
|
model: model || this.#settings.get('agent.model'),
|
|
68
129
|
reasoningEffort: reasoningEffort ?? 'default',
|
|
69
130
|
temperature: this.#temperature,
|
|
@@ -137,6 +198,8 @@ export class OpenAIAgentClient {
|
|
|
137
198
|
return {
|
|
138
199
|
supportsConversationChaining: providerDef?.capabilities?.supportsConversationChaining ?? false,
|
|
139
200
|
supportsTracingControl: providerDef?.capabilities?.supportsTracingControl ?? false,
|
|
201
|
+
usesStrictToolSchema: providerDef?.capabilities?.usesStrictToolSchema,
|
|
202
|
+
nativePatchModelPrefixes: providerDef?.capabilities?.nativePatchModelPrefixes,
|
|
140
203
|
};
|
|
141
204
|
}
|
|
142
205
|
#createRunner(providerId) {
|
|
@@ -187,7 +250,7 @@ export class OpenAIAgentClient {
|
|
|
187
250
|
providerDef.clearConversations();
|
|
188
251
|
}
|
|
189
252
|
this.#refreshAgent();
|
|
190
|
-
this.#logger.
|
|
253
|
+
this.#logger.debug('Conversation and agent refreshed');
|
|
191
254
|
}
|
|
192
255
|
async startStream(userInput, { previousResponseId } = {}) {
|
|
193
256
|
// Abort any previous operation
|
|
@@ -203,7 +266,7 @@ export class OpenAIAgentClient {
|
|
|
203
266
|
this.#logger.setCorrelationId(this.#currentCorrelationId);
|
|
204
267
|
this.#currentAbortController = new AbortController();
|
|
205
268
|
const signal = this.#currentAbortController.signal;
|
|
206
|
-
this.#logger.
|
|
269
|
+
this.#logger.debug('Agent stream started', {
|
|
207
270
|
eventType: 'provider.request.started',
|
|
208
271
|
category: 'provider',
|
|
209
272
|
phase: 'request_start',
|
|
@@ -213,6 +276,7 @@ export class OpenAIAgentClient {
|
|
|
213
276
|
inputType: Array.isArray(userInput) ? 'array' : typeof userInput,
|
|
214
277
|
inputLength: typeof userInput === 'string' ? userInput.length : undefined,
|
|
215
278
|
inputItems: Array.isArray(userInput) ? userInput.length : undefined,
|
|
279
|
+
messages: Array.isArray(userInput) ? userInput : undefined,
|
|
216
280
|
hasPreviousResponseId: !!previousResponseId,
|
|
217
281
|
});
|
|
218
282
|
try {
|
|
@@ -300,82 +364,29 @@ export class OpenAIAgentClient {
|
|
|
300
364
|
return this.#runAgentWithProvider(this.#provider, this.#runner, agent, input, options);
|
|
301
365
|
}
|
|
302
366
|
async #executeWithRetry(operation, retries = this.#retryAttempts) {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
error instanceof RateLimitError;
|
|
313
|
-
// Check if it's an OpenRouter error with retryable status
|
|
314
|
-
const isOpenRouterRetryable = error instanceof OpenRouterError && (error.status === 429 || error.status >= 500);
|
|
315
|
-
const isOpenAICompatibleRetryable = error instanceof OpenAICompatibleError && (error.status === 429 || error.status >= 500);
|
|
316
|
-
const isRetryable = retries > 0 && (isTransientError || isOpenRouterRetryable || isOpenAICompatibleRetryable);
|
|
317
|
-
if (isRetryable) {
|
|
318
|
-
const attemptIndex = this.#retryAttempts - retries;
|
|
319
|
-
let delay;
|
|
320
|
-
// Check for Retry-After header (both OpenAI and OpenRouter)
|
|
321
|
-
const retryAfterHeader = (error instanceof RateLimitError && error.headers?.['retry-after']) ||
|
|
322
|
-
(error instanceof OpenRouterError && error.headers['retry-after']) ||
|
|
323
|
-
(error instanceof OpenAICompatibleError && error.headers['retry-after']);
|
|
324
|
-
if (retryAfterHeader) {
|
|
325
|
-
// Respect the Retry-After header
|
|
326
|
-
delay = parseInt(retryAfterHeader, 10) * 1000;
|
|
327
|
-
}
|
|
328
|
-
else {
|
|
329
|
-
// Exponential backoff with full jitter
|
|
330
|
-
// Base delay: 500-1000ms
|
|
331
|
-
// Multiplier: 2^attemptIndex
|
|
332
|
-
// Max cap: 30 seconds
|
|
333
|
-
const baseDelay = 500 + Math.random() * 500; // 500-1000ms
|
|
334
|
-
const exponentialDelay = baseDelay * Math.pow(2, attemptIndex);
|
|
335
|
-
const maxDelay = 30000; // 30 seconds
|
|
336
|
-
const cappedDelay = Math.min(exponentialDelay, maxDelay);
|
|
337
|
-
// Apply full jitter: random value between 0 and cappedDelay
|
|
338
|
-
delay = Math.random() * cappedDelay;
|
|
339
|
-
}
|
|
340
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
341
|
-
this.#logger.warn('Agent operation retry', {
|
|
342
|
-
eventType: 'retry.upstream',
|
|
343
|
-
category: 'retry',
|
|
344
|
-
phase: 'retry',
|
|
345
|
-
traceId: this.#currentCorrelationId,
|
|
346
|
-
provider: this.#provider,
|
|
347
|
-
model: this.#model,
|
|
348
|
-
retryType: 'upstream',
|
|
349
|
-
retryAttempt: attemptIndex + 1,
|
|
350
|
-
errorType: error.constructor.name,
|
|
351
|
-
retriesRemaining: retries - 1,
|
|
352
|
-
delayMs: Math.round(delay),
|
|
353
|
-
attemptIndex,
|
|
354
|
-
errorMessage: error instanceof Error ? error.message : String(error),
|
|
355
|
-
...(error instanceof OpenRouterError && {
|
|
356
|
-
status: error.status,
|
|
357
|
-
}),
|
|
358
|
-
...(error instanceof OpenAICompatibleError && {
|
|
359
|
-
status: error.status,
|
|
360
|
-
}),
|
|
361
|
-
});
|
|
362
|
-
this.#retryCallback?.();
|
|
363
|
-
return this.#executeWithRetry(operation, retries - 1);
|
|
364
|
-
}
|
|
365
|
-
throw error;
|
|
366
|
-
}
|
|
367
|
+
return executeWithRetry({
|
|
368
|
+
operation,
|
|
369
|
+
retryAttempts: retries,
|
|
370
|
+
provider: this.#provider,
|
|
371
|
+
model: this.#model,
|
|
372
|
+
traceId: this.#currentCorrelationId,
|
|
373
|
+
logger: this.#logger,
|
|
374
|
+
onRetry: this.#retryCallback ?? undefined,
|
|
375
|
+
});
|
|
367
376
|
}
|
|
368
377
|
async chat(message, options = {}) {
|
|
378
|
+
const tempProvider = options.provider || this.#provider;
|
|
369
379
|
this.#logger.debug('Agent chat request', {
|
|
370
380
|
messageLength: message.length,
|
|
371
381
|
model: options.model || this.#model,
|
|
382
|
+
provider: tempProvider,
|
|
372
383
|
});
|
|
373
384
|
try {
|
|
374
385
|
// Create a temporary agent for this specific chat request if params differ
|
|
375
386
|
let agentForChat = this.#agent;
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
387
|
+
const tempModel = options.model || this.#model;
|
|
388
|
+
const tempEffort = options.reasoningEffort || this.#reasoningEffort;
|
|
389
|
+
if (options.model || options.reasoningEffort || options.instructions || options.provider) {
|
|
379
390
|
const modelSettings = {};
|
|
380
391
|
if (tempEffort && tempEffort !== 'default') {
|
|
381
392
|
modelSettings.reasoning = {
|
|
@@ -384,49 +395,24 @@ export class OpenAIAgentClient {
|
|
|
384
395
|
};
|
|
385
396
|
}
|
|
386
397
|
// For simple chat, we generally don't need tools, but we keep the system instructions
|
|
387
|
-
// Actually, for mentor mode, we might want a simpler agent without tools
|
|
388
398
|
agentForChat = new Agent({
|
|
389
|
-
name: '
|
|
399
|
+
name: 'Chat',
|
|
390
400
|
model: tempModel,
|
|
391
401
|
...(Object.keys(modelSettings).length > 0 ? { modelSettings } : {}),
|
|
392
|
-
instructions: options.instructions || 'You are a helpful
|
|
402
|
+
instructions: options.instructions || 'You are a helpful assistant.',
|
|
393
403
|
});
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
throw new Error(`Provider ${this.#provider} not found`);
|
|
400
|
-
if (providerDef.createRunner) {
|
|
401
|
-
// We can't easily reuse the main runner if it's bound to the main agent
|
|
402
|
-
// But creating a new runner for every chat might be expensive?
|
|
403
|
-
// For now, let's assume we can just use `run` if no tools are needed,
|
|
404
|
-
// but some providers NEED a runner.
|
|
405
|
-
// Actually, most providers' runners are stateless or lightweight wrappers.
|
|
406
|
-
}
|
|
407
|
-
}
|
|
404
|
+
}
|
|
405
|
+
// If provider is different from main provider, we need a separate runner
|
|
406
|
+
let runnerForChat = this.#runner;
|
|
407
|
+
if (tempProvider !== this.#provider) {
|
|
408
|
+
runnerForChat = this.#createRunner(tempProvider);
|
|
408
409
|
}
|
|
409
410
|
// We use a simplified run flow for chat
|
|
410
|
-
const result = await this.#
|
|
411
|
+
const result = await this.#runAgentWithProvider(tempProvider, runnerForChat, agentForChat, message, {
|
|
411
412
|
stream: false,
|
|
412
413
|
maxTurns: 1, // Chat is usually single turn
|
|
413
414
|
});
|
|
414
|
-
|
|
415
|
-
return result.finalOutput;
|
|
416
|
-
}
|
|
417
|
-
// Fallback: extract from messages if finalOutput is missing
|
|
418
|
-
if (result.messages && Array.isArray(result.messages)) {
|
|
419
|
-
const lastMessage = result.messages[result.messages.length - 1];
|
|
420
|
-
if (lastMessage && lastMessage.content) {
|
|
421
|
-
if (typeof lastMessage.content === 'string') {
|
|
422
|
-
return lastMessage.content;
|
|
423
|
-
}
|
|
424
|
-
if (Array.isArray(lastMessage.content)) {
|
|
425
|
-
return lastMessage.content.map((part) => part.text || part.value || '').join('');
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
return '';
|
|
415
|
+
return this.#extractResponse(result);
|
|
430
416
|
}
|
|
431
417
|
catch (error) {
|
|
432
418
|
this.#logger.error('Agent chat failed', {
|
|
@@ -435,6 +421,24 @@ export class OpenAIAgentClient {
|
|
|
435
421
|
throw error; // Propagate error
|
|
436
422
|
}
|
|
437
423
|
}
|
|
424
|
+
#extractResponse(result) {
|
|
425
|
+
if (result.finalOutput) {
|
|
426
|
+
return result.finalOutput;
|
|
427
|
+
}
|
|
428
|
+
// Fallback: extract from messages if finalOutput is missing
|
|
429
|
+
if (result.messages && Array.isArray(result.messages)) {
|
|
430
|
+
const lastMessage = result.messages[result.messages.length - 1];
|
|
431
|
+
if (lastMessage && lastMessage.content) {
|
|
432
|
+
if (typeof lastMessage.content === 'string') {
|
|
433
|
+
return lastMessage.content;
|
|
434
|
+
}
|
|
435
|
+
if (Array.isArray(lastMessage.content)) {
|
|
436
|
+
return lastMessage.content.map((part) => part.text || part.value || '').join('');
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
return '';
|
|
441
|
+
}
|
|
438
442
|
#createMentor = async (question) => {
|
|
439
443
|
const mentorModel = this.#settings.get('agent.mentorModel');
|
|
440
444
|
if (!mentorModel) {
|
|
@@ -459,18 +463,9 @@ export class OpenAIAgentClient {
|
|
|
459
463
|
const agentsInstructions = this.#executionContext?.isRemote() ? '' : getAgentsInstructions(cwd);
|
|
460
464
|
const instructions = `${baseInstructions}\n\nEnvironment: ${envInfo}${agentsInstructions}`;
|
|
461
465
|
// If mentor provider changed, reset mentor state to avoid mixing stores/prev ids across providers
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
this.#mentorPreviousResponseId = null;
|
|
466
|
-
this.#mentorRunner = null;
|
|
467
|
-
this.#mentorProvider = mentorProvider;
|
|
468
|
-
}
|
|
469
|
-
// Initialize mentor runner/agent and conversation store if needed
|
|
470
|
-
if (!this.#mentorRunner && mentorProvider !== 'openai') {
|
|
471
|
-
this.#mentorRunner = this.#createRunner(mentorProvider);
|
|
472
|
-
}
|
|
473
|
-
if (!this.#mentorAgent) {
|
|
466
|
+
this.#mentorSession.switchProvider(mentorProvider);
|
|
467
|
+
const mentorRunner = this.#mentorSession.ensureRunner(mentorProvider, (providerId) => this.#createRunner(providerId));
|
|
468
|
+
const mentorAgent = this.#mentorSession.ensureAgent(() => {
|
|
474
469
|
const reasoningEffort = this.#settings.get('agent.mentorReasoningEffort');
|
|
475
470
|
const modelSettings = {};
|
|
476
471
|
if (reasoningEffort && reasoningEffort !== 'default') {
|
|
@@ -479,52 +474,25 @@ export class OpenAIAgentClient {
|
|
|
479
474
|
summary: 'auto',
|
|
480
475
|
};
|
|
481
476
|
}
|
|
482
|
-
|
|
477
|
+
return new Agent({
|
|
483
478
|
name: 'Mentor',
|
|
484
479
|
model: mentorModel,
|
|
485
480
|
...(Object.keys(modelSettings).length > 0 ? { modelSettings } : {}),
|
|
486
481
|
instructions,
|
|
487
482
|
});
|
|
488
|
-
|
|
489
|
-
}
|
|
483
|
+
});
|
|
490
484
|
try {
|
|
491
485
|
// Add user message to conversation history
|
|
492
|
-
this.#
|
|
486
|
+
this.#mentorSession.addUserMessage(question);
|
|
493
487
|
// Determine input based on provider
|
|
494
488
|
// OpenAI uses previousResponseId for server-side history
|
|
495
489
|
// Others need full conversation history from store
|
|
496
490
|
const { supportsConversationChaining } = this.#getProviderCapabilities(mentorProvider);
|
|
497
|
-
const input =
|
|
498
|
-
const result = await this.#runAgentWithProvider(mentorProvider,
|
|
499
|
-
stream: false,
|
|
500
|
-
maxTurns: 1,
|
|
501
|
-
...(supportsConversationChaining && this.#mentorPreviousResponseId
|
|
502
|
-
? { previousResponseId: this.#mentorPreviousResponseId }
|
|
503
|
-
: {}),
|
|
504
|
-
});
|
|
491
|
+
const input = this.#mentorSession.getInput(question, supportsConversationChaining);
|
|
492
|
+
const result = await this.#runAgentWithProvider(mentorProvider, mentorRunner, mentorAgent, input, this.#mentorSession.getRunOptions(supportsConversationChaining));
|
|
505
493
|
// Update conversation store with result
|
|
506
|
-
this.#
|
|
507
|
-
|
|
508
|
-
if (result.responseId) {
|
|
509
|
-
this.#mentorPreviousResponseId = result.responseId;
|
|
510
|
-
}
|
|
511
|
-
// Extract response
|
|
512
|
-
let response = '';
|
|
513
|
-
if (result.finalOutput) {
|
|
514
|
-
response = result.finalOutput;
|
|
515
|
-
}
|
|
516
|
-
else if (result.messages && Array.isArray(result.messages)) {
|
|
517
|
-
const lastMessage = result.messages[result.messages.length - 1];
|
|
518
|
-
if (lastMessage && lastMessage.content) {
|
|
519
|
-
if (typeof lastMessage.content === 'string') {
|
|
520
|
-
response = lastMessage.content;
|
|
521
|
-
}
|
|
522
|
-
else if (Array.isArray(lastMessage.content)) {
|
|
523
|
-
response = lastMessage.content.map((part) => part.text || part.value || '').join('');
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
return response;
|
|
494
|
+
this.#mentorSession.updateFromResult(result);
|
|
495
|
+
return this.#extractResponse(result);
|
|
528
496
|
}
|
|
529
497
|
catch (error) {
|
|
530
498
|
this.#logger.error('Mentor consultation failed', {
|
|
@@ -544,8 +512,47 @@ export class OpenAIAgentClient {
|
|
|
544
512
|
// @ts-ignore - Definition update coming next
|
|
545
513
|
askMentor: this.#createMentor,
|
|
546
514
|
}, resolvedModel);
|
|
547
|
-
|
|
548
|
-
const
|
|
515
|
+
const providerCapabilities = this.#getProviderCapabilities(this.#provider);
|
|
516
|
+
const shouldUseNativePatchToolForModel = shouldUseNativePatchTool({
|
|
517
|
+
providerId: this.#provider,
|
|
518
|
+
model: resolvedModel,
|
|
519
|
+
capabilities: providerCapabilities,
|
|
520
|
+
});
|
|
521
|
+
const tools = this.#buildAgentTools({
|
|
522
|
+
toolDefinitions,
|
|
523
|
+
resolvedModel,
|
|
524
|
+
reasoningEffort,
|
|
525
|
+
shouldUseNativePatchTool: shouldUseNativePatchToolForModel,
|
|
526
|
+
});
|
|
527
|
+
const modelSettings = this.#buildModelSettings({
|
|
528
|
+
reasoningEffort,
|
|
529
|
+
resolvedTemperature,
|
|
530
|
+
});
|
|
531
|
+
const agent = new Agent({
|
|
532
|
+
name,
|
|
533
|
+
model: resolvedModel,
|
|
534
|
+
...(Object.keys(modelSettings).length > 0 ? { modelSettings } : {}),
|
|
535
|
+
instructions,
|
|
536
|
+
tools,
|
|
537
|
+
});
|
|
538
|
+
// Only add defaultRunOptions if an explicit effort is set (not
|
|
539
|
+
// 'default'). This ensures the API receives the param only when
|
|
540
|
+
// intended.
|
|
541
|
+
if (reasoningEffort && reasoningEffort !== 'default') {
|
|
542
|
+
agent.defaultRunOptions = {
|
|
543
|
+
...(agent.defaultRunOptions || {}),
|
|
544
|
+
// Pass through to underlying client for models that support it
|
|
545
|
+
reasoning: { effort: reasoningEffort },
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
return agent;
|
|
549
|
+
}
|
|
550
|
+
#buildAgentTools({ toolDefinitions, resolvedModel, reasoningEffort, shouldUseNativePatchTool, }) {
|
|
551
|
+
const providerCapabilities = this.#getProviderCapabilities(this.#provider);
|
|
552
|
+
const useStrictToolSchema = shouldUseStrictToolSchema({
|
|
553
|
+
providerId: this.#provider,
|
|
554
|
+
capabilities: providerCapabilities,
|
|
555
|
+
});
|
|
549
556
|
const tools = toolDefinitions
|
|
550
557
|
.filter((definition) => {
|
|
551
558
|
// Exclude custom apply_patch if we're using native one
|
|
@@ -557,7 +564,7 @@ export class OpenAIAgentClient {
|
|
|
557
564
|
.map((definition) => wrapToolInvoke(createTool({
|
|
558
565
|
name: definition.name,
|
|
559
566
|
description: definition.description,
|
|
560
|
-
parameters:
|
|
567
|
+
parameters: useStrictToolSchema ? toOpenAIStrictToolSchema(definition.parameters) : definition.parameters,
|
|
561
568
|
needsApproval: async (context, params) => definition.needsApproval(params, context),
|
|
562
569
|
execute: async (params, _context, details) => {
|
|
563
570
|
const maxOutputLengthValue = this.#settings.get('shell.maxOutputChars');
|
|
@@ -566,7 +573,7 @@ export class OpenAIAgentClient {
|
|
|
566
573
|
// Check if this execution should be intercepted
|
|
567
574
|
const rejectionMessage = await this.#checkToolInterceptors(definition.name, params, toolCallId);
|
|
568
575
|
if (rejectionMessage) {
|
|
569
|
-
this.#logger.
|
|
576
|
+
this.#logger.debug('Tool execution intercepted', {
|
|
570
577
|
tool: definition.name,
|
|
571
578
|
params: JSON.stringify(params).substring(0, 100),
|
|
572
579
|
});
|
|
@@ -609,7 +616,7 @@ export class OpenAIAgentClient {
|
|
|
609
616
|
}
|
|
610
617
|
const rejectionMessage = await this.#checkToolInterceptors('apply_patch', params, toolCallId);
|
|
611
618
|
if (rejectionMessage) {
|
|
612
|
-
this.#logger.
|
|
619
|
+
this.#logger.debug('Native tool execution intercepted', {
|
|
613
620
|
tool: 'apply_patch',
|
|
614
621
|
toolCallId,
|
|
615
622
|
params: JSON.stringify(params).substring(0, 100),
|
|
@@ -631,13 +638,13 @@ export class OpenAIAgentClient {
|
|
|
631
638
|
};
|
|
632
639
|
}
|
|
633
640
|
tools.push(nativePatchTool);
|
|
634
|
-
this.#logger.
|
|
641
|
+
this.#logger.debug('Using native applyPatchTool from SDK', {
|
|
635
642
|
model: resolvedModel,
|
|
636
643
|
provider: this.#provider,
|
|
637
644
|
});
|
|
638
645
|
}
|
|
639
646
|
else {
|
|
640
|
-
this.#logger.
|
|
647
|
+
this.#logger.debug('Using custom apply_patch implementation', {
|
|
641
648
|
model: resolvedModel,
|
|
642
649
|
provider: this.#provider,
|
|
643
650
|
});
|
|
@@ -652,6 +659,9 @@ export class OpenAIAgentClient {
|
|
|
652
659
|
// handled differently, likely through approval mechanisms.
|
|
653
660
|
tools.push(webTool);
|
|
654
661
|
}
|
|
662
|
+
return tools;
|
|
663
|
+
}
|
|
664
|
+
#buildModelSettings({ reasoningEffort, resolvedTemperature, }) {
|
|
655
665
|
// Build modelSettings only if an explicit effort value (other than
|
|
656
666
|
// 'default') was provided. 'default' means we should not pass the
|
|
657
667
|
// effort param and allow the underlying API to choose the default.
|
|
@@ -677,24 +687,10 @@ export class OpenAIAgentClient {
|
|
|
677
687
|
service_tier: 'flex',
|
|
678
688
|
};
|
|
679
689
|
}
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
instructions,
|
|
685
|
-
tools,
|
|
686
|
-
});
|
|
687
|
-
// Only add defaultRunOptions if an explicit effort is set (not
|
|
688
|
-
// 'default'). This ensures the API receives the param only when
|
|
689
|
-
// intended.
|
|
690
|
-
if (reasoningEffort && reasoningEffort !== 'default') {
|
|
691
|
-
agent.defaultRunOptions = {
|
|
692
|
-
...(agent.defaultRunOptions || {}),
|
|
693
|
-
// Pass through to underlying client for models that support it
|
|
694
|
-
reasoning: { effort: reasoningEffort },
|
|
695
|
-
};
|
|
696
|
-
}
|
|
697
|
-
return agent;
|
|
690
|
+
return modelSettings;
|
|
691
|
+
}
|
|
692
|
+
getSettings() {
|
|
693
|
+
return this.#settings;
|
|
698
694
|
}
|
|
699
695
|
}
|
|
700
696
|
//# sourceMappingURL=openai-agent-client.js.map
|