@roackb2/heddle 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +273 -0
- package/dist/examples/conversation.d.ts +2 -0
- package/dist/examples/conversation.d.ts.map +1 -0
- package/dist/examples/conversation.js +3 -0
- package/dist/examples/conversation.js.map +1 -0
- package/dist/examples/repo-investigator.d.ts +2 -0
- package/dist/examples/repo-investigator.d.ts.map +1 -0
- package/dist/examples/repo-investigator.js +57 -0
- package/dist/examples/repo-investigator.js.map +1 -0
- package/dist/src/__tests__/chat-activity-format.test.d.ts +2 -0
- package/dist/src/__tests__/chat-activity-format.test.d.ts.map +1 -0
- package/dist/src/__tests__/chat-activity-format.test.js +41 -0
- package/dist/src/__tests__/chat-activity-format.test.js.map +1 -0
- package/dist/src/__tests__/chat-compaction.test.d.ts +2 -0
- package/dist/src/__tests__/chat-compaction.test.d.ts.map +1 -0
- package/dist/src/__tests__/chat-compaction.test.js +24 -0
- package/dist/src/__tests__/chat-compaction.test.js.map +1 -0
- package/dist/src/__tests__/chat-format.test.d.ts +2 -0
- package/dist/src/__tests__/chat-format.test.d.ts.map +1 -0
- package/dist/src/__tests__/chat-format.test.js +124 -0
- package/dist/src/__tests__/chat-format.test.js.map +1 -0
- package/dist/src/__tests__/chat-runtime.test.d.ts +2 -0
- package/dist/src/__tests__/chat-runtime.test.d.ts.map +1 -0
- package/dist/src/__tests__/chat-runtime.test.js +39 -0
- package/dist/src/__tests__/chat-runtime.test.js.map +1 -0
- package/dist/src/__tests__/core-utils.test.d.ts +2 -0
- package/dist/src/__tests__/core-utils.test.d.ts.map +1 -0
- package/dist/src/__tests__/core-utils.test.js +87 -0
- package/dist/src/__tests__/core-utils.test.js.map +1 -0
- package/dist/src/__tests__/llm-factory.test.d.ts +2 -0
- package/dist/src/__tests__/llm-factory.test.d.ts.map +1 -0
- package/dist/src/__tests__/llm-factory.test.js +45 -0
- package/dist/src/__tests__/llm-factory.test.js.map +1 -0
- package/dist/src/__tests__/local-commands.test.d.ts +2 -0
- package/dist/src/__tests__/local-commands.test.d.ts.map +1 -0
- package/dist/src/__tests__/local-commands.test.js +163 -0
- package/dist/src/__tests__/local-commands.test.js.map +1 -0
- package/dist/src/__tests__/project-approval-rules.test.d.ts +2 -0
- package/dist/src/__tests__/project-approval-rules.test.d.ts.map +1 -0
- package/dist/src/__tests__/project-approval-rules.test.js +135 -0
- package/dist/src/__tests__/project-approval-rules.test.js.map +1 -0
- package/dist/src/__tests__/prompts.test.d.ts +2 -0
- package/dist/src/__tests__/prompts.test.d.ts.map +1 -0
- package/dist/src/__tests__/prompts.test.js +43 -0
- package/dist/src/__tests__/prompts.test.js.map +1 -0
- package/dist/src/__tests__/run-agent.test.d.ts +2 -0
- package/dist/src/__tests__/run-agent.test.d.ts.map +1 -0
- package/dist/src/__tests__/run-agent.test.js +1276 -0
- package/dist/src/__tests__/run-agent.test.js.map +1 -0
- package/dist/src/__tests__/run-shell.command.test.d.ts +2 -0
- package/dist/src/__tests__/run-shell.command.test.d.ts.map +1 -0
- package/dist/src/__tests__/run-shell.command.test.js +188 -0
- package/dist/src/__tests__/run-shell.command.test.js.map +1 -0
- package/dist/src/__tests__/smoke.test.d.ts +2 -0
- package/dist/src/__tests__/smoke.test.d.ts.map +1 -0
- package/dist/src/__tests__/smoke.test.js +314 -0
- package/dist/src/__tests__/smoke.test.js.map +1 -0
- package/dist/src/__tests__/tools.test.d.ts +2 -0
- package/dist/src/__tests__/tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools.test.js +557 -0
- package/dist/src/__tests__/tools.test.js.map +1 -0
- package/dist/src/__tests__/trace-format.test.d.ts +2 -0
- package/dist/src/__tests__/trace-format.test.d.ts.map +1 -0
- package/dist/src/__tests__/trace-format.test.js +148 -0
- package/dist/src/__tests__/trace-format.test.js.map +1 -0
- package/dist/src/cli/ask.d.ts +11 -0
- package/dist/src/cli/ask.d.ts.map +1 -0
- package/dist/src/cli/ask.js +59 -0
- package/dist/src/cli/ask.js.map +1 -0
- package/dist/src/cli/chat/App.d.ts +5 -0
- package/dist/src/cli/chat/App.d.ts.map +1 -0
- package/dist/src/cli/chat/App.js +348 -0
- package/dist/src/cli/chat/App.js.map +1 -0
- package/dist/src/cli/chat/actions.d.ts +47 -0
- package/dist/src/cli/chat/actions.d.ts.map +1 -0
- package/dist/src/cli/chat/actions.js +215 -0
- package/dist/src/cli/chat/actions.js.map +1 -0
- package/dist/src/cli/chat/components/ActivityPanel.d.ts +11 -0
- package/dist/src/cli/chat/components/ActivityPanel.d.ts.map +1 -0
- package/dist/src/cli/chat/components/ActivityPanel.js +20 -0
- package/dist/src/cli/chat/components/ActivityPanel.js.map +1 -0
- package/dist/src/cli/chat/components/ApprovalComposer.d.ts +6 -0
- package/dist/src/cli/chat/components/ApprovalComposer.d.ts.map +1 -0
- package/dist/src/cli/chat/components/ApprovalComposer.js +30 -0
- package/dist/src/cli/chat/components/ApprovalComposer.js.map +1 -0
- package/dist/src/cli/chat/components/CommandHintPanel.d.ts +5 -0
- package/dist/src/cli/chat/components/CommandHintPanel.d.ts.map +1 -0
- package/dist/src/cli/chat/components/CommandHintPanel.js +13 -0
- package/dist/src/cli/chat/components/CommandHintPanel.js.map +1 -0
- package/dist/src/cli/chat/components/ConversationPanel.d.ts +16 -0
- package/dist/src/cli/chat/components/ConversationPanel.d.ts.map +1 -0
- package/dist/src/cli/chat/components/ConversationPanel.js +218 -0
- package/dist/src/cli/chat/components/ConversationPanel.js.map +1 -0
- package/dist/src/cli/chat/components/ModelPickerPanel.d.ts +7 -0
- package/dist/src/cli/chat/components/ModelPickerPanel.d.ts.map +1 -0
- package/dist/src/cli/chat/components/ModelPickerPanel.js +32 -0
- package/dist/src/cli/chat/components/ModelPickerPanel.js.map +1 -0
- package/dist/src/cli/chat/components/PromptInput.d.ts +29 -0
- package/dist/src/cli/chat/components/PromptInput.d.ts.map +1 -0
- package/dist/src/cli/chat/components/PromptInput.js +132 -0
- package/dist/src/cli/chat/components/PromptInput.js.map +1 -0
- package/dist/src/cli/chat/components/RecentTurnsPanel.d.ts +5 -0
- package/dist/src/cli/chat/components/RecentTurnsPanel.d.ts.map +1 -0
- package/dist/src/cli/chat/components/RecentTurnsPanel.js +10 -0
- package/dist/src/cli/chat/components/RecentTurnsPanel.js.map +1 -0
- package/dist/src/cli/chat/components/SessionPickerPanel.d.ts +12 -0
- package/dist/src/cli/chat/components/SessionPickerPanel.d.ts.map +1 -0
- package/dist/src/cli/chat/components/SessionPickerPanel.js +32 -0
- package/dist/src/cli/chat/components/SessionPickerPanel.js.map +1 -0
- package/dist/src/cli/chat/components/SlashHintPanel.d.ts +8 -0
- package/dist/src/cli/chat/components/SlashHintPanel.d.ts.map +1 -0
- package/dist/src/cli/chat/components/SlashHintPanel.js +38 -0
- package/dist/src/cli/chat/components/SlashHintPanel.js.map +1 -0
- package/dist/src/cli/chat/components/index.d.ts +10 -0
- package/dist/src/cli/chat/components/index.d.ts.map +1 -0
- package/dist/src/cli/chat/components/index.js +10 -0
- package/dist/src/cli/chat/components/index.js.map +1 -0
- package/dist/src/cli/chat/format.d.ts +23 -0
- package/dist/src/cli/chat/format.d.ts.map +1 -0
- package/dist/src/cli/chat/format.js +243 -0
- package/dist/src/cli/chat/format.js.map +1 -0
- package/dist/src/cli/chat/hooks/useAgentRun.d.ts +61 -0
- package/dist/src/cli/chat/hooks/useAgentRun.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/useAgentRun.js +463 -0
- package/dist/src/cli/chat/hooks/useAgentRun.js.map +1 -0
- package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts +31 -0
- package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/useApprovalFlow.js +145 -0
- package/dist/src/cli/chat/hooks/useApprovalFlow.js.map +1 -0
- package/dist/src/cli/chat/hooks/useChatSessions.d.ts +23 -0
- package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/useChatSessions.js +124 -0
- package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -0
- package/dist/src/cli/chat/hooks/useProjectApprovals.d.ts +8 -0
- package/dist/src/cli/chat/hooks/useProjectApprovals.d.ts.map +1 -0
- package/dist/src/cli/chat/hooks/useProjectApprovals.js +33 -0
- package/dist/src/cli/chat/hooks/useProjectApprovals.js.map +1 -0
- package/dist/src/cli/chat/index.d.ts +4 -0
- package/dist/src/cli/chat/index.d.ts.map +1 -0
- package/dist/src/cli/chat/index.js +9 -0
- package/dist/src/cli/chat/index.js.map +1 -0
- package/dist/src/cli/chat/local-commands.d.ts +17 -0
- package/dist/src/cli/chat/local-commands.d.ts.map +1 -0
- package/dist/src/cli/chat/local-commands.js +180 -0
- package/dist/src/cli/chat/local-commands.js.map +1 -0
- package/dist/src/cli/chat/panels.d.ts +37 -0
- package/dist/src/cli/chat/panels.d.ts.map +1 -0
- package/dist/src/cli/chat/panels.js +142 -0
- package/dist/src/cli/chat/panels.js.map +1 -0
- package/dist/src/cli/chat/runtime.d.ts +26 -0
- package/dist/src/cli/chat/runtime.d.ts.map +1 -0
- package/dist/src/cli/chat/runtime.js +28 -0
- package/dist/src/cli/chat/runtime.js.map +1 -0
- package/dist/src/cli/chat/state/approval-rules.d.ts +21 -0
- package/dist/src/cli/chat/state/approval-rules.d.ts.map +1 -0
- package/dist/src/cli/chat/state/approval-rules.js +196 -0
- package/dist/src/cli/chat/state/approval-rules.js.map +1 -0
- package/dist/src/cli/chat/state/compaction.d.ts +13 -0
- package/dist/src/cli/chat/state/compaction.d.ts.map +1 -0
- package/dist/src/cli/chat/state/compaction.js +143 -0
- package/dist/src/cli/chat/state/compaction.js.map +1 -0
- package/dist/src/cli/chat/state/local-commands.d.ts +17 -0
- package/dist/src/cli/chat/state/local-commands.d.ts.map +1 -0
- package/dist/src/cli/chat/state/local-commands.js +169 -0
- package/dist/src/cli/chat/state/local-commands.js.map +1 -0
- package/dist/src/cli/chat/state/storage.d.ts +14 -0
- package/dist/src/cli/chat/state/storage.d.ts.map +1 -0
- package/dist/src/cli/chat/state/storage.js +144 -0
- package/dist/src/cli/chat/state/storage.js.map +1 -0
- package/dist/src/cli/chat/state/types.d.ts +69 -0
- package/dist/src/cli/chat/state/types.d.ts.map +1 -0
- package/dist/src/cli/chat/state/types.js +2 -0
- package/dist/src/cli/chat/state/types.js.map +1 -0
- package/dist/src/cli/chat/storage.d.ts +13 -0
- package/dist/src/cli/chat/storage.d.ts.map +1 -0
- package/dist/src/cli/chat/storage.js +126 -0
- package/dist/src/cli/chat/storage.js.map +1 -0
- package/dist/src/cli/chat/submit.d.ts +28 -0
- package/dist/src/cli/chat/submit.d.ts.map +1 -0
- package/dist/src/cli/chat/submit.js +90 -0
- package/dist/src/cli/chat/submit.js.map +1 -0
- package/dist/src/cli/chat/types.d.ts +51 -0
- package/dist/src/cli/chat/types.d.ts.map +1 -0
- package/dist/src/cli/chat/types.js +2 -0
- package/dist/src/cli/chat/types.js.map +1 -0
- package/dist/src/cli/chat/use-run-state.d.ts +23 -0
- package/dist/src/cli/chat/use-run-state.d.ts.map +1 -0
- package/dist/src/cli/chat/use-run-state.js +118 -0
- package/dist/src/cli/chat/use-run-state.js.map +1 -0
- package/dist/src/cli/chat/use-sessions.d.ts +21 -0
- package/dist/src/cli/chat/use-sessions.d.ts.map +1 -0
- package/dist/src/cli/chat/use-sessions.js +111 -0
- package/dist/src/cli/chat/use-sessions.js.map +1 -0
- package/dist/src/cli/chat/utils/format.d.ts +41 -0
- package/dist/src/cli/chat/utils/format.d.ts.map +1 -0
- package/dist/src/cli/chat/utils/format.js +578 -0
- package/dist/src/cli/chat/utils/format.js.map +1 -0
- package/dist/src/cli/chat/utils/runtime.d.ts +31 -0
- package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -0
- package/dist/src/cli/chat/utils/runtime.js +56 -0
- package/dist/src/cli/chat/utils/runtime.js.map +1 -0
- package/dist/src/cli/chat-actions.d.ts +47 -0
- package/dist/src/cli/chat-actions.d.ts.map +1 -0
- package/dist/src/cli/chat-actions.js +215 -0
- package/dist/src/cli/chat-actions.js.map +1 -0
- package/dist/src/cli/chat-format.d.ts +23 -0
- package/dist/src/cli/chat-format.d.ts.map +1 -0
- package/dist/src/cli/chat-format.js +243 -0
- package/dist/src/cli/chat-format.js.map +1 -0
- package/dist/src/cli/chat-local-commands.d.ts +17 -0
- package/dist/src/cli/chat-local-commands.d.ts.map +1 -0
- package/dist/src/cli/chat-local-commands.js +180 -0
- package/dist/src/cli/chat-local-commands.js.map +1 -0
- package/dist/src/cli/chat-panels.d.ts +37 -0
- package/dist/src/cli/chat-panels.d.ts.map +1 -0
- package/dist/src/cli/chat-panels.js +142 -0
- package/dist/src/cli/chat-panels.js.map +1 -0
- package/dist/src/cli/chat-runtime.d.ts +26 -0
- package/dist/src/cli/chat-runtime.d.ts.map +1 -0
- package/dist/src/cli/chat-runtime.js +28 -0
- package/dist/src/cli/chat-runtime.js.map +1 -0
- package/dist/src/cli/chat-storage.d.ts +13 -0
- package/dist/src/cli/chat-storage.d.ts.map +1 -0
- package/dist/src/cli/chat-storage.js +126 -0
- package/dist/src/cli/chat-storage.js.map +1 -0
- package/dist/src/cli/chat-submit.d.ts +28 -0
- package/dist/src/cli/chat-submit.d.ts.map +1 -0
- package/dist/src/cli/chat-submit.js +90 -0
- package/dist/src/cli/chat-submit.js.map +1 -0
- package/dist/src/cli/chat-types.d.ts +51 -0
- package/dist/src/cli/chat-types.d.ts.map +1 -0
- package/dist/src/cli/chat-types.js +2 -0
- package/dist/src/cli/chat-types.js.map +1 -0
- package/dist/src/cli/chat.d.ts +4 -0
- package/dist/src/cli/chat.d.ts.map +1 -0
- package/dist/src/cli/chat.js +153 -0
- package/dist/src/cli/chat.js.map +1 -0
- package/dist/src/cli/main.d.ts +3 -0
- package/dist/src/cli/main.d.ts.map +1 -0
- package/dist/src/cli/main.js +190 -0
- package/dist/src/cli/main.js.map +1 -0
- package/dist/src/cli/useChatRunState.d.ts +23 -0
- package/dist/src/cli/useChatRunState.d.ts.map +1 -0
- package/dist/src/cli/useChatRunState.js +118 -0
- package/dist/src/cli/useChatRunState.js.map +1 -0
- package/dist/src/cli/useChatSessions.d.ts +21 -0
- package/dist/src/cli/useChatSessions.d.ts.map +1 -0
- package/dist/src/cli/useChatSessions.js +111 -0
- package/dist/src/cli/useChatSessions.js.map +1 -0
- package/dist/src/config.d.ts +4 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +7 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/index.d.ts +36 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +31 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/llm/anthropic.d.ts +7 -0
- package/dist/src/llm/anthropic.d.ts.map +1 -0
- package/dist/src/llm/anthropic.js +115 -0
- package/dist/src/llm/anthropic.js.map +1 -0
- package/dist/src/llm/factory.d.ts +10 -0
- package/dist/src/llm/factory.d.ts.map +1 -0
- package/dist/src/llm/factory.js +53 -0
- package/dist/src/llm/factory.js.map +1 -0
- package/dist/src/llm/openai-models.d.ts +15 -0
- package/dist/src/llm/openai-models.d.ts.map +1 -0
- package/dist/src/llm/openai-models.js +97 -0
- package/dist/src/llm/openai-models.js.map +1 -0
- package/dist/src/llm/openai.d.ts +10 -0
- package/dist/src/llm/openai.d.ts.map +1 -0
- package/dist/src/llm/openai.js +170 -0
- package/dist/src/llm/openai.js.map +1 -0
- package/dist/src/llm/types.d.ts +64 -0
- package/dist/src/llm/types.d.ts.map +1 -0
- package/dist/src/llm/types.js +5 -0
- package/dist/src/llm/types.js.map +1 -0
- package/dist/src/prompts/system-prompt.d.ts +6 -0
- package/dist/src/prompts/system-prompt.d.ts.map +1 -0
- package/dist/src/prompts/system-prompt.js +117 -0
- package/dist/src/prompts/system-prompt.js.map +1 -0
- package/dist/src/run-agent/history.d.ts +3 -0
- package/dist/src/run-agent/history.d.ts.map +1 -0
- package/dist/src/run-agent/history.js +36 -0
- package/dist/src/run-agent/history.js.map +1 -0
- package/dist/src/run-agent/mutation-tracking.d.ts +22 -0
- package/dist/src/run-agent/mutation-tracking.d.ts.map +1 -0
- package/dist/src/run-agent/mutation-tracking.js +116 -0
- package/dist/src/run-agent/mutation-tracking.js.map +1 -0
- package/dist/src/run-agent/post-mutation.d.ts +23 -0
- package/dist/src/run-agent/post-mutation.d.ts.map +1 -0
- package/dist/src/run-agent/post-mutation.js +106 -0
- package/dist/src/run-agent/post-mutation.js.map +1 -0
- package/dist/src/run-agent/progress-reminders.d.ts +13 -0
- package/dist/src/run-agent/progress-reminders.d.ts.map +1 -0
- package/dist/src/run-agent/progress-reminders.js +65 -0
- package/dist/src/run-agent/progress-reminders.js.map +1 -0
- package/dist/src/run-agent/tool-dispatch.d.ts +31 -0
- package/dist/src/run-agent/tool-dispatch.d.ts.map +1 -0
- package/dist/src/run-agent/tool-dispatch.js +114 -0
- package/dist/src/run-agent/tool-dispatch.js.map +1 -0
- package/dist/src/run-agent/util.d.ts +10 -0
- package/dist/src/run-agent/util.d.ts.map +1 -0
- package/dist/src/run-agent/util.js +64 -0
- package/dist/src/run-agent/util.js.map +1 -0
- package/dist/src/run-agent.d.ts +36 -0
- package/dist/src/run-agent.d.ts.map +1 -0
- package/dist/src/run-agent.js +477 -0
- package/dist/src/run-agent.js.map +1 -0
- package/dist/src/tools/edit-file.d.ts +10 -0
- package/dist/src/tools/edit-file.d.ts.map +1 -0
- package/dist/src/tools/edit-file.js +268 -0
- package/dist/src/tools/edit-file.js.map +1 -0
- package/dist/src/tools/execute-tool.d.ts +8 -0
- package/dist/src/tools/execute-tool.d.ts.map +1 -0
- package/dist/src/tools/execute-tool.js +31 -0
- package/dist/src/tools/execute-tool.js.map +1 -0
- package/dist/src/tools/list-files.d.ts +3 -0
- package/dist/src/tools/list-files.d.ts.map +1 -0
- package/dist/src/tools/list-files.js +49 -0
- package/dist/src/tools/list-files.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +3 -0
- package/dist/src/tools/read-file.d.ts.map +1 -0
- package/dist/src/tools/read-file.js +73 -0
- package/dist/src/tools/read-file.js.map +1 -0
- package/dist/src/tools/registry.d.ts +11 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +27 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/report-state.d.ts +3 -0
- package/dist/src/tools/report-state.d.ts.map +1 -0
- package/dist/src/tools/report-state.js +63 -0
- package/dist/src/tools/report-state.js.map +1 -0
- package/dist/src/tools/run-shell.d.ts +41 -0
- package/dist/src/tools/run-shell.d.ts.map +1 -0
- package/dist/src/tools/run-shell.js +407 -0
- package/dist/src/tools/run-shell.js.map +1 -0
- package/dist/src/tools/search-files.d.ts +8 -0
- package/dist/src/tools/search-files.d.ts.map +1 -0
- package/dist/src/tools/search-files.js +86 -0
- package/dist/src/tools/search-files.js.map +1 -0
- package/dist/src/tools/update-plan.d.ts +8 -0
- package/dist/src/tools/update-plan.d.ts.map +1 -0
- package/dist/src/tools/update-plan.js +85 -0
- package/dist/src/tools/update-plan.js.map +1 -0
- package/dist/src/trace/format.d.ts +6 -0
- package/dist/src/trace/format.d.ts.map +1 -0
- package/dist/src/trace/format.js +94 -0
- package/dist/src/trace/format.js.map +1 -0
- package/dist/src/trace/recorder.d.ts +11 -0
- package/dist/src/trace/recorder.d.ts.map +1 -0
- package/dist/src/trace/recorder.js +21 -0
- package/dist/src/trace/recorder.js.map +1 -0
- package/dist/src/types.d.ts +110 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +6 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/budget.d.ts +13 -0
- package/dist/src/utils/budget.d.ts.map +1 -0
- package/dist/src/utils/budget.js +22 -0
- package/dist/src/utils/budget.js.map +1 -0
- package/dist/src/utils/errors.d.ts +14 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +31 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/logger.d.ts +17 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +50 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tool: edit_file
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { access, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { dirname, isAbsolute, relative, resolve } from 'node:path';
|
|
6
|
+
const DIFF_CONTEXT_LINES = 2;
|
|
7
|
+
const MAX_DIFF_PREVIEW_LINES = 80;
|
|
8
|
+
export const editFileTool = {
|
|
9
|
+
name: 'edit_file',
|
|
10
|
+
description: 'Edit a file directly inside the current workspace without going through shell redirection or heredocs. Prefer this over shell commands when you need to create or change file contents. Use { "path", "oldText", "newText" } for an exact replacement, optionally with replaceAll, or use { "path", "content", "createIfMissing" } to overwrite an existing file or create a new one explicitly. This tool only writes inside the current workspace root and returns a structured edit summary.',
|
|
11
|
+
requiresApproval: true,
|
|
12
|
+
parameters: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
additionalProperties: false,
|
|
15
|
+
properties: {
|
|
16
|
+
path: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Workspace-relative path to the file to edit',
|
|
19
|
+
},
|
|
20
|
+
oldText: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Existing text to replace exactly',
|
|
23
|
+
},
|
|
24
|
+
newText: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Replacement text for oldText',
|
|
27
|
+
},
|
|
28
|
+
replaceAll: {
|
|
29
|
+
type: 'boolean',
|
|
30
|
+
description: 'Replace every matching occurrence instead of requiring a single exact match',
|
|
31
|
+
},
|
|
32
|
+
content: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'Full file content to write',
|
|
35
|
+
},
|
|
36
|
+
createIfMissing: {
|
|
37
|
+
type: 'boolean',
|
|
38
|
+
description: 'Allow creating the file if it does not already exist when using content',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
required: ['path'],
|
|
42
|
+
},
|
|
43
|
+
async execute(raw) {
|
|
44
|
+
if (!isEditFileInput(raw)) {
|
|
45
|
+
return {
|
|
46
|
+
ok: false,
|
|
47
|
+
error: 'Invalid input for edit_file. Use either { "path", "oldText", "newText", "replaceAll?" } or { "path", "content", "createIfMissing?" }.',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const workspaceRoot = process.cwd();
|
|
51
|
+
const targetPath = resolve(raw.path);
|
|
52
|
+
if (!isInsideWorkspace(workspaceRoot, targetPath)) {
|
|
53
|
+
return {
|
|
54
|
+
ok: false,
|
|
55
|
+
error: `edit_file only writes inside the current workspace root (${workspaceRoot}). Refusing to modify ${targetPath}.`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if ('content' in raw) {
|
|
59
|
+
return writeFileContent(raw, workspaceRoot, targetPath);
|
|
60
|
+
}
|
|
61
|
+
return replaceFileContent(raw, workspaceRoot, targetPath);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
async function writeFileContent(input, workspaceRoot, targetPath) {
|
|
65
|
+
const existed = await pathExists(targetPath);
|
|
66
|
+
const previousContent = existed ? await readFile(targetPath, 'utf8') : '';
|
|
67
|
+
if (!existed && !input.createIfMissing) {
|
|
68
|
+
return {
|
|
69
|
+
ok: false,
|
|
70
|
+
error: `File does not exist: ${targetPath}. Set createIfMissing to true if you want edit_file to create it.`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
await mkdir(dirname(targetPath), { recursive: true });
|
|
74
|
+
await writeFile(targetPath, input.content, 'utf8');
|
|
75
|
+
return {
|
|
76
|
+
ok: true,
|
|
77
|
+
output: {
|
|
78
|
+
path: toWorkspacePath(workspaceRoot, targetPath),
|
|
79
|
+
action: existed ? 'overwritten' : 'created',
|
|
80
|
+
bytesWritten: Buffer.byteLength(input.content, 'utf8'),
|
|
81
|
+
diff: buildDiffPreview(previousContent, input.content, toWorkspacePath(workspaceRoot, targetPath), existed ? 'overwritten' : 'created'),
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async function replaceFileContent(input, workspaceRoot, targetPath) {
|
|
86
|
+
let current;
|
|
87
|
+
try {
|
|
88
|
+
current = await readFile(targetPath, 'utf8');
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return {
|
|
92
|
+
ok: false,
|
|
93
|
+
error: `Failed to read ${targetPath}: ${error instanceof Error ? error.message : String(error)}`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const matchCount = countOccurrences(current, input.oldText);
|
|
97
|
+
if (matchCount === 0) {
|
|
98
|
+
return {
|
|
99
|
+
ok: false,
|
|
100
|
+
error: `edit_file could not find the requested oldText in ${targetPath}. Read the file again and provide an exact match.`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (matchCount > 1 && !input.replaceAll) {
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
error: `edit_file found ${matchCount} matches for oldText in ${targetPath}. Refine oldText or set replaceAll to true.`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const nextContent = input.replaceAll ? current.split(input.oldText).join(input.newText) : replaceFirst(current, input.oldText, input.newText);
|
|
110
|
+
await writeFile(targetPath, nextContent, 'utf8');
|
|
111
|
+
return {
|
|
112
|
+
ok: true,
|
|
113
|
+
output: {
|
|
114
|
+
path: toWorkspacePath(workspaceRoot, targetPath),
|
|
115
|
+
action: 'replaced',
|
|
116
|
+
matchCount,
|
|
117
|
+
bytesWritten: Buffer.byteLength(nextContent, 'utf8'),
|
|
118
|
+
diff: buildDiffPreview(current, nextContent, toWorkspacePath(workspaceRoot, targetPath), 'replaced'),
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export async function previewEditFileInput(raw, workspaceRoot = process.cwd()) {
|
|
123
|
+
if (!isEditFileInput(raw)) {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
const targetPath = resolve(raw.path);
|
|
127
|
+
if (!isInsideWorkspace(workspaceRoot, targetPath)) {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
const workspacePath = toWorkspacePath(workspaceRoot, targetPath);
|
|
131
|
+
if ('content' in raw) {
|
|
132
|
+
const existed = await pathExists(targetPath);
|
|
133
|
+
if (!existed && !raw.createIfMissing) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
const previousContent = existed ? await readFile(targetPath, 'utf8') : '';
|
|
137
|
+
return buildDiffPreview(previousContent, raw.content, workspacePath, existed ? 'overwritten' : 'created');
|
|
138
|
+
}
|
|
139
|
+
let current;
|
|
140
|
+
try {
|
|
141
|
+
current = await readFile(targetPath, 'utf8');
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
const matchCount = countOccurrences(current, raw.oldText);
|
|
147
|
+
if (matchCount === 0 || (matchCount > 1 && !raw.replaceAll)) {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
const nextContent = raw.replaceAll ? current.split(raw.oldText).join(raw.newText) : replaceFirst(current, raw.oldText, raw.newText);
|
|
151
|
+
return buildDiffPreview(current, nextContent, workspacePath, 'replaced');
|
|
152
|
+
}
|
|
153
|
+
function isEditFileInput(raw) {
|
|
154
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
const input = raw;
|
|
158
|
+
const keys = Object.keys(input);
|
|
159
|
+
const allowedKeys = new Set(['path', 'oldText', 'newText', 'replaceAll', 'content', 'createIfMissing']);
|
|
160
|
+
if (keys.some((key) => !allowedKeys.has(key))) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
if (typeof input.path !== 'string' || !input.path.trim()) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
const hasReplaceShape = typeof input.oldText === 'string' && typeof input.newText === 'string';
|
|
167
|
+
const hasWriteShape = typeof input.content === 'string';
|
|
168
|
+
if (hasReplaceShape === hasWriteShape) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
if (hasReplaceShape) {
|
|
172
|
+
return input.replaceAll === undefined || typeof input.replaceAll === 'boolean';
|
|
173
|
+
}
|
|
174
|
+
return input.createIfMissing === undefined || typeof input.createIfMissing === 'boolean';
|
|
175
|
+
}
|
|
176
|
+
function isInsideWorkspace(workspaceRoot, targetPath) {
|
|
177
|
+
const rel = relative(workspaceRoot, targetPath);
|
|
178
|
+
return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
|
179
|
+
}
|
|
180
|
+
function countOccurrences(content, search) {
|
|
181
|
+
if (!search) {
|
|
182
|
+
return 0;
|
|
183
|
+
}
|
|
184
|
+
let count = 0;
|
|
185
|
+
let index = 0;
|
|
186
|
+
while (true) {
|
|
187
|
+
const nextIndex = content.indexOf(search, index);
|
|
188
|
+
if (nextIndex === -1) {
|
|
189
|
+
return count;
|
|
190
|
+
}
|
|
191
|
+
count++;
|
|
192
|
+
index = nextIndex + search.length;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function replaceFirst(content, search, replacement) {
|
|
196
|
+
const index = content.indexOf(search);
|
|
197
|
+
if (index === -1) {
|
|
198
|
+
return content;
|
|
199
|
+
}
|
|
200
|
+
return `${content.slice(0, index)}${replacement}${content.slice(index + search.length)}`;
|
|
201
|
+
}
|
|
202
|
+
function toWorkspacePath(workspaceRoot, targetPath) {
|
|
203
|
+
const rel = relative(workspaceRoot, targetPath);
|
|
204
|
+
return rel || '.';
|
|
205
|
+
}
|
|
206
|
+
async function pathExists(path) {
|
|
207
|
+
try {
|
|
208
|
+
await access(path);
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function buildDiffPreview(previousContent, nextContent, path, action) {
|
|
216
|
+
const previousLines = splitLines(previousContent);
|
|
217
|
+
const nextLines = splitLines(nextContent);
|
|
218
|
+
const prefix = countCommonPrefix(previousLines, nextLines);
|
|
219
|
+
const suffix = countCommonSuffix(previousLines, nextLines, prefix);
|
|
220
|
+
const previousChangedEnd = previousLines.length - suffix;
|
|
221
|
+
const nextChangedEnd = nextLines.length - suffix;
|
|
222
|
+
const contextStart = Math.max(0, prefix - DIFF_CONTEXT_LINES);
|
|
223
|
+
const previousContextEnd = Math.min(previousLines.length, previousChangedEnd + DIFF_CONTEXT_LINES);
|
|
224
|
+
const nextContextEnd = Math.min(nextLines.length, nextChangedEnd + DIFF_CONTEXT_LINES);
|
|
225
|
+
const lines = [
|
|
226
|
+
`--- ${action === 'created' ? '/dev/null' : `a/${path}`}`,
|
|
227
|
+
`+++ b/${path}`,
|
|
228
|
+
`@@ -${formatHunkRange(contextStart + 1, previousContextEnd - contextStart)} +${formatHunkRange(contextStart + 1, nextContextEnd - contextStart)} @@`,
|
|
229
|
+
...previousLines.slice(contextStart, prefix).map((line) => ` ${line}`),
|
|
230
|
+
...previousLines.slice(prefix, previousChangedEnd).map((line) => `-${line}`),
|
|
231
|
+
...nextLines.slice(prefix, nextChangedEnd).map((line) => `+${line}`),
|
|
232
|
+
...nextLines.slice(nextChangedEnd, nextContextEnd).map((line) => ` ${line}`),
|
|
233
|
+
];
|
|
234
|
+
if (lines.length <= MAX_DIFF_PREVIEW_LINES) {
|
|
235
|
+
return { path, action, diff: lines.join('\n'), truncated: false };
|
|
236
|
+
}
|
|
237
|
+
const truncatedLines = [
|
|
238
|
+
...lines.slice(0, MAX_DIFF_PREVIEW_LINES - 1),
|
|
239
|
+
'... diff preview truncated ...',
|
|
240
|
+
];
|
|
241
|
+
return { path, action, diff: truncatedLines.join('\n'), truncated: true };
|
|
242
|
+
}
|
|
243
|
+
function splitLines(content) {
|
|
244
|
+
if (!content) {
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
return content.replace(/\r\n/g, '\n').split('\n').slice(0, content.endsWith('\n') ? -1 : undefined);
|
|
248
|
+
}
|
|
249
|
+
function countCommonPrefix(previousLines, nextLines) {
|
|
250
|
+
let index = 0;
|
|
251
|
+
while (index < previousLines.length && index < nextLines.length && previousLines[index] === nextLines[index]) {
|
|
252
|
+
index++;
|
|
253
|
+
}
|
|
254
|
+
return index;
|
|
255
|
+
}
|
|
256
|
+
function countCommonSuffix(previousLines, nextLines, prefix) {
|
|
257
|
+
let count = 0;
|
|
258
|
+
while (previousLines.length - count - 1 >= prefix &&
|
|
259
|
+
nextLines.length - count - 1 >= prefix &&
|
|
260
|
+
previousLines[previousLines.length - count - 1] === nextLines[nextLines.length - count - 1]) {
|
|
261
|
+
count++;
|
|
262
|
+
}
|
|
263
|
+
return count;
|
|
264
|
+
}
|
|
265
|
+
function formatHunkRange(start, length) {
|
|
266
|
+
return length === 1 ? `${start}` : `${start},${length}`;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=edit-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../../src/tools/edit-file.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBnE,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,ieAAie;IACne,gBAAgB,EAAE,IAAI;IACtB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;aAC3D;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8BAA8B;aAC5C;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,6EAA6E;aAC3F;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4BAA4B;aAC1C;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,yEAAyE;aACvF;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,KAAK,CAAC,OAAO,CAAC,GAAY;QACxB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EACH,uIAAuI;aAC1I,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;YAClD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,4DAA4D,aAAa,yBAAyB,UAAU,GAAG;aACvH,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;YACrB,OAAO,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC;AAEF,KAAK,UAAU,gBAAgB,CAAC,KAAqB,EAAE,aAAqB,EAAE,UAAkB;IAC9F,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACvC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,wBAAwB,UAAU,mEAAmE;SAC7G,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEnD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE;YACN,IAAI,EAAE,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC;YAChD,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YAC3C,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;YACtD,IAAI,EAAE,gBAAgB,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;SACxI;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,KAAuB,EAAE,aAAqB,EAAE,UAAkB;IAClG,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,kBAAkB,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACjG,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,qDAAqD,UAAU,mDAAmD;SAC1H,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,mBAAmB,UAAU,2BAA2B,UAAU,6CAA6C;SACvH,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GACf,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAE5H,MAAM,SAAS,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAEjD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE;YACN,IAAI,EAAE,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC;YAChD,MAAM,EAAE,UAAU;YAClB,UAAU;YACV,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC;YACpD,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC;SACrG;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAY,EAAE,gBAAwB,OAAO,CAAC,GAAG,EAAE;IAC5F,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEjE,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,gBAAgB,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5G,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,UAAU,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GACf,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAElH,OAAO,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,GAA8B,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACxG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;IAC/F,MAAM,aAAa,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;IAExD,IAAI,eAAe,KAAK,aAAa,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC;IACjF,CAAC;IAED,OAAO,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC;AAC3F,CAAC;AAED,SAAS,iBAAiB,CAAC,aAAqB,EAAE,UAAkB;IAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAChD,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,MAAc;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,EAAE,CAAC;QACR,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,MAAc,EAAE,WAAmB;IACxE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED,SAAS,eAAe,CAAC,aAAqB,EAAE,UAAkB;IAChE,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAChD,OAAO,GAAG,IAAI,GAAG,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,eAAuB,EACvB,WAAmB,EACnB,IAAY,EACZ,MAAiC;IAEjC,MAAM,aAAa,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;IACzD,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC;IAC9D,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,CAAC;IACnG,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAAC,CAAC;IAEvF,MAAM,KAAK,GAAG;QACZ,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE;QACzD,SAAS,IAAI,EAAE;QACf,OAAO,eAAe,CAAC,YAAY,GAAG,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAAC,KAAK,eAAe,CAAC,YAAY,GAAG,CAAC,EAAE,cAAc,GAAG,YAAY,CAAC,KAAK;QACrJ,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACtE,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5E,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACpE,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;KAC7E,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;QAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,cAAc,GAAG;QACrB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,GAAG,CAAC,CAAC;QAC7C,gCAAgC;KACjC,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,iBAAiB,CAAC,aAAuB,EAAE,SAAmB;IACrE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,aAAa,CAAC,MAAM,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7G,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,aAAuB,EAAE,SAAmB,EAAE,MAAc;IACrF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OACE,aAAa,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,IAAI,MAAM;QAC1C,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,IAAI,MAAM;QACtC,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,EAC3F,CAAC;QACD,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,MAAc;IACpD,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolCall, ToolResult } from '../types.js';
|
|
2
|
+
import type { ToolRegistry } from './registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Execute a tool call against the registry.
|
|
5
|
+
* Wraps execution in try/catch and applies a timeout.
|
|
6
|
+
*/
|
|
7
|
+
export declare function executeTool(registry: ToolRegistry, call: ToolCall, timeoutMs?: number): Promise<ToolResult>;
|
|
8
|
+
//# sourceMappingURL=execute-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-tool.d.ts","sourceRoot":"","sources":["../../../src/tools/execute-tool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,QAAQ,EACd,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,UAAU,CAAC,CAuBrB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tool Executor
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
5
|
+
/**
|
|
6
|
+
* Execute a tool call against the registry.
|
|
7
|
+
* Wraps execution in try/catch and applies a timeout.
|
|
8
|
+
*/
|
|
9
|
+
export async function executeTool(registry, call, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
10
|
+
const tool = registry.get(call.tool);
|
|
11
|
+
if (!tool) {
|
|
12
|
+
return {
|
|
13
|
+
ok: false,
|
|
14
|
+
error: `Unknown tool: ${call.tool}. Available tools: ${registry.names().join(', ')}`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const result = await Promise.race([
|
|
19
|
+
tool.execute(call.input),
|
|
20
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Tool "${call.tool}" timed out after ${timeoutMs}ms`)), timeoutMs)),
|
|
21
|
+
]);
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
return {
|
|
26
|
+
ok: false,
|
|
27
|
+
error: err instanceof Error ? err.message : String(err),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=execute-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-tool.js","sourceRoot":"","sources":["../../../src/tools/execute-tool.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAK9E,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAsB,EACtB,IAAc,EACd,YAAoB,kBAAkB;IAEtC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,iBAAiB,IAAI,CAAC,IAAI,sBAAsB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACrF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,OAAO,CAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CACpC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,qBAAqB,SAAS,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CACrG;SACF,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-files.d.ts","sourceRoot":"","sources":["../../../src/tools/list-files.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,aAAa,CAAC;AAM9D,eAAO,MAAM,aAAa,EAAE,cAiC3B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tool: list_files
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { readdir } from 'node:fs/promises';
|
|
5
|
+
import { resolve } from 'node:path';
|
|
6
|
+
export const listFilesTool = {
|
|
7
|
+
name: 'list_files',
|
|
8
|
+
description: 'List files and directories inside a directory path. Use this to inspect folders, not to read file contents. Prefer this when you need an initial view of the workspace or want to explore an obvious nearby folder before using broader search. Relative paths are resolved from the current working directory and may also point to nearby parent or sibling folders, such as "..". Defaults to the current working directory. Returns a flat newline-separated list of entry names; directories end with /. Example inputs: { "path": "." }, { "path": ".." }',
|
|
9
|
+
parameters: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
additionalProperties: false,
|
|
12
|
+
properties: {
|
|
13
|
+
path: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
description: 'Directory path to list. Defaults to "."',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
async execute(raw) {
|
|
20
|
+
if (!isListFilesInput(raw)) {
|
|
21
|
+
return { ok: false, error: 'Invalid input for list_files. Allowed fields: path. Example: { "path": "." }' };
|
|
22
|
+
}
|
|
23
|
+
const input = raw;
|
|
24
|
+
const dir = resolve(input.path ?? '.');
|
|
25
|
+
try {
|
|
26
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
27
|
+
const names = entries.map((e) => (e.isDirectory() ? `${e.name}/` : e.name));
|
|
28
|
+
return { ok: true, output: names.join('\n') };
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
if (err instanceof Error && 'code' in err && err.code === 'ENOTDIR') {
|
|
32
|
+
return { ok: false, error: `Failed to list ${dir}: path is a file, not a directory. Use read_file for file contents.` };
|
|
33
|
+
}
|
|
34
|
+
return { ok: false, error: `Failed to list ${dir}: ${err instanceof Error ? err.message : String(err)}` };
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
function isListFilesInput(raw) {
|
|
39
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const input = raw;
|
|
43
|
+
const keys = Object.keys(input);
|
|
44
|
+
if (keys.some((key) => key !== 'path')) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return input.path === undefined || typeof input.path === 'string';
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=list-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-files.js","sourceRoot":"","sources":["../../../src/tools/list-files.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,iiBAAiiB;IACniB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;aACvD;SACF;KACF;IACD,KAAK,CAAC,OAAO,CAAC,GAAY;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8EAA8E,EAAE,CAAC;QAC9G,CAAC;QAED,MAAM,KAAK,GAAmB,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,GAAG,qEAAqE,EAAE,CAAC;YAC1H,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QAC5G,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,GAA8B,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../../src/tools/read-file.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,aAAa,CAAC;AAQ9D,eAAO,MAAM,YAAY,EAAE,cAuD1B,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tool: read_file
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
import { resolve } from 'node:path';
|
|
6
|
+
export const readFileTool = {
|
|
7
|
+
name: 'read_file',
|
|
8
|
+
description: 'Read the contents of a file. Use this when you already know the file path and want its contents, not when you want to inspect a directory. Relative paths are resolved from the current working directory and may also point to nearby parent or sibling folders. Optionally limit returned lines with maxLines and start from a 0-based line offset with offset, which is useful for paging through long files. Returns the file text directly, or just the selected window when maxLines and/or offset are provided. Example inputs: { "path": "path/to/file.txt" }, { "path": "../shared-notes/summary.md" }, { "path": "src/run-agent.ts", "offset": 200, "maxLines": 120 }',
|
|
9
|
+
parameters: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
additionalProperties: false,
|
|
12
|
+
properties: {
|
|
13
|
+
path: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
description: 'Path to the file to read',
|
|
16
|
+
},
|
|
17
|
+
maxLines: {
|
|
18
|
+
type: 'number',
|
|
19
|
+
description: 'Maximum number of lines to return',
|
|
20
|
+
},
|
|
21
|
+
offset: {
|
|
22
|
+
type: 'number',
|
|
23
|
+
description: '0-based line offset to start reading from',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
required: ['path'],
|
|
27
|
+
},
|
|
28
|
+
async execute(raw) {
|
|
29
|
+
if (!isReadFileInput(raw)) {
|
|
30
|
+
return { ok: false, error: 'Invalid input for read_file. Required field: path. Optional fields: maxLines, offset.' };
|
|
31
|
+
}
|
|
32
|
+
const input = raw;
|
|
33
|
+
const filePath = resolve(input.path);
|
|
34
|
+
try {
|
|
35
|
+
const content = await readFile(filePath, 'utf-8');
|
|
36
|
+
const lines = content.split('\n');
|
|
37
|
+
const start = input.offset && input.offset > 0 ? Math.floor(input.offset) : 0;
|
|
38
|
+
if ((input.maxLines && input.maxLines > 0) || start > 0) {
|
|
39
|
+
const end = input.maxLines && input.maxLines > 0 ? start + Math.floor(input.maxLines) : undefined;
|
|
40
|
+
const windowedLines = lines.slice(start, end);
|
|
41
|
+
const joined = windowedLines.join('\n');
|
|
42
|
+
if (content.endsWith('\n') && windowedLines.length > 0 && end !== undefined && end < lines.length) {
|
|
43
|
+
return { ok: true, output: joined };
|
|
44
|
+
}
|
|
45
|
+
return { ok: true, output: joined };
|
|
46
|
+
}
|
|
47
|
+
return { ok: true, output: content };
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (err instanceof Error && 'code' in err && err.code === 'EISDIR') {
|
|
51
|
+
return { ok: false, error: `Failed to read ${filePath}: path is a directory, not a file. Use list_files to inspect directories.` };
|
|
52
|
+
}
|
|
53
|
+
return { ok: false, error: `Failed to read ${filePath}: ${err instanceof Error ? err.message : String(err)}` };
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
function isReadFileInput(raw) {
|
|
58
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const input = raw;
|
|
62
|
+
const keys = Object.keys(input);
|
|
63
|
+
if (keys.some((key) => key !== 'path' && key !== 'maxLines' && key !== 'offset')) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
if (typeof input.path !== 'string') {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
const validMaxLines = input.maxLines === undefined || typeof input.maxLines === 'number';
|
|
70
|
+
const validOffset = input.offset === undefined || typeof input.offset === 'number';
|
|
71
|
+
return validMaxLines && validOffset;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=read-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../../src/tools/read-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolDefinition } from '../types.js';
|
|
2
|
+
export type ToolRegistry = {
|
|
3
|
+
get(name: string): ToolDefinition | undefined;
|
|
4
|
+
list(): ToolDefinition[];
|
|
5
|
+
names(): string[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Create a registry from an array of tool definitions.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createToolRegistry(tools: ToolDefinition[]): ToolRegistry;
|
|
11
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAC9C,IAAI,IAAI,cAAc,EAAE,CAAC;IACzB,KAAK,IAAI,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,YAAY,CAoBxE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tool Registry
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/**
|
|
5
|
+
* Create a registry from an array of tool definitions.
|
|
6
|
+
*/
|
|
7
|
+
export function createToolRegistry(tools) {
|
|
8
|
+
const map = new Map();
|
|
9
|
+
for (const tool of tools) {
|
|
10
|
+
if (map.has(tool.name)) {
|
|
11
|
+
throw new Error(`Duplicate tool name: ${tool.name}`);
|
|
12
|
+
}
|
|
13
|
+
map.set(tool.name, tool);
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
get(name) {
|
|
17
|
+
return map.get(name);
|
|
18
|
+
},
|
|
19
|
+
list() {
|
|
20
|
+
return [...map.values()];
|
|
21
|
+
},
|
|
22
|
+
names() {
|
|
23
|
+
return [...map.keys()];
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAU9E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAuB;IACxD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,GAAG,CAAC,IAAY;YACd,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,IAAI;YACF,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK;YACH,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-state.d.ts","sourceRoot":"","sources":["../../../src/tools/report-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,aAAa,CAAC;AAQ9D,eAAO,MAAM,eAAe,EAAE,cAmC7B,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tool: report_state
|
|
3
|
+
// Record current rationale, uncertainty, or missing needs in a structured way.
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
export const reportStateTool = {
|
|
6
|
+
name: 'report_state',
|
|
7
|
+
description: 'Report your current reasoning state in a structured way. Use this when you are blocked, uncertain, missing information, recovering from repeated low-value exploration, or about to take a speculative path. This does not inspect or change the environment. It records what is missing and the single most important next thing you need. Use it to tell the library author what capability, input, or support was missing so future agents are less likely to get stuck on the same problem. Returns the same structured report back. Example input: { "rationale": "I need to inspect the top-level directory first.", "missing": ["Top-level directory contents"], "nextNeed": "list_files on ." }',
|
|
8
|
+
parameters: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
additionalProperties: false,
|
|
11
|
+
properties: {
|
|
12
|
+
rationale: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
description: 'Why you are taking or considering the next step',
|
|
15
|
+
},
|
|
16
|
+
missing: {
|
|
17
|
+
type: 'array',
|
|
18
|
+
items: { type: 'string' },
|
|
19
|
+
description: 'Information or evidence you are missing',
|
|
20
|
+
},
|
|
21
|
+
nextNeed: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'The single most important next thing you need, such as a tool call, input, or piece of evidence',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
required: ['rationale'],
|
|
27
|
+
},
|
|
28
|
+
async execute(raw) {
|
|
29
|
+
if (!isReportStateInput(raw)) {
|
|
30
|
+
return {
|
|
31
|
+
ok: false,
|
|
32
|
+
error: 'Invalid input for report_state. Required field: rationale. Optional fields: missing, nextNeed.',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return { ok: true, output: raw };
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
function isReportStateInput(raw) {
|
|
39
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const input = raw;
|
|
43
|
+
const keys = Object.keys(input);
|
|
44
|
+
if (keys.some((key) => key !== 'rationale' &&
|
|
45
|
+
key !== 'missing' &&
|
|
46
|
+
key !== 'nextNeed')) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
if (typeof input.rationale !== 'string') {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (input.missing !== undefined && !isStringArray(input.missing)) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
if (input.nextNeed !== undefined && typeof input.nextNeed !== 'string') {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
function isStringArray(value) {
|
|
61
|
+
return Array.isArray(value) && value.every((item) => typeof item === 'string');
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=report-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-state.js","sourceRoot":"","sources":["../../../src/tools/report-state.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qBAAqB;AACrB,+EAA+E;AAC/E,8EAA8E;AAU9E,MAAM,CAAC,MAAM,eAAe,GAAmB;IAC7C,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,yqBAAyqB;IAC3qB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iDAAiD;aAC/D;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,yCAAyC;aACvD;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iGAAiG;aAC/G;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD,KAAK,CAAC,OAAO,CAAC,GAAY;QACxB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EACH,gGAAgG;aACnG,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;CACF,CAAC;AAEF,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,GAA8B,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IACE,IAAI,CAAC,IAAI,CACP,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,KAAK,WAAW;QACnB,GAAG,KAAK,SAAS;QACjB,GAAG,KAAK,UAAU,CACrB,EACD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AACjF,CAAC"}
|