@vinhnt-sdk/core 0.1.0 → 1.0.0

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 (334) hide show
  1. package/README.md +13 -20
  2. package/dist/agent/create-agent-tool.d.ts +1 -1
  3. package/dist/agent/create-agent-tool.d.ts.map +1 -1
  4. package/dist/agent/create-agent-tool.js +1 -1
  5. package/dist/agent/create-agent-tool.js.map +1 -1
  6. package/dist/agent/delegate-batch-tool.d.ts +1 -1
  7. package/dist/agent/delegate-batch-tool.d.ts.map +1 -1
  8. package/dist/agent/delegate-batch-tool.js +1 -1
  9. package/dist/agent/delegate-batch-tool.js.map +1 -1
  10. package/dist/agent/delegate-tool.d.ts +1 -1
  11. package/dist/agent/delegate-tool.js +1 -1
  12. package/dist/agent/delegate-tool.js.map +1 -1
  13. package/dist/agent/list-agents-tool.d.ts +1 -1
  14. package/dist/agent/list-agents-tool.d.ts.map +1 -1
  15. package/dist/agent/list-agents-tool.js +1 -1
  16. package/dist/agent/list-agents-tool.js.map +1 -1
  17. package/dist/agent/spawn-agent-tool.d.ts +1 -1
  18. package/dist/agent/spawn-agent-tool.d.ts.map +1 -1
  19. package/dist/agent/spawn-agent-tool.js +1 -1
  20. package/dist/agent/spawn-agent-tool.js.map +1 -1
  21. package/dist/event-bus/global-bus.d.ts +3 -1
  22. package/dist/event-bus/global-bus.d.ts.map +1 -1
  23. package/dist/event-bus/global-bus.js +7 -1
  24. package/dist/event-bus/global-bus.js.map +1 -1
  25. package/dist/event-bus/in-memory-bus.d.ts.map +1 -1
  26. package/dist/event-bus/in-memory-bus.js +10 -2
  27. package/dist/event-bus/in-memory-bus.js.map +1 -1
  28. package/dist/fakes/fake-model.d.ts +8 -0
  29. package/dist/fakes/fake-model.d.ts.map +1 -1
  30. package/dist/fakes/fake-model.js +8 -0
  31. package/dist/fakes/fake-model.js.map +1 -1
  32. package/dist/fakes/fake-tool-context.d.ts +1 -1
  33. package/dist/fakes/fake-tool-context.d.ts.map +1 -1
  34. package/dist/fakes/fake-tool.d.ts +1 -3
  35. package/dist/fakes/fake-tool.d.ts.map +1 -1
  36. package/dist/fakes/fake-tool.js.map +1 -1
  37. package/dist/index.d.ts +36 -32
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +19 -14
  40. package/dist/index.js.map +1 -1
  41. package/dist/kernel/approval-handler.d.ts +1 -1
  42. package/dist/kernel/approval-handler.d.ts.map +1 -1
  43. package/dist/kernel/kernel-types.d.ts +115 -17
  44. package/dist/kernel/kernel-types.d.ts.map +1 -1
  45. package/dist/kernel/kernel-types.js +64 -1
  46. package/dist/kernel/kernel-types.js.map +1 -1
  47. package/dist/kernel/kernel.d.ts +20 -3
  48. package/dist/kernel/kernel.d.ts.map +1 -1
  49. package/dist/kernel/kernel.js +108 -67
  50. package/dist/kernel/kernel.js.map +1 -1
  51. package/dist/kernel/lifecycle-manager.d.ts +28 -0
  52. package/dist/kernel/lifecycle-manager.d.ts.map +1 -0
  53. package/dist/kernel/lifecycle-manager.js +51 -0
  54. package/dist/kernel/lifecycle-manager.js.map +1 -0
  55. package/dist/kernel/model-caller.d.ts +1 -1
  56. package/dist/kernel/model-caller.d.ts.map +1 -1
  57. package/dist/kernel/permission-gate.d.ts +1 -2
  58. package/dist/kernel/permission-gate.d.ts.map +1 -1
  59. package/dist/kernel/permission-gate.js +1 -1
  60. package/dist/kernel/permission-gate.js.map +1 -1
  61. package/dist/kernel/run-loop.d.ts.map +1 -1
  62. package/dist/kernel/run-loop.js +15 -3
  63. package/dist/kernel/run-loop.js.map +1 -1
  64. package/dist/kernel/self-correction.d.ts +2 -2
  65. package/dist/kernel/self-correction.d.ts.map +1 -1
  66. package/dist/kernel/step-executor.d.ts +1 -2
  67. package/dist/kernel/step-executor.d.ts.map +1 -1
  68. package/dist/kernel/step-executor.js +5 -6
  69. package/dist/kernel/step-executor.js.map +1 -1
  70. package/dist/kernel/tool-context-builder.d.ts +1 -1
  71. package/dist/kernel/tool-context-builder.d.ts.map +1 -1
  72. package/dist/kernel/tool-error-router.d.ts +1 -1
  73. package/dist/kernel/tool-error-router.d.ts.map +1 -1
  74. package/dist/logger.js +1 -1
  75. package/dist/logger.js.map +1 -1
  76. package/dist/model.d.ts +7 -80
  77. package/dist/model.d.ts.map +1 -1
  78. package/dist/model.js.map +1 -1
  79. package/dist/plugin/manager.d.ts +2 -2
  80. package/dist/plugin/manager.d.ts.map +1 -1
  81. package/dist/plugin/plugin-tool-provider.d.ts +1 -3
  82. package/dist/plugin/plugin-tool-provider.d.ts.map +1 -1
  83. package/dist/plugin/plugin-tool-provider.js.map +1 -1
  84. package/dist/plugin.d.ts +2 -2
  85. package/dist/plugin.d.ts.map +1 -1
  86. package/dist/session/compaction.d.ts +5 -8
  87. package/dist/session/compaction.d.ts.map +1 -1
  88. package/dist/session/store.d.ts +5 -44
  89. package/dist/session/store.d.ts.map +1 -1
  90. package/dist/skill/create-skill-tool.d.ts +1 -1
  91. package/dist/skill/create-skill-tool.d.ts.map +1 -1
  92. package/dist/skill/create-skill-tool.js +1 -1
  93. package/dist/skill/create-skill-tool.js.map +1 -1
  94. package/dist/skill/skill-tool.d.ts +2 -2
  95. package/dist/skill/skill-tool.d.ts.map +1 -1
  96. package/dist/skill/skill-tool.js +1 -1
  97. package/dist/skill/skill-tool.js.map +1 -1
  98. package/dist/system-context/prompts/index.d.ts +57 -1
  99. package/dist/system-context/prompts/index.d.ts.map +1 -1
  100. package/dist/system-context/prompts/index.js +69 -13
  101. package/dist/system-context/prompts/index.js.map +1 -1
  102. package/dist/tool/bridge.d.ts +1 -1
  103. package/dist/tool/bridge.d.ts.map +1 -1
  104. package/dist/tool/index.d.ts +37 -42
  105. package/dist/tool/index.d.ts.map +1 -1
  106. package/dist/tool/index.js +25 -30
  107. package/dist/tool/index.js.map +1 -1
  108. package/dist/tool/provider-helpers.d.ts +2 -3
  109. package/dist/tool/provider-helpers.d.ts.map +1 -1
  110. package/dist/tool/provider-helpers.js +2 -3
  111. package/dist/tool/provider-helpers.js.map +1 -1
  112. package/dist/tool/runtime.d.ts +4 -4
  113. package/dist/tool/runtime.d.ts.map +1 -1
  114. package/dist/tool/runtime.js +2 -2
  115. package/dist/tool/runtime.js.map +1 -1
  116. package/dist/workflow/agent-graph.d.ts +34 -0
  117. package/dist/workflow/agent-graph.d.ts.map +1 -0
  118. package/dist/workflow/agent-graph.js +145 -0
  119. package/dist/workflow/agent-graph.js.map +1 -0
  120. package/dist/workflow/index.d.ts +4 -0
  121. package/dist/workflow/index.d.ts.map +1 -0
  122. package/dist/workflow/index.js +3 -0
  123. package/dist/workflow/index.js.map +1 -0
  124. package/dist/workflow/types.d.ts +94 -0
  125. package/dist/workflow/types.d.ts.map +1 -0
  126. package/dist/{knowledge → workflow}/types.js.map +1 -1
  127. package/dist/workflow/workflow-helpers.d.ts +35 -0
  128. package/dist/workflow/workflow-helpers.d.ts.map +1 -0
  129. package/dist/workflow/workflow-helpers.js +66 -0
  130. package/dist/workflow/workflow-helpers.js.map +1 -0
  131. package/package.json +5 -2
  132. package/dist/agent/dynamic-registry.d.ts +0 -30
  133. package/dist/agent/dynamic-registry.d.ts.map +0 -1
  134. package/dist/agent/dynamic-registry.js +0 -87
  135. package/dist/agent/dynamic-registry.js.map +0 -1
  136. package/dist/crypto/password.d.ts +0 -11
  137. package/dist/crypto/password.d.ts.map +0 -1
  138. package/dist/crypto/password.js +0 -44
  139. package/dist/crypto/password.js.map +0 -1
  140. package/dist/internal/index.d.ts +0 -5
  141. package/dist/internal/index.d.ts.map +0 -1
  142. package/dist/internal/index.js +0 -8
  143. package/dist/internal/index.js.map +0 -1
  144. package/dist/kernel/context-manager.d.ts +0 -29
  145. package/dist/kernel/context-manager.d.ts.map +0 -1
  146. package/dist/kernel/context-manager.js +0 -64
  147. package/dist/kernel/context-manager.js.map +0 -1
  148. package/dist/kernel/max-steps-prompt.d.ts +0 -3
  149. package/dist/kernel/max-steps-prompt.d.ts.map +0 -1
  150. package/dist/kernel/max-steps-prompt.js +0 -13
  151. package/dist/kernel/max-steps-prompt.js.map +0 -1
  152. package/dist/kernel/run-orchestrator.d.ts +0 -66
  153. package/dist/kernel/run-orchestrator.d.ts.map +0 -1
  154. package/dist/kernel/run-orchestrator.js +0 -182
  155. package/dist/kernel/run-orchestrator.js.map +0 -1
  156. package/dist/kernel/step-runner.d.ts +0 -57
  157. package/dist/kernel/step-runner.d.ts.map +0 -1
  158. package/dist/kernel/step-runner.js +0 -124
  159. package/dist/kernel/step-runner.js.map +0 -1
  160. package/dist/knowledge/approval.d.ts +0 -19
  161. package/dist/knowledge/approval.d.ts.map +0 -1
  162. package/dist/knowledge/approval.js +0 -60
  163. package/dist/knowledge/approval.js.map +0 -1
  164. package/dist/knowledge/compressor.d.ts +0 -46
  165. package/dist/knowledge/compressor.d.ts.map +0 -1
  166. package/dist/knowledge/compressor.js +0 -86
  167. package/dist/knowledge/compressor.js.map +0 -1
  168. package/dist/knowledge/index.d.ts +0 -16
  169. package/dist/knowledge/index.d.ts.map +0 -1
  170. package/dist/knowledge/index.js +0 -10
  171. package/dist/knowledge/index.js.map +0 -1
  172. package/dist/knowledge/learning-engine.d.ts +0 -47
  173. package/dist/knowledge/learning-engine.d.ts.map +0 -1
  174. package/dist/knowledge/learning-engine.js +0 -83
  175. package/dist/knowledge/learning-engine.js.map +0 -1
  176. package/dist/knowledge/llm-compactor.d.ts +0 -25
  177. package/dist/knowledge/llm-compactor.d.ts.map +0 -1
  178. package/dist/knowledge/llm-compactor.js +0 -79
  179. package/dist/knowledge/llm-compactor.js.map +0 -1
  180. package/dist/knowledge/memory-bounded.d.ts +0 -21
  181. package/dist/knowledge/memory-bounded.d.ts.map +0 -1
  182. package/dist/knowledge/memory-bounded.js +0 -63
  183. package/dist/knowledge/memory-bounded.js.map +0 -1
  184. package/dist/knowledge/memory.d.ts +0 -21
  185. package/dist/knowledge/memory.d.ts.map +0 -1
  186. package/dist/knowledge/memory.js +0 -85
  187. package/dist/knowledge/memory.js.map +0 -1
  188. package/dist/knowledge/prompt-builder.d.ts +0 -11
  189. package/dist/knowledge/prompt-builder.d.ts.map +0 -1
  190. package/dist/knowledge/prompt-builder.js +0 -23
  191. package/dist/knowledge/prompt-builder.js.map +0 -1
  192. package/dist/knowledge/review.d.ts +0 -26
  193. package/dist/knowledge/review.d.ts.map +0 -1
  194. package/dist/knowledge/review.js +0 -69
  195. package/dist/knowledge/review.js.map +0 -1
  196. package/dist/knowledge/tool.d.ts +0 -4
  197. package/dist/knowledge/tool.d.ts.map +0 -1
  198. package/dist/knowledge/tool.js +0 -27
  199. package/dist/knowledge/tool.js.map +0 -1
  200. package/dist/knowledge/types.d.ts +0 -27
  201. package/dist/knowledge/types.d.ts.map +0 -1
  202. package/dist/tool/arity.d.ts +0 -22
  203. package/dist/tool/arity.d.ts.map +0 -1
  204. package/dist/tool/arity.js +0 -96
  205. package/dist/tool/arity.js.map +0 -1
  206. package/dist/tool/context.d.ts +0 -43
  207. package/dist/tool/context.d.ts.map +0 -1
  208. package/dist/tool/context.js +0 -2
  209. package/dist/tool/context.js.map +0 -1
  210. package/dist/tool/define-tool.d.ts +0 -45
  211. package/dist/tool/define-tool.d.ts.map +0 -1
  212. package/dist/tool/define-tool.js +0 -120
  213. package/dist/tool/define-tool.js.map +0 -1
  214. package/dist/tool/definitions.d.ts +0 -22
  215. package/dist/tool/definitions.d.ts.map +0 -1
  216. package/dist/tool/definitions.js +0 -2
  217. package/dist/tool/definitions.js.map +0 -1
  218. package/dist/tool/description-lint.d.ts +0 -25
  219. package/dist/tool/description-lint.d.ts.map +0 -1
  220. package/dist/tool/description-lint.js +0 -90
  221. package/dist/tool/description-lint.js.map +0 -1
  222. package/dist/tool/diff.d.ts +0 -7
  223. package/dist/tool/diff.d.ts.map +0 -1
  224. package/dist/tool/diff.js +0 -26
  225. package/dist/tool/diff.js.map +0 -1
  226. package/dist/tool/domain.d.ts +0 -39
  227. package/dist/tool/domain.d.ts.map +0 -1
  228. package/dist/tool/domain.js +0 -20
  229. package/dist/tool/domain.js.map +0 -1
  230. package/dist/tool/file-history.d.ts +0 -43
  231. package/dist/tool/file-history.d.ts.map +0 -1
  232. package/dist/tool/file-history.js +0 -55
  233. package/dist/tool/file-history.js.map +0 -1
  234. package/dist/tool/file-tools.d.ts +0 -51
  235. package/dist/tool/file-tools.d.ts.map +0 -1
  236. package/dist/tool/file-tools.js +0 -534
  237. package/dist/tool/file-tools.js.map +0 -1
  238. package/dist/tool/git-tools.d.ts +0 -8
  239. package/dist/tool/git-tools.d.ts.map +0 -1
  240. package/dist/tool/git-tools.js +0 -114
  241. package/dist/tool/git-tools.js.map +0 -1
  242. package/dist/tool/history-hook.d.ts +0 -4
  243. package/dist/tool/history-hook.d.ts.map +0 -1
  244. package/dist/tool/history-hook.js +0 -62
  245. package/dist/tool/history-hook.js.map +0 -1
  246. package/dist/tool/image-tools.d.ts +0 -11
  247. package/dist/tool/image-tools.d.ts.map +0 -1
  248. package/dist/tool/image-tools.js +0 -55
  249. package/dist/tool/image-tools.js.map +0 -1
  250. package/dist/tool/in-memory-tool-registry.d.ts +0 -13
  251. package/dist/tool/in-memory-tool-registry.d.ts.map +0 -1
  252. package/dist/tool/in-memory-tool-registry.js +0 -39
  253. package/dist/tool/in-memory-tool-registry.js.map +0 -1
  254. package/dist/tool/json-schema.d.ts +0 -22
  255. package/dist/tool/json-schema.d.ts.map +0 -1
  256. package/dist/tool/json-schema.js +0 -2
  257. package/dist/tool/json-schema.js.map +0 -1
  258. package/dist/tool/lazy-registry.d.ts +0 -23
  259. package/dist/tool/lazy-registry.d.ts.map +0 -1
  260. package/dist/tool/lazy-registry.js +0 -64
  261. package/dist/tool/lazy-registry.js.map +0 -1
  262. package/dist/tool/policy.d.ts +0 -5
  263. package/dist/tool/policy.d.ts.map +0 -1
  264. package/dist/tool/policy.js +0 -2
  265. package/dist/tool/policy.js.map +0 -1
  266. package/dist/tool/provider.d.ts +0 -80
  267. package/dist/tool/provider.d.ts.map +0 -1
  268. package/dist/tool/provider.js +0 -96
  269. package/dist/tool/provider.js.map +0 -1
  270. package/dist/tool/providers/agent-provider.d.ts +0 -26
  271. package/dist/tool/providers/agent-provider.d.ts.map +0 -1
  272. package/dist/tool/providers/agent-provider.js +0 -42
  273. package/dist/tool/providers/agent-provider.js.map +0 -1
  274. package/dist/tool/providers/builtin-provider.d.ts +0 -28
  275. package/dist/tool/providers/builtin-provider.d.ts.map +0 -1
  276. package/dist/tool/providers/builtin-provider.js +0 -67
  277. package/dist/tool/providers/builtin-provider.js.map +0 -1
  278. package/dist/tool/providers/file-loader.d.ts +0 -47
  279. package/dist/tool/providers/file-loader.d.ts.map +0 -1
  280. package/dist/tool/providers/file-loader.js +0 -120
  281. package/dist/tool/providers/file-loader.js.map +0 -1
  282. package/dist/tool/providers/index.d.ts +0 -8
  283. package/dist/tool/providers/index.d.ts.map +0 -1
  284. package/dist/tool/providers/index.js +0 -8
  285. package/dist/tool/providers/index.js.map +0 -1
  286. package/dist/tool/providers/skill-provider.d.ts +0 -23
  287. package/dist/tool/providers/skill-provider.d.ts.map +0 -1
  288. package/dist/tool/providers/skill-provider.js +0 -28
  289. package/dist/tool/providers/skill-provider.js.map +0 -1
  290. package/dist/tool/question-tool.d.ts +0 -15
  291. package/dist/tool/question-tool.d.ts.map +0 -1
  292. package/dist/tool/question-tool.js +0 -51
  293. package/dist/tool/question-tool.js.map +0 -1
  294. package/dist/tool/read-tracker.d.ts +0 -8
  295. package/dist/tool/read-tracker.d.ts.map +0 -1
  296. package/dist/tool/read-tracker.js +0 -33
  297. package/dist/tool/read-tracker.js.map +0 -1
  298. package/dist/tool/registry.d.ts +0 -58
  299. package/dist/tool/registry.d.ts.map +0 -1
  300. package/dist/tool/registry.js +0 -128
  301. package/dist/tool/registry.js.map +0 -1
  302. package/dist/tool/sandbox.d.ts +0 -12
  303. package/dist/tool/sandbox.d.ts.map +0 -1
  304. package/dist/tool/sandbox.js +0 -72
  305. package/dist/tool/sandbox.js.map +0 -1
  306. package/dist/tool/search-tools.d.ts +0 -6
  307. package/dist/tool/search-tools.d.ts.map +0 -1
  308. package/dist/tool/search-tools.js +0 -118
  309. package/dist/tool/search-tools.js.map +0 -1
  310. package/dist/tool/shell-tool.d.ts +0 -19
  311. package/dist/tool/shell-tool.d.ts.map +0 -1
  312. package/dist/tool/shell-tool.js +0 -139
  313. package/dist/tool/shell-tool.js.map +0 -1
  314. package/dist/tool/todo-tool.d.ts +0 -2
  315. package/dist/tool/todo-tool.d.ts.map +0 -1
  316. package/dist/tool/todo-tool.js +0 -121
  317. package/dist/tool/todo-tool.js.map +0 -1
  318. package/dist/tool/tool-registry-types.d.ts +0 -14
  319. package/dist/tool/tool-registry-types.d.ts.map +0 -1
  320. package/dist/tool/tool-registry-types.js +0 -2
  321. package/dist/tool/tool-registry-types.js.map +0 -1
  322. package/dist/tool/validate.d.ts +0 -9
  323. package/dist/tool/validate.d.ts.map +0 -1
  324. package/dist/tool/validate.js +0 -26
  325. package/dist/tool/validate.js.map +0 -1
  326. package/dist/tool/web-search-tool.d.ts +0 -24
  327. package/dist/tool/web-search-tool.d.ts.map +0 -1
  328. package/dist/tool/web-search-tool.js +0 -66
  329. package/dist/tool/web-search-tool.js.map +0 -1
  330. package/dist/tool/web-tools.d.ts +0 -10
  331. package/dist/tool/web-tools.d.ts.map +0 -1
  332. package/dist/tool/web-tools.js +0 -61
  333. package/dist/tool/web-tools.js.map +0 -1
  334. /package/dist/{knowledge → workflow}/types.js +0 -0
