@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,352 @@
1
+ "use strict";
2
+ /**
3
+ * Codebase Indexer — orchestrates indexing of an entire codebase.
4
+ *
5
+ * Pipeline:
6
+ * 1. Scan files (respects .gitignore, skips binaries/large files)
7
+ * 2. Compute cache keys (SHA-256 of content)
8
+ * 3. Diff against catalog (find new/modified/deleted files)
9
+ * 4. Chunk new/modified files
10
+ * 5. Insert chunks into SQLite
11
+ * 6. Build FTS5 index
12
+ * 7. Optionally compute embeddings (if provider configured)
13
+ *
14
+ * Supports incremental updates — only re-indexes changed files.
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.CodebaseIndexer = void 0;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const glob_1 = require("glob");
54
+ const database_1 = require("./database");
55
+ const chunker_1 = require("./chunker");
56
+ const gitignore_1 = require("../utils/gitignore");
57
+ /** File extensions to index */
58
+ const INDEXABLE_EXTENSIONS = new Set([
59
+ // Code
60
+ ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
61
+ ".py", ".rb", ".go", ".rs", ".java", ".kt", ".scala",
62
+ ".c", ".cpp", ".h", ".hpp", ".cs", ".swift",
63
+ ".lua", ".php", ".pl", ".sh", ".bash", ".zsh",
64
+ // Config/Data
65
+ ".json", ".yaml", ".yml", ".toml", ".xml",
66
+ ".html", ".css", ".scss", ".less", ".vue", ".svelte",
67
+ // Docs
68
+ ".md", ".mdx", ".txt", ".rst",
69
+ // Other
70
+ ".sql", ".graphql", ".gql", ".proto",
71
+ ".env.example", ".gitignore", ".dockerignore",
72
+ "Dockerfile", "Makefile", "Gemfile",
73
+ ]);
74
+ const SKIP_DIRS = new Set([
75
+ "node_modules", ".git", "dist", "build", "out", ".next", ".nuxt",
76
+ "__pycache__", ".cache", ".turbo", "coverage", "venv", ".venv",
77
+ "target", "vendor", ".idea", ".vscode",
78
+ ]);
79
+ const MAX_FILE_SIZE = 1024 * 1024; // 1MB
80
+ const BATCH_SIZE = 200;
81
+ class CodebaseIndexer {
82
+ db;
83
+ workingDir;
84
+ embeddingProvider;
85
+ constructor(workingDir, embeddingProvider, dbPath) {
86
+ this.workingDir = path.resolve(workingDir);
87
+ this.db = new database_1.IndexDatabase(dbPath);
88
+ this.embeddingProvider = embeddingProvider;
89
+ }
90
+ /**
91
+ * Index the entire codebase (incremental — only processes changed files).
92
+ */
93
+ async index(onProgress) {
94
+ const report = (phase, current, total, message) => {
95
+ onProgress?.({ phase, current, total, message });
96
+ };
97
+ // 1. Scan files
98
+ report("scan", 0, 1, "Scanning files...");
99
+ const files = await this.scanFiles();
100
+ report("scan", 1, 1, `Found ${files.length} files`);
101
+ // 2. Diff against catalog
102
+ report("diff", 0, 1, "Computing changes...");
103
+ const catalogPaths = this.db.getCatalogPaths(this.workingDir);
104
+ const currentPaths = new Map();
105
+ for (const filePath of files) {
106
+ try {
107
+ const content = fs.readFileSync(filePath, "utf-8");
108
+ const key = database_1.IndexDatabase.cacheKey(content);
109
+ currentPaths.set(filePath, key);
110
+ }
111
+ catch {
112
+ // Skip unreadable files
113
+ }
114
+ }
115
+ // Classify: new, modified, deleted, unchanged
116
+ const toAdd = [];
117
+ const toUpdate = [];
118
+ const toDelete = [];
119
+ for (const [filePath, cacheKey] of currentPaths) {
120
+ const existing = catalogPaths.get(filePath);
121
+ if (!existing) {
122
+ toAdd.push(filePath);
123
+ }
124
+ else if (existing !== cacheKey) {
125
+ toUpdate.push(filePath);
126
+ }
127
+ // else: unchanged — skip
128
+ }
129
+ for (const filePath of catalogPaths.keys()) {
130
+ if (!currentPaths.has(filePath)) {
131
+ toDelete.push(filePath);
132
+ }
133
+ }
134
+ report("diff", 1, 1, `Changes: ${toAdd.length} new, ${toUpdate.length} modified, ${toDelete.length} deleted`);
135
+ // 3. Delete removed files
136
+ for (const filePath of toDelete) {
137
+ this.db.deleteChunksByPath(filePath);
138
+ this.db.removeCatalogEntry(filePath, this.workingDir);
139
+ }
140
+ // 4. Delete modified files (will re-index)
141
+ for (const filePath of toUpdate) {
142
+ this.db.deleteChunksByPath(filePath);
143
+ }
144
+ // 5. Process new + modified files in batches
145
+ const toProcess = [...toAdd, ...toUpdate];
146
+ let totalChunks = 0;
147
+ for (let batch = 0; batch < toProcess.length; batch += BATCH_SIZE) {
148
+ const batchFiles = toProcess.slice(batch, batch + BATCH_SIZE);
149
+ report("index", batch, toProcess.length, `Indexing batch ${Math.floor(batch / BATCH_SIZE) + 1}...`);
150
+ for (const filePath of batchFiles) {
151
+ const cacheKey = currentPaths.get(filePath);
152
+ const content = fs.readFileSync(filePath, "utf-8");
153
+ const relPath = path.relative(this.workingDir, filePath);
154
+ if (!(0, chunker_1.shouldChunk)(filePath, content.length))
155
+ continue;
156
+ // Chunk the file
157
+ const rawChunks = (0, chunker_1.chunkDocument)(filePath, content);
158
+ if (rawChunks.length === 0)
159
+ continue;
160
+ const chunks = rawChunks.map((c) => ({
161
+ content: c.content,
162
+ path: relPath,
163
+ startLine: c.startLine,
164
+ endLine: c.endLine,
165
+ cacheKey,
166
+ }));
167
+ // Insert chunks
168
+ const chunkIds = this.db.insertChunks(chunks);
169
+ totalChunks += chunkIds.length;
170
+ // Build FTS index
171
+ for (let i = 0; i < chunkIds.length; i++) {
172
+ if (chunkIds[i] > 0) {
173
+ this.db.insertFts(chunkIds[i], relPath, chunks[i].content, cacheKey);
174
+ }
175
+ }
176
+ // Update catalog
177
+ this.db.updateCatalog(filePath, cacheKey, this.workingDir);
178
+ }
179
+ }
180
+ // 6. Compute embeddings (if provider available)
181
+ if (this.embeddingProvider && toProcess.length > 0) {
182
+ report("embeddings", 0, 1, "Computing embeddings...");
183
+ await this.computeEmbeddings(toProcess, currentPaths);
184
+ report("embeddings", 1, 1, "Embeddings complete");
185
+ }
186
+ report("done", 1, 1, "Indexing complete");
187
+ return {
188
+ added: toAdd.length,
189
+ updated: toUpdate.length,
190
+ deleted: toDelete.length,
191
+ totalChunks,
192
+ };
193
+ }
194
+ /**
195
+ * Search the index using full-text search (BM25).
196
+ */
197
+ searchFts(query, limit = 25, directory) {
198
+ return this.db.searchFts(query, limit, directory);
199
+ }
200
+ /**
201
+ * Search using vector similarity (cosine similarity).
202
+ * Requires an embedding provider.
203
+ */
204
+ async searchSemantic(query, limit = 25, directory) {
205
+ if (!this.embeddingProvider)
206
+ return [];
207
+ const [queryVector] = await this.embeddingProvider.embed([query]);
208
+ if (!queryVector)
209
+ return [];
210
+ const embeddings = this.db.getEmbeddings(this.embeddingProvider.modelId, directory);
211
+ if (embeddings.length === 0)
212
+ return [];
213
+ // Compute cosine similarity
214
+ const scored = embeddings.map((e) => ({
215
+ ...e,
216
+ score: cosineSimilarity(queryVector, e.vector),
217
+ }));
218
+ // Sort by similarity (highest first) and take top-k
219
+ scored.sort((a, b) => b.score - a.score);
220
+ return scored.slice(0, limit).map((s) => ({
221
+ path: s.path,
222
+ content: s.content,
223
+ startLine: s.startLine,
224
+ endLine: s.endLine,
225
+ score: s.score,
226
+ source: "embedding",
227
+ }));
228
+ }
229
+ /**
230
+ * Combined search: FTS (25%) + Embeddings (75%), deduplicated.
231
+ */
232
+ async search(query, limit = 25, directory) {
233
+ const ftsLimit = Math.ceil(limit * 0.35);
234
+ const embLimit = Math.ceil(limit * 0.65);
235
+ const [ftsResults, embResults] = await Promise.all([
236
+ Promise.resolve(this.searchFts(query, ftsLimit, directory)),
237
+ this.searchSemantic(query, embLimit, directory),
238
+ ]);
239
+ // Deduplicate by path + startLine
240
+ const seen = new Set();
241
+ const combined = [];
242
+ for (const r of [...embResults, ...ftsResults]) {
243
+ const key = `${r.path}:${r.startLine}`;
244
+ if (seen.has(key))
245
+ continue;
246
+ seen.add(key);
247
+ combined.push(r);
248
+ }
249
+ return combined.slice(0, limit);
250
+ }
251
+ /**
252
+ * Get index statistics.
253
+ */
254
+ getStats() {
255
+ return this.db.getStats();
256
+ }
257
+ /**
258
+ * Clear the entire index.
259
+ */
260
+ clearIndex() {
261
+ this.db.clearAll();
262
+ }
263
+ /**
264
+ * Close the database connection.
265
+ */
266
+ close() {
267
+ this.db.close();
268
+ }
269
+ // ── Private methods ───────────────────────────────────────────────────────
270
+ async scanFiles() {
271
+ const ignorePatterns = (0, gitignore_1.loadIgnorePatterns)(this.workingDir);
272
+ const allFiles = await (0, glob_1.glob)("**/*", {
273
+ cwd: this.workingDir,
274
+ absolute: true,
275
+ nodir: true,
276
+ ignore: [
277
+ ...SKIP_DIRS.values(),
278
+ ...ignorePatterns.map((p) => `**/${p}/**`),
279
+ ].map(p => `**/${p}`),
280
+ });
281
+ return allFiles.filter((f) => {
282
+ const ext = path.extname(f).toLowerCase();
283
+ const basename = path.basename(f);
284
+ // Check extension or known config filenames
285
+ if (!INDEXABLE_EXTENSIONS.has(ext) && !INDEXABLE_EXTENSIONS.has(basename))
286
+ return false;
287
+ // Check file size
288
+ try {
289
+ const stat = fs.statSync(f);
290
+ if (stat.size > MAX_FILE_SIZE || stat.size === 0)
291
+ return false;
292
+ }
293
+ catch {
294
+ return false;
295
+ }
296
+ // Skip dirs in path
297
+ const rel = path.relative(this.workingDir, f);
298
+ const parts = rel.split(path.sep);
299
+ if (parts.some((p) => SKIP_DIRS.has(p)))
300
+ return false;
301
+ return true;
302
+ });
303
+ }
304
+ async computeEmbeddings(filePaths, cacheKeys) {
305
+ if (!this.embeddingProvider)
306
+ return;
307
+ const model = this.embeddingProvider.modelId;
308
+ const batchSize = this.embeddingProvider.maxBatchSize || 64;
309
+ // Collect all chunks that need embeddings
310
+ const chunksToEmbed = [];
311
+ for (const filePath of filePaths) {
312
+ const relPath = path.relative(this.workingDir, filePath);
313
+ const cacheKey = cacheKeys.get(filePath);
314
+ // Get chunks for this file
315
+ const rows = this.db["db"].prepare("SELECT id, content FROM chunks WHERE path = ? AND cacheKey = ?").all(relPath, cacheKey);
316
+ for (const row of rows) {
317
+ chunksToEmbed.push({ chunkId: row.id, path: relPath, content: row.content, cacheKey });
318
+ }
319
+ }
320
+ // Batch embed
321
+ for (let i = 0; i < chunksToEmbed.length; i += batchSize) {
322
+ const batch = chunksToEmbed.slice(i, i + batchSize);
323
+ const texts = batch.map((c) => c.content);
324
+ try {
325
+ const vectors = await this.embeddingProvider.embed(texts);
326
+ for (let j = 0; j < batch.length; j++) {
327
+ if (vectors[j]) {
328
+ this.db.insertEmbedding(batch[j].chunkId, batch[j].path, batch[j].cacheKey, vectors[j], model);
329
+ }
330
+ }
331
+ }
332
+ catch {
333
+ // Embedding failed for this batch — continue with next
334
+ }
335
+ }
336
+ }
337
+ }
338
+ exports.CodebaseIndexer = CodebaseIndexer;
339
+ /** Cosine similarity between two vectors */
340
+ function cosineSimilarity(a, b) {
341
+ if (a.length !== b.length)
342
+ return 0;
343
+ let dot = 0, magA = 0, magB = 0;
344
+ for (let i = 0; i < a.length; i++) {
345
+ dot += a[i] * b[i];
346
+ magA += a[i] * a[i];
347
+ magB += b[i] * b[i];
348
+ }
349
+ const denom = Math.sqrt(magA) * Math.sqrt(magB);
350
+ return denom === 0 ? 0 : dot / denom;
351
+ }
352
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/indexing/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Recently-Edited LRU Cache — Keeps recently edited files hot for fast retrieval.
3
+ *
4
+ * When the agent edits a file, it's added to this cache. Subsequent codebase
5
+ * searches prioritize cached files, and context providers can include recent
6
+ * edits without re-reading from disk.
7
+ *
8
+ * This matches what Cursor and Windsurf do with their "recently edited" caches
9
+ * to improve relevance of search results and context suggestions.
10
+ */
11
+ export interface CachedEdit {
12
+ /** Absolute file path */
13
+ filePath: string;
14
+ /** Content at time of last edit */
15
+ content: string;
16
+ /** Timestamp of last edit */
17
+ editedAt: number;
18
+ /** Number of times this file has been edited in the session */
19
+ editCount: number;
20
+ /** Brief description of last edit (e.g., "replaced 2 occurrences") */
21
+ lastEditSummary: string;
22
+ }
23
+ export declare class RecentEditsCache {
24
+ private cache;
25
+ private readonly maxSize;
26
+ constructor(maxSize?: number);
27
+ /**
28
+ * Record a file edit. Moves the file to the front of the LRU cache.
29
+ */
30
+ put(filePath: string, content: string, editSummary?: string): void;
31
+ /**
32
+ * Get a cached file by path. Returns null if not in cache.
33
+ */
34
+ get(filePath: string): CachedEdit | null;
35
+ /**
36
+ * Check if a file is in the cache.
37
+ */
38
+ has(filePath: string): boolean;
39
+ /**
40
+ * Get all cached edits, ordered by most recently edited first.
41
+ */
42
+ getRecent(limit?: number): CachedEdit[];
43
+ /**
44
+ * Get file paths of recently edited files, most recent first.
45
+ */
46
+ getRecentPaths(limit?: number): string[];
47
+ /**
48
+ * Get files that match a search query (case-insensitive path match).
49
+ * Recently edited files that match are boosted in search results.
50
+ */
51
+ searchByPath(query: string): CachedEdit[];
52
+ /**
53
+ * Search cached file contents for a text pattern.
54
+ */
55
+ searchContent(pattern: string): Array<{
56
+ entry: CachedEdit;
57
+ matches: number;
58
+ }>;
59
+ /**
60
+ * Remove a file from the cache.
61
+ */
62
+ remove(filePath: string): boolean;
63
+ /**
64
+ * Clear the entire cache.
65
+ */
66
+ clear(): void;
67
+ /**
68
+ * Get cache statistics.
69
+ */
70
+ stats(): {
71
+ size: number;
72
+ maxSize: number;
73
+ totalEdits: number;
74
+ oldestEditAt: number | null;
75
+ };
76
+ }
77
+ //# sourceMappingURL=recent-edits-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-edits-cache.d.ts","sourceRoot":"","sources":["../../src/indexing/recent-edits-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,UAAU;IACzB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,GAAE,MAAW;IAIhC;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,MAAW,GAAG,IAAI;IAyBtE;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIxC;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAM3C;;OAEG;IACH,cAAc,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,EAAE;IAI5C;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;IAOzC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAe7E;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAa5F"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /**
3
+ * Recently-Edited LRU Cache — Keeps recently edited files hot for fast retrieval.
4
+ *
5
+ * When the agent edits a file, it's added to this cache. Subsequent codebase
6
+ * searches prioritize cached files, and context providers can include recent
7
+ * edits without re-reading from disk.
8
+ *
9
+ * This matches what Cursor and Windsurf do with their "recently edited" caches
10
+ * to improve relevance of search results and context suggestions.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.RecentEditsCache = void 0;
14
+ class RecentEditsCache {
15
+ cache = new Map();
16
+ maxSize;
17
+ constructor(maxSize = 50) {
18
+ this.maxSize = maxSize;
19
+ }
20
+ /**
21
+ * Record a file edit. Moves the file to the front of the LRU cache.
22
+ */
23
+ put(filePath, content, editSummary = "") {
24
+ const existing = this.cache.get(filePath);
25
+ // Delete first to re-insert at end (Map preserves insertion order)
26
+ if (existing) {
27
+ this.cache.delete(filePath);
28
+ }
29
+ this.cache.set(filePath, {
30
+ filePath,
31
+ content,
32
+ editedAt: Date.now(),
33
+ editCount: (existing?.editCount || 0) + 1,
34
+ lastEditSummary: editSummary,
35
+ });
36
+ // Evict oldest if over capacity
37
+ if (this.cache.size > this.maxSize) {
38
+ const oldest = this.cache.keys().next().value;
39
+ if (oldest !== undefined) {
40
+ this.cache.delete(oldest);
41
+ }
42
+ }
43
+ }
44
+ /**
45
+ * Get a cached file by path. Returns null if not in cache.
46
+ */
47
+ get(filePath) {
48
+ return this.cache.get(filePath) || null;
49
+ }
50
+ /**
51
+ * Check if a file is in the cache.
52
+ */
53
+ has(filePath) {
54
+ return this.cache.has(filePath);
55
+ }
56
+ /**
57
+ * Get all cached edits, ordered by most recently edited first.
58
+ */
59
+ getRecent(limit = 10) {
60
+ const entries = Array.from(this.cache.values());
61
+ // Map preserves insertion order; last inserted = most recent
62
+ return entries.reverse().slice(0, limit);
63
+ }
64
+ /**
65
+ * Get file paths of recently edited files, most recent first.
66
+ */
67
+ getRecentPaths(limit = 10) {
68
+ return this.getRecent(limit).map((e) => e.filePath);
69
+ }
70
+ /**
71
+ * Get files that match a search query (case-insensitive path match).
72
+ * Recently edited files that match are boosted in search results.
73
+ */
74
+ searchByPath(query) {
75
+ const lower = query.toLowerCase();
76
+ return Array.from(this.cache.values())
77
+ .filter((e) => e.filePath.toLowerCase().includes(lower))
78
+ .reverse(); // most recent first
79
+ }
80
+ /**
81
+ * Search cached file contents for a text pattern.
82
+ */
83
+ searchContent(pattern) {
84
+ const results = [];
85
+ const regex = new RegExp(pattern, "gi");
86
+ for (const entry of this.cache.values()) {
87
+ const matches = (entry.content.match(regex) || []).length;
88
+ if (matches > 0) {
89
+ results.push({ entry, matches });
90
+ }
91
+ }
92
+ // Sort by match count (descending), then recency
93
+ return results.sort((a, b) => b.matches - a.matches || b.entry.editedAt - a.entry.editedAt);
94
+ }
95
+ /**
96
+ * Remove a file from the cache.
97
+ */
98
+ remove(filePath) {
99
+ return this.cache.delete(filePath);
100
+ }
101
+ /**
102
+ * Clear the entire cache.
103
+ */
104
+ clear() {
105
+ this.cache.clear();
106
+ }
107
+ /**
108
+ * Get cache statistics.
109
+ */
110
+ stats() {
111
+ let totalEdits = 0;
112
+ let oldestEditAt = null;
113
+ for (const entry of this.cache.values()) {
114
+ totalEdits += entry.editCount;
115
+ if (oldestEditAt === null || entry.editedAt < oldestEditAt) {
116
+ oldestEditAt = entry.editedAt;
117
+ }
118
+ }
119
+ return { size: this.cache.size, maxSize: this.maxSize, totalEdits, oldestEditAt };
120
+ }
121
+ }
122
+ exports.RecentEditsCache = RecentEditsCache;
123
+ //# sourceMappingURL=recent-edits-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-edits-cache.js","sourceRoot":"","sources":["../../src/indexing/recent-edits-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Indexing Types — interfaces for the codebase indexing system.
3
+ */
4
+ export interface IndexTag {
5
+ directory: string;
6
+ branch: string;
7
+ artifactId: string;
8
+ }
9
+ export interface ChunkWithMeta {
10
+ content: string;
11
+ path: string;
12
+ startLine: number;
13
+ endLine: number;
14
+ cacheKey: string;
15
+ }
16
+ export interface SearchResult {
17
+ path: string;
18
+ content: string;
19
+ startLine: number;
20
+ endLine: number;
21
+ score: number;
22
+ source: "fts" | "embedding" | "recent";
23
+ }
24
+ export interface IndexingProgress {
25
+ phase: string;
26
+ current: number;
27
+ total: number;
28
+ message: string;
29
+ }
30
+ export type IndexingProgressCallback = (progress: IndexingProgress) => void;
31
+ export interface IndexStats {
32
+ totalFiles: number;
33
+ totalChunks: number;
34
+ ftsEntries: number;
35
+ embeddingEntries: number;
36
+ lastIndexed: number;
37
+ indexSizeBytes: number;
38
+ }
39
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/indexing/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,GAAG,WAAW,GAAG,QAAQ,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Indexing Types — interfaces for the codebase indexing system.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/indexing/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * MCP (Model Context Protocol) Server Support
3
+ *
4
+ * MCP is an open protocol that lets AI models connect to external
5
+ * data sources and tools. Think of it as "USB for AI" — a standard
6
+ * way to plug in capabilities.
7
+ *
8
+ * How it works:
9
+ * 1. User configures MCP servers in .cdoing/mcp.json or settings
10
+ * 2. On startup, we connect to each configured server
11
+ * 3. Discover available tools from each server
12
+ * 4. Register those tools so the agent can call them
13
+ * 5. Route tool calls through the MCP protocol
14
+ *
15
+ * Configuration format (.cdoing/mcp.json):
16
+ * {
17
+ * "servers": [
18
+ * {
19
+ * "name": "jira",
20
+ * "command": "npx",
21
+ * "args": ["-y", "@modelcontextprotocol/server-jira"],
22
+ * "env": { "JIRA_URL": "https://..." }
23
+ * }
24
+ * ]
25
+ * }
26
+ *
27
+ * Learning note: MCP uses JSON-RPC over stdio or SSE (Server-Sent Events).
28
+ * Each server is a separate process that we spawn and communicate with
29
+ * through its stdin/stdout. This isolation means a buggy MCP server
30
+ * can't crash the main agent.
31
+ */
32
+ export { McpManager, type McpServerConfig, type McpTool } from "./manager";
33
+ //# sourceMappingURL=index.d.ts.map