@xandout/libra-harness 0.1.34 → 0.1.91

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.
Files changed (453) hide show
  1. package/README.md +30 -30
  2. package/dist/agent.d.ts +8 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +205 -193
  5. package/dist/agent.js.map +1 -1
  6. package/dist/ai-sdk-model.d.ts.map +1 -1
  7. package/dist/ai-sdk-model.js +91 -78
  8. package/dist/ai-sdk-model.js.map +1 -1
  9. package/dist/context.d.ts +2 -0
  10. package/dist/context.d.ts.map +1 -1
  11. package/dist/{extras/extensions → extensions}/auto-steer/extension.d.ts +1 -1
  12. package/dist/extensions/auto-steer/extension.d.ts.map +1 -0
  13. package/dist/extensions/auto-steer/extension.js.map +1 -0
  14. package/dist/extensions/auto-steer/index.d.ts.map +1 -0
  15. package/dist/extensions/auto-steer/index.js.map +1 -0
  16. package/dist/extensions/code-tools/extension.d.ts +15 -0
  17. package/dist/extensions/code-tools/extension.d.ts.map +1 -0
  18. package/dist/extensions/code-tools/extension.js +73 -0
  19. package/dist/extensions/code-tools/extension.js.map +1 -0
  20. package/dist/extensions/code-tools/extension.test.d.ts.map +1 -0
  21. package/dist/extensions/code-tools/extension.test.js +504 -0
  22. package/dist/extensions/code-tools/extension.test.js.map +1 -0
  23. package/dist/extensions/code-tools/index.d.ts.map +1 -0
  24. package/dist/extensions/code-tools/index.js.map +1 -0
  25. package/dist/{extras/extensions → extensions}/code-tools/tools/code-search.d.ts +2 -2
  26. package/dist/extensions/code-tools/tools/code-search.d.ts.map +1 -0
  27. package/dist/{extras/extensions → extensions}/code-tools/tools/code-search.js +1 -1
  28. package/dist/extensions/code-tools/tools/code-search.js.map +1 -0
  29. package/dist/extensions/code-tools/tools/find.d.ts.map +1 -0
  30. package/dist/extensions/code-tools/tools/find.js +83 -0
  31. package/dist/extensions/code-tools/tools/find.js.map +1 -0
  32. package/dist/extensions/code-tools/tools/grep.d.ts.map +1 -0
  33. package/dist/extensions/code-tools/tools/grep.js +90 -0
  34. package/dist/extensions/code-tools/tools/grep.js.map +1 -0
  35. package/dist/extensions/code-tools/tools/read.d.ts.map +1 -0
  36. package/dist/{extras/extensions → extensions}/code-tools/tools/read.js +17 -25
  37. package/dist/extensions/code-tools/tools/read.js.map +1 -0
  38. package/dist/{extras/extensions → extensions}/code-tools/tools/shared.d.ts +5 -1
  39. package/dist/extensions/code-tools/tools/shared.d.ts.map +1 -0
  40. package/dist/{extras/extensions → extensions}/code-tools/tools/shared.js +68 -0
  41. package/dist/extensions/code-tools/tools/shared.js.map +1 -0
  42. package/dist/extensions/code-tools/tools/shell.d.ts +39 -0
  43. package/dist/extensions/code-tools/tools/shell.d.ts.map +1 -0
  44. package/dist/extensions/code-tools/tools/shell.js +441 -0
  45. package/dist/extensions/code-tools/tools/shell.js.map +1 -0
  46. package/dist/{extras/extensions → extensions}/code-tools/tools/todo.d.ts +0 -3
  47. package/dist/extensions/code-tools/tools/todo.d.ts.map +1 -0
  48. package/dist/{extras/extensions → extensions}/code-tools/tools/todo.js +0 -8
  49. package/dist/extensions/code-tools/tools/todo.js.map +1 -0
  50. package/dist/extensions/code-tools/tools/view-image.d.ts +10 -0
  51. package/dist/extensions/code-tools/tools/view-image.d.ts.map +1 -0
  52. package/dist/extensions/code-tools/tools/view-image.js +87 -0
  53. package/dist/extensions/code-tools/tools/view-image.js.map +1 -0
  54. package/dist/extensions/code-tools/tools/write.d.ts.map +1 -0
  55. package/dist/{extras/extensions → extensions}/code-tools/tools/write.js +47 -37
  56. package/dist/extensions/code-tools/tools/write.js.map +1 -0
  57. package/dist/{extras/extensions → extensions}/disk-session/extension.d.ts +45 -2
  58. package/dist/extensions/disk-session/extension.d.ts.map +1 -0
  59. package/dist/extensions/disk-session/extension.js +818 -0
  60. package/dist/extensions/disk-session/extension.js.map +1 -0
  61. package/dist/extensions/disk-session/extension.test.d.ts.map +1 -0
  62. package/dist/{extras/extensions → extensions}/disk-session/extension.test.js +445 -16
  63. package/dist/extensions/disk-session/extension.test.js.map +1 -0
  64. package/dist/extensions/disk-session/index.d.ts +3 -0
  65. package/dist/extensions/disk-session/index.d.ts.map +1 -0
  66. package/dist/extensions/disk-session/index.js +2 -0
  67. package/dist/extensions/disk-session/index.js.map +1 -0
  68. package/dist/{extras/extensions → extensions}/emoji/extension.d.ts +1 -1
  69. package/dist/extensions/emoji/extension.d.ts.map +1 -0
  70. package/dist/extensions/emoji/extension.js.map +1 -0
  71. package/dist/extensions/emoji/index.d.ts.map +1 -0
  72. package/dist/extensions/emoji/index.js.map +1 -0
  73. package/dist/extensions/filesystem/extension.d.ts.map +1 -0
  74. package/dist/extensions/filesystem/extension.js.map +1 -0
  75. package/dist/extensions/filesystem/extension.test.d.ts.map +1 -0
  76. package/dist/extensions/filesystem/extension.test.js.map +1 -0
  77. package/dist/extensions/filesystem/index.d.ts.map +1 -0
  78. package/dist/extensions/filesystem/index.js.map +1 -0
  79. package/dist/extensions/index.d.ts +3 -0
  80. package/dist/extensions/index.d.ts.map +1 -0
  81. package/dist/extensions/index.js +2 -0
  82. package/dist/extensions/index.js.map +1 -0
  83. package/dist/{extras/extensions → extensions}/keyword-extractor/extension.d.ts +1 -1
  84. package/dist/extensions/keyword-extractor/extension.d.ts.map +1 -0
  85. package/dist/{extras/extensions → extensions}/keyword-extractor/extension.js +1 -1
  86. package/dist/extensions/keyword-extractor/extension.js.map +1 -0
  87. package/dist/extensions/keyword-extractor/extension.test.d.ts.map +1 -0
  88. package/dist/extensions/keyword-extractor/extension.test.js.map +1 -0
  89. package/dist/extensions/keyword-extractor/index.d.ts.map +1 -0
  90. package/dist/extensions/keyword-extractor/index.js.map +1 -0
  91. package/dist/extensions/keyword-extractor/nlp.d.ts.map +1 -0
  92. package/dist/extensions/keyword-extractor/nlp.js.map +1 -0
  93. package/dist/extensions/keyword-extractor/nlp.test.d.ts.map +1 -0
  94. package/dist/extensions/keyword-extractor/nlp.test.js.map +1 -0
  95. package/dist/{extras/extension-loader.d.ts → extensions/loader.d.ts} +1 -1
  96. package/dist/extensions/loader.d.ts.map +1 -0
  97. package/dist/{extras/extension-loader.js → extensions/loader.js} +2 -2
  98. package/dist/extensions/loader.js.map +1 -0
  99. package/dist/{extras/extensions → extensions}/logger/extension.d.ts +1 -1
  100. package/dist/extensions/logger/extension.d.ts.map +1 -0
  101. package/dist/{extras/extensions → extensions}/logger/extension.js +1 -1
  102. package/dist/extensions/logger/extension.js.map +1 -0
  103. package/dist/extensions/logger/index.d.ts.map +1 -0
  104. package/dist/extensions/logger/index.js.map +1 -0
  105. package/dist/{extras/extensions → extensions}/mcp/extension.d.ts +1 -1
  106. package/dist/extensions/mcp/extension.d.ts.map +1 -0
  107. package/dist/extensions/mcp/extension.js.map +1 -0
  108. package/dist/extensions/mcp/extension.test.d.ts.map +1 -0
  109. package/dist/{extras/extensions → extensions}/mcp/extension.test.js +1 -1
  110. package/dist/extensions/mcp/extension.test.js.map +1 -0
  111. package/dist/extensions/mcp/index.d.ts.map +1 -0
  112. package/dist/extensions/mcp/index.js.map +1 -0
  113. package/dist/{extras/extensions → extensions}/mem-session/extension.d.ts +2 -2
  114. package/dist/extensions/mem-session/extension.d.ts.map +1 -0
  115. package/dist/extensions/mem-session/extension.js.map +1 -0
  116. package/dist/extensions/mem-session/index.d.ts.map +1 -0
  117. package/dist/extensions/mem-session/index.js.map +1 -0
  118. package/dist/{extras/extensions → extensions}/memory/extension.d.ts +1 -1
  119. package/dist/extensions/memory/extension.d.ts.map +1 -0
  120. package/dist/{extras/extensions → extensions}/memory/extension.js +1 -1
  121. package/dist/extensions/memory/extension.js.map +1 -0
  122. package/dist/extensions/memory/index.d.ts +4 -0
  123. package/dist/extensions/memory/index.d.ts.map +1 -0
  124. package/dist/extensions/memory/index.js.map +1 -0
  125. package/dist/{extras/extensions → extensions}/memory/llm-extractor.d.ts +1 -1
  126. package/dist/extensions/memory/llm-extractor.d.ts.map +1 -0
  127. package/dist/{extras/extensions → extensions}/memory/llm-extractor.js +1 -1
  128. package/dist/extensions/memory/llm-extractor.js.map +1 -0
  129. package/dist/{extras/extensions → extensions}/memory/types.d.ts +2 -2
  130. package/dist/extensions/memory/types.d.ts.map +1 -0
  131. package/dist/extensions/memory/types.js.map +1 -0
  132. package/dist/{extras/extensions → extensions}/otel/extension.d.ts +1 -1
  133. package/dist/extensions/otel/extension.d.ts.map +1 -0
  134. package/dist/{extras/extensions → extensions}/otel/extension.js +1 -1
  135. package/dist/extensions/otel/extension.js.map +1 -0
  136. package/dist/extensions/otel/extension.test.d.ts.map +1 -0
  137. package/dist/{extras/extensions → extensions}/otel/extension.test.js +1 -1
  138. package/dist/extensions/otel/extension.test.js.map +1 -0
  139. package/dist/extensions/otel/index.d.ts.map +1 -0
  140. package/dist/extensions/otel/index.js.map +1 -0
  141. package/dist/extensions/otel/jsonl-span-exporter.d.ts.map +1 -0
  142. package/dist/extensions/otel/jsonl-span-exporter.js.map +1 -0
  143. package/dist/{extras/extensions → extensions}/scripts/extension.d.ts +1 -1
  144. package/dist/extensions/scripts/extension.d.ts.map +1 -0
  145. package/dist/extensions/scripts/extension.js.map +1 -0
  146. package/dist/extensions/scripts/extension.test.d.ts.map +1 -0
  147. package/dist/extensions/scripts/extension.test.js.map +1 -0
  148. package/dist/extensions/scripts/index.d.ts.map +1 -0
  149. package/dist/extensions/scripts/index.js.map +1 -0
  150. package/dist/{extras/extensions → extensions}/skills/extension.d.ts +1 -1
  151. package/dist/extensions/skills/extension.d.ts.map +1 -0
  152. package/dist/extensions/skills/extension.js.map +1 -0
  153. package/dist/extensions/skills/extension.test.d.ts.map +1 -0
  154. package/dist/{extras/extensions → extensions}/skills/extension.test.js +1 -1
  155. package/dist/extensions/skills/extension.test.js.map +1 -0
  156. package/dist/extensions/skills/index.d.ts.map +1 -0
  157. package/dist/extensions/skills/index.js.map +1 -0
  158. package/dist/{extras/extensions → extensions}/streaming/extension.d.ts +1 -1
  159. package/dist/extensions/streaming/extension.d.ts.map +1 -0
  160. package/dist/extensions/streaming/extension.js.map +1 -0
  161. package/dist/extensions/streaming/index.d.ts.map +1 -0
  162. package/dist/extensions/streaming/index.js.map +1 -0
  163. package/dist/{extras/extensions → extensions}/structured-output/extension.d.ts +1 -1
  164. package/dist/extensions/structured-output/extension.d.ts.map +1 -0
  165. package/dist/extensions/structured-output/extension.js.map +1 -0
  166. package/dist/extensions/structured-output/index.d.ts.map +1 -0
  167. package/dist/extensions/structured-output/index.js.map +1 -0
  168. package/dist/{extras/extensions → extensions}/timestamp/extension.d.ts +1 -1
  169. package/dist/extensions/timestamp/extension.d.ts.map +1 -0
  170. package/dist/extensions/timestamp/extension.js.map +1 -0
  171. package/dist/extensions/timestamp/index.d.ts.map +1 -0
  172. package/dist/extensions/timestamp/index.js.map +1 -0
  173. package/dist/{extras/extensions → extensions}/token-stats/extension.d.ts +1 -1
  174. package/dist/extensions/token-stats/extension.d.ts.map +1 -0
  175. package/dist/extensions/token-stats/extension.js.map +1 -0
  176. package/dist/extensions/token-stats/extension.test.d.ts.map +1 -0
  177. package/dist/{extras/extensions → extensions}/token-stats/extension.test.js +1 -1
  178. package/dist/extensions/token-stats/extension.test.js.map +1 -0
  179. package/dist/extensions/token-stats/index.d.ts.map +1 -0
  180. package/dist/extensions/token-stats/index.js.map +1 -0
  181. package/dist/{extras/extensions → extensions}/tool-buffer/extension.d.ts +1 -1
  182. package/dist/extensions/tool-buffer/extension.d.ts.map +1 -0
  183. package/dist/extensions/tool-buffer/extension.js.map +1 -0
  184. package/dist/extensions/tool-buffer/extension.test.d.ts.map +1 -0
  185. package/dist/{extras/extensions → extensions}/tool-buffer/extension.test.js +1 -1
  186. package/dist/extensions/tool-buffer/extension.test.js.map +1 -0
  187. package/dist/extensions/tool-buffer/index.d.ts.map +1 -0
  188. package/dist/extensions/tool-buffer/index.js.map +1 -0
  189. package/dist/{extras/extensions → extensions}/weather-tool/extension.d.ts +1 -1
  190. package/dist/extensions/weather-tool/extension.d.ts.map +1 -0
  191. package/dist/extensions/weather-tool/extension.js.map +1 -0
  192. package/dist/extensions/weather-tool/index.d.ts.map +1 -0
  193. package/dist/extensions/weather-tool/index.js.map +1 -0
  194. package/dist/handle.d.ts +4 -0
  195. package/dist/handle.d.ts.map +1 -1
  196. package/dist/{extras/models → models}/ai-sdk-resolver.d.ts +1 -1
  197. package/dist/models/ai-sdk-resolver.d.ts.map +1 -0
  198. package/dist/{extras/models → models}/ai-sdk-resolver.js +1 -1
  199. package/dist/models/ai-sdk-resolver.js.map +1 -0
  200. package/dist/models/index.d.ts.map +1 -0
  201. package/dist/models/index.js.map +1 -0
  202. package/dist/{extras/models → models}/routing-model.d.ts +1 -1
  203. package/dist/models/routing-model.d.ts.map +1 -0
  204. package/dist/{extras/models → models}/routing-model.js +1 -1
  205. package/dist/models/routing-model.js.map +1 -0
  206. package/dist/openai-provider/index.d.ts.map +1 -0
  207. package/dist/openai-provider/index.js.map +1 -0
  208. package/dist/{extras/openai-provider → openai-provider}/server.d.ts +1 -1
  209. package/dist/openai-provider/server.d.ts.map +1 -0
  210. package/dist/openai-provider/server.js.map +1 -0
  211. package/package.json +108 -83
  212. package/dist/extras/extension-loader.d.ts.map +0 -1
  213. package/dist/extras/extension-loader.js.map +0 -1
  214. package/dist/extras/extensions/auto-steer/extension.d.ts.map +0 -1
  215. package/dist/extras/extensions/auto-steer/extension.js.map +0 -1
  216. package/dist/extras/extensions/auto-steer/index.d.ts.map +0 -1
  217. package/dist/extras/extensions/auto-steer/index.js.map +0 -1
  218. package/dist/extras/extensions/code-tools/extension.d.ts +0 -83
  219. package/dist/extras/extensions/code-tools/extension.d.ts.map +0 -1
  220. package/dist/extras/extensions/code-tools/extension.js +0 -93
  221. package/dist/extras/extensions/code-tools/extension.js.map +0 -1
  222. package/dist/extras/extensions/code-tools/extension.test.d.ts.map +0 -1
  223. package/dist/extras/extensions/code-tools/extension.test.js +0 -656
  224. package/dist/extras/extensions/code-tools/extension.test.js.map +0 -1
  225. package/dist/extras/extensions/code-tools/index.d.ts.map +0 -1
  226. package/dist/extras/extensions/code-tools/index.js.map +0 -1
  227. package/dist/extras/extensions/code-tools/tools/code-search.d.ts.map +0 -1
  228. package/dist/extras/extensions/code-tools/tools/code-search.js.map +0 -1
  229. package/dist/extras/extensions/code-tools/tools/find.d.ts.map +0 -1
  230. package/dist/extras/extensions/code-tools/tools/find.js +0 -161
  231. package/dist/extras/extensions/code-tools/tools/find.js.map +0 -1
  232. package/dist/extras/extensions/code-tools/tools/grep.d.ts.map +0 -1
  233. package/dist/extras/extensions/code-tools/tools/grep.js +0 -307
  234. package/dist/extras/extensions/code-tools/tools/grep.js.map +0 -1
  235. package/dist/extras/extensions/code-tools/tools/read.d.ts.map +0 -1
  236. package/dist/extras/extensions/code-tools/tools/read.js.map +0 -1
  237. package/dist/extras/extensions/code-tools/tools/shared.d.ts.map +0 -1
  238. package/dist/extras/extensions/code-tools/tools/shared.js.map +0 -1
  239. package/dist/extras/extensions/code-tools/tools/shell.d.ts +0 -49
  240. package/dist/extras/extensions/code-tools/tools/shell.d.ts.map +0 -1
  241. package/dist/extras/extensions/code-tools/tools/shell.js +0 -623
  242. package/dist/extras/extensions/code-tools/tools/shell.js.map +0 -1
  243. package/dist/extras/extensions/code-tools/tools/todo.d.ts.map +0 -1
  244. package/dist/extras/extensions/code-tools/tools/todo.js.map +0 -1
  245. package/dist/extras/extensions/code-tools/tools/write.d.ts.map +0 -1
  246. package/dist/extras/extensions/code-tools/tools/write.js.map +0 -1
  247. package/dist/extras/extensions/disk-session/extension.d.ts.map +0 -1
  248. package/dist/extras/extensions/disk-session/extension.js +0 -640
  249. package/dist/extras/extensions/disk-session/extension.js.map +0 -1
  250. package/dist/extras/extensions/disk-session/extension.test.d.ts.map +0 -1
  251. package/dist/extras/extensions/disk-session/extension.test.js.map +0 -1
  252. package/dist/extras/extensions/disk-session/index.d.ts +0 -3
  253. package/dist/extras/extensions/disk-session/index.d.ts.map +0 -1
  254. package/dist/extras/extensions/disk-session/index.js +0 -2
  255. package/dist/extras/extensions/disk-session/index.js.map +0 -1
  256. package/dist/extras/extensions/emoji/extension.d.ts.map +0 -1
  257. package/dist/extras/extensions/emoji/extension.js.map +0 -1
  258. package/dist/extras/extensions/emoji/index.d.ts.map +0 -1
  259. package/dist/extras/extensions/emoji/index.js.map +0 -1
  260. package/dist/extras/extensions/filesystem/extension.d.ts.map +0 -1
  261. package/dist/extras/extensions/filesystem/extension.js.map +0 -1
  262. package/dist/extras/extensions/filesystem/extension.test.d.ts.map +0 -1
  263. package/dist/extras/extensions/filesystem/extension.test.js.map +0 -1
  264. package/dist/extras/extensions/filesystem/index.d.ts.map +0 -1
  265. package/dist/extras/extensions/filesystem/index.js.map +0 -1
  266. package/dist/extras/extensions/keyword-extractor/extension.d.ts.map +0 -1
  267. package/dist/extras/extensions/keyword-extractor/extension.js.map +0 -1
  268. package/dist/extras/extensions/keyword-extractor/extension.test.d.ts.map +0 -1
  269. package/dist/extras/extensions/keyword-extractor/extension.test.js.map +0 -1
  270. package/dist/extras/extensions/keyword-extractor/index.d.ts.map +0 -1
  271. package/dist/extras/extensions/keyword-extractor/index.js.map +0 -1
  272. package/dist/extras/extensions/keyword-extractor/nlp.d.ts.map +0 -1
  273. package/dist/extras/extensions/keyword-extractor/nlp.js.map +0 -1
  274. package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts.map +0 -1
  275. package/dist/extras/extensions/keyword-extractor/nlp.test.js.map +0 -1
  276. package/dist/extras/extensions/logger/extension.d.ts.map +0 -1
  277. package/dist/extras/extensions/logger/extension.js.map +0 -1
  278. package/dist/extras/extensions/logger/index.d.ts.map +0 -1
  279. package/dist/extras/extensions/logger/index.js.map +0 -1
  280. package/dist/extras/extensions/mcp/extension.d.ts.map +0 -1
  281. package/dist/extras/extensions/mcp/extension.js.map +0 -1
  282. package/dist/extras/extensions/mcp/extension.test.d.ts.map +0 -1
  283. package/dist/extras/extensions/mcp/extension.test.js.map +0 -1
  284. package/dist/extras/extensions/mcp/index.d.ts.map +0 -1
  285. package/dist/extras/extensions/mcp/index.js.map +0 -1
  286. package/dist/extras/extensions/mem-session/extension.d.ts.map +0 -1
  287. package/dist/extras/extensions/mem-session/extension.js.map +0 -1
  288. package/dist/extras/extensions/mem-session/index.d.ts.map +0 -1
  289. package/dist/extras/extensions/mem-session/index.js.map +0 -1
  290. package/dist/extras/extensions/memory/extension.d.ts.map +0 -1
  291. package/dist/extras/extensions/memory/extension.js.map +0 -1
  292. package/dist/extras/extensions/memory/index.d.ts +0 -5
  293. package/dist/extras/extensions/memory/index.d.ts.map +0 -1
  294. package/dist/extras/extensions/memory/index.js.map +0 -1
  295. package/dist/extras/extensions/memory/llm-extractor.d.ts.map +0 -1
  296. package/dist/extras/extensions/memory/llm-extractor.js.map +0 -1
  297. package/dist/extras/extensions/memory/types.d.ts.map +0 -1
  298. package/dist/extras/extensions/memory/types.js.map +0 -1
  299. package/dist/extras/extensions/otel/extension.d.ts.map +0 -1
  300. package/dist/extras/extensions/otel/extension.js.map +0 -1
  301. package/dist/extras/extensions/otel/extension.test.d.ts.map +0 -1
  302. package/dist/extras/extensions/otel/extension.test.js.map +0 -1
  303. package/dist/extras/extensions/otel/index.d.ts.map +0 -1
  304. package/dist/extras/extensions/otel/index.js.map +0 -1
  305. package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts.map +0 -1
  306. package/dist/extras/extensions/otel/jsonl-span-exporter.js.map +0 -1
  307. package/dist/extras/extensions/scripts/extension.d.ts.map +0 -1
  308. package/dist/extras/extensions/scripts/extension.js.map +0 -1
  309. package/dist/extras/extensions/scripts/extension.test.d.ts.map +0 -1
  310. package/dist/extras/extensions/scripts/extension.test.js.map +0 -1
  311. package/dist/extras/extensions/scripts/index.d.ts.map +0 -1
  312. package/dist/extras/extensions/scripts/index.js.map +0 -1
  313. package/dist/extras/extensions/skills/extension.d.ts.map +0 -1
  314. package/dist/extras/extensions/skills/extension.js.map +0 -1
  315. package/dist/extras/extensions/skills/extension.test.d.ts.map +0 -1
  316. package/dist/extras/extensions/skills/extension.test.js.map +0 -1
  317. package/dist/extras/extensions/skills/index.d.ts.map +0 -1
  318. package/dist/extras/extensions/skills/index.js.map +0 -1
  319. package/dist/extras/extensions/streaming/extension.d.ts.map +0 -1
  320. package/dist/extras/extensions/streaming/extension.js.map +0 -1
  321. package/dist/extras/extensions/streaming/index.d.ts.map +0 -1
  322. package/dist/extras/extensions/streaming/index.js.map +0 -1
  323. package/dist/extras/extensions/structured-output/extension.d.ts.map +0 -1
  324. package/dist/extras/extensions/structured-output/extension.js.map +0 -1
  325. package/dist/extras/extensions/structured-output/index.d.ts.map +0 -1
  326. package/dist/extras/extensions/structured-output/index.js.map +0 -1
  327. package/dist/extras/extensions/timestamp/extension.d.ts.map +0 -1
  328. package/dist/extras/extensions/timestamp/extension.js.map +0 -1
  329. package/dist/extras/extensions/timestamp/index.d.ts.map +0 -1
  330. package/dist/extras/extensions/timestamp/index.js.map +0 -1
  331. package/dist/extras/extensions/token-stats/extension.d.ts.map +0 -1
  332. package/dist/extras/extensions/token-stats/extension.js.map +0 -1
  333. package/dist/extras/extensions/token-stats/extension.test.d.ts.map +0 -1
  334. package/dist/extras/extensions/token-stats/extension.test.js.map +0 -1
  335. package/dist/extras/extensions/token-stats/index.d.ts.map +0 -1
  336. package/dist/extras/extensions/token-stats/index.js.map +0 -1
  337. package/dist/extras/extensions/tool-buffer/extension.d.ts.map +0 -1
  338. package/dist/extras/extensions/tool-buffer/extension.js.map +0 -1
  339. package/dist/extras/extensions/tool-buffer/extension.test.d.ts.map +0 -1
  340. package/dist/extras/extensions/tool-buffer/extension.test.js.map +0 -1
  341. package/dist/extras/extensions/tool-buffer/index.d.ts.map +0 -1
  342. package/dist/extras/extensions/tool-buffer/index.js.map +0 -1
  343. package/dist/extras/extensions/weather-tool/extension.d.ts.map +0 -1
  344. package/dist/extras/extensions/weather-tool/extension.js.map +0 -1
  345. package/dist/extras/extensions/weather-tool/index.d.ts.map +0 -1
  346. package/dist/extras/extensions/weather-tool/index.js.map +0 -1
  347. package/dist/extras/models/ai-sdk-resolver.d.ts.map +0 -1
  348. package/dist/extras/models/ai-sdk-resolver.js.map +0 -1
  349. package/dist/extras/models/index.d.ts.map +0 -1
  350. package/dist/extras/models/index.js.map +0 -1
  351. package/dist/extras/models/routing-model.d.ts.map +0 -1
  352. package/dist/extras/models/routing-model.js.map +0 -1
  353. package/dist/extras/openai-provider/index.d.ts.map +0 -1
  354. package/dist/extras/openai-provider/index.js.map +0 -1
  355. package/dist/extras/openai-provider/server.d.ts.map +0 -1
  356. package/dist/extras/openai-provider/server.js.map +0 -1
  357. /package/dist/{extras/extensions → extensions}/auto-steer/extension.js +0 -0
  358. /package/dist/{extras/extensions → extensions}/auto-steer/extension.json +0 -0
  359. /package/dist/{extras/extensions → extensions}/auto-steer/index.d.ts +0 -0
  360. /package/dist/{extras/extensions → extensions}/auto-steer/index.js +0 -0
  361. /package/dist/{extras/extensions → extensions}/code-tools/extension.json +0 -0
  362. /package/dist/{extras/extensions → extensions}/code-tools/extension.test.d.ts +0 -0
  363. /package/dist/{extras/extensions → extensions}/code-tools/index.d.ts +0 -0
  364. /package/dist/{extras/extensions → extensions}/code-tools/index.js +0 -0
  365. /package/dist/{extras/extensions → extensions}/code-tools/tools/find.d.ts +0 -0
  366. /package/dist/{extras/extensions → extensions}/code-tools/tools/grep.d.ts +0 -0
  367. /package/dist/{extras/extensions → extensions}/code-tools/tools/read.d.ts +0 -0
  368. /package/dist/{extras/extensions → extensions}/code-tools/tools/write.d.ts +0 -0
  369. /package/dist/{extras/extensions → extensions}/disk-session/extension.json +0 -0
  370. /package/dist/{extras/extensions → extensions}/disk-session/extension.test.d.ts +0 -0
  371. /package/dist/{extras/extensions → extensions}/emoji/extension.js +0 -0
  372. /package/dist/{extras/extensions → extensions}/emoji/extension.json +0 -0
  373. /package/dist/{extras/extensions → extensions}/emoji/index.d.ts +0 -0
  374. /package/dist/{extras/extensions → extensions}/emoji/index.js +0 -0
  375. /package/dist/{extras/extensions → extensions}/filesystem/extension.d.ts +0 -0
  376. /package/dist/{extras/extensions → extensions}/filesystem/extension.js +0 -0
  377. /package/dist/{extras/extensions → extensions}/filesystem/extension.json +0 -0
  378. /package/dist/{extras/extensions → extensions}/filesystem/extension.test.d.ts +0 -0
  379. /package/dist/{extras/extensions → extensions}/filesystem/extension.test.js +0 -0
  380. /package/dist/{extras/extensions → extensions}/filesystem/index.d.ts +0 -0
  381. /package/dist/{extras/extensions → extensions}/filesystem/index.js +0 -0
  382. /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.json +0 -0
  383. /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.test.d.ts +0 -0
  384. /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.test.js +0 -0
  385. /package/dist/{extras/extensions → extensions}/keyword-extractor/index.d.ts +0 -0
  386. /package/dist/{extras/extensions → extensions}/keyword-extractor/index.js +0 -0
  387. /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.d.ts +0 -0
  388. /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.js +0 -0
  389. /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.test.d.ts +0 -0
  390. /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.test.js +0 -0
  391. /package/dist/{extras/extensions → extensions}/logger/extension.json +0 -0
  392. /package/dist/{extras/extensions → extensions}/logger/index.d.ts +0 -0
  393. /package/dist/{extras/extensions → extensions}/logger/index.js +0 -0
  394. /package/dist/{extras/extensions → extensions}/mcp/extension.js +0 -0
  395. /package/dist/{extras/extensions → extensions}/mcp/extension.json +0 -0
  396. /package/dist/{extras/extensions → extensions}/mcp/extension.test.d.ts +0 -0
  397. /package/dist/{extras/extensions → extensions}/mcp/index.d.ts +0 -0
  398. /package/dist/{extras/extensions → extensions}/mcp/index.js +0 -0
  399. /package/dist/{extras/extensions → extensions}/mem-session/extension.js +0 -0
  400. /package/dist/{extras/extensions → extensions}/mem-session/extension.json +0 -0
  401. /package/dist/{extras/extensions → extensions}/mem-session/index.d.ts +0 -0
  402. /package/dist/{extras/extensions → extensions}/mem-session/index.js +0 -0
  403. /package/dist/{extras/extensions → extensions}/memory/extension.json +0 -0
  404. /package/dist/{extras/extensions → extensions}/memory/index.js +0 -0
  405. /package/dist/{extras/extensions → extensions}/memory/types.js +0 -0
  406. /package/dist/{extras/extensions → extensions}/otel/extension.json +0 -0
  407. /package/dist/{extras/extensions → extensions}/otel/extension.test.d.ts +0 -0
  408. /package/dist/{extras/extensions → extensions}/otel/index.d.ts +0 -0
  409. /package/dist/{extras/extensions → extensions}/otel/index.js +0 -0
  410. /package/dist/{extras/extensions → extensions}/otel/jsonl-span-exporter.d.ts +0 -0
  411. /package/dist/{extras/extensions → extensions}/otel/jsonl-span-exporter.js +0 -0
  412. /package/dist/{extras/extensions → extensions}/scripts/extension.js +0 -0
  413. /package/dist/{extras/extensions → extensions}/scripts/extension.json +0 -0
  414. /package/dist/{extras/extensions → extensions}/scripts/extension.test.d.ts +0 -0
  415. /package/dist/{extras/extensions → extensions}/scripts/extension.test.js +0 -0
  416. /package/dist/{extras/extensions → extensions}/scripts/index.d.ts +0 -0
  417. /package/dist/{extras/extensions → extensions}/scripts/index.js +0 -0
  418. /package/dist/{extras/extensions → extensions}/skills/extension.js +0 -0
  419. /package/dist/{extras/extensions → extensions}/skills/extension.json +0 -0
  420. /package/dist/{extras/extensions → extensions}/skills/extension.test.d.ts +0 -0
  421. /package/dist/{extras/extensions → extensions}/skills/index.d.ts +0 -0
  422. /package/dist/{extras/extensions → extensions}/skills/index.js +0 -0
  423. /package/dist/{extras/extensions → extensions}/streaming/extension.js +0 -0
  424. /package/dist/{extras/extensions → extensions}/streaming/extension.json +0 -0
  425. /package/dist/{extras/extensions → extensions}/streaming/index.d.ts +0 -0
  426. /package/dist/{extras/extensions → extensions}/streaming/index.js +0 -0
  427. /package/dist/{extras/extensions → extensions}/structured-output/extension.js +0 -0
  428. /package/dist/{extras/extensions → extensions}/structured-output/extension.json +0 -0
  429. /package/dist/{extras/extensions → extensions}/structured-output/index.d.ts +0 -0
  430. /package/dist/{extras/extensions → extensions}/structured-output/index.js +0 -0
  431. /package/dist/{extras/extensions → extensions}/timestamp/extension.js +0 -0
  432. /package/dist/{extras/extensions → extensions}/timestamp/extension.json +0 -0
  433. /package/dist/{extras/extensions → extensions}/timestamp/index.d.ts +0 -0
  434. /package/dist/{extras/extensions → extensions}/timestamp/index.js +0 -0
  435. /package/dist/{extras/extensions → extensions}/token-stats/extension.js +0 -0
  436. /package/dist/{extras/extensions → extensions}/token-stats/extension.json +0 -0
  437. /package/dist/{extras/extensions → extensions}/token-stats/extension.test.d.ts +0 -0
  438. /package/dist/{extras/extensions → extensions}/token-stats/index.d.ts +0 -0
  439. /package/dist/{extras/extensions → extensions}/token-stats/index.js +0 -0
  440. /package/dist/{extras/extensions → extensions}/tool-buffer/extension.js +0 -0
  441. /package/dist/{extras/extensions → extensions}/tool-buffer/extension.json +0 -0
  442. /package/dist/{extras/extensions → extensions}/tool-buffer/extension.test.d.ts +0 -0
  443. /package/dist/{extras/extensions → extensions}/tool-buffer/index.d.ts +0 -0
  444. /package/dist/{extras/extensions → extensions}/tool-buffer/index.js +0 -0
  445. /package/dist/{extras/extensions → extensions}/weather-tool/extension.js +0 -0
  446. /package/dist/{extras/extensions → extensions}/weather-tool/extension.json +0 -0
  447. /package/dist/{extras/extensions → extensions}/weather-tool/index.d.ts +0 -0
  448. /package/dist/{extras/extensions → extensions}/weather-tool/index.js +0 -0
  449. /package/dist/{extras/models → models}/index.d.ts +0 -0
  450. /package/dist/{extras/models → models}/index.js +0 -0
  451. /package/dist/{extras/openai-provider → openai-provider}/index.d.ts +0 -0
  452. /package/dist/{extras/openai-provider → openai-provider}/index.js +0 -0
  453. /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 '../../../../model.js';
2
- import type { Tool } from '../../../../tool.js';
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"}
@@ -1,4 +1,4 @@
1
- import { Agent } from '../../../../agent.js';
1
+ import { Agent } from '../../../agent.js';
2
2
  import { makeToolName } from './shared.js';
3
3
  import { readTool } from './read.js';
4
4
  import { findFileByNameTool } from './find.js';
@@ -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"}