kibi-cli 0.19.0 → 2.0.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 (672) 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.d.ts.map +1 -1
  8. package/dist/cli-operation-loader.js +53 -20
  9. package/dist/cli-operation-metadata.d.ts +21 -8
  10. package/dist/cli-operation-metadata.d.ts.map +1 -1
  11. package/dist/cli-operation-metadata.js +27 -10
  12. package/dist/cli-protocol.d.ts.map +1 -1
  13. package/dist/cli-protocol.js +38 -8
  14. package/dist/cli-register-foundation.d.ts.map +1 -1
  15. package/dist/cli-register-foundation.js +14 -2
  16. package/dist/cli-register-maintenance.d.ts.map +1 -1
  17. package/dist/cli-register-maintenance.js +33 -4
  18. package/dist/cli-register-proof.d.ts +3 -0
  19. package/dist/cli-register-proof.d.ts.map +1 -0
  20. package/dist/cli-register-proof.js +103 -0
  21. package/dist/cli-register-reporting.d.ts.map +1 -1
  22. package/dist/cli-register-reporting.js +11 -0
  23. package/dist/cli.d.ts +4 -0
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +17 -8
  26. package/dist/commands/aggregated-checks.d.ts +1 -2
  27. package/dist/commands/aggregated-checks.d.ts.map +1 -1
  28. package/dist/commands/aggregated-checks.js +14 -9
  29. package/dist/commands/branch.d.ts +37 -0
  30. package/dist/commands/branch.d.ts.map +1 -1
  31. package/dist/commands/branch.js +375 -40
  32. package/dist/commands/check.d.ts +14 -0
  33. package/dist/commands/check.d.ts.map +1 -1
  34. package/dist/commands/check.js +209 -110
  35. package/dist/commands/coverage.d.ts +1 -0
  36. package/dist/commands/coverage.d.ts.map +1 -1
  37. package/dist/commands/coverage.js +6 -0
  38. package/dist/commands/discovery-shared.d.ts.map +1 -1
  39. package/dist/commands/discovery-shared.js +10 -19
  40. package/dist/commands/doctor.d.ts +26 -1
  41. package/dist/commands/doctor.d.ts.map +1 -1
  42. package/dist/commands/doctor.js +291 -30
  43. package/dist/commands/engine.d.ts +12 -0
  44. package/dist/commands/engine.d.ts.map +1 -1
  45. package/dist/commands/engine.js +50 -7
  46. package/dist/commands/gc.d.ts +5 -2
  47. package/dist/commands/gc.d.ts.map +1 -1
  48. package/dist/commands/gc.js +140 -71
  49. package/dist/commands/github-init.d.ts +57 -0
  50. package/dist/commands/github-init.d.ts.map +1 -0
  51. package/dist/commands/github-init.js +314 -0
  52. package/dist/commands/init-helpers.d.ts +1 -1
  53. package/dist/commands/init-helpers.d.ts.map +1 -1
  54. package/dist/commands/init-helpers.js +109 -28
  55. package/dist/commands/init.d.ts +2 -0
  56. package/dist/commands/init.d.ts.map +1 -1
  57. package/dist/commands/init.js +79 -24
  58. package/dist/commands/legacy-storage-migration.d.ts +54 -0
  59. package/dist/commands/legacy-storage-migration.d.ts.map +1 -0
  60. package/dist/commands/legacy-storage-migration.js +277 -0
  61. package/dist/commands/migrate.d.ts +11 -0
  62. package/dist/commands/migrate.d.ts.map +1 -1
  63. package/dist/commands/migrate.js +249 -96
  64. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  65. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  66. package/dist/commands/proof-migrate-legacy.js +45 -0
  67. package/dist/commands/proof-prune.d.ts +8 -0
  68. package/dist/commands/proof-prune.d.ts.map +1 -0
  69. package/dist/commands/proof-prune.js +53 -0
  70. package/dist/commands/prove.d.ts +37 -0
  71. package/dist/commands/prove.d.ts.map +1 -0
  72. package/dist/commands/prove.js +470 -0
  73. package/dist/commands/report.d.ts +24 -0
  74. package/dist/commands/report.d.ts.map +1 -0
  75. package/dist/commands/report.js +191 -0
  76. package/dist/commands/sync/cache.d.ts +16 -3
  77. package/dist/commands/sync/cache.d.ts.map +1 -1
  78. package/dist/commands/sync/cache.js +111 -4
  79. package/dist/commands/sync/discovery.d.ts +26 -2
  80. package/dist/commands/sync/discovery.d.ts.map +1 -1
  81. package/dist/commands/sync/discovery.js +204 -15
  82. package/dist/commands/sync/extraction.d.ts +8 -1
  83. package/dist/commands/sync/extraction.d.ts.map +1 -1
  84. package/dist/commands/sync/extraction.js +38 -4
  85. package/dist/commands/sync/manifest.d.ts +9 -6
  86. package/dist/commands/sync/manifest.d.ts.map +1 -1
  87. package/dist/commands/sync/manifest.js +195 -60
  88. package/dist/commands/sync/persistence.d.ts +4 -1
  89. package/dist/commands/sync/persistence.d.ts.map +1 -1
  90. package/dist/commands/sync/persistence.js +26 -12
  91. package/dist/commands/sync/staging.d.ts +1 -0
  92. package/dist/commands/sync/staging.d.ts.map +1 -1
  93. package/dist/commands/sync/staging.js +5 -2
  94. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  95. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  96. package/dist/commands/sync/untracked-targets.js +108 -0
  97. package/dist/commands/sync.d.ts +17 -1
  98. package/dist/commands/sync.d.ts.map +1 -1
  99. package/dist/commands/sync.js +375 -106
  100. package/dist/diagnostics.d.ts +1 -1
  101. package/dist/diagnostics.d.ts.map +1 -1
  102. package/dist/engine-daemon.d.ts +3 -1
  103. package/dist/engine-daemon.d.ts.map +1 -1
  104. package/dist/engine-daemon.js +49 -20
  105. package/dist/engine.d.ts +34 -3
  106. package/dist/engine.d.ts.map +1 -1
  107. package/dist/engine.js +578 -42
  108. package/dist/env.d.ts.map +1 -1
  109. package/dist/env.js +5 -6
  110. package/dist/extractors/manifest.d.ts +13 -1
  111. package/dist/extractors/manifest.d.ts.map +1 -1
  112. package/dist/extractors/manifest.js +97 -10
  113. package/dist/extractors/markdown.d.ts +5 -2
  114. package/dist/extractors/markdown.d.ts.map +1 -1
  115. package/dist/extractors/markdown.js +47 -12
  116. package/dist/extractors/playwright-cases.d.ts +24 -0
  117. package/dist/extractors/playwright-cases.d.ts.map +1 -0
  118. package/dist/extractors/playwright-cases.js +126 -0
  119. package/dist/extractors/relationships.d.ts +6 -0
  120. package/dist/extractors/relationships.d.ts.map +1 -1
  121. package/dist/extractors/relationships.js +2 -1
  122. package/dist/extractors/symbol-coordinates.d.ts +81 -3
  123. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  124. package/dist/extractors/symbol-coordinates.js +389 -51
  125. package/dist/extractors/symbols-coordinator.js +11 -1
  126. package/dist/extractors/symbols-ts.d.ts +1 -0
  127. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  128. package/dist/extractors/symbols-ts.js +142 -67
  129. package/dist/intent-search.d.ts +61 -0
  130. package/dist/intent-search.d.ts.map +1 -0
  131. package/dist/intent-search.js +437 -0
  132. package/dist/logic/ir.d.ts +1 -0
  133. package/dist/logic/ir.d.ts.map +1 -1
  134. package/dist/logic/ir.js +1 -1
  135. package/dist/operations/bootstrap/activation.d.ts +5 -0
  136. package/dist/operations/bootstrap/activation.d.ts.map +1 -0
  137. package/dist/operations/{autopilot → bootstrap}/activation.js +58 -33
  138. package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts.map +1 -1
  139. package/dist/operations/bootstrap/candidates.d.ts +4 -0
  140. package/dist/operations/{autopilot → bootstrap}/candidates.d.ts.map +1 -1
  141. package/dist/operations/{autopilot → bootstrap}/candidates.js +22 -8
  142. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts +2 -2
  143. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts.map +1 -1
  144. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.js +46 -6
  145. package/dist/operations/{autopilot → bootstrap}/discovery.d.ts +1 -1
  146. package/dist/operations/bootstrap/discovery.d.ts.map +1 -0
  147. package/dist/operations/{autopilot → bootstrap}/discovery.js +21 -14
  148. package/dist/operations/bootstrap/generate.d.ts +9 -0
  149. package/dist/operations/bootstrap/generate.d.ts.map +1 -0
  150. package/dist/operations/bootstrap/generate.js +207 -0
  151. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts +2 -2
  152. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts.map +1 -1
  153. package/dist/operations/{autopilot → bootstrap}/guidance-actions.js +4 -4
  154. package/dist/operations/{autopilot → bootstrap}/guidance.d.ts +3 -2
  155. package/dist/operations/bootstrap/guidance.d.ts.map +1 -0
  156. package/dist/operations/{autopilot → bootstrap}/guidance.js +3 -1
  157. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts +2 -2
  158. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts.map +1 -1
  159. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.js +4 -3
  160. package/dist/operations/bootstrap/presentation.d.ts +15 -0
  161. package/dist/operations/bootstrap/presentation.d.ts.map +1 -0
  162. package/dist/operations/bootstrap/presentation.js +177 -0
  163. package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts.map +1 -1
  164. package/dist/operations/{autopilot → bootstrap}/types.d.ts +63 -21
  165. package/dist/operations/bootstrap/types.d.ts.map +1 -0
  166. package/dist/operations/bootstrap/types.js +25 -0
  167. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  168. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  169. package/dist/operations/modeling/model-requirement.js +57 -63
  170. package/dist/operations/modeling/predicate-applicability.d.ts +16 -0
  171. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -0
  172. package/dist/operations/modeling/predicate-applicability.js +375 -0
  173. package/dist/operations/modeling/predicate-applyplan.d.ts +13 -2
  174. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
  175. package/dist/operations/modeling/predicate-applyplan.js +100 -3
  176. package/dist/operations/modeling/predicate-bindings.d.ts +6 -0
  177. package/dist/operations/modeling/predicate-bindings.d.ts.map +1 -0
  178. package/dist/operations/modeling/predicate-bindings.js +122 -0
  179. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  180. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  181. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  182. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  183. package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -1
  184. package/dist/operations/modeling/predicate-catalog-4.js +155 -0
  185. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  186. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  187. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  188. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  189. package/dist/operations/modeling/predicate-catalog.js +4 -0
  190. package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -1
  191. package/dist/operations/modeling/predicate-inference-1.js +8 -0
  192. package/dist/operations/modeling/predicate-inference-launcher.d.ts +10 -0
  193. package/dist/operations/modeling/predicate-inference-launcher.d.ts.map +1 -0
  194. package/dist/operations/modeling/predicate-inference-launcher.js +13 -0
  195. package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
  196. package/dist/operations/modeling/predicate-inference.js +4 -0
  197. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  198. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  199. package/dist/operations/modeling/predicate-loader.js +11 -3
  200. package/dist/operations/modeling/predicate-ranker.d.ts +8 -1
  201. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  202. package/dist/operations/modeling/predicate-ranker.js +159 -24
  203. package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -1
  204. package/dist/operations/modeling/predicate-score-3.js +6 -0
  205. package/dist/operations/modeling/predicate-types.d.ts +35 -1
  206. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  207. package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -1
  208. package/dist/operations/modeling/predicate-usage-hints-3.js +40 -0
  209. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  210. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  211. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  212. package/dist/operations/modeling/predicate-utils.d.ts.map +1 -1
  213. package/dist/operations/modeling/predicate-utils.js +2 -0
  214. package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
  215. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  216. package/dist/operations/modeling/suggest-predicates.js +203 -32
  217. package/dist/operations/mutation/contradictions.d.ts +2 -1
  218. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  219. package/dist/operations/mutation/contradictions.js +26 -5
  220. package/dist/operations/mutation/delete.d.ts +3 -0
  221. package/dist/operations/mutation/delete.d.ts.map +1 -1
  222. package/dist/operations/mutation/delete.js +483 -19
  223. package/dist/operations/mutation/entity-projection.d.ts +11 -0
  224. package/dist/operations/mutation/entity-projection.d.ts.map +1 -0
  225. package/dist/operations/mutation/entity-projection.js +14 -0
  226. package/dist/operations/mutation/relationships.d.ts +11 -0
  227. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  228. package/dist/operations/mutation/relationships.js +77 -5
  229. package/dist/operations/mutation/saga.d.ts +51 -0
  230. package/dist/operations/mutation/saga.d.ts.map +1 -0
  231. package/dist/operations/mutation/saga.js +67 -0
  232. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  233. package/dist/operations/mutation/serialization.js +3 -1
  234. package/dist/operations/mutation/source-authoring.d.ts +65 -0
  235. package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
  236. package/dist/operations/mutation/source-authoring.js +576 -0
  237. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  238. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  239. package/dist/operations/mutation/strict-fact.js +8 -5
  240. package/dist/operations/mutation/symbol-compiler-lock.d.ts +54 -0
  241. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
  242. package/dist/operations/mutation/symbol-compiler-lock.js +337 -0
  243. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  244. package/dist/operations/mutation/symbol-granularity.js +35 -4
  245. package/dist/operations/mutation/symbol-refresh.d.ts +19 -1
  246. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  247. package/dist/operations/mutation/symbol-refresh.js +227 -63
  248. package/dist/operations/mutation/types.d.ts +57 -1
  249. package/dist/operations/mutation/types.d.ts.map +1 -1
  250. package/dist/operations/mutation/upsert.d.ts +18 -2
  251. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  252. package/dist/operations/mutation/upsert.js +403 -32
  253. package/dist/operations/mutation/validate-upsert.js +2 -2
  254. package/dist/operations/mutation/validation.d.ts.map +1 -1
  255. package/dist/operations/mutation/validation.js +47 -4
  256. package/dist/operations/mutation/warnings.d.ts +1 -0
  257. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  258. package/dist/operations/mutation/warnings.js +7 -5
  259. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  260. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  261. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  262. package/dist/operations/planning/apply-plan.d.ts +19 -0
  263. package/dist/operations/planning/apply-plan.d.ts.map +1 -0
  264. package/dist/operations/planning/apply-plan.js +1514 -0
  265. package/dist/operations/planning/compile-intent.d.ts +108 -0
  266. package/dist/operations/planning/compile-intent.d.ts.map +1 -0
  267. package/dist/operations/planning/compile-intent.js +618 -0
  268. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  269. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  270. package/dist/operations/proof/ingest-proof.js +307 -0
  271. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  272. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  273. package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
  274. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  275. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  276. package/dist/operations/proof/prune-receipts.js +91 -0
  277. package/dist/operations/proof/receipt-document.d.ts +29 -0
  278. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  279. package/dist/operations/proof/receipt-document.js +117 -0
  280. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  281. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  282. package/dist/operations/semantic-advisor/analyze-prose.js +52 -28
  283. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  284. package/dist/operations/semantic-advisor/clauses.js +35 -9
  285. package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -1
  286. package/dist/operations/semantic-advisor/ingestion-boundary.js +7 -3
  287. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +51 -0
  288. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -0
  289. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +96 -0
  290. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  291. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  292. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  293. package/dist/operations/semantic-advisor/types.d.ts +13 -5
  294. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  295. package/dist/prolog/codec.d.ts +13 -1
  296. package/dist/prolog/codec.d.ts.map +1 -1
  297. package/dist/prolog/codec.js +269 -153
  298. package/dist/prolog/error-terms.d.ts +47 -0
  299. package/dist/prolog/error-terms.d.ts.map +1 -0
  300. package/dist/prolog/error-terms.js +334 -0
  301. package/dist/prolog/janitor.d.ts +50 -0
  302. package/dist/prolog/janitor.d.ts.map +1 -0
  303. package/dist/prolog/janitor.js +154 -0
  304. package/dist/prolog/store-lock.d.ts +45 -0
  305. package/dist/prolog/store-lock.d.ts.map +1 -0
  306. package/dist/prolog/store-lock.js +195 -0
  307. package/dist/prolog.d.ts +7 -0
  308. package/dist/prolog.d.ts.map +1 -1
  309. package/dist/prolog.js +82 -25
  310. package/dist/proof/evaluate.d.ts +27 -0
  311. package/dist/proof/evaluate.d.ts.map +1 -0
  312. package/dist/proof/evaluate.js +151 -0
  313. package/dist/proof/inspect.d.ts +12 -0
  314. package/dist/proof/inspect.d.ts.map +1 -0
  315. package/dist/proof/inspect.js +236 -0
  316. package/dist/proof/integrations.d.ts +35 -0
  317. package/dist/proof/integrations.d.ts.map +1 -0
  318. package/dist/proof/integrations.js +123 -0
  319. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  320. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  321. package/dist/proof/producers/junit-adapter.js +186 -0
  322. package/dist/proof/producers/playwright-case-id.d.ts +8 -0
  323. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  324. package/dist/proof/producers/playwright-case-id.js +25 -0
  325. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  326. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  327. package/dist/proof/producers/playwright-reporter.js +138 -0
  328. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  329. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  330. package/dist/proof/producers/tap-adapter.js +200 -0
  331. package/dist/proof/receipt-outcome.d.ts +2 -0
  332. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  333. package/dist/proof/receipt-outcome.js +1 -0
  334. package/dist/public/branch-resolver.d.ts +1 -0
  335. package/dist/public/branch-resolver.d.ts.map +1 -1
  336. package/dist/public/branch-resolver.js +1 -0
  337. package/dist/public/check-types.d.ts +2 -2
  338. package/dist/public/check-types.d.ts.map +1 -1
  339. package/dist/public/check-types.js +16 -16
  340. package/dist/public/diagnostic-usage.d.ts.map +1 -1
  341. package/dist/public/diagnostic-usage.js +74 -6
  342. package/dist/public/distribution-parity.d.ts +7 -1
  343. package/dist/public/distribution-parity.d.ts.map +1 -1
  344. package/dist/public/distribution-parity.js +15 -9
  345. package/dist/public/ignore-policy.d.ts.map +1 -1
  346. package/dist/public/ignore-policy.js +16 -4
  347. package/dist/public/impact/coverage-depth-quality.d.ts +7 -1
  348. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  349. package/dist/public/impact/coverage-depth-quality.js +22 -4
  350. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  351. package/dist/public/impact/diagnostics.js +2 -2
  352. package/dist/public/impact/diff-meaning.d.ts +1 -0
  353. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  354. package/dist/public/impact/diff-meaning.js +5 -2
  355. package/dist/public/impact/full-kb-quality.d.ts +7 -2
  356. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  357. package/dist/public/impact/full-kb-quality.js +364 -39
  358. package/dist/public/impact/manifest.d.ts.map +1 -1
  359. package/dist/public/impact/manifest.js +2 -5
  360. package/dist/public/operational-artifacts.d.ts.map +1 -1
  361. package/dist/public/operational-artifacts.js +7 -1
  362. package/dist/public/operations/catalog.d.ts +900 -34
  363. package/dist/public/operations/catalog.d.ts.map +1 -1
  364. package/dist/public/operations/catalog.js +130 -6
  365. package/dist/public/operations/check-executor.d.ts +2 -2
  366. package/dist/public/operations/check-executor.d.ts.map +1 -1
  367. package/dist/public/operations/check-executor.js +68 -13
  368. package/dist/public/operations/check-format-shared.d.ts +3 -0
  369. package/dist/public/operations/check-format-shared.d.ts.map +1 -1
  370. package/dist/public/operations/check-format-shared.js +3 -0
  371. package/dist/public/operations/check-helpers.d.ts +27 -2
  372. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  373. package/dist/public/operations/check-helpers.js +62 -26
  374. package/dist/public/operations/contracts.d.ts +18 -0
  375. package/dist/public/operations/contracts.d.ts.map +1 -0
  376. package/dist/public/operations/contracts.js +334 -0
  377. package/dist/public/operations/discovery-entities.d.ts +3 -0
  378. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  379. package/dist/public/operations/discovery-entities.js +4 -0
  380. package/dist/public/operations/discovery-executors.d.ts +43 -7
  381. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  382. package/dist/public/operations/discovery-executors.js +216 -13
  383. package/dist/public/operations/index.d.ts +9 -4
  384. package/dist/public/operations/index.d.ts.map +1 -1
  385. package/dist/public/operations/index.js +8 -3
  386. package/dist/public/operations/migration-plan.d.ts +102 -0
  387. package/dist/public/operations/migration-plan.d.ts.map +1 -0
  388. package/dist/public/operations/migration-plan.js +539 -0
  389. package/dist/public/operations/node-ports.d.ts.map +1 -1
  390. package/dist/public/operations/node-ports.js +71 -11
  391. package/dist/public/operations/prolog-json.d.ts +14 -0
  392. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  393. package/dist/public/operations/prolog-json.js +44 -5
  394. package/dist/public/operations/repair-plan.d.ts +3 -3
  395. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  396. package/dist/public/operations/repair-plan.js +49 -18
  397. package/dist/public/operations/result-envelope.d.ts +14 -0
  398. package/dist/public/operations/result-envelope.d.ts.map +1 -0
  399. package/dist/public/operations/result-envelope.js +106 -0
  400. package/dist/public/operations/runtime-types.d.ts +102 -7
  401. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  402. package/dist/public/operations/source-relationship-parity.d.ts +13 -0
  403. package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
  404. package/dist/public/operations/source-relationship-parity.js +162 -0
  405. package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
  406. package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
  407. package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
  408. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  409. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  410. package/dist/public/operations/specs/check-rules.generated.js +34 -0
  411. package/dist/public/operations/specs/check.d.ts +9 -4
  412. package/dist/public/operations/specs/check.d.ts.map +1 -1
  413. package/dist/public/operations/specs/check.js +10 -21
  414. package/dist/public/operations/specs/discovery.d.ts +87 -3
  415. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  416. package/dist/public/operations/specs/discovery.js +53 -3
  417. package/dist/public/operations/specs/modeling.d.ts +3 -3
  418. package/dist/public/operations/specs/modeling.js +3 -3
  419. package/dist/public/operations/specs/mutation-schemas.d.ts +251 -14
  420. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  421. package/dist/public/operations/specs/mutation-schemas.js +16 -6
  422. package/dist/public/operations/specs/mutation.d.ts +42 -2
  423. package/dist/public/operations/specs/mutation.d.ts.map +1 -1
  424. package/dist/public/operations/specs/mutation.js +26 -2
  425. package/dist/public/operations/specs/planning.d.ts +279 -0
  426. package/dist/public/operations/specs/planning.d.ts.map +1 -0
  427. package/dist/public/operations/specs/planning.js +197 -0
  428. package/dist/public/operations/specs/proof.d.ts +212 -0
  429. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  430. package/dist/public/operations/specs/proof.js +30 -0
  431. package/dist/public/operations/specs/reporting.d.ts +23 -1
  432. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  433. package/dist/public/operations/specs/reporting.js +156 -11
  434. package/dist/public/operations/specs/upsert.d.ts +265 -14
  435. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  436. package/dist/public/operations/specs/upsert.js +9 -0
  437. package/dist/public/operations/symbol-repair-plan.d.ts +22 -0
  438. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
  439. package/dist/public/operations/symbol-repair-plan.js +238 -0
  440. package/dist/public/operations/types.d.ts +52 -1
  441. package/dist/public/operations/types.d.ts.map +1 -1
  442. package/dist/public/proof-fingerprint.d.ts +54 -0
  443. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  444. package/dist/public/proof-fingerprint.js +141 -0
  445. package/dist/public/proof-protocol.d.ts +354 -0
  446. package/dist/public/proof-protocol.d.ts.map +1 -0
  447. package/dist/public/proof-protocol.js +454 -0
  448. package/dist/public/proof-receipt.d.ts +279 -0
  449. package/dist/public/proof-receipt.d.ts.map +1 -0
  450. package/dist/public/proof-receipt.js +377 -0
  451. package/dist/public/schemas/entity.d.ts.map +1 -1
  452. package/dist/public/schemas/entity.js +22 -6
  453. package/dist/public/skills/kibi-bootstrap/SKILL.md +58 -0
  454. package/dist/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  455. package/dist/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  456. package/dist/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  457. package/dist/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  458. package/dist/public/skills/kibi-freshness/SKILL.md +39 -9
  459. package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  460. package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  461. package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  462. package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
  463. package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  464. package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  465. package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  466. package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
  467. package/dist/public/skills/kibi-usage/SKILL.md +136 -231
  468. package/dist/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  469. package/dist/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  470. package/dist/public/skills/kibi-usage/resources/operation-access.md +36 -38
  471. package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
  472. package/dist/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  473. package/dist/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  474. package/dist/public/skills/kibi-usage/resources/workflows.md +57 -4
  475. package/dist/public/symbol-granularity.d.ts +3 -14
  476. package/dist/public/symbol-granularity.d.ts.map +1 -1
  477. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  478. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  479. package/dist/public/symbol-granularity.generated.js +20 -0
  480. package/dist/public/symbol-granularity.js +6 -46
  481. package/dist/public/telemetry-acceptance.d.ts +3 -70
  482. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  483. package/dist/public/telemetry-acceptance.js +11 -2
  484. package/dist/public/telemetry-remediation.js +1 -1
  485. package/dist/relationships/shards.d.ts +16 -0
  486. package/dist/relationships/shards.d.ts.map +1 -1
  487. package/dist/relationships/shards.js +87 -2
  488. package/dist/report/brand.d.ts +19 -0
  489. package/dist/report/brand.d.ts.map +1 -0
  490. package/dist/report/brand.js +112 -0
  491. package/dist/report/html-report.css +282 -0
  492. package/dist/report/html-report.d.ts +21 -0
  493. package/dist/report/html-report.d.ts.map +1 -0
  494. package/dist/report/html-report.js +700 -0
  495. package/dist/report/relative-time.d.ts +4 -0
  496. package/dist/report/relative-time.d.ts.map +1 -0
  497. package/dist/report/relative-time.js +46 -0
  498. package/dist/report/report-view.d.ts +17 -0
  499. package/dist/report/report-view.d.ts.map +1 -0
  500. package/dist/report/report-view.js +33 -0
  501. package/dist/report/repository.d.ts +35 -0
  502. package/dist/report/repository.d.ts.map +1 -0
  503. package/dist/report/repository.js +151 -0
  504. package/dist/runtime/cli-runtime.d.ts +2 -0
  505. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  506. package/dist/runtime/cli-runtime.js +90 -23
  507. package/dist/schemas/entity.schema.json +1254 -239
  508. package/dist/search-ranking.d.ts +1 -0
  509. package/dist/search-ranking.d.ts.map +1 -1
  510. package/dist/search-ranking.js +3 -0
  511. package/dist/traceability/evidence-model.d.ts +30 -2
  512. package/dist/traceability/evidence-model.d.ts.map +1 -1
  513. package/dist/traceability/evidence-model.js +2 -2
  514. package/dist/traceability/git-staged.d.ts +20 -0
  515. package/dist/traceability/git-staged.d.ts.map +1 -1
  516. package/dist/traceability/git-staged.js +156 -37
  517. package/dist/traceability/markdown-validate.d.ts.map +1 -1
  518. package/dist/traceability/markdown-validate.js +12 -7
  519. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  520. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  521. package/dist/traceability/staged-diagnostics.js +78 -7
  522. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  523. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  524. package/dist/traceability/staged-file-coverage.js +284 -0
  525. package/dist/traceability/staged-impact-contract.d.ts +3 -3
  526. package/dist/traceability/staged-impact-contract.d.ts.map +1 -1
  527. package/dist/traceability/staged-impact-contract.js +12 -40
  528. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  529. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  530. package/dist/traceability/staged-symbols-manifest.js +142 -26
  531. package/dist/traceability/symbol-extract.d.ts +5 -0
  532. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  533. package/dist/traceability/symbol-extract.js +1 -1
  534. package/dist/traceability/temp-kb.d.ts +2 -0
  535. package/dist/traceability/temp-kb.d.ts.map +1 -1
  536. package/dist/traceability/temp-kb.js +14 -2
  537. package/dist/types/entities.d.ts +5 -0
  538. package/dist/types/entities.d.ts.map +1 -1
  539. package/dist/utils/branch-resolver.d.ts +25 -10
  540. package/dist/utils/branch-resolver.d.ts.map +1 -1
  541. package/dist/utils/branch-resolver.js +124 -38
  542. package/dist/utils/branch-store-locator.d.ts +23 -0
  543. package/dist/utils/branch-store-locator.d.ts.map +1 -0
  544. package/dist/utils/branch-store-locator.js +90 -0
  545. package/dist/utils/branch-store.d.ts +21 -0
  546. package/dist/utils/branch-store.d.ts.map +1 -0
  547. package/dist/utils/branch-store.js +157 -0
  548. package/dist/utils/config.d.ts +39 -37
  549. package/dist/utils/config.d.ts.map +1 -1
  550. package/dist/utils/config.js +107 -119
  551. package/dist/utils/kb-manifest.d.ts +35 -0
  552. package/dist/utils/kb-manifest.d.ts.map +1 -0
  553. package/dist/utils/kb-manifest.js +154 -0
  554. package/dist/utils/kb-paths.d.ts +54 -0
  555. package/dist/utils/kb-paths.d.ts.map +1 -0
  556. package/dist/utils/kb-paths.js +125 -0
  557. package/dist/utils/manifest-paths.d.ts +4 -4
  558. package/dist/utils/manifest-paths.d.ts.map +1 -1
  559. package/dist/utils/manifest-paths.js +8 -56
  560. package/dist/utils/rule-registry.d.ts +42 -24
  561. package/dist/utils/rule-registry.d.ts.map +1 -1
  562. package/dist/utils/rule-registry.generated.d.ts +97 -0
  563. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  564. package/dist/utils/rule-registry.generated.js +125 -0
  565. package/dist/utils/rule-registry.js +52 -148
  566. package/dist/utils/schema-version.d.ts +5 -5
  567. package/dist/utils/schema-version.d.ts.map +1 -1
  568. package/dist/utils/schema-version.js +26 -6
  569. package/dist/utils/strict-modeling.d.ts +1 -4
  570. package/dist/utils/strict-modeling.d.ts.map +1 -1
  571. package/dist/utils/strict-modeling.js +8 -9
  572. package/package.json +47 -11
  573. package/schema/config.json +2 -2
  574. package/schema/manifest.json +26 -0
  575. package/src/public/branch-resolver.ts +1 -0
  576. package/src/public/check-types.ts +22 -19
  577. package/src/public/diagnostic-usage.ts +84 -6
  578. package/src/public/distribution-parity.ts +17 -9
  579. package/src/public/ignore-policy.ts +16 -10
  580. package/src/public/impact/coverage-depth-quality.ts +37 -1
  581. package/src/public/impact/diagnostics.ts +2 -1
  582. package/src/public/impact/diff-meaning.ts +11 -4
  583. package/src/public/impact/full-kb-quality.ts +545 -41
  584. package/src/public/impact/manifest.ts +2 -4
  585. package/src/public/operational-artifacts.ts +9 -1
  586. package/src/public/operations/catalog.ts +153 -10
  587. package/src/public/operations/check-executor.ts +98 -15
  588. package/src/public/operations/check-format-shared.ts +6 -0
  589. package/src/public/operations/check-helpers.ts +74 -35
  590. package/src/public/operations/contracts.ts +382 -0
  591. package/src/public/operations/discovery-entities.ts +7 -0
  592. package/src/public/operations/discovery-executors.ts +315 -25
  593. package/src/public/operations/index.ts +9 -4
  594. package/src/public/operations/migration-plan.ts +747 -0
  595. package/src/public/operations/node-ports.ts +87 -13
  596. package/src/public/operations/prolog-json.ts +60 -5
  597. package/src/public/operations/repair-plan.ts +60 -22
  598. package/src/public/operations/result-envelope.ts +141 -0
  599. package/src/public/operations/runtime-types.ts +96 -5
  600. package/src/public/operations/source-relationship-parity.ts +226 -0
  601. package/src/public/operations/specs/{autopilot.ts → bootstrap.ts} +17 -16
  602. package/src/public/operations/specs/check-rules.generated.ts +37 -0
  603. package/src/public/operations/specs/check.ts +14 -22
  604. package/src/public/operations/specs/discovery.ts +57 -3
  605. package/src/public/operations/specs/modeling.ts +3 -3
  606. package/src/public/operations/specs/mutation-schemas.ts +24 -6
  607. package/src/public/operations/specs/mutation.ts +27 -2
  608. package/src/public/operations/specs/planning.ts +241 -0
  609. package/src/public/operations/specs/proof.ts +43 -0
  610. package/src/public/operations/specs/reporting.ts +193 -12
  611. package/src/public/operations/specs/upsert.ts +10 -0
  612. package/src/public/operations/symbol-repair-plan.ts +324 -0
  613. package/src/public/operations/types.ts +62 -1
  614. package/src/public/proof-fingerprint.ts +216 -0
  615. package/src/public/proof-protocol-types.d.ts +96 -0
  616. package/src/public/proof-protocol.ts +589 -0
  617. package/src/public/proof-receipt.ts +499 -0
  618. package/src/public/schemas/entity.ts +27 -6
  619. package/src/public/skills/kibi-bootstrap/SKILL.md +58 -0
  620. package/src/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  621. package/src/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  622. package/src/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  623. package/src/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  624. package/src/public/skills/kibi-freshness/SKILL.md +39 -9
  625. package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  626. package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  627. package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  628. package/src/public/skills/kibi-traceability/SKILL.md +47 -47
  629. package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  630. package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  631. package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  632. package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
  633. package/src/public/skills/kibi-usage/SKILL.md +136 -231
  634. package/src/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  635. package/src/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  636. package/src/public/skills/kibi-usage/resources/operation-access.md +36 -38
  637. package/src/public/skills/kibi-usage/resources/proof.md +105 -0
  638. package/src/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  639. package/src/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  640. package/src/public/skills/kibi-usage/resources/workflows.md +57 -4
  641. package/src/public/symbol-granularity.generated.ts +41 -0
  642. package/src/public/symbol-granularity.ts +35 -59
  643. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  644. package/src/public/telemetry-acceptance.ts +30 -93
  645. package/src/public/telemetry-remediation.ts +1 -1
  646. package/src/schemas/entity.schema.json +1254 -239
  647. package/templates/github/kibi-badge.yml +86 -0
  648. package/templates/github/kibi-report.yml +84 -0
  649. package/dist/operations/autopilot/activation.d.ts +0 -4
  650. package/dist/operations/autopilot/activation.d.ts.map +0 -1
  651. package/dist/operations/autopilot/candidates.d.ts +0 -4
  652. package/dist/operations/autopilot/discovery.d.ts.map +0 -1
  653. package/dist/operations/autopilot/generate.d.ts +0 -8
  654. package/dist/operations/autopilot/generate.d.ts.map +0 -1
  655. package/dist/operations/autopilot/generate.js +0 -112
  656. package/dist/operations/autopilot/guidance.d.ts.map +0 -1
  657. package/dist/operations/autopilot/presentation.d.ts +0 -13
  658. package/dist/operations/autopilot/presentation.d.ts.map +0 -1
  659. package/dist/operations/autopilot/presentation.js +0 -91
  660. package/dist/operations/autopilot/types.d.ts.map +0 -1
  661. package/dist/operations/autopilot/types.js +0 -8
  662. package/dist/public/operations/specs/autopilot.d.ts.map +0 -1
  663. package/dist/public/skills/init-kibi/SKILL.md +0 -62
  664. package/dist/public/verification-receipt.d.ts +0 -75
  665. package/dist/public/verification-receipt.d.ts.map +0 -1
  666. package/dist/public/verification-receipt.js +0 -129
  667. package/src/public/skills/init-kibi/SKILL.md +0 -62
  668. package/src/public/verification-receipt.ts +0 -170
  669. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts +0 -0
  670. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.js +0 -0
  671. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts +0 -0
  672. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.js +0 -0
@@ -1,84 +1,153 @@
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 { execSync } from "node:child_process";
1
+ import { spawnSync } from "node:child_process";
19
2
  import * as fs from "node:fs";
20
3
  import * as path from "node:path";
21
- export async function gcCommand(options) {
22
- // If force is true, perform deletion. Otherwise default to dry run.
23
- const dryRun = options?.force ? false : (options?.dryRun ?? true);
24
- try {
25
- const kbRoot = path.resolve(process.cwd(), ".kb/branches");
26
- if (!fs.existsSync(kbRoot)) {
27
- console.error("No branch KBs found (.kb/branches does not exist)");
28
- process.exitCode = 1;
29
- return;
4
+ import { branchStoreKey, branchStoresRoot, readBranchStoreManifest, } from "../utils/branch-store-locator.js";
5
+ const DEFAULT_RETENTION_DAYS = 30;
6
+ function localBranches(workspaceRoot) {
7
+ const result = spawnSync("git", ["branch", "--format=%(refname:short)"], {
8
+ encoding: "utf8",
9
+ cwd: workspaceRoot,
10
+ stdio: ["pipe", "pipe", "pipe"],
11
+ });
12
+ if (result.status !== 0) {
13
+ throw new Error(result.stderr?.trim() || "unable to list local Git branches");
14
+ }
15
+ const output = result.stdout ?? "";
16
+ const live = new Set(output
17
+ .split("\n")
18
+ .map((branch) => branch.trim())
19
+ .filter(Boolean));
20
+ // A branch checked out in another worktree is live even when it is not the
21
+ // current worktree's symbolic HEAD. Remote-only refs are deliberately not
22
+ // included: they have no local authored checkout to protect.
23
+ const worktrees = spawnSync("git", ["worktree", "list", "--porcelain"], {
24
+ encoding: "utf8",
25
+ cwd: workspaceRoot,
26
+ stdio: ["pipe", "pipe", "pipe"],
27
+ });
28
+ if (worktrees.status === 0) {
29
+ for (const line of (worktrees.stdout ?? "").split("\n")) {
30
+ const match = line.match(/^branch refs\/heads\/(.+)$/);
31
+ if (match?.[1])
32
+ live.add(match[1]);
30
33
  }
31
- let gitBranches;
32
- try {
33
- execSync("git rev-parse --git-dir", {
34
- encoding: "utf-8",
35
- cwd: process.cwd(),
36
- stdio: ["pipe", "pipe", "pipe"],
37
- env: process.env,
38
- });
39
- const output = execSync("git branch --format='%(refname:short)'", {
40
- encoding: "utf-8",
41
- cwd: process.cwd(),
42
- stdio: ["pipe", "pipe", "pipe"],
43
- env: process.env,
44
- });
45
- gitBranches = new Set(output
46
- .trim()
47
- .split("\n")
48
- .map((b) => b.trim().replace(/^'|'$/g, ""))
49
- .filter((b) => b));
34
+ }
35
+ return live;
36
+ }
37
+ function quarantineRoot(workspaceRoot) {
38
+ return path.join(workspaceRoot, ".kb", "quarantine", "branches");
39
+ }
40
+ function quarantineBranch(workspaceRoot, sourcePath, branch) {
41
+ const target = path.join(quarantineRoot(workspaceRoot), branchStoreKey(branch), new Date().toISOString().replaceAll(":", "-"));
42
+ fs.mkdirSync(path.dirname(target), { recursive: true });
43
+ fs.renameSync(sourcePath, target);
44
+ fs.writeFileSync(path.join(target, "quarantine.json"), `${JSON.stringify({
45
+ version: 1,
46
+ branch,
47
+ key: branchStoreKey(branch),
48
+ quarantinedAt: new Date().toISOString(),
49
+ sourcePath: path.relative(workspaceRoot, sourcePath),
50
+ }, null, 2)}\n`, { mode: 0o600 });
51
+ return target;
52
+ }
53
+ function purgeQuarantine(workspaceRoot, retentionDays) {
54
+ const root = quarantineRoot(workspaceRoot);
55
+ if (!fs.existsSync(root))
56
+ return 0;
57
+ const cutoff = Date.now() - retentionDays * 24 * 60 * 60 * 1000;
58
+ let purged = 0;
59
+ for (const key of fs.readdirSync(root, { withFileTypes: true })) {
60
+ if (!key.isDirectory())
61
+ continue;
62
+ const keyPath = path.join(root, key.name);
63
+ for (const entry of fs.readdirSync(keyPath, { withFileTypes: true })) {
64
+ if (!entry.isDirectory())
65
+ continue;
66
+ const candidate = path.join(keyPath, entry.name);
67
+ const metadataPath = path.join(candidate, "quarantine.json");
68
+ let quarantinedAt = fs.statSync(candidate).mtimeMs;
69
+ try {
70
+ const metadata = JSON.parse(fs.readFileSync(metadataPath, "utf8"));
71
+ if (metadata.quarantinedAt) {
72
+ const parsed = Date.parse(metadata.quarantinedAt);
73
+ if (Number.isFinite(parsed))
74
+ quarantinedAt = parsed;
75
+ }
76
+ }
77
+ catch {
78
+ // A missing or malformed journal falls back to the directory mtime.
79
+ }
80
+ if (retentionDays > 0 && quarantinedAt > cutoff)
81
+ continue;
82
+ fs.rmSync(candidate, { recursive: true, force: true });
83
+ purged += 1;
84
+ }
85
+ if (fs.readdirSync(keyPath).length === 0) {
86
+ fs.rmSync(keyPath, { recursive: true, force: true });
50
87
  }
51
- catch (error) {
52
- const message = error instanceof Error ? error.message : String(error);
53
- console.error(`Not in a git repository or git command failed: ${message}`);
54
- process.exitCode = 1;
88
+ }
89
+ return purged;
90
+ }
91
+ export async function gcCommand(options = {}) {
92
+ const workspaceRoot = process.cwd();
93
+ const retentionDays = Number.isFinite(options.retentionDays) && (options.retentionDays ?? 0) >= 0
94
+ ? Math.floor(options.retentionDays)
95
+ : DEFAULT_RETENTION_DAYS;
96
+ const branchesRoot = branchStoresRoot(workspaceRoot);
97
+ try {
98
+ if (!fs.existsSync(branchesRoot)) {
99
+ console.log("No branch KBs found (.kb/branches does not exist)");
100
+ process.exitCode = 0;
55
101
  return;
56
102
  }
57
- const kbBranches = fs
58
- .readdirSync(kbRoot, { withFileTypes: true })
59
- .filter((d) => d.isDirectory())
60
- .map((d) => d.name);
61
- // Branches are protected if they exist in git - no default branch concept
62
- const staleBranches = kbBranches.filter((kb) => !gitBranches.has(kb));
63
- // Perform deletion when dryRun is false (force requested)
64
- const performDelete = !dryRun;
65
- let deletedCount = 0;
66
- if (performDelete && staleBranches.length > 0) {
67
- for (const branch of staleBranches) {
68
- const branchPath = path.join(kbRoot, branch);
69
- fs.rmSync(branchPath, { recursive: true, force: true });
70
- deletedCount++;
103
+ const live = localBranches(workspaceRoot);
104
+ const candidates = [];
105
+ const visit = (dir, relativeBranch) => {
106
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
107
+ for (const entry of entries) {
108
+ const candidatePath = path.join(dir, entry.name);
109
+ if (!entry.isDirectory())
110
+ continue;
111
+ const manifest = readBranchStoreManifest(candidatePath);
112
+ if (manifest !== null) {
113
+ candidates.push({
114
+ branch: manifest.branch,
115
+ path: candidatePath,
116
+ legacy: false,
117
+ });
118
+ continue;
119
+ }
120
+ const next = relativeBranch
121
+ ? `${relativeBranch}/${entry.name}`
122
+ : entry.name;
123
+ if (fs.existsSync(path.join(candidatePath, "kb.rdf")) ||
124
+ fs.existsSync(path.join(candidatePath, "storage.json"))) {
125
+ candidates.push({ branch: next, path: candidatePath, legacy: true });
126
+ }
127
+ else {
128
+ visit(candidatePath, next);
129
+ }
130
+ }
131
+ };
132
+ visit(branchesRoot, "");
133
+ const stale = candidates.filter(({ branch }) => !live.has(branch));
134
+ if (!options.force && !options.purge) {
135
+ console.log(`Found ${stale.length} stale branch KB(s) (dry run - not quarantined)`);
136
+ for (const candidate of stale) {
137
+ console.log(` - ${candidate.branch}: ${candidate.path}`);
71
138
  }
139
+ process.exitCode = 0;
140
+ return;
72
141
  }
73
- if (dryRun) {
74
- console.log(`Found ${staleBranches.length} stale branch KB(s) (dry run - not deleted)`);
75
- if (staleBranches.length > 0) {
76
- for (const b of staleBranches)
77
- console.log(` - ${b}`);
142
+ if (options.force && !options.purge) {
143
+ for (const candidate of stale) {
144
+ const destination = quarantineBranch(workspaceRoot, candidate.path, candidate.branch);
145
+ console.log(`Quarantined ${candidate.branch}: ${destination}`);
78
146
  }
79
147
  }
80
- else {
81
- console.log(`Deleted ${deletedCount} stale branch KB(s)`);
148
+ if (options.purge) {
149
+ const purged = purgeQuarantine(workspaceRoot, retentionDays);
150
+ console.log(`Purged ${purged} quarantined branch store(s) older than ${retentionDays} day(s)`);
82
151
  }
83
152
  process.exitCode = 0;
84
153
  }
@@ -0,0 +1,57 @@
1
+ export declare const GITHUB_REPORT_WORKFLOW_RELPATH = ".github/workflows/kibi-report.yml";
2
+ export declare const GITHUB_BADGE_WORKFLOW_RELPATH = ".github/workflows/kibi-badge.yml";
3
+ export declare const GITHUB_PAGES_NAMESPACE = "kibi-report";
4
+ export declare const KIBI_BADGE_ALT = "Kibi requirement health";
5
+ export declare const KIBI_METRIC_DOCS_URL = "https://github.com/Looted/kibi/blob/develop/docs/github-integration.md#what-the-badge-means";
6
+ export declare const PLACEHOLDER_OWNER = "OWNER";
7
+ export declare const PLACEHOLDER_REPO = "REPOSITORY";
8
+ export type GitHubRepo = Readonly<{
9
+ owner: string;
10
+ repo: string;
11
+ }>;
12
+ export type GitRemote = Readonly<{
13
+ name: string;
14
+ url: string;
15
+ }>;
16
+ export type GitHubPagesUrls = Readonly<{
17
+ siteUrl: string;
18
+ badgeUrl: string;
19
+ }>;
20
+ export type GitHubWorkflowKind = "report" | "badge";
21
+ export type WorkflowWriteStatus = "created" | "unchanged" | "conflict";
22
+ export type ReadmeWriteStatus = "updated" | "unchanged" | "printed" | "skipped-unknown-repo";
23
+ export type GitIgnoreWriteStatus = "updated" | "unchanged";
24
+ export type GitHubScaffoldOptions = Readonly<{
25
+ cwd: string;
26
+ badgeOnly: boolean;
27
+ }>;
28
+ export type GitHubInitDeps = Readonly<{
29
+ listRemotes?: (cwd: string) => GitRemote[];
30
+ log?: (message: string) => void;
31
+ error?: (message: string) => void;
32
+ }>;
33
+ export type GitHubScaffoldResult = Readonly<{
34
+ exitCode: number;
35
+ workflow: WorkflowWriteStatus;
36
+ readme: ReadmeWriteStatus;
37
+ gitignore: GitIgnoreWriteStatus;
38
+ repo: GitHubRepo | undefined;
39
+ }>;
40
+ export declare function githubTemplateDir(): string;
41
+ export declare function githubWorkflowTemplateFileName(kind: GitHubWorkflowKind): string;
42
+ export declare function loadGitHubWorkflowTemplate(kind: GitHubWorkflowKind): string;
43
+ export declare function parseGitHubRemote(url: string): GitHubRepo | undefined;
44
+ export declare function githubPagesUrls(repo: GitHubRepo): GitHubPagesUrls;
45
+ export declare function formatKibiBadgeMarkdown(badgeUrl: string, linkUrl: string): string;
46
+ export declare function placeholderPagesUrls(): GitHubPagesUrls;
47
+ export declare function placeholderBadgeMarkdown(badgeOnly: boolean): string;
48
+ export declare function hasKibiBadge(content: string): boolean;
49
+ export declare function detectReadmePath(cwd: string): string | undefined;
50
+ export declare function insertKibiBadge(content: string, badgeMarkdown: string): string;
51
+ export declare function listGitRemotes(cwd: string): GitRemote[];
52
+ export declare function resolveGitHubRepo(remotes: readonly GitRemote[]): GitHubRepo | undefined;
53
+ export declare function writeGitHubWorkflow(cwd: string, kind: GitHubWorkflowKind, template: string): WorkflowWriteStatus;
54
+ export declare function ensureKibiReportGitIgnore(cwd: string): GitIgnoreWriteStatus;
55
+ export declare function scaffoldGitHubIntegration(options: GitHubScaffoldOptions, deps?: GitHubInitDeps): GitHubScaffoldResult;
56
+ export declare function skipBlankLines(lines: readonly string[], start: number): number;
57
+ //# sourceMappingURL=github-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-init.d.ts","sourceRoot":"","sources":["../../src/commands/github-init.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,8BAA8B,sCACN,CAAC;AACtC,eAAO,MAAM,6BAA6B,qCAAqC,CAAC;AAChF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AACpD,eAAO,MAAM,cAAc,4BAA4B,CAAC;AACxD,eAAO,MAAM,oBAAoB,gGAC8D,CAAC;AAChG,eAAO,MAAM,iBAAiB,UAAU,CAAC;AACzC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAM7C,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AACvE,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,WAAW,GACX,SAAS,GACT,sBAAsB,CAAC;AAC3B,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IAC3C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,oBAAoB,CAAC;IAChC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;CAC9B,CAAC,CAAC;AAGH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,kBAAkB,GACvB,MAAM,CAER;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAS3E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CA+BrE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAUjE;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAKtD;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAMnE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQhE;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,MAAM,CAuBR;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAiBvD;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,SAAS,EAAE,GAC5B,UAAU,GAAG,SAAS,CASxB;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAcrB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAa3E;AAGD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,IAAI,GAAE,cAAmB,GACxB,oBAAoB,CAsDtB;AAsDD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,KAAK,EAAE,MAAM,GACZ,MAAM,CAMR"}
@@ -0,0 +1,314 @@
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 { execFileSync } from "node:child_process";
19
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
20
+ import * as path from "node:path";
21
+ import { fileURLToPath } from "node:url";
22
+ const __filename = fileURLToPath(import.meta.url);
23
+ const __dirname = path.dirname(__filename);
24
+ export const GITHUB_REPORT_WORKFLOW_RELPATH = ".github/workflows/kibi-report.yml";
25
+ export const GITHUB_BADGE_WORKFLOW_RELPATH = ".github/workflows/kibi-badge.yml";
26
+ export const GITHUB_PAGES_NAMESPACE = "kibi-report";
27
+ export const KIBI_BADGE_ALT = "Kibi requirement health";
28
+ export const KIBI_METRIC_DOCS_URL = "https://github.com/Looted/kibi/blob/develop/docs/github-integration.md#what-the-badge-means";
29
+ export const PLACEHOLDER_OWNER = "OWNER";
30
+ export const PLACEHOLDER_REPO = "REPOSITORY";
31
+ const README_CANDIDATES = ["README.md", "readme.md", "Readme.md"];
32
+ const BADGE_OR_IMAGE_LINE = /^\s*(?:\[!\[[^\]]*\]\([^)]+\)\]\([^)]+\)|!\[[^\]]*\]\([^)]+\))\s*$/;
33
+ // implements REQ-kibi-github-report-integration
34
+ export function githubTemplateDir() {
35
+ return path.resolve(__dirname, "..", "..", "templates", "github");
36
+ }
37
+ export function githubWorkflowTemplateFileName(kind) {
38
+ return kind === "badge" ? "kibi-badge.yml" : "kibi-report.yml";
39
+ }
40
+ export function loadGitHubWorkflowTemplate(kind) {
41
+ const templatePath = path.join(githubTemplateDir(), githubWorkflowTemplateFileName(kind));
42
+ if (!existsSync(templatePath)) {
43
+ throw new Error(`Kibi GitHub workflow template missing: ${templatePath}`);
44
+ }
45
+ return readFileSync(templatePath, "utf8");
46
+ }
47
+ export function parseGitHubRemote(url) {
48
+ const trimmed = url.trim();
49
+ if (trimmed.length === 0) {
50
+ return undefined;
51
+ }
52
+ const patterns = [
53
+ /^https?:\/\/(?:[^/@]+@)?(?:www\.)?github\.com\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/i,
54
+ /^git@github\.com:([^/]+)\/([^/]+?)(?:\.git)?\/?$/i,
55
+ /^ssh:\/\/(?:git@)?github\.com(?::\d+)?\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/i,
56
+ /^git:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/i,
57
+ ];
58
+ for (const pattern of patterns) {
59
+ const match = trimmed.match(pattern);
60
+ const owner = match?.[1];
61
+ const repoRaw = match?.[2];
62
+ if (!owner || !repoRaw) {
63
+ continue;
64
+ }
65
+ if (owner.includes(":") || repoRaw.includes(" ")) {
66
+ return undefined;
67
+ }
68
+ const repo = repoRaw.replace(/\.git$/i, "");
69
+ if (owner.length === 0 || repo.length === 0) {
70
+ return undefined;
71
+ }
72
+ return { owner, repo };
73
+ }
74
+ return undefined;
75
+ }
76
+ export function githubPagesUrls(repo) {
77
+ const owner = repo.owner.toLowerCase();
78
+ const name = repo.repo.toLowerCase();
79
+ const isUserSite = name === `${owner}.github.io`;
80
+ const origin = isUserSite
81
+ ? `https://${owner}.github.io/`
82
+ : `https://${owner}.github.io/${name}/`;
83
+ const siteUrl = `${origin}${GITHUB_PAGES_NAMESPACE}/`;
84
+ const badgeUrl = `${siteUrl}badge.svg`;
85
+ return { siteUrl, badgeUrl };
86
+ }
87
+ export function formatKibiBadgeMarkdown(badgeUrl, linkUrl) {
88
+ return `[![${KIBI_BADGE_ALT}](${badgeUrl})](${linkUrl})`;
89
+ }
90
+ export function placeholderPagesUrls() {
91
+ return {
92
+ siteUrl: `https://${PLACEHOLDER_OWNER}.github.io/${PLACEHOLDER_REPO}/${GITHUB_PAGES_NAMESPACE}/`,
93
+ badgeUrl: `https://${PLACEHOLDER_OWNER}.github.io/${PLACEHOLDER_REPO}/${GITHUB_PAGES_NAMESPACE}/badge.svg`,
94
+ };
95
+ }
96
+ export function placeholderBadgeMarkdown(badgeOnly) {
97
+ const urls = placeholderPagesUrls();
98
+ return formatKibiBadgeMarkdown(urls.badgeUrl, badgeOnly ? KIBI_METRIC_DOCS_URL : urls.siteUrl);
99
+ }
100
+ export function hasKibiBadge(content) {
101
+ return /\[!\[Kibi requirement health\]/i.test(content);
102
+ }
103
+ export function detectReadmePath(cwd) {
104
+ for (const name of README_CANDIDATES) {
105
+ const candidate = path.join(cwd, name);
106
+ if (existsSync(candidate)) {
107
+ return candidate;
108
+ }
109
+ }
110
+ return undefined;
111
+ }
112
+ export function insertKibiBadge(content, badgeMarkdown) {
113
+ const newline = content.includes("\r\n") ? "\r\n" : "\n";
114
+ const lines = content.split(/\r?\n/);
115
+ let h1Index = -1;
116
+ for (let index = 0; index < lines.length; index += 1) {
117
+ if (/^#\s+\S/.test(lines[index] ?? "")) {
118
+ h1Index = index;
119
+ break;
120
+ }
121
+ }
122
+ const clusterEnd = findBadgeClusterEnd(lines, h1Index >= 0 ? h1Index + 1 : 0);
123
+ if (h1Index >= 0) {
124
+ const insertAt = clusterEnd > h1Index + 1 ? clusterEnd : h1Index + 1;
125
+ return insertLine(lines, insertAt, badgeMarkdown, newline);
126
+ }
127
+ if (clusterEnd > 0) {
128
+ return insertLine(lines, clusterEnd, badgeMarkdown, newline);
129
+ }
130
+ if (content.length === 0) {
131
+ return `${badgeMarkdown}${newline}`;
132
+ }
133
+ return `${badgeMarkdown}${newline}${newline}${content}`;
134
+ }
135
+ export function listGitRemotes(cwd) {
136
+ try {
137
+ const output = execFileSync("git", ["-C", cwd, "remote", "-v"], {
138
+ encoding: "utf8",
139
+ stdio: ["ignore", "pipe", "pipe"],
140
+ });
141
+ const remotes = [];
142
+ for (const line of output.split("\n")) {
143
+ const match = line.match(/^(\S+)\s+(\S+)\s+\(fetch\)$/);
144
+ if (match?.[1] && match[2]) {
145
+ remotes.push({ name: match[1], url: match[2] });
146
+ }
147
+ }
148
+ return remotes;
149
+ }
150
+ catch {
151
+ return [];
152
+ }
153
+ }
154
+ export function resolveGitHubRepo(remotes) {
155
+ const parsed = remotes
156
+ .map((remote) => ({ remote, repo: parseGitHubRemote(remote.url) }))
157
+ .filter((entry) => entry.repo !== undefined);
158
+ const origin = parsed.find((entry) => entry.remote.name === "origin");
159
+ return origin?.repo ?? parsed[0]?.repo;
160
+ }
161
+ export function writeGitHubWorkflow(cwd, kind, template) {
162
+ const relativePath = kind === "badge"
163
+ ? GITHUB_BADGE_WORKFLOW_RELPATH
164
+ : GITHUB_REPORT_WORKFLOW_RELPATH;
165
+ const dest = path.join(cwd, relativePath);
166
+ const normalizedTemplate = normalizeNewlines(template);
167
+ if (existsSync(dest)) {
168
+ const existing = normalizeNewlines(readFileSync(dest, "utf8"));
169
+ return existing === normalizedTemplate ? "unchanged" : "conflict";
170
+ }
171
+ mkdirSync(path.dirname(dest), { recursive: true });
172
+ writeFileSync(dest, normalizedTemplate);
173
+ return "created";
174
+ }
175
+ export function ensureKibiReportGitIgnore(cwd) {
176
+ const gitignorePath = path.join(cwd, ".gitignore");
177
+ const current = existsSync(gitignorePath)
178
+ ? readFileSync(gitignorePath, "utf8")
179
+ : "";
180
+ if (/(?:^|\n)kibi-report\/(?:\n|$)/.test(current)) {
181
+ return "unchanged";
182
+ }
183
+ const next = current
184
+ ? `${current.replace(/\s*$/, "")}\nkibi-report/\n`
185
+ : "kibi-report/\n";
186
+ writeFileSync(gitignorePath, next);
187
+ return "updated";
188
+ }
189
+ // implements REQ-kibi-github-report-integration
190
+ export function scaffoldGitHubIntegration(options, deps = {}) {
191
+ const log = deps.log ?? ((message) => console.log(message));
192
+ const error = deps.error ?? ((message) => console.error(message));
193
+ const listRemotes = deps.listRemotes ?? listGitRemotes;
194
+ const kind = options.badgeOnly ? "badge" : "report";
195
+ const workflowPath = kind === "badge"
196
+ ? GITHUB_BADGE_WORKFLOW_RELPATH
197
+ : GITHUB_REPORT_WORKFLOW_RELPATH;
198
+ const siblingPath = kind === "badge"
199
+ ? GITHUB_REPORT_WORKFLOW_RELPATH
200
+ : GITHUB_BADGE_WORKFLOW_RELPATH;
201
+ const template = loadGitHubWorkflowTemplate(kind);
202
+ const workflow = writeGitHubWorkflow(options.cwd, kind, template);
203
+ const gitignore = ensureKibiReportGitIgnore(options.cwd);
204
+ const repo = resolveGitHubRepo(listRemotes(options.cwd));
205
+ if (existsSync(path.join(options.cwd, siblingPath))) {
206
+ error(`Warning: ${siblingPath} already exists. GitHub Pages can host one site; keep a single Kibi workflow.`);
207
+ }
208
+ if (workflow === "created") {
209
+ log(`✓ Added ${workflowPath}`);
210
+ }
211
+ else if (workflow === "unchanged") {
212
+ log(`✓ ${workflowPath} already configured`);
213
+ }
214
+ else {
215
+ error(`Warning: ${workflowPath} already exists and differs from the Kibi template.`);
216
+ error(`Left the existing file in place. Compare it with https://github.com/Looted/kibi/blob/develop/docs/examples/github/${githubWorkflowTemplateFileName(kind)}.`);
217
+ }
218
+ if (gitignore === "updated") {
219
+ log("✓ Added kibi-report/ to .gitignore");
220
+ }
221
+ const readme = updateReadmeBadge(options, repo, log, error);
222
+ log("");
223
+ log("Manual step required:");
224
+ log("GitHub → Settings → Pages → Source → GitHub Actions");
225
+ return {
226
+ exitCode: 0,
227
+ workflow,
228
+ readme,
229
+ gitignore,
230
+ repo,
231
+ };
232
+ }
233
+ function updateReadmeBadge(options, repo, log, error) {
234
+ const markdown = repo
235
+ ? formatKibiBadgeMarkdown(githubPagesUrls(repo).badgeUrl, options.badgeOnly
236
+ ? KIBI_METRIC_DOCS_URL
237
+ : githubPagesUrls(repo).siteUrl)
238
+ : placeholderBadgeMarkdown(options.badgeOnly);
239
+ const readmePath = detectReadmePath(options.cwd);
240
+ if (!repo) {
241
+ error("Warning: Could not determine a github.com owner/repository from git remotes.");
242
+ error("Did not invent a badge URL. Add this Markdown after replacing OWNER/REPOSITORY:");
243
+ log(markdown);
244
+ if (!readmePath) {
245
+ return "printed";
246
+ }
247
+ return "skipped-unknown-repo";
248
+ }
249
+ if (!readmePath) {
250
+ log("No README found. Add this badge Markdown manually:");
251
+ log(markdown);
252
+ return "printed";
253
+ }
254
+ const existing = readFileSync(readmePath, "utf8");
255
+ if (hasKibiBadge(existing)) {
256
+ log("✓ README already contains the Kibi requirement-health badge");
257
+ return "unchanged";
258
+ }
259
+ writeFileSync(readmePath, insertKibiBadge(existing, markdown));
260
+ log(`✓ Added Kibi requirement-health badge to ${path.basename(readmePath)}`);
261
+ return "updated";
262
+ }
263
+ function normalizeNewlines(value) {
264
+ const unix = value.replace(/\r\n/g, "\n");
265
+ return unix.endsWith("\n") ? unix : `${unix}\n`;
266
+ }
267
+ export function skipBlankLines(lines, start) {
268
+ let peek = start;
269
+ while (peek < lines.length && (lines[peek] ?? "").trim() === "") {
270
+ peek += 1;
271
+ }
272
+ return peek;
273
+ }
274
+ function findBadgeClusterEnd(lines, start) {
275
+ let index = start;
276
+ while (index < lines.length && (lines[index] ?? "").trim() === "") {
277
+ index += 1;
278
+ }
279
+ if (index >= lines.length || !BADGE_OR_IMAGE_LINE.test(lines[index] ?? "")) {
280
+ return start;
281
+ }
282
+ while (index < lines.length) {
283
+ const line = lines[index] ?? "";
284
+ if (BADGE_OR_IMAGE_LINE.test(line)) {
285
+ index += 1;
286
+ continue;
287
+ }
288
+ if (line.trim() === "") {
289
+ const peek = skipBlankLines(lines, index + 1);
290
+ if (peek < lines.length && BADGE_OR_IMAGE_LINE.test(lines[peek] ?? "")) {
291
+ index = peek;
292
+ continue;
293
+ }
294
+ break;
295
+ }
296
+ break;
297
+ }
298
+ return index;
299
+ }
300
+ function insertLine(lines, index, badgeMarkdown, newline) {
301
+ const before = lines.slice(0, index);
302
+ const after = lines.slice(index);
303
+ const prefixBlank = before.length === 0 || (before[before.length - 1] ?? "").trim() === ""
304
+ ? []
305
+ : [""];
306
+ const suffixBlank = after.length === 0 || (after[0] ?? "").trim() === "" ? [] : [""];
307
+ return [
308
+ ...before,
309
+ ...prefixBlank,
310
+ badgeMarkdown,
311
+ ...suffixBlank,
312
+ ...after,
313
+ ].join(newline);
314
+ }
@@ -1,6 +1,6 @@
1
1
  export declare function getCurrentBranch(cwd?: string): Promise<string>;
2
2
  export declare function createKbDirectoryStructure(kbDir: string, currentBranch: string): void;
3
- export declare function createConfigFile(kbDir: string): void;
3
+ export declare function createManifestFile(kbDir: string): void;
4
4
  export declare function updateGitIgnore(cwd: string): void;
5
5
  export declare function ensureSymbolsManifestFile(cwd: string): void;
6
6
  export declare function copySchemaFiles(kbDir: string, schemaSourceDir: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"init-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/init-helpers.ts"],"names":[],"mappings":"AAoGA,wBAAsB,gBAAgB,CACpC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,IAAI,CAQN;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAqBjD;AAGD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAW3D;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAYf;AASD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAkCnE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBpD"}
1
+ {"version":3,"file":"init-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/init-helpers.ts"],"names":[],"mappings":"AAkIA,wBAAsB,gBAAgB,CACpC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,IAAI,CAUN;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA6BjD;AAiDD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAU3D;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAYf;AASD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAkCnE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBpD"}