kibi-cli 0.14.0 → 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 (432) 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 -211
  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 +1 -1
  39. package/dist/commands/check.d.ts.map +1 -1
  40. package/dist/commands/check.js +52 -94
  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 +2 -1
  44. package/dist/commands/discovery-shared.d.ts.map +1 -1
  45. package/dist/commands/discovery-shared.js +6 -18
  46. package/dist/commands/gaps.d.ts.map +1 -1
  47. package/dist/commands/gaps.js +15 -19
  48. package/dist/commands/graph.d.ts.map +1 -1
  49. package/dist/commands/graph.js +15 -21
  50. package/dist/commands/query.d.ts +7 -7
  51. package/dist/commands/query.d.ts.map +1 -1
  52. package/dist/commands/query.js +98 -204
  53. package/dist/commands/search.d.ts +4 -4
  54. package/dist/commands/search.d.ts.map +1 -1
  55. package/dist/commands/search.js +14 -27
  56. package/dist/commands/status.d.ts +1 -1
  57. package/dist/commands/status.d.ts.map +1 -1
  58. package/dist/commands/status.js +6 -7
  59. package/dist/commands/sync/manifest.d.ts +1 -1
  60. package/dist/commands/sync/manifest.d.ts.map +1 -1
  61. package/dist/commands/sync/manifest.js +9 -17
  62. package/dist/commands/sync/persistence.d.ts.map +1 -1
  63. package/dist/commands/sync/persistence.js +22 -1
  64. package/dist/extractors/markdown.d.ts +14 -2
  65. package/dist/extractors/markdown.d.ts.map +1 -1
  66. package/dist/extractors/markdown.js +38 -1
  67. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  68. package/dist/extractors/symbols-ts.js +11 -1
  69. package/dist/operations/autopilot/activation.d.ts +4 -0
  70. package/dist/operations/autopilot/activation.d.ts.map +1 -0
  71. package/dist/operations/autopilot/activation.js +130 -0
  72. package/dist/operations/autopilot/candidate-helpers.d.ts +13 -0
  73. package/dist/operations/autopilot/candidate-helpers.d.ts.map +1 -0
  74. package/dist/operations/autopilot/candidate-helpers.js +55 -0
  75. package/dist/operations/autopilot/candidates.d.ts +4 -0
  76. package/dist/operations/autopilot/candidates.d.ts.map +1 -0
  77. package/dist/operations/autopilot/candidates.js +114 -0
  78. package/dist/operations/autopilot/discovery-evidence.d.ts +10 -0
  79. package/dist/operations/autopilot/discovery-evidence.d.ts.map +1 -0
  80. package/dist/operations/autopilot/discovery-evidence.js +158 -0
  81. package/dist/operations/autopilot/discovery.d.ts +4 -0
  82. package/dist/operations/autopilot/discovery.d.ts.map +1 -0
  83. package/dist/operations/autopilot/discovery.js +100 -0
  84. package/dist/operations/autopilot/generate.d.ts +8 -0
  85. package/dist/operations/autopilot/generate.d.ts.map +1 -0
  86. package/dist/operations/autopilot/generate.js +112 -0
  87. package/dist/operations/autopilot/guidance-actions.d.ts +3 -0
  88. package/dist/operations/autopilot/guidance-actions.d.ts.map +1 -0
  89. package/dist/operations/autopilot/guidance-actions.js +79 -0
  90. package/dist/operations/autopilot/guidance.d.ts +14 -0
  91. package/dist/operations/autopilot/guidance.d.ts.map +1 -0
  92. package/dist/operations/autopilot/guidance.js +124 -0
  93. package/dist/operations/autopilot/markdown-candidates.d.ts +7 -0
  94. package/dist/operations/autopilot/markdown-candidates.d.ts.map +1 -0
  95. package/dist/operations/autopilot/markdown-candidates.js +134 -0
  96. package/dist/operations/autopilot/presentation.d.ts +13 -0
  97. package/dist/operations/autopilot/presentation.d.ts.map +1 -0
  98. package/dist/operations/autopilot/presentation.js +91 -0
  99. package/dist/operations/autopilot/requirement-claims.d.ts +3 -0
  100. package/dist/operations/autopilot/requirement-claims.d.ts.map +1 -0
  101. package/dist/operations/autopilot/requirement-claims.js +48 -0
  102. package/dist/operations/autopilot/types.d.ts +117 -0
  103. package/dist/operations/autopilot/types.d.ts.map +1 -0
  104. package/dist/operations/autopilot/types.js +8 -0
  105. package/dist/operations/modeling/model-requirement.d.ts +10 -0
  106. package/dist/operations/modeling/model-requirement.d.ts.map +1 -0
  107. package/dist/operations/modeling/model-requirement.js +108 -0
  108. package/dist/operations/modeling/predicate-applyplan.d.ts +6 -0
  109. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -0
  110. package/dist/operations/modeling/predicate-applyplan.js +104 -0
  111. package/dist/operations/modeling/predicate-catalog-1.d.ts +3 -0
  112. package/dist/operations/modeling/predicate-catalog-1.d.ts.map +1 -0
  113. package/dist/operations/modeling/predicate-catalog-1.js +200 -0
  114. package/dist/operations/modeling/predicate-catalog-2.d.ts +3 -0
  115. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -0
  116. package/dist/operations/modeling/predicate-catalog-2.js +197 -0
  117. package/dist/operations/modeling/predicate-catalog-3.d.ts +3 -0
  118. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -0
  119. package/dist/operations/modeling/predicate-catalog-3.js +193 -0
  120. package/dist/operations/modeling/predicate-catalog-4.d.ts +3 -0
  121. package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -0
  122. package/dist/operations/modeling/predicate-catalog-4.js +149 -0
  123. package/dist/operations/modeling/predicate-catalog.d.ts +5 -0
  124. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -0
  125. package/dist/operations/modeling/predicate-catalog.js +29 -0
  126. package/dist/operations/modeling/predicate-inference-1.d.ts +16 -0
  127. package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -0
  128. package/dist/operations/modeling/predicate-inference-1.js +161 -0
  129. package/dist/operations/modeling/predicate-inference-2.d.ts +19 -0
  130. package/dist/operations/modeling/predicate-inference-2.d.ts.map +1 -0
  131. package/dist/operations/modeling/predicate-inference-2.js +169 -0
  132. package/dist/operations/modeling/predicate-inference-3.d.ts +15 -0
  133. package/dist/operations/modeling/predicate-inference-3.d.ts.map +1 -0
  134. package/dist/operations/modeling/predicate-inference-3.js +163 -0
  135. package/dist/operations/modeling/predicate-inference.d.ts +5 -0
  136. package/dist/operations/modeling/predicate-inference.d.ts.map +1 -0
  137. package/dist/operations/modeling/predicate-inference.js +148 -0
  138. package/dist/operations/modeling/predicate-loader.d.ts +10 -0
  139. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -0
  140. package/dist/operations/modeling/predicate-loader.js +88 -0
  141. package/dist/operations/modeling/predicate-ranker.d.ts +3 -0
  142. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -0
  143. package/dist/operations/modeling/predicate-ranker.js +24 -0
  144. package/dist/operations/modeling/predicate-score-1.d.ts +3 -0
  145. package/dist/operations/modeling/predicate-score-1.d.ts.map +1 -0
  146. package/dist/operations/modeling/predicate-score-1.js +121 -0
  147. package/dist/operations/modeling/predicate-score-2.d.ts +3 -0
  148. package/dist/operations/modeling/predicate-score-2.d.ts.map +1 -0
  149. package/dist/operations/modeling/predicate-score-2.js +122 -0
  150. package/dist/operations/modeling/predicate-score-3.d.ts +3 -0
  151. package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -0
  152. package/dist/operations/modeling/predicate-score-3.js +54 -0
  153. package/dist/operations/modeling/predicate-types.d.ts +61 -0
  154. package/dist/operations/modeling/predicate-types.d.ts.map +1 -0
  155. package/dist/operations/modeling/predicate-types.js +1 -0
  156. package/dist/operations/modeling/predicate-usage-hints-1.d.ts +3 -0
  157. package/dist/operations/modeling/predicate-usage-hints-1.d.ts.map +1 -0
  158. package/dist/operations/modeling/predicate-usage-hints-1.js +211 -0
  159. package/dist/operations/modeling/predicate-usage-hints-2.d.ts +3 -0
  160. package/dist/operations/modeling/predicate-usage-hints-2.d.ts.map +1 -0
  161. package/dist/operations/modeling/predicate-usage-hints-2.js +209 -0
  162. package/dist/operations/modeling/predicate-usage-hints-3.d.ts +3 -0
  163. package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -0
  164. package/dist/operations/modeling/predicate-usage-hints-3.js +45 -0
  165. package/dist/operations/modeling/predicate-utils.d.ts +23 -0
  166. package/dist/operations/modeling/predicate-utils.d.ts.map +1 -0
  167. package/dist/operations/modeling/predicate-utils.js +187 -0
  168. package/dist/operations/modeling/requirement-applyplan.d.ts +4 -0
  169. package/dist/operations/modeling/requirement-applyplan.d.ts.map +1 -0
  170. package/dist/operations/modeling/requirement-applyplan.js +44 -0
  171. package/dist/operations/modeling/requirement-heuristics.d.ts +4 -0
  172. package/dist/operations/modeling/requirement-heuristics.d.ts.map +1 -0
  173. package/dist/operations/modeling/requirement-heuristics.js +114 -0
  174. package/dist/operations/modeling/requirement-modeler.d.ts +8 -0
  175. package/dist/operations/modeling/requirement-modeler.d.ts.map +1 -0
  176. package/dist/operations/modeling/requirement-modeler.js +70 -0
  177. package/dist/operations/modeling/requirement-types.d.ts +49 -0
  178. package/dist/operations/modeling/requirement-types.d.ts.map +1 -0
  179. package/dist/operations/modeling/requirement-types.js +1 -0
  180. package/dist/operations/modeling/requirement-utils.d.ts +10 -0
  181. package/dist/operations/modeling/requirement-utils.d.ts.map +1 -0
  182. package/dist/operations/modeling/requirement-utils.js +65 -0
  183. package/dist/operations/modeling/suggest-predicates.d.ts +6 -0
  184. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -0
  185. package/dist/operations/modeling/suggest-predicates.js +64 -0
  186. package/dist/operations/mutation/audit.d.ts +6 -0
  187. package/dist/operations/mutation/audit.d.ts.map +1 -0
  188. package/dist/operations/mutation/audit.js +22 -0
  189. package/dist/operations/mutation/contradictions.d.ts +10 -0
  190. package/dist/operations/mutation/contradictions.d.ts.map +1 -0
  191. package/dist/operations/mutation/contradictions.js +40 -0
  192. package/dist/operations/mutation/delete.d.ts +5 -0
  193. package/dist/operations/mutation/delete.d.ts.map +1 -0
  194. package/dist/operations/mutation/delete.js +67 -0
  195. package/dist/operations/mutation/relationships.d.ts +17 -0
  196. package/dist/operations/mutation/relationships.d.ts.map +1 -0
  197. package/dist/operations/mutation/relationships.js +134 -0
  198. package/dist/operations/mutation/save.d.ts +4 -0
  199. package/dist/operations/mutation/save.d.ts.map +1 -0
  200. package/dist/operations/mutation/save.js +14 -0
  201. package/dist/operations/mutation/serialization.d.ts +5 -0
  202. package/dist/operations/mutation/serialization.d.ts.map +1 -0
  203. package/dist/operations/mutation/serialization.js +85 -0
  204. package/dist/operations/mutation/strict-fact.d.ts +4 -0
  205. package/dist/operations/mutation/strict-fact.d.ts.map +1 -0
  206. package/dist/operations/mutation/strict-fact.js +67 -0
  207. package/dist/operations/mutation/symbol-granularity.d.ts +4 -0
  208. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -0
  209. package/dist/operations/mutation/symbol-granularity.js +109 -0
  210. package/dist/operations/mutation/symbol-refresh.d.ts +10 -0
  211. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -0
  212. package/dist/operations/mutation/symbol-refresh.js +105 -0
  213. package/dist/operations/mutation/types.d.ts +43 -0
  214. package/dist/operations/mutation/types.d.ts.map +1 -0
  215. package/dist/operations/mutation/types.js +1 -0
  216. package/dist/operations/mutation/upsert.d.ts +5 -0
  217. package/dist/operations/mutation/upsert.d.ts.map +1 -0
  218. package/dist/operations/mutation/upsert.js +103 -0
  219. package/dist/operations/mutation/validate-upsert.d.ts +5 -0
  220. package/dist/operations/mutation/validate-upsert.d.ts.map +1 -0
  221. package/dist/operations/mutation/validate-upsert.js +50 -0
  222. package/dist/operations/mutation/validation.d.ts +5 -0
  223. package/dist/operations/mutation/validation.d.ts.map +1 -0
  224. package/dist/operations/mutation/validation.js +107 -0
  225. package/dist/operations/mutation/warnings.d.ts +4 -0
  226. package/dist/operations/mutation/warnings.d.ts.map +1 -0
  227. package/dist/operations/mutation/warnings.js +17 -0
  228. package/dist/operations/semantic-advisor/analysis-receipt.d.ts +5 -0
  229. package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -0
  230. package/dist/operations/semantic-advisor/analysis-receipt.js +112 -0
  231. package/dist/operations/semantic-advisor/analyze-prose.d.ts +5 -0
  232. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -0
  233. package/dist/operations/semantic-advisor/analyze-prose.js +271 -0
  234. package/dist/operations/semantic-advisor/clauses.d.ts +10 -0
  235. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -0
  236. package/dist/operations/semantic-advisor/clauses.js +43 -0
  237. package/dist/operations/semantic-advisor/observation-plan.d.ts +3 -0
  238. package/dist/operations/semantic-advisor/observation-plan.d.ts.map +1 -0
  239. package/dist/operations/semantic-advisor/observation-plan.js +19 -0
  240. package/dist/operations/semantic-advisor/predicate-rule.d.ts +14 -0
  241. package/dist/operations/semantic-advisor/predicate-rule.d.ts.map +1 -0
  242. package/dist/operations/semantic-advisor/predicate-rule.js +22 -0
  243. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +79 -0
  244. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -0
  245. package/dist/operations/semantic-advisor/predicate-rules-core.js +140 -0
  246. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +83 -0
  247. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -0
  248. package/dist/operations/semantic-advisor/predicate-rules-policy.js +150 -0
  249. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +48 -0
  250. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -0
  251. package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +102 -0
  252. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +71 -0
  253. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -0
  254. package/dist/operations/semantic-advisor/predicate-rules-product.js +133 -0
  255. package/dist/operations/semantic-advisor/prose-coverage-evaluator.d.ts +29 -0
  256. package/dist/operations/semantic-advisor/prose-coverage-evaluator.d.ts.map +1 -0
  257. package/dist/operations/semantic-advisor/prose-coverage-evaluator.js +54 -0
  258. package/dist/operations/semantic-advisor/shared.d.ts +18 -0
  259. package/dist/operations/semantic-advisor/shared.d.ts.map +1 -0
  260. package/dist/operations/semantic-advisor/shared.js +209 -0
  261. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +4 -0
  262. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -0
  263. package/dist/operations/semantic-advisor/strict-count-rules.js +62 -0
  264. package/dist/operations/semantic-advisor/strict-rules.d.ts +4 -0
  265. package/dist/operations/semantic-advisor/strict-rules.d.ts.map +1 -0
  266. package/dist/operations/semantic-advisor/strict-rules.js +106 -0
  267. package/dist/operations/semantic-advisor/types.d.ts +135 -0
  268. package/dist/operations/semantic-advisor/types.d.ts.map +1 -0
  269. package/dist/operations/semantic-advisor/types.js +1 -0
  270. package/dist/prolog/codec.d.ts.map +1 -1
  271. package/dist/prolog/codec.js +9 -2
  272. package/dist/prolog.d.ts +5 -0
  273. package/dist/prolog.d.ts.map +1 -1
  274. package/dist/prolog.js +82 -30
  275. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  276. package/dist/public/impact/diagnostics.js +8 -4
  277. package/dist/public/impact/full-kb-quality.d.ts +1 -1
  278. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  279. package/dist/public/impact/full-kb-quality.js +34 -1
  280. package/dist/public/impact/requirement-quality.d.ts.map +1 -1
  281. package/dist/public/impact/requirement-quality.js +6 -23
  282. package/dist/public/operations/catalog.d.ts +907 -0
  283. package/dist/public/operations/catalog.d.ts.map +1 -0
  284. package/dist/public/operations/catalog.js +42 -0
  285. package/dist/public/operations/check-executor.d.ts +21 -0
  286. package/dist/public/operations/check-executor.d.ts.map +1 -0
  287. package/dist/public/operations/check-executor.js +111 -0
  288. package/dist/public/operations/check-format-shared.d.ts +36 -0
  289. package/dist/public/operations/check-format-shared.d.ts.map +1 -0
  290. package/dist/public/operations/check-format-shared.js +107 -0
  291. package/dist/public/operations/check-helpers.d.ts +10 -0
  292. package/dist/public/operations/check-helpers.d.ts.map +1 -0
  293. package/dist/public/operations/check-helpers.js +107 -0
  294. package/dist/public/operations/discovery-entities.d.ts +14 -0
  295. package/dist/public/operations/discovery-entities.d.ts.map +1 -0
  296. package/dist/public/operations/discovery-entities.js +91 -0
  297. package/dist/public/operations/discovery-executors.d.ts +39 -0
  298. package/dist/public/operations/discovery-executors.d.ts.map +1 -0
  299. package/dist/public/operations/discovery-executors.js +101 -0
  300. package/dist/public/operations/index.d.ts +20 -0
  301. package/dist/public/operations/index.d.ts.map +1 -0
  302. package/dist/public/operations/index.js +18 -0
  303. package/dist/public/operations/node-ports.d.ts +15 -0
  304. package/dist/public/operations/node-ports.d.ts.map +1 -0
  305. package/dist/public/operations/node-ports.js +57 -0
  306. package/dist/public/operations/prolog-json.d.ts +5 -0
  307. package/dist/public/operations/prolog-json.d.ts.map +1 -0
  308. package/dist/public/operations/prolog-json.js +44 -0
  309. package/dist/public/operations/runtime-types.d.ts +69 -0
  310. package/dist/public/operations/runtime-types.d.ts.map +1 -0
  311. package/dist/public/operations/runtime-types.js +17 -0
  312. package/dist/public/operations/specs/autopilot.d.ts +82 -0
  313. package/dist/public/operations/specs/autopilot.d.ts.map +1 -0
  314. package/dist/public/operations/specs/autopilot.js +72 -0
  315. package/dist/public/operations/specs/check.d.ts +51 -0
  316. package/dist/public/operations/specs/check.d.ts.map +1 -0
  317. package/dist/public/operations/specs/check.js +62 -0
  318. package/dist/public/operations/specs/discovery.d.ts +94 -0
  319. package/dist/public/operations/specs/discovery.d.ts.map +1 -0
  320. package/dist/public/operations/specs/discovery.js +98 -0
  321. package/dist/public/operations/specs/modeling.d.ts +126 -0
  322. package/dist/public/operations/specs/modeling.d.ts.map +1 -0
  323. package/dist/public/operations/specs/modeling.js +117 -0
  324. package/dist/public/operations/specs/mutation-schemas.d.ts +233 -0
  325. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -0
  326. package/dist/public/operations/specs/mutation-schemas.js +267 -0
  327. package/dist/public/operations/specs/mutation.d.ts +56 -0
  328. package/dist/public/operations/specs/mutation.d.ts.map +1 -0
  329. package/dist/public/operations/specs/mutation.js +44 -0
  330. package/dist/public/operations/specs/reporting.d.ts +185 -0
  331. package/dist/public/operations/specs/reporting.d.ts.map +1 -0
  332. package/dist/public/operations/specs/reporting.js +158 -0
  333. package/dist/public/operations/specs/semantic.d.ts +53 -0
  334. package/dist/public/operations/specs/semantic.d.ts.map +1 -0
  335. package/dist/public/operations/specs/semantic.js +105 -0
  336. package/dist/public/operations/specs/skills.d.ts +70 -0
  337. package/dist/public/operations/specs/skills.d.ts.map +1 -0
  338. package/dist/public/operations/specs/skills.js +107 -0
  339. package/dist/public/operations/specs/sparql.d.ts +39 -0
  340. package/dist/public/operations/specs/sparql.d.ts.map +1 -0
  341. package/dist/public/operations/specs/sparql.js +121 -0
  342. package/dist/public/operations/specs/upsert.d.ts +256 -0
  343. package/dist/public/operations/specs/upsert.d.ts.map +1 -0
  344. package/dist/public/operations/specs/upsert.js +27 -0
  345. package/dist/public/operations/types.d.ts +24 -0
  346. package/dist/public/operations/types.d.ts.map +1 -0
  347. package/dist/public/operations/types.js +1 -0
  348. package/dist/public/schemas/entity.d.ts.map +1 -1
  349. package/dist/public/schemas/entity.js +27 -0
  350. package/dist/public/skill-system/errors.d.ts +19 -0
  351. package/dist/public/skill-system/errors.d.ts.map +1 -0
  352. package/dist/public/skill-system/errors.js +36 -0
  353. package/dist/public/skill-system/loader.d.ts +9 -0
  354. package/dist/public/skill-system/loader.d.ts.map +1 -0
  355. package/dist/public/skill-system/loader.js +76 -0
  356. package/dist/public/skill-system/paths.d.ts +6 -0
  357. package/dist/public/skill-system/paths.d.ts.map +1 -0
  358. package/dist/public/skill-system/paths.js +25 -0
  359. package/dist/public/skill-system/types.d.ts +15 -0
  360. package/dist/public/skill-system/types.d.ts.map +1 -0
  361. package/dist/public/skill-system/types.js +1 -0
  362. package/dist/public/skill-system/validation.d.ts +10 -0
  363. package/dist/public/skill-system/validation.d.ts.map +1 -0
  364. package/dist/public/skill-system/validation.js +119 -0
  365. package/dist/public/skills/init-kibi/SKILL.md +62 -0
  366. package/dist/public/skills/kibi-freshness/SKILL.md +44 -0
  367. package/dist/public/skills/kibi-traceability/SKILL.md +54 -0
  368. package/dist/public/skills/kibi-usage/SKILL.md +119 -99
  369. package/dist/public/skills/kibi-usage/resources/fact-lanes.md +102 -0
  370. package/dist/public/skills/kibi-usage/resources/operation-access.md +44 -0
  371. package/dist/public/skills/kibi-usage/resources/workflows.md +26 -3
  372. package/dist/public/skills.d.ts +4 -41
  373. package/dist/public/skills.d.ts.map +1 -1
  374. package/dist/public/skills.js +3 -270
  375. package/dist/runtime/cli-runtime.d.ts +3 -0
  376. package/dist/runtime/cli-runtime.d.ts.map +1 -0
  377. package/dist/runtime/cli-runtime.js +96 -0
  378. package/dist/schemas/entity.schema.json +23 -0
  379. package/dist/traceability/staged-diagnostics.d.ts +1 -1
  380. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  381. package/dist/traceability/staged-symbols-manifest.d.ts +1 -0
  382. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  383. package/dist/traceability/staged-symbols-manifest.js +38 -27
  384. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  385. package/dist/traceability/symbol-extract.js +17 -1
  386. package/dist/traceability/temp-kb.d.ts.map +1 -1
  387. package/dist/traceability/temp-kb.js +34 -1
  388. package/dist/types/entities.d.ts +3 -0
  389. package/dist/types/entities.d.ts.map +1 -1
  390. package/dist/utils/rule-registry.d.ts.map +1 -1
  391. package/dist/utils/rule-registry.js +6 -0
  392. package/package.json +56 -2
  393. package/src/public/impact/diagnostics.ts +18 -11
  394. package/src/public/impact/full-kb-quality.ts +30 -3
  395. package/src/public/impact/requirement-quality.ts +6 -26
  396. package/src/public/operations/catalog.ts +60 -0
  397. package/src/public/operations/check-executor.ts +185 -0
  398. package/src/public/operations/check-format-shared.ts +178 -0
  399. package/src/public/operations/check-helpers.ts +141 -0
  400. package/src/public/operations/discovery-entities.ts +122 -0
  401. package/src/public/operations/discovery-executors.ts +176 -0
  402. package/src/public/operations/index.ts +19 -0
  403. package/src/public/operations/node-ports.ts +78 -0
  404. package/src/public/operations/prolog-json.ts +71 -0
  405. package/src/public/operations/runtime-types.ts +106 -0
  406. package/src/public/operations/specs/autopilot.ts +98 -0
  407. package/src/public/operations/specs/check.ts +72 -0
  408. package/src/public/operations/specs/discovery.ts +126 -0
  409. package/src/public/operations/specs/modeling.ts +154 -0
  410. package/src/public/operations/specs/mutation-schemas.ts +296 -0
  411. package/src/public/operations/specs/mutation.ts +58 -0
  412. package/src/public/operations/specs/reporting.ts +249 -0
  413. package/src/public/operations/specs/semantic.ts +135 -0
  414. package/src/public/operations/specs/skills.ts +142 -0
  415. package/src/public/operations/specs/sparql.ts +149 -0
  416. package/src/public/operations/specs/upsert.ts +40 -0
  417. package/src/public/operations/types.ts +57 -0
  418. package/src/public/schemas/entity.ts +27 -0
  419. package/src/public/skill-system/errors.ts +38 -0
  420. package/src/public/skill-system/loader.ts +108 -0
  421. package/src/public/skill-system/paths.ts +27 -0
  422. package/src/public/skill-system/types.ts +14 -0
  423. package/src/public/skill-system/validation.ts +175 -0
  424. package/src/public/skills/init-kibi/SKILL.md +62 -0
  425. package/src/public/skills/kibi-freshness/SKILL.md +44 -0
  426. package/src/public/skills/kibi-traceability/SKILL.md +54 -0
  427. package/src/public/skills/kibi-usage/SKILL.md +119 -99
  428. package/src/public/skills/kibi-usage/resources/fact-lanes.md +102 -0
  429. package/src/public/skills/kibi-usage/resources/operation-access.md +44 -0
  430. package/src/public/skills/kibi-usage/resources/workflows.md +26 -3
  431. package/src/public/skills.ts +18 -427
  432. package/src/schemas/entity.schema.json +23 -0
