@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,261 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ShellExecTool = void 0;
37
+ const child_process_1 = require("child_process");
38
+ const os = __importStar(require("os"));
39
+ const shell_paths_1 = require("../utils/shell-paths");
40
+ const IS_WINDOWS = os.platform() === "win32";
41
+ /**
42
+ * Get the shell command and args for the current platform.
43
+ * - Windows: PowerShell (more capable than cmd.exe)
44
+ * - macOS: user's shell with login flag (loads .zshrc/.bashrc for PATH, nvm, pyenv, etc.)
45
+ * - Linux: user's shell with login flag
46
+ */
47
+ function getShellCommand(command) {
48
+ if (IS_WINDOWS) {
49
+ return {
50
+ shell: "powershell.exe",
51
+ args: ["-NoLogo", "-ExecutionPolicy", "Bypass", "-Command", command],
52
+ };
53
+ }
54
+ const userShell = process.env.SHELL || (os.platform() === "darwin" ? "/bin/zsh" : "/bin/bash");
55
+ return { shell: userShell, args: ["-l", "-c", command] };
56
+ }
57
+ /** For exec() — the shell to use */
58
+ const SHELL = IS_WINDOWS ? "powershell.exe" : process.env.SHELL || "/bin/sh";
59
+ /** Color-supporting environment variables */
60
+ const COLOR_ENV = {
61
+ FORCE_COLOR: "1",
62
+ COLORTERM: "truecolor",
63
+ TERM: "xterm-256color",
64
+ CLICOLOR: "1",
65
+ CLICOLOR_FORCE: "1",
66
+ };
67
+ /** Absolute danger — always blocked regardless of permissions */
68
+ const ALWAYS_BLOCKED = [
69
+ // Unix — catastrophic filesystem destruction
70
+ "rm -rf /",
71
+ "rm -rf ~",
72
+ "rm -rf /*",
73
+ "rm -rf ~/*",
74
+ "rm -rf $HOME",
75
+ "mkfs",
76
+ "dd if=",
77
+ ":(){", // fork bomb
78
+ // Windows — catastrophic filesystem destruction
79
+ "rd /s /q C:\\",
80
+ "del /f /s /q C:\\",
81
+ "format C:",
82
+ "rd /s /q %systemroot%",
83
+ ];
84
+ /** Destructive patterns for elevated permission message */
85
+ const DESTRUCTIVE_PATTERNS = [
86
+ // File deletion (Unix)
87
+ /\brm\s/, /\brm$/, /\brmdir\s/, /\bunlink\s/, /\bshred\s/,
88
+ // File deletion (Windows)
89
+ /\bdel\s/, /\brd\s/, /\berase\s/,
90
+ // Git destructive operations
91
+ /\bgit\s+clean\b/,
92
+ /\bgit\s+reset\s+--hard\b/,
93
+ /\bgit\s+push\s+.*--force\b/, /\bgit\s+push\s+-f\b/,
94
+ /\bgit\s+checkout\s+--\s/, /\bgit\s+restore\s/,
95
+ /\bgit\s+branch\s+-[dD]\b/,
96
+ /\bgit\s+rebase\b/,
97
+ /\bgit\s+stash\s+drop\b/,
98
+ // Process killing
99
+ /\bkill\s+-9\b/, /\bkillall\b/, /\bpkill\b/,
100
+ // Permission changes
101
+ /\bchmod\s+777\b/, /\bchmod\s+-R\b/, /\bchown\s+-R\b/,
102
+ // Database destructive (SQL injection risk via shell)
103
+ /\bDROP\s+(TABLE|DATABASE)\b/i, /\bTRUNCATE\s+TABLE\b/i, /\bDELETE\s+FROM\b/i,
104
+ // Disk/system
105
+ /\bdd\s/, /\bmv\s+\//, /\bsudo\s/,
106
+ // Docker destructive
107
+ /\bdocker\s+(rm|rmi|system\s+prune)\b/,
108
+ // npm/package destructive
109
+ /\bnpm\s+unpublish\b/,
110
+ ];
111
+ class ShellExecTool {
112
+ definition = {
113
+ name: "shell_exec",
114
+ description: `Execute a shell command and return its output. Use for builds, tests, git commands, etc. Requires user permission before execution.
115
+
116
+ All file paths in commands are checked against permission rules:
117
+ - Read paths (cat, less, grep, etc.) are checked against Read deny rules.
118
+ - Write paths (cp, mv, redirect >, tee, etc.) are checked against Edit deny rules.
119
+ - Delete paths (rm, rmdir, unlink, etc.) are checked against Delete deny rules.
120
+ - Destructive commands are flagged as high-risk in the permission prompt.
121
+
122
+ Commands are also subject to sandbox restrictions.`,
123
+ inputSchema: {
124
+ type: "object",
125
+ properties: {
126
+ command: { type: "string", description: "The shell command to execute" },
127
+ timeout: { type: "number", description: "Timeout in ms. Default: 120000" },
128
+ background: {
129
+ type: "boolean",
130
+ description: "Run in background. Returns immediately with PID. Use for servers/watchers. Default: false.",
131
+ },
132
+ env_vars: {
133
+ type: "object",
134
+ description: "Environment variables to set (e.g., {\"PORT\": \"3001\", \"DEBUG\": \"app:*\"})",
135
+ additionalProperties: { type: "string" },
136
+ },
137
+ debug: {
138
+ type: "boolean",
139
+ description: "Enable debug/verbose mode. Sets DEBUG=*, NODE_DEBUG=*, RUST_BACKTRACE=1, PYTHONTRACEBACK=1. Default: false",
140
+ },
141
+ dangerouslyDisableSandbox: {
142
+ type: "boolean",
143
+ description: "Set to true to run this command outside the sandbox. Requires permission approval.",
144
+ },
145
+ },
146
+ required: ["command"],
147
+ },
148
+ requiresPermission: true,
149
+ permissionMessage: (input) => {
150
+ const cmd = String(input.command || "");
151
+ if (DESTRUCTIVE_PATTERNS.some((p) => p.test(cmd))) {
152
+ return `⚠ DESTRUCTIVE command: ${cmd}`;
153
+ }
154
+ return `Run command: ${cmd}`;
155
+ },
156
+ };
157
+ workingDir;
158
+ sandboxManager;
159
+ permissionManager;
160
+ constructor(workingDir, sandboxManager, permissionManager) {
161
+ this.workingDir = workingDir;
162
+ this.sandboxManager = sandboxManager;
163
+ this.permissionManager = permissionManager;
164
+ }
165
+ async execute(input) {
166
+ const command = input.command;
167
+ const timeout = input.timeout || 120000;
168
+ const dangerouslyDisableSandbox = input.dangerouslyDisableSandbox || false;
169
+ // Always-blocked patterns (catastrophic destruction)
170
+ for (const pat of ALWAYS_BLOCKED) {
171
+ if (command.includes(pat))
172
+ return { success: false, output: "", error: `Blocked dangerous pattern: ${pat}` };
173
+ }
174
+ // ── Permission-based path checks ────────────────────────────────────────
175
+ if (this.permissionManager) {
176
+ const paths = (0, shell_paths_1.extractShellPaths)(command, this.workingDir);
177
+ // Check read paths against Read deny rules
178
+ for (const p of paths.read) {
179
+ const result = this.permissionManager.checkPathPermission(p, "Read");
180
+ if (result === "deny") {
181
+ return { success: false, output: "", error: `Permission denied: read access to "${p}" is blocked by settings rules` };
182
+ }
183
+ }
184
+ // Check write paths against Edit deny rules
185
+ for (const p of paths.write) {
186
+ const result = this.permissionManager.checkPathPermission(p, "Edit");
187
+ if (result === "deny") {
188
+ return { success: false, output: "", error: `Permission denied: write access to "${p}" is blocked by settings rules` };
189
+ }
190
+ }
191
+ // Check delete paths against Delete deny rules
192
+ for (const p of paths.delete) {
193
+ const result = this.permissionManager.checkPathPermission(p, "Delete");
194
+ if (result === "deny") {
195
+ return { success: false, output: "", error: `Permission denied: delete access to "${p}" is blocked by settings rules` };
196
+ }
197
+ }
198
+ }
199
+ // ── Sandbox checks ──────────────────────────────────────────────────────
200
+ if (this.sandboxManager) {
201
+ const check = this.sandboxManager.checkShellCommand(command, dangerouslyDisableSandbox);
202
+ if (!check.allowed) {
203
+ return { success: false, output: "", error: check.reason || "Sandbox: command blocked" };
204
+ }
205
+ }
206
+ // Build environment
207
+ const env = this.sandboxManager ? this.sandboxManager.getShellEnv() : { ...process.env };
208
+ // Merge user-provided env vars
209
+ const envVars = input.env_vars;
210
+ if (envVars && typeof envVars === "object") {
211
+ for (const [key, val] of Object.entries(envVars)) {
212
+ env[key] = String(val);
213
+ }
214
+ }
215
+ // Debug mode
216
+ if (input.debug) {
217
+ env.DEBUG = env.DEBUG || "*";
218
+ env.NODE_DEBUG = env.NODE_DEBUG || "*";
219
+ env.RUST_BACKTRACE = env.RUST_BACKTRACE || "1";
220
+ env.PYTHONTRACEBACK = env.PYTHONTRACEBACK || "1";
221
+ env.PYTHONFAULTHANDLER = env.PYTHONFAULTHANDLER || "1";
222
+ }
223
+ const background = input.background || false;
224
+ // Merge color env for better terminal output
225
+ Object.assign(env, COLOR_ENV);
226
+ // Background mode: spawn detached, return immediately with PID
227
+ if (background) {
228
+ const { spawn } = require("child_process");
229
+ const { shell, args } = getShellCommand(command);
230
+ const child = spawn(shell, args, {
231
+ cwd: this.workingDir,
232
+ env,
233
+ detached: !IS_WINDOWS,
234
+ stdio: "ignore",
235
+ });
236
+ child.unref();
237
+ return { success: true, output: `Started in background (PID: ${child.pid})` };
238
+ }
239
+ return new Promise((resolve) => {
240
+ (0, child_process_1.exec)(command, { cwd: this.workingDir, timeout, maxBuffer: 10 * 1024 * 1024, env, shell: SHELL }, (error, stdout, stderr) => {
241
+ const outputParts = [];
242
+ if (stdout)
243
+ outputParts.push(stdout.trimEnd());
244
+ if (stderr)
245
+ outputParts.push(`STDERR:\n${stderr.trimEnd()}`);
246
+ const output = outputParts.join("\n\n") || "(no output)";
247
+ if (error?.killed) {
248
+ return resolve({ success: false, output, error: `Timed out after ${timeout}ms` });
249
+ }
250
+ if (error) {
251
+ resolve({ success: false, output, error: `Exit code: ${error.code}` });
252
+ }
253
+ else {
254
+ resolve({ success: true, output });
255
+ }
256
+ });
257
+ });
258
+ }
259
+ }
260
+ exports.ShellExecTool = ShellExecTool;
261
+ //# sourceMappingURL=shell-exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-exec.js","sourceRoot":"","sources":["../../src/tools/shell-exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * SubAgentManager — Tracks all spawned sub-agents.
3
+ *
4
+ * Provides lifecycle management: spawn with custom timeout,
5
+ * check status/output, and terminate running agents.
6
+ */
7
+ export type SubAgentStatus = "running" | "completed" | "failed" | "terminated" | "timed_out";
8
+ export interface SubAgentEntry {
9
+ id: string;
10
+ task: string;
11
+ status: SubAgentStatus;
12
+ output: string;
13
+ error?: string;
14
+ startedAt: number;
15
+ finishedAt?: number;
16
+ /** AbortController to cancel a running agent */
17
+ abort?: AbortController;
18
+ }
19
+ export declare class SubAgentManager {
20
+ private agents;
21
+ private idCounter;
22
+ /** Generate a unique agent ID */
23
+ private nextId;
24
+ /**
25
+ * Spawn a sub-agent. Runs in background — returns the ID immediately.
26
+ * The caller provides runnerFn which actually executes the agent.
27
+ */
28
+ spawn(task: string, runnerFn: (signal: AbortSignal) => Promise<string>, timeoutMs?: number): string;
29
+ /**
30
+ * Spawn and wait — runs synchronously (blocks until done or timeout).
31
+ * Used when the LLM does NOT request background mode.
32
+ */
33
+ spawnAndWait(task: string, runnerFn: (signal: AbortSignal) => Promise<string>, timeoutMs?: number): Promise<SubAgentEntry>;
34
+ /** Get a specific agent's info */
35
+ get(id: string): SubAgentEntry | undefined;
36
+ /** Get status of a specific agent */
37
+ getStatus(id: string): {
38
+ id: string;
39
+ status: SubAgentStatus;
40
+ task: string;
41
+ output: string;
42
+ error?: string;
43
+ durationMs?: number;
44
+ } | null;
45
+ /** List all agents with their statuses */
46
+ listAll(): Array<{
47
+ id: string;
48
+ task: string;
49
+ status: SubAgentStatus;
50
+ durationMs: number;
51
+ }>;
52
+ /** Terminate a running agent */
53
+ terminate(id: string): boolean;
54
+ /** Check if any agents are still running */
55
+ hasRunning(): boolean;
56
+ }
57
+ //# sourceMappingURL=sub-agent-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-manager.d.ts","sourceRoot":"","sources":["../../src/tools/sub-agent-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;AAE7F,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,SAAS,CAAK;IAEtB,iCAAiC;IACjC,OAAO,CAAC,MAAM;IAKd;;;OAGG;IACH,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,EAClD,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM;IA6DT;;;OAGG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,EAClD,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAmBzB,kCAAkC;IAClC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,qCAAqC;IACrC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkBvI,0CAA0C;IAC1C,OAAO,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAW1F,gCAAgC;IAChC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAc9B,4CAA4C;IAC5C,UAAU,IAAI,OAAO;CAGtB"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ /**
3
+ * SubAgentManager — Tracks all spawned sub-agents.
4
+ *
5
+ * Provides lifecycle management: spawn with custom timeout,
6
+ * check status/output, and terminate running agents.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SubAgentManager = void 0;
10
+ class SubAgentManager {
11
+ agents = new Map();
12
+ idCounter = 0;
13
+ /** Generate a unique agent ID */
14
+ nextId() {
15
+ this.idCounter++;
16
+ return `agent_${this.idCounter}_${Date.now().toString(36)}`;
17
+ }
18
+ /**
19
+ * Spawn a sub-agent. Runs in background — returns the ID immediately.
20
+ * The caller provides runnerFn which actually executes the agent.
21
+ */
22
+ spawn(task, runnerFn, timeoutMs) {
23
+ const id = this.nextId();
24
+ const abort = new AbortController();
25
+ const entry = {
26
+ id,
27
+ task,
28
+ status: "running",
29
+ output: "",
30
+ startedAt: Date.now(),
31
+ abort,
32
+ };
33
+ this.agents.set(id, entry);
34
+ // Set up timeout if requested
35
+ let timeoutHandle;
36
+ if (timeoutMs && timeoutMs > 0) {
37
+ timeoutHandle = setTimeout(() => {
38
+ if (entry.status === "running") {
39
+ entry.status = "timed_out";
40
+ entry.error = `Timed out after ${timeoutMs}ms`;
41
+ entry.finishedAt = Date.now();
42
+ abort.abort();
43
+ }
44
+ }, timeoutMs);
45
+ }
46
+ // Run the agent in background
47
+ runnerFn(abort.signal)
48
+ .then((result) => {
49
+ if (entry.status === "running") {
50
+ entry.status = "completed";
51
+ entry.output = result;
52
+ entry.finishedAt = Date.now();
53
+ }
54
+ })
55
+ .catch((err) => {
56
+ if (entry.status === "running") {
57
+ const msg = err instanceof Error ? err.message : String(err);
58
+ if (msg === "__cancelled__" || abort.signal.aborted) {
59
+ // Only set terminated if not already timed_out
60
+ if (entry.status === "running") {
61
+ entry.status = "terminated";
62
+ entry.error = "Terminated by user";
63
+ entry.finishedAt = Date.now();
64
+ }
65
+ }
66
+ else {
67
+ entry.status = "failed";
68
+ entry.error = msg;
69
+ entry.finishedAt = Date.now();
70
+ }
71
+ }
72
+ })
73
+ .finally(() => {
74
+ if (timeoutHandle)
75
+ clearTimeout(timeoutHandle);
76
+ delete entry.abort; // clean up reference
77
+ });
78
+ return id;
79
+ }
80
+ /**
81
+ * Spawn and wait — runs synchronously (blocks until done or timeout).
82
+ * Used when the LLM does NOT request background mode.
83
+ */
84
+ async spawnAndWait(task, runnerFn, timeoutMs) {
85
+ const id = this.spawn(task, runnerFn, timeoutMs);
86
+ const entry = this.agents.get(id);
87
+ // Poll until done (the promise is already running)
88
+ await new Promise((resolve) => {
89
+ const check = () => {
90
+ if (entry.status !== "running") {
91
+ resolve();
92
+ }
93
+ else {
94
+ setTimeout(check, 50);
95
+ }
96
+ };
97
+ check();
98
+ });
99
+ return entry;
100
+ }
101
+ /** Get a specific agent's info */
102
+ get(id) {
103
+ return this.agents.get(id);
104
+ }
105
+ /** Get status of a specific agent */
106
+ getStatus(id) {
107
+ const entry = this.agents.get(id);
108
+ if (!entry)
109
+ return null;
110
+ const durationMs = entry.finishedAt
111
+ ? entry.finishedAt - entry.startedAt
112
+ : Date.now() - entry.startedAt;
113
+ return {
114
+ id: entry.id,
115
+ status: entry.status,
116
+ task: entry.task,
117
+ output: entry.output,
118
+ error: entry.error,
119
+ durationMs,
120
+ };
121
+ }
122
+ /** List all agents with their statuses */
123
+ listAll() {
124
+ return Array.from(this.agents.values()).map((entry) => ({
125
+ id: entry.id,
126
+ task: entry.task,
127
+ status: entry.status,
128
+ durationMs: entry.finishedAt
129
+ ? entry.finishedAt - entry.startedAt
130
+ : Date.now() - entry.startedAt,
131
+ }));
132
+ }
133
+ /** Terminate a running agent */
134
+ terminate(id) {
135
+ const entry = this.agents.get(id);
136
+ if (!entry || entry.status !== "running")
137
+ return false;
138
+ entry.status = "terminated";
139
+ entry.error = "Terminated by user";
140
+ entry.finishedAt = Date.now();
141
+ if (entry.abort) {
142
+ entry.abort.abort();
143
+ delete entry.abort;
144
+ }
145
+ return true;
146
+ }
147
+ /** Check if any agents are still running */
148
+ hasRunning() {
149
+ return Array.from(this.agents.values()).some((e) => e.status === "running");
150
+ }
151
+ }
152
+ exports.SubAgentManager = SubAgentManager;
153
+ //# sourceMappingURL=sub-agent-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-manager.js","sourceRoot":"","sources":["../../src/tools/sub-agent-manager.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAgBH,MAAa,eAAe;IAClB,MAAM,GAA+B,IAAI,GAAG,EAAE,CAAC;IAC/C,SAAS,GAAG,CAAC,CAAC;IAEtB,iCAAiC;IACzB,MAAM;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,SAAS,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,KAAK,CACH,IAAY,EACZ,QAAkD,EAClD,SAAkB;QAElB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QAEpC,MAAM,KAAK,GAAkB;YAC3B,EAAE;YACF,IAAI;YACJ,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK;SACN,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAE3B,8BAA8B;QAC9B,IAAI,aAAwD,CAAC;QAC7D,IAAI,SAAS,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAC/B,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC/B,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;oBAC3B,KAAK,CAAC,KAAK,GAAG,mBAAmB,SAAS,IAAI,CAAC;oBAC/C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC9B,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QAED,8BAA8B;QAC9B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC3B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;gBACtB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,IAAI,GAAG,KAAK,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpD,+CAA+C;oBAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAC/B,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;wBAC5B,KAAK,CAAC,KAAK,GAAG,oBAAoB,CAAC;wBACnC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;oBACxB,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;oBAClB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,qBAAqB;QAC3C,CAAC,CAAC,CAAC;QAEL,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAChB,IAAY,EACZ,QAAkD,EAClD,SAAkB;QAElB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAEnC,mDAAmD;QACnD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,GAAG,EAAE;gBACjB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC/B,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC,CAAC;YACF,KAAK,EAAE,CAAC;QACV,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kCAAkC;IAClC,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,qCAAqC;IACrC,SAAS,CAAC,EAAU;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;YACjC,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS;YACpC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;QAEjC,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU;SACX,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,OAAO;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACtD,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC1B,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS;gBACpC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS;SACjC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gCAAgC;IAChC,SAAS,CAAC,EAAU;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAEvD,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;QAC5B,KAAK,CAAC,KAAK,GAAG,oBAAoB,CAAC;QACnC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IAC5C,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC9E,CAAC;CACF;AAjKD,0CAiKC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sub-Agent Status Tool — check status and output of spawned sub-agents.
3
+ */
4
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
5
+ import type { SubAgentManager } from "./sub-agent-manager";
6
+ export declare class SubAgentStatusTool implements BaseTool {
7
+ definition: ToolDefinition;
8
+ private manager;
9
+ constructor(manager: SubAgentManager);
10
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
11
+ }
12
+ //# sourceMappingURL=sub-agent-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-status.d.ts","sourceRoot":"","sources":["../../src/tools/sub-agent-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,qBAAa,kBAAmB,YAAW,QAAQ;IACjD,UAAU,EAAE,cAAc,CAgBxB;IAEF,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,EAAE,eAAe;IAI9B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAkCnE"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * Sub-Agent Status Tool — check status and output of spawned sub-agents.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SubAgentStatusTool = void 0;
7
+ class SubAgentStatusTool {
8
+ definition = {
9
+ name: "sub_agent_status",
10
+ description: "Check the status and output of a background sub-agent by its ID, or list all sub-agents. Use this to poll for completion of background sub-agents.",
11
+ inputSchema: {
12
+ type: "object",
13
+ properties: {
14
+ agent_id: {
15
+ type: "string",
16
+ description: "The ID of the sub-agent to check. Omit to list all sub-agents.",
17
+ },
18
+ },
19
+ required: [],
20
+ },
21
+ requiresPermission: false,
22
+ };
23
+ manager;
24
+ constructor(manager) {
25
+ this.manager = manager;
26
+ }
27
+ async execute(input) {
28
+ const agentId = input.agent_id;
29
+ if (agentId) {
30
+ // Get specific agent status
31
+ const status = this.manager.getStatus(agentId);
32
+ if (!status) {
33
+ return {
34
+ success: false,
35
+ output: "",
36
+ error: `No sub-agent found with ID "${agentId}". Use sub_agent_status without an agent_id to list all agents.`,
37
+ };
38
+ }
39
+ return {
40
+ success: true,
41
+ output: JSON.stringify(status, null, 2),
42
+ };
43
+ }
44
+ // List all agents
45
+ const all = this.manager.listAll();
46
+ if (all.length === 0) {
47
+ return {
48
+ success: true,
49
+ output: "No sub-agents have been spawned yet.",
50
+ };
51
+ }
52
+ return {
53
+ success: true,
54
+ output: JSON.stringify(all, null, 2),
55
+ };
56
+ }
57
+ }
58
+ exports.SubAgentStatusTool = SubAgentStatusTool;
59
+ //# sourceMappingURL=sub-agent-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-status.js","sourceRoot":"","sources":["../../src/tools/sub-agent-status.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH,MAAa,kBAAkB;IAC7B,UAAU,GAAmB;QAC3B,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,oJAAoJ;QACtJ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gEAAgE;iBACnE;aACF;YACD,QAAQ,EAAE,EAAE;SACb;QACD,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IAEM,OAAO,CAAkB;IAEjC,YAAY,OAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA8B;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAA8B,CAAC;QAErD,IAAI,OAAO,EAAE,CAAC;YACZ,4BAA4B;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,+BAA+B,OAAO,iEAAiE;iBAC/G,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACxC,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,sCAAsC;aAC/C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;SACrC,CAAC;IACJ,CAAC;CACF;AA3DD,gDA2DC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sub-Agent Terminate Tool — stop a running sub-agent.
3
+ */
4
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
5
+ import type { SubAgentManager } from "./sub-agent-manager";
6
+ export declare class SubAgentTerminateTool implements BaseTool {
7
+ definition: ToolDefinition;
8
+ private manager;
9
+ constructor(manager: SubAgentManager);
10
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
11
+ }
12
+ //# sourceMappingURL=sub-agent-terminate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-terminate.d.ts","sourceRoot":"","sources":["../../src/tools/sub-agent-terminate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,qBAAa,qBAAsB,YAAW,QAAQ;IACpD,UAAU,EAAE,cAAc,CAexB;IAEF,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,EAAE,eAAe;IAI9B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CA8BnE"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * Sub-Agent Terminate Tool — stop a running sub-agent.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SubAgentTerminateTool = void 0;
7
+ class SubAgentTerminateTool {
8
+ definition = {
9
+ name: "sub_agent_terminate",
10
+ description: "Terminate a running sub-agent by its ID. Use this to stop a long-running or stuck background sub-agent.",
11
+ inputSchema: {
12
+ type: "object",
13
+ properties: {
14
+ agent_id: {
15
+ type: "string",
16
+ description: "The ID of the sub-agent to terminate",
17
+ },
18
+ },
19
+ required: ["agent_id"],
20
+ },
21
+ requiresPermission: false,
22
+ };
23
+ manager;
24
+ constructor(manager) {
25
+ this.manager = manager;
26
+ }
27
+ async execute(input) {
28
+ const agentId = input.agent_id;
29
+ if (!agentId) {
30
+ return { success: false, output: "", error: "agent_id is required" };
31
+ }
32
+ const terminated = this.manager.terminate(agentId);
33
+ if (!terminated) {
34
+ const status = this.manager.getStatus(agentId);
35
+ if (!status) {
36
+ return {
37
+ success: false,
38
+ output: "",
39
+ error: `No sub-agent found with ID "${agentId}".`,
40
+ };
41
+ }
42
+ return {
43
+ success: false,
44
+ output: "",
45
+ error: `Sub-agent "${agentId}" is not running (status: ${status.status}). Only running agents can be terminated.`,
46
+ };
47
+ }
48
+ return {
49
+ success: true,
50
+ output: `Sub-agent "${agentId}" has been terminated.`,
51
+ };
52
+ }
53
+ }
54
+ exports.SubAgentTerminateTool = SubAgentTerminateTool;
55
+ //# sourceMappingURL=sub-agent-terminate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-terminate.js","sourceRoot":"","sources":["../../src/tools/sub-agent-terminate.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH,MAAa,qBAAqB;IAChC,UAAU,GAAmB;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,yGAAyG;QAC3G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;QACD,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IAEM,OAAO,CAAkB;IAEjC,YAAY,OAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA8B;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAkB,CAAC;QAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;QACvE,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,+BAA+B,OAAO,IAAI;iBAClD,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,cAAc,OAAO,6BAA6B,MAAM,CAAC,MAAM,2CAA2C;aAClH,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,cAAc,OAAO,wBAAwB;SACtD,CAAC;IACJ,CAAC;CACF;AAtDD,sDAsDC"}