toolpack-sdk 1.1.0 → 1.2.0-SNAPSHOT.4032026

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 (1021) hide show
  1. package/dist/client/base-agent-context.d.ts +0 -1
  2. package/dist/client/base-agent-context.js +4 -22
  3. package/dist/client/index.d.ts +0 -1
  4. package/dist/client/index.js +24 -1245
  5. package/dist/client/query-classifier.d.ts +0 -1
  6. package/dist/client/query-classifier.js +1 -98
  7. package/dist/client/tool-orchestrator.d.ts +0 -1
  8. package/dist/client/tool-orchestrator.js +1 -156
  9. package/dist/errors/index.d.ts +0 -1
  10. package/dist/errors/index.js +1 -72
  11. package/dist/index.d.ts +1 -2
  12. package/dist/index.js +1 -28
  13. package/dist/mcp/client.d.ts +0 -1
  14. package/dist/mcp/client.js +3 -290
  15. package/dist/mcp/index.d.ts +0 -1
  16. package/dist/mcp/index.js +1 -10
  17. package/dist/mcp/types.d.ts +0 -1
  18. package/dist/mcp/types.js +1 -3
  19. package/dist/modes/built-in-modes.d.ts +0 -1
  20. package/dist/modes/built-in-modes.js +1 -106
  21. package/dist/modes/create-mode.d.ts +0 -1
  22. package/dist/modes/create-mode.js +1 -35
  23. package/dist/modes/index.d.ts +0 -1
  24. package/dist/modes/index.js +1 -13
  25. package/dist/modes/mode-registry.d.ts +0 -1
  26. package/dist/modes/mode-registry.js +1 -127
  27. package/dist/modes/mode-types.d.ts +0 -1
  28. package/dist/modes/mode-types.js +1 -3
  29. package/dist/providers/anthropic/index.d.ts +0 -1
  30. package/dist/providers/anthropic/index.js +3 -390
  31. package/dist/providers/base/index.d.ts +0 -1
  32. package/dist/providers/base/index.js +1 -56
  33. package/dist/providers/config.d.ts +0 -1
  34. package/dist/providers/config.js +1 -106
  35. package/dist/providers/gemini/index.d.ts +5 -1
  36. package/dist/providers/gemini/index.js +13 -391
  37. package/dist/providers/index.d.ts +0 -1
  38. package/dist/providers/index.js +1 -40
  39. package/dist/providers/media-utils.d.ts +0 -1
  40. package/dist/providers/media-utils.js +1 -129
  41. package/dist/providers/ollama/adapter.d.ts +0 -1
  42. package/dist/providers/ollama/adapter.js +5 -367
  43. package/dist/providers/ollama/http.d.ts +0 -1
  44. package/dist/providers/ollama/http.js +2 -125
  45. package/dist/providers/ollama/index.d.ts +0 -1
  46. package/dist/providers/ollama/index.js +1 -11
  47. package/dist/providers/ollama/provider.d.ts +0 -1
  48. package/dist/providers/ollama/provider.js +1 -165
  49. package/dist/providers/ollama/slm-healer.d.ts +0 -1
  50. package/dist/providers/ollama/slm-healer.js +10 -194
  51. package/dist/providers/ollama/slm-registry.d.ts +0 -1
  52. package/dist/providers/ollama/slm-registry.js +1 -101
  53. package/dist/providers/openai/index.d.ts +0 -1
  54. package/dist/providers/openai/index.js +1 -387
  55. package/dist/providers/provider-logger.d.ts +0 -1
  56. package/dist/providers/provider-logger.js +2 -128
  57. package/dist/toolpack.d.ts +8 -12
  58. package/dist/toolpack.js +1 -497
  59. package/dist/tools/cloud-tools/index.d.ts +0 -1
  60. package/dist/tools/cloud-tools/index.js +1 -34
  61. package/dist/tools/cloud-tools/providers/netlify.d.ts +0 -1
  62. package/dist/tools/cloud-tools/providers/netlify.js +1 -19
  63. package/dist/tools/cloud-tools/tools/deploy/index.d.ts +0 -1
  64. package/dist/tools/cloud-tools/tools/deploy/index.js +1 -40
  65. package/dist/tools/cloud-tools/tools/deploy/schema.d.ts +0 -1
  66. package/dist/tools/cloud-tools/tools/deploy/schema.js +1 -22
  67. package/dist/tools/cloud-tools/tools/list/index.d.ts +0 -1
  68. package/dist/tools/cloud-tools/tools/list/index.js +1 -44
  69. package/dist/tools/cloud-tools/tools/list/schema.d.ts +0 -1
  70. package/dist/tools/cloud-tools/tools/list/schema.js +1 -19
  71. package/dist/tools/cloud-tools/tools/status/index.d.ts +0 -1
  72. package/dist/tools/cloud-tools/tools/status/index.js +1 -32
  73. package/dist/tools/cloud-tools/tools/status/schema.d.ts +0 -1
  74. package/dist/tools/cloud-tools/tools/status/schema.js +1 -18
  75. package/dist/tools/coding-tools/index.d.ts +0 -1
  76. package/dist/tools/coding-tools/index.js +1 -84
  77. package/dist/tools/coding-tools/parsers/babel-parser.d.ts +0 -1
  78. package/dist/tools/coding-tools/parsers/babel-parser.js +7 -588
  79. package/dist/tools/coding-tools/parsers/file-index.d.ts +0 -1
  80. package/dist/tools/coding-tools/parsers/file-index.js +1 -98
  81. package/dist/tools/coding-tools/parsers/grammar-manager.d.ts +0 -1
  82. package/dist/tools/coding-tools/parsers/grammar-manager.js +1 -112
  83. package/dist/tools/coding-tools/parsers/language-detector.d.ts +0 -1
  84. package/dist/tools/coding-tools/parsers/language-detector.js +1 -43
  85. package/dist/tools/coding-tools/parsers/parser-factory.d.ts +0 -1
  86. package/dist/tools/coding-tools/parsers/parser-factory.js +1 -37
  87. package/dist/tools/coding-tools/parsers/parsing-context.d.ts +0 -1
  88. package/dist/tools/coding-tools/parsers/parsing-context.js +1 -118
  89. package/dist/tools/coding-tools/parsers/queries/cpp.d.ts +0 -1
  90. package/dist/tools/coding-tools/parsers/queries/cpp.js +4 -15
  91. package/dist/tools/coding-tools/parsers/queries/go.d.ts +0 -1
  92. package/dist/tools/coding-tools/parsers/queries/go.js +4 -14
  93. package/dist/tools/coding-tools/parsers/queries/index.d.ts +0 -1
  94. package/dist/tools/coding-tools/parsers/queries/index.js +1 -9
  95. package/dist/tools/coding-tools/parsers/queries/java.d.ts +0 -1
  96. package/dist/tools/coding-tools/parsers/queries/java.js +4 -14
  97. package/dist/tools/coding-tools/parsers/queries/python.d.ts +0 -1
  98. package/dist/tools/coding-tools/parsers/queries/python.js +4 -14
  99. package/dist/tools/coding-tools/parsers/queries/rust.d.ts +0 -1
  100. package/dist/tools/coding-tools/parsers/queries/rust.js +4 -14
  101. package/dist/tools/coding-tools/parsers/shared.d.ts +0 -1
  102. package/dist/tools/coding-tools/parsers/shared.js +1 -10
  103. package/dist/tools/coding-tools/parsers/tree-sitter-parser.d.ts +0 -1
  104. package/dist/tools/coding-tools/parsers/tree-sitter-parser.js +24 -209
  105. package/dist/tools/coding-tools/parsers/types.d.ts +0 -1
  106. package/dist/tools/coding-tools/parsers/types.js +1 -3
  107. package/dist/tools/coding-tools/tools/extract-function/index.d.ts +0 -1
  108. package/dist/tools/coding-tools/tools/extract-function/index.js +1 -64
  109. package/dist/tools/coding-tools/tools/extract-function/schema.d.ts +0 -1
  110. package/dist/tools/coding-tools/tools/extract-function/schema.js +1 -38
  111. package/dist/tools/coding-tools/tools/find-references/index.d.ts +0 -1
  112. package/dist/tools/coding-tools/tools/find-references/index.js +1 -72
  113. package/dist/tools/coding-tools/tools/find-references/schema.d.ts +0 -1
  114. package/dist/tools/coding-tools/tools/find-references/schema.js +1 -26
  115. package/dist/tools/coding-tools/tools/find-symbol/index.d.ts +0 -1
  116. package/dist/tools/coding-tools/tools/find-symbol/index.js +1 -87
  117. package/dist/tools/coding-tools/tools/find-symbol/schema.d.ts +0 -1
  118. package/dist/tools/coding-tools/tools/find-symbol/schema.js +1 -26
  119. package/dist/tools/coding-tools/tools/get-call-hierarchy/index.d.ts +0 -1
  120. package/dist/tools/coding-tools/tools/get-call-hierarchy/index.js +1 -55
  121. package/dist/tools/coding-tools/tools/get-call-hierarchy/schema.d.ts +0 -1
  122. package/dist/tools/coding-tools/tools/get-call-hierarchy/schema.js +1 -26
  123. package/dist/tools/coding-tools/tools/get-diagnostics/index.d.ts +0 -1
  124. package/dist/tools/coding-tools/tools/get-diagnostics/index.js +1 -51
  125. package/dist/tools/coding-tools/tools/get-diagnostics/schema.d.ts +0 -1
  126. package/dist/tools/coding-tools/tools/get-diagnostics/schema.js +1 -18
  127. package/dist/tools/coding-tools/tools/get-exports/index.d.ts +0 -1
  128. package/dist/tools/coding-tools/tools/get-exports/index.js +1 -53
  129. package/dist/tools/coding-tools/tools/get-exports/schema.d.ts +0 -1
  130. package/dist/tools/coding-tools/tools/get-exports/schema.js +1 -18
  131. package/dist/tools/coding-tools/tools/get-imports/index.d.ts +0 -1
  132. package/dist/tools/coding-tools/tools/get-imports/index.js +1 -39
  133. package/dist/tools/coding-tools/tools/get-imports/schema.d.ts +0 -1
  134. package/dist/tools/coding-tools/tools/get-imports/schema.js +1 -18
  135. package/dist/tools/coding-tools/tools/get-outline/index.d.ts +0 -1
  136. package/dist/tools/coding-tools/tools/get-outline/index.js +1 -53
  137. package/dist/tools/coding-tools/tools/get-outline/schema.d.ts +0 -1
  138. package/dist/tools/coding-tools/tools/get-outline/schema.js +1 -18
  139. package/dist/tools/coding-tools/tools/get-symbols/index.d.ts +0 -1
  140. package/dist/tools/coding-tools/tools/get-symbols/index.js +1 -40
  141. package/dist/tools/coding-tools/tools/get-symbols/schema.d.ts +0 -1
  142. package/dist/tools/coding-tools/tools/get-symbols/schema.js +1 -22
  143. package/dist/tools/coding-tools/tools/go-to-definition/index.d.ts +0 -1
  144. package/dist/tools/coding-tools/tools/go-to-definition/index.js +1 -100
  145. package/dist/tools/coding-tools/tools/go-to-definition/schema.d.ts +0 -1
  146. package/dist/tools/coding-tools/tools/go-to-definition/schema.js +1 -30
  147. package/dist/tools/coding-tools/tools/multi-file-edit/index.d.ts +0 -1
  148. package/dist/tools/coding-tools/tools/multi-file-edit/index.js +1 -90
  149. package/dist/tools/coding-tools/tools/multi-file-edit/schema.d.ts +0 -1
  150. package/dist/tools/coding-tools/tools/multi-file-edit/schema.js +1 -38
  151. package/dist/tools/coding-tools/tools/refactor-rename/index.d.ts +0 -1
  152. package/dist/tools/coding-tools/tools/refactor-rename/index.js +3 -144
  153. package/dist/tools/coding-tools/tools/refactor-rename/schema.d.ts +0 -1
  154. package/dist/tools/coding-tools/tools/refactor-rename/schema.js +1 -30
  155. package/dist/tools/config-loader.d.ts +2 -1
  156. package/dist/tools/config-loader.js +1 -132
  157. package/dist/tools/create-tool-project.d.ts +0 -1
  158. package/dist/tools/create-tool-project.js +1 -47
  159. package/dist/tools/db-tools/adapters/base.d.ts +0 -1
  160. package/dist/tools/db-tools/adapters/base.js +1 -11
  161. package/dist/tools/db-tools/adapters/factory.d.ts +0 -1
  162. package/dist/tools/db-tools/adapters/factory.js +1 -25
  163. package/dist/tools/db-tools/adapters/mysql.d.ts +0 -1
  164. package/dist/tools/db-tools/adapters/mysql.js +1 -65
  165. package/dist/tools/db-tools/adapters/postgres.d.ts +0 -1
  166. package/dist/tools/db-tools/adapters/postgres.js +3 -68
  167. package/dist/tools/db-tools/adapters/sqlite.d.ts +0 -1
  168. package/dist/tools/db-tools/adapters/sqlite.js +1 -117
  169. package/dist/tools/db-tools/index.d.ts +0 -1
  170. package/dist/tools/db-tools/index.js +1 -50
  171. package/dist/tools/db-tools/tools/count/index.d.ts +0 -1
  172. package/dist/tools/db-tools/tools/count/index.js +1 -32
  173. package/dist/tools/db-tools/tools/count/schema.d.ts +0 -1
  174. package/dist/tools/db-tools/tools/count/schema.js +1 -22
  175. package/dist/tools/db-tools/tools/delete/index.d.ts +0 -1
  176. package/dist/tools/db-tools/tools/delete/index.js +1 -27
  177. package/dist/tools/db-tools/tools/delete/schema.d.ts +0 -1
  178. package/dist/tools/db-tools/tools/delete/schema.js +1 -22
  179. package/dist/tools/db-tools/tools/insert/index.d.ts +0 -1
  180. package/dist/tools/db-tools/tools/insert/index.js +1 -33
  181. package/dist/tools/db-tools/tools/insert/schema.d.ts +0 -1
  182. package/dist/tools/db-tools/tools/insert/schema.js +1 -22
  183. package/dist/tools/db-tools/tools/query/index.d.ts +0 -1
  184. package/dist/tools/db-tools/tools/query/index.js +1 -31
  185. package/dist/tools/db-tools/tools/query/schema.d.ts +0 -1
  186. package/dist/tools/db-tools/tools/query/schema.js +1 -24
  187. package/dist/tools/db-tools/tools/schema/index.d.ts +0 -1
  188. package/dist/tools/db-tools/tools/schema/index.js +1 -25
  189. package/dist/tools/db-tools/tools/schema/schema.d.ts +0 -1
  190. package/dist/tools/db-tools/tools/schema/schema.js +1 -18
  191. package/dist/tools/db-tools/tools/tables/index.d.ts +0 -1
  192. package/dist/tools/db-tools/tools/tables/index.js +1 -24
  193. package/dist/tools/db-tools/tools/tables/schema.d.ts +0 -1
  194. package/dist/tools/db-tools/tools/tables/schema.js +1 -14
  195. package/dist/tools/db-tools/tools/update/index.d.ts +0 -1
  196. package/dist/tools/db-tools/tools/update/index.js +1 -33
  197. package/dist/tools/db-tools/tools/update/schema.d.ts +0 -1
  198. package/dist/tools/db-tools/tools/update/schema.js +1 -26
  199. package/dist/tools/diff-tools/index.d.ts +0 -1
  200. package/dist/tools/diff-tools/index.js +1 -34
  201. package/dist/tools/diff-tools/tools/apply/index.d.ts +0 -1
  202. package/dist/tools/diff-tools/tools/apply/index.js +1 -65
  203. package/dist/tools/diff-tools/tools/apply/schema.d.ts +0 -1
  204. package/dist/tools/diff-tools/tools/apply/schema.js +1 -18
  205. package/dist/tools/diff-tools/tools/create/index.d.ts +0 -1
  206. package/dist/tools/diff-tools/tools/create/index.js +1 -61
  207. package/dist/tools/diff-tools/tools/create/schema.d.ts +0 -1
  208. package/dist/tools/diff-tools/tools/create/schema.js +1 -27
  209. package/dist/tools/diff-tools/tools/preview/index.d.ts +0 -1
  210. package/dist/tools/diff-tools/tools/preview/index.js +3 -62
  211. package/dist/tools/diff-tools/tools/preview/schema.d.ts +0 -1
  212. package/dist/tools/diff-tools/tools/preview/schema.js +1 -18
  213. package/dist/tools/exec-tools/index.d.ts +0 -1
  214. package/dist/tools/exec-tools/index.js +1 -42
  215. package/dist/tools/exec-tools/process-registry.d.ts +0 -1
  216. package/dist/tools/exec-tools/process-registry.js +1 -66
  217. package/dist/tools/exec-tools/tools/kill/index.d.ts +0 -1
  218. package/dist/tools/exec-tools/tools/kill/index.js +1 -31
  219. package/dist/tools/exec-tools/tools/kill/schema.d.ts +0 -1
  220. package/dist/tools/exec-tools/tools/kill/schema.js +1 -18
  221. package/dist/tools/exec-tools/tools/list-processes/index.d.ts +0 -1
  222. package/dist/tools/exec-tools/tools/list-processes/index.js +1 -21
  223. package/dist/tools/exec-tools/tools/list-processes/schema.d.ts +0 -1
  224. package/dist/tools/exec-tools/tools/list-processes/schema.js +1 -12
  225. package/dist/tools/exec-tools/tools/read-output/index.d.ts +0 -1
  226. package/dist/tools/exec-tools/tools/read-output/index.js +1 -32
  227. package/dist/tools/exec-tools/tools/read-output/schema.d.ts +0 -1
  228. package/dist/tools/exec-tools/tools/read-output/schema.js +1 -18
  229. package/dist/tools/exec-tools/tools/run/index.d.ts +0 -1
  230. package/dist/tools/exec-tools/tools/run/index.js +5 -40
  231. package/dist/tools/exec-tools/tools/run/schema.d.ts +0 -1
  232. package/dist/tools/exec-tools/tools/run/schema.js +1 -27
  233. package/dist/tools/exec-tools/tools/run-background/index.d.ts +0 -1
  234. package/dist/tools/exec-tools/tools/run-background/index.js +1 -40
  235. package/dist/tools/exec-tools/tools/run-background/schema.d.ts +0 -1
  236. package/dist/tools/exec-tools/tools/run-background/schema.js +1 -22
  237. package/dist/tools/exec-tools/tools/run-shell/index.d.ts +0 -1
  238. package/dist/tools/exec-tools/tools/run-shell/index.js +5 -48
  239. package/dist/tools/exec-tools/tools/run-shell/schema.d.ts +0 -1
  240. package/dist/tools/exec-tools/tools/run-shell/schema.js +1 -27
  241. package/dist/tools/fs-tools/index.d.ts +0 -1
  242. package/dist/tools/fs-tools/index.js +1 -86
  243. package/dist/tools/fs-tools/tools/append-file/index.d.ts +0 -1
  244. package/dist/tools/fs-tools/tools/append-file/index.js +1 -66
  245. package/dist/tools/fs-tools/tools/append-file/schema.d.ts +0 -1
  246. package/dist/tools/fs-tools/tools/append-file/schema.js +1 -27
  247. package/dist/tools/fs-tools/tools/batch-read/index.d.ts +0 -1
  248. package/dist/tools/fs-tools/tools/batch-read/index.js +1 -54
  249. package/dist/tools/fs-tools/tools/batch-read/schema.d.ts +0 -1
  250. package/dist/tools/fs-tools/tools/batch-read/schema.js +1 -27
  251. package/dist/tools/fs-tools/tools/batch-write/index.d.ts +0 -1
  252. package/dist/tools/fs-tools/tools/batch-write/index.js +1 -75
  253. package/dist/tools/fs-tools/tools/batch-write/schema.d.ts +0 -1
  254. package/dist/tools/fs-tools/tools/batch-write/schema.js +1 -37
  255. package/dist/tools/fs-tools/tools/copy/index.d.ts +0 -1
  256. package/dist/tools/fs-tools/tools/copy/index.js +1 -85
  257. package/dist/tools/fs-tools/tools/copy/schema.d.ts +0 -1
  258. package/dist/tools/fs-tools/tools/copy/schema.js +1 -22
  259. package/dist/tools/fs-tools/tools/create-dir/index.d.ts +0 -1
  260. package/dist/tools/fs-tools/tools/create-dir/index.js +1 -63
  261. package/dist/tools/fs-tools/tools/create-dir/schema.d.ts +0 -1
  262. package/dist/tools/fs-tools/tools/create-dir/schema.js +1 -23
  263. package/dist/tools/fs-tools/tools/delete-dir/index.d.ts +0 -1
  264. package/dist/tools/fs-tools/tools/delete-dir/index.js +1 -36
  265. package/dist/tools/fs-tools/tools/delete-dir/schema.d.ts +0 -1
  266. package/dist/tools/fs-tools/tools/delete-dir/schema.js +1 -22
  267. package/dist/tools/fs-tools/tools/delete-file/index.d.ts +0 -1
  268. package/dist/tools/fs-tools/tools/delete-file/index.js +1 -64
  269. package/dist/tools/fs-tools/tools/delete-file/schema.d.ts +0 -1
  270. package/dist/tools/fs-tools/tools/delete-file/schema.js +1 -18
  271. package/dist/tools/fs-tools/tools/exists/index.d.ts +0 -1
  272. package/dist/tools/fs-tools/tools/exists/index.js +1 -55
  273. package/dist/tools/fs-tools/tools/exists/schema.d.ts +0 -1
  274. package/dist/tools/fs-tools/tools/exists/schema.js +1 -18
  275. package/dist/tools/fs-tools/tools/glob/index.d.ts +0 -1
  276. package/dist/tools/fs-tools/tools/glob/index.js +1 -46
  277. package/dist/tools/fs-tools/tools/glob/schema.d.ts +0 -1
  278. package/dist/tools/fs-tools/tools/glob/schema.js +1 -39
  279. package/dist/tools/fs-tools/tools/list-dir/index.d.ts +0 -1
  280. package/dist/tools/fs-tools/tools/list-dir/index.js +1 -82
  281. package/dist/tools/fs-tools/tools/list-dir/schema.d.ts +0 -1
  282. package/dist/tools/fs-tools/tools/list-dir/schema.js +1 -23
  283. package/dist/tools/fs-tools/tools/move/index.d.ts +0 -1
  284. package/dist/tools/fs-tools/tools/move/index.js +1 -68
  285. package/dist/tools/fs-tools/tools/move/schema.d.ts +0 -1
  286. package/dist/tools/fs-tools/tools/move/schema.js +1 -22
  287. package/dist/tools/fs-tools/tools/read-file/index.d.ts +0 -1
  288. package/dist/tools/fs-tools/tools/read-file/index.js +1 -65
  289. package/dist/tools/fs-tools/tools/read-file/schema.d.ts +0 -1
  290. package/dist/tools/fs-tools/tools/read-file/schema.js +1 -23
  291. package/dist/tools/fs-tools/tools/read-file-range/index.d.ts +0 -1
  292. package/dist/tools/fs-tools/tools/read-file-range/index.js +4 -84
  293. package/dist/tools/fs-tools/tools/read-file-range/schema.d.ts +0 -1
  294. package/dist/tools/fs-tools/tools/read-file-range/schema.js +1 -26
  295. package/dist/tools/fs-tools/tools/replace-in-file/index.d.ts +0 -1
  296. package/dist/tools/fs-tools/tools/replace-in-file/index.js +1 -82
  297. package/dist/tools/fs-tools/tools/replace-in-file/schema.d.ts +0 -1
  298. package/dist/tools/fs-tools/tools/replace-in-file/schema.js +1 -26
  299. package/dist/tools/fs-tools/tools/search/index.d.ts +0 -1
  300. package/dist/tools/fs-tools/tools/search/index.js +3 -121
  301. package/dist/tools/fs-tools/tools/search/schema.d.ts +0 -1
  302. package/dist/tools/fs-tools/tools/search/schema.js +1 -42
  303. package/dist/tools/fs-tools/tools/stat/index.d.ts +0 -1
  304. package/dist/tools/fs-tools/tools/stat/index.js +1 -66
  305. package/dist/tools/fs-tools/tools/stat/schema.d.ts +0 -1
  306. package/dist/tools/fs-tools/tools/stat/schema.js +1 -18
  307. package/dist/tools/fs-tools/tools/tree/index.d.ts +0 -1
  308. package/dist/tools/fs-tools/tools/tree/index.js +2 -92
  309. package/dist/tools/fs-tools/tools/tree/schema.d.ts +0 -1
  310. package/dist/tools/fs-tools/tools/tree/schema.js +1 -23
  311. package/dist/tools/fs-tools/tools/write-file/index.d.ts +0 -1
  312. package/dist/tools/fs-tools/tools/write-file/index.js +1 -68
  313. package/dist/tools/fs-tools/tools/write-file/schema.d.ts +0 -1
  314. package/dist/tools/fs-tools/tools/write-file/schema.js +1 -27
  315. package/dist/tools/git-tools/index.d.ts +0 -1
  316. package/dist/tools/git-tools/index.js +1 -58
  317. package/dist/tools/git-tools/tools/add/index.d.ts +0 -1
  318. package/dist/tools/git-tools/tools/add/index.js +1 -24
  319. package/dist/tools/git-tools/tools/add/schema.d.ts +0 -1
  320. package/dist/tools/git-tools/tools/add/schema.js +1 -14
  321. package/dist/tools/git-tools/tools/blame/index.d.ts +0 -1
  322. package/dist/tools/git-tools/tools/blame/index.js +1 -24
  323. package/dist/tools/git-tools/tools/blame/schema.d.ts +0 -1
  324. package/dist/tools/git-tools/tools/blame/schema.js +1 -14
  325. package/dist/tools/git-tools/tools/branch-create/index.d.ts +0 -1
  326. package/dist/tools/git-tools/tools/branch-create/index.js +1 -42
  327. package/dist/tools/git-tools/tools/branch-create/schema.d.ts +0 -1
  328. package/dist/tools/git-tools/tools/branch-create/schema.js +1 -23
  329. package/dist/tools/git-tools/tools/branch-list/index.d.ts +0 -1
  330. package/dist/tools/git-tools/tools/branch-list/index.js +5 -25
  331. package/dist/tools/git-tools/tools/branch-list/schema.d.ts +0 -1
  332. package/dist/tools/git-tools/tools/branch-list/schema.js +1 -14
  333. package/dist/tools/git-tools/tools/checkout/index.d.ts +0 -1
  334. package/dist/tools/git-tools/tools/checkout/index.js +1 -24
  335. package/dist/tools/git-tools/tools/checkout/schema.d.ts +0 -1
  336. package/dist/tools/git-tools/tools/checkout/schema.js +1 -14
  337. package/dist/tools/git-tools/tools/commit/index.d.ts +0 -1
  338. package/dist/tools/git-tools/tools/commit/index.js +4 -29
  339. package/dist/tools/git-tools/tools/commit/schema.d.ts +0 -1
  340. package/dist/tools/git-tools/tools/commit/schema.js +1 -14
  341. package/dist/tools/git-tools/tools/diff/index.d.ts +0 -1
  342. package/dist/tools/git-tools/tools/diff/index.js +1 -35
  343. package/dist/tools/git-tools/tools/diff/schema.d.ts +0 -1
  344. package/dist/tools/git-tools/tools/diff/schema.js +1 -18
  345. package/dist/tools/git-tools/tools/log/index.d.ts +0 -1
  346. package/dist/tools/git-tools/tools/log/index.js +6 -35
  347. package/dist/tools/git-tools/tools/log/schema.d.ts +0 -1
  348. package/dist/tools/git-tools/tools/log/schema.js +1 -18
  349. package/dist/tools/git-tools/tools/status/index.d.ts +0 -1
  350. package/dist/tools/git-tools/tools/status/index.js +2 -50
  351. package/dist/tools/git-tools/tools/status/schema.d.ts +0 -1
  352. package/dist/tools/git-tools/tools/status/schema.js +1 -13
  353. package/dist/tools/git-tools/utils.d.ts +0 -1
  354. package/dist/tools/git-tools/utils.js +1 -13
  355. package/dist/tools/http-tools/index.d.ts +0 -1
  356. package/dist/tools/http-tools/index.js +1 -33
  357. package/dist/tools/http-tools/tools/delete/index.d.ts +0 -1
  358. package/dist/tools/http-tools/tools/delete/index.js +5 -36
  359. package/dist/tools/http-tools/tools/delete/schema.d.ts +0 -1
  360. package/dist/tools/http-tools/tools/delete/schema.js +1 -22
  361. package/dist/tools/http-tools/tools/download/index.d.ts +0 -1
  362. package/dist/tools/http-tools/tools/download/index.js +1 -79
  363. package/dist/tools/http-tools/tools/download/schema.d.ts +0 -1
  364. package/dist/tools/http-tools/tools/download/schema.js +1 -26
  365. package/dist/tools/http-tools/tools/get/index.d.ts +0 -1
  366. package/dist/tools/http-tools/tools/get/index.js +6 -39
  367. package/dist/tools/http-tools/tools/get/schema.d.ts +0 -1
  368. package/dist/tools/http-tools/tools/get/schema.js +1 -22
  369. package/dist/tools/http-tools/tools/post/index.d.ts +0 -1
  370. package/dist/tools/http-tools/tools/post/index.js +5 -48
  371. package/dist/tools/http-tools/tools/post/schema.d.ts +0 -1
  372. package/dist/tools/http-tools/tools/post/schema.js +1 -26
  373. package/dist/tools/http-tools/tools/put/index.d.ts +0 -1
  374. package/dist/tools/http-tools/tools/put/index.js +5 -47
  375. package/dist/tools/http-tools/tools/put/schema.d.ts +0 -1
  376. package/dist/tools/http-tools/tools/put/schema.js +1 -26
  377. package/dist/tools/index.d.ts +2 -1
  378. package/dist/tools/index.js +1 -121
  379. package/dist/tools/mcp-tools/index.d.ts +107 -0
  380. package/dist/tools/mcp-tools/index.js +1 -0
  381. package/dist/tools/registry.d.ts +0 -1
  382. package/dist/tools/registry.js +1 -217
  383. package/dist/tools/router.d.ts +0 -1
  384. package/dist/tools/router.js +1 -127
  385. package/dist/tools/search/bm25-engine.d.ts +0 -1
  386. package/dist/tools/search/bm25-engine.js +1 -218
  387. package/dist/tools/search/index.d.ts +0 -1
  388. package/dist/tools/search/index.js +1 -21
  389. package/dist/tools/search/system-prompt.d.ts +0 -1
  390. package/dist/tools/search/system-prompt.js +2 -62
  391. package/dist/tools/search/tool-cache.d.ts +0 -1
  392. package/dist/tools/search/tool-cache.js +1 -107
  393. package/dist/tools/search/tool-search.d.ts +0 -1
  394. package/dist/tools/search/tool-search.js +2 -62
  395. package/dist/tools/system-tools/index.d.ts +0 -1
  396. package/dist/tools/system-tools/index.js +1 -39
  397. package/dist/tools/system-tools/tools/cwd/index.d.ts +0 -1
  398. package/dist/tools/system-tools/tools/cwd/index.js +1 -18
  399. package/dist/tools/system-tools/tools/cwd/schema.d.ts +0 -1
  400. package/dist/tools/system-tools/tools/cwd/schema.js +1 -12
  401. package/dist/tools/system-tools/tools/disk-usage/index.d.ts +0 -1
  402. package/dist/tools/system-tools/tools/disk-usage/index.js +2 -41
  403. package/dist/tools/system-tools/tools/disk-usage/schema.d.ts +0 -1
  404. package/dist/tools/system-tools/tools/disk-usage/schema.js +1 -18
  405. package/dist/tools/system-tools/tools/env/index.d.ts +0 -1
  406. package/dist/tools/system-tools/tools/env/index.js +1 -34
  407. package/dist/tools/system-tools/tools/env/schema.d.ts +0 -1
  408. package/dist/tools/system-tools/tools/env/schema.js +1 -17
  409. package/dist/tools/system-tools/tools/info/index.d.ts +0 -1
  410. package/dist/tools/system-tools/tools/info/index.js +1 -70
  411. package/dist/tools/system-tools/tools/info/schema.d.ts +0 -1
  412. package/dist/tools/system-tools/tools/info/schema.js +1 -12
  413. package/dist/tools/system-tools/tools/set-env/index.d.ts +0 -1
  414. package/dist/tools/system-tools/tools/set-env/index.js +1 -29
  415. package/dist/tools/system-tools/tools/set-env/schema.d.ts +0 -1
  416. package/dist/tools/system-tools/tools/set-env/schema.js +1 -22
  417. package/dist/tools/types.d.ts +12 -1
  418. package/dist/tools/types.js +1 -28
  419. package/dist/tools/web-tools/index.d.ts +0 -1
  420. package/dist/tools/web-tools/index.js +1 -53
  421. package/dist/tools/web-tools/tools/extract-links/index.d.ts +0 -1
  422. package/dist/tools/web-tools/tools/extract-links/index.js +1 -125
  423. package/dist/tools/web-tools/tools/extract-links/schema.d.ts +0 -1
  424. package/dist/tools/web-tools/tools/extract-links/schema.js +1 -27
  425. package/dist/tools/web-tools/tools/feed/index.d.ts +0 -1
  426. package/dist/tools/web-tools/tools/feed/index.js +1 -41
  427. package/dist/tools/web-tools/tools/feed/schema.d.ts +0 -1
  428. package/dist/tools/web-tools/tools/feed/schema.js +1 -28
  429. package/dist/tools/web-tools/tools/fetch/extractor.d.ts +0 -1
  430. package/dist/tools/web-tools/tools/fetch/extractor.js +7 -196
  431. package/dist/tools/web-tools/tools/fetch/index.d.ts +0 -1
  432. package/dist/tools/web-tools/tools/fetch/index.js +4 -67
  433. package/dist/tools/web-tools/tools/fetch/schema.d.ts +0 -1
  434. package/dist/tools/web-tools/tools/fetch/schema.js +1 -33
  435. package/dist/tools/web-tools/tools/map/index.d.ts +0 -1
  436. package/dist/tools/web-tools/tools/map/index.js +4 -101
  437. package/dist/tools/web-tools/tools/map/schema.d.ts +0 -1
  438. package/dist/tools/web-tools/tools/map/schema.js +1 -23
  439. package/dist/tools/web-tools/tools/metadata/index.d.ts +0 -1
  440. package/dist/tools/web-tools/tools/metadata/index.js +1 -113
  441. package/dist/tools/web-tools/tools/metadata/schema.d.ts +0 -1
  442. package/dist/tools/web-tools/tools/metadata/schema.js +1 -23
  443. package/dist/tools/web-tools/tools/scrape/index.d.ts +0 -1
  444. package/dist/tools/web-tools/tools/scrape/index.js +17 -245
  445. package/dist/tools/web-tools/tools/scrape/schema.d.ts +0 -1
  446. package/dist/tools/web-tools/tools/scrape/schema.js +1 -42
  447. package/dist/tools/web-tools/tools/screenshot/index.d.ts +0 -1
  448. package/dist/tools/web-tools/tools/screenshot/index.js +1 -57
  449. package/dist/tools/web-tools/tools/screenshot/schema.d.ts +0 -1
  450. package/dist/tools/web-tools/tools/screenshot/schema.js +1 -37
  451. package/dist/tools/web-tools/tools/search/index.d.ts +0 -1
  452. package/dist/tools/web-tools/tools/search/index.js +2 -289
  453. package/dist/tools/web-tools/tools/search/schema.d.ts +0 -1
  454. package/dist/tools/web-tools/tools/search/schema.js +1 -38
  455. package/dist/tools/web-tools/tools/sitemap/index.d.ts +0 -1
  456. package/dist/tools/web-tools/tools/sitemap/index.js +2 -153
  457. package/dist/tools/web-tools/tools/sitemap/schema.d.ts +0 -1
  458. package/dist/tools/web-tools/tools/sitemap/schema.js +1 -28
  459. package/dist/tools/web-tools/utils/puppeteer-loader.d.ts +0 -1
  460. package/dist/tools/web-tools/utils/puppeteer-loader.js +1 -17
  461. package/dist/tools/web-tools/utils/rss-loader.d.ts +0 -1
  462. package/dist/tools/web-tools/utils/rss-loader.js +1 -17
  463. package/dist/types/index.d.ts +0 -1
  464. package/dist/types/index.js +1 -3
  465. package/dist/utils/global-config-loader.d.ts +0 -1
  466. package/dist/utils/global-config-loader.js +1 -83
  467. package/dist/utils/home-config.d.ts +0 -1
  468. package/dist/utils/home-config.js +1 -112
  469. package/dist/utils/runtime-config-loader.d.ts +0 -1
  470. package/dist/utils/runtime-config-loader.js +1 -168
  471. package/dist/workflows/index.d.ts +0 -1
  472. package/dist/workflows/index.js +1 -22
  473. package/dist/workflows/planning/plan-types.d.ts +0 -1
  474. package/dist/workflows/planning/plan-types.js +1 -3
  475. package/dist/workflows/planning/planner.d.ts +0 -1
  476. package/dist/workflows/planning/planner.js +2 -121
  477. package/dist/workflows/steps/step-executor.d.ts +0 -1
  478. package/dist/workflows/steps/step-executor.js +5 -194
  479. package/dist/workflows/steps/step-tracker.d.ts +0 -1
  480. package/dist/workflows/steps/step-tracker.js +6 -72
  481. package/dist/workflows/workflow-executor.d.ts +0 -1
  482. package/dist/workflows/workflow-executor.js +32 -761
  483. package/dist/workflows/workflow-types.d.ts +0 -1
  484. package/dist/workflows/workflow-types.js +1 -12
  485. package/package.json +15 -9
  486. package/LICENSE +0 -201
  487. package/README.md +0 -926
  488. package/dist/client/base-agent-context.d.ts.map +0 -1
  489. package/dist/client/base-agent-context.js.map +0 -1
  490. package/dist/client/index.d.ts.map +0 -1
  491. package/dist/client/index.js.map +0 -1
  492. package/dist/client/query-classifier.d.ts.map +0 -1
  493. package/dist/client/query-classifier.js.map +0 -1
  494. package/dist/client/tool-orchestrator.d.ts.map +0 -1
  495. package/dist/client/tool-orchestrator.js.map +0 -1
  496. package/dist/errors/index.d.ts.map +0 -1
  497. package/dist/errors/index.js.map +0 -1
  498. package/dist/index.d.ts.map +0 -1
  499. package/dist/index.js.map +0 -1
  500. package/dist/knowledge/embedders/gemini-embedder.d.ts +0 -21
  501. package/dist/knowledge/embedders/gemini-embedder.d.ts.map +0 -1
  502. package/dist/knowledge/embedders/gemini-embedder.js +0 -93
  503. package/dist/knowledge/embedders/gemini-embedder.js.map +0 -1
  504. package/dist/knowledge/embedders/ollama-embedder.d.ts +0 -12
  505. package/dist/knowledge/embedders/ollama-embedder.d.ts.map +0 -1
  506. package/dist/knowledge/embedders/ollama-embedder.js +0 -68
  507. package/dist/knowledge/embedders/ollama-embedder.js.map +0 -1
  508. package/dist/knowledge/embedders/openai-embedder.d.ts +0 -14
  509. package/dist/knowledge/embedders/openai-embedder.d.ts.map +0 -1
  510. package/dist/knowledge/embedders/openai-embedder.js +0 -94
  511. package/dist/knowledge/embedders/openai-embedder.js.map +0 -1
  512. package/dist/knowledge/errors.d.ts +0 -22
  513. package/dist/knowledge/errors.d.ts.map +0 -1
  514. package/dist/knowledge/errors.js +0 -51
  515. package/dist/knowledge/errors.js.map +0 -1
  516. package/dist/knowledge/index.d.ts +0 -13
  517. package/dist/knowledge/index.d.ts.map +0 -1
  518. package/dist/knowledge/index.js +0 -28
  519. package/dist/knowledge/index.js.map +0 -1
  520. package/dist/knowledge/knowledge.d.ts +0 -38
  521. package/dist/knowledge/knowledge.d.ts.map +0 -1
  522. package/dist/knowledge/knowledge.js +0 -298
  523. package/dist/knowledge/knowledge.js.map +0 -1
  524. package/dist/knowledge/providers/index.d.ts +0 -4
  525. package/dist/knowledge/providers/index.d.ts.map +0 -1
  526. package/dist/knowledge/providers/index.js +0 -8
  527. package/dist/knowledge/providers/index.js.map +0 -1
  528. package/dist/knowledge/providers/memory-provider.d.ts +0 -16
  529. package/dist/knowledge/providers/memory-provider.d.ts.map +0 -1
  530. package/dist/knowledge/providers/memory-provider.js +0 -116
  531. package/dist/knowledge/providers/memory-provider.js.map +0 -1
  532. package/dist/knowledge/providers/persistent-provider.d.ts +0 -26
  533. package/dist/knowledge/providers/persistent-provider.d.ts.map +0 -1
  534. package/dist/knowledge/providers/persistent-provider.js +0 -214
  535. package/dist/knowledge/providers/persistent-provider.js.map +0 -1
  536. package/dist/knowledge/sources/json-source.d.ts +0 -18
  537. package/dist/knowledge/sources/json-source.d.ts.map +0 -1
  538. package/dist/knowledge/sources/json-source.js +0 -224
  539. package/dist/knowledge/sources/json-source.js.map +0 -1
  540. package/dist/knowledge/sources/markdown-source.d.ts +0 -27
  541. package/dist/knowledge/sources/markdown-source.d.ts.map +0 -1
  542. package/dist/knowledge/sources/markdown-source.js +0 -410
  543. package/dist/knowledge/sources/markdown-source.js.map +0 -1
  544. package/dist/knowledge/sources/sqlite-text-source.d.ts +0 -18
  545. package/dist/knowledge/sources/sqlite-text-source.d.ts.map +0 -1
  546. package/dist/knowledge/sources/sqlite-text-source.js +0 -201
  547. package/dist/knowledge/sources/sqlite-text-source.js.map +0 -1
  548. package/dist/knowledge/types.d.ts +0 -136
  549. package/dist/knowledge/types.d.ts.map +0 -1
  550. package/dist/knowledge/types.js +0 -3
  551. package/dist/knowledge/types.js.map +0 -1
  552. package/dist/mcp/client.d.ts.map +0 -1
  553. package/dist/mcp/client.js.map +0 -1
  554. package/dist/mcp/index.d.ts.map +0 -1
  555. package/dist/mcp/index.js.map +0 -1
  556. package/dist/mcp/types.d.ts.map +0 -1
  557. package/dist/mcp/types.js.map +0 -1
  558. package/dist/modes/built-in-modes.d.ts.map +0 -1
  559. package/dist/modes/built-in-modes.js.map +0 -1
  560. package/dist/modes/create-mode.d.ts.map +0 -1
  561. package/dist/modes/create-mode.js.map +0 -1
  562. package/dist/modes/index.d.ts.map +0 -1
  563. package/dist/modes/index.js.map +0 -1
  564. package/dist/modes/mode-registry.d.ts.map +0 -1
  565. package/dist/modes/mode-registry.js.map +0 -1
  566. package/dist/modes/mode-types.d.ts.map +0 -1
  567. package/dist/modes/mode-types.js.map +0 -1
  568. package/dist/providers/anthropic/index.d.ts.map +0 -1
  569. package/dist/providers/anthropic/index.js.map +0 -1
  570. package/dist/providers/base/index.d.ts.map +0 -1
  571. package/dist/providers/base/index.js.map +0 -1
  572. package/dist/providers/config.d.ts.map +0 -1
  573. package/dist/providers/config.js.map +0 -1
  574. package/dist/providers/gemini/index.d.ts.map +0 -1
  575. package/dist/providers/gemini/index.js.map +0 -1
  576. package/dist/providers/index.d.ts.map +0 -1
  577. package/dist/providers/index.js.map +0 -1
  578. package/dist/providers/media-utils.d.ts.map +0 -1
  579. package/dist/providers/media-utils.js.map +0 -1
  580. package/dist/providers/ollama/adapter.d.ts.map +0 -1
  581. package/dist/providers/ollama/adapter.js.map +0 -1
  582. package/dist/providers/ollama/http.d.ts.map +0 -1
  583. package/dist/providers/ollama/http.js.map +0 -1
  584. package/dist/providers/ollama/index.d.ts.map +0 -1
  585. package/dist/providers/ollama/index.js.map +0 -1
  586. package/dist/providers/ollama/provider.d.ts.map +0 -1
  587. package/dist/providers/ollama/provider.js.map +0 -1
  588. package/dist/providers/ollama/slm-healer.d.ts.map +0 -1
  589. package/dist/providers/ollama/slm-healer.js.map +0 -1
  590. package/dist/providers/ollama/slm-registry.d.ts.map +0 -1
  591. package/dist/providers/ollama/slm-registry.js.map +0 -1
  592. package/dist/providers/openai/index.d.ts.map +0 -1
  593. package/dist/providers/openai/index.js.map +0 -1
  594. package/dist/providers/provider-logger.d.ts.map +0 -1
  595. package/dist/providers/provider-logger.js.map +0 -1
  596. package/dist/toolpack.d.ts.map +0 -1
  597. package/dist/toolpack.js.map +0 -1
  598. package/dist/tools/cloud-tools/index.d.ts.map +0 -1
  599. package/dist/tools/cloud-tools/index.js.map +0 -1
  600. package/dist/tools/cloud-tools/providers/netlify.d.ts.map +0 -1
  601. package/dist/tools/cloud-tools/providers/netlify.js.map +0 -1
  602. package/dist/tools/cloud-tools/tools/deploy/index.d.ts.map +0 -1
  603. package/dist/tools/cloud-tools/tools/deploy/index.js.map +0 -1
  604. package/dist/tools/cloud-tools/tools/deploy/schema.d.ts.map +0 -1
  605. package/dist/tools/cloud-tools/tools/deploy/schema.js.map +0 -1
  606. package/dist/tools/cloud-tools/tools/list/index.d.ts.map +0 -1
  607. package/dist/tools/cloud-tools/tools/list/index.js.map +0 -1
  608. package/dist/tools/cloud-tools/tools/list/schema.d.ts.map +0 -1
  609. package/dist/tools/cloud-tools/tools/list/schema.js.map +0 -1
  610. package/dist/tools/cloud-tools/tools/status/index.d.ts.map +0 -1
  611. package/dist/tools/cloud-tools/tools/status/index.js.map +0 -1
  612. package/dist/tools/cloud-tools/tools/status/schema.d.ts.map +0 -1
  613. package/dist/tools/cloud-tools/tools/status/schema.js.map +0 -1
  614. package/dist/tools/coding-tools/index.d.ts.map +0 -1
  615. package/dist/tools/coding-tools/index.js.map +0 -1
  616. package/dist/tools/coding-tools/parsers/babel-parser.d.ts.map +0 -1
  617. package/dist/tools/coding-tools/parsers/babel-parser.js.map +0 -1
  618. package/dist/tools/coding-tools/parsers/file-index.d.ts.map +0 -1
  619. package/dist/tools/coding-tools/parsers/file-index.js.map +0 -1
  620. package/dist/tools/coding-tools/parsers/grammar-manager.d.ts.map +0 -1
  621. package/dist/tools/coding-tools/parsers/grammar-manager.js.map +0 -1
  622. package/dist/tools/coding-tools/parsers/language-detector.d.ts.map +0 -1
  623. package/dist/tools/coding-tools/parsers/language-detector.js.map +0 -1
  624. package/dist/tools/coding-tools/parsers/parser-factory.d.ts.map +0 -1
  625. package/dist/tools/coding-tools/parsers/parser-factory.js.map +0 -1
  626. package/dist/tools/coding-tools/parsers/parsing-context.d.ts.map +0 -1
  627. package/dist/tools/coding-tools/parsers/parsing-context.js.map +0 -1
  628. package/dist/tools/coding-tools/parsers/queries/cpp.d.ts.map +0 -1
  629. package/dist/tools/coding-tools/parsers/queries/cpp.js.map +0 -1
  630. package/dist/tools/coding-tools/parsers/queries/go.d.ts.map +0 -1
  631. package/dist/tools/coding-tools/parsers/queries/go.js.map +0 -1
  632. package/dist/tools/coding-tools/parsers/queries/index.d.ts.map +0 -1
  633. package/dist/tools/coding-tools/parsers/queries/index.js.map +0 -1
  634. package/dist/tools/coding-tools/parsers/queries/java.d.ts.map +0 -1
  635. package/dist/tools/coding-tools/parsers/queries/java.js.map +0 -1
  636. package/dist/tools/coding-tools/parsers/queries/python.d.ts.map +0 -1
  637. package/dist/tools/coding-tools/parsers/queries/python.js.map +0 -1
  638. package/dist/tools/coding-tools/parsers/queries/rust.d.ts.map +0 -1
  639. package/dist/tools/coding-tools/parsers/queries/rust.js.map +0 -1
  640. package/dist/tools/coding-tools/parsers/shared.d.ts.map +0 -1
  641. package/dist/tools/coding-tools/parsers/shared.js.map +0 -1
  642. package/dist/tools/coding-tools/parsers/tree-sitter-parser.d.ts.map +0 -1
  643. package/dist/tools/coding-tools/parsers/tree-sitter-parser.js.map +0 -1
  644. package/dist/tools/coding-tools/parsers/types.d.ts.map +0 -1
  645. package/dist/tools/coding-tools/parsers/types.js.map +0 -1
  646. package/dist/tools/coding-tools/tools/extract-function/index.d.ts.map +0 -1
  647. package/dist/tools/coding-tools/tools/extract-function/index.js.map +0 -1
  648. package/dist/tools/coding-tools/tools/extract-function/schema.d.ts.map +0 -1
  649. package/dist/tools/coding-tools/tools/extract-function/schema.js.map +0 -1
  650. package/dist/tools/coding-tools/tools/find-references/index.d.ts.map +0 -1
  651. package/dist/tools/coding-tools/tools/find-references/index.js.map +0 -1
  652. package/dist/tools/coding-tools/tools/find-references/schema.d.ts.map +0 -1
  653. package/dist/tools/coding-tools/tools/find-references/schema.js.map +0 -1
  654. package/dist/tools/coding-tools/tools/find-symbol/index.d.ts.map +0 -1
  655. package/dist/tools/coding-tools/tools/find-symbol/index.js.map +0 -1
  656. package/dist/tools/coding-tools/tools/find-symbol/schema.d.ts.map +0 -1
  657. package/dist/tools/coding-tools/tools/find-symbol/schema.js.map +0 -1
  658. package/dist/tools/coding-tools/tools/get-call-hierarchy/index.d.ts.map +0 -1
  659. package/dist/tools/coding-tools/tools/get-call-hierarchy/index.js.map +0 -1
  660. package/dist/tools/coding-tools/tools/get-call-hierarchy/schema.d.ts.map +0 -1
  661. package/dist/tools/coding-tools/tools/get-call-hierarchy/schema.js.map +0 -1
  662. package/dist/tools/coding-tools/tools/get-diagnostics/index.d.ts.map +0 -1
  663. package/dist/tools/coding-tools/tools/get-diagnostics/index.js.map +0 -1
  664. package/dist/tools/coding-tools/tools/get-diagnostics/schema.d.ts.map +0 -1
  665. package/dist/tools/coding-tools/tools/get-diagnostics/schema.js.map +0 -1
  666. package/dist/tools/coding-tools/tools/get-exports/index.d.ts.map +0 -1
  667. package/dist/tools/coding-tools/tools/get-exports/index.js.map +0 -1
  668. package/dist/tools/coding-tools/tools/get-exports/schema.d.ts.map +0 -1
  669. package/dist/tools/coding-tools/tools/get-exports/schema.js.map +0 -1
  670. package/dist/tools/coding-tools/tools/get-imports/index.d.ts.map +0 -1
  671. package/dist/tools/coding-tools/tools/get-imports/index.js.map +0 -1
  672. package/dist/tools/coding-tools/tools/get-imports/schema.d.ts.map +0 -1
  673. package/dist/tools/coding-tools/tools/get-imports/schema.js.map +0 -1
  674. package/dist/tools/coding-tools/tools/get-outline/index.d.ts.map +0 -1
  675. package/dist/tools/coding-tools/tools/get-outline/index.js.map +0 -1
  676. package/dist/tools/coding-tools/tools/get-outline/schema.d.ts.map +0 -1
  677. package/dist/tools/coding-tools/tools/get-outline/schema.js.map +0 -1
  678. package/dist/tools/coding-tools/tools/get-symbols/index.d.ts.map +0 -1
  679. package/dist/tools/coding-tools/tools/get-symbols/index.js.map +0 -1
  680. package/dist/tools/coding-tools/tools/get-symbols/schema.d.ts.map +0 -1
  681. package/dist/tools/coding-tools/tools/get-symbols/schema.js.map +0 -1
  682. package/dist/tools/coding-tools/tools/go-to-definition/index.d.ts.map +0 -1
  683. package/dist/tools/coding-tools/tools/go-to-definition/index.js.map +0 -1
  684. package/dist/tools/coding-tools/tools/go-to-definition/schema.d.ts.map +0 -1
  685. package/dist/tools/coding-tools/tools/go-to-definition/schema.js.map +0 -1
  686. package/dist/tools/coding-tools/tools/multi-file-edit/index.d.ts.map +0 -1
  687. package/dist/tools/coding-tools/tools/multi-file-edit/index.js.map +0 -1
  688. package/dist/tools/coding-tools/tools/multi-file-edit/schema.d.ts.map +0 -1
  689. package/dist/tools/coding-tools/tools/multi-file-edit/schema.js.map +0 -1
  690. package/dist/tools/coding-tools/tools/refactor-rename/index.d.ts.map +0 -1
  691. package/dist/tools/coding-tools/tools/refactor-rename/index.js.map +0 -1
  692. package/dist/tools/coding-tools/tools/refactor-rename/schema.d.ts.map +0 -1
  693. package/dist/tools/coding-tools/tools/refactor-rename/schema.js.map +0 -1
  694. package/dist/tools/config-loader.d.ts.map +0 -1
  695. package/dist/tools/config-loader.js.map +0 -1
  696. package/dist/tools/create-tool-project.d.ts.map +0 -1
  697. package/dist/tools/create-tool-project.js.map +0 -1
  698. package/dist/tools/db-tools/adapters/base.d.ts.map +0 -1
  699. package/dist/tools/db-tools/adapters/base.js.map +0 -1
  700. package/dist/tools/db-tools/adapters/factory.d.ts.map +0 -1
  701. package/dist/tools/db-tools/adapters/factory.js.map +0 -1
  702. package/dist/tools/db-tools/adapters/mysql.d.ts.map +0 -1
  703. package/dist/tools/db-tools/adapters/mysql.js.map +0 -1
  704. package/dist/tools/db-tools/adapters/postgres.d.ts.map +0 -1
  705. package/dist/tools/db-tools/adapters/postgres.js.map +0 -1
  706. package/dist/tools/db-tools/adapters/sqlite.d.ts.map +0 -1
  707. package/dist/tools/db-tools/adapters/sqlite.js.map +0 -1
  708. package/dist/tools/db-tools/index.d.ts.map +0 -1
  709. package/dist/tools/db-tools/index.js.map +0 -1
  710. package/dist/tools/db-tools/tools/count/index.d.ts.map +0 -1
  711. package/dist/tools/db-tools/tools/count/index.js.map +0 -1
  712. package/dist/tools/db-tools/tools/count/schema.d.ts.map +0 -1
  713. package/dist/tools/db-tools/tools/count/schema.js.map +0 -1
  714. package/dist/tools/db-tools/tools/delete/index.d.ts.map +0 -1
  715. package/dist/tools/db-tools/tools/delete/index.js.map +0 -1
  716. package/dist/tools/db-tools/tools/delete/schema.d.ts.map +0 -1
  717. package/dist/tools/db-tools/tools/delete/schema.js.map +0 -1
  718. package/dist/tools/db-tools/tools/insert/index.d.ts.map +0 -1
  719. package/dist/tools/db-tools/tools/insert/index.js.map +0 -1
  720. package/dist/tools/db-tools/tools/insert/schema.d.ts.map +0 -1
  721. package/dist/tools/db-tools/tools/insert/schema.js.map +0 -1
  722. package/dist/tools/db-tools/tools/query/index.d.ts.map +0 -1
  723. package/dist/tools/db-tools/tools/query/index.js.map +0 -1
  724. package/dist/tools/db-tools/tools/query/schema.d.ts.map +0 -1
  725. package/dist/tools/db-tools/tools/query/schema.js.map +0 -1
  726. package/dist/tools/db-tools/tools/schema/index.d.ts.map +0 -1
  727. package/dist/tools/db-tools/tools/schema/index.js.map +0 -1
  728. package/dist/tools/db-tools/tools/schema/schema.d.ts.map +0 -1
  729. package/dist/tools/db-tools/tools/schema/schema.js.map +0 -1
  730. package/dist/tools/db-tools/tools/tables/index.d.ts.map +0 -1
  731. package/dist/tools/db-tools/tools/tables/index.js.map +0 -1
  732. package/dist/tools/db-tools/tools/tables/schema.d.ts.map +0 -1
  733. package/dist/tools/db-tools/tools/tables/schema.js.map +0 -1
  734. package/dist/tools/db-tools/tools/update/index.d.ts.map +0 -1
  735. package/dist/tools/db-tools/tools/update/index.js.map +0 -1
  736. package/dist/tools/db-tools/tools/update/schema.d.ts.map +0 -1
  737. package/dist/tools/db-tools/tools/update/schema.js.map +0 -1
  738. package/dist/tools/diff-tools/index.d.ts.map +0 -1
  739. package/dist/tools/diff-tools/index.js.map +0 -1
  740. package/dist/tools/diff-tools/tools/apply/index.d.ts.map +0 -1
  741. package/dist/tools/diff-tools/tools/apply/index.js.map +0 -1
  742. package/dist/tools/diff-tools/tools/apply/schema.d.ts.map +0 -1
  743. package/dist/tools/diff-tools/tools/apply/schema.js.map +0 -1
  744. package/dist/tools/diff-tools/tools/create/index.d.ts.map +0 -1
  745. package/dist/tools/diff-tools/tools/create/index.js.map +0 -1
  746. package/dist/tools/diff-tools/tools/create/schema.d.ts.map +0 -1
  747. package/dist/tools/diff-tools/tools/create/schema.js.map +0 -1
  748. package/dist/tools/diff-tools/tools/preview/index.d.ts.map +0 -1
  749. package/dist/tools/diff-tools/tools/preview/index.js.map +0 -1
  750. package/dist/tools/diff-tools/tools/preview/schema.d.ts.map +0 -1
  751. package/dist/tools/diff-tools/tools/preview/schema.js.map +0 -1
  752. package/dist/tools/exec-tools/index.d.ts.map +0 -1
  753. package/dist/tools/exec-tools/index.js.map +0 -1
  754. package/dist/tools/exec-tools/process-registry.d.ts.map +0 -1
  755. package/dist/tools/exec-tools/process-registry.js.map +0 -1
  756. package/dist/tools/exec-tools/tools/kill/index.d.ts.map +0 -1
  757. package/dist/tools/exec-tools/tools/kill/index.js.map +0 -1
  758. package/dist/tools/exec-tools/tools/kill/schema.d.ts.map +0 -1
  759. package/dist/tools/exec-tools/tools/kill/schema.js.map +0 -1
  760. package/dist/tools/exec-tools/tools/list-processes/index.d.ts.map +0 -1
  761. package/dist/tools/exec-tools/tools/list-processes/index.js.map +0 -1
  762. package/dist/tools/exec-tools/tools/list-processes/schema.d.ts.map +0 -1
  763. package/dist/tools/exec-tools/tools/list-processes/schema.js.map +0 -1
  764. package/dist/tools/exec-tools/tools/read-output/index.d.ts.map +0 -1
  765. package/dist/tools/exec-tools/tools/read-output/index.js.map +0 -1
  766. package/dist/tools/exec-tools/tools/read-output/schema.d.ts.map +0 -1
  767. package/dist/tools/exec-tools/tools/read-output/schema.js.map +0 -1
  768. package/dist/tools/exec-tools/tools/run/index.d.ts.map +0 -1
  769. package/dist/tools/exec-tools/tools/run/index.js.map +0 -1
  770. package/dist/tools/exec-tools/tools/run/schema.d.ts.map +0 -1
  771. package/dist/tools/exec-tools/tools/run/schema.js.map +0 -1
  772. package/dist/tools/exec-tools/tools/run-background/index.d.ts.map +0 -1
  773. package/dist/tools/exec-tools/tools/run-background/index.js.map +0 -1
  774. package/dist/tools/exec-tools/tools/run-background/schema.d.ts.map +0 -1
  775. package/dist/tools/exec-tools/tools/run-background/schema.js.map +0 -1
  776. package/dist/tools/exec-tools/tools/run-shell/index.d.ts.map +0 -1
  777. package/dist/tools/exec-tools/tools/run-shell/index.js.map +0 -1
  778. package/dist/tools/exec-tools/tools/run-shell/schema.d.ts.map +0 -1
  779. package/dist/tools/exec-tools/tools/run-shell/schema.js.map +0 -1
  780. package/dist/tools/fs-tools/index.d.ts.map +0 -1
  781. package/dist/tools/fs-tools/index.js.map +0 -1
  782. package/dist/tools/fs-tools/tools/append-file/index.d.ts.map +0 -1
  783. package/dist/tools/fs-tools/tools/append-file/index.js.map +0 -1
  784. package/dist/tools/fs-tools/tools/append-file/schema.d.ts.map +0 -1
  785. package/dist/tools/fs-tools/tools/append-file/schema.js.map +0 -1
  786. package/dist/tools/fs-tools/tools/batch-read/index.d.ts.map +0 -1
  787. package/dist/tools/fs-tools/tools/batch-read/index.js.map +0 -1
  788. package/dist/tools/fs-tools/tools/batch-read/schema.d.ts.map +0 -1
  789. package/dist/tools/fs-tools/tools/batch-read/schema.js.map +0 -1
  790. package/dist/tools/fs-tools/tools/batch-write/index.d.ts.map +0 -1
  791. package/dist/tools/fs-tools/tools/batch-write/index.js.map +0 -1
  792. package/dist/tools/fs-tools/tools/batch-write/schema.d.ts.map +0 -1
  793. package/dist/tools/fs-tools/tools/batch-write/schema.js.map +0 -1
  794. package/dist/tools/fs-tools/tools/copy/index.d.ts.map +0 -1
  795. package/dist/tools/fs-tools/tools/copy/index.js.map +0 -1
  796. package/dist/tools/fs-tools/tools/copy/schema.d.ts.map +0 -1
  797. package/dist/tools/fs-tools/tools/copy/schema.js.map +0 -1
  798. package/dist/tools/fs-tools/tools/create-dir/index.d.ts.map +0 -1
  799. package/dist/tools/fs-tools/tools/create-dir/index.js.map +0 -1
  800. package/dist/tools/fs-tools/tools/create-dir/schema.d.ts.map +0 -1
  801. package/dist/tools/fs-tools/tools/create-dir/schema.js.map +0 -1
  802. package/dist/tools/fs-tools/tools/delete-dir/index.d.ts.map +0 -1
  803. package/dist/tools/fs-tools/tools/delete-dir/index.js.map +0 -1
  804. package/dist/tools/fs-tools/tools/delete-dir/schema.d.ts.map +0 -1
  805. package/dist/tools/fs-tools/tools/delete-dir/schema.js.map +0 -1
  806. package/dist/tools/fs-tools/tools/delete-file/index.d.ts.map +0 -1
  807. package/dist/tools/fs-tools/tools/delete-file/index.js.map +0 -1
  808. package/dist/tools/fs-tools/tools/delete-file/schema.d.ts.map +0 -1
  809. package/dist/tools/fs-tools/tools/delete-file/schema.js.map +0 -1
  810. package/dist/tools/fs-tools/tools/exists/index.d.ts.map +0 -1
  811. package/dist/tools/fs-tools/tools/exists/index.js.map +0 -1
  812. package/dist/tools/fs-tools/tools/exists/schema.d.ts.map +0 -1
  813. package/dist/tools/fs-tools/tools/exists/schema.js.map +0 -1
  814. package/dist/tools/fs-tools/tools/glob/index.d.ts.map +0 -1
  815. package/dist/tools/fs-tools/tools/glob/index.js.map +0 -1
  816. package/dist/tools/fs-tools/tools/glob/schema.d.ts.map +0 -1
  817. package/dist/tools/fs-tools/tools/glob/schema.js.map +0 -1
  818. package/dist/tools/fs-tools/tools/list-dir/index.d.ts.map +0 -1
  819. package/dist/tools/fs-tools/tools/list-dir/index.js.map +0 -1
  820. package/dist/tools/fs-tools/tools/list-dir/schema.d.ts.map +0 -1
  821. package/dist/tools/fs-tools/tools/list-dir/schema.js.map +0 -1
  822. package/dist/tools/fs-tools/tools/move/index.d.ts.map +0 -1
  823. package/dist/tools/fs-tools/tools/move/index.js.map +0 -1
  824. package/dist/tools/fs-tools/tools/move/schema.d.ts.map +0 -1
  825. package/dist/tools/fs-tools/tools/move/schema.js.map +0 -1
  826. package/dist/tools/fs-tools/tools/read-file/index.d.ts.map +0 -1
  827. package/dist/tools/fs-tools/tools/read-file/index.js.map +0 -1
  828. package/dist/tools/fs-tools/tools/read-file/schema.d.ts.map +0 -1
  829. package/dist/tools/fs-tools/tools/read-file/schema.js.map +0 -1
  830. package/dist/tools/fs-tools/tools/read-file-range/index.d.ts.map +0 -1
  831. package/dist/tools/fs-tools/tools/read-file-range/index.js.map +0 -1
  832. package/dist/tools/fs-tools/tools/read-file-range/schema.d.ts.map +0 -1
  833. package/dist/tools/fs-tools/tools/read-file-range/schema.js.map +0 -1
  834. package/dist/tools/fs-tools/tools/replace-in-file/index.d.ts.map +0 -1
  835. package/dist/tools/fs-tools/tools/replace-in-file/index.js.map +0 -1
  836. package/dist/tools/fs-tools/tools/replace-in-file/schema.d.ts.map +0 -1
  837. package/dist/tools/fs-tools/tools/replace-in-file/schema.js.map +0 -1
  838. package/dist/tools/fs-tools/tools/search/index.d.ts.map +0 -1
  839. package/dist/tools/fs-tools/tools/search/index.js.map +0 -1
  840. package/dist/tools/fs-tools/tools/search/schema.d.ts.map +0 -1
  841. package/dist/tools/fs-tools/tools/search/schema.js.map +0 -1
  842. package/dist/tools/fs-tools/tools/stat/index.d.ts.map +0 -1
  843. package/dist/tools/fs-tools/tools/stat/index.js.map +0 -1
  844. package/dist/tools/fs-tools/tools/stat/schema.d.ts.map +0 -1
  845. package/dist/tools/fs-tools/tools/stat/schema.js.map +0 -1
  846. package/dist/tools/fs-tools/tools/tree/index.d.ts.map +0 -1
  847. package/dist/tools/fs-tools/tools/tree/index.js.map +0 -1
  848. package/dist/tools/fs-tools/tools/tree/schema.d.ts.map +0 -1
  849. package/dist/tools/fs-tools/tools/tree/schema.js.map +0 -1
  850. package/dist/tools/fs-tools/tools/write-file/index.d.ts.map +0 -1
  851. package/dist/tools/fs-tools/tools/write-file/index.js.map +0 -1
  852. package/dist/tools/fs-tools/tools/write-file/schema.d.ts.map +0 -1
  853. package/dist/tools/fs-tools/tools/write-file/schema.js.map +0 -1
  854. package/dist/tools/git-tools/index.d.ts.map +0 -1
  855. package/dist/tools/git-tools/index.js.map +0 -1
  856. package/dist/tools/git-tools/tools/add/index.d.ts.map +0 -1
  857. package/dist/tools/git-tools/tools/add/index.js.map +0 -1
  858. package/dist/tools/git-tools/tools/add/schema.d.ts.map +0 -1
  859. package/dist/tools/git-tools/tools/add/schema.js.map +0 -1
  860. package/dist/tools/git-tools/tools/blame/index.d.ts.map +0 -1
  861. package/dist/tools/git-tools/tools/blame/index.js.map +0 -1
  862. package/dist/tools/git-tools/tools/blame/schema.d.ts.map +0 -1
  863. package/dist/tools/git-tools/tools/blame/schema.js.map +0 -1
  864. package/dist/tools/git-tools/tools/branch-create/index.d.ts.map +0 -1
  865. package/dist/tools/git-tools/tools/branch-create/index.js.map +0 -1
  866. package/dist/tools/git-tools/tools/branch-create/schema.d.ts.map +0 -1
  867. package/dist/tools/git-tools/tools/branch-create/schema.js.map +0 -1
  868. package/dist/tools/git-tools/tools/branch-list/index.d.ts.map +0 -1
  869. package/dist/tools/git-tools/tools/branch-list/index.js.map +0 -1
  870. package/dist/tools/git-tools/tools/branch-list/schema.d.ts.map +0 -1
  871. package/dist/tools/git-tools/tools/branch-list/schema.js.map +0 -1
  872. package/dist/tools/git-tools/tools/checkout/index.d.ts.map +0 -1
  873. package/dist/tools/git-tools/tools/checkout/index.js.map +0 -1
  874. package/dist/tools/git-tools/tools/checkout/schema.d.ts.map +0 -1
  875. package/dist/tools/git-tools/tools/checkout/schema.js.map +0 -1
  876. package/dist/tools/git-tools/tools/commit/index.d.ts.map +0 -1
  877. package/dist/tools/git-tools/tools/commit/index.js.map +0 -1
  878. package/dist/tools/git-tools/tools/commit/schema.d.ts.map +0 -1
  879. package/dist/tools/git-tools/tools/commit/schema.js.map +0 -1
  880. package/dist/tools/git-tools/tools/diff/index.d.ts.map +0 -1
  881. package/dist/tools/git-tools/tools/diff/index.js.map +0 -1
  882. package/dist/tools/git-tools/tools/diff/schema.d.ts.map +0 -1
  883. package/dist/tools/git-tools/tools/diff/schema.js.map +0 -1
  884. package/dist/tools/git-tools/tools/log/index.d.ts.map +0 -1
  885. package/dist/tools/git-tools/tools/log/index.js.map +0 -1
  886. package/dist/tools/git-tools/tools/log/schema.d.ts.map +0 -1
  887. package/dist/tools/git-tools/tools/log/schema.js.map +0 -1
  888. package/dist/tools/git-tools/tools/status/index.d.ts.map +0 -1
  889. package/dist/tools/git-tools/tools/status/index.js.map +0 -1
  890. package/dist/tools/git-tools/tools/status/schema.d.ts.map +0 -1
  891. package/dist/tools/git-tools/tools/status/schema.js.map +0 -1
  892. package/dist/tools/git-tools/utils.d.ts.map +0 -1
  893. package/dist/tools/git-tools/utils.js.map +0 -1
  894. package/dist/tools/http-tools/index.d.ts.map +0 -1
  895. package/dist/tools/http-tools/index.js.map +0 -1
  896. package/dist/tools/http-tools/tools/delete/index.d.ts.map +0 -1
  897. package/dist/tools/http-tools/tools/delete/index.js.map +0 -1
  898. package/dist/tools/http-tools/tools/delete/schema.d.ts.map +0 -1
  899. package/dist/tools/http-tools/tools/delete/schema.js.map +0 -1
  900. package/dist/tools/http-tools/tools/download/index.d.ts.map +0 -1
  901. package/dist/tools/http-tools/tools/download/index.js.map +0 -1
  902. package/dist/tools/http-tools/tools/download/schema.d.ts.map +0 -1
  903. package/dist/tools/http-tools/tools/download/schema.js.map +0 -1
  904. package/dist/tools/http-tools/tools/get/index.d.ts.map +0 -1
  905. package/dist/tools/http-tools/tools/get/index.js.map +0 -1
  906. package/dist/tools/http-tools/tools/get/schema.d.ts.map +0 -1
  907. package/dist/tools/http-tools/tools/get/schema.js.map +0 -1
  908. package/dist/tools/http-tools/tools/post/index.d.ts.map +0 -1
  909. package/dist/tools/http-tools/tools/post/index.js.map +0 -1
  910. package/dist/tools/http-tools/tools/post/schema.d.ts.map +0 -1
  911. package/dist/tools/http-tools/tools/post/schema.js.map +0 -1
  912. package/dist/tools/http-tools/tools/put/index.d.ts.map +0 -1
  913. package/dist/tools/http-tools/tools/put/index.js.map +0 -1
  914. package/dist/tools/http-tools/tools/put/schema.d.ts.map +0 -1
  915. package/dist/tools/http-tools/tools/put/schema.js.map +0 -1
  916. package/dist/tools/index.d.ts.map +0 -1
  917. package/dist/tools/index.js.map +0 -1
  918. package/dist/tools/registry.d.ts.map +0 -1
  919. package/dist/tools/registry.js.map +0 -1
  920. package/dist/tools/router.d.ts.map +0 -1
  921. package/dist/tools/router.js.map +0 -1
  922. package/dist/tools/search/bm25-engine.d.ts.map +0 -1
  923. package/dist/tools/search/bm25-engine.js.map +0 -1
  924. package/dist/tools/search/index.d.ts.map +0 -1
  925. package/dist/tools/search/index.js.map +0 -1
  926. package/dist/tools/search/system-prompt.d.ts.map +0 -1
  927. package/dist/tools/search/system-prompt.js.map +0 -1
  928. package/dist/tools/search/tool-cache.d.ts.map +0 -1
  929. package/dist/tools/search/tool-cache.js.map +0 -1
  930. package/dist/tools/search/tool-search.d.ts.map +0 -1
  931. package/dist/tools/search/tool-search.js.map +0 -1
  932. package/dist/tools/system-tools/index.d.ts.map +0 -1
  933. package/dist/tools/system-tools/index.js.map +0 -1
  934. package/dist/tools/system-tools/tools/cwd/index.d.ts.map +0 -1
  935. package/dist/tools/system-tools/tools/cwd/index.js.map +0 -1
  936. package/dist/tools/system-tools/tools/cwd/schema.d.ts.map +0 -1
  937. package/dist/tools/system-tools/tools/cwd/schema.js.map +0 -1
  938. package/dist/tools/system-tools/tools/disk-usage/index.d.ts.map +0 -1
  939. package/dist/tools/system-tools/tools/disk-usage/index.js.map +0 -1
  940. package/dist/tools/system-tools/tools/disk-usage/schema.d.ts.map +0 -1
  941. package/dist/tools/system-tools/tools/disk-usage/schema.js.map +0 -1
  942. package/dist/tools/system-tools/tools/env/index.d.ts.map +0 -1
  943. package/dist/tools/system-tools/tools/env/index.js.map +0 -1
  944. package/dist/tools/system-tools/tools/env/schema.d.ts.map +0 -1
  945. package/dist/tools/system-tools/tools/env/schema.js.map +0 -1
  946. package/dist/tools/system-tools/tools/info/index.d.ts.map +0 -1
  947. package/dist/tools/system-tools/tools/info/index.js.map +0 -1
  948. package/dist/tools/system-tools/tools/info/schema.d.ts.map +0 -1
  949. package/dist/tools/system-tools/tools/info/schema.js.map +0 -1
  950. package/dist/tools/system-tools/tools/set-env/index.d.ts.map +0 -1
  951. package/dist/tools/system-tools/tools/set-env/index.js.map +0 -1
  952. package/dist/tools/system-tools/tools/set-env/schema.d.ts.map +0 -1
  953. package/dist/tools/system-tools/tools/set-env/schema.js.map +0 -1
  954. package/dist/tools/types.d.ts.map +0 -1
  955. package/dist/tools/types.js.map +0 -1
  956. package/dist/tools/web-tools/index.d.ts.map +0 -1
  957. package/dist/tools/web-tools/index.js.map +0 -1
  958. package/dist/tools/web-tools/tools/extract-links/index.d.ts.map +0 -1
  959. package/dist/tools/web-tools/tools/extract-links/index.js.map +0 -1
  960. package/dist/tools/web-tools/tools/extract-links/schema.d.ts.map +0 -1
  961. package/dist/tools/web-tools/tools/extract-links/schema.js.map +0 -1
  962. package/dist/tools/web-tools/tools/feed/index.d.ts.map +0 -1
  963. package/dist/tools/web-tools/tools/feed/index.js.map +0 -1
  964. package/dist/tools/web-tools/tools/feed/schema.d.ts.map +0 -1
  965. package/dist/tools/web-tools/tools/feed/schema.js.map +0 -1
  966. package/dist/tools/web-tools/tools/fetch/extractor.d.ts.map +0 -1
  967. package/dist/tools/web-tools/tools/fetch/extractor.js.map +0 -1
  968. package/dist/tools/web-tools/tools/fetch/index.d.ts.map +0 -1
  969. package/dist/tools/web-tools/tools/fetch/index.js.map +0 -1
  970. package/dist/tools/web-tools/tools/fetch/schema.d.ts.map +0 -1
  971. package/dist/tools/web-tools/tools/fetch/schema.js.map +0 -1
  972. package/dist/tools/web-tools/tools/map/index.d.ts.map +0 -1
  973. package/dist/tools/web-tools/tools/map/index.js.map +0 -1
  974. package/dist/tools/web-tools/tools/map/schema.d.ts.map +0 -1
  975. package/dist/tools/web-tools/tools/map/schema.js.map +0 -1
  976. package/dist/tools/web-tools/tools/metadata/index.d.ts.map +0 -1
  977. package/dist/tools/web-tools/tools/metadata/index.js.map +0 -1
  978. package/dist/tools/web-tools/tools/metadata/schema.d.ts.map +0 -1
  979. package/dist/tools/web-tools/tools/metadata/schema.js.map +0 -1
  980. package/dist/tools/web-tools/tools/scrape/index.d.ts.map +0 -1
  981. package/dist/tools/web-tools/tools/scrape/index.js.map +0 -1
  982. package/dist/tools/web-tools/tools/scrape/schema.d.ts.map +0 -1
  983. package/dist/tools/web-tools/tools/scrape/schema.js.map +0 -1
  984. package/dist/tools/web-tools/tools/screenshot/index.d.ts.map +0 -1
  985. package/dist/tools/web-tools/tools/screenshot/index.js.map +0 -1
  986. package/dist/tools/web-tools/tools/screenshot/schema.d.ts.map +0 -1
  987. package/dist/tools/web-tools/tools/screenshot/schema.js.map +0 -1
  988. package/dist/tools/web-tools/tools/search/index.d.ts.map +0 -1
  989. package/dist/tools/web-tools/tools/search/index.js.map +0 -1
  990. package/dist/tools/web-tools/tools/search/schema.d.ts.map +0 -1
  991. package/dist/tools/web-tools/tools/search/schema.js.map +0 -1
  992. package/dist/tools/web-tools/tools/sitemap/index.d.ts.map +0 -1
  993. package/dist/tools/web-tools/tools/sitemap/index.js.map +0 -1
  994. package/dist/tools/web-tools/tools/sitemap/schema.d.ts.map +0 -1
  995. package/dist/tools/web-tools/tools/sitemap/schema.js.map +0 -1
  996. package/dist/tools/web-tools/utils/puppeteer-loader.d.ts.map +0 -1
  997. package/dist/tools/web-tools/utils/puppeteer-loader.js.map +0 -1
  998. package/dist/tools/web-tools/utils/rss-loader.d.ts.map +0 -1
  999. package/dist/tools/web-tools/utils/rss-loader.js.map +0 -1
  1000. package/dist/types/index.d.ts.map +0 -1
  1001. package/dist/types/index.js.map +0 -1
  1002. package/dist/utils/global-config-loader.d.ts.map +0 -1
  1003. package/dist/utils/global-config-loader.js.map +0 -1
  1004. package/dist/utils/home-config.d.ts.map +0 -1
  1005. package/dist/utils/home-config.js.map +0 -1
  1006. package/dist/utils/runtime-config-loader.d.ts.map +0 -1
  1007. package/dist/utils/runtime-config-loader.js.map +0 -1
  1008. package/dist/workflows/index.d.ts.map +0 -1
  1009. package/dist/workflows/index.js.map +0 -1
  1010. package/dist/workflows/planning/plan-types.d.ts.map +0 -1
  1011. package/dist/workflows/planning/plan-types.js.map +0 -1
  1012. package/dist/workflows/planning/planner.d.ts.map +0 -1
  1013. package/dist/workflows/planning/planner.js.map +0 -1
  1014. package/dist/workflows/steps/step-executor.d.ts.map +0 -1
  1015. package/dist/workflows/steps/step-executor.js.map +0 -1
  1016. package/dist/workflows/steps/step-tracker.d.ts.map +0 -1
  1017. package/dist/workflows/steps/step-tracker.js.map +0 -1
  1018. package/dist/workflows/workflow-executor.d.ts.map +0 -1
  1019. package/dist/workflows/workflow-executor.js.map +0 -1
  1020. package/dist/workflows/workflow-types.d.ts.map +0 -1
  1021. package/dist/workflows/workflow-types.js.map +0 -1
