@cavelang/cli 0.27.14 → 0.29.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 (321) hide show
  1. package/Authors.md +5 -0
  2. package/License.md +6 -0
  3. package/README.md +122 -24
  4. package/dist/internal/act/action.d.ts +69 -0
  5. package/dist/internal/act/action.d.ts.map +1 -0
  6. package/dist/internal/act/action.js +201 -0
  7. package/dist/internal/act/action.js.map +1 -0
  8. package/dist/internal/act/declare.d.ts +102 -0
  9. package/dist/internal/act/declare.d.ts.map +1 -0
  10. package/dist/internal/act/declare.js +270 -0
  11. package/dist/internal/act/declare.js.map +1 -0
  12. package/dist/internal/act/engine.d.ts +103 -0
  13. package/dist/internal/act/engine.d.ts.map +1 -0
  14. package/dist/internal/act/engine.js +298 -0
  15. package/dist/internal/act/engine.js.map +1 -0
  16. package/dist/internal/act/index.d.ts +27 -0
  17. package/dist/internal/act/index.d.ts.map +1 -0
  18. package/dist/internal/act/index.js +25 -0
  19. package/dist/internal/act/index.js.map +1 -0
  20. package/dist/internal/automate/automation.d.ts +78 -0
  21. package/dist/internal/automate/automation.d.ts.map +1 -0
  22. package/dist/internal/automate/automation.js +135 -0
  23. package/dist/internal/automate/automation.js.map +1 -0
  24. package/dist/internal/automate/declare.d.ts +84 -0
  25. package/dist/internal/automate/declare.d.ts.map +1 -0
  26. package/dist/internal/automate/declare.js +233 -0
  27. package/dist/internal/automate/declare.js.map +1 -0
  28. package/dist/internal/automate/engine.d.ts +125 -0
  29. package/dist/internal/automate/engine.d.ts.map +1 -0
  30. package/dist/internal/automate/engine.js +388 -0
  31. package/dist/internal/automate/engine.js.map +1 -0
  32. package/dist/internal/automate/index.d.ts +28 -0
  33. package/dist/internal/automate/index.d.ts.map +1 -0
  34. package/dist/internal/automate/index.js +26 -0
  35. package/dist/internal/automate/index.js.map +1 -0
  36. package/dist/internal/automate/main.d.ts +26 -0
  37. package/dist/internal/automate/main.d.ts.map +1 -0
  38. package/dist/internal/automate/main.js +298 -0
  39. package/dist/internal/automate/main.js.map +1 -0
  40. package/dist/internal/connect/index.d.ts +26 -0
  41. package/dist/internal/connect/index.d.ts.map +1 -0
  42. package/dist/internal/connect/index.js +24 -0
  43. package/dist/internal/connect/index.js.map +1 -0
  44. package/dist/internal/connect/main.d.ts +23 -0
  45. package/dist/internal/connect/main.d.ts.map +1 -0
  46. package/dist/internal/connect/main.js +330 -0
  47. package/dist/internal/connect/main.js.map +1 -0
  48. package/dist/internal/connect/run.d.ts +85 -0
  49. package/dist/internal/connect/run.d.ts.map +1 -0
  50. package/dist/internal/connect/run.js +242 -0
  51. package/dist/internal/connect/run.js.map +1 -0
  52. package/dist/internal/connect/source.d.ts +44 -0
  53. package/dist/internal/connect/source.d.ts.map +1 -0
  54. package/dist/internal/connect/source.js +215 -0
  55. package/dist/internal/connect/source.js.map +1 -0
  56. package/dist/internal/connect/template.d.ts +69 -0
  57. package/dist/internal/connect/template.d.ts.map +1 -0
  58. package/dist/internal/connect/template.js +221 -0
  59. package/dist/internal/connect/template.js.map +1 -0
  60. package/dist/internal/eval/index.d.ts +28 -0
  61. package/dist/internal/eval/index.d.ts.map +1 -0
  62. package/dist/internal/eval/index.js +27 -0
  63. package/dist/internal/eval/index.js.map +1 -0
  64. package/dist/internal/eval/judge.d.ts +30 -0
  65. package/dist/internal/eval/judge.d.ts.map +1 -0
  66. package/dist/internal/eval/judge.js +101 -0
  67. package/dist/internal/eval/judge.js.map +1 -0
  68. package/dist/internal/eval/loop.d.ts +64 -0
  69. package/dist/internal/eval/loop.d.ts.map +1 -0
  70. package/dist/internal/eval/loop.js +123 -0
  71. package/dist/internal/eval/loop.js.map +1 -0
  72. package/dist/internal/eval/main.d.ts +17 -0
  73. package/dist/internal/eval/main.d.ts.map +1 -0
  74. package/dist/internal/eval/main.js +236 -0
  75. package/dist/internal/eval/main.js.map +1 -0
  76. package/dist/internal/eval/queries.d.ts +74 -0
  77. package/dist/internal/eval/queries.d.ts.map +1 -0
  78. package/dist/internal/eval/queries.js +161 -0
  79. package/dist/internal/eval/queries.js.map +1 -0
  80. package/dist/internal/eval/run.d.ts +143 -0
  81. package/dist/internal/eval/run.d.ts.map +1 -0
  82. package/dist/internal/eval/run.js +376 -0
  83. package/dist/internal/eval/run.js.map +1 -0
  84. package/dist/internal/eval/score.d.ts +81 -0
  85. package/dist/internal/eval/score.d.ts.map +1 -0
  86. package/dist/internal/eval/score.js +126 -0
  87. package/dist/internal/eval/score.js.map +1 -0
  88. package/dist/internal/eval/suite.d.ts +66 -0
  89. package/dist/internal/eval/suite.d.ts.map +1 -0
  90. package/dist/internal/eval/suite.js +130 -0
  91. package/dist/internal/eval/suite.js.map +1 -0
  92. package/dist/internal/ingest/context.d.ts +20 -0
  93. package/dist/internal/ingest/context.d.ts.map +1 -0
  94. package/dist/internal/ingest/context.js +59 -0
  95. package/dist/internal/ingest/context.js.map +1 -0
  96. package/dist/internal/ingest/files.d.ts +46 -0
  97. package/dist/internal/ingest/files.d.ts.map +1 -0
  98. package/dist/internal/ingest/files.js +115 -0
  99. package/dist/internal/ingest/files.js.map +1 -0
  100. package/dist/internal/ingest/index.d.ts +31 -0
  101. package/dist/internal/ingest/index.d.ts.map +1 -0
  102. package/dist/internal/ingest/index.js +29 -0
  103. package/dist/internal/ingest/index.js.map +1 -0
  104. package/dist/internal/ingest/main.d.ts +12 -0
  105. package/dist/internal/ingest/main.d.ts.map +1 -0
  106. package/dist/internal/ingest/main.js +180 -0
  107. package/dist/internal/ingest/main.js.map +1 -0
  108. package/dist/internal/ingest/prompt.d.ts +32 -0
  109. package/dist/internal/ingest/prompt.d.ts.map +1 -0
  110. package/dist/internal/ingest/prompt.js +75 -0
  111. package/dist/internal/ingest/prompt.js.map +1 -0
  112. package/dist/internal/ingest/run.d.ts +142 -0
  113. package/dist/internal/ingest/run.d.ts.map +1 -0
  114. package/dist/internal/ingest/run.js +350 -0
  115. package/dist/internal/ingest/run.js.map +1 -0
  116. package/dist/internal/ingest/web.d.ts +48 -0
  117. package/dist/internal/ingest/web.d.ts.map +1 -0
  118. package/dist/internal/ingest/web.js +140 -0
  119. package/dist/internal/ingest/web.js.map +1 -0
  120. package/dist/internal/loop/demo.d.ts +22 -0
  121. package/dist/internal/loop/demo.d.ts.map +1 -0
  122. package/dist/internal/loop/demo.js +67 -0
  123. package/dist/internal/loop/demo.js.map +1 -0
  124. package/dist/internal/loop/index.d.ts +20 -0
  125. package/dist/internal/loop/index.d.ts.map +1 -0
  126. package/dist/internal/loop/index.js +17 -0
  127. package/dist/internal/loop/index.js.map +1 -0
  128. package/dist/internal/loop/llm.d.ts +99 -0
  129. package/dist/internal/loop/llm.d.ts.map +1 -0
  130. package/dist/internal/loop/llm.js +231 -0
  131. package/dist/internal/loop/llm.js.map +1 -0
  132. package/dist/internal/loop/reconstruct.d.ts +87 -0
  133. package/dist/internal/loop/reconstruct.d.ts.map +1 -0
  134. package/dist/internal/loop/reconstruct.js +157 -0
  135. package/dist/internal/loop/reconstruct.js.map +1 -0
  136. package/dist/internal/loop/sqlite.d.ts +13 -0
  137. package/dist/internal/loop/sqlite.d.ts.map +1 -0
  138. package/dist/internal/loop/sqlite.js +33 -0
  139. package/dist/internal/loop/sqlite.js.map +1 -0
  140. package/dist/internal/loop/store.d.ts +50 -0
  141. package/dist/internal/loop/store.d.ts.map +1 -0
  142. package/dist/internal/loop/store.js +100 -0
  143. package/dist/internal/loop/store.js.map +1 -0
  144. package/dist/internal/mcp/bin.d.ts +7 -0
  145. package/dist/internal/mcp/bin.d.ts.map +1 -0
  146. package/dist/internal/mcp/bin.js +8 -0
  147. package/dist/internal/mcp/bin.js.map +1 -0
  148. package/dist/internal/mcp/index.d.ts +25 -0
  149. package/dist/internal/mcp/index.d.ts.map +1 -0
  150. package/dist/internal/mcp/index.js +23 -0
  151. package/dist/internal/mcp/index.js.map +1 -0
  152. package/dist/internal/mcp/main.d.ts +23 -0
  153. package/dist/internal/mcp/main.d.ts.map +1 -0
  154. package/dist/internal/mcp/main.js +156 -0
  155. package/dist/internal/mcp/main.js.map +1 -0
  156. package/dist/internal/mcp/server.d.ts +92 -0
  157. package/dist/internal/mcp/server.d.ts.map +1 -0
  158. package/dist/internal/mcp/server.js +251 -0
  159. package/dist/internal/mcp/server.js.map +1 -0
  160. package/dist/internal/mcp/tools.d.ts +91 -0
  161. package/dist/internal/mcp/tools.d.ts.map +1 -0
  162. package/dist/internal/mcp/tools.js +584 -0
  163. package/dist/internal/mcp/tools.js.map +1 -0
  164. package/dist/internal/rules/declare.d.ts +58 -0
  165. package/dist/internal/rules/declare.d.ts.map +1 -0
  166. package/dist/internal/rules/declare.js +152 -0
  167. package/dist/internal/rules/declare.js.map +1 -0
  168. package/dist/internal/rules/engine.d.ts +125 -0
  169. package/dist/internal/rules/engine.d.ts.map +1 -0
  170. package/dist/internal/rules/engine.js +575 -0
  171. package/dist/internal/rules/engine.js.map +1 -0
  172. package/dist/internal/rules/index.d.ts +23 -0
  173. package/dist/internal/rules/index.d.ts.map +1 -0
  174. package/dist/internal/rules/index.js +21 -0
  175. package/dist/internal/rules/index.js.map +1 -0
  176. package/dist/internal/rules/rule.d.ts +88 -0
  177. package/dist/internal/rules/rule.d.ts.map +1 -0
  178. package/dist/internal/rules/rule.js +221 -0
  179. package/dist/internal/rules/rule.js.map +1 -0
  180. package/dist/internal/shape/check.d.ts +118 -0
  181. package/dist/internal/shape/check.d.ts.map +1 -0
  182. package/dist/internal/shape/check.js +331 -0
  183. package/dist/internal/shape/check.js.map +1 -0
  184. package/dist/internal/shape/client.d.ts +31 -0
  185. package/dist/internal/shape/client.d.ts.map +1 -0
  186. package/dist/internal/shape/client.js +170 -0
  187. package/dist/internal/shape/client.js.map +1 -0
  188. package/dist/internal/shape/gate.d.ts +33 -0
  189. package/dist/internal/shape/gate.d.ts.map +1 -0
  190. package/dist/internal/shape/gate.js +0 -0
  191. package/dist/internal/shape/gate.js.map +1 -0
  192. package/dist/internal/shape/index.d.ts +27 -0
  193. package/dist/internal/shape/index.d.ts.map +1 -0
  194. package/dist/internal/shape/index.js +23 -0
  195. package/dist/internal/shape/index.js.map +1 -0
  196. package/dist/internal/shape/suggest.d.ts +82 -0
  197. package/dist/internal/shape/suggest.d.ts.map +1 -0
  198. package/dist/internal/shape/suggest.js +374 -0
  199. package/dist/internal/shape/suggest.js.map +1 -0
  200. package/dist/internal/sync/index.d.ts +22 -0
  201. package/dist/internal/sync/index.d.ts.map +1 -0
  202. package/dist/internal/sync/index.js +21 -0
  203. package/dist/internal/sync/index.js.map +1 -0
  204. package/dist/internal/sync/sync.d.ts +95 -0
  205. package/dist/internal/sync/sync.d.ts.map +1 -0
  206. package/dist/internal/sync/sync.js +342 -0
  207. package/dist/internal/sync/sync.js.map +1 -0
  208. package/dist/internal/view/api.d.ts +196 -0
  209. package/dist/internal/view/api.d.ts.map +1 -0
  210. package/dist/internal/view/api.js +189 -0
  211. package/dist/internal/view/api.js.map +1 -0
  212. package/dist/internal/view/index.d.ts +33 -0
  213. package/dist/internal/view/index.d.ts.map +1 -0
  214. package/dist/internal/view/index.js +30 -0
  215. package/dist/internal/view/index.js.map +1 -0
  216. package/dist/internal/view/main.d.ts +11 -0
  217. package/dist/internal/view/main.d.ts.map +1 -0
  218. package/dist/internal/view/main.js +98 -0
  219. package/dist/internal/view/main.js.map +1 -0
  220. package/dist/internal/view/page.d.ts +14 -0
  221. package/dist/internal/view/page.d.ts.map +1 -0
  222. package/dist/internal/view/page.js +370 -0
  223. package/dist/internal/view/page.js.map +1 -0
  224. package/dist/internal/view/report.d.ts +52 -0
  225. package/dist/internal/view/report.d.ts.map +1 -0
  226. package/dist/internal/view/report.js +367 -0
  227. package/dist/internal/view/report.js.map +1 -0
  228. package/dist/internal/view/scope.d.ts +11 -0
  229. package/dist/internal/view/scope.d.ts.map +1 -0
  230. package/dist/internal/view/scope.js +41 -0
  231. package/dist/internal/view/scope.js.map +1 -0
  232. package/dist/internal/view/server.d.ts +35 -0
  233. package/dist/internal/view/server.d.ts.map +1 -0
  234. package/dist/internal/view/server.js +141 -0
  235. package/dist/internal/view/server.js.map +1 -0
  236. package/dist/src/act.d.ts +3 -0
  237. package/dist/src/act.d.ts.map +1 -0
  238. package/dist/src/act.js +3 -0
  239. package/dist/src/act.js.map +1 -0
  240. package/dist/src/automate.d.ts +3 -0
  241. package/dist/src/automate.d.ts.map +1 -0
  242. package/dist/src/automate.js +3 -0
  243. package/dist/src/automate.js.map +1 -0
  244. package/dist/src/cli.d.ts +24 -17
  245. package/dist/src/cli.d.ts.map +1 -1
  246. package/dist/src/cli.js +408 -107
  247. package/dist/src/cli.js.map +1 -1
  248. package/dist/src/commands.d.ts +104 -0
  249. package/dist/src/commands.d.ts.map +1 -0
  250. package/dist/src/commands.js +33 -0
  251. package/dist/src/commands.js.map +1 -0
  252. package/dist/src/connect.d.ts +3 -0
  253. package/dist/src/connect.d.ts.map +1 -0
  254. package/dist/src/connect.js +3 -0
  255. package/dist/src/connect.js.map +1 -0
  256. package/dist/src/dispatch.d.ts +14 -0
  257. package/dist/src/dispatch.d.ts.map +1 -0
  258. package/dist/src/dispatch.js +116 -0
  259. package/dist/src/dispatch.js.map +1 -0
  260. package/dist/src/doctor.d.ts +45 -0
  261. package/dist/src/doctor.d.ts.map +1 -0
  262. package/dist/src/doctor.js +284 -0
  263. package/dist/src/doctor.js.map +1 -0
  264. package/dist/src/eval.d.ts +3 -0
  265. package/dist/src/eval.d.ts.map +1 -0
  266. package/dist/src/eval.js +3 -0
  267. package/dist/src/eval.js.map +1 -0
  268. package/dist/src/index.d.ts +9 -2
  269. package/dist/src/index.d.ts.map +1 -1
  270. package/dist/src/index.js +6 -2
  271. package/dist/src/index.js.map +1 -1
  272. package/dist/src/ingest.d.ts +3 -0
  273. package/dist/src/ingest.d.ts.map +1 -0
  274. package/dist/src/ingest.js +3 -0
  275. package/dist/src/ingest.js.map +1 -0
  276. package/dist/src/loop.d.ts +3 -0
  277. package/dist/src/loop.d.ts.map +1 -0
  278. package/dist/src/loop.js +3 -0
  279. package/dist/src/loop.js.map +1 -0
  280. package/dist/src/main.d.ts +1 -1
  281. package/dist/src/main.d.ts.map +1 -1
  282. package/dist/src/main.js +3 -75
  283. package/dist/src/main.js.map +1 -1
  284. package/dist/src/mcp.d.ts +3 -0
  285. package/dist/src/mcp.d.ts.map +1 -0
  286. package/dist/src/mcp.js +3 -0
  287. package/dist/src/mcp.js.map +1 -0
  288. package/dist/src/rules.d.ts +3 -0
  289. package/dist/src/rules.d.ts.map +1 -0
  290. package/dist/src/rules.js +3 -0
  291. package/dist/src/rules.js.map +1 -0
  292. package/dist/src/shape.d.ts +3 -0
  293. package/dist/src/shape.d.ts.map +1 -0
  294. package/dist/src/shape.js +3 -0
  295. package/dist/src/shape.js.map +1 -0
  296. package/dist/src/sync.d.ts +3 -0
  297. package/dist/src/sync.d.ts.map +1 -0
  298. package/dist/src/sync.js +3 -0
  299. package/dist/src/sync.js.map +1 -0
  300. package/dist/src/view.d.ts +3 -0
  301. package/dist/src/view.d.ts.map +1 -0
  302. package/dist/src/view.js +3 -0
  303. package/dist/src/view.js.map +1 -0
  304. package/package.json +81 -21
  305. package/src/act.ts +2 -0
  306. package/src/automate.ts +2 -0
  307. package/src/cli.ts +416 -102
  308. package/src/commands.ts +48 -0
  309. package/src/connect.ts +2 -0
  310. package/src/dispatch.ts +141 -0
  311. package/src/doctor.ts +370 -0
  312. package/src/eval.ts +2 -0
  313. package/src/index.ts +9 -2
  314. package/src/ingest.ts +2 -0
  315. package/src/loop.ts +2 -0
  316. package/src/main.ts +3 -66
  317. package/src/mcp.ts +2 -0
  318. package/src/rules.ts +2 -0
  319. package/src/shape.ts +2 -0
  320. package/src/sync.ts +2 -0
  321. package/src/view.ts +2 -0
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `@cavelang/cli/ingest` — LLM-driven knowledge ingestion.
3
+ *
4
+ * ```sh
5
+ * cave ingest 'src/**' https://example.com/design-notes --db k.db \
6
+ * --agent 'claude -p --mcp-config {mcp-config} --allowedTools "mcp__cave__*"'
7
+ * ```
8
+ *
9
+ * Library API for SDK scripts:
10
+ *
11
+ * ```ts
12
+ * import { run } from '@cavelang/cli/ingest'
13
+ * import { open } from '@cavelang/store'
14
+ *
15
+ * const store = open('k.db')
16
+ * await run({
17
+ * db: 'k.db', store, patterns: ['docs/**'], mode: 'stdout', embed: true,
18
+ * agent: async prompt => callYourSdk(prompt), // returns CAVE text
19
+ * // policy: 'lenient' // strict is the default
20
+ * })
21
+ * ```
22
+ */
23
+ export * as Context from "./context.js";
24
+ export * as Files from "./files.js";
25
+ export * as Web from "./web.js";
26
+ export { buildPrompt, extractionRules, readInstructions } from "./prompt.js";
27
+ export { caveTextOf, promptFor, run, runShellAgent, selectBatches, writeMcpConfig } from "./run.js";
28
+ export { runIngest } from "./main.js";
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE5E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAInG,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `cave ingest` entry — argument parsing and report rendering around
3
+ * `run.ts`. See the package README for agent recipes (Claude Code,
4
+ * Copilot CLI, SDK scripts).
5
+ */
6
+ export type RunContext = {
7
+ readonly stdout?: NodeJS.WritableStream;
8
+ readonly stderr?: NodeJS.WritableStream;
9
+ readonly signal?: AbortSignal;
10
+ };
11
+ export declare const runIngest: (argv: readonly string[], context?: RunContext) => Promise<number>;
12
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2CH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,SAAS,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,UAAS,UAAe,KAAG,OAAO,CAAC,MAAM,CAsIjG,CAAA"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * `cave ingest` entry — argument parsing and report rendering around
3
+ * `run.ts`. See the package README for agent recipes (Claude Code,
4
+ * Copilot CLI, SDK scripts).
5
+ */
6
+ import { parseArgs } from 'node:util';
7
+ import { Registry } from '@cavelang/canonical';
8
+ import { defaultDbPath, open } from '@cavelang/store';
9
+ import { promptFor, run, selectBatches, writeMcpConfig } from "./run.js";
10
+ const usage = `cave ingest — LLM-driven ingestion of files and web pages
11
+
12
+ Usage:
13
+ cave ingest [--db <path>] <files/globs/urls...> --agent '<command>' [options]
14
+
15
+ Sources may be file paths, globs, or http(s) URLs. URLs are fetched with
16
+ the built-in fetch; HTML pages are reduced to their readable article text
17
+ (Readability) and embedded into the prompt.
18
+
19
+ Options:
20
+ --db <path> knowledge database (default: $CAVE_DB, or cave.db)
21
+ --agent <template> shell command run once per batch; the prompt is piped
22
+ to stdin and {prompt-file}, {mcp-config}, {db} are
23
+ substituted shell-quoted (write placeholders bare)
24
+ --instructions <md> markdown file with domain instructions for the agent
25
+ --stdout agent prints CAVE text instead of using MCP tools
26
+ --batch <n> files per agent run (default 8)
27
+ --embed inline file contents into prompts (agents without
28
+ file access, e.g. bare SDK loops)
29
+ --force re-ingest files whose content digest is unchanged
30
+ --lenient commit accepted batches and continue after failures;
31
+ default strict mode stages and commits the whole run
32
+ --json print the complete machine-readable result manifest
33
+ --timeout <seconds> per-batch agent timeout (default 600)
34
+ --plan print batches as NDJSON and exit (drive with an SDK)
35
+ --dry-run print the plan and the first prompt, run nothing
36
+ --no-prelude open the store without the standard §5.5 registry
37
+
38
+ Examples:
39
+ cave ingest --db k.db 'src/**/*.ts' README.md \\
40
+ --agent 'claude -p --mcp-config {mcp-config} --allowedTools "mcp__cave__*"'
41
+ cave ingest --db k.db 'docs/**/*.md' --stdout --agent 'copilot -p "$(cat {prompt-file})"'
42
+ cave ingest --db k.db https://example.com/blog/design-notes \\
43
+ --agent 'claude -p --mcp-config {mcp-config} --allowedTools "mcp__cave__*"'
44
+ cave ingest --db k.db 'packages/*/README.md' --plan > plan.ndjson`;
45
+ export const runIngest = async (argv, context = {}) => {
46
+ const stdout = context.stdout ?? process.stdout;
47
+ const stderr = context.stderr ?? process.stderr;
48
+ context.signal?.throwIfAborted();
49
+ const { values, positionals } = parseArgs({
50
+ args: [...argv],
51
+ options: {
52
+ db: { type: 'string' },
53
+ agent: { type: 'string' },
54
+ instructions: { type: 'string' },
55
+ stdout: { type: 'boolean' },
56
+ batch: { type: 'string' },
57
+ embed: { type: 'boolean' },
58
+ force: { type: 'boolean' },
59
+ lenient: { type: 'boolean' },
60
+ json: { type: 'boolean' },
61
+ timeout: { type: 'string' },
62
+ plan: { type: 'boolean' },
63
+ 'dry-run': { type: 'boolean' },
64
+ 'no-prelude': { type: 'boolean' },
65
+ help: { type: 'boolean', short: 'h' }
66
+ },
67
+ allowPositionals: true
68
+ });
69
+ if (values.help === true) {
70
+ stdout.write(`${usage}\n`);
71
+ return 0;
72
+ }
73
+ if (positionals.length === 0) {
74
+ stderr.write(`cave ingest: sources (files, globs, urls) are required\n\n${usage}\n`);
75
+ return 1;
76
+ }
77
+ const db = values.db ?? defaultDbPath();
78
+ const planning = values.plan === true || values['dry-run'] === true;
79
+ if (values.agent === undefined && !planning) {
80
+ stderr.write('cave ingest: --agent is required (or use --plan / --dry-run)\n');
81
+ return 1;
82
+ }
83
+ const batchSize = values.batch === undefined ? undefined : Number(values.batch);
84
+ if (batchSize !== undefined && (!Number.isInteger(batchSize) || batchSize < 1)) {
85
+ stderr.write(`cave ingest: --batch must be a positive integer, got '${values.batch}'\n`);
86
+ return 1;
87
+ }
88
+ const timeoutSeconds = values.timeout === undefined ? undefined : Number(values.timeout);
89
+ if (timeoutSeconds !== undefined && (!Number.isFinite(timeoutSeconds) || timeoutSeconds <= 0)) {
90
+ stderr.write(`cave ingest: --timeout must be a positive number of seconds, got '${values.timeout}'\n`);
91
+ return 1;
92
+ }
93
+ const noPrelude = values['no-prelude'] === true;
94
+ const store = open(db, noPrelude ? { registry: Registry.empty } : {});
95
+ try {
96
+ const options = {
97
+ db,
98
+ patterns: positionals,
99
+ store,
100
+ mode: values.stdout === true ? 'stdout' : 'mcp',
101
+ ...values.agent === undefined ? {} : { agent: values.agent },
102
+ ...values.instructions === undefined ? {} : { instructions: values.instructions },
103
+ ...batchSize === undefined ? {} : { batchSize },
104
+ ...timeoutSeconds === undefined ? {} : { timeoutSeconds },
105
+ embed: values.embed === true,
106
+ force: values.force === true,
107
+ policy: values.lenient === true ? 'lenient' : 'strict',
108
+ noPrelude
109
+ };
110
+ if (planning) {
111
+ const { selection, batches } = await selectBatches(store, options);
112
+ if (values.plan === true) {
113
+ const mcpConfig = writeMcpConfig(db, { noPrelude });
114
+ for (const failure of selection.failures) {
115
+ stdout.write(`${JSON.stringify({
116
+ source: failure.path,
117
+ status: 'rejected',
118
+ failure: failure.kind,
119
+ retryable: failure.retryable,
120
+ ...failure.status === undefined ? {} : { httpStatus: failure.status },
121
+ message: failure.message
122
+ })}\n`);
123
+ }
124
+ for (const files of batches) {
125
+ const prompt = promptFor(store, files, options);
126
+ stdout.write(`${JSON.stringify({ files: files.map(file => file.path), prompt, mcpConfig, db })}\n`);
127
+ }
128
+ return 0;
129
+ }
130
+ stdout.write([
131
+ `ingest plan: ${selection.files.length} source(s) in ${batches.length} batch(es), ` +
132
+ `${selection.skipped.length} skipped (unchanged), ${selection.failures.length} rejected`,
133
+ ...selection.skipped.map(path => ` skip ${path}`),
134
+ ...selection.failures.map(failure => ` reject ${failure.path}: ${failure.kind}, ${failure.retryable ? 'retryable' : 'permanent'} — ${failure.message}`),
135
+ ...batches.map((files, index) => ` batch ${index + 1}: ${files.map(file => file.path).join(', ')}`),
136
+ ...batches.length > 0 ? ['', '--- prompt for batch 1 ---', promptFor(store, batches[0], options)] : []
137
+ ].join('\n') + '\n');
138
+ return 0;
139
+ }
140
+ const report = await run(options);
141
+ context.signal?.throwIfAborted();
142
+ const failed = report.failed > 0 || report.sources.some(source => source.status === 'not-run');
143
+ if (values.json === true) {
144
+ stdout.write(`${JSON.stringify(report, undefined, 2)}\n`);
145
+ return failed ? 1 : 0;
146
+ }
147
+ const lines = [
148
+ `ingest (${report.policy}): ${report.matched} source(s) matched, ${report.skipped.length} skipped (unchanged), ` +
149
+ `${report.batches.length} batch(es), ${report.applied ? 'applied' : 'not applied'}`
150
+ ];
151
+ report.batches.forEach((batch, index) => {
152
+ const status = batch.ok ? `+${batch.added} claim(s)` : `FAILED${batch.note === undefined ? '' : ` — ${batch.note}`}`;
153
+ lines.push(`batch ${index + 1}/${report.batches.length} (${batch.files.length} file(s)): ${status}`);
154
+ for (const problem of batch.problems) {
155
+ lines.push(` ${problem}`);
156
+ }
157
+ if (batch.ok && batch.note !== undefined) {
158
+ lines.push(` agent: ${batch.note}`);
159
+ }
160
+ });
161
+ for (const source of report.sources) {
162
+ const detail = [
163
+ source.batch === undefined ? undefined : `batch ${source.batch}`,
164
+ source.note,
165
+ source.failure === undefined ? undefined :
166
+ `${source.failure}, ${source.retryable === true ? 'retryable' : 'permanent'}` +
167
+ (source.httpStatus === undefined ? '' : ` HTTP ${source.httpStatus}`),
168
+ ...source.problems
169
+ ].filter((value) => value !== undefined).join('; ');
170
+ lines.push(`source ${source.status}: ${source.path}${detail === '' ? '' : ` — ${detail}`}`);
171
+ }
172
+ lines.push(`done: +${report.added} claim(s)${report.failed > 0 ? `, ${report.failed} failed outcome(s)` : ''}`);
173
+ stdout.write(`${lines.join('\n')}\n`);
174
+ return failed ? 1 : 0;
175
+ }
176
+ finally {
177
+ store.close();
178
+ }
179
+ };
180
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Ingestion prompt assembly.
3
+ *
4
+ * One prompt per batch, built from: the CAVE writing card (shared with the
5
+ * MCP server), the spec §14 extraction rules, the user's instructions
6
+ * markdown, the existing-knowledge context slice, the batch's files, and a
7
+ * mode-specific protocol:
8
+ *
9
+ * - `mcp` mode — the agent has the `cave_*` tools; it checks before
10
+ * writing and records via `cave_add`;
11
+ * - `stdout` mode — the agent prints only CAVE text; the orchestrator
12
+ * lints and stores it.
13
+ */
14
+ export type Mode = 'mcp' | 'stdout';
15
+ /** Spec §14 extraction rules, distilled for the working prompt. */
16
+ export declare const extractionRules = "Extraction rules (CAVE spec \u00A714):\n1. One claim per line; never combine two facts.\n2. Resolve pronouns and vague references to concrete entities.\n3. Record decisions over discussion; skip meta-talk and filler.\n4. Code identifiers, error strings and config values go in backticks.\n5. Merge duplicates \u2014 check what is already recorded before adding.\n6. Preserve uncertainty: @ N% for belief strength, +/- for numeric estimates.\n7. Prefer standard verbs; comments (;) only for nuance that does not fit the triple.\n8. The granularity test: could someone act on this claim later without\n rereading the source? \"app HAS problems\" is useless; \"auth/middleware\n HAS bug: token-expiry #security\" is right.\n9. Reuse established entity names exactly; same entity \u2192 same name everywhere.\n10. Cite the smallest supporting source line or inclusive range on every\n extracted claim: @src:path/to/file#L10 or @src:path/to/file#L10-L20.\n Use the source context printed above each file exactly; line numbers shown\n before embedded content are provenance guides, not part of the content.";
17
+ export type PromptInput = {
18
+ readonly files: readonly {
19
+ path: string;
20
+ content?: string;
21
+ }[];
22
+ /** User instructions markdown, verbatim. */
23
+ readonly instructions?: string;
24
+ /** Existing-knowledge slice from `context.ts`. */
25
+ readonly context?: string;
26
+ readonly mode: Mode;
27
+ };
28
+ /** @returns the full prompt for one batch. */
29
+ export declare const buildPrompt: (input: PromptInput) => string;
30
+ /** Reads the instructions markdown file, when given. */
31
+ export declare const readInstructions: (path: undefined | string) => undefined | string;
32
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEnC,mEAAmE;AACnE,eAAO,MAAM,eAAe,8lCAegD,CAAA;AAa5E,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7D,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,kDAAkD;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,WAAW,GAAI,OAAO,WAAW,KAAG,MA2BhD,CAAA;AAED,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,GAAI,MAAM,SAAS,GAAG,MAAM,KAAG,SAAS,GAAG,MACX,CAAA"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Ingestion prompt assembly.
3
+ *
4
+ * One prompt per batch, built from: the CAVE writing card (shared with the
5
+ * MCP server), the spec §14 extraction rules, the user's instructions
6
+ * markdown, the existing-knowledge context slice, the batch's files, and a
7
+ * mode-specific protocol:
8
+ *
9
+ * - `mcp` mode — the agent has the `cave_*` tools; it checks before
10
+ * writing and records via `cave_add`;
11
+ * - `stdout` mode — the agent prints only CAVE text; the orchestrator
12
+ * lints and stores it.
13
+ */
14
+ import { readFileSync } from 'node:fs';
15
+ import { SourceSpan } from '@cavelang/core';
16
+ import { specCard as caveCard } from '@cavelang/cli/mcp';
17
+ /** Spec §14 extraction rules, distilled for the working prompt. */
18
+ export const extractionRules = `Extraction rules (CAVE spec §14):
19
+ 1. One claim per line; never combine two facts.
20
+ 2. Resolve pronouns and vague references to concrete entities.
21
+ 3. Record decisions over discussion; skip meta-talk and filler.
22
+ 4. Code identifiers, error strings and config values go in backticks.
23
+ 5. Merge duplicates — check what is already recorded before adding.
24
+ 6. Preserve uncertainty: @ N% for belief strength, +/- for numeric estimates.
25
+ 7. Prefer standard verbs; comments (;) only for nuance that does not fit the triple.
26
+ 8. The granularity test: could someone act on this claim later without
27
+ rereading the source? "app HAS problems" is useless; "auth/middleware
28
+ HAS bug: token-expiry #security" is right.
29
+ 9. Reuse established entity names exactly; same entity → same name everywhere.
30
+ 10. Cite the smallest supporting source line or inclusive range on every
31
+ extracted claim: @src:path/to/file#L10 or @src:path/to/file#L10-L20.
32
+ Use the source context printed above each file exactly; line numbers shown
33
+ before embedded content are provenance guides, not part of the content.`;
34
+ const protocolOf = {
35
+ mcp: `Protocol: you have the cave_* tools connected to the target database.
36
+ Before adding claims about an entity, check what is already recorded
37
+ (cave_query, cave_search, cave_about) and follow the established naming.
38
+ Validate uncertain syntax with cave_lint. Record knowledge with cave_add.
39
+ When finished, reply with one line: "done: <number of claims added>".`,
40
+ stdout: `Protocol: print ONLY CAVE text — one claim per line, optionally inside a
41
+ single \`\`\`cave fenced block. No prose before or after. If the files
42
+ contain nothing worth recording, print exactly: ; no extractable content`
43
+ };
44
+ /** @returns the full prompt for one batch. */
45
+ export const buildPrompt = (input) => {
46
+ const files = input.files.map(file => {
47
+ const source = `@${SourceSpan.context(file.path)}`;
48
+ if (file.content === undefined) {
49
+ return `- ${file.path} — source context ${source}; inspect the file and cite exact lines`;
50
+ }
51
+ const lines = file.content.split(/\r?\n/);
52
+ const width = String(lines.length).length;
53
+ const numbered = lines.map((line, at) => `${String(at + 1).padStart(width)} | ${line}`).join('\n');
54
+ return `### ${file.path}\nSource context: ${source}\n\`\`\`text\n${numbered}\n\`\`\``;
55
+ }).join('\n');
56
+ return [
57
+ 'You are ingesting source material into a CAVE knowledge database.',
58
+ 'Read the files below and record the important, durable knowledge they contain as CAVE claims.',
59
+ '',
60
+ caveCard,
61
+ '',
62
+ extractionRules,
63
+ ...input.instructions === undefined ? [] : ['', '## Ingestion instructions', '', input.instructions.trim()],
64
+ ...input.context === undefined ? [] : ['', '## Existing knowledge', '', input.context],
65
+ '',
66
+ '## Files to ingest',
67
+ '',
68
+ files,
69
+ '',
70
+ protocolOf[input.mode]
71
+ ].join('\n');
72
+ };
73
+ /** Reads the instructions markdown file, when given. */
74
+ export const readInstructions = (path) => path === undefined ? undefined : readFileSync(path, 'utf8');
75
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAA;AAIpD,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;4EAe6C,CAAA;AAE5E,MAAM,UAAU,GAAyB;IACvC,GAAG,EAAE;;;;sEAI+D;IACpE,MAAM,EAAE;;yEAE+D;CACxE,CAAA;AAWD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAU,EAAE;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACnC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;QAClD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,KAAK,IAAI,CAAC,IAAI,qBAAqB,MAAM,yCAAyC,CAAA;QAC3F,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClG,OAAO,OAAO,IAAI,CAAC,IAAI,qBAAqB,MAAM,iBAAiB,QAAQ,UAAU,CAAA;IACvF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO;QACL,mEAAmE;QACnE,+FAA+F;QAC/F,EAAE;QACF,QAAQ;QACR,EAAE;QACF,eAAe;QACf,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC3G,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;QACtF,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,KAAK;QACL,EAAE;QACF,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;KACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAwB,EAAsB,EAAE,CAC/E,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * The ingestion orchestrator.
3
+ *
4
+ * `cave ingest` walks a source list (file globs and http(s) URLs — see
5
+ * `web.ts`), skips sources whose content is already ingested (digest
6
+ * provenance claims), batches the rest, composes one prompt per batch,
7
+ * and drives an *agent* over it:
8
+ *
9
+ * - a shell command template (`--agent 'claude -p --mcp-config {mcp-config} …'`)
10
+ * for headless Claude Code / Copilot CLI runs — the prompt is piped to
11
+ * stdin and written to `{prompt-file}`;
12
+ * - a JavaScript function (`agent: async (prompt, files) => text`) for
13
+ * Claude/Copilot SDK scripts using the library API;
14
+ * - or no agent at all — `--plan` emits the batches as NDJSON for a
15
+ * fully external driver.
16
+ *
17
+ * API access for the agent is the MCP server (`{mcp-config}` points at a
18
+ * generated client configuration for `cave mcp --db …`); `--stdout` mode
19
+ * instead treats the agent's stdout as CAVE text and stores it here.
20
+ * Prompts are built lazily per batch, so the injected knowledge context
21
+ * reflects what earlier batches recorded.
22
+ */
23
+ import { type Store } from '@cavelang/store';
24
+ import * as Files from './files.ts';
25
+ import * as Web from './web.ts';
26
+ import * as Prompt from './prompt.ts';
27
+ /** Shell command template or an in-process SDK adapter. */
28
+ export type Agent = string | ((prompt: string, files: readonly string[], context: AgentContext) => Promise<string>);
29
+ export type AgentContext = {
30
+ /** Database selected for this run; strict mode points at an isolated stage. */
31
+ readonly db: string;
32
+ /** Generated MCP client configuration when the run requested one. */
33
+ readonly mcpConfig?: string;
34
+ };
35
+ export type Policy = 'strict' | 'lenient';
36
+ export type Options = {
37
+ readonly db: string;
38
+ /** Source patterns — file globs and http(s) URLs. */
39
+ readonly patterns: readonly string[];
40
+ /**
41
+ * Literal file paths (relative to `cwd`), selected as-is with no glob
42
+ * expansion — for discovered names, which may contain `[]?*`. Unlike an
43
+ * unmatched pattern, a missing literal path is an error.
44
+ */
45
+ readonly files?: readonly string[];
46
+ /** Path to an instructions markdown file. */
47
+ readonly instructions?: string;
48
+ readonly agent?: Agent;
49
+ readonly mode?: Prompt.Mode;
50
+ readonly batchSize?: number;
51
+ /** Inline file contents into prompts (for agents without file access). */
52
+ readonly embed?: boolean;
53
+ readonly force?: boolean;
54
+ /** Open generated MCP servers without the standard prelude registry. */
55
+ readonly noPrelude?: boolean;
56
+ readonly timeoutSeconds?: number;
57
+ readonly cwd?: string;
58
+ /** Injection point for URL fetching in tests. */
59
+ readonly fetchImpl?: Web.FetchLike;
60
+ readonly store: Store;
61
+ /** Strict stages the whole run and commits once; lenient commits accepted work batch by batch. */
62
+ readonly policy?: Policy;
63
+ };
64
+ export type BatchReport = {
65
+ readonly files: readonly string[];
66
+ readonly ok: boolean;
67
+ /** Claims produced by this batch; strict failures may discard this staged delta. */
68
+ readonly added: number;
69
+ readonly problems: readonly string[];
70
+ /** Agent's final output line (mcp mode) or a failure note. */
71
+ readonly note?: string;
72
+ };
73
+ export type SourceStatus = 'accepted' | 'rejected' | 'skipped' | 'not-run';
74
+ export type SourceReport = {
75
+ readonly path: string;
76
+ readonly status: SourceStatus;
77
+ readonly batch?: number;
78
+ readonly problems: readonly string[];
79
+ readonly note?: string;
80
+ /** Fetch classification for rejected URL sources. */
81
+ readonly failure?: Web.FailureKind;
82
+ readonly retryable?: boolean;
83
+ readonly httpStatus?: number;
84
+ };
85
+ export type Report = {
86
+ readonly policy: Policy;
87
+ /** Whether this run's accepted changes were applied to the requested store. */
88
+ readonly applied: boolean;
89
+ readonly matched: number;
90
+ readonly skipped: readonly string[];
91
+ readonly batches: readonly BatchReport[];
92
+ /** Complete manifest: one entry for every matched source. */
93
+ readonly sources: readonly SourceReport[];
94
+ /** Claims committed to the requested store (digest bookkeeping excluded). */
95
+ readonly added: number;
96
+ readonly failed: number;
97
+ };
98
+ export type Batch = {
99
+ readonly files: readonly Files.Selected[];
100
+ readonly prompt: string;
101
+ };
102
+ /** Writes an MCP client configuration pointing at `cave mcp --db <db>`. */
103
+ export declare const writeMcpConfig: (db: string, options?: {
104
+ noPrelude?: boolean;
105
+ dir?: string;
106
+ }) => string;
107
+ /** Builds the prompt for one batch against the store's *current* state. */
108
+ export declare const promptFor: (store: Store, files: readonly Files.Selected[], options: Pick<Options, "instructions" | "embed" | "mode" | "cwd">) => string;
109
+ /** Selects and batches the sources to process — file globs, literal paths and URLs. */
110
+ export declare const selectBatches: (store: Store, options: Options) => Promise<{
111
+ selection: Files.Selection & {
112
+ failures: readonly Web.Failure[];
113
+ };
114
+ batches: Files.Selected[][];
115
+ }>;
116
+ /**
117
+ * Runs one shell agent invocation: `{name}` placeholders substituted into
118
+ * the template — each value shell-quoted, so paths with spaces or shell
119
+ * metacharacters stay single arguments — the prompt piped to stdin,
120
+ * stdout captured. Shared with `@cavelang/cli/eval`, whose agents and judges
121
+ * follow the same contract.
122
+ */
123
+ export declare const runShellAgent: (template: string, prompt: string, substitutions: Readonly<Record<string, string>>, timeoutSeconds: number, cwd: string) => Promise<{
124
+ code: number | null;
125
+ stdout: string;
126
+ error?: string;
127
+ }>;
128
+ /** Extracts CAVE text from stdout-mode agent output (```cave fences win). */
129
+ export declare const caveTextOf: (output: string) => string;
130
+ /**
131
+ * Runs the full ingestion. Strict is the default: the target is copied into
132
+ * an isolated staging store, every generated MCP configuration and `{db}`
133
+ * substitution points there, and one identity-preserving merge applies the
134
+ * complete run only after every batch succeeds. A fatal batch stops further
135
+ * agent calls and discards all staged claims and digests.
136
+ *
137
+ * Lenient mode writes accepted work batch by batch, continues after failures,
138
+ * and withholds digests for rejected sources so the next invocation retries
139
+ * them. The returned source manifest accounts for every matched input.
140
+ */
141
+ export declare const run: (options: Options) => Promise<Report>;
142
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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"}