@cavelang/cli 0.34.0 → 0.36.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 (344) hide show
  1. package/README.md +225 -13
  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 +240 -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 +204 -0
  34. package/dist/internal/connect/declared.d.ts.map +1 -0
  35. package/dist/internal/connect/declared.js +610 -0
  36. package/dist/internal/connect/declared.js.map +1 -0
  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/index.d.ts +4 -2
  50. package/dist/internal/connect/index.d.ts.map +1 -1
  51. package/dist/internal/connect/index.js +3 -1
  52. package/dist/internal/connect/index.js.map +1 -1
  53. package/dist/internal/connect/main.d.ts +1 -0
  54. package/dist/internal/connect/main.d.ts.map +1 -1
  55. package/dist/internal/connect/main.js +575 -59
  56. package/dist/internal/connect/main.js.map +1 -1
  57. package/dist/internal/connect/options.d.ts +3 -0
  58. package/dist/internal/connect/options.d.ts.map +1 -0
  59. package/dist/internal/connect/options.js +9 -0
  60. package/dist/internal/connect/options.js.map +1 -0
  61. package/dist/internal/connect/records.d.ts +3 -0
  62. package/dist/internal/connect/records.d.ts.map +1 -0
  63. package/dist/internal/connect/records.js +21 -0
  64. package/dist/internal/connect/records.js.map +1 -0
  65. package/dist/internal/connect/run.d.ts +48 -19
  66. package/dist/internal/connect/run.d.ts.map +1 -1
  67. package/dist/internal/connect/run.js +185 -77
  68. package/dist/internal/connect/run.js.map +1 -1
  69. package/dist/internal/connect/source.d.ts +36 -3
  70. package/dist/internal/connect/source.d.ts.map +1 -1
  71. package/dist/internal/connect/source.js +378 -39
  72. package/dist/internal/connect/source.js.map +1 -1
  73. package/dist/internal/connect/template.d.ts +20 -2
  74. package/dist/internal/connect/template.d.ts.map +1 -1
  75. package/dist/internal/connect/template.js +53 -9
  76. package/dist/internal/connect/template.js.map +1 -1
  77. package/dist/internal/connect/utf8.d.ts +3 -0
  78. package/dist/internal/connect/utf8.d.ts.map +1 -0
  79. package/dist/internal/connect/utf8.js +12 -0
  80. package/dist/internal/connect/utf8.js.map +1 -0
  81. package/dist/internal/eval/cleanup.d.ts +5 -0
  82. package/dist/internal/eval/cleanup.d.ts.map +1 -0
  83. package/dist/internal/eval/cleanup.js +50 -0
  84. package/dist/internal/eval/cleanup.js.map +1 -0
  85. package/dist/internal/eval/error-message.d.ts +3 -0
  86. package/dist/internal/eval/error-message.d.ts.map +1 -0
  87. package/dist/internal/eval/error-message.js +10 -0
  88. package/dist/internal/eval/error-message.js.map +1 -0
  89. package/dist/internal/eval/judge.d.ts.map +1 -1
  90. package/dist/internal/eval/judge.js +3 -31
  91. package/dist/internal/eval/judge.js.map +1 -1
  92. package/dist/internal/eval/loop.d.ts.map +1 -1
  93. package/dist/internal/eval/loop.js +18 -4
  94. package/dist/internal/eval/loop.js.map +1 -1
  95. package/dist/internal/eval/main.d.ts.map +1 -1
  96. package/dist/internal/eval/main.js +22 -10
  97. package/dist/internal/eval/main.js.map +1 -1
  98. package/dist/internal/eval/options.d.ts +6 -0
  99. package/dist/internal/eval/options.d.ts.map +1 -0
  100. package/dist/internal/eval/options.js +31 -0
  101. package/dist/internal/eval/options.js.map +1 -0
  102. package/dist/internal/eval/queries.d.ts.map +1 -1
  103. package/dist/internal/eval/queries.js +9 -6
  104. package/dist/internal/eval/queries.js.map +1 -1
  105. package/dist/internal/eval/run.d.ts.map +1 -1
  106. package/dist/internal/eval/run.js +112 -24
  107. package/dist/internal/eval/run.js.map +1 -1
  108. package/dist/internal/eval/score.d.ts.map +1 -1
  109. package/dist/internal/eval/score.js +9 -2
  110. package/dist/internal/eval/score.js.map +1 -1
  111. package/dist/internal/eval/suite.d.ts.map +1 -1
  112. package/dist/internal/eval/suite.js +14 -2
  113. package/dist/internal/eval/suite.js.map +1 -1
  114. package/dist/internal/ingest/cleanup.d.ts +5 -0
  115. package/dist/internal/ingest/cleanup.d.ts.map +1 -0
  116. package/dist/internal/ingest/cleanup.js +50 -0
  117. package/dist/internal/ingest/cleanup.js.map +1 -0
  118. package/dist/internal/ingest/content.d.ts +6 -0
  119. package/dist/internal/ingest/content.d.ts.map +1 -0
  120. package/dist/internal/ingest/content.js +25 -0
  121. package/dist/internal/ingest/content.js.map +1 -0
  122. package/dist/internal/ingest/context.d.ts.map +1 -1
  123. package/dist/internal/ingest/context.js +25 -7
  124. package/dist/internal/ingest/context.js.map +1 -1
  125. package/dist/internal/ingest/error-message.d.ts +3 -0
  126. package/dist/internal/ingest/error-message.d.ts.map +1 -0
  127. package/dist/internal/ingest/error-message.js +10 -0
  128. package/dist/internal/ingest/error-message.js.map +1 -0
  129. package/dist/internal/ingest/files.d.ts +4 -12
  130. package/dist/internal/ingest/files.d.ts.map +1 -1
  131. package/dist/internal/ingest/files.js +22 -10
  132. package/dist/internal/ingest/files.js.map +1 -1
  133. package/dist/internal/ingest/main.d.ts.map +1 -1
  134. package/dist/internal/ingest/main.js +48 -17
  135. package/dist/internal/ingest/main.js.map +1 -1
  136. package/dist/internal/ingest/options.d.ts +6 -0
  137. package/dist/internal/ingest/options.d.ts.map +1 -0
  138. package/dist/internal/ingest/options.js +27 -0
  139. package/dist/internal/ingest/options.js.map +1 -0
  140. package/dist/internal/ingest/prompt.d.ts.map +1 -1
  141. package/dist/internal/ingest/prompt.js +14 -10
  142. package/dist/internal/ingest/prompt.js.map +1 -1
  143. package/dist/internal/ingest/run.d.ts +9 -2
  144. package/dist/internal/ingest/run.d.ts.map +1 -1
  145. package/dist/internal/ingest/run.js +206 -62
  146. package/dist/internal/ingest/run.js.map +1 -1
  147. package/dist/internal/ingest/timeout.d.ts +3 -0
  148. package/dist/internal/ingest/timeout.d.ts.map +1 -0
  149. package/dist/internal/ingest/timeout.js +14 -0
  150. package/dist/internal/ingest/timeout.js.map +1 -0
  151. package/dist/internal/ingest/web.d.ts +2 -11
  152. package/dist/internal/ingest/web.d.ts.map +1 -1
  153. package/dist/internal/ingest/web.js +131 -25
  154. package/dist/internal/ingest/web.js.map +1 -1
  155. package/dist/internal/loop/budgets.d.ts +3 -0
  156. package/dist/internal/loop/budgets.d.ts.map +1 -0
  157. package/dist/internal/loop/budgets.js +10 -0
  158. package/dist/internal/loop/budgets.js.map +1 -0
  159. package/dist/internal/loop/index.d.ts +2 -0
  160. package/dist/internal/loop/index.d.ts.map +1 -1
  161. package/dist/internal/loop/index.js +2 -0
  162. package/dist/internal/loop/index.js.map +1 -1
  163. package/dist/internal/loop/json-answer.d.ts +7 -0
  164. package/dist/internal/loop/json-answer.d.ts.map +1 -0
  165. package/dist/internal/loop/json-answer.js +79 -0
  166. package/dist/internal/loop/json-answer.js.map +1 -0
  167. package/dist/internal/loop/json-spans.d.ts +3 -0
  168. package/dist/internal/loop/json-spans.d.ts.map +1 -0
  169. package/dist/internal/loop/json-spans.js +88 -0
  170. package/dist/internal/loop/json-spans.js.map +1 -0
  171. package/dist/internal/loop/llm.d.ts +3 -2
  172. package/dist/internal/loop/llm.d.ts.map +1 -1
  173. package/dist/internal/loop/llm.js +115 -32
  174. package/dist/internal/loop/llm.js.map +1 -1
  175. package/dist/internal/loop/process.d.ts +3 -1
  176. package/dist/internal/loop/process.d.ts.map +1 -1
  177. package/dist/internal/loop/process.js +159 -59
  178. package/dist/internal/loop/process.js.map +1 -1
  179. package/dist/internal/loop/read-snapshot.d.ts +4 -0
  180. package/dist/internal/loop/read-snapshot.d.ts.map +1 -0
  181. package/dist/internal/loop/read-snapshot.js +29 -0
  182. package/dist/internal/loop/read-snapshot.js.map +1 -0
  183. package/dist/internal/loop/reconstruct.d.ts +6 -5
  184. package/dist/internal/loop/reconstruct.d.ts.map +1 -1
  185. package/dist/internal/loop/reconstruct.js +19 -8
  186. package/dist/internal/loop/reconstruct.js.map +1 -1
  187. package/dist/internal/loop/score-settings.d.ts +5 -0
  188. package/dist/internal/loop/score-settings.d.ts.map +1 -0
  189. package/dist/internal/loop/score-settings.js +14 -0
  190. package/dist/internal/loop/score-settings.js.map +1 -0
  191. package/dist/internal/loop/sqlite.d.ts.map +1 -1
  192. package/dist/internal/loop/sqlite.js +15 -7
  193. package/dist/internal/loop/sqlite.js.map +1 -1
  194. package/dist/internal/loop/store.d.ts.map +1 -1
  195. package/dist/internal/loop/store.js +11 -7
  196. package/dist/internal/loop/store.js.map +1 -1
  197. package/dist/internal/loop/timeout.d.ts +3 -0
  198. package/dist/internal/loop/timeout.d.ts.map +1 -0
  199. package/dist/internal/loop/timeout.js +13 -0
  200. package/dist/internal/loop/timeout.js.map +1 -0
  201. package/dist/internal/mcp/error-message.d.ts +3 -0
  202. package/dist/internal/mcp/error-message.d.ts.map +1 -0
  203. package/dist/internal/mcp/error-message.js +10 -0
  204. package/dist/internal/mcp/error-message.js.map +1 -0
  205. package/dist/internal/mcp/main.d.ts.map +1 -1
  206. package/dist/internal/mcp/main.js +44 -27
  207. package/dist/internal/mcp/main.js.map +1 -1
  208. package/dist/internal/mcp/read-snapshot.d.ts +4 -0
  209. package/dist/internal/mcp/read-snapshot.d.ts.map +1 -0
  210. package/dist/internal/mcp/read-snapshot.js +22 -0
  211. package/dist/internal/mcp/read-snapshot.js.map +1 -0
  212. package/dist/internal/mcp/server.d.ts.map +1 -1
  213. package/dist/internal/mcp/server.js +181 -21
  214. package/dist/internal/mcp/server.js.map +1 -1
  215. package/dist/internal/mcp/source.d.ts +3 -0
  216. package/dist/internal/mcp/source.d.ts.map +1 -0
  217. package/dist/internal/mcp/source.js +13 -0
  218. package/dist/internal/mcp/source.js.map +1 -0
  219. package/dist/internal/mcp/tools.d.ts.map +1 -1
  220. package/dist/internal/mcp/tools.js +135 -72
  221. package/dist/internal/mcp/tools.js.map +1 -1
  222. package/dist/internal/rules/declarations.d.ts +6 -0
  223. package/dist/internal/rules/declarations.d.ts.map +1 -0
  224. package/dist/internal/rules/declarations.js +14 -0
  225. package/dist/internal/rules/declarations.js.map +1 -0
  226. package/dist/internal/rules/declare.d.ts.map +1 -1
  227. package/dist/internal/rules/declare.js +30 -16
  228. package/dist/internal/rules/declare.js.map +1 -1
  229. package/dist/internal/rules/engine.d.ts +8 -7
  230. package/dist/internal/rules/engine.d.ts.map +1 -1
  231. package/dist/internal/rules/engine.js +150 -44
  232. package/dist/internal/rules/engine.js.map +1 -1
  233. package/dist/internal/rules/rule.d.ts.map +1 -1
  234. package/dist/internal/rules/rule.js +1 -22
  235. package/dist/internal/rules/rule.js.map +1 -1
  236. package/dist/internal/shape/alias-root.d.ts +3 -0
  237. package/dist/internal/shape/alias-root.d.ts.map +1 -0
  238. package/dist/internal/shape/alias-root.js +13 -0
  239. package/dist/internal/shape/alias-root.js.map +1 -0
  240. package/dist/internal/shape/check.d.ts +15 -3
  241. package/dist/internal/shape/check.d.ts.map +1 -1
  242. package/dist/internal/shape/check.js +230 -100
  243. package/dist/internal/shape/check.js.map +1 -1
  244. package/dist/internal/shape/client.d.ts.map +1 -1
  245. package/dist/internal/shape/client.js +42 -20
  246. package/dist/internal/shape/client.js.map +1 -1
  247. package/dist/internal/shape/constraints.d.ts +8 -0
  248. package/dist/internal/shape/constraints.d.ts.map +1 -0
  249. package/dist/internal/shape/constraints.js +17 -0
  250. package/dist/internal/shape/constraints.js.map +1 -0
  251. package/dist/internal/shape/edit-distance.d.ts +3 -0
  252. package/dist/internal/shape/edit-distance.d.ts.map +1 -0
  253. package/dist/internal/shape/edit-distance.js +33 -0
  254. package/dist/internal/shape/edit-distance.js.map +1 -0
  255. package/dist/internal/shape/gate.d.ts.map +1 -1
  256. package/dist/internal/shape/gate.js +0 -0
  257. package/dist/internal/shape/gate.js.map +1 -1
  258. package/dist/internal/shape/snapshot.d.ts +4 -0
  259. package/dist/internal/shape/snapshot.d.ts.map +1 -0
  260. package/dist/internal/shape/snapshot.js +20 -0
  261. package/dist/internal/shape/snapshot.js.map +1 -0
  262. package/dist/internal/shape/suggest.d.ts +8 -6
  263. package/dist/internal/shape/suggest.d.ts.map +1 -1
  264. package/dist/internal/shape/suggest.js +208 -92
  265. package/dist/internal/shape/suggest.js.map +1 -1
  266. package/dist/internal/sync/error-message.d.ts +3 -0
  267. package/dist/internal/sync/error-message.d.ts.map +1 -0
  268. package/dist/internal/sync/error-message.js +10 -0
  269. package/dist/internal/sync/error-message.js.map +1 -0
  270. package/dist/internal/sync/index.d.ts +3 -2
  271. package/dist/internal/sync/index.d.ts.map +1 -1
  272. package/dist/internal/sync/index.js +3 -2
  273. package/dist/internal/sync/index.js.map +1 -1
  274. package/dist/internal/sync/sync.d.ts +8 -5
  275. package/dist/internal/sync/sync.d.ts.map +1 -1
  276. package/dist/internal/sync/sync.js +322 -65
  277. package/dist/internal/sync/sync.js.map +1 -1
  278. package/dist/internal/view/api.d.ts +3 -1
  279. package/dist/internal/view/api.d.ts.map +1 -1
  280. package/dist/internal/view/api.js +154 -90
  281. package/dist/internal/view/api.js.map +1 -1
  282. package/dist/internal/view/error-message.d.ts +3 -0
  283. package/dist/internal/view/error-message.d.ts.map +1 -0
  284. package/dist/internal/view/error-message.js +10 -0
  285. package/dist/internal/view/error-message.js.map +1 -0
  286. package/dist/internal/view/main.d.ts.map +1 -1
  287. package/dist/internal/view/main.js +63 -9
  288. package/dist/internal/view/main.js.map +1 -1
  289. package/dist/internal/view/page.d.ts.map +1 -1
  290. package/dist/internal/view/page.js +119 -20
  291. package/dist/internal/view/page.js.map +1 -1
  292. package/dist/internal/view/report.d.ts.map +1 -1
  293. package/dist/internal/view/report.js +180 -145
  294. package/dist/internal/view/report.js.map +1 -1
  295. package/dist/internal/view/scope.d.ts +6 -2
  296. package/dist/internal/view/scope.d.ts.map +1 -1
  297. package/dist/internal/view/scope.js +107 -24
  298. package/dist/internal/view/scope.js.map +1 -1
  299. package/dist/internal/view/sensitivity.d.ts +4 -0
  300. package/dist/internal/view/sensitivity.d.ts.map +1 -0
  301. package/dist/internal/view/sensitivity.js +11 -0
  302. package/dist/internal/view/sensitivity.js.map +1 -0
  303. package/dist/internal/view/server.d.ts.map +1 -1
  304. package/dist/internal/view/server.js +57 -20
  305. package/dist/internal/view/server.js.map +1 -1
  306. package/dist/src/atomic-output.d.ts +3 -0
  307. package/dist/src/atomic-output.d.ts.map +1 -0
  308. package/dist/src/atomic-output.js +67 -0
  309. package/dist/src/atomic-output.js.map +1 -0
  310. package/dist/src/cli.d.ts +17 -2
  311. package/dist/src/cli.d.ts.map +1 -1
  312. package/dist/src/cli.js +333 -195
  313. package/dist/src/cli.js.map +1 -1
  314. package/dist/src/commands.d.ts +2 -2
  315. package/dist/src/commands.js +2 -2
  316. package/dist/src/commands.js.map +1 -1
  317. package/dist/src/dispatch.d.ts.map +1 -1
  318. package/dist/src/dispatch.js +10 -3
  319. package/dist/src/dispatch.js.map +1 -1
  320. package/dist/src/doctor.d.ts +1 -1
  321. package/dist/src/doctor.d.ts.map +1 -1
  322. package/dist/src/doctor.js +192 -91
  323. package/dist/src/doctor.js.map +1 -1
  324. package/dist/src/error-message.d.ts +3 -0
  325. package/dist/src/error-message.d.ts.map +1 -0
  326. package/dist/src/error-message.js +20 -0
  327. package/dist/src/error-message.js.map +1 -0
  328. package/dist/src/hooks-config.d.ts +3 -0
  329. package/dist/src/hooks-config.d.ts.map +1 -0
  330. package/dist/src/hooks-config.js +23 -0
  331. package/dist/src/hooks-config.js.map +1 -0
  332. package/dist/src/index.d.ts +1 -1
  333. package/dist/src/index.d.ts.map +1 -1
  334. package/dist/src/index.js +1 -1
  335. package/dist/src/index.js.map +1 -1
  336. package/package.json +23 -20
  337. package/src/atomic-output.ts +47 -0
  338. package/src/cli.ts +345 -171
  339. package/src/commands.ts +2 -2
  340. package/src/dispatch.ts +10 -3
  341. package/src/doctor.ts +207 -100
  342. package/src/error-message.ts +13 -0
  343. package/src/hooks-config.ts +22 -0
  344. package/src/index.ts +1 -1
