kibi-cli 1.0.1 → 2.1.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 (548) hide show
  1. package/dist/cli-errors.d.ts +3 -1
  2. package/dist/cli-errors.d.ts.map +1 -1
  3. package/dist/cli-errors.js +4 -1
  4. package/dist/cli-json-command.d.ts +1 -0
  5. package/dist/cli-json-command.d.ts.map +1 -1
  6. package/dist/cli-json-command.js +13 -4
  7. package/dist/cli-operation-loader.js +3 -3
  8. package/dist/cli-operation-metadata.d.ts +4 -3
  9. package/dist/cli-operation-metadata.d.ts.map +1 -1
  10. package/dist/cli-operation-metadata.js +7 -5
  11. package/dist/cli-protocol.js +1 -1
  12. package/dist/cli-register-maintenance.d.ts.map +1 -1
  13. package/dist/cli-register-maintenance.js +7 -0
  14. package/dist/cli-register-proof.d.ts +3 -0
  15. package/dist/cli-register-proof.d.ts.map +1 -0
  16. package/dist/cli-register-proof.js +127 -0
  17. package/dist/cli-register-reporting.d.ts.map +1 -1
  18. package/dist/cli-register-reporting.js +7 -0
  19. package/dist/cli.d.ts +4 -0
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +19 -10
  22. package/dist/commands/branch.d.ts +1 -0
  23. package/dist/commands/branch.d.ts.map +1 -1
  24. package/dist/commands/branch.js +8 -4
  25. package/dist/commands/check-generated.d.ts +7 -0
  26. package/dist/commands/check-generated.d.ts.map +1 -0
  27. package/dist/commands/check-generated.js +192 -0
  28. package/dist/commands/check.d.ts +14 -0
  29. package/dist/commands/check.d.ts.map +1 -1
  30. package/dist/commands/check.js +193 -46
  31. package/dist/commands/coverage.d.ts +1 -0
  32. package/dist/commands/coverage.d.ts.map +1 -1
  33. package/dist/commands/coverage.js +6 -0
  34. package/dist/commands/doctor.d.ts +22 -0
  35. package/dist/commands/doctor.d.ts.map +1 -1
  36. package/dist/commands/doctor.js +170 -23
  37. package/dist/commands/engine.d.ts +12 -0
  38. package/dist/commands/engine.d.ts.map +1 -1
  39. package/dist/commands/engine.js +42 -0
  40. package/dist/commands/github-init.d.ts +1 -0
  41. package/dist/commands/github-init.d.ts.map +1 -1
  42. package/dist/commands/github-init.js +9 -5
  43. package/dist/commands/init-helpers.d.ts.map +1 -1
  44. package/dist/commands/init-helpers.js +49 -10
  45. package/dist/commands/migrate.d.ts +4 -0
  46. package/dist/commands/migrate.d.ts.map +1 -1
  47. package/dist/commands/migrate.js +7 -7
  48. package/dist/commands/proof-explain.d.ts +10 -0
  49. package/dist/commands/proof-explain.d.ts.map +1 -0
  50. package/dist/commands/proof-explain.js +45 -0
  51. package/dist/commands/proof-impact.d.ts +7 -0
  52. package/dist/commands/proof-impact.d.ts.map +1 -0
  53. package/dist/commands/proof-impact.js +39 -0
  54. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  55. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  56. package/dist/commands/proof-migrate-legacy.js +45 -0
  57. package/dist/commands/proof-prune.d.ts +8 -0
  58. package/dist/commands/proof-prune.d.ts.map +1 -0
  59. package/dist/commands/proof-prune.js +53 -0
  60. package/dist/commands/prove.d.ts +37 -0
  61. package/dist/commands/prove.d.ts.map +1 -0
  62. package/dist/commands/prove.js +470 -0
  63. package/dist/commands/report.d.ts.map +1 -1
  64. package/dist/commands/report.js +18 -3
  65. package/dist/commands/sync/discovery.d.ts +3 -0
  66. package/dist/commands/sync/discovery.d.ts.map +1 -1
  67. package/dist/commands/sync/discovery.js +36 -28
  68. package/dist/commands/sync/manifest.d.ts +2 -1
  69. package/dist/commands/sync/manifest.d.ts.map +1 -1
  70. package/dist/commands/sync/manifest.js +55 -21
  71. package/dist/commands/sync/persistence.d.ts +4 -1
  72. package/dist/commands/sync/persistence.d.ts.map +1 -1
  73. package/dist/commands/sync/persistence.js +31 -14
  74. package/dist/commands/sync/staging.d.ts +1 -0
  75. package/dist/commands/sync/staging.d.ts.map +1 -1
  76. package/dist/commands/sync/staging.js +5 -2
  77. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  78. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  79. package/dist/commands/sync/untracked-targets.js +108 -0
  80. package/dist/commands/sync.d.ts +11 -1
  81. package/dist/commands/sync.d.ts.map +1 -1
  82. package/dist/commands/sync.js +74 -30
  83. package/dist/engine-daemon.d.ts +3 -1
  84. package/dist/engine-daemon.d.ts.map +1 -1
  85. package/dist/engine-daemon.js +49 -20
  86. package/dist/engine.d.ts +17 -77
  87. package/dist/engine.d.ts.map +1 -1
  88. package/dist/engine.js +331 -91
  89. package/dist/env/bootstrap.d.ts +84 -0
  90. package/dist/env/bootstrap.d.ts.map +1 -0
  91. package/dist/env/bootstrap.js +310 -0
  92. package/dist/extractors/manifest.d.ts +5 -0
  93. package/dist/extractors/manifest.d.ts.map +1 -1
  94. package/dist/extractors/manifest.js +46 -1
  95. package/dist/extractors/markdown.d.ts +7 -3
  96. package/dist/extractors/markdown.d.ts.map +1 -1
  97. package/dist/extractors/markdown.js +60 -24
  98. package/dist/extractors/playwright-cases.js +1 -1
  99. package/dist/extractors/relationships.d.ts +6 -0
  100. package/dist/extractors/relationships.d.ts.map +1 -1
  101. package/dist/extractors/relationships.js +1 -1
  102. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  103. package/dist/extractors/symbols-coordinator.d.ts +8 -0
  104. package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
  105. package/dist/extractors/symbols-coordinator.js +40 -0
  106. package/dist/extractors/symbols-ts.d.ts +9 -19
  107. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  108. package/dist/extractors/symbols-ts.js +34 -429
  109. package/dist/intent-search.d.ts +1 -0
  110. package/dist/intent-search.d.ts.map +1 -1
  111. package/dist/intent-search.js +11 -8
  112. package/dist/logic/ir.d.ts +1 -0
  113. package/dist/logic/ir.d.ts.map +1 -1
  114. package/dist/logic/ir.js +1 -1
  115. package/dist/operations/bootstrap/activation.d.ts +2 -1
  116. package/dist/operations/bootstrap/activation.d.ts.map +1 -1
  117. package/dist/operations/bootstrap/activation.js +11 -3
  118. package/dist/operations/bootstrap/generate.d.ts +2 -1
  119. package/dist/operations/bootstrap/generate.d.ts.map +1 -1
  120. package/dist/operations/bootstrap/generate.js +6 -3
  121. package/dist/operations/bootstrap/guidance.d.ts +1 -0
  122. package/dist/operations/bootstrap/guidance.d.ts.map +1 -1
  123. package/dist/operations/bootstrap/guidance.js +1 -1
  124. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  125. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  126. package/dist/operations/modeling/model-requirement.js +57 -46
  127. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -1
  128. package/dist/operations/modeling/predicate-applicability.js +103 -4
  129. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  130. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  131. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  132. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  133. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  134. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  135. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  136. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  137. package/dist/operations/modeling/predicate-catalog.js +4 -0
  138. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  139. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  140. package/dist/operations/modeling/predicate-loader.js +4 -3
  141. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  142. package/dist/operations/modeling/predicate-ranker.js +4 -1
  143. package/dist/operations/modeling/predicate-types.d.ts +1 -1
  144. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  145. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  146. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  147. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  148. package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
  149. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  150. package/dist/operations/modeling/suggest-predicates.js +82 -22
  151. package/dist/operations/mutation/contradictions.d.ts +2 -1
  152. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  153. package/dist/operations/mutation/contradictions.js +26 -5
  154. package/dist/operations/mutation/delete.d.ts +3 -0
  155. package/dist/operations/mutation/delete.d.ts.map +1 -1
  156. package/dist/operations/mutation/delete.js +100 -32
  157. package/dist/operations/mutation/relationships.d.ts +1 -0
  158. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  159. package/dist/operations/mutation/relationships.js +6 -4
  160. package/dist/operations/mutation/saga.d.ts +51 -0
  161. package/dist/operations/mutation/saga.d.ts.map +1 -0
  162. package/dist/operations/mutation/saga.js +67 -0
  163. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  164. package/dist/operations/mutation/serialization.js +3 -2
  165. package/dist/operations/mutation/source-authoring.d.ts +5 -1
  166. package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
  167. package/dist/operations/mutation/source-authoring.js +79 -46
  168. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  169. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  170. package/dist/operations/mutation/strict-fact.js +8 -5
  171. package/dist/operations/mutation/symbol-compiler-lock.d.ts +5 -2
  172. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -1
  173. package/dist/operations/mutation/symbol-compiler-lock.js +65 -2
  174. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  175. package/dist/operations/mutation/symbol-granularity.js +11 -89
  176. package/dist/operations/mutation/symbol-refresh.d.ts +1 -0
  177. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  178. package/dist/operations/mutation/symbol-refresh.js +10 -8
  179. package/dist/operations/mutation/upsert.d.ts +18 -2
  180. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  181. package/dist/operations/mutation/upsert.js +86 -54
  182. package/dist/operations/mutation/validate-upsert.js +2 -2
  183. package/dist/operations/mutation/validation.d.ts.map +1 -1
  184. package/dist/operations/mutation/validation.js +46 -4
  185. package/dist/operations/mutation/warnings.d.ts +1 -0
  186. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  187. package/dist/operations/mutation/warnings.js +7 -5
  188. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  189. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  190. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  191. package/dist/operations/planning/apply-plan.d.ts +8 -106
  192. package/dist/operations/planning/apply-plan.d.ts.map +1 -1
  193. package/dist/operations/planning/apply-plan.js +113 -36
  194. package/dist/operations/planning/compile-intent.d.ts +51 -0
  195. package/dist/operations/planning/compile-intent.d.ts.map +1 -1
  196. package/dist/operations/planning/compile-intent.js +133 -17
  197. package/dist/operations/proof/baseline-diff.d.ts +41 -0
  198. package/dist/operations/proof/baseline-diff.d.ts.map +1 -0
  199. package/dist/operations/proof/baseline-diff.js +153 -0
  200. package/dist/operations/proof/explain.d.ts +75 -0
  201. package/dist/operations/proof/explain.d.ts.map +1 -0
  202. package/dist/operations/proof/explain.js +294 -0
  203. package/dist/operations/proof/impact.d.ts +45 -0
  204. package/dist/operations/proof/impact.d.ts.map +1 -0
  205. package/dist/operations/proof/impact.js +118 -0
  206. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  207. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  208. package/dist/operations/proof/ingest-proof.js +348 -0
  209. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  210. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  211. package/dist/operations/proof/migrate-legacy-receipts.js +92 -0
  212. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  213. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  214. package/dist/operations/proof/prune-receipts.js +91 -0
  215. package/dist/operations/proof/receipt-document.d.ts +29 -0
  216. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  217. package/dist/operations/proof/receipt-document.js +117 -0
  218. package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
  219. package/dist/operations/semantic-advisor/analysis-receipt.js +3 -9
  220. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  221. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  222. package/dist/operations/semantic-advisor/analyze-prose.js +64 -93
  223. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  224. package/dist/operations/semantic-advisor/clauses.js +20 -7
  225. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts +63 -0
  226. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts.map +1 -0
  227. package/dist/operations/semantic-advisor/plugin-orchestration.js +489 -0
  228. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +15 -2
  229. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -1
  230. package/dist/operations/semantic-advisor/predicate-rules-core.js +7 -140
  231. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +11 -12
  232. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -1
  233. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +6 -94
  234. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +16 -0
  235. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -1
  236. package/dist/operations/semantic-advisor/predicate-rules-policy.js +7 -150
  237. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +9 -0
  238. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -1
  239. package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +7 -102
  240. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +13 -0
  241. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -1
  242. package/dist/operations/semantic-advisor/predicate-rules-product.js +7 -133
  243. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  244. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  245. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  246. package/dist/operations/semantic-advisor/types.d.ts +1 -0
  247. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  248. package/dist/plugins/compose-ontology-packs.d.ts +51 -0
  249. package/dist/plugins/compose-ontology-packs.d.ts.map +1 -0
  250. package/dist/plugins/compose-ontology-packs.js +257 -0
  251. package/dist/plugins/compose-semantic-classifier.d.ts +42 -0
  252. package/dist/plugins/compose-semantic-classifier.d.ts.map +1 -0
  253. package/dist/plugins/compose-semantic-classifier.js +211 -0
  254. package/dist/plugins/external-allowlist.d.ts +10 -0
  255. package/dist/plugins/external-allowlist.d.ts.map +1 -0
  256. package/dist/plugins/external-allowlist.js +16 -0
  257. package/dist/plugins/index.d.ts +9 -0
  258. package/dist/plugins/index.d.ts.map +1 -0
  259. package/dist/plugins/index.js +33 -0
  260. package/dist/plugins/load-plugin.d.ts +19 -0
  261. package/dist/plugins/load-plugin.d.ts.map +1 -0
  262. package/dist/plugins/load-plugin.js +59 -0
  263. package/dist/plugins/project-config.d.ts +28 -0
  264. package/dist/plugins/project-config.d.ts.map +1 -0
  265. package/dist/plugins/project-config.js +90 -0
  266. package/dist/plugins/registry.d.ts +93 -0
  267. package/dist/plugins/registry.d.ts.map +1 -0
  268. package/dist/plugins/registry.js +338 -0
  269. package/dist/plugins/resolve-package.d.ts +47 -0
  270. package/dist/plugins/resolve-package.d.ts.map +1 -0
  271. package/dist/plugins/resolve-package.js +262 -0
  272. package/dist/plugins/source-analysis-service.d.ts +44 -0
  273. package/dist/plugins/source-analysis-service.d.ts.map +1 -0
  274. package/dist/plugins/source-analysis-service.js +232 -0
  275. package/dist/prolog/codec.d.ts +13 -1
  276. package/dist/prolog/codec.d.ts.map +1 -1
  277. package/dist/prolog/codec.js +269 -154
  278. package/dist/prolog/error-terms.d.ts +47 -0
  279. package/dist/prolog/error-terms.d.ts.map +1 -0
  280. package/dist/prolog/error-terms.js +334 -0
  281. package/dist/prolog/janitor.d.ts +50 -0
  282. package/dist/prolog/janitor.d.ts.map +1 -0
  283. package/dist/prolog/janitor.js +154 -0
  284. package/dist/prolog/store-lock.d.ts +45 -0
  285. package/dist/prolog/store-lock.d.ts.map +1 -0
  286. package/dist/prolog/store-lock.js +195 -0
  287. package/dist/prolog.d.ts +7 -0
  288. package/dist/prolog.d.ts.map +1 -1
  289. package/dist/prolog.js +55 -17
  290. package/dist/proof/evaluate.d.ts +27 -0
  291. package/dist/proof/evaluate.d.ts.map +1 -0
  292. package/dist/proof/evaluate.js +151 -0
  293. package/dist/proof/inspect.d.ts +12 -0
  294. package/dist/proof/inspect.d.ts.map +1 -0
  295. package/dist/proof/inspect.js +236 -0
  296. package/dist/proof/integrations.d.ts +35 -0
  297. package/dist/proof/integrations.d.ts.map +1 -0
  298. package/dist/proof/integrations.js +123 -0
  299. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  300. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  301. package/dist/proof/producers/junit-adapter.js +186 -0
  302. package/dist/{public → proof/producers}/playwright-case-id.d.ts +1 -1
  303. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  304. package/dist/{public → proof/producers}/playwright-case-id.js +1 -1
  305. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  306. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  307. package/dist/proof/producers/playwright-reporter.js +138 -0
  308. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  309. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  310. package/dist/proof/producers/tap-adapter.js +200 -0
  311. package/dist/proof/receipt-outcome.d.ts +2 -0
  312. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  313. package/dist/proof/receipt-outcome.js +1 -0
  314. package/dist/public/diagnostic-usage.js +6 -6
  315. package/dist/public/distribution-parity.d.ts +7 -1
  316. package/dist/public/distribution-parity.d.ts.map +1 -1
  317. package/dist/public/distribution-parity.js +15 -10
  318. package/dist/public/extractors/symbols-coordinator.d.ts +1 -1
  319. package/dist/public/extractors/symbols-coordinator.d.ts.map +1 -1
  320. package/dist/public/extractors/symbols-coordinator.js +1 -1
  321. package/dist/public/impact/analyzer.d.ts +1 -1
  322. package/dist/public/impact/analyzer.d.ts.map +1 -1
  323. package/dist/public/impact/analyzer.js +6 -4
  324. package/dist/public/impact/coverage-depth-quality.d.ts +1 -0
  325. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  326. package/dist/public/impact/coverage-depth-quality.js +1 -1
  327. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  328. package/dist/public/impact/diagnostics.js +2 -2
  329. package/dist/public/impact/diff-meaning.d.ts +1 -0
  330. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  331. package/dist/public/impact/diff-meaning.js +5 -2
  332. package/dist/public/impact/full-kb-quality.d.ts +5 -2
  333. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  334. package/dist/public/impact/full-kb-quality.js +329 -64
  335. package/dist/public/operations/catalog.d.ts +450 -196
  336. package/dist/public/operations/catalog.d.ts.map +1 -1
  337. package/dist/public/operations/catalog.js +6 -4
  338. package/dist/public/operations/check-executor.d.ts.map +1 -1
  339. package/dist/public/operations/check-executor.js +4 -8
  340. package/dist/public/operations/check-helpers.d.ts +1 -1
  341. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  342. package/dist/public/operations/check-helpers.js +1 -1
  343. package/dist/public/operations/contracts.d.ts +7 -0
  344. package/dist/public/operations/contracts.d.ts.map +1 -1
  345. package/dist/public/operations/contracts.js +66 -34
  346. package/dist/public/operations/discovery-entities.d.ts +15 -0
  347. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  348. package/dist/public/operations/discovery-entities.js +38 -0
  349. package/dist/public/operations/discovery-executors.d.ts +9 -9
  350. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  351. package/dist/public/operations/discovery-executors.js +39 -31
  352. package/dist/public/operations/index.d.ts +1 -1
  353. package/dist/public/operations/index.d.ts.map +1 -1
  354. package/dist/public/operations/index.js +1 -1
  355. package/dist/public/operations/migration-plan.d.ts +4 -3
  356. package/dist/public/operations/migration-plan.d.ts.map +1 -1
  357. package/dist/public/operations/migration-plan.js +23 -21
  358. package/dist/public/operations/node-ports.js +6 -6
  359. package/dist/public/operations/prolog-json.d.ts +1 -1
  360. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  361. package/dist/public/operations/prolog-json.js +7 -7
  362. package/dist/public/operations/repair-plan.d.ts +3 -3
  363. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  364. package/dist/public/operations/repair-plan.js +49 -19
  365. package/dist/public/operations/result-envelope.d.ts +1 -0
  366. package/dist/public/operations/result-envelope.d.ts.map +1 -1
  367. package/dist/public/operations/result-envelope.js +12 -10
  368. package/dist/public/operations/runtime-types.d.ts +21 -1
  369. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  370. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  371. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  372. package/dist/public/operations/specs/check-rules.generated.js +35 -0
  373. package/dist/public/operations/specs/check.d.ts +7 -2
  374. package/dist/public/operations/specs/check.d.ts.map +1 -1
  375. package/dist/public/operations/specs/check.js +8 -20
  376. package/dist/public/operations/specs/discovery.d.ts +3 -0
  377. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  378. package/dist/public/operations/specs/discovery.js +3 -0
  379. package/dist/public/operations/specs/mutation-schemas.d.ts +257 -163
  380. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  381. package/dist/public/operations/specs/mutation-schemas.js +15 -7
  382. package/dist/public/operations/specs/planning.d.ts +9 -0
  383. package/dist/public/operations/specs/planning.d.ts.map +1 -1
  384. package/dist/public/operations/specs/planning.js +6 -0
  385. package/dist/public/operations/specs/proof.d.ts +212 -0
  386. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  387. package/dist/public/operations/specs/proof.js +30 -0
  388. package/dist/public/operations/specs/reporting.d.ts +20 -0
  389. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  390. package/dist/public/operations/specs/reporting.js +112 -12
  391. package/dist/public/operations/specs/semantic.d.ts +1 -1
  392. package/dist/public/operations/specs/semantic.d.ts.map +1 -1
  393. package/dist/public/operations/specs/semantic.js +54 -4
  394. package/dist/public/operations/specs/upsert.d.ts +257 -163
  395. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  396. package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
  397. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
  398. package/dist/public/operations/symbol-repair-plan.js +121 -4
  399. package/dist/public/operations/types.d.ts +6 -1
  400. package/dist/public/operations/types.d.ts.map +1 -1
  401. package/dist/public/proof-fingerprint.d.ts +54 -0
  402. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  403. package/dist/public/proof-fingerprint.js +141 -0
  404. package/dist/public/proof-protocol.d.ts +354 -0
  405. package/dist/public/proof-protocol.d.ts.map +1 -0
  406. package/dist/public/proof-protocol.js +454 -0
  407. package/dist/public/proof-receipt.d.ts +279 -0
  408. package/dist/public/proof-receipt.d.ts.map +1 -0
  409. package/dist/public/proof-receipt.js +377 -0
  410. package/dist/public/schemas/entity.d.ts.map +1 -1
  411. package/dist/public/schemas/entity.js +21 -7
  412. package/dist/public/skills/kibi-freshness/SKILL.md +1 -1
  413. package/dist/public/skills/kibi-usage/SKILL.md +44 -12
  414. package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
  415. package/dist/public/skills/kibi-usage/resources/proof.md +150 -0
  416. package/dist/public/skills/kibi-usage/resources/workflows.md +6 -6
  417. package/dist/public/symbol-granularity.d.ts +3 -14
  418. package/dist/public/symbol-granularity.d.ts.map +1 -1
  419. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  420. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  421. package/dist/public/symbol-granularity.generated.js +53 -0
  422. package/dist/public/symbol-granularity.js +6 -47
  423. package/dist/public/telemetry-acceptance.d.ts +3 -77
  424. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  425. package/dist/public/telemetry-acceptance.js +4 -2
  426. package/dist/public/telemetry-remediation.js +1 -1
  427. package/dist/report/html-report.css +1240 -0
  428. package/dist/report/html-report.d.ts +4 -2
  429. package/dist/report/html-report.d.ts.map +1 -1
  430. package/dist/report/html-report.js +37 -300
  431. package/dist/runtime/cli-runtime.d.ts +2 -0
  432. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  433. package/dist/runtime/cli-runtime.js +32 -7
  434. package/dist/schemas/entity.schema.json +355 -215
  435. package/dist/search-ranking.d.ts +1 -0
  436. package/dist/search-ranking.d.ts.map +1 -1
  437. package/dist/search-ranking.js +3 -0
  438. package/dist/traceability/evidence-model.d.ts +28 -0
  439. package/dist/traceability/evidence-model.d.ts.map +1 -1
  440. package/dist/traceability/git-staged.d.ts +20 -0
  441. package/dist/traceability/git-staged.d.ts.map +1 -1
  442. package/dist/traceability/git-staged.js +145 -1
  443. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  444. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  445. package/dist/traceability/staged-diagnostics.js +78 -7
  446. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  447. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  448. package/dist/traceability/staged-file-coverage.js +284 -0
  449. package/dist/traceability/staged-impact-contract.js +4 -4
  450. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  451. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  452. package/dist/traceability/staged-symbols-manifest.js +138 -27
  453. package/dist/traceability/symbol-extract.d.ts +24 -2
  454. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  455. package/dist/traceability/symbol-extract.js +64 -208
  456. package/dist/traceability/temp-kb.d.ts +2 -0
  457. package/dist/traceability/temp-kb.d.ts.map +1 -1
  458. package/dist/traceability/temp-kb.js +13 -4
  459. package/dist/types/entities.d.ts +5 -3
  460. package/dist/types/entities.d.ts.map +1 -1
  461. package/dist/utils/branch-resolver.d.ts +1 -0
  462. package/dist/utils/branch-resolver.d.ts.map +1 -1
  463. package/dist/utils/branch-resolver.js +7 -4
  464. package/dist/utils/branch-store.d.ts +6 -0
  465. package/dist/utils/branch-store.d.ts.map +1 -1
  466. package/dist/utils/branch-store.js +27 -0
  467. package/dist/utils/kb-paths.d.ts +1 -1
  468. package/dist/utils/kb-paths.d.ts.map +1 -1
  469. package/dist/utils/kb-paths.js +1 -1
  470. package/dist/utils/rule-registry.d.ts +1 -11
  471. package/dist/utils/rule-registry.d.ts.map +1 -1
  472. package/dist/utils/rule-registry.generated.d.ts +102 -0
  473. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  474. package/dist/utils/rule-registry.generated.js +131 -0
  475. package/dist/utils/rule-registry.js +12 -113
  476. package/dist/utils/strict-modeling.d.ts +1 -0
  477. package/dist/utils/strict-modeling.d.ts.map +1 -1
  478. package/dist/utils/strict-modeling.js +1 -1
  479. package/package.json +20 -20
  480. package/src/public/diagnostic-usage.ts +6 -6
  481. package/src/public/distribution-parity.ts +17 -10
  482. package/src/public/extractors/symbols-coordinator.ts +1 -0
  483. package/src/public/impact/analyzer.ts +15 -12
  484. package/src/public/impact/coverage-depth-quality.ts +1 -1
  485. package/src/public/impact/diagnostics.ts +2 -1
  486. package/src/public/impact/diff-meaning.ts +11 -4
  487. package/src/public/impact/full-kb-quality.ts +463 -72
  488. package/src/public/operations/catalog.ts +10 -4
  489. package/src/public/operations/check-executor.ts +4 -8
  490. package/src/public/operations/check-helpers.ts +2 -2
  491. package/src/public/operations/contracts.ts +78 -34
  492. package/src/public/operations/discovery-entities.ts +53 -0
  493. package/src/public/operations/discovery-executors.ts +64 -48
  494. package/src/public/operations/index.ts +1 -1
  495. package/src/public/operations/migration-plan.ts +32 -25
  496. package/src/public/operations/node-ports.ts +6 -6
  497. package/src/public/operations/prolog-json.ts +13 -5
  498. package/src/public/operations/repair-plan.ts +60 -23
  499. package/src/public/operations/result-envelope.ts +15 -10
  500. package/src/public/operations/runtime-types.ts +26 -2
  501. package/src/public/operations/specs/check-rules.generated.ts +38 -0
  502. package/src/public/operations/specs/check.ts +12 -21
  503. package/src/public/operations/specs/discovery.ts +3 -0
  504. package/src/public/operations/specs/mutation-schemas.ts +22 -9
  505. package/src/public/operations/specs/planning.ts +7 -0
  506. package/src/public/operations/specs/proof.ts +43 -0
  507. package/src/public/operations/specs/reporting.ts +140 -13
  508. package/src/public/operations/specs/semantic.ts +79 -17
  509. package/src/public/operations/symbol-repair-plan.ts +166 -7
  510. package/src/public/operations/types.ts +6 -1
  511. package/src/public/proof-fingerprint.ts +216 -0
  512. package/src/public/proof-protocol-types.d.ts +96 -0
  513. package/src/public/proof-protocol.ts +589 -0
  514. package/src/public/proof-receipt.ts +499 -0
  515. package/src/public/schemas/entity.ts +26 -10
  516. package/src/public/skills/kibi-freshness/SKILL.md +1 -1
  517. package/src/public/skills/kibi-usage/SKILL.md +44 -12
  518. package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
  519. package/src/public/skills/kibi-usage/resources/proof.md +150 -0
  520. package/src/public/skills/kibi-usage/resources/workflows.md +6 -6
  521. package/src/public/symbol-granularity.generated.ts +74 -0
  522. package/src/public/symbol-granularity.ts +34 -59
  523. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  524. package/src/public/telemetry-acceptance.ts +22 -100
  525. package/src/public/telemetry-remediation.ts +1 -1
  526. package/src/schemas/entity.schema.json +355 -215
  527. package/dist/cli-register-verification.d.ts +0 -3
  528. package/dist/cli-register-verification.d.ts.map +0 -1
  529. package/dist/cli-register-verification.js +0 -16
  530. package/dist/commands/verify.d.ts +0 -10
  531. package/dist/commands/verify.d.ts.map +0 -1
  532. package/dist/commands/verify.js +0 -126
  533. package/dist/operations/verification/ingest-verification.d.ts +0 -29
  534. package/dist/operations/verification/ingest-verification.d.ts.map +0 -1
  535. package/dist/operations/verification/ingest-verification.js +0 -192
  536. package/dist/public/operations/specs/verification.d.ts +0 -78
  537. package/dist/public/operations/specs/verification.d.ts.map +0 -1
  538. package/dist/public/operations/specs/verification.js +0 -62
  539. package/dist/public/playwright-case-id.d.ts.map +0 -1
  540. package/dist/public/verification-receipt.d.ts +0 -242
  541. package/dist/public/verification-receipt.d.ts.map +0 -1
  542. package/dist/public/verification-receipt.js +0 -296
  543. package/dist/verification/playwright-reporter.d.ts +0 -21
  544. package/dist/verification/playwright-reporter.d.ts.map +0 -1
  545. package/dist/verification/playwright-reporter.js +0 -114
  546. package/src/public/operations/specs/verification.ts +0 -78
  547. package/src/public/playwright-case-id.ts +0 -35
  548. package/src/public/verification-receipt.ts +0 -412
