@cavelang/cli 0.27.14 → 0.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/Authors.md +5 -0
  2. package/License.md +6 -0
  3. package/README.md +122 -24
  4. package/dist/internal/act/action.d.ts +69 -0
  5. package/dist/internal/act/action.d.ts.map +1 -0
  6. package/dist/internal/act/action.js +201 -0
  7. package/dist/internal/act/action.js.map +1 -0
  8. package/dist/internal/act/declare.d.ts +102 -0
  9. package/dist/internal/act/declare.d.ts.map +1 -0
  10. package/dist/internal/act/declare.js +270 -0
  11. package/dist/internal/act/declare.js.map +1 -0
  12. package/dist/internal/act/engine.d.ts +103 -0
  13. package/dist/internal/act/engine.d.ts.map +1 -0
  14. package/dist/internal/act/engine.js +298 -0
  15. package/dist/internal/act/engine.js.map +1 -0
  16. package/dist/internal/act/index.d.ts +27 -0
  17. package/dist/internal/act/index.d.ts.map +1 -0
  18. package/dist/internal/act/index.js +25 -0
  19. package/dist/internal/act/index.js.map +1 -0
  20. package/dist/internal/automate/automation.d.ts +78 -0
  21. package/dist/internal/automate/automation.d.ts.map +1 -0
  22. package/dist/internal/automate/automation.js +135 -0
  23. package/dist/internal/automate/automation.js.map +1 -0
  24. package/dist/internal/automate/declare.d.ts +84 -0
  25. package/dist/internal/automate/declare.d.ts.map +1 -0
  26. package/dist/internal/automate/declare.js +233 -0
  27. package/dist/internal/automate/declare.js.map +1 -0
  28. package/dist/internal/automate/engine.d.ts +125 -0
  29. package/dist/internal/automate/engine.d.ts.map +1 -0
  30. package/dist/internal/automate/engine.js +388 -0
  31. package/dist/internal/automate/engine.js.map +1 -0
  32. package/dist/internal/automate/index.d.ts +28 -0
  33. package/dist/internal/automate/index.d.ts.map +1 -0
  34. package/dist/internal/automate/index.js +26 -0
  35. package/dist/internal/automate/index.js.map +1 -0
  36. package/dist/internal/automate/main.d.ts +26 -0
  37. package/dist/internal/automate/main.d.ts.map +1 -0
  38. package/dist/internal/automate/main.js +298 -0
  39. package/dist/internal/automate/main.js.map +1 -0
  40. package/dist/internal/connect/index.d.ts +26 -0
  41. package/dist/internal/connect/index.d.ts.map +1 -0
  42. package/dist/internal/connect/index.js +24 -0
  43. package/dist/internal/connect/index.js.map +1 -0
  44. package/dist/internal/connect/main.d.ts +23 -0
  45. package/dist/internal/connect/main.d.ts.map +1 -0
  46. package/dist/internal/connect/main.js +330 -0
  47. package/dist/internal/connect/main.js.map +1 -0
  48. package/dist/internal/connect/run.d.ts +85 -0
  49. package/dist/internal/connect/run.d.ts.map +1 -0
  50. package/dist/internal/connect/run.js +242 -0
  51. package/dist/internal/connect/run.js.map +1 -0
  52. package/dist/internal/connect/source.d.ts +44 -0
  53. package/dist/internal/connect/source.d.ts.map +1 -0
  54. package/dist/internal/connect/source.js +215 -0
  55. package/dist/internal/connect/source.js.map +1 -0
  56. package/dist/internal/connect/template.d.ts +69 -0
  57. package/dist/internal/connect/template.d.ts.map +1 -0
  58. package/dist/internal/connect/template.js +221 -0
  59. package/dist/internal/connect/template.js.map +1 -0
  60. package/dist/internal/eval/index.d.ts +28 -0
  61. package/dist/internal/eval/index.d.ts.map +1 -0
  62. package/dist/internal/eval/index.js +27 -0
  63. package/dist/internal/eval/index.js.map +1 -0
  64. package/dist/internal/eval/judge.d.ts +30 -0
  65. package/dist/internal/eval/judge.d.ts.map +1 -0
  66. package/dist/internal/eval/judge.js +101 -0
  67. package/dist/internal/eval/judge.js.map +1 -0
  68. package/dist/internal/eval/loop.d.ts +64 -0
  69. package/dist/internal/eval/loop.d.ts.map +1 -0
  70. package/dist/internal/eval/loop.js +123 -0
  71. package/dist/internal/eval/loop.js.map +1 -0
  72. package/dist/internal/eval/main.d.ts +17 -0
  73. package/dist/internal/eval/main.d.ts.map +1 -0
  74. package/dist/internal/eval/main.js +236 -0
  75. package/dist/internal/eval/main.js.map +1 -0
  76. package/dist/internal/eval/queries.d.ts +74 -0
  77. package/dist/internal/eval/queries.d.ts.map +1 -0
  78. package/dist/internal/eval/queries.js +161 -0
  79. package/dist/internal/eval/queries.js.map +1 -0
  80. package/dist/internal/eval/run.d.ts +143 -0
  81. package/dist/internal/eval/run.d.ts.map +1 -0
  82. package/dist/internal/eval/run.js +376 -0
  83. package/dist/internal/eval/run.js.map +1 -0
  84. package/dist/internal/eval/score.d.ts +81 -0
  85. package/dist/internal/eval/score.d.ts.map +1 -0
  86. package/dist/internal/eval/score.js +126 -0
  87. package/dist/internal/eval/score.js.map +1 -0
  88. package/dist/internal/eval/suite.d.ts +66 -0
  89. package/dist/internal/eval/suite.d.ts.map +1 -0
  90. package/dist/internal/eval/suite.js +130 -0
  91. package/dist/internal/eval/suite.js.map +1 -0
  92. package/dist/internal/ingest/context.d.ts +20 -0
  93. package/dist/internal/ingest/context.d.ts.map +1 -0
  94. package/dist/internal/ingest/context.js +59 -0
  95. package/dist/internal/ingest/context.js.map +1 -0
  96. package/dist/internal/ingest/files.d.ts +46 -0
  97. package/dist/internal/ingest/files.d.ts.map +1 -0
  98. package/dist/internal/ingest/files.js +115 -0
  99. package/dist/internal/ingest/files.js.map +1 -0
  100. package/dist/internal/ingest/index.d.ts +31 -0
  101. package/dist/internal/ingest/index.d.ts.map +1 -0
  102. package/dist/internal/ingest/index.js +29 -0
  103. package/dist/internal/ingest/index.js.map +1 -0
  104. package/dist/internal/ingest/main.d.ts +12 -0
  105. package/dist/internal/ingest/main.d.ts.map +1 -0
  106. package/dist/internal/ingest/main.js +180 -0
  107. package/dist/internal/ingest/main.js.map +1 -0
  108. package/dist/internal/ingest/prompt.d.ts +32 -0
  109. package/dist/internal/ingest/prompt.d.ts.map +1 -0
  110. package/dist/internal/ingest/prompt.js +75 -0
  111. package/dist/internal/ingest/prompt.js.map +1 -0
  112. package/dist/internal/ingest/run.d.ts +142 -0
  113. package/dist/internal/ingest/run.d.ts.map +1 -0
  114. package/dist/internal/ingest/run.js +350 -0
  115. package/dist/internal/ingest/run.js.map +1 -0
  116. package/dist/internal/ingest/web.d.ts +48 -0
  117. package/dist/internal/ingest/web.d.ts.map +1 -0
  118. package/dist/internal/ingest/web.js +140 -0
  119. package/dist/internal/ingest/web.js.map +1 -0
  120. package/dist/internal/loop/demo.d.ts +22 -0
  121. package/dist/internal/loop/demo.d.ts.map +1 -0
  122. package/dist/internal/loop/demo.js +67 -0
  123. package/dist/internal/loop/demo.js.map +1 -0
  124. package/dist/internal/loop/index.d.ts +20 -0
  125. package/dist/internal/loop/index.d.ts.map +1 -0
  126. package/dist/internal/loop/index.js +17 -0
  127. package/dist/internal/loop/index.js.map +1 -0
  128. package/dist/internal/loop/llm.d.ts +99 -0
  129. package/dist/internal/loop/llm.d.ts.map +1 -0
  130. package/dist/internal/loop/llm.js +231 -0
  131. package/dist/internal/loop/llm.js.map +1 -0
  132. package/dist/internal/loop/reconstruct.d.ts +87 -0
  133. package/dist/internal/loop/reconstruct.d.ts.map +1 -0
  134. package/dist/internal/loop/reconstruct.js +157 -0
  135. package/dist/internal/loop/reconstruct.js.map +1 -0
  136. package/dist/internal/loop/sqlite.d.ts +13 -0
  137. package/dist/internal/loop/sqlite.d.ts.map +1 -0
  138. package/dist/internal/loop/sqlite.js +33 -0
  139. package/dist/internal/loop/sqlite.js.map +1 -0
  140. package/dist/internal/loop/store.d.ts +50 -0
  141. package/dist/internal/loop/store.d.ts.map +1 -0
  142. package/dist/internal/loop/store.js +100 -0
  143. package/dist/internal/loop/store.js.map +1 -0
  144. package/dist/internal/mcp/bin.d.ts +7 -0
  145. package/dist/internal/mcp/bin.d.ts.map +1 -0
  146. package/dist/internal/mcp/bin.js +8 -0
  147. package/dist/internal/mcp/bin.js.map +1 -0
  148. package/dist/internal/mcp/index.d.ts +25 -0
  149. package/dist/internal/mcp/index.d.ts.map +1 -0
  150. package/dist/internal/mcp/index.js +23 -0
  151. package/dist/internal/mcp/index.js.map +1 -0
  152. package/dist/internal/mcp/main.d.ts +23 -0
  153. package/dist/internal/mcp/main.d.ts.map +1 -0
  154. package/dist/internal/mcp/main.js +156 -0
  155. package/dist/internal/mcp/main.js.map +1 -0
  156. package/dist/internal/mcp/server.d.ts +92 -0
  157. package/dist/internal/mcp/server.d.ts.map +1 -0
  158. package/dist/internal/mcp/server.js +251 -0
  159. package/dist/internal/mcp/server.js.map +1 -0
  160. package/dist/internal/mcp/tools.d.ts +91 -0
  161. package/dist/internal/mcp/tools.d.ts.map +1 -0
  162. package/dist/internal/mcp/tools.js +584 -0
  163. package/dist/internal/mcp/tools.js.map +1 -0
  164. package/dist/internal/rules/declare.d.ts +58 -0
  165. package/dist/internal/rules/declare.d.ts.map +1 -0
  166. package/dist/internal/rules/declare.js +152 -0
  167. package/dist/internal/rules/declare.js.map +1 -0
  168. package/dist/internal/rules/engine.d.ts +125 -0
  169. package/dist/internal/rules/engine.d.ts.map +1 -0
  170. package/dist/internal/rules/engine.js +575 -0
  171. package/dist/internal/rules/engine.js.map +1 -0
  172. package/dist/internal/rules/index.d.ts +23 -0
  173. package/dist/internal/rules/index.d.ts.map +1 -0
  174. package/dist/internal/rules/index.js +21 -0
  175. package/dist/internal/rules/index.js.map +1 -0
  176. package/dist/internal/rules/rule.d.ts +88 -0
  177. package/dist/internal/rules/rule.d.ts.map +1 -0
  178. package/dist/internal/rules/rule.js +221 -0
  179. package/dist/internal/rules/rule.js.map +1 -0
  180. package/dist/internal/shape/check.d.ts +118 -0
  181. package/dist/internal/shape/check.d.ts.map +1 -0
  182. package/dist/internal/shape/check.js +331 -0
  183. package/dist/internal/shape/check.js.map +1 -0
  184. package/dist/internal/shape/client.d.ts +31 -0
  185. package/dist/internal/shape/client.d.ts.map +1 -0
  186. package/dist/internal/shape/client.js +170 -0
  187. package/dist/internal/shape/client.js.map +1 -0
  188. package/dist/internal/shape/gate.d.ts +33 -0
  189. package/dist/internal/shape/gate.d.ts.map +1 -0
  190. package/dist/internal/shape/gate.js +0 -0
  191. package/dist/internal/shape/gate.js.map +1 -0
  192. package/dist/internal/shape/index.d.ts +27 -0
  193. package/dist/internal/shape/index.d.ts.map +1 -0
  194. package/dist/internal/shape/index.js +23 -0
  195. package/dist/internal/shape/index.js.map +1 -0
  196. package/dist/internal/shape/suggest.d.ts +82 -0
  197. package/dist/internal/shape/suggest.d.ts.map +1 -0
  198. package/dist/internal/shape/suggest.js +374 -0
  199. package/dist/internal/shape/suggest.js.map +1 -0
  200. package/dist/internal/sync/index.d.ts +22 -0
  201. package/dist/internal/sync/index.d.ts.map +1 -0
  202. package/dist/internal/sync/index.js +21 -0
  203. package/dist/internal/sync/index.js.map +1 -0
  204. package/dist/internal/sync/sync.d.ts +95 -0
  205. package/dist/internal/sync/sync.d.ts.map +1 -0
  206. package/dist/internal/sync/sync.js +342 -0
  207. package/dist/internal/sync/sync.js.map +1 -0
  208. package/dist/internal/view/api.d.ts +196 -0
  209. package/dist/internal/view/api.d.ts.map +1 -0
  210. package/dist/internal/view/api.js +189 -0
  211. package/dist/internal/view/api.js.map +1 -0
  212. package/dist/internal/view/index.d.ts +33 -0
  213. package/dist/internal/view/index.d.ts.map +1 -0
  214. package/dist/internal/view/index.js +30 -0
  215. package/dist/internal/view/index.js.map +1 -0
  216. package/dist/internal/view/main.d.ts +11 -0
  217. package/dist/internal/view/main.d.ts.map +1 -0
  218. package/dist/internal/view/main.js +98 -0
  219. package/dist/internal/view/main.js.map +1 -0
  220. package/dist/internal/view/page.d.ts +14 -0
  221. package/dist/internal/view/page.d.ts.map +1 -0
  222. package/dist/internal/view/page.js +370 -0
  223. package/dist/internal/view/page.js.map +1 -0
  224. package/dist/internal/view/report.d.ts +52 -0
  225. package/dist/internal/view/report.d.ts.map +1 -0
  226. package/dist/internal/view/report.js +367 -0
  227. package/dist/internal/view/report.js.map +1 -0
  228. package/dist/internal/view/scope.d.ts +11 -0
  229. package/dist/internal/view/scope.d.ts.map +1 -0
  230. package/dist/internal/view/scope.js +41 -0
  231. package/dist/internal/view/scope.js.map +1 -0
  232. package/dist/internal/view/server.d.ts +35 -0
  233. package/dist/internal/view/server.d.ts.map +1 -0
  234. package/dist/internal/view/server.js +141 -0
  235. package/dist/internal/view/server.js.map +1 -0
  236. package/dist/src/act.d.ts +3 -0
  237. package/dist/src/act.d.ts.map +1 -0
  238. package/dist/src/act.js +3 -0
  239. package/dist/src/act.js.map +1 -0
  240. package/dist/src/automate.d.ts +3 -0
  241. package/dist/src/automate.d.ts.map +1 -0
  242. package/dist/src/automate.js +3 -0
  243. package/dist/src/automate.js.map +1 -0
  244. package/dist/src/cli.d.ts +24 -17
  245. package/dist/src/cli.d.ts.map +1 -1
  246. package/dist/src/cli.js +408 -107
  247. package/dist/src/cli.js.map +1 -1
  248. package/dist/src/commands.d.ts +104 -0
  249. package/dist/src/commands.d.ts.map +1 -0
  250. package/dist/src/commands.js +33 -0
  251. package/dist/src/commands.js.map +1 -0
  252. package/dist/src/connect.d.ts +3 -0
  253. package/dist/src/connect.d.ts.map +1 -0
  254. package/dist/src/connect.js +3 -0
  255. package/dist/src/connect.js.map +1 -0
  256. package/dist/src/dispatch.d.ts +14 -0
  257. package/dist/src/dispatch.d.ts.map +1 -0
  258. package/dist/src/dispatch.js +116 -0
  259. package/dist/src/dispatch.js.map +1 -0
  260. package/dist/src/doctor.d.ts +45 -0
  261. package/dist/src/doctor.d.ts.map +1 -0
  262. package/dist/src/doctor.js +284 -0
  263. package/dist/src/doctor.js.map +1 -0
  264. package/dist/src/eval.d.ts +3 -0
  265. package/dist/src/eval.d.ts.map +1 -0
  266. package/dist/src/eval.js +3 -0
  267. package/dist/src/eval.js.map +1 -0
  268. package/dist/src/index.d.ts +9 -2
  269. package/dist/src/index.d.ts.map +1 -1
  270. package/dist/src/index.js +6 -2
  271. package/dist/src/index.js.map +1 -1
  272. package/dist/src/ingest.d.ts +3 -0
  273. package/dist/src/ingest.d.ts.map +1 -0
  274. package/dist/src/ingest.js +3 -0
  275. package/dist/src/ingest.js.map +1 -0
  276. package/dist/src/loop.d.ts +3 -0
  277. package/dist/src/loop.d.ts.map +1 -0
  278. package/dist/src/loop.js +3 -0
  279. package/dist/src/loop.js.map +1 -0
  280. package/dist/src/main.d.ts +1 -1
  281. package/dist/src/main.d.ts.map +1 -1
  282. package/dist/src/main.js +3 -75
  283. package/dist/src/main.js.map +1 -1
  284. package/dist/src/mcp.d.ts +3 -0
  285. package/dist/src/mcp.d.ts.map +1 -0
  286. package/dist/src/mcp.js +3 -0
  287. package/dist/src/mcp.js.map +1 -0
  288. package/dist/src/rules.d.ts +3 -0
  289. package/dist/src/rules.d.ts.map +1 -0
  290. package/dist/src/rules.js +3 -0
  291. package/dist/src/rules.js.map +1 -0
  292. package/dist/src/shape.d.ts +3 -0
  293. package/dist/src/shape.d.ts.map +1 -0
  294. package/dist/src/shape.js +3 -0
  295. package/dist/src/shape.js.map +1 -0
  296. package/dist/src/sync.d.ts +3 -0
  297. package/dist/src/sync.d.ts.map +1 -0
  298. package/dist/src/sync.js +3 -0
  299. package/dist/src/sync.js.map +1 -0
  300. package/dist/src/view.d.ts +3 -0
  301. package/dist/src/view.d.ts.map +1 -0
  302. package/dist/src/view.js +3 -0
  303. package/dist/src/view.js.map +1 -0
  304. package/package.json +81 -21
  305. package/src/act.ts +2 -0
  306. package/src/automate.ts +2 -0
  307. package/src/cli.ts +416 -102
  308. package/src/commands.ts +48 -0
  309. package/src/connect.ts +2 -0
  310. package/src/dispatch.ts +141 -0
  311. package/src/doctor.ts +370 -0
  312. package/src/eval.ts +2 -0
  313. package/src/index.ts +9 -2
  314. package/src/ingest.ts +2 -0
  315. package/src/loop.ts +2 -0
  316. package/src/main.ts +3 -66
  317. package/src/mcp.ts +2 -0
  318. package/src/rules.ts +2 -0
  319. package/src/shape.ts +2 -0
  320. package/src/sync.ts +2 -0
  321. package/src/view.ts +2 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `@cavelang/cli/shape` — shape expectations, knowledge health (spec §20) and
