kibi-cli 0.19.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/dist/cli-operation-loader.d.ts.map +1 -1
  2. package/dist/cli-operation-loader.js +53 -20
  3. package/dist/cli-operation-metadata.d.ts +20 -8
  4. package/dist/cli-operation-metadata.d.ts.map +1 -1
  5. package/dist/cli-operation-metadata.js +23 -8
  6. package/dist/cli-protocol.d.ts.map +1 -1
  7. package/dist/cli-protocol.js +38 -8
  8. package/dist/cli-register-foundation.d.ts.map +1 -1
  9. package/dist/cli-register-foundation.js +14 -2
  10. package/dist/cli-register-maintenance.d.ts.map +1 -1
  11. package/dist/cli-register-maintenance.js +26 -4
  12. package/dist/cli-register-reporting.d.ts.map +1 -1
  13. package/dist/cli-register-reporting.js +10 -0
  14. package/dist/cli-register-verification.d.ts +3 -0
  15. package/dist/cli-register-verification.d.ts.map +1 -0
  16. package/dist/cli-register-verification.js +16 -0
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +2 -0
  19. package/dist/commands/aggregated-checks.d.ts +1 -2
  20. package/dist/commands/aggregated-checks.d.ts.map +1 -1
  21. package/dist/commands/aggregated-checks.js +14 -9
  22. package/dist/commands/branch.d.ts +36 -0
  23. package/dist/commands/branch.d.ts.map +1 -1
  24. package/dist/commands/branch.js +371 -40
  25. package/dist/commands/check.d.ts.map +1 -1
  26. package/dist/commands/check.js +20 -67
  27. package/dist/commands/discovery-shared.d.ts.map +1 -1
  28. package/dist/commands/discovery-shared.js +10 -19
  29. package/dist/commands/doctor.d.ts +4 -1
  30. package/dist/commands/doctor.d.ts.map +1 -1
  31. package/dist/commands/doctor.js +259 -24
  32. package/dist/commands/engine.d.ts.map +1 -1
  33. package/dist/commands/engine.js +10 -7
  34. package/dist/commands/gc.d.ts +5 -2
  35. package/dist/commands/gc.d.ts.map +1 -1
  36. package/dist/commands/gc.js +140 -71
  37. package/dist/commands/github-init.d.ts +56 -0
  38. package/dist/commands/github-init.d.ts.map +1 -0
  39. package/dist/commands/github-init.js +310 -0
  40. package/dist/commands/init-helpers.d.ts +1 -1
  41. package/dist/commands/init-helpers.d.ts.map +1 -1
  42. package/dist/commands/init-helpers.js +73 -25
  43. package/dist/commands/init.d.ts +2 -0
  44. package/dist/commands/init.d.ts.map +1 -1
  45. package/dist/commands/init.js +79 -24
  46. package/dist/commands/legacy-storage-migration.d.ts +54 -0
  47. package/dist/commands/legacy-storage-migration.d.ts.map +1 -0
  48. package/dist/commands/legacy-storage-migration.js +277 -0
  49. package/dist/commands/migrate.d.ts +7 -0
  50. package/dist/commands/migrate.d.ts.map +1 -1
  51. package/dist/commands/migrate.js +244 -91
  52. package/dist/commands/report.d.ts +24 -0
  53. package/dist/commands/report.d.ts.map +1 -0
  54. package/dist/commands/report.js +191 -0
  55. package/dist/commands/sync/cache.d.ts +16 -3
  56. package/dist/commands/sync/cache.d.ts.map +1 -1
  57. package/dist/commands/sync/cache.js +111 -4
  58. package/dist/commands/sync/discovery.d.ts +23 -2
  59. package/dist/commands/sync/discovery.d.ts.map +1 -1
  60. package/dist/commands/sync/discovery.js +196 -15
  61. package/dist/commands/sync/extraction.d.ts +8 -1
  62. package/dist/commands/sync/extraction.d.ts.map +1 -1
  63. package/dist/commands/sync/extraction.js +38 -4
  64. package/dist/commands/sync/manifest.d.ts +8 -5
  65. package/dist/commands/sync/manifest.d.ts.map +1 -1
  66. package/dist/commands/sync/manifest.js +142 -39
  67. package/dist/commands/sync/persistence.d.ts.map +1 -1
  68. package/dist/commands/sync/persistence.js +3 -0
  69. package/dist/commands/sync.d.ts +6 -0
  70. package/dist/commands/sync.d.ts.map +1 -1
  71. package/dist/commands/sync.js +304 -79
  72. package/dist/commands/verify.d.ts +10 -0
  73. package/dist/commands/verify.d.ts.map +1 -0
  74. package/dist/commands/verify.js +126 -0
  75. package/dist/diagnostics.d.ts +1 -1
  76. package/dist/diagnostics.d.ts.map +1 -1
  77. package/dist/engine.d.ts +96 -3
  78. package/dist/engine.d.ts.map +1 -1
  79. package/dist/engine.js +392 -23
  80. package/dist/env.d.ts.map +1 -1
  81. package/dist/env.js +5 -6
  82. package/dist/extractors/manifest.d.ts +8 -1
  83. package/dist/extractors/manifest.d.ts.map +1 -1
  84. package/dist/extractors/manifest.js +51 -9
  85. package/dist/extractors/markdown.d.ts +2 -1
  86. package/dist/extractors/markdown.d.ts.map +1 -1
  87. package/dist/extractors/markdown.js +21 -3
  88. package/dist/extractors/playwright-cases.d.ts +24 -0
  89. package/dist/extractors/playwright-cases.d.ts.map +1 -0
  90. package/dist/extractors/playwright-cases.js +126 -0
  91. package/dist/extractors/relationships.d.ts.map +1 -1
  92. package/dist/extractors/relationships.js +1 -0
  93. package/dist/extractors/symbol-coordinates.d.ts +81 -3
  94. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  95. package/dist/extractors/symbol-coordinates.js +389 -51
  96. package/dist/extractors/symbols-coordinator.js +11 -1
  97. package/dist/intent-search.d.ts +60 -0
  98. package/dist/intent-search.d.ts.map +1 -0
  99. package/dist/intent-search.js +433 -0
  100. package/dist/operations/bootstrap/activation.d.ts.map +1 -0
  101. package/dist/operations/{autopilot → bootstrap}/activation.js +48 -31
  102. package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts.map +1 -1
  103. package/dist/operations/bootstrap/candidates.d.ts +4 -0
  104. package/dist/operations/{autopilot → bootstrap}/candidates.d.ts.map +1 -1
  105. package/dist/operations/{autopilot → bootstrap}/candidates.js +22 -8
  106. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts +2 -2
  107. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts.map +1 -1
  108. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.js +46 -6
  109. package/dist/operations/{autopilot → bootstrap}/discovery.d.ts +1 -1
  110. package/dist/operations/bootstrap/discovery.d.ts.map +1 -0
  111. package/dist/operations/{autopilot → bootstrap}/discovery.js +21 -14
  112. package/dist/operations/bootstrap/generate.d.ts +8 -0
  113. package/dist/operations/bootstrap/generate.d.ts.map +1 -0
  114. package/dist/operations/bootstrap/generate.js +204 -0
  115. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts +2 -2
  116. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts.map +1 -1
  117. package/dist/operations/{autopilot → bootstrap}/guidance-actions.js +4 -4
  118. package/dist/operations/{autopilot → bootstrap}/guidance.d.ts +2 -2
  119. package/dist/operations/{autopilot → bootstrap}/guidance.d.ts.map +1 -1
  120. package/dist/operations/{autopilot → bootstrap}/guidance.js +2 -0
  121. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts +2 -2
  122. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts.map +1 -1
  123. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.js +4 -3
  124. package/dist/operations/bootstrap/presentation.d.ts +15 -0
  125. package/dist/operations/bootstrap/presentation.d.ts.map +1 -0
  126. package/dist/operations/bootstrap/presentation.js +177 -0
  127. package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts.map +1 -1
  128. package/dist/operations/{autopilot → bootstrap}/types.d.ts +63 -21
  129. package/dist/operations/bootstrap/types.d.ts.map +1 -0
  130. package/dist/operations/bootstrap/types.js +25 -0
  131. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  132. package/dist/operations/modeling/model-requirement.js +4 -17
  133. package/dist/operations/modeling/predicate-applicability.d.ts +16 -0
  134. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -0
  135. package/dist/operations/modeling/predicate-applicability.js +276 -0
  136. package/dist/operations/modeling/predicate-applyplan.d.ts +13 -2
  137. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
  138. package/dist/operations/modeling/predicate-applyplan.js +100 -3
  139. package/dist/operations/modeling/predicate-bindings.d.ts +6 -0
  140. package/dist/operations/modeling/predicate-bindings.d.ts.map +1 -0
  141. package/dist/operations/modeling/predicate-bindings.js +122 -0
  142. package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -1
  143. package/dist/operations/modeling/predicate-catalog-4.js +155 -0
  144. package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -1
  145. package/dist/operations/modeling/predicate-inference-1.js +8 -0
  146. package/dist/operations/modeling/predicate-inference-launcher.d.ts +10 -0
  147. package/dist/operations/modeling/predicate-inference-launcher.d.ts.map +1 -0
  148. package/dist/operations/modeling/predicate-inference-launcher.js +13 -0
  149. package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
  150. package/dist/operations/modeling/predicate-inference.js +4 -0
  151. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  152. package/dist/operations/modeling/predicate-loader.js +7 -0
  153. package/dist/operations/modeling/predicate-ranker.d.ts +8 -1
  154. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  155. package/dist/operations/modeling/predicate-ranker.js +156 -24
  156. package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -1
  157. package/dist/operations/modeling/predicate-score-3.js +6 -0
  158. package/dist/operations/modeling/predicate-types.d.ts +34 -0
  159. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  160. package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -1
  161. package/dist/operations/modeling/predicate-usage-hints-3.js +40 -0
  162. package/dist/operations/modeling/predicate-utils.d.ts.map +1 -1
  163. package/dist/operations/modeling/predicate-utils.js +2 -0
  164. package/dist/operations/modeling/suggest-predicates.d.ts +1 -1
  165. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  166. package/dist/operations/modeling/suggest-predicates.js +170 -32
  167. package/dist/operations/mutation/delete.d.ts.map +1 -1
  168. package/dist/operations/mutation/delete.js +415 -19
  169. package/dist/operations/mutation/entity-projection.d.ts +11 -0
  170. package/dist/operations/mutation/entity-projection.d.ts.map +1 -0
  171. package/dist/operations/mutation/entity-projection.js +14 -0
  172. package/dist/operations/mutation/relationships.d.ts +10 -0
  173. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  174. package/dist/operations/mutation/relationships.js +71 -1
  175. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  176. package/dist/operations/mutation/serialization.js +1 -0
  177. package/dist/operations/mutation/source-authoring.d.ts +61 -0
  178. package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
  179. package/dist/operations/mutation/source-authoring.js +543 -0
  180. package/dist/operations/mutation/symbol-compiler-lock.d.ts +51 -0
  181. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
  182. package/dist/operations/mutation/symbol-compiler-lock.js +274 -0
  183. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  184. package/dist/operations/mutation/symbol-granularity.js +34 -3
  185. package/dist/operations/mutation/symbol-refresh.d.ts +18 -1
  186. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  187. package/dist/operations/mutation/symbol-refresh.js +225 -63
  188. package/dist/operations/mutation/types.d.ts +57 -1
  189. package/dist/operations/mutation/types.d.ts.map +1 -1
  190. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  191. package/dist/operations/mutation/upsert.js +363 -24
  192. package/dist/operations/mutation/validation.d.ts.map +1 -1
  193. package/dist/operations/mutation/validation.js +1 -0
  194. package/dist/operations/planning/apply-plan.d.ts +117 -0
  195. package/dist/operations/planning/apply-plan.d.ts.map +1 -0
  196. package/dist/operations/planning/apply-plan.js +1437 -0
  197. package/dist/operations/planning/compile-intent.d.ts +106 -0
  198. package/dist/operations/planning/compile-intent.d.ts.map +1 -0
  199. package/dist/operations/planning/compile-intent.js +562 -0
  200. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  201. package/dist/operations/semantic-advisor/analyze-prose.js +6 -2
  202. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  203. package/dist/operations/semantic-advisor/clauses.js +15 -2
  204. package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -1
  205. package/dist/operations/semantic-advisor/ingestion-boundary.js +7 -3
  206. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +51 -0
  207. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -0
  208. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +96 -0
  209. package/dist/operations/semantic-advisor/types.d.ts +13 -5
  210. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  211. package/dist/operations/verification/ingest-verification.d.ts +29 -0
  212. package/dist/operations/verification/ingest-verification.d.ts.map +1 -0
  213. package/dist/operations/verification/ingest-verification.js +192 -0
  214. package/dist/prolog/codec.d.ts.map +1 -1
  215. package/dist/prolog/codec.js +2 -1
  216. package/dist/prolog.d.ts.map +1 -1
  217. package/dist/prolog.js +27 -8
  218. package/dist/public/branch-resolver.d.ts +1 -0
  219. package/dist/public/branch-resolver.d.ts.map +1 -1
  220. package/dist/public/branch-resolver.js +1 -0
  221. package/dist/public/check-types.d.ts +2 -2
  222. package/dist/public/check-types.d.ts.map +1 -1
  223. package/dist/public/check-types.js +16 -16
  224. package/dist/public/diagnostic-usage.d.ts.map +1 -1
  225. package/dist/public/diagnostic-usage.js +69 -1
  226. package/dist/public/distribution-parity.d.ts +1 -1
  227. package/dist/public/distribution-parity.d.ts.map +1 -1
  228. package/dist/public/distribution-parity.js +1 -0
  229. package/dist/public/ignore-policy.d.ts.map +1 -1
  230. package/dist/public/ignore-policy.js +16 -4
  231. package/dist/public/impact/coverage-depth-quality.d.ts +6 -1
  232. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  233. package/dist/public/impact/coverage-depth-quality.js +21 -3
  234. package/dist/public/impact/full-kb-quality.d.ts +4 -2
  235. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  236. package/dist/public/impact/full-kb-quality.js +61 -1
  237. package/dist/public/impact/manifest.d.ts.map +1 -1
  238. package/dist/public/impact/manifest.js +2 -5
  239. package/dist/public/operational-artifacts.d.ts.map +1 -1
  240. package/dist/public/operational-artifacts.js +7 -1
  241. package/dist/public/operations/catalog.d.ts +682 -67
  242. package/dist/public/operations/catalog.d.ts.map +1 -1
  243. package/dist/public/operations/catalog.js +126 -4
  244. package/dist/public/operations/check-executor.d.ts +2 -2
  245. package/dist/public/operations/check-executor.d.ts.map +1 -1
  246. package/dist/public/operations/check-executor.js +72 -13
  247. package/dist/public/operations/check-format-shared.d.ts +3 -0
  248. package/dist/public/operations/check-format-shared.d.ts.map +1 -1
  249. package/dist/public/operations/check-format-shared.js +3 -0
  250. package/dist/public/operations/check-helpers.d.ts +27 -2
  251. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  252. package/dist/public/operations/check-helpers.js +62 -26
  253. package/dist/public/operations/contracts.d.ts +11 -0
  254. package/dist/public/operations/contracts.d.ts.map +1 -0
  255. package/dist/public/operations/contracts.js +325 -0
  256. package/dist/public/operations/discovery-executors.d.ts +37 -1
  257. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  258. package/dist/public/operations/discovery-executors.js +206 -6
  259. package/dist/public/operations/index.d.ts +9 -4
  260. package/dist/public/operations/index.d.ts.map +1 -1
  261. package/dist/public/operations/index.js +8 -3
  262. package/dist/public/operations/migration-plan.d.ts +101 -0
  263. package/dist/public/operations/migration-plan.d.ts.map +1 -0
  264. package/dist/public/operations/migration-plan.js +537 -0
  265. package/dist/public/operations/node-ports.d.ts.map +1 -1
  266. package/dist/public/operations/node-ports.js +68 -8
  267. package/dist/public/operations/prolog-json.d.ts +14 -0
  268. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  269. package/dist/public/operations/prolog-json.js +44 -5
  270. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  271. package/dist/public/operations/repair-plan.js +1 -0
  272. package/dist/public/operations/result-envelope.d.ts +13 -0
  273. package/dist/public/operations/result-envelope.d.ts.map +1 -0
  274. package/dist/public/operations/result-envelope.js +104 -0
  275. package/dist/public/operations/runtime-types.d.ts +97 -7
  276. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  277. package/dist/public/operations/source-relationship-parity.d.ts +13 -0
  278. package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
  279. package/dist/public/operations/source-relationship-parity.js +162 -0
  280. package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
  281. package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
  282. package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
  283. package/dist/public/operations/specs/check.d.ts +4 -4
  284. package/dist/public/operations/specs/check.d.ts.map +1 -1
  285. package/dist/public/operations/specs/check.js +4 -3
  286. package/dist/public/operations/specs/discovery.d.ts +87 -3
  287. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  288. package/dist/public/operations/specs/discovery.js +53 -3
  289. package/dist/public/operations/specs/modeling.d.ts +3 -3
  290. package/dist/public/operations/specs/modeling.js +3 -3
  291. package/dist/public/operations/specs/mutation-schemas.d.ts +190 -47
  292. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  293. package/dist/public/operations/specs/mutation-schemas.js +3 -1
  294. package/dist/public/operations/specs/mutation.d.ts +42 -2
  295. package/dist/public/operations/specs/mutation.d.ts.map +1 -1
  296. package/dist/public/operations/specs/mutation.js +26 -2
  297. package/dist/public/operations/specs/planning.d.ts +270 -0
  298. package/dist/public/operations/specs/planning.d.ts.map +1 -0
  299. package/dist/public/operations/specs/planning.js +191 -0
  300. package/dist/public/operations/specs/reporting.d.ts +4 -1
  301. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  302. package/dist/public/operations/specs/reporting.js +46 -1
  303. package/dist/public/operations/specs/upsert.d.ts +204 -47
  304. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  305. package/dist/public/operations/specs/upsert.js +9 -0
  306. package/dist/public/operations/specs/verification.d.ts +78 -0
  307. package/dist/public/operations/specs/verification.d.ts.map +1 -0
  308. package/dist/public/operations/specs/verification.js +62 -0
  309. package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
  310. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
  311. package/dist/public/operations/symbol-repair-plan.js +123 -0
  312. package/dist/public/operations/types.d.ts +52 -1
  313. package/dist/public/operations/types.d.ts.map +1 -1
  314. package/dist/public/playwright-case-id.d.ts +8 -0
  315. package/dist/public/playwright-case-id.d.ts.map +1 -0
  316. package/dist/public/playwright-case-id.js +25 -0
  317. package/dist/public/schemas/entity.d.ts.map +1 -1
  318. package/dist/public/schemas/entity.js +4 -2
  319. package/dist/public/skills/kibi-bootstrap/SKILL.md +58 -0
  320. package/dist/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  321. package/dist/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  322. package/dist/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  323. package/dist/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  324. package/dist/public/skills/kibi-freshness/SKILL.md +39 -9
  325. package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  326. package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  327. package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  328. package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
  329. package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  330. package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  331. package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  332. package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
  333. package/dist/public/skills/kibi-usage/SKILL.md +115 -239
  334. package/dist/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  335. package/dist/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  336. package/dist/public/skills/kibi-usage/resources/operation-access.md +36 -38
  337. package/dist/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  338. package/dist/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  339. package/dist/public/skills/kibi-usage/resources/workflows.md +56 -3
  340. package/dist/public/symbol-granularity.d.ts +1 -1
  341. package/dist/public/symbol-granularity.d.ts.map +1 -1
  342. package/dist/public/symbol-granularity.js +1 -0
  343. package/dist/public/telemetry-acceptance.d.ts +7 -0
  344. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  345. package/dist/public/telemetry-acceptance.js +8 -1
  346. package/dist/public/telemetry-remediation.js +1 -1
  347. package/dist/public/verification-receipt.d.ts +206 -39
  348. package/dist/public/verification-receipt.d.ts.map +1 -1
  349. package/dist/public/verification-receipt.js +171 -4
  350. package/dist/relationships/shards.d.ts +16 -0
  351. package/dist/relationships/shards.d.ts.map +1 -1
  352. package/dist/relationships/shards.js +87 -2
  353. package/dist/report/brand.d.ts +19 -0
  354. package/dist/report/brand.d.ts.map +1 -0
  355. package/dist/report/brand.js +112 -0
  356. package/dist/report/html-report.d.ts +19 -0
  357. package/dist/report/html-report.d.ts.map +1 -0
  358. package/dist/report/html-report.js +963 -0
  359. package/dist/report/relative-time.d.ts +4 -0
  360. package/dist/report/relative-time.d.ts.map +1 -0
  361. package/dist/report/relative-time.js +46 -0
  362. package/dist/report/report-view.d.ts +17 -0
  363. package/dist/report/report-view.d.ts.map +1 -0
  364. package/dist/report/report-view.js +33 -0
  365. package/dist/report/repository.d.ts +35 -0
  366. package/dist/report/repository.d.ts.map +1 -0
  367. package/dist/report/repository.js +151 -0
  368. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  369. package/dist/runtime/cli-runtime.js +82 -22
  370. package/dist/schemas/entity.schema.json +1148 -273
  371. package/dist/traceability/evidence-model.d.ts +2 -2
  372. package/dist/traceability/evidence-model.d.ts.map +1 -1
  373. package/dist/traceability/evidence-model.js +2 -2
  374. package/dist/traceability/git-staged.d.ts.map +1 -1
  375. package/dist/traceability/git-staged.js +15 -40
  376. package/dist/traceability/markdown-validate.d.ts.map +1 -1
  377. package/dist/traceability/markdown-validate.js +12 -7
  378. package/dist/traceability/staged-impact-contract.d.ts +3 -3
  379. package/dist/traceability/staged-impact-contract.d.ts.map +1 -1
  380. package/dist/traceability/staged-impact-contract.js +10 -38
  381. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  382. package/dist/traceability/staged-symbols-manifest.js +8 -3
  383. package/dist/traceability/temp-kb.d.ts.map +1 -1
  384. package/dist/traceability/temp-kb.js +3 -0
  385. package/dist/types/entities.d.ts +3 -0
  386. package/dist/types/entities.d.ts.map +1 -1
  387. package/dist/utils/branch-resolver.d.ts +24 -10
  388. package/dist/utils/branch-resolver.d.ts.map +1 -1
  389. package/dist/utils/branch-resolver.js +121 -38
  390. package/dist/utils/branch-store-locator.d.ts +23 -0
  391. package/dist/utils/branch-store-locator.d.ts.map +1 -0
  392. package/dist/utils/branch-store-locator.js +90 -0
  393. package/dist/utils/branch-store.d.ts +15 -0
  394. package/dist/utils/branch-store.d.ts.map +1 -0
  395. package/dist/utils/branch-store.js +130 -0
  396. package/dist/utils/config.d.ts +39 -37
  397. package/dist/utils/config.d.ts.map +1 -1
  398. package/dist/utils/config.js +107 -119
  399. package/dist/utils/kb-manifest.d.ts +35 -0
  400. package/dist/utils/kb-manifest.d.ts.map +1 -0
  401. package/dist/utils/kb-manifest.js +154 -0
  402. package/dist/utils/kb-paths.d.ts +54 -0
  403. package/dist/utils/kb-paths.d.ts.map +1 -0
  404. package/dist/utils/kb-paths.js +125 -0
  405. package/dist/utils/manifest-paths.d.ts +4 -4
  406. package/dist/utils/manifest-paths.d.ts.map +1 -1
  407. package/dist/utils/manifest-paths.js +8 -56
  408. package/dist/utils/rule-registry.d.ts +48 -20
  409. package/dist/utils/rule-registry.d.ts.map +1 -1
  410. package/dist/utils/rule-registry.js +82 -77
  411. package/dist/utils/schema-version.d.ts +5 -5
  412. package/dist/utils/schema-version.d.ts.map +1 -1
  413. package/dist/utils/schema-version.js +26 -6
  414. package/dist/utils/strict-modeling.d.ts +0 -4
  415. package/dist/utils/strict-modeling.d.ts.map +1 -1
  416. package/dist/utils/strict-modeling.js +7 -8
  417. package/dist/verification/playwright-reporter.d.ts +21 -0
  418. package/dist/verification/playwright-reporter.d.ts.map +1 -0
  419. package/dist/verification/playwright-reporter.js +114 -0
  420. package/package.json +46 -7
  421. package/schema/config.json +2 -2
  422. package/schema/manifest.json +26 -0
  423. package/src/public/branch-resolver.ts +1 -0
  424. package/src/public/check-types.ts +22 -19
  425. package/src/public/diagnostic-usage.ts +79 -1
  426. package/src/public/distribution-parity.ts +1 -0
  427. package/src/public/ignore-policy.ts +16 -10
  428. package/src/public/impact/coverage-depth-quality.ts +36 -0
  429. package/src/public/impact/full-kb-quality.ts +118 -5
  430. package/src/public/impact/manifest.ts +2 -4
  431. package/src/public/operational-artifacts.ts +9 -1
  432. package/src/public/operations/catalog.ts +146 -9
  433. package/src/public/operations/check-executor.ts +102 -15
  434. package/src/public/operations/check-format-shared.ts +6 -0
  435. package/src/public/operations/check-helpers.ts +74 -35
  436. package/src/public/operations/contracts.ts +366 -0
  437. package/src/public/operations/discovery-executors.ts +299 -12
  438. package/src/public/operations/index.ts +9 -4
  439. package/src/public/operations/migration-plan.ts +740 -0
  440. package/src/public/operations/node-ports.ts +84 -10
  441. package/src/public/operations/prolog-json.ts +60 -5
  442. package/src/public/operations/repair-plan.ts +1 -0
  443. package/src/public/operations/result-envelope.ts +136 -0
  444. package/src/public/operations/runtime-types.ts +91 -5
  445. package/src/public/operations/source-relationship-parity.ts +226 -0
  446. package/src/public/operations/specs/{autopilot.ts → bootstrap.ts} +17 -16
  447. package/src/public/operations/specs/check.ts +4 -3
  448. package/src/public/operations/specs/discovery.ts +57 -3
  449. package/src/public/operations/specs/modeling.ts +3 -3
  450. package/src/public/operations/specs/mutation-schemas.ts +6 -1
  451. package/src/public/operations/specs/mutation.ts +27 -2
  452. package/src/public/operations/specs/planning.ts +234 -0
  453. package/src/public/operations/specs/reporting.ts +55 -1
  454. package/src/public/operations/specs/upsert.ts +10 -0
  455. package/src/public/operations/specs/verification.ts +78 -0
  456. package/src/public/operations/symbol-repair-plan.ts +164 -0
  457. package/src/public/operations/types.ts +62 -1
  458. package/src/public/playwright-case-id.ts +35 -0
  459. package/src/public/schemas/entity.ts +7 -2
  460. package/src/public/skills/kibi-bootstrap/SKILL.md +58 -0
  461. package/src/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  462. package/src/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  463. package/src/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  464. package/src/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  465. package/src/public/skills/kibi-freshness/SKILL.md +39 -9
  466. package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  467. package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  468. package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  469. package/src/public/skills/kibi-traceability/SKILL.md +47 -47
  470. package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  471. package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  472. package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  473. package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
  474. package/src/public/skills/kibi-usage/SKILL.md +115 -239
  475. package/src/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  476. package/src/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  477. package/src/public/skills/kibi-usage/resources/operation-access.md +36 -38
  478. package/src/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  479. package/src/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  480. package/src/public/skills/kibi-usage/resources/workflows.md +56 -3
  481. package/src/public/symbol-granularity.ts +1 -0
  482. package/src/public/telemetry-acceptance.ts +16 -1
  483. package/src/public/telemetry-remediation.ts +1 -1
  484. package/src/public/verification-receipt.ts +248 -6
  485. package/src/schemas/entity.schema.json +1148 -273
  486. package/templates/github/kibi-badge.yml +86 -0
  487. package/templates/github/kibi-report.yml +84 -0
  488. package/dist/operations/autopilot/activation.d.ts.map +0 -1
  489. package/dist/operations/autopilot/candidates.d.ts +0 -4
  490. package/dist/operations/autopilot/discovery.d.ts.map +0 -1
  491. package/dist/operations/autopilot/generate.d.ts +0 -8
  492. package/dist/operations/autopilot/generate.d.ts.map +0 -1
  493. package/dist/operations/autopilot/generate.js +0 -112
  494. package/dist/operations/autopilot/presentation.d.ts +0 -13
  495. package/dist/operations/autopilot/presentation.d.ts.map +0 -1
  496. package/dist/operations/autopilot/presentation.js +0 -91
  497. package/dist/operations/autopilot/types.d.ts.map +0 -1
  498. package/dist/operations/autopilot/types.js +0 -8
  499. package/dist/public/operations/specs/autopilot.d.ts.map +0 -1
  500. package/dist/public/skills/init-kibi/SKILL.md +0 -62
  501. package/src/public/skills/init-kibi/SKILL.md +0 -62
  502. /package/dist/operations/{autopilot → bootstrap}/activation.d.ts +0 -0
  503. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts +0 -0
  504. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.js +0 -0
  505. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts +0 -0
  506. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.js +0 -0
