@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,85 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tool: update_plan
|
|
3
|
+
// Record a concise working plan with item statuses for substantial tasks.
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
export const updatePlanTool = {
|
|
6
|
+
name: 'update_plan',
|
|
7
|
+
description: 'Record or revise a short working plan for substantial multi-step tasks. Use this when the task has multiple concrete steps, when you need to show progress explicitly, or when you want the operator to see what remains. Keep the plan short and practical. Each item must have a step string and a status of pending, in_progress, or completed. At most one item may be in_progress at a time. Returns the saved plan back.',
|
|
8
|
+
parameters: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
additionalProperties: false,
|
|
11
|
+
properties: {
|
|
12
|
+
explanation: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
description: 'Optional one-line note about why the plan changed or what you are doing now.',
|
|
15
|
+
},
|
|
16
|
+
plan: {
|
|
17
|
+
type: 'array',
|
|
18
|
+
description: 'Short checklist of concrete plan items.',
|
|
19
|
+
items: {
|
|
20
|
+
type: 'object',
|
|
21
|
+
additionalProperties: false,
|
|
22
|
+
properties: {
|
|
23
|
+
step: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'Concrete plan item.',
|
|
26
|
+
},
|
|
27
|
+
status: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
enum: ['pending', 'in_progress', 'completed'],
|
|
30
|
+
description: 'Current status for this plan item.',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
required: ['step', 'status'],
|
|
34
|
+
},
|
|
35
|
+
minItems: 1,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
required: ['plan'],
|
|
39
|
+
},
|
|
40
|
+
async execute(raw) {
|
|
41
|
+
if (!isUpdatePlanInput(raw)) {
|
|
42
|
+
return {
|
|
43
|
+
ok: false,
|
|
44
|
+
error: 'Invalid input for update_plan. Required field: plan. Optional field: explanation. Each plan item must have step and status (pending, in_progress, completed), with at most one in_progress item.',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return { ok: true, output: raw };
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
function isUpdatePlanInput(raw) {
|
|
51
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const input = raw;
|
|
55
|
+
const keys = Object.keys(input);
|
|
56
|
+
if (keys.some((key) => key !== 'explanation' && key !== 'plan')) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (input.explanation !== undefined && typeof input.explanation !== 'string') {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
if (!Array.isArray(input.plan) || input.plan.length === 0) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
let inProgressCount = 0;
|
|
66
|
+
for (const item of input.plan) {
|
|
67
|
+
if (!item || typeof item !== 'object' || Array.isArray(item)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
const candidate = item;
|
|
71
|
+
if (typeof candidate.step !== 'string') {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
if (candidate.status !== 'pending' &&
|
|
75
|
+
candidate.status !== 'in_progress' &&
|
|
76
|
+
candidate.status !== 'completed') {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (candidate.status === 'in_progress') {
|
|
80
|
+
inProgressCount++;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return inProgressCount <= 1;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=update-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-plan.js","sourceRoot":"","sources":["../../../src/tools/update-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/trace/format.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9C;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAqGjE"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Trace Formatter — human-readable console output
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
const COLORS = {
|
|
5
|
+
reset: '\x1b[0m',
|
|
6
|
+
dim: '\x1b[2m',
|
|
7
|
+
bold: '\x1b[1m',
|
|
8
|
+
cyan: '\x1b[36m',
|
|
9
|
+
green: '\x1b[32m',
|
|
10
|
+
yellow: '\x1b[33m',
|
|
11
|
+
red: '\x1b[31m',
|
|
12
|
+
magenta: '\x1b[35m',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Format a trace for console display.
|
|
16
|
+
*/
|
|
17
|
+
export function formatTraceForConsole(trace) {
|
|
18
|
+
const lines = [];
|
|
19
|
+
for (const event of trace) {
|
|
20
|
+
switch (event.type) {
|
|
21
|
+
case 'run.started':
|
|
22
|
+
lines.push(`${COLORS.bold}${COLORS.cyan}▶ RUN STARTED${COLORS.reset} ${COLORS.dim}${event.timestamp}${COLORS.reset}`, ` Goal: ${event.goal}`, '');
|
|
23
|
+
break;
|
|
24
|
+
case 'assistant.turn': {
|
|
25
|
+
const requestedToolNames = event.toolCalls?.map((call) => call.tool) ?? [];
|
|
26
|
+
lines.push(`${COLORS.magenta} [step ${event.step}]${COLORS.reset} ${COLORS.bold}Assistant:${COLORS.reset}`);
|
|
27
|
+
if (event.content) {
|
|
28
|
+
lines.push(` ${truncate(event.content, 500)}`);
|
|
29
|
+
}
|
|
30
|
+
else if (event.requestedTools) {
|
|
31
|
+
lines.push(` (no text content; requested ${requestedToolNames.length} tool call${requestedToolNames.length === 1 ? '' : 's'})`);
|
|
32
|
+
}
|
|
33
|
+
if (event.requestedTools) {
|
|
34
|
+
lines.push(` Requested Tools: ${requestedToolNames.join(', ')} (${requestedToolNames.length})`);
|
|
35
|
+
}
|
|
36
|
+
if (event.diagnostics?.missing?.length) {
|
|
37
|
+
lines.push(` Missing: ${event.diagnostics.missing.join('; ')}`);
|
|
38
|
+
}
|
|
39
|
+
if (event.diagnostics?.wantedTools?.length) {
|
|
40
|
+
lines.push(` Wanted Tools: ${event.diagnostics.wantedTools.join(', ')}`);
|
|
41
|
+
}
|
|
42
|
+
if (event.diagnostics?.wantedInputs?.length) {
|
|
43
|
+
lines.push(` Wanted Inputs: ${event.diagnostics.wantedInputs.join('; ')}`);
|
|
44
|
+
}
|
|
45
|
+
lines.push('');
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
case 'tool.call':
|
|
49
|
+
lines.push(`${COLORS.yellow} [step ${event.step}]${COLORS.reset} ${COLORS.bold}Tool Call:${COLORS.reset} ${event.call.tool}`, ` Input: ${truncate(JSON.stringify(event.call.input), 200)}`);
|
|
50
|
+
break;
|
|
51
|
+
case 'tool.approval_requested':
|
|
52
|
+
lines.push(`${COLORS.yellow} [step ${event.step}]${COLORS.reset} ${COLORS.bold}Approval Required:${COLORS.reset} ${event.call.tool}`, ` Input: ${truncate(JSON.stringify(event.call.input), 200)}`);
|
|
53
|
+
break;
|
|
54
|
+
case 'tool.approval_resolved':
|
|
55
|
+
lines.push(`${event.approved ? COLORS.green : COLORS.red} [step ${event.step}]${COLORS.reset} ${COLORS.bold}Approval ${event.approved ? 'Granted' : 'Denied'}:${COLORS.reset} ${event.call.tool}`, ` Reason: ${event.reason ?? (event.approved ? 'approved' : 'no reason provided')}`);
|
|
56
|
+
break;
|
|
57
|
+
case 'tool.fallback':
|
|
58
|
+
lines.push(`${COLORS.yellow} [step ${event.step}]${COLORS.reset} ${COLORS.bold}Tool Fallback:${COLORS.reset} ${event.fromCall.tool} → ${event.toCall.tool}`, ` Reason: ${event.reason}`, ` Command: ${truncate(JSON.stringify(event.toCall.input), 200)}`);
|
|
59
|
+
break;
|
|
60
|
+
case 'tool.result': {
|
|
61
|
+
const color = event.result.ok ? COLORS.green : COLORS.red;
|
|
62
|
+
const status = event.result.ok ? '✓' : '✗';
|
|
63
|
+
const content = event.result.ok
|
|
64
|
+
? formatToolResultOutput(event.result.output)
|
|
65
|
+
: `ERROR: ${event.result.error}`;
|
|
66
|
+
lines.push(`${color} ${status} ${event.tool}${COLORS.reset}: ${content}`, '');
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case 'run.finished': {
|
|
70
|
+
const outcomeColor = event.outcome === 'done' ? COLORS.green
|
|
71
|
+
: event.outcome === 'max_steps' ? COLORS.yellow
|
|
72
|
+
: COLORS.red;
|
|
73
|
+
lines.push(`${COLORS.bold}${outcomeColor}■ RUN FINISHED${COLORS.reset} outcome=${event.outcome} ${COLORS.dim}${event.timestamp}${COLORS.reset}`, ` Summary: ${event.summary}`, '');
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return lines.join('\n');
|
|
79
|
+
}
|
|
80
|
+
function truncate(str, maxLen) {
|
|
81
|
+
if (str.length <= maxLen)
|
|
82
|
+
return str;
|
|
83
|
+
return str.slice(0, maxLen) + '…';
|
|
84
|
+
}
|
|
85
|
+
function formatToolResultOutput(output) {
|
|
86
|
+
if (output == null) {
|
|
87
|
+
return '';
|
|
88
|
+
}
|
|
89
|
+
if (typeof output === 'string') {
|
|
90
|
+
return truncate(output, 300);
|
|
91
|
+
}
|
|
92
|
+
return truncate(JSON.stringify(output, null, 2), 300);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/trace/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TraceEvent } from '../types.js';
|
|
2
|
+
export type TraceRecorder = {
|
|
3
|
+
record(event: TraceEvent): void;
|
|
4
|
+
getTrace(): TraceEvent[];
|
|
5
|
+
toJSON(): string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Create a trace recorder that accumulates events in memory.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createTraceRecorder(): TraceRecorder;
|
|
11
|
+
//# sourceMappingURL=recorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../../src/trace/recorder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,QAAQ,IAAI,UAAU,EAAE,CAAC;IACzB,MAAM,IAAI,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAcnD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Trace Recorder
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/**
|
|
5
|
+
* Create a trace recorder that accumulates events in memory.
|
|
6
|
+
*/
|
|
7
|
+
export function createTraceRecorder() {
|
|
8
|
+
const events = [];
|
|
9
|
+
return {
|
|
10
|
+
record(event) {
|
|
11
|
+
events.push(event);
|
|
12
|
+
},
|
|
13
|
+
getTrace() {
|
|
14
|
+
return [...events];
|
|
15
|
+
},
|
|
16
|
+
toJSON() {
|
|
17
|
+
return JSON.stringify(events, null, 2);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../../src/trace/recorder.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAU9E;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,OAAO;QACL,MAAM,CAAC,KAAiB;YACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,QAAQ;YACN,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;QACrB,CAAC;QACD,MAAM;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { ChatMessage, LlmUsage } from './llm/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Input to the agent loop.
|
|
4
|
+
*/
|
|
5
|
+
export type RunInput = {
|
|
6
|
+
goal: string;
|
|
7
|
+
maxSteps?: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A tool the agent can invoke.
|
|
11
|
+
*/
|
|
12
|
+
export type ToolDefinition = {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
requiresApproval?: boolean;
|
|
16
|
+
parameters: Record<string, unknown>;
|
|
17
|
+
execute: (input: unknown) => Promise<ToolResult>;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* What the model asked the runtime to do.
|
|
21
|
+
*/
|
|
22
|
+
export type ToolCall = {
|
|
23
|
+
id: string;
|
|
24
|
+
tool: string;
|
|
25
|
+
input: unknown;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Optional self-reported assistant diagnostics for observability.
|
|
29
|
+
*/
|
|
30
|
+
export type AssistantDiagnostics = {
|
|
31
|
+
rationale?: string;
|
|
32
|
+
missing?: string[];
|
|
33
|
+
wantedTools?: string[];
|
|
34
|
+
wantedInputs?: string[];
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* What came back from executing a tool.
|
|
38
|
+
*/
|
|
39
|
+
export type ToolResult = {
|
|
40
|
+
ok: boolean;
|
|
41
|
+
output?: unknown;
|
|
42
|
+
error?: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Why the run stopped.
|
|
46
|
+
*/
|
|
47
|
+
export type StopReason = 'done' | 'max_steps' | 'error' | 'interrupted';
|
|
48
|
+
/**
|
|
49
|
+
* A single event in the run trace. Discriminated union on `type`.
|
|
50
|
+
*/
|
|
51
|
+
export type TraceEvent = {
|
|
52
|
+
type: 'run.started';
|
|
53
|
+
goal: string;
|
|
54
|
+
timestamp: string;
|
|
55
|
+
} | {
|
|
56
|
+
type: 'assistant.turn';
|
|
57
|
+
content: string;
|
|
58
|
+
requestedTools: boolean;
|
|
59
|
+
diagnostics?: AssistantDiagnostics;
|
|
60
|
+
toolCalls?: ToolCall[];
|
|
61
|
+
step: number;
|
|
62
|
+
timestamp: string;
|
|
63
|
+
} | {
|
|
64
|
+
type: 'tool.approval_requested';
|
|
65
|
+
call: ToolCall;
|
|
66
|
+
step: number;
|
|
67
|
+
timestamp: string;
|
|
68
|
+
} | {
|
|
69
|
+
type: 'tool.approval_resolved';
|
|
70
|
+
call: ToolCall;
|
|
71
|
+
approved: boolean;
|
|
72
|
+
reason?: string;
|
|
73
|
+
step: number;
|
|
74
|
+
timestamp: string;
|
|
75
|
+
} | {
|
|
76
|
+
type: 'tool.fallback';
|
|
77
|
+
fromCall: ToolCall;
|
|
78
|
+
toCall: ToolCall;
|
|
79
|
+
reason: string;
|
|
80
|
+
step: number;
|
|
81
|
+
timestamp: string;
|
|
82
|
+
} | {
|
|
83
|
+
type: 'tool.call';
|
|
84
|
+
call: ToolCall;
|
|
85
|
+
step: number;
|
|
86
|
+
timestamp: string;
|
|
87
|
+
} | {
|
|
88
|
+
type: 'tool.result';
|
|
89
|
+
tool: string;
|
|
90
|
+
result: ToolResult;
|
|
91
|
+
step: number;
|
|
92
|
+
timestamp: string;
|
|
93
|
+
} | {
|
|
94
|
+
type: 'run.finished';
|
|
95
|
+
outcome: StopReason;
|
|
96
|
+
summary: string;
|
|
97
|
+
step: number;
|
|
98
|
+
timestamp: string;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* The result returned from `runAgent`.
|
|
102
|
+
*/
|
|
103
|
+
export type RunResult = {
|
|
104
|
+
outcome: StopReason;
|
|
105
|
+
summary: string;
|
|
106
|
+
trace: TraceEvent[];
|
|
107
|
+
transcript: ChatMessage[];
|
|
108
|
+
usage?: LlmUsage;
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Heddle v0 — Core Types
|
|
3
|
+
// Minimal types only. No premature abstractions.
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yBAAyB;AACzB,iDAAiD;AACjD,8EAA8E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type Budget = {
|
|
2
|
+
/** Consume one step. Returns the new remaining count. */
|
|
3
|
+
step(): number;
|
|
4
|
+
/** How many steps remain. */
|
|
5
|
+
remaining(): number;
|
|
6
|
+
/** Whether the budget has been exhausted. */
|
|
7
|
+
exhausted(): boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Create a budget that allows up to `maxSteps` iterations.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createBudget(maxSteps: number): Budget;
|
|
13
|
+
//# sourceMappingURL=budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../../src/utils/budget.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,MAAM,GAAG;IACnB,yDAAyD;IACzD,IAAI,IAAI,MAAM,CAAC;IACf,6BAA6B;IAC7B,SAAS,IAAI,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,IAAI,OAAO,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAerD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Budget — simple step counter
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/**
|
|
5
|
+
* Create a budget that allows up to `maxSteps` iterations.
|
|
6
|
+
*/
|
|
7
|
+
export function createBudget(maxSteps) {
|
|
8
|
+
let used = 0;
|
|
9
|
+
return {
|
|
10
|
+
step() {
|
|
11
|
+
used++;
|
|
12
|
+
return maxSteps - used;
|
|
13
|
+
},
|
|
14
|
+
remaining() {
|
|
15
|
+
return maxSteps - used;
|
|
16
|
+
},
|
|
17
|
+
exhausted() {
|
|
18
|
+
return used >= maxSteps;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../../src/utils/budget.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAW9E;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,OAAO;QACL,IAAI;YACF,IAAI,EAAE,CAAC;YACP,OAAO,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,SAAS;YACP,OAAO,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,SAAS;YACP,OAAO,IAAI,IAAI,QAAQ,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class HeddleError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class ToolExecutionError extends HeddleError {
|
|
5
|
+
readonly toolName: string;
|
|
6
|
+
constructor(toolName: string, message: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class LlmError extends HeddleError {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class BudgetExhaustedError extends HeddleError {
|
|
12
|
+
constructor(maxSteps: number);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAKA,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,WAAW;aAE/B,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM,EAChC,OAAO,EAAE,MAAM;CAKlB;AAED,qBAAa,QAAS,SAAQ,WAAW;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,WAAW;gBACvC,QAAQ,EAAE,MAAM;CAI7B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Error Types
|
|
3
|
+
// Minimal — just enough for the loop to distinguish error kinds.
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
export class HeddleError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'HeddleError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class ToolExecutionError extends HeddleError {
|
|
12
|
+
toolName;
|
|
13
|
+
constructor(toolName, message) {
|
|
14
|
+
super(`Tool "${toolName}": ${message}`);
|
|
15
|
+
this.toolName = toolName;
|
|
16
|
+
this.name = 'ToolExecutionError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class LlmError extends HeddleError {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'LlmError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class BudgetExhaustedError extends HeddleError {
|
|
26
|
+
constructor(maxSteps) {
|
|
27
|
+
super(`Budget exhausted after ${maxSteps} steps`);
|
|
28
|
+
this.name = 'BudgetExhaustedError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc;AACd,iEAAiE;AACjE,8EAA8E;AAE9E,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAE/B;IADlB,YACkB,QAAgB,EAChC,OAAe;QAEf,KAAK,CAAC,SAAS,QAAQ,MAAM,OAAO,EAAE,CAAC,CAAC;QAHxB,aAAQ,GAAR,QAAQ,CAAQ;QAIhC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,WAAW;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD,YAAY,QAAgB;QAC1B,KAAK,CAAC,0BAA0B,QAAQ,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
export type CreateLoggerOptions = {
|
|
3
|
+
pretty?: boolean;
|
|
4
|
+
level?: string;
|
|
5
|
+
logFilePath?: string;
|
|
6
|
+
console?: boolean;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Create a Heddle logger.
|
|
10
|
+
* Uses pino-pretty transport when `pretty` is true (intended for local dev).
|
|
11
|
+
*/
|
|
12
|
+
export declare function createLogger(options?: CreateLoggerOptions): pino.Logger;
|
|
13
|
+
/**
|
|
14
|
+
* Default logger instance.
|
|
15
|
+
*/
|
|
16
|
+
export declare const logger: pino.Logger<never, boolean>;
|
|
17
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAMA,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAAC,MAAM,CAoC3E;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,6BAAiB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Logger — pino-based, with pino-pretty for local development
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { mkdirSync } from 'node:fs';
|
|
5
|
+
import { dirname } from 'node:path';
|
|
6
|
+
import pino from 'pino';
|
|
7
|
+
import pinoPretty from 'pino-pretty';
|
|
8
|
+
/**
|
|
9
|
+
* Create a Heddle logger.
|
|
10
|
+
* Uses pino-pretty transport when `pretty` is true (intended for local dev).
|
|
11
|
+
*/
|
|
12
|
+
export function createLogger(options = {}) {
|
|
13
|
+
const level = options.level ?? 'info';
|
|
14
|
+
const prettyOutput = options.pretty ?? process.env.NODE_ENV !== 'production';
|
|
15
|
+
const consoleOutput = options.console ?? true;
|
|
16
|
+
const streams = [];
|
|
17
|
+
if (consoleOutput) {
|
|
18
|
+
if (prettyOutput) {
|
|
19
|
+
streams.push({
|
|
20
|
+
stream: pinoPretty({
|
|
21
|
+
colorize: true,
|
|
22
|
+
translateTime: 'HH:MM:ss.l',
|
|
23
|
+
ignore: 'pid,hostname',
|
|
24
|
+
}),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
streams.push({ stream: process.stdout });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (options.logFilePath) {
|
|
32
|
+
mkdirSync(dirname(options.logFilePath), { recursive: true });
|
|
33
|
+
streams.push({
|
|
34
|
+
stream: pino.destination({
|
|
35
|
+
dest: options.logFilePath,
|
|
36
|
+
sync: false,
|
|
37
|
+
mkdir: true,
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (streams.length === 0) {
|
|
42
|
+
return pino({ level }, pino.destination('/dev/null'));
|
|
43
|
+
}
|
|
44
|
+
return pino({ level }, pino.multistream(streams));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Default logger instance.
|
|
48
|
+
*/
|
|
49
|
+
export const logger = createLogger();
|
|
50
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,UAAU,MAAM,aAAa,CAAC;AASrC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC7E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9C,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,UAAU,CAAC;oBACjB,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,YAAY;oBAC3B,MAAM,EAAE,cAAc;iBACvB,CAAC;aACH,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;gBACvB,IAAI,EAAE,OAAO,CAAC,WAAW;gBACzB,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,IAAI;aACZ,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@roackb2/heddle",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "A minimal TypeScript runtime for tool-using agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"heddle": "dist/src/cli/main.js"
|
|
11
|
+
},
|
|
12
|
+
"main": "dist/src/index.js",
|
|
13
|
+
"types": "dist/src/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"README.md",
|
|
17
|
+
"LICENSE"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsx --no-cache examples/repo-investigator.ts",
|
|
22
|
+
"chat": "tsx --no-cache examples/conversation.tsx",
|
|
23
|
+
"chat:light": "OPENAI_MODEL=gpt-5.1-codex-mini tsx --no-cache examples/conversation.tsx",
|
|
24
|
+
"repo-investigator:dev": "OPENAI_API_KEY=\"$PERSONAL_OPENAI_API_KEY\" tsx --no-cache examples/repo-investigator.ts",
|
|
25
|
+
"chat:dev": "tsx --no-cache examples/conversation.tsx",
|
|
26
|
+
"chat:dev:openai": "OPENAI_API_KEY=\"$PERSONAL_OPENAI_API_KEY\" tsx --no-cache examples/conversation.tsx",
|
|
27
|
+
"chat:dev:openai:light": "OPENAI_API_KEY=\"$PERSONAL_OPENAI_API_KEY\" OPENAI_MODEL=gpt-5.1-codex-mini tsx --no-cache examples/conversation.tsx",
|
|
28
|
+
"chat:dev:anthropic": "ANTHROPIC_API_KEY=\"$PERSONAL_ANTHROPIC_API_KEY\" tsx --no-cache examples/conversation.tsx",
|
|
29
|
+
"test": "vitest run src/__tests__",
|
|
30
|
+
"prepare": "yarn build"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"agent",
|
|
34
|
+
"llm",
|
|
35
|
+
"tools",
|
|
36
|
+
"runtime",
|
|
37
|
+
"trace"
|
|
38
|
+
],
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@anthropic-ai/sdk": "^0.54.0",
|
|
42
|
+
"@inkjs/ui": "^2.0.0",
|
|
43
|
+
"ink": "^6.8.0",
|
|
44
|
+
"openai": "^4.86.2",
|
|
45
|
+
"pino": "^10.3.1",
|
|
46
|
+
"react": "^19.2.4"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^22.13.10",
|
|
50
|
+
"@types/react": "^19.2.14",
|
|
51
|
+
"@vitest/coverage-v8": "^4.1.2",
|
|
52
|
+
"pino-pretty": "^13.1.3",
|
|
53
|
+
"tsx": "^4.19.3",
|
|
54
|
+
"typescript": "^5.8.2",
|
|
55
|
+
"vitest": "4.1.2"
|
|
56
|
+
}
|
|
57
|
+
}
|