@cavelang/cli 0.35.0 → 0.36.1

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 (327) hide show
  1. package/README.md +224 -12
  2. package/dist/internal/act/action.js +2 -1
  3. package/dist/internal/act/action.js.map +1 -1
  4. package/dist/internal/act/declare.d.ts.map +1 -1
  5. package/dist/internal/act/declare.js +82 -53
  6. package/dist/internal/act/declare.js.map +1 -1
  7. package/dist/internal/act/engine.d.ts +4 -3
  8. package/dist/internal/act/engine.d.ts.map +1 -1
  9. package/dist/internal/act/engine.js +121 -32
  10. package/dist/internal/act/engine.js.map +1 -1
  11. package/dist/internal/automate/cancellation.d.ts +3 -0
  12. package/dist/internal/automate/cancellation.d.ts.map +1 -0
  13. package/dist/internal/automate/cancellation.js +38 -0
  14. package/dist/internal/automate/cancellation.js.map +1 -0
  15. package/dist/internal/automate/declare.d.ts.map +1 -1
  16. package/dist/internal/automate/declare.js +49 -24
  17. package/dist/internal/automate/declare.js.map +1 -1
  18. package/dist/internal/automate/engine.d.ts +7 -3
  19. package/dist/internal/automate/engine.d.ts.map +1 -1
  20. package/dist/internal/automate/engine.js +196 -93
  21. package/dist/internal/automate/engine.js.map +1 -1
  22. package/dist/internal/automate/error-message.d.ts +3 -0
  23. package/dist/internal/automate/error-message.d.ts.map +1 -0
  24. package/dist/internal/automate/error-message.js +10 -0
  25. package/dist/internal/automate/error-message.js.map +1 -0
  26. package/dist/internal/automate/main.d.ts.map +1 -1
  27. package/dist/internal/automate/main.js +238 -35
  28. package/dist/internal/automate/main.js.map +1 -1
  29. package/dist/internal/automate/options.d.ts +4 -0
  30. package/dist/internal/automate/options.d.ts.map +1 -0
  31. package/dist/internal/automate/options.js +19 -0
  32. package/dist/internal/automate/options.js.map +1 -0
  33. package/dist/internal/connect/declared.d.ts +6 -27
  34. package/dist/internal/connect/declared.d.ts.map +1 -1
  35. package/dist/internal/connect/declared.js +165 -76
  36. package/dist/internal/connect/declared.js.map +1 -1
  37. package/dist/internal/connect/error-message.d.ts +3 -0
  38. package/dist/internal/connect/error-message.d.ts.map +1 -0
  39. package/dist/internal/connect/error-message.js +10 -0
  40. package/dist/internal/connect/error-message.js.map +1 -0
  41. package/dist/internal/connect/federation.d.ts +9 -0
  42. package/dist/internal/connect/federation.d.ts.map +1 -0
  43. package/dist/internal/connect/federation.js +19 -0
  44. package/dist/internal/connect/federation.js.map +1 -0
  45. package/dist/internal/connect/fetch-failure.d.ts +3 -0
  46. package/dist/internal/connect/fetch-failure.d.ts.map +1 -0
  47. package/dist/internal/connect/fetch-failure.js +36 -0
  48. package/dist/internal/connect/fetch-failure.js.map +1 -0
  49. package/dist/internal/connect/main.d.ts +1 -0
  50. package/dist/internal/connect/main.d.ts.map +1 -1
  51. package/dist/internal/connect/main.js +288 -114
  52. package/dist/internal/connect/main.js.map +1 -1
  53. package/dist/internal/connect/options.d.ts +3 -0
  54. package/dist/internal/connect/options.d.ts.map +1 -0
  55. package/dist/internal/connect/options.js +9 -0
  56. package/dist/internal/connect/options.js.map +1 -0
  57. package/dist/internal/connect/records.d.ts +3 -0
  58. package/dist/internal/connect/records.d.ts.map +1 -0
  59. package/dist/internal/connect/records.js +21 -0
  60. package/dist/internal/connect/records.js.map +1 -0
  61. package/dist/internal/connect/run.d.ts +1 -18
  62. package/dist/internal/connect/run.d.ts.map +1 -1
  63. package/dist/internal/connect/run.js +115 -55
  64. package/dist/internal/connect/run.js.map +1 -1
  65. package/dist/internal/connect/source.d.ts +3 -1
  66. package/dist/internal/connect/source.d.ts.map +1 -1
  67. package/dist/internal/connect/source.js +226 -47
  68. package/dist/internal/connect/source.js.map +1 -1
  69. package/dist/internal/connect/template.d.ts +2 -2
  70. package/dist/internal/connect/template.d.ts.map +1 -1
  71. package/dist/internal/connect/template.js +25 -9
  72. package/dist/internal/connect/template.js.map +1 -1
  73. package/dist/internal/connect/utf8.d.ts +3 -0
  74. package/dist/internal/connect/utf8.d.ts.map +1 -0
  75. package/dist/internal/connect/utf8.js +12 -0
  76. package/dist/internal/connect/utf8.js.map +1 -0
  77. package/dist/internal/eval/cleanup.d.ts +5 -0
  78. package/dist/internal/eval/cleanup.d.ts.map +1 -0
  79. package/dist/internal/eval/cleanup.js +50 -0
  80. package/dist/internal/eval/cleanup.js.map +1 -0
  81. package/dist/internal/eval/error-message.d.ts +3 -0
  82. package/dist/internal/eval/error-message.d.ts.map +1 -0
  83. package/dist/internal/eval/error-message.js +10 -0
  84. package/dist/internal/eval/error-message.js.map +1 -0
  85. package/dist/internal/eval/judge.d.ts.map +1 -1
  86. package/dist/internal/eval/judge.js +3 -31
  87. package/dist/internal/eval/judge.js.map +1 -1
  88. package/dist/internal/eval/loop.d.ts.map +1 -1
  89. package/dist/internal/eval/loop.js +18 -4
  90. package/dist/internal/eval/loop.js.map +1 -1
  91. package/dist/internal/eval/main.d.ts.map +1 -1
  92. package/dist/internal/eval/main.js +22 -10
  93. package/dist/internal/eval/main.js.map +1 -1
  94. package/dist/internal/eval/options.d.ts +6 -0
  95. package/dist/internal/eval/options.d.ts.map +1 -0
  96. package/dist/internal/eval/options.js +31 -0
  97. package/dist/internal/eval/options.js.map +1 -0
  98. package/dist/internal/eval/queries.d.ts.map +1 -1
  99. package/dist/internal/eval/queries.js +9 -6
  100. package/dist/internal/eval/queries.js.map +1 -1
  101. package/dist/internal/eval/run.d.ts.map +1 -1
  102. package/dist/internal/eval/run.js +112 -24
  103. package/dist/internal/eval/run.js.map +1 -1
  104. package/dist/internal/eval/score.d.ts.map +1 -1
  105. package/dist/internal/eval/score.js +9 -2
  106. package/dist/internal/eval/score.js.map +1 -1
  107. package/dist/internal/eval/suite.d.ts.map +1 -1
  108. package/dist/internal/eval/suite.js +14 -2
  109. package/dist/internal/eval/suite.js.map +1 -1
  110. package/dist/internal/ingest/cleanup.d.ts +5 -0
  111. package/dist/internal/ingest/cleanup.d.ts.map +1 -0
  112. package/dist/internal/ingest/cleanup.js +50 -0
  113. package/dist/internal/ingest/cleanup.js.map +1 -0
  114. package/dist/internal/ingest/content.d.ts +6 -0
  115. package/dist/internal/ingest/content.d.ts.map +1 -0
  116. package/dist/internal/ingest/content.js +25 -0
  117. package/dist/internal/ingest/content.js.map +1 -0
  118. package/dist/internal/ingest/context.d.ts.map +1 -1
  119. package/dist/internal/ingest/context.js +25 -7
  120. package/dist/internal/ingest/context.js.map +1 -1
  121. package/dist/internal/ingest/error-message.d.ts +3 -0
  122. package/dist/internal/ingest/error-message.d.ts.map +1 -0
  123. package/dist/internal/ingest/error-message.js +10 -0
  124. package/dist/internal/ingest/error-message.js.map +1 -0
  125. package/dist/internal/ingest/files.d.ts +4 -12
  126. package/dist/internal/ingest/files.d.ts.map +1 -1
  127. package/dist/internal/ingest/files.js +22 -10
  128. package/dist/internal/ingest/files.js.map +1 -1
  129. package/dist/internal/ingest/main.d.ts.map +1 -1
  130. package/dist/internal/ingest/main.js +46 -16
  131. package/dist/internal/ingest/main.js.map +1 -1
  132. package/dist/internal/ingest/options.d.ts +6 -0
  133. package/dist/internal/ingest/options.d.ts.map +1 -0
  134. package/dist/internal/ingest/options.js +27 -0
  135. package/dist/internal/ingest/options.js.map +1 -0
  136. package/dist/internal/ingest/prompt.d.ts.map +1 -1
  137. package/dist/internal/ingest/prompt.js +14 -10
  138. package/dist/internal/ingest/prompt.js.map +1 -1
  139. package/dist/internal/ingest/run.d.ts +9 -2
  140. package/dist/internal/ingest/run.d.ts.map +1 -1
  141. package/dist/internal/ingest/run.js +206 -62
  142. package/dist/internal/ingest/run.js.map +1 -1
  143. package/dist/internal/ingest/timeout.d.ts +3 -0
  144. package/dist/internal/ingest/timeout.d.ts.map +1 -0
  145. package/dist/internal/ingest/timeout.js +14 -0
  146. package/dist/internal/ingest/timeout.js.map +1 -0
  147. package/dist/internal/ingest/web.d.ts +2 -11
  148. package/dist/internal/ingest/web.d.ts.map +1 -1
  149. package/dist/internal/ingest/web.js +131 -25
  150. package/dist/internal/ingest/web.js.map +1 -1
  151. package/dist/internal/loop/budgets.d.ts +3 -0
  152. package/dist/internal/loop/budgets.d.ts.map +1 -0
  153. package/dist/internal/loop/budgets.js +10 -0
  154. package/dist/internal/loop/budgets.js.map +1 -0
  155. package/dist/internal/loop/index.d.ts +2 -0
  156. package/dist/internal/loop/index.d.ts.map +1 -1
  157. package/dist/internal/loop/index.js +2 -0
  158. package/dist/internal/loop/index.js.map +1 -1
  159. package/dist/internal/loop/json-answer.d.ts +7 -0
  160. package/dist/internal/loop/json-answer.d.ts.map +1 -0
  161. package/dist/internal/loop/json-answer.js +79 -0
  162. package/dist/internal/loop/json-answer.js.map +1 -0
  163. package/dist/internal/loop/json-spans.d.ts +3 -0
  164. package/dist/internal/loop/json-spans.d.ts.map +1 -0
  165. package/dist/internal/loop/json-spans.js +88 -0
  166. package/dist/internal/loop/json-spans.js.map +1 -0
  167. package/dist/internal/loop/llm.d.ts +3 -2
  168. package/dist/internal/loop/llm.d.ts.map +1 -1
  169. package/dist/internal/loop/llm.js +115 -32
  170. package/dist/internal/loop/llm.js.map +1 -1
  171. package/dist/internal/loop/process.d.ts +3 -1
  172. package/dist/internal/loop/process.d.ts.map +1 -1
  173. package/dist/internal/loop/process.js +159 -59
  174. package/dist/internal/loop/process.js.map +1 -1
  175. package/dist/internal/loop/read-snapshot.d.ts +4 -0
  176. package/dist/internal/loop/read-snapshot.d.ts.map +1 -0
  177. package/dist/internal/loop/read-snapshot.js +29 -0
  178. package/dist/internal/loop/read-snapshot.js.map +1 -0
  179. package/dist/internal/loop/reconstruct.d.ts +6 -5
  180. package/dist/internal/loop/reconstruct.d.ts.map +1 -1
  181. package/dist/internal/loop/reconstruct.js +19 -8
  182. package/dist/internal/loop/reconstruct.js.map +1 -1
  183. package/dist/internal/loop/score-settings.d.ts +5 -0
  184. package/dist/internal/loop/score-settings.d.ts.map +1 -0
  185. package/dist/internal/loop/score-settings.js +14 -0
  186. package/dist/internal/loop/score-settings.js.map +1 -0
  187. package/dist/internal/loop/sqlite.d.ts.map +1 -1
  188. package/dist/internal/loop/sqlite.js +15 -7
  189. package/dist/internal/loop/sqlite.js.map +1 -1
  190. package/dist/internal/loop/store.d.ts.map +1 -1
  191. package/dist/internal/loop/store.js +11 -7
  192. package/dist/internal/loop/store.js.map +1 -1
  193. package/dist/internal/loop/timeout.d.ts +3 -0
  194. package/dist/internal/loop/timeout.d.ts.map +1 -0
  195. package/dist/internal/loop/timeout.js +13 -0
  196. package/dist/internal/loop/timeout.js.map +1 -0
  197. package/dist/internal/mcp/error-message.d.ts +3 -0
  198. package/dist/internal/mcp/error-message.d.ts.map +1 -0
  199. package/dist/internal/mcp/error-message.js +10 -0
  200. package/dist/internal/mcp/error-message.js.map +1 -0
  201. package/dist/internal/mcp/main.d.ts.map +1 -1
  202. package/dist/internal/mcp/main.js +42 -27
  203. package/dist/internal/mcp/main.js.map +1 -1
  204. package/dist/internal/mcp/read-snapshot.d.ts +4 -0
  205. package/dist/internal/mcp/read-snapshot.d.ts.map +1 -0
  206. package/dist/internal/mcp/read-snapshot.js +22 -0
  207. package/dist/internal/mcp/read-snapshot.js.map +1 -0
  208. package/dist/internal/mcp/server.d.ts.map +1 -1
  209. package/dist/internal/mcp/server.js +181 -21
  210. package/dist/internal/mcp/server.js.map +1 -1
  211. package/dist/internal/mcp/source.d.ts +3 -0
  212. package/dist/internal/mcp/source.d.ts.map +1 -0
  213. package/dist/internal/mcp/source.js +13 -0
  214. package/dist/internal/mcp/source.js.map +1 -0
  215. package/dist/internal/mcp/tools.d.ts.map +1 -1
  216. package/dist/internal/mcp/tools.js +135 -72
  217. package/dist/internal/mcp/tools.js.map +1 -1
  218. package/dist/internal/rules/declarations.d.ts +6 -0
  219. package/dist/internal/rules/declarations.d.ts.map +1 -0
  220. package/dist/internal/rules/declarations.js +14 -0
  221. package/dist/internal/rules/declarations.js.map +1 -0
  222. package/dist/internal/rules/declare.d.ts.map +1 -1
  223. package/dist/internal/rules/declare.js +30 -16
  224. package/dist/internal/rules/declare.js.map +1 -1
  225. package/dist/internal/rules/engine.d.ts +8 -7
  226. package/dist/internal/rules/engine.d.ts.map +1 -1
  227. package/dist/internal/rules/engine.js +150 -44
  228. package/dist/internal/rules/engine.js.map +1 -1
  229. package/dist/internal/shape/alias-root.d.ts +3 -0
  230. package/dist/internal/shape/alias-root.d.ts.map +1 -0
  231. package/dist/internal/shape/alias-root.js +13 -0
  232. package/dist/internal/shape/alias-root.js.map +1 -0
  233. package/dist/internal/shape/check.d.ts +15 -3
  234. package/dist/internal/shape/check.d.ts.map +1 -1
  235. package/dist/internal/shape/check.js +230 -100
  236. package/dist/internal/shape/check.js.map +1 -1
  237. package/dist/internal/shape/client.d.ts.map +1 -1
  238. package/dist/internal/shape/client.js +42 -20
  239. package/dist/internal/shape/client.js.map +1 -1
  240. package/dist/internal/shape/constraints.d.ts +8 -0
  241. package/dist/internal/shape/constraints.d.ts.map +1 -0
  242. package/dist/internal/shape/constraints.js +17 -0
  243. package/dist/internal/shape/constraints.js.map +1 -0
  244. package/dist/internal/shape/edit-distance.d.ts +3 -0
  245. package/dist/internal/shape/edit-distance.d.ts.map +1 -0
  246. package/dist/internal/shape/edit-distance.js +33 -0
  247. package/dist/internal/shape/edit-distance.js.map +1 -0
  248. package/dist/internal/shape/gate.d.ts.map +1 -1
  249. package/dist/internal/shape/gate.js +0 -0
  250. package/dist/internal/shape/gate.js.map +1 -1
  251. package/dist/internal/shape/snapshot.d.ts +4 -0
  252. package/dist/internal/shape/snapshot.d.ts.map +1 -0
  253. package/dist/internal/shape/snapshot.js +20 -0
  254. package/dist/internal/shape/snapshot.js.map +1 -0
  255. package/dist/internal/shape/suggest.d.ts +8 -6
  256. package/dist/internal/shape/suggest.d.ts.map +1 -1
  257. package/dist/internal/shape/suggest.js +208 -92
  258. package/dist/internal/shape/suggest.js.map +1 -1
  259. package/dist/internal/sync/error-message.d.ts +3 -0
  260. package/dist/internal/sync/error-message.d.ts.map +1 -0
  261. package/dist/internal/sync/error-message.js +10 -0
  262. package/dist/internal/sync/error-message.js.map +1 -0
  263. package/dist/internal/sync/index.d.ts +3 -2
  264. package/dist/internal/sync/index.d.ts.map +1 -1
  265. package/dist/internal/sync/index.js +3 -2
  266. package/dist/internal/sync/index.js.map +1 -1
  267. package/dist/internal/sync/sync.d.ts +8 -5
  268. package/dist/internal/sync/sync.d.ts.map +1 -1
  269. package/dist/internal/sync/sync.js +322 -65
  270. package/dist/internal/sync/sync.js.map +1 -1
  271. package/dist/internal/view/api.d.ts +3 -1
  272. package/dist/internal/view/api.d.ts.map +1 -1
  273. package/dist/internal/view/api.js +154 -90
  274. package/dist/internal/view/api.js.map +1 -1
  275. package/dist/internal/view/error-message.d.ts +3 -0
  276. package/dist/internal/view/error-message.d.ts.map +1 -0
  277. package/dist/internal/view/error-message.js +10 -0
  278. package/dist/internal/view/error-message.js.map +1 -0
  279. package/dist/internal/view/main.d.ts.map +1 -1
  280. package/dist/internal/view/main.js +61 -8
  281. package/dist/internal/view/main.js.map +1 -1
  282. package/dist/internal/view/page.d.ts.map +1 -1
  283. package/dist/internal/view/page.js +119 -20
  284. package/dist/internal/view/page.js.map +1 -1
  285. package/dist/internal/view/report.d.ts.map +1 -1
  286. package/dist/internal/view/report.js +180 -145
  287. package/dist/internal/view/report.js.map +1 -1
  288. package/dist/internal/view/scope.d.ts +6 -2
  289. package/dist/internal/view/scope.d.ts.map +1 -1
  290. package/dist/internal/view/scope.js +107 -24
  291. package/dist/internal/view/scope.js.map +1 -1
  292. package/dist/internal/view/sensitivity.d.ts +4 -0
  293. package/dist/internal/view/sensitivity.d.ts.map +1 -0
  294. package/dist/internal/view/sensitivity.js +11 -0
  295. package/dist/internal/view/sensitivity.js.map +1 -0
  296. package/dist/internal/view/server.d.ts.map +1 -1
  297. package/dist/internal/view/server.js +57 -20
  298. package/dist/internal/view/server.js.map +1 -1
  299. package/dist/src/atomic-output.d.ts +3 -0
  300. package/dist/src/atomic-output.d.ts.map +1 -0
  301. package/dist/src/atomic-output.js +67 -0
  302. package/dist/src/atomic-output.js.map +1 -0
  303. package/dist/src/cli.d.ts +3 -2
  304. package/dist/src/cli.d.ts.map +1 -1
  305. package/dist/src/cli.js +188 -173
  306. package/dist/src/cli.js.map +1 -1
  307. package/dist/src/dispatch.d.ts.map +1 -1
  308. package/dist/src/dispatch.js +3 -2
  309. package/dist/src/dispatch.js.map +1 -1
  310. package/dist/src/doctor.d.ts.map +1 -1
  311. package/dist/src/doctor.js +178 -102
  312. package/dist/src/doctor.js.map +1 -1
  313. package/dist/src/error-message.d.ts +3 -0
  314. package/dist/src/error-message.d.ts.map +1 -0
  315. package/dist/src/error-message.js +20 -0
  316. package/dist/src/error-message.js.map +1 -0
  317. package/dist/src/hooks-config.d.ts +3 -0
  318. package/dist/src/hooks-config.d.ts.map +1 -0
  319. package/dist/src/hooks-config.js +23 -0
  320. package/dist/src/hooks-config.js.map +1 -0
  321. package/package.json +23 -20
  322. package/src/atomic-output.ts +47 -0
  323. package/src/cli.ts +170 -147
  324. package/src/dispatch.ts +3 -2
  325. package/src/doctor.ts +192 -111
  326. package/src/error-message.ts +13 -0
  327. package/src/hooks-config.ts +22 -0
