@cdoing/core 0.1.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 (378) hide show
  1. package/dist/agents/coordinator.d.ts +114 -0
  2. package/dist/agents/coordinator.d.ts.map +1 -0
  3. package/dist/agents/coordinator.js +158 -0
  4. package/dist/agents/coordinator.js.map +1 -0
  5. package/dist/context-providers/clipboard.d.ts +13 -0
  6. package/dist/context-providers/clipboard.d.ts.map +1 -0
  7. package/dist/context-providers/clipboard.js +53 -0
  8. package/dist/context-providers/clipboard.js.map +1 -0
  9. package/dist/context-providers/codebase.d.ts +46 -0
  10. package/dist/context-providers/codebase.d.ts.map +1 -0
  11. package/dist/context-providers/codebase.js +273 -0
  12. package/dist/context-providers/codebase.js.map +1 -0
  13. package/dist/context-providers/diff.d.ts +18 -0
  14. package/dist/context-providers/diff.d.ts.map +1 -0
  15. package/dist/context-providers/diff.js +63 -0
  16. package/dist/context-providers/diff.js.map +1 -0
  17. package/dist/context-providers/docs.d.ts +21 -0
  18. package/dist/context-providers/docs.d.ts.map +1 -0
  19. package/dist/context-providers/docs.js +180 -0
  20. package/dist/context-providers/docs.js.map +1 -0
  21. package/dist/context-providers/file-include.d.ts +13 -0
  22. package/dist/context-providers/file-include.d.ts.map +1 -0
  23. package/dist/context-providers/file-include.js +82 -0
  24. package/dist/context-providers/file-include.js.map +1 -0
  25. package/dist/context-providers/folder.d.ts +19 -0
  26. package/dist/context-providers/folder.d.ts.map +1 -0
  27. package/dist/context-providers/folder.js +130 -0
  28. package/dist/context-providers/folder.js.map +1 -0
  29. package/dist/context-providers/git.d.ts +19 -0
  30. package/dist/context-providers/git.d.ts.map +1 -0
  31. package/dist/context-providers/git.js +74 -0
  32. package/dist/context-providers/git.js.map +1 -0
  33. package/dist/context-providers/index.d.ts +26 -0
  34. package/dist/context-providers/index.d.ts.map +1 -0
  35. package/dist/context-providers/index.js +37 -0
  36. package/dist/context-providers/index.js.map +1 -0
  37. package/dist/context-providers/open-files.d.ts +25 -0
  38. package/dist/context-providers/open-files.d.ts.map +1 -0
  39. package/dist/context-providers/open-files.js +134 -0
  40. package/dist/context-providers/open-files.js.map +1 -0
  41. package/dist/context-providers/problems.d.ts +24 -0
  42. package/dist/context-providers/problems.d.ts.map +1 -0
  43. package/dist/context-providers/problems.js +97 -0
  44. package/dist/context-providers/problems.js.map +1 -0
  45. package/dist/context-providers/registry.d.ts +61 -0
  46. package/dist/context-providers/registry.d.ts.map +1 -0
  47. package/dist/context-providers/registry.js +92 -0
  48. package/dist/context-providers/registry.js.map +1 -0
  49. package/dist/context-providers/terminal.d.ts +25 -0
  50. package/dist/context-providers/terminal.d.ts.map +1 -0
  51. package/dist/context-providers/terminal.js +55 -0
  52. package/dist/context-providers/terminal.js.map +1 -0
  53. package/dist/context-providers/tree.d.ts +29 -0
  54. package/dist/context-providers/tree.d.ts.map +1 -0
  55. package/dist/context-providers/tree.js +172 -0
  56. package/dist/context-providers/tree.js.map +1 -0
  57. package/dist/context-providers/types.d.ts +72 -0
  58. package/dist/context-providers/types.d.ts.map +1 -0
  59. package/dist/context-providers/types.js +10 -0
  60. package/dist/context-providers/types.js.map +1 -0
  61. package/dist/context-providers/url.d.ts +27 -0
  62. package/dist/context-providers/url.d.ts.map +1 -0
  63. package/dist/context-providers/url.js +131 -0
  64. package/dist/context-providers/url.js.map +1 -0
  65. package/dist/effort/index.d.ts +78 -0
  66. package/dist/effort/index.d.ts.map +1 -0
  67. package/dist/effort/index.js +146 -0
  68. package/dist/effort/index.js.map +1 -0
  69. package/dist/hooks/index.d.ts +47 -0
  70. package/dist/hooks/index.d.ts.map +1 -0
  71. package/dist/hooks/index.js +151 -0
  72. package/dist/hooks/index.js.map +1 -0
  73. package/dist/index.d.ts +75 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +152 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/indexing/chunker.d.ts +25 -0
  78. package/dist/indexing/chunker.d.ts.map +1 -0
  79. package/dist/indexing/chunker.js +217 -0
  80. package/dist/indexing/chunker.js.map +1 -0
  81. package/dist/indexing/database.d.ts +49 -0
  82. package/dist/indexing/database.d.ts.map +1 -0
  83. package/dist/indexing/database.js +287 -0
  84. package/dist/indexing/database.js.map +1 -0
  85. package/dist/indexing/index.d.ts +9 -0
  86. package/dist/indexing/index.d.ts.map +1 -0
  87. package/dist/indexing/index.js +13 -0
  88. package/dist/indexing/index.js.map +1 -0
  89. package/dist/indexing/indexer.d.ts +63 -0
  90. package/dist/indexing/indexer.d.ts.map +1 -0
  91. package/dist/indexing/indexer.js +352 -0
  92. package/dist/indexing/indexer.js.map +1 -0
  93. package/dist/indexing/recent-edits-cache.d.ts +77 -0
  94. package/dist/indexing/recent-edits-cache.d.ts.map +1 -0
  95. package/dist/indexing/recent-edits-cache.js +123 -0
  96. package/dist/indexing/recent-edits-cache.js.map +1 -0
  97. package/dist/indexing/types.d.ts +39 -0
  98. package/dist/indexing/types.d.ts.map +1 -0
  99. package/dist/indexing/types.js +6 -0
  100. package/dist/indexing/types.js.map +1 -0
  101. package/dist/mcp/index.d.ts +33 -0
  102. package/dist/mcp/index.d.ts.map +1 -0
  103. package/dist/mcp/index.js +37 -0
  104. package/dist/mcp/index.js.map +1 -0
  105. package/dist/mcp/manager.d.ts +123 -0
  106. package/dist/mcp/manager.d.ts.map +1 -0
  107. package/dist/mcp/manager.js +331 -0
  108. package/dist/mcp/manager.js.map +1 -0
  109. package/dist/oauth.d.ts +33 -0
  110. package/dist/oauth.d.ts.map +1 -0
  111. package/dist/oauth.js +312 -0
  112. package/dist/oauth.js.map +1 -0
  113. package/dist/permissions/index.d.ts +216 -0
  114. package/dist/permissions/index.d.ts.map +1 -0
  115. package/dist/permissions/index.js +938 -0
  116. package/dist/permissions/index.js.map +1 -0
  117. package/dist/plan/index.d.ts +20 -0
  118. package/dist/plan/index.d.ts.map +1 -0
  119. package/dist/plan/index.js +24 -0
  120. package/dist/plan/index.js.map +1 -0
  121. package/dist/plan/manager.d.ts +101 -0
  122. package/dist/plan/manager.d.ts.map +1 -0
  123. package/dist/plan/manager.js +170 -0
  124. package/dist/plan/manager.js.map +1 -0
  125. package/dist/rules/index.d.ts +28 -0
  126. package/dist/rules/index.d.ts.map +1 -0
  127. package/dist/rules/index.js +31 -0
  128. package/dist/rules/index.js.map +1 -0
  129. package/dist/rules/manager.d.ts +77 -0
  130. package/dist/rules/manager.d.ts.map +1 -0
  131. package/dist/rules/manager.js +279 -0
  132. package/dist/rules/manager.js.map +1 -0
  133. package/dist/rules/types.d.ts +34 -0
  134. package/dist/rules/types.d.ts.map +1 -0
  135. package/dist/rules/types.js +9 -0
  136. package/dist/rules/types.js.map +1 -0
  137. package/dist/sandbox/filesystem.d.ts +20 -0
  138. package/dist/sandbox/filesystem.d.ts.map +1 -0
  139. package/dist/sandbox/filesystem.js +141 -0
  140. package/dist/sandbox/filesystem.js.map +1 -0
  141. package/dist/sandbox/index.d.ts +4 -0
  142. package/dist/sandbox/index.d.ts.map +1 -0
  143. package/dist/sandbox/index.js +8 -0
  144. package/dist/sandbox/index.js.map +1 -0
  145. package/dist/sandbox/manager.d.ts +47 -0
  146. package/dist/sandbox/manager.d.ts.map +1 -0
  147. package/dist/sandbox/manager.js +220 -0
  148. package/dist/sandbox/manager.js.map +1 -0
  149. package/dist/sandbox/network.d.ts +14 -0
  150. package/dist/sandbox/network.d.ts.map +1 -0
  151. package/dist/sandbox/network.js +87 -0
  152. package/dist/sandbox/network.js.map +1 -0
  153. package/dist/sandbox/types.d.ts +42 -0
  154. package/dist/sandbox/types.d.ts.map +1 -0
  155. package/dist/sandbox/types.js +25 -0
  156. package/dist/sandbox/types.js.map +1 -0
  157. package/dist/tools/ast-edit.d.ts +57 -0
  158. package/dist/tools/ast-edit.d.ts.map +1 -0
  159. package/dist/tools/ast-edit.js +443 -0
  160. package/dist/tools/ast-edit.js.map +1 -0
  161. package/dist/tools/code-verify.d.ts +8 -0
  162. package/dist/tools/code-verify.d.ts.map +1 -0
  163. package/dist/tools/code-verify.js +159 -0
  164. package/dist/tools/code-verify.js.map +1 -0
  165. package/dist/tools/codebase-search.d.ts +17 -0
  166. package/dist/tools/codebase-search.d.ts.map +1 -0
  167. package/dist/tools/codebase-search.js +104 -0
  168. package/dist/tools/codebase-search.js.map +1 -0
  169. package/dist/tools/file-delete.d.ts +26 -0
  170. package/dist/tools/file-delete.d.ts.map +1 -0
  171. package/dist/tools/file-delete.js +179 -0
  172. package/dist/tools/file-delete.js.map +1 -0
  173. package/dist/tools/file-edit.d.ts +10 -0
  174. package/dist/tools/file-edit.d.ts.map +1 -0
  175. package/dist/tools/file-edit.js +138 -0
  176. package/dist/tools/file-edit.js.map +1 -0
  177. package/dist/tools/file-read.d.ts +12 -0
  178. package/dist/tools/file-read.d.ts.map +1 -0
  179. package/dist/tools/file-read.js +211 -0
  180. package/dist/tools/file-read.js.map +1 -0
  181. package/dist/tools/file-run.d.ts +10 -0
  182. package/dist/tools/file-run.d.ts.map +1 -0
  183. package/dist/tools/file-run.js +179 -0
  184. package/dist/tools/file-run.js.map +1 -0
  185. package/dist/tools/file-write.d.ts +10 -0
  186. package/dist/tools/file-write.d.ts.map +1 -0
  187. package/dist/tools/file-write.js +134 -0
  188. package/dist/tools/file-write.js.map +1 -0
  189. package/dist/tools/glob-search.d.ts +8 -0
  190. package/dist/tools/glob-search.d.ts.map +1 -0
  191. package/dist/tools/glob-search.js +108 -0
  192. package/dist/tools/glob-search.js.map +1 -0
  193. package/dist/tools/grep-search.d.ts +8 -0
  194. package/dist/tools/grep-search.d.ts.map +1 -0
  195. package/dist/tools/grep-search.js +139 -0
  196. package/dist/tools/grep-search.js.map +1 -0
  197. package/dist/tools/list-dir.d.ts +16 -0
  198. package/dist/tools/list-dir.d.ts.map +1 -0
  199. package/dist/tools/list-dir.js +183 -0
  200. package/dist/tools/list-dir.js.map +1 -0
  201. package/dist/tools/multi-edit.d.ts +16 -0
  202. package/dist/tools/multi-edit.d.ts.map +1 -0
  203. package/dist/tools/multi-edit.js +163 -0
  204. package/dist/tools/multi-edit.js.map +1 -0
  205. package/dist/tools/notebook-edit.d.ts +31 -0
  206. package/dist/tools/notebook-edit.d.ts.map +1 -0
  207. package/dist/tools/notebook-edit.js +321 -0
  208. package/dist/tools/notebook-edit.js.map +1 -0
  209. package/dist/tools/registry.d.ts +16 -0
  210. package/dist/tools/registry.d.ts.map +1 -0
  211. package/dist/tools/registry.js +41 -0
  212. package/dist/tools/registry.js.map +1 -0
  213. package/dist/tools/shell-exec.d.ts +12 -0
  214. package/dist/tools/shell-exec.d.ts.map +1 -0
  215. package/dist/tools/shell-exec.js +261 -0
  216. package/dist/tools/shell-exec.js.map +1 -0
  217. package/dist/tools/sub-agent-manager.d.ts +57 -0
  218. package/dist/tools/sub-agent-manager.d.ts.map +1 -0
  219. package/dist/tools/sub-agent-manager.js +153 -0
  220. package/dist/tools/sub-agent-manager.js.map +1 -0
  221. package/dist/tools/sub-agent-status.d.ts +12 -0
  222. package/dist/tools/sub-agent-status.d.ts.map +1 -0
  223. package/dist/tools/sub-agent-status.js +59 -0
  224. package/dist/tools/sub-agent-status.js.map +1 -0
  225. package/dist/tools/sub-agent-terminate.d.ts +12 -0
  226. package/dist/tools/sub-agent-terminate.d.ts.map +1 -0
  227. package/dist/tools/sub-agent-terminate.js +55 -0
  228. package/dist/tools/sub-agent-terminate.js.map +1 -0
  229. package/dist/tools/sub-agent.d.ts +34 -0
  230. package/dist/tools/sub-agent.d.ts.map +1 -0
  231. package/dist/tools/sub-agent.js +140 -0
  232. package/dist/tools/sub-agent.js.map +1 -0
  233. package/dist/tools/system-info.d.ts +24 -0
  234. package/dist/tools/system-info.d.ts.map +1 -0
  235. package/dist/tools/system-info.js +220 -0
  236. package/dist/tools/system-info.js.map +1 -0
  237. package/dist/tools/todo.d.ts +16 -0
  238. package/dist/tools/todo.d.ts.map +1 -0
  239. package/dist/tools/todo.js +144 -0
  240. package/dist/tools/todo.js.map +1 -0
  241. package/dist/tools/types.d.ts +20 -0
  242. package/dist/tools/types.d.ts.map +1 -0
  243. package/dist/tools/types.js +3 -0
  244. package/dist/tools/types.js.map +1 -0
  245. package/dist/tools/view-diff.d.ts +11 -0
  246. package/dist/tools/view-diff.d.ts.map +1 -0
  247. package/dist/tools/view-diff.js +88 -0
  248. package/dist/tools/view-diff.js.map +1 -0
  249. package/dist/tools/view-repo-map.d.ts +18 -0
  250. package/dist/tools/view-repo-map.d.ts.map +1 -0
  251. package/dist/tools/view-repo-map.js +245 -0
  252. package/dist/tools/view-repo-map.js.map +1 -0
  253. package/dist/tools/web-fetch.d.ts +13 -0
  254. package/dist/tools/web-fetch.d.ts.map +1 -0
  255. package/dist/tools/web-fetch.js +106 -0
  256. package/dist/tools/web-fetch.js.map +1 -0
  257. package/dist/tools/web-search.d.ts +10 -0
  258. package/dist/tools/web-search.d.ts.map +1 -0
  259. package/dist/tools/web-search.js +106 -0
  260. package/dist/tools/web-search.js.map +1 -0
  261. package/dist/utils/gitignore.d.ts +10 -0
  262. package/dist/utils/gitignore.d.ts.map +1 -0
  263. package/dist/utils/gitignore.js +104 -0
  264. package/dist/utils/gitignore.js.map +1 -0
  265. package/dist/utils/lazy-apply.d.ts +45 -0
  266. package/dist/utils/lazy-apply.d.ts.map +1 -0
  267. package/dist/utils/lazy-apply.js +164 -0
  268. package/dist/utils/lazy-apply.js.map +1 -0
  269. package/dist/utils/memory.d.ts +36 -0
  270. package/dist/utils/memory.d.ts.map +1 -0
  271. package/dist/utils/memory.js +136 -0
  272. package/dist/utils/memory.js.map +1 -0
  273. package/dist/utils/path-matching.d.ts +24 -0
  274. package/dist/utils/path-matching.d.ts.map +1 -0
  275. package/dist/utils/path-matching.js +116 -0
  276. package/dist/utils/path-matching.js.map +1 -0
  277. package/dist/utils/path-safety.d.ts +13 -0
  278. package/dist/utils/path-safety.d.ts.map +1 -0
  279. package/dist/utils/path-safety.js +54 -0
  280. package/dist/utils/path-safety.js.map +1 -0
  281. package/dist/utils/project-config.d.ts +18 -0
  282. package/dist/utils/project-config.d.ts.map +1 -0
  283. package/dist/utils/project-config.js +76 -0
  284. package/dist/utils/project-config.js.map +1 -0
  285. package/dist/utils/search-match.d.ts +63 -0
  286. package/dist/utils/search-match.d.ts.map +1 -0
  287. package/dist/utils/search-match.js +426 -0
  288. package/dist/utils/search-match.js.map +1 -0
  289. package/dist/utils/shell-paths.d.ts +17 -0
  290. package/dist/utils/shell-paths.d.ts.map +1 -0
  291. package/dist/utils/shell-paths.js +107 -0
  292. package/dist/utils/shell-paths.js.map +1 -0
  293. package/dist/utils/streaming-diff.d.ts +45 -0
  294. package/dist/utils/streaming-diff.d.ts.map +1 -0
  295. package/dist/utils/streaming-diff.js +230 -0
  296. package/dist/utils/streaming-diff.js.map +1 -0
  297. package/dist/utils/todo.d.ts +47 -0
  298. package/dist/utils/todo.d.ts.map +1 -0
  299. package/dist/utils/todo.js +102 -0
  300. package/dist/utils/todo.js.map +1 -0
  301. package/package.json +23 -0
  302. package/src/agents/coordinator.ts +240 -0
  303. package/src/context-providers/clipboard.ts +48 -0
  304. package/src/context-providers/codebase.ts +274 -0
  305. package/src/context-providers/diff.ts +66 -0
  306. package/src/context-providers/docs.ts +160 -0
  307. package/src/context-providers/file-include.ts +54 -0
  308. package/src/context-providers/folder.ts +106 -0
  309. package/src/context-providers/git.ts +72 -0
  310. package/src/context-providers/index.ts +26 -0
  311. package/src/context-providers/open-files.ts +113 -0
  312. package/src/context-providers/problems.ts +100 -0
  313. package/src/context-providers/registry.ts +99 -0
  314. package/src/context-providers/terminal.ts +58 -0
  315. package/src/context-providers/tree.ts +161 -0
  316. package/src/context-providers/types.ts +84 -0
  317. package/src/context-providers/url.ts +138 -0
  318. package/src/effort/index.ts +177 -0
  319. package/src/hooks/index.ts +148 -0
  320. package/src/index.ts +114 -0
  321. package/src/indexing/README.md +267 -0
  322. package/src/indexing/chunker.ts +206 -0
  323. package/src/indexing/database.ts +299 -0
  324. package/src/indexing/index.ts +15 -0
  325. package/src/indexing/indexer.ts +383 -0
  326. package/src/indexing/recent-edits-cache.ts +150 -0
  327. package/src/indexing/types.ts +44 -0
  328. package/src/mcp/index.ts +33 -0
  329. package/src/mcp/manager.ts +385 -0
  330. package/src/oauth.ts +330 -0
  331. package/src/permissions/index.ts +1011 -0
  332. package/src/plan/index.ts +20 -0
  333. package/src/plan/manager.ts +233 -0
  334. package/src/rules/index.ts +28 -0
  335. package/src/rules/manager.ts +276 -0
  336. package/src/rules/types.ts +40 -0
  337. package/src/sandbox/filesystem.ts +135 -0
  338. package/src/sandbox/index.ts +9 -0
  339. package/src/sandbox/manager.ts +213 -0
  340. package/src/sandbox/network.ts +101 -0
  341. package/src/sandbox/types.ts +63 -0
  342. package/src/tools/ast-edit.ts +493 -0
  343. package/src/tools/code-verify.ts +143 -0
  344. package/src/tools/codebase-search.ts +117 -0
  345. package/src/tools/file-delete.ts +155 -0
  346. package/src/tools/file-edit.ts +115 -0
  347. package/src/tools/file-read.ts +195 -0
  348. package/src/tools/file-run.ts +158 -0
  349. package/src/tools/file-write.ts +104 -0
  350. package/src/tools/glob-search.ts +80 -0
  351. package/src/tools/grep-search.ts +120 -0
  352. package/src/tools/list-dir.ts +172 -0
  353. package/src/tools/multi-edit.ts +138 -0
  354. package/src/tools/notebook-edit.ts +342 -0
  355. package/src/tools/registry.ts +43 -0
  356. package/src/tools/shell-exec.ts +251 -0
  357. package/src/tools/sub-agent-manager.ts +183 -0
  358. package/src/tools/sub-agent-status.ts +67 -0
  359. package/src/tools/sub-agent-terminate.ts +62 -0
  360. package/src/tools/sub-agent.ts +162 -0
  361. package/src/tools/system-info.ts +248 -0
  362. package/src/tools/todo.ts +149 -0
  363. package/src/tools/types.ts +21 -0
  364. package/src/tools/view-diff.ts +99 -0
  365. package/src/tools/view-repo-map.ts +249 -0
  366. package/src/tools/web-fetch.ts +118 -0
  367. package/src/tools/web-search.ts +129 -0
  368. package/src/utils/gitignore.ts +73 -0
  369. package/src/utils/lazy-apply.ts +189 -0
  370. package/src/utils/memory.ts +124 -0
  371. package/src/utils/path-matching.ts +84 -0
  372. package/src/utils/path-safety.ts +19 -0
  373. package/src/utils/project-config.ts +41 -0
  374. package/src/utils/search-match.ts +495 -0
  375. package/src/utils/shell-paths.ts +79 -0
  376. package/src/utils/streaming-diff.ts +260 -0
  377. package/src/utils/todo.ts +115 -0
  378. package/tsconfig.json +18 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Sub-Agent Tool — allows the agent to spawn child agents for parallel research.