3
+ * alias discovery (spec §27).
4
+ *
5
+ * ```ts
6
+ * import { check, gatedIngest, suggestAliases } from '@cavelang/cli/shape'
7
+ *
8
+ * store.ingest('service EXPECTS owner\napi-gateway IS service')
9
+ * check(store).violations
10
+ * // → [{ entity: 'api-gateway', via: 'service', expectation: { …, name: 'owner' } }]
11
+ *
12
+ * gatedIngest(store, 'cache IS service', { source: 'cli' })
13
+ * // → { ok: false, violations: […] } — rolled back, nothing appended
14
+ *
15
+ * suggestAliases(store).map(suggestion => suggestion.line)
16
+ * // → ['maria ALIAS grandma-maria #suggested @ 35% ; segments of maria within grandma-maria']
17
+ * ```
18
+ */
19
+ export { check, defaultStaleDays, evaluate, expectations } from './check.ts';
20
+ export type { Coverage, Disagreement, Evaluation, Expectation, Options, Report, Stale, Violation } from './check.ts';
21
+ export { gatedIngest, violationKey } from './gate.ts';
22
+ export type { GateResult } from './gate.ts';
23
+ export { clientFormatVersion, generateClient } from './client.ts';
24
+ export type { ClientField, ClientGeneration, ClientGenerationFailure, GeneratedClient } from './client.ts';
25
+ export { defaultMinScore, judgePrompt, parseJudgeReply, suggestAliases, suggestSource, suggestTag, writeSuggestions } from './suggest.ts';
26
+ export type { Signal, Suggestion, Options as SuggestOptions } from './suggest.ts';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5E,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACpH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC1G,OAAO,EACL,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAC3G,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `@cavelang/cli/shape` — shape expectations, knowledge health (spec §20) and
3
+ * alias discovery (spec §27).
4
+ *
5
+ * ```ts
6
+ * import { check, gatedIngest, suggestAliases } from '@cavelang/cli/shape'
7
+ *
8
+ * store.ingest('service EXPECTS owner\napi-gateway IS service')
9
+ * check(store).violations
10
+ * // → [{ entity: 'api-gateway', via: 'service', expectation: { …, name: 'owner' } }]
11
+ *
12
+ * gatedIngest(store, 'cache IS service', { source: 'cli' })
13
+ * // → { ok: false, violations: […] } — rolled back, nothing appended
14
+ *
15
+ * suggestAliases(store).map(suggestion => suggestion.line)
16
+ * // → ['maria ALIAS grandma-maria #suggested @ 35% ; segments of maria within grandma-maria']
17
+ * ```
18
+ */
19
+ export { check, defaultStaleDays, evaluate, expectations } from "./check.js";
20
+ export { gatedIngest, violationKey } from "./gate.js";
21
+ export { clientFormatVersion, generateClient } from "./client.js";
22
+ export { defaultMinScore, judgePrompt, parseJudgeReply, suggestAliases, suggestSource, suggestTag, writeSuggestions } from "./suggest.js";
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjE,OAAO,EACL,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAC3G,MAAM,cAAc,CAAA"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Alias discovery (spec §27) — propose same-entity candidates for review.
3
+ *
4
+ * §13.6 made merge and unmerge cheap; under LLM extraction the bottleneck
5
+ * is *noticing* that `maria` and `grandma-maria` drifted apart. Everything
6
+ * here is a read: candidates are scored by deterministic, explainable
7
+ * string and graph signals, and the output is *suggested* `ALIAS` claims
8
+ * at low confidence (0.3–0.5 — the §20.2 review band), tagged `#suggested`,
9
+ * for a human to confirm or reject by ordinary appends. Discovery never
10
+ * merges; a pair with any recorded `ALIAS` history is never re-suggested,
11
+ * so review decisions stick. The optional LLM judge stays out-of-band
12
+ * (§19.5): a prompt/reply contract, injected by the caller.
13
+ */
14
+ import type { Store } from '@cavelang/store';
15
+ /** One piece of evidence behind a suggestion (spec §27.2). */
16
+ export type Signal = {
17
+ /** `equal`/`tokens`/`prefix`/`edit` are string signals, `value`/`neighbor` graph signals. */
18
+ readonly kind: 'equal' | 'tokens' | 'prefix' | 'edit' | 'value' | 'neighbor';
19
+ readonly score: number;
20
+ /** Human-readable evidence, also emitted as the suggested line's comment. */
21
+ readonly detail: string;
22
+ };
23
+ /** One proposed same-entity pair (spec §27), strongest first in results. */
24
+ export type Suggestion = {
25
+ /** The less-established name — subject of the suggested claim. */
26
+ readonly entity: string;
27
+ /** The more-established name — object of the suggested claim. */
28
+ readonly canonical: string;
29
+ /** Combined evidence score in 0..1 (spec §27.2). */
30
+ readonly score: number;
31
+ /** `score / 2`, clamped to 0.3..0.5 — the §20.2 review band. */
32
+ readonly confidence: number;
33
+ readonly signals: readonly Signal[];
34
+ /** The suggested claim as CAVE text: `entity ALIAS canonical #suggested @ N% ; evidence`. */
35
+ readonly line: string;
36
+ };
37
+ export type Options = {
38
+ /** Minimum evidence score (spec §27.2), default {@link defaultMinScore}. */
39
+ readonly minScore?: number;
40
+ /** At most this many suggestions, strongest first. */
41
+ readonly limit?: number;
42
+ };
43
+ export declare const defaultMinScore = 0.6;
44
+ /** Actor stamped on written suggestions (spec §9.5, §27.3). */
45
+ export declare const suggestSource = "suggest/alias";
46
+ /** Tag carried by every suggested claim, so review can find them (§13.5). */
47
+ export declare const suggestTag = "suggested";
48
+ /**
49
+ * Proposes same-entity candidates over current beliefs (spec §27),
50
+ * strongest first. Deterministic: string similarity and shared rare
51
+ * attribute values generate candidates, shared relation neighbors boost
52
+ * them, and every excluded pair stays excluded — recorded `ALIAS` history
53
+ * in either direction (merged, rejected or unmerged), membership in one
54
+ * §13.6 closure group, a direct claim relating the two (related entities
55
+ * are distinct entities), or a scope-parent name (`auth` names a scope of
56
+ * `auth/middleware`, not an alias).
57
+ */
58
+ export declare const suggestAliases: (store: Store, options?: Options) => Suggestion[];
59
+ /**
60
+ * Appends suggestions as claims, stamped `@src:suggest/alias` (spec §9.5,
61
+ * §27.3). Once written, a pair has `ALIAS` history and is never suggested
62
+ * again — re-runs are naturally idempotent. Note the §13.6 consequence: a
63
+ * positive claim at any confidence links the alias closure; belief is
64
+ * graded, and review (confirm or retract) is the follow-up.
65
+ */
66
+ export declare const writeSuggestions: (store: Store, suggestions: readonly Suggestion[]) => {
67
+ appended: number;
68
+ };
69
+ /**
70
+ * The judge prompt (spec §27.4): every suggestion with its evidence and
71
+ * each side's current claims. The reply contract is one JSON array of the
72
+ * suggestion numbers that really are the same entity.
73
+ */
74
+ export declare const judgePrompt: (store: Store, suggestions: readonly Suggestion[]) => string;
75
+ /**
76
+ * Parses the judge's reply into validated 0-based suggestion indices. The
77
+ * *last* well-formed JSON array wins (agents often think aloud before
78
+ * answering); non-integer, out-of-range and duplicate entries are dropped
79
+ * rather than failing the run.
80
+ */
81
+ export declare const parseJudgeReply: (output: string, count: number) => number[];
82
+ //# sourceMappingURL=suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/suggest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAO,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAIjD,8DAA8D;AAC9D,MAAM,MAAM,MAAM,GAAG;IACnB,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,4EAA4E;AAC5E,MAAM,MAAM,UAAU,GAAG;IACvB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC,+DAA+D;AAC/D,eAAO,MAAM,aAAa,kBAAkB,CAAA;AAE5C,6EAA6E;AAC7E,eAAO,MAAM,UAAU,cAAc,CAAA;AAiOrC;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,UAAS,OAAY,KAAG,UAAU,EAuF9E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,EAAE,aAAa,SAAS,UAAU,EAAE,KAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAQjG,CAAA;AAUL;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,aAAa,SAAS,UAAU,EAAE,KAAG,MAoBnE,CAAA;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EAyBrE,CAAA"}
@@ -0,0 +1,374 @@
1
+ /**
2
+ * Alias discovery (spec §27) — propose same-entity candidates for review.
3
+ *
4
+ * §13.6 made merge and unmerge cheap; under LLM extraction the bottleneck
5
+ * is *noticing* that `maria` and `grandma-maria` drifted apart. Everything
6
+ * here is a read: candidates are scored by deterministic, explainable
7
+ * string and graph signals, and the output is *suggested* `ALIAS` claims
8
+ * at low confidence (0.3–0.5 — the §20.2 review band), tagged `#suggested`,
9
+ * for a human to confirm or reject by ordinary appends. Discovery never
10
+ * merges; a pair with any recorded `ALIAS` history is never re-suggested,
11
+ * so review decisions stick. The optional LLM judge stays out-of-band
12
+ * (§19.5): a prompt/reply contract, injected by the caller.
13
+ */
14
+ import { Verb } from '@cavelang/core';
15
+ import { QuerySql } from '@cavelang/store';
16
+ const currentSql = QuerySql.current();
17
+ export const defaultMinScore = 0.6;
18
+ /** Actor stamped on written suggestions (spec §9.5, §27.3). */
19
+ export const suggestSource = 'suggest/alias';
20
+ /** Tag carried by every suggested claim, so review can find them (§13.5). */
21
+ export const suggestTag = 'suggested';
22
+ /**
23
+ * System entities never suggested (spec §27.1): rules, actions, policy
24
+ * sources and connect records are infrastructure, and their digest-shaped
25
+ * names are string-similar by construction.
26
+ */
27
+ const reservedPrefixes = ['rule/', 'action/', 'source/', 'connect/'];
28
+ /** Entity test, as in §20's checks: not a verb token, not a stored literal. */
29
+ const isEntityName = (name) => !Verb.isVerbToken(name) && !name.startsWith('"') && !name.startsWith('`');
30
+ /** Lowercased with separators stripped — the comparison form. */
31
+ const norm = (name) => name.toLowerCase().replaceAll(/[-_./]+/g, '');
32
+ /** Lowercased `/-_.`-separated segments, deduplicated. */
33
+ const tokensOf = (name) => new Set(name.toLowerCase().split(/[-_./]+/).filter(token => token !== ''));
34
+ const stripDigits = (text) => text.replaceAll(/[0-9]+/g, '');
35
+ /**
36
+ * Names differing only in digits (`api-v1` vs `api-v2`) are versions or
37
+ * deliberate numbering more often than drift — prefix and edit similarity
38
+ * ignore such pairs (spec §27.2).
39
+ */
40
+ const digitOnlyDifference = (a, b) => a !== b && stripDigits(a) === stripDigits(b);
41
+ const editDistance = (a, b) => {
42
+ let previous = Array.from({ length: b.length + 1 }, (_, at) => at);
43
+ for (let i = 1; i <= a.length; i += 1) {
44
+ const next = [i];
45
+ for (let j = 1; j <= b.length; j += 1) {
46
+ next.push(Math.min(previous[j] + 1, next[j - 1] + 1, previous[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1)));
47
+ }
48
+ previous = next;
49
+ }
50
+ return previous[b.length];
51
+ };
52
+ /**
53
+ * Whether the segments the names do NOT share are themselves spelling
54
+ * variants (edit similarity ≥ 0.75). Distinguishes drift (`grandma-mria` /
55
+ * `grandma-maria`) from sibling naming (`north-tower` / `south-tower`) —
56
+ * whole-string similarity alone cannot tell a typo from a differing word.
57
+ */
58
+ const leftoverDrift = (a, b) => {
59
+ const [ta, tb] = [tokensOf(a), tokensOf(b)];
60
+ const leftA = [...ta].filter(token => !tb.has(token));
61
+ const leftB = [...tb].filter(token => !ta.has(token));
62
+ if (leftA.length === 0 || leftB.length === 0) {
63
+ return true;
64
+ }
65
+ const [small, large] = leftA.length <= leftB.length ? [leftA, leftB] : [leftB, leftA];
66
+ return small.every(token => large.some(other => 1 - editDistance(token, other) / Math.max(token.length, other.length) >= 0.75));
67
+ };
68
+ /**
69
+ * Order-free pair identity. Newline-joined: terms are single-line by
70
+ * construction (§3), so the join cannot collide.
71
+ */
72
+ const pairKey = (a, b) => a < b ? `${a}\n${b}` : `${b}\n${a}`;
73
+ const readGraph = (store) => {
74
+ const rows = store.db.prepare(`SELECT c.* FROM (${currentSql}) c WHERE c.conf > 0`).all();
75
+ // Entities carrying ingestion bookkeeping (`<path> HAS ingest-digest: …`)
76
+ // are file records, not domain entities — similar paths are not aliases.
77
+ const bookkeeping = new Set(rows.filter(row => row.attribute === 'ingest-digest').map(row => row.subject));
78
+ const isCandidate = (name) => isEntityName(name) && !bookkeeping.has(name) && norm(name) !== '' &&
79
+ !reservedPrefixes.some(prefix => name.startsWith(prefix));
80
+ const counts = new Map();
81
+ const count = (name) => {
82
+ if (isCandidate(name)) {
83
+ counts.set(name, (counts.get(name) ?? 0) + 1);
84
+ }
85
+ };
86
+ const neighbors = new Map();
87
+ const neighbor = (name, signature) => {
88
+ neighbors.set(name, (neighbors.get(name) ?? new Set()).add(signature));
89
+ };
90
+ const values = new Map();
91
+ const related = new Set();
92
+ const aliasParent = new Map();
93
+ const find = (name) => {
94
+ const up = aliasParent.get(name);
95
+ if (up === undefined || up === name) {
96
+ return name;
97
+ }
98
+ const root = find(up);
99
+ aliasParent.set(name, root);
100
+ return root;
101
+ };
102
+ for (const row of rows) {
103
+ count(row.subject);
104
+ if (row.object !== null) {
105
+ count(row.object);
106
+ related.add(pairKey(row.subject, row.object));
107
+ if (row.negated === 0 && row.verb === 'ALIAS') {
108
+ aliasParent.set(find(row.subject), find(row.object));
109
+ }
110
+ if (row.negated === 0 && row.verb !== 'ALIAS') {
111
+ neighbor(row.subject, `out ${row.verb} ${row.object}`);
112
+ neighbor(row.object, `in ${row.subject} ${row.verb}`);
113
+ }
114
+ }
115
+ // Only textual values long enough to be distinctive can identify —
116
+ // two entities measuring alike (`floors: 2`) are not one entity.
117
+ if (row.negated === 0 && row.attribute !== null && row.value_num === null &&
118
+ row.value_text !== null && row.value_text.length >= 4) {
119
+ const key = [row.attribute, row.value_text, row.value_unit ?? ''].join('\n');
120
+ values.set(key, (values.get(key) ?? new Set()).add(row.subject));
121
+ }
122
+ }
123
+ const decided = new Set(store.db.prepare("SELECT DISTINCT subject, object FROM cave_claim WHERE verb = 'ALIAS' AND object IS NOT NULL").all()
124
+ .map(row => pairKey(row.subject, row.object)));
125
+ const closureRoot = new Map([...counts.keys()].map(name => [name, find(name)]));
126
+ return { counts, neighbors, values, related, decided, closureRoot };
127
+ };
128
+ /** String and shared-value signals — the candidate-generating evidence (spec §27.2). */
129
+ const primarySignals = (a, b, graph) => {
130
+ const signals = [];
131
+ const [na, nb] = [norm(a), norm(b)];
132
+ if (na === nb) {
133
+ signals.push({ kind: 'equal', score: 1, detail: 'names equal ignoring case and separators' });
134
+ }
135
+ else {
136
+ const [ta, tb] = [tokensOf(a), tokensOf(b)];
137
+ const [small, large] = ta.size <= tb.size ? [ta, tb] : [tb, ta];
138
+ const subset = [...small].every(token => large.has(token));
139
+ if (subset && ta.size === tb.size) {
140
+ signals.push({ kind: 'tokens', score: 0.9, detail: 'same name segments, reordered' });
141
+ }
142
+ else if (subset && Math.min(na.length, nb.length) >= 3) {
143
+ const [short, long] = ta.size <= tb.size ? [a, b] : [b, a];
144
+ signals.push({ kind: 'tokens', score: 0.7, detail: `segments of ${short} within ${long}` });
145
+ }
146
+ if (!digitOnlyDifference(na, nb)) {
147
+ const [short, long] = na.length <= nb.length ? [a, b] : [b, a];
148
+ if (Math.min(na.length, nb.length) >= 4 && (na.startsWith(nb) || nb.startsWith(na))) {
149
+ signals.push({
150
+ kind: 'prefix',
151
+ score: Math.min(na.length, nb.length) / Math.max(na.length, nb.length),
152
+ detail: `${short} prefixes ${long}`
153
+ });
154
+ }
155
+ if (Math.min(na.length, nb.length) >= 5 && leftoverDrift(a, b)) {
156
+ const similarity = 1 - editDistance(na, nb) / Math.max(na.length, nb.length);
157
+ if (similarity >= 0.75) {
158
+ signals.push({ kind: 'edit', score: similarity, detail: `spelling ${Math.round(similarity * 100)}% similar` });
159
+ }
160
+ }
161
+ }
162
+ }
163
+ for (const [key, names] of graph.values) {
164
+ // Exactly the two candidates — a value shared more widely is a common
165
+ // category value (`status: active`), not an identity.
166
+ if (names.size === 2 && names.has(a) && names.has(b)) {
167
+ const [attribute, value, unit] = key.split('\n');
168
+ const shown = value.length > 40 ? `${value.slice(0, 40)}...` : value;
169
+ signals.push({ kind: 'value', score: 0.8, detail: `share ${attribute}: ${shown}${unit === '' ? '' : ` ${unit}`}` });
170
+ if (signals.filter(signal => signal.kind === 'value').length >= 2) {
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ return signals;
176
+ };
177
+ /** Shared relation neighbors — evidence that boosts, never generates (spec §27.2). */
178
+ const neighborSignals = (a, b, graph) => {
179
+ const from = graph.neighbors.get(a);
180
+ const other = graph.neighbors.get(b);
181
+ if (from === undefined || other === undefined) {
182
+ return [];
183
+ }
184
+ const signals = [];
185
+ for (const signature of from) {
186
+ if (other.has(signature)) {
187
+ const [side, first, second] = signature.split(' ');
188
+ signals.push({
189
+ kind: 'neighbor',
190
+ score: 0.1,
191
+ detail: side === 'out' ? `both ${first} ${second}` : `both object of ${first} ${second}`
192
+ });
193
+ if (signals.length >= 2) {
194
+ break;
195
+ }
196
+ }
197
+ }
198
+ return signals;
199
+ };
200
+ const formatPercent = (confidence) => `${Math.round(confidence * 100)}%`;
201
+ /**
202
+ * Proposes same-entity candidates over current beliefs (spec §27),
203
+ * strongest first. Deterministic: string similarity and shared rare
204
+ * attribute values generate candidates, shared relation neighbors boost
205
+ * them, and every excluded pair stays excluded — recorded `ALIAS` history
206
+ * in either direction (merged, rejected or unmerged), membership in one
207
+ * §13.6 closure group, a direct claim relating the two (related entities
208
+ * are distinct entities), or a scope-parent name (`auth` names a scope of
209
+ * `auth/middleware`, not an alias).
210
+ */
211
+ export const suggestAliases = (store, options = {}) => {
212
+ const minScore = options.minScore ?? defaultMinScore;
213
+ const graph = readGraph(store);
214
+ const names = [...graph.counts.keys()].sort();
215
+ // Cheap blocking: a pair is worth scoring when the names share their
216
+ // first comparison character, a normalized suffix, a segment, or a rare
217
+ // value. The suffix block lets leading-character edits reach the existing
218
+ // edit-distance and differing-segment guards.
219
+ const blocks = new Map();
220
+ const block = (key, name) => {
221
+ blocks.set(key, [...blocks.get(key) ?? [], name]);
222
+ };
223
+ for (const name of names) {
224
+ const normalized = norm(name);
225
+ block(`first ${normalized[0]}`, name);
226
+ if (normalized.length >= 5) {
227
+ block(`suffix ${normalized.slice(-4)}`, name);
228
+ }
229
+ for (const token of tokensOf(name)) {
230
+ block(`token ${token}`, name);
231
+ }
232
+ }
233
+ for (const [key, carriers] of graph.values) {
234
+ if (carriers.size === 2) {
235
+ for (const name of carriers) {
236
+ if (graph.counts.has(name)) {
237
+ block(`value ${key}`, name);
238
+ }
239
+ }
240
+ }
241
+ }
242
+ const excluded = (a, b) => {
243
+ const key = pairKey(a, b);
244
+ return graph.decided.has(key) || graph.related.has(key) ||
245
+ graph.closureRoot.get(a) === graph.closureRoot.get(b) ||
246
+ a.startsWith(`${b}/`) || b.startsWith(`${a}/`);
247
+ };
248
+ const seen = new Set();
249
+ const suggestions = [];
250
+ for (const bucket of blocks.values()) {
251
+ for (let i = 0; i < bucket.length; i += 1) {
252
+ for (let j = i + 1; j < bucket.length; j += 1) {
253
+ const [a, b] = [bucket[i], bucket[j]];
254
+ const key = pairKey(a, b);
255
+ if (seen.has(key)) {
256
+ continue;
257
+ }
258
+ seen.add(key);
259
+ if (excluded(a, b)) {
260
+ continue;
261
+ }
262
+ const primary = primarySignals(a, b, graph);
263
+ if (primary.length === 0) {
264
+ continue;
265
+ }
266
+ const boosts = neighborSignals(a, b, graph);
267
+ const score = Math.min(1, Math.max(...primary.map(signal => signal.score)) +
268
+ boosts.reduce((sum, signal) => sum + signal.score, 0));
269
+ if (score < minScore) {
270
+ continue;
271
+ }
272
+ // The more-established name is canonical: more current rows, then
273
+ // the shorter name, then lexicographic — a convention, not a
274
+ // semantic (§13.6 reads ALIAS as undirected).
275
+ const countOf = (name) => graph.counts.get(name) ?? 0;
276
+ const canonicalFirst = countOf(a) !== countOf(b) ?
277
+ countOf(a) > countOf(b) :
278
+ a.length !== b.length ? a.length < b.length : a < b;
279
+ const [entity, canonical] = canonicalFirst ? [b, a] : [a, b];
280
+ const signals = [...primary, ...boosts];
281
+ const confidence = Math.min(0.5, Math.max(0.3, Math.round(score * 50) / 100));
282
+ suggestions.push({
283
+ entity,
284
+ canonical,
285
+ score,
286
+ confidence,
287
+ signals,
288
+ line: `${entity} ALIAS ${canonical} #${suggestTag} @ ${formatPercent(confidence)}` +
289
+ ` ; ${signals.map(signal => signal.detail).join('; ')}`
290
+ });
291
+ }
292
+ }
293
+ }
294
+ suggestions.sort((a, b) => b.score - a.score || a.entity.localeCompare(b.entity) || a.canonical.localeCompare(b.canonical));
295
+ return options.limit === undefined ? suggestions : suggestions.slice(0, options.limit);
296
+ };
297
+ /**
298
+ * Appends suggestions as claims, stamped `@src:suggest/alias` (spec §9.5,
299
+ * §27.3). Once written, a pair has `ALIAS` history and is never suggested
300
+ * again — re-runs are naturally idempotent. Note the §13.6 consequence: a
301
+ * positive claim at any confidence links the alias closure; belief is
302
+ * graded, and review (confirm or retract) is the follow-up.
303
+ */
304
+ export const writeSuggestions = (store, suggestions) => suggestions.length === 0 ?
305
+ { appended: 0 } :
306
+ {
307
+ appended: store.ingest(suggestions.map(suggestion => suggestion.line).join('\n'), { source: suggestSource, strict: true }).ids.length
308
+ };
309
+ /** Current claims naming the entity, newest first — the judge's evidence. */
310
+ const evidenceOf = (store, entity, limit) => store.db.prepare(`
311
+ SELECT c.raw_line AS line FROM (${currentSql}) c
312
+ WHERE c.conf > 0 AND (c.subject = ? OR c.object = ?)
313
+ ORDER BY c.tx DESC LIMIT ?
314
+ `).all(entity, entity, limit).map(row => row.line);
315
+ /**
316
+ * The judge prompt (spec §27.4): every suggestion with its evidence and
317
+ * each side's current claims. The reply contract is one JSON array of the
318
+ * suggestion numbers that really are the same entity.
319
+ */
320
+ export const judgePrompt = (store, suggestions) => [
321
+ 'You are reviewing entity-alias suggestions for a CAVE knowledge store — one atomic claim',
322
+ 'per line: subject VERB object, or subject HAS attribute: value, with optional @context,',
323
+ '#tag and @ N% confidence.',
324
+ '',
325
+ 'Each numbered suggestion proposes that two names denote the SAME real-world entity.',
326
+ 'Below each suggestion are the current claims about either name. Confirm a suggestion ONLY',
327
+ 'when the claims are consistent with one entity — tolerate spelling, casing and phrasing',
328
+ 'drift, but never confirm names whose claims describe different things (different types,',
329
+ 'contradicting values, distinct roles in the same relation). Judge conservatively: when',
330
+ 'unsure, do not confirm.',
331
+ '',
332
+ ...suggestions.flatMap((suggestion, index) => [
333
+ `S${index + 1}: ${suggestion.line}`,
334
+ ...evidenceOf(store, suggestion.entity, 8).map(line => ` ${line}`),
335
+ ...evidenceOf(store, suggestion.canonical, 8).map(line => ` ${line}`),
336
+ ''
337
+ ]),
338
+ 'Reply with ONLY a JSON array of the suggestion numbers that ARE the same entity,',
339
+ 'e.g. [1, 3]. Reply [] when none are.'
340
+ ].join('\n');
341
+ /**
342
+ * Parses the judge's reply into validated 0-based suggestion indices. The
343
+ * *last* well-formed JSON array wins (agents often think aloud before
344
+ * answering); non-integer, out-of-range and duplicate entries are dropped
345
+ * rather than failing the run.
346
+ */
347
+ export const parseJudgeReply = (output, count) => {
348
+ let parsed;
349
+ let at = output.indexOf('[');
350
+ while (at !== -1) {
351
+ const end = output.indexOf(']', at);
352
+ if (end === -1) {
353
+ break;
354
+ }
355
+ try {
356
+ parsed = JSON.parse(output.slice(at, end + 1));
357
+ at = output.indexOf('[', end + 1);
358
+ }
359
+ catch {
360
+ at = output.indexOf('[', at + 1);
361
+ }
362
+ }
363
+ if (!Array.isArray(parsed)) {
364
+ return [];
365
+ }
366
+ const kept = new Set();
367
+ for (const entry of parsed) {
368
+ if (typeof entry === 'number' && Number.isInteger(entry) && entry >= 1 && entry <= count) {
369
+ kept.add(entry - 1);
370
+ }
371
+ }
372
+ return [...kept].sort((a, b) => a - b);
373
+ };
374
+ //# sourceMappingURL=suggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/suggest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `@cavelang/cli/sync` — store merge (spec §28).
3
+ *
4
+ * Merge append-only CAVE stores by row identity: rows absent by id copy
5
+ * verbatim, present ids skip — idempotent, transitive, conflict-free by
6
+ * construction (§9.4 coexistence). Sources are store files (`syncDb`) or
7
+ * §28.4 transaction-annotated canonical text (`syncText`,
8
+ * `cave export --tx`); effective merges append a `SYNCED-INTO` record
9
+ * claim, and merged transaction ids feed the §28.2 receive rule.
10
+ *
11
+ * ```ts
12
+ * import { open } from '@cavelang/store'
13
+ * import { syncDb } from '@cavelang/cli/sync'
14
+ *
15
+ * const store = open('main.db')
16
+ * syncDb(store, 'laptop.db', { from: 'laptop', into: 'main' })
17
+ * // → { merged: 42, skipped: 108, edges: 17, record: 'store/laptop SYNCED-INTO store/main ; …' }
18
+ * ```
19
+ */
20
+ export { isStoreFile, labelOf, sanitizeLabel, syncDb, syncFile, syncText } from './sync.ts';
21
+ export type { SyncOptions, SyncProblem, SyncReport } from './sync.ts';
22
+ //# 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,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC3F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `@cavelang/cli/sync` — store merge (spec §28).
3
+ *
4
+ * Merge append-only CAVE stores by row identity: rows absent by id copy
5
+ * verbatim, present ids skip — idempotent, transitive, conflict-free by
6
+ * construction (§9.4 coexistence). Sources are store files (`syncDb`) or
7
+ * §28.4 transaction-annotated canonical text (`syncText`,
8
+ * `cave export --tx`); effective merges append a `SYNCED-INTO` record
9
+ * claim, and merged transaction ids feed the §28.2 receive rule.
10
+ *
11
+ * ```ts
12
+ * import { open } from '@cavelang/store'
13
+ * import { syncDb } from '@cavelang/cli/sync'
14
+ *
15
+ * const store = open('main.db')
16
+ * syncDb(store, 'laptop.db', { from: 'laptop', into: 'main' })
17
+ * // → { merged: 42, skipped: 108, edges: 17, record: 'store/laptop SYNCED-INTO store/main ; …' }
18
+ * ```
19
+ */
20
+ export { isStoreFile, labelOf, sanitizeLabel, syncDb, syncFile, syncText } from "./sync.js";
21
+ //# 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,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA"}