@@ -0,0 +1,334 @@
1
+ /*
2
+ Kibi — repo-local, per-branch, queryable long-term memory for software projects
3
+ Copyright (C) 2026 Piotr Franczyk
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU Affero General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU Affero General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Affero General Public License
16
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ import { splitTopLevelGeneral } from "./codec.js";
19
+ /**
20
+ * Structured transport for Prolog errors.
21
+ *
22
+ * kb.pl throws ISO-style terms (`error(permission_error(save, kb,
23
+ * stale_snapshot), Context)`). The query wrappers in prolog.ts write the
24
+ * thrown term — quoted, depth-bounded — to stderr behind this sentinel so
25
+ * TypeScript can classify the term structurally instead of re-parsing SWI's
26
+ * human-readable print_message output. Text heuristics remain only as a
27
+ * fallback for errors that never pass through a wrapper (startup failures,
28
+ * older kibi-core versions).
29
+ */
30
+ // implements REQ-core-prolog-process-management
31
+ export const PROLOG_ERROR_TERM_PREFIX = "__KIBI_ERROR__:";
32
+ /** Extract the first structured error term line from raw stderr text. */
33
+ // implements REQ-core-prolog-process-management
34
+ export function extractPrologErrorRecord(text) {
35
+ const match = text.match(/^__KIBI_ERROR__:(.+)$/m);
36
+ const term = match?.[1];
37
+ if (term === undefined)
38
+ return null;
39
+ return parsePrologErrorTerm(term);
40
+ }
41
+ /** Parse a written error term such as `error(permission_error(...), Context)`. */
42
+ // implements REQ-core-prolog-process-management
43
+ export function parsePrologErrorTerm(termText) {
44
+ const trimmed = termText.trim();
45
+ const formalMatch = trimmed.match(/^error\((.*)\)$/s);
46
+ const formalAndContext = formalMatch?.[1];
47
+ if (formalAndContext === undefined)
48
+ return null;
49
+ const [formalRaw, contextRaw] = splitTopLevelGeneral(formalAndContext, ",");
50
+ if (!formalRaw)
51
+ return null;
52
+ const context = contextRaw ? parseContextTerm(contextRaw) : null;
53
+ const parsed = parseFormalTerm(formalRaw);
54
+ if (!parsed)
55
+ return null;
56
+ switch (parsed.kind) {
57
+ case "invalid_relationship": {
58
+ const formatted = contextRaw
59
+ ? parseInvalidRelationshipContext(contextRaw)
60
+ : null;
61
+ const relationship = formatted !== null
62
+ ? substituteRelationshipArgs(formatted.formatTemplate, formatted.formatArgs)
63
+ : null;
64
+ if (relationship === null) {
65
+ return {
66
+ code: "invalid_relationship",
67
+ message: "Invalid relationship type or direction",
68
+ };
69
+ }
70
+ return {
71
+ code: "invalid_relationship",
72
+ relationship,
73
+ message: `Invalid relationship: ${relationship.relType} from ${relationship.fromType} to ${relationship.toType}`,
74
+ };
75
+ }
76
+ case "stale_snapshot":
77
+ return {
78
+ code: "stale_snapshot",
79
+ message: "KB snapshot is stale; reattach or refresh the runtime before retrying (stale_snapshot)",
80
+ };
81
+ case "audit_locked":
82
+ return {
83
+ code: "audit_locked",
84
+ message: "Audit journal is locked by another Kibi runtime; restart the stale MCP/CLI session before retrying",
85
+ };
86
+ case "store_locked": {
87
+ const detail = parseStoreLockedContext(contextRaw);
88
+ const holder = detail.owner;
89
+ const holderSummary = holder === null
90
+ ? "an unidentified holder"
91
+ : `pid ${holder.pid ?? "?"}${holder.workspaceRoot !== undefined ? ` for ${holder.workspaceRoot}` : ""}${holder.startedAt !== undefined ? ` since ${holder.startedAt}` : ""}`;
92
+ return {
93
+ code: "permission_denied",
94
+ storeLocked: detail,
95
+ message: `Branch store is locked by ${holderSummary}; close that session or, if it is dead, retry so Kibi can break the stale lock (store_locked)`,
96
+ };
97
+ }
98
+ case "permission_denied":
99
+ return {
100
+ code: "permission_denied",
101
+ message: "Access denied or KB locked",
102
+ };
103
+ case "entity_not_found": {
104
+ const entityId = unquoteAtom(parsed.entityId);
105
+ const role = parseEntityRole(context?.message);
106
+ const verb = role === "source"
107
+ ? "Source entity"
108
+ : role === "target"
109
+ ? "Target entity"
110
+ : "Entity";
111
+ const record = {
112
+ code: "entity_not_found",
113
+ entityId,
114
+ message: `${verb} does not exist: ${entityId}`,
115
+ };
116
+ return role === undefined ? record : { ...record, role };
117
+ }
118
+ case "contradiction": {
119
+ const conflicts = parsed.pairs.map((pair) => ({
120
+ reason: pair[0],
121
+ otherId: pair[1],
122
+ }));
123
+ return {
124
+ code: "contradiction",
125
+ conflicts,
126
+ message: context?.message ??
127
+ "Contradiction detected: conflicting requirements without a supersedes relationship",
128
+ };
129
+ }
130
+ case "validation_error":
131
+ return {
132
+ code: "validation_error",
133
+ message: parsed.message,
134
+ };
135
+ }
136
+ }
137
+ function parseContextTerm(contextRaw) {
138
+ const contextMatch = contextRaw.trim().match(/^context\((.*)\)$/s);
139
+ if (contextMatch?.[1] === undefined) {
140
+ const message = unquoteAtom(contextRaw.trim());
141
+ return message === "" ? null : { message };
142
+ }
143
+ const parts = splitTopLevelGeneral(contextMatch[1], ",");
144
+ if (parts.length === 0)
145
+ return null;
146
+ const predicate = parts[0]?.trim();
147
+ const message = parts[1] ? unquoteAtom(parts[1].trim()) : "";
148
+ return {
149
+ ...(predicate ? { predicate } : {}),
150
+ ...(message ? { message } : {}),
151
+ };
152
+ }
153
+ /**
154
+ * Parse the context of a store-locked error thrown by kb.pl:
155
+ * `kb_store_locked('<owner-json>', '<persistency-directory>')`. The owner JSON
156
+ * is best-effort: any malformed content yields a null owner while the lock
157
+ * directory is still surfaced.
158
+ */
159
+ // implements REQ-core-journaled-engine-persistence
160
+ function parseStoreLockedContext(contextRaw) {
161
+ const empty = {
162
+ owner: null,
163
+ lockDirectory: "",
164
+ };
165
+ if (!contextRaw)
166
+ return empty;
167
+ const inner = contextRaw.trim().match(/^kb_store_locked\((.*)\)$/s)?.[1];
168
+ if (inner === undefined)
169
+ return empty;
170
+ const parts = splitTopLevelGeneral(inner, ",");
171
+ const ownerRaw = parts[0]?.trim();
172
+ const lockRaw = parts[1]?.trim();
173
+ const lockDirectory = lockRaw ? unquoteAtom(lockRaw) : "";
174
+ // kb.pl preserves the original attach failure so nothing is masked by the
175
+ // store_locked re-brand (e.g. a permissions problem vs a lock clash).
176
+ const originalRaw = parts[2]?.trim();
177
+ const originalError = originalRaw ? unquoteAtom(originalRaw) : "";
178
+ if (!ownerRaw || ownerRaw === '""' || ownerRaw === "''") {
179
+ return {
180
+ owner: null,
181
+ lockDirectory,
182
+ ...(originalError !== "" ? { originalError } : {}),
183
+ };
184
+ }
185
+ try {
186
+ const parsed = JSON.parse(unquoteAtom(ownerRaw));
187
+ if (parsed === null || typeof parsed !== "object") {
188
+ return {
189
+ owner: null,
190
+ lockDirectory,
191
+ ...(originalError !== "" ? { originalError } : {}),
192
+ };
193
+ }
194
+ return {
195
+ owner: {
196
+ ...(typeof parsed.pid === "number" ? { pid: parsed.pid } : {}),
197
+ ...(typeof parsed.workspaceRoot === "string"
198
+ ? { workspaceRoot: parsed.workspaceRoot }
199
+ : {}),
200
+ ...(typeof parsed.bootId === "string" ? { bootId: parsed.bootId } : {}),
201
+ ...(typeof parsed.startedAt === "string"
202
+ ? { startedAt: parsed.startedAt }
203
+ : {}),
204
+ },
205
+ lockDirectory,
206
+ ...(originalError !== "" ? { originalError } : {}),
207
+ };
208
+ }
209
+ catch {
210
+ return {
211
+ owner: null,
212
+ lockDirectory,
213
+ ...(originalError !== "" ? { originalError } : {}),
214
+ };
215
+ }
216
+ }
217
+ function parseFormalTerm(formalRaw) {
218
+ const formal = formalRaw.trim();
219
+ const functorMatch = formal.match(/^([a-z][A-Za-z0-9_]*)\((.*)\)$/s);
220
+ if (functorMatch?.[1] === undefined || functorMatch[2] === undefined) {
221
+ return null;
222
+ }
223
+ const functor = functorMatch[1];
224
+ const args = functorMatch[2].trim()
225
+ ? splitTopLevelGeneral(functorMatch[2], ",")
226
+ : [];
227
+ if (functor === "permission_error") {
228
+ const operation = args[0]?.trim();
229
+ const resource = args[1]?.trim();
230
+ const detail = args[2]?.trim();
231
+ if (detail === "stale_snapshot")
232
+ return { kind: "stale_snapshot" };
233
+ if (operation === "lock" && resource === "audit_log") {
234
+ return { kind: "audit_locked" };
235
+ }
236
+ if (operation === "attach" && resource === "kb_store") {
237
+ return { kind: "store_locked" };
238
+ }
239
+ return { kind: "permission_denied" };
240
+ }
241
+ if (functor === "existence_error" && args[0]?.trim() === "entity") {
242
+ const entityId = args[1]?.trim();
243
+ if (entityId === undefined)
244
+ return null;
245
+ return { kind: "entity_not_found", entityId: unquoteAtom(entityId) };
246
+ }
247
+ if (functor === "type_error" && args[0]?.trim() === "relationship") {
248
+ return { kind: "invalid_relationship" };
249
+ }
250
+ if (functor === "kb_contradiction") {
251
+ const listText = args[0]?.trim() ?? "[]";
252
+ const pairs = parseContradictionPairs(listText);
253
+ return { kind: "contradiction", pairs };
254
+ }
255
+ if (functor === "validation_error") {
256
+ const message = args[0]?.trim();
257
+ if (message === undefined)
258
+ return null;
259
+ return { kind: "validation_error", message: unquoteAtom(message) };
260
+ }
261
+ return null;
262
+ }
263
+ /** Fill the relationship triple from a `'...~w...'-[Rel, From, To]` context. */
264
+ function parseInvalidRelationshipContext(contextRaw) {
265
+ const contextMatch = contextRaw.trim().match(/^context\((.*)\)$/s);
266
+ const inner = contextMatch?.[1];
267
+ if (inner === undefined)
268
+ return null;
269
+ const parts = splitTopLevelGeneral(inner, ",");
270
+ const formatted = parts[1]?.trim();
271
+ if (formatted === undefined)
272
+ return null;
273
+ const formatMatch = formatted.match(/^(.*)-\[(.*)\]$/s);
274
+ const template = formatMatch?.[1];
275
+ const argsText = formatMatch?.[2];
276
+ if (template === undefined || argsText === undefined)
277
+ return null;
278
+ const formatArgs = argsText.trim()
279
+ ? splitTopLevelGeneral(argsText, ",").map((arg) => unquoteAtom(arg.trim()))
280
+ : [];
281
+ return { formatTemplate: unquoteAtom(template.trim()), formatArgs };
282
+ }
283
+ function substituteRelationshipArgs(template, args) {
284
+ if (template === null || args === null || args.length < 3)
285
+ return null;
286
+ const substituted = template
287
+ .split("~w")
288
+ .map((chunk, index) => index === 0 ? chunk : `${args[index - 1] ?? ""}${chunk}`)
289
+ .join("");
290
+ const match = substituted.match(/^Invalid relationship:\s*(\S+)\s+from\s+(\S+)\s+to\s+(\S+)\s*$/);
291
+ if (!match?.[1] || !match[2] || !match[3])
292
+ return null;
293
+ return {
294
+ relType: match[1],
295
+ fromType: match[2],
296
+ toType: match[3],
297
+ };
298
+ }
299
+ function parseContradictionPairs(listText) {
300
+ const trimmed = listText.trim();
301
+ if (!trimmed.startsWith("[") || !trimmed.endsWith("]"))
302
+ return [];
303
+ const inner = trimmed.slice(1, -1).trim();
304
+ if (inner === "")
305
+ return [];
306
+ return splitTopLevelGeneral(inner, ",")
307
+ .map((item) => splitTopLevelGeneral(item.trim(), "-"))
308
+ .map((pair) => {
309
+ const reason = pair[0] ?? "";
310
+ const otherId = pair[1] ?? "";
311
+ return [unquoteAtom(reason.trim()), unquoteAtom(otherId.trim())];
312
+ })
313
+ .filter((pair) => pair[0] !== "" && pair[1] !== "");
314
+ }
315
+ function parseEntityRole(message) {
316
+ if (message?.includes("Source entity does not exist"))
317
+ return "source";
318
+ if (message?.includes("Target entity does not exist"))
319
+ return "target";
320
+ return undefined;
321
+ }
322
+ /** Strip SWI quoted-atom quoting and unescape standard character escapes. */
323
+ function unquoteAtom(value) {
324
+ const trimmed = value.trim();
325
+ if (trimmed.length >= 2 && trimmed.startsWith("'") && trimmed.endsWith("'")) {
326
+ const inner = trimmed.slice(1, -1);
327
+ return inner
328
+ .replace(/\\'/g, "'")
329
+ .replace(/\\\\/g, "\\")
330
+ .replace(/\\n/g, "\n")
331
+ .replace(/\\t/g, "\t");
332
+ }
333
+ return trimmed;
334
+ }
@@ -0,0 +1,50 @@
1
+ import { type StoreLockHolderState } from "./store-lock.js";
2
+ /**
3
+ * Orphan janitor for engine daemons and branch-store locks.
4
+ *
5
+ * Kibi's lock stewardship records who holds a branch store, but recorded
6
+ * state alone still needs a sweep: daemons killed outright leave sockets and
7
+ * pid files, worktree removals strand daemons whose workspace is gone, and
8
+ * crashed engines leave journals behind. The janitor classifies each piece
9
+ * of evidence and cleans only what is provably stale.
10
+ */
11
+ export interface StoreLockFinding {
12
+ readonly kind: "store-lock";
13
+ readonly storePath: string;
14
+ readonly workspaceRoot?: string;
15
+ readonly pid?: number;
16
+ readonly startedAt?: string;
17
+ readonly holderState: StoreLockHolderState;
18
+ readonly workspaceExists: boolean;
19
+ readonly action: "clean" | "kill-and-clean" | "keep";
20
+ }
21
+ export interface SocketFinding {
22
+ readonly kind: "socket";
23
+ readonly socketPath: string;
24
+ readonly pid?: number;
25
+ readonly holderState: StoreLockHolderState;
26
+ readonly action: "clean" | "keep";
27
+ }
28
+ export type JanitorFinding = StoreLockFinding | SocketFinding;
29
+ export interface JanitorOptions {
30
+ /** Branch stores live under <workspaceRoot>/.kb/branches. */
31
+ readonly workspaceRoot: string;
32
+ /** Runtime directory holding daemon sockets and pid files. */
33
+ readonly runtimeDirectory: string;
34
+ /** Also sweep runtime-directory sockets from other workspaces. */
35
+ readonly all?: boolean;
36
+ /** Execute cleanups; when false the scan only reports (dry run). */
37
+ readonly apply?: boolean;
38
+ }
39
+ /** Scan one branch store's ownership journal and clean stale artifacts. */
40
+ export declare function sweepStoreLock(storePath: string, apply: boolean): StoreLockFinding | null;
41
+ /** Scan all branch stores under <workspaceRoot>/.kb/branches. */
42
+ export declare function sweepWorkspaceStoreLocks(options: JanitorOptions): StoreLockFinding[];
43
+ /**
44
+ * Sweep runtime-directory daemon sockets. A socket is stale when its pid
45
+ * file records a dead process or a connect attempt is refused.
46
+ */
47
+ export declare function sweepRuntimeSockets(options: JanitorOptions): SocketFinding[];
48
+ /** Full janitor sweep across branch stores and (optionally) runtime sockets. */
49
+ export declare function runJanitor(options: JanitorOptions): JanitorFinding[];
50
+ //# sourceMappingURL=janitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"janitor.d.ts","sourceRoot":"","sources":["../../src/prolog/janitor.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,oBAAoB,EAK1B,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;GAQG;AAGH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,GAAG,MAAM,CAAC;CACtD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;CACnC;AAED,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,kEAAkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,2EAA2E;AAE3E,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACb,gBAAgB,GAAG,IAAI,CA+CzB;AAED,iEAAiE;AAEjE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,cAAc,GACtB,gBAAgB,EAAE,CAepB;AAED;;;GAGG;AAEH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,EAAE,CA8C5E;AAED,gFAAgF;AAEhF,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,EAAE,CAKpE"}
@@ -0,0 +1,154 @@
1
+ /*
2
+ Kibi — repo-local, per-branch, queryable long-term memory for software projects
3
+ Copyright (C) 2026 Piotr Franczyk
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU Affero General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU Affero General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Affero General Public License
16
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ import { existsSync, readFileSync, readdirSync, rmSync } from "node:fs";
19
+ import { join } from "node:path";
20
+ import { breakStoreLock, classifyStoreLockHolder, isProcessAlive, readStoreLockOwner, } from "./store-lock.js";
21
+ /** Scan one branch store's ownership journal and clean stale artifacts. */
22
+ // implements REQ-core-journaled-engine-persistence
23
+ export function sweepStoreLock(storePath, apply) {
24
+ const journal = readStoreLockOwner(storePath);
25
+ if (journal === null)
26
+ return null;
27
+ const owner = journal.owner;
28
+ const holderState = classifyStoreLockHolder(owner);
29
+ const workspaceRoot = owner.workspaceRoot;
30
+ const workspaceExists = workspaceRoot !== undefined && existsSync(workspaceRoot);
31
+ const workspaceVerifiablyGone = workspaceRoot !== undefined && !workspaceExists;
32
+ let action;
33
+ if (holderState === "dead") {
34
+ action = "clean";
35
+ }
36
+ else if ((holderState === "alive" || holderState === "self") &&
37
+ workspaceVerifiablyGone) {
38
+ // A live daemon whose workspace is verifiably gone can never serve
39
+ // again; the watchdog should have stopped it already — this is the
40
+ // backstop. A journal without workspaceRoot stays hands-off: absence of
41
+ // evidence is not evidence of a removed workspace.
42
+ action = "kill-and-clean";
43
+ }
44
+ else {
45
+ action = "keep";
46
+ }
47
+ if (apply && action !== "keep") {
48
+ if (action === "kill-and-clean" && typeof owner.pid === "number") {
49
+ try {
50
+ process.kill(owner.pid, "SIGTERM");
51
+ }
52
+ catch {
53
+ // Already gone — fall through to artifact cleanup.
54
+ }
55
+ }
56
+ // Same artifact sweep as the attach-takeover path, so the janitor and
57
+ // the takeover agree on what stale artifacts exist.
58
+ breakStoreLock(join(storePath, "rdf"));
59
+ }
60
+ return {
61
+ kind: "store-lock",
62
+ storePath,
63
+ ...(workspaceRoot !== undefined ? { workspaceRoot } : {}),
64
+ ...(owner.pid !== undefined ? { pid: owner.pid } : {}),
65
+ ...(owner.startedAt !== undefined ? { startedAt: owner.startedAt } : {}),
66
+ holderState,
67
+ workspaceExists,
68
+ action,
69
+ };
70
+ }
71
+ /** Scan all branch stores under <workspaceRoot>/.kb/branches. */
72
+ // implements REQ-core-journaled-engine-persistence
73
+ export function sweepWorkspaceStoreLocks(options) {
74
+ const branchesDir = join(options.workspaceRoot, ".kb", "branches");
75
+ if (!existsSync(branchesDir))
76
+ return [];
77
+ const findings = [];
78
+ for (const entry of readdirSync(branchesDir)) {
79
+ const storePath = join(branchesDir, entry);
80
+ try {
81
+ if (!existsSync(join(storePath, "storage.json")))
82
+ continue;
83
+ }
84
+ catch {
85
+ continue;
86
+ }
87
+ const finding = sweepStoreLock(storePath, options.apply === true);
88
+ if (finding !== null)
89
+ findings.push(finding);
90
+ }
91
+ return findings;
92
+ }
93
+ /**
94
+ * Sweep runtime-directory daemon sockets. A socket is stale when its pid
95
+ * file records a dead process or a connect attempt is refused.
96
+ */
97
+ // implements REQ-core-journaled-engine-persistence
98
+ export function sweepRuntimeSockets(options) {
99
+ if (!options.all)
100
+ return [];
101
+ if (!existsSync(options.runtimeDirectory))
102
+ return [];
103
+ const findings = [];
104
+ for (const entry of readdirSync(options.runtimeDirectory)) {
105
+ if (!entry.endsWith(".sock"))
106
+ continue;
107
+ const socketPath = join(options.runtimeDirectory, entry);
108
+ const pidPath = `${socketPath}.pid`;
109
+ let pid;
110
+ if (existsSync(pidPath)) {
111
+ try {
112
+ const parsed = Number.parseInt(readFileSync(pidPath, "utf8").trim(), 10);
113
+ if (Number.isInteger(parsed) && parsed > 0)
114
+ pid = parsed;
115
+ }
116
+ catch {
117
+ // The daemon being swept removed its pid file mid-scan; leave the
118
+ // pid unknown rather than failing the whole run.
119
+ }
120
+ }
121
+ const holderState = pid === undefined ? "unknown" : isProcessAlive(pid) ? "alive" : "dead";
122
+ if (holderState === "dead") {
123
+ if (options.apply === true) {
124
+ rmSync(socketPath, { force: true });
125
+ rmSync(pidPath, { force: true });
126
+ }
127
+ findings.push({
128
+ kind: "socket",
129
+ socketPath,
130
+ ...(pid !== undefined ? { pid } : {}),
131
+ holderState,
132
+ action: "clean",
133
+ });
134
+ }
135
+ else {
136
+ findings.push({
137
+ kind: "socket",
138
+ socketPath,
139
+ ...(pid !== undefined ? { pid } : {}),
140
+ holderState,
141
+ action: "keep",
142
+ });
143
+ }
144
+ }
145
+ return findings;
146
+ }
147
+ /** Full janitor sweep across branch stores and (optionally) runtime sockets. */
148
+ // implements REQ-core-journaled-engine-persistence
149
+ export function runJanitor(options) {
150
+ return [
151
+ ...sweepWorkspaceStoreLocks(options),
152
+ ...sweepRuntimeSockets(options),
153
+ ];
154
+ }
@@ -0,0 +1,45 @@
1
+ import type { QueryResult } from "../prolog.js";
2
+ import type { PrologStoreLockOwner } from "./error-terms.js";
3
+ /** Linux boot id; guards against PID reuse across reboots. Null elsewhere. */
4
+ export declare function currentBootId(): string | null;
5
+ export declare function isProcessAlive(pid: number): boolean;
6
+ export type StoreLockHolderState = "self" | "alive" | "dead" | "unknown";
7
+ export declare function classifyStoreLockHolder(owner: PrologStoreLockOwner | null): StoreLockHolderState;
8
+ /**
9
+ * Read an ownership journal from a branch store. Older builds kept the
10
+ * journal beside the rdf lock; the store-root location wins when both exist.
11
+ * Shared by the janitor sweep and the status stale-reason surfacing so both
12
+ * classify the same evidence with the same boot-id-aware semantics.
13
+ */
14
+ export declare function readStoreLockOwner(storePath: string): {
15
+ owner: PrologStoreLockOwner;
16
+ journalPath: string;
17
+ } | null;
18
+ /**
19
+ * Remove the stale lock artifacts so a fresh attach can take the store.
20
+ * The rdf lock lives inside the persistency directory; the ownership journal
21
+ * lives at the branch-store root (older builds kept it beside the lock).
22
+ */
23
+ export declare function breakStoreLock(rdfDirectory: string): void;
24
+ export interface StoreLockTakeoverDecision {
25
+ readonly action: "break" | "surface";
26
+ readonly reason: string;
27
+ }
28
+ /**
29
+ * Decide whether a store-locked failure may be auto-healed. Only a provably
30
+ * dead holder (or a holder from a previous boot) is broken; live or unknown
31
+ * holders are surfaced so the operator can close the real session.
32
+ */
33
+ export declare function decideStoreLockTakeover(owner: PrologStoreLockOwner | null): StoreLockTakeoverDecision;
34
+ export interface StoreLockRetryContext {
35
+ readonly query: (goal: string) => Promise<QueryResult>;
36
+ }
37
+ /**
38
+ * A store-locked attach failure with a provably dead holder (crashed or
39
+ * killed engine, removed worktree) is safe to auto-heal: break the stale
40
+ * lock artifacts and retry once on the same port. Live or unverifiable
41
+ * holders are surfaced with the holder identity and remediation. Shared by
42
+ * the CLI runtime and the engine daemon attach paths.
43
+ */
44
+ export declare function retryAttachAfterBreakingStaleLock(prolog: StoreLockRetryContext, kbPath: string, failed: QueryResult): Promise<QueryResult>;
45
+ //# sourceMappingURL=store-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-lock.d.ts","sourceRoot":"","sources":["../../src/prolog/store-lock.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAgBhF,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAa7C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUnD;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,oBAAoB,GAAG,IAAI,GACjC,oBAAoB,CAYtB;AAED;;;;;GAKG;AAEH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,oBAAoB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA4B7D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAWzD;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,oBAAoB,GAAG,IAAI,GACjC,yBAAyB,CAoB3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CACxD;AAED;;;;;;GAMG;AAEH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CA4BtB"}