kibi-cli 0.12.8 → 0.16.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 (501) hide show
  1. package/bin/kibi +3 -1
  2. package/dist/cli-command.d.ts +5 -0
  3. package/dist/cli-command.d.ts.map +1 -0
  4. package/dist/cli-command.js +9 -0
  5. package/dist/cli-errors.d.ts +13 -0
  6. package/dist/cli-errors.d.ts.map +1 -0
  7. package/dist/cli-errors.js +26 -0
  8. package/dist/cli-input.d.ts +6 -0
  9. package/dist/cli-input.d.ts.map +1 -0
  10. package/dist/cli-input.js +54 -0
  11. package/dist/cli-json-command.d.ts +14 -0
  12. package/dist/cli-json-command.d.ts.map +1 -0
  13. package/dist/cli-json-command.js +96 -0
  14. package/dist/cli-protocol.d.ts +12 -0
  15. package/dist/cli-protocol.d.ts.map +1 -0
  16. package/dist/cli-protocol.js +37 -0
  17. package/dist/cli-register-foundation.d.ts +3 -0
  18. package/dist/cli-register-foundation.d.ts.map +1 -0
  19. package/dist/cli-register-foundation.js +90 -0
  20. package/dist/cli-register-maintenance.d.ts +3 -0
  21. package/dist/cli-register-maintenance.d.ts.map +1 -0
  22. package/dist/cli-register-maintenance.js +36 -0
  23. package/dist/cli-register-reporting.d.ts +3 -0
  24. package/dist/cli-register-reporting.d.ts.map +1 -0
  25. package/dist/cli-register-reporting.js +101 -0
  26. package/dist/cli-register-skills.d.ts +3 -0
  27. package/dist/cli-register-skills.d.ts.map +1 -0
  28. package/dist/cli-register-skills.js +71 -0
  29. package/dist/cli-validate.d.ts +18 -0
  30. package/dist/cli-validate.d.ts.map +1 -0
  31. package/dist/cli-validate.js +45 -0
  32. package/dist/cli.d.ts +4 -4
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +48 -210
  35. package/dist/commands/aggregated-checks.d.ts +1 -1
  36. package/dist/commands/aggregated-checks.d.ts.map +1 -1
  37. package/dist/commands/aggregated-checks.js +28 -34
  38. package/dist/commands/check.d.ts +2 -1
  39. package/dist/commands/check.d.ts.map +1 -1
  40. package/dist/commands/check.js +145 -152
  41. package/dist/commands/coverage.d.ts.map +1 -1
  42. package/dist/commands/coverage.js +12 -17
  43. package/dist/commands/discovery-shared.d.ts +3 -1
  44. package/dist/commands/discovery-shared.d.ts.map +1 -1
  45. package/dist/commands/discovery-shared.js +8 -209
  46. package/dist/commands/discovery-table.d.ts +3 -0
  47. package/dist/commands/discovery-table.d.ts.map +1 -0
  48. package/dist/commands/discovery-table.js +204 -0
  49. package/dist/commands/gaps.d.ts.map +1 -1
  50. package/dist/commands/gaps.js +15 -19
  51. package/dist/commands/graph.d.ts.map +1 -1
  52. package/dist/commands/graph.js +15 -21
  53. package/dist/commands/query.d.ts +7 -7
  54. package/dist/commands/query.d.ts.map +1 -1
  55. package/dist/commands/query.js +98 -204
  56. package/dist/commands/search.d.ts +4 -4
  57. package/dist/commands/search.d.ts.map +1 -1
  58. package/dist/commands/search.js +14 -27
  59. package/dist/commands/status.d.ts +1 -1
  60. package/dist/commands/status.d.ts.map +1 -1
  61. package/dist/commands/status.js +6 -7
  62. package/dist/commands/sync/discovery.d.ts.map +1 -1
  63. package/dist/commands/sync/discovery.js +8 -1
  64. package/dist/commands/sync/extraction.d.ts +6 -1
  65. package/dist/commands/sync/extraction.d.ts.map +1 -1
  66. package/dist/commands/sync/extraction.js +7 -3
  67. package/dist/commands/sync/manifest.d.ts +1 -1
  68. package/dist/commands/sync/manifest.d.ts.map +1 -1
  69. package/dist/commands/sync/manifest.js +9 -17
  70. package/dist/commands/sync/persistence.d.ts.map +1 -1
  71. package/dist/commands/sync/persistence.js +51 -2
  72. package/dist/extractors/manifest.d.ts.map +1 -1
  73. package/dist/extractors/manifest.js +18 -0
  74. package/dist/extractors/markdown.d.ts +20 -2
  75. package/dist/extractors/markdown.d.ts.map +1 -1
  76. package/dist/extractors/markdown.js +38 -1
  77. package/dist/extractors/symbols-coordinator.d.ts +1 -1
  78. package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
  79. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  80. package/dist/extractors/symbols-ts.js +73 -1
  81. package/dist/operations/autopilot/activation.d.ts +4 -0
  82. package/dist/operations/autopilot/activation.d.ts.map +1 -0
  83. package/dist/operations/autopilot/activation.js +130 -0
  84. package/dist/operations/autopilot/candidate-helpers.d.ts +13 -0
  85. package/dist/operations/autopilot/candidate-helpers.d.ts.map +1 -0
  86. package/dist/operations/autopilot/candidate-helpers.js +55 -0
  87. package/dist/operations/autopilot/candidates.d.ts +4 -0
  88. package/dist/operations/autopilot/candidates.d.ts.map +1 -0
  89. package/dist/operations/autopilot/candidates.js +114 -0
  90. package/dist/operations/autopilot/discovery-evidence.d.ts +10 -0
  91. package/dist/operations/autopilot/discovery-evidence.d.ts.map +1 -0
  92. package/dist/operations/autopilot/discovery-evidence.js +158 -0
  93. package/dist/operations/autopilot/discovery.d.ts +4 -0
  94. package/dist/operations/autopilot/discovery.d.ts.map +1 -0
  95. package/dist/operations/autopilot/discovery.js +100 -0
  96. package/dist/operations/autopilot/generate.d.ts +8 -0
  97. package/dist/operations/autopilot/generate.d.ts.map +1 -0
  98. package/dist/operations/autopilot/generate.js +112 -0
  99. package/dist/operations/autopilot/guidance-actions.d.ts +3 -0
  100. package/dist/operations/autopilot/guidance-actions.d.ts.map +1 -0
  101. package/dist/operations/autopilot/guidance-actions.js +79 -0
  102. package/dist/operations/autopilot/guidance.d.ts +14 -0
  103. package/dist/operations/autopilot/guidance.d.ts.map +1 -0
  104. package/dist/operations/autopilot/guidance.js +124 -0
  105. package/dist/operations/autopilot/markdown-candidates.d.ts +7 -0
  106. package/dist/operations/autopilot/markdown-candidates.d.ts.map +1 -0
  107. package/dist/operations/autopilot/markdown-candidates.js +134 -0
  108. package/dist/operations/autopilot/presentation.d.ts +13 -0
  109. package/dist/operations/autopilot/presentation.d.ts.map +1 -0
  110. package/dist/operations/autopilot/presentation.js +91 -0
  111. package/dist/operations/autopilot/requirement-claims.d.ts +3 -0
  112. package/dist/operations/autopilot/requirement-claims.d.ts.map +1 -0
  113. package/dist/operations/autopilot/requirement-claims.js +48 -0
  114. package/dist/operations/autopilot/types.d.ts +117 -0
  115. package/dist/operations/autopilot/types.d.ts.map +1 -0
  116. package/dist/operations/autopilot/types.js +8 -0
  117. package/dist/operations/modeling/model-requirement.d.ts +10 -0
  118. package/dist/operations/modeling/model-requirement.d.ts.map +1 -0
  119. package/dist/operations/modeling/model-requirement.js +108 -0
  120. package/dist/operations/modeling/predicate-applyplan.d.ts +6 -0
  121. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -0
  122. package/dist/operations/modeling/predicate-applyplan.js +104 -0
  123. package/dist/operations/modeling/predicate-catalog-1.d.ts +3 -0
  124. package/dist/operations/modeling/predicate-catalog-1.d.ts.map +1 -0
  125. package/dist/operations/modeling/predicate-catalog-1.js +200 -0
  126. package/dist/operations/modeling/predicate-catalog-2.d.ts +3 -0
  127. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -0
  128. package/dist/operations/modeling/predicate-catalog-2.js +197 -0
  129. package/dist/operations/modeling/predicate-catalog-3.d.ts +3 -0
  130. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -0
  131. package/dist/operations/modeling/predicate-catalog-3.js +193 -0
  132. package/dist/operations/modeling/predicate-catalog-4.d.ts +3 -0
  133. package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -0
  134. package/dist/operations/modeling/predicate-catalog-4.js +149 -0
  135. package/dist/operations/modeling/predicate-catalog.d.ts +5 -0
  136. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -0
  137. package/dist/operations/modeling/predicate-catalog.js +29 -0
  138. package/dist/operations/modeling/predicate-inference-1.d.ts +16 -0
  139. package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -0
  140. package/dist/operations/modeling/predicate-inference-1.js +161 -0
  141. package/dist/operations/modeling/predicate-inference-2.d.ts +19 -0
  142. package/dist/operations/modeling/predicate-inference-2.d.ts.map +1 -0
  143. package/dist/operations/modeling/predicate-inference-2.js +169 -0
  144. package/dist/operations/modeling/predicate-inference-3.d.ts +15 -0
  145. package/dist/operations/modeling/predicate-inference-3.d.ts.map +1 -0
  146. package/dist/operations/modeling/predicate-inference-3.js +163 -0
  147. package/dist/operations/modeling/predicate-inference.d.ts +5 -0
  148. package/dist/operations/modeling/predicate-inference.d.ts.map +1 -0
  149. package/dist/operations/modeling/predicate-inference.js +148 -0
  150. package/dist/operations/modeling/predicate-loader.d.ts +10 -0
  151. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -0
  152. package/dist/operations/modeling/predicate-loader.js +88 -0
  153. package/dist/operations/modeling/predicate-ranker.d.ts +3 -0
  154. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -0
  155. package/dist/operations/modeling/predicate-ranker.js +24 -0
  156. package/dist/operations/modeling/predicate-score-1.d.ts +3 -0
  157. package/dist/operations/modeling/predicate-score-1.d.ts.map +1 -0
  158. package/dist/operations/modeling/predicate-score-1.js +121 -0
  159. package/dist/operations/modeling/predicate-score-2.d.ts +3 -0
  160. package/dist/operations/modeling/predicate-score-2.d.ts.map +1 -0
  161. package/dist/operations/modeling/predicate-score-2.js +122 -0
  162. package/dist/operations/modeling/predicate-score-3.d.ts +3 -0
  163. package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -0
  164. package/dist/operations/modeling/predicate-score-3.js +54 -0
  165. package/dist/operations/modeling/predicate-types.d.ts +61 -0
  166. package/dist/operations/modeling/predicate-types.d.ts.map +1 -0
  167. package/dist/operations/modeling/predicate-types.js +1 -0
  168. package/dist/operations/modeling/predicate-usage-hints-1.d.ts +3 -0
  169. package/dist/operations/modeling/predicate-usage-hints-1.d.ts.map +1 -0
  170. package/dist/operations/modeling/predicate-usage-hints-1.js +211 -0
  171. package/dist/operations/modeling/predicate-usage-hints-2.d.ts +3 -0
  172. package/dist/operations/modeling/predicate-usage-hints-2.d.ts.map +1 -0
  173. package/dist/operations/modeling/predicate-usage-hints-2.js +209 -0
  174. package/dist/operations/modeling/predicate-usage-hints-3.d.ts +3 -0
  175. package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -0
  176. package/dist/operations/modeling/predicate-usage-hints-3.js +45 -0
  177. package/dist/operations/modeling/predicate-utils.d.ts +23 -0
  178. package/dist/operations/modeling/predicate-utils.d.ts.map +1 -0
  179. package/dist/operations/modeling/predicate-utils.js +187 -0
  180. package/dist/operations/modeling/requirement-applyplan.d.ts +4 -0
  181. package/dist/operations/modeling/requirement-applyplan.d.ts.map +1 -0
  182. package/dist/operations/modeling/requirement-applyplan.js +44 -0
  183. package/dist/operations/modeling/requirement-heuristics.d.ts +4 -0
  184. package/dist/operations/modeling/requirement-heuristics.d.ts.map +1 -0
  185. package/dist/operations/modeling/requirement-heuristics.js +114 -0
  186. package/dist/operations/modeling/requirement-modeler.d.ts +8 -0
  187. package/dist/operations/modeling/requirement-modeler.d.ts.map +1 -0
  188. package/dist/operations/modeling/requirement-modeler.js +70 -0
  189. package/dist/operations/modeling/requirement-types.d.ts +49 -0
  190. package/dist/operations/modeling/requirement-types.d.ts.map +1 -0
  191. package/dist/operations/modeling/requirement-types.js +1 -0
  192. package/dist/operations/modeling/requirement-utils.d.ts +10 -0
  193. package/dist/operations/modeling/requirement-utils.d.ts.map +1 -0
  194. package/dist/operations/modeling/requirement-utils.js +65 -0
  195. package/dist/operations/modeling/suggest-predicates.d.ts +6 -0
  196. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -0
  197. package/dist/operations/modeling/suggest-predicates.js +64 -0
  198. package/dist/operations/mutation/audit.d.ts +6 -0
  199. package/dist/operations/mutation/audit.d.ts.map +1 -0
  200. package/dist/operations/mutation/audit.js +22 -0
  201. package/dist/operations/mutation/contradictions.d.ts +10 -0
  202. package/dist/operations/mutation/contradictions.d.ts.map +1 -0
  203. package/dist/operations/mutation/contradictions.js +40 -0
  204. package/dist/operations/mutation/delete.d.ts +5 -0
  205. package/dist/operations/mutation/delete.d.ts.map +1 -0
  206. package/dist/operations/mutation/delete.js +67 -0
  207. package/dist/operations/mutation/relationships.d.ts +17 -0
  208. package/dist/operations/mutation/relationships.d.ts.map +1 -0
  209. package/dist/operations/mutation/relationships.js +134 -0
  210. package/dist/operations/mutation/save.d.ts +4 -0
  211. package/dist/operations/mutation/save.d.ts.map +1 -0
  212. package/dist/operations/mutation/save.js +14 -0
  213. package/dist/operations/mutation/serialization.d.ts +5 -0
  214. package/dist/operations/mutation/serialization.d.ts.map +1 -0
  215. package/dist/operations/mutation/serialization.js +85 -0
  216. package/dist/operations/mutation/strict-fact.d.ts +4 -0
  217. package/dist/operations/mutation/strict-fact.d.ts.map +1 -0
  218. package/dist/operations/mutation/strict-fact.js +67 -0
  219. package/dist/operations/mutation/symbol-granularity.d.ts +4 -0
  220. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -0
  221. package/dist/operations/mutation/symbol-granularity.js +109 -0
  222. package/dist/operations/mutation/symbol-refresh.d.ts +10 -0
  223. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -0
  224. package/dist/operations/mutation/symbol-refresh.js +105 -0
  225. package/dist/operations/mutation/types.d.ts +43 -0
  226. package/dist/operations/mutation/types.d.ts.map +1 -0
  227. package/dist/operations/mutation/types.js +1 -0
  228. package/dist/operations/mutation/upsert.d.ts +5 -0
  229. package/dist/operations/mutation/upsert.d.ts.map +1 -0
  230. package/dist/operations/mutation/upsert.js +103 -0
  231. package/dist/operations/mutation/validate-upsert.d.ts +5 -0
  232. package/dist/operations/mutation/validate-upsert.d.ts.map +1 -0
  233. package/dist/operations/mutation/validate-upsert.js +50 -0
  234. package/dist/operations/mutation/validation.d.ts +5 -0
  235. package/dist/operations/mutation/validation.d.ts.map +1 -0
  236. package/dist/operations/mutation/validation.js +107 -0
  237. package/dist/operations/mutation/warnings.d.ts +4 -0
  238. package/dist/operations/mutation/warnings.d.ts.map +1 -0
  239. package/dist/operations/mutation/warnings.js +17 -0
  240. package/dist/operations/semantic-advisor/analysis-receipt.d.ts +5 -0
  241. package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -0
  242. package/dist/operations/semantic-advisor/analysis-receipt.js +112 -0
  243. package/dist/operations/semantic-advisor/analyze-prose.d.ts +5 -0
  244. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -0
  245. package/dist/operations/semantic-advisor/analyze-prose.js +271 -0
  246. package/dist/operations/semantic-advisor/clauses.d.ts +10 -0
  247. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -0
  248. package/dist/operations/semantic-advisor/clauses.js +43 -0
  249. package/dist/operations/semantic-advisor/observation-plan.d.ts +3 -0
  250. package/dist/operations/semantic-advisor/observation-plan.d.ts.map +1 -0
  251. package/dist/operations/semantic-advisor/observation-plan.js +19 -0
  252. package/dist/operations/semantic-advisor/predicate-rule.d.ts +14 -0
  253. package/dist/operations/semantic-advisor/predicate-rule.d.ts.map +1 -0
  254. package/dist/operations/semantic-advisor/predicate-rule.js +22 -0
  255. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +79 -0
  256. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -0
  257. package/dist/operations/semantic-advisor/predicate-rules-core.js +140 -0
  258. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +83 -0
  259. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -0
  260. package/dist/operations/semantic-advisor/predicate-rules-policy.js +150 -0
  261. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +48 -0
  262. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -0
  263. package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +102 -0
  264. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +71 -0
  265. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -0
  266. package/dist/operations/semantic-advisor/predicate-rules-product.js +133 -0
  267. package/dist/operations/semantic-advisor/prose-coverage-evaluator.d.ts +29 -0
  268. package/dist/operations/semantic-advisor/prose-coverage-evaluator.d.ts.map +1 -0
  269. package/dist/operations/semantic-advisor/prose-coverage-evaluator.js +54 -0
  270. package/dist/operations/semantic-advisor/shared.d.ts +18 -0
  271. package/dist/operations/semantic-advisor/shared.d.ts.map +1 -0
  272. package/dist/operations/semantic-advisor/shared.js +209 -0
  273. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +4 -0
  274. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -0
  275. package/dist/operations/semantic-advisor/strict-count-rules.js +62 -0
  276. package/dist/operations/semantic-advisor/strict-rules.d.ts +4 -0
  277. package/dist/operations/semantic-advisor/strict-rules.d.ts.map +1 -0
  278. package/dist/operations/semantic-advisor/strict-rules.js +106 -0
  279. package/dist/operations/semantic-advisor/types.d.ts +135 -0
  280. package/dist/operations/semantic-advisor/types.d.ts.map +1 -0
  281. package/dist/operations/semantic-advisor/types.js +1 -0
  282. package/dist/prolog/codec.d.ts.map +1 -1
  283. package/dist/prolog/codec.js +9 -2
  284. package/dist/prolog.d.ts +5 -0
  285. package/dist/prolog.d.ts.map +1 -1
  286. package/dist/prolog.js +82 -30
  287. package/dist/public/impact/analyzer.d.ts +3 -0
  288. package/dist/public/impact/analyzer.d.ts.map +1 -0
  289. package/dist/public/impact/analyzer.js +54 -0
  290. package/dist/public/impact/coverage-depth-quality.d.ts +4 -0
  291. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -0
  292. package/dist/public/impact/coverage-depth-quality.js +179 -0
  293. package/dist/public/impact/diagnostics.d.ts +7 -0
  294. package/dist/public/impact/diagnostics.d.ts.map +1 -0
  295. package/dist/public/impact/diagnostics.js +126 -0
  296. package/dist/public/impact/diff-meaning.d.ts +2 -0
  297. package/dist/public/impact/diff-meaning.d.ts.map +1 -0
  298. package/dist/public/impact/diff-meaning.js +101 -0
  299. package/dist/public/impact/full-kb-quality.d.ts +10 -0
  300. package/dist/public/impact/full-kb-quality.d.ts.map +1 -0
  301. package/dist/public/impact/full-kb-quality.js +191 -0
  302. package/dist/public/impact/manifest.d.ts +5 -0
  303. package/dist/public/impact/manifest.d.ts.map +1 -0
  304. package/dist/public/impact/manifest.js +43 -0
  305. package/dist/public/impact/requirement-quality.d.ts +4 -0
  306. package/dist/public/impact/requirement-quality.d.ts.map +1 -0
  307. package/dist/public/impact/requirement-quality.js +199 -0
  308. package/dist/public/impact/source-changes.d.ts +5 -0
  309. package/dist/public/impact/source-changes.d.ts.map +1 -0
  310. package/dist/public/impact/source-changes.js +129 -0
  311. package/dist/public/impact/summaries.d.ts +6 -0
  312. package/dist/public/impact/summaries.d.ts.map +1 -0
  313. package/dist/public/impact/summaries.js +68 -0
  314. package/dist/public/impact/symbol-quality-model.d.ts +21 -0
  315. package/dist/public/impact/symbol-quality-model.d.ts.map +1 -0
  316. package/dist/public/impact/symbol-quality-model.js +116 -0
  317. package/dist/public/impact/symbol-quality.d.ts +4 -0
  318. package/dist/public/impact/symbol-quality.d.ts.map +1 -0
  319. package/dist/public/impact/symbol-quality.js +159 -0
  320. package/dist/public/impact/types.d.ts +79 -0
  321. package/dist/public/impact/types.d.ts.map +1 -0
  322. package/dist/public/impact/types.js +1 -0
  323. package/dist/public/impact-diagnostics.d.ts +7 -0
  324. package/dist/public/impact-diagnostics.d.ts.map +1 -0
  325. package/dist/public/impact-diagnostics.js +5 -0
  326. package/dist/public/operations/catalog.d.ts +907 -0
  327. package/dist/public/operations/catalog.d.ts.map +1 -0
  328. package/dist/public/operations/catalog.js +42 -0
  329. package/dist/public/operations/check-executor.d.ts +21 -0
  330. package/dist/public/operations/check-executor.d.ts.map +1 -0
  331. package/dist/public/operations/check-executor.js +111 -0
  332. package/dist/public/operations/check-format-shared.d.ts +36 -0
  333. package/dist/public/operations/check-format-shared.d.ts.map +1 -0
  334. package/dist/public/operations/check-format-shared.js +107 -0
  335. package/dist/public/operations/check-helpers.d.ts +10 -0
  336. package/dist/public/operations/check-helpers.d.ts.map +1 -0
  337. package/dist/public/operations/check-helpers.js +107 -0
  338. package/dist/public/operations/discovery-entities.d.ts +14 -0
  339. package/dist/public/operations/discovery-entities.d.ts.map +1 -0
  340. package/dist/public/operations/discovery-entities.js +91 -0
  341. package/dist/public/operations/discovery-executors.d.ts +39 -0
  342. package/dist/public/operations/discovery-executors.d.ts.map +1 -0
  343. package/dist/public/operations/discovery-executors.js +101 -0
  344. package/dist/public/operations/index.d.ts +20 -0
  345. package/dist/public/operations/index.d.ts.map +1 -0
  346. package/dist/public/operations/index.js +18 -0
  347. package/dist/public/operations/node-ports.d.ts +15 -0
  348. package/dist/public/operations/node-ports.d.ts.map +1 -0
  349. package/dist/public/operations/node-ports.js +57 -0
  350. package/dist/public/operations/prolog-json.d.ts +5 -0
  351. package/dist/public/operations/prolog-json.d.ts.map +1 -0
  352. package/dist/public/operations/prolog-json.js +44 -0
  353. package/dist/public/operations/runtime-types.d.ts +69 -0
  354. package/dist/public/operations/runtime-types.d.ts.map +1 -0
  355. package/dist/public/operations/runtime-types.js +17 -0
  356. package/dist/public/operations/specs/autopilot.d.ts +82 -0
  357. package/dist/public/operations/specs/autopilot.d.ts.map +1 -0
  358. package/dist/public/operations/specs/autopilot.js +72 -0
  359. package/dist/public/operations/specs/check.d.ts +51 -0
  360. package/dist/public/operations/specs/check.d.ts.map +1 -0
  361. package/dist/public/operations/specs/check.js +62 -0
  362. package/dist/public/operations/specs/discovery.d.ts +94 -0
  363. package/dist/public/operations/specs/discovery.d.ts.map +1 -0
  364. package/dist/public/operations/specs/discovery.js +98 -0
  365. package/dist/public/operations/specs/modeling.d.ts +126 -0
  366. package/dist/public/operations/specs/modeling.d.ts.map +1 -0
  367. package/dist/public/operations/specs/modeling.js +117 -0
  368. package/dist/public/operations/specs/mutation-schemas.d.ts +233 -0
  369. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -0
  370. package/dist/public/operations/specs/mutation-schemas.js +267 -0
  371. package/dist/public/operations/specs/mutation.d.ts +56 -0
  372. package/dist/public/operations/specs/mutation.d.ts.map +1 -0
  373. package/dist/public/operations/specs/mutation.js +44 -0
  374. package/dist/public/operations/specs/reporting.d.ts +185 -0
  375. package/dist/public/operations/specs/reporting.d.ts.map +1 -0
  376. package/dist/public/operations/specs/reporting.js +158 -0
  377. package/dist/public/operations/specs/semantic.d.ts +53 -0
  378. package/dist/public/operations/specs/semantic.d.ts.map +1 -0
  379. package/dist/public/operations/specs/semantic.js +105 -0
  380. package/dist/public/operations/specs/skills.d.ts +70 -0
  381. package/dist/public/operations/specs/skills.d.ts.map +1 -0
  382. package/dist/public/operations/specs/skills.js +107 -0
  383. package/dist/public/operations/specs/sparql.d.ts +39 -0
  384. package/dist/public/operations/specs/sparql.d.ts.map +1 -0
  385. package/dist/public/operations/specs/sparql.js +121 -0
  386. package/dist/public/operations/specs/upsert.d.ts +256 -0
  387. package/dist/public/operations/specs/upsert.d.ts.map +1 -0
  388. package/dist/public/operations/specs/upsert.js +27 -0
  389. package/dist/public/operations/types.d.ts +24 -0
  390. package/dist/public/operations/types.d.ts.map +1 -0
  391. package/dist/public/operations/types.js +1 -0
  392. package/dist/public/schemas/entity.d.ts.map +1 -1
  393. package/dist/public/schemas/entity.js +48 -0
  394. package/dist/public/skill-system/errors.d.ts +19 -0
  395. package/dist/public/skill-system/errors.d.ts.map +1 -0
  396. package/dist/public/skill-system/errors.js +36 -0
  397. package/dist/public/skill-system/loader.d.ts +9 -0
  398. package/dist/public/skill-system/loader.d.ts.map +1 -0
  399. package/dist/public/skill-system/loader.js +76 -0
  400. package/dist/public/skill-system/paths.d.ts +6 -0
  401. package/dist/public/skill-system/paths.d.ts.map +1 -0
  402. package/dist/public/skill-system/paths.js +25 -0
  403. package/dist/public/skill-system/types.d.ts +15 -0
  404. package/dist/public/skill-system/types.d.ts.map +1 -0
  405. package/dist/public/skill-system/types.js +1 -0
  406. package/dist/public/skill-system/validation.d.ts +10 -0
  407. package/dist/public/skill-system/validation.d.ts.map +1 -0
  408. package/dist/public/skill-system/validation.js +119 -0
  409. package/dist/public/skills/init-kibi/SKILL.md +62 -0
  410. package/dist/public/skills/kibi-freshness/SKILL.md +44 -0
  411. package/dist/public/skills/kibi-traceability/SKILL.md +54 -0
  412. package/dist/public/skills/kibi-usage/SKILL.md +123 -95
  413. package/dist/public/skills/kibi-usage/resources/fact-lanes.md +107 -5
  414. package/dist/public/skills/kibi-usage/resources/operation-access.md +44 -0
  415. package/dist/public/skills/kibi-usage/resources/relationship-directions.md +30 -0
  416. package/dist/public/skills/kibi-usage/resources/workflows.md +40 -3
  417. package/dist/public/skills.d.ts +4 -41
  418. package/dist/public/skills.d.ts.map +1 -1
  419. package/dist/public/skills.js +3 -270
  420. package/dist/public/symbol-granularity.d.ts +1 -1
  421. package/dist/public/symbol-granularity.d.ts.map +1 -1
  422. package/dist/public/symbol-granularity.js +2 -0
  423. package/dist/runtime/cli-runtime.d.ts +3 -0
  424. package/dist/runtime/cli-runtime.d.ts.map +1 -0
  425. package/dist/runtime/cli-runtime.js +96 -0
  426. package/dist/schemas/entity.schema.json +23 -0
  427. package/dist/traceability/evidence-model.d.ts +1 -1
  428. package/dist/traceability/evidence-model.d.ts.map +1 -1
  429. package/dist/traceability/evidence-model.js +1 -1
  430. package/dist/traceability/staged-diagnostics.d.ts +6 -6
  431. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  432. package/dist/traceability/staged-diagnostics.js +12 -6
  433. package/dist/traceability/staged-impact-contract.js +1 -1
  434. package/dist/traceability/staged-symbols-manifest.d.ts +1 -0
  435. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  436. package/dist/traceability/staged-symbols-manifest.js +60 -27
  437. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  438. package/dist/traceability/symbol-extract.js +58 -1
  439. package/dist/traceability/temp-kb.d.ts.map +1 -1
  440. package/dist/traceability/temp-kb.js +34 -1
  441. package/dist/types/entities.d.ts +8 -1
  442. package/dist/types/entities.d.ts.map +1 -1
  443. package/dist/utils/prolog-query-plan-safety.d.ts +8 -0
  444. package/dist/utils/prolog-query-plan-safety.d.ts.map +1 -0
  445. package/dist/utils/prolog-query-plan-safety.js +47 -0
  446. package/dist/utils/rule-registry.d.ts.map +1 -1
  447. package/dist/utils/rule-registry.js +18 -0
  448. package/package.json +60 -2
  449. package/schema/entities.pl +4 -0
  450. package/src/public/impact/analyzer.ts +90 -0
  451. package/src/public/impact/coverage-depth-quality.ts +268 -0
  452. package/src/public/impact/diagnostics.ts +199 -0
  453. package/src/public/impact/diff-meaning.ts +121 -0
  454. package/src/public/impact/full-kb-quality.ts +230 -0
  455. package/src/public/impact/manifest.ts +57 -0
  456. package/src/public/impact/requirement-quality.ts +262 -0
  457. package/src/public/impact/source-changes.ts +180 -0
  458. package/src/public/impact/summaries.ts +100 -0
  459. package/src/public/impact/symbol-quality-model.ts +171 -0
  460. package/src/public/impact/symbol-quality.ts +207 -0
  461. package/src/public/impact/types.ts +99 -0
  462. package/src/public/impact-diagnostics.ts +22 -0
  463. package/src/public/operations/catalog.ts +60 -0
  464. package/src/public/operations/check-executor.ts +185 -0
  465. package/src/public/operations/check-format-shared.ts +178 -0
  466. package/src/public/operations/check-helpers.ts +141 -0
  467. package/src/public/operations/discovery-entities.ts +122 -0
  468. package/src/public/operations/discovery-executors.ts +176 -0
  469. package/src/public/operations/index.ts +19 -0
  470. package/src/public/operations/node-ports.ts +78 -0
  471. package/src/public/operations/prolog-json.ts +71 -0
  472. package/src/public/operations/runtime-types.ts +106 -0
  473. package/src/public/operations/specs/autopilot.ts +98 -0
  474. package/src/public/operations/specs/check.ts +72 -0
  475. package/src/public/operations/specs/discovery.ts +126 -0
  476. package/src/public/operations/specs/modeling.ts +154 -0
  477. package/src/public/operations/specs/mutation-schemas.ts +296 -0
  478. package/src/public/operations/specs/mutation.ts +58 -0
  479. package/src/public/operations/specs/reporting.ts +249 -0
  480. package/src/public/operations/specs/semantic.ts +135 -0
  481. package/src/public/operations/specs/skills.ts +142 -0
  482. package/src/public/operations/specs/sparql.ts +149 -0
  483. package/src/public/operations/specs/upsert.ts +40 -0
  484. package/src/public/operations/types.ts +57 -0
  485. package/src/public/schemas/entity.ts +50 -0
  486. package/src/public/skill-system/errors.ts +38 -0
  487. package/src/public/skill-system/loader.ts +108 -0
  488. package/src/public/skill-system/paths.ts +27 -0
  489. package/src/public/skill-system/types.ts +14 -0
  490. package/src/public/skill-system/validation.ts +175 -0
  491. package/src/public/skills/init-kibi/SKILL.md +62 -0
  492. package/src/public/skills/kibi-freshness/SKILL.md +44 -0
  493. package/src/public/skills/kibi-traceability/SKILL.md +54 -0
  494. package/src/public/skills/kibi-usage/SKILL.md +123 -95
  495. package/src/public/skills/kibi-usage/resources/fact-lanes.md +107 -5
  496. package/src/public/skills/kibi-usage/resources/operation-access.md +44 -0
  497. package/src/public/skills/kibi-usage/resources/relationship-directions.md +30 -0
  498. package/src/public/skills/kibi-usage/resources/workflows.md +40 -3
  499. package/src/public/skills.ts +18 -427
  500. package/src/public/symbol-granularity.ts +4 -0
  501. package/src/schemas/entity.schema.json +23 -0