@@ -1,7 +1,8 @@
1
1
  /** Reusable read-only sensitivity projections for data-leaving views. */
2
- import { Uuidv7 } from '@cavelang/core';
3
- import { Sensitivity } from '@cavelang/store';
2
+ import { Key, Uuidv7 } from '@cavelang/core';
3
+ import { Row, Sensitivity } from '@cavelang/store';
4
4
  import { openWith } from '@cavelang/store/adapter';
5
+ import { errorMessage } from "./error-message.js";
5
6
  const caches = new WeakMap();
6
7
  const emptyStats = {
7
8
  projections: 0,
@@ -16,7 +17,7 @@ const emptyStats = {
16
17
  export const scopedStoreCacheStats = (source) => {
17
18
  const cache = caches.get(source);
18
19
  if (cache === undefined)
19
- return emptyStats;
20
+ return { ...emptyStats };
20
21
  const projections = [...cache.projections.values()];
21
22
  return {
22
23
  projections: projections.length,
@@ -34,10 +35,23 @@ export const clearScopedStoreCache = (source) => {
34
35
  const cache = caches.get(source);
35
36
  if (cache === undefined)
36
37
  return;
37
- for (const projection of cache.projections.values())
38
- projection.store.close();
39
- cache.projections.clear();
38
+ cache.unsubscribe();
40
39
  caches.delete(source);
40
+ const projections = [...cache.projections.values()];
41
+ cache.projections.clear();
42
+ const errors = [];
43
+ for (const projection of projections) {
44
+ try {
45
+ projection.store.close();
46
+ }
47
+ catch (error) {
48
+ errors.push(error);
49
+ }
50
+ }
51
+ if (errors.length === 1)
52
+ throw errors[0];
53
+ if (errors.length > 1)
54
+ throw new AggregateError(errors, `CAVE view: projection cleanup failed: ${errors.map(errorMessage).join('; ')}`);
41
55
  };
42
56
  /**
43
57
  * SQLite's data_version changes after commits from other connections, while
@@ -67,12 +81,36 @@ const buildProjection = (source, maximum, revision) => Uuidv7.withStatePreserved
67
81
  const child = index.get(edge.child_id);
68
82
  return parent === undefined || child === undefined ? [] : [{ parent, role: edge.role, child }];
69
83
  });
84
+ const contextsQuery = source.db.prepare('SELECT context FROM cave_context WHERE claim_id = ?');
85
+ const tagsQuery = source.db.prepare('SELECT key, value FROM cave_tag WHERE claim_id = ?');
70
86
  target.insertResult({
71
- claims: rows.map(row => ({ claim: source.toClaim(row), line: 0 })),
87
+ claims: rows.map(row => {
88
+ if (typeof row.id !== 'string' || !Uuidv7.is(row.id) || row.tx !== row.id) {
89
+ throw new Error(`CAVE view projection failed for claim ${row.id}: stored transaction identity must be a canonical lowercase UUIDv7 with id = tx`);
90
+ }
91
+ const contexts = contextsQuery.all(row.id).map(entry => entry.context);
92
+ const tags = tagsQuery.all(row.id);
93
+ const claim = Row.toClaim(row, contexts, tags);
94
+ if (Key.of(claim) !== row.claim_key) {
95
+ throw new Error(`CAVE view projection failed for claim ${row.id}: stored claim key does not agree with its semantic identity`);
96
+ }
97
+ return { claim, line: 0 };
98
+ }),
72
99
  edges,
73
100
  registry: source.baseRegistry(),
74
101
  problems: []
75
102
  }, { ids: rows.map(row => row.id) });
103
+ // insertResult infers compatibility attribution from contexts. A scoped
104
+ // copy must retain the source's explicit dimensions, including no entries.
105
+ target.db.exec('DELETE FROM cave_provenance');
106
+ const provenance = source.db.prepare(`
107
+ SELECT p.claim_id, p.dimension, p.value FROM cave_provenance p
108
+ JOIN cave_claim c ON c.id = p.claim_id
109
+ WHERE ${Sensitivity.sql('c', maximum)}
110
+ `).all();
111
+ const insertProvenance = target.db.prepare('INSERT INTO cave_provenance (claim_id, dimension, value) VALUES (?, ?, ?)');
112
+ for (const entry of provenance)
113
+ insertProvenance.run(entry.claim_id, entry.dimension, entry.value);
76
114
  target.reloadRegistry();
77
115
  // Cached projections are shared across callbacks. Make their database
78
116
  // representation immutable so an accidental write cannot taint later reads.
@@ -80,14 +118,14 @@ const buildProjection = (source, maximum, revision) => Uuidv7.withStatePreserved
80
118
  return { revision, store: target, claims: rows.length, edges: edges.length, bytes: sizeOf(target) };
81
119
  }
82
120
  catch (error) {
83
- target.close();
84
- throw error;
121
+ return withReadCleanup(() => { throw error; }, () => target.close(), 'CAVE view projection construction failed and close also failed');
85
122
  }
86
123
  });
87
124
  const projectionOf = (source, maximum) => {
88
125
  let cache = caches.get(source);
89
126
  if (cache === undefined) {
90
- cache = { projections: new Map(), hits: 0, builds: 0, invalidations: 0, retries: 0 };
127
+ cache = { unsubscribe: source.onClose(() => clearScopedStoreCache(source)),
128
+ projections: new Map(), hits: 0, builds: 0, invalidations: 0, retries: 0 };
91
129
  caches.set(source, cache);
92
130
  }
93
131
  // An external writer can commit while a projection is being copied. Retry
@@ -100,26 +138,71 @@ const projectionOf = (source, maximum) => {
100
138
  return existing.store;
101
139
  }
102
140
  const candidate = buildProjection(source, maximum, before);
103
- if (revisionOf(source) !== before) {
104
- candidate.store.close();
105
- cache.retries += 1;
106
- continue;
107
- }
108
- cache.builds += 1;
109
- if (existing !== undefined)
110
- cache.invalidations += 1;
111
- cache.projections.set(maximum, candidate);
112
- existing?.store.close();
113
- return candidate.store;
141
+ let published = false;
142
+ const ready = withReadCleanup(() => {
143
+ if (revisionOf(source) !== before) {
144
+ cache.retries += 1;
145
+ return undefined;
146
+ }
147
+ cache.builds += 1;
148
+ if (existing !== undefined)
149
+ cache.invalidations += 1;
150
+ cache.projections.set(maximum, candidate);
151
+ published = true;
152
+ existing?.store.close();
153
+ return candidate.store;
154
+ }, () => { if (!published)
155
+ candidate.store.close(); }, 'CAVE view projection publication failed and close also failed');
156
+ if (ready !== undefined)
157
+ return ready;
114
158
  }
115
159
  throw new Error('CAVE view: source changed continuously while building a sensitivity projection');
116
160
  };
161
+ /** Preserve the primary failure when releasing an owned read resource also fails. */
162
+ const withReadCleanup = (body, cleanup, message) => {
163
+ let result;
164
+ try {
165
+ result = body();
166
+ }
167
+ catch (error) {
168
+ try {
169
+ cleanup();
170
+ }
171
+ catch (cleanupError) {
172
+ throw new AggregateError([error, cleanupError], `${message}: ${errorMessage(error)}; ${errorMessage(cleanupError)}`, { cause: error });
173
+ }
174
+ throw error;
175
+ }
176
+ cleanup();
177
+ return result;
178
+ };
179
+ /** A synchronous read snapshot that can nest inside a caller-owned transaction. */
180
+ export const readSnapshot = (source, body) => {
181
+ source.db.exec('SAVEPOINT cave_view_read');
182
+ return withReadCleanup(body, () => source.db.exec('RELEASE cave_view_read'), 'CAVE view snapshot failed and release also failed');
183
+ };
117
184
  /**
118
185
  * Runs `body` against rows at or below `maximum`. Restricted includes every
119
- * row and uses the source directly. Narrower audiences share an immutable,
186
+ * row and uses the source directly within a read snapshot. Narrower audiences share an immutable,
120
187
  * indexed projection keyed by policy and source revision; appends invalidate
121
- * it before the next read. Hidden rows and edges never enter that projection,
188
+ * it before the next read. Inside transactions, or without adapter transaction
189
+ * inspection, a disposable projection lives only for the synchronous callback.
190
+ * Hidden rows and edges never enter that projection,
122
191
  * preserving the fail-closed boundary for every downstream query.
123
192
  */
124
- export const withScopedStore = (source, maximum, body) => maximum === 'restricted' ? body(source) : body(projectionOf(source, maximum));
193
+ export const withScopedStore = (source, maximum, body) => {
194
+ if (maximum === 'restricted')
195
+ return readSnapshot(source, () => body(source));
196
+ // total_changes does not rewind on rollback, including ROLLBACK TO a
197
+ // savepoint. Never reuse or retain a projection of uncommitted state.
198
+ if (source.adapter.capabilities.backup?.inTransaction(source.db) !== false) {
199
+ // Without transaction inspection the caller may have no snapshot yet.
200
+ // Keep claims and edges coherent even if a peer commits during copying.
201
+ return readSnapshot(source, () => {
202
+ const projection = buildProjection(source, maximum, revisionOf(source));
203
+ return withReadCleanup(() => body(projection.store), () => projection.store.close(), 'CAVE view projection failed and close also failed');
204
+ });
205
+ }
206
+ return body(projectionOf(source, maximum));
207
+ };
125
208
  //# sourceMappingURL=scope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/scope.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAmBjD,MAAM,MAAM,GAAG,IAAI,OAAO,EAAgB,CAAA;AAc1C,MAAM,UAAU,GAA0B;IACxC,WAAW,EAAE,CAAC;IACd,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC;IACV,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;CACf,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAa,EAAyB,EAAE;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAAA;IACjD,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IACnD,OAAO;QACL,WAAW,EAAE,WAAW,CAAC,MAAM;QAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACrF,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;KACpF,CAAA;AACH,CAAC,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAa,EAAQ,EAAE;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAM;IAC/B,KAAK,CAAC,WAAW,EAAE,CAAA;IACnB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrB,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IACnD,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;IACzB,MAAM,MAAM,GAAc,EAAE,CAAA;IAC5B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC;YAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,MAAM,CAAC,CAAC,CAAC,CAAA;IACxC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,MAAM,EACpD,yCAAyC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACnF,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,MAAa,EAAU,EAAE;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAuC,CAAA;IAChG,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAC1C,CAAA;IACpC,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,aAAa,EAAE,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,KAAY,EAAU,EAAE;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAqC,CAAA;IAC5F,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,EAAoC,CAAA;IAC7F,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AAC9D,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,MAAa,EAAE,OAA0B,EAAE,QAAgB,EAAc,EAAE,CAClG,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IACxF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;;gBAErB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;OACtC,CAAC,CAAC,GAAG,EAAwB,CAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,MAAM,KAAK,GAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,EAC1C,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACxC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACtC,OAAO,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAChG,CAAC,CAAC,CAAA;QACJ,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAA;QAC9F,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAA;QACzF,MAAM,CAAC,YAAY,CAAC;YAClB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACrB,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC;oBAC1E,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,CAAC,EAAE,iFAAiF,CAAC,CAAA;gBACnJ,CAAC;gBACD,MAAM,QAAQ,GAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBACjG,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAA4C,CAAA;gBAC7E,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAC9C,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,SAAS,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,CAAC,EAAE,8DAA8D,CAAC,CAAA;gBAChI,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;YAC3B,CAAC,CAAC;YACF,KAAK;YACL,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE;YAC/B,QAAQ,EAAE,EAAE;SACb,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACpC,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;;;gBAG3B,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;OACtC,CAAC,CAAC,GAAG,EAA8D,CAAA;QACpE,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CACxC,2EAA2E,CAAC,CAAA;QAC9E,KAAK,MAAM,KAAK,IAAI,UAAU;YAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QAClG,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,sEAAsE;QACtE,4EAA4E;QAC5E,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QACxC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;IACrG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,MAAM,KAAK,CAAA,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAChE,gEAAgE,CAAC,CAAA;IACrE,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,YAAY,GAAG,CAAC,MAAa,EAAE,OAA0B,EAAS,EAAE;IACxE,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACxE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;QAC5E,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC/C,IAAI,QAAQ,EAAE,QAAQ,KAAK,MAAM,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;YACf,OAAO,QAAQ,CAAC,KAAK,CAAA;QACvB,CAAC;QACD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC1D,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE;YACjC,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;gBAClC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;gBAClB,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;YACjB,IAAI,QAAQ,KAAK,SAAS;gBAAE,KAAK,CAAC,aAAa,IAAI,CAAC,CAAA;YACpD,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YACzC,SAAS,GAAG,IAAI,CAAA;YAChB,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAA;YACvB,OAAO,SAAS,CAAC,KAAK,CAAA;QACxB,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;YAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA,CAAC,CAAC,EACpD,+DAA+D,CAAC,CAAA;QAChE,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;IACvC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAA;AACnG,CAAC,CAAA;AAED,qFAAqF;AACrF,MAAM,eAAe,GAAG,CAAI,IAAa,EAAE,OAAmB,EAAE,OAAe,EAAK,EAAE;IACpF,IAAI,MAAS,CAAA;IACb,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,EAAE,CAAA;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC;YAAC,OAAO,EAAE,CAAA;QAAC,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACtC,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,EAC5C,GAAG,OAAO,KAAK,YAAY,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1F,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;IACD,OAAO,EAAE,CAAA;IACT,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,MAAa,EAAE,IAAa,EAAK,EAAE;IACjE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IAC1C,OAAO,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,EACzE,mDAAmD,CAAC,CAAA;AACxD,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,MAAa,EAAE,OAA0B,EAAE,IAAyB,EAAK,EAAE;IAC5G,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7E,qEAAqE;IACrE,sEAAsE;IACtE,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;QAC3E,sEAAsE;QACtE,wEAAwE;QACxE,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;YAC/B,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;YACvE,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,EACjF,mDAAmD,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC5C,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Sensitivity } from '@cavelang/store';
2
+ /** Validate a caller-selected ceiling before projection or listener work. */
3
+ export declare const maximumSensitivity: (value: unknown) => Sensitivity.Level;
4
+ //# sourceMappingURL=sensitivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitivity.d.ts","sourceRoot":"","sources":["../../src/sensitivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,WAAW,CAAC,KAM/D,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { Sensitivity } from '@cavelang/store';
2
+ /** Validate a caller-selected ceiling before projection or listener work. */
3
+ export const maximumSensitivity = (value) => {
4
+ if (value === undefined)
5
+ return Sensitivity.defaultMaximum;
6
+ if (typeof value !== 'string' || Sensitivity.parse(value) === undefined) {
7
+ throw new TypeError(`maxSensitivity must be one of: ${Sensitivity.levels.join(', ')}`);
8
+ }
9
+ return value;
10
+ };
11
+ //# sourceMappingURL=sensitivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitivity.js","sourceRoot":"","sources":["../../src/sensitivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAqB,EAAE;IACtE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,cAAc,CAAA;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,kCAAkC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxF,CAAC;IACD,OAAO,KAA0B,CAAA;AACnC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAmB,MAAM,EAAkB,MAAM,WAAW,CAAA;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAI5C,gCAAgC;AAChC,eAAO,MAAM,WAAW,OAAO,CAAA;AAC/B,eAAO,MAAM,WAAW,cAAc,CAAA;AAEtC,MAAM,MAAM,YAAY,GAAG;IACzB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,wEAAwE;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,KAAK,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB,CAAA;AA+GD,gEAAgE;AAChE,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,UAAS,YAAiB,KAAG,OAAO,CAAC,MAAM,CAsB9E,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAmB,MAAM,EAAkB,MAAM,WAAW,CAAA;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAK5C,gCAAgC;AAChC,eAAO,MAAM,WAAW,OAAO,CAAA;AAC/B,eAAO,MAAM,WAAW,cAAc,CAAA;AAEtC,MAAM,MAAM,YAAY,GAAG;IACzB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,wEAAwE;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,KAAK,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB,CAAA;AAyID,gEAAgE;AAChE,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,UAAS,YAAiB,KAAG,OAAO,CAAC,MAAM,CAgC9E,CAAA"}
@@ -8,11 +8,13 @@
8
8
  * Binds 127.0.0.1 by default: the store is one person's knowledge on
9
9
  * one machine (§19), and serving it wider is an explicit `--host` act.
10
10
  */
11
+ import { maximumSensitivity } from "./sensitivity.js";
11
12
  import { createServer } from 'node:http';
12
13
  import { Version } from '@cavelang/core';
13
14
  import { Sensitivity } from '@cavelang/store';
14
15
  import { entity, history, lineage, overview, search, topic } from "./api.js";
15
16
  import { page } from "./page.js";
17
+ import { errorMessage } from "./error-message.js";
16
18
  /** `cave` on a phone keypad. */
17
19
  export const defaultPort = 2283;
18
20
  export const defaultHost = '127.0.0.1';
@@ -25,24 +27,39 @@ const json = (res, status, body) => {
25
27
  });
26
28
  res.end(JSON.stringify(body));
27
29
  };
30
+ const requiredParameters = new Map([
31
+ ['/api/entity', 'name'], ['/api/topic', 'name'], ['/api/history', 'key'],
32
+ ['/api/lineage', 'id'], ['/api/search', 'q']
33
+ ]);
28
34
  /** A required query parameter, `undefined` when absent or blank. */
29
35
  const param = (url, name) => {
30
36
  const value = url.searchParams.get(name);
31
37
  return value === null || value === '' ? undefined : value;
32
38
  };
33
39
  const handler = (store, label, maximum) => {
34
- const html = page
35
- .replaceAll('__CAVE_DB__', escapeHtml(label))
36
- .replaceAll('__CAVE_VERSION__', escapeHtml(Version.current()))
37
- .replaceAll('__CAVE_SENSITIVITY__', escapeHtml(maximum));
40
+ const values = {
41
+ DB: label, VERSION: Version.current(), SENSITIVITY: maximum
42
+ };
43
+ const html = page.replace(/__CAVE_(DB|VERSION|SENSITIVITY)__/g, (_marker, name) => escapeHtml(values[name]));
38
44
  return (req, res) => {
39
45
  try {
40
46
  if (req.method !== 'GET' && req.method !== 'HEAD') {
41
- res.writeHead(405, { allow: 'GET, HEAD', 'content-type': 'application/json; charset=utf-8' });
42
- res.end(req.method === 'HEAD' ? undefined : JSON.stringify({ error: 'read-only surface — GET only (spec §30.3)' }));
47
+ res.setHeader('allow', 'GET, HEAD');
48
+ json(res, 405, { error: 'read-only surface — GET/HEAD only (spec §30.3)' });
49
+ return;
50
+ }
51
+ let url;
52
+ try {
53
+ url = new URL(req.url ?? '/', 'http://cave.local');
54
+ // URLSearchParams replaces malformed UTF-8 instead of rejecting it.
55
+ // Validate the encoded query first, without decoding its delimiters
56
+ // or double-decoding values passed to the normal parameter parser.
57
+ decodeURIComponent(url.search);
58
+ }
59
+ catch {
60
+ json(res, 400, { error: 'invalid request URL' });
43
61
  return;
44
62
  }
45
- const url = new URL(req.url ?? '/', 'http://cave.local');
46
63
  const head = req.method === 'HEAD';
47
64
  if (url.pathname === '/') {
48
65
  res.writeHead(200, {
@@ -60,7 +77,17 @@ const handler = (store, label, maximum) => {
60
77
  json(res, 404, { error: `no such path: ${url.pathname}` });
61
78
  return;
62
79
  }
63
- const aliases = url.searchParams.get('aliases') === '1';
80
+ const required = requiredParameters.get(url.pathname);
81
+ if (required !== undefined && url.searchParams.getAll(required).length > 1) {
82
+ json(res, 400, { error: `${required} must be supplied at most once` });
83
+ return;
84
+ }
85
+ const aliasValues = url.searchParams.getAll('aliases');
86
+ if (aliasValues.length > 1 || aliasValues.some(value => value !== '0' && value !== '1')) {
87
+ json(res, 400, { error: 'aliases must be supplied at most once as 0 or 1' });
88
+ return;
89
+ }
90
+ const aliases = aliasValues[0] === '1';
64
91
  const body = (() => {
65
92
  switch (url.pathname) {
66
93
  case '/api/overview':
@@ -99,6 +126,9 @@ const handler = (store, label, maximum) => {
99
126
  }
100
127
  case '/api/search': {
101
128
  const text = param(url, 'q');
129
+ if (text?.includes('\0')) {
130
+ return { status: 400, body: { error: 'search query must not contain NUL characters' } };
131
+ }
102
132
  return text === undefined ?
103
133
  { status: 400, body: { error: 'search requires ?q=' } } :
104
134
  { status: 200, body: search(store, text, { maxSensitivity: maximum }) };
@@ -107,33 +137,40 @@ const handler = (store, label, maximum) => {
107
137
  return { status: 404, body: { error: `no such endpoint: ${url.pathname}` } };
108
138
  }
109
139
  })();
110
- if (head) {
111
- res.writeHead(body.status, { 'content-type': 'application/json; charset=utf-8' });
112
- res.end();
113
- return;
114
- }
140
+ // Node suppresses HEAD bodies; retain the same cache and content headers
141
+ // as GET, including validation errors and unknown endpoints.
115
142
  json(res, body.status, body.body);
116
143
  }
117
144
  catch (error) {
118
- json(res, 500, { error: error instanceof Error ? error.message : String(error) });
145
+ json(res, 500, { error: errorMessage(error) });
119
146
  }
120
147
  };
121
148
  };
122
149
  /** Starts the read surface; resolves once the port is bound. */
123
150
  export const serve = (store, options = {}) => {
124
- const host = options.host ?? defaultHost;
125
- const server = createServer(handler(store, options.label ?? 'cave.db', options.maxSensitivity ?? Sensitivity.defaultMaximum));
151
+ const { port = defaultPort } = options;
152
+ if (!Number.isInteger(port) || port < 0 || port > 65535) {
153
+ throw new TypeError('port must be an integer in 0..65535');
154
+ }
155
+ const maximum = maximumSensitivity(options.maxSensitivity);
156
+ const { host = defaultHost } = options;
157
+ if (typeof host !== 'string' || host.trim() === '') {
158
+ throw new TypeError('host must be a non-empty string');
159
+ }
160
+ const server = createServer(handler(store, options.label ?? 'cave.db', maximum));
126
161
  return new Promise((resolve, reject) => {
127
162
  server.once('error', reject);
128
- server.listen(options.port ?? defaultPort, host, () => {
163
+ server.listen(port, host, () => {
164
+ server.removeListener('error', reject);
129
165
  const address = server.address();
130
- const port = typeof address === 'object' && address !== null ? address.port : options.port ?? defaultPort;
166
+ const boundPort = typeof address === 'object' && address !== null ? address.port : port;
131
167
  // Bracket IPv6 hosts; the default is IPv4 loopback.
132
168
  const shown = host.includes(':') ? `[${host}]` : host;
169
+ let closing;
133
170
  resolve({
134
- url: `http://${shown}:${port}/`,
171
+ url: `http://${shown}:${boundPort}/`,
135
172
  server,
136
- close: () => new Promise((done, fail) => server.close(error => error === undefined ? done() : fail(error)))
173
+ close: () => closing ??= new Promise((done, fail) => server.close(error => error === undefined ? done() : fail(error)))
137
174
  });
138
175
  });
139
176
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Publish complete text; failures before rename leave the destination intact. */
2
+ export declare const writeOutput: (path: string, text: string) => void;
3
+ //# sourceMappingURL=atomic-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-output.d.ts","sourceRoot":"","sources":["../../src/atomic-output.ts"],"names":[],"mappings":"AAIA,kFAAkF;AAClF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,IAyCxD,CAAA"}
@@ -0,0 +1,67 @@
1
+ import fs from 'node:fs';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ import { errorMessage } from "./error-message.js";
4
+ /** Publish complete text; failures before rename leave the destination intact. */
5
+ export const writeOutput = (path, text) => {
6
+ let target = resolve(path);
7
+ let mode;
8
+ let entry;
9
+ try {
10
+ entry = fs.lstatSync(target);
11
+ }
12
+ catch (error) {
13
+ if (error.code !== 'ENOENT')
14
+ throw error;
15
+ }
16
+ if (entry !== undefined) {
17
+ // Follow existing symlinks without replacing the link itself. A dangling
18
+ // link fails resolution rather than publishing over an unexpected path.
19
+ if (entry.isSymbolicLink())
20
+ target = fs.realpathSync(target);
21
+ const stat = fs.statSync(target);
22
+ if (!stat.isFile())
23
+ throw new Error(`output destination is not a regular file: ${path}`);
24
+ fs.accessSync(target, fs.constants.W_OK);
25
+ mode = stat.mode & 0o777;
26
+ }
27
+ const directory = fs.mkdtempSync(join(dirname(target), '.cave-export-'));
28
+ const temporary = join(directory, 'output');
29
+ const errors = [];
30
+ let published = false;
31
+ try {
32
+ const fd = fs.openSync(temporary, 'wx', mode ?? 0o666);
33
+ try {
34
+ fs.writeFileSync(fd, text);
35
+ if (mode !== undefined)
36
+ fs.fchmodSync(fd, mode);
37
+ fs.fsyncSync(fd);
38
+ }
39
+ catch (error) {
40
+ errors.push(error);
41
+ }
42
+ try {
43
+ fs.closeSync(fd);
44
+ }
45
+ catch (error) {
46
+ errors.push(error);
47
+ }
48
+ if (errors.length === 0) {
49
+ fs.renameSync(temporary, target);
50
+ published = true;
51
+ }
52
+ }
53
+ catch (error) {
54
+ errors.push(error);
55
+ }
56
+ try {
57
+ fs.rmSync(directory, { recursive: true, force: true });
58
+ }
59
+ catch (error) {
60
+ errors.push(published ? new Error(`output published to ${target}, but temporary directory cleanup failed: ${directory}: ${errorMessage(error)}`, { cause: error }) : error);
61
+ }
62
+ if (errors.length === 1)
63
+ throw errors[0];
64
+ if (errors.length > 1)
65
+ throw new AggregateError(errors, `file output failed: ${errors.map(error => errorMessage(error)).join('; ')}`, { cause: errors[0] });
66
+ };
67
+ //# sourceMappingURL=atomic-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-output.js","sourceRoot":"","sources":["../../src/atomic-output.ts"],"names":[],"mappings":"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"}
package/dist/src/cli.d.ts CHANGED
@@ -34,6 +34,7 @@
34
34
  * `file` defaults to stdin (`-`); `--db` defaults to `$CAVE_DB`, then
35
35
  * `cave.db`. Every command answers `--help` with options and examples.
36
36
  */
37
+ import { Declared } from '@cavelang/cli/connect';
37
38
  export type Output = {
38
39
  readonly code: number;
39
40
  readonly out: string;
@@ -62,6 +63,19 @@ export declare const addCommand: (argv: readonly string[]) => Output;
62
63
  * identity.
63
64
  */
64
65
  export declare const importCommand: (argv: readonly string[]) => Output;
66
+ /**
67
+ * `cave query --sources` — the store with its declared sources overlaid
68
+ * (spec §23.4). Asynchronous because the sources load first, URLs
69
+ * included, before the overlay appends inside a transaction that rolls
70
+ * back; the dispatcher routes `--sources` here. A text store followed its
71
+ * local sources on open, so only what assembly could not follow — URL
72
+ * sources and what they declare — is loaded. The overlay exists for this
73
+ * invocation alone, so the answer is whole: pages are followed inside the
74
+ * transaction and no cursor is handed out.
75
+ */
76
+ export declare const querySourcesCommand: (argv: readonly string[], runtime?: {
77
+ readonly fetchImpl?: Declared.DiscoverOptions["fetchImpl"];
78
+ }) => Promise<Output>;
65
79
  export declare const queryCommand: (argv: readonly string[]) => Output;
66
80
  export declare const searchFormat: "cave.search";
67
81
  export declare const searchVersion: 1;
@@ -101,8 +115,9 @@ export declare const suggestAliasCommand: (argv: readonly string[], runtime?: {
101
115
  export declare const syncCommand: (argv: readonly string[]) => Output;
102
116
  /**
103
117
  * `cave report` — the §31 deliverable: a markdown template's cave-q
104
- * blocks and inline splices render from the store, every stated fact
105
- * cited back to its claim. Problems mark the text, land on stderr with
118
+ * blocks and inline splices render from the store, with matched rows
119
+ * cited back to their claims. Ordinary prose is not automatically checked
120
+ * or cited. Problems mark the text, land on stderr with
106
121
  * template line numbers, and fail the exit code — the render never
107
122
  * silently drops a fact.
108
123
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}