@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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * View Diff Tool — show git diff (working changes, staged, between commits).
3
+ */
4
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
5
+ export declare class ViewDiffTool implements BaseTool {
6
+ definition: ToolDefinition;
7
+ private workingDir;
8
+ constructor(workingDir: string);
9
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
10
+ }
11
+ //# sourceMappingURL=view-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-diff.d.ts","sourceRoot":"","sources":["../../src/tools/view-diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpE,qBAAa,YAAa,YAAW,QAAQ;IAC3C,UAAU,EAAE,cAAc,CA8BxB;IAEF,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAIxB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAoDnE"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /**
3
+ * View Diff Tool — show git diff (working changes, staged, between commits).
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ViewDiffTool = void 0;
7
+ const child_process_1 = require("child_process");
8
+ class ViewDiffTool {
9
+ definition = {
10
+ name: "view_diff",
11
+ description: `Show git diff of changes. Supports working changes, staged changes, and diff between commits/branches.
12
+
13
+ Examples:
14
+ - No args: shows unstaged working changes
15
+ - staged=true: shows staged changes (what would be committed)
16
+ - target="main": diff between current branch and main
17
+ - target="HEAD~3": diff against 3 commits ago
18
+ - file_path="src/app.ts": diff for a specific file only`,
19
+ inputSchema: {
20
+ type: "object",
21
+ properties: {
22
+ staged: {
23
+ type: "boolean",
24
+ description: "Show staged changes instead of working changes. Default: false.",
25
+ },
26
+ target: {
27
+ type: "string",
28
+ description: "Compare against a branch, commit, or ref. E.g. 'main', 'HEAD~1', 'abc123'.",
29
+ },
30
+ file_path: {
31
+ type: "string",
32
+ description: "Limit diff to a specific file or directory.",
33
+ },
34
+ },
35
+ required: [],
36
+ },
37
+ requiresPermission: false,
38
+ };
39
+ workingDir;
40
+ constructor(workingDir) {
41
+ this.workingDir = workingDir;
42
+ }
43
+ async execute(input) {
44
+ const staged = input.staged || false;
45
+ const target = input.target || "";
46
+ const filePath = input.file_path || "";
47
+ // Build git diff command
48
+ const parts = ["git", "diff"];
49
+ if (staged && !target) {
50
+ parts.push("--cached");
51
+ }
52
+ else if (target) {
53
+ // Sanitize target — only allow safe git ref characters
54
+ if (!/^[a-zA-Z0-9_.\/~^@{}\-]+$/.test(target)) {
55
+ return { success: false, output: "", error: `Invalid git ref: "${target}"` };
56
+ }
57
+ parts.push(target);
58
+ }
59
+ parts.push("--stat", "--patch");
60
+ if (filePath) {
61
+ parts.push("--", filePath);
62
+ }
63
+ const command = parts.join(" ");
64
+ return new Promise((resolve) => {
65
+ (0, child_process_1.exec)(command, { cwd: this.workingDir, timeout: 30000, maxBuffer: 5 * 1024 * 1024 }, (error, stdout, stderr) => {
66
+ if (error && !stdout) {
67
+ const msg = stderr?.trim() || error.message;
68
+ resolve({ success: false, output: "", error: `git diff failed: ${msg}` });
69
+ return;
70
+ }
71
+ const output = stdout.trim();
72
+ if (!output) {
73
+ const context = staged ? "staged" : target ? `vs ${target}` : "working";
74
+ resolve({ success: true, output: `No changes (${context})` });
75
+ return;
76
+ }
77
+ // Truncate if too large
78
+ const maxLen = 50000;
79
+ const truncated = output.length > maxLen
80
+ ? output.substring(0, maxLen) + `\n\n... [truncated at ${maxLen} characters]`
81
+ : output;
82
+ resolve({ success: true, output: truncated });
83
+ });
84
+ });
85
+ }
86
+ }
87
+ exports.ViewDiffTool = ViewDiffTool;
88
+ //# sourceMappingURL=view-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-diff.js","sourceRoot":"","sources":["../../src/tools/view-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * View Repo Map Tool — generate a structural overview of the repository.
3
+ *
4
+ * Shows the project layout: directories, key files, entry points,
5
+ * config files, and a summary of the codebase structure.
6
+ */
7
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
8
+ export declare class ViewRepoMapTool implements BaseTool {
9
+ definition: ToolDefinition;
10
+ private workingDir;
11
+ constructor(workingDir: string);
12
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
13
+ private buildTree;
14
+ private collectStats;
15
+ private formatStats;
16
+ private getGitInfo;
17
+ }
18
+ //# sourceMappingURL=view-repo-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-repo-map.d.ts","sourceRoot":"","sources":["../../src/tools/view-repo-map.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAsCpE,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,UAAU,EAAE,cAAc,CAsBxB;IAEF,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAIxB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IA6BlE,OAAO,CAAC,SAAS;IA0CjB,OAAO,CAAC,YAAY;IA6CpB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,UAAU;CAyBnB"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ /**
3
+ * View Repo Map Tool — generate a structural overview of the repository.
4
+ *
5
+ * Shows the project layout: directories, key files, entry points,
6
+ * config files, and a summary of the codebase structure.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.ViewRepoMapTool = void 0;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const child_process_1 = require("child_process");
46
+ const ALWAYS_IGNORE = new Set([
47
+ "node_modules", ".git", "dist", "build", "out", ".next", ".nuxt",
48
+ "__pycache__", ".cache", ".turbo", "coverage", "venv", ".venv",
49
+ "target", "vendor", ".idea", ".vscode", ".DS_Store", "*.pyc",
50
+ ]);
51
+ const CONFIG_FILES = new Set([
52
+ "package.json", "tsconfig.json", "tsconfig.base.json",
53
+ ".eslintrc.js", ".eslintrc.json", ".prettierrc",
54
+ "jest.config.js", "jest.config.ts", "vitest.config.ts",
55
+ "webpack.config.js", "vite.config.ts", "vite.config.js",
56
+ "rollup.config.js", "esbuild.config.js",
57
+ "Dockerfile", "docker-compose.yml", "docker-compose.yaml",
58
+ "Makefile", "CMakeLists.txt",
59
+ ".env.example", ".gitignore", ".dockerignore",
60
+ "pyproject.toml", "setup.py", "setup.cfg", "requirements.txt",
61
+ "Cargo.toml", "go.mod", "Gemfile", "composer.json",
62
+ "turbo.json", "lerna.json", "nx.json",
63
+ ]);
64
+ const ENTRY_PATTERNS = [
65
+ "index.ts", "index.js", "main.ts", "main.js", "app.ts", "app.js",
66
+ "server.ts", "server.js", "cli.ts", "cli.js",
67
+ "index.py", "main.py", "app.py", "__main__.py",
68
+ "main.go", "main.rs", "lib.rs",
69
+ ];
70
+ class ViewRepoMapTool {
71
+ definition = {
72
+ name: "view_repo_map",
73
+ description: `Generate a structural overview of the repository. Shows:
74
+ - Directory tree (top 2 levels)
75
+ - Detected languages and file counts
76
+ - Config files found
77
+ - Likely entry points
78
+ - Git branch and recent commits
79
+
80
+ Use this to understand a new project before diving into code.`,
81
+ inputSchema: {
82
+ type: "object",
83
+ properties: {
84
+ directory: {
85
+ type: "string",
86
+ description: "Subdirectory to focus on. Defaults to project root.",
87
+ },
88
+ },
89
+ required: [],
90
+ },
91
+ requiresPermission: false,
92
+ };
93
+ workingDir;
94
+ constructor(workingDir) {
95
+ this.workingDir = workingDir;
96
+ }
97
+ async execute(input) {
98
+ const subdir = input.directory || "";
99
+ const rootDir = subdir ? path.resolve(this.workingDir, subdir) : this.workingDir;
100
+ if (!fs.existsSync(rootDir) || !fs.statSync(rootDir).isDirectory()) {
101
+ return { success: false, output: "", error: `Directory not found: ${rootDir}` };
102
+ }
103
+ const sections = [];
104
+ // 1. Header
105
+ sections.push(`# Repository Map: ${path.basename(rootDir)}`);
106
+ sections.push(`Path: ${rootDir}`);
107
+ // 2. Git info
108
+ const gitInfo = await this.getGitInfo(rootDir);
109
+ if (gitInfo)
110
+ sections.push(gitInfo);
111
+ // 3. Directory tree (2 levels)
112
+ const tree = this.buildTree(rootDir, 2);
113
+ sections.push("\n## Directory Structure\n```\n" + tree + "\n```");
114
+ // 4. Stats
115
+ const stats = this.collectStats(rootDir);
116
+ sections.push(this.formatStats(stats));
117
+ return { success: true, output: sections.join("\n") };
118
+ }
119
+ buildTree(dir, maxDepth, prefix = "", depth = 0) {
120
+ if (depth > maxDepth)
121
+ return "";
122
+ let entries;
123
+ try {
124
+ entries = fs.readdirSync(dir, { withFileTypes: true });
125
+ }
126
+ catch {
127
+ return "";
128
+ }
129
+ entries = entries
130
+ .filter((e) => !ALWAYS_IGNORE.has(e.name) && !e.name.startsWith("."))
131
+ .sort((a, b) => {
132
+ if (a.isDirectory() && !b.isDirectory())
133
+ return -1;
134
+ if (!a.isDirectory() && b.isDirectory())
135
+ return 1;
136
+ return a.name.localeCompare(b.name);
137
+ });
138
+ const lines = [];
139
+ for (let i = 0; i < entries.length; i++) {
140
+ const entry = entries[i];
141
+ const isLast = i === entries.length - 1;
142
+ const connector = isLast ? "└── " : "├── ";
143
+ const childPrefix = isLast ? " " : "│ ";
144
+ if (entry.isDirectory()) {
145
+ lines.push(`${prefix}${connector}${entry.name}/`);
146
+ const subtree = this.buildTree(path.join(dir, entry.name), maxDepth, prefix + childPrefix, depth + 1);
147
+ if (subtree)
148
+ lines.push(subtree);
149
+ }
150
+ else {
151
+ lines.push(`${prefix}${connector}${entry.name}`);
152
+ }
153
+ }
154
+ return lines.join("\n");
155
+ }
156
+ collectStats(dir, stats, depth = 0) {
157
+ if (!stats) {
158
+ stats = { totalFiles: 0, totalDirs: 0, languages: new Map(), configFiles: [], entryPoints: [] };
159
+ }
160
+ if (depth > 10 || stats.totalFiles > 5000)
161
+ return stats;
162
+ let entries;
163
+ try {
164
+ entries = fs.readdirSync(dir, { withFileTypes: true });
165
+ }
166
+ catch {
167
+ return stats;
168
+ }
169
+ for (const entry of entries) {
170
+ if (ALWAYS_IGNORE.has(entry.name))
171
+ continue;
172
+ if (entry.isDirectory()) {
173
+ stats.totalDirs++;
174
+ this.collectStats(path.join(dir, entry.name), stats, depth + 1);
175
+ }
176
+ else {
177
+ stats.totalFiles++;
178
+ // Track language
179
+ const ext = path.extname(entry.name).toLowerCase();
180
+ if (ext) {
181
+ stats.languages.set(ext, (stats.languages.get(ext) || 0) + 1);
182
+ }
183
+ // Config files
184
+ if (CONFIG_FILES.has(entry.name) && depth <= 2) {
185
+ const rel = path.relative(this.workingDir, path.join(dir, entry.name));
186
+ stats.configFiles.push(rel);
187
+ }
188
+ // Entry points
189
+ if (ENTRY_PATTERNS.includes(entry.name) && depth <= 3) {
190
+ const rel = path.relative(this.workingDir, path.join(dir, entry.name));
191
+ stats.entryPoints.push(rel);
192
+ }
193
+ }
194
+ }
195
+ return stats;
196
+ }
197
+ formatStats(stats) {
198
+ const lines = ["\n## Summary"];
199
+ lines.push(`- **${stats.totalFiles}** files in **${stats.totalDirs}** directories`);
200
+ // Languages (top 10)
201
+ if (stats.languages.size > 0) {
202
+ const sorted = [...stats.languages.entries()]
203
+ .sort((a, b) => b[1] - a[1])
204
+ .slice(0, 10);
205
+ const langStr = sorted.map(([ext, count]) => `${ext} (${count})`).join(", ");
206
+ lines.push(`- **Languages:** ${langStr}`);
207
+ }
208
+ // Config files
209
+ if (stats.configFiles.length > 0) {
210
+ lines.push(`\n### Config Files`);
211
+ for (const f of stats.configFiles.slice(0, 20))
212
+ lines.push(`- ${f}`);
213
+ }
214
+ // Entry points
215
+ if (stats.entryPoints.length > 0) {
216
+ lines.push(`\n### Entry Points`);
217
+ for (const f of stats.entryPoints.slice(0, 20))
218
+ lines.push(`- ${f}`);
219
+ }
220
+ return lines.join("\n");
221
+ }
222
+ getGitInfo(dir) {
223
+ return new Promise((resolve) => {
224
+ (0, child_process_1.exec)('git branch --show-current && echo "---" && git log --oneline -5 2>/dev/null', { cwd: dir, timeout: 5000 }, (error, stdout) => {
225
+ if (error || !stdout.trim()) {
226
+ resolve(null);
227
+ return;
228
+ }
229
+ const parts = stdout.split("---");
230
+ const branch = parts[0]?.trim();
231
+ const commits = parts[1]?.trim();
232
+ const lines = [`Branch: **${branch}**`];
233
+ if (commits) {
234
+ lines.push("\nRecent commits:");
235
+ for (const c of commits.split("\n").slice(0, 5)) {
236
+ lines.push(` ${c.trim()}`);
237
+ }
238
+ }
239
+ resolve(lines.join("\n"));
240
+ });
241
+ });
242
+ }
243
+ }
244
+ exports.ViewRepoMapTool = ViewRepoMapTool;
245
+ //# sourceMappingURL=view-repo-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-repo-map.js","sourceRoot":"","sources":["../../src/tools/view-repo-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Web Fetch Tool — fetch content from URLs.
3
+ * Supports HTML pages (extracts text), JSON APIs, and plain text.
4
+ */
5
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
6
+ import type { SandboxManager } from "../sandbox";
7
+ export declare class WebFetchTool implements BaseTool {
8
+ definition: ToolDefinition;
9
+ private sandboxManager?;
10
+ constructor(sandboxManager?: SandboxManager);
11
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
12
+ }
13
+ //# sourceMappingURL=web-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,YAAa,YAAW,QAAQ;IAC3C,UAAU,EAAE,cAAc,CAoBxB;IAEF,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,cAAc,CAAC,EAAE,cAAc;IAIrC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CA4DnE"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * Web Fetch Tool — fetch content from URLs.
4
+ * Supports HTML pages (extracts text), JSON APIs, and plain text.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WebFetchTool = void 0;
8
+ class WebFetchTool {
9
+ definition = {
10
+ name: "web_fetch",
11
+ description: "Fetch content from a URL. Returns the text content of the page. Useful for reading documentation, APIs, or web pages. Requires user permission. Network access is controlled by sandbox domain rules — requests to non-allowed domains may be blocked.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {
15
+ url: {
16
+ type: "string",
17
+ description: "The URL to fetch",
18
+ },
19
+ max_length: {
20
+ type: "number",
21
+ description: "Maximum characters to return. Default: 10000.",
22
+ },
23
+ },
24
+ required: ["url"],
25
+ },
26
+ requiresPermission: true,
27
+ permissionMessage: (input) => `Fetch URL: ${input.url}`,
28
+ };
29
+ sandboxManager;
30
+ constructor(sandboxManager) {
31
+ this.sandboxManager = sandboxManager;
32
+ }
33
+ async execute(input) {
34
+ const url = input.url;
35
+ const maxLength = input.max_length || 10000;
36
+ // Validate URL
37
+ try {
38
+ new URL(url);
39
+ }
40
+ catch {
41
+ return { success: false, output: "", error: `Invalid URL: ${url}` };
42
+ }
43
+ // Sandbox network check
44
+ if (this.sandboxManager) {
45
+ const check = await this.sandboxManager.checkNetworkAccess(url);
46
+ if (!check.allowed) {
47
+ return { success: false, output: "", error: check.reason || "Sandbox: network access denied" };
48
+ }
49
+ }
50
+ try {
51
+ const controller = new AbortController();
52
+ const timeout = setTimeout(() => controller.abort(), 30000);
53
+ const response = await fetch(url, {
54
+ signal: controller.signal,
55
+ headers: {
56
+ "User-Agent": "Cdoing-Agent/0.1.0",
57
+ "Accept": "text/html,application/json,text/plain,*/*",
58
+ },
59
+ });
60
+ clearTimeout(timeout);
61
+ if (!response.ok) {
62
+ return {
63
+ success: false,
64
+ output: "",
65
+ error: `HTTP ${response.status}: ${response.statusText}`,
66
+ };
67
+ }
68
+ const contentType = response.headers.get("content-type") || "";
69
+ let text = await response.text();
70
+ // If HTML, strip tags and extract text content
71
+ if (contentType.includes("text/html")) {
72
+ text = stripHtml(text);
73
+ }
74
+ // Truncate if too long
75
+ if (text.length > maxLength) {
76
+ text = text.substring(0, maxLength) + `\n\n... [truncated at ${maxLength} characters]`;
77
+ }
78
+ return { success: true, output: text || "(empty response)" };
79
+ }
80
+ catch (err) {
81
+ const message = err instanceof Error ? err.message : String(err);
82
+ return { success: false, output: "", error: `Fetch failed: ${message}` };
83
+ }
84
+ }
85
+ }
86
+ exports.WebFetchTool = WebFetchTool;
87
+ /** Simple HTML-to-text: remove tags, decode common entities, collapse whitespace */
88
+ function stripHtml(html) {
89
+ return html
90
+ // Remove script and style blocks
91
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "")
92
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "")
93
+ // Remove HTML tags
94
+ .replace(/<[^>]+>/g, " ")
95
+ // Decode common entities
96
+ .replace(/&amp;/g, "&")
97
+ .replace(/&lt;/g, "<")
98
+ .replace(/&gt;/g, ">")
99
+ .replace(/&quot;/g, '"')
100
+ .replace(/&#39;/g, "'")
101
+ .replace(/&nbsp;/g, " ")
102
+ // Collapse whitespace
103
+ .replace(/\s+/g, " ")
104
+ .trim();
105
+ }
106
+ //# sourceMappingURL=web-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Web Search Tool — search the web using DuckDuckGo's HTML page.
3
+ * No API key required — uses DDG's lite HTML interface.
4
+ */
5
+ import type { BaseTool, ToolDefinition, ToolResult } from "./types";
6
+ export declare class WebSearchTool implements BaseTool {
7
+ definition: ToolDefinition;
8
+ execute(input: Record<string, unknown>): Promise<ToolResult>;
9
+ }
10
+ //# sourceMappingURL=web-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpE,qBAAa,aAAc,YAAW,QAAQ;IAC5C,UAAU,EAAE,cAAc,CAoBxB;IAEI,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAiDnE"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * Web Search Tool — search the web using DuckDuckGo's HTML page.
4
+ * No API key required — uses DDG's lite HTML interface.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WebSearchTool = void 0;
8
+ class WebSearchTool {
9
+ definition = {
10
+ name: "web_search",
11
+ description: "Search the web for information. Returns search results with titles, URLs, and snippets. Useful for finding documentation, solutions, or current information.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {
15
+ query: {
16
+ type: "string",
17
+ description: "The search query",
18
+ },
19
+ max_results: {
20
+ type: "number",
21
+ description: "Maximum number of results. Default: 5.",
22
+ },
23
+ },
24
+ required: ["query"],
25
+ },
26
+ requiresPermission: true,
27
+ permissionMessage: (input) => `Web search: ${input.query}`,
28
+ };
29
+ async execute(input) {
30
+ const query = input.query;
31
+ const maxResults = input.max_results || 5;
32
+ try {
33
+ const encodedQuery = encodeURIComponent(query);
34
+ const url = `https://lite.duckduckgo.com/lite/?q=${encodedQuery}`;
35
+ const controller = new AbortController();
36
+ const timeout = setTimeout(() => controller.abort(), 15000);
37
+ const response = await fetch(url, {
38
+ signal: controller.signal,
39
+ headers: {
40
+ "User-Agent": "Cdoing-Agent/0.1.0",
41
+ "Accept": "text/html",
42
+ },
43
+ });
44
+ clearTimeout(timeout);
45
+ if (!response.ok) {
46
+ return {
47
+ success: false,
48
+ output: "",
49
+ error: `Search failed: HTTP ${response.status}`,
50
+ };
51
+ }
52
+ const html = await response.text();
53
+ const results = parseSearchResults(html, maxResults);
54
+ if (results.length === 0) {
55
+ return { success: true, output: "No results found." };
56
+ }
57
+ const formatted = results
58
+ .map((r, i) => `${i + 1}. **${r.title}**\n ${r.url}\n ${r.snippet}`)
59
+ .join("\n\n");
60
+ return {
61
+ success: true,
62
+ output: `Search results for "${query}":\n\n${formatted}`,
63
+ };
64
+ }
65
+ catch (err) {
66
+ const message = err instanceof Error ? err.message : String(err);
67
+ return { success: false, output: "", error: `Search failed: ${message}` };
68
+ }
69
+ }
70
+ }
71
+ exports.WebSearchTool = WebSearchTool;
72
+ /** Parse DDG lite HTML for search results */
73
+ function parseSearchResults(html, maxResults) {
74
+ const results = [];
75
+ // DDG lite puts results in table rows with class "result-link" for titles
76
+ // and "result-snippet" for descriptions
77
+ const linkRegex = /<a[^>]+class="result-link"[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi;
78
+ const snippetRegex = /<td[^>]+class="result-snippet"[^>]*>([\s\S]*?)<\/td>/gi;
79
+ const links = [];
80
+ const snippets = [];
81
+ let match;
82
+ while ((match = linkRegex.exec(html)) !== null) {
83
+ links.push({
84
+ url: match[1].replace(/&amp;/g, "&"),
85
+ title: match[2].replace(/<[^>]+>/g, "").trim(),
86
+ });
87
+ }
88
+ while ((match = snippetRegex.exec(html)) !== null) {
89
+ snippets.push(match[1]
90
+ .replace(/<[^>]+>/g, "")
91
+ .replace(/&amp;/g, "&")
92
+ .replace(/&lt;/g, "<")
93
+ .replace(/&gt;/g, ">")
94
+ .replace(/&quot;/g, '"')
95
+ .trim());
96
+ }
97
+ for (let i = 0; i < Math.min(links.length, maxResults); i++) {
98
+ results.push({
99
+ title: links[i].title || "(untitled)",
100
+ url: links[i].url,
101
+ snippet: snippets[i] || "",
102
+ });
103
+ }
104
+ return results;
105
+ }
106
+ //# sourceMappingURL=web-search.js.map