@@ -0,0 +1,122 @@
1
+ import {
2
+ escapeAtomContent,
3
+ parseEntityFromBinding,
4
+ parseEntityFromList,
5
+ parseListOfLists,
6
+ } from "../../prolog/codec.js";
7
+ import type { PrologPort } from "./runtime-types.js";
8
+
9
+ export type EntityQueryInput = {
10
+ readonly type?: string;
11
+ readonly id?: string;
12
+ readonly tags?: readonly string[];
13
+ readonly sourceFile?: string;
14
+ };
15
+
16
+ export const VALID_ENTITY_TYPES = [
17
+ "req",
18
+ "scenario",
19
+ "test",
20
+ "adr",
21
+ "flag",
22
+ "event",
23
+ "symbol",
24
+ "fact",
25
+ ] as const;
26
+
27
+ // implements REQ-002, REQ-013
28
+ export function validateEntityType(type?: string): void {
29
+ if (type && !VALID_ENTITY_TYPES.some((candidate) => candidate === type)) {
30
+ throw new Error(
31
+ `Invalid type '${type}'. Valid types: ${VALID_ENTITY_TYPES.join(", ")}. Use a single type value, or omit this parameter to query all entities.`,
32
+ );
33
+ }
34
+ }
35
+
36
+ // implements REQ-002, REQ-013
37
+ export function buildEntityGoal(input: EntityQueryInput): string {
38
+ const { type, id, tags, sourceFile } = input;
39
+ if (sourceFile) {
40
+ const safeSource = escapeAtomContent(sourceFile);
41
+ if (type) {
42
+ const safeType = escapeAtomContent(type);
43
+ return `findall([Id,'${safeType}',Props], (kb_entities_by_source('${safeSource}', SourceIds), member(Id, SourceIds), kb_entity(Id, '${safeType}', Props)), Results)`;
44
+ }
45
+ return `findall([Id,Type,Props], (kb_entities_by_source('${safeSource}', SourceIds), member(Id, SourceIds), kb_entity(Id, Type, Props)), Results)`;
46
+ }
47
+ if (id && type) {
48
+ const safeId = escapeAtomContent(id);
49
+ const safeType = escapeAtomContent(type);
50
+ return `findall(['${safeId}','${safeType}',Props], kb_entity('${safeId}', '${safeType}', Props), Results)`;
51
+ }
52
+ if (id) {
53
+ const safeId = escapeAtomContent(id);
54
+ return `findall(['${safeId}',Type,Props], kb_entity('${safeId}', Type, Props), Results)`;
55
+ }
56
+ if (tags && tags.length > 0) {
57
+ if (type) {
58
+ const safeType = escapeAtomContent(type);
59
+ return `findall([Id,'${safeType}',Props], kb_entity(Id, '${safeType}', Props), Results)`;
60
+ }
61
+ return "findall([Id,Type,Props], kb_entity(Id, Type, Props), Results)";
62
+ }
63
+ if (type) {
64
+ const safeType = escapeAtomContent(type);
65
+ return `findall([Id,'${safeType}',Props], kb_entity(Id, '${safeType}', Props), Results)`;
66
+ }
67
+ return "findall([Id,Type,Props], kb_entity(Id, Type, Props), Results)";
68
+ }
69
+
70
+ // implements REQ-002, REQ-013
71
+ export async function loadEntities(
72
+ prolog: Pick<PrologPort, "query">,
73
+ input: EntityQueryInput,
74
+ ): Promise<Record<string, unknown>[]> {
75
+ validateEntityType(input.type);
76
+ const queryResult = await prolog.query(buildEntityGoal(input));
77
+ if (!queryResult.success) {
78
+ throw new Error(queryResult.error || "Query failed with unknown error");
79
+ }
80
+
81
+ let entities: Record<string, unknown>[] = [];
82
+ const resultsBinding = queryResult.bindings.Results;
83
+ const resultBinding = queryResult.bindings.Result;
84
+ if (resultsBinding) {
85
+ entities = parseListOfLists(resultsBinding).map(parseEntityFromList);
86
+ } else if (resultBinding) {
87
+ entities = [parseEntityFromBinding(resultBinding)];
88
+ }
89
+ if (input.tags && input.tags.length > 0) {
90
+ const requested = new Set(input.tags.map((tag) => tag.trim()));
91
+ entities = entities.filter((entity) => {
92
+ const tags = entity.tags;
93
+ return (
94
+ Array.isArray(tags) &&
95
+ tags.some((tag) => requested.has(String(tag).trim()))
96
+ );
97
+ });
98
+ }
99
+ return dedupeEntities(entities);
100
+ }
101
+
102
+ // implements REQ-002
103
+ export function paginateResults<T>(
104
+ results: readonly T[],
105
+ limit = 100,
106
+ offset = 0,
107
+ ): T[] {
108
+ return results.slice(offset, offset + limit);
109
+ }
110
+
111
+ // implements REQ-002
112
+ export function dedupeEntities(
113
+ entities: readonly Record<string, unknown>[],
114
+ ): Record<string, unknown>[] {
115
+ const seen = new Set<string>();
116
+ return entities.filter((entity) => {
117
+ const key = `${String(entity.type ?? "")}::${String(entity.id ?? "")}`;
118
+ if (seen.has(key)) return false;
119
+ seen.add(key);
120
+ return true;
121
+ });
122
+ }
@@ -0,0 +1,176 @@
1
+ import { rankEntities } from "../../search-ranking.js";
2
+ import type { SearchMatch } from "../../search-ranking.js";
3
+ import {
4
+ loadEntities,
5
+ paginateResults,
6
+ validateEntityType,
7
+ } from "./discovery-entities.js";
8
+ import { runOperationJsonQuery } from "./prolog-json.js";
9
+ import type { OperationContext, PrologPort } from "./runtime-types.js";
10
+ import type { OperationResult } from "./types.js";
11
+
12
+ export type QueryInput = {
13
+ readonly type?: string;
14
+ readonly id?: string;
15
+ readonly tags?: readonly string[];
16
+ readonly sourceFile?: string;
17
+ readonly limit?: number;
18
+ readonly offset?: number;
19
+ };
20
+
21
+ export type QueryPayload = {
22
+ readonly entities: readonly Record<string, unknown>[];
23
+ readonly count: number;
24
+ };
25
+
26
+ export type SearchInput = {
27
+ readonly query: string;
28
+ readonly type?: string;
29
+ readonly limit?: number;
30
+ readonly offset?: number;
31
+ };
32
+
33
+ export type SearchPayload = {
34
+ readonly results: readonly SearchMatch[];
35
+ readonly count: number;
36
+ };
37
+
38
+ export type StatusInput = Readonly<Record<string, never>>;
39
+
40
+ export type StatusPayload = {
41
+ readonly branch: string;
42
+ readonly snapshotId: string;
43
+ readonly syncedAt: string | null;
44
+ readonly dirty: boolean;
45
+ readonly syncState: string;
46
+ readonly kbPath?: string;
47
+ readonly lastSyncSource?: string;
48
+ };
49
+
50
+ function requireProlog(context: OperationContext): PrologPort {
51
+ if (!context.prolog) {
52
+ throw new Error("Discovery operation requires a Prolog context");
53
+ }
54
+ return context.prolog;
55
+ }
56
+
57
+ function isStatusPayload(value: unknown): value is StatusPayload {
58
+ if (value === null || typeof value !== "object") return false;
59
+ const record = Object.fromEntries(Object.entries(value));
60
+ return (
61
+ typeof record.branch === "string" &&
62
+ typeof record.snapshotId === "string" &&
63
+ (typeof record.syncedAt === "string" || record.syncedAt === null) &&
64
+ typeof record.dirty === "boolean" &&
65
+ typeof record.syncState === "string"
66
+ );
67
+ }
68
+
69
+ export async function executeQuery(
70
+ input: QueryInput,
71
+ context: OperationContext,
72
+ ): Promise<OperationResult<QueryPayload>> {
73
+ // implements REQ-kibi-operation-interface-parity
74
+ const { type, id, tags, sourceFile, limit = 100, offset = 0 } = input;
75
+ try {
76
+ const entities = await loadEntities(requireProlog(context), {
77
+ ...(type !== undefined ? { type } : {}),
78
+ ...(id !== undefined ? { id } : {}),
79
+ ...(tags !== undefined ? { tags } : {}),
80
+ ...(sourceFile !== undefined ? { sourceFile } : {}),
81
+ });
82
+ const paginated = paginateResults(entities, limit, offset);
83
+ const text =
84
+ entities.length === 0
85
+ ? `No entities found${type ? ` of type '${type}'` : ""}.`
86
+ : `Found ${entities.length} entities${type ? ` of type '${type}'` : ""}. Showing ${paginated.length} (offset ${offset}, limit ${limit}): ${paginated
87
+ .map((entity) => {
88
+ const entityId = String(entity.id ?? "").replace(
89
+ /^file:\/\/.*\//,
90
+ "",
91
+ );
92
+ return `${entityId} (${String(entity.title ?? "")}, status=${String(entity.status ?? "")})`;
93
+ })
94
+ .join(", ")}`;
95
+ return {
96
+ content: [{ type: "text", text }],
97
+ structuredContent: { entities: paginated, count: entities.length },
98
+ };
99
+ } catch (error) {
100
+ const message = error instanceof Error ? error.message : String(error);
101
+ throw new Error(`Query execution failed: ${message}`);
102
+ }
103
+ }
104
+
105
+ export async function executeSearch(
106
+ input: SearchInput,
107
+ context: OperationContext,
108
+ ): Promise<OperationResult<SearchPayload>> {
109
+ // implements REQ-kibi-operation-interface-parity, REQ-mcp-search-discovery
110
+ const { query, type, limit = 20, offset = 0 } = input;
111
+ const trimmedQuery = query.trim();
112
+ if (!trimmedQuery) {
113
+ throw new Error(
114
+ "Search execution failed: query must be a non-empty string",
115
+ );
116
+ }
117
+ validateEntityType(type);
118
+ try {
119
+ const entities = await loadEntities(requireProlog(context), {
120
+ ...(type !== undefined ? { type } : {}),
121
+ });
122
+ const matches = await rankEntities(
123
+ entities,
124
+ trimmedQuery,
125
+ context.workspaceRoot,
126
+ );
127
+ const paginated = paginateResults(matches, limit, offset);
128
+ const text =
129
+ matches.length === 0
130
+ ? `No search results for '${trimmedQuery}'.`
131
+ : `Found ${matches.length} search results for '${trimmedQuery}'. Showing ${paginated.length} (offset ${offset}, limit ${limit}): ${paginated
132
+ .map(
133
+ (match) =>
134
+ `${String(match.entity.id ?? "")} [${match.reasons.join(", ")}]`,
135
+ )
136
+ .join(", ")}`;
137
+ return {
138
+ content: [{ type: "text", text }],
139
+ structuredContent: { results: paginated, count: matches.length },
140
+ };
141
+ } catch (error) {
142
+ const message = error instanceof Error ? error.message : String(error);
143
+ if (message.startsWith("Search execution failed:")) throw error;
144
+ throw new Error(`Search execution failed: ${message}`);
145
+ }
146
+ }
147
+
148
+ export async function executeStatus(
149
+ _input: StatusInput,
150
+ context: OperationContext,
151
+ ): Promise<OperationResult<StatusPayload>> {
152
+ // implements REQ-kibi-operation-interface-parity, REQ-cli-status-pre-first-sync
153
+ try {
154
+ const payload = await runOperationJsonQuery<StatusPayload>(
155
+ requireProlog(context),
156
+ "status.pl",
157
+ "status:kb_status_json(JsonString)",
158
+ "Status execution",
159
+ );
160
+ if (!isStatusPayload(payload)) {
161
+ throw new Error("Status execution query returned an invalid payload");
162
+ }
163
+ return {
164
+ content: [
165
+ {
166
+ type: "text",
167
+ text: `Branch ${payload.branch} is ${payload.syncState} (snapshot ${payload.snapshotId}, dirty=${payload.dirty})`,
168
+ },
169
+ ],
170
+ structuredContent: payload,
171
+ };
172
+ } catch (error) {
173
+ const message = error instanceof Error ? error.message : String(error);
174
+ throw new Error(`Status execution failed: ${message}`);
175
+ }
176
+ }
@@ -0,0 +1,19 @@
1
+ export * from "./catalog.js";
2
+ export * from "./check-executor.js";
3
+ export * from "./discovery-entities.js";
4
+ export * from "./discovery-executors.js";
5
+ export * from "./runtime-types.js";
6
+ export * from "./node-ports.js";
7
+ export * from "./specs/autopilot.js";
8
+ export * from "./specs/check.js";
9
+ export * from "./specs/discovery.js";
10
+ export * from "./specs/modeling.js";
11
+ export * from "./specs/mutation.js";
12
+ export * from "./specs/reporting.js";
13
+ export * from "./specs/semantic.js";
14
+ export * from "./specs/skills.js";
15
+ export * from "./specs/sparql.js";
16
+ export * from "./types.js";
17
+ export * from "../../operations/autopilot/generate.js";
18
+ export * from "../../operations/autopilot/presentation.js";
19
+ export type * from "../../operations/autopilot/types.js";
@@ -0,0 +1,78 @@
1
+ import { execFile } from "node:child_process";
2
+ import * as fs from "node:fs/promises";
3
+ import { promisify } from "node:util";
4
+ import fg from "fast-glob";
5
+
6
+ import { createRepoIgnorePolicy } from "../ignore-policy.js";
7
+ import type { FilesystemPort, GitPort, NetworkPort } from "./runtime-types.js";
8
+
9
+ type NodeFilesystemPort = FilesystemPort & {
10
+ readonly glob: (
11
+ patterns: readonly string[],
12
+ options: { readonly cwd: string; readonly includeIgnored?: boolean },
13
+ ) => Promise<readonly string[]>;
14
+ };
15
+
16
+ type NodeGitPort = GitPort & {
17
+ readonly ignoredPaths: (
18
+ workspaceRoot: string,
19
+ paths: readonly string[],
20
+ ) => Promise<readonly string[]>;
21
+ };
22
+
23
+ const execFileAsync = promisify(execFile);
24
+ const ALWAYS_IGNORED_GLOBS = [
25
+ "**/.git/**",
26
+ "**/.kb/**",
27
+ "**/node_modules/**",
28
+ "**/vendor/**",
29
+ "**/vendors/**",
30
+ "**/third_party/**",
31
+ "**/third-party/**",
32
+ "**/dist/**",
33
+ "**/build/**",
34
+ "**/coverage/**",
35
+ "**/target/**",
36
+ ] as const;
37
+
38
+ export const nodeFilesystem: NodeFilesystemPort = {
39
+ readFile: (filePath) => fs.readFile(filePath, "utf8"),
40
+ writeFile: async (filePath, data) => {
41
+ await fs.writeFile(filePath, data, "utf8");
42
+ },
43
+ mkdir: async (directoryPath) => {
44
+ await fs.mkdir(directoryPath, { recursive: true });
45
+ },
46
+ stat: (filePath) => fs.stat(filePath),
47
+ glob: (patterns, options) =>
48
+ fg([...patterns], {
49
+ cwd: options.cwd,
50
+ onlyFiles: true,
51
+ unique: true,
52
+ dot: true,
53
+ suppressErrors: true,
54
+ ignore: [...ALWAYS_IGNORED_GLOBS],
55
+ }),
56
+ };
57
+
58
+ export const nodeGit: NodeGitPort = {
59
+ revParse: async (...args) => {
60
+ const { stdout } = await execFileAsync("git", ["rev-parse", ...args]);
61
+ return stdout.trim();
62
+ },
63
+ showToplevel: async () => {
64
+ const { stdout } = await execFileAsync("git", [
65
+ "rev-parse",
66
+ "--show-toplevel",
67
+ ]);
68
+ return stdout.trim();
69
+ },
70
+ ignoredPaths: async (workspaceRoot, paths) => {
71
+ const policy = createRepoIgnorePolicy(workspaceRoot);
72
+ return paths.filter((candidate) => policy.isIgnored(candidate));
73
+ },
74
+ };
75
+
76
+ export const nodeNetwork: NetworkPort = {
77
+ fetch: (input, init) => globalThis.fetch(input, init),
78
+ };
@@ -0,0 +1,71 @@
1
+ import path from "node:path";
2
+
3
+ import { getKbPlPathOverride } from "../../env.js";
4
+ import { resolveKbPlPath } from "../../prolog.js";
5
+ import { escapeAtom } from "../../prolog/codec.js";
6
+ import type { PrologPort } from "./runtime-types.js";
7
+
8
+ function resolveCoreModulePath(fileName: string): string {
9
+ const genericOverride = getKbPlPathOverride();
10
+ return path.join(
11
+ path.dirname(genericOverride ?? resolveKbPlPath()),
12
+ fileName,
13
+ );
14
+ }
15
+
16
+ export async function runOperationJsonQuery<T>(
17
+ prolog: PrologPort,
18
+ fileName: string,
19
+ goal: string,
20
+ errorLabel: string,
21
+ ): Promise<T> {
22
+ const modulePath = escapeAtom(
23
+ resolveCoreModulePath(fileName).replaceAll("\\", "/"),
24
+ );
25
+ const oneShotMode =
26
+ typeof (globalThis as { Bun?: unknown }).Bun !== "undefined";
27
+ const result = oneShotMode
28
+ ? await prolog.query(`(use_module('${modulePath}'), ${goal})`)
29
+ : await runInteractiveModuleQuery(prolog, modulePath, goal, errorLabel);
30
+ if (!result.success) {
31
+ throw new Error(
32
+ `${errorLabel} query failed: ${result.error ?? "Unknown error"}`,
33
+ );
34
+ }
35
+ const rawJson = result.bindings.JsonString;
36
+ if (rawJson === undefined) {
37
+ throw new Error(`${errorLabel} query returned no JsonString binding`);
38
+ }
39
+ let parsed: unknown = JSON.parse(rawJson);
40
+ if (typeof parsed === "string") {
41
+ parsed = JSON.parse(parsed);
42
+ }
43
+ return parsed as T;
44
+ }
45
+
46
+ async function runInteractiveModuleQuery(
47
+ prolog: PrologPort,
48
+ modulePath: string,
49
+ goal: string,
50
+ errorLabel: string,
51
+ ) {
52
+ const loadResult = await prolog.query(`use_module('${modulePath}')`);
53
+ if (!loadResult.success) {
54
+ throw new Error(
55
+ `${errorLabel} module load failed: ${loadResult.error ?? "Unknown error"}`,
56
+ );
57
+ }
58
+ return prolog.query(goal);
59
+ }
60
+
61
+ export function toPrologAtom(value?: string): string {
62
+ return value === undefined || value === ""
63
+ ? "none"
64
+ : `'${escapeAtom(value)}'`;
65
+ }
66
+
67
+ export function toPrologList(values?: readonly string[]): string {
68
+ return values === undefined || values.length === 0
69
+ ? "[]"
70
+ : `[${values.map((value) => `'${escapeAtom(value)}'`).join(",")}]`;
71
+ }
@@ -0,0 +1,106 @@
1
+ import type { OperationEffect } from "./types.js";
2
+
3
+ export type { OperationEffect } from "./types.js";
4
+
5
+ export type PrologQueryResult = {
6
+ readonly success: boolean;
7
+ readonly bindings: Readonly<Record<string, string>>;
8
+ readonly error?: string;
9
+ };
10
+
11
+ // implements REQ-kibi-operation-interface-parity
12
+ export interface PrologPort {
13
+ query(goal: string): Promise<PrologQueryResult>;
14
+ nextSolution(): Promise<PrologQueryResult | null>;
15
+ invalidateCache?(): void;
16
+ save(): Promise<PrologQueryResult>;
17
+ }
18
+
19
+ export type FilesystemStat = {
20
+ readonly isFile: () => boolean;
21
+ readonly isDirectory: () => boolean;
22
+ };
23
+
24
+ export interface FilesystemPort {
25
+ readFile(path: string): Promise<string>;
26
+ writeFile(path: string, data: string): Promise<void>;
27
+ mkdir(path: string): Promise<void>;
28
+ stat(path: string): Promise<FilesystemStat>;
29
+ }
30
+
31
+ export interface GitPort {
32
+ revParse(...args: readonly string[]): Promise<string>;
33
+ showToplevel(): Promise<string>;
34
+ }
35
+
36
+ export interface NetworkPort {
37
+ fetch(input: string | URL, init?: RequestInit): Promise<Response>;
38
+ }
39
+
40
+ export type Clock = () => Date;
41
+
42
+ export type RuntimeOptions = {
43
+ readonly workspaceRoot?: string;
44
+ readonly signal?: AbortSignal;
45
+ readonly clock?: Clock;
46
+ readonly prolog?: PrologPort;
47
+ readonly fs?: FilesystemPort;
48
+ readonly git?: GitPort;
49
+ readonly net?: NetworkPort;
50
+ };
51
+
52
+ export type OperationContext = {
53
+ readonly workspaceRoot: string;
54
+ readonly signal: AbortSignal;
55
+ readonly clock: Clock;
56
+ readonly prolog?: PrologPort;
57
+ readonly fs?: FilesystemPort;
58
+ readonly git?: GitPort;
59
+ readonly net?: NetworkPort;
60
+ };
61
+
62
+ export interface RuntimeOperationSpec<TInput = unknown, TResult = unknown> {
63
+ readonly name: string;
64
+ readonly effects: readonly OperationEffect[];
65
+ readonly requiresProlog: boolean;
66
+ execute(input: TInput, context: OperationContext): Promise<TResult>;
67
+ }
68
+
69
+ export type OperationOutcome =
70
+ | { readonly status: "success"; readonly result: unknown }
71
+ | { readonly status: "error"; readonly error: unknown };
72
+
73
+ // implements REQ-kibi-operation-interface-parity
74
+ export interface OperationRuntime {
75
+ open(
76
+ spec: RuntimeOperationSpec<unknown, unknown>,
77
+ opts?: RuntimeOptions,
78
+ ): Promise<OperationContext>;
79
+ afterSuccess(
80
+ spec: RuntimeOperationSpec<unknown, unknown>,
81
+ context: OperationContext,
82
+ ): Promise<void>;
83
+ close(context: OperationContext, outcome: OperationOutcome): Promise<void>;
84
+ }
85
+
86
+ // implements REQ-kibi-operation-interface-parity
87
+ export async function executeOperation<TInput, TResult>(
88
+ runtime: OperationRuntime,
89
+ spec: RuntimeOperationSpec<TInput, TResult>,
90
+ input: TInput,
91
+ opts?: RuntimeOptions,
92
+ ): Promise<TResult> {
93
+ const context = await runtime.open(spec, opts);
94
+ let result: TResult;
95
+ try {
96
+ result = await spec.execute(input, context);
97
+ if (spec.effects.includes("kb-write")) {
98
+ await runtime.afterSuccess(spec, context);
99
+ }
100
+ } catch (error) {
101
+ await runtime.close(context, { status: "error", error });
102
+ throw error;
103
+ }
104
+ await runtime.close(context, { status: "success", result });
105
+ return result;
106
+ }
@@ -0,0 +1,98 @@
1
+ import { executeAutopilotGenerate } from "../../../operations/autopilot/generate.js";
2
+ import type {
3
+ AutopilotGenerateArgs,
4
+ AutopilotGenerateResult,
5
+ } from "../../../operations/autopilot/types.js";
6
+ import type { OperationSpec } from "../types.js";
7
+
8
+ export type {
9
+ AutopilotBootstrapContext,
10
+ AutopilotGenerateArgs,
11
+ AutopilotGenerateResult,
12
+ } from "../../../operations/autopilot/types.js";
13
+ export { executeAutopilotGenerate } from "../../../operations/autopilot/generate.js";
14
+
15
+ export const autopilotGenerateSpec = {
16
+ name: "kb_autopilot_generate",
17
+ cliName: "autopilot-generate",
18
+ description:
19
+ "Generate agent-centric bootstrap output for KB population. Read-only analysis that returns activation state, bootstrap guidance, candidate entities with evidence, payoff summary, and exact applyPlan payloads for later kb_upsert calls. No mutation side effects.",
20
+ businessInputSchema: {
21
+ type: "object",
22
+ properties: {
23
+ includeGenericMarkdown: {
24
+ type: "boolean",
25
+ default: true,
26
+ description:
27
+ "Whether to include generic markdown file content as candidate facts. Default: true.",
28
+ },
29
+ minConfidence: {
30
+ type: "number",
31
+ default: 0.8,
32
+ minimum: 0.6,
33
+ maximum: 0.95,
34
+ description:
35
+ "Minimum confidence threshold for candidates. Clamped to [0.60, 0.95]. Default: 0.80.",
36
+ },
37
+ maxCandidates: {
38
+ type: "integer",
39
+ default: 50,
40
+ minimum: 1,
41
+ maximum: 200,
42
+ description:
43
+ "Maximum number of candidates to return. Clamped to [1, 200]. Default: 50.",
44
+ },
45
+ entityTypes: {
46
+ type: "array",
47
+ items: {
48
+ type: "string",
49
+ enum: ["req", "scenario", "test", "adr", "fact", "symbol"],
50
+ },
51
+ description:
52
+ "Optional filter to limit candidate generation to specific entity types.",
53
+ },
54
+ bootstrapContext: {
55
+ type: "object",
56
+ description:
57
+ "Optional declared bootstrap context supplied by the agent to ground the read-only synthesis output.",
58
+ properties: {
59
+ projectSummary: {
60
+ type: "string",
61
+ description:
62
+ "Optional short summary of the project or bootstrap goal.",
63
+ },
64
+ sourceOfTruthPaths: {
65
+ type: "array",
66
+ items: { type: "string" },
67
+ description:
68
+ "Optional repo-relative paths that should be treated as declared sources of truth.",
69
+ },
70
+ sourceOfTruthNotes: {
71
+ type: "array",
72
+ items: { type: "string" },
73
+ description:
74
+ "Optional notes about how to interpret the declared sources of truth.",
75
+ },
76
+ priorityRoots: {
77
+ type: "array",
78
+ items: { type: "string" },
79
+ description:
80
+ "Optional repo roots the bootstrap flow should prioritize when authoring entities.",
81
+ },
82
+ verificationAnchors: {
83
+ type: "array",
84
+ items: { type: "string" },
85
+ description:
86
+ "Optional verification commands, documents, or checkpoints to reference in the output.",
87
+ },
88
+ },
89
+ },
90
+ },
91
+ },
92
+ requiresProlog: false,
93
+ effects: ["workspace-read"],
94
+ execute: executeAutopilotGenerate,
95
+ } as const satisfies OperationSpec<
96
+ AutopilotGenerateArgs,
97
+ AutopilotGenerateResult["structuredContent"]
98
+ >;