@qduc/term2 0.1.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/LICENSE +21 -0
- package/dist/agent.d.ts +19 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +143 -0
- package/dist/agent.js.map +1 -0
- package/dist/app.d.ts +22 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +403 -0
- package/dist/app.js.map +1 -0
- package/dist/app.model-command-feedback.test.d.ts +2 -0
- package/dist/app.model-command-feedback.test.d.ts.map +1 -0
- package/dist/app.model-command-feedback.test.js +19 -0
- package/dist/app.model-command-feedback.test.js.map +1 -0
- package/dist/app.parseInput.test.d.ts +2 -0
- package/dist/app.parseInput.test.d.ts.map +1 -0
- package/dist/app.parseInput.test.js +97 -0
- package/dist/app.parseInput.test.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +241 -0
- package/dist/cli.js.map +1 -0
- package/dist/components/ApprovalPrompt.d.ts +10 -0
- package/dist/components/ApprovalPrompt.d.ts.map +1 -0
- package/dist/components/ApprovalPrompt.js +163 -0
- package/dist/components/ApprovalPrompt.js.map +1 -0
- package/dist/components/Banner.d.ts +9 -0
- package/dist/components/Banner.d.ts.map +1 -0
- package/dist/components/Banner.js +86 -0
- package/dist/components/Banner.js.map +1 -0
- package/dist/components/BottomArea.d.ts +33 -0
- package/dist/components/BottomArea.d.ts.map +1 -0
- package/dist/components/BottomArea.js +31 -0
- package/dist/components/BottomArea.js.map +1 -0
- package/dist/components/BottomArea.test.d.ts +2 -0
- package/dist/components/BottomArea.test.d.ts.map +1 -0
- package/dist/components/BottomArea.test.js +73 -0
- package/dist/components/BottomArea.test.js.map +1 -0
- package/dist/components/ChatMessage.d.ts +7 -0
- package/dist/components/ChatMessage.d.ts.map +1 -0
- package/dist/components/ChatMessage.js +10 -0
- package/dist/components/ChatMessage.js.map +1 -0
- package/dist/components/CommandMessage.d.ts +15 -0
- package/dist/components/CommandMessage.d.ts.map +1 -0
- package/dist/components/CommandMessage.js +188 -0
- package/dist/components/CommandMessage.js.map +1 -0
- package/dist/components/CommandMessage.test.d.ts +2 -0
- package/dist/components/CommandMessage.test.d.ts.map +1 -0
- package/dist/components/CommandMessage.test.js +35 -0
- package/dist/components/CommandMessage.test.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +27 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +77 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/ErrorBoundary.test.d.ts +2 -0
- package/dist/components/ErrorBoundary.test.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.test.js +32 -0
- package/dist/components/ErrorBoundary.test.js.map +1 -0
- package/dist/components/Input/PopupManager.d.ts +42 -0
- package/dist/components/Input/PopupManager.d.ts.map +1 -0
- package/dist/components/Input/PopupManager.js +13 -0
- package/dist/components/Input/PopupManager.js.map +1 -0
- package/dist/components/InputBox.d.ts +18 -0
- package/dist/components/InputBox.d.ts.map +1 -0
- package/dist/components/InputBox.js +384 -0
- package/dist/components/InputBox.js.map +1 -0
- package/dist/components/InputBox.menu-logic.test.d.ts +2 -0
- package/dist/components/InputBox.menu-logic.test.d.ts.map +1 -0
- package/dist/components/InputBox.menu-logic.test.js +151 -0
- package/dist/components/InputBox.menu-logic.test.js.map +1 -0
- package/dist/components/InputBox.test.d.ts +2 -0
- package/dist/components/InputBox.test.d.ts.map +1 -0
- package/dist/components/InputBox.test.js +91 -0
- package/dist/components/InputBox.test.js.map +1 -0
- package/dist/components/LiveResponse.d.ts +13 -0
- package/dist/components/LiveResponse.d.ts.map +1 -0
- package/dist/components/LiveResponse.js +16 -0
- package/dist/components/LiveResponse.js.map +1 -0
- package/dist/components/MarkdownRenderer.d.ts +8 -0
- package/dist/components/MarkdownRenderer.d.ts.map +1 -0
- package/dist/components/MarkdownRenderer.js +225 -0
- package/dist/components/MarkdownRenderer.js.map +1 -0
- package/dist/components/MentorMode.test.d.ts +2 -0
- package/dist/components/MentorMode.test.d.ts.map +1 -0
- package/dist/components/MentorMode.test.js.map +1 -0
- package/dist/components/MessageList.d.ts +7 -0
- package/dist/components/MessageList.d.ts.map +1 -0
- package/dist/components/MessageList.js +29 -0
- package/dist/components/MessageList.js.map +1 -0
- package/dist/components/MessageList.test.d.ts +2 -0
- package/dist/components/MessageList.test.d.ts.map +1 -0
- package/dist/components/MessageList.test.js +15 -0
- package/dist/components/MessageList.test.js.map +1 -0
- package/dist/components/ModelSelectionMenu.d.ts +18 -0
- package/dist/components/ModelSelectionMenu.d.ts.map +1 -0
- package/dist/components/ModelSelectionMenu.js +91 -0
- package/dist/components/ModelSelectionMenu.js.map +1 -0
- package/dist/components/ModelSelectionMenu.test.d.ts +2 -0
- package/dist/components/ModelSelectionMenu.test.d.ts.map +1 -0
- package/dist/components/ModelSelectionMenu.test.js +83 -0
- package/dist/components/ModelSelectionMenu.test.js.map +1 -0
- package/dist/components/PathSelectionMenu.d.ts +12 -0
- package/dist/components/PathSelectionMenu.d.ts.map +1 -0
- package/dist/components/PathSelectionMenu.js +42 -0
- package/dist/components/PathSelectionMenu.js.map +1 -0
- package/dist/components/SettingsSelectionMenu.d.ts +9 -0
- package/dist/components/SettingsSelectionMenu.d.ts.map +1 -0
- package/dist/components/SettingsSelectionMenu.js +21 -0
- package/dist/components/SettingsSelectionMenu.js.map +1 -0
- package/dist/components/SlashCommandMenu.d.ts +15 -0
- package/dist/components/SlashCommandMenu.d.ts.map +1 -0
- package/dist/components/SlashCommandMenu.js +20 -0
- package/dist/components/SlashCommandMenu.js.map +1 -0
- package/dist/components/StatusBar.d.ts +11 -0
- package/dist/components/StatusBar.d.ts.map +1 -0
- package/dist/components/StatusBar.js +59 -0
- package/dist/components/StatusBar.js.map +1 -0
- package/dist/components/TextInput.d.ts +42 -0
- package/dist/components/TextInput.d.ts.map +1 -0
- package/dist/components/TextInput.js +397 -0
- package/dist/components/TextInput.js.map +1 -0
- package/dist/components/TextInput.test.d.ts +2 -0
- package/dist/components/TextInput.test.d.ts.map +1 -0
- package/dist/components/TextInput.test.js +75 -0
- package/dist/components/TextInput.test.js.map +1 -0
- package/dist/context/InputContext.d.ts +31 -0
- package/dist/context/InputContext.d.ts.map +1 -0
- package/dist/context/InputContext.js +36 -0
- package/dist/context/InputContext.js.map +1 -0
- package/dist/context/InputContext.stability.test.d.ts +2 -0
- package/dist/context/InputContext.stability.test.d.ts.map +1 -0
- package/dist/context/InputContext.stability.test.js +28 -0
- package/dist/context/InputContext.stability.test.js.map +1 -0
- package/dist/context/InputContext.test.d.ts +2 -0
- package/dist/context/InputContext.test.d.ts.map +1 -0
- package/dist/context/InputContext.test.js +168 -0
- package/dist/context/InputContext.test.js.map +1 -0
- package/dist/debug-schema.d.ts +2 -0
- package/dist/debug-schema.d.ts.map +1 -0
- package/dist/debug-schema.js +22 -0
- package/dist/debug-schema.js.map +1 -0
- package/dist/hooks/use-conversation.d.ts +78 -0
- package/dist/hooks/use-conversation.d.ts.map +1 -0
- package/dist/hooks/use-conversation.js +1017 -0
- package/dist/hooks/use-conversation.js.map +1 -0
- package/dist/hooks/use-input-history.d.ts +16 -0
- package/dist/hooks/use-input-history.d.ts.map +1 -0
- package/dist/hooks/use-input-history.js +71 -0
- package/dist/hooks/use-input-history.js.map +1 -0
- package/dist/hooks/use-model-selection.d.ts +27 -0
- package/dist/hooks/use-model-selection.d.ts.map +1 -0
- package/dist/hooks/use-model-selection.js +187 -0
- package/dist/hooks/use-model-selection.js.map +1 -0
- package/dist/hooks/use-model-selection.test.d.ts +2 -0
- package/dist/hooks/use-model-selection.test.d.ts.map +1 -0
- package/dist/hooks/use-model-selection.test.js +28 -0
- package/dist/hooks/use-model-selection.test.js.map +1 -0
- package/dist/hooks/use-path-completion.d.ts +22 -0
- package/dist/hooks/use-path-completion.d.ts.map +1 -0
- package/dist/hooks/use-path-completion.js +153 -0
- package/dist/hooks/use-path-completion.js.map +1 -0
- package/dist/hooks/use-path-completion.test.d.ts +2 -0
- package/dist/hooks/use-path-completion.test.d.ts.map +1 -0
- package/dist/hooks/use-path-completion.test.js +29 -0
- package/dist/hooks/use-path-completion.test.js.map +1 -0
- package/dist/hooks/use-setting.d.ts +7 -0
- package/dist/hooks/use-setting.d.ts.map +1 -0
- package/dist/hooks/use-setting.js +35 -0
- package/dist/hooks/use-setting.js.map +1 -0
- package/dist/hooks/use-settings-completion.d.ts +23 -0
- package/dist/hooks/use-settings-completion.d.ts.map +1 -0
- package/dist/hooks/use-settings-completion.js +164 -0
- package/dist/hooks/use-settings-completion.js.map +1 -0
- package/dist/hooks/use-settings-completion.test.d.ts +2 -0
- package/dist/hooks/use-settings-completion.test.d.ts.map +1 -0
- package/dist/hooks/use-settings-completion.test.js +334 -0
- package/dist/hooks/use-settings-completion.test.js.map +1 -0
- package/dist/hooks/use-slash-commands.d.ts +21 -0
- package/dist/hooks/use-slash-commands.d.ts.map +1 -0
- package/dist/hooks/use-slash-commands.js +87 -0
- package/dist/hooks/use-slash-commands.js.map +1 -0
- package/dist/hooks/use-slash-commands.test.d.ts +2 -0
- package/dist/hooks/use-slash-commands.test.d.ts.map +1 -0
- package/dist/hooks/use-slash-commands.test.js +246 -0
- package/dist/hooks/use-slash-commands.test.js.map +1 -0
- package/dist/lib/editor-impl.d.ts +23 -0
- package/dist/lib/editor-impl.d.ts.map +1 -0
- package/dist/lib/editor-impl.js +235 -0
- package/dist/lib/editor-impl.js.map +1 -0
- package/dist/lib/openai-agent-client.chat.test.d.ts +2 -0
- package/dist/lib/openai-agent-client.chat.test.d.ts.map +1 -0
- package/dist/lib/openai-agent-client.chat.test.js +68 -0
- package/dist/lib/openai-agent-client.chat.test.js.map +1 -0
- package/dist/lib/openai-agent-client.d.ts +48 -0
- package/dist/lib/openai-agent-client.d.ts.map +1 -0
- package/dist/lib/openai-agent-client.js +653 -0
- package/dist/lib/openai-agent-client.js.map +1 -0
- package/dist/lib/openai-agent-client.test.d.ts +2 -0
- package/dist/lib/openai-agent-client.test.d.ts.map +1 -0
- package/dist/lib/openai-agent-client.test.js +181 -0
- package/dist/lib/openai-agent-client.test.js.map +1 -0
- package/dist/lib/shell.d.ts +7 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +56 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/tool-invoke.d.ts +4 -0
- package/dist/lib/tool-invoke.d.ts.map +1 -0
- package/dist/lib/tool-invoke.js +26 -0
- package/dist/lib/tool-invoke.js.map +1 -0
- package/dist/lib/tool-invoke.test.d.ts +2 -0
- package/dist/lib/tool-invoke.test.d.ts.map +1 -0
- package/dist/lib/tool-invoke.test.js +19 -0
- package/dist/lib/tool-invoke.test.js.map +1 -0
- package/dist/no-singleton-imports.test.d.ts +2 -0
- package/dist/no-singleton-imports.test.d.ts.map +1 -0
- package/dist/no-singleton-imports.test.js +30 -0
- package/dist/no-singleton-imports.test.js.map +1 -0
- package/dist/prompts/anthropic.md +79 -0
- package/dist/prompts/codex.md +97 -0
- package/dist/prompts/default.md +77 -0
- package/dist/prompts/default.md.bak +77 -0
- package/dist/prompts/gpt-5.md +318 -0
- package/dist/prompts/lite.md +29 -0
- package/dist/prompts/simple-mentor.md +207 -0
- package/dist/prompts/simple.md +189 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-compatible/api.d.ts +17 -0
- package/dist/providers/openai-compatible/api.d.ts.map +1 -0
- package/dist/providers/openai-compatible/api.js +58 -0
- package/dist/providers/openai-compatible/api.js.map +1 -0
- package/dist/providers/openai-compatible/model.d.ts +17 -0
- package/dist/providers/openai-compatible/model.d.ts.map +1 -0
- package/dist/providers/openai-compatible/model.js +435 -0
- package/dist/providers/openai-compatible/model.js.map +1 -0
- package/dist/providers/openai-compatible/provider.d.ts +22 -0
- package/dist/providers/openai-compatible/provider.d.ts.map +1 -0
- package/dist/providers/openai-compatible/provider.js +43 -0
- package/dist/providers/openai-compatible/provider.js.map +1 -0
- package/dist/providers/openai-compatible/utils.d.ts +3 -0
- package/dist/providers/openai-compatible/utils.d.ts.map +1 -0
- package/dist/providers/openai-compatible/utils.js +11 -0
- package/dist/providers/openai-compatible/utils.js.map +1 -0
- package/dist/providers/openai-compatible.provider.d.ts +8 -0
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -0
- package/dist/providers/openai-compatible.provider.js +71 -0
- package/dist/providers/openai-compatible.provider.js.map +1 -0
- package/dist/providers/openai.provider.d.ts +2 -0
- package/dist/providers/openai.provider.d.ts.map +1 -0
- package/dist/providers/openai.provider.js +36 -0
- package/dist/providers/openai.provider.js.map +1 -0
- package/dist/providers/openrouter/api.d.ts +39 -0
- package/dist/providers/openrouter/api.d.ts.map +1 -0
- package/dist/providers/openrouter/api.js +172 -0
- package/dist/providers/openrouter/api.js.map +1 -0
- package/dist/providers/openrouter/converters.d.ts +8 -0
- package/dist/providers/openrouter/converters.d.ts.map +1 -0
- package/dist/providers/openrouter/converters.js +382 -0
- package/dist/providers/openrouter/converters.js.map +1 -0
- package/dist/providers/openrouter/converters.test.d.ts +2 -0
- package/dist/providers/openrouter/converters.test.d.ts.map +1 -0
- package/dist/providers/openrouter/converters.test.js +158 -0
- package/dist/providers/openrouter/converters.test.js.map +1 -0
- package/dist/providers/openrouter/index.d.ts +4 -0
- package/dist/providers/openrouter/index.d.ts.map +1 -0
- package/dist/providers/openrouter/index.js +4 -0
- package/dist/providers/openrouter/index.js.map +1 -0
- package/dist/providers/openrouter/model.d.ts +14 -0
- package/dist/providers/openrouter/model.d.ts.map +1 -0
- package/dist/providers/openrouter/model.js +485 -0
- package/dist/providers/openrouter/model.js.map +1 -0
- package/dist/providers/openrouter/provider.d.ts +15 -0
- package/dist/providers/openrouter/provider.d.ts.map +1 -0
- package/dist/providers/openrouter/provider.js +21 -0
- package/dist/providers/openrouter/provider.js.map +1 -0
- package/dist/providers/openrouter/utils.d.ts +10 -0
- package/dist/providers/openrouter/utils.d.ts.map +1 -0
- package/dist/providers/openrouter/utils.js +27 -0
- package/dist/providers/openrouter/utils.js.map +1 -0
- package/dist/providers/openrouter.api.retry.test.d.ts +2 -0
- package/dist/providers/openrouter.api.retry.test.d.ts.map +1 -0
- package/dist/providers/openrouter.api.retry.test.js +148 -0
- package/dist/providers/openrouter.api.retry.test.js.map +1 -0
- package/dist/providers/openrouter.d.ts +2 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.history.test.d.ts +2 -0
- package/dist/providers/openrouter.history.test.d.ts.map +1 -0
- package/dist/providers/openrouter.history.test.js +533 -0
- package/dist/providers/openrouter.history.test.js.map +1 -0
- package/dist/providers/openrouter.js +4 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/openrouter.provider.createRunner.test.d.ts +2 -0
- package/dist/providers/openrouter.provider.createRunner.test.d.ts.map +1 -0
- package/dist/providers/openrouter.provider.createRunner.test.js +23 -0
- package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -0
- package/dist/providers/openrouter.provider.d.ts +2 -0
- package/dist/providers/openrouter.provider.d.ts.map +1 -0
- package/dist/providers/openrouter.provider.js +56 -0
- package/dist/providers/openrouter.provider.js.map +1 -0
- package/dist/providers/openrouter.test.d.ts +2 -0
- package/dist/providers/openrouter.test.d.ts.map +1 -0
- package/dist/providers/openrouter.test.js +1382 -0
- package/dist/providers/openrouter.test.js.map +1 -0
- package/dist/providers/registry.d.ts +65 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +44 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/registry.test.d.ts +2 -0
- package/dist/providers/registry.test.d.ts.map +1 -0
- package/dist/providers/registry.test.js +76 -0
- package/dist/providers/registry.test.js.map +1 -0
- package/dist/providers/web-search/index.d.ts +8 -0
- package/dist/providers/web-search/index.d.ts.map +1 -0
- package/dist/providers/web-search/index.js +9 -0
- package/dist/providers/web-search/index.js.map +1 -0
- package/dist/providers/web-search/registry.d.ts +35 -0
- package/dist/providers/web-search/registry.d.ts.map +1 -0
- package/dist/providers/web-search/registry.js +56 -0
- package/dist/providers/web-search/registry.js.map +1 -0
- package/dist/providers/web-search/registry.test.d.ts +2 -0
- package/dist/providers/web-search/registry.test.d.ts.map +1 -0
- package/dist/providers/web-search/registry.test.js +105 -0
- package/dist/providers/web-search/registry.test.js.map +1 -0
- package/dist/providers/web-search/tavily.provider.d.ts +15 -0
- package/dist/providers/web-search/tavily.provider.d.ts.map +1 -0
- package/dist/providers/web-search/tavily.provider.js +69 -0
- package/dist/providers/web-search/tavily.provider.js.map +1 -0
- package/dist/providers/web-search/tavily.provider.test.d.ts +2 -0
- package/dist/providers/web-search/tavily.provider.test.d.ts.map +1 -0
- package/dist/providers/web-search/tavily.provider.test.js +67 -0
- package/dist/providers/web-search/tavily.provider.test.js.map +1 -0
- package/dist/providers/web-search/types.d.ts +55 -0
- package/dist/providers/web-search/types.d.ts.map +1 -0
- package/dist/providers/web-search/types.js +6 -0
- package/dist/providers/web-search/types.js.map +1 -0
- package/dist/safety-checker.js +57 -0
- package/dist/services/conversation-events.d.ts +76 -0
- package/dist/services/conversation-events.d.ts.map +1 -0
- package/dist/services/conversation-events.js +2 -0
- package/dist/services/conversation-events.js.map +1 -0
- package/dist/services/conversation-service.d.ts +31 -0
- package/dist/services/conversation-service.d.ts.map +1 -0
- package/dist/services/conversation-service.js +46 -0
- package/dist/services/conversation-service.js.map +1 -0
- package/dist/services/conversation-service.test.js +190 -0
- package/dist/services/conversation-session.d.ts +99 -0
- package/dist/services/conversation-session.d.ts.map +1 -0
- package/dist/services/conversation-session.js +978 -0
- package/dist/services/conversation-session.js.map +1 -0
- package/dist/services/conversation-store.d.ts +24 -0
- package/dist/services/conversation-store.d.ts.map +1 -0
- package/dist/services/conversation-store.js +216 -0
- package/dist/services/conversation-store.js.map +1 -0
- package/dist/services/conversation-store.test.d.ts +2 -0
- package/dist/services/conversation-store.test.d.ts.map +1 -0
- package/dist/services/conversation-store.test.js +167 -0
- package/dist/services/conversation-store.test.js.map +1 -0
- package/dist/services/execution-context.d.ts +10 -0
- package/dist/services/execution-context.d.ts.map +1 -0
- package/dist/services/execution-context.js +22 -0
- package/dist/services/execution-context.js.map +1 -0
- package/dist/services/execution-context.test.d.ts +2 -0
- package/dist/services/execution-context.test.d.ts.map +1 -0
- package/dist/services/execution-context.test.js +49 -0
- package/dist/services/execution-context.test.js.map +1 -0
- package/dist/services/file-service.d.ts +12 -0
- package/dist/services/file-service.d.ts.map +1 -0
- package/dist/services/file-service.js +90 -0
- package/dist/services/file-service.js.map +1 -0
- package/dist/services/history-service.d.ts +39 -0
- package/dist/services/history-service.d.ts.map +1 -0
- package/dist/services/history-service.js +152 -0
- package/dist/services/history-service.js.map +1 -0
- package/dist/services/logging-service.d.ts +75 -0
- package/dist/services/logging-service.d.ts.map +1 -0
- package/dist/services/logging-service.js +343 -0
- package/dist/services/logging-service.js.map +1 -0
- package/dist/services/model-service.d.ts +15 -0
- package/dist/services/model-service.d.ts.map +1 -0
- package/dist/services/model-service.js +46 -0
- package/dist/services/model-service.js.map +1 -0
- package/dist/services/model-service.test.d.ts +2 -0
- package/dist/services/model-service.test.d.ts.map +1 -0
- package/dist/services/model-service.test.js +128 -0
- package/dist/services/model-service.test.js.map +1 -0
- package/dist/services/service-interfaces.d.ts +33 -0
- package/dist/services/service-interfaces.d.ts.map +1 -0
- package/dist/services/service-interfaces.js +2 -0
- package/dist/services/service-interfaces.js.map +1 -0
- package/dist/services/settings-service.d.ts +316 -0
- package/dist/services/settings-service.d.ts.map +1 -0
- package/dist/services/settings-service.js +1128 -0
- package/dist/services/settings-service.js.map +1 -0
- package/dist/services/settings-service.mock.d.ts +20 -0
- package/dist/services/settings-service.mock.d.ts.map +1 -0
- package/dist/services/settings-service.mock.js +55 -0
- package/dist/services/settings-service.mock.js.map +1 -0
- package/dist/services/singleton-deprecation.test.d.ts +2 -0
- package/dist/services/singleton-deprecation.test.d.ts.map +1 -0
- package/dist/services/singleton-deprecation.test.js +59 -0
- package/dist/services/singleton-deprecation.test.js.map +1 -0
- package/dist/services/ssh-service.d.ts +32 -0
- package/dist/services/ssh-service.d.ts.map +1 -0
- package/dist/services/ssh-service.js +119 -0
- package/dist/services/ssh-service.js.map +1 -0
- package/dist/services/ssh-service.test.d.ts +2 -0
- package/dist/services/ssh-service.test.d.ts.map +1 -0
- package/dist/services/ssh-service.test.js +269 -0
- package/dist/services/ssh-service.test.js.map +1 -0
- package/dist/test-search-tool.d.ts +2 -0
- package/dist/test-search-tool.d.ts.map +1 -0
- package/dist/test-search-tool.js +36 -0
- package/dist/test-search-tool.js.map +1 -0
- package/dist/tools/apply-patch.d.ts +28 -0
- package/dist/tools/apply-patch.d.ts.map +1 -0
- package/dist/tools/apply-patch.js +399 -0
- package/dist/tools/apply-patch.js.map +1 -0
- package/dist/tools/apply-patch.test.d.ts +2 -0
- package/dist/tools/apply-patch.test.d.ts.map +1 -0
- package/dist/tools/apply-patch.test.js +155 -0
- package/dist/tools/apply-patch.test.js.map +1 -0
- package/dist/tools/ask-mentor.d.ts +11 -0
- package/dist/tools/ask-mentor.d.ts.map +1 -0
- package/dist/tools/ask-mentor.js +52 -0
- package/dist/tools/ask-mentor.js.map +1 -0
- package/dist/tools/ask-mentor.test.d.ts +2 -0
- package/dist/tools/ask-mentor.test.d.ts.map +1 -0
- package/dist/tools/ask-mentor.test.js +47 -0
- package/dist/tools/ask-mentor.test.js.map +1 -0
- package/dist/tools/bash.d.ts +10 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +55 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/find-files.d.ts +15 -0
- package/dist/tools/find-files.d.ts.map +1 -0
- package/dist/tools/find-files.js +179 -0
- package/dist/tools/find-files.js.map +1 -0
- package/dist/tools/find-files.test.d.ts +2 -0
- package/dist/tools/find-files.test.d.ts.map +1 -0
- package/dist/tools/find-files.test.js +131 -0
- package/dist/tools/find-files.test.js.map +1 -0
- package/dist/tools/format-helpers.d.ts +34 -0
- package/dist/tools/format-helpers.d.ts.map +1 -0
- package/dist/tools/format-helpers.js +131 -0
- package/dist/tools/format-helpers.js.map +1 -0
- package/dist/tools/grep.d.ts +16 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +211 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/read-file.d.ts +15 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +114 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/read-file.test.d.ts +2 -0
- package/dist/tools/read-file.test.d.ts.map +1 -0
- package/dist/tools/read-file.test.js +122 -0
- package/dist/tools/read-file.test.js.map +1 -0
- package/dist/tools/search-replace.d.ts +19 -0
- package/dist/tools/search-replace.d.ts.map +1 -0
- package/dist/tools/search-replace.js +411 -0
- package/dist/tools/search-replace.js.map +1 -0
- package/dist/tools/search-replace.test.d.ts +2 -0
- package/dist/tools/search-replace.test.d.ts.map +1 -0
- package/dist/tools/search-replace.test.js +302 -0
- package/dist/tools/search-replace.test.js.map +1 -0
- package/dist/tools/search.d.ts +15 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +143 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shell.d.ts +19 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +278 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/tools/tool-execution-context.d.ts +7 -0
- package/dist/tools/tool-execution-context.d.ts.map +1 -0
- package/dist/tools/tool-execution-context.js +7 -0
- package/dist/tools/tool-execution-context.js.map +1 -0
- package/dist/tools/types.d.ts +30 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/utils.d.ts +12 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +19 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +29 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +106 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/web-search.test.d.ts +2 -0
- package/dist/tools/web-search.test.d.ts.map +1 -0
- package/dist/tools/web-search.test.js +176 -0
- package/dist/tools/web-search.test.js.map +1 -0
- package/dist/utils/command-logger.d.ts +11 -0
- package/dist/utils/command-logger.d.ts.map +1 -0
- package/dist/utils/command-logger.js +34 -0
- package/dist/utils/command-logger.js.map +1 -0
- package/dist/utils/command-safety/constants.d.ts +21 -0
- package/dist/utils/command-safety/constants.d.ts.map +1 -0
- package/dist/utils/command-safety/constants.js +245 -0
- package/dist/utils/command-safety/constants.js.map +1 -0
- package/dist/utils/command-safety/find-helpers.d.ts +15 -0
- package/dist/utils/command-safety/find-helpers.d.ts.map +1 -0
- package/dist/utils/command-safety/find-helpers.js +218 -0
- package/dist/utils/command-safety/find-helpers.js.map +1 -0
- package/dist/utils/command-safety/handlers/find-handler.d.ts +6 -0
- package/dist/utils/command-safety/handlers/find-handler.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/find-handler.js +113 -0
- package/dist/utils/command-safety/handlers/find-handler.js.map +1 -0
- package/dist/utils/command-safety/handlers/git-handler.d.ts +6 -0
- package/dist/utils/command-safety/handlers/git-handler.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/git-handler.js +68 -0
- package/dist/utils/command-safety/handlers/git-handler.js.map +1 -0
- package/dist/utils/command-safety/handlers/index.d.ts +13 -0
- package/dist/utils/command-safety/handlers/index.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/index.js +20 -0
- package/dist/utils/command-safety/handlers/index.js.map +1 -0
- package/dist/utils/command-safety/handlers/sed-handler.d.ts +6 -0
- package/dist/utils/command-safety/handlers/sed-handler.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/sed-handler.js +94 -0
- package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -0
- package/dist/utils/command-safety/handlers/types.d.ts +36 -0
- package/dist/utils/command-safety/handlers/types.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/types.js +2 -0
- package/dist/utils/command-safety/handlers/types.js.map +1 -0
- package/dist/utils/command-safety/index.d.ts +14 -0
- package/dist/utils/command-safety/index.d.ts.map +1 -0
- package/dist/utils/command-safety/index.js +183 -0
- package/dist/utils/command-safety/index.js.map +1 -0
- package/dist/utils/command-safety/path-analysis.d.ts +4 -0
- package/dist/utils/command-safety/path-analysis.d.ts.map +1 -0
- package/dist/utils/command-safety/path-analysis.js +153 -0
- package/dist/utils/command-safety/path-analysis.js.map +1 -0
- package/dist/utils/command-safety/utils.d.ts +2 -0
- package/dist/utils/command-safety/utils.d.ts.map +1 -0
- package/dist/utils/command-safety/utils.js +22 -0
- package/dist/utils/command-safety/utils.js.map +1 -0
- package/dist/utils/command-safety.d.ts +21 -0
- package/dist/utils/command-safety.d.ts.map +1 -0
- package/dist/utils/command-safety.find.test.d.ts +2 -0
- package/dist/utils/command-safety.find.test.d.ts.map +1 -0
- package/dist/utils/command-safety.find.test.js +342 -0
- package/dist/utils/command-safety.find.test.js.map +1 -0
- package/dist/utils/command-safety.js +702 -0
- package/dist/utils/command-safety.js.map +1 -0
- package/dist/utils/command-safety.path.test.d.ts +2 -0
- package/dist/utils/command-safety.path.test.d.ts.map +1 -0
- package/dist/utils/command-safety.path.test.js +360 -0
- package/dist/utils/command-safety.path.test.js.map +1 -0
- package/dist/utils/diff.d.ts +2 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +44 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/diff.test.d.ts +2 -0
- package/dist/utils/diff.test.d.ts.map +1 -0
- package/dist/utils/diff.test.js +85 -0
- package/dist/utils/diff.test.js.map +1 -0
- package/dist/utils/error-helpers.d.ts +6 -0
- package/dist/utils/error-helpers.d.ts.map +1 -0
- package/dist/utils/error-helpers.js +46 -0
- package/dist/utils/error-helpers.js.map +1 -0
- package/dist/utils/error-helpers.test.d.ts +2 -0
- package/dist/utils/error-helpers.test.d.ts.map +1 -0
- package/dist/utils/error-helpers.test.js +152 -0
- package/dist/utils/error-helpers.test.js.map +1 -0
- package/dist/utils/execute-shell.d.ts +15 -0
- package/dist/utils/execute-shell.d.ts.map +1 -0
- package/dist/utils/execute-shell.js +34 -0
- package/dist/utils/execute-shell.js.map +1 -0
- package/dist/utils/execute-shell.test.d.ts +2 -0
- package/dist/utils/execute-shell.test.d.ts.map +1 -0
- package/dist/utils/execute-shell.test.js +20 -0
- package/dist/utils/execute-shell.test.js.map +1 -0
- package/dist/utils/extract-command-messages.d.ts +5 -0
- package/dist/utils/extract-command-messages.d.ts.map +1 -0
- package/dist/utils/extract-command-messages.js +140 -0
- package/dist/utils/extract-command-messages.js.map +1 -0
- package/dist/utils/extract-command-messages.repro.test.d.ts +2 -0
- package/dist/utils/extract-command-messages.repro.test.d.ts.map +1 -0
- package/dist/utils/extract-command-messages.repro.test.js +31 -0
- package/dist/utils/extract-command-messages.repro.test.js.map +1 -0
- package/dist/utils/extract-command-messages.test.js +57 -0
- package/dist/utils/message-buffer.d.ts +2 -0
- package/dist/utils/message-buffer.d.ts.map +1 -0
- package/dist/utils/message-buffer.js +15 -0
- package/dist/utils/message-buffer.js.map +1 -0
- package/dist/utils/message-buffer.test.d.ts +2 -0
- package/dist/utils/message-buffer.test.d.ts.map +1 -0
- package/dist/utils/message-buffer.test.js +17 -0
- package/dist/utils/message-buffer.test.js.map +1 -0
- package/dist/utils/output-trim.d.ts +31 -0
- package/dist/utils/output-trim.d.ts.map +1 -0
- package/dist/utils/output-trim.js +71 -0
- package/dist/utils/output-trim.js.map +1 -0
- package/dist/utils/provider-credentials.d.ts +10 -0
- package/dist/utils/provider-credentials.d.ts.map +1 -0
- package/dist/utils/provider-credentials.js +22 -0
- package/dist/utils/provider-credentials.js.map +1 -0
- package/dist/utils/settings-command.d.ts +13 -0
- package/dist/utils/settings-command.d.ts.map +1 -0
- package/dist/utils/settings-command.js +173 -0
- package/dist/utils/settings-command.js.map +1 -0
- package/dist/utils/ssh-config-parser.d.ts +21 -0
- package/dist/utils/ssh-config-parser.d.ts.map +1 -0
- package/dist/utils/ssh-config-parser.js +89 -0
- package/dist/utils/ssh-config-parser.js.map +1 -0
- package/dist/utils/ssh-config-parser.test.d.ts +2 -0
- package/dist/utils/ssh-config-parser.test.d.ts.map +1 -0
- package/dist/utils/ssh-config-parser.test.js +153 -0
- package/dist/utils/ssh-config-parser.test.js.map +1 -0
- package/dist/utils/streaming-updater.d.ts +7 -0
- package/dist/utils/streaming-updater.d.ts.map +1 -0
- package/dist/utils/streaming-updater.js +41 -0
- package/dist/utils/streaming-updater.js.map +1 -0
- package/dist/utils/throttle.d.ts +7 -0
- package/dist/utils/throttle.d.ts.map +1 -0
- package/dist/utils/throttle.js +49 -0
- package/dist/utils/throttle.js.map +1 -0
- package/package.json +108 -0
- package/readme.md +428 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-helpers.test.d.ts","sourceRoot":"","sources":["../../source/utils/error-helpers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { isAbortLikeError } from './error-helpers.js';
|
|
3
|
+
// Test isAbortLikeError with AbortError name
|
|
4
|
+
test('isAbortLikeError returns true for error with name AbortError', t => {
|
|
5
|
+
const error = { name: 'AbortError', message: 'Operation aborted' };
|
|
6
|
+
t.true(isAbortLikeError(error));
|
|
7
|
+
});
|
|
8
|
+
// Test isAbortLikeError with ABORT_ERR code
|
|
9
|
+
test('isAbortLikeError returns true for error with code ABORT_ERR', t => {
|
|
10
|
+
const error = { code: 'ABORT_ERR', message: 'Aborted' };
|
|
11
|
+
t.true(isAbortLikeError(error));
|
|
12
|
+
});
|
|
13
|
+
// Test isAbortLikeError with abort in message
|
|
14
|
+
test('isAbortLikeError returns true for error with "abort" in message', t => {
|
|
15
|
+
const error = new Error('The operation was aborted');
|
|
16
|
+
t.true(isAbortLikeError(error));
|
|
17
|
+
});
|
|
18
|
+
test('isAbortLikeError returns true for error with "Abort" (capitalized) in message', t => {
|
|
19
|
+
const error = new Error('Abort requested');
|
|
20
|
+
t.true(isAbortLikeError(error));
|
|
21
|
+
});
|
|
22
|
+
// Test isAbortLikeError with cancel in message
|
|
23
|
+
test('isAbortLikeError returns true for error with "cancel" in message', t => {
|
|
24
|
+
const error = new Error('Request was cancelled');
|
|
25
|
+
t.true(isAbortLikeError(error));
|
|
26
|
+
});
|
|
27
|
+
test('isAbortLikeError returns true for error with "Cancel" (capitalized) in message', t => {
|
|
28
|
+
const error = new Error('Cancel operation');
|
|
29
|
+
t.true(isAbortLikeError(error));
|
|
30
|
+
});
|
|
31
|
+
// Test isAbortLikeError with user cancelled variations
|
|
32
|
+
test('isAbortLikeError returns true for "user cancelled"', t => {
|
|
33
|
+
const error = new Error('user cancelled the operation');
|
|
34
|
+
t.true(isAbortLikeError(error));
|
|
35
|
+
});
|
|
36
|
+
test('isAbortLikeError returns true for "user-cancelled"', t => {
|
|
37
|
+
const error = new Error('user-cancelled');
|
|
38
|
+
t.true(isAbortLikeError(error));
|
|
39
|
+
});
|
|
40
|
+
test('isAbortLikeError returns true for "User Cancelled"', t => {
|
|
41
|
+
const error = new Error('User Cancelled');
|
|
42
|
+
t.true(isAbortLikeError(error));
|
|
43
|
+
});
|
|
44
|
+
// Test isAbortLikeError with user aborted variations
|
|
45
|
+
test('isAbortLikeError returns true for "user aborted"', t => {
|
|
46
|
+
const error = new Error('user aborted the request');
|
|
47
|
+
t.true(isAbortLikeError(error));
|
|
48
|
+
});
|
|
49
|
+
test('isAbortLikeError returns true for "user-aborted"', t => {
|
|
50
|
+
const error = new Error('user-aborted');
|
|
51
|
+
t.true(isAbortLikeError(error));
|
|
52
|
+
});
|
|
53
|
+
// Test isAbortLikeError with operation aborted/cancelled
|
|
54
|
+
test('isAbortLikeError returns true for "operation aborted"', t => {
|
|
55
|
+
const error = new Error('operation aborted by user');
|
|
56
|
+
t.true(isAbortLikeError(error));
|
|
57
|
+
});
|
|
58
|
+
test('isAbortLikeError returns true for "operation-aborted"', t => {
|
|
59
|
+
const error = new Error('operation-aborted');
|
|
60
|
+
t.true(isAbortLikeError(error));
|
|
61
|
+
});
|
|
62
|
+
test('isAbortLikeError returns true for "operation cancelled"', t => {
|
|
63
|
+
const error = new Error('operation cancelled');
|
|
64
|
+
t.true(isAbortLikeError(error));
|
|
65
|
+
});
|
|
66
|
+
test('isAbortLikeError returns true for "operation-cancelled"', t => {
|
|
67
|
+
const error = new Error('operation-cancelled');
|
|
68
|
+
t.true(isAbortLikeError(error));
|
|
69
|
+
});
|
|
70
|
+
// Test isAbortLikeError returns false for regular errors
|
|
71
|
+
test('isAbortLikeError returns false for regular error', t => {
|
|
72
|
+
const error = new Error('Something went wrong');
|
|
73
|
+
t.false(isAbortLikeError(error));
|
|
74
|
+
});
|
|
75
|
+
test('isAbortLikeError returns false for network error', t => {
|
|
76
|
+
const error = new Error('Network timeout');
|
|
77
|
+
t.false(isAbortLikeError(error));
|
|
78
|
+
});
|
|
79
|
+
test('isAbortLikeError returns false for null', t => {
|
|
80
|
+
t.false(isAbortLikeError(null));
|
|
81
|
+
});
|
|
82
|
+
test('isAbortLikeError returns false for undefined', t => {
|
|
83
|
+
t.false(isAbortLikeError(undefined));
|
|
84
|
+
});
|
|
85
|
+
test('isAbortLikeError returns false for empty string', t => {
|
|
86
|
+
t.false(isAbortLikeError(''));
|
|
87
|
+
});
|
|
88
|
+
test('isAbortLikeError returns false for error with empty message', t => {
|
|
89
|
+
const error = new Error('');
|
|
90
|
+
t.false(isAbortLikeError(error));
|
|
91
|
+
});
|
|
92
|
+
test('isAbortLikeError returns false for generic object', t => {
|
|
93
|
+
const error = { message: 'Some error', code: 500 };
|
|
94
|
+
t.false(isAbortLikeError(error));
|
|
95
|
+
});
|
|
96
|
+
// Test edge cases - verify no false positives with similar words
|
|
97
|
+
test('isAbortLikeError returns false for "elaborate" (does not contain "abort")', t => {
|
|
98
|
+
const error = new Error('Please elaborate on this');
|
|
99
|
+
t.false(isAbortLikeError(error));
|
|
100
|
+
});
|
|
101
|
+
test('isAbortLikeError returns true for "cancellation" (contains "cancel")', t => {
|
|
102
|
+
const error = new Error('Cancellation policy applies');
|
|
103
|
+
t.true(isAbortLikeError(error));
|
|
104
|
+
});
|
|
105
|
+
// Test with DOMException (typical browser AbortError)
|
|
106
|
+
test('isAbortLikeError returns true for DOMException with AbortError name', t => {
|
|
107
|
+
const error = {
|
|
108
|
+
name: 'AbortError',
|
|
109
|
+
message: 'The user aborted a request',
|
|
110
|
+
code: 20,
|
|
111
|
+
};
|
|
112
|
+
t.true(isAbortLikeError(error));
|
|
113
|
+
});
|
|
114
|
+
// Test combination of properties
|
|
115
|
+
test('isAbortLikeError returns true when both name and message indicate abort', t => {
|
|
116
|
+
const error = {
|
|
117
|
+
name: 'AbortError',
|
|
118
|
+
message: 'Operation cancelled by user',
|
|
119
|
+
};
|
|
120
|
+
t.true(isAbortLikeError(error));
|
|
121
|
+
});
|
|
122
|
+
test('isAbortLikeError returns true for Error with ABORT_ERR code and abort message', t => {
|
|
123
|
+
const error = {
|
|
124
|
+
name: 'Error',
|
|
125
|
+
code: 'ABORT_ERR',
|
|
126
|
+
message: 'Abort signal received',
|
|
127
|
+
};
|
|
128
|
+
t.true(isAbortLikeError(error));
|
|
129
|
+
});
|
|
130
|
+
// Test string errors (non-Error objects)
|
|
131
|
+
test('isAbortLikeError returns true for string containing "abort"', t => {
|
|
132
|
+
t.true(isAbortLikeError('abort'));
|
|
133
|
+
});
|
|
134
|
+
test('isAbortLikeError returns true for string "user cancelled"', t => {
|
|
135
|
+
t.true(isAbortLikeError('user cancelled'));
|
|
136
|
+
});
|
|
137
|
+
test('isAbortLikeError returns false for string without abort keywords', t => {
|
|
138
|
+
t.false(isAbortLikeError('some error message'));
|
|
139
|
+
});
|
|
140
|
+
test('isAbortLikeError returns true for undici TypeError: terminated with AbortError cause', t => {
|
|
141
|
+
const error = Object.assign(new TypeError('terminated'), {
|
|
142
|
+
cause: { name: 'AbortError', message: 'The operation was aborted' },
|
|
143
|
+
});
|
|
144
|
+
t.true(isAbortLikeError(error));
|
|
145
|
+
});
|
|
146
|
+
test('isAbortLikeError returns false for TypeError: terminated without abort-like cause', t => {
|
|
147
|
+
const error = Object.assign(new TypeError('terminated'), {
|
|
148
|
+
cause: { name: 'SocketError', message: 'socket hang up' },
|
|
149
|
+
});
|
|
150
|
+
t.false(isAbortLikeError(error));
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=error-helpers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-helpers.test.js","sourceRoot":"","sources":["../../source/utils/error-helpers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ShellExecutionResult {
|
|
2
|
+
stdout: string;
|
|
3
|
+
stderr: string;
|
|
4
|
+
exitCode: number | null;
|
|
5
|
+
timedOut: boolean;
|
|
6
|
+
}
|
|
7
|
+
import { ISSHService } from '../services/service-interfaces.js';
|
|
8
|
+
export interface ExecuteShellOptions {
|
|
9
|
+
cwd?: string;
|
|
10
|
+
timeout?: number;
|
|
11
|
+
maxBuffer?: number;
|
|
12
|
+
sshService?: ISSHService;
|
|
13
|
+
}
|
|
14
|
+
export declare function executeShellCommand(command: string, options?: ExecuteShellOptions): Promise<ShellExecutionResult>;
|
|
15
|
+
//# sourceMappingURL=execute-shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-shell.d.ts","sourceRoot":"","sources":["../../source/utils/execute-shell.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,WAAW,CAAC;CAC5B;AAED,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,oBAAoB,CAAC,CA+B/B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import util from 'util';
|
|
3
|
+
import process from 'process';
|
|
4
|
+
const execPromise = util.promisify(exec);
|
|
5
|
+
export async function executeShellCommand(command, options = {}) {
|
|
6
|
+
const { cwd = process.cwd(), timeout, maxBuffer, sshService } = options;
|
|
7
|
+
if (sshService) {
|
|
8
|
+
return sshService.executeCommand(command, { cwd });
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const result = await execPromise(command, {
|
|
12
|
+
cwd,
|
|
13
|
+
timeout,
|
|
14
|
+
maxBuffer,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
stdout: result.stdout ?? '',
|
|
18
|
+
stderr: result.stderr ?? '',
|
|
19
|
+
exitCode: 0,
|
|
20
|
+
timedOut: false,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const exitCode = typeof error?.code === 'number' ? error.code : null;
|
|
25
|
+
const timedOut = Boolean(error?.killed || error?.signal === 'SIGTERM');
|
|
26
|
+
return {
|
|
27
|
+
stdout: error?.stdout ?? '',
|
|
28
|
+
stderr: error?.stderr ?? '',
|
|
29
|
+
exitCode,
|
|
30
|
+
timedOut,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=execute-shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-shell.js","sourceRoot":"","sources":["../../source/utils/execute-shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AACnC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAkBzC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,OAAe,EACf,UAA+B,EAAE;IAEjC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAExE,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE;YACtC,GAAG;YACH,OAAO;YACP,SAAS;SACZ,CAAC,CAAC;QAEH,OAAO;YACH,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,KAAK;SAClB,CAAC;IACN,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;QAEvE,OAAO;YACH,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE;YAC3B,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE;YAC3B,QAAQ;YACR,QAAQ;SACX,CAAC;IACN,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-shell.test.d.ts","sourceRoot":"","sources":["../../source/utils/execute-shell.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { executeShellCommand } from './execute-shell.js';
|
|
3
|
+
test('executeShellCommand returns stdout and exit code for successful command', async (t) => {
|
|
4
|
+
const result = await executeShellCommand("printf 'hello'");
|
|
5
|
+
t.is(result.stdout, 'hello');
|
|
6
|
+
t.is(result.stderr, '');
|
|
7
|
+
t.is(result.exitCode, 0);
|
|
8
|
+
t.false(result.timedOut);
|
|
9
|
+
});
|
|
10
|
+
test('executeShellCommand captures stderr and exit code for failed command', async (t) => {
|
|
11
|
+
const result = await executeShellCommand('sh -c "echo oops 1>&2; exit 2"');
|
|
12
|
+
t.is(result.stderr.trim(), 'oops');
|
|
13
|
+
t.is(result.exitCode, 2);
|
|
14
|
+
t.false(result.timedOut);
|
|
15
|
+
});
|
|
16
|
+
test('executeShellCommand reports timeouts', async (t) => {
|
|
17
|
+
const result = await executeShellCommand('sh -c "sleep 1"', { timeout: 50 });
|
|
18
|
+
t.true(result.timedOut);
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=execute-shell.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-shell.test.js","sourceRoot":"","sources":["../../source/utils/execute-shell.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAEvD,IAAI,CAAC,yEAAyE,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACtF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACpC,gBAAgB,CACnB,CAAC;IAEF,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sEAAsE,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACnF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACpC,gCAAgC,CACnC,CAAC;IAEF,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sCAAsC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACnD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACpC,iBAAiB,EACjB,EAAC,OAAO,EAAE,EAAE,EAAC,CAChB,CAAC;IAEF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CommandMessage } from '../tools/types.js';
|
|
2
|
+
export declare const markToolCallAsApprovalRejection: (callId?: string | null) => void;
|
|
3
|
+
export declare const clearApprovalRejectionMarkers: () => void;
|
|
4
|
+
export declare const extractCommandMessages: (items?: any[]) => CommandMessage[];
|
|
5
|
+
//# sourceMappingURL=extract-command-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-command-messages.d.ts","sourceRoot":"","sources":["../../source/utils/extract-command-messages.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAWxD,eAAO,MAAM,+BAA+B,GACxC,SAAS,MAAM,GAAG,IAAI,KACvB,IAKF,CAAC;AAEF,eAAO,MAAM,6BAA6B,QAAO,IAEhD,CAAC;AAwDF,eAAO,MAAM,sBAAsB,GAAI,QAAO,GAAG,EAAO,KAAG,cAAc,EAiGxE,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { getCallIdFromItem, normalizeToolArguments, getOutputText, } from '../tools/format-helpers.js';
|
|
2
|
+
import { formatShellCommandMessage } from '../tools/shell.js';
|
|
3
|
+
import { formatGrepCommandMessage } from '../tools/grep.js';
|
|
4
|
+
import { formatApplyPatchCommandMessage } from '../tools/apply-patch.js';
|
|
5
|
+
import { formatSearchReplaceCommandMessage } from '../tools/search-replace.js';
|
|
6
|
+
import { formatAskMentorCommandMessage } from '../tools/ask-mentor.js';
|
|
7
|
+
import { formatReadFileCommandMessage } from '../tools/read-file.js';
|
|
8
|
+
import { formatFindFilesCommandMessage } from '../tools/find-files.js';
|
|
9
|
+
const approvalRejectionCallIds = new Set();
|
|
10
|
+
export const markToolCallAsApprovalRejection = (callId) => {
|
|
11
|
+
if (!callId) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
approvalRejectionCallIds.add(callId);
|
|
15
|
+
};
|
|
16
|
+
export const clearApprovalRejectionMarkers = () => {
|
|
17
|
+
approvalRejectionCallIds.clear();
|
|
18
|
+
};
|
|
19
|
+
const isApprovalRejectionForItem = (item) => {
|
|
20
|
+
const callId = getCallIdFromItem(item);
|
|
21
|
+
if (!callId) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return approvalRejectionCallIds.has(callId);
|
|
25
|
+
};
|
|
26
|
+
const normalizeToolItem = (item) => {
|
|
27
|
+
if (!item) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const rawItem = item.rawItem ?? item;
|
|
31
|
+
const type = item.type ?? rawItem?.type;
|
|
32
|
+
const isFunctionResult = type === 'function_call_result' ||
|
|
33
|
+
rawItem?.type === 'function_call_result' ||
|
|
34
|
+
type === 'function_call_output' ||
|
|
35
|
+
rawItem?.type === 'function_call_output' ||
|
|
36
|
+
type === 'function_call_output_result' ||
|
|
37
|
+
rawItem?.type === 'function_call_output_result';
|
|
38
|
+
const isToolCallOutput = type === 'tool_call_output_item';
|
|
39
|
+
if (!isFunctionResult && !isToolCallOutput) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const toolName = rawItem?.name ?? item.name;
|
|
43
|
+
if (!toolName) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
toolName,
|
|
48
|
+
arguments: rawItem?.arguments ?? item.arguments,
|
|
49
|
+
outputText: getOutputText(item),
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
const toolFormatters = {
|
|
53
|
+
'shell': formatShellCommandMessage,
|
|
54
|
+
'grep': formatGrepCommandMessage,
|
|
55
|
+
'apply_patch': formatApplyPatchCommandMessage,
|
|
56
|
+
'read_file': formatReadFileCommandMessage,
|
|
57
|
+
'find_files': formatFindFilesCommandMessage,
|
|
58
|
+
'search_replace': formatSearchReplaceCommandMessage,
|
|
59
|
+
'ask_mentor': formatAskMentorCommandMessage,
|
|
60
|
+
};
|
|
61
|
+
export const extractCommandMessages = (items = []) => {
|
|
62
|
+
const messages = [];
|
|
63
|
+
const toolCallArgumentsById = new Map();
|
|
64
|
+
for (const item of items ?? []) {
|
|
65
|
+
const rawItem = item?.rawItem ?? item;
|
|
66
|
+
if (!rawItem) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const type = rawItem?.type ?? item?.type;
|
|
70
|
+
if (type !== 'function_call') {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const callId = getCallIdFromItem(rawItem) ?? getCallIdFromItem(item);
|
|
74
|
+
if (!callId) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const args = rawItem.arguments ?? rawItem.args ?? item?.arguments ?? item?.args;
|
|
78
|
+
if (!args) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
toolCallArgumentsById.set(callId, args);
|
|
82
|
+
}
|
|
83
|
+
for (const [index, item] of (items ?? []).entries()) {
|
|
84
|
+
const normalizedItem = normalizeToolItem(item);
|
|
85
|
+
if (!normalizedItem) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const isApprovalRejection = isApprovalRejectionForItem(item);
|
|
89
|
+
const formatter = toolFormatters[normalizedItem.toolName];
|
|
90
|
+
if (formatter) {
|
|
91
|
+
const results = formatter(item, index, toolCallArgumentsById);
|
|
92
|
+
if (isApprovalRejection) {
|
|
93
|
+
results.forEach((msg) => { msg.isApprovalRejection = true; });
|
|
94
|
+
}
|
|
95
|
+
messages.push(...results);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// Generic fallback for any other tools
|
|
99
|
+
const rawItem = item?.rawItem ?? item;
|
|
100
|
+
const callId = getCallIdFromItem(item);
|
|
101
|
+
const fallbackArgs = callId && toolCallArgumentsById.has(callId)
|
|
102
|
+
? toolCallArgumentsById.get(callId)
|
|
103
|
+
: null;
|
|
104
|
+
const args = normalizeToolArguments(normalizedItem.arguments) ??
|
|
105
|
+
normalizeToolArguments(fallbackArgs) ??
|
|
106
|
+
{};
|
|
107
|
+
let command = normalizedItem.toolName;
|
|
108
|
+
if (typeof args === 'string') {
|
|
109
|
+
command += ` ${args}`;
|
|
110
|
+
}
|
|
111
|
+
else if (typeof args === 'object' && args !== null) {
|
|
112
|
+
const parts = Object.values(args).map(v => typeof v === 'string' ? `"${v}"` : JSON.stringify(v));
|
|
113
|
+
if (parts.length > 0) {
|
|
114
|
+
command += ` ${parts.join(' ')}`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const output = normalizedItem.outputText || 'No output';
|
|
118
|
+
const success = !output.startsWith('Error:');
|
|
119
|
+
const baseId = rawItem?.id ??
|
|
120
|
+
rawItem?.callId ??
|
|
121
|
+
item?.id ??
|
|
122
|
+
item?.callId ??
|
|
123
|
+
`${Date.now()}-${index}`;
|
|
124
|
+
const stableId = `${baseId}-0`;
|
|
125
|
+
messages.push({
|
|
126
|
+
id: stableId,
|
|
127
|
+
sender: 'command',
|
|
128
|
+
status: 'completed',
|
|
129
|
+
command,
|
|
130
|
+
output,
|
|
131
|
+
success,
|
|
132
|
+
isApprovalRejection,
|
|
133
|
+
toolName: normalizedItem.toolName,
|
|
134
|
+
toolArgs: args,
|
|
135
|
+
...(callId ? { callId } : {}),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return messages;
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=extract-command-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-command-messages.js","sourceRoot":"","sources":["../../source/utils/extract-command-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-command-messages.repro.test.d.ts","sourceRoot":"","sources":["../../source/utils/extract-command-messages.repro.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { extractCommandMessages } from './extract-command-messages.js';
|
|
3
|
+
test('extractCommandMessages handles tool_call_id', t => {
|
|
4
|
+
const historyItem = {
|
|
5
|
+
role: 'tool',
|
|
6
|
+
tool_call_id: 'call_123',
|
|
7
|
+
content: JSON.stringify({ output: [{ success: false, error: 'failed' }] }),
|
|
8
|
+
name: 'shell' // OpenAI messages don't always have name on tool output, but let's assume it might be there or inferred
|
|
9
|
+
};
|
|
10
|
+
// normalizeToolItem requires name.
|
|
11
|
+
// In OpenAI history, the tool name is associated with the tool_call, not the tool output.
|
|
12
|
+
// But extractCommandMessages seems to expect name on the item.
|
|
13
|
+
// Let's see what normalizeToolItem expects.
|
|
14
|
+
// const toolName = rawItem?.name ?? item.name;
|
|
15
|
+
// If the history item doesn't have name, it returns null.
|
|
16
|
+
// So result.history must contain items that have name.
|
|
17
|
+
const item = {
|
|
18
|
+
type: 'function_call_result', // or tool_call_output_item
|
|
19
|
+
name: 'shell',
|
|
20
|
+
tool_call_id: 'call_123',
|
|
21
|
+
output: JSON.stringify({ output: [{ success: false, error: 'failed' }] })
|
|
22
|
+
};
|
|
23
|
+
const messages = extractCommandMessages([item]);
|
|
24
|
+
t.is(messages.length, 1);
|
|
25
|
+
// The ID should be derived from tool_call_id if possible
|
|
26
|
+
// But currently it checks id, callId.
|
|
27
|
+
// If tool_call_id is present but ignored, it uses timestamp-index.
|
|
28
|
+
const id = messages[0].id;
|
|
29
|
+
t.true(id.includes('call_123'), `ID ${id} should include call_123`);
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=extract-command-messages.repro.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-command-messages.repro.test.js","sourceRoot":"","sources":["../../source/utils/extract-command-messages.repro.test.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,sBAAsB,EAAC,MAAM,+BAA+B,CAAC;AAErE,IAAI,CAAC,6CAA6C,EAAE,CAAC,CAAC,EAAE;IACpD,MAAM,WAAW,GAAG;QAChB,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,UAAU;QACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,EAAC,CAAC;QACtE,IAAI,EAAE,OAAO,CAAC,wGAAwG;KACzH,CAAC;IAEF,mCAAmC;IACnC,0FAA0F;IAC1F,+DAA+D;IAE/D,4CAA4C;IAC5C,+CAA+C;IAE/C,0DAA0D;IAE1D,uDAAuD;IAEvD,MAAM,IAAI,GAAG;QACT,IAAI,EAAE,sBAAsB,EAAE,2BAA2B;QACzD,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,EAAC,CAAC;KACxE,CAAC;IAEF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhD,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzB,yDAAyD;IACzD,sCAAsC;IAEtC,mEAAmE;IACnE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { extractCommandMessages } from '../../dist/utils/extract-command-messages.js';
|
|
3
|
+
const withStubbedNow = value => {
|
|
4
|
+
const realNow = Date.now;
|
|
5
|
+
Date.now = () => value;
|
|
6
|
+
return () => {
|
|
7
|
+
Date.now = realNow;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
test('extracts bash command results from tool call output items', t => {
|
|
11
|
+
const restore = withStubbedNow(1700000000000);
|
|
12
|
+
try {
|
|
13
|
+
const items = [{
|
|
14
|
+
type: 'tool_call_output_item',
|
|
15
|
+
output: '{"command":"date","output":"Mon Nov 24","success":true}',
|
|
16
|
+
rawItem: {
|
|
17
|
+
type: 'function_call_result',
|
|
18
|
+
name: 'bash'
|
|
19
|
+
}
|
|
20
|
+
}];
|
|
21
|
+
const messages = extractCommandMessages(items);
|
|
22
|
+
t.is(messages.length, 1);
|
|
23
|
+
t.deepEqual(messages[0], {
|
|
24
|
+
id: '1700000000000-0',
|
|
25
|
+
sender: 'command',
|
|
26
|
+
command: 'date',
|
|
27
|
+
output: 'Mon Nov 24',
|
|
28
|
+
success: true
|
|
29
|
+
});
|
|
30
|
+
} finally {
|
|
31
|
+
restore();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
test('extracts commands from history function_call_result items', t => {
|
|
35
|
+
const restore = withStubbedNow(1700000000100);
|
|
36
|
+
try {
|
|
37
|
+
const items = [{
|
|
38
|
+
type: 'function_call_result',
|
|
39
|
+
name: 'bash',
|
|
40
|
+
output: {
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: '{"command":"ls","output":"agent.js\\napp.js","success":false}'
|
|
43
|
+
}
|
|
44
|
+
}];
|
|
45
|
+
const messages = extractCommandMessages(items);
|
|
46
|
+
t.is(messages.length, 1);
|
|
47
|
+
t.deepEqual(messages[0], {
|
|
48
|
+
id: '1700000000100-0',
|
|
49
|
+
sender: 'command',
|
|
50
|
+
command: 'ls',
|
|
51
|
+
output: 'agent.js\napp.js',
|
|
52
|
+
success: false
|
|
53
|
+
});
|
|
54
|
+
} finally {
|
|
55
|
+
restore();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-buffer.d.ts","sourceRoot":"","sources":["../../source/utils/message-buffer.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAAC,CAAC,EAClC,QAAQ,EAAE,SAAS,CAAC,EAAE,EACtB,SAAS,EAAE,SAAS,CAAC,EAAE,EACvB,WAAW,EAAE,MAAM,GACpB,CAAC,EAAE,CAeL"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function appendMessagesCapped(existing, additions, maxMessages) {
|
|
2
|
+
if (maxMessages <= 0)
|
|
3
|
+
return [];
|
|
4
|
+
if (additions.length === 0 && existing.length <= maxMessages) {
|
|
5
|
+
return existing.slice();
|
|
6
|
+
}
|
|
7
|
+
const combinedLength = existing.length + additions.length;
|
|
8
|
+
if (combinedLength <= maxMessages) {
|
|
9
|
+
return [...existing, ...additions];
|
|
10
|
+
}
|
|
11
|
+
const start = combinedLength - maxMessages;
|
|
12
|
+
const trimmedExisting = existing.slice(Math.max(0, start - additions.length));
|
|
13
|
+
return [...trimmedExisting, ...additions].slice(-maxMessages);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=message-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-buffer.js","sourceRoot":"","sources":["../../source/utils/message-buffer.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAChC,QAAsB,EACtB,SAAuB,EACvB,WAAmB;IAEnB,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;QAC3D,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAC1D,IAAI,cAAc,IAAI,WAAW,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,GAAG,WAAW,CAAC;IAC3C,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,eAAe,EAAE,GAAG,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-buffer.test.d.ts","sourceRoot":"","sources":["../../source/utils/message-buffer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { appendMessagesCapped } from './message-buffer.js';
|
|
3
|
+
const makeMessages = (count, prefix = 'm') => Array.from({ length: count }, (_, i) => ({ id: i, text: `${prefix}${i}` }));
|
|
4
|
+
test('appendMessagesCapped keeps only the newest messages up to the cap', t => {
|
|
5
|
+
const prev = makeMessages(3);
|
|
6
|
+
const next = makeMessages(3, 'n');
|
|
7
|
+
const result = appendMessagesCapped(prev, next, 4);
|
|
8
|
+
t.is(result.length, 4);
|
|
9
|
+
t.deepEqual(result.map(m => m.text), ['m2', 'n0', 'n1', 'n2']);
|
|
10
|
+
});
|
|
11
|
+
test('appendMessagesCapped returns additions when cap is small', t => {
|
|
12
|
+
const prev = makeMessages(2);
|
|
13
|
+
const next = makeMessages(2, 'n');
|
|
14
|
+
const result = appendMessagesCapped(prev, next, 2);
|
|
15
|
+
t.deepEqual(result.map(m => m.text), ['n0', 'n1']);
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=message-buffer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-buffer.test.js","sourceRoot":"","sources":["../../source/utils/message-buffer.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,oBAAoB,EAAC,MAAM,qBAAqB,CAAC;AAEzD,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CACjD,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,KAAK,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC;AAE5E,IAAI,CAAC,mEAAmE,EAAE,CAAC,CAAC,EAAE;IAC1E,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAElC,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEnD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,SAAS,CACP,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACvB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAC3B,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0DAA0D,EAAE,CAAC,CAAC,EAAE;IACjE,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAElC,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEnD,CAAC,CAAC,SAAS,CACP,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACvB,CAAC,IAAI,EAAE,IAAI,CAAC,CACf,CAAC;AACN,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for output trimming limits.
|
|
3
|
+
* Output will be trimmed if it exceeds either limit.
|
|
4
|
+
*/
|
|
5
|
+
export interface OutputTrimConfig {
|
|
6
|
+
/** Maximum number of lines before trimming (default: 1000) */
|
|
7
|
+
maxLines: number;
|
|
8
|
+
/** Maximum size in characters before trimming (default: 10000) */
|
|
9
|
+
maxCharacters: number;
|
|
10
|
+
}
|
|
11
|
+
/** Default trim configuration */
|
|
12
|
+
export declare const DEFAULT_TRIM_CONFIG: OutputTrimConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Set the output trim configuration.
|
|
15
|
+
*/
|
|
16
|
+
export declare function setTrimConfig(config: Partial<OutputTrimConfig>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Get the current trim configuration.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getTrimConfig(): OutputTrimConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Trims output if it exceeds configured line or character limits.
|
|
23
|
+
* Keeps 40% at the beginning, 40% at the end, and trims 20% from the middle.
|
|
24
|
+
*
|
|
25
|
+
* @param output - The output string to trim
|
|
26
|
+
* @param maxLines - Optional override for maximum lines (uses trimConfig.maxLines if not provided)
|
|
27
|
+
* @param maxCharacters - Optional override for maximum characters (uses trimConfig.maxCharacters if not provided)
|
|
28
|
+
* @returns The trimmed output string with a message indicating how many lines were trimmed
|
|
29
|
+
*/
|
|
30
|
+
export declare function trimOutput(output: string, maxLines?: number, maxCharacters?: number): string;
|
|
31
|
+
//# sourceMappingURL=output-trim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-trim.d.ts","sourceRoot":"","sources":["../../source/utils/output-trim.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,EAAE,gBAGjC,CAAC;AAKF;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,gBAAgB,CAEhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,GACvB,MAAM,CAsDR"}
|