lonny-agent 0.2.6 → 0.2.7
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/.github/workflows/ci.yml +21 -0
- package/AGENTS.md +106 -0
- package/CHANGELOG.md +24 -0
- package/dist/agent/__tests__/session-restore.test.d.ts +2 -0
- package/dist/agent/__tests__/session-restore.test.d.ts.map +1 -0
- package/dist/agent/__tests__/session-restore.test.js +260 -0
- package/dist/agent/__tests__/session-restore.test.js.map +1 -0
- package/dist/agent/commands.d.ts +26 -0
- package/dist/agent/commands.d.ts.map +1 -0
- package/dist/agent/commands.js +253 -0
- package/dist/agent/commands.js.map +1 -0
- package/dist/agent/compaction.js +8 -1
- package/dist/agent/compaction.js.map +1 -1
- package/dist/agent/index.d.ts +2 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -2
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/memory.d.ts +12 -0
- package/dist/agent/memory.d.ts.map +1 -0
- package/dist/agent/memory.js +51 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/prompt-builder.d.ts +6 -1
- package/dist/agent/prompt-builder.d.ts.map +1 -1
- package/dist/agent/prompt-builder.js +89 -26
- package/dist/agent/prompt-builder.js.map +1 -1
- package/dist/agent/providers/openai.d.ts +1 -0
- package/dist/agent/providers/openai.d.ts.map +1 -1
- package/dist/agent/providers/openai.js +16 -3
- package/dist/agent/providers/openai.js.map +1 -1
- package/dist/agent/session-chat.d.ts +3 -0
- package/dist/agent/session-chat.d.ts.map +1 -0
- package/dist/agent/session-chat.js +384 -0
- package/dist/agent/session-chat.js.map +1 -0
- package/dist/agent/session-display.d.ts +29 -0
- package/dist/agent/session-display.d.ts.map +1 -0
- package/dist/agent/session-display.js +179 -0
- package/dist/agent/session-display.js.map +1 -0
- package/dist/agent/session-persistence.d.ts +55 -0
- package/dist/agent/session-persistence.d.ts.map +1 -0
- package/dist/agent/session-persistence.js +101 -0
- package/dist/agent/session-persistence.js.map +1 -0
- package/dist/agent/session-utils.d.ts +5 -0
- package/dist/agent/session-utils.d.ts.map +1 -0
- package/dist/agent/session-utils.js +51 -0
- package/dist/agent/session-utils.js.map +1 -0
- package/dist/agent/session.d.ts +15 -17
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +226 -608
- package/dist/agent/session.js.map +1 -1
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +67 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/tools/__tests__/bash.test.js +168 -1
- package/dist/tools/__tests__/bash.test.js.map +1 -1
- package/dist/tools/__tests__/edit.test.js +253 -6
- package/dist/tools/__tests__/edit.test.js.map +1 -1
- package/dist/tools/__tests__/fetch.test.js +1 -1
- package/dist/tools/__tests__/fetch.test.js.map +1 -1
- package/dist/tools/__tests__/glob.test.js +1 -1
- package/dist/tools/__tests__/glob.test.js.map +1 -1
- package/dist/tools/__tests__/grep.test.js +1 -1
- package/dist/tools/__tests__/grep.test.js.map +1 -1
- package/dist/tools/__tests__/ls.test.js +1 -1
- package/dist/tools/__tests__/ls.test.js.map +1 -1
- package/dist/tools/__tests__/read.test.js +1 -1
- package/dist/tools/__tests__/read.test.js.map +1 -1
- package/dist/tools/__tests__/registry.test.js +313 -0
- package/dist/tools/__tests__/registry.test.js.map +1 -1
- package/dist/tools/__tests__/write_plan.test.js +1 -1
- package/dist/tools/__tests__/write_plan.test.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +659 -39
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/codebase/ast/__tests__/ast-edit-demo.d.ts +2 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-demo.d.ts.map +1 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-demo.js +7 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-demo.js.map +1 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-final.d.ts +6 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-final.d.ts.map +1 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-final.js +11 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-final.js.map +1 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-test.d.ts +2 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-test.d.ts.map +1 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-test.js +9 -0
- package/dist/tools/codebase/ast/__tests__/ast-edit-test.js.map +1 -0
- package/dist/tools/codebase/ast/__tests__/integration.test.d.ts +2 -0
- package/dist/tools/codebase/ast/__tests__/integration.test.d.ts.map +1 -0
- package/dist/tools/codebase/ast/__tests__/integration.test.js +415 -0
- package/dist/tools/codebase/ast/__tests__/integration.test.js.map +1 -0
- package/dist/tools/codebase/ast/__tests__/tree-sitter.test.d.ts +2 -0
- package/dist/tools/codebase/ast/__tests__/tree-sitter.test.d.ts.map +1 -0
- package/dist/tools/codebase/ast/__tests__/tree-sitter.test.js +414 -0
- package/dist/tools/codebase/ast/__tests__/tree-sitter.test.js.map +1 -0
- package/dist/tools/codebase/ast/adapter.d.ts +23 -0
- package/dist/tools/codebase/ast/adapter.d.ts.map +1 -0
- package/dist/tools/codebase/ast/adapter.js +11 -0
- package/dist/tools/codebase/ast/adapter.js.map +1 -0
- package/dist/tools/codebase/ast/tools.d.ts +3 -0
- package/dist/tools/codebase/ast/tools.d.ts.map +1 -0
- package/dist/tools/codebase/ast/tools.js +286 -0
- package/dist/tools/codebase/ast/tools.js.map +1 -0
- package/dist/tools/codebase/ast/tree-sitter-adapter.d.ts +3 -0
- package/dist/tools/codebase/ast/tree-sitter-adapter.d.ts.map +1 -0
- package/dist/tools/codebase/ast/tree-sitter-adapter.js +412 -0
- package/dist/tools/codebase/ast/tree-sitter-adapter.js.map +1 -0
- package/dist/tools/codebase/ast/tree-sitter-converters.d.ts +4 -0
- package/dist/tools/codebase/ast/tree-sitter-converters.d.ts.map +1 -0
- package/dist/tools/codebase/ast/tree-sitter-converters.js +447 -0
- package/dist/tools/codebase/ast/tree-sitter-converters.js.map +1 -0
- package/dist/tools/codebase/ast/types.d.ts +103 -0
- package/dist/tools/codebase/ast/types.d.ts.map +1 -0
- package/dist/tools/codebase/ast/types.js +2 -0
- package/dist/tools/codebase/ast/types.js.map +1 -0
- package/dist/tools/codebase/ast/wasm/tree-sitter-python.wasm +0 -0
- package/dist/tools/codebase/ast/wasm/tree-sitter-tsx.wasm +0 -0
- package/dist/tools/codebase/ast/wasm/tree-sitter-typescript.wasm +0 -0
- package/dist/tools/codebase/ast/wasm/tree-sitter.wasm +0 -0
- package/dist/tools/codebase/ast/wasm/web-tree-sitter.wasm +0 -0
- package/dist/tools/codebase/find.d.ts +3 -0
- package/dist/tools/codebase/find.d.ts.map +1 -0
- package/dist/tools/codebase/find.js +61 -0
- package/dist/tools/codebase/find.js.map +1 -0
- package/dist/tools/codebase/glob.d.ts +3 -0
- package/dist/tools/codebase/glob.d.ts.map +1 -0
- package/dist/tools/codebase/glob.js +37 -0
- package/dist/tools/codebase/glob.js.map +1 -0
- package/dist/tools/codebase/grep.d.ts +3 -0
- package/dist/tools/codebase/grep.d.ts.map +1 -0
- package/dist/tools/codebase/grep.js +169 -0
- package/dist/tools/codebase/grep.js.map +1 -0
- package/dist/tools/codebase/ls.d.ts +3 -0
- package/dist/tools/codebase/ls.d.ts.map +1 -0
- package/dist/tools/codebase/ls.js +39 -0
- package/dist/tools/codebase/ls.js.map +1 -0
- package/dist/tools/codebase/read.d.ts +10 -0
- package/dist/tools/codebase/read.d.ts.map +1 -0
- package/dist/tools/codebase/read.js +81 -0
- package/dist/tools/codebase/read.js.map +1 -0
- package/dist/tools/delete_memory.d.ts +3 -0
- package/dist/tools/delete_memory.d.ts.map +1 -0
- package/dist/tools/delete_memory.js +46 -0
- package/dist/tools/delete_memory.js.map +1 -0
- package/dist/tools/edit/diff-compute.d.ts +4 -0
- package/dist/tools/edit/diff-compute.d.ts.map +1 -0
- package/dist/tools/edit/diff-compute.js +18 -0
- package/dist/tools/edit/diff-compute.js.map +1 -0
- package/dist/tools/edit/diff-render.d.ts +18 -0
- package/dist/tools/edit/diff-render.d.ts.map +1 -0
- package/dist/tools/edit/diff-render.js +128 -0
- package/dist/tools/edit/diff-render.js.map +1 -0
- package/dist/tools/edit/edit.d.ts +4 -0
- package/dist/tools/edit/edit.d.ts.map +1 -0
- package/dist/tools/edit/edit.js +440 -0
- package/dist/tools/edit/edit.js.map +1 -0
- package/dist/tools/edit/matcher.d.ts +24 -0
- package/dist/tools/edit/matcher.d.ts.map +1 -0
- package/dist/tools/edit/matcher.js +66 -0
- package/dist/tools/edit/matcher.js.map +1 -0
- package/dist/tools/edit/parser.d.ts +10 -0
- package/dist/tools/edit/parser.d.ts.map +1 -0
- package/dist/tools/edit/parser.js +120 -0
- package/dist/tools/edit/parser.js.map +1 -0
- package/dist/tools/edit/types.d.ts +16 -0
- package/dist/tools/edit/types.d.ts.map +1 -0
- package/dist/tools/edit/types.js +2 -0
- package/dist/tools/edit/types.js.map +1 -0
- package/dist/tools/edit/write_plan.d.ts +5 -0
- package/dist/tools/edit/write_plan.d.ts.map +1 -0
- package/dist/tools/edit/write_plan.js +98 -0
- package/dist/tools/edit/write_plan.js.map +1 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +66 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/execute/bash/constants.d.ts +24 -0
- package/dist/tools/execute/bash/constants.d.ts.map +1 -0
- package/dist/tools/execute/bash/constants.js +88 -0
- package/dist/tools/execute/bash/constants.js.map +1 -0
- package/dist/tools/execute/bash/errors.d.ts +39 -0
- package/dist/tools/execute/bash/errors.d.ts.map +1 -0
- package/dist/tools/execute/bash/errors.js +249 -0
- package/dist/tools/execute/bash/errors.js.map +1 -0
- package/dist/tools/execute/bash/execution.d.ts +18 -0
- package/dist/tools/execute/bash/execution.d.ts.map +1 -0
- package/dist/tools/execute/bash/execution.js +207 -0
- package/dist/tools/execute/bash/execution.js.map +1 -0
- package/dist/tools/execute/bash/index.d.ts +3 -0
- package/dist/tools/execute/bash/index.d.ts.map +1 -0
- package/dist/tools/execute/bash/index.js +117 -0
- package/dist/tools/execute/bash/index.js.map +1 -0
- package/dist/tools/execute/bash/platform.d.ts +6 -0
- package/dist/tools/execute/bash/platform.d.ts.map +1 -0
- package/dist/tools/execute/bash/platform.js +64 -0
- package/dist/tools/execute/bash/platform.js.map +1 -0
- package/dist/tools/execute/bash/security.d.ts +12 -0
- package/dist/tools/execute/bash/security.d.ts.map +1 -0
- package/dist/tools/execute/bash/security.js +26 -0
- package/dist/tools/execute/bash/security.js.map +1 -0
- package/dist/tools/execute/bash/validation.d.ts +16 -0
- package/dist/tools/execute/bash/validation.d.ts.map +1 -0
- package/dist/tools/execute/bash/validation.js +57 -0
- package/dist/tools/execute/bash/validation.js.map +1 -0
- package/dist/tools/execute/bash.d.ts +3 -0
- package/dist/tools/execute/bash.d.ts.map +1 -0
- package/dist/tools/execute/bash.js +728 -0
- package/dist/tools/execute/bash.js.map +1 -0
- package/dist/tools/execute/git.d.ts +3 -0
- package/dist/tools/execute/git.d.ts.map +1 -0
- package/dist/tools/execute/git.js +183 -0
- package/dist/tools/execute/git.js.map +1 -0
- package/dist/tools/execute/task_complete.d.ts +7 -0
- package/dist/tools/execute/task_complete.d.ts.map +1 -0
- package/dist/tools/execute/task_complete.js +38 -0
- package/dist/tools/execute/task_complete.js.map +1 -0
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +2 -0
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +2 -0
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/git.d.ts.map +1 -1
- package/dist/tools/git.js +2 -0
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/glob.d.ts.map +1 -1
- package/dist/tools/glob.js +2 -0
- package/dist/tools/glob.js.map +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +2 -0
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/install/clawhub.d.ts +26 -0
- package/dist/tools/install/clawhub.d.ts.map +1 -0
- package/dist/tools/install/clawhub.js +182 -0
- package/dist/tools/install/clawhub.js.map +1 -0
- package/dist/tools/install/constants.d.ts +5 -0
- package/dist/tools/install/constants.d.ts.map +1 -0
- package/dist/tools/install/constants.js +5 -0
- package/dist/tools/install/constants.js.map +1 -0
- package/dist/tools/install/install_skill.d.ts +3 -0
- package/dist/tools/install/install_skill.d.ts.map +1 -0
- package/dist/tools/install/install_skill.js +132 -0
- package/dist/tools/install/install_skill.js.map +1 -0
- package/dist/tools/install/npm.d.ts +8 -0
- package/dist/tools/install/npm.d.ts.map +1 -0
- package/dist/tools/install/npm.js +52 -0
- package/dist/tools/install/npm.js.map +1 -0
- package/dist/tools/install/skill-content.d.ts +9 -0
- package/dist/tools/install/skill-content.d.ts.map +1 -0
- package/dist/tools/install/skill-content.js +89 -0
- package/dist/tools/install/skill-content.js.map +1 -0
- package/dist/tools/install_skill.d.ts.map +1 -1
- package/dist/tools/install_skill.js +2 -0
- package/dist/tools/install_skill.js.map +1 -1
- package/dist/tools/list_memory.d.ts +3 -0
- package/dist/tools/list_memory.d.ts.map +1 -0
- package/dist/tools/list_memory.js +55 -0
- package/dist/tools/list_memory.js.map +1 -0
- package/dist/tools/ls.d.ts.map +1 -1
- package/dist/tools/ls.js +2 -0
- package/dist/tools/ls.js.map +1 -1
- package/dist/tools/memory/delete_memory.d.ts +3 -0
- package/dist/tools/memory/delete_memory.d.ts.map +1 -0
- package/dist/tools/memory/delete_memory.js +46 -0
- package/dist/tools/memory/delete_memory.js.map +1 -0
- package/dist/tools/memory/list_memory.d.ts +3 -0
- package/dist/tools/memory/list_memory.d.ts.map +1 -0
- package/dist/tools/memory/list_memory.js +55 -0
- package/dist/tools/memory/list_memory.js.map +1 -0
- package/dist/tools/memory/save_memory.d.ts +3 -0
- package/dist/tools/memory/save_memory.d.ts.map +1 -0
- package/dist/tools/memory/save_memory.js +45 -0
- package/dist/tools/memory/save_memory.js.map +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +2 -0
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/registry.d.ts +7 -2
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +112 -17
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/save_memory.d.ts +3 -0
- package/dist/tools/save_memory.d.ts.map +1 -0
- package/dist/tools/save_memory.js +45 -0
- package/dist/tools/save_memory.js.map +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +2 -0
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/tree.d.ts +12 -0
- package/dist/tools/tree.d.ts.map +1 -0
- package/dist/tools/tree.js +87 -0
- package/dist/tools/tree.js.map +1 -0
- package/dist/tools/types.d.ts +12 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/web/fetch.d.ts +3 -0
- package/dist/tools/web/fetch.d.ts.map +1 -0
- package/dist/tools/web/fetch.js +49 -0
- package/dist/tools/web/fetch.js.map +1 -0
- package/dist/tools/web/search.d.ts +3 -0
- package/dist/tools/web/search.d.ts.map +1 -0
- package/dist/tools/web/search.js +134 -0
- package/dist/tools/web/search.js.map +1 -0
- package/dist/tools/write_plan.d.ts.map +1 -1
- package/dist/tools/write_plan.js +2 -0
- package/dist/tools/write_plan.js.map +1 -1
- package/dist/tui/commands.d.ts +4 -0
- package/dist/tui/commands.d.ts.map +1 -0
- package/dist/tui/commands.js +118 -0
- package/dist/tui/commands.js.map +1 -0
- package/dist/tui/components/colors.d.ts +36 -0
- package/dist/tui/components/colors.d.ts.map +1 -0
- package/dist/tui/components/colors.js +48 -0
- package/dist/tui/components/colors.js.map +1 -0
- package/dist/tui/components/header-bar.d.ts +26 -0
- package/dist/tui/components/header-bar.d.ts.map +1 -0
- package/dist/tui/components/header-bar.js +78 -0
- package/dist/tui/components/header-bar.js.map +1 -0
- package/dist/tui/components/index.d.ts +9 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +9 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/components/landing-screen.d.ts +12 -0
- package/dist/tui/components/landing-screen.d.ts.map +1 -0
- package/dist/tui/components/landing-screen.js +53 -0
- package/dist/tui/components/landing-screen.js.map +1 -0
- package/dist/tui/components/pixel-logo.d.ts +5 -0
- package/dist/tui/components/pixel-logo.d.ts.map +1 -0
- package/dist/tui/components/pixel-logo.js +27 -0
- package/dist/tui/components/pixel-logo.js.map +1 -0
- package/dist/tui/components/plan-utils.d.ts +11 -0
- package/dist/tui/components/plan-utils.d.ts.map +1 -0
- package/dist/tui/components/plan-utils.js +62 -0
- package/dist/tui/components/plan-utils.js.map +1 -0
- package/dist/tui/components/plans-list.d.ts +18 -0
- package/dist/tui/components/plans-list.d.ts.map +1 -0
- package/dist/tui/components/plans-list.js +46 -0
- package/dist/tui/components/plans-list.js.map +1 -0
- package/dist/tui/components/rich-footer.d.ts +29 -0
- package/dist/tui/components/rich-footer.d.ts.map +1 -0
- package/dist/tui/components/rich-footer.js +124 -0
- package/dist/tui/components/rich-footer.js.map +1 -0
- package/dist/tui/components/todo-panel.d.ts +14 -0
- package/dist/tui/components/todo-panel.d.ts.map +1 -0
- package/dist/tui/components/todo-panel.js +83 -0
- package/dist/tui/components/todo-panel.js.map +1 -0
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +14 -7
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/index.d.ts +2 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +99 -505
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/overlays.d.ts +28 -0
- package/dist/tui/overlays.d.ts.map +1 -0
- package/dist/tui/overlays.js +154 -0
- package/dist/tui/overlays.js.map +1 -0
- package/dist/tui/themes.d.ts +5 -0
- package/dist/tui/themes.d.ts.map +1 -0
- package/dist/tui/themes.js +38 -0
- package/dist/tui/themes.js.map +1 -0
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +60 -122
- package/dist/web/index.js.map +1 -1
- package/dist/web/public/index.html +1 -1
- package/dist/web/public/messages.js +41 -25
- package/dist/web/public/state.js +72 -72
- package/dist/web/public/style.css +1126 -996
- package/dist/web/public/websocket.js +267 -267
- package/dist/web/session-bridge.d.ts.map +1 -1
- package/dist/web/session-bridge.js +82 -3
- package/dist/web/session-bridge.js.map +1 -1
- package/docs/ast-tools.md +117 -0
- package/package.json +60 -55
- package/scripts/check-line-count.mjs +53 -0
- package/scripts/copy-ast-wasm.mjs +32 -0
- package/src/agent/__tests__/session-restore.test.ts +284 -0
- package/src/agent/commands.ts +274 -0
- package/src/agent/compaction.ts +9 -2
- package/src/agent/index.ts +30 -25
- package/src/agent/memory.ts +60 -0
- package/src/agent/prompt-builder.ts +100 -26
- package/src/agent/providers/anthropic.ts +179 -179
- package/src/agent/providers/google.ts +210 -210
- package/src/agent/providers/ollama.ts +186 -186
- package/src/agent/providers/openai.ts +18 -3
- package/src/agent/session-chat.ts +480 -0
- package/src/agent/session-display.ts +195 -0
- package/src/agent/session-persistence.ts +146 -0
- package/src/agent/session-utils.ts +54 -0
- package/src/agent/session.ts +261 -718
- package/src/cli/index.ts +73 -4
- package/src/config/index.ts +342 -342
- package/src/index.ts +30 -3
- package/src/tools/__tests__/bash.test.ts +187 -1
- package/src/tools/__tests__/edit.test.ts +275 -11
- package/src/tools/__tests__/fetch.test.ts +1 -1
- package/src/tools/__tests__/glob.test.ts +1 -1
- package/src/tools/__tests__/grep.test.ts +1 -1
- package/src/tools/__tests__/ls.test.ts +1 -1
- package/src/tools/__tests__/read.test.ts +1 -1
- package/src/tools/__tests__/registry.test.ts +332 -0
- package/src/tools/__tests__/write_plan.test.ts +1 -1
- package/src/tools/codebase/ast/__tests__/integration.test.ts +452 -0
- package/src/tools/codebase/ast/__tests__/tree-sitter.test.ts +466 -0
- package/src/tools/codebase/ast/adapter.ts +44 -0
- package/src/tools/codebase/ast/tools.ts +322 -0
- package/src/tools/codebase/ast/tree-sitter-adapter.ts +468 -0
- package/src/tools/codebase/ast/tree-sitter-converters.ts +480 -0
- package/src/tools/codebase/ast/types.ts +102 -0
- package/src/tools/codebase/ast/wasm/tree-sitter-python.wasm +0 -0
- package/src/tools/codebase/ast/wasm/tree-sitter-tsx.wasm +0 -0
- package/src/tools/codebase/ast/wasm/tree-sitter-typescript.wasm +0 -0
- package/src/tools/codebase/ast/wasm/tree-sitter.wasm +0 -0
- package/src/tools/codebase/ast/wasm/web-tree-sitter.wasm +0 -0
- package/src/tools/{find.ts → codebase/find.ts} +4 -2
- package/src/tools/{glob.ts → codebase/glob.ts} +4 -2
- package/src/tools/{grep.ts → codebase/grep.ts} +4 -2
- package/src/tools/{ls.ts → codebase/ls.ts} +4 -2
- package/src/tools/{read.ts → codebase/read.ts} +5 -3
- package/src/tools/edit/diff-compute.ts +21 -0
- package/src/tools/edit/diff-render.ts +145 -0
- package/src/tools/edit/edit.ts +468 -0
- package/src/tools/edit/matcher.ts +70 -0
- package/src/tools/edit/parser.ts +131 -0
- package/src/tools/edit/types.ts +19 -0
- package/src/tools/{write_plan.ts → edit/write_plan.ts} +4 -2
- package/src/tools/execute/bash/constants.ts +93 -0
- package/src/tools/execute/bash/errors.ts +304 -0
- package/src/tools/execute/bash/execution.ts +211 -0
- package/src/tools/execute/bash/index.ts +131 -0
- package/src/tools/execute/bash/platform.ts +65 -0
- package/src/tools/execute/bash/security.ts +28 -0
- package/src/tools/execute/bash/validation.ts +78 -0
- package/src/tools/execute/git.ts +209 -0
- package/src/tools/execute/task_complete.ts +40 -0
- package/src/tools/install/clawhub.ts +222 -0
- package/src/tools/install/constants.ts +4 -0
- package/src/tools/install/install_skill.ts +150 -0
- package/src/tools/install/npm.ts +60 -0
- package/src/tools/install/skill-content.ts +108 -0
- package/src/tools/memory/delete_memory.ts +46 -0
- package/src/tools/memory/list_memory.ts +53 -0
- package/src/tools/memory/save_memory.ts +45 -0
- package/src/tools/registry.ts +119 -19
- package/src/tools/tree.ts +103 -0
- package/src/tools/types.ts +13 -0
- package/src/tools/{fetch.ts → web/fetch.ts} +4 -2
- package/src/tools/{search.ts → web/search.ts} +4 -2
- package/src/tui/commands.ts +135 -0
- package/src/tui/components/colors.ts +52 -0
- package/src/tui/components/header-bar.ts +88 -0
- package/src/tui/components/index.ts +8 -0
- package/src/tui/components/landing-screen.ts +67 -0
- package/src/tui/components/pixel-logo.ts +33 -0
- package/src/tui/components/plan-utils.ts +69 -0
- package/src/tui/components/plans-list.ts +55 -0
- package/src/tui/components/rich-footer.ts +146 -0
- package/src/tui/components/todo-panel.ts +95 -0
- package/src/tui/index.ts +335 -786
- package/src/tui/overlays.ts +203 -0
- package/src/tui/themes.ts +41 -0
- package/src/web/index.ts +64 -127
- package/src/web/public/index.html +1 -1
- package/src/web/public/messages.js +41 -25
- package/src/web/public/state.js +72 -72
- package/src/web/public/style.css +1126 -996
- package/src/web/public/websocket.js +267 -267
- package/src/web/session-bridge.ts +272 -193
- package/AGENT.md +0 -99
- package/src/tools/bash.ts +0 -125
- package/src/tools/edit.ts +0 -747
- package/src/tools/git.ts +0 -76
- package/src/tools/install_skill.ts +0 -539
- package/src/tui/components.ts +0 -635
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
lint-and-test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: actions/setup-node@v4
|
|
15
|
+
with:
|
|
16
|
+
node-version: 20
|
|
17
|
+
cache: npm
|
|
18
|
+
- run: npm ci
|
|
19
|
+
- run: npm run lint
|
|
20
|
+
- run: npm run check:lines
|
|
21
|
+
- run: npm t
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# lonny-agent
|
|
2
|
+
|
|
3
|
+
AI coding agent optimized for per-call pricing. Supports three modes (`code`/`plan`/`ask`), multiple LLM providers, and TUI built with pi-tui.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install # Install dependencies
|
|
9
|
+
npm run dev # Dev mode (tsx watch)
|
|
10
|
+
npm run build # Build (tsc + copy web/native assets)
|
|
11
|
+
npm start # Run built version
|
|
12
|
+
npm test # Run tests (vitest)
|
|
13
|
+
npm test:watch # Watch mode tests
|
|
14
|
+
|
|
15
|
+
# Lint & Format (Biome)
|
|
16
|
+
npm run lint # Check only
|
|
17
|
+
npm run lint:fix # Auto-fix
|
|
18
|
+
npm run format # Format all
|
|
19
|
+
npm run check # Lint + format check
|
|
20
|
+
npm run check:fix # Lint + format auto-fix
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Architecture
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
src/
|
|
27
|
+
├── agent/ # Session loop, LLM providers, event bus
|
|
28
|
+
├── cli/ # CLI argument parsing (commander)
|
|
29
|
+
├── config/ # Configuration loading (env, file, defaults)
|
|
30
|
+
├── diff/ # File read tracking (prevents editing unread/external-modified files)
|
|
31
|
+
├── tools/ # Tool implementations, organized by category
|
|
32
|
+
│ ├── codebase/ # read, glob, grep, find, ls
|
|
33
|
+
│ ├── edit/ # edit, write_plan
|
|
34
|
+
│ ├── execute/ # bash, git
|
|
35
|
+
│ ├── web/ # fetch, search
|
|
36
|
+
│ ├── memory/ # save_memory, list_memory, delete_memory
|
|
37
|
+
│ ├── install/ # install_skill
|
|
38
|
+
│ ├── tree.ts # Hierarchical tool tree builder
|
|
39
|
+
│ ├── types.ts # ToolDefinition, ToolTreeNode interfaces
|
|
40
|
+
│ ├── errors.ts # Error formatting utilities
|
|
41
|
+
│ └── registry.ts # ToolRegistry with registration & dispatch
|
|
42
|
+
├── tui/ # Terminal UI components
|
|
43
|
+
├── web/ # Web UI (WebSocket server + frontend)
|
|
44
|
+
└── pi-tui/ # Customized terminal UI library (copied, modified)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Key constraints
|
|
48
|
+
|
|
49
|
+
- **Tool mode gating**: `ask` mode has only fetch/search; `plan` mode has read-only tools + write_plan; `code` mode has full edit capabilities
|
|
50
|
+
- **Tiered access**: core tools (read/edit/bash/glob/grep) passed directly to LLM API; extended tools accessible via `tool()` gateway proxy in `registry.ts`
|
|
51
|
+
- **File read tracking**: `edit` tool requires files to be read first (enforced by `FileReadTracker`)
|
|
52
|
+
- **Biome config**: 2-space indent, 100 line width, single quotes, as-needed semicolons; several lint rules are explicitly disabled
|
|
53
|
+
|
|
54
|
+
## Tool tree hierarchy
|
|
55
|
+
|
|
56
|
+
Each tool definition has optional `category` (top-level) and `group` (second-level) metadata.
|
|
57
|
+
`prompt-builder.ts` uses `formatToolTreeForPrompt()` from `tools/tree.ts` to render a hierarchically
|
|
58
|
+
organized tool list in the system prompt (falls back to hardcoded lists if definitions not provided).
|
|
59
|
+
|
|
60
|
+
### Tiered access (core vs gateway)
|
|
61
|
+
|
|
62
|
+
To reduce the LLM's tool selection burden, tools are split into two tiers:
|
|
63
|
+
|
|
64
|
+
- **Core tools** (direct access via API `tools` param): `read`, `edit`, `bash`, `glob`, `grep`
|
|
65
|
+
- **Extended tools** (invoked via `tool()` gateway): everything else
|
|
66
|
+
|
|
67
|
+
The LLM API only receives 6 tool definitions (5 core + `tool` gateway). The system prompt's
|
|
68
|
+
tool tree documents the full catalog, marking extended tools with `(via tool gateway)`.
|
|
69
|
+
When the model needs an extended tool, it calls `tool({ name: "...", params: {...} })`,
|
|
70
|
+
which proxies the call through `ToolRegistry.dispatch()`.
|
|
71
|
+
|
|
72
|
+
Current classification:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Codebase
|
|
76
|
+
├── Read → read
|
|
77
|
+
├── Search
|
|
78
|
+
│ ├── By Pattern → glob, find
|
|
79
|
+
│ └── By Content → grep
|
|
80
|
+
└── List → ls
|
|
81
|
+
Edit
|
|
82
|
+
├── File → edit
|
|
83
|
+
└── Plan → write_plan
|
|
84
|
+
Execute
|
|
85
|
+
├── Shell → bash
|
|
86
|
+
└── Git → git
|
|
87
|
+
Web
|
|
88
|
+
├── Fetch → fetch
|
|
89
|
+
└── Search Engine → search
|
|
90
|
+
Memory
|
|
91
|
+
├── Save → save_memory
|
|
92
|
+
├── Query → list_memory
|
|
93
|
+
└── Delete → delete_memory
|
|
94
|
+
Install
|
|
95
|
+
└── Skill → install_skill
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Git hooks
|
|
99
|
+
|
|
100
|
+
- `pre-commit`: lint-staged (auto-fix staged .ts/.js/.mjs with Biome)
|
|
101
|
+
- `commit-msg`: Conventional Commits required (`feat:`, `fix:`, `docs:`, `chore:`, etc.)
|
|
102
|
+
|
|
103
|
+
## Testing
|
|
104
|
+
|
|
105
|
+
- Unit tests in `src/**/__tests__/*.test.ts`
|
|
106
|
+
- Run: `npm test` (vitest)
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `ast_query` now supports `references` query type — finds all call sites of a
|
|
7
|
+
function in a file (e.g., `ast_query path=file.ts query=references nameFilter=foo`).
|
|
8
|
+
- `ast_edit` now supports `insert-method` edit type — inserts a method into an
|
|
9
|
+
existing class at the correct position with proper indentation.
|
|
10
|
+
(e.g., `ast_edit path=file.ts editType=insert-method className=MyClass methodCode="newMethod() { return 42 }"`).
|
|
11
|
+
- Added `Reference` type to AST types (line, column, context).
|
|
12
|
+
- Added `findReferences` method to `AstAdapter` interface.
|
|
13
|
+
- Added `insertMethodIntoClass` method to `AstAdapter` interface.
|
|
14
|
+
- Added multi-file batch edit integration test for `ast_edit`.
|
|
15
|
+
- Added CI workflow (`.github/workflows/ci.yml`) with lint, test, and
|
|
16
|
+
line-count check steps.
|
|
17
|
+
- Added `check:lines` npm script to detect source files exceeding 500 lines.
|
|
18
|
+
- Added `scripts/check-line-count.mjs` — scans `src/` (excluding `pi-tui`)
|
|
19
|
+
for `.ts` files over 500 lines.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- Web UI and TUI now correctly parse todo items from plan files with
|
|
23
|
+
Chinese/emoji section headers (e.g., `## ✅ 已完成`, `## 🚧 待优化`).
|
|
24
|
+
Previously only English `## Todo` was recognized.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-restore.test.d.ts","sourceRoot":"","sources":["../../../src/agent/__tests__/session-restore.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import * as crypto from 'node:crypto';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as os from 'node:os';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, test } from 'vitest';
|
|
6
|
+
import { Session } from '../session.js';
|
|
7
|
+
/**
|
|
8
|
+
* Helper: build a minimal Config with a project-subdir cwd for test session files.
|
|
9
|
+
* Using the project directory ensures detectPackageManager etc. find a valid cwd.
|
|
10
|
+
* Each test gets a fresh subdirectory that gets cleaned up after.
|
|
11
|
+
*/
|
|
12
|
+
function testConfig() {
|
|
13
|
+
const testDir = path.join(process.cwd(), '.test-sessions', crypto.randomUUID().slice(0, 8));
|
|
14
|
+
fs.mkdirSync(testDir, { recursive: true });
|
|
15
|
+
// Create a package.json so detectPackageManager doesn't fail async
|
|
16
|
+
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify({ name: 'test' }), 'utf-8');
|
|
17
|
+
return {
|
|
18
|
+
mode: 'code',
|
|
19
|
+
model: 'test-model',
|
|
20
|
+
provider: 'openai',
|
|
21
|
+
apiKey: 'test-key',
|
|
22
|
+
baseUrl: 'http://test',
|
|
23
|
+
cwd: testDir,
|
|
24
|
+
autoApprove: true,
|
|
25
|
+
thinking: false,
|
|
26
|
+
reasoningEffort: 'medium',
|
|
27
|
+
enableCache: false,
|
|
28
|
+
strictTools: false,
|
|
29
|
+
contextWindow: 128_000,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build the session file path matching what save() would write.
|
|
34
|
+
*/
|
|
35
|
+
function sessionFilePath(cwd, sessionId) {
|
|
36
|
+
const { createHash } = require('node:crypto');
|
|
37
|
+
const absPath = path.resolve(cwd);
|
|
38
|
+
const hash = createHash('sha256').update(absPath, 'utf-8').digest('hex').slice(0, 12);
|
|
39
|
+
const dirName = path.basename(absPath);
|
|
40
|
+
const safeName = dirName.replace(/[<>:"/\\|?*]/g, '_');
|
|
41
|
+
const base = `${safeName}-${hash}`;
|
|
42
|
+
const sessionDir = path.join(os.homedir(), '.lonny', 'sessions');
|
|
43
|
+
return path.join(sessionDir, `${base}-${sessionId}.json`);
|
|
44
|
+
}
|
|
45
|
+
describe('Session save/load cycle', () => {
|
|
46
|
+
let config;
|
|
47
|
+
let sessionId;
|
|
48
|
+
let filePath;
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
config = testConfig();
|
|
51
|
+
const { randomUUID } = require('node:crypto');
|
|
52
|
+
sessionId = randomUUID().slice(0, 8);
|
|
53
|
+
filePath = sessionFilePath(config.cwd, sessionId);
|
|
54
|
+
// Ensure session directory exists
|
|
55
|
+
const dir = path.dirname(filePath);
|
|
56
|
+
if (!fs.existsSync(dir))
|
|
57
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
58
|
+
});
|
|
59
|
+
afterEach(() => {
|
|
60
|
+
try {
|
|
61
|
+
if (fs.existsSync(filePath))
|
|
62
|
+
fs.unlinkSync(filePath);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* ignore */
|
|
66
|
+
}
|
|
67
|
+
// Don't clean up .test-sessions dir — buildSystemPrompt fires async and may
|
|
68
|
+
// still be reading the cwd. The dir is gitignored and cleaned on restart.
|
|
69
|
+
});
|
|
70
|
+
test('restores assistant message with text + tool_calls + tool results', async () => {
|
|
71
|
+
const messages = [
|
|
72
|
+
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
73
|
+
{ role: 'user', content: 'Fix the bug in the code.' },
|
|
74
|
+
{
|
|
75
|
+
role: 'assistant',
|
|
76
|
+
content: 'I see the root cause. Three fixes needed:\n\n1. Remove X\n2. Add Y',
|
|
77
|
+
tool_calls: [
|
|
78
|
+
{ id: 'call_abc', name: 'edit', input: { file: 'test.ts', old: 'a', new: 'b' } },
|
|
79
|
+
{ id: 'call_def', name: 'read', input: { file: 'test.ts' } },
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
{ role: 'tool', content: 'Edited test.ts', tool_call_id: 'call_abc', name: 'edit' },
|
|
83
|
+
{ role: 'tool', content: 'File contents...', tool_call_id: 'call_def', name: 'read' },
|
|
84
|
+
{ role: 'assistant', content: 'Done with fixes.' },
|
|
85
|
+
{ role: 'user', content: 'Great, thanks!' },
|
|
86
|
+
];
|
|
87
|
+
// Write session file (simulating what save() would produce)
|
|
88
|
+
const data = {
|
|
89
|
+
id: sessionId,
|
|
90
|
+
cwd: path.resolve(config.cwd),
|
|
91
|
+
messages,
|
|
92
|
+
totalInputTokens: 100,
|
|
93
|
+
totalOutputTokens: 50,
|
|
94
|
+
totalApiCalls: 2,
|
|
95
|
+
mode: 'code',
|
|
96
|
+
model: 'test-model',
|
|
97
|
+
provider: 'test-provider',
|
|
98
|
+
createdAt: new Date().toISOString(),
|
|
99
|
+
updatedAt: new Date().toISOString(),
|
|
100
|
+
};
|
|
101
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
102
|
+
// Load the session from disk
|
|
103
|
+
const session = await Session.load(config);
|
|
104
|
+
expect(session).not.toBeNull();
|
|
105
|
+
// Verify ALL messages are preserved
|
|
106
|
+
expect(session.messages.length).toBe(messages.length);
|
|
107
|
+
for (let i = 0; i < messages.length; i++) {
|
|
108
|
+
expect(session.messages[i].role).toBe(messages[i].role);
|
|
109
|
+
}
|
|
110
|
+
// Verify the critical assistant message (text + tool_calls)
|
|
111
|
+
const assistantWithTools = session.messages.find(m => m.role === 'assistant' && m.tool_calls && m.tool_calls.length > 0);
|
|
112
|
+
expect(assistantWithTools).toBeDefined();
|
|
113
|
+
expect(assistantWithTools.content).toContain('I see the root cause');
|
|
114
|
+
expect(assistantWithTools.tool_calls).toHaveLength(2);
|
|
115
|
+
// Verify tool results still reference the correct tool_call_ids
|
|
116
|
+
const toolMsgs = session.messages.filter(m => m.role === 'tool');
|
|
117
|
+
expect(toolMsgs).toHaveLength(2);
|
|
118
|
+
expect(toolMsgs[0].tool_call_id).toBe('call_abc');
|
|
119
|
+
expect(toolMsgs[1].tool_call_id).toBe('call_def');
|
|
120
|
+
});
|
|
121
|
+
test('preserves assistant message with text-only (no tool_calls)', async () => {
|
|
122
|
+
const messages = [
|
|
123
|
+
{ role: 'system', content: 'system prompt' },
|
|
124
|
+
{ role: 'user', content: 'Hello' },
|
|
125
|
+
{ role: 'assistant', content: 'Hi there!' },
|
|
126
|
+
{ role: 'user', content: 'How are you?' },
|
|
127
|
+
{ role: 'assistant', content: "I'm great, thanks!" },
|
|
128
|
+
];
|
|
129
|
+
const data = {
|
|
130
|
+
id: sessionId,
|
|
131
|
+
cwd: path.resolve(config.cwd),
|
|
132
|
+
messages,
|
|
133
|
+
totalInputTokens: 0,
|
|
134
|
+
totalOutputTokens: 0,
|
|
135
|
+
totalApiCalls: 0,
|
|
136
|
+
mode: 'code',
|
|
137
|
+
model: 'test-model',
|
|
138
|
+
provider: 'test-provider',
|
|
139
|
+
createdAt: new Date().toISOString(),
|
|
140
|
+
updatedAt: new Date().toISOString(),
|
|
141
|
+
};
|
|
142
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
143
|
+
const session = await Session.load(config);
|
|
144
|
+
expect(session).not.toBeNull();
|
|
145
|
+
expect(session.messages.length).toBe(messages.length);
|
|
146
|
+
expect(session.messages[2].content).toBe('Hi there!');
|
|
147
|
+
expect(session.messages[4].content).toBe("I'm great, thanks!");
|
|
148
|
+
});
|
|
149
|
+
test('loads session with most messages when multiple session files exist', async () => {
|
|
150
|
+
// Create a "newer but emptier" session file
|
|
151
|
+
const newSessionId = 'new_empty_' + require('node:crypto').randomUUID().slice(0, 4);
|
|
152
|
+
const newFilePath = sessionFilePath(config.cwd, newSessionId);
|
|
153
|
+
const emptyMessages = [
|
|
154
|
+
{ role: 'system', content: 'system prompt' },
|
|
155
|
+
{ role: 'user', content: 'Hello' },
|
|
156
|
+
];
|
|
157
|
+
const newData = {
|
|
158
|
+
id: newSessionId,
|
|
159
|
+
cwd: path.resolve(config.cwd),
|
|
160
|
+
messages: emptyMessages,
|
|
161
|
+
totalInputTokens: 0,
|
|
162
|
+
totalOutputTokens: 0,
|
|
163
|
+
totalApiCalls: 0,
|
|
164
|
+
mode: 'code',
|
|
165
|
+
model: 'test-model',
|
|
166
|
+
provider: 'test-provider',
|
|
167
|
+
createdAt: new Date(Date.now() + 60_000).toISOString(), // 1 minute in the future
|
|
168
|
+
updatedAt: new Date(Date.now() + 60_000).toISOString(), // 1 minute in the future
|
|
169
|
+
};
|
|
170
|
+
fs.writeFileSync(newFilePath, JSON.stringify(newData, null, 2), 'utf-8');
|
|
171
|
+
// Create an "older but fuller" session file
|
|
172
|
+
const fullMessages = [
|
|
173
|
+
{ role: 'system', content: 'system prompt' },
|
|
174
|
+
{ role: 'user', content: 'Do the first thing.' },
|
|
175
|
+
{
|
|
176
|
+
role: 'assistant',
|
|
177
|
+
content: 'Working on it.',
|
|
178
|
+
tool_calls: [{ id: 't1', name: 'bash', input: { command: 'echo 1' } }],
|
|
179
|
+
},
|
|
180
|
+
{ role: 'tool', content: '1', tool_call_id: 't1', name: 'bash' },
|
|
181
|
+
{ role: 'user', content: 'Now the second thing.' },
|
|
182
|
+
{ role: 'assistant', content: 'Doing it.' },
|
|
183
|
+
{ role: 'user', content: 'Great!' },
|
|
184
|
+
];
|
|
185
|
+
const data = {
|
|
186
|
+
id: sessionId,
|
|
187
|
+
cwd: path.resolve(config.cwd),
|
|
188
|
+
messages: fullMessages,
|
|
189
|
+
totalInputTokens: 0,
|
|
190
|
+
totalOutputTokens: 0,
|
|
191
|
+
totalApiCalls: 0,
|
|
192
|
+
mode: 'code',
|
|
193
|
+
model: 'test-model',
|
|
194
|
+
provider: 'test-provider',
|
|
195
|
+
createdAt: new Date().toISOString(),
|
|
196
|
+
updatedAt: new Date().toISOString(), // OLDER timestamp
|
|
197
|
+
};
|
|
198
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
199
|
+
// Load — should pick the FULL session (7 messages) over the NEWER but EMPTIER one (2 messages)
|
|
200
|
+
const session = await Session.load(config);
|
|
201
|
+
expect(session).not.toBeNull();
|
|
202
|
+
expect(session.messages.length).toBe(7);
|
|
203
|
+
expect(session.messages[1].content).toBe('Do the first thing.');
|
|
204
|
+
// Clean up the extra file
|
|
205
|
+
try {
|
|
206
|
+
fs.unlinkSync(newFilePath);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
/* ignore */
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
test('sanitizeMessages keeps complete assistant+tool sequences', async () => {
|
|
213
|
+
// Two complete turns, each with tool_calls+results — should all survive
|
|
214
|
+
const messages = [
|
|
215
|
+
{ role: 'system', content: 'system prompt' },
|
|
216
|
+
{ role: 'user', content: 'Do the first thing.' },
|
|
217
|
+
{
|
|
218
|
+
role: 'assistant',
|
|
219
|
+
content: 'Working on it.',
|
|
220
|
+
tool_calls: [{ id: 't1', name: 'bash', input: { command: 'echo 1' } }],
|
|
221
|
+
},
|
|
222
|
+
{ role: 'tool', content: '1', tool_call_id: 't1', name: 'bash' },
|
|
223
|
+
{ role: 'user', content: 'Now the second thing.' },
|
|
224
|
+
{
|
|
225
|
+
role: 'assistant',
|
|
226
|
+
content: 'Doing it.',
|
|
227
|
+
tool_calls: [
|
|
228
|
+
{ id: 't2', name: 'bash', input: { command: 'echo 2' } },
|
|
229
|
+
{ id: 't3', name: 'edit', input: { file: 'x.ts', old: 'a', new: 'b' } },
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
{ role: 'tool', content: '2', tool_call_id: 't2', name: 'bash' },
|
|
233
|
+
{ role: 'tool', content: 'Edited x.ts', tool_call_id: 't3', name: 'edit' },
|
|
234
|
+
{ role: 'assistant', content: 'Done!' },
|
|
235
|
+
];
|
|
236
|
+
const data = {
|
|
237
|
+
id: sessionId,
|
|
238
|
+
cwd: path.resolve(config.cwd),
|
|
239
|
+
messages,
|
|
240
|
+
totalInputTokens: 0,
|
|
241
|
+
totalOutputTokens: 0,
|
|
242
|
+
totalApiCalls: 0,
|
|
243
|
+
mode: 'code',
|
|
244
|
+
model: 'test-model',
|
|
245
|
+
provider: 'test-provider',
|
|
246
|
+
createdAt: new Date().toISOString(),
|
|
247
|
+
updatedAt: new Date().toISOString(),
|
|
248
|
+
};
|
|
249
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
250
|
+
const session = await Session.load(config);
|
|
251
|
+
expect(session).not.toBeNull();
|
|
252
|
+
expect(session.messages.length).toBe(messages.length);
|
|
253
|
+
// Both assistant messages with tool_calls should be present
|
|
254
|
+
const assistantWithTools = session.messages.filter(m => m.role === 'assistant' && m.tool_calls && m.tool_calls.length > 0);
|
|
255
|
+
expect(assistantWithTools).toHaveLength(2);
|
|
256
|
+
expect(assistantWithTools[0].content).toBe('Working on it.');
|
|
257
|
+
expect(assistantWithTools[1].content).toBe('Doing it.');
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
//# sourceMappingURL=session-restore.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-restore.test.js","sourceRoot":"","sources":["../../../src/agent/__tests__/session-restore.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Config } from '../config/index.js';
|
|
2
|
+
import { Session } from './session.js';
|
|
3
|
+
export interface CommandUI {
|
|
4
|
+
write(text: string): void;
|
|
5
|
+
replaceContent(text: string): void;
|
|
6
|
+
onStateChange(): void;
|
|
7
|
+
onNewSession(session: Session): void;
|
|
8
|
+
}
|
|
9
|
+
export interface CommandEnv {
|
|
10
|
+
session: Session;
|
|
11
|
+
config: Config;
|
|
12
|
+
ui: CommandUI;
|
|
13
|
+
isRunning: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function handleNew(env: CommandEnv): Session;
|
|
16
|
+
export declare function handleMode(env: CommandEnv, mode: string): Promise<boolean>;
|
|
17
|
+
export declare function handleModel(env: CommandEnv, model: string): boolean;
|
|
18
|
+
export declare function handlePrompts(env: CommandEnv): boolean;
|
|
19
|
+
export declare function handleSkills(env: CommandEnv): boolean;
|
|
20
|
+
export declare function handleSessions(env: CommandEnv): boolean;
|
|
21
|
+
export declare function handleSessionCommand(env: CommandEnv, arg: string): Promise<boolean>;
|
|
22
|
+
export declare function handleFork(env: CommandEnv): Promise<boolean>;
|
|
23
|
+
export declare function handleInit(env: CommandEnv): boolean;
|
|
24
|
+
export declare function handleStop(env: CommandEnv): boolean;
|
|
25
|
+
export declare function dispatchCommand(env: CommandEnv, cmd: string, arg: string): Promise<boolean>;
|
|
26
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/agent/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAMhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,aAAa,IAAI,IAAI,CAAA;IACrB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,SAAS,CAAA;IACb,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAWlD;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAWnE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CActD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAcrD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAqBvD;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsFzF;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBlE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAKnD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAQnD;AAUD,wBAAsB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BjG"}
|