@@ -44,7 +44,8 @@ const sourcesOf = (golden) => {
44
44
  return false;
45
45
  }
46
46
  const extension = name.slice(stem.length + 1);
47
- return extension !== '' && !extension.includes('.') && statSync(join(dir, name)).isFile();
47
+ return extension !== '' && !extension.includes('.') &&
48
+ statSync(join(dir, name), { throwIfNoEntry: false })?.isFile() === true;
48
49
  })
49
50
  .sort()
50
51
  .map(name => join(dir, name));
@@ -59,8 +60,11 @@ const instructionsOf = (golden, root, explicit) => {
59
60
  return candidates.find(path => path !== undefined && existsSync(path));
60
61
  };
61
62
  const caseOf = (golden, root, cwd, explicit) => {
62
- const sources = sourcesOf(golden);
63
63
  const name = relative(cwd, golden).slice(0, -goldenSuffix.length);
64
+ if (!statSync(golden).isFile()) {
65
+ return { problem: `${name}: ${basename(golden)} must be a file` };
66
+ }
67
+ const sources = sourcesOf(golden);
64
68
  if (sources.length === 0) {
65
69
  return { problem: `${name}: no source file — expected a single ${basename(golden).slice(0, -goldenSuffix.length)}.<ext> beside ${basename(golden)}` };
66
70
  }
@@ -70,6 +74,11 @@ const caseOf = (golden, root, cwd, explicit) => {
70
74
  const queries = `${golden.slice(0, -goldenSuffix.length)}${queriesSuffix}`;
71
75
  const loop = `${golden.slice(0, -goldenSuffix.length)}${loopSuffix}`;
72
76
  const instructions = instructionsOf(golden, root, explicit);
77
+ for (const path of [queries, loop, instructions]) {
78
+ if (path !== undefined && existsSync(path) && !statSync(path).isFile()) {
79
+ return { problem: `${name}: ${basename(path)} must be a file` };
80
+ }
81
+ }
73
82
  return {
74
83
  kase: {
75
84
  name,
@@ -90,6 +99,9 @@ export const discover = (roots, options = {}) => {
90
99
  const explicit = options.instructions === undefined ? undefined : resolve(cwd, options.instructions);
91
100
  const cases = [];
92
101
  const problems = [];
102
+ if (explicit !== undefined && !statSync(explicit, { throwIfNoEntry: false })?.isFile()) {
103
+ return { cases, problems: [`${explicit}: instructions must name an existing file`] };
104
+ }
93
105
  for (const root of roots) {
94
106
  const absolute = resolve(cwd, root);
95
107
  if (!existsSync(absolute)) {
@@ -1 +1 @@
1
- {"version":3,"file":"suite.js","sourceRoot":"","sources":["../../src/suite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suite.js","sourceRoot":"","sources":["../../src/suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Retain an in-flight failure if releasing an owned resource also fails. */
2
+ export declare const cleanup: (failures: readonly unknown[], release: () => void) => void;
3
+ /** Keep diagnostics already attached to cancellation, or retain a simultaneous work failure. */
4
+ export declare const throwIfCancelled: (signal: AbortSignal | undefined, error: unknown) => void;
5
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/cleanup.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,eAAO,MAAM,OAAO,GAAI,UAAU,SAAS,OAAO,EAAE,EAAE,SAAS,MAAM,IAAI,KAAG,IAO3E,CAAA;AAED,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,GAAI,QAAQ,WAAW,GAAG,SAAS,EAAE,OAAO,OAAO,KAAG,IAuBlF,CAAA"}
@@ -0,0 +1,50 @@
1
+ import { errorMessage as message } from "./error-message.js";
2
+ /** Retain an in-flight failure if releasing an owned resource also fails. */
3
+ export const cleanup = (failures, release) => {
4
+ try {
5
+ release();
6
+ }
7
+ catch (error) {
8
+ if (failures.length === 0)
9
+ throw error;
10
+ const previous = failures[0];
11
+ throw new AggregateError([previous, error], `${message(previous)}; cleanup also failed: ${message(error)}`, { cause: previous });
12
+ }
13
+ };
14
+ /** Keep diagnostics already attached to cancellation, or retain a simultaneous work failure. */
15
+ export const throwIfCancelled = (signal, error) => {
16
+ try {
17
+ signal?.throwIfAborted();
18
+ }
19
+ catch (reason) {
20
+ const pending = [error], seen = new Set();
21
+ while (pending.length > 0) {
22
+ const value = pending.pop();
23
+ if (value === reason)
24
+ throw error;
25
+ if (seen.has(value))
26
+ continue;
27
+ seen.add(value);
28
+ try {
29
+ if (value instanceof AggregateError) {
30
+ try {
31
+ for (const inner of value.errors)
32
+ pending.push(inner);
33
+ }
34
+ catch { /* Opaque metadata cannot prove cancellation is already included. */ }
35
+ }
36
+ if (value instanceof Error) {
37
+ try {
38
+ const cause = value.cause;
39
+ if (cause !== undefined)
40
+ pending.push(cause);
41
+ }
42
+ catch { /* Retain the original error even when its cause cannot be read. */ }
43
+ }
44
+ }
45
+ catch { /* An opaque thrown object may reject prototype inspection too. */ }
46
+ }
47
+ throw new AggregateError([reason, error], `${message(reason)}; ingestion also failed: ${message(error)}`, { cause: reason });
48
+ }
49
+ };
50
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,QAA4B,EAAE,OAAmB,EAAQ,EAAE;IACjF,IAAI,CAAC;QAAC,OAAO,EAAE,CAAA;IAAC,CAAC;IACjB,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,KAAK,CAAA;QACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,IAAI,cAAc,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,0BAA0B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IAClI,CAAC;AACH,CAAC,CAAA;AAED,gGAAgG;AAChG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAA+B,EAAE,KAAc,EAAQ,EAAE;IACxF,IAAI,CAAC;QAAC,MAAM,EAAE,cAAc,EAAE,CAAA;IAAC,CAAC;IAChC,OAAO,MAAM,EAAE,CAAC;QACd,MAAM,OAAO,GAAc,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,EAAW,CAAA;QAC7D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;YAC3B,IAAI,KAAK,KAAK,MAAM;gBAAE,MAAM,KAAK,CAAA;YACjC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAQ;YAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACf,IAAI,CAAC;gBACH,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;oBACpC,IAAI,CAAC;wBAAC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM;4BAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,oEAAoE,CAAC,CAAC;gBAC9I,CAAC;gBACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;wBACzB,IAAI,KAAK,KAAK,SAAS;4BAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAC9C,CAAC;oBAAC,MAAM,CAAC,CAAC,mEAAmE,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,kEAAkE,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,IAAI,cAAc,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,4BAA4B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9H,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare const digestBytes: (bytes: Uint8Array) => string;
2
+ export declare const sourceLabel: (path: string) => string;
3
+ /** Keep filesystem diagnostics printable while retaining their original cause. */
4
+ export declare const withSourceError: <T>(path: string, operation: string, read: () => T) => T;
5
+ export declare const decodeText: (bytes: Uint8Array, path: string, kind?: string) => string;
6
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/content.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,GAAI,OAAO,UAAU,KAAG,MACe,CAAA;AAE/D,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAG2B,CAAA;AAEtE,kFAAkF;AAClF,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,MAAM,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,MAAM,CAAC,KAAG,CAMnF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,UAAU,EAAE,MAAM,MAAM,EAAE,aAAwB,KAAG,MAMtF,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { errorMessage } from "./error-message.js";
3
+ import { sourcePath } from "./options.js";
4
+ export const digestBytes = (bytes) => createHash('sha256').update(bytes).digest('hex').slice(0, 12);
5
+ export const sourceLabel = (path) => /[\u0000-\u001f\u007f-\u009f\u2028\u2029]/.test(path) ?
6
+ JSON.stringify(path).replace(/[\u007f-\u009f\u2028\u2029]/g, char => `\\u${char.charCodeAt(0).toString(16).padStart(4, '0')}`) : path;
7
+ /** Keep filesystem diagnostics printable while retaining their original cause. */
8
+ export const withSourceError = (path, operation, read) => {
9
+ sourcePath(path, 'source path');
10
+ try {
11
+ return read();
12
+ }
13
+ catch (cause) {
14
+ throw new Error(`${sourceLabel(path)}: cannot ${operation}: ${sourceLabel(errorMessage(cause))}`, { cause });
15
+ }
16
+ };
17
+ export const decodeText = (bytes, path, kind = 'embedded source') => {
18
+ try {
19
+ return new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
20
+ }
21
+ catch (cause) {
22
+ throw new TypeError(`${sourceLabel(path)}: invalid UTF-8 ${kind}`, { cause });
23
+ }
24
+ };
25
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAU,EAAE,CACvD,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAClD,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,8BAA8B,EAAE,IAAI,CAAC,EAAE,CAClE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAEtE,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,IAAY,EAAE,SAAiB,EAAE,IAAa,EAAK,EAAE;IACtF,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IAC/B,IAAI,CAAC;QAAC,OAAO,IAAI,EAAE,CAAA;IAAC,CAAC;IACrB,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,SAAS,KAAK,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9G,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAE,IAAY,EAAE,IAAI,GAAG,iBAAiB,EAAU,EAAE;IAC9F,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,SAAS,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/E,CAAC;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,mEAAmE;AACnE,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAM,EAO/C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,OAAO,SAAS,MAAM,EAAE,EAAE,cAAU,KAAG,SAAS,GAAG,MAgC3F,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,mEAAmE;AACnE,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAM,EAW/C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,OAAO,SAAS,MAAM,EAAE,EAAE,cAAU,KAAG,SAAS,GAAG,MA0C3F,CAAA"}
@@ -12,8 +12,15 @@
12
12
  import { emitClaim } from '@cavelang/canonical';
13
13
  /** Tokens worth searching for, derived from a file path or URL. */
14
14
  export const pathTokens = (path) => {
15
- const parts = path
16
- .split(/[/\\?#&=]/)
15
+ let searchable = path;
16
+ if (/^https?:\/\//i.test(path)) {
17
+ try {
18
+ searchable = decodeURIComponent(path);
19
+ }
20
+ catch { /* Keep malformed escapes literal. */ }
21
+ }
22
+ const parts = searchable
23
+ .split(/[/\\?#&=\0]/)
17
24
  .flatMap(segment => segment.split('.'))
18
25
  .filter(token => token.length >= 3 &&
19
26
  !/^(src|test|index|json|md|ts|js|tsx|jsx|txt|yaml|yml|https?:|www|com|net|org|html|htm)$/.test(token));
@@ -24,7 +31,10 @@ export const pathTokens = (path) => {
24
31
  * `limit` claim lines; `undefined` for an empty store.
25
32
  */
26
33
  export const contextFor = (store, paths, limit = 40) => {
27
- const current = store.currentBeliefs();
34
+ if (!Number.isSafeInteger(limit) || limit < 0) {
35
+ throw new TypeError('context limit must be a non-negative safe integer');
36
+ }
37
+ const current = store.currentBeliefs().filter(row => row.conf > 0);
28
38
  if (current.length === 0) {
29
39
  return undefined;
30
40
  }
@@ -40,19 +50,27 @@ export const contextFor = (store, paths, limit = 40) => {
40
50
  .slice(0, 15)
41
51
  .map(([entity, count]) => `${entity} (${count})`);
42
52
  const related = new Map();
43
- for (const token of paths.flatMap(pathTokens)) {
44
- for (const row of store.search(token, { limit: 5 })) {
53
+ const currentIds = new Set(current.map(row => row.id));
54
+ for (const token of new Set(paths.flatMap(pathTokens))) {
55
+ if (related.size >= limit)
56
+ break;
57
+ for (const row of store.search(token, { limit: 5, currentOnly: true })) {
58
+ if (!currentIds.has(row.id))
59
+ continue;
45
60
  if (related.size >= limit) {
46
61
  break;
47
62
  }
48
- related.set(row.claim_key, emitClaim(store.toClaim(row)));
63
+ const claim = store.toClaim(row);
64
+ related.set(row.claim_key, emitClaim({ ...claim,
65
+ ...claim.comment === undefined ? {} : { comment: claim.comment.replace(/\r\n|\r/g, '\n') }
66
+ }));
49
67
  }
50
68
  }
51
69
  return [
52
70
  `The database currently holds ${current.length} current belief(s).`,
53
71
  `Established entities (use these names, do not invent variants): ${topEntities.join(', ')}`,
54
72
  ...related.size > 0 ?
55
- ['Existing claims related to this batch:', ...[...related.values()].map(line => ` ${line}`)] :
73
+ ['Existing claims related to this batch:', ...[...related.values()].map(claim => claim.split('\n').map(line => ` ${line}`).join('\n'))] :
56
74
  []
57
75
  ].join('\n');
58
76
  };
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,mEAAmE;AACnE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAY,EAAE;IACnD,IAAI,UAAU,GAAG,IAAI,CAAA;IACrB,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,KAAK,GAAG,UAAU;SACrB,KAAK,CAAC,aAAa,CAAC;SACpB,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACtC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;QAChC,CAAC,wFAAwF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1G,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,KAAwB,EAAE,KAAK,GAAG,EAAE,EAAsB,EAAE;IACnG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;IAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IACzC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACtD,KAAK,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvD,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK;YAAE,MAAK;QAChC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YACrC,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAK;YACP,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK;gBAC7C,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE;aAC3F,CAAC,CAAC,CAAA;QACL,CAAC;IACH,CAAC;IACD,OAAO;QACL,gCAAgC,OAAO,CAAC,MAAM,qBAAqB;QACnE,mEAAmE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC3F,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACnB,CAAC,wCAAwC,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAC9E,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Diagnostic formatting must preserve batch and cleanup failures. */
2
+ export declare const errorMessage: (value: unknown) => string;
3
+ //# sourceMappingURL=error-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-message.d.ts","sourceRoot":"","sources":["../../src/error-message.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAM7C,CAAA"}
@@ -0,0 +1,10 @@
1
+ /** Diagnostic formatting must preserve batch and cleanup failures. */
2
+ export const errorMessage = (value) => {
3
+ try {
4
+ return value instanceof Error ? String(value.message) : String(value);
5
+ }
6
+ catch {
7
+ return '[unprintable thrown value]';
8
+ }
9
+ };
10
+ //# sourceMappingURL=error-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-message.js","sourceRoot":"","sources":["../../src/error-message.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE;IACrD,IAAI,CAAC;QACH,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,4BAA4B,CAAA;IACrC,CAAC;AACH,CAAC,CAAA"}
@@ -1,13 +1,3 @@
1
- /**
2
- * File selection for ingestion: glob expansion, batching, and the
3
- * incremental-skip bookkeeping.
4
- *
5
- * Ingestion provenance is recorded as ordinary CAVE claims —
6
- * `<path> HAS ingest-digest: <sha256/12> @src:cave-ingest` — so "which
7
- * files are already ingested at which content version" lives in the same
8
- * append-only store as the knowledge itself, and re-running `cave ingest`
9
- * over a monorepo only processes files whose content changed.
10
- */
11
1
  import type { Store } from '@cavelang/store';
12
2
  /** Digest attribute name used in provenance claims. */
13
3
  export declare const digestAttribute = "ingest-digest";
@@ -20,7 +10,7 @@ export declare const digestOf: (content: string) => string;
20
10
  export type Selected = {
21
11
  readonly path: string;
22
12
  readonly digest: string;
23
- /** Pre-fetched content (URL sources); files are read from disk instead. */
13
+ /** Selected content for URL sources and embedded local files. */
24
14
  readonly content?: string;
25
15
  };
26
16
  export type Selection = {
@@ -33,11 +23,13 @@ export declare const isIngested: (store: Store, path: string, digest: string) =>
33
23
  /**
34
24
  * Reads and digests candidate files (paths relative to `cwd`), skipping
35
25
  * the ones whose current `ingest-digest` belief already matches (pass
36
- * `force` to re-ingest all).
26
+ * `force` to re-ingest all). With `embed`, retain the same text for prompts
27
+ * so later file changes cannot separate source content from its digest.
37
28
  */
38
29
  export declare const select: (store: Store, paths: readonly string[], options?: {
39
30
  force?: boolean;
40
31
  cwd?: string;
32
+ embed?: boolean;
41
33
  }) => Selection;
42
34
  /** Records provenance claims for successfully ingested files. */
43
35
  export declare const recordDigests: (store: Store, files: readonly Selected[]) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,uDAAuD;AACvD,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAE9C,yCAAyC;AACzC,eAAO,MAAM,iBAAiB,oBAAoB,CAAA;AAiClD,wGAAwG;AACxG,eAAO,MAAM,MAAM,GAAI,UAAU,SAAS,MAAM,EAAE,EAAE,MAAK,MAAsB,KAAG,MAAM,EAKvF,CAAA;AAED,2DAA2D;AAC3D,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,KAAG,MACsB,CAAA;AAMjE,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IACnC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,4EAA4E;AAC5E,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,OAGvE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,OAAO,SAAS,MAAM,EAAE,EACxB,UAAS;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,KAC9C,SAaF,CAAA;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,OAAO,SAAS,QAAQ,EAAE,KAAG,IAkBxE,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,EAAE,MAAM,MAAM,KAAG,CAAC,EAAE,EAS/D,CAAA"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAG5C,uDAAuD;AACvD,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAE9C,yCAAyC;AACzC,eAAO,MAAM,iBAAiB,oBAAoB,CAAA;AAmClD,wGAAwG;AACxG,eAAO,MAAM,MAAM,GAAI,UAAU,SAAS,MAAM,EAAE,EAAE,MAAK,MAAsB,KAAG,MAAM,EAMvF,CAAA;AAED,2DAA2D;AAC3D,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,KAAG,MACsB,CAAA;AAMjE,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IACnC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,4EAA4E;AAC5E,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,OAGvE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,OAAO,SAAS,MAAM,EAAE,EACxB,UAAS;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,KAC/D,SAkBF,CAAA;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,OAAO,SAAS,QAAQ,EAAE,KAAG,IAkBxE,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,EAAE,MAAM,MAAM,KAAG,CAAC,EAAE,EAS/D,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { booleanOption, sourceList, sourcePath } from "./options.js";
1
2
  /**
2
3
  * File selection for ingestion: glob expansion, batching, and the
3
4
  * incremental-skip bookkeeping.
@@ -12,6 +13,7 @@ import { createHash } from 'node:crypto';
12
13
  import { globSync, readFileSync, statSync } from 'node:fs';
13
14
  import { resolve as resolvePath } from 'node:path';
14
15
  import { Key, Claim, Value } from '@cavelang/core';
16
+ import { decodeText, digestBytes, withSourceError } from "./content.js";
15
17
  /** Digest attribute name used in provenance claims. */
16
18
  export const digestAttribute = 'ingest-digest';
17
19
  /** Context marking provenance claims. */
@@ -22,6 +24,9 @@ export const provenanceContext = 'src:cave-ingest';
22
24
  * code literal so their exact spelling round-trips through CAVE text.
23
25
  */
24
26
  const provenanceSubject = (path) => {
27
+ // Newlines cannot appear inside a single-line provenance claim, even in literals.
28
+ if (path.includes('\n'))
29
+ return Claim.code(`percent-encoded:${encodeURIComponent(path)}`);
25
30
  const isEntityAtom = path !== '' &&
26
31
  !/[\s"`;]/u.test(path) &&
27
32
  !/^(?:[@#]|\+\/-|!$|\(\d+(?:\.\d+)?σ\)$)/u.test(path);
@@ -46,9 +51,10 @@ const provenanceClaim = (path, digest) => Claim.of({
46
51
  });
47
52
  /** @returns matching regular-file paths — globs expanded, directories dropped, deduplicated, sorted. */
48
53
  export const expand = (patterns, cwd = process.cwd()) => {
49
- const matched = patterns.flatMap(pattern => globSync(pattern, { cwd }));
54
+ sourcePath(cwd, 'cwd');
55
+ const matched = sourceList(patterns, 'patterns').flatMap(pattern => withSourceError(pattern, 'expand pattern', () => globSync(pattern, { cwd })));
50
56
  return [...new Set(matched)]
51
- .filter(path => statSync(resolvePath(cwd, path)).isFile())
57
+ .filter(path => withSourceError(path, 'inspect source', () => statSync(resolvePath(cwd, path)).isFile()))
52
58
  .sort();
53
59
  };
54
60
  /** @returns first 12 hex chars of the content's sha256. */
@@ -63,19 +69,25 @@ export const isIngested = (store, path, digest) => {
63
69
  /**
64
70
  * Reads and digests candidate files (paths relative to `cwd`), skipping
65
71
  * the ones whose current `ingest-digest` belief already matches (pass
66
- * `force` to re-ingest all).
72
+ * `force` to re-ingest all). With `embed`, retain the same text for prompts
73
+ * so later file changes cannot separate source content from its digest.
67
74
  */
68
75
  export const select = (store, paths, options = {}) => {
76
+ const force = booleanOption(options.force, 'force');
77
+ const embed = booleanOption(options.embed, 'embed');
69
78
  const files = [];
70
79
  const skipped = [];
71
- const cwd = options.cwd ?? process.cwd();
72
- for (const path of paths) {
73
- const digest = digestOf(readFileSync(resolvePath(cwd, path), 'utf8'));
74
- if (options.force !== true && isIngested(store, path, digest)) {
80
+ const suppliedCwd = options.cwd;
81
+ const cwd = suppliedCwd === undefined ? process.cwd() : sourcePath(suppliedCwd, 'cwd');
82
+ for (const path of sourceList(paths, 'paths')) {
83
+ const bytes = withSourceError(path, 'read source', () => readFileSync(resolvePath(cwd, path)));
84
+ const digest = digestBytes(bytes);
85
+ const content = embed ? decodeText(bytes, path) : undefined;
86
+ if (!force && isIngested(store, path, digest)) {
75
87
  skipped.push(path);
76
88
  }
77
89
  else {
78
- files.push({ path, digest });
90
+ files.push({ path, digest, ...content === undefined ? {} : { content } });
79
91
  }
80
92
  }
81
93
  return { files, skipped };
@@ -103,8 +115,8 @@ export const recordDigests = (store, files) => {
103
115
  };
104
116
  /** @returns `files` split into batches of at most `size`. */
105
117
  export const batch = (files, size) => {
106
- if (!(size >= 1)) {
107
- throw new Error(`batch size must be >= 1, got ${size}`);
118
+ if (!Number.isSafeInteger(size) || size < 1) {
119
+ throw new Error(`batch size must be a positive safe integer, got ${size}`);
108
120
  }
109
121
  const batches = [];
110
122
  for (let at = 0; at < files.length; at += size) {
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACpE;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEvE,uDAAuD;AACvD,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAA;AAE9C,yCAAyC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAA;AAElD;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAc,EAAE;IACrD,kFAAkF;IAClF,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACzF,MAAM,YAAY,GAAG,IAAI,KAAK,EAAE;QAC9B,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACtB,CAAC,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IACD,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,yCAAyC;IACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1G,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,kFAAkF;AAClF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,MAAc,EAAW,EAAE,CAChE,KAAK,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;IAChC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9D,QAAQ,EAAE,CAAC,iBAAiB,CAAC;CAC9B,CAAC,CAAA;AAEJ,wGAAwG;AACxG,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,QAA2B,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE,EAAY,EAAE;IAC3F,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACtB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IACjJ,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;SACzB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SACxG,IAAI,EAAE,CAAA;AACX,CAAC,CAAA;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAU,EAAE,CAClD,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAEjE,+EAA+E;AAC/E,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CAC7C,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;AAepC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,IAAY,EAAE,MAAc,EAAW,EAAE;IAChF,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;IACtD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;AAC7E,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,KAAY,EACZ,KAAwB,EACxB,UAA8D,EAAE,EACrD,EAAE;IACb,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACnD,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAA;IAC/B,MAAM,GAAG,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IACtF,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9F,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3D,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;AAC3B,CAAC,CAAA;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,KAA0B,EAAQ,EAAE;IAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,KAAK,CAAC,YAAY,CAAC;YACjB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClC,IAAI,EAAE,KAAK,GAAG,CAAC;gBACf,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;aAC/C,CAAC,CAAC;YACH,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;YAC1B,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvE,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IACvF,CAAC;AACH,CAAC,CAAA;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAI,KAAmB,EAAE,IAAY,EAAS,EAAE;IACnE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAA;IAC5E,CAAC;IACD,MAAM,OAAO,GAAU,EAAE,CAAA;IACzB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8CH,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,CAqJjG,CAAA"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkDH,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,CA0KjG,CAAA"}
@@ -3,6 +3,9 @@
3
3
  * `run.ts`. See the package README for agent recipes (Claude Code,
4
4
  * Copilot CLI, SDK scripts).
5
5
  */
6
+ import { errorMessage } from "./error-message.js";
7
+ import { sourceLabel } from "./content.js";
8
+ import { agentTimeoutMs } from "./timeout.js";
6
9
  import { parseArgs } from 'node:util';
7
10
  import { Registry } from '@cavelang/canonical';
8
11
  import { LocateError, defaultDbPath, kindOf, open, openAt } from '@cavelang/store';
@@ -32,6 +35,7 @@ Options:
32
35
  --lenient commit accepted batches and continue after failures;
33
36
  default strict mode stages and commits the whole run
34
37
  --json print the complete machine-readable result manifest
38
+ (execution only; cannot combine with --plan/--dry-run)
35
39
  --timeout <seconds> per-batch agent timeout (default 600)
36
40
  --plan print batches as NDJSON and exit (drive with an SDK)
37
41
  --dry-run print the plan and the first prompt, run nothing
@@ -47,7 +51,8 @@ Examples:
47
51
  export const runIngest = async (argv, context = {}) => {
48
52
  const stdout = context.stdout ?? process.stdout;
49
53
  const stderr = context.stderr ?? process.stderr;
50
- context.signal?.throwIfAborted();
54
+ const signal = context.signal;
55
+ signal?.throwIfAborted();
51
56
  const { values, positionals } = parseArgs({
52
57
  args: [...argv],
53
58
  options: {
@@ -78,19 +83,28 @@ export const runIngest = async (argv, context = {}) => {
78
83
  }
79
84
  const db = values.db ?? defaultDbPath();
80
85
  const planning = values.plan === true || values['dry-run'] === true;
86
+ if (planning && values.json === true) {
87
+ stderr.write('cave ingest: --json cannot be combined with --plan or --dry-run; use --plan for machine-readable planning\n');
88
+ return 1;
89
+ }
81
90
  if (values.agent === undefined && !planning) {
82
91
  stderr.write('cave ingest: --agent is required (or use --plan / --dry-run)\n');
83
92
  return 1;
84
93
  }
85
94
  const batchSize = values.batch === undefined ? undefined : Number(values.batch);
86
- if (batchSize !== undefined && (!Number.isInteger(batchSize) || batchSize < 1)) {
87
- stderr.write(`cave ingest: --batch must be a positive integer, got '${values.batch}'\n`);
95
+ if (batchSize !== undefined && (!Number.isSafeInteger(batchSize) || batchSize < 1)) {
96
+ stderr.write(`cave ingest: --batch must be a positive safe integer, got '${values.batch}'\n`);
88
97
  return 1;
89
98
  }
90
99
  const timeoutSeconds = values.timeout === undefined ? undefined : Number(values.timeout);
91
- if (timeoutSeconds !== undefined && (!Number.isFinite(timeoutSeconds) || timeoutSeconds <= 0)) {
92
- stderr.write(`cave ingest: --timeout must be a positive number of seconds, got '${values.timeout}'\n`);
93
- return 1;
100
+ if (timeoutSeconds !== undefined) {
101
+ try {
102
+ agentTimeoutMs(timeoutSeconds);
103
+ }
104
+ catch (error) {
105
+ stderr.write(`cave ingest: --${errorMessage(error)}, got '${values.timeout}'\n`);
106
+ return 1;
107
+ }
94
108
  }
95
109
  const noPrelude = values['no-prelude'] === true;
96
110
  const registry = noPrelude ? { registry: Registry.empty } : {};
@@ -110,7 +124,7 @@ export const runIngest = async (argv, context = {}) => {
110
124
  stderr.write(`cave ingest: ${error.message}\n`);
111
125
  return 1;
112
126
  }
113
- try {
127
+ const execute = async () => {
114
128
  const options = {
115
129
  db,
116
130
  patterns: positionals,
@@ -124,12 +138,12 @@ export const runIngest = async (argv, context = {}) => {
124
138
  force: values.force === true,
125
139
  policy: values.lenient === true ? 'lenient' : 'strict',
126
140
  noPrelude,
127
- ...context.signal === undefined ? {} : { signal: context.signal }
141
+ ...signal === undefined ? {} : { signal }
128
142
  };
129
143
  if (planning) {
130
144
  const { selection, batches } = await selectBatches(store, options);
131
145
  if (values.plan === true) {
132
- const mcpConfig = writeMcpConfig(db, { noPrelude });
146
+ let mcpConfig;
133
147
  for (const failure of selection.failures) {
134
148
  stdout.write(`${JSON.stringify({
135
149
  source: failure.path,
@@ -142,6 +156,7 @@ export const runIngest = async (argv, context = {}) => {
142
156
  }
143
157
  for (const files of batches) {
144
158
  const prompt = promptFor(store, files, options);
159
+ mcpConfig ??= writeMcpConfig(db, { noPrelude });
145
160
  stdout.write(`${JSON.stringify({ files: files.map(file => file.path), prompt, mcpConfig, db })}\n`);
146
161
  }
147
162
  return 0;
@@ -149,15 +164,15 @@ export const runIngest = async (argv, context = {}) => {
149
164
  stdout.write([
150
165
  `ingest plan: ${selection.files.length} source(s) in ${batches.length} batch(es), ` +
151
166
  `${selection.skipped.length} skipped (unchanged), ${selection.failures.length} rejected`,
152
- ...selection.skipped.map(path => ` skip ${path}`),
153
- ...selection.failures.map(failure => ` reject ${failure.path}: ${failure.kind}, ${failure.retryable ? 'retryable' : 'permanent'} — ${failure.message}`),
154
- ...batches.map((files, index) => ` batch ${index + 1}: ${files.map(file => file.path).join(', ')}`),
167
+ ...selection.skipped.map(path => ` skip ${sourceLabel(path)}`),
168
+ ...selection.failures.map(failure => ` reject ${sourceLabel(failure.path)}: ${failure.kind}, ${failure.retryable ? 'retryable' : 'permanent'} — ${failure.message}`),
169
+ ...batches.map((files, index) => ` batch ${index + 1}: ${files.map(file => sourceLabel(file.path)).join(', ')}`),
155
170
  ...batches.length > 0 ? ['', '--- prompt for batch 1 ---', promptFor(store, batches[0], options)] : []
156
171
  ].join('\n') + '\n');
157
172
  return 0;
158
173
  }
159
174
  const report = await run(options);
160
- context.signal?.throwIfAborted();
175
+ signal?.throwIfAborted();
161
176
  const failed = report.failed > 0 || report.sources.some(source => source.status === 'not-run');
162
177
  if (values.json === true) {
163
178
  stdout.write(`${JSON.stringify(report, undefined, 2)}\n`);
@@ -167,6 +182,9 @@ export const runIngest = async (argv, context = {}) => {
167
182
  `ingest (${report.policy}): ${report.matched} source(s) matched, ${report.skipped.length} skipped (unchanged), ` +
168
183
  `${report.batches.length} batch(es), ${report.applied ? 'applied' : 'not applied'}`
169
184
  ];
185
+ if (report.policy === 'strict' && !report.applied) {
186
+ lines.push('strict run discarded: no staged claims or source digests were applied');
187
+ }
170
188
  report.batches.forEach((batch, index) => {
171
189
  const status = batch.ok ? `+${batch.added} claim(s)` : `FAILED${batch.note === undefined ? '' : ` — ${batch.note}`}`;
172
190
  lines.push(`batch ${index + 1}/${report.batches.length} (${batch.files.length} file(s)): ${status}`);
@@ -186,14 +204,26 @@ export const runIngest = async (argv, context = {}) => {
186
204
  (source.httpStatus === undefined ? '' : ` HTTP ${source.httpStatus}`),
187
205
  ...source.problems
188
206
  ].filter((value) => value !== undefined).join('; ');
189
- lines.push(`source ${source.status}: ${source.path}${detail === '' ? '' : ` — ${detail}`}`);
207
+ lines.push(`source ${source.status}: ${sourceLabel(source.path)}${detail === '' ? '' : ` — ${detail}`}`);
190
208
  }
191
209
  lines.push(`done: +${report.added} claim(s)${report.failed > 0 ? `, ${report.failed} failed outcome(s)` : ''}`);
192
210
  stdout.write(`${lines.join('\n')}\n`);
193
211
  return failed ? 1 : 0;
212
+ };
213
+ let code;
214
+ try {
215
+ code = await execute();
194
216
  }
195
- finally {
196
- store.close();
217
+ catch (error) {
218
+ try {
219
+ store.close();
220
+ }
221
+ catch (closeError) {
222
+ throw new AggregateError([error, closeError], `${errorMessage(error)}; store close also failed: ${errorMessage(closeError)}`, { cause: error });
223
+ }
224
+ throw error;
197
225
  }
226
+ store.close();
227
+ return code;
198
228
  };
199
229
  //# sourceMappingURL=main.js.map