@cavelang/cli 0.27.3 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/Authors.md +5 -0
  2. package/License.md +6 -0
  3. package/README.md +122 -24
  4. package/dist/internal/act/action.d.ts +69 -0
  5. package/dist/internal/act/action.d.ts.map +1 -0
  6. package/dist/internal/act/action.js +201 -0
  7. package/dist/internal/act/action.js.map +1 -0
  8. package/dist/internal/act/declare.d.ts +102 -0
  9. package/dist/internal/act/declare.d.ts.map +1 -0
  10. package/dist/internal/act/declare.js +270 -0
  11. package/dist/internal/act/declare.js.map +1 -0
  12. package/dist/internal/act/engine.d.ts +103 -0
  13. package/dist/internal/act/engine.d.ts.map +1 -0
  14. package/dist/internal/act/engine.js +298 -0
  15. package/dist/internal/act/engine.js.map +1 -0
  16. package/dist/internal/act/index.d.ts +27 -0
  17. package/dist/internal/act/index.d.ts.map +1 -0
  18. package/dist/internal/act/index.js +25 -0
  19. package/dist/internal/act/index.js.map +1 -0
  20. package/dist/internal/automate/automation.d.ts +78 -0
  21. package/dist/internal/automate/automation.d.ts.map +1 -0
  22. package/dist/internal/automate/automation.js +135 -0
  23. package/dist/internal/automate/automation.js.map +1 -0
  24. package/dist/internal/automate/declare.d.ts +84 -0
  25. package/dist/internal/automate/declare.d.ts.map +1 -0
  26. package/dist/internal/automate/declare.js +233 -0
  27. package/dist/internal/automate/declare.js.map +1 -0
  28. package/dist/internal/automate/engine.d.ts +125 -0
  29. package/dist/internal/automate/engine.d.ts.map +1 -0
  30. package/dist/internal/automate/engine.js +388 -0
  31. package/dist/internal/automate/engine.js.map +1 -0
  32. package/dist/internal/automate/index.d.ts +28 -0
  33. package/dist/internal/automate/index.d.ts.map +1 -0
  34. package/dist/internal/automate/index.js +26 -0
  35. package/dist/internal/automate/index.js.map +1 -0
  36. package/dist/internal/automate/main.d.ts +26 -0
  37. package/dist/internal/automate/main.d.ts.map +1 -0
  38. package/dist/internal/automate/main.js +298 -0
  39. package/dist/internal/automate/main.js.map +1 -0
  40. package/dist/internal/connect/index.d.ts +26 -0
  41. package/dist/internal/connect/index.d.ts.map +1 -0
  42. package/dist/internal/connect/index.js +24 -0
  43. package/dist/internal/connect/index.js.map +1 -0
  44. package/dist/internal/connect/main.d.ts +23 -0
  45. package/dist/internal/connect/main.d.ts.map +1 -0
  46. package/dist/internal/connect/main.js +330 -0
  47. package/dist/internal/connect/main.js.map +1 -0
  48. package/dist/internal/connect/run.d.ts +85 -0
  49. package/dist/internal/connect/run.d.ts.map +1 -0
  50. package/dist/internal/connect/run.js +242 -0
  51. package/dist/internal/connect/run.js.map +1 -0
  52. package/dist/internal/connect/source.d.ts +44 -0
  53. package/dist/internal/connect/source.d.ts.map +1 -0
  54. package/dist/internal/connect/source.js +215 -0
  55. package/dist/internal/connect/source.js.map +1 -0
  56. package/dist/internal/connect/template.d.ts +69 -0
  57. package/dist/internal/connect/template.d.ts.map +1 -0
  58. package/dist/internal/connect/template.js +221 -0
  59. package/dist/internal/connect/template.js.map +1 -0
  60. package/dist/internal/eval/index.d.ts +28 -0
  61. package/dist/internal/eval/index.d.ts.map +1 -0
  62. package/dist/internal/eval/index.js +27 -0
  63. package/dist/internal/eval/index.js.map +1 -0
  64. package/dist/internal/eval/judge.d.ts +30 -0
  65. package/dist/internal/eval/judge.d.ts.map +1 -0
  66. package/dist/internal/eval/judge.js +101 -0
  67. package/dist/internal/eval/judge.js.map +1 -0
  68. package/dist/internal/eval/loop.d.ts +64 -0
  69. package/dist/internal/eval/loop.d.ts.map +1 -0
  70. package/dist/internal/eval/loop.js +123 -0
  71. package/dist/internal/eval/loop.js.map +1 -0
  72. package/dist/internal/eval/main.d.ts +17 -0
  73. package/dist/internal/eval/main.d.ts.map +1 -0
  74. package/dist/internal/eval/main.js +236 -0
  75. package/dist/internal/eval/main.js.map +1 -0
  76. package/dist/internal/eval/queries.d.ts +74 -0
  77. package/dist/internal/eval/queries.d.ts.map +1 -0
  78. package/dist/internal/eval/queries.js +161 -0
  79. package/dist/internal/eval/queries.js.map +1 -0
  80. package/dist/internal/eval/run.d.ts +143 -0
  81. package/dist/internal/eval/run.d.ts.map +1 -0
  82. package/dist/internal/eval/run.js +376 -0
  83. package/dist/internal/eval/run.js.map +1 -0
  84. package/dist/internal/eval/score.d.ts +81 -0
  85. package/dist/internal/eval/score.d.ts.map +1 -0
  86. package/dist/internal/eval/score.js +126 -0
  87. package/dist/internal/eval/score.js.map +1 -0
  88. package/dist/internal/eval/suite.d.ts +66 -0
  89. package/dist/internal/eval/suite.d.ts.map +1 -0
  90. package/dist/internal/eval/suite.js +130 -0
  91. package/dist/internal/eval/suite.js.map +1 -0
  92. package/dist/internal/ingest/context.d.ts +20 -0
  93. package/dist/internal/ingest/context.d.ts.map +1 -0
  94. package/dist/internal/ingest/context.js +59 -0
  95. package/dist/internal/ingest/context.js.map +1 -0
  96. package/dist/internal/ingest/files.d.ts +46 -0
  97. package/dist/internal/ingest/files.d.ts.map +1 -0
  98. package/dist/internal/ingest/files.js +115 -0
  99. package/dist/internal/ingest/files.js.map +1 -0
  100. package/dist/internal/ingest/index.d.ts +31 -0
  101. package/dist/internal/ingest/index.d.ts.map +1 -0
  102. package/dist/internal/ingest/index.js +29 -0
  103. package/dist/internal/ingest/index.js.map +1 -0
  104. package/dist/internal/ingest/main.d.ts +12 -0
  105. package/dist/internal/ingest/main.d.ts.map +1 -0
  106. package/dist/internal/ingest/main.js +180 -0
  107. package/dist/internal/ingest/main.js.map +1 -0
  108. package/dist/internal/ingest/prompt.d.ts +32 -0
  109. package/dist/internal/ingest/prompt.d.ts.map +1 -0
  110. package/dist/internal/ingest/prompt.js +75 -0
  111. package/dist/internal/ingest/prompt.js.map +1 -0
  112. package/dist/internal/ingest/run.d.ts +142 -0
  113. package/dist/internal/ingest/run.d.ts.map +1 -0
  114. package/dist/internal/ingest/run.js +350 -0
  115. package/dist/internal/ingest/run.js.map +1 -0
  116. package/dist/internal/ingest/web.d.ts +48 -0
  117. package/dist/internal/ingest/web.d.ts.map +1 -0
  118. package/dist/internal/ingest/web.js +140 -0
  119. package/dist/internal/ingest/web.js.map +1 -0
  120. package/dist/internal/loop/demo.d.ts +22 -0
  121. package/dist/internal/loop/demo.d.ts.map +1 -0
  122. package/dist/internal/loop/demo.js +67 -0
  123. package/dist/internal/loop/demo.js.map +1 -0
  124. package/dist/internal/loop/index.d.ts +20 -0
  125. package/dist/internal/loop/index.d.ts.map +1 -0
  126. package/dist/internal/loop/index.js +17 -0
  127. package/dist/internal/loop/index.js.map +1 -0
  128. package/dist/internal/loop/llm.d.ts +99 -0
  129. package/dist/internal/loop/llm.d.ts.map +1 -0
  130. package/dist/internal/loop/llm.js +231 -0
  131. package/dist/internal/loop/llm.js.map +1 -0
  132. package/dist/internal/loop/reconstruct.d.ts +87 -0
  133. package/dist/internal/loop/reconstruct.d.ts.map +1 -0
  134. package/dist/internal/loop/reconstruct.js +157 -0
  135. package/dist/internal/loop/reconstruct.js.map +1 -0
  136. package/dist/internal/loop/sqlite.d.ts +13 -0
  137. package/dist/internal/loop/sqlite.d.ts.map +1 -0
  138. package/dist/internal/loop/sqlite.js +33 -0
  139. package/dist/internal/loop/sqlite.js.map +1 -0
  140. package/dist/internal/loop/store.d.ts +50 -0
  141. package/dist/internal/loop/store.d.ts.map +1 -0
  142. package/dist/internal/loop/store.js +100 -0
  143. package/dist/internal/loop/store.js.map +1 -0
  144. package/dist/internal/mcp/bin.d.ts +7 -0
  145. package/dist/internal/mcp/bin.d.ts.map +1 -0
  146. package/dist/internal/mcp/bin.js +8 -0
  147. package/dist/internal/mcp/bin.js.map +1 -0
  148. package/dist/internal/mcp/index.d.ts +25 -0
  149. package/dist/internal/mcp/index.d.ts.map +1 -0
  150. package/dist/internal/mcp/index.js +23 -0
  151. package/dist/internal/mcp/index.js.map +1 -0
  152. package/dist/internal/mcp/main.d.ts +23 -0
  153. package/dist/internal/mcp/main.d.ts.map +1 -0
  154. package/dist/internal/mcp/main.js +156 -0
  155. package/dist/internal/mcp/main.js.map +1 -0
  156. package/dist/internal/mcp/server.d.ts +92 -0
  157. package/dist/internal/mcp/server.d.ts.map +1 -0
  158. package/dist/internal/mcp/server.js +251 -0
  159. package/dist/internal/mcp/server.js.map +1 -0
  160. package/dist/internal/mcp/tools.d.ts +91 -0
  161. package/dist/internal/mcp/tools.d.ts.map +1 -0
  162. package/dist/internal/mcp/tools.js +584 -0
  163. package/dist/internal/mcp/tools.js.map +1 -0
  164. package/dist/internal/rules/declare.d.ts +58 -0
  165. package/dist/internal/rules/declare.d.ts.map +1 -0
  166. package/dist/internal/rules/declare.js +152 -0
  167. package/dist/internal/rules/declare.js.map +1 -0
  168. package/dist/internal/rules/engine.d.ts +125 -0
  169. package/dist/internal/rules/engine.d.ts.map +1 -0
  170. package/dist/internal/rules/engine.js +575 -0
  171. package/dist/internal/rules/engine.js.map +1 -0
  172. package/dist/internal/rules/index.d.ts +23 -0
  173. package/dist/internal/rules/index.d.ts.map +1 -0
  174. package/dist/internal/rules/index.js +21 -0
  175. package/dist/internal/rules/index.js.map +1 -0
  176. package/dist/internal/rules/rule.d.ts +88 -0
  177. package/dist/internal/rules/rule.d.ts.map +1 -0
  178. package/dist/internal/rules/rule.js +221 -0
  179. package/dist/internal/rules/rule.js.map +1 -0
  180. package/dist/internal/shape/check.d.ts +118 -0
  181. package/dist/internal/shape/check.d.ts.map +1 -0
  182. package/dist/internal/shape/check.js +331 -0
  183. package/dist/internal/shape/check.js.map +1 -0
  184. package/dist/internal/shape/client.d.ts +31 -0
  185. package/dist/internal/shape/client.d.ts.map +1 -0
  186. package/dist/internal/shape/client.js +170 -0
  187. package/dist/internal/shape/client.js.map +1 -0
  188. package/dist/internal/shape/gate.d.ts +33 -0
  189. package/dist/internal/shape/gate.d.ts.map +1 -0
  190. package/dist/internal/shape/gate.js +0 -0
  191. package/dist/internal/shape/gate.js.map +1 -0
  192. package/dist/internal/shape/index.d.ts +27 -0
  193. package/dist/internal/shape/index.d.ts.map +1 -0
  194. package/dist/internal/shape/index.js +23 -0
  195. package/dist/internal/shape/index.js.map +1 -0
  196. package/dist/internal/shape/suggest.d.ts +82 -0
  197. package/dist/internal/shape/suggest.d.ts.map +1 -0
  198. package/dist/internal/shape/suggest.js +374 -0
  199. package/dist/internal/shape/suggest.js.map +1 -0
  200. package/dist/internal/sync/index.d.ts +22 -0
  201. package/dist/internal/sync/index.d.ts.map +1 -0
  202. package/dist/internal/sync/index.js +21 -0
  203. package/dist/internal/sync/index.js.map +1 -0
  204. package/dist/internal/sync/sync.d.ts +95 -0
  205. package/dist/internal/sync/sync.d.ts.map +1 -0
  206. package/dist/internal/sync/sync.js +342 -0
  207. package/dist/internal/sync/sync.js.map +1 -0
  208. package/dist/internal/view/api.d.ts +196 -0
  209. package/dist/internal/view/api.d.ts.map +1 -0
  210. package/dist/internal/view/api.js +189 -0
  211. package/dist/internal/view/api.js.map +1 -0
  212. package/dist/internal/view/index.d.ts +33 -0
  213. package/dist/internal/view/index.d.ts.map +1 -0
  214. package/dist/internal/view/index.js +30 -0
  215. package/dist/internal/view/index.js.map +1 -0
  216. package/dist/internal/view/main.d.ts +11 -0
  217. package/dist/internal/view/main.d.ts.map +1 -0
  218. package/dist/internal/view/main.js +98 -0
  219. package/dist/internal/view/main.js.map +1 -0
  220. package/dist/internal/view/page.d.ts +14 -0
  221. package/dist/internal/view/page.d.ts.map +1 -0
  222. package/dist/internal/view/page.js +370 -0
  223. package/dist/internal/view/page.js.map +1 -0
  224. package/dist/internal/view/report.d.ts +52 -0
  225. package/dist/internal/view/report.d.ts.map +1 -0
  226. package/dist/internal/view/report.js +367 -0
  227. package/dist/internal/view/report.js.map +1 -0
  228. package/dist/internal/view/scope.d.ts +11 -0
  229. package/dist/internal/view/scope.d.ts.map +1 -0
  230. package/dist/internal/view/scope.js +41 -0
  231. package/dist/internal/view/scope.js.map +1 -0
  232. package/dist/internal/view/server.d.ts +35 -0
  233. package/dist/internal/view/server.d.ts.map +1 -0
  234. package/dist/internal/view/server.js +141 -0
  235. package/dist/internal/view/server.js.map +1 -0
  236. package/dist/src/act.d.ts +3 -0
  237. package/dist/src/act.d.ts.map +1 -0
  238. package/dist/src/act.js +3 -0
  239. package/dist/src/act.js.map +1 -0
  240. package/dist/src/automate.d.ts +3 -0
  241. package/dist/src/automate.d.ts.map +1 -0
  242. package/dist/src/automate.js +3 -0
  243. package/dist/src/automate.js.map +1 -0
  244. package/dist/src/cli.d.ts +24 -17
  245. package/dist/src/cli.d.ts.map +1 -1
  246. package/dist/src/cli.js +416 -109
  247. package/dist/src/cli.js.map +1 -1
  248. package/dist/src/commands.d.ts +104 -0
  249. package/dist/src/commands.d.ts.map +1 -0
  250. package/dist/src/commands.js +33 -0
  251. package/dist/src/commands.js.map +1 -0
  252. package/dist/src/connect.d.ts +3 -0
  253. package/dist/src/connect.d.ts.map +1 -0
  254. package/dist/src/connect.js +3 -0
  255. package/dist/src/connect.js.map +1 -0
  256. package/dist/src/dispatch.d.ts +14 -0
  257. package/dist/src/dispatch.d.ts.map +1 -0
  258. package/dist/src/dispatch.js +116 -0
  259. package/dist/src/dispatch.js.map +1 -0
  260. package/dist/src/doctor.d.ts +45 -0
  261. package/dist/src/doctor.d.ts.map +1 -0
  262. package/dist/src/doctor.js +284 -0
  263. package/dist/src/doctor.js.map +1 -0
  264. package/dist/src/eval.d.ts +3 -0
  265. package/dist/src/eval.d.ts.map +1 -0
  266. package/dist/src/eval.js +3 -0
  267. package/dist/src/eval.js.map +1 -0
  268. package/dist/src/index.d.ts +9 -2
  269. package/dist/src/index.d.ts.map +1 -1
  270. package/dist/src/index.js +6 -2
  271. package/dist/src/index.js.map +1 -1
  272. package/dist/src/ingest.d.ts +3 -0
  273. package/dist/src/ingest.d.ts.map +1 -0
  274. package/dist/src/ingest.js +3 -0
  275. package/dist/src/ingest.js.map +1 -0
  276. package/dist/src/loop.d.ts +3 -0
  277. package/dist/src/loop.d.ts.map +1 -0
  278. package/dist/src/loop.js +3 -0
  279. package/dist/src/loop.js.map +1 -0
  280. package/dist/src/main.d.ts +1 -1
  281. package/dist/src/main.d.ts.map +1 -1
  282. package/dist/src/main.js +3 -75
  283. package/dist/src/main.js.map +1 -1
  284. package/dist/src/mcp.d.ts +3 -0
  285. package/dist/src/mcp.d.ts.map +1 -0
  286. package/dist/src/mcp.js +3 -0
  287. package/dist/src/mcp.js.map +1 -0
  288. package/dist/src/rules.d.ts +3 -0
  289. package/dist/src/rules.d.ts.map +1 -0
  290. package/dist/src/rules.js +3 -0
  291. package/dist/src/rules.js.map +1 -0
  292. package/dist/src/shape.d.ts +3 -0
  293. package/dist/src/shape.d.ts.map +1 -0
  294. package/dist/src/shape.js +3 -0
  295. package/dist/src/shape.js.map +1 -0
  296. package/dist/src/sync.d.ts +3 -0
  297. package/dist/src/sync.d.ts.map +1 -0
  298. package/dist/src/sync.js +3 -0
  299. package/dist/src/sync.js.map +1 -0
  300. package/dist/src/view.d.ts +3 -0
  301. package/dist/src/view.d.ts.map +1 -0
  302. package/dist/src/view.js +3 -0
  303. package/dist/src/view.js.map +1 -0
  304. package/package.json +81 -21
  305. package/src/act.ts +2 -0
  306. package/src/automate.ts +2 -0
  307. package/src/cli.ts +423 -104
  308. package/src/commands.ts +48 -0
  309. package/src/connect.ts +2 -0
  310. package/src/dispatch.ts +141 -0
  311. package/src/doctor.ts +370 -0
  312. package/src/eval.ts +2 -0
  313. package/src/index.ts +9 -2
  314. package/src/ingest.ts +2 -0
  315. package/src/loop.ts +2 -0
  316. package/src/main.ts +3 -66
  317. package/src/mcp.ts +2 -0
  318. package/src/rules.ts +2 -0
  319. package/src/shape.ts +2 -0
  320. package/src/sync.ts +2 -0
  321. package/src/view.ts +2 -0