@@ -1,139 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AIClient = void 0;
4
- const events_1 = require("events");
5
- const errors_1 = require("../errors");
6
- const router_js_1 = require("../tools/router.js");
7
- const types_js_1 = require("../tools/types.js");
8
- const index_js_1 = require("../tools/search/index.js");
9
- const base_agent_context_js_1 = require("./base-agent-context.js");
10
- const query_classifier_js_1 = require("./query-classifier.js");
11
- const tool_orchestrator_js_1 = require("./tool-orchestrator.js");
12
- const provider_logger_1 = require("../providers/provider-logger");
13
- let REQUEST_SEQ = 0;
14
- function newRequestId() {
15
- REQUEST_SEQ += 1;
16
- return `${Date.now()}-${REQUEST_SEQ}`;
17
- }
18
- function logRequestMessages(requestId, messages) {
19
- if (!(0, provider_logger_1.shouldLog)('debug'))
20
- return;
21
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] Messages (${messages.length}):`);
22
- messages.forEach((m, i) => {
23
- const preview = (0, provider_logger_1.safePreview)(m.content, 300);
24
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] #${i} role=${m.role} content=${preview}`);
25
- });
26
- }
27
- function extractLastUserText(messages) {
28
- for (let i = messages.length - 1; i >= 0; i--) {
29
- const m = messages[i];
30
- if (m?.role !== 'user')
31
- continue;
32
- const c = m?.content;
33
- if (typeof c === 'string')
34
- return c;
35
- if (Array.isArray(c)) {
36
- return c
37
- .map((p) => (p?.type === 'text' ? p.text : ''))
38
- .filter(Boolean)
39
- .join('\n');
40
- }
41
- return '';
42
- }
43
- return '';
44
- }
45
- function inferNeedsTools(messages) {
46
- const text = extractLastUserText(messages).toLowerCase();
47
- if (!text)
48
- return false;
49
- const patterns = [
50
- /\b(list|show|print|display)\b.*\b(files|folders|directory|dir)\b/,
51
- /\b(current|this)\b.*\b(directory|folder|repo|repository)\b/,
52
- /\b(read|open|view)\b.*\b(file|log|config|json|yaml|env)\b/,
53
- /\b(write|create|update|modify|edit|patch|delete|remove|rename|move|copy)\b.*\b(file|folder|directory)\b/,
54
- /\b(run|execute)\b.*\b(command|shell|script|tests?)\b/,
55
- /\b(http|get|post|put|delete|download|fetch|curl)\b/,
56
- /\b(web|search|scrape|crawl|map)\b/,
57
- /https?:\/\//, // Contains a URL
58
- ];
59
- return patterns.some(r => r.test(text));
60
- }
61
- function isAfterToolCall(messages, maxDistance) {
62
- // Find the last tool call in the conversation
63
- let lastToolCallIndex = -1;
64
- for (let i = messages.length - 1; i >= 0; i--) {
65
- const msg = messages[i];
66
- if (msg.role === 'tool' || (msg.role === 'assistant' && msg.tool_calls && msg.tool_calls.length > 0)) {
67
- lastToolCallIndex = i;
68
- break;
69
- }
70
- }
71
- if (lastToolCallIndex === -1)
72
- return false;
73
- // Check if current message is within maxDistance messages after the tool call
74
- const distance = messages.length - 1 - lastToolCallIndex;
75
- return distance > 0 && distance <= maxDistance;
76
- }
77
- function getFastModelForProvider(providerName) {
78
- const defaultFastModels = {
79
- openai: 'gpt-4.1-mini',
80
- anthropic: 'claude-3-haiku-20240307',
81
- gemini: 'gemini-2.0-flash-exp',
82
- ollama: 'llama3.2',
83
- };
84
- return defaultFastModels[providerName] || 'default';
85
- }
86
- function extractToolContext(messages) {
87
- // Extract context from recent tool calls (last 2 tool rounds)
88
- const toolInfo = [];
89
- let toolRoundsFound = 0;
90
- for (let i = messages.length - 1; i >= 0 && toolRoundsFound < 2; i--) {
91
- const msg = messages[i];
92
- // Extract from assistant's tool calls
93
- if (msg.role === 'assistant' && msg.tool_calls && msg.tool_calls.length > 0) {
94
- toolRoundsFound++;
95
- for (const toolCall of msg.tool_calls) {
96
- const toolName = toolCall.function?.name || 'unknown';
97
- const args = toolCall.function?.arguments;
98
- // Extract relevant context from arguments
99
- let context = `Tool: ${toolName}`;
100
- if (args) {
101
- try {
102
- const parsedArgs = typeof args === 'string' ? JSON.parse(args) : args;
103
- // Extract URLs, file paths, sections, queries
104
- if (parsedArgs.url)
105
- context += ` (URL: ${parsedArgs.url})`;
106
- if (parsedArgs.file_path)
107
- context += ` (File: ${parsedArgs.file_path})`;
108
- if (parsedArgs.section)
109
- context += ` (Section: ${parsedArgs.section})`;
110
- if (parsedArgs.query)
111
- context += ` (Query: ${parsedArgs.query})`;
112
- if (parsedArgs.command)
113
- context += ` (Command: ${parsedArgs.command.substring(0, 50)})`;
114
- }
115
- catch (e) {
116
- // Ignore parse errors
117
- }
118
- }
119
- toolInfo.push(context);
120
- }
121
- }
122
- }
123
- return toolInfo.length > 0 ? toolInfo.join(', ') : 'None';
124
- }
125
- async function inferNeedsToolsWithAI(provider, providerName, messages, fastModel) {
126
- const requestId = newRequestId();
127
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] inferNeedsToolsWithAI() provider=${providerName} model=${fastModel}`);
128
- // Extract tool context from recent tool calls
129
- const toolContext = extractToolContext(messages);
130
- // Get the last user message
131
- const lastUserMessage = messages.filter((m) => m.role === 'user').slice(-1)[0];
132
- const userMessage = lastUserMessage?.content || '';
133
- // Build context-aware prompt
134
- const prompt = `Recent tool usage: ${toolContext}
1
+ "use strict";var re=Object.defineProperty;var C=(h,e)=>re(h,"name",{value:e,configurable:!0});Object.defineProperty(exports,"__esModule",{value:!0}),exports.AIClient=void 0;const ae=require("events"),U=require("../errors"),ce=require("../tools/router.js"),z=require("../tools/types.js"),Y=require("../tools/search/index.js"),de=require("./base-agent-context.js"),ue=require("./query-classifier.js"),ge=require("./tool-orchestrator.js"),i=require("../providers/provider-logger");let V=0;function Q(){return V+=1,`${Date.now()}-${V}`}C(Q,"newRequestId");function q(h,e){(0,i.shouldLog)("debug")&&((0,i.logDebug)(`[AIClient][${h}] Messages (${e.length}):`),e.forEach((o,l)=>{const t=(0,i.safePreview)(o.content,300);(0,i.logDebug)(`[AIClient][${h}] #${l} role=${o.role} content=${t}`)}))}C(q,"logRequestMessages");function B(h){for(let e=h.length-1;e>=0;e--){const o=h[e];if(o?.role!=="user")continue;const l=o?.content;return typeof l=="string"?l:Array.isArray(l)?l.map(t=>t?.type==="text"?t.text:"").filter(Boolean).join(`
2
+ `):""}return""}C(B,"extractLastUserText");function H(h){const e=B(h).toLowerCase();return e?[/\b(list|show|print|display)\b.*\b(files|folders|directory|dir)\b/,/\b(current|this)\b.*\b(directory|folder|repo|repository)\b/,/\b(read|open|view)\b.*\b(file|log|config|json|yaml|env)\b/,/\b(write|create|update|modify|edit|patch|delete|remove|rename|move|copy)\b.*\b(file|folder|directory)\b/,/\b(run|execute)\b.*\b(command|shell|script|tests?)\b/,/\b(http|get|post|put|delete|download|fetch|curl)\b/,/\b(web|search|scrape|crawl|map)\b/,/https?:\/\//].some(l=>l.test(e)):!1}C(H,"inferNeedsTools");function X(h,e){let o=-1;for(let t=h.length-1;t>=0;t--){const n=h[t];if(n.role==="tool"||n.role==="assistant"&&n.tool_calls&&n.tool_calls.length>0){o=t;break}}if(o===-1)return!1;const l=h.length-1-o;return l>0&&l<=e}C(X,"isAfterToolCall");function G(h){return{openai:"gpt-4.1-mini",anthropic:"claude-3-haiku-20240307",gemini:"gemini-2.0-flash-exp",ollama:"llama3.2"}[h]||"default"}C(G,"getFastModelForProvider");function he(h){const e=[];let o=0;for(let l=h.length-1;l>=0&&o<2;l--){const t=h[l];if(t.role==="assistant"&&t.tool_calls&&t.tool_calls.length>0){o++;for(const n of t.tool_calls){const r=n.function?.name||"unknown",s=n.function?.arguments;let c=`Tool: ${r}`;if(s)try{const d=typeof s=="string"?JSON.parse(s):s;d.url&&(c+=` (URL: ${d.url})`),d.file_path&&(c+=` (File: ${d.file_path})`),d.section&&(c+=` (Section: ${d.section})`),d.query&&(c+=` (Query: ${d.query})`),d.command&&(c+=` (Command: ${d.command.substring(0,50)})`)}catch{}e.push(c)}}}return e.length>0?e.join(", "):"None"}C(he,"extractToolContext");async function Z(h,e,o,l){const t=Q();(0,i.logDebug)(`[AIClient][${t}] inferNeedsToolsWithAI() provider=${e} model=${l}`);const n=he(o),s=o.filter(d=>d.role==="user").slice(-1)[0]?.content||"",c=`Recent tool usage: ${n}
135
3
 
136
- User's new message: "${userMessage}"
4
+ User's new message: "${s}"
137
5
 
138
6
  Does this message:
139
7
  1. Ask about the same topic/context as recent tools? OR
@@ -142,872 +10,27 @@ Does this message:
142
10
  If the message is general knowledge (math, definitions, explanations) or completely unrelated to recent tool context, answer NO.
143
11
  If it asks about the same context OR needs new external information, answer YES.
144
12
 
145
- Answer only: YES or NO`;
146
- try {
147
- const response = await provider.generate({
148
- model: fastModel,
149
- messages: [{ role: 'user', content: prompt }],
150
- max_tokens: 10,
151
- temperature: 0,
152
- });
153
- const answer = (response.content || '').trim().toUpperCase();
154
- const needsTools = answer.startsWith('YES');
155
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] inferNeedsToolsWithAI() context="${toolContext}" message="${userMessage.substring(0, 50)}" result=${needsTools} (raw: ${answer})`);
156
- return needsTools;
157
- }
158
- catch (error) {
159
- (0, provider_logger_1.logWarn)(`[AIClient][${requestId}] inferNeedsToolsWithAI() error=${error} - falling back to false`);
160
- return false;
161
- }
162
- }
163
- function inferLookupOnly(messages) {
164
- const text = extractLastUserText(messages).toLowerCase();
165
- if (!text)
166
- return false;
167
- const lookupPatterns = [
168
- /\b(list|show|print|display)\b.*\b(files|folders|directory|dir)\b/,
169
- /\b(current|this)\b.*\b(directory|folder|repo|repository)\b/,
170
- /\b(read|open|view)\b.*\b(file|log|config|json|yaml|env)\b/,
171
- ];
172
- const mutatingPatterns = [
173
- /\b(write|create|update|modify|edit|patch|delete|remove|rename|move|copy)\b/,
174
- /\b(run|execute)\b.*\b(command|shell|script|tests?)\b/,
175
- /\b(http|get|post|put|delete|download|fetch|curl)\b/,
176
- /\b(web|search|scrape|crawl)\b/,
177
- ];
178
- return lookupPatterns.some(r => r.test(text)) && !mutatingPatterns.some(r => r.test(text));
179
- }
180
- class AIClient extends events_1.EventEmitter {
181
- providers;
182
- defaultProvider;
183
- toolRegistry;
184
- toolsConfig;
185
- toolRouter;
186
- bm25Engine;
187
- queryClassifier;
188
- toolOrchestrator;
189
- activeMode = null;
190
- overrideSystemPrompt;
191
- disableBaseContext;
192
- toolResultMaxChars;
193
- constructor(config) {
194
- super();
195
- this.providers = new Map(Object.entries(config.providers));
196
- this.defaultProvider = config.defaultProvider;
197
- this.toolRegistry = config.toolRegistry;
198
- this.toolsConfig = config.toolsConfig || types_js_1.DEFAULT_TOOLS_CONFIG;
199
- this.toolRouter = new router_js_1.ToolRouter();
200
- this.bm25Engine = new index_js_1.BM25SearchEngine();
201
- this.queryClassifier = new query_classifier_js_1.QueryClassifier();
202
- this.toolOrchestrator = new tool_orchestrator_js_1.ToolOrchestrator();
203
- this.overrideSystemPrompt = config.systemPrompt;
204
- this.disableBaseContext = config.disableBaseContext || false;
205
- const configuredMax = this.toolsConfig.resultMaxChars ?? types_js_1.DEFAULT_TOOLS_CONFIG.resultMaxChars ?? 20_000;
206
- this.toolResultMaxChars = Number.isFinite(configuredMax) && configuredMax > 0 ? configuredMax : 20_000;
207
- // Index tools for BM25 search if registry is provided
208
- if (this.toolRegistry) {
209
- this.bm25Engine.index(this.toolRegistry.getAll());
210
- }
211
- }
212
- /**
213
- * Register a new provider instance.
214
- */
215
- registerProvider(name, provider) {
216
- this.providers.set(name, provider);
217
- }
218
- /**
219
- * Get a provider by name, or the default if none specified.
220
- */
221
- getProvider(name) {
222
- const providerName = name || this.defaultProvider;
223
- if (!providerName) {
224
- throw new errors_1.SDKError('No provider specified and no default provider configured', 'NO_PROVIDER_CONFIGURED', 400);
225
- }
226
- const provider = this.providers.get(providerName);
227
- if (!provider) {
228
- throw new errors_1.SDKError(`Provider '${providerName}' not found`, 'PROVIDER_NOT_FOUND', 404);
229
- }
230
- return provider;
231
- }
232
- /**
233
- * Set the default provider for this client.
234
- */
235
- setDefaultProvider(name) {
236
- if (!this.providers.has(name)) {
237
- throw new errors_1.SDKError(`Provider '${name}' not found`, 'PROVIDER_NOT_FOUND', 404);
238
- }
239
- this.defaultProvider = name;
240
- }
241
- /**
242
- * Get the tool registry.
243
- */
244
- getToolRegistry() {
245
- return this.toolRegistry;
246
- }
247
- /**
248
- * Get all registered providers.
249
- * Returns a copy of the internal map to prevent direct mutation.
250
- */
251
- getProviders() {
252
- return new Map(this.providers);
253
- }
254
- /**
255
- * Set or replace the tool registry.
256
- */
257
- setToolRegistry(registry) {
258
- this.toolRegistry = registry;
259
- }
260
- /**
261
- * Update tools config.
262
- */
263
- setToolsConfig(config) {
264
- this.toolsConfig = config;
265
- }
266
- /**
267
- * Set the override system prompt directly via code.
268
- */
269
- setSystemPrompt(prompt) {
270
- this.overrideSystemPrompt = prompt;
271
- }
272
- /**
273
- * Set the active mode. Pass null to clear.
274
- */
275
- setMode(mode) {
276
- this.activeMode = mode;
277
- (0, provider_logger_1.logInfo)(`[AIClient] Mode set to: ${mode ? mode.displayName : 'none (cleared)'}`);
278
- }
279
- /**
280
- * Get the currently active mode.
281
- */
282
- getMode() {
283
- return this.activeMode;
284
- }
285
- /**
286
- * Re-index tools for BM25 search.
287
- * Call this after adding/removing tools from the registry.
288
- */
289
- reindexTools() {
290
- if (this.toolRegistry) {
291
- this.bm25Engine.index(this.toolRegistry.getAll());
292
- (0, provider_logger_1.logInfo)(`[AIClient] Re-indexed ${this.bm25Engine.getIndexedCount()} tools for BM25 search`);
293
- }
294
- }
295
- /**
296
- * Clear the tool discovery cache (call when starting a new conversation).
297
- */
298
- clearToolDiscoveryCache() {
299
- this.toolRouter.clearDiscoveryCache();
300
- }
301
- /**
302
- * unified generate completion
303
- * When tools are enabled and autoExecute is true, handles the full
304
- * tool call → execute → send result → get final answer loop.
305
- */
306
- async generate(request, providerName) {
307
- const provider = this.getProvider(providerName);
308
- try {
309
- const requestId = newRequestId();
310
- // System prompt injection chain (base → override → mode)
311
- let modeAwareRequest = this.injectBaseAgentContext(request);
312
- modeAwareRequest = this.injectOverrideSystemPrompt(modeAwareRequest);
313
- modeAwareRequest = this.injectModeSystemPrompt(modeAwareRequest);
314
- // Resolve tools to send with the request
315
- const resolvedProviderName = providerName || this.defaultProvider;
316
- const enrichedRequest = await this.enrichRequestWithTools(modeAwareRequest);
317
- const policy = (process.env.TOOLPACK_SDK_TOOL_CHOICE_POLICY || this.toolsConfig.toolChoicePolicy || 'auto');
318
- const hasTools = (enrichedRequest.tools?.length || 0) > 0;
319
- const toolChoiceWasSet = enrichedRequest.tool_choice != null;
320
- // Hybrid tool detection: regex first, then AI for follow-ups
321
- let needsTools = inferNeedsTools(enrichedRequest.messages);
322
- const intelligentDetection = this.toolsConfig.intelligentToolDetection;
323
- let aiInferenceUsed = false;
324
- if (!needsTools && intelligentDetection?.enabled && hasTools) {
325
- const afterToolCall = isAfterToolCall(enrichedRequest.messages, intelligentDetection.maxFollowUpMessages);
326
- if (afterToolCall) {
327
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] Message is after tool call, using AI to infer tool needs`);
328
- const fastModel = getFastModelForProvider(resolvedProviderName || 'openai');
329
- needsTools = await inferNeedsToolsWithAI(provider, resolvedProviderName || 'openai', enrichedRequest.messages, fastModel);
330
- aiInferenceUsed = true;
331
- }
332
- }
333
- const lookupOnly = inferLookupOnly(enrichedRequest.messages);
334
- const shouldForceRequired = !toolChoiceWasSet && hasTools && (policy === 'required' || (policy === 'required_for_actions' && needsTools));
335
- const shouldForceNone = !toolChoiceWasSet && hasTools && aiInferenceUsed && !needsTools;
336
- if (shouldForceRequired) {
337
- enrichedRequest.tool_choice = 'required';
338
- }
339
- else if (shouldForceNone) {
340
- enrichedRequest.tool_choice = 'none';
341
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] AI inference determined no tools needed, setting tool_choice=none`);
342
- }
343
- const providerClass = provider?.constructor?.name || 'UnknownProvider';
344
- const outboundReq = { ...enrichedRequest, __toolpack_request_id: requestId };
345
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] generate() start provider=${resolvedProviderName} class=${providerClass} model=${enrichedRequest.model} messages=${enrichedRequest.messages.length} tools=${enrichedRequest.tools?.length || 0} tool_choice=${enrichedRequest.tool_choice ?? 'unset'} policy=${policy} needsTools=${needsTools} autoExecute=${this.toolsConfig.enabled && this.toolsConfig.autoExecute}`);
346
- logRequestMessages(requestId, enrichedRequest.messages);
347
- let response = await provider.generate(outboundReq);
348
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] generate() initial response finish_reason=${response.finish_reason ?? 'unknown'} tool_calls=${response.tool_calls?.length || 0} content_preview=${(0, provider_logger_1.safePreview)(response.content || '', 200)}`);
349
- // Auto-execute tool call loop
350
- if (this.toolsConfig.enabled && this.toolsConfig.autoExecute && this.toolRegistry) {
351
- // Classify query to adjust maxToolRounds
352
- const userMessage = extractLastUserText(enrichedRequest.messages);
353
- const classification = this.queryClassifier.classify(userMessage);
354
- const baseMaxRounds = this.toolsConfig.maxToolRounds;
355
- const maxRounds = this.queryClassifier.getToolRoundsAdjustment(classification, baseMaxRounds);
356
- if (maxRounds !== baseMaxRounds) {
357
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] Query classified as ${classification.type} (confidence: ${classification.confidence.toFixed(2)}), adjusted maxToolRounds: ${baseMaxRounds} → ${maxRounds}`);
358
- }
359
- else {
360
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] Query classified as ${classification.type} (confidence: ${classification.confidence.toFixed(2)}), keeping maxToolRounds: ${maxRounds}`);
361
- }
362
- let rounds = 0;
363
- const messages = [...enrichedRequest.messages];
364
- if (response.tool_calls && response.tool_calls.length > 0) {
365
- (0, provider_logger_1.logInfo)(`[AIClient] Received ${response.tool_calls.length} tool call(s): ${response.tool_calls.map(tc => tc.name).join(', ')}`);
366
- }
367
- while (response.tool_calls && response.tool_calls.length > 0 && rounds < maxRounds) {
368
- rounds++;
369
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] generate() tool round ${rounds}/${maxRounds} tool_calls=${response.tool_calls.length}`);
370
- // Add assistant message with tool calls to conversation
371
- messages.push({
372
- role: 'assistant',
373
- content: response.content || '',
374
- tool_calls: response.tool_calls.map(tc => ({
375
- id: tc.id,
376
- type: 'function',
377
- function: {
378
- name: tc.name,
379
- arguments: JSON.stringify(tc.arguments),
380
- },
381
- })),
382
- });
383
- // Execute tools with smart parallel/sequential orchestration
384
- const useParallel = this.toolOrchestrator.shouldUseParallelExecution(response.tool_calls);
385
- // Apply fan-out limits for web.fetch to prevent context overflow
386
- const MAX_WEB_FETCH_CALLS = 3;
387
- let toolCallsToExecute = response.tool_calls;
388
- const webFetchCalls = response.tool_calls.filter(tc => tc.name === 'web.fetch');
389
- if (webFetchCalls.length > MAX_WEB_FETCH_CALLS) {
390
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] Limiting web.fetch calls from ${webFetchCalls.length} → ${MAX_WEB_FETCH_CALLS} to prevent context overflow`);
391
- const limitedWebFetch = webFetchCalls.slice(0, MAX_WEB_FETCH_CALLS);
392
- const otherCalls = response.tool_calls.filter(tc => tc.name !== 'web.fetch');
393
- toolCallsToExecute = [...otherCalls, ...limitedWebFetch];
394
- // Add placeholder responses for excluded web.fetch calls to avoid orphaned tool_call_ids
395
- const excludedWebFetch = webFetchCalls.slice(MAX_WEB_FETCH_CALLS);
396
- for (const tc of excludedWebFetch) {
397
- messages.push({
398
- role: 'tool',
399
- tool_call_id: tc.id,
400
- content: '[Skipped: web.fetch fan-out limit exceeded]',
401
- });
402
- }
403
- }
404
- // Track tool output budget for this round
405
- const MAX_TOOL_OUTPUT_PER_ROUND = 50_000;
406
- let roundOutputSize = 0;
407
- if (useParallel) {
408
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] Using parallel execution for ${toolCallsToExecute.length} tools`);
409
- const toolResults = await this.toolOrchestrator.executeWithDependencies(toolCallsToExecute, (toolCall) => this.executeTool(toolCall), 5 // maxConcurrent
410
- );
411
- // Add results in original order with budget tracking
412
- let parallelBudgetExceeded = false;
413
- for (const toolCall of toolCallsToExecute) {
414
- if (parallelBudgetExceeded) {
415
- messages.push({
416
- role: 'tool',
417
- tool_call_id: toolCall.id,
418
- content: '[Skipped: tool output budget exceeded for this round]',
419
- });
420
- continue;
421
- }
422
- const result = toolResults.get(toolCall.id);
423
- const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
424
- // Check budget before adding
425
- if (roundOutputSize + resultStr.length > MAX_TOOL_OUTPUT_PER_ROUND) {
426
- (0, provider_logger_1.logWarn)(`[AIClient][${requestId}] Tool output budget exceeded (${MAX_TOOL_OUTPUT_PER_ROUND} chars), adding placeholder for remaining tools`);
427
- messages.push({
428
- role: 'tool',
429
- tool_call_id: toolCall.id,
430
- content: '[Skipped: tool output budget exceeded for this round]',
431
- });
432
- parallelBudgetExceeded = true;
433
- continue;
434
- }
435
- const content = typeof result === 'string' && result.length > this.toolResultMaxChars
436
- ? `${result.slice(0, this.toolResultMaxChars)}\n[TRUNCATED tool result: ${result.length} chars]`
437
- : result;
438
- const contentStr = typeof content === 'string' ? content : JSON.stringify(content);
439
- roundOutputSize += contentStr.length;
440
- messages.push({
441
- role: 'tool',
442
- tool_call_id: toolCall.id,
443
- content,
444
- });
445
- }
446
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] Round tool output size: ${roundOutputSize} chars (budget: ${MAX_TOOL_OUTPUT_PER_ROUND})`);
447
- }
448
- else {
449
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] Using sequential execution for ${toolCallsToExecute.length} tools`);
450
- // Sequential execution with budget tracking
451
- let seqBudgetExceeded = false;
452
- for (const toolCall of toolCallsToExecute) {
453
- if (seqBudgetExceeded) {
454
- messages.push({
455
- role: 'tool',
456
- tool_call_id: toolCall.id,
457
- content: '[Skipped: tool output budget exceeded for this round]',
458
- });
459
- continue;
460
- }
461
- const result = await this.executeTool(toolCall);
462
- const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
463
- // Check budget before adding
464
- if (roundOutputSize + resultStr.length > MAX_TOOL_OUTPUT_PER_ROUND) {
465
- (0, provider_logger_1.logWarn)(`[AIClient][${requestId}] Tool output budget exceeded (${MAX_TOOL_OUTPUT_PER_ROUND} chars), adding placeholder for remaining tools`);
466
- messages.push({
467
- role: 'tool',
468
- tool_call_id: toolCall.id,
469
- content: '[Skipped: tool output budget exceeded for this round]',
470
- });
471
- seqBudgetExceeded = true;
472
- continue;
473
- }
474
- const content = typeof result === 'string' && result.length > this.toolResultMaxChars
475
- ? `${result.slice(0, this.toolResultMaxChars)}\n[TRUNCATED tool result: ${result.length} chars]`
476
- : result;
477
- const contentStr = typeof content === 'string' ? content : JSON.stringify(content);
478
- roundOutputSize += contentStr.length;
479
- messages.push({
480
- role: 'tool',
481
- tool_call_id: toolCall.id,
482
- content,
483
- });
484
- }
485
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] Round tool output size: ${roundOutputSize} chars (budget: ${MAX_TOOL_OUTPUT_PER_ROUND})`);
486
- }
487
- // Call the model again with updated messages
488
- const rawFollowupReq = { ...enrichedRequest, messages, __toolpack_request_id: requestId };
489
- // Re-enrich to include any tools discovered in the previous round
490
- const followupReq = await this.enrichRequestWithTools(rawFollowupReq);
491
- if (followupReq.tool_choice === 'required') {
492
- followupReq.tool_choice = lookupOnly ? 'none' : 'auto';
493
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] generate() followup tool_choice override required->${followupReq.tool_choice}`);
494
- }
495
- if ((0, provider_logger_1.shouldLog)('debug')) {
496
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] generate() followup request messages=${messages.length}`);
497
- logRequestMessages(requestId, messages);
498
- }
499
- response = await provider.generate(followupReq);
500
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] generate() followup response finish_reason=${response.finish_reason ?? 'unknown'} tool_calls=${response.tool_calls?.length || 0} content_preview=${(0, provider_logger_1.safePreview)(response.content || '', 200)}`);
501
- }
502
- }
503
- return response;
504
- }
505
- catch (error) {
506
- throw this.wrapError(error);
507
- }
508
- }
509
- /**
510
- * unified stream completion
511
- * When tools are enabled and autoExecute is true, handles tool calls
512
- * by collecting them, executing, and re-calling the model.
513
- */
514
- async *stream(request, providerName) {
515
- const provider = this.getProvider(providerName);
516
- try {
517
- const requestId = newRequestId();
518
- const resolvedProviderName = providerName || this.defaultProvider;
519
- // System prompt injection chain (base → override → mode)
520
- let modeAwareRequest = this.injectBaseAgentContext(request);
521
- modeAwareRequest = this.injectOverrideSystemPrompt(modeAwareRequest);
522
- modeAwareRequest = this.injectModeSystemPrompt(modeAwareRequest);
523
- const enrichedRequest = await this.enrichRequestWithTools(modeAwareRequest);
524
- const policy = (process.env.TOOLPACK_SDK_TOOL_CHOICE_POLICY || this.toolsConfig.toolChoicePolicy || 'auto');
525
- const hasTools = (enrichedRequest.tools?.length || 0) > 0;
526
- const toolChoiceWasSet = enrichedRequest.tool_choice != null;
527
- // Hybrid tool detection: regex first, then AI for follow-ups
528
- let needsTools = inferNeedsTools(enrichedRequest.messages);
529
- const intelligentDetection = this.toolsConfig.intelligentToolDetection;
530
- let aiInferenceUsed = false;
531
- if (!needsTools && intelligentDetection?.enabled && hasTools) {
532
- const afterToolCall = isAfterToolCall(enrichedRequest.messages, intelligentDetection.maxFollowUpMessages);
533
- if (afterToolCall) {
534
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] Message is after tool call, using AI to infer tool needs`);
535
- const fastModel = getFastModelForProvider(resolvedProviderName || 'openai');
536
- needsTools = await inferNeedsToolsWithAI(provider, resolvedProviderName || 'openai', enrichedRequest.messages, fastModel);
537
- aiInferenceUsed = true;
538
- }
539
- }
540
- const lookupOnly = inferLookupOnly(enrichedRequest.messages);
541
- const shouldForceRequired = !toolChoiceWasSet && hasTools && (policy === 'required' || (policy === 'required_for_actions' && needsTools));
542
- const shouldForceNone = !toolChoiceWasSet && hasTools && aiInferenceUsed && !needsTools;
543
- if (shouldForceRequired) {
544
- enrichedRequest.tool_choice = 'required';
545
- }
546
- else if (shouldForceNone) {
547
- enrichedRequest.tool_choice = 'none';
548
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] AI inference determined no tools needed, setting tool_choice=none`);
549
- }
550
- const providerClass = provider?.constructor?.name || 'UnknownProvider';
551
- const baseReq = { ...enrichedRequest, __toolpack_request_id: requestId };
552
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() start provider=${resolvedProviderName} class=${providerClass} model=${enrichedRequest.model} messages=${enrichedRequest.messages.length} tools=${enrichedRequest.tools?.length || 0} tool_choice=${enrichedRequest.tool_choice ?? 'unset'} policy=${policy} needsTools=${needsTools} autoExecute=${this.toolsConfig.enabled && this.toolsConfig.autoExecute}`);
553
- logRequestMessages(requestId, enrichedRequest.messages);
554
- if (!this.toolsConfig.enabled || !this.toolsConfig.autoExecute || !this.toolRegistry) {
555
- yield* provider.stream(baseReq);
556
- return;
557
- }
558
- const messages = [...enrichedRequest.messages];
559
- let rounds = 0;
560
- // Classify query to adjust maxToolRounds (same as generate())
561
- const userMessage = extractLastUserText(enrichedRequest.messages);
562
- const classification = this.queryClassifier.classify(userMessage);
563
- const baseMaxRounds = this.toolsConfig.maxToolRounds;
564
- const maxRounds = this.queryClassifier.getToolRoundsAdjustment(classification, baseMaxRounds);
565
- if (maxRounds !== baseMaxRounds) {
566
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() Query classified as ${classification.type} (confidence: ${classification.confidence.toFixed(2)}), adjusted maxToolRounds: ${baseMaxRounds} → ${maxRounds}`);
567
- }
568
- while (rounds <= maxRounds) {
569
- // Check for abort signal at start of each round
570
- if (request.signal?.aborted) {
571
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() aborted by signal`);
572
- return;
573
- }
574
- let accumulatedContent = '';
575
- const pendingToolCalls = [];
576
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() round_start ${rounds + 1}/${maxRounds}`);
577
- let lastFinishReason = null;
578
- const rawRoundReq = { ...baseReq, messages };
579
- // Re-enrich to include any newly discovered tools from previous rounds
580
- const roundReq = await this.enrichRequestWithTools(rawRoundReq);
581
- if (rounds > 0 && roundReq.tool_choice === 'required') {
582
- roundReq.tool_choice = lookupOnly ? 'none' : 'auto';
583
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() round_${rounds + 1} tool_choice override required->${roundReq.tool_choice}`);
584
- }
585
- for await (const chunk of provider.stream(roundReq)) {
586
- // Check for abort signal during streaming
587
- if (request.signal?.aborted) {
588
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() aborted by signal during chunk processing`);
589
- return;
590
- }
591
- if (chunk.tool_calls && chunk.tool_calls.length > 0) {
592
- pendingToolCalls.push(...chunk.tool_calls);
593
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] stream() tool_calls_chunk count=${chunk.tool_calls.length} names=${chunk.tool_calls.map(tc => tc.name).join(', ')}`);
594
- // Yield tool calls in the chunk so consumers can track them
595
- yield chunk;
596
- }
597
- if (chunk.delta) {
598
- accumulatedContent += chunk.delta;
599
- yield chunk;
600
- }
601
- if (chunk.finish_reason) {
602
- lastFinishReason = chunk.finish_reason;
603
- }
604
- if (chunk.finish_reason === 'stop') {
605
- yield chunk;
606
- }
607
- }
608
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] stream() round_end finish_reason=${lastFinishReason ?? 'unknown'} accumulated_len=${accumulatedContent.length} tool_calls_total=${pendingToolCalls.length} content_preview=${(0, provider_logger_1.safePreview)(accumulatedContent, 200)}`);
609
- // If no tool calls, we're done
610
- if (pendingToolCalls.length === 0) {
611
- break;
612
- }
613
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() received ${pendingToolCalls.length} tool call(s): ${pendingToolCalls.map(tc => tc.name).join(', ')}`);
614
- rounds++;
615
- if (rounds > maxRounds) {
616
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() max tool rounds (${maxRounds}) reached`);
617
- break;
618
- }
619
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] stream() tool round ${rounds}/${maxRounds}`);
620
- // Add assistant message and tool results to conversation
621
- messages.push({
622
- role: 'assistant',
623
- content: accumulatedContent || '',
624
- tool_calls: pendingToolCalls.map(tc => ({
625
- id: tc.id,
626
- type: 'function',
627
- function: {
628
- name: tc.name,
629
- arguments: JSON.stringify(tc.arguments),
630
- },
631
- })),
632
- });
633
- // Apply fan-out limits for web.fetch to prevent context overflow
634
- const MAX_WEB_FETCH_CALLS = 3;
635
- let toolCallsToExecute = pendingToolCalls;
636
- const webFetchCalls = pendingToolCalls.filter(tc => tc.name === 'web.fetch');
637
- if (webFetchCalls.length > MAX_WEB_FETCH_CALLS) {
638
- (0, provider_logger_1.logInfo)(`[AIClient][${requestId}] Limiting web.fetch calls from ${webFetchCalls.length} → ${MAX_WEB_FETCH_CALLS} to prevent context overflow`);
639
- const limitedWebFetch = webFetchCalls.slice(0, MAX_WEB_FETCH_CALLS);
640
- const otherCalls = pendingToolCalls.filter(tc => tc.name !== 'web.fetch');
641
- toolCallsToExecute = [...otherCalls, ...limitedWebFetch];
642
- // Add placeholder responses for excluded web.fetch calls to avoid orphaned tool_call_ids
643
- const excludedWebFetch = webFetchCalls.slice(MAX_WEB_FETCH_CALLS);
644
- for (const tc of excludedWebFetch) {
645
- messages.push({
646
- role: 'tool',
647
- tool_call_id: tc.id,
648
- content: '[Skipped: web.fetch fan-out limit exceeded]',
649
- });
650
- }
651
- }
652
- // Track tool output budget for this round
653
- const MAX_TOOL_OUTPUT_PER_ROUND = 50_000;
654
- let roundOutputSize = 0;
655
- let budgetExceeded = false;
656
- // Collect heartbeat chunks to yield while tools execute
657
- const heartbeatChunks = [];
658
- for (const toolCall of toolCallsToExecute) {
659
- if (budgetExceeded) {
660
- // Still must add a tool response for every tool_call to satisfy OpenAI API
661
- messages.push({
662
- role: 'tool',
663
- tool_call_id: toolCall.id,
664
- content: '[Skipped: tool output budget exceeded for this round]',
665
- });
666
- continue;
667
- }
668
- const startTime = Date.now();
669
- // Execute tool with heartbeat: yield empty chunks periodically
670
- // so UI consumers (e.g. terminal animations) stay alive
671
- let toolDone = false;
672
- const heartbeatInterval = setInterval(() => {
673
- if (!toolDone)
674
- heartbeatChunks.push({ delta: '' });
675
- }, 500);
676
- const result = await this.executeTool(toolCall);
677
- toolDone = true;
678
- clearInterval(heartbeatInterval);
679
- const duration = Date.now() - startTime;
680
- // Yield any queued heartbeat chunks
681
- while (heartbeatChunks.length > 0) {
682
- yield heartbeatChunks.shift();
683
- }
684
- // Extra yield point for event loop
685
- await new Promise(resolve => setTimeout(resolve, 0));
686
- const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
687
- // Check budget before adding
688
- if (roundOutputSize + resultStr.length > MAX_TOOL_OUTPUT_PER_ROUND) {
689
- (0, provider_logger_1.logWarn)(`[AIClient][${requestId}] Tool output budget exceeded (${MAX_TOOL_OUTPUT_PER_ROUND} chars), adding placeholder for remaining tools`);
690
- messages.push({
691
- role: 'tool',
692
- tool_call_id: toolCall.id,
693
- content: '[Skipped: tool output budget exceeded for this round]',
694
- });
695
- budgetExceeded = true;
696
- continue;
697
- }
698
- const content = typeof result === 'string' && result.length > this.toolResultMaxChars
699
- ? `${result.slice(0, this.toolResultMaxChars)}\n[TRUNCATED tool result: ${result.length} chars]`
700
- : result;
701
- const contentStr = typeof content === 'string' ? content : JSON.stringify(content);
702
- roundOutputSize += contentStr.length;
703
- messages.push({
704
- role: 'tool',
705
- tool_call_id: toolCall.id,
706
- content,
707
- });
708
- // Yield a chunk with the tool result so consumers can track it
709
- yield {
710
- delta: '',
711
- tool_calls: [{
712
- ...toolCall,
713
- result: typeof content === 'string' ? content : JSON.stringify(content),
714
- duration,
715
- }],
716
- };
717
- }
718
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] Round tool output size: ${roundOutputSize} chars (budget: ${MAX_TOOL_OUTPUT_PER_ROUND})`);
719
- if ((0, provider_logger_1.shouldLog)('debug')) {
720
- (0, provider_logger_1.logDebug)(`[AIClient][${requestId}] stream() after_tools messages=${messages.length}`);
721
- logRequestMessages(requestId, messages);
722
- }
723
- }
724
- }
725
- catch (error) {
726
- throw this.wrapError(error);
727
- }
728
- }
729
- /**
730
- * unified embed
731
- */
732
- async embed(request, providerName) {
733
- const provider = this.getProvider(providerName);
734
- try {
735
- return await provider.embed(request);
736
- }
737
- catch (error) {
738
- throw this.wrapError(error);
739
- }
740
- }
741
- /**
742
- * Enrich a request with tools based on the router config.
743
- * Applies mode-based tool filtering when an active mode is set.
744
- */
745
- async enrichRequestWithTools(request) {
746
- // If mode blocks ALL tools, return request with no tools
747
- if (this.activeMode?.blockAllTools) {
748
- (0, provider_logger_1.logInfo)(`[AIClient] Mode "${this.activeMode.displayName}" blocks all tools`);
749
- return request;
750
- }
751
- if (!this.toolsConfig.enabled || (!this.toolRegistry && (request.tools?.length || 0) === 0)) {
752
- (0, provider_logger_1.logDebug)(`[AIClient] Tools disabled or no registry`);
753
- return request;
754
- }
755
- // Merge mode-specific tool search config with global config
756
- let resolvedToolsConfig = this.toolsConfig;
757
- if (this.activeMode?.toolSearch && this.toolsConfig.toolSearch) {
758
- resolvedToolsConfig = {
759
- ...this.toolsConfig,
760
- toolSearch: {
761
- ...this.toolsConfig.toolSearch,
762
- ...(this.activeMode.toolSearch.enabled !== undefined ? { enabled: this.activeMode.toolSearch.enabled } : {}),
763
- ...(this.activeMode.toolSearch.alwaysLoadedTools ? { alwaysLoadedTools: this.activeMode.toolSearch.alwaysLoadedTools } : {}),
764
- ...(this.activeMode.toolSearch.alwaysLoadedCategories ? { alwaysLoadedCategories: this.activeMode.toolSearch.alwaysLoadedCategories } : {}),
765
- }
766
- };
767
- (0, provider_logger_1.logDebug)(`[AIClient] Merged mode toolSearch config: enabled=${resolvedToolsConfig.toolSearch?.enabled}, alwaysLoadedTools=${resolvedToolsConfig.toolSearch?.alwaysLoadedTools?.length || 0}`);
768
- }
769
- // If the request already has tools, only add newly discovered tools when tool.search mode is enabled
770
- if (request.tools && request.tools.length > 0) {
771
- if (!resolvedToolsConfig.toolSearch?.enabled || !this.toolRegistry) {
772
- (0, provider_logger_1.logDebug)(`[AIClient] Request already has ${request.tools.length} tools`);
773
- return request;
774
- }
775
- let schemas = await this.toolRouter.resolve(request.messages, this.toolRegistry, resolvedToolsConfig);
776
- (0, provider_logger_1.logDebug)(`[AIClient] Resolved ${schemas.length} tools to send: ${schemas.map(s => s.name).join(', ') || 'none'}`);
777
- if (this.activeMode && schemas.length > 0) {
778
- const beforeCount = schemas.length;
779
- schemas = this.filterSchemasByMode(schemas, this.activeMode);
780
- const filteredCount = beforeCount - schemas.length;
781
- if (filteredCount > 0) {
782
- (0, provider_logger_1.logInfo)(`[AIClient] Mode "${this.activeMode.displayName}" filtered out ${filteredCount} tools`);
783
- }
784
- }
785
- const existingToolNames = new Set(request.tools.map(tool => tool.function.name));
786
- const newTools = schemas
787
- .filter(schema => !existingToolNames.has(schema.name))
788
- .map(schema => ({
789
- type: 'function',
790
- function: {
791
- name: schema.name,
792
- description: schema.description,
793
- parameters: schema.parameters,
794
- },
795
- }));
796
- if (newTools.length === 0) {
797
- (0, provider_logger_1.logDebug)(`[AIClient] Request already has ${request.tools.length} tools (no new discoveries)`);
798
- return request;
799
- }
800
- let enrichedRequest = {
801
- ...request,
802
- tools: [...request.tools, ...newTools],
803
- };
804
- if (resolvedToolsConfig.toolSearch?.enabled && this.toolRegistry) {
805
- enrichedRequest = this.injectToolSearchPrompt(enrichedRequest);
806
- }
807
- return enrichedRequest;
808
- }
809
- if (!this.toolRegistry) {
810
- (0, provider_logger_1.logDebug)('[AIClient] Tool registry not configured, skipping tool resolution');
811
- return request;
812
- }
813
- const activeRegistry = this.toolRegistry;
814
- let schemas = await this.toolRouter.resolve(request.messages, activeRegistry, resolvedToolsConfig);
815
- (0, provider_logger_1.logDebug)(`[AIClient] Resolved ${schemas.length} tools to send: ${schemas.map(s => s.name).join(', ') || 'none'}`);
816
- // Apply mode-based filtering
817
- if (this.activeMode && schemas.length > 0) {
818
- const beforeCount = schemas.length;
819
- schemas = this.filterSchemasByMode(schemas, this.activeMode);
820
- const filteredCount = beforeCount - schemas.length;
821
- if (filteredCount > 0) {
822
- (0, provider_logger_1.logInfo)(`[AIClient] Mode "${this.activeMode.displayName}" filtered out ${filteredCount} tools`);
823
- }
824
- }
825
- if (schemas.length === 0) {
826
- return request;
827
- }
828
- const tools = schemas.map(s => ({
829
- type: 'function',
830
- function: {
831
- name: s.name,
832
- description: s.description,
833
- parameters: s.parameters,
834
- },
835
- }));
836
- let enrichedRequest = { ...request, tools };
837
- // Inject Tool Search system prompt if enabled
838
- if (this.toolsConfig.toolSearch?.enabled && activeRegistry) {
839
- enrichedRequest = this.injectToolSearchPrompt(enrichedRequest);
840
- }
841
- return enrichedRequest;
842
- }
843
- /**
844
- * Filter tool schemas based on mode permissions.
845
- * blockedTools/blockedToolCategories always take precedence.
846
- */
847
- filterSchemasByMode(schemas, mode) {
848
- return schemas.filter(schema => {
849
- // Check explicit blocks first (highest priority)
850
- if (mode.blockedTools.includes(schema.name))
851
- return false;
852
- if (mode.blockedToolCategories.includes(schema.category))
853
- return false;
854
- // If allowlists are specified, tool must match at least one
855
- const hasAllowedTools = mode.allowedTools.length > 0;
856
- const hasAllowedCategories = mode.allowedToolCategories.length > 0;
857
- if (hasAllowedTools || hasAllowedCategories) {
858
- const nameAllowed = hasAllowedTools && mode.allowedTools.includes(schema.name);
859
- const categoryAllowed = hasAllowedCategories && mode.allowedToolCategories.includes(schema.category);
860
- return nameAllowed || categoryAllowed;
861
- }
862
- // No allowlists = everything is allowed (minus blocks)
863
- return true;
864
- });
865
- }
866
- /**
867
- * Inject the active mode's system prompt into the request messages.
868
- * For the "All" mode (empty systemPrompt), this is a no-op.
869
- */
870
- injectModeSystemPrompt(request) {
871
- if (!this.activeMode || !this.activeMode.systemPrompt) {
872
- (0, provider_logger_1.logDebug)(`[AIClient] injectModeSystemPrompt: No active mode or empty systemPrompt. activeMode=${this.activeMode?.name}, systemPrompt=${this.activeMode?.systemPrompt?.substring(0, 50)}`);
873
- return request;
874
- }
875
- const modePrompt = this.activeMode.systemPrompt;
876
- (0, provider_logger_1.logDebug)(`[AIClient] injectModeSystemPrompt: Injecting mode prompt for ${this.activeMode.name}, length=${modePrompt.length}`);
877
- const hasSystemMessage = request.messages.some(m => m.role === 'system');
878
- if (hasSystemMessage) {
879
- // Prepend mode prompt to existing system message
880
- const messages = request.messages.map(m => {
881
- if (m.role === 'system') {
882
- const existingContent = typeof m.content === 'string' ? m.content : '';
883
- return {
884
- ...m,
885
- content: `${existingContent}\n\n${modePrompt}`
886
- };
887
- }
888
- return m;
889
- });
890
- return { ...request, messages };
891
- }
892
- else {
893
- return {
894
- ...request,
895
- messages: [
896
- { role: 'system', content: modePrompt },
897
- ...request.messages
898
- ]
899
- };
900
- }
901
- }
902
- /**
903
- * Inject the overriding system prompt (from AIClientConfig) into the request.
904
- */
905
- injectOverrideSystemPrompt(request) {
906
- if (!this.overrideSystemPrompt) {
907
- return request;
908
- }
909
- const prompt = this.overrideSystemPrompt;
910
- const hasSystemMessage = request.messages.some(m => m.role === 'system');
911
- if (hasSystemMessage) {
912
- const messages = request.messages.map(m => {
913
- if (m.role === 'system') {
914
- const existingContent = typeof m.content === 'string' ? m.content : '';
915
- return {
916
- ...m,
917
- content: `${existingContent}\n\n${prompt}`
918
- };
919
- }
920
- return m;
921
- });
922
- return { ...request, messages };
923
- }
924
- else {
925
- return {
926
- ...request,
927
- messages: [{ role: 'system', content: prompt }, ...request.messages]
928
- };
929
- }
930
- }
931
- /**
932
- * Inject the Base Agent Context into the request.
933
- * Tells the agent its CWD, tools, and to be proactive.
934
- */
935
- injectBaseAgentContext(request) {
936
- // Check if active mode has per-mode baseContext config
937
- let includeWd = true;
938
- let includeCategories = true;
939
- let customContext;
940
- const disabled = this.disableBaseContext;
941
- if (this.activeMode?.baseContext === false) {
942
- // Mode explicitly disables base context entirely
943
- return request;
944
- }
945
- else if (this.activeMode?.baseContext) {
946
- // Mode has fine-grained base context config
947
- includeWd = this.activeMode.baseContext.includeWorkingDirectory !== false;
948
- includeCategories = this.activeMode.baseContext.includeToolCategories !== false;
949
- customContext = this.activeMode.baseContext.custom;
950
- }
951
- const baseContext = customContext || (0, base_agent_context_js_1.generateBaseAgentContext)({
952
- workingDirectory: process.cwd(),
953
- toolCategories: this.toolRegistry ? this.toolRegistry.getCategories() : [],
954
- disabled,
955
- includeWorkingDirectory: includeWd,
956
- includeToolCategories: includeCategories,
957
- });
958
- if (!baseContext) {
959
- return request;
960
- }
961
- const hasSystemMessage = request.messages.some(m => m.role === 'system');
962
- if (hasSystemMessage) {
963
- const messages = request.messages.map(m => {
964
- if (m.role === 'system') {
965
- const existingContent = typeof m.content === 'string' ? m.content : '';
966
- return {
967
- ...m,
968
- content: `${baseContext}\n\n${existingContent}`
969
- };
970
- }
971
- return m;
972
- });
973
- return { ...request, messages };
974
- }
975
- else {
976
- return {
977
- ...request,
978
- messages: [{ role: 'system', content: baseContext }, ...request.messages]
979
- };
980
- }
981
- }
982
- /**
983
- * Inject Tool Search system prompt to guide AI to use tool.search.
984
- */
985
- injectToolSearchPrompt(request) {
986
- if (!this.toolRegistry)
987
- return request;
988
- // Check if system message already exists
989
- const hasSystemMessage = request.messages.some(m => m.role === 'system');
990
- // Build list of always-loaded tools for context
991
- const alwaysLoadedTools = this.toolsConfig.toolSearch?.alwaysLoadedTools ?? [];
992
- let alwaysLoadedSection = '';
993
- if (alwaysLoadedTools.length > 0) {
994
- const toolDescriptions = alwaysLoadedTools
995
- .map(name => {
996
- const tool = this.toolRegistry?.get(name);
997
- return tool ? ` - **${tool.name}**: ${tool.description}` : null;
998
- })
999
- .filter(Boolean)
1000
- .join('\n');
1001
- if (toolDescriptions) {
1002
- alwaysLoadedSection = `\n\nYou have these tools always available:\n${toolDescriptions}\n\nUse these tools directly when appropriate for the task.`;
1003
- }
1004
- }
1005
- const toolSearchInstructions = `
13
+ Answer only: YES or NO`;try{const $=((await h.generate({model:l,messages:[{role:"user",content:c}],max_tokens:10,temperature:0})).content||"").trim().toUpperCase(),g=$.startsWith("YES");return(0,i.logDebug)(`[AIClient][${t}] inferNeedsToolsWithAI() context="${n}" message="${s.substring(0,50)}" result=${g} (raw: ${$})`),g}catch(d){return(0,i.logWarn)(`[AIClient][${t}] inferNeedsToolsWithAI() error=${d} - falling back to false`),!1}}C(Z,"inferNeedsToolsWithAI");function ee(h){const e=B(h).toLowerCase();if(!e)return!1;const o=[/\b(list|show|print|display)\b.*\b(files|folders|directory|dir)\b/,/\b(current|this)\b.*\b(directory|folder|repo|repository)\b/,/\b(read|open|view)\b.*\b(file|log|config|json|yaml|env)\b/],l=[/\b(write|create|update|modify|edit|patch|delete|remove|rename|move|copy)\b/,/\b(run|execute)\b.*\b(command|shell|script|tests?)\b/,/\b(http|get|post|put|delete|download|fetch|curl)\b/,/\b(web|search|scrape|crawl)\b/];return o.some(t=>t.test(e))&&!l.some(t=>t.test(e))}C(ee,"inferLookupOnly");class fe extends ae.EventEmitter{static{C(this,"AIClient")}providers;defaultProvider;toolRegistry;toolsConfig;toolRouter;bm25Engine;queryClassifier;toolOrchestrator;activeMode=null;overrideSystemPrompt;disableBaseContext;toolResultMaxChars;constructor(e){super(),this.providers=new Map(Object.entries(e.providers)),this.defaultProvider=e.defaultProvider,this.toolRegistry=e.toolRegistry,this.toolsConfig=e.toolsConfig||z.DEFAULT_TOOLS_CONFIG,this.toolRouter=new ce.ToolRouter,this.bm25Engine=new Y.BM25SearchEngine,this.queryClassifier=new ue.QueryClassifier,this.toolOrchestrator=new ge.ToolOrchestrator,this.overrideSystemPrompt=e.systemPrompt,this.disableBaseContext=e.disableBaseContext||!1;const o=this.toolsConfig.resultMaxChars??z.DEFAULT_TOOLS_CONFIG.resultMaxChars??2e4;this.toolResultMaxChars=Number.isFinite(o)&&o>0?o:2e4,this.toolRegistry&&this.bm25Engine.index(this.toolRegistry.getAll())}registerProvider(e,o){this.providers.set(e,o)}getProvider(e){const o=e||this.defaultProvider;if(!o)throw new U.SDKError("No provider specified and no default provider configured","NO_PROVIDER_CONFIGURED",400);const l=this.providers.get(o);if(!l)throw new U.SDKError(`Provider '${o}' not found`,"PROVIDER_NOT_FOUND",404);return l}setDefaultProvider(e){if(!this.providers.has(e))throw new U.SDKError(`Provider '${e}' not found`,"PROVIDER_NOT_FOUND",404);this.defaultProvider=e}getToolRegistry(){return this.toolRegistry}getProviders(){return new Map(this.providers)}setToolRegistry(e){this.toolRegistry=e}setToolsConfig(e){this.toolsConfig=e}setSystemPrompt(e){this.overrideSystemPrompt=e}setMode(e){this.activeMode=e,(0,i.logInfo)(`[AIClient] Mode set to: ${e?e.displayName:"none (cleared)"}`)}getMode(){return this.activeMode}reindexTools(){this.toolRegistry&&(this.bm25Engine.index(this.toolRegistry.getAll()),(0,i.logInfo)(`[AIClient] Re-indexed ${this.bm25Engine.getIndexedCount()} tools for BM25 search`))}clearToolDiscoveryCache(){this.toolRouter.clearDiscoveryCache()}async generate(e,o){const l=this.getProvider(o);try{const t=Q();let n=this.injectBaseAgentContext(e);n=this.injectOverrideSystemPrompt(n),n=this.injectModeSystemPrompt(n);const r=o||this.defaultProvider,s=await this.enrichRequestWithTools(n),c=process.env.TOOLPACK_SDK_TOOL_CHOICE_POLICY||this.toolsConfig.toolChoicePolicy||"auto",d=(s.tools?.length||0)>0,$=s.tool_choice!=null;let g=H(s.messages);const M=this.toolsConfig.intelligentToolDetection;let F=!1;if(!g&&M?.enabled&&d&&X(s.messages,M.maxFollowUpMessages)){(0,i.logInfo)(`[AIClient][${t}] Message is after tool call, using AI to infer tool needs`);const R=G(r||"openai");g=await Z(l,r||"openai",s.messages,R),F=!0}const J=ee(s.messages);!$&&d&&(c==="required"||c==="required_for_actions"&&g)?s.tool_choice="required":!$&&d&&F&&!g&&(s.tool_choice="none",(0,i.logInfo)(`[AIClient][${t}] AI inference determined no tools needed, setting tool_choice=none`));const K=l?.constructor?.name||"UnknownProvider",W={...s,__toolpack_request_id:t};(0,i.logInfo)(`[AIClient][${t}] generate() start provider=${r} class=${K} model=${s.model} messages=${s.messages.length} tools=${s.tools?.length||0} tool_choice=${s.tool_choice??"unset"} policy=${c} needsTools=${g} autoExecute=${this.toolsConfig.enabled&&this.toolsConfig.autoExecute}`),q(t,s.messages);let u=await l.generate(W);if((0,i.logDebug)(`[AIClient][${t}] generate() initial response finish_reason=${u.finish_reason??"unknown"} tool_calls=${u.tool_calls?.length||0} content_preview=${(0,i.safePreview)(u.content||"",200)}`),this.toolsConfig.enabled&&this.toolsConfig.autoExecute&&this.toolRegistry){const T=B(s.messages),R=this.queryClassifier.classify(T),N=this.toolsConfig.maxToolRounds,x=this.queryClassifier.getToolRoundsAdjustment(R,N);x!==N?(0,i.logInfo)(`[AIClient][${t}] Query classified as ${R.type} (confidence: ${R.confidence.toFixed(2)}), adjusted maxToolRounds: ${N} \u2192 ${x}`):(0,i.logDebug)(`[AIClient][${t}] Query classified as ${R.type} (confidence: ${R.confidence.toFixed(2)}), keeping maxToolRounds: ${x}`);let _=0;const m=[...s.messages];for(u.tool_calls&&u.tool_calls.length>0&&(0,i.logInfo)(`[AIClient] Received ${u.tool_calls.length} tool call(s): ${u.tool_calls.map(y=>y.name).join(", ")}`);u.tool_calls&&u.tool_calls.length>0&&_<x;){_++,(0,i.logInfo)(`[AIClient][${t}] generate() tool round ${_}/${x} tool_calls=${u.tool_calls.length}`),m.push({role:"assistant",content:u.content||"",tool_calls:u.tool_calls.map(p=>({id:p.id,type:"function",function:{name:p.name,arguments:JSON.stringify(p.arguments)}}))});const y=this.toolOrchestrator.shouldUseParallelExecution(u.tool_calls),E=3;let D=u.tool_calls;const A=u.tool_calls.filter(p=>p.name==="web.fetch");if(A.length>E){(0,i.logInfo)(`[AIClient][${t}] Limiting web.fetch calls from ${A.length} \u2192 ${E} to prevent context overflow`);const p=A.slice(0,E);D=[...u.tool_calls.filter(a=>a.name!=="web.fetch"),...p];const f=A.slice(E);for(const a of f)m.push({role:"tool",tool_call_id:a.id,content:"[Skipped: web.fetch fan-out limit exceeded]"})}const b=5e4;let S=0;if(y){(0,i.logInfo)(`[AIClient][${t}] Using parallel execution for ${D.length} tools`);const p=await this.toolOrchestrator.executeWithDependencies(D,f=>this.executeTool(f),5);let w=!1;for(const f of D){if(w){m.push({role:"tool",tool_call_id:f.id,content:"[Skipped: tool output budget exceeded for this round]"});continue}const a=p.get(f.id),v=typeof a=="string"?a:JSON.stringify(a);if(S+v.length>b){(0,i.logWarn)(`[AIClient][${t}] Tool output budget exceeded (${b} chars), adding placeholder for remaining tools`),m.push({role:"tool",tool_call_id:f.id,content:"[Skipped: tool output budget exceeded for this round]"}),w=!0;continue}const I=typeof a=="string"&&a.length>this.toolResultMaxChars?`${a.slice(0,this.toolResultMaxChars)}
14
+ [TRUNCATED tool result: ${a.length} chars]`:a,k=typeof I=="string"?I:JSON.stringify(I);S+=k.length,m.push({role:"tool",tool_call_id:f.id,content:I})}(0,i.logDebug)(`[AIClient][${t}] Round tool output size: ${S} chars (budget: ${b})`)}else{(0,i.logInfo)(`[AIClient][${t}] Using sequential execution for ${D.length} tools`);let p=!1;for(const w of D){if(p){m.push({role:"tool",tool_call_id:w.id,content:"[Skipped: tool output budget exceeded for this round]"});continue}const f=await this.executeTool(w),a=typeof f=="string"?f:JSON.stringify(f);if(S+a.length>b){(0,i.logWarn)(`[AIClient][${t}] Tool output budget exceeded (${b} chars), adding placeholder for remaining tools`),m.push({role:"tool",tool_call_id:w.id,content:"[Skipped: tool output budget exceeded for this round]"}),p=!0;continue}const v=typeof f=="string"&&f.length>this.toolResultMaxChars?`${f.slice(0,this.toolResultMaxChars)}
15
+ [TRUNCATED tool result: ${f.length} chars]`:f,I=typeof v=="string"?v:JSON.stringify(v);S+=I.length,m.push({role:"tool",tool_call_id:w.id,content:v})}(0,i.logDebug)(`[AIClient][${t}] Round tool output size: ${S} chars (budget: ${b})`)}const j={...s,messages:m,__toolpack_request_id:t},O=await this.enrichRequestWithTools(j);O.tool_choice==="required"&&(O.tool_choice=J?"none":"auto",(0,i.logInfo)(`[AIClient][${t}] generate() followup tool_choice override required->${O.tool_choice}`)),(0,i.shouldLog)("debug")&&((0,i.logDebug)(`[AIClient][${t}] generate() followup request messages=${m.length}`),q(t,m)),u=await l.generate(O),(0,i.logDebug)(`[AIClient][${t}] generate() followup response finish_reason=${u.finish_reason??"unknown"} tool_calls=${u.tool_calls?.length||0} content_preview=${(0,i.safePreview)(u.content||"",200)}`)}}return u}catch(t){throw this.wrapError(t)}}async*stream(e,o){const l=this.getProvider(o);try{const t=Q(),n=o||this.defaultProvider;let r=this.injectBaseAgentContext(e);r=this.injectOverrideSystemPrompt(r),r=this.injectModeSystemPrompt(r);const s=await this.enrichRequestWithTools(r),c=process.env.TOOLPACK_SDK_TOOL_CHOICE_POLICY||this.toolsConfig.toolChoicePolicy||"auto",d=(s.tools?.length||0)>0,$=s.tool_choice!=null;let g=H(s.messages);const M=this.toolsConfig.intelligentToolDetection;let F=!1;if(!g&&M?.enabled&&d&&X(s.messages,M.maxFollowUpMessages)){(0,i.logInfo)(`[AIClient][${t}] Message is after tool call, using AI to infer tool needs`);const y=G(n||"openai");g=await Z(l,n||"openai",s.messages,y),F=!0}const J=ee(s.messages);!$&&d&&(c==="required"||c==="required_for_actions"&&g)?s.tool_choice="required":!$&&d&&F&&!g&&(s.tool_choice="none",(0,i.logInfo)(`[AIClient][${t}] AI inference determined no tools needed, setting tool_choice=none`));const K=l?.constructor?.name||"UnknownProvider",W={...s,__toolpack_request_id:t};if((0,i.logInfo)(`[AIClient][${t}] stream() start provider=${n} class=${K} model=${s.model} messages=${s.messages.length} tools=${s.tools?.length||0} tool_choice=${s.tool_choice??"unset"} policy=${c} needsTools=${g} autoExecute=${this.toolsConfig.enabled&&this.toolsConfig.autoExecute}`),q(t,s.messages),!this.toolsConfig.enabled||!this.toolsConfig.autoExecute||!this.toolRegistry){yield*l.stream(W);return}const u=[...s.messages];let T=0;const R=B(s.messages),N=this.queryClassifier.classify(R),x=this.toolsConfig.maxToolRounds,_=this.queryClassifier.getToolRoundsAdjustment(N,x);for(_!==x&&(0,i.logInfo)(`[AIClient][${t}] stream() Query classified as ${N.type} (confidence: ${N.confidence.toFixed(2)}), adjusted maxToolRounds: ${x} \u2192 ${_}`);T<=_;){if(e.signal?.aborted){(0,i.logInfo)(`[AIClient][${t}] stream() aborted by signal`);return}let m="";const y=[];(0,i.logInfo)(`[AIClient][${t}] stream() round_start ${T+1}/${_}`);let E=null;const D={...W,messages:u},A=await this.enrichRequestWithTools(D);T>0&&A.tool_choice==="required"&&(A.tool_choice=J?"none":"auto",(0,i.logInfo)(`[AIClient][${t}] stream() round_${T+1} tool_choice override required->${A.tool_choice}`));for await(const a of l.stream(A)){if(e.signal?.aborted){(0,i.logInfo)(`[AIClient][${t}] stream() aborted by signal during chunk processing`);return}a.tool_calls&&a.tool_calls.length>0&&(y.push(...a.tool_calls),(0,i.logDebug)(`[AIClient][${t}] stream() tool_calls_chunk count=${a.tool_calls.length} names=${a.tool_calls.map(v=>v.name).join(", ")}`),yield a),a.delta&&(m+=a.delta,yield a),a.finish_reason&&(E=a.finish_reason),a.finish_reason==="stop"&&(yield a)}if((0,i.logDebug)(`[AIClient][${t}] stream() round_end finish_reason=${E??"unknown"} accumulated_len=${m.length} tool_calls_total=${y.length} content_preview=${(0,i.safePreview)(m,200)}`),y.length===0)break;if((0,i.logInfo)(`[AIClient][${t}] stream() received ${y.length} tool call(s): ${y.map(a=>a.name).join(", ")}`),T++,T>_){(0,i.logInfo)(`[AIClient][${t}] stream() max tool rounds (${_}) reached`);break}(0,i.logInfo)(`[AIClient][${t}] stream() tool round ${T}/${_}`),u.push({role:"assistant",content:m||"",tool_calls:y.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.arguments)}}))});const b=3;let S=y;const j=y.filter(a=>a.name==="web.fetch");if(j.length>b){(0,i.logInfo)(`[AIClient][${t}] Limiting web.fetch calls from ${j.length} \u2192 ${b} to prevent context overflow`);const a=j.slice(0,b);S=[...y.filter(k=>k.name!=="web.fetch"),...a];const I=j.slice(b);for(const k of I)u.push({role:"tool",tool_call_id:k.id,content:"[Skipped: web.fetch fan-out limit exceeded]"})}const O=5e4;let p=0,w=!1;const f=[];for(const a of S){if(w){u.push({role:"tool",tool_call_id:a.id,content:"[Skipped: tool output budget exceeded for this round]"});continue}const v=Date.now();let I=!1;const k=setInterval(()=>{I||f.push({delta:""})},500),P=await this.executeTool(a);I=!0,clearInterval(k);const se=Date.now()-v;for(;f.length>0;)yield f.shift();await new Promise(le=>setTimeout(le,0));const ne=typeof P=="string"?P:JSON.stringify(P);if(p+ne.length>O){(0,i.logWarn)(`[AIClient][${t}] Tool output budget exceeded (${O} chars), adding placeholder for remaining tools`),u.push({role:"tool",tool_call_id:a.id,content:"[Skipped: tool output budget exceeded for this round]"}),w=!0;continue}const L=typeof P=="string"&&P.length>this.toolResultMaxChars?`${P.slice(0,this.toolResultMaxChars)}
16
+ [TRUNCATED tool result: ${P.length} chars]`:P,ie=typeof L=="string"?L:JSON.stringify(L);p+=ie.length,u.push({role:"tool",tool_call_id:a.id,content:L}),yield{delta:"",tool_calls:[{...a,result:typeof L=="string"?L:JSON.stringify(L),duration:se}]}}(0,i.logDebug)(`[AIClient][${t}] Round tool output size: ${p} chars (budget: ${O})`),(0,i.shouldLog)("debug")&&((0,i.logDebug)(`[AIClient][${t}] stream() after_tools messages=${u.length}`),q(t,u))}}catch(t){throw this.wrapError(t)}}async embed(e,o){const l=this.getProvider(o);try{return await l.embed(e)}catch(t){throw this.wrapError(t)}}async enrichRequestWithTools(e){if(this.activeMode?.blockAllTools)return(0,i.logInfo)(`[AIClient] Mode "${this.activeMode.displayName}" blocks all tools`),e;if(!this.toolsConfig.enabled||!this.toolRegistry&&(e.tools?.length||0)===0)return(0,i.logDebug)("[AIClient] Tools disabled or no registry"),e;let o=this.toolsConfig;if(this.activeMode?.toolSearch&&this.toolsConfig.toolSearch&&(o={...this.toolsConfig,toolSearch:{...this.toolsConfig.toolSearch,...this.activeMode.toolSearch.enabled!==void 0?{enabled:this.activeMode.toolSearch.enabled}:{},...this.activeMode.toolSearch.alwaysLoadedTools?{alwaysLoadedTools:this.activeMode.toolSearch.alwaysLoadedTools}:{},...this.activeMode.toolSearch.alwaysLoadedCategories?{alwaysLoadedCategories:this.activeMode.toolSearch.alwaysLoadedCategories}:{}}},(0,i.logDebug)(`[AIClient] Merged mode toolSearch config: enabled=${o.toolSearch?.enabled}, alwaysLoadedTools=${o.toolSearch?.alwaysLoadedTools?.length||0}`)),e.tools&&e.tools.length>0){if(!o.toolSearch?.enabled||!this.toolRegistry)return(0,i.logDebug)(`[AIClient] Request already has ${e.tools.length} tools`),e;let s=await this.toolRouter.resolve(e.messages,this.toolRegistry,o);if((0,i.logDebug)(`[AIClient] Resolved ${s.length} tools to send: ${s.map(g=>g.name).join(", ")||"none"}`),this.activeMode&&s.length>0){const g=s.length;s=this.filterSchemasByMode(s,this.activeMode);const M=g-s.length;M>0&&(0,i.logInfo)(`[AIClient] Mode "${this.activeMode.displayName}" filtered out ${M} tools`)}const c=new Set(e.tools.map(g=>g.function.name)),d=s.filter(g=>!c.has(g.name)).map(g=>({type:"function",function:{name:g.name,description:g.description,parameters:g.parameters}}));if(d.length===0)return(0,i.logDebug)(`[AIClient] Request already has ${e.tools.length} tools (no new discoveries)`),e;let $={...e,tools:[...e.tools,...d]};return o.toolSearch?.enabled&&this.toolRegistry&&($=this.injectToolSearchPrompt($)),$}if(!this.toolRegistry)return(0,i.logDebug)("[AIClient] Tool registry not configured, skipping tool resolution"),e;const l=this.toolRegistry;let t=await this.toolRouter.resolve(e.messages,l,o);if((0,i.logDebug)(`[AIClient] Resolved ${t.length} tools to send: ${t.map(s=>s.name).join(", ")||"none"}`),this.activeMode&&t.length>0){const s=t.length;t=this.filterSchemasByMode(t,this.activeMode);const c=s-t.length;c>0&&(0,i.logInfo)(`[AIClient] Mode "${this.activeMode.displayName}" filtered out ${c} tools`)}if(t.length===0)return e;const n=t.map(s=>({type:"function",function:{name:s.name,description:s.description,parameters:s.parameters}}));let r={...e,tools:n};return this.toolsConfig.toolSearch?.enabled&&l&&(r=this.injectToolSearchPrompt(r)),r}filterSchemasByMode(e,o){return e.filter(l=>{if(o.blockedTools.includes(l.name)||o.blockedToolCategories.includes(l.category))return!1;const t=o.allowedTools.length>0,n=o.allowedToolCategories.length>0;if(t||n){const r=t&&o.allowedTools.includes(l.name),s=n&&o.allowedToolCategories.includes(l.category);return r||s}return!0})}injectModeSystemPrompt(e){if(!this.activeMode||!this.activeMode.systemPrompt)return(0,i.logDebug)(`[AIClient] injectModeSystemPrompt: No active mode or empty systemPrompt. activeMode=${this.activeMode?.name}, systemPrompt=${this.activeMode?.systemPrompt?.substring(0,50)}`),e;const o=this.activeMode.systemPrompt;if((0,i.logDebug)(`[AIClient] injectModeSystemPrompt: Injecting mode prompt for ${this.activeMode.name}, length=${o.length}`),e.messages.some(t=>t.role==="system")){const t=e.messages.map(n=>{if(n.role==="system"){const r=typeof n.content=="string"?n.content:"";return{...n,content:`${r}
17
+
18
+ ${o}`}}return n});return{...e,messages:t}}else return{...e,messages:[{role:"system",content:o},...e.messages]}}injectOverrideSystemPrompt(e){if(!this.overrideSystemPrompt)return e;const o=this.overrideSystemPrompt;if(e.messages.some(t=>t.role==="system")){const t=e.messages.map(n=>{if(n.role==="system"){const r=typeof n.content=="string"?n.content:"";return{...n,content:`${r}
19
+
20
+ ${o}`}}return n});return{...e,messages:t}}else return{...e,messages:[{role:"system",content:o},...e.messages]}}injectBaseAgentContext(e){let o=!0,l=!0,t;const n=this.disableBaseContext;if(this.activeMode?.baseContext===!1)return e;this.activeMode?.baseContext&&(o=this.activeMode.baseContext.includeWorkingDirectory!==!1,l=this.activeMode.baseContext.includeToolCategories!==!1,t=this.activeMode.baseContext.custom);const r=t||(0,de.generateBaseAgentContext)({workingDirectory:process.cwd(),toolCategories:this.toolRegistry?this.toolRegistry.getCategories():[],disabled:n,includeWorkingDirectory:o,includeToolCategories:l});if(!r)return e;if(e.messages.some(c=>c.role==="system")){const c=e.messages.map(d=>{if(d.role==="system"){const $=typeof d.content=="string"?d.content:"";return{...d,content:`${r}
21
+
22
+ ${$}`}}return d});return{...e,messages:c}}else return{...e,messages:[{role:"system",content:r},...e.messages]}}injectToolSearchPrompt(e){if(!this.toolRegistry)return e;const o=e.messages.some(r=>r.role==="system"),l=this.toolsConfig.toolSearch?.alwaysLoadedTools??[];let t="";if(l.length>0){const r=l.map(s=>{const c=this.toolRegistry?.get(s);return c?` - **${c.name}**: ${c.description}`:null}).filter(Boolean).join(`
23
+ `);r&&(t=`
24
+
25
+ You have these tools always available:
26
+ ${r}
27
+
28
+ Use these tools directly when appropriate for the task.`)}const n=`
1006
29
  IMPORTANT: Tool Discovery Instructions
