@xandout/libra-harness 0.1.33 → 0.1.90
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 +30 -30
- package/dist/agent.d.ts +8 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +205 -193
- package/dist/agent.js.map +1 -1
- package/dist/ai-sdk-model.d.ts.map +1 -1
- package/dist/ai-sdk-model.js +91 -78
- package/dist/ai-sdk-model.js.map +1 -1
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/{extras/extensions → extensions}/auto-steer/extension.d.ts +1 -1
- package/dist/extensions/auto-steer/extension.d.ts.map +1 -0
- package/dist/extensions/auto-steer/extension.js.map +1 -0
- package/dist/extensions/auto-steer/index.d.ts.map +1 -0
- package/dist/extensions/auto-steer/index.js.map +1 -0
- package/dist/extensions/code-tools/extension.d.ts +15 -0
- package/dist/extensions/code-tools/extension.d.ts.map +1 -0
- package/dist/extensions/code-tools/extension.js +73 -0
- package/dist/extensions/code-tools/extension.js.map +1 -0
- package/dist/extensions/code-tools/extension.test.d.ts.map +1 -0
- package/dist/extensions/code-tools/extension.test.js +504 -0
- package/dist/extensions/code-tools/extension.test.js.map +1 -0
- package/dist/extensions/code-tools/index.d.ts.map +1 -0
- package/dist/extensions/code-tools/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/code-tools/tools/code-search.d.ts +2 -2
- package/dist/extensions/code-tools/tools/code-search.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/code-tools/tools/code-search.js +1 -1
- package/dist/extensions/code-tools/tools/code-search.js.map +1 -0
- package/dist/extensions/code-tools/tools/find.d.ts.map +1 -0
- package/dist/extensions/code-tools/tools/find.js +83 -0
- package/dist/extensions/code-tools/tools/find.js.map +1 -0
- package/dist/extensions/code-tools/tools/grep.d.ts.map +1 -0
- package/dist/extensions/code-tools/tools/grep.js +90 -0
- package/dist/extensions/code-tools/tools/grep.js.map +1 -0
- package/dist/extensions/code-tools/tools/read.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/code-tools/tools/read.js +17 -25
- package/dist/extensions/code-tools/tools/read.js.map +1 -0
- package/dist/{extras/extensions → extensions}/code-tools/tools/shared.d.ts +5 -1
- package/dist/extensions/code-tools/tools/shared.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/code-tools/tools/shared.js +68 -0
- package/dist/extensions/code-tools/tools/shared.js.map +1 -0
- package/dist/extensions/code-tools/tools/shell.d.ts +39 -0
- package/dist/extensions/code-tools/tools/shell.d.ts.map +1 -0
- package/dist/extensions/code-tools/tools/shell.js +441 -0
- package/dist/extensions/code-tools/tools/shell.js.map +1 -0
- package/dist/{extras/extensions → extensions}/code-tools/tools/todo.d.ts +0 -3
- package/dist/extensions/code-tools/tools/todo.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/code-tools/tools/todo.js +0 -8
- package/dist/extensions/code-tools/tools/todo.js.map +1 -0
- package/dist/extensions/code-tools/tools/view-image.d.ts +10 -0
- package/dist/extensions/code-tools/tools/view-image.d.ts.map +1 -0
- package/dist/extensions/code-tools/tools/view-image.js +87 -0
- package/dist/extensions/code-tools/tools/view-image.js.map +1 -0
- package/dist/extensions/code-tools/tools/write.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/code-tools/tools/write.js +47 -37
- package/dist/extensions/code-tools/tools/write.js.map +1 -0
- package/dist/{extras/extensions → extensions}/disk-session/extension.d.ts +45 -2
- package/dist/extensions/disk-session/extension.d.ts.map +1 -0
- package/dist/extensions/disk-session/extension.js +818 -0
- package/dist/extensions/disk-session/extension.js.map +1 -0
- package/dist/extensions/disk-session/extension.test.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/disk-session/extension.test.js +445 -16
- package/dist/extensions/disk-session/extension.test.js.map +1 -0
- package/dist/extensions/disk-session/index.d.ts +3 -0
- package/dist/extensions/disk-session/index.d.ts.map +1 -0
- package/dist/extensions/disk-session/index.js +2 -0
- package/dist/extensions/disk-session/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/emoji/extension.d.ts +1 -1
- package/dist/extensions/emoji/extension.d.ts.map +1 -0
- package/dist/extensions/emoji/extension.js.map +1 -0
- package/dist/extensions/emoji/index.d.ts.map +1 -0
- package/dist/extensions/emoji/index.js.map +1 -0
- package/dist/extensions/filesystem/extension.d.ts.map +1 -0
- package/dist/extensions/filesystem/extension.js.map +1 -0
- package/dist/extensions/filesystem/extension.test.d.ts.map +1 -0
- package/dist/extensions/filesystem/extension.test.js.map +1 -0
- package/dist/extensions/filesystem/index.d.ts.map +1 -0
- package/dist/extensions/filesystem/index.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +2 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/keyword-extractor/extension.d.ts +1 -1
- package/dist/extensions/keyword-extractor/extension.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/keyword-extractor/extension.js +1 -1
- package/dist/extensions/keyword-extractor/extension.js.map +1 -0
- package/dist/extensions/keyword-extractor/extension.test.d.ts.map +1 -0
- package/dist/extensions/keyword-extractor/extension.test.js.map +1 -0
- package/dist/extensions/keyword-extractor/index.d.ts.map +1 -0
- package/dist/extensions/keyword-extractor/index.js.map +1 -0
- package/dist/extensions/keyword-extractor/nlp.d.ts.map +1 -0
- package/dist/extensions/keyword-extractor/nlp.js.map +1 -0
- package/dist/extensions/keyword-extractor/nlp.test.d.ts.map +1 -0
- package/dist/extensions/keyword-extractor/nlp.test.js.map +1 -0
- package/dist/{extras/extension-loader.d.ts → extensions/loader.d.ts} +1 -1
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/{extras/extension-loader.js → extensions/loader.js} +2 -2
- package/dist/extensions/loader.js.map +1 -0
- package/dist/{extras/extensions → extensions}/logger/extension.d.ts +1 -1
- package/dist/extensions/logger/extension.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/logger/extension.js +1 -1
- package/dist/extensions/logger/extension.js.map +1 -0
- package/dist/extensions/logger/index.d.ts.map +1 -0
- package/dist/extensions/logger/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/mcp/extension.d.ts +1 -1
- package/dist/extensions/mcp/extension.d.ts.map +1 -0
- package/dist/extensions/mcp/extension.js.map +1 -0
- package/dist/extensions/mcp/extension.test.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/mcp/extension.test.js +1 -1
- package/dist/extensions/mcp/extension.test.js.map +1 -0
- package/dist/extensions/mcp/index.d.ts.map +1 -0
- package/dist/extensions/mcp/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/mem-session/extension.d.ts +2 -2
- package/dist/extensions/mem-session/extension.d.ts.map +1 -0
- package/dist/extensions/mem-session/extension.js.map +1 -0
- package/dist/extensions/mem-session/index.d.ts.map +1 -0
- package/dist/extensions/mem-session/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/memory/extension.d.ts +1 -1
- package/dist/extensions/memory/extension.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/memory/extension.js +1 -1
- package/dist/extensions/memory/extension.js.map +1 -0
- package/dist/extensions/memory/index.d.ts +4 -0
- package/dist/extensions/memory/index.d.ts.map +1 -0
- package/dist/extensions/memory/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/memory/llm-extractor.d.ts +1 -1
- package/dist/extensions/memory/llm-extractor.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/memory/llm-extractor.js +1 -1
- package/dist/extensions/memory/llm-extractor.js.map +1 -0
- package/dist/{extras/extensions → extensions}/memory/types.d.ts +2 -2
- package/dist/extensions/memory/types.d.ts.map +1 -0
- package/dist/extensions/memory/types.js.map +1 -0
- package/dist/{extras/extensions → extensions}/otel/extension.d.ts +1 -1
- package/dist/extensions/otel/extension.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/otel/extension.js +1 -1
- package/dist/extensions/otel/extension.js.map +1 -0
- package/dist/extensions/otel/extension.test.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/otel/extension.test.js +1 -1
- package/dist/extensions/otel/extension.test.js.map +1 -0
- package/dist/extensions/otel/index.d.ts.map +1 -0
- package/dist/extensions/otel/index.js.map +1 -0
- package/dist/extensions/otel/jsonl-span-exporter.d.ts.map +1 -0
- package/dist/extensions/otel/jsonl-span-exporter.js.map +1 -0
- package/dist/{extras/extensions → extensions}/scripts/extension.d.ts +1 -1
- package/dist/extensions/scripts/extension.d.ts.map +1 -0
- package/dist/extensions/scripts/extension.js.map +1 -0
- package/dist/extensions/scripts/extension.test.d.ts.map +1 -0
- package/dist/extensions/scripts/extension.test.js.map +1 -0
- package/dist/extensions/scripts/index.d.ts.map +1 -0
- package/dist/extensions/scripts/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/skills/extension.d.ts +1 -1
- package/dist/extensions/skills/extension.d.ts.map +1 -0
- package/dist/extensions/skills/extension.js.map +1 -0
- package/dist/extensions/skills/extension.test.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/skills/extension.test.js +1 -1
- package/dist/extensions/skills/extension.test.js.map +1 -0
- package/dist/extensions/skills/index.d.ts.map +1 -0
- package/dist/extensions/skills/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/streaming/extension.d.ts +1 -1
- package/dist/extensions/streaming/extension.d.ts.map +1 -0
- package/dist/extensions/streaming/extension.js.map +1 -0
- package/dist/extensions/streaming/index.d.ts.map +1 -0
- package/dist/extensions/streaming/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/structured-output/extension.d.ts +1 -1
- package/dist/extensions/structured-output/extension.d.ts.map +1 -0
- package/dist/extensions/structured-output/extension.js.map +1 -0
- package/dist/extensions/structured-output/index.d.ts.map +1 -0
- package/dist/extensions/structured-output/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/timestamp/extension.d.ts +1 -1
- package/dist/extensions/timestamp/extension.d.ts.map +1 -0
- package/dist/extensions/timestamp/extension.js.map +1 -0
- package/dist/extensions/timestamp/index.d.ts.map +1 -0
- package/dist/extensions/timestamp/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/token-stats/extension.d.ts +1 -1
- package/dist/extensions/token-stats/extension.d.ts.map +1 -0
- package/dist/extensions/token-stats/extension.js.map +1 -0
- package/dist/extensions/token-stats/extension.test.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/token-stats/extension.test.js +1 -1
- package/dist/extensions/token-stats/extension.test.js.map +1 -0
- package/dist/extensions/token-stats/index.d.ts.map +1 -0
- package/dist/extensions/token-stats/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/tool-buffer/extension.d.ts +1 -1
- package/dist/extensions/tool-buffer/extension.d.ts.map +1 -0
- package/dist/extensions/tool-buffer/extension.js.map +1 -0
- package/dist/extensions/tool-buffer/extension.test.d.ts.map +1 -0
- package/dist/{extras/extensions → extensions}/tool-buffer/extension.test.js +1 -1
- package/dist/extensions/tool-buffer/extension.test.js.map +1 -0
- package/dist/extensions/tool-buffer/index.d.ts.map +1 -0
- package/dist/extensions/tool-buffer/index.js.map +1 -0
- package/dist/{extras/extensions → extensions}/weather-tool/extension.d.ts +1 -1
- package/dist/extensions/weather-tool/extension.d.ts.map +1 -0
- package/dist/extensions/weather-tool/extension.js.map +1 -0
- package/dist/extensions/weather-tool/index.d.ts.map +1 -0
- package/dist/extensions/weather-tool/index.js.map +1 -0
- package/dist/handle.d.ts +4 -0
- package/dist/handle.d.ts.map +1 -1
- package/dist/{extras/models → models}/ai-sdk-resolver.d.ts +1 -1
- package/dist/models/ai-sdk-resolver.d.ts.map +1 -0
- package/dist/{extras/models → models}/ai-sdk-resolver.js +1 -1
- package/dist/models/ai-sdk-resolver.js.map +1 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js.map +1 -0
- package/dist/{extras/models → models}/routing-model.d.ts +1 -1
- package/dist/models/routing-model.d.ts.map +1 -0
- package/dist/{extras/models → models}/routing-model.js +1 -1
- package/dist/models/routing-model.js.map +1 -0
- package/dist/openai-provider/index.d.ts.map +1 -0
- package/dist/openai-provider/index.js.map +1 -0
- package/dist/{extras/openai-provider → openai-provider}/server.d.ts +1 -1
- package/dist/openai-provider/server.d.ts.map +1 -0
- package/dist/openai-provider/server.js.map +1 -0
- package/package.json +108 -83
- package/dist/extras/extension-loader.d.ts.map +0 -1
- package/dist/extras/extension-loader.js.map +0 -1
- package/dist/extras/extensions/auto-steer/extension.d.ts.map +0 -1
- package/dist/extras/extensions/auto-steer/extension.js.map +0 -1
- package/dist/extras/extensions/auto-steer/index.d.ts.map +0 -1
- package/dist/extras/extensions/auto-steer/index.js.map +0 -1
- package/dist/extras/extensions/code-tools/extension.d.ts +0 -83
- package/dist/extras/extensions/code-tools/extension.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/extension.js +0 -93
- package/dist/extras/extensions/code-tools/extension.js.map +0 -1
- package/dist/extras/extensions/code-tools/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/extension.test.js +0 -656
- package/dist/extras/extensions/code-tools/extension.test.js.map +0 -1
- package/dist/extras/extensions/code-tools/index.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/index.js.map +0 -1
- package/dist/extras/extensions/code-tools/tools/code-search.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/tools/code-search.js.map +0 -1
- package/dist/extras/extensions/code-tools/tools/find.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/tools/find.js +0 -161
- package/dist/extras/extensions/code-tools/tools/find.js.map +0 -1
- package/dist/extras/extensions/code-tools/tools/grep.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/tools/grep.js +0 -307
- package/dist/extras/extensions/code-tools/tools/grep.js.map +0 -1
- package/dist/extras/extensions/code-tools/tools/read.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/tools/read.js.map +0 -1
- package/dist/extras/extensions/code-tools/tools/shared.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/tools/shared.js.map +0 -1
- package/dist/extras/extensions/code-tools/tools/shell.d.ts +0 -49
- package/dist/extras/extensions/code-tools/tools/shell.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/tools/shell.js +0 -623
- package/dist/extras/extensions/code-tools/tools/shell.js.map +0 -1
- package/dist/extras/extensions/code-tools/tools/todo.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/tools/todo.js.map +0 -1
- package/dist/extras/extensions/code-tools/tools/write.d.ts.map +0 -1
- package/dist/extras/extensions/code-tools/tools/write.js.map +0 -1
- package/dist/extras/extensions/disk-session/extension.d.ts.map +0 -1
- package/dist/extras/extensions/disk-session/extension.js +0 -640
- package/dist/extras/extensions/disk-session/extension.js.map +0 -1
- package/dist/extras/extensions/disk-session/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/disk-session/extension.test.js.map +0 -1
- package/dist/extras/extensions/disk-session/index.d.ts +0 -3
- package/dist/extras/extensions/disk-session/index.d.ts.map +0 -1
- package/dist/extras/extensions/disk-session/index.js +0 -2
- package/dist/extras/extensions/disk-session/index.js.map +0 -1
- package/dist/extras/extensions/emoji/extension.d.ts.map +0 -1
- package/dist/extras/extensions/emoji/extension.js.map +0 -1
- package/dist/extras/extensions/emoji/index.d.ts.map +0 -1
- package/dist/extras/extensions/emoji/index.js.map +0 -1
- package/dist/extras/extensions/filesystem/extension.d.ts.map +0 -1
- package/dist/extras/extensions/filesystem/extension.js.map +0 -1
- package/dist/extras/extensions/filesystem/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/filesystem/extension.test.js.map +0 -1
- package/dist/extras/extensions/filesystem/index.d.ts.map +0 -1
- package/dist/extras/extensions/filesystem/index.js.map +0 -1
- package/dist/extras/extensions/keyword-extractor/extension.d.ts.map +0 -1
- package/dist/extras/extensions/keyword-extractor/extension.js.map +0 -1
- package/dist/extras/extensions/keyword-extractor/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/keyword-extractor/extension.test.js.map +0 -1
- package/dist/extras/extensions/keyword-extractor/index.d.ts.map +0 -1
- package/dist/extras/extensions/keyword-extractor/index.js.map +0 -1
- package/dist/extras/extensions/keyword-extractor/nlp.d.ts.map +0 -1
- package/dist/extras/extensions/keyword-extractor/nlp.js.map +0 -1
- package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts.map +0 -1
- package/dist/extras/extensions/keyword-extractor/nlp.test.js.map +0 -1
- package/dist/extras/extensions/logger/extension.d.ts.map +0 -1
- package/dist/extras/extensions/logger/extension.js.map +0 -1
- package/dist/extras/extensions/logger/index.d.ts.map +0 -1
- package/dist/extras/extensions/logger/index.js.map +0 -1
- package/dist/extras/extensions/mcp/extension.d.ts.map +0 -1
- package/dist/extras/extensions/mcp/extension.js.map +0 -1
- package/dist/extras/extensions/mcp/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/mcp/extension.test.js.map +0 -1
- package/dist/extras/extensions/mcp/index.d.ts.map +0 -1
- package/dist/extras/extensions/mcp/index.js.map +0 -1
- package/dist/extras/extensions/mem-session/extension.d.ts.map +0 -1
- package/dist/extras/extensions/mem-session/extension.js.map +0 -1
- package/dist/extras/extensions/mem-session/index.d.ts.map +0 -1
- package/dist/extras/extensions/mem-session/index.js.map +0 -1
- package/dist/extras/extensions/memory/extension.d.ts.map +0 -1
- package/dist/extras/extensions/memory/extension.js.map +0 -1
- package/dist/extras/extensions/memory/index.d.ts +0 -5
- package/dist/extras/extensions/memory/index.d.ts.map +0 -1
- package/dist/extras/extensions/memory/index.js.map +0 -1
- package/dist/extras/extensions/memory/llm-extractor.d.ts.map +0 -1
- package/dist/extras/extensions/memory/llm-extractor.js.map +0 -1
- package/dist/extras/extensions/memory/types.d.ts.map +0 -1
- package/dist/extras/extensions/memory/types.js.map +0 -1
- package/dist/extras/extensions/otel/extension.d.ts.map +0 -1
- package/dist/extras/extensions/otel/extension.js.map +0 -1
- package/dist/extras/extensions/otel/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/otel/extension.test.js.map +0 -1
- package/dist/extras/extensions/otel/index.d.ts.map +0 -1
- package/dist/extras/extensions/otel/index.js.map +0 -1
- package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts.map +0 -1
- package/dist/extras/extensions/otel/jsonl-span-exporter.js.map +0 -1
- package/dist/extras/extensions/scripts/extension.d.ts.map +0 -1
- package/dist/extras/extensions/scripts/extension.js.map +0 -1
- package/dist/extras/extensions/scripts/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/scripts/extension.test.js.map +0 -1
- package/dist/extras/extensions/scripts/index.d.ts.map +0 -1
- package/dist/extras/extensions/scripts/index.js.map +0 -1
- package/dist/extras/extensions/skills/extension.d.ts.map +0 -1
- package/dist/extras/extensions/skills/extension.js.map +0 -1
- package/dist/extras/extensions/skills/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/skills/extension.test.js.map +0 -1
- package/dist/extras/extensions/skills/index.d.ts.map +0 -1
- package/dist/extras/extensions/skills/index.js.map +0 -1
- package/dist/extras/extensions/streaming/extension.d.ts.map +0 -1
- package/dist/extras/extensions/streaming/extension.js.map +0 -1
- package/dist/extras/extensions/streaming/index.d.ts.map +0 -1
- package/dist/extras/extensions/streaming/index.js.map +0 -1
- package/dist/extras/extensions/structured-output/extension.d.ts.map +0 -1
- package/dist/extras/extensions/structured-output/extension.js.map +0 -1
- package/dist/extras/extensions/structured-output/index.d.ts.map +0 -1
- package/dist/extras/extensions/structured-output/index.js.map +0 -1
- package/dist/extras/extensions/timestamp/extension.d.ts.map +0 -1
- package/dist/extras/extensions/timestamp/extension.js.map +0 -1
- package/dist/extras/extensions/timestamp/index.d.ts.map +0 -1
- package/dist/extras/extensions/timestamp/index.js.map +0 -1
- package/dist/extras/extensions/token-stats/extension.d.ts.map +0 -1
- package/dist/extras/extensions/token-stats/extension.js.map +0 -1
- package/dist/extras/extensions/token-stats/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/token-stats/extension.test.js.map +0 -1
- package/dist/extras/extensions/token-stats/index.d.ts.map +0 -1
- package/dist/extras/extensions/token-stats/index.js.map +0 -1
- package/dist/extras/extensions/tool-buffer/extension.d.ts.map +0 -1
- package/dist/extras/extensions/tool-buffer/extension.js.map +0 -1
- package/dist/extras/extensions/tool-buffer/extension.test.d.ts.map +0 -1
- package/dist/extras/extensions/tool-buffer/extension.test.js.map +0 -1
- package/dist/extras/extensions/tool-buffer/index.d.ts.map +0 -1
- package/dist/extras/extensions/tool-buffer/index.js.map +0 -1
- package/dist/extras/extensions/weather-tool/extension.d.ts.map +0 -1
- package/dist/extras/extensions/weather-tool/extension.js.map +0 -1
- package/dist/extras/extensions/weather-tool/index.d.ts.map +0 -1
- package/dist/extras/extensions/weather-tool/index.js.map +0 -1
- package/dist/extras/models/ai-sdk-resolver.d.ts.map +0 -1
- package/dist/extras/models/ai-sdk-resolver.js.map +0 -1
- package/dist/extras/models/index.d.ts.map +0 -1
- package/dist/extras/models/index.js.map +0 -1
- package/dist/extras/models/routing-model.d.ts.map +0 -1
- package/dist/extras/models/routing-model.js.map +0 -1
- package/dist/extras/openai-provider/index.d.ts.map +0 -1
- package/dist/extras/openai-provider/index.js.map +0 -1
- package/dist/extras/openai-provider/server.d.ts.map +0 -1
- package/dist/extras/openai-provider/server.js.map +0 -1
- /package/dist/{extras/extensions → extensions}/auto-steer/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/auto-steer/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/auto-steer/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/auto-steer/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/code-tools/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/code-tools/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/code-tools/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/code-tools/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/code-tools/tools/find.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/code-tools/tools/grep.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/code-tools/tools/read.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/code-tools/tools/write.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/disk-session/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/disk-session/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/emoji/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/emoji/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/emoji/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/emoji/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/filesystem/extension.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/filesystem/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/filesystem/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/filesystem/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/filesystem/extension.test.js +0 -0
- /package/dist/{extras/extensions → extensions}/filesystem/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/filesystem/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.test.js +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.js +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.test.js +0 -0
- /package/dist/{extras/extensions → extensions}/logger/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/logger/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/logger/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/mcp/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/mcp/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/mcp/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/mcp/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/mcp/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/mem-session/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/mem-session/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/mem-session/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/mem-session/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/memory/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/memory/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/memory/types.js +0 -0
- /package/dist/{extras/extensions → extensions}/otel/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/otel/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/otel/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/otel/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/otel/jsonl-span-exporter.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/otel/jsonl-span-exporter.js +0 -0
- /package/dist/{extras/extensions → extensions}/scripts/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/scripts/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/scripts/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/scripts/extension.test.js +0 -0
- /package/dist/{extras/extensions → extensions}/scripts/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/scripts/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/skills/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/skills/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/skills/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/skills/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/skills/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/streaming/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/streaming/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/streaming/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/streaming/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/structured-output/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/structured-output/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/structured-output/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/structured-output/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/timestamp/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/timestamp/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/timestamp/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/timestamp/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/token-stats/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/token-stats/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/token-stats/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/token-stats/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/token-stats/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/tool-buffer/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/tool-buffer/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/tool-buffer/extension.test.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/tool-buffer/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/tool-buffer/index.js +0 -0
- /package/dist/{extras/extensions → extensions}/weather-tool/extension.js +0 -0
- /package/dist/{extras/extensions → extensions}/weather-tool/extension.json +0 -0
- /package/dist/{extras/extensions → extensions}/weather-tool/index.d.ts +0 -0
- /package/dist/{extras/extensions → extensions}/weather-tool/index.js +0 -0
- /package/dist/{extras/models → models}/index.d.ts +0 -0
- /package/dist/{extras/models → models}/index.js +0 -0
- /package/dist/{extras/openai-provider → openai-provider}/index.d.ts +0 -0
- /package/dist/{extras/openai-provider → openai-provider}/index.js +0 -0
- /package/dist/{extras/openai-provider → openai-provider}/server.js +0 -0
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import { describe, expect, it, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { mkdtempSync, rmSync, writeFileSync, readFileSync, mkdirSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { Agent } from '../../agent.js';
|
|
6
|
+
import createCodeToolsExtension from './extension.js';
|
|
7
|
+
function mockModel() {
|
|
8
|
+
return {
|
|
9
|
+
id: 'test-model',
|
|
10
|
+
provider: 'test-provider',
|
|
11
|
+
async generate() {
|
|
12
|
+
return {
|
|
13
|
+
role: 'assistant',
|
|
14
|
+
message: 'ok',
|
|
15
|
+
finishReason: 'stop',
|
|
16
|
+
iterations: 1,
|
|
17
|
+
metadata: {},
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
describe('code-tools extension', () => {
|
|
23
|
+
let tmpDir;
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
tmpDir = mkdtempSync(join(tmpdir(), 'code-tools-test-'));
|
|
26
|
+
});
|
|
27
|
+
afterEach(() => {
|
|
28
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
29
|
+
});
|
|
30
|
+
// ── read tool ──────────────────────────────────────────────────────
|
|
31
|
+
describe('read tool', () => {
|
|
32
|
+
it('reads a text file with line numbers', async () => {
|
|
33
|
+
const filePath = join(tmpDir, 'test.txt');
|
|
34
|
+
writeFileSync(filePath, 'line one\nline two\nline three');
|
|
35
|
+
const agent = new Agent({ model: mockModel() });
|
|
36
|
+
agent.use(createCodeToolsExtension());
|
|
37
|
+
const tools = agent.tools;
|
|
38
|
+
const readTool = tools.get('read');
|
|
39
|
+
expect(readTool).toBeDefined();
|
|
40
|
+
const result = await readTool.execute({ file_path: filePath }, { signal: new AbortController().signal, metadata: {} });
|
|
41
|
+
expect(result.content).toContain('test.txt');
|
|
42
|
+
expect(result.content).toMatch(/1\tline one/);
|
|
43
|
+
expect(result.content).toMatch(/2\tline two/);
|
|
44
|
+
expect(result.content).toMatch(/3\tline three/);
|
|
45
|
+
});
|
|
46
|
+
it('returns error if file_path is missing', async () => {
|
|
47
|
+
const agent = new Agent({ model: mockModel() });
|
|
48
|
+
agent.use(createCodeToolsExtension());
|
|
49
|
+
const readTool = agent.tools.get('read');
|
|
50
|
+
const result = await readTool.execute({}, { signal: new AbortController().signal, metadata: {} });
|
|
51
|
+
expect(result.content).toContain('Error: file_path is required');
|
|
52
|
+
});
|
|
53
|
+
it('returns error for non-existent file', async () => {
|
|
54
|
+
const agent = new Agent({ model: mockModel() });
|
|
55
|
+
agent.use(createCodeToolsExtension());
|
|
56
|
+
const readTool = agent.tools.get('read');
|
|
57
|
+
const result = await readTool.execute({ file_path: join(tmpDir, 'nope.txt') }, { signal: new AbortController().signal, metadata: {} });
|
|
58
|
+
expect(result.content).toContain('File not found');
|
|
59
|
+
});
|
|
60
|
+
it('returns error for directory path', async () => {
|
|
61
|
+
const agent = new Agent({ model: mockModel() });
|
|
62
|
+
agent.use(createCodeToolsExtension());
|
|
63
|
+
const readTool = agent.tools.get('read');
|
|
64
|
+
const subDir = join(tmpDir, 'subdir');
|
|
65
|
+
mkdirSync(subDir);
|
|
66
|
+
const result = await readTool.execute({ file_path: subDir }, { signal: new AbortController().signal, metadata: {} });
|
|
67
|
+
expect(result.content).toContain('Path is a directory, not a file');
|
|
68
|
+
});
|
|
69
|
+
it('respects startLine and endLine pagination', async () => {
|
|
70
|
+
const filePath = join(tmpDir, 'paginated.txt');
|
|
71
|
+
const lines = Array.from({ length: 20 }, (_, i) => `line ${i + 1}`).join('\n');
|
|
72
|
+
writeFileSync(filePath, lines);
|
|
73
|
+
const agent = new Agent({ model: mockModel() });
|
|
74
|
+
agent.use(createCodeToolsExtension());
|
|
75
|
+
const readTool = agent.tools.get('read');
|
|
76
|
+
const result = await readTool.execute({ file_path: filePath, startLine: 5, endLine: 8 }, { signal: new AbortController().signal, metadata: {} });
|
|
77
|
+
expect(result.content).not.toContain('line 4\n');
|
|
78
|
+
expect(result.content).toMatch(/5\tline 5/);
|
|
79
|
+
expect(result.content).toMatch(/8\tline 8/);
|
|
80
|
+
expect(result.content).not.toMatch(/9\tline 9/);
|
|
81
|
+
expect(result.content).toContain('[showing lines 5-8 of 20 total]');
|
|
82
|
+
});
|
|
83
|
+
it('returns base64 for binary files', async () => {
|
|
84
|
+
const filePath = join(tmpDir, 'binary.bin');
|
|
85
|
+
const binData = Buffer.from([0x00, 0x01, 0x02, 0x03, 0xff]);
|
|
86
|
+
writeFileSync(filePath, binData);
|
|
87
|
+
const agent = new Agent({ model: mockModel() });
|
|
88
|
+
agent.use(createCodeToolsExtension());
|
|
89
|
+
const readTool = agent.tools.get('read');
|
|
90
|
+
const result = await readTool.execute({ file_path: filePath }, { signal: new AbortController().signal, metadata: {} });
|
|
91
|
+
expect(result.content).toContain('binary');
|
|
92
|
+
expect(result.content).toContain('base64:');
|
|
93
|
+
});
|
|
94
|
+
it('returns data URL for image files', async () => {
|
|
95
|
+
const filePath = join(tmpDir, 'image.png');
|
|
96
|
+
const pngHeader = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
97
|
+
writeFileSync(filePath, pngHeader);
|
|
98
|
+
const agent = new Agent({ model: mockModel() });
|
|
99
|
+
agent.use(createCodeToolsExtension());
|
|
100
|
+
const readTool = agent.tools.get('read');
|
|
101
|
+
const result = await readTool.execute({ file_path: filePath }, { signal: new AbortController().signal, metadata: {} });
|
|
102
|
+
expect(result.content).toContain('data:image/png;base64,');
|
|
103
|
+
});
|
|
104
|
+
it('tracks read paths in metadata for edit/write enforcement', async () => {
|
|
105
|
+
const filePath = join(tmpDir, 'tracked.txt');
|
|
106
|
+
writeFileSync(filePath, 'content');
|
|
107
|
+
const agent = new Agent({ model: mockModel() });
|
|
108
|
+
agent.use(createCodeToolsExtension());
|
|
109
|
+
const readTool = agent.tools.get('read');
|
|
110
|
+
const metadata = {};
|
|
111
|
+
await readTool.execute({ file_path: filePath }, { signal: new AbortController().signal, metadata });
|
|
112
|
+
const readSet = metadata.__codeToolsReadPaths;
|
|
113
|
+
expect(readSet).toBeDefined();
|
|
114
|
+
expect(readSet.has(filePath)).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
// ── write tool ─────────────────────────────────────────────────────
|
|
118
|
+
describe('write tool', () => {
|
|
119
|
+
it('creates a new file', async () => {
|
|
120
|
+
const filePath = join(tmpDir, 'new.txt');
|
|
121
|
+
const agent = new Agent({ model: mockModel() });
|
|
122
|
+
agent.use(createCodeToolsExtension());
|
|
123
|
+
const writeTool = agent.tools.get('write');
|
|
124
|
+
const result = await writeTool.execute({ file_path: filePath, content: 'created' }, { signal: new AbortController().signal, metadata: {} });
|
|
125
|
+
expect(result.content).toContain('Wrote 7 chars');
|
|
126
|
+
expect(readFileSync(filePath, 'utf-8')).toBe('created');
|
|
127
|
+
});
|
|
128
|
+
it('creates parent directories recursively', async () => {
|
|
129
|
+
const filePath = join(tmpDir, 'nested', 'sub', 'file.txt');
|
|
130
|
+
const agent = new Agent({ model: mockModel() });
|
|
131
|
+
agent.use(createCodeToolsExtension());
|
|
132
|
+
const writeTool = agent.tools.get('write');
|
|
133
|
+
await writeTool.execute({ file_path: filePath, content: 'nested' }, { signal: new AbortController().signal, metadata: {} });
|
|
134
|
+
expect(readFileSync(filePath, 'utf-8')).toBe('nested');
|
|
135
|
+
});
|
|
136
|
+
it('returns error if file_path is missing', async () => {
|
|
137
|
+
const agent = new Agent({ model: mockModel() });
|
|
138
|
+
agent.use(createCodeToolsExtension());
|
|
139
|
+
const writeTool = agent.tools.get('write');
|
|
140
|
+
const result = await writeTool.execute({}, { signal: new AbortController().signal, metadata: {} });
|
|
141
|
+
expect(result.content).toContain('file_path is required');
|
|
142
|
+
});
|
|
143
|
+
it('refuses to overwrite an existing file without reading first', async () => {
|
|
144
|
+
const filePath = join(tmpDir, 'existing.txt');
|
|
145
|
+
writeFileSync(filePath, 'original');
|
|
146
|
+
const agent = new Agent({ model: mockModel() });
|
|
147
|
+
agent.use(createCodeToolsExtension());
|
|
148
|
+
const writeTool = agent.tools.get('write');
|
|
149
|
+
const result = await writeTool.execute({ file_path: filePath, content: 'updated' }, { signal: new AbortController().signal, metadata: {} });
|
|
150
|
+
expect(result.isError).toBe(true);
|
|
151
|
+
expect(result.content).toContain('You must read');
|
|
152
|
+
expect(readFileSync(filePath, 'utf-8')).toBe('original');
|
|
153
|
+
});
|
|
154
|
+
it('overwrites an existing file after reading it', async () => {
|
|
155
|
+
const filePath = join(tmpDir, 'allowed.txt');
|
|
156
|
+
writeFileSync(filePath, 'original');
|
|
157
|
+
const agent = new Agent({ model: mockModel() });
|
|
158
|
+
agent.use(createCodeToolsExtension());
|
|
159
|
+
const tools = agent.tools;
|
|
160
|
+
const readTool = tools.get('read');
|
|
161
|
+
const writeTool = tools.get('write');
|
|
162
|
+
const metadata = {};
|
|
163
|
+
const ctx = { signal: new AbortController().signal, metadata };
|
|
164
|
+
await readTool.execute({ file_path: filePath }, ctx);
|
|
165
|
+
const result = await writeTool.execute({ file_path: filePath, content: 'overwritten' }, ctx);
|
|
166
|
+
expect(result.content).toContain('Wrote 11 chars');
|
|
167
|
+
expect(readFileSync(filePath, 'utf-8')).toBe('overwritten');
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
// ── edit tool ──────────────────────────────────────────────────────
|
|
171
|
+
describe('edit tool', () => {
|
|
172
|
+
it('refuses to edit without reading first', async () => {
|
|
173
|
+
const filePath = join(tmpDir, 'edit-me.txt');
|
|
174
|
+
writeFileSync(filePath, 'alpha\nbeta\ngamma');
|
|
175
|
+
const agent = new Agent({ model: mockModel() });
|
|
176
|
+
agent.use(createCodeToolsExtension());
|
|
177
|
+
const editTool = agent.tools.get('edit');
|
|
178
|
+
const result = await editTool.execute({
|
|
179
|
+
file_path: filePath,
|
|
180
|
+
startLine: 1,
|
|
181
|
+
endLine: 3,
|
|
182
|
+
targetContent: 'beta',
|
|
183
|
+
replacementContent: 'BETA',
|
|
184
|
+
}, { signal: new AbortController().signal, metadata: {} });
|
|
185
|
+
expect(result.isError).toBe(true);
|
|
186
|
+
expect(result.content).toContain('You must read');
|
|
187
|
+
});
|
|
188
|
+
it('fails if line range is invalid or startLine > endLine', async () => {
|
|
189
|
+
const filePath = join(tmpDir, 'range-check.txt');
|
|
190
|
+
writeFileSync(filePath, 'a\nb\nc');
|
|
191
|
+
const agent = new Agent({ model: mockModel() });
|
|
192
|
+
agent.use(createCodeToolsExtension());
|
|
193
|
+
const editTool = agent.tools.get('edit');
|
|
194
|
+
const result = await editTool.execute({
|
|
195
|
+
file_path: filePath,
|
|
196
|
+
startLine: 5,
|
|
197
|
+
endLine: 2,
|
|
198
|
+
targetContent: 'b',
|
|
199
|
+
replacementContent: 'B',
|
|
200
|
+
}, { signal: new AbortController().signal, metadata: {} });
|
|
201
|
+
expect(result.isError).toBe(true);
|
|
202
|
+
expect(result.content).toContain('Invalid line range');
|
|
203
|
+
});
|
|
204
|
+
it('fails if targetContent and replacementContent are identical', async () => {
|
|
205
|
+
const filePath = join(tmpDir, 'identical.txt');
|
|
206
|
+
writeFileSync(filePath, 'same');
|
|
207
|
+
const agent = new Agent({ model: mockModel() });
|
|
208
|
+
agent.use(createCodeToolsExtension());
|
|
209
|
+
const editTool = agent.tools.get('edit');
|
|
210
|
+
const result = await editTool.execute({
|
|
211
|
+
file_path: filePath,
|
|
212
|
+
startLine: 1,
|
|
213
|
+
endLine: 1,
|
|
214
|
+
targetContent: 'same',
|
|
215
|
+
replacementContent: 'same',
|
|
216
|
+
}, { signal: new AbortController().signal, metadata: {} });
|
|
217
|
+
expect(result.isError).toBe(true);
|
|
218
|
+
expect(result.content).toContain('identical');
|
|
219
|
+
});
|
|
220
|
+
it('replaces a unique targetContent in the specified line range', async () => {
|
|
221
|
+
const filePath = join(tmpDir, 'block-edit.txt');
|
|
222
|
+
writeFileSync(filePath, 'line1\nline2\nline3\nline4\nline5\n');
|
|
223
|
+
const agent = new Agent({ model: mockModel() });
|
|
224
|
+
agent.use(createCodeToolsExtension());
|
|
225
|
+
const tools = agent.tools;
|
|
226
|
+
const readTool = tools.get('read');
|
|
227
|
+
const editTool = tools.get('edit');
|
|
228
|
+
const metadata = {};
|
|
229
|
+
const ctx = { signal: new AbortController().signal, metadata };
|
|
230
|
+
await readTool.execute({ file_path: filePath }, ctx);
|
|
231
|
+
const result = await editTool.execute({
|
|
232
|
+
file_path: filePath,
|
|
233
|
+
startLine: 2,
|
|
234
|
+
endLine: 4,
|
|
235
|
+
targetContent: 'line3',
|
|
236
|
+
replacementContent: 'MODIFIED_LINE_3',
|
|
237
|
+
}, ctx);
|
|
238
|
+
expect(result.isError).toBeFalsy();
|
|
239
|
+
expect(result.content).toContain('Successfully edited');
|
|
240
|
+
const updated = readFileSync(filePath, 'utf-8');
|
|
241
|
+
expect(updated).toBe('line1\nline2\nMODIFIED_LINE_3\nline4\nline5\n');
|
|
242
|
+
});
|
|
243
|
+
it('replaces a multi-line block across several lines', async () => {
|
|
244
|
+
const filePath = join(tmpDir, 'multiline.txt');
|
|
245
|
+
writeFileSync(filePath, 'start\nfunction test() {\n return 1;\n}\nend\n');
|
|
246
|
+
const agent = new Agent({ model: mockModel() });
|
|
247
|
+
agent.use(createCodeToolsExtension());
|
|
248
|
+
const tools = agent.tools;
|
|
249
|
+
const readTool = tools.get('read');
|
|
250
|
+
const editTool = tools.get('edit');
|
|
251
|
+
const metadata = {};
|
|
252
|
+
const ctx = { signal: new AbortController().signal, metadata };
|
|
253
|
+
await readTool.execute({ file_path: filePath }, ctx);
|
|
254
|
+
const result = await editTool.execute({
|
|
255
|
+
file_path: filePath,
|
|
256
|
+
startLine: 2,
|
|
257
|
+
endLine: 4,
|
|
258
|
+
targetContent: 'function test() {\n return 1;\n}',
|
|
259
|
+
replacementContent: 'function test() {\n return 42;\n}',
|
|
260
|
+
}, ctx);
|
|
261
|
+
expect(result.isError).toBeFalsy();
|
|
262
|
+
const updated = readFileSync(filePath, 'utf-8');
|
|
263
|
+
expect(updated).toBe('start\nfunction test() {\n return 42;\n}\nend\n');
|
|
264
|
+
});
|
|
265
|
+
it('fails if targetContent is not found within line range', async () => {
|
|
266
|
+
const filePath = join(tmpDir, 'not-found.txt');
|
|
267
|
+
writeFileSync(filePath, 'alpha\nbeta\ngamma\ndelta');
|
|
268
|
+
const agent = new Agent({ model: mockModel() });
|
|
269
|
+
agent.use(createCodeToolsExtension());
|
|
270
|
+
const tools = agent.tools;
|
|
271
|
+
const readTool = tools.get('read');
|
|
272
|
+
const editTool = tools.get('edit');
|
|
273
|
+
const metadata = {};
|
|
274
|
+
const ctx = { signal: new AbortController().signal, metadata };
|
|
275
|
+
await readTool.execute({ file_path: filePath }, ctx);
|
|
276
|
+
const result = await editTool.execute({
|
|
277
|
+
file_path: filePath,
|
|
278
|
+
startLine: 1,
|
|
279
|
+
endLine: 2,
|
|
280
|
+
targetContent: 'delta',
|
|
281
|
+
replacementContent: 'DELTA',
|
|
282
|
+
}, ctx);
|
|
283
|
+
expect(result.isError).toBe(true);
|
|
284
|
+
expect(result.content).toContain('not found in');
|
|
285
|
+
});
|
|
286
|
+
it('fails if targetContent appears multiple times in the range', async () => {
|
|
287
|
+
const filePath = join(tmpDir, 'duplicate.txt');
|
|
288
|
+
writeFileSync(filePath, 'dup\ndup\ndup\n');
|
|
289
|
+
const agent = new Agent({ model: mockModel() });
|
|
290
|
+
agent.use(createCodeToolsExtension());
|
|
291
|
+
const tools = agent.tools;
|
|
292
|
+
const readTool = tools.get('read');
|
|
293
|
+
const editTool = tools.get('edit');
|
|
294
|
+
const metadata = {};
|
|
295
|
+
const ctx = { signal: new AbortController().signal, metadata };
|
|
296
|
+
await readTool.execute({ file_path: filePath }, ctx);
|
|
297
|
+
const result = await editTool.execute({
|
|
298
|
+
file_path: filePath,
|
|
299
|
+
startLine: 1,
|
|
300
|
+
endLine: 3,
|
|
301
|
+
targetContent: 'dup',
|
|
302
|
+
replacementContent: 'new',
|
|
303
|
+
}, ctx);
|
|
304
|
+
expect(result.isError).toBe(true);
|
|
305
|
+
expect(result.content).toContain('appears 3 times');
|
|
306
|
+
});
|
|
307
|
+
it('returns error if file_path is missing or file does not exist', async () => {
|
|
308
|
+
const agent = new Agent({ model: mockModel() });
|
|
309
|
+
agent.use(createCodeToolsExtension());
|
|
310
|
+
const editTool = agent.tools.get('edit');
|
|
311
|
+
const res1 = await editTool.execute({ startLine: 1, endLine: 1, targetContent: 'a', replacementContent: 'b' }, { signal: new AbortController().signal, metadata: {} });
|
|
312
|
+
expect(res1.content).toContain('file_path is required');
|
|
313
|
+
const res2 = await editTool.execute({ file_path: join(tmpDir, 'ghost.txt'), startLine: 1, endLine: 1, targetContent: 'a', replacementContent: 'b' }, { signal: new AbortController().signal, metadata: {} });
|
|
314
|
+
expect(res2.content).toContain('File not found');
|
|
315
|
+
});
|
|
316
|
+
});
|
|
317
|
+
// ── find_file_by_name tool ──────────────────────────────────────────
|
|
318
|
+
describe('find_file_by_name tool', () => {
|
|
319
|
+
it('finds files by glob pattern', async () => {
|
|
320
|
+
writeFileSync(join(tmpDir, 'foo.ts'), '');
|
|
321
|
+
writeFileSync(join(tmpDir, 'bar.ts'), '');
|
|
322
|
+
writeFileSync(join(tmpDir, 'baz.js'), '');
|
|
323
|
+
const agent = new Agent({ model: mockModel() });
|
|
324
|
+
agent.use(createCodeToolsExtension());
|
|
325
|
+
const findTool = agent.tools.get('find_file_by_name');
|
|
326
|
+
const result = await findTool.execute({ pattern: '*.ts', path: tmpDir }, { signal: new AbortController().signal, metadata: {} });
|
|
327
|
+
expect(result.content).toContain('foo.ts');
|
|
328
|
+
expect(result.content).toContain('bar.ts');
|
|
329
|
+
expect(result.content).not.toContain('baz.js');
|
|
330
|
+
});
|
|
331
|
+
it('returns message when no files match', async () => {
|
|
332
|
+
const agent = new Agent({ model: mockModel() });
|
|
333
|
+
agent.use(createCodeToolsExtension());
|
|
334
|
+
const findTool = agent.tools.get('find_file_by_name');
|
|
335
|
+
const result = await findTool.execute({ pattern: '*.nonexistent', path: tmpDir }, { signal: new AbortController().signal, metadata: {} });
|
|
336
|
+
expect(result.content).toContain('No files matching');
|
|
337
|
+
});
|
|
338
|
+
it('returns error for missing pattern or non-existent path', async () => {
|
|
339
|
+
const agent = new Agent({ model: mockModel() });
|
|
340
|
+
agent.use(createCodeToolsExtension());
|
|
341
|
+
const findTool = agent.tools.get('find_file_by_name');
|
|
342
|
+
const res1 = await findTool.execute({}, { signal: new AbortController().signal, metadata: {} });
|
|
343
|
+
expect(res1.content).toContain('pattern is required');
|
|
344
|
+
const res2 = await findTool.execute({ pattern: '*', path: join(tmpDir, 'does-not-exist') }, { signal: new AbortController().signal, metadata: {} });
|
|
345
|
+
expect(res2.content).toContain('Directory not found');
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
// ── grep tool ───────────────────────────────────────────────────────
|
|
349
|
+
describe('grep tool', () => {
|
|
350
|
+
it('finds matching lines with ripgrep', async () => {
|
|
351
|
+
writeFileSync(join(tmpDir, 'sample.txt'), 'hello world\ngoodbye world\nhello universe\n');
|
|
352
|
+
const agent = new Agent({ model: mockModel() });
|
|
353
|
+
agent.use(createCodeToolsExtension());
|
|
354
|
+
const grepTool = agent.tools.get('grep');
|
|
355
|
+
const result = await grepTool.execute({ pattern: 'hello', path: tmpDir }, { signal: new AbortController().signal, metadata: {} });
|
|
356
|
+
expect(result.content).toContain('hello world');
|
|
357
|
+
expect(result.content).toContain('hello universe');
|
|
358
|
+
expect(result.content).not.toContain('goodbye world');
|
|
359
|
+
});
|
|
360
|
+
it('supports case_insensitive search', async () => {
|
|
361
|
+
writeFileSync(join(tmpDir, 'case.txt'), 'ABC\nabc\n');
|
|
362
|
+
const agent = new Agent({ model: mockModel() });
|
|
363
|
+
agent.use(createCodeToolsExtension());
|
|
364
|
+
const grepTool = agent.tools.get('grep');
|
|
365
|
+
const result = await grepTool.execute({ pattern: 'abc', path: tmpDir, case_insensitive: true }, { signal: new AbortController().signal, metadata: {} });
|
|
366
|
+
expect(result.content).toContain('ABC');
|
|
367
|
+
expect(result.content).toContain('abc');
|
|
368
|
+
});
|
|
369
|
+
it('supports context_lines', async () => {
|
|
370
|
+
writeFileSync(join(tmpDir, 'ctx.txt'), 'line1\nTARGET\nline3\n');
|
|
371
|
+
const agent = new Agent({ model: mockModel() });
|
|
372
|
+
agent.use(createCodeToolsExtension());
|
|
373
|
+
const grepTool = agent.tools.get('grep');
|
|
374
|
+
const result = await grepTool.execute({ pattern: 'TARGET', path: tmpDir, context_lines: 1 }, { signal: new AbortController().signal, metadata: {} });
|
|
375
|
+
expect(result.content).toContain('line1');
|
|
376
|
+
expect(result.content).toContain('TARGET');
|
|
377
|
+
expect(result.content).toContain('line3');
|
|
378
|
+
});
|
|
379
|
+
it('returns message when no matches are found', async () => {
|
|
380
|
+
writeFileSync(join(tmpDir, 'empty.txt'), 'nothing here');
|
|
381
|
+
const agent = new Agent({ model: mockModel() });
|
|
382
|
+
agent.use(createCodeToolsExtension());
|
|
383
|
+
const grepTool = agent.tools.get('grep');
|
|
384
|
+
const result = await grepTool.execute({ pattern: 'MISSING_KEYWORD', path: tmpDir }, { signal: new AbortController().signal, metadata: {} });
|
|
385
|
+
expect(result.content).toContain('No matches found for');
|
|
386
|
+
});
|
|
387
|
+
});
|
|
388
|
+
// ── run_command & manage_task tools ─────────────────────────────────
|
|
389
|
+
describe('run_command and manage_task tools', () => {
|
|
390
|
+
it('executes a command synchronously and returns output', async () => {
|
|
391
|
+
const agent = new Agent({ model: mockModel() });
|
|
392
|
+
agent.use(createCodeToolsExtension());
|
|
393
|
+
const runTool = agent.tools.get('run_command');
|
|
394
|
+
const result = await runTool.execute({ CommandLine: 'echo "hello from bash"', Cwd: tmpDir, WaitMsBeforeAsync: 3000 }, { signal: new AbortController().signal, metadata: {} });
|
|
395
|
+
expect(result.content).toContain('Command completed');
|
|
396
|
+
expect(result.content).toContain('hello from bash');
|
|
397
|
+
});
|
|
398
|
+
it('captures failing commands with non-zero exit code', async () => {
|
|
399
|
+
const agent = new Agent({ model: mockModel() });
|
|
400
|
+
agent.use(createCodeToolsExtension());
|
|
401
|
+
const runTool = agent.tools.get('run_command');
|
|
402
|
+
const result = await runTool.execute({ CommandLine: 'exit 42', Cwd: tmpDir, WaitMsBeforeAsync: 3000 }, { signal: new AbortController().signal, metadata: {} });
|
|
403
|
+
expect(result.content).toContain('exit code 42');
|
|
404
|
+
});
|
|
405
|
+
it('backgrounds immediately when WaitMsBeforeAsync is 0', async () => {
|
|
406
|
+
const agent = new Agent({ model: mockModel() });
|
|
407
|
+
agent.use(createCodeToolsExtension());
|
|
408
|
+
const runTool = agent.tools.get('run_command');
|
|
409
|
+
const manageTool = agent.tools.get('manage_task');
|
|
410
|
+
const result = await runTool.execute({ CommandLine: 'sleep 1', Cwd: tmpDir, WaitMsBeforeAsync: 0 }, { signal: new AbortController().signal, metadata: {} });
|
|
411
|
+
expect(result.content).toContain('Command sent to background. Task ID:');
|
|
412
|
+
const match = result.content.match(/Task ID: (task_\d+)/);
|
|
413
|
+
expect(match).toBeTruthy();
|
|
414
|
+
const taskId = match[1];
|
|
415
|
+
// Check status using manage_task
|
|
416
|
+
const statusRes = await manageTool.execute({ Action: 'status', TaskId: taskId }, { signal: new AbortController().signal, metadata: {} });
|
|
417
|
+
expect(statusRes.content).toBeDefined();
|
|
418
|
+
// Kill the task
|
|
419
|
+
const killRes = await manageTool.execute({ Action: 'kill', TaskId: taskId }, { signal: new AbortController().signal, metadata: {} });
|
|
420
|
+
expect(killRes.content).toContain(`Killed task ${taskId}`);
|
|
421
|
+
});
|
|
422
|
+
it('handles run_command and manage_task error conditions', async () => {
|
|
423
|
+
const agent = new Agent({ model: mockModel() });
|
|
424
|
+
agent.use(createCodeToolsExtension());
|
|
425
|
+
const runTool = agent.tools.get('run_command');
|
|
426
|
+
const manageTool = agent.tools.get('manage_task');
|
|
427
|
+
const noCmd = await runTool.execute({}, { signal: new AbortController().signal, metadata: {} });
|
|
428
|
+
expect(noCmd.content).toContain('CommandLine is required');
|
|
429
|
+
const noTaskId = await manageTool.execute({ Action: 'kill' }, { signal: new AbortController().signal, metadata: {} });
|
|
430
|
+
expect(noTaskId.content).toContain('TaskId is required');
|
|
431
|
+
const unknownTask = await manageTool.execute({ Action: 'status', TaskId: 'task_99999' }, { signal: new AbortController().signal, metadata: {} });
|
|
432
|
+
expect(unknownTask.content).toContain('no task with id "task_99999"');
|
|
433
|
+
const unknownAction = await manageTool.execute({ Action: 'dance', TaskId: 'task_1' }, { signal: new AbortController().signal, metadata: {} });
|
|
434
|
+
expect(unknownAction.content).toContain('no task with id');
|
|
435
|
+
});
|
|
436
|
+
});
|
|
437
|
+
// ── todo_write tool ─────────────────────────────────────────────────
|
|
438
|
+
describe('todo_write tool', () => {
|
|
439
|
+
it('creates and updates todos', async () => {
|
|
440
|
+
const todoFile = join(tmpDir, 'todos.json');
|
|
441
|
+
const agent = new Agent({ model: mockModel() });
|
|
442
|
+
agent.use(createCodeToolsExtension({ todoFile }));
|
|
443
|
+
const todoTool = agent.tools.get('todo_write');
|
|
444
|
+
const res1 = await todoTool.execute({
|
|
445
|
+
todos: [
|
|
446
|
+
{ content: 'Task 1', status: 'completed' },
|
|
447
|
+
{ content: 'Task 2', status: 'in_progress' },
|
|
448
|
+
{ content: 'Task 3', status: 'pending' },
|
|
449
|
+
],
|
|
450
|
+
}, { signal: new AbortController().signal, metadata: {} });
|
|
451
|
+
expect(res1.content).toContain('Updated todo list:');
|
|
452
|
+
expect(res1.content).toContain('[x] Task 1');
|
|
453
|
+
expect(res1.content).toContain('[~] Task 2');
|
|
454
|
+
expect(res1.content).toContain('[ ] Task 3');
|
|
455
|
+
// Check file persistence
|
|
456
|
+
const diskContent = JSON.parse(readFileSync(todoFile, 'utf-8'));
|
|
457
|
+
expect(diskContent).toHaveLength(3);
|
|
458
|
+
expect(diskContent[0].content).toBe('Task 1');
|
|
459
|
+
});
|
|
460
|
+
it('rejects multiple in_progress todos', async () => {
|
|
461
|
+
const agent = new Agent({ model: mockModel() });
|
|
462
|
+
agent.use(createCodeToolsExtension());
|
|
463
|
+
const todoTool = agent.tools.get('todo_write');
|
|
464
|
+
const res = await todoTool.execute({
|
|
465
|
+
todos: [
|
|
466
|
+
{ content: 'Task 1', status: 'in_progress' },
|
|
467
|
+
{ content: 'Task 2', status: 'in_progress' },
|
|
468
|
+
],
|
|
469
|
+
}, { signal: new AbortController().signal, metadata: {} });
|
|
470
|
+
expect(res.isError).toBe(true);
|
|
471
|
+
expect(res.content).toContain('only one todo can be "in_progress"');
|
|
472
|
+
});
|
|
473
|
+
});
|
|
474
|
+
// ── configuration & extension wiring ────────────────────────────────
|
|
475
|
+
describe('configuration', () => {
|
|
476
|
+
it('registers all 8 expected tools without prefix', () => {
|
|
477
|
+
const agent = new Agent({ model: mockModel() });
|
|
478
|
+
agent.use(createCodeToolsExtension());
|
|
479
|
+
const toolNames = Array.from(agent.tools.keys());
|
|
480
|
+
expect(toolNames).toContain('read');
|
|
481
|
+
expect(toolNames).toContain('write');
|
|
482
|
+
expect(toolNames).toContain('edit');
|
|
483
|
+
expect(toolNames).toContain('find_file_by_name');
|
|
484
|
+
expect(toolNames).toContain('grep');
|
|
485
|
+
expect(toolNames).toContain('run_command');
|
|
486
|
+
expect(toolNames).toContain('manage_task');
|
|
487
|
+
expect(toolNames).toContain('todo_write');
|
|
488
|
+
});
|
|
489
|
+
it('supports custom tool prefix', () => {
|
|
490
|
+
const agent = new Agent({ model: mockModel() });
|
|
491
|
+
agent.use(createCodeToolsExtension({ toolPrefix: 'custom' }));
|
|
492
|
+
const toolNames = Array.from(agent.tools.keys());
|
|
493
|
+
expect(toolNames).toContain('custom_read');
|
|
494
|
+
expect(toolNames).toContain('custom_write');
|
|
495
|
+
expect(toolNames).toContain('custom_edit');
|
|
496
|
+
expect(toolNames).toContain('custom_find_file_by_name');
|
|
497
|
+
expect(toolNames).toContain('custom_grep');
|
|
498
|
+
expect(toolNames).toContain('custom_run_command');
|
|
499
|
+
expect(toolNames).toContain('custom_manage_task');
|
|
500
|
+
expect(toolNames).toContain('custom_todo_write');
|
|
501
|
+
});
|
|
502
|
+
});
|
|
503
|
+
});
|
|
504
|
+
//# sourceMappingURL=extension.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../../src/extensions/code-tools/extension.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/code-tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/code-tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Model } from '
|
|
2
|
-
import type { Tool } from '
|
|
1
|
+
import type { Model } from '../../../model.js';
|
|
2
|
+
import type { Tool } from '../../../tool.js';
|
|
3
3
|
export interface CodeSearchConfig {
|
|
4
4
|
/** Tool name prefix (same as the parent extension). */
|
|
5
5
|
toolPrefix: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-search.d.ts","sourceRoot":"","sources":["../../../../src/extensions/code-tools/tools/code-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAO7C,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAkF1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-search.js","sourceRoot":"","sources":["../../../../src/extensions/code-tools/tools/code-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../../src/extensions/code-tools/tools/find.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAmBjF,eAAO,MAAM,kBAAkB,EAAE,WAmE/B,CAAC"}
|