atom-lite 0.5.1 → 0.6.3
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/CHANGELOG.md +33 -1
- package/README.md +60 -116
- package/dist/agent/loop.d.ts +16 -0
- package/dist/agent/loop.js +158 -11
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +1 -0
- package/dist/agent/system-prompt.js +23 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/agent/turn-recorder.d.ts +4 -0
- package/dist/agent/turn-recorder.js +1 -0
- package/dist/agent/turn-recorder.js.map +1 -1
- package/dist/agent/types.d.ts +33 -0
- package/dist/cli/app.js +337 -55
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/commands.js +180 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/diff-view.d.ts +18 -0
- package/dist/cli/diff-view.js +66 -0
- package/dist/cli/diff-view.js.map +1 -0
- package/dist/cli/main.js +2 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/panel.js +8 -8
- package/dist/cli/panel.js.map +1 -1
- package/dist/cli/status-line.d.ts +2 -0
- package/dist/cli/status-line.js +9 -1
- package/dist/cli/status-line.js.map +1 -1
- package/dist/cli/tool-box.d.ts +1 -1
- package/dist/cli/tool-box.js +47 -41
- package/dist/cli/tool-box.js.map +1 -1
- package/dist/config/defaults.d.ts +4 -5
- package/dist/config/defaults.js +6 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/load.js +29 -3
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +14 -14
- package/dist/config/schema.js +8 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/context/budget.js +19 -1
- package/dist/context/budget.js.map +1 -1
- package/dist/context/manager.js +1 -1
- package/dist/context/manager.js.map +1 -1
- package/dist/eval/runner.d.ts +51 -0
- package/dist/eval/runner.js +230 -0
- package/dist/eval/runner.js.map +1 -0
- package/dist/mcp/client.js +2 -1
- package/dist/mcp/client.js.map +1 -1
- package/dist/providers/context-window.d.ts +4 -0
- package/dist/providers/context-window.js +54 -0
- package/dist/providers/context-window.js.map +1 -1
- package/dist/providers/factory.js +3 -0
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/gemini.d.ts +2 -0
- package/dist/providers/gemini.js +18 -11
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/ollama.d.ts +3 -0
- package/dist/providers/ollama.js +9 -0
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai-compatible.d.ts +2 -0
- package/dist/providers/openai-compatible.js +24 -3
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/runtime/background-tasks.d.ts +23 -0
- package/dist/runtime/background-tasks.js +141 -0
- package/dist/runtime/background-tasks.js.map +1 -0
- package/dist/runtime/checkpoint-store.d.ts +64 -0
- package/dist/runtime/checkpoint-store.js +419 -0
- package/dist/runtime/checkpoint-store.js.map +1 -0
- package/dist/runtime/modes.d.ts +3 -0
- package/dist/runtime/modes.js +8 -0
- package/dist/runtime/modes.js.map +1 -0
- package/dist/runtime/tool-executor.js +10 -0
- package/dist/runtime/tool-executor.js.map +1 -1
- package/dist/skills/registry.js +8 -1
- package/dist/skills/registry.js.map +1 -1
- package/dist/tools/bash.js +46 -10
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.js +28 -8
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/glob.d.ts +2 -0
- package/dist/tools/glob.js +97 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +2 -0
- package/dist/tools/grep.js +290 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read.js +70 -9
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/task.d.ts +2 -0
- package/dist/tools/task.js +55 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/types.d.ts +10 -1
- package/dist/tools/write.js +29 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/types.d.ts +9 -3
- package/dist/types.js +1 -4
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +1 -0
- package/dist/version.js +14 -0
- package/dist/version.js.map +1 -0
- package/package.json +5 -3
- package/skills/atom-lite-extensions/SKILL.md +240 -0
- package/skills/caveman/SKILL.md +89 -0
- package/skills/code-review/SKILL.md +46 -0
- package/skills/optimization/SKILL.md +51 -0
package/dist/tools/bash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,UAAU,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,2FAA2F;QACxG,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC3B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACvB,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC3C,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aAChC;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,KAAK,CAAC,OAAO,CAAC,IAAc,EAAE,GAAgB;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,UAAU,EAAE,IAAI,CAAC,EAAE;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO;gBACzD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAC7D,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;gBACzB,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,8BAA8B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACvG,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YAClE,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACjG,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAC1H,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9I,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;QAClE,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,GAAG,CAAC,SAAS,EAAE,cAAc,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;gBAC7D,OAAO;oBACL,UAAU,EAAE,IAAI,CAAC,EAAE;oBACnB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,wBAAwB;oBACjC,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE;gBAClD,OAAO;gBACP,GAAG,EAAE,OAAO;gBACZ,SAAS,EAAE,OAAO;gBAClB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;oBACL,UAAU,EAAE,IAAI,CAAC,EAAE;oBACnB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE;gBAClD,OAAO;gBACP,GAAG,EAAE,OAAO;gBACZ,SAAS,EAAE,OAAO;gBAClB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;oBACL,UAAU,EAAE,IAAI,CAAC,EAAE;oBACnB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,OAAO,CAAa,CAAC,cAAc,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBAC1C,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;aACvC,CAAC,CAAC;YACH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC;YAC5C,MAAM,MAAM,GAAG,CAAC,MAAqB,EAAE,KAAa,EAAE,EAAE;gBACtD,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBACrB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;wBACnC,SAAS,GAAG,IAAI,CAAC;wBACjB,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;wBACxD,MAAM,IAAI,QAAQ,CAAC;oBACrB,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,CAAC,CAAC;oBACd,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;wBACnC,SAAS,GAAG,IAAI,CAAC;wBACjB,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;wBACxD,MAAM,IAAI,QAAQ,CAAC;oBACrB,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,CAAC,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,IAAI,QAAQ,EAAE,CAAC;oBACb,GAAG,CAAC,YAAY,EAAE,CAChB,IAAI,EACJ,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EACtC,QAAQ,CACT,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC;YACF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,QAAQ,GAAG,IAAI,CAAC;gBAChB,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACvC,UAAU,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACzE,CAAC,EAAE,OAAO,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,aAAa,GAAG,IAAI,CAAC;gBACrB,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACvC,UAAU,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACzE,CAAC,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACjD,cAAc,CAAC;oBACb,UAAU,EAAE,IAAI,CAAC,EAAE;oBACnB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,mBAAmB,GAAG,CAAC,OAAO,EAAE;oBACzC,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBACjC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACpC,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;gBAC3C,IAAI,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;gBAC5C,IAAI,QAAQ;oBAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,IAAI,aAAa;oBAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACjD,IAAI,SAAS;oBAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC9C,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;gBACvC,IAAI,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;gBAC7C,IAAI,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,QAAQ,IAAI,aAAa,CAAC;gBACvD,cAAc,CAAC;oBACb,UAAU,EAAE,IAAI,CAAC,EAAE;oBACnB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzB,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
package/dist/tools/edit.js
CHANGED
|
@@ -50,15 +50,35 @@ export const editTool = {
|
|
|
50
50
|
isError: true,
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
const resolved = resolve(ctx.workspace, path);
|
|
54
|
+
const within = isWithinWorkspace(ctx.workspace, path);
|
|
55
|
+
let full = resolved;
|
|
56
|
+
if (!within) {
|
|
57
|
+
if (ctx.approvals?.nonInteractive || !ctx.approvals?.handler) {
|
|
58
|
+
return {
|
|
59
|
+
toolCallId: call.id,
|
|
60
|
+
name: "edit",
|
|
61
|
+
content: "PATH_OUTSIDE_WORKSPACE",
|
|
62
|
+
isError: true,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const { checkApproval } = await import("../runtime/approvals.js");
|
|
66
|
+
const decision = await checkApproval(ctx.approvals, {
|
|
67
|
+
command: `edit ${path}`,
|
|
68
|
+
cwd: ctx.workspace,
|
|
69
|
+
timeoutMs: 0,
|
|
70
|
+
sandboxed: false,
|
|
71
|
+
});
|
|
72
|
+
if (!decision.allowed) {
|
|
73
|
+
return {
|
|
74
|
+
toolCallId: call.id,
|
|
75
|
+
name: "edit",
|
|
76
|
+
content: "EDIT_APPROVAL_REQUIRED",
|
|
77
|
+
isError: true,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
full = resolved;
|
|
60
81
|
}
|
|
61
|
-
const full = resolve(ctx.workspace, path);
|
|
62
82
|
if (!existsSync(full)) {
|
|
63
83
|
return {
|
|
64
84
|
toolCallId: call.id,
|
package/dist/tools/edit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,UAAU,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,mEAAmE;QACrE,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC9B,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAClC;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC;YAC9C,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,KAAK,CAAC,OAAO,CAAC,IAAc,EAAE,GAAgB;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,UAAU,EAAE,IAAI,CAAC,EAAE;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO;gBACzD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QACpE,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACtB,OAAO;gBACL,UAAU,EAAE,IAAI,CAAC,EAAE;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,qDAAqD;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import { resolve, relative } from "node:path";
|
|
4
|
+
import { spawnSync } from "node:child_process";
|
|
5
|
+
import { isWithinWorkspace } from "../security/paths.js";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
const ArgsSchema = z
|
|
8
|
+
.object({
|
|
9
|
+
pattern: z.string(),
|
|
10
|
+
path: z.string().optional(),
|
|
11
|
+
max_results: z.number().int().positive().optional(),
|
|
12
|
+
})
|
|
13
|
+
.strict();
|
|
14
|
+
const DEFAULT_MAX = 1000;
|
|
15
|
+
export const globTool = {
|
|
16
|
+
definition: {
|
|
17
|
+
name: "glob",
|
|
18
|
+
description: "Find files matching a glob pattern.",
|
|
19
|
+
parameters: {
|
|
20
|
+
type: "object",
|
|
21
|
+
properties: {
|
|
22
|
+
pattern: { type: "string" },
|
|
23
|
+
path: { type: "string" },
|
|
24
|
+
max_results: { type: "integer", minimum: 1 },
|
|
25
|
+
},
|
|
26
|
+
required: ["pattern"],
|
|
27
|
+
additionalProperties: false,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
annotations: { readOnlyHint: true },
|
|
31
|
+
async execute(call, ctx) {
|
|
32
|
+
const parsed = ArgsSchema.safeParse(call.arguments);
|
|
33
|
+
if (!parsed.success) {
|
|
34
|
+
return {
|
|
35
|
+
toolCallId: call.id,
|
|
36
|
+
name: "glob",
|
|
37
|
+
content: "TOOL_ARGUMENT_INVALID: " + parsed.error.message,
|
|
38
|
+
isError: true,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const { pattern, path: searchPath, max_results = DEFAULT_MAX } = parsed.data;
|
|
42
|
+
const root = searchPath ? resolve(ctx.workspace, searchPath) : ctx.workspace;
|
|
43
|
+
if (searchPath && !isWithinWorkspace(ctx.workspace, searchPath)) {
|
|
44
|
+
return {
|
|
45
|
+
toolCallId: call.id,
|
|
46
|
+
name: "glob",
|
|
47
|
+
content: "PATH_OUTSIDE_WORKSPACE",
|
|
48
|
+
isError: true,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (!existsSync(root)) {
|
|
52
|
+
return {
|
|
53
|
+
toolCallId: call.id,
|
|
54
|
+
name: "glob",
|
|
55
|
+
content: "PATH_NOT_FOUND",
|
|
56
|
+
isError: true,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Try ripgrep --files for speed.
|
|
60
|
+
const res = spawnSync("rg", ["--hidden", "--files", "-g", pattern, root], {
|
|
61
|
+
encoding: "utf8",
|
|
62
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
63
|
+
timeout: 30000,
|
|
64
|
+
});
|
|
65
|
+
let matches;
|
|
66
|
+
if (res.error) {
|
|
67
|
+
// Fallback to Node fs.globSync.
|
|
68
|
+
try {
|
|
69
|
+
matches = fs.globSync(pattern, { cwd: root });
|
|
70
|
+
matches = matches.map((m) => resolve(root, m));
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
return {
|
|
74
|
+
toolCallId: call.id,
|
|
75
|
+
name: "glob",
|
|
76
|
+
content: "INVALID_GLOB: " + (err instanceof Error ? err.message : String(err)),
|
|
77
|
+
isError: true,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
matches = (res.stdout || "")
|
|
83
|
+
.split("\n")
|
|
84
|
+
.filter((l) => l.length > 0);
|
|
85
|
+
}
|
|
86
|
+
const out = matches
|
|
87
|
+
.map((m) => relative(ctx.workspace, resolve(root, m)))
|
|
88
|
+
.sort()
|
|
89
|
+
.slice(0, max_results);
|
|
90
|
+
return {
|
|
91
|
+
toolCallId: call.id,
|
|
92
|
+
name: "glob",
|
|
93
|
+
content: out.join("\n") || "(no matches)",
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { readdirSync, statSync, readFileSync, existsSync } from "node:fs";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import { resolve, relative, join } from "node:path";
|
|
4
|
+
import { spawnSync } from "node:child_process";
|
|
5
|
+
import { isWithinWorkspace } from "../security/paths.js";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
const ArgsSchema = z
|
|
8
|
+
.object({
|
|
9
|
+
pattern: z.string(),
|
|
10
|
+
path: z.string().optional(),
|
|
11
|
+
glob: z.string().optional(),
|
|
12
|
+
case_sensitive: z.boolean().optional(),
|
|
13
|
+
context: z.number().int().min(0).optional(),
|
|
14
|
+
max_results: z.number().int().positive().optional(),
|
|
15
|
+
output_mode: z.enum(["content", "files_with_matches", "count"]).optional(),
|
|
16
|
+
})
|
|
17
|
+
.strict();
|
|
18
|
+
const MAX_FILE_BYTES = 1_000_000;
|
|
19
|
+
const DEFAULT_MAX = 100;
|
|
20
|
+
const SKIP_DIRS = new Set([".git", "node_modules", "dist", ".next"]);
|
|
21
|
+
function collectFiles(root, globPattern) {
|
|
22
|
+
try {
|
|
23
|
+
if (statSync(root).isFile())
|
|
24
|
+
return [root];
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// fall through
|
|
28
|
+
}
|
|
29
|
+
if (globPattern) {
|
|
30
|
+
try {
|
|
31
|
+
const matches = fs.globSync(globPattern, { cwd: root });
|
|
32
|
+
return matches.map((m) => resolve(root, m));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// fall through to walk
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const out = [];
|
|
39
|
+
const walk = (dir) => {
|
|
40
|
+
let entries;
|
|
41
|
+
try {
|
|
42
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
for (const e of entries) {
|
|
48
|
+
if (SKIP_DIRS.has(e.name))
|
|
49
|
+
continue;
|
|
50
|
+
const full = join(dir, e.name);
|
|
51
|
+
if (e.isDirectory())
|
|
52
|
+
walk(full);
|
|
53
|
+
else if (e.isFile())
|
|
54
|
+
out.push(full);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
walk(root);
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
function isBinary(buf) {
|
|
61
|
+
for (let i = 0; i < Math.min(buf.length, 8000); i++) {
|
|
62
|
+
if (buf[i] === 0)
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
function grepJs(root, ctx, pattern, caseSensitive, globPattern, context, maxResults, outputMode, cap) {
|
|
68
|
+
const files = collectFiles(root, globPattern);
|
|
69
|
+
let output = "";
|
|
70
|
+
let matchCount = 0;
|
|
71
|
+
const filesWithMatches = new Set();
|
|
72
|
+
const counts = new Map();
|
|
73
|
+
let regex;
|
|
74
|
+
try {
|
|
75
|
+
regex = new RegExp(pattern, caseSensitive ? "g" : "gi");
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
return "INVALID_REGEX: " + (err instanceof Error ? err.message : String(err));
|
|
79
|
+
}
|
|
80
|
+
for (const file of files) {
|
|
81
|
+
if (matchCount >= maxResults && outputMode === "content")
|
|
82
|
+
break;
|
|
83
|
+
let buf;
|
|
84
|
+
try {
|
|
85
|
+
const st = statSync(file);
|
|
86
|
+
if (st.size > MAX_FILE_BYTES)
|
|
87
|
+
continue;
|
|
88
|
+
buf = readFileSync(file);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (isBinary(buf))
|
|
94
|
+
continue;
|
|
95
|
+
const text = buf.toString("utf8");
|
|
96
|
+
const lines = text.split(/\r?\n/);
|
|
97
|
+
const rel = relative(ctx.workspace, file) || file;
|
|
98
|
+
let fileMatched = false;
|
|
99
|
+
for (let i = 0; i < lines.length; i++) {
|
|
100
|
+
regex.lastIndex = 0;
|
|
101
|
+
if (!regex.test(lines[i]))
|
|
102
|
+
continue;
|
|
103
|
+
fileMatched = true;
|
|
104
|
+
counts.set(rel, (counts.get(rel) ?? 0) + 1);
|
|
105
|
+
if (outputMode === "content") {
|
|
106
|
+
if (matchCount >= maxResults)
|
|
107
|
+
continue;
|
|
108
|
+
if (context > 0) {
|
|
109
|
+
const start = Math.max(0, i - context);
|
|
110
|
+
const end = Math.min(lines.length - 1, i + context);
|
|
111
|
+
for (let j = start; j <= end; j++) {
|
|
112
|
+
const prefix = j === i ? `${rel}:${j + 1}:` : `${rel}-${j + 1}-`;
|
|
113
|
+
const line = `${prefix} ${lines[j]}`;
|
|
114
|
+
if (output.length + line.length + 1 > cap)
|
|
115
|
+
break;
|
|
116
|
+
output += line + "\n";
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const line = `${rel}:${i + 1}: ${lines[i]}`;
|
|
121
|
+
if (output.length + line.length + 1 > cap)
|
|
122
|
+
break;
|
|
123
|
+
output += line + "\n";
|
|
124
|
+
}
|
|
125
|
+
matchCount++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (fileMatched)
|
|
129
|
+
filesWithMatches.add(rel);
|
|
130
|
+
}
|
|
131
|
+
if (outputMode === "files_with_matches") {
|
|
132
|
+
return [...filesWithMatches].slice(0, maxResults).join("\n") || "(no matches)";
|
|
133
|
+
}
|
|
134
|
+
if (outputMode === "count") {
|
|
135
|
+
return [...counts.entries()]
|
|
136
|
+
.map(([f, n]) => `${f}: ${n}`)
|
|
137
|
+
.slice(0, maxResults)
|
|
138
|
+
.join("\n") || "(no matches)";
|
|
139
|
+
}
|
|
140
|
+
return output.trimEnd() || "(no matches)";
|
|
141
|
+
}
|
|
142
|
+
function toRelative(p, root, workspace) {
|
|
143
|
+
const abs = resolve(root, p);
|
|
144
|
+
return relative(workspace, abs) || p;
|
|
145
|
+
}
|
|
146
|
+
export const grepTool = {
|
|
147
|
+
definition: {
|
|
148
|
+
name: "grep",
|
|
149
|
+
description: "Search file contents by regular expression.",
|
|
150
|
+
parameters: {
|
|
151
|
+
type: "object",
|
|
152
|
+
properties: {
|
|
153
|
+
pattern: { type: "string" },
|
|
154
|
+
path: { type: "string" },
|
|
155
|
+
glob: { type: "string" },
|
|
156
|
+
case_sensitive: { type: "boolean" },
|
|
157
|
+
context: { type: "integer", minimum: 0 },
|
|
158
|
+
max_results: { type: "integer", minimum: 1 },
|
|
159
|
+
output_mode: {
|
|
160
|
+
type: "string",
|
|
161
|
+
enum: ["content", "files_with_matches", "count"],
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
required: ["pattern"],
|
|
165
|
+
additionalProperties: false,
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
annotations: { readOnlyHint: true },
|
|
169
|
+
async execute(call, ctx) {
|
|
170
|
+
const parsed = ArgsSchema.safeParse(call.arguments);
|
|
171
|
+
if (!parsed.success) {
|
|
172
|
+
return {
|
|
173
|
+
toolCallId: call.id,
|
|
174
|
+
name: "grep",
|
|
175
|
+
content: "TOOL_ARGUMENT_INVALID: " + parsed.error.message,
|
|
176
|
+
isError: true,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const { pattern, path: searchPath, glob: globPattern, case_sensitive = true, context = 0, max_results = DEFAULT_MAX, output_mode = "content", } = parsed.data;
|
|
180
|
+
const root = searchPath ? resolve(ctx.workspace, searchPath) : ctx.workspace;
|
|
181
|
+
if (searchPath && !isWithinWorkspace(ctx.workspace, searchPath)) {
|
|
182
|
+
return {
|
|
183
|
+
toolCallId: call.id,
|
|
184
|
+
name: "grep",
|
|
185
|
+
content: "PATH_OUTSIDE_WORKSPACE",
|
|
186
|
+
isError: true,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (!existsSync(root)) {
|
|
190
|
+
return {
|
|
191
|
+
toolCallId: call.id,
|
|
192
|
+
name: "grep",
|
|
193
|
+
content: "PATH_NOT_FOUND",
|
|
194
|
+
isError: true,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// Try ripgrep first for speed.
|
|
198
|
+
const rgArgs = [];
|
|
199
|
+
if (!case_sensitive)
|
|
200
|
+
rgArgs.push("-i");
|
|
201
|
+
if (globPattern)
|
|
202
|
+
rgArgs.push("-g", globPattern);
|
|
203
|
+
if (context > 0)
|
|
204
|
+
rgArgs.push("-C", String(context));
|
|
205
|
+
if (output_mode === "files_with_matches")
|
|
206
|
+
rgArgs.push("-l");
|
|
207
|
+
else if (output_mode === "count")
|
|
208
|
+
rgArgs.push("-c");
|
|
209
|
+
rgArgs.push("--hidden", "--color=never", "-H", "-n");
|
|
210
|
+
rgArgs.push(pattern);
|
|
211
|
+
rgArgs.push(root);
|
|
212
|
+
const res = spawnSync("rg", rgArgs, {
|
|
213
|
+
encoding: "utf8",
|
|
214
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
215
|
+
timeout: 30000,
|
|
216
|
+
});
|
|
217
|
+
if (res.error || (res.status !== 0 && res.status !== 1)) {
|
|
218
|
+
// Fallback to JS implementation.
|
|
219
|
+
const content = grepJs(root, ctx, pattern, case_sensitive, globPattern, context, max_results, output_mode, ctx.maxToolOutputBytes ?? 30000);
|
|
220
|
+
if (content.startsWith("INVALID_REGEX")) {
|
|
221
|
+
return {
|
|
222
|
+
toolCallId: call.id,
|
|
223
|
+
name: "grep",
|
|
224
|
+
content,
|
|
225
|
+
isError: true,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
return { toolCallId: call.id, name: "grep", content };
|
|
229
|
+
}
|
|
230
|
+
const cap = ctx.maxToolOutputBytes ?? 30000;
|
|
231
|
+
let output = "";
|
|
232
|
+
const filesWithMatches = new Set();
|
|
233
|
+
const counts = [];
|
|
234
|
+
const lines = (res.stdout || "").split("\n").filter((l) => l.length > 0);
|
|
235
|
+
if (output_mode === "files_with_matches") {
|
|
236
|
+
const list = lines
|
|
237
|
+
.map((l) => toRelative(l, root, ctx.workspace))
|
|
238
|
+
.slice(0, max_results);
|
|
239
|
+
return {
|
|
240
|
+
toolCallId: call.id,
|
|
241
|
+
name: "grep",
|
|
242
|
+
content: list.join("\n") || "(no matches)",
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
if (output_mode === "count") {
|
|
246
|
+
const list = lines
|
|
247
|
+
.map((l) => {
|
|
248
|
+
const idx = l.lastIndexOf(":");
|
|
249
|
+
const file = l.slice(0, idx);
|
|
250
|
+
const n = l.slice(idx + 1);
|
|
251
|
+
return `${toRelative(file, root, ctx.workspace)}: ${n}`;
|
|
252
|
+
})
|
|
253
|
+
.slice(0, max_results);
|
|
254
|
+
return {
|
|
255
|
+
toolCallId: call.id,
|
|
256
|
+
name: "grep",
|
|
257
|
+
content: list.join("\n") || "(no matches)",
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
let matchCount = 0;
|
|
261
|
+
for (const line of lines) {
|
|
262
|
+
if (matchCount >= max_results)
|
|
263
|
+
break;
|
|
264
|
+
// content or context lines
|
|
265
|
+
const m = line.match(/^(.+?):(\d+):(.*)$/);
|
|
266
|
+
const ctxm = line.match(/^(.+?)-(\d+)-(.*)$/);
|
|
267
|
+
if (m) {
|
|
268
|
+
const file = toRelative(m[1], root, ctx.workspace);
|
|
269
|
+
const outLine = `${file}:${m[2]}: ${m[3]}`;
|
|
270
|
+
if (output.length + outLine.length + 1 > cap)
|
|
271
|
+
break;
|
|
272
|
+
output += outLine + "\n";
|
|
273
|
+
matchCount++;
|
|
274
|
+
}
|
|
275
|
+
else if (ctxm) {
|
|
276
|
+
const file = toRelative(ctxm[1], root, ctx.workspace);
|
|
277
|
+
const outLine = `${file}-${ctxm[2]}- ${ctxm[3]}`;
|
|
278
|
+
if (output.length + outLine.length + 1 > cap)
|
|
279
|
+
break;
|
|
280
|
+
output += outLine + "\n";
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
toolCallId: call.id,
|
|
285
|
+
name: "grep",
|
|
286
|
+
content: output.trimEnd() || "(no matches)",
|
|
287
|
+
};
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
//# sourceMappingURL=grep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -2,7 +2,10 @@ export { readTool } from "./read.js";
|
|
|
2
2
|
export { writeTool } from "./write.js";
|
|
3
3
|
export { editTool } from "./edit.js";
|
|
4
4
|
export { bashTool } from "./bash.js";
|
|
5
|
+
export { taskTool } from "./task.js";
|
|
5
6
|
export { webfetchTool } from "./webfetch.js";
|
|
6
7
|
export { websearchTool } from "./websearch.js";
|
|
8
|
+
export { grepTool } from "./grep.js";
|
|
9
|
+
export { globTool } from "./glob.js";
|
|
7
10
|
export { InMemoryToolRegistry } from "./registry.js";
|
|
8
11
|
export type { Tool, ToolRegistry, ToolContext, ToolResult } from "./types.js";
|
package/dist/tools/index.js
CHANGED
|
@@ -2,7 +2,10 @@ export { readTool } from "./read.js";
|
|
|
2
2
|
export { writeTool } from "./write.js";
|
|
3
3
|
export { editTool } from "./edit.js";
|
|
4
4
|
export { bashTool } from "./bash.js";
|
|
5
|
+
export { taskTool } from "./task.js";
|
|
5
6
|
export { webfetchTool } from "./webfetch.js";
|
|
6
7
|
export { websearchTool } from "./websearch.js";
|
|
8
|
+
export { grepTool } from "./grep.js";
|
|
9
|
+
export { globTool } from "./glob.js";
|
|
7
10
|
export { InMemoryToolRegistry } from "./registry.js";
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/tools/read.js
CHANGED
|
@@ -1,8 +1,32 @@
|
|
|
1
1
|
import { readFileSync, statSync, existsSync } from "node:fs";
|
|
2
|
-
import { resolve } from "node:path";
|
|
2
|
+
import { resolve, extname } from "node:path";
|
|
3
3
|
import { createHash } from "node:crypto";
|
|
4
4
|
import { isWithinWorkspace } from "../security/paths.js";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
+
function detectImageMime(path, buf) {
|
|
7
|
+
const ext = extname(path).toLowerCase();
|
|
8
|
+
const byExt = {
|
|
9
|
+
".png": "image/png",
|
|
10
|
+
".jpg": "image/jpeg",
|
|
11
|
+
".jpeg": "image/jpeg",
|
|
12
|
+
".gif": "image/gif",
|
|
13
|
+
".webp": "image/webp",
|
|
14
|
+
};
|
|
15
|
+
let magic = null;
|
|
16
|
+
if (buf.length >= 4) {
|
|
17
|
+
if (buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4e && buf[3] === 0x47)
|
|
18
|
+
magic = "image/png";
|
|
19
|
+
else if (buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff)
|
|
20
|
+
magic = "image/jpeg";
|
|
21
|
+
else if (buf[0] === 0x47 && buf[1] === 0x49 && buf[2] === 0x46)
|
|
22
|
+
magic = "image/gif";
|
|
23
|
+
else if (buf.length >= 12 && buf.slice(0, 4).toString() === "RIFF" && buf.slice(8, 12).toString() === "WEBP")
|
|
24
|
+
magic = "image/webp";
|
|
25
|
+
}
|
|
26
|
+
if (byExt[ext])
|
|
27
|
+
return magic ?? byExt[ext];
|
|
28
|
+
return magic;
|
|
29
|
+
}
|
|
6
30
|
const ArgsSchema = z
|
|
7
31
|
.object({
|
|
8
32
|
path: z.string(),
|
|
@@ -77,15 +101,35 @@ export const readTool = {
|
|
|
77
101
|
};
|
|
78
102
|
}
|
|
79
103
|
const { path, offset, limit } = parsed.data;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
104
|
+
const resolved = resolve(ctx.workspace, path);
|
|
105
|
+
const within = isWithinWorkspace(ctx.workspace, path);
|
|
106
|
+
let full = resolved;
|
|
107
|
+
if (!within) {
|
|
108
|
+
if (ctx.approvals?.nonInteractive || !ctx.approvals?.handler) {
|
|
109
|
+
return {
|
|
110
|
+
toolCallId: call.id,
|
|
111
|
+
name: "read",
|
|
112
|
+
content: "PATH_OUTSIDE_WORKSPACE",
|
|
113
|
+
isError: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const { checkApproval } = await import("../runtime/approvals.js");
|
|
117
|
+
const decision = await checkApproval(ctx.approvals, {
|
|
118
|
+
command: `read ${path}`,
|
|
119
|
+
cwd: ctx.workspace,
|
|
120
|
+
timeoutMs: 0,
|
|
121
|
+
sandboxed: false,
|
|
122
|
+
});
|
|
123
|
+
if (!decision.allowed) {
|
|
124
|
+
return {
|
|
125
|
+
toolCallId: call.id,
|
|
126
|
+
name: "read",
|
|
127
|
+
content: "READ_APPROVAL_REQUIRED",
|
|
128
|
+
isError: true,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
full = resolved;
|
|
87
132
|
}
|
|
88
|
-
const full = resolve(ctx.workspace, path);
|
|
89
133
|
if (!existsSync(full)) {
|
|
90
134
|
return {
|
|
91
135
|
toolCallId: call.id,
|
|
@@ -112,6 +156,23 @@ export const readTool = {
|
|
|
112
156
|
};
|
|
113
157
|
}
|
|
114
158
|
const buf = readFileSync(full);
|
|
159
|
+
const mime = detectImageMime(full, buf);
|
|
160
|
+
if (mime) {
|
|
161
|
+
if (!ctx.supportsVision) {
|
|
162
|
+
return {
|
|
163
|
+
toolCallId: call.id,
|
|
164
|
+
name: "read",
|
|
165
|
+
content: "vision not supported by current model",
|
|
166
|
+
isError: true,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
toolCallId: call.id,
|
|
171
|
+
name: "read",
|
|
172
|
+
content: `Image file: ${path} (${buf.length} bytes, ${mime})`,
|
|
173
|
+
images: [{ data: buf.toString("base64"), mime }],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
115
176
|
if (buf.includes(0)) {
|
|
116
177
|
return {
|
|
117
178
|
toolCallId: call.id,
|