@@ -1,33 +0,0 @@
1
- import { stat } from "node:fs/promises";
2
- import { ToolPermissionDenied } from "@vinhnt-sdk/schema";
3
- export class FileReadTracker {
4
- records = new Map();
5
- trackRead(filePath, mtimeMs) {
6
- this.records.set(filePath, { readAt: Date.now(), mtimeMs });
7
- }
8
- async assertWasRead(filePath) {
9
- const record = this.records.get(filePath);
10
- if (!record) {
11
- throw new ToolPermissionDenied("write_file", `File "${filePath}" has not been read before writing. Use read_file first.`);
12
- }
13
- try {
14
- const st = await stat(filePath);
15
- if (st.mtimeMs !== record.mtimeMs) {
16
- this.records.delete(filePath);
17
- throw new ToolPermissionDenied("write_file", `File "${filePath}" has been modified externally since it was last read. Read it again before writing.`);
18
- }
19
- }
20
- catch (err) {
21
- if (err instanceof ToolPermissionDenied)
22
- throw err;
23
- this.records.delete(filePath);
24
- }
25
- }
26
- clear(filePath) {
27
- this.records.delete(filePath);
28
- }
29
- reset() {
30
- this.records.clear();
31
- }
32
- }
33
- //# sourceMappingURL=read-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-tracker.js","sourceRoot":"","sources":["../../src/tool/read-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAO1D,MAAM,OAAO,eAAe;IAClB,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEhD,SAAS,CAAC,QAAgB,EAAE,OAAe;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,oBAAoB,CAC5B,YAAY,EACZ,SAAS,QAAQ,0DAA0D,CAC5E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9B,MAAM,IAAI,oBAAoB,CAC5B,YAAY,EACZ,SAAS,QAAQ,sFAAsF,CACxG,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,oBAAoB;gBAAE,MAAM,GAAG,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAgB;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -1,58 +0,0 @@
1
- import type { ToolDefinition, ToolContext, ToolRisk } from "./definitions.js";
2
- import type { DomainManifest, DomainSummary } from "./domain.js";
3
- export type ToolFilter = {
4
- risk?: ToolRisk;
5
- ids?: string[];
6
- pattern?: string;
7
- };
8
- /** Minimal permission rule relevant for tool filtering at the tool boundary. */
9
- export interface ToolPermissionRule {
10
- /** Tool id or wildcard pattern (e.g. "coding.*", "*"). */
11
- action: string;
12
- effect: "allow" | "deny" | "ask";
13
- }
14
- export interface ToolMaterialization {
15
- /** Provider-facing definitions the model is ALLOWED to see/invoke. */
16
- definitions: readonly ToolDefinition[];
17
- /** Tool definitions that were denied by permission rules. */
18
- denied: readonly ToolDefinition[];
19
- /** Resolve one tool call: validate args and execute. */
20
- settle(input: {
21
- name: string;
22
- args: unknown;
23
- ctx?: ToolContext;
24
- }): Promise<unknown>;
25
- /** Lookup a tool definition by ID from the allowed set. */
26
- getTool(id: string): ToolDefinition | undefined;
27
- }
28
- export declare class ToolRegistry {
29
- protected readonly tools: Map<string, ToolDefinition<unknown, unknown>>;
30
- protected readonly domains: Map<string, DomainManifest>;
31
- register(tool: ToolDefinition): void;
32
- /** Register a named domain and its tool membership (metadata only — does not register the tools). */
33
- registerDomain(manifest: DomainManifest): void;
34
- getDomains(): readonly DomainManifest[];
35
- /** Resolve the domain id a tool belongs to, or undefined if it is a core tool. */
36
- domainFor(id: string): string | undefined;
37
- /** Get all registered domain manifests. */
38
- listDomains(): readonly DomainManifest[];
39
- /** Get domain summaries for UI/API consumption. */
40
- domainSummaries(): DomainSummary[];
41
- /** Get tools belonging to a specific domain. */
42
- toolsForDomain(domainId: string): readonly ToolDefinition[];
43
- unregister(id: string): boolean;
44
- get(id: string): ToolDefinition | undefined;
45
- list(filter?: ToolFilter): readonly ToolDefinition[];
46
- count(): number;
47
- /** Get a tool by ID, throwing a typed error if not found */
48
- getOrThrow(id: string): ToolDefinition;
49
- /**
50
- * Materialize the tool set for a given permission ruleset: drop tools the
51
- * model must not see (wholly-denied), and return a `settle` that validates
52
- * and executes a single tool call. Defaults to exposing every registered tool.
53
- */
54
- materialize(permissions?: readonly ToolPermissionRule[]): ToolMaterialization;
55
- /** Remove tools whose rule is wholly denied (deny "*" / deny this tool). */
56
- private filterByRules;
57
- }
58
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tool/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG9E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IACvC,6DAA6D;IAC7D,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAClC,wDAAwD;IACxD,MAAM,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF,2DAA2D;IAC3D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;CACjD;AAED,qBAAa,YAAY;IACvB,SAAS,CAAC,QAAQ,CAAC,KAAK,gDAAqC;IAC7D,SAAS,CAAC,QAAQ,CAAC,OAAO,8BAAqC;IAE/D,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpC,qGAAqG;IACrG,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAI9C,UAAU,IAAI,SAAS,cAAc,EAAE;IAIvC,kFAAkF;IAClF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOzC,2CAA2C;IAC3C,WAAW,IAAI,SAAS,cAAc,EAAE;IAIxC,mDAAmD;IACnD,eAAe,IAAI,aAAa,EAAE;IAIlC,gDAAgD;IAChD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE;IAK3D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI3C,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,cAAc,EAAE;IAWpD,KAAK,IAAI,MAAM;IAIf,4DAA4D;IAC5D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc;IAMtC;;;;OAIG;IACH,WAAW,CAAC,WAAW,CAAC,EAAE,SAAS,kBAAkB,EAAE,GAAG,mBAAmB;IAmC7E,4EAA4E;IAC5E,OAAO,CAAC,aAAa;CAWtB"}
@@ -1,128 +0,0 @@
1
- import { wildcardMatch } from "@vinhnt-sdk/schema";
2
- import { ToolNotFoundError } from "@vinhnt-sdk/schema";
3
- import { summarizeDomains } from "./domain.js";
4
- import { validateInput } from "./validate.js";
5
- export class ToolRegistry {
6
- tools = new Map();
7
- domains = new Map();
8
- register(tool) {
9
- this.tools.set(tool.id, tool);
10
- }
11
- /** Register a named domain and its tool membership (metadata only — does not register the tools). */
12
- registerDomain(manifest) {
13
- this.domains.set(manifest.id, manifest);
14
- }
15
- getDomains() {
16
- return [...this.domains.values()];
17
- }
18
- /** Resolve the domain id a tool belongs to, or undefined if it is a core tool. */
19
- domainFor(id) {
20
- for (const [domainId, manifest] of this.domains) {
21
- if (manifest.tools.some((t) => t.id === id))
22
- return domainId;
23
- }
24
- return undefined;
25
- }
26
- /** Get all registered domain manifests. */
27
- listDomains() {
28
- return [...this.domains.values()];
29
- }
30
- /** Get domain summaries for UI/API consumption. */
31
- domainSummaries() {
32
- return summarizeDomains([...this.domains.values()]);
33
- }
34
- /** Get tools belonging to a specific domain. */
35
- toolsForDomain(domainId) {
36
- const manifest = this.domains.get(domainId);
37
- return manifest?.tools ?? [];
38
- }
39
- unregister(id) {
40
- return this.tools.delete(id);
41
- }
42
- get(id) {
43
- return this.tools.get(id);
44
- }
45
- list(filter) {
46
- const all = [...this.tools.values()];
47
- if (!filter)
48
- return all;
49
- return all.filter((t) => {
50
- if (filter.risk && t.risk !== filter.risk)
51
- return false;
52
- if (filter.ids && !filter.ids.includes(t.id))
53
- return false;
54
- if (filter.pattern && !wildcardMatch(filter.pattern, t.id))
55
- return false;
56
- return true;
57
- });
58
- }
59
- count() {
60
- return this.tools.size;
61
- }
62
- /** Get a tool by ID, throwing a typed error if not found */
63
- getOrThrow(id) {
64
- const tool = this.tools.get(id);
65
- if (!tool)
66
- throw new ToolNotFoundError(id);
67
- return tool;
68
- }
69
- /**
70
- * Materialize the tool set for a given permission ruleset: drop tools the
71
- * model must not see (wholly-denied), and return a `settle` that validates
72
- * and executes a single tool call. Defaults to exposing every registered tool.
73
- */
74
- materialize(permissions) {
75
- const allTools = [...this.tools.values()];
76
- const allowed = this.filterByRules(allTools, permissions);
77
- const allowedIds = new Set(allowed.map((t) => t.id));
78
- const denied = allTools.filter((t) => !allowedIds.has(t.id));
79
- const allowedMap = new Map(allowed.map((t) => [t.id, t]));
80
- return {
81
- definitions: allowed,
82
- denied,
83
- getTool: (id) => allowedMap.get(id),
84
- settle: async ({ name, args, ctx }) => {
85
- const tool = this.tools.get(name);
86
- if (!tool)
87
- throw new ToolNotFoundError(name);
88
- // Validate input via Zod schema if available (non-breaking: falls through to raw execute if no schema)
89
- let validatedInput = args;
90
- if (tool.inputZodSchema) {
91
- validatedInput = validateInput(name, tool.inputZodSchema, args);
92
- }
93
- const defaultCtx = {
94
- sessionId: "",
95
- runId: "",
96
- agentId: "",
97
- agentName: "",
98
- signal: new AbortController().signal,
99
- env: {},
100
- ask: async () => "once",
101
- metadata: () => { },
102
- setCompensation: () => { },
103
- };
104
- return tool.execute(validatedInput, ctx ?? defaultCtx);
105
- },
106
- };
107
- }
108
- /** Remove tools whose rule is wholly denied (deny "*" / deny this tool). */
109
- filterByRules(tools, permissions) {
110
- if (!permissions || permissions.length === 0)
111
- return tools;
112
- const deniedActions = new Set();
113
- for (const rule of permissions) {
114
- if (rule.effect === "deny")
115
- deniedActions.add(rule.action);
116
- }
117
- return tools.filter((t) => isDenied(t.id, deniedActions) === false);
118
- }
119
- }
120
- /** A tool is denied if it matches a deny rule (exact or wildcard). */
121
- function isDenied(id, deniedActions) {
122
- for (const pattern of deniedActions) {
123
- if (wildcardMatch(pattern, id))
124
- return true;
125
- }
126
- return false;
127
- }
128
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tool/registry.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { ToolDefinition, ToolContext } from "./definitions.js";
2
- export interface SandboxConfig {
3
- defaultTimeoutMs: number;
4
- }
5
- /** Create a minimal ToolContext from an AbortSignal (for backward compat) */
6
- export declare function signalToToolContext(signal?: AbortSignal): ToolContext;
7
- export declare class ToolSandbox {
8
- private readonly config;
9
- constructor(config?: SandboxConfig);
10
- execute(tool: ToolDefinition, input: unknown, ctx: ToolContext): Promise<unknown>;
11
- }
12
- //# sourceMappingURL=sandbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/tool/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAgBrE;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,aAA4C;IAE3E,OAAO,CACX,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,CAAC;CAcpB"}
@@ -1,72 +0,0 @@
1
- /** Create a minimal ToolContext from an AbortSignal (for backward compat) */
2
- export function signalToToolContext(signal) {
3
- const ctrl = signal ? new AbortController() : new AbortController();
4
- if (signal) {
5
- signal.addEventListener("abort", () => ctrl.abort(signal.reason), { once: true });
6
- }
7
- return {
8
- sessionId: "",
9
- runId: "",
10
- agentId: "",
11
- agentName: "",
12
- signal: ctrl.signal,
13
- env: {},
14
- ask: async () => "once",
15
- metadata: () => { },
16
- setCompensation: () => { },
17
- };
18
- }
19
- export class ToolSandbox {
20
- config;
21
- constructor(config = { defaultTimeoutMs: 30_000 }) {
22
- this.config = config;
23
- }
24
- async execute(tool, input, ctx) {
25
- const timeout = new AbortController();
26
- const timer = setTimeout(() => timeout.abort(), this.config.defaultTimeoutMs);
27
- const combinedSignal = combineSignals(ctx.signal, timeout.signal);
28
- const augmentedCtx = { ...ctx, signal: combinedSignal };
29
- try {
30
- const result = await raceAbort(tool.execute(input, augmentedCtx), combinedSignal);
31
- return result;
32
- }
33
- finally {
34
- clearTimeout(timer);
35
- }
36
- }
37
- }
38
- function raceAbort(promise, signal) {
39
- if (signal.aborted) {
40
- return Promise.reject(new DOMException(signal.reason ?? "Aborted", "AbortError"));
41
- }
42
- return new Promise((resolve, reject) => {
43
- const onAbort = () => {
44
- reject(new DOMException(signal.reason ?? "Timed out", "AbortError"));
45
- };
46
- signal.addEventListener("abort", onAbort, { once: true });
47
- promise.then((val) => {
48
- signal.removeEventListener("abort", onAbort);
49
- resolve(val);
50
- }, (err) => {
51
- signal.removeEventListener("abort", onAbort);
52
- reject(err);
53
- });
54
- });
55
- }
56
- function combineSignals(...signals) {
57
- const valid = signals.filter((s) => s !== undefined);
58
- if (valid.length === 0)
59
- return new AbortController().signal;
60
- if (valid.length === 1)
61
- return valid[0];
62
- const controller = new AbortController();
63
- for (const s of valid) {
64
- if (s.aborted) {
65
- controller.abort(s.reason);
66
- return controller.signal;
67
- }
68
- s.addEventListener("abort", () => controller.abort(s.reason), { once: true });
69
- }
70
- return controller.signal;
71
- }
72
- //# sourceMappingURL=sandbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/tool/sandbox.ts"],"names":[],"mappings":"AAMA,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC;IACpE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO;QACL,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM;QACvB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,SAAwB,EAAE,gBAAgB,EAAE,MAAM,EAAE;QAApD,WAAM,GAAN,MAAM,CAA8C;IAAG,CAAC;IAErF,KAAK,CAAC,OAAO,CACX,IAAoB,EACpB,KAAc,EACd,GAAgB;QAEhB,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAE9E,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,YAAY,GAAgB,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAED,SAAS,SAAS,CAAI,OAAmB,EAAE,MAAmB;IAC5D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CACV,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,GAAG,OAAoC;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;IAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC;IAEzC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,UAAU,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { ToolDefinition } from "./definitions.js";
2
- type RootGetter = string | (() => string);
3
- export declare function createGlobFilesTool(workspaceRoot: RootGetter): ToolDefinition;
4
- export declare function createGrepFilesTool(workspaceRoot: RootGetter): ToolDefinition;
5
- export {};
6
- //# sourceMappingURL=search-tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-tools.d.ts","sourceRoot":"","sources":["../../src/tool/search-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAcvD,KAAK,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;AAuB1C,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,UAAU,GAAG,cAAc,CAqB7E;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,UAAU,GAAG,cAAc,CA2D7E"}
@@ -1,118 +0,0 @@
1
- import { readdir, readFile, stat } from "node:fs/promises";
2
- import { join, relative } from "node:path";
3
- import { z } from "zod";
4
- import { defineTool } from "./define-tool.js";
5
- const GlobFilesSchema = z.object({
6
- pattern: z.string().min(1),
7
- maxResults: z.number().positive().optional(),
8
- });
9
- const GrepFilesSchema = z.object({
10
- pattern: z.string().min(1),
11
- include: z.string().optional(),
12
- maxResults: z.number().positive().optional(),
13
- });
14
- function resolveRoot(r) {
15
- return typeof r === "function" ? r() : r;
16
- }
17
- const IGNORE_DIRS = new Set(["node_modules", ".git", ".next", "dist", ".turbo", "coverage", ".vscode"]);
18
- async function globRecursive(dir, pattern, base, results) {
19
- const entries = await readdir(dir, { withFileTypes: true });
20
- for (const entry of entries) {
21
- if (IGNORE_DIRS.has(entry.name))
22
- continue;
23
- const fullPath = join(dir, entry.name);
24
- const relPath = relative(base, fullPath);
25
- if (entry.name.includes(pattern) || relPath.includes(pattern)) {
26
- results.push(relPath);
27
- }
28
- if (entry.isDirectory()) {
29
- await globRecursive(fullPath, pattern, base, results);
30
- }
31
- }
32
- }
33
- export function createGlobFilesTool(workspaceRoot) {
34
- return defineTool({
35
- name: "glob_files",
36
- description: "Recursively find files matching a pattern in the workspace.",
37
- risk: "read",
38
- input: GlobFilesSchema,
39
- jsonSchema: {
40
- type: "object",
41
- properties: {
42
- pattern: { type: "string", description: "File name or path fragment to match" },
43
- maxResults: { type: "number", description: "Maximum results (default 50)", default: 50 },
44
- },
45
- required: ["pattern"],
46
- },
47
- async execute(v, _ctx) {
48
- const root = resolveRoot(workspaceRoot);
49
- const results = [];
50
- await globRecursive(root, v.pattern, root, results);
51
- return results.slice(0, v.maxResults ?? 50);
52
- },
53
- }).toDefinition();
54
- }
55
- export function createGrepFilesTool(workspaceRoot) {
56
- return defineTool({
57
- name: "grep_files",
58
- description: "Search file contents for a regex pattern. Returns matches with line numbers.",
59
- risk: "read",
60
- input: GrepFilesSchema,
61
- jsonSchema: {
62
- type: "object",
63
- properties: {
64
- pattern: { type: "string", description: "Regex pattern to search" },
65
- include: { type: "string", description: "File pattern filter (e.g. *.ts, *.md)" },
66
- maxResults: { type: "number", description: "Maximum match lines (default 30)", default: 30 },
67
- },
68
- required: ["pattern"],
69
- },
70
- async execute(v, _ctx) {
71
- const root = resolveRoot(workspaceRoot);
72
- const maxResults = v.maxResults ?? 30;
73
- const regex = new RegExp(v.pattern);
74
- const matches = [];
75
- async function searchDir(dir) {
76
- if (matches.length >= maxResults)
77
- return;
78
- const entries = await readdir(dir, { withFileTypes: true });
79
- for (const entry of entries) {
80
- if (matches.length >= maxResults)
81
- return;
82
- if (IGNORE_DIRS.has(entry.name))
83
- continue;
84
- const fullPath = join(dir, entry.name);
85
- if (entry.isDirectory()) {
86
- await searchDir(fullPath);
87
- }
88
- else if (!v.include || entry.name.endsWith(v.include.replace("*", ""))) {
89
- try {
90
- const st = await stat(fullPath);
91
- if (st.size > 100_000)
92
- continue;
93
- const content = await readFile(fullPath, "utf-8");
94
- const lines = content.split("\n");
95
- for (let i = 0; i < lines.length; i++) {
96
- if (regex.test(lines[i])) {
97
- matches.push({
98
- file: relative(root, fullPath),
99
- line: i + 1,
100
- content: lines[i].trim().slice(0, 200),
101
- });
102
- if (matches.length >= maxResults)
103
- return;
104
- }
105
- }
106
- }
107
- catch {
108
- continue;
109
- }
110
- }
111
- }
112
- }
113
- await searchDir(root);
114
- return matches;
115
- },
116
- }).toDefinition();
117
- }
118
- //# sourceMappingURL=search-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-tools.js","sourceRoot":"","sources":["../../src/tool/search-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AACH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAIH,SAAS,WAAW,CAAC,CAAa;IAChC,OAAO,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAExG,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,OAAe,EAAE,IAAY,EAAE,OAAiB;IACxF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,aAAyB;IAC3D,OAAO,UAAU,CAAqD;QACpE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,6DAA6D;QAC1E,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,eAAe;QACtB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;gBAC/E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE,OAAO,EAAE,EAAE,EAAE;aACzF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;QACD,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI;YACnB,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;YACxC,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC,CAAC,YAAY,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,aAAyB;IAC3D,OAAO,UAAU,CAAgH;QAC/H,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,8EAA8E;QAC3F,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,eAAe;QACtB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;gBACnE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;gBACjF,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE,OAAO,EAAE,EAAE,EAAE;aAC7F;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;QACD,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI;YACnB,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,OAAO,GAAsD,EAAE,CAAC;YAEtE,KAAK,UAAU,SAAS,CAAC,GAAW;gBAClC,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;oBAAE,OAAO;gBACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;wBAAE,OAAO;oBACzC,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,SAAS;oBAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBACxB,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAC5B,CAAC;yBAAM,IACL,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAC7D,CAAC;wBACD,IAAI,CAAC;4BACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;4BAChC,IAAI,EAAE,CAAC,IAAI,GAAG,OAAO;gCAAE,SAAS;4BAChC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;4BAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCACtC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;oCAC1B,OAAO,CAAC,IAAI,CAAC;wCACX,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;wCAC9B,IAAI,EAAE,CAAC,GAAG,CAAC;wCACX,OAAO,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;qCACxC,CAAC,CAAC;oCACH,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;wCAAE,OAAO;gCAC3C,CAAC;4BACH,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,SAAS;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC,YAAY,EAAE,CAAC;AACpB,CAAC"}
@@ -1,19 +0,0 @@
1
- export interface ShellToolConfig {
2
- workspaceRoot: string | (() => string);
3
- defaultTimeoutMs: number;
4
- /** Hard cap on shell command timeout in ms (default: 300000) */
5
- maxTimeoutMs?: number;
6
- /** If true, prompts for permission before executing shell commands (default: true) */
7
- askPermission?: boolean;
8
- }
9
- interface ExecResult {
10
- stdout: string;
11
- stderr: string;
12
- exitCode: number;
13
- }
14
- export declare function createShellTool(config: ShellToolConfig): import("./definitions.js").ToolDefinition<{
15
- command: string;
16
- timeoutMs?: number;
17
- }, ExecResult>;
18
- export {};
19
- //# sourceMappingURL=shell-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell-tool.d.ts","sourceRoot":"","sources":["../../src/tool/shell-tool.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmFD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe;aACxB,MAAM;gBAAc,MAAM;eAiCxD"}
@@ -1,139 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { commandPattern } from "./arity.js";
3
- import { z } from "zod";
4
- import { defineTool } from "./define-tool.js";
5
- const ExecuteCommandSchema = z.object({
6
- command: z.string().min(1),
7
- timeoutMs: z.number().positive().optional(),
8
- });
9
- function execAsync(command, cwd, timeoutMs, signal, env) {
10
- return new Promise((resolve, reject) => {
11
- const parsed = parseCommand(command);
12
- const child = execFile(parsed.file, parsed.args, {
13
- cwd,
14
- timeout: timeoutMs,
15
- maxBuffer: 10 * 1024 * 1024,
16
- encoding: "utf-8",
17
- windowsHide: true,
18
- env: env && Object.keys(env).length > 0
19
- ? { ...process.env, ...env }
20
- : undefined,
21
- }, (err, stdout, stderr) => {
22
- if (err) {
23
- const exitCode = typeof err.code === "number" ? err.code : 1;
24
- resolve({ stdout: stdout ?? "", stderr: stderr ?? "", exitCode });
25
- }
26
- else {
27
- resolve({ stdout: stdout ?? "", stderr: stderr ?? "", exitCode: 0 });
28
- }
29
- });
30
- if (signal) {
31
- if (signal.aborted) {
32
- child.kill();
33
- reject(new DOMException(signal.reason ?? "Aborted", "AbortError"));
34
- return;
35
- }
36
- signal.addEventListener("abort", () => {
37
- child.kill();
38
- reject(new DOMException(signal.reason ?? "Aborted", "AbortError"));
39
- }, { once: true });
40
- }
41
- });
42
- }
43
- function parseCommand(cmd) {
44
- const trimmed = cmd.trim();
45
- if (!trimmed)
46
- return { file: "", args: [] };
47
- const tokens = [];
48
- let i = 0;
49
- let current = "";
50
- let inSingle = false;
51
- let inDouble = false;
52
- while (i < trimmed.length) {
53
- const ch = trimmed[i] ?? "";
54
- if (inSingle) {
55
- if (ch === "'") {
56
- inSingle = false;
57
- }
58
- else {
59
- current += ch;
60
- }
61
- i++;
62
- }
63
- else if (inDouble) {
64
- if (ch === '"') {
65
- inDouble = false;
66
- }
67
- else if (ch === "\\" && i + 1 < trimmed.length) {
68
- current += trimmed[i + 1];
69
- i += 2;
70
- }
71
- else {
72
- current += ch;
73
- i++;
74
- }
75
- }
76
- else if (ch === "'") {
77
- inSingle = true;
78
- i++;
79
- }
80
- else if (ch === '"') {
81
- inDouble = true;
82
- i++;
83
- }
84
- else if (ch === "\\" && i + 1 < trimmed.length) {
85
- current += trimmed[i + 1];
86
- i += 2;
87
- }
88
- else if (/\s/.test(ch)) {
89
- if (current) {
90
- tokens.push(current);
91
- current = "";
92
- }
93
- i++;
94
- }
95
- else {
96
- current += ch;
97
- i++;
98
- }
99
- }
100
- if (current)
101
- tokens.push(current);
102
- if (tokens.length === 0)
103
- return { file: "", args: [] };
104
- return { file: tokens[0], args: tokens.slice(1) };
105
- }
106
- export function createShellTool(config) {
107
- return defineTool({
108
- name: "execute_command",
109
- description: "Execute a shell command in the workspace directory. Returns stdout and stderr.",
110
- risk: "write",
111
- timeoutMs: 120_000,
112
- input: ExecuteCommandSchema,
113
- jsonSchema: {
114
- type: "object",
115
- properties: {
116
- command: { type: "string", description: "Shell command to run" },
117
- timeoutMs: { type: "number", description: "Timeout in ms (default 30_000)", default: 30_000 },
118
- },
119
- required: ["command"],
120
- },
121
- async execute(v, ctx) {
122
- const root = typeof config.workspaceRoot === "function" ? config.workspaceRoot() : config.workspaceRoot;
123
- const timeout = Math.min(v.timeoutMs ?? config.defaultTimeoutMs, config.maxTimeoutMs ?? 300_000);
124
- if (config.askPermission !== false) {
125
- const reply = await ctx.ask({
126
- permission: "shell",
127
- resource: v.command,
128
- reason: `Run shell command: ${v.command}`,
129
- savePatterns: [commandPattern(v.command)],
130
- });
131
- if (reply === "reject") {
132
- return { stdout: "", stderr: "", exitCode: 1 };
133
- }
134
- }
135
- return execAsync(v.command, root, timeout, ctx.signal, ctx.env);
136
- },
137
- }).toDefinition();
138
- }
139
- //# sourceMappingURL=shell-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell-tool.js","sourceRoot":"","sources":["../../src/tool/shell-tool.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function createTodoWriteTool(): import("./definitions.js").ToolDefinition<unknown, unknown>;
2
- //# sourceMappingURL=todo-tool.d.ts.map