@@ -0,0 +1,249 @@
1
+ import {
2
+ runOperationJsonQuery,
3
+ toPrologAtom,
4
+ toPrologList,
5
+ } from "../prolog-json.js";
6
+ import type { OperationContext } from "../runtime-types.js";
7
+ import type { OperationResult, OperationSpec } from "../types.js";
8
+
9
+ const ENTITY_TYPES = [
10
+ "req",
11
+ "scenario",
12
+ "test",
13
+ "adr",
14
+ "flag",
15
+ "event",
16
+ "symbol",
17
+ "fact",
18
+ ] as const;
19
+ const ENTITY_TYPE_SET: ReadonlySet<string> = new Set(ENTITY_TYPES);
20
+
21
+ export type FindGapsInput = {
22
+ readonly type?: string;
23
+ readonly missingRelationships?: readonly string[];
24
+ readonly presentRelationships?: readonly string[];
25
+ readonly tags?: readonly string[];
26
+ readonly sourceFile?: string;
27
+ readonly limit?: number;
28
+ readonly offset?: number;
29
+ };
30
+
31
+ export type FindGapsPayload = {
32
+ readonly rows: readonly Readonly<Record<string, unknown>>[];
33
+ readonly count: number;
34
+ readonly meta?: Readonly<Record<string, unknown>>;
35
+ };
36
+
37
+ export type CoverageInput = {
38
+ readonly by?: "req" | "symbol" | "type";
39
+ readonly tags?: readonly string[];
40
+ readonly includePassing?: boolean;
41
+ readonly includeTransitive?: boolean;
42
+ readonly limit?: number;
43
+ readonly offset?: number;
44
+ };
45
+
46
+ export type CoveragePayload = {
47
+ readonly summary: Readonly<Record<string, number>>;
48
+ readonly rows: readonly Readonly<Record<string, unknown>>[];
49
+ readonly meta?: Readonly<Record<string, unknown>>;
50
+ };
51
+
52
+ export type GraphInput = {
53
+ readonly seedIds: readonly string[];
54
+ readonly relationships?: readonly string[];
55
+ readonly direction?: "outgoing" | "incoming" | "both";
56
+ readonly depth?: number;
57
+ readonly entityTypes?: readonly string[];
58
+ readonly maxNodes?: number;
59
+ readonly maxEdges?: number;
60
+ };
61
+
62
+ export type GraphPayload = {
63
+ readonly nodes: readonly Readonly<Record<string, unknown>>[];
64
+ readonly edges: readonly Readonly<Record<string, unknown>>[];
65
+ readonly truncated: boolean;
66
+ readonly meta?: Readonly<Record<string, unknown>>;
67
+ };
68
+
69
+ function requireProlog(context: OperationContext) {
70
+ if (context.prolog === undefined) {
71
+ throw new Error("Reporting operation requires a Prolog runtime");
72
+ }
73
+ return context.prolog;
74
+ }
75
+
76
+ function validateEntityType(type?: string): void {
77
+ if (type !== undefined && !ENTITY_TYPE_SET.has(type)) {
78
+ throw new Error(
79
+ `Invalid type '${type}'. Valid types: ${ENTITY_TYPES.join(", ")}. Use a single type value, or omit this parameter to query all entities.`,
80
+ );
81
+ }
82
+ }
83
+
84
+ export async function executeFindGaps(
85
+ input: FindGapsInput,
86
+ context: OperationContext,
87
+ ): Promise<OperationResult<FindGapsPayload>> {
88
+ validateEntityType(input.type);
89
+ try {
90
+ const payload = await runOperationJsonQuery<FindGapsPayload>(
91
+ requireProlog(context),
92
+ "discovery.pl",
93
+ `discovery:find_gaps_json(${toPrologAtom(input.type)}, ${toPrologList(input.missingRelationships)}, ${toPrologList(input.presentRelationships)}, ${toPrologList(input.tags)}, ${toPrologAtom(input.sourceFile)}, ${input.limit ?? 100}, ${input.offset ?? 0}, JsonString)`,
94
+ "Find-gaps execution",
95
+ );
96
+ const rows = payload.rows ?? [];
97
+ return {
98
+ content: [
99
+ {
100
+ type: "text",
101
+ text:
102
+ rows.length === 0
103
+ ? "No matching gaps found."
104
+ : `Found ${payload.count ?? rows.length} gap rows. Showing ${rows.length}: ${rows.map((row) => row.id).join(", ")}`,
105
+ },
106
+ ],
107
+ structuredContent: payload,
108
+ };
109
+ } catch (error) {
110
+ const message = error instanceof Error ? error.message : String(error);
111
+ throw new Error(`Find-gaps execution failed: ${message}`);
112
+ }
113
+ }
114
+
115
+ export const findGapsSpec = {
116
+ name: "kb_find_gaps",
117
+ cliName: "find-gaps",
118
+ description:
119
+ "Run bulk missing/present relationship analysis over KB entities. Use for questions like which requirements lack scenarios or tests. No mutation side effects.",
120
+ businessInputSchema: {
121
+ type: "object",
122
+ properties: {
123
+ type: {
124
+ type: "string",
125
+ enum: ENTITY_TYPES,
126
+ },
127
+ missingRelationships: { type: "array", items: { type: "string" } },
128
+ presentRelationships: { type: "array", items: { type: "string" } },
129
+ tags: { type: "array", items: { type: "string" } },
130
+ sourceFile: { type: "string" },
131
+ limit: { type: "integer", default: 100 },
132
+ offset: { type: "integer", default: 0 },
133
+ },
134
+ },
135
+ requiresProlog: true,
136
+ effects: ["kb-read"],
137
+ execute: executeFindGaps,
138
+ } as const satisfies OperationSpec<FindGapsInput, FindGapsPayload>;
139
+
140
+ export async function executeCoverage(
141
+ input: CoverageInput,
142
+ context: OperationContext,
143
+ ): Promise<OperationResult<CoveragePayload>> {
144
+ try {
145
+ const payload = await runOperationJsonQuery<CoveragePayload>(
146
+ requireProlog(context),
147
+ "discovery.pl",
148
+ `discovery:coverage_report_json('${input.by ?? "req"}', ${toPrologList(input.tags)}, ${input.includePassing ?? false}, ${input.includeTransitive ?? true}, ${input.limit ?? 100}, ${input.offset ?? 0}, JsonString)`,
149
+ "Coverage execution",
150
+ );
151
+ const fullyCovered = Number(payload.summary?.fullyCovered ?? 0);
152
+ const total = Number(payload.summary?.total ?? 0);
153
+ return {
154
+ content: [
155
+ {
156
+ type: "text",
157
+ text: `Coverage summary: ${fullyCovered} fully covered out of ${total}.`,
158
+ },
159
+ ],
160
+ structuredContent: payload,
161
+ };
162
+ } catch (error) {
163
+ const message = error instanceof Error ? error.message : String(error);
164
+ throw new Error(`Coverage execution failed: ${message}`);
165
+ }
166
+ }
167
+
168
+ export const coverageSpec = {
169
+ name: "kb_coverage",
170
+ cliName: "coverage",
171
+ description:
172
+ "Generate curated coverage reports for requirements, symbols, or grouped types. Read-only reporting with no mutation side effects.",
173
+ businessInputSchema: {
174
+ type: "object",
175
+ properties: {
176
+ by: { type: "string", enum: ["req", "symbol", "type"], default: "req" },
177
+ tags: { type: "array", items: { type: "string" } },
178
+ includePassing: { type: "boolean", default: false },
179
+ includeTransitive: { type: "boolean", default: true },
180
+ limit: { type: "integer", default: 100 },
181
+ offset: { type: "integer", default: 0 },
182
+ },
183
+ },
184
+ requiresProlog: true,
185
+ effects: ["kb-read"],
186
+ execute: executeCoverage,
187
+ } as const satisfies OperationSpec<CoverageInput, CoveragePayload>;
188
+
189
+ export async function executeGraph(
190
+ input: GraphInput,
191
+ context: OperationContext,
192
+ ): Promise<OperationResult<GraphPayload>> {
193
+ const depth = input.depth ?? 1;
194
+ if (depth < 1 || depth > 5) {
195
+ throw new RangeError("Graph depth must be between 1 and 5");
196
+ }
197
+ try {
198
+ const payload = await runOperationJsonQuery<GraphPayload>(
199
+ requireProlog(context),
200
+ "discovery.pl",
201
+ `discovery:graph_expand_json(${toPrologList(input.seedIds)}, ${toPrologList(input.relationships)}, '${input.direction ?? "outgoing"}', ${depth}, ${toPrologList(input.entityTypes)}, ${input.maxNodes ?? 200}, ${input.maxEdges ?? 500}, JsonString)`,
202
+ "Graph execution",
203
+ );
204
+ const nodes = payload.nodes ?? [];
205
+ const edges = payload.edges ?? [];
206
+ return {
207
+ content: [
208
+ {
209
+ type: "text",
210
+ text:
211
+ nodes.length === 0
212
+ ? "Graph traversal returned no nodes."
213
+ : `Graph traversal returned ${nodes.length} nodes and ${edges.length} edges from ${input.seedIds.join(", ")}.`,
214
+ },
215
+ ],
216
+ structuredContent: payload,
217
+ };
218
+ } catch (error) {
219
+ const message = error instanceof Error ? error.message : String(error);
220
+ throw new Error(`Graph execution failed: ${message}`);
221
+ }
222
+ }
223
+
224
+ export const graphSpec = {
225
+ name: "kb_graph",
226
+ cliName: "graph",
227
+ description:
228
+ "Run bounded graph traversal from one or more seed IDs across curated relationship types. No mutation side effects.",
229
+ businessInputSchema: {
230
+ type: "object",
231
+ required: ["seedIds"],
232
+ properties: {
233
+ seedIds: { type: "array", items: { type: "string" } },
234
+ relationships: { type: "array", items: { type: "string" } },
235
+ direction: {
236
+ type: "string",
237
+ enum: ["outgoing", "incoming", "both"],
238
+ default: "outgoing",
239
+ },
240
+ depth: { type: "integer", default: 1, minimum: 1, maximum: 5 },
241
+ entityTypes: { type: "array", items: { type: "string" } },
242
+ maxNodes: { type: "integer", default: 200 },
243
+ maxEdges: { type: "integer", default: 500 },
244
+ },
245
+ },
246
+ requiresProlog: true,
247
+ effects: ["kb-read"],
248
+ execute: executeGraph,
249
+ } as const satisfies OperationSpec<GraphInput, GraphPayload>;
@@ -0,0 +1,135 @@
1
+ import { InputError } from "../../../cli-errors.js";
2
+ import { analyzeSemanticAdvisorInput } from "../../../operations/semantic-advisor/analyze-prose.js";
3
+ import type {
4
+ SemanticAdvisorArgs,
5
+ SemanticAdvisorOperationResult,
6
+ } from "../../../operations/semantic-advisor/types.js";
7
+ import type { OperationContext } from "../runtime-types.js";
8
+ import type { OperationSpec } from "../types.js";
9
+
10
+ function requiredText(value: unknown): string {
11
+ const text = typeof value === "string" ? value.trim() : "";
12
+ if (!text) {
13
+ throw new InputError(
14
+ "VALIDATION_FAILED",
15
+ "Semantic advisor failed: text must be a non-empty string",
16
+ );
17
+ }
18
+ return text;
19
+ }
20
+
21
+ function optionalString(value: unknown): string | undefined {
22
+ const text = typeof value === "string" ? value.trim() : "";
23
+ return text || undefined;
24
+ }
25
+
26
+ export async function executeSemanticAdvisor(
27
+ args: SemanticAdvisorArgs,
28
+ _context?: OperationContext,
29
+ ): Promise<SemanticAdvisorOperationResult> {
30
+ const text = requiredText(args.text);
31
+ const id = optionalString(args.id) ?? "REQ-SEMANTIC-ADVISOR-PREVIEW";
32
+ const title = optionalString(args.title) ?? text.split(/[.!?]/, 1)[0] ?? text;
33
+ const source = optionalString(args.source) ?? "mcp://kibi/semantic-advisor";
34
+ const result = analyzeSemanticAdvisorInput({
35
+ payload: {
36
+ type: optionalString(args.type) ?? "req",
37
+ id,
38
+ properties: {
39
+ title,
40
+ status: optionalString(args.status) ?? "open",
41
+ source,
42
+ text_ref: text,
43
+ },
44
+ },
45
+ ...(args.clauses !== undefined ? { clauses: args.clauses } : {}),
46
+ });
47
+ return {
48
+ content: [
49
+ {
50
+ type: "text",
51
+ text: `kb_semantic_advisor: ${result.receipt.summary} Suggestions: ${result.receipt.suggestions.map(({ kind }) => kind).join(", ") || "none"}.`,
52
+ },
53
+ ],
54
+ structuredContent: { receipt: result.receipt, warnings: result.warnings },
55
+ };
56
+ }
57
+
58
+ async function executeSemanticAdvisorInput(
59
+ input: Readonly<Record<string, unknown>>,
60
+ context: OperationContext,
61
+ ): Promise<SemanticAdvisorOperationResult> {
62
+ const type = optionalString(input.type);
63
+ const id = optionalString(input.id);
64
+ const title = optionalString(input.title);
65
+ const source = optionalString(input.source);
66
+ const status = optionalString(input.status);
67
+ const clauses = Array.isArray(input.clauses)
68
+ ? input.clauses.filter(
69
+ (value): value is string => typeof value === "string",
70
+ )
71
+ : undefined;
72
+ return executeSemanticAdvisor(
73
+ {
74
+ text: requiredText(input.text),
75
+ ...(type ? { type } : {}),
76
+ ...(id ? { id } : {}),
77
+ ...(title ? { title } : {}),
78
+ ...(source ? { source } : {}),
79
+ ...(status ? { status } : {}),
80
+ ...(clauses !== undefined ? { clauses } : {}),
81
+ },
82
+ context,
83
+ );
84
+ }
85
+
86
+ export const semanticAdvisorSpec = {
87
+ name: "kb_semantic_advisor",
88
+ cliName: "semantic-advisor",
89
+ description:
90
+ "Analyze requirement prose without mutating the KB and return semantic advisor receipts with modeling suggestions. Use before constructing kb_upsert payloads when prose may contain machine-checkable logic. Suggestions can include strict-property facts, predicate facts, ambiguity observations, or ontology-gap observations; all suggestions are advisory and reviewable.",
91
+ businessInputSchema: {
92
+ type: "object",
93
+ required: ["text"],
94
+ properties: {
95
+ text: {
96
+ type: "string",
97
+ description:
98
+ "Requirement prose to inspect for machine-checkable modeling suggestions.",
99
+ },
100
+ clauses: {
101
+ type: "array",
102
+ items: { type: "string" },
103
+ description:
104
+ "Optional complete list of atomic requirement clauses supplied by the caller. Use this for compound prose so every normative clause receives a stable claim key and independent grounding review.",
105
+ },
106
+ type: {
107
+ type: "string",
108
+ enum: ["req"],
109
+ default: "req",
110
+ description:
111
+ "Entity type context for analysis. Currently requirement prose is supported.",
112
+ },
113
+ id: {
114
+ type: "string",
115
+ description:
116
+ "Optional requirement ID used for deterministic draft relationship guidance.",
117
+ },
118
+ title: {
119
+ type: "string",
120
+ description: "Optional requirement title for draft apply plans.",
121
+ },
122
+ source: {
123
+ type: "string",
124
+ description: "Optional provenance for draft suggestions.",
125
+ },
126
+ status: {
127
+ type: "string",
128
+ description: "Optional requirement status for draft suggestions.",
129
+ },
130
+ },
131
+ },
132
+ requiresProlog: false,
133
+ effects: ["local-read"],
134
+ execute: executeSemanticAdvisorInput,
135
+ } as const satisfies OperationSpec;
@@ -0,0 +1,142 @@
1
+ import { createHash } from "node:crypto";
2
+ import {
3
+ type SkillManifest,
4
+ listBundledSkills,
5
+ loadBundledSkill,
6
+ readBundledSkillResource,
7
+ } from "../../skills.js";
8
+ import type { OperationContext } from "../runtime-types.js";
9
+ import type { OperationResult, OperationSpec } from "../types.js";
10
+
11
+ function assertNonEmptyString(value: string, field: string): void {
12
+ if (typeof value !== "string" || value.trim() === "") {
13
+ throw new Error(`${field} must be a non-empty string`);
14
+ }
15
+ }
16
+
17
+ async function executeSkillsList(
18
+ _input: Readonly<Record<string, unknown>>,
19
+ _context: OperationContext,
20
+ ): Promise<OperationResult<{ readonly skills: readonly SkillManifest[] }>> {
21
+ const skills = listBundledSkills();
22
+ const ids = skills.map((skill) => skill.id).join(", ") || "none";
23
+ return {
24
+ content: [
25
+ { type: "text", text: `Found ${skills.length} bundled skills: ${ids}` },
26
+ ],
27
+ structuredContent: { skills },
28
+ };
29
+ }
30
+
31
+ async function executeSkillsLoad(
32
+ input: Readonly<Record<string, unknown>>,
33
+ _context: OperationContext,
34
+ ): Promise<
35
+ OperationResult<{
36
+ readonly metadata: SkillManifest;
37
+ readonly body: string;
38
+ readonly resources: readonly string[];
39
+ readonly contentHash: string;
40
+ readonly sourceType: "bundled";
41
+ }>
42
+ > {
43
+ const id = typeof input.id === "string" ? input.id : "";
44
+ assertNonEmptyString(id, "id");
45
+ const bundle = loadBundledSkill(id);
46
+ const resources = bundle.manifest.resources ?? [];
47
+ const contentHash = createHash("sha256")
48
+ .update(bundle.body, "utf8")
49
+ .digest("hex");
50
+ const resourceList = resources.length === 0 ? "none" : resources.join(", ");
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: `Loaded bundled skill ${bundle.manifest.id} with ${resources.length} resources: ${resourceList}`,
56
+ },
57
+ ],
58
+ structuredContent: {
59
+ metadata: bundle.manifest,
60
+ body: bundle.body,
61
+ resources,
62
+ contentHash,
63
+ sourceType: "bundled",
64
+ },
65
+ };
66
+ }
67
+
68
+ async function executeSkillsRead(
69
+ input: Readonly<Record<string, unknown>>,
70
+ _context: OperationContext,
71
+ ): Promise<OperationResult<{ readonly content: string }>> {
72
+ const id = typeof input.id === "string" ? input.id : "";
73
+ const resource = typeof input.resource === "string" ? input.resource : "";
74
+ assertNonEmptyString(id, "id");
75
+ assertNonEmptyString(resource, "resource");
76
+ const resourceContent = readBundledSkillResource(id, resource);
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: `Read bundled skill resource ${id}/${resource}`,
82
+ },
83
+ ],
84
+ structuredContent: { content: resourceContent },
85
+ };
86
+ }
87
+
88
+ export const skillsListSpec = {
89
+ name: "kb_skills_list",
90
+ cliName: "skills list",
91
+ description:
92
+ "List bundled Kibi agent skills available for progressive disclosure. Read-only; does not mutate the KB or require Prolog.",
93
+ businessInputSchema: { type: "object", properties: {} },
94
+ requiresProlog: false,
95
+ effects: ["local-read"],
96
+ execute: executeSkillsList,
97
+ } as const satisfies OperationSpec;
98
+
99
+ export const skillsLoadSpec = {
100
+ name: "kb_skills_load",
101
+ cliName: "skills load",
102
+ description:
103
+ "Load a bundled Kibi agent skill by ID, returning its manifest metadata, Markdown body, declared resources, content hash, and source type. Read-only; does not execute scripts or require Prolog.",
104
+ businessInputSchema: {
105
+ type: "object",
106
+ required: ["id"],
107
+ properties: {
108
+ id: {
109
+ type: "string",
110
+ description: "Bundled skill ID to load. Example: 'kibi-usage'.",
111
+ },
112
+ },
113
+ },
114
+ requiresProlog: false,
115
+ effects: ["local-read"],
116
+ execute: executeSkillsLoad,
117
+ } as const satisfies OperationSpec;
118
+
119
+ export const skillsReadSpec = {
120
+ name: "kb_skills_read",
121
+ cliName: "skills read",
122
+ description:
123
+ "Read a declared resource from a bundled Kibi agent skill. Resource paths are restricted to the skill manifest; arbitrary file paths are not exposed. Read-only; does not require Prolog.",
124
+ businessInputSchema: {
125
+ type: "object",
126
+ required: ["id", "resource"],
127
+ properties: {
128
+ id: {
129
+ type: "string",
130
+ description: "Bundled skill ID. Example: 'kibi-usage'.",
131
+ },
132
+ resource: {
133
+ type: "string",
134
+ description:
135
+ "Manifest-declared resource path to read. Example: 'resources/workflows.md'.",
136
+ },
137
+ },
138
+ },
139
+ requiresProlog: false,
140
+ effects: ["local-read"],
141
+ execute: executeSkillsRead,
142
+ } as const satisfies OperationSpec;
@@ -0,0 +1,149 @@
1
+ import type { OperationContext } from "../runtime-types.js";
2
+ import type { OperationResult, OperationSpec } from "../types.js";
3
+
4
+ // implements REQ-kibi-operation-interface-parity
5
+ export type SparqlRemoteInput = {
6
+ readonly endpoint: string;
7
+ readonly query: string;
8
+ readonly timeoutMs?: number;
9
+ };
10
+
11
+ // implements REQ-kibi-operation-interface-parity
12
+ export type SparqlRemoteOutput = {
13
+ readonly rows: readonly Readonly<Record<string, unknown>>[];
14
+ };
15
+
16
+ function validateInput(input: SparqlRemoteInput): URL {
17
+ if (typeof input.endpoint !== "string" || input.endpoint.trim() === "") {
18
+ throw new Error("SPARQL endpoint is required");
19
+ }
20
+ if (typeof input.query !== "string" || input.query.trim() === "") {
21
+ throw new Error("SPARQL query is required");
22
+ }
23
+ let endpoint: URL;
24
+ try {
25
+ endpoint = new URL(input.endpoint);
26
+ } catch {
27
+ throw new Error("SPARQL endpoint must be an http:// or https:// URL");
28
+ }
29
+ if (endpoint.protocol !== "http:" && endpoint.protocol !== "https:") {
30
+ throw new Error("SPARQL endpoint must be an http:// or https:// URL");
31
+ }
32
+ if (!/^\s*select\b/i.test(input.query)) {
33
+ throw new Error("SPARQL query must be a SELECT query");
34
+ }
35
+ if (
36
+ input.timeoutMs !== undefined &&
37
+ (!Number.isFinite(input.timeoutMs) || input.timeoutMs <= 0)
38
+ ) {
39
+ throw new Error("SPARQL timeoutMs must be a positive number when provided");
40
+ }
41
+ return endpoint;
42
+ }
43
+
44
+ function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
45
+ return value !== null && typeof value === "object" && !Array.isArray(value);
46
+ }
47
+
48
+ function decodeRows(payload: unknown): SparqlRemoteOutput {
49
+ if (!isRecord(payload) || !isRecord(payload.results)) {
50
+ throw new Error("SPARQL endpoint returned an invalid result document");
51
+ }
52
+ const bindings = payload.results.bindings;
53
+ if (!Array.isArray(bindings)) {
54
+ throw new Error("SPARQL endpoint returned an invalid bindings array");
55
+ }
56
+ const rows = bindings.map((binding) => {
57
+ if (!isRecord(binding)) {
58
+ throw new Error("SPARQL endpoint returned an invalid binding");
59
+ }
60
+ const row: Record<string, unknown> = {};
61
+ for (const [variable, term] of Object.entries(binding)) {
62
+ if (!isRecord(term) || typeof term.value !== "string") {
63
+ throw new Error(`SPARQL endpoint returned an invalid ${variable} term`);
64
+ }
65
+ row[variable] = term.value;
66
+ }
67
+ return row;
68
+ });
69
+ return { rows };
70
+ }
71
+
72
+ // implements REQ-kibi-operation-interface-parity, REQ-002, REQ-013
73
+ async function executeSparqlRemote(
74
+ input: SparqlRemoteInput,
75
+ context: OperationContext,
76
+ ): Promise<OperationResult<SparqlRemoteOutput>> {
77
+ const endpoint = validateInput(input);
78
+ if (context.net === undefined) {
79
+ throw new Error("SPARQL remote query requires a network port");
80
+ }
81
+ const signal =
82
+ input.timeoutMs === undefined
83
+ ? context.signal
84
+ : AbortSignal.any([
85
+ context.signal,
86
+ AbortSignal.timeout(
87
+ Math.max(1, Math.ceil(input.timeoutMs / 1_000)) * 1_000,
88
+ ),
89
+ ]);
90
+ try {
91
+ const response = await context.net.fetch(endpoint, {
92
+ method: "POST",
93
+ headers: {
94
+ accept: "application/sparql-results+json",
95
+ "content-type": "application/x-www-form-urlencoded;charset=UTF-8",
96
+ },
97
+ body: new URLSearchParams({ query: input.query }),
98
+ signal,
99
+ });
100
+ if (!response.ok) {
101
+ throw new Error(`SPARQL endpoint returned HTTP ${response.status}`);
102
+ }
103
+ const payload: unknown = await response.json();
104
+ const structuredContent = decodeRows(payload);
105
+ const rowCount = structuredContent.rows.length;
106
+ return {
107
+ content: [
108
+ {
109
+ type: "text",
110
+ text: `Remote SPARQL query returned ${rowCount} row${rowCount === 1 ? "" : "s"}.`,
111
+ },
112
+ ],
113
+ structuredContent,
114
+ };
115
+ } catch (error) {
116
+ const message = error instanceof Error ? error.message : String(error);
117
+ throw new Error(`SPARQL remote query failed: ${message}`);
118
+ }
119
+ }
120
+
121
+ export const sparqlRemoteSpec = {
122
+ name: "kb_sparql_remote",
123
+ cliName: "sparql-remote",
124
+ description:
125
+ "Opt-in remote SPARQL query tool for external HTTP(S) RDF endpoints. This does not query Kibi's local RDF store directly, stores no credentials, and depends on network availability.",
126
+ businessInputSchema: {
127
+ type: "object",
128
+ required: ["endpoint", "query"],
129
+ properties: {
130
+ endpoint: {
131
+ type: "string",
132
+ description:
133
+ "Remote SPARQL endpoint URL. Must start with http:// or https://.",
134
+ },
135
+ query: {
136
+ type: "string",
137
+ description: "SPARQL SELECT query to send to the remote endpoint.",
138
+ },
139
+ timeoutMs: {
140
+ type: "number",
141
+ description:
142
+ "Optional positive timeout in milliseconds for the remote query.",
143
+ },
144
+ },
145
+ },
146
+ requiresProlog: false,
147
+ effects: ["network-read"],
148
+ execute: executeSparqlRemote,
149
+ } as const satisfies OperationSpec<SparqlRemoteInput, SparqlRemoteOutput>;