3
+ *
4
+ * The sub-agent gets its own conversation context and the same tools,
5
+ * but cannot spawn further sub-agents (prevents infinite recursion).
6
+ *
7
+ * Security:
8
+ * - Sub-agents inherit the parent's PermissionManager — all tool calls
9
+ * inside the child go through the same deny/ask/allow rules.
10
+ * - Task descriptions are screened for destructive intent patterns.
11
+ * - Permission prompt shows a ⚠ warning for destructive tasks.
12
+ *
13
+ * Features:
14
+ * - Custom timeout (useful for long-running tasks like npm install)
15
+ * - Background mode (returns agent ID immediately, check status later)
16
+ * - Foreground mode (waits for completion, default)
17
+ */
18
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
19
+ import { SubAgentManager } from "./sub-agent-manager";
20
+ /**
21
+ * Factory function signature for creating sub-agent runners.
22
+ * Now accepts an AbortSignal so the parent can cancel child agents.
23
+ */
24
+ export interface SubAgentRunnerFactory {
25
+ (prompt: string, signal?: AbortSignal): Promise<string>;
26
+ }
27
+ export declare class SubAgentTool implements BaseTool {
28
+ definition: ToolDefinition;
29
+ private runnerFactory;
30
+ private manager;
31
+ constructor(runnerFactory: SubAgentRunnerFactory, manager: SubAgentManager);
32
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
33
+ }
34
+ //# sourceMappingURL=sub-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent.d.ts","sourceRoot":"","sources":["../../src/tools/sub-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA0BtD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAED,qBAAa,YAAa,YAAW,QAAQ;IAC3C,UAAU,EAAE,cAAc,CAgCxB;IAEF,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,OAAO,CAAkB;gBAErB,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe;IAKpE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAiEnE"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ /**
3
+ * Sub-Agent Tool — allows the agent to spawn child agents for parallel research.
4
+ *
5
+ * The sub-agent gets its own conversation context and the same tools,
6
+ * but cannot spawn further sub-agents (prevents infinite recursion).
7
+ *
8
+ * Security:
9
+ * - Sub-agents inherit the parent's PermissionManager — all tool calls
10
+ * inside the child go through the same deny/ask/allow rules.
11
+ * - Task descriptions are screened for destructive intent patterns.
12
+ * - Permission prompt shows a ⚠ warning for destructive tasks.
13
+ *
14
+ * Features:
15
+ * - Custom timeout (useful for long-running tasks like npm install)
16
+ * - Background mode (returns agent ID immediately, check status later)
17
+ * - Foreground mode (waits for completion, default)
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.SubAgentTool = void 0;
21
+ // ── Destructive task detection ──────────────────────────────────────────────
22
+ /**
23
+ * Patterns in task descriptions that indicate destructive intent.
24
+ * These trigger an elevated permission prompt (⚠ DESTRUCTIVE) so the
25
+ * user is clearly warned before the sub-agent is spawned.
26
+ */
27
+ const DESTRUCTIVE_TASK_PATTERNS = [
28
+ // File deletion
29
+ /\bdelete\b.*\bfiles?\b/i, /\bremove\b.*\bfiles?\b/i, /\brm\s+-rf\b/i,
30
+ /\bwipe\b/i, /\bpurge\b/i, /\bclean\s*up\b/i, /\bnuke\b/i,
31
+ // Git destructive
32
+ /\bforce\s*push\b/i, /\bgit\s+reset\s+--hard\b/i, /\bgit\s+clean\b/i,
33
+ /\brewrite\s+history\b/i, /\bdelete\b.*\bbranch/i,
34
+ // Database
35
+ /\bdrop\b.*\b(table|database|collection)\b/i, /\btruncate\b/i,
36
+ // System
37
+ /\bkill\b.*\bprocess/i, /\bshutdown\b/i, /\brestart\b.*\bserver/i,
38
+ /\bformat\b.*\bdisk\b/i,
39
+ // Destructive ops
40
+ /\boverwrite\b/i, /\bdestroy\b/i, /\buninstall\b/i,
41
+ /\bdrop\b.*\bpermission/i, /\brevoke\b/i,
42
+ ];
43
+ class SubAgentTool {
44
+ definition = {
45
+ name: "sub_agent",
46
+ description: "Spawn a sub-agent to handle a specific task. The sub-agent has access to the same file and search tools but runs in its own context. Use this for independent tasks like 'find all usages of X', 'read and summarize file Y', or long-running commands like 'npm install'. Supports custom timeout and background mode. The sub-agent cannot spawn further sub-agents.",
47
+ inputSchema: {
48
+ type: "object",
49
+ properties: {
50
+ task: {
51
+ type: "string",
52
+ description: "A clear, specific task for the sub-agent to perform",
53
+ },
54
+ timeout: {
55
+ type: "number",
56
+ description: "Custom timeout in milliseconds. Use for long-running tasks (e.g., 300000 for 5 minutes). Default: no timeout (runs until completion).",
57
+ },
58
+ background: {
59
+ type: "boolean",
60
+ description: "If true, returns immediately with an agent ID. Use sub_agent_status to check progress and sub_agent_terminate to stop it. Default: false (waits for completion).",
61
+ },
62
+ },
63
+ required: ["task"],
64
+ },
65
+ requiresPermission: true,
66
+ permissionMessage: (input) => {
67
+ const task = String(input.task || "").slice(0, 200);
68
+ if (DESTRUCTIVE_TASK_PATTERNS.some((p) => p.test(task))) {
69
+ return `⚠ DESTRUCTIVE sub-agent task: ${task}`;
70
+ }
71
+ return `Spawn sub-agent: ${task}`;
72
+ },
73
+ };
74
+ runnerFactory;
75
+ manager;
76
+ constructor(runnerFactory, manager) {
77
+ this.runnerFactory = runnerFactory;
78
+ this.manager = manager;
79
+ }
80
+ async execute(input) {
81
+ const task = input.task;
82
+ const timeout = input.timeout;
83
+ const background = input.background;
84
+ if (!task || task.trim().length === 0) {
85
+ return { success: false, output: "", error: "Task cannot be empty" };
86
+ }
87
+ // Prepend a safety instruction if the task looks destructive.
88
+ // The sub-agent inherits the parent's PermissionManager so each tool call
89
+ // will still go through deny/ask/allow checks, but this extra context
90
+ // makes the LLM aware it should proceed cautiously.
91
+ const isDestructive = DESTRUCTIVE_TASK_PATTERNS.some((p) => p.test(task));
92
+ const safeTask = isDestructive
93
+ ? `[CAUTION: This task involves potentially destructive operations. ` +
94
+ `You MUST ask for explicit user confirmation before executing any ` +
95
+ `destructive commands (rm, delete, drop, force push, reset --hard, etc.). ` +
96
+ `Prefer safe alternatives when possible.]\n\n${task}`
97
+ : task;
98
+ const runnerFn = (signal) => this.runnerFactory(safeTask, signal);
99
+ if (background) {
100
+ // Background mode: return immediately with agent ID
101
+ const agentId = this.manager.spawn(task, runnerFn, timeout);
102
+ return {
103
+ success: true,
104
+ output: JSON.stringify({
105
+ agent_id: agentId,
106
+ status: "running",
107
+ message: `Sub-agent spawned in background. Use sub_agent_status with agent_id "${agentId}" to check progress, or sub_agent_terminate to stop it.`,
108
+ }),
109
+ };
110
+ }
111
+ // Foreground mode: wait for completion
112
+ try {
113
+ const entry = await this.manager.spawnAndWait(task, runnerFn, timeout);
114
+ if (entry.status === "completed") {
115
+ return {
116
+ success: true,
117
+ output: entry.output || "(sub-agent returned no output)",
118
+ };
119
+ }
120
+ if (entry.status === "timed_out") {
121
+ return {
122
+ success: false,
123
+ output: entry.output || "",
124
+ error: `Sub-agent timed out after ${timeout}ms. Partial output (if any) is included. You can retry with a longer timeout or run in background mode.`,
125
+ };
126
+ }
127
+ return {
128
+ success: false,
129
+ output: entry.output || "",
130
+ error: `Sub-agent ${entry.status}: ${entry.error || "unknown error"}`,
131
+ };
132
+ }
133
+ catch (err) {
134
+ const message = err instanceof Error ? err.message : String(err);
135
+ return { success: false, output: "", error: `Sub-agent failed: ${message}` };
136
+ }
137
+ }
138
+ }
139
+ exports.SubAgentTool = SubAgentTool;
140
+ //# sourceMappingURL=sub-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent.js","sourceRoot":"","sources":["../../src/tools/sub-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * System Info Tool — gives the LLM runtime awareness of its own
3
+ * permission mode, settings rules, sandbox config, and available tools.
4
+ *
5
+ * This replaces hardcoded permission docs in the system prompt with
6
+ * a live, queryable tool the agent can call at any time.
7
+ */
8
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
9
+ import type { PermissionManager } from "../permissions";
10
+ import type { SandboxManager } from "../sandbox";
11
+ import type { ToolRegistry } from "./registry";
12
+ export declare class SystemInfoTool implements BaseTool {
13
+ definition: ToolDefinition;
14
+ private permissionManager;
15
+ private sandboxManager?;
16
+ private toolRegistry;
17
+ constructor(permissionManager: PermissionManager, toolRegistry: ToolRegistry, sandboxManager?: SandboxManager);
18
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
19
+ private buildPermissionsSection;
20
+ private describeModeEffect;
21
+ private buildSandboxSection;
22
+ private buildToolsSection;
23
+ }
24
+ //# sourceMappingURL=system-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-info.d.ts","sourceRoot":"","sources":["../../src/tools/system-info.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,cAAe,YAAW,QAAQ;IAC7C,UAAU,EAAE,cAAc,CAgBxB;IAEF,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAe;gBAGjC,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,YAAY,EAC1B,cAAc,CAAC,EAAE,cAAc;IAO3B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBlE,OAAO,CAAC,uBAAuB;IAsE/B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,mBAAmB;IAgE3B,OAAO,CAAC,iBAAiB;CAiC1B"}
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ /**
3
+ * System Info Tool — gives the LLM runtime awareness of its own
4
+ * permission mode, settings rules, sandbox config, and available tools.
5
+ *
6
+ * This replaces hardcoded permission docs in the system prompt with
7
+ * a live, queryable tool the agent can call at any time.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SystemInfoTool = void 0;
11
+ class SystemInfoTool {
12
+ definition = {
13
+ name: "system_info",
14
+ description: "Get information about your current permissions, sandbox restrictions, available tools, and system configuration. Call this when you need to understand what you can or cannot do, or when the user asks about your access level. No arguments required — returns a full status report.",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ section: {
19
+ type: "string",
20
+ description: "Optional: request a specific section. Values: 'permissions', 'sandbox', 'tools', 'all'. Default: 'all'.",
21
+ },
22
+ },
23
+ required: [],
24
+ },
25
+ requiresPermission: false,
26
+ };
27
+ permissionManager;
28
+ sandboxManager;
29
+ toolRegistry;
30
+ constructor(permissionManager, toolRegistry, sandboxManager) {
31
+ this.permissionManager = permissionManager;
32
+ this.toolRegistry = toolRegistry;
33
+ this.sandboxManager = sandboxManager;
34
+ }
35
+ async execute(input) {
36
+ const section = input.section || "all";
37
+ const parts = [];
38
+ if (section === "all" || section === "permissions") {
39
+ parts.push(this.buildPermissionsSection());
40
+ }
41
+ if (section === "all" || section === "sandbox") {
42
+ parts.push(this.buildSandboxSection());
43
+ }
44
+ if (section === "all" || section === "tools") {
45
+ parts.push(this.buildToolsSection());
46
+ }
47
+ return { success: true, output: parts.join("\n\n") };
48
+ }
49
+ buildPermissionsSection() {
50
+ const mode = this.permissionManager.getMode();
51
+ const rules = this.permissionManager.getSettingsRules();
52
+ const stored = this.permissionManager.getStoredRules();
53
+ const lines = [
54
+ "## Permission System Status",
55
+ "",
56
+ `**Current Mode:** ${mode}`,
57
+ this.describeModeEffect(mode),
58
+ "",
59
+ ];
60
+ // Settings rules
61
+ if (rules.deny.length || rules.allow.length || rules.ask.length) {
62
+ lines.push("### Settings Rules (from .claude/settings.json)");
63
+ lines.push("Rules are evaluated: deny → ask → allow. Deny always wins.");
64
+ lines.push("");
65
+ if (rules.deny.length) {
66
+ lines.push("**Deny (always blocked):**");
67
+ for (const r of rules.deny)
68
+ lines.push(` - ${r}`);
69
+ }
70
+ if (rules.ask.length) {
71
+ lines.push("**Ask (prompt user, even if allow matches):**");
72
+ for (const r of rules.ask)
73
+ lines.push(` - ${r}`);
74
+ }
75
+ if (rules.allow.length) {
76
+ lines.push("**Allow (auto-approved):**");
77
+ for (const r of rules.allow)
78
+ lines.push(` - ${r}`);
79
+ }
80
+ lines.push("");
81
+ }
82
+ else {
83
+ lines.push("No settings-based rules configured. All tool calls fall through to the mode-based behavior.");
84
+ lines.push("");
85
+ }
86
+ // Stored rules
87
+ const globalCount = stored.global.length;
88
+ const projectCount = stored.project.length;
89
+ if (globalCount || projectCount) {
90
+ lines.push("### Previously Approved Rules");
91
+ if (globalCount) {
92
+ lines.push(`Global (always): ${globalCount} rule(s)`);
93
+ for (const r of stored.global) {
94
+ lines.push(` - ${r.tool}${r.inputMatch ? ` (${r.inputMatch})` : ""}`);
95
+ }
96
+ }
97
+ if (projectCount) {
98
+ lines.push(`Project: ${projectCount} rule(s)`);
99
+ for (const r of stored.project) {
100
+ lines.push(` - ${r.tool}${r.inputMatch ? ` (${r.inputMatch})` : ""}`);
101
+ }
102
+ }
103
+ lines.push("");
104
+ }
105
+ // Decision flow
106
+ lines.push("### Decision Flow");
107
+ lines.push("When you call a tool, the system evaluates in this order:");
108
+ lines.push("1. Bypass mode → allow all");
109
+ lines.push("2. Tool doesn't require permission (file_read, glob_search, grep_search, system_info) → allow");
110
+ lines.push("3. Settings deny rule matches → BLOCKED");
111
+ lines.push("4. Settings ask rule matches → prompt user");
112
+ lines.push("5. Settings allow rule matches → auto-approve");
113
+ lines.push("6. Previously approved stored rule → auto-approve");
114
+ lines.push("7. Mode fallback (plan blocks writes, acceptEdits allows edits, default prompts user)");
115
+ return lines.join("\n");
116
+ }
117
+ describeModeEffect(mode) {
118
+ switch (mode) {
119
+ case "default":
120
+ return "Effect: You must get user approval for every write/exec tool call. Read-only tools (file_read, glob_search, grep_search) work freely.";
121
+ case "acceptEdits":
122
+ return "Effect: File writes and edits are auto-approved. Shell commands and file_run still require user approval.";
123
+ case "plan":
124
+ return "Effect: READ-ONLY mode. file_write, file_edit, shell_exec, and file_run are completely blocked. You can only read files and search code.";
125
+ case "dontAsk":
126
+ return "Effect: Everything is denied unless it matches an explicit allow rule in settings. No user prompts are shown.";
127
+ case "bypassPermissions":
128
+ return "Effect: All tools are auto-approved without any prompts. The user has opted into this unsafe mode.";
129
+ default:
130
+ return `Effect: Unknown mode "${mode}" — behaves like default.`;
131
+ }
132
+ }
133
+ buildSandboxSection() {
134
+ const lines = ["## Sandbox Status", ""];
135
+ if (!this.sandboxManager || !this.sandboxManager.isEnabled()) {
136
+ lines.push("**Sandbox: DISABLED**");
137
+ lines.push("No filesystem or network restrictions are enforced beyond the permission system.");
138
+ return lines.join("\n");
139
+ }
140
+ const config = this.sandboxManager.getConfig();
141
+ lines.push(`**Sandbox: ENABLED (${config.mode} mode)**`);
142
+ lines.push("");
143
+ // Mode explanation
144
+ if (config.mode === "auto-allow") {
145
+ lines.push("Mode: **auto-allow** — Commands that pass sandbox checks are auto-approved without a permission prompt.");
146
+ }
147
+ else {
148
+ lines.push("Mode: **regular** — Sandbox enforces restrictions, but permission prompts are still shown.");
149
+ }
150
+ lines.push("");
151
+ // Filesystem
152
+ lines.push("### Filesystem Restrictions");
153
+ lines.push("Writes are allowed to: the working directory" +
154
+ (config.filesystem.allowWrite.length ? ` + ${config.filesystem.allowWrite.join(", ")}` : " (only)"));
155
+ if (config.filesystem.denyWrite.length) {
156
+ lines.push("Writes DENIED to: " + config.filesystem.denyWrite.join(", "));
157
+ }
158
+ if (config.filesystem.denyRead.length) {
159
+ lines.push("Reads DENIED from: " + config.filesystem.denyRead.join(", "));
160
+ }
161
+ if (!config.filesystem.denyWrite.length && !config.filesystem.denyRead.length) {
162
+ lines.push("No explicit deny rules for filesystem paths.");
163
+ }
164
+ lines.push("");
165
+ // Network
166
+ lines.push("### Network Restrictions");
167
+ if (config.network.allowedDomains.length) {
168
+ lines.push("Allowed domains: " + config.network.allowedDomains.join(", "));
169
+ }
170
+ else {
171
+ lines.push("No domains pre-allowed.");
172
+ }
173
+ if (config.network.allowManagedDomainsOnly) {
174
+ lines.push("Policy: **strict** — non-allowed domains are blocked silently (no user prompt).");
175
+ }
176
+ else {
177
+ lines.push("Policy: **prompt** — non-allowed domains trigger a user prompt for approval.");
178
+ }
179
+ lines.push("");
180
+ // Excluded commands
181
+ if (config.excludedCommands.length) {
182
+ lines.push("### Excluded Commands (bypass sandbox, still need permission)");
183
+ lines.push(config.excludedCommands.join(", "));
184
+ lines.push("");
185
+ }
186
+ // Escape hatch
187
+ lines.push(`dangerouslyDisableSandbox: ${config.allowUnsandboxedCommands ? "available (user allows)" : "DISABLED (blocked by user)"}`);
188
+ return lines.join("\n");
189
+ }
190
+ buildToolsSection() {
191
+ const tools = this.toolRegistry.getAll();
192
+ const lines = ["## Available Tools", ""];
193
+ const permissionRequired = [];
194
+ const noPermission = [];
195
+ for (const tool of tools) {
196
+ const def = tool.definition;
197
+ const entry = `- **${def.name}**: ${def.description.split(".")[0]}.`;
198
+ if (def.requiresPermission) {
199
+ permissionRequired.push(entry);
200
+ }
201
+ else {
202
+ noPermission.push(entry);
203
+ }
204
+ }
205
+ if (noPermission.length) {
206
+ lines.push("### Free to use (no permission needed):");
207
+ lines.push(...noPermission);
208
+ lines.push("");
209
+ }
210
+ if (permissionRequired.length) {
211
+ lines.push("### Requires permission:");
212
+ lines.push(...permissionRequired);
213
+ lines.push("");
214
+ }
215
+ lines.push(`Total: ${tools.length} tools (${noPermission.length} free, ${permissionRequired.length} permission-required)`);
216
+ return lines.join("\n");
217
+ }
218
+ }
219
+ exports.SystemInfoTool = SystemInfoTool;
220
+ //# sourceMappingURL=system-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-info.js","sourceRoot":"","sources":["../../src/tools/system-info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Todo Tool
3
+ *
4
+ * Allows the LLM to create, update, and manage tasks during a session.
5
+ * This helps users see what the agent is working on and track progress.
6
+ */
7
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
8
+ import { TodoStore } from "../utils/todo";
9
+ export declare class TodoTool implements BaseTool {
10
+ private todoStore;
11
+ definition: ToolDefinition;
12
+ constructor(todoStore: TodoStore);
13
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
14
+ private getStatusIcon;
15
+ }
16
+ //# sourceMappingURL=todo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo.d.ts","sourceRoot":"","sources":["../../src/tools/todo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,SAAS,EAAmB,MAAM,eAAe,CAAC;AAE3D,qBAAa,QAAS,YAAW,QAAQ;IA8C3B,OAAO,CAAC,SAAS;IA7C7B,UAAU,EAAE,cAAc,CA2CxB;gBAEkB,SAAS,EAAE,SAAS;IAElC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAkFlE,OAAO,CAAC,aAAa;CAQtB"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * Todo Tool
4
+ *
5
+ * Allows the LLM to create, update, and manage tasks during a session.
6
+ * This helps users see what the agent is working on and track progress.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TodoTool = void 0;
10
+ class TodoTool {
11
+ todoStore;
12
+ definition = {
13
+ name: "todo",
14
+ description: `Manage tasks for the current session. Use this to:
15
+ - Create tasks to track what needs to be done
16
+ - Update task status as you work (pending -> in_progress -> completed)
17
+ - Help the user see your progress
18
+
19
+ Actions:
20
+ - create: Create a new task (returns task ID)
21
+ - update: Update a task's status or details
22
+ - list: Show all tasks
23
+ - delete: Remove a task
24
+
25
+ Always mark tasks as in_progress when starting work, and completed when done.`,
26
+ inputSchema: {
27
+ type: "object",
28
+ properties: {
29
+ action: {
30
+ type: "string",
31
+ enum: ["create", "update", "list", "delete"],
32
+ description: "The action to perform",
33
+ },
34
+ subject: {
35
+ type: "string",
36
+ description: "Task title (for create)",
37
+ },
38
+ description: {
39
+ type: "string",
40
+ description: "Task description (for create/update)",
41
+ },
42
+ id: {
43
+ type: "string",
44
+ description: "Task ID (for update/delete)",
45
+ },
46
+ status: {
47
+ type: "string",
48
+ enum: ["pending", "in_progress", "completed", "blocked"],
49
+ description: "Task status (for update)",
50
+ },
51
+ },
52
+ required: ["action"],
53
+ },
54
+ requiresPermission: false,
55
+ };
56
+ constructor(todoStore) {
57
+ this.todoStore = todoStore;
58
+ }
59
+ async execute(input) {
60
+ const action = input.action;
61
+ switch (action) {
62
+ case "create": {
63
+ const subject = input.subject;
64
+ if (!subject) {
65
+ return { success: false, output: "", error: "Subject is required for create" };
66
+ }
67
+ const description = input.description;
68
+ const todo = this.todoStore.create(subject, description);
69
+ return {
70
+ success: true,
71
+ output: `Created task #${todo.id}: ${todo.subject}`,
72
+ };
73
+ }
74
+ case "update": {
75
+ const id = input.id;
76
+ if (!id) {
77
+ return { success: false, output: "", error: "Task ID is required for update" };
78
+ }
79
+ const todo = this.todoStore.get(id);
80
+ if (!todo) {
81
+ return { success: false, output: "", error: `Task #${id} not found` };
82
+ }
83
+ const updates = {};
84
+ if (input.status)
85
+ updates.status = input.status;
86
+ if (input.subject)
87
+ updates.subject = input.subject;
88
+ if (input.description)
89
+ updates.description = input.description;
90
+ const updated = this.todoStore.update(id, updates);
91
+ if (!updated) {
92
+ return { success: false, output: "", error: `Failed to update task #${id}` };
93
+ }
94
+ const statusIcon = this.getStatusIcon(updated.status);
95
+ return {
96
+ success: true,
97
+ output: `Updated task #${id}: ${statusIcon} ${updated.subject} [${updated.status}]`,
98
+ };
99
+ }
100
+ case "list": {
101
+ const todos = this.todoStore.getAll();
102
+ if (todos.length === 0) {
103
+ return { success: true, output: "No tasks" };
104
+ }
105
+ const lines = todos.map(t => {
106
+ const icon = this.getStatusIcon(t.status);
107
+ const desc = t.description ? ` - ${t.description}` : "";
108
+ return `${icon} #${t.id} [${t.status}] ${t.subject}${desc}`;
109
+ });
110
+ const summary = this.todoStore.getSummary();
111
+ lines.push("");
112
+ lines.push(`Summary: ${summary.completed}/${summary.total} completed`);
113
+ if (summary.in_progress > 0)
114
+ lines.push(` In progress: ${summary.in_progress}`);
115
+ if (summary.blocked > 0)
116
+ lines.push(` Blocked: ${summary.blocked}`);
117
+ return { success: true, output: lines.join("\n") };
118
+ }
119
+ case "delete": {
120
+ const id = input.id;
121
+ if (!id) {
122
+ return { success: false, output: "", error: "Task ID is required for delete" };
123
+ }
124
+ const deleted = this.todoStore.delete(id);
125
+ if (!deleted) {
126
+ return { success: false, output: "", error: `Task #${id} not found` };
127
+ }
128
+ return { success: true, output: `Deleted task #${id}` };
129
+ }
130
+ default:
131
+ return { success: false, output: "", error: `Unknown action: ${action}` };
132
+ }
133
+ }
134
+ getStatusIcon(status) {
135
+ switch (status) {
136
+ case "pending": return "[ ]";
137
+ case "in_progress": return "[~]";
138
+ case "completed": return "[x]";
139
+ case "blocked": return "[!]";
140
+ }
141
+ }
142
+ }
143
+ exports.TodoTool = TodoTool;
144
+ //# sourceMappingURL=todo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo.js","sourceRoot":"","sources":["../../src/tools/todo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /** Schema for a tool the agent can call */
2
+ export interface ToolDefinition {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: Record<string, unknown>;
6
+ requiresPermission: boolean;
7
+ permissionMessage?: (input: Record<string, unknown>) => string;
8
+ }
9
+ /** Result returned after executing a tool */
10
+ export interface ToolResult {
11
+ success: boolean;
12
+ output: string;
13
+ error?: string;
14
+ }
15
+ /** Every tool implements this interface */
16
+ export interface BaseTool {
17
+ definition: ToolDefinition;
18
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAChE;AAED,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2CAA2C;AAC3C,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC9D"}