@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 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * MCP (Model Context Protocol) Server Support
4
+ *
5
+ * MCP is an open protocol that lets AI models connect to external
6
+ * data sources and tools. Think of it as "USB for AI" — a standard
7
+ * way to plug in capabilities.
8
+ *
9
+ * How it works:
10
+ * 1. User configures MCP servers in .cdoing/mcp.json or settings
11
+ * 2. On startup, we connect to each configured server
12
+ * 3. Discover available tools from each server
13
+ * 4. Register those tools so the agent can call them
14
+ * 5. Route tool calls through the MCP protocol
15
+ *
16
+ * Configuration format (.cdoing/mcp.json):
17
+ * {
18
+ * "servers": [
19
+ * {
20
+ * "name": "jira",
21
+ * "command": "npx",
22
+ * "args": ["-y", "@modelcontextprotocol/server-jira"],
23
+ * "env": { "JIRA_URL": "https://..." }
24
+ * }
25
+ * ]
26
+ * }
27
+ *
28
+ * Learning note: MCP uses JSON-RPC over stdio or SSE (Server-Sent Events).
29
+ * Each server is a separate process that we spawn and communicate with
30
+ * through its stdin/stdout. This isolation means a buggy MCP server
31
+ * can't crash the main agent.
32
+ */
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.McpManager = void 0;
35
+ var manager_1 = require("./manager");
36
+ Object.defineProperty(exports, "McpManager", { enumerable: true, get: function () { return manager_1.McpManager; } });
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;AAEH,qCAA2E;AAAlE,qGAAA,UAAU,OAAA"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * MCP Manager — Manages connections to MCP (Model Context Protocol) servers.
3
+ *
4
+ * Handles:
5
+ * - Loading server configurations
6
+ * - Spawning and connecting to server processes
7
+ * - Tool discovery (listing available tools from each server)
8
+ * - Routing tool calls to the correct server
9
+ * - Graceful shutdown of server processes
10
+ *
11
+ * Learning note: This uses JSON-RPC 2.0 over stdio for communication.
12
+ * Each message is a JSON object separated by newlines. The protocol
13
+ * is stateless — each request gets exactly one response.
14
+ */
15
+ /**
16
+ * Configuration for a single MCP server.
17
+ */
18
+ export interface McpServerConfig {
19
+ /** Human-readable name for this server */
20
+ name: string;
21
+ /** Command to run the server (e.g., "npx", "python") */
22
+ command: string;
23
+ /** Arguments to pass to the command */
24
+ args?: string[];
25
+ /** Environment variables for the server process */
26
+ env?: Record<string, string>;
27
+ /** Working directory for the server */
28
+ cwd?: string;
29
+ /** Whether this server is enabled (default: true) */
30
+ enabled?: boolean;
31
+ }
32
+ /**
33
+ * A tool discovered from an MCP server.
34
+ */
35
+ export interface McpTool {
36
+ /** Tool name (namespaced: "server_name.tool_name") */
37
+ name: string;
38
+ /** Human-readable description */
39
+ description: string;
40
+ /** JSON Schema for the tool's input parameters */
41
+ inputSchema: Record<string, unknown>;
42
+ /** Which MCP server provides this tool */
43
+ serverName: string;
44
+ }
45
+ export declare class McpManager {
46
+ /** Active server connections */
47
+ private connections;
48
+ /** Working directory for resolving config paths */
49
+ private workingDir;
50
+ constructor(workingDir: string);
51
+ /**
52
+ * Load MCP server configurations from config files.
53
+ *
54
+ * Checks these locations (in order):
55
+ * 1. .cdoing/mcp.json (project-specific)
56
+ * 2. ~/.cdoing/mcp.json (global)
57
+ *
58
+ * Learning note: Project configs take precedence over global ones.
59
+ * This lets you have project-specific MCP servers (e.g., a Jira
60
+ * server for one project, a Notion server for another).
61
+ */
62
+ loadConfig(): McpServerConfig[];
63
+ /**
64
+ * Connect to all configured MCP servers.
65
+ * Spawns each server process and discovers its tools.
66
+ */
67
+ connectAll(): Promise<void>;
68
+ /**
69
+ * Connect to a single MCP server.
70
+ *
71
+ * Learning note: We spawn the server as a child process and
72
+ * communicate via JSON-RPC over stdio. The "initialize" handshake
73
+ * tells the server our capabilities, and "tools/list" discovers
74
+ * what tools it offers.
75
+ */
76
+ connect(config: McpServerConfig): Promise<void>;
77
+ /**
78
+ * Send a JSON-RPC request to an MCP server.
79
+ *
80
+ * Learning note: JSON-RPC uses numeric IDs to match requests
81
+ * with responses. We store pending requests in a Map and resolve
82
+ * the Promise when we get the matching response.
83
+ */
84
+ private sendRequest;
85
+ /**
86
+ * Handle an incoming message from an MCP server.
87
+ */
88
+ private handleServerMessage;
89
+ /**
90
+ * Get all tools from all connected MCP servers.
91
+ */
92
+ getAllTools(): McpTool[];
93
+ /**
94
+ * Call a tool on an MCP server.
95
+ *
96
+ * @param toolName - Namespaced tool name (e.g., "jira_create_issue")
97
+ * @param input - Tool input parameters
98
+ * @returns Tool execution result
99
+ */
100
+ callTool(toolName: string, input: Record<string, unknown>): Promise<{
101
+ success: boolean;
102
+ output: string;
103
+ error?: string;
104
+ }>;
105
+ /**
106
+ * Check if a tool name belongs to an MCP server.
107
+ */
108
+ isMcpTool(toolName: string): boolean;
109
+ /**
110
+ * Get connected server names.
111
+ */
112
+ getConnectedServers(): string[];
113
+ /**
114
+ * Disconnect from all MCP servers.
115
+ * Sends a graceful shutdown signal to each server process.
116
+ */
117
+ disconnectAll(): Promise<void>;
118
+ /**
119
+ * Update the working directory.
120
+ */
121
+ setWorkingDir(dir: string): void;
122
+ }
123
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IAEb,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IAEb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,qBAAa,UAAU;IACrB,gCAAgC;IAChC,OAAO,CAAC,WAAW,CAAoC;IAEvD,mDAAmD;IACnD,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAI9B;;;;;;;;;;OAUG;IACH,UAAU,IAAI,eAAe,EAAE;IA8B/B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA+ErD;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,WAAW,IAAI,OAAO,EAAE;IAQxB;;;;;;OAMG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QACxE,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IA8BF;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IASpC;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAWpC;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAGjC"}
@@ -0,0 +1,331 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Manager — Manages connections to MCP (Model Context Protocol) servers.
4
+ *
5
+ * Handles:
6
+ * - Loading server configurations
7
+ * - Spawning and connecting to server processes
8
+ * - Tool discovery (listing available tools from each server)
9
+ * - Routing tool calls to the correct server
10
+ * - Graceful shutdown of server processes
11
+ *
12
+ * Learning note: This uses JSON-RPC 2.0 over stdio for communication.
13
+ * Each message is a JSON object separated by newlines. The protocol
14
+ * is stateless — each request gets exactly one response.
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.McpManager = void 0;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const os = __importStar(require("os"));
54
+ const child_process_1 = require("child_process");
55
+ class McpManager {
56
+ /** Active server connections */
57
+ connections = new Map();
58
+ /** Working directory for resolving config paths */
59
+ workingDir;
60
+ constructor(workingDir) {
61
+ this.workingDir = workingDir;
62
+ }
63
+ /**
64
+ * Load MCP server configurations from config files.
65
+ *
66
+ * Checks these locations (in order):
67
+ * 1. .cdoing/mcp.json (project-specific)
68
+ * 2. ~/.cdoing/mcp.json (global)
69
+ *
70
+ * Learning note: Project configs take precedence over global ones.
71
+ * This lets you have project-specific MCP servers (e.g., a Jira
72
+ * server for one project, a Notion server for another).
73
+ */
74
+ loadConfig() {
75
+ const configs = [];
76
+ const paths = [
77
+ path.join(this.workingDir, ".cdoing", "mcp.json"),
78
+ path.join(os.homedir(), ".cdoing", "mcp.json"),
79
+ ];
80
+ for (const configPath of paths) {
81
+ try {
82
+ if (fs.existsSync(configPath)) {
83
+ const raw = fs.readFileSync(configPath, "utf-8");
84
+ const parsed = JSON.parse(raw);
85
+ if (parsed.servers && Array.isArray(parsed.servers)) {
86
+ for (const server of parsed.servers) {
87
+ // Don't add duplicates (project config overrides global)
88
+ if (!configs.some((c) => c.name === server.name)) {
89
+ configs.push(server);
90
+ }
91
+ }
92
+ }
93
+ }
94
+ }
95
+ catch {
96
+ // Skip invalid config files
97
+ }
98
+ }
99
+ return configs;
100
+ }
101
+ /**
102
+ * Connect to all configured MCP servers.
103
+ * Spawns each server process and discovers its tools.
104
+ */
105
+ async connectAll() {
106
+ const configs = this.loadConfig();
107
+ for (const config of configs) {
108
+ if (config.enabled === false)
109
+ continue;
110
+ try {
111
+ await this.connect(config);
112
+ }
113
+ catch (err) {
114
+ console.error(`[MCP] Failed to connect to ${config.name}:`, err);
115
+ }
116
+ }
117
+ }
118
+ /**
119
+ * Connect to a single MCP server.
120
+ *
121
+ * Learning note: We spawn the server as a child process and
122
+ * communicate via JSON-RPC over stdio. The "initialize" handshake
123
+ * tells the server our capabilities, and "tools/list" discovers
124
+ * what tools it offers.
125
+ */
126
+ async connect(config) {
127
+ // Spawn the server process
128
+ const child = (0, child_process_1.spawn)(config.command, config.args || [], {
129
+ cwd: config.cwd || this.workingDir,
130
+ env: { ...process.env, ...config.env },
131
+ stdio: ["pipe", "pipe", "pipe"],
132
+ });
133
+ const connection = {
134
+ config,
135
+ process: child,
136
+ tools: [],
137
+ requestId: 0,
138
+ pendingRequests: new Map(),
139
+ buffer: "",
140
+ };
141
+ // Handle incoming messages from the server
142
+ child.stdout?.on("data", (data) => {
143
+ connection.buffer += data.toString();
144
+ // Process complete JSON-RPC messages (delimited by newlines)
145
+ let newlineIndex;
146
+ while ((newlineIndex = connection.buffer.indexOf("\n")) >= 0) {
147
+ const line = connection.buffer.substring(0, newlineIndex).trim();
148
+ connection.buffer = connection.buffer.substring(newlineIndex + 1);
149
+ if (!line)
150
+ continue;
151
+ try {
152
+ const message = JSON.parse(line);
153
+ this.handleServerMessage(config.name, message, connection);
154
+ }
155
+ catch {
156
+ // Skip non-JSON lines (e.g., server startup logs)
157
+ }
158
+ }
159
+ });
160
+ // Handle server errors
161
+ child.stderr?.on("data", (data) => {
162
+ // Log but don't crash — server stderr is often debug output
163
+ const text = data.toString().trim();
164
+ if (text) {
165
+ console.error(`[MCP:${config.name}] ${text}`);
166
+ }
167
+ });
168
+ child.on("exit", (code) => {
169
+ this.connections.delete(config.name);
170
+ });
171
+ this.connections.set(config.name, connection);
172
+ // Perform MCP handshake
173
+ try {
174
+ await this.sendRequest(config.name, "initialize", {
175
+ protocolVersion: "2024-11-05",
176
+ capabilities: {},
177
+ clientInfo: { name: "cdoing-agent", version: "0.1.0" },
178
+ });
179
+ // Discover tools
180
+ const toolsResult = await this.sendRequest(config.name, "tools/list", {});
181
+ if (toolsResult?.tools) {
182
+ connection.tools = toolsResult.tools.map((t) => ({
183
+ name: `${config.name}_${t.name}`,
184
+ description: `[${config.name}] ${t.description || t.name}`,
185
+ inputSchema: t.inputSchema || { type: "object", properties: {} },
186
+ serverName: config.name,
187
+ }));
188
+ }
189
+ }
190
+ catch (err) {
191
+ // If handshake fails, clean up
192
+ child.kill();
193
+ this.connections.delete(config.name);
194
+ throw err;
195
+ }
196
+ }
197
+ /**
198
+ * Send a JSON-RPC request to an MCP server.
199
+ *
200
+ * Learning note: JSON-RPC uses numeric IDs to match requests
201
+ * with responses. We store pending requests in a Map and resolve
202
+ * the Promise when we get the matching response.
203
+ */
204
+ sendRequest(serverName, method, params) {
205
+ const connection = this.connections.get(serverName);
206
+ if (!connection) {
207
+ return Promise.reject(new Error(`MCP server not connected: ${serverName}`));
208
+ }
209
+ return new Promise((resolve, reject) => {
210
+ const id = ++connection.requestId;
211
+ connection.pendingRequests.set(id, { resolve, reject });
212
+ const message = JSON.stringify({
213
+ jsonrpc: "2.0",
214
+ id,
215
+ method,
216
+ params,
217
+ });
218
+ connection.process.stdin?.write(message + "\n");
219
+ // Timeout after 30 seconds
220
+ setTimeout(() => {
221
+ const pending = connection.pendingRequests.get(id);
222
+ if (pending) {
223
+ connection.pendingRequests.delete(id);
224
+ pending.reject(new Error(`MCP request timeout: ${method}`));
225
+ }
226
+ }, 30000);
227
+ });
228
+ }
229
+ /**
230
+ * Handle an incoming message from an MCP server.
231
+ */
232
+ handleServerMessage(serverName, message, connection) {
233
+ // JSON-RPC response (has an "id" field)
234
+ if (message.id !== undefined) {
235
+ const pending = connection.pendingRequests.get(message.id);
236
+ if (pending) {
237
+ connection.pendingRequests.delete(message.id);
238
+ if (message.error) {
239
+ pending.reject(new Error(message.error.message || "MCP error"));
240
+ }
241
+ else {
242
+ pending.resolve(message.result);
243
+ }
244
+ }
245
+ }
246
+ // JSON-RPC notification (no "id" field) — log but ignore
247
+ }
248
+ /**
249
+ * Get all tools from all connected MCP servers.
250
+ */
251
+ getAllTools() {
252
+ const tools = [];
253
+ for (const connection of this.connections.values()) {
254
+ tools.push(...connection.tools);
255
+ }
256
+ return tools;
257
+ }
258
+ /**
259
+ * Call a tool on an MCP server.
260
+ *
261
+ * @param toolName - Namespaced tool name (e.g., "jira_create_issue")
262
+ * @param input - Tool input parameters
263
+ * @returns Tool execution result
264
+ */
265
+ async callTool(toolName, input) {
266
+ // Find which server provides this tool
267
+ for (const connection of this.connections.values()) {
268
+ const tool = connection.tools.find((t) => t.name === toolName);
269
+ if (tool) {
270
+ // Strip the server name prefix to get the original tool name
271
+ const originalName = toolName.replace(`${tool.serverName}_`, "");
272
+ try {
273
+ const result = await this.sendRequest(tool.serverName, "tools/call", {
274
+ name: originalName,
275
+ arguments: input,
276
+ });
277
+ // MCP tool results have a "content" array
278
+ const output = result?.content
279
+ ?.map((c) => c.text || JSON.stringify(c))
280
+ .join("\n") || JSON.stringify(result);
281
+ return { success: true, output };
282
+ }
283
+ catch (err) {
284
+ const message = err instanceof Error ? err.message : String(err);
285
+ return { success: false, output: "", error: message };
286
+ }
287
+ }
288
+ }
289
+ return { success: false, output: "", error: `Unknown MCP tool: ${toolName}` };
290
+ }
291
+ /**
292
+ * Check if a tool name belongs to an MCP server.
293
+ */
294
+ isMcpTool(toolName) {
295
+ for (const connection of this.connections.values()) {
296
+ if (connection.tools.some((t) => t.name === toolName)) {
297
+ return true;
298
+ }
299
+ }
300
+ return false;
301
+ }
302
+ /**
303
+ * Get connected server names.
304
+ */
305
+ getConnectedServers() {
306
+ return Array.from(this.connections.keys());
307
+ }
308
+ /**
309
+ * Disconnect from all MCP servers.
310
+ * Sends a graceful shutdown signal to each server process.
311
+ */
312
+ async disconnectAll() {
313
+ for (const [name, connection] of this.connections) {
314
+ try {
315
+ connection.process.kill("SIGTERM");
316
+ }
317
+ catch {
318
+ // Process may already be dead
319
+ }
320
+ }
321
+ this.connections.clear();
322
+ }
323
+ /**
324
+ * Update the working directory.
325
+ */
326
+ setWorkingDir(dir) {
327
+ this.workingDir = dir;
328
+ }
329
+ }
330
+ exports.McpManager = McpManager;
331
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * OAuth 2.0 (PKCE) for Claude — Shared Core Module
3
+ *
4
+ * All credential storage, token management, and OAuth flow logic lives here.
5
+ * Both CLI and VS Code extension import from this module.
6
+ *
7
+ * Credential storage:
8
+ * - macOS: encrypted Keychain via `security` CLI
9
+ * - Linux: libsecret via `secret-tool` if available, else file fallback
10
+ * - Windows: Windows Credential Manager via `cmdkey`, else file fallback
11
+ */
12
+ export interface OAuthTokens {
13
+ access_token: string;
14
+ refresh_token?: string;
15
+ expires_at?: number;
16
+ token_type: string;
17
+ }
18
+ export declare function saveOAuthTokens(tokens: OAuthTokens): void;
19
+ export declare function loadOAuthTokens(): OAuthTokens | null;
20
+ export declare function clearOAuthTokens(): void;
21
+ export declare function isOAuthExpired(tokens: OAuthTokens): boolean;
22
+ export declare function refreshAccessToken(refreshToken: string): Promise<OAuthTokens | null>;
23
+ export declare function resolveOAuthToken(): Promise<string | null>;
24
+ export declare function generateOAuthUrl(): {
25
+ url: string;
26
+ codeVerifier: string;
27
+ };
28
+ export declare function exchangeOAuthCode(code: string, codeVerifier: string): Promise<OAuthTokens>;
29
+ export declare function getOAuthStatus(): {
30
+ status: "none" | "active" | "expired";
31
+ expiresAt?: number;
32
+ };
33
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAmKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEzD;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CASpD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAG3D;AAID,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA2B1F;AAID,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUhE;AAID,wBAAgB,gBAAgB,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAgBxE;AAID,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA8BhG;AAID,wBAAgB,cAAc,IAAI;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAK9F"}