1007
30
 
1008
- You have access to a limited set of tools. If you need a tool that is not in your current list, you MUST use the 'tool.search' tool to discover it.${alwaysLoadedSection}
31
+ You have access to a limited set of tools. If you need a tool that is not in your current list, you MUST use the 'tool.search' tool to discover it.${t}
1009
32
 
1010
- ${(0, index_js_1.generateToolCategoriesPrompt)(this.toolRegistry)}
33
+ ${(0,Y.generateToolCategoriesPrompt)(this.toolRegistry)}
1011
34
 
1012
35
  When you need a tool:
1013
36
  1. Check if it's in your current tool list
@@ -1015,250 +38,6 @@ When you need a tool:
1015
38
  3. After discovering tools, you can call them directly in subsequent turns
1016
39
 
1017
40
  NEVER guess or hallucinate tool names. ALWAYS use tool.search to discover tools you don't have.
1018
- `.trim();
1019
- if (hasSystemMessage) {
1020
- // Append to existing system message
1021
- const messages = request.messages.map(m => {
1022
- if (m.role === 'system') {
1023
- const existingContent = typeof m.content === 'string' ? m.content : '';
1024
- return {
1025
- ...m,
1026
- content: `${existingContent}\n\n${toolSearchInstructions}`
1027
- };
1028
- }
1029
- return m;
1030
- });
1031
- return { ...request, messages };
1032
- }
1033
- else {
1034
- // Prepend new system message
1035
- return {
1036
- ...request,
1037
- messages: [
1038
- { role: 'system', content: toolSearchInstructions },
1039
- ...request.messages
1040
- ]
1041
- };
1042
- }
1043
- }
1044
- /**
1045
- * Execute a single tool call via the registry.
1046
- * Emits 'tool:started', 'tool:completed', and 'tool:failed' events.
1047
- */
1048
- async executeTool(toolCall) {
1049
- const startTime = Date.now();
1050
- // Emit started event
1051
- this.emit('tool:started', {
1052
- toolName: toolCall.name,
1053
- toolCallId: toolCall.id,
1054
- status: 'started',
1055
- args: toolCall.arguments,
1056
- });
1057
- (0, provider_logger_1.logInfo)(`[AIClient] Executing tool: ${toolCall.name} with args: ${(0, provider_logger_1.safePreview)(toolCall.arguments, 500)}`);
1058
- if (!this.toolRegistry) {
1059
- const error = 'No tool registry configured';
1060
- this.emit('tool:failed', {
1061
- toolName: toolCall.name,
1062
- toolCallId: toolCall.id,
1063
- status: 'failed',
1064
- error,
1065
- duration: Date.now() - startTime,
1066
- });
1067
- return JSON.stringify({ error });
1068
- }
1069
- // Special handling for tool.search (BM25 search)
1070
- if ((0, index_js_1.isToolSearchTool)(toolCall.name)) {
1071
- const result = this.executeToolSearch(toolCall.arguments);
1072
- const duration = Date.now() - startTime;
1073
- this.emit('tool:completed', {
1074
- toolName: toolCall.name,
1075
- toolCallId: toolCall.id,
1076
- status: 'completed',
1077
- result: typeof result === 'string' ? result.substring(0, 200) : JSON.stringify(result).substring(0, 200),
1078
- duration,
1079
- });
1080
- // Emit log event for tool.search
1081
- this.emit('tool:log', {
1082
- id: toolCall.id,
1083
- name: toolCall.name,
1084
- arguments: toolCall.arguments,
1085
- result,
1086
- duration,
1087
- status: 'success',
1088
- timestamp: Date.now(),
1089
- });
1090
- return result;
1091
- }
1092
- const tool = this.toolRegistry.get(toolCall.name);
1093
- if (!tool) {
1094
- (0, provider_logger_1.logWarn)(`[AIClient] Tool '${toolCall.name}' not found in registry`);
1095
- // Fuzzy match: detect common hallucination patterns
1096
- const suggestion = this.findSimilarToolName(toolCall.name);
1097
- const errorMsg = suggestion
1098
- ? `Tool '${toolCall.name}' not found. Did you mean '${suggestion}'? Use tool.search to discover available tools.`
1099
- : `Tool '${toolCall.name}' not found. Use tool.search to discover available tools.`;
1100
- this.emit('tool:failed', {
1101
- toolName: toolCall.name,
1102
- toolCallId: toolCall.id,
1103
- status: 'failed',
1104
- error: errorMsg,
1105
- duration: Date.now() - startTime,
1106
- });
1107
- return JSON.stringify({ error: errorMsg });
1108
- }
1109
- try {
1110
- const ctx = {
1111
- workspaceRoot: process.cwd(),
1112
- config: this.toolsConfig?.additionalConfigurations ?? {},
1113
- log: (msg) => (0, provider_logger_1.logInfo)(`[Tool] ${msg}`),
1114
- };
1115
- const result = await tool.execute(toolCall.arguments, ctx);
1116
- const duration = Date.now() - startTime;
1117
- // Emit completed event
1118
- this.emit('tool:completed', {
1119
- toolName: toolCall.name,
1120
- toolCallId: toolCall.id,
1121
- status: 'completed',
1122
- result: typeof result === 'string' ? result.substring(0, 200) : JSON.stringify(result).substring(0, 200),
1123
- duration,
1124
- });
1125
- // Emit log event with full details for history/logging
1126
- this.emit('tool:log', {
1127
- id: toolCall.id,
1128
- name: toolCall.name,
1129
- arguments: toolCall.arguments,
1130
- result,
1131
- duration,
1132
- status: 'success',
1133
- timestamp: Date.now(),
1134
- });
1135
- (0, provider_logger_1.logInfo)(`[AIClient] Tool ${toolCall.name} executed successfully in ${duration}ms result_len=${result?.length ?? 0}`);
1136
- if ((0, provider_logger_1.shouldLog)('debug')) {
1137
- (0, provider_logger_1.logDebug)(`[AIClient] Tool ${toolCall.name} result_preview=${(0, provider_logger_1.safePreview)(result, 400)}`);
1138
- }
1139
- return result;
1140
- }
1141
- catch (error) {
1142
- const duration = Date.now() - startTime;
1143
- const errorMsg = error.message || 'Tool execution failed';
1144
- // Emit failed event
1145
- this.emit('tool:failed', {
1146
- toolName: toolCall.name,
1147
- toolCallId: toolCall.id,
1148
- status: 'failed',
1149
- error: errorMsg,
1150
- duration,
1151
- });
1152
- // Emit log event for errors too
1153
- this.emit('tool:log', {
1154
- id: toolCall.id,
1155
- name: toolCall.name,
1156
- arguments: toolCall.arguments,
1157
- result: JSON.stringify({ error: errorMsg }),
1158
- duration,
1159
- status: 'error',
1160
- timestamp: Date.now(),
1161
- });
1162
- (0, provider_logger_1.logError)(`[AIClient] Tool ${toolCall.name} failed: ${(0, provider_logger_1.safePreview)(errorMsg, 300)}`);
1163
- return JSON.stringify({ error: errorMsg });
1164
- }
1165
- }
1166
- /**
1167
- * Find similar tool name to detect hallucinations.
1168
- * Detects common patterns like underscore vs dot (fs_delete_file vs fs.delete_file).
1169
- */
1170
- findSimilarToolName(hallucinatedName) {
1171
- if (!this.toolRegistry)
1172
- return null;
1173
- const allTools = this.toolRegistry.getAll();
1174
- // Pattern 1: underscore → dot (fs_delete_file → fs.delete_file)
1175
- const withDot = hallucinatedName.replace(/_/g, '.');
1176
- if (allTools.some(t => t.name === withDot)) {
1177
- return withDot;
1178
- }
1179
- // Pattern 2: dot → underscore (fs.delete.file → fs.delete_file)
1180
- const withUnderscore = hallucinatedName.replace(/\./g, '_');
1181
- if (allTools.some(t => t.name === withUnderscore)) {
1182
- return withUnderscore;
1183
- }
1184
- // Pattern 3: camelCase → dot.case (fsDeleteFile → fs.delete_file)
1185
- const fromCamelCase = hallucinatedName
1186
- .replace(/([a-z])([A-Z])/g, '$1_$2')
1187
- .toLowerCase()
1188
- .replace(/_/g, '.');
1189
- if (allTools.some(t => t.name === fromCamelCase)) {
1190
- return fromCamelCase;
1191
- }
1192
- // Pattern 4: Levenshtein distance for typos
1193
- let bestMatch = null;
1194
- let minDistance = Infinity;
1195
- for (const tool of allTools) {
1196
- const distance = this.levenshteinDistance(hallucinatedName.toLowerCase(), tool.name.toLowerCase());
1197
- // Only suggest if very close (1-2 character difference)
1198
- if (distance <= 2 && distance < minDistance) {
1199
- minDistance = distance;
1200
- bestMatch = tool.name;
1201
- }
1202
- }
1203
- return bestMatch;
1204
- }
1205
- /**
1206
- * Calculate Levenshtein distance between two strings.
1207
- */
1208
- levenshteinDistance(a, b) {
1209
- const matrix = [];
1210
- for (let i = 0; i <= b.length; i++) {
1211
- matrix[i] = [i];
1212
- }
1213
- for (let j = 0; j <= a.length; j++) {
1214
- matrix[0][j] = j;
1215
- }
1216
- for (let i = 1; i <= b.length; i++) {
1217
- for (let j = 1; j <= a.length; j++) {
1218
- if (b.charAt(i - 1) === a.charAt(j - 1)) {
1219
- matrix[i][j] = matrix[i - 1][j - 1];
1220
- }
1221
- else {
1222
- matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
1223
- }
1224
- }
1225
- }
1226
- return matrix[b.length][a.length];
1227
- }
1228
- /**
1229
- * Execute tool.search using BM25 engine.
1230
- */
1231
- executeToolSearch(args) {
1232
- const { query, category } = args;
1233
- const limit = this.toolsConfig.toolSearch?.searchResultLimit ?? 5;
1234
- (0, provider_logger_1.logInfo)(`[AIClient] Executing tool.search: query="${query}" category=${category || 'all'} limit=${limit}`);
1235
- const results = this.bm25Engine.search(query, { limit, category });
1236
- // Record discovered tools in the cache
1237
- const toolNames = results.map(r => r.toolName);
1238
- this.toolRouter.getDiscoveryCache().recordDiscovery(query, toolNames);
1239
- (0, provider_logger_1.logDebug)(`[AIClient] tool.search found ${results.length} tools: ${toolNames.join(', ') || 'none'}`);
1240
- return JSON.stringify({
1241
- query,
1242
- found: results.length,
1243
- tools: results.map(r => ({
1244
- name: r.tool.name,
1245
- displayName: r.tool.displayName,
1246
- description: r.tool.description,
1247
- category: r.tool.category,
1248
- parameters: r.tool.parameters,
1249
- relevanceScore: Math.round(r.score * 100) / 100,
1250
- })),
1251
- hint: results.length > 0
1252
- ? `Found ${results.length} tools. You can now call any of these tools directly.`
1253
- : `No tools found for "${query}". Try a different search term.`,
1254
- });
1255
- }
1256
- wrapError(error) {
1257
- if (error instanceof errors_1.SDKError) {
1258
- return error;
1259
- }
1260
- return new errors_1.ProviderError(error.message || 'Unknown provider error', 'UNKNOWN_PROVIDER_ERROR', 500, error);
1261
- }
1262
- }
1263
- exports.AIClient = AIClient;
1264
- //# sourceMappingURL=index.js.map
41
+ `.trim();if(o){const r=e.messages.map(s=>{if(s.role==="system"){const c=typeof s.content=="string"?s.content:"";return{...s,content:`${c}
42
+
43
+ ${n}`}}return s});return{...e,messages:r}}else return{...e,messages:[{role:"system",content:n},...e.messages]}}async executeTool(e){const o=Date.now();if(this.emit("tool:started",{toolName:e.name,toolCallId:e.id,status:"started",args:e.arguments}),(0,i.logInfo)(`[AIClient] Executing tool: ${e.name} with args: ${(0,i.safePreview)(e.arguments,500)}`),!this.toolRegistry){const t="No tool registry configured";return this.emit("tool:failed",{toolName:e.name,toolCallId:e.id,status:"failed",error:t,duration:Date.now()-o}),JSON.stringify({error:t})}if((0,Y.isToolSearchTool)(e.name)){const t=this.executeToolSearch(e.arguments),n=Date.now()-o;return this.emit("tool:completed",{toolName:e.name,toolCallId:e.id,status:"completed",result:typeof t=="string"?t.substring(0,200):JSON.stringify(t).substring(0,200),duration:n}),this.emit("tool:log",{id:e.id,name:e.name,arguments:e.arguments,result:t,duration:n,status:"success",timestamp:Date.now()}),t}const l=this.toolRegistry.get(e.name);if(!l){(0,i.logWarn)(`[AIClient] Tool '${e.name}' not found in registry`);const t=this.findSimilarToolName(e.name),n=t?`Tool '${e.name}' not found. Did you mean '${t}'? Use tool.search to discover available tools.`:`Tool '${e.name}' not found. Use tool.search to discover available tools.`;return this.emit("tool:failed",{toolName:e.name,toolCallId:e.id,status:"failed",error:n,duration:Date.now()-o}),JSON.stringify({error:n})}try{const t={workspaceRoot:process.cwd(),config:this.toolsConfig?.additionalConfigurations??{},log:C(s=>(0,i.logInfo)(`[Tool] ${s}`),"log")},n=await l.execute(e.arguments,t),r=Date.now()-o;return this.emit("tool:completed",{toolName:e.name,toolCallId:e.id,status:"completed",result:typeof n=="string"?n.substring(0,200):JSON.stringify(n).substring(0,200),duration:r}),this.emit("tool:log",{id:e.id,name:e.name,arguments:e.arguments,result:n,duration:r,status:"success",timestamp:Date.now()}),(0,i.logInfo)(`[AIClient] Tool ${e.name} executed successfully in ${r}ms result_len=${n?.length??0}`),(0,i.shouldLog)("debug")&&(0,i.logDebug)(`[AIClient] Tool ${e.name} result_preview=${(0,i.safePreview)(n,400)}`),n}catch(t){const n=Date.now()-o,r=t.message||"Tool execution failed";return this.emit("tool:failed",{toolName:e.name,toolCallId:e.id,status:"failed",error:r,duration:n}),this.emit("tool:log",{id:e.id,name:e.name,arguments:e.arguments,result:JSON.stringify({error:r}),duration:n,status:"error",timestamp:Date.now()}),(0,i.logError)(`[AIClient] Tool ${e.name} failed: ${(0,i.safePreview)(r,300)}`),JSON.stringify({error:r})}}findSimilarToolName(e){if(!this.toolRegistry)return null;const o=this.toolRegistry.getAll(),l=e.replace(/_/g,".");if(o.some(c=>c.name===l))return l;const t=e.replace(/\./g,"_");if(o.some(c=>c.name===t))return t;const n=e.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase().replace(/_/g,".");if(o.some(c=>c.name===n))return n;let r=null,s=1/0;for(const c of o){const d=this.levenshteinDistance(e.toLowerCase(),c.name.toLowerCase());d<=2&&d<s&&(s=d,r=c.name)}return r}levenshteinDistance(e,o){const l=[];for(let t=0;t<=o.length;t++)l[t]=[t];for(let t=0;t<=e.length;t++)l[0][t]=t;for(let t=1;t<=o.length;t++)for(let n=1;n<=e.length;n++)o.charAt(t-1)===e.charAt(n-1)?l[t][n]=l[t-1][n-1]:l[t][n]=Math.min(l[t-1][n-1]+1,l[t][n-1]+1,l[t-1][n]+1);return l[o.length][e.length]}executeToolSearch(e){const{query:o,category:l}=e,t=this.toolsConfig.toolSearch?.searchResultLimit??5;(0,i.logInfo)(`[AIClient] Executing tool.search: query="${o}" category=${l||"all"} limit=${t}`);const n=this.bm25Engine.search(o,{limit:t,category:l}),r=n.map(s=>s.toolName);return this.toolRouter.getDiscoveryCache().recordDiscovery(o,r),(0,i.logDebug)(`[AIClient] tool.search found ${n.length} tools: ${r.join(", ")||"none"}`),JSON.stringify({query:o,found:n.length,tools:n.map(s=>({name:s.tool.name,displayName:s.tool.displayName,description:s.tool.description,category:s.tool.category,parameters:s.tool.parameters,relevanceScore:Math.round(s.score*100)/100})),hint:n.length>0?`Found ${n.length} tools. You can now call any of these tools directly.`:`No tools found for "${o}". Try a different search term.`})}wrapError(e){return e instanceof U.SDKError?e:new U.ProviderError(e.message||"Unknown provider error","UNKNOWN_PROVIDER_ERROR",500,e)}}exports.AIClient=fe;