@@ -0,0 +1,157 @@
1
+ /**
2
+ * The reconstruction loop (spec §18, §11.3) — Ji et al.'s Algorithm 1
3
+ * (*Memory is Reconstructed, Not Retrieved*, 2026) as a functional loop
4
+ * over the CAVE graph:
5
+ *
6
+ * - **Cues** are entities used as query anchors;
7
+ * - **route**: expanding a cue collects its claims (content) and pushes
8
+ * scored neighbors — forward edges, named inverse edges, and topic
9
+ * containment in both directions (ϕτ→e and ϕv→(c,g)) — onto the
10
+ * frontier;
11
+ * - **select / stop** are policy decisions, injected — the loop itself is
12
+ * deliberately outside the language (spec §18).
13
+ *
14
+ * The loop comes in two shapes sharing one step core: `reconstruct` for
15
+ * synchronous policies (the deterministic heuristic), `reconstructAsync`
16
+ * for policies that await a model between steps (`llmPolicy`).
17
+ */
18
+ import { Claim, Key } from '@cavelang/core';
19
+ const loopOf = (seeds) => ({
20
+ state: {
21
+ frontier: seeds.map(entity => ({ entity, score: 1, depth: 0 })),
22
+ visited: new Set(),
23
+ collected: [],
24
+ steps: 0
25
+ },
26
+ seen: new Set(),
27
+ claims: [],
28
+ trace: []
29
+ });
30
+ /** Relational edges of a cue, both directions (spec §11.3 routing). */
31
+ const edgesOf = (store, cue) => [...store.forward(cue.entity), ...store.reverse(cue.entity)];
32
+ /**
33
+ * Applies one expansion: mark the cue visited, collect its claims, offer
34
+ * scored neighbors, merge them into the frontier. `scores[i]` belongs to
35
+ * `edges[i]` — computed by the caller, which is what lets the sync and
36
+ * async loops share this core.
37
+ */
38
+ const applyStep = (store, loop, cue, edges, scores) => {
39
+ const visited = new Set(loop.state.visited);
40
+ visited.add(cue.entity);
41
+ let collected = 0;
42
+ for (const claim of store.claimsAbout(cue.entity)) {
43
+ const key = Key.of(claim);
44
+ if (!loop.seen.has(key)) {
45
+ loop.seen.add(key);
46
+ loop.claims.push(claim);
47
+ collected += 1;
48
+ }
49
+ }
50
+ const neighbors = new Map();
51
+ edges.forEach((edge, index) => {
52
+ if (visited.has(edge.to)) {
53
+ return;
54
+ }
55
+ const score = scores[index];
56
+ const existing = neighbors.get(edge.to);
57
+ if (existing === undefined || existing.score < score) {
58
+ neighbors.set(edge.to, { entity: edge.to, score, depth: cue.depth + 1 });
59
+ }
60
+ });
61
+ // Merge offers into the frontier keeping the maximum score per entity:
62
+ // a weaker path discovered later must never downgrade a pending cue,
63
+ // or adding knowledge could remove reachable claims.
64
+ const merged = [];
65
+ for (const entry of loop.state.frontier) {
66
+ if (entry.entity === cue.entity) {
67
+ continue;
68
+ }
69
+ const offered = neighbors.get(entry.entity);
70
+ if (offered !== undefined) {
71
+ merged.push(offered.score > entry.score ? offered : entry);
72
+ neighbors.delete(entry.entity);
73
+ }
74
+ else {
75
+ merged.push(entry);
76
+ }
77
+ }
78
+ merged.push(...neighbors.values());
79
+ loop.state = {
80
+ frontier: merged,
81
+ visited,
82
+ collected: loop.claims,
83
+ steps: loop.state.steps + 1
84
+ };
85
+ loop.trace.push({ step: loop.state.steps, cue, edges, collected });
86
+ };
87
+ const reconstructionOf = (loop) => ({ claims: loop.claims, trace: loop.trace, state: loop.state });
88
+ /**
89
+ * Runs the loop from seed entities until the policy stops or the frontier
90
+ * empties. Pure given its inputs — same store + policy + seeds, same
91
+ * reconstruction.
92
+ */
93
+ export const reconstruct = (store, policy, seeds) => {
94
+ const loop = loopOf(seeds);
95
+ while (!policy.done(loop.state)) {
96
+ const cue = policy.select(loop.state);
97
+ if (cue === undefined) {
98
+ break;
99
+ }
100
+ const edges = edgesOf(store, cue);
101
+ applyStep(store, loop, cue, edges, edges.map(edge => policy.score(edge, cue)));
102
+ }
103
+ return reconstructionOf(loop);
104
+ };
105
+ /**
106
+ * The async twin of `reconstruct`, for policies that await a model between
107
+ * steps (spec §18): same algorithm, same trace, decisions awaited.
108
+ */
109
+ export const reconstructAsync = async (store, policy, seeds) => {
110
+ const loop = loopOf(seeds);
111
+ while (!(await policy.done(loop.state))) {
112
+ const cue = await policy.select(loop.state);
113
+ if (cue === undefined) {
114
+ break;
115
+ }
116
+ const edges = edgesOf(store, cue);
117
+ const scores = [];
118
+ for (const edge of edges) {
119
+ scores.push(await policy.score(edge, cue));
120
+ }
121
+ applyStep(store, loop, cue, edges, scores);
122
+ }
123
+ return reconstructionOf(loop);
124
+ };
125
+ /**
126
+ * Deterministic heuristic policy for dependency-free testing (spec §18):
127
+ * greedy best-first by score (FIFO tiebreak), score = parent score ×
128
+ * edge confidence × decay, hard budgets for steps and claims. Also the
129
+ * eval baseline the LLM policy is measured against (spec §18).
130
+ */
131
+ export const heuristicPolicy = (options = {}) => {
132
+ const decay = options.decay ?? 0.8;
133
+ const maxSteps = options.maxSteps ?? 16;
134
+ const minScore = options.minScore ?? 0.05;
135
+ const maxClaims = options.maxClaims ?? Number.POSITIVE_INFINITY;
136
+ return {
137
+ select(state) {
138
+ let best;
139
+ for (const cue of state.frontier) {
140
+ if (cue.score < minScore) {
141
+ continue;
142
+ }
143
+ if (best === undefined || cue.score > best.score) {
144
+ best = cue;
145
+ }
146
+ }
147
+ return best;
148
+ },
149
+ score(edge, from) {
150
+ return from.score * edge.conf * decay;
151
+ },
152
+ done(state) {
153
+ return state.steps >= maxSteps || state.collected.length >= maxClaims;
154
+ }
155
+ };
156
+ };
157
+ //# sourceMappingURL=reconstruct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconstruct.js","sourceRoot":"","sources":["../../src/reconstruct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The §18 store contract over `@cavelang/store`'s SQLite store — one
3
+ * adapter shared by the MCP `cave_reconstruct` tool and the CLI
4
+ * `cave reconstruct` command.
5
+ *
6
+ * Reads are current-belief only, and negated / retracted rows are not
7
+ * edges — the store's own traversal defaults, matching `memoryStore`.
8
+ */
9
+ import type { Store } from '@cavelang/store';
10
+ import type { CaveStore } from './store.ts';
11
+ /** `@cavelang/cli/loop` store contract over an open SQLite store (spec §18). */
12
+ export declare const sqliteStore: (store: Store) => CaveStore;
13
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,4EAA4E;AAC5E,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,SAyBzC,CAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The §18 store contract over `@cavelang/store`'s SQLite store — one
3
+ * adapter shared by the MCP `cave_reconstruct` tool and the CLI
4
+ * `cave reconstruct` command.
5
+ *
6
+ * Reads are current-belief only, and negated / retracted rows are not
7
+ * edges — the store's own traversal defaults, matching `memoryStore`.
8
+ */
9
+ /** `@cavelang/cli/loop` store contract over an open SQLite store (spec §18). */
10
+ export const sqliteStore = (store) => ({
11
+ forward: entity => store.forward(entity).map(fact => ({
12
+ from: entity,
13
+ to: fact.target,
14
+ verb: fact.verb,
15
+ rel: fact.verb,
16
+ conf: fact.row.conf,
17
+ claim: store.toClaim(fact.row)
18
+ })),
19
+ reverse: entity => store.reverse(entity).map(fact => ({
20
+ from: entity,
21
+ to: fact.source,
22
+ verb: fact.verb,
23
+ ...fact.rel === undefined ? {} : { rel: fact.rel },
24
+ conf: fact.row.conf,
25
+ claim: store.toClaim(fact.row)
26
+ })),
27
+ claimsAbout: entity => store.currentBeliefs()
28
+ .filter(row => row.subject === entity || row.object === entity)
29
+ .map(row => store.toClaim(row)),
30
+ expandTopic: topic => store.topicMembers(topic),
31
+ topicsOf: entity => store.topicsOf(entity)
32
+ });
33
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAa,EAAE,CAAC,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC,EAAE,CAChB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,IAAI,CAAC,MAAM;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,IAAI;QACd,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;QACnB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;KAC/B,CAAC,CAAC;IACL,OAAO,EAAE,MAAM,CAAC,EAAE,CAChB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,IAAI,CAAC,MAAM;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;QAClD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;QACnB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;KAC/B,CAAC,CAAC;IACL,WAAW,EAAE,MAAM,CAAC,EAAE,CACpB,KAAK,CAAC,cAAc,EAAE;SACnB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;SAC9D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;CAC3C,CAAC,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * The store contract the language guarantees the agent (spec §18), plus a
3
+ * dependency-free in-memory implementation.
4
+ *
5
+ * The contract: forward reads via the subject index, named inverse reads
6
+ * via the object index plus `inverse_of()`, current-belief resolution via
7
+ * claim keys, and topic expansion via `CONTAINS` in both directions.
8
+ * `@cavelang/store`'s SQLite store satisfies the same shape; the in-memory
9
+ * store keeps the loop testable without I/O.
10
+ */
11
+ import { Claim } from '@cavelang/core';
12
+ import { Registry } from '@cavelang/canonical';
13
+ /** A traversable edge, read from one endpoint. */
14
+ export type Edge = {
15
+ readonly from: string;
16
+ readonly to: string;
17
+ /** Canonical (primary) verb of the underlying fact. */
18
+ readonly verb: string;
19
+ /**
20
+ * Relation name in the direction of traversal: the verb itself going
21
+ * forward, the declared inverse going backward — `undefined` when no
22
+ * inverse is declared (the un-named fallback, spec §5.5).
23
+ */
24
+ readonly rel?: string;
25
+ readonly conf: number;
26
+ readonly claim: Claim.t;
27
+ };
28
+ /** Injectable store interface for the reconstruction loop (spec §18). */
29
+ export type CaveStore = {
30
+ /** Current relational facts with `entity` as subject. */
31
+ forward(entity: string): Edge[];
32
+ /** Current relational facts with `entity` as object, inverse-named. */
33
+ reverse(entity: string): Edge[];
34
+ /** Current claims about `entity` (either endpoint, any payload). */
35
+ claimsAbout(entity: string): Claim.t[];
36
+ /** Members of a topic — forward `CONTAINS` (spec §11.2). */
37
+ expandTopic(topic: string): string[];
38
+ /** Containers of an entity — inverse `CONTAINS` (spec §11.2). */
39
+ topicsOf(entity: string): string[];
40
+ };
41
+ /**
42
+ * In-memory `CaveStore` over canonical claims. Claim order is transaction
43
+ * order — for duplicated claim keys the last one wins (current belief,
44
+ * spec §9.1). Negated and retracted (`@ 0%`) facts are excluded from
45
+ * traversal, matching `@cavelang/store` defaults.
46
+ */
47
+ export declare const memoryStore: (claims: readonly Claim.t[], registry?: Registry.t) => CaveStore;
48
+ /** Convenience: in-memory store straight from CAVE text. */
49
+ export declare const memoryStoreOfText: (text: string, registry?: Registry.t) => CaveStore;
50
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAO,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAsC,MAAM,qBAAqB,CAAA;AAElF,kDAAkD;AAClD,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;CACxB,CAAA;AAED,yEAAyE;AACzE,MAAM,MAAM,SAAS,GAAG;IACtB,yDAAyD;IACzD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,CAAA;IAC/B,uEAAuE;IACvE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,CAAA;IAC/B,oEAAoE;IACpE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAA;IACtC,4DAA4D;IAC5D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACpC,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACnC,CAAA;AAQD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,SAAS,KAAK,CAAC,CAAC,EAAE,EAAE,WAAU,QAAQ,CAAC,CAAoB,KAAG,SA0EjG,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,WAAU,QAAQ,CAAC,CAAoB,KAAG,SAGzF,CAAA"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * The store contract the language guarantees the agent (spec §18), plus a
3
+ * dependency-free in-memory implementation.
4
+ *
5
+ * The contract: forward reads via the subject index, named inverse reads
6
+ * via the object index plus `inverse_of()`, current-belief resolution via
7
+ * claim keys, and topic expansion via `CONTAINS` in both directions.
8
+ * `@cavelang/store`'s SQLite store satisfies the same shape; the in-memory
9
+ * store keeps the loop testable without I/O.
10
+ */
11
+ import { Claim, Key } from '@cavelang/core';
12
+ import { Registry, canonicalizeText, standardRegistry } from '@cavelang/canonical';
13
+ const subjectText = (claim) => Claim.formatTerm(claim.subject);
14
+ const objectText = (claim) => claim.payload.kind === 'relation' ? Claim.formatTerm(claim.payload.object) : undefined;
15
+ /**
16
+ * In-memory `CaveStore` over canonical claims. Claim order is transaction
17
+ * order — for duplicated claim keys the last one wins (current belief,
18
+ * spec §9.1). Negated and retracted (`@ 0%`) facts are excluded from
19
+ * traversal, matching `@cavelang/store` defaults.
20
+ */
21
+ export const memoryStore = (claims, registry = standardRegistry) => {
22
+ const current = new Map();
23
+ for (const claim of claims) {
24
+ current.set(Key.of(claim), claim);
25
+ }
26
+ const bySubject = new Map();
27
+ const byObject = new Map();
28
+ const push = (map, key, claim) => {
29
+ const existing = map.get(key);
30
+ if (existing === undefined) {
31
+ map.set(key, [claim]);
32
+ }
33
+ else {
34
+ existing.push(claim);
35
+ }
36
+ };
37
+ for (const claim of current.values()) {
38
+ push(bySubject, subjectText(claim), claim);
39
+ const object = objectText(claim);
40
+ if (object !== undefined) {
41
+ push(byObject, object, claim);
42
+ }
43
+ }
44
+ const traversable = (claim) => !claim.negated && claim.conf > 0;
45
+ return {
46
+ forward(entity) {
47
+ return (bySubject.get(entity) ?? [])
48
+ .filter(claim => traversable(claim) && objectText(claim) !== undefined)
49
+ .map(claim => ({
50
+ from: entity,
51
+ to: objectText(claim),
52
+ verb: claim.verb,
53
+ rel: claim.verb,
54
+ conf: claim.conf,
55
+ claim
56
+ }));
57
+ },
58
+ reverse(entity) {
59
+ return (byObject.get(entity) ?? [])
60
+ .filter(traversable)
61
+ .map(claim => {
62
+ const rel = Registry.inverseOf(registry, claim.verb);
63
+ return {
64
+ from: entity,
65
+ to: subjectText(claim),
66
+ verb: claim.verb,
67
+ ...rel === undefined ? {} : { rel },
68
+ conf: claim.conf,
69
+ claim
70
+ };
71
+ });
72
+ },
73
+ claimsAbout(entity) {
74
+ const about = [
75
+ ...bySubject.get(entity) ?? [],
76
+ ...(byObject.get(entity) ?? []).filter(claim => subjectText(claim) !== entity)
77
+ ];
78
+ return about;
79
+ },
80
+ expandTopic(topic) {
81
+ return (bySubject.get(topic) ?? [])
82
+ .filter(claim => traversable(claim) && claim.verb === 'CONTAINS')
83
+ .flatMap(claim => {
84
+ const object = objectText(claim);
85
+ return object === undefined ? [] : [object];
86
+ });
87
+ },
88
+ topicsOf(entity) {
89
+ return (byObject.get(entity) ?? [])
90
+ .filter(claim => traversable(claim) && claim.verb === 'CONTAINS')
91
+ .map(subjectText);
92
+ }
93
+ };
94
+ };
95
+ /** Convenience: in-memory store straight from CAVE text. */
96
+ export const memoryStoreOfText = (text, registry = standardRegistry) => {
97
+ const result = canonicalizeText(text, registry);
98
+ return memoryStore(result.claims.map(entry => entry.claim), result.registry);
99
+ };
100
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone `cave mcp` entry — lets other packages (and MCP client
4
+ * configurations) point at the server without going through `@cavelang/cli`.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":";AACA;;;GAGG"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone `cave mcp` entry — lets other packages (and MCP client
4
+ * configurations) point at the server without going through `@cavelang/cli`.
5
+ */
6
+ import { runMcp } from "./main.js";
7
+ process.exitCode = await runMcp(process.argv.slice(2));
8
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAElC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `@cavelang/cli/mcp` — the CAVE engine as an MCP server.
3
+ *
4
+ * ```jsonc
5
+ * // client configuration
6
+ * { "command": "cave", "args": ["mcp", "--db", "knowledge.db"] }
7
+ * ```
8
+ *
9
+ * Tools: cave_add, cave_query, cave_fuse, cave_search, cave_about,
10
+ * cave_neighbors, cave_reconstruct, cave_derive, cave_export, cave_lint —
11
+ * plus one generated `act_<name>` tool per action declared in the store
12
+ * (spec §25.5), the governed write vocabulary. `cave_fuse` and
13
+ * `cave_derive` are named computation: agents delegate Bayesian fusion
14
+ * (spec §10.1) and rule derivation (spec §24) instead of doing the math
15
+ * in tokens. Server instructions carry the spec §22 compact card so
16
+ * connected models can write CAVE directly. `--read-only` /
17
+ * `--tools <list>` narrow the served surface — the minimum viable agent
18
+ * permission boundary.
19
+ */
20
+ export { agentSource, createServer, serve, instructions, instructionsFor, protocolVersion, serverInfo, specCard } from './server.ts';
21
+ export type { ServerOptions } from './server.ts';
22
+ export { runMcp } from './main.ts';
23
+ export { actionTools, actToolName, actToolPrefix, allowsActions, permissions, scopedActionTools, scopedTools, tools } from './tools.ts';
24
+ export type { Permission, Scope, Tool, ToolContext } from './tools.ts';
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACpI,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `@cavelang/cli/mcp` — the CAVE engine as an MCP server.
3
+ *
4
+ * ```jsonc
5
+ * // client configuration
6
+ * { "command": "cave", "args": ["mcp", "--db", "knowledge.db"] }
7
+ * ```
8
+ *
9
+ * Tools: cave_add, cave_query, cave_fuse, cave_search, cave_about,
10
+ * cave_neighbors, cave_reconstruct, cave_derive, cave_export, cave_lint —
11
+ * plus one generated `act_<name>` tool per action declared in the store
12
+ * (spec §25.5), the governed write vocabulary. `cave_fuse` and
13
+ * `cave_derive` are named computation: agents delegate Bayesian fusion
14
+ * (spec §10.1) and rule derivation (spec §24) instead of doing the math
15
+ * in tokens. Server instructions carry the spec §22 compact card so
16
+ * connected models can write CAVE directly. `--read-only` /
17
+ * `--tools <list>` narrow the served surface — the minimum viable agent
18
+ * permission boundary.
19
+ */
20
+ export { agentSource, createServer, serve, instructions, instructionsFor, protocolVersion, serverInfo, specCard } from "./server.js";
21
+ export { runMcp } from "./main.js";
22
+ export { actionTools, actToolName, actToolPrefix, allowsActions, permissions, scopedActionTools, scopedTools, tools } from "./tools.js";
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEpI,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `cave mcp` entry — opens the knowledge database and serves MCP on stdio
3
+ * until the client disconnects. Everything written to stdout is protocol;
4
+ * the startup banner goes to stderr.
5
+ */
6
+ export declare const usage = "cave mcp \u2014 serve a CAVE knowledge database as an MCP server on stdio\n\nUsage:\n cave mcp [--db <path>] [--no-prelude] [--read-only]\n [--permissions <list>] [--tools <list>]\n [--src <context>] [--no-src] [--hooks <file>]\n\nOptions:\n --db <path> database file (default: $CAVE_DB, or cave.db)\n --no-prelude open the store without the standard verb registry\n --read-only serve only tools that never write (drops cave_add,\n cave_derive and the generated act_<name> action tools)\n --permissions serve only operation classes from read,evaluate,record,\n action (comma-separated); evaluation is ephemeral,\n recording is durable, and action may execute effects\n --tools <list> serve only these tools (comma-separated); --read-only\n still drops writing tools from the list; act_<name>\n entries scope whichever actions exist at call time\n --src <context> provenance stamp for appends, without the src: prefix\n (default: agent/<client-name> from the MCP handshake)\n --no-src do not stamp actor provenance on appends\n --hooks <file> JSON file of out-of-band hook command templates for\n action tools, name \u2192 shell template (spec \u00A725.4);\n default: $CAVE_HOOKS\n\nAppended claims that carry no @src: context are stamped with the\nconnected client's source context (spec \u00A79.5). Actions declared in the\nstore are served as generated act_<name> tools (spec \u00A725.5) \u2014 the\ngoverned write vocabulary \u2014 recomputed per tools/list. Tools outside the\nserved scope are absent from tools/list and unknown to tools/call. Runs\nuntil the client disconnects; stdout is protocol, diagnostics go to\nstderr.\n\nExamples:\n cave mcp --db k.db\n cave mcp --db k.db --read-only\n cave mcp --db k.db --permissions read,evaluate\n cave mcp --db k.db --permissions action --tools act_mark-deployed\n cave mcp --db k.db --tools cave_query,cave_about,cave_search\n cave mcp --db k.db --tools cave_query,act_mark-deployed\n cave mcp --db k.db --hooks hooks.json\n cave mcp --db k.db --src pipeline/nightly\n claude mcp add cave -- cave mcp --db k.db";
7
+ /**
8
+ * Loads a hooks configuration file (spec §25.4): a JSON object mapping
9
+ * hook names to shell command templates. Throws on anything else — a
10
+ * misconfigured side-effect surface must not come up at all.
11
+ */
12
+ export declare const readHooks: (path: string) => Record<string, string>;
13
+ export type RunContext = {
14
+ readonly stdin?: NodeJS.ReadableStream;
15
+ readonly stdout?: NodeJS.WritableStream;
16
+ readonly stderr?: NodeJS.WritableStream;
17
+ readonly signal?: AbortSignal;
18
+ };
19
+ /** Validates the single accepted `--src` spelling: a non-empty context token without `src:`. */
20
+ export declare const sourceFromOption: (value: undefined | string) => undefined | string;
21
+ /** Runs the server; resolves with the process exit code. */
22
+ export declare const runMcp: (argv: readonly string[], context?: RunContext) => Promise<number>;
23
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,eAAO,MAAM,KAAK,wuEA0C0B,CAAA;AAE5C;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAO7D,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACtC,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,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,GAAI,OAAO,SAAS,GAAG,MAAM,KAAG,SAAS,GAAG,MASxE,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,MAAM,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,UAAS,UAAe,KAAG,OAAO,CAAC,MAAM,CAuE9F,CAAA"}