@@ -19,10 +19,49 @@ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, } from
19
19
  import * as path from "node:path";
20
20
  import { load as parseYAML } from "js-yaml";
21
21
  import { extractSymbolsFromStagedFile } from "../traceability/symbol-extract.js";
22
- import { resolveActiveBranch } from "../utils/branch-resolver.js";
23
- import { DEFAULT_CONFIG } from "../utils/config.js";
22
+ import { resolveBranchAttachment } from "../utils/branch-resolver.js";
23
+ import { defaultKbManifest, readKbManifest, readKbManifestStatus, writeKbManifest, } from "../utils/kb-manifest.js";
24
+ import { CANONICAL_ENTITY_PATHS } from "../utils/kb-paths.js";
24
25
  import { LATEST_KB_SCHEMA_VERSION, getSchemaVersionStatus, normalizeSchemaVersion, } from "../utils/schema-version.js";
26
+ import { updateGitIgnore } from "./init-helpers.js";
27
+ import { applyLegacyStorageMigration, planLegacyStorageMigration, } from "./legacy-storage-migration.js";
25
28
  const MIGRATION_AUDIT_VERSION = 1;
29
+ const SCHEMA_MIGRATION_STEPS = [
30
+ {
31
+ id: "config-canonical-v1",
32
+ from: 0,
33
+ to: 1,
34
+ description: "Preserve legacy configuration while recording canonical schema metadata.",
35
+ },
36
+ {
37
+ id: "symbol-granularity-v2",
38
+ from: 1,
39
+ to: 2,
40
+ description: "Mark provable coarse traceability links as legacy-link.",
41
+ },
42
+ {
43
+ id: "compatibility-v3",
44
+ from: 2,
45
+ to: 3,
46
+ description: "Record an audited compatibility no-op for schema v3.",
47
+ },
48
+ {
49
+ id: "semantic-backfill-v4",
50
+ from: 3,
51
+ to: 4,
52
+ description: "Mark semantic-advisor backfill as pending without inventing claims.",
53
+ },
54
+ {
55
+ id: "canonical-storage-v5",
56
+ from: 4,
57
+ to: 5,
58
+ description: "Move Kibi knowledge into the canonical .kb/ namespace and retire .kb/config.json.",
59
+ },
60
+ ];
61
+ function migrationStepsFor(fromVersion) {
62
+ const start = Math.max(0, fromVersion ?? 0);
63
+ return SCHEMA_MIGRATION_STEPS.filter((step) => step.from >= start);
64
+ }
26
65
  function printWarning(message) {
27
66
  console.log(`Warning: ${message}`);
28
67
  }
@@ -31,59 +70,24 @@ function toRelativePath(cwd, filePath) {
31
70
  return relativePath.length > 0 ? relativePath : path.basename(filePath);
32
71
  }
33
72
  function resolveMigrationBranch(cwd) {
34
- const result = resolveActiveBranch(cwd);
73
+ const result = resolveBranchAttachment(cwd);
35
74
  if ("error" in result) {
36
75
  const isNonGitContext = result.code === "NOT_A_GIT_REPO" || result.code === "GIT_NOT_AVAILABLE";
37
76
  if (isNonGitContext) {
38
77
  return {
39
- branch: "main",
40
- warnings: [
41
- "Not in a git repository; using 'main' for migration audit metadata.",
42
- ],
78
+ error: "Not in a git repository; set KIBI_BRANCH explicitly for migration audit metadata.",
43
79
  };
44
80
  }
45
81
  return {
46
82
  error: `Failed to resolve active branch: ${result.error}`,
47
83
  };
48
84
  }
49
- return {
50
- branch: result.branch,
51
- warnings: [],
52
- };
53
- }
54
- function loadRawConfigDocument(cwd) {
55
- const kbDir = path.join(cwd, ".kb");
56
- const configPath = path.join(kbDir, "config.json");
57
- if (!existsSync(kbDir)) {
58
- return {
59
- error: "Missing .kb/ directory. Run 'kibi init' before 'kibi migrate'.",
60
- };
61
- }
62
- if (!existsSync(configPath)) {
85
+ if (result.migrationRequired) {
63
86
  return {
64
- error: "Missing .kb/config.json. Run 'kibi init' to create a baseline config before migrating.",
65
- };
66
- }
67
- try {
68
- const parsed = JSON.parse(readFileSync(configPath, "utf8"));
69
- if (parsed === null ||
70
- Array.isArray(parsed) ||
71
- typeof parsed !== "object") {
72
- return {
73
- error: ".kb/config.json must contain a JSON object. Fix the file and retry 'kibi migrate'.",
74
- };
75
- }
76
- return {
77
- config: parsed,
78
- configPath,
79
- };
80
- }
81
- catch (error) {
82
- const message = error instanceof Error ? error.message : String(error);
83
- return {
84
- error: `Invalid .kb/config.json: ${message}. Fix the JSON or re-run 'kibi init'.`,
87
+ error: `Legacy branch attachment for '${result.gitBranch}' requires 'kibi branch migrate --from ${result.kbBranch} --to ${result.gitBranch} --apply' before schema migration.`,
85
88
  };
86
89
  }
90
+ return { branch: result.kbBranch, warnings: [] };
87
91
  }
88
92
  function writeJsonAtomically(filePath, value) {
89
93
  writeTextAtomically(filePath, `${JSON.stringify(value, null, 2)}\n`);
@@ -107,7 +111,7 @@ function buildMigrationAuditRecord(args) {
107
111
  return {
108
112
  auditVersion: MIGRATION_AUDIT_VERSION,
109
113
  branch: args.branch,
110
- configPath: args.configPath,
114
+ manifestPath: args.manifestPath,
111
115
  fromVersion: args.fromVersion,
112
116
  migratedAt: args.migratedAt,
113
117
  semanticAdvisorBackfill: args.semanticAdvisorBackfill,
@@ -115,6 +119,7 @@ function buildMigrationAuditRecord(args) {
115
119
  symbolGranularityLegacyLinks: args.symbolGranularityLegacyLinks,
116
120
  toVersion: LATEST_KB_SCHEMA_VERSION,
117
121
  warning: args.warning,
122
+ steps: args.steps,
118
123
  };
119
124
  }
120
125
  function normalizeSemanticAdvisorBackfill(value) {
@@ -203,13 +208,8 @@ function addLegacyReasonsToManifestText(content, symbolIds) {
203
208
  return output.join("\n");
204
209
  }
205
210
  function migrateSymbolGranularity(options) {
206
- const configuredSymbolsPath = options.config.paths?.symbols ?? DEFAULT_CONFIG.paths.symbols;
207
- if (typeof configuredSymbolsPath !== "string") {
208
- return { count: 0, manifestPath: null };
209
- }
210
- const manifestPath = path.isAbsolute(configuredSymbolsPath)
211
- ? configuredSymbolsPath
212
- : path.join(options.cwd, configuredSymbolsPath);
211
+ const manifestPath = options.manifestPath ??
212
+ path.join(options.cwd, CANONICAL_ENTITY_PATHS.symbols);
213
213
  if (!existsSync(manifestPath)) {
214
214
  return { count: 0, manifestPath };
215
215
  }
@@ -263,100 +263,253 @@ function migrateSymbolGranularity(options) {
263
263
  }
264
264
  // implements REQ-003
265
265
  export async function migrateCommand(options = {}) {
266
- const cwd = process.cwd();
266
+ if (options.applySafe === true ||
267
+ options.format === "json" ||
268
+ (options.yes !== true && options.dryRun !== true)) {
269
+ return migratePlanCommand(options);
270
+ }
271
+ const cwd = path.resolve(options.workspaceRoot ?? process.cwd());
267
272
  const branchResult = resolveMigrationBranch(cwd);
268
273
  if ("error" in branchResult) {
269
274
  console.error(branchResult.error);
270
275
  return { exitCode: 1 };
271
276
  }
272
- const configResult = loadRawConfigDocument(cwd);
273
- if ("error" in configResult) {
274
- console.error(configResult.error);
277
+ const manifestStatus = readKbManifestStatus(cwd);
278
+ const storagePlan = planLegacyStorageMigration(cwd);
279
+ // Baseline for fresh workspaces driven by the internal plan executor.
280
+ if (options.initializeMissingConfig === true &&
281
+ manifestStatus.state === "missing") {
282
+ writeKbManifest(cwd, defaultKbManifest());
283
+ }
284
+ if (manifestStatus.state === "missing" &&
285
+ storagePlan.moves.length === 0 &&
286
+ storagePlan.legacyConfig === "absent") {
287
+ console.error("Missing .kb/ lifecycle state. Run 'kibi init' to create the canonical layout before migrating.");
275
288
  return { exitCode: 1 };
276
289
  }
277
290
  const { branch, warnings: branchWarnings } = branchResult;
278
- const { config, configPath } = configResult;
279
- const configStatus = getSchemaVersionStatus(config);
280
- const normalizedVersion = normalizeSchemaVersion(config.schemaVersion);
281
- const rawSchemaVersion = config.schemaVersion;
282
- const needsCanonicalSchemaWrite = normalizedVersion === LATEST_KB_SCHEMA_VERSION &&
283
- rawSchemaVersion !== undefined &&
284
- rawSchemaVersion !== LATEST_KB_SCHEMA_VERSION;
285
- const migrationWarning = needsCanonicalSchemaWrite
286
- ? "KB config schemaVersion should be normalized to the latest numeric version."
291
+ const currentManifest = readKbManifest(cwd);
292
+ const legacySchemaVersion = normalizeSchemaVersion(storagePlan.schemaVersion);
293
+ const currentVersion = currentManifest?.schemaVersion ?? legacySchemaVersion;
294
+ const normalizedVersion = normalizeSchemaVersion(currentVersion);
295
+ const configStatus = getSchemaVersionStatus(normalizedVersion === null
296
+ ? undefined
297
+ : { schemaVersion: normalizedVersion });
298
+ const needsStorageMigration = storagePlan.moves.length > 0 || storagePlan.legacyConfig !== "absent";
299
+ const needsSchemaUpgrade = configStatus.needsMigration || normalizedVersion === null;
300
+ const migrationWarning = manifestStatus.state === "invalid" || manifestStatus.state === "future"
301
+ ? manifestStatus.warning
287
302
  : configStatus.warning;
288
303
  const warnings = [
289
304
  ...branchWarnings,
290
305
  ...(migrationWarning ? [migrationWarning] : []),
291
306
  ];
292
307
  const auditPath = path.join(cwd, ".kb", "migrations", `${branch}.json`);
293
- const configPathRelative = toRelativePath(cwd, configPath);
294
- const auditPathRelative = toRelativePath(cwd, auditPath);
295
308
  for (const warning of warnings) {
296
309
  printWarning(warning);
297
310
  }
311
+ if (storagePlan.blockers.length > 0) {
312
+ for (const blocker of storagePlan.blockers) {
313
+ console.error(`Blocked: ${blocker}`);
314
+ }
315
+ return { exitCode: 1 };
316
+ }
298
317
  if (configStatus.currentVersion !== null &&
299
318
  configStatus.currentVersion > configStatus.latestVersion) {
300
319
  console.error(`Unsupported schemaVersion ${configStatus.currentVersion}. Upgrade kibi-cli before migrating this KB.`);
301
320
  return { exitCode: 1 };
302
321
  }
303
- if (!configStatus.needsMigration && !needsCanonicalSchemaWrite) {
304
- console.log(`No migration needed: ${configPathRelative} is already at schemaVersion ${LATEST_KB_SCHEMA_VERSION}.`);
322
+ if (!needsStorageMigration && !needsSchemaUpgrade) {
323
+ console.log(`No migration needed: the KB is already at schemaVersion ${LATEST_KB_SCHEMA_VERSION} on the canonical .kb/ layout.`);
305
324
  if (existsSync(auditPath)) {
306
- console.log(`Existing migration audit metadata: ${auditPathRelative}`);
325
+ console.log(`Existing migration audit metadata: ${toRelativePath(cwd, auditPath)}`);
326
+ }
327
+ if (options.yes === true) {
328
+ updateGitIgnore(cwd);
307
329
  }
308
330
  return { exitCode: 0 };
309
331
  }
310
- const fromVersionLabel = formatSchemaVersion(rawSchemaVersion, normalizedVersion);
311
- const symbolGranularityMigration = migrateSymbolGranularity({
312
- cwd,
313
- config,
314
- dryRun: options.dryRun || !options.yes,
315
- });
316
- const semanticAdvisorBackfill = normalizeSemanticAdvisorBackfill(config.semanticAdvisorBackfill) ??
317
- "pending";
332
+ const fromVersionLabel = formatSchemaVersion(currentVersion, normalizedVersion);
333
+ const migrationSteps = migrationStepsFor(configStatus.currentVersion);
334
+ const symbolGranularityStep = migrationSteps.some((step) => step.id === "symbol-granularity-v2");
335
+ const semanticBackfillStep = migrationSteps.some((step) => step.id === "semantic-backfill-v4");
318
336
  if (options.dryRun) {
319
- console.log(`dry run: would migrate ${configPathRelative} schemaVersion from ${fromVersionLabel} to ${LATEST_KB_SCHEMA_VERSION}.`);
320
- console.log(`dry run: would write migration audit metadata to ${auditPathRelative}.`);
321
- if (symbolGranularityMigration.count > 0) {
322
- console.log(`dry run: would mark ${symbolGranularityMigration.count} legacy coarse symbol link(s) in ${toRelativePath(cwd, symbolGranularityMigration.manifestPath ?? "symbols.yaml")}.`);
337
+ if (storagePlan.moves.length > 0) {
338
+ console.log(`dry run: would move ${storagePlan.moves.length} legacy knowledge file(s) into .kb/:`);
339
+ for (const move of storagePlan.moves) {
340
+ console.log(` ${move.from} -> ${move.to}`);
341
+ }
342
+ }
343
+ if (storagePlan.legacyConfig !== "absent") {
344
+ console.log("dry run: would retire legacy .kb/config.json after moving knowledge into .kb/.");
323
345
  }
324
- if (semanticAdvisorBackfill === "pending") {
325
- console.log(`dry run: would mark semantic advisor backfill as pending in ${configPathRelative}.`);
346
+ console.log(`dry run: would set schemaVersion from ${fromVersionLabel} to ${LATEST_KB_SCHEMA_VERSION} in .kb/manifest.json.`);
347
+ if (symbolGranularityStep) {
348
+ const symbolsSource = storagePlan.moves.find((move) => move.to === CANONICAL_ENTITY_PATHS.symbols)?.from ?? CANONICAL_ENTITY_PATHS.symbols;
349
+ const preview = migrateSymbolGranularity({
350
+ cwd,
351
+ dryRun: true,
352
+ manifestPath: path.join(cwd, symbolsSource),
353
+ });
354
+ if (preview.count > 0) {
355
+ console.log(`dry run: would mark ${preview.count} legacy coarse symbol link(s) as legacy-link.`);
356
+ }
326
357
  }
358
+ console.log(`dry run: would write migration audit metadata to ${toRelativePath(cwd, auditPath)}.`);
327
359
  console.log("Re-run with --yes to apply these changes.");
328
360
  return { exitCode: 0 };
329
361
  }
330
362
  if (!options.yes) {
331
- printWarning(`Migration required for ${configPathRelative}.`);
363
+ printWarning("Migration required for this repository.");
332
364
  console.log("No changes applied.");
333
365
  console.log("Use --dry-run to preview or --yes to apply the migration.");
334
366
  return { exitCode: 0 };
335
367
  }
336
- const nextConfig = {
337
- ...config,
368
+ // One-way storage cutover first: files must reach the canonical layout
369
+ // before the manifest records the new schema generation.
370
+ if (needsStorageMigration) {
371
+ const storageResult = applyLegacyStorageMigration(cwd, storagePlan);
372
+ if (storageResult.movedFiles.length > 0) {
373
+ console.log(`Moved ${storageResult.movedFiles.length} knowledge file(s) into the canonical .kb/ layout.`);
374
+ }
375
+ if (storageResult.retiredLegacyConfig) {
376
+ console.log("Retired legacy .kb/config.json.");
377
+ }
378
+ }
379
+ const symbolGranularityMigration = migrateSymbolGranularity({
380
+ cwd,
381
+ dryRun: !symbolGranularityStep || options.dryRun || !options.yes,
382
+ });
383
+ const semanticAdvisorBackfill = normalizeSemanticAdvisorBackfill(readKbManifest(cwd)?.semanticAdvisorBackfill) ??
384
+ normalizeSemanticAdvisorBackfill(storagePlan.semanticAdvisorBackfill) ??
385
+ (semanticBackfillStep || needsStorageMigration
386
+ ? "pending"
387
+ : "not_applicable");
388
+ const existingManifest = readKbManifest(cwd) ?? defaultKbManifest();
389
+ writeKbManifest(cwd, {
390
+ ...existingManifest,
338
391
  schemaVersion: LATEST_KB_SCHEMA_VERSION,
339
392
  semanticAdvisorBackfill,
340
- };
393
+ });
341
394
  const migratedAt = new Date().toISOString();
342
- writeJsonAtomically(configPath, nextConfig);
343
395
  writeJsonAtomically(auditPath, buildMigrationAuditRecord({
344
396
  branch,
345
- configPath: configPathRelative,
397
+ manifestPath: KB_MANIFEST_RELATIVE,
346
398
  fromVersion: configStatus.currentVersion,
347
399
  migratedAt,
348
400
  semanticAdvisorBackfill,
349
401
  symbolGranularityLegacyLinks: symbolGranularityMigration.count,
350
402
  warning: migrationWarning,
403
+ steps: migrationSteps.map((step) => step.id),
351
404
  }));
352
- console.log(`Migrated ${configPathRelative} schemaVersion from ${fromVersionLabel} to ${LATEST_KB_SCHEMA_VERSION}.`);
405
+ console.log(`Migrated the KB to schemaVersion ${LATEST_KB_SCHEMA_VERSION} on the canonical .kb/ layout (was ${fromVersionLabel}).`);
353
406
  if (symbolGranularityMigration.count > 0) {
354
407
  console.log(`Marked ${symbolGranularityMigration.count} existing coarse symbol link(s) as legacy-link.`);
355
408
  }
356
409
  if (semanticAdvisorBackfill === "pending") {
357
- console.log(`Marked semantic advisor backfill as pending in ${configPathRelative}.`);
410
+ console.log(`Marked semantic advisor backfill as pending in ${KB_MANIFEST_RELATIVE}.`);
358
411
  }
359
- console.log(`Wrote migration audit metadata to ${auditPathRelative}.`);
412
+ console.log(`Wrote migration audit metadata to ${toRelativePath(cwd, auditPath)}.`);
360
413
  console.log("Migration complete. Future 'kibi migrate' runs will be a no-op.");
414
+ updateGitIgnore(cwd);
415
+ return { exitCode: 0 };
416
+ }
417
+ const KB_MANIFEST_RELATIVE = ".kb/manifest.json";
418
+ async function buildWorkspaceMigrationPlan(workspaceRoot = process.cwd()) {
419
+ const [{ createCliRuntime }, { executeOperation }, { statusSpec }, { checkSpec }, { coverageSpec }, { mergeMigrationPlans },] = await Promise.all([
420
+ import("../runtime/cli-runtime.js"),
421
+ import("../public/operations/runtime-types.js"),
422
+ import("../public/operations/specs/discovery.js"),
423
+ import("../public/operations/specs/check.js"),
424
+ import("../public/operations/specs/reporting.js"),
425
+ import("../public/operations/migration-plan.js"),
426
+ ]);
427
+ const runtime = createCliRuntime({ workspaceRoot });
428
+ const statusResult = await executeOperation(runtime, statusSpec, {});
429
+ const status = statusResult.structuredContent;
430
+ const plans = [];
431
+ if (status?.migrationPlan !== undefined)
432
+ plans.push(status.migrationPlan);
433
+ const storeHealthy = status?.branchStore?.state === "healthy";
434
+ const schemaCurrent = status?.schemaStatus?.needsMigration !== true;
435
+ if (storeHealthy &&
436
+ schemaCurrent &&
437
+ status?.branchAttachment?.kind === "exact") {
438
+ const checkResult = await executeOperation(runtime, checkSpec, {});
439
+ if (checkResult.structuredContent?.migrationPlan !== undefined) {
440
+ plans.push(checkResult.structuredContent.migrationPlan);
441
+ }
442
+ const coverageInputs = [
443
+ { by: "req", limit: 10_000, offset: 0 },
444
+ { by: "symbol", limit: 10_000, offset: 0 },
445
+ ];
446
+ for (const input of coverageInputs) {
447
+ const coverageResult = await executeOperation(runtime, coverageSpec, input);
448
+ if (coverageResult.structuredContent?.migrationPlan !== undefined) {
449
+ plans.push(coverageResult.structuredContent.migrationPlan);
450
+ }
451
+ }
452
+ }
453
+ if (plans.length === 0) {
454
+ const { buildMigrationPlan } = await import("../public/operations/migration-plan.js");
455
+ return buildMigrationPlan({
456
+ evaluatedDomains: ["package", "branch", "storage", "schema"],
457
+ incompleteDomains: ["status"],
458
+ diagnostics: [
459
+ "Unable to assemble downstream migration domains from the current workspace state.",
460
+ ],
461
+ });
462
+ }
463
+ return mergeMigrationPlans(plans);
464
+ }
465
+ async function migratePlanCommand(options) {
466
+ const workspaceRoot = path.resolve(options.workspaceRoot ?? process.cwd());
467
+ const plan = await buildWorkspaceMigrationPlan(workspaceRoot);
468
+ if (options.applySafe === true) {
469
+ if (!options.approvedPlanHash) {
470
+ console.error("--apply-safe requires --approved-plan-hash <sha256>.");
471
+ return { exitCode: 2 };
472
+ }
473
+ if (options.approvedPlanHash !== plan.planHash) {
474
+ console.error("Migration plan changed; regenerate the plan and approve its current hash.");
475
+ return { exitCode: 2 };
476
+ }
477
+ const approvedActionIds = options.approvedActionIds && options.approvedActionIds.length > 0
478
+ ? options.approvedActionIds
479
+ : plan.actions
480
+ .filter((action) => action.state === "ready" && action.autoApplicable)
481
+ .map((action) => action.id);
482
+ if (approvedActionIds.length === 0) {
483
+ console.log("No approved automatic migration actions are ready.");
484
+ return { exitCode: 0 };
485
+ }
486
+ const [{ createCliRuntime }, { executeOperation }, { applyPlanSpec }] = await Promise.all([
487
+ import("../runtime/cli-runtime.js"),
488
+ import("../public/operations/runtime-types.js"),
489
+ import("../public/operations/specs/planning.js"),
490
+ ]);
491
+ const result = await executeOperation(createCliRuntime({ workspaceRoot }), applyPlanSpec, { plan, approvedPlanHash: options.approvedPlanHash, approvedActionIds });
492
+ if (options.format === "json") {
493
+ console.log(JSON.stringify(result, null, 2));
494
+ }
495
+ else {
496
+ console.log(result.content[0]?.text ?? "Migration applied.");
497
+ console.log(JSON.stringify(result.structuredContent, null, 2));
498
+ }
499
+ return {
500
+ exitCode: result.structuredContent?.outcome === "applied" ? 0 : 1,
501
+ };
502
+ }
503
+ if (options.format === "json") {
504
+ console.log(JSON.stringify(plan, null, 2));
505
+ }
506
+ else {
507
+ console.log(`Migration plan ${plan.planHash}`);
508
+ console.log(`Status: ${plan.status}; actions: ${plan.summary.actionCount}; automatic-ready: ${plan.actions.filter((action) => action.state === "ready" && action.autoApplicable).length}`);
509
+ for (const action of plan.actions) {
510
+ console.log(`- ${action.state} ${action.safety} ${action.code}: ${action.id}`);
511
+ }
512
+ console.log("Use --format json for structured actions, or --apply-safe with the approved plan hash.");
513
+ }
361
514
  return { exitCode: 0 };
362
515
  }
@@ -0,0 +1,24 @@
1
+ import { type HtmlReportCoverage } from "../report/html-report.js";
2
+ import { type ReportRepository } from "../report/repository.js";
3
+ export type ReportOptions = Readonly<{
4
+ output?: string;
5
+ open?: boolean;
6
+ tag?: string;
7
+ limit?: string;
8
+ }>;
9
+ type ReportCoverage = Readonly<{
10
+ requirements: HtmlReportCoverage;
11
+ symbols: HtmlReportCoverage;
12
+ branch: string;
13
+ }>;
14
+ export type ReportCommandDeps = Readonly<{
15
+ loadCoverage?: (tags: readonly string[], limit: number) => Promise<ReportCoverage>;
16
+ openReport?: (filePath: string) => Promise<void>;
17
+ now?: () => Date;
18
+ cwd?: () => string;
19
+ repository?: ReportRepository;
20
+ }>;
21
+ export declare function openReport(filePath: string): Promise<void>;
22
+ export declare function reportCommand(options: ReportOptions, deps?: ReportCommandDeps): Promise<string>;
23
+ export {};
24
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,KAAK,cAAc,GAAG,QAAQ,CAAC;IAC7B,YAAY,EAAE,kBAAkB,CAAC;IACjC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC,CAAC;AA4HH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhE;AAeD,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAyEjB"}
@@ -0,0 +1,191 @@
1
+ import { execFileSync, spawn } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { mkdir, rename, rm, writeFile } from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { pathToFileURL } from "node:url";
6
+ import { coverageSpec } from "../public/operations/specs/reporting.js";
7
+ import { KIBI_BRAND, renderKibiBadge } from "../report/brand.js";
8
+ import { renderHtmlReport, } from "../report/html-report.js";
9
+ import { resolveReportRepository, } from "../report/repository.js";
10
+ import { createCliRuntime } from "../runtime/cli-runtime.js";
11
+ import { listGitRemotes } from "./github-init.js";
12
+ function gitCommitSha(cwd) {
13
+ try {
14
+ const sha = execFileSync("git", ["-C", cwd, "rev-parse", "HEAD"], {
15
+ encoding: "utf8",
16
+ stdio: ["ignore", "pipe", "pipe"],
17
+ }).trim();
18
+ return /^[0-9a-f]{7,64}$/i.test(sha) ? sha : undefined;
19
+ }
20
+ catch {
21
+ return undefined;
22
+ }
23
+ }
24
+ function loadReportRepository(cwd, branch) {
25
+ const commitSha = gitCommitSha(cwd);
26
+ return resolveReportRepository({
27
+ remotes: listGitRemotes(cwd),
28
+ ...(commitSha ? { commitSha } : {}),
29
+ branch,
30
+ });
31
+ }
32
+ function parseTags(value) {
33
+ return (value ?? "")
34
+ .split(",")
35
+ .map((item) => item.trim())
36
+ .filter(Boolean);
37
+ }
38
+ function parseLimit(value) {
39
+ const raw = (value ?? "10000").trim();
40
+ const limit = /^\d+$/.test(raw) ? Number(raw) : Number.NaN;
41
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > 100_000) {
42
+ throw new Error("Report limit must be an integer between 1 and 100000");
43
+ }
44
+ return limit;
45
+ }
46
+ function reportTarget(root, output) {
47
+ const requested = output?.trim() || "kibi-report";
48
+ const absolute = path.resolve(root, requested);
49
+ return [".html", ".htm"].includes(path.extname(absolute).toLowerCase())
50
+ ? absolute
51
+ : path.join(absolute, "index.html");
52
+ }
53
+ async function executeCoverageInContext(context, tags, limit) {
54
+ const requirements = await coverageSpec.execute({
55
+ by: "req",
56
+ tags,
57
+ includePassing: true,
58
+ includeTransitive: true,
59
+ limit,
60
+ offset: 0,
61
+ }, context);
62
+ const symbols = await coverageSpec.execute({
63
+ by: "symbol",
64
+ tags,
65
+ includePassing: false,
66
+ includeTransitive: true,
67
+ // Only the complete summary is needed for the unowned-code metric.
68
+ limit: 0,
69
+ offset: 0,
70
+ }, context);
71
+ if (!requirements.structuredContent || !symbols.structuredContent) {
72
+ throw new Error("Coverage did not return structured report data");
73
+ }
74
+ return {
75
+ requirements: requirements.structuredContent,
76
+ symbols: symbols.structuredContent,
77
+ branch: context.branchAttachment?.gitBranch ??
78
+ String(requirements.structuredContent.meta?.branch ?? "unknown"),
79
+ };
80
+ }
81
+ async function loadCoverage(tags, limit) {
82
+ const runtime = createCliRuntime();
83
+ const runtimeSpec = coverageSpec;
84
+ const context = await runtime.open(runtimeSpec);
85
+ let result;
86
+ try {
87
+ result = await executeCoverageInContext(context, tags, limit);
88
+ }
89
+ catch (error) {
90
+ await runtime.close(context, { status: "error", error });
91
+ throw error;
92
+ }
93
+ await runtime.close(context, { status: "success", result });
94
+ return result;
95
+ }
96
+ async function writeAtomically(filePath, contents) {
97
+ const directory = path.dirname(filePath);
98
+ const temporaryPath = path.join(directory, `.${path.basename(filePath)}.${randomUUID()}.tmp`);
99
+ await mkdir(directory, { recursive: true });
100
+ try {
101
+ await writeFile(temporaryPath, contents, "utf8");
102
+ await rename(temporaryPath, filePath);
103
+ }
104
+ catch (error) {
105
+ await rm(temporaryPath, { force: true });
106
+ throw error;
107
+ }
108
+ }
109
+ export async function openReport(filePath) {
110
+ const fileUrl = pathToFileURL(filePath).href;
111
+ const [command, args] = process.platform === "darwin"
112
+ ? ["open", [fileUrl]]
113
+ : process.platform === "win32"
114
+ ? ["rundll32", ["url.dll,FileProtocolHandler", fileUrl]]
115
+ : ["xdg-open", [fileUrl]];
116
+ await new Promise((resolve, reject) => {
117
+ const child = spawn(command, args, {
118
+ detached: true,
119
+ stdio: "ignore",
120
+ });
121
+ child.once("error", reject);
122
+ child.once("spawn", () => {
123
+ child.unref();
124
+ resolve();
125
+ });
126
+ });
127
+ }
128
+ function assertCompleteRequirementRows(coverage, limit) {
129
+ const total = Number(coverage.summary.total ?? 0);
130
+ if (Number.isFinite(total) && coverage.rows.length < total) {
131
+ throw new Error(`Report requires complete requirement rows, but ${coverage.rows.length} of ${total} were returned. Increase --limit above ${limit}.`);
132
+ }
133
+ }
134
+ // implements REQ-kibi-html-health-report
135
+ export async function reportCommand(options, deps = {}) {
136
+ const limit = parseLimit(options.limit);
137
+ const tags = parseTags(options.tag);
138
+ const coverage = await (deps.loadCoverage ?? loadCoverage)(tags, limit);
139
+ assertCompleteRequirementRows(coverage.requirements, limit);
140
+ const now = (deps.now ?? (() => new Date()))();
141
+ const workspace = (deps.cwd ?? (() => process.cwd()))();
142
+ const html = renderHtmlReport({
143
+ requirements: coverage.requirements,
144
+ symbols: coverage.symbols,
145
+ branch: coverage.branch,
146
+ generatedAt: now,
147
+ repository: deps.repository ?? loadReportRepository(workspace, coverage.branch),
148
+ });
149
+ const outputPath = reportTarget(workspace, options.output);
150
+ const requestedOutput = options.output?.trim() || "kibi-report";
151
+ const outputIsHtmlFile = [".html", ".htm"].includes(path.extname(requestedOutput).toLowerCase());
152
+ const badgePath = outputIsHtmlFile
153
+ ? path.join(path.dirname(outputPath), `${path.basename(outputPath, path.extname(outputPath))}.badge.svg`)
154
+ : path.join(path.dirname(outputPath), "badge.svg");
155
+ const summary = coverage.requirements.summary;
156
+ const total = Number(summary.total ?? 0);
157
+ const notApplicable = Number(summary.proofNotApplicable ?? 0);
158
+ const proven = Number(summary.proofProven ?? 0);
159
+ const currentRequirements = Math.max(0, total - notApplicable);
160
+ const proofPercent = currentRequirements === 0
161
+ ? 0
162
+ : Math.round((proven / currentRequirements) * 100);
163
+ const hasContradiction = coverage.requirements.rows.some((row) => Array.isArray(row.proofGaps) &&
164
+ row.proofGaps.includes("blocking_contradiction"));
165
+ const snapshotStale = coverage.requirements.meta?.dirty === true ||
166
+ coverage.requirements.meta?.verificationSnapshotDirty === true;
167
+ const badgeMessage = currentRequirements === 0 ? "no requirements" : `${proofPercent}% proven`;
168
+ const badgeColor = currentRequirements === 0
169
+ ? KIBI_BRAND.rail
170
+ : hasContradiction
171
+ ? KIBI_BRAND.danger
172
+ : snapshotStale
173
+ ? KIBI_BRAND.warning
174
+ : proofPercent === 100
175
+ ? KIBI_BRAND.success
176
+ : proofPercent >= 90
177
+ ? KIBI_BRAND.signal
178
+ : proofPercent >= 70
179
+ ? KIBI_BRAND.warning
180
+ : KIBI_BRAND.danger;
181
+ const badge = renderKibiBadge(badgeMessage, badgeColor);
182
+ await writeAtomically(outputPath, html);
183
+ await writeAtomically(badgePath, badge);
184
+ console.log(`Kibi report written to ${outputPath}`);
185
+ console.log(`Kibi badge written to ${badgePath}`);
186
+ if (options.open === true) {
187
+ await (deps.openReport ?? openReport)(outputPath);
188
+ console.log("Opened Kibi report in the default browser");
189
+ }
190
+ return outputPath;
191
+ }