kibi-cli 0.14.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/kibi +3 -1
- package/dist/cli-command.d.ts +5 -0
- package/dist/cli-command.d.ts.map +1 -0
- package/dist/cli-command.js +9 -0
- package/dist/cli-errors.d.ts +13 -0
- package/dist/cli-errors.d.ts.map +1 -0
- package/dist/cli-errors.js +26 -0
- package/dist/cli-input.d.ts +6 -0
- package/dist/cli-input.d.ts.map +1 -0
- package/dist/cli-input.js +54 -0
- package/dist/cli-json-command.d.ts +14 -0
- package/dist/cli-json-command.d.ts.map +1 -0
- package/dist/cli-json-command.js +96 -0
- package/dist/cli-protocol.d.ts +12 -0
- package/dist/cli-protocol.d.ts.map +1 -0
- package/dist/cli-protocol.js +37 -0
- package/dist/cli-register-foundation.d.ts +3 -0
- package/dist/cli-register-foundation.d.ts.map +1 -0
- package/dist/cli-register-foundation.js +90 -0
- package/dist/cli-register-maintenance.d.ts +3 -0
- package/dist/cli-register-maintenance.d.ts.map +1 -0
- package/dist/cli-register-maintenance.js +36 -0
- package/dist/cli-register-reporting.d.ts +3 -0
- package/dist/cli-register-reporting.d.ts.map +1 -0
- package/dist/cli-register-reporting.js +101 -0
- package/dist/cli-register-skills.d.ts +3 -0
- package/dist/cli-register-skills.d.ts.map +1 -0
- package/dist/cli-register-skills.js +71 -0
- package/dist/cli-validate.d.ts +18 -0
- package/dist/cli-validate.d.ts.map +1 -0
- package/dist/cli-validate.js +45 -0
- package/dist/cli.d.ts +4 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +48 -211
- package/dist/commands/aggregated-checks.d.ts +1 -1
- package/dist/commands/aggregated-checks.d.ts.map +1 -1
- package/dist/commands/aggregated-checks.js +28 -34
- package/dist/commands/check.d.ts +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +53 -95
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +12 -17
- package/dist/commands/discovery-shared.d.ts +2 -1
- package/dist/commands/discovery-shared.d.ts.map +1 -1
- package/dist/commands/discovery-shared.js +6 -18
- package/dist/commands/gaps.d.ts.map +1 -1
- package/dist/commands/gaps.js +15 -19
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/graph.js +15 -21
- package/dist/commands/query.d.ts +7 -7
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +98 -204
- package/dist/commands/search.d.ts +4 -4
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +14 -27
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +6 -7
- package/dist/commands/sync/manifest.d.ts +13 -2
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +31 -22
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +39 -1
- package/dist/extractors/markdown.d.ts +22 -2
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +50 -1
- package/dist/extractors/symbols-ts.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +11 -1
- package/dist/logic/ir.d.ts +112 -0
- package/dist/logic/ir.d.ts.map +1 -0
- package/dist/logic/ir.js +729 -0
- package/dist/operations/autopilot/activation.d.ts +4 -0
- package/dist/operations/autopilot/activation.d.ts.map +1 -0
- package/dist/operations/autopilot/activation.js +130 -0
- package/dist/operations/autopilot/candidate-helpers.d.ts +13 -0
- package/dist/operations/autopilot/candidate-helpers.d.ts.map +1 -0
- package/dist/operations/autopilot/candidate-helpers.js +55 -0
- package/dist/operations/autopilot/candidates.d.ts +4 -0
- package/dist/operations/autopilot/candidates.d.ts.map +1 -0
- package/dist/operations/autopilot/candidates.js +114 -0
- package/dist/operations/autopilot/discovery-evidence.d.ts +10 -0
- package/dist/operations/autopilot/discovery-evidence.d.ts.map +1 -0
- package/dist/operations/autopilot/discovery-evidence.js +158 -0
- package/dist/operations/autopilot/discovery.d.ts +4 -0
- package/dist/operations/autopilot/discovery.d.ts.map +1 -0
- package/dist/operations/autopilot/discovery.js +100 -0
- package/dist/operations/autopilot/generate.d.ts +8 -0
- package/dist/operations/autopilot/generate.d.ts.map +1 -0
- package/dist/operations/autopilot/generate.js +112 -0
- package/dist/operations/autopilot/guidance-actions.d.ts +3 -0
- package/dist/operations/autopilot/guidance-actions.d.ts.map +1 -0
- package/dist/operations/autopilot/guidance-actions.js +79 -0
- package/dist/operations/autopilot/guidance.d.ts +14 -0
- package/dist/operations/autopilot/guidance.d.ts.map +1 -0
- package/dist/operations/autopilot/guidance.js +124 -0
- package/dist/operations/autopilot/markdown-candidates.d.ts +7 -0
- package/dist/operations/autopilot/markdown-candidates.d.ts.map +1 -0
- package/dist/operations/autopilot/markdown-candidates.js +134 -0
- package/dist/operations/autopilot/presentation.d.ts +13 -0
- package/dist/operations/autopilot/presentation.d.ts.map +1 -0
- package/dist/operations/autopilot/presentation.js +91 -0
- package/dist/operations/autopilot/requirement-claims.d.ts +3 -0
- package/dist/operations/autopilot/requirement-claims.d.ts.map +1 -0
- package/dist/operations/autopilot/requirement-claims.js +48 -0
- package/dist/operations/autopilot/types.d.ts +117 -0
- package/dist/operations/autopilot/types.d.ts.map +1 -0
- package/dist/operations/autopilot/types.js +8 -0
- package/dist/operations/modeling/logic-modeling.d.ts +22 -0
- package/dist/operations/modeling/logic-modeling.d.ts.map +1 -0
- package/dist/operations/modeling/logic-modeling.js +111 -0
- package/dist/operations/modeling/model-requirement.d.ts +10 -0
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -0
- package/dist/operations/modeling/model-requirement.js +164 -0
- package/dist/operations/modeling/predicate-applyplan.d.ts +6 -0
- package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-applyplan.js +117 -0
- package/dist/operations/modeling/predicate-catalog-1.d.ts +3 -0
- package/dist/operations/modeling/predicate-catalog-1.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog-1.js +200 -0
- package/dist/operations/modeling/predicate-catalog-2.d.ts +3 -0
- package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog-2.js +197 -0
- package/dist/operations/modeling/predicate-catalog-3.d.ts +3 -0
- package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog-3.js +193 -0
- package/dist/operations/modeling/predicate-catalog-4.d.ts +3 -0
- package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog-4.js +149 -0
- package/dist/operations/modeling/predicate-catalog.d.ts +5 -0
- package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog.js +29 -0
- package/dist/operations/modeling/predicate-inference-1.d.ts +16 -0
- package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-inference-1.js +161 -0
- package/dist/operations/modeling/predicate-inference-2.d.ts +19 -0
- package/dist/operations/modeling/predicate-inference-2.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-inference-2.js +169 -0
- package/dist/operations/modeling/predicate-inference-3.d.ts +15 -0
- package/dist/operations/modeling/predicate-inference-3.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-inference-3.js +163 -0
- package/dist/operations/modeling/predicate-inference.d.ts +5 -0
- package/dist/operations/modeling/predicate-inference.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-inference.js +163 -0
- package/dist/operations/modeling/predicate-loader.d.ts +10 -0
- package/dist/operations/modeling/predicate-loader.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-loader.js +94 -0
- package/dist/operations/modeling/predicate-ranker.d.ts +3 -0
- package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-ranker.js +62 -0
- package/dist/operations/modeling/predicate-score-1.d.ts +3 -0
- package/dist/operations/modeling/predicate-score-1.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-score-1.js +121 -0
- package/dist/operations/modeling/predicate-score-2.d.ts +3 -0
- package/dist/operations/modeling/predicate-score-2.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-score-2.js +122 -0
- package/dist/operations/modeling/predicate-score-3.d.ts +3 -0
- package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-score-3.js +54 -0
- package/dist/operations/modeling/predicate-types.d.ts +64 -0
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-types.js +1 -0
- package/dist/operations/modeling/predicate-usage-hints-1.d.ts +3 -0
- package/dist/operations/modeling/predicate-usage-hints-1.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-usage-hints-1.js +211 -0
- package/dist/operations/modeling/predicate-usage-hints-2.d.ts +3 -0
- package/dist/operations/modeling/predicate-usage-hints-2.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-usage-hints-2.js +209 -0
- package/dist/operations/modeling/predicate-usage-hints-3.d.ts +3 -0
- package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-usage-hints-3.js +45 -0
- package/dist/operations/modeling/predicate-utils.d.ts +23 -0
- package/dist/operations/modeling/predicate-utils.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-utils.js +187 -0
- package/dist/operations/modeling/requirement-applyplan.d.ts +4 -0
- package/dist/operations/modeling/requirement-applyplan.d.ts.map +1 -0
- package/dist/operations/modeling/requirement-applyplan.js +44 -0
- package/dist/operations/modeling/requirement-heuristics.d.ts +4 -0
- package/dist/operations/modeling/requirement-heuristics.d.ts.map +1 -0
- package/dist/operations/modeling/requirement-heuristics.js +114 -0
- package/dist/operations/modeling/requirement-modeler.d.ts +8 -0
- package/dist/operations/modeling/requirement-modeler.d.ts.map +1 -0
- package/dist/operations/modeling/requirement-modeler.js +70 -0
- package/dist/operations/modeling/requirement-types.d.ts +61 -0
- package/dist/operations/modeling/requirement-types.d.ts.map +1 -0
- package/dist/operations/modeling/requirement-types.js +1 -0
- package/dist/operations/modeling/requirement-utils.d.ts +10 -0
- package/dist/operations/modeling/requirement-utils.d.ts.map +1 -0
- package/dist/operations/modeling/requirement-utils.js +65 -0
- package/dist/operations/modeling/suggest-predicates.d.ts +6 -0
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -0
- package/dist/operations/modeling/suggest-predicates.js +64 -0
- package/dist/operations/mutation/audit.d.ts +6 -0
- package/dist/operations/mutation/audit.d.ts.map +1 -0
- package/dist/operations/mutation/audit.js +22 -0
- package/dist/operations/mutation/contradictions.d.ts +10 -0
- package/dist/operations/mutation/contradictions.d.ts.map +1 -0
- package/dist/operations/mutation/contradictions.js +40 -0
- package/dist/operations/mutation/delete.d.ts +5 -0
- package/dist/operations/mutation/delete.d.ts.map +1 -0
- package/dist/operations/mutation/delete.js +67 -0
- package/dist/operations/mutation/relationships.d.ts +17 -0
- package/dist/operations/mutation/relationships.d.ts.map +1 -0
- package/dist/operations/mutation/relationships.js +142 -0
- package/dist/operations/mutation/save.d.ts +4 -0
- package/dist/operations/mutation/save.d.ts.map +1 -0
- package/dist/operations/mutation/save.js +14 -0
- package/dist/operations/mutation/serialization.d.ts +5 -0
- package/dist/operations/mutation/serialization.d.ts.map +1 -0
- package/dist/operations/mutation/serialization.js +88 -0
- package/dist/operations/mutation/strict-fact.d.ts +4 -0
- package/dist/operations/mutation/strict-fact.d.ts.map +1 -0
- package/dist/operations/mutation/strict-fact.js +132 -0
- package/dist/operations/mutation/symbol-granularity.d.ts +4 -0
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -0
- package/dist/operations/mutation/symbol-granularity.js +109 -0
- package/dist/operations/mutation/symbol-refresh.d.ts +10 -0
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -0
- package/dist/operations/mutation/symbol-refresh.js +105 -0
- package/dist/operations/mutation/types.d.ts +43 -0
- package/dist/operations/mutation/types.d.ts.map +1 -0
- package/dist/operations/mutation/types.js +1 -0
- package/dist/operations/mutation/upsert.d.ts +5 -0
- package/dist/operations/mutation/upsert.d.ts.map +1 -0
- package/dist/operations/mutation/upsert.js +103 -0
- package/dist/operations/mutation/validate-upsert.d.ts +5 -0
- package/dist/operations/mutation/validate-upsert.d.ts.map +1 -0
- package/dist/operations/mutation/validate-upsert.js +50 -0
- package/dist/operations/mutation/validation.d.ts +5 -0
- package/dist/operations/mutation/validation.d.ts.map +1 -0
- package/dist/operations/mutation/validation.js +107 -0
- package/dist/operations/mutation/warnings.d.ts +4 -0
- package/dist/operations/mutation/warnings.d.ts.map +1 -0
- package/dist/operations/mutation/warnings.js +17 -0
- package/dist/operations/semantic-advisor/analysis-receipt.d.ts +5 -0
- package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/analysis-receipt.js +120 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts +5 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/analyze-prose.js +693 -0
- package/dist/operations/semantic-advisor/clauses.d.ts +10 -0
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/clauses.js +43 -0
- package/dist/operations/semantic-advisor/observation-plan.d.ts +3 -0
- package/dist/operations/semantic-advisor/observation-plan.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/observation-plan.js +31 -0
- package/dist/operations/semantic-advisor/predicate-rule.d.ts +14 -0
- package/dist/operations/semantic-advisor/predicate-rule.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/predicate-rule.js +22 -0
- package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +79 -0
- package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/predicate-rules-core.js +140 -0
- package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +83 -0
- package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/predicate-rules-policy.js +150 -0
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +48 -0
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +102 -0
- package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +71 -0
- package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/predicate-rules-product.js +133 -0
- package/dist/operations/semantic-advisor/prose-coverage-evaluator.d.ts +29 -0
- package/dist/operations/semantic-advisor/prose-coverage-evaluator.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/prose-coverage-evaluator.js +54 -0
- package/dist/operations/semantic-advisor/shared.d.ts +19 -0
- package/dist/operations/semantic-advisor/shared.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/shared.js +209 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts +4 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/strict-count-rules.js +62 -0
- package/dist/operations/semantic-advisor/strict-rules.d.ts +4 -0
- package/dist/operations/semantic-advisor/strict-rules.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/strict-rules.js +106 -0
- package/dist/operations/semantic-advisor/types.d.ts +195 -0
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/types.js +1 -0
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +20 -3
- package/dist/prolog.d.ts +5 -0
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +89 -32
- package/dist/public/impact/diagnostics.d.ts.map +1 -1
- package/dist/public/impact/diagnostics.js +8 -4
- package/dist/public/impact/full-kb-quality.d.ts +1 -1
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +34 -1
- package/dist/public/impact/requirement-quality.d.ts.map +1 -1
- package/dist/public/impact/requirement-quality.js +6 -23
- package/dist/public/operations/catalog.d.ts +986 -0
- package/dist/public/operations/catalog.d.ts.map +1 -0
- package/dist/public/operations/catalog.js +42 -0
- package/dist/public/operations/check-executor.d.ts +21 -0
- package/dist/public/operations/check-executor.d.ts.map +1 -0
- package/dist/public/operations/check-executor.js +111 -0
- package/dist/public/operations/check-format-shared.d.ts +36 -0
- package/dist/public/operations/check-format-shared.d.ts.map +1 -0
- package/dist/public/operations/check-format-shared.js +107 -0
- package/dist/public/operations/check-helpers.d.ts +10 -0
- package/dist/public/operations/check-helpers.d.ts.map +1 -0
- package/dist/public/operations/check-helpers.js +107 -0
- package/dist/public/operations/discovery-entities.d.ts +14 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -0
- package/dist/public/operations/discovery-entities.js +91 -0
- package/dist/public/operations/discovery-executors.d.ts +39 -0
- package/dist/public/operations/discovery-executors.d.ts.map +1 -0
- package/dist/public/operations/discovery-executors.js +101 -0
- package/dist/public/operations/index.d.ts +21 -0
- package/dist/public/operations/index.d.ts.map +1 -0
- package/dist/public/operations/index.js +19 -0
- package/dist/public/operations/node-ports.d.ts +15 -0
- package/dist/public/operations/node-ports.d.ts.map +1 -0
- package/dist/public/operations/node-ports.js +57 -0
- package/dist/public/operations/prolog-json.d.ts +5 -0
- package/dist/public/operations/prolog-json.d.ts.map +1 -0
- package/dist/public/operations/prolog-json.js +44 -0
- package/dist/public/operations/runtime-types.d.ts +69 -0
- package/dist/public/operations/runtime-types.d.ts.map +1 -0
- package/dist/public/operations/runtime-types.js +17 -0
- package/dist/public/operations/specs/autopilot.d.ts +82 -0
- package/dist/public/operations/specs/autopilot.d.ts.map +1 -0
- package/dist/public/operations/specs/autopilot.js +72 -0
- package/dist/public/operations/specs/check.d.ts +51 -0
- package/dist/public/operations/specs/check.d.ts.map +1 -0
- package/dist/public/operations/specs/check.js +65 -0
- package/dist/public/operations/specs/discovery.d.ts +94 -0
- package/dist/public/operations/specs/discovery.d.ts.map +1 -0
- package/dist/public/operations/specs/discovery.js +98 -0
- package/dist/public/operations/specs/modeling.d.ts +142 -0
- package/dist/public/operations/specs/modeling.d.ts.map +1 -0
- package/dist/public/operations/specs/modeling.js +133 -0
- package/dist/public/operations/specs/mutation-schemas.d.ts +268 -0
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -0
- package/dist/public/operations/specs/mutation-schemas.js +294 -0
- package/dist/public/operations/specs/mutation.d.ts +56 -0
- package/dist/public/operations/specs/mutation.d.ts.map +1 -0
- package/dist/public/operations/specs/mutation.js +44 -0
- package/dist/public/operations/specs/reporting.d.ts +185 -0
- package/dist/public/operations/specs/reporting.d.ts.map +1 -0
- package/dist/public/operations/specs/reporting.js +158 -0
- package/dist/public/operations/specs/semantic.d.ts +81 -0
- package/dist/public/operations/specs/semantic.d.ts.map +1 -0
- package/dist/public/operations/specs/semantic.js +137 -0
- package/dist/public/operations/specs/skills.d.ts +70 -0
- package/dist/public/operations/specs/skills.d.ts.map +1 -0
- package/dist/public/operations/specs/skills.js +107 -0
- package/dist/public/operations/specs/sparql.d.ts +39 -0
- package/dist/public/operations/specs/sparql.d.ts.map +1 -0
- package/dist/public/operations/specs/sparql.js +121 -0
- package/dist/public/operations/specs/upsert.d.ts +291 -0
- package/dist/public/operations/specs/upsert.d.ts.map +1 -0
- package/dist/public/operations/specs/upsert.js +27 -0
- package/dist/public/operations/types.d.ts +24 -0
- package/dist/public/operations/types.d.ts.map +1 -0
- package/dist/public/operations/types.js +1 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +317 -0
- package/dist/public/schemas/relationship.d.ts.map +1 -1
- package/dist/public/schemas/relationship.js +1 -0
- package/dist/public/skill-system/errors.d.ts +19 -0
- package/dist/public/skill-system/errors.d.ts.map +1 -0
- package/dist/public/skill-system/errors.js +36 -0
- package/dist/public/skill-system/loader.d.ts +9 -0
- package/dist/public/skill-system/loader.d.ts.map +1 -0
- package/dist/public/skill-system/loader.js +76 -0
- package/dist/public/skill-system/paths.d.ts +6 -0
- package/dist/public/skill-system/paths.d.ts.map +1 -0
- package/dist/public/skill-system/paths.js +25 -0
- package/dist/public/skill-system/types.d.ts +15 -0
- package/dist/public/skill-system/types.d.ts.map +1 -0
- package/dist/public/skill-system/types.js +1 -0
- package/dist/public/skill-system/validation.d.ts +10 -0
- package/dist/public/skill-system/validation.d.ts.map +1 -0
- package/dist/public/skill-system/validation.js +119 -0
- package/dist/public/skills/init-kibi/SKILL.md +62 -0
- package/dist/public/skills/kibi-freshness/SKILL.md +44 -0
- package/dist/public/skills/kibi-traceability/SKILL.md +54 -0
- package/dist/public/skills/kibi-usage/SKILL.md +145 -99
- package/dist/public/skills/kibi-usage/resources/fact-lanes.md +112 -0
- package/dist/public/skills/kibi-usage/resources/logic-ir.md +43 -0
- package/dist/public/skills/kibi-usage/resources/operation-access.md +44 -0
- package/dist/public/skills/kibi-usage/resources/ui-requirements.md +96 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +41 -3
- package/dist/public/skills.d.ts +4 -41
- package/dist/public/skills.d.ts.map +1 -1
- package/dist/public/skills.js +3 -270
- package/dist/public/symbol-granularity.d.ts +9 -0
- package/dist/public/symbol-granularity.d.ts.map +1 -1
- package/dist/public/symbol-granularity.js +16 -0
- package/dist/runtime/cli-runtime.d.ts +3 -0
- package/dist/runtime/cli-runtime.d.ts.map +1 -0
- package/dist/runtime/cli-runtime.js +96 -0
- package/dist/schemas/entity.schema.json +329 -3
- package/dist/traceability/staged-diagnostics.d.ts +2 -2
- package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
- package/dist/traceability/staged-diagnostics.js +17 -10
- package/dist/traceability/staged-impact-contract.js +1 -1
- package/dist/traceability/staged-symbols-manifest.d.ts +1 -0
- package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +53 -24
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +17 -1
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +47 -1
- package/dist/types/entities.d.ts +3 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/types/relationships.d.ts +1 -1
- package/dist/types/relationships.d.ts.map +1 -1
- package/dist/utils/rule-registry.d.ts.map +1 -1
- package/dist/utils/rule-registry.js +24 -0
- package/dist/utils/schema-version.d.ts +1 -1
- package/dist/utils/schema-version.js +1 -1
- package/package.json +60 -2
- package/src/public/impact/diagnostics.ts +18 -11
- package/src/public/impact/full-kb-quality.ts +30 -3
- package/src/public/impact/requirement-quality.ts +6 -26
- package/src/public/operations/catalog.ts +60 -0
- package/src/public/operations/check-executor.ts +185 -0
- package/src/public/operations/check-format-shared.ts +178 -0
- package/src/public/operations/check-helpers.ts +141 -0
- package/src/public/operations/discovery-entities.ts +122 -0
- package/src/public/operations/discovery-executors.ts +176 -0
- package/src/public/operations/index.ts +20 -0
- package/src/public/operations/node-ports.ts +78 -0
- package/src/public/operations/prolog-json.ts +71 -0
- package/src/public/operations/runtime-types.ts +106 -0
- package/src/public/operations/specs/autopilot.ts +98 -0
- package/src/public/operations/specs/check.ts +75 -0
- package/src/public/operations/specs/discovery.ts +126 -0
- package/src/public/operations/specs/modeling.ts +174 -0
- package/src/public/operations/specs/mutation-schemas.ts +326 -0
- package/src/public/operations/specs/mutation.ts +58 -0
- package/src/public/operations/specs/reporting.ts +249 -0
- package/src/public/operations/specs/semantic.ts +174 -0
- package/src/public/operations/specs/skills.ts +142 -0
- package/src/public/operations/specs/sparql.ts +149 -0
- package/src/public/operations/specs/upsert.ts +40 -0
- package/src/public/operations/types.ts +57 -0
- package/src/public/schemas/entity.ts +324 -1
- package/src/public/schemas/relationship.ts +1 -0
- package/src/public/skill-system/errors.ts +38 -0
- package/src/public/skill-system/loader.ts +108 -0
- package/src/public/skill-system/paths.ts +27 -0
- package/src/public/skill-system/types.ts +14 -0
- package/src/public/skill-system/validation.ts +175 -0
- package/src/public/skills/init-kibi/SKILL.md +62 -0
- package/src/public/skills/kibi-freshness/SKILL.md +44 -0
- package/src/public/skills/kibi-traceability/SKILL.md +54 -0
- package/src/public/skills/kibi-usage/SKILL.md +145 -99
- package/src/public/skills/kibi-usage/resources/fact-lanes.md +112 -0
- package/src/public/skills/kibi-usage/resources/logic-ir.md +43 -0
- package/src/public/skills/kibi-usage/resources/operation-access.md +44 -0
- package/src/public/skills/kibi-usage/resources/ui-requirements.md +96 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +41 -3
- package/src/public/skills.ts +18 -427
- package/src/public/symbol-granularity.ts +25 -0
- package/src/schemas/entity.schema.json +329 -3
- package/src/schemas/relationship.schema.json +1 -0
package/dist/commands/query.js
CHANGED
|
@@ -1,169 +1,37 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Kibi — repo-local, per-branch, queryable long-term memory for software projects
|
|
3
|
-
Copyright (C) 2026 Piotr Franczyk
|
|
4
|
-
|
|
5
|
-
This program is free software: you can redistribute it and/or modify
|
|
6
|
-
it under the terms of the GNU Affero General Public License as published by
|
|
7
|
-
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
(at your option) any later version.
|
|
9
|
-
|
|
10
|
-
This program is distributed in the hope that it will be useful,
|
|
11
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
GNU Affero General Public License for more details.
|
|
14
|
-
|
|
15
|
-
You should have received a copy of the GNU Affero General Public License
|
|
16
|
-
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
-
*/
|
|
18
|
-
import * as path from "node:path";
|
|
19
1
|
import Table from "cli-table3";
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
2
|
+
import { parseListOfLists, parsePrologValue } from "../prolog/codec.js";
|
|
3
|
+
import { VALID_ENTITY_TYPES, executeOperation, querySpec, } from "../public/operations/index.js";
|
|
22
4
|
import relationshipSchema from "../public/schemas/relationship.js";
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import { safeCleanupProlog } from "../utils/prolog-cleanup.js";
|
|
5
|
+
import { createCliRuntime } from "../runtime/cli-runtime.js";
|
|
6
|
+
import { withAttachedBranchProlog } from "./discovery-shared.js";
|
|
26
7
|
const REL_TYPES = relationshipSchema.properties.type.enum;
|
|
27
|
-
// implements REQ-003
|
|
28
8
|
export async function queryCommand(type, options) {
|
|
29
|
-
|
|
30
|
-
|
|
9
|
+
// implements REQ-003, REQ-kibi-operation-interface-parity
|
|
10
|
+
if (!type && !options.source && !options.relationships) {
|
|
11
|
+
console.error("Error: Must specify entity type, --source, or --relationships option");
|
|
12
|
+
return { exitCode: 1 };
|
|
13
|
+
}
|
|
14
|
+
if (type && !VALID_ENTITY_TYPES.some((candidate) => candidate === type)) {
|
|
15
|
+
console.error(`Error: Invalid type '${type}'. Valid types: ${VALID_ENTITY_TYPES.join(", ")}`);
|
|
16
|
+
return { exitCode: 1 };
|
|
17
|
+
}
|
|
31
18
|
try {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
await prolog.query("set_prolog_flag(answer_write_options, [max_depth(0), spacing(next_argument)])");
|
|
35
|
-
let currentBranch;
|
|
36
|
-
const branchResult = resolveActiveBranch();
|
|
37
|
-
if ("error" in branchResult) {
|
|
38
|
-
const isNonGitError = branchResult.code === "NOT_A_GIT_REPO" ||
|
|
39
|
-
branchResult.code === "GIT_NOT_AVAILABLE";
|
|
40
|
-
if (isNonGitError) {
|
|
41
|
-
// For query command, use "main" as default branch when git is not available
|
|
42
|
-
// or the current directory is not a git repository. This allows querying
|
|
43
|
-
// after init in a non-git directory.
|
|
44
|
-
currentBranch = "main";
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
console.error(`Error: Failed to resolve active branch:\n${branchResult.error}`);
|
|
48
|
-
await prolog.terminate();
|
|
49
|
-
return { exitCode: 1 };
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
currentBranch = branchResult.branch;
|
|
54
|
-
}
|
|
55
|
-
const kbPath = path.join(process.cwd(), `.kb/branches/${currentBranch}`);
|
|
56
|
-
const attachResult = await prolog.query(`kb_attach('${kbPath}')`);
|
|
57
|
-
if (!attachResult.success) {
|
|
58
|
-
await prolog.terminate();
|
|
59
|
-
console.error(`Error: Failed to attach KB: ${attachResult.error || "Unknown error"}`);
|
|
60
|
-
return { exitCode: 1 };
|
|
61
|
-
}
|
|
62
|
-
attached = true;
|
|
63
|
-
let results = [];
|
|
19
|
+
const limit = Number.parseInt(options.limit || "100", 10);
|
|
20
|
+
const offset = Number.parseInt(options.offset || "0", 10);
|
|
64
21
|
if (options.relationships) {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const relTypesList = REL_TYPES.join(", ");
|
|
68
|
-
const goal = `findall([Type,From,To], (member(Type, [${relTypesList}]), kb_relationship(Type, '${safeFromId}', To), From='${safeFromId}'), Results)`;
|
|
69
|
-
const queryResult = await prolog.query(goal);
|
|
70
|
-
if (queryResult.success && queryResult.bindings.Results) {
|
|
71
|
-
const rows = parseListOfLists(queryResult.bindings.Results);
|
|
72
|
-
const parsed = rows
|
|
73
|
-
.filter((r) => r.length >= 3)
|
|
74
|
-
.flatMap((r) => {
|
|
75
|
-
const [typeValue, fromValue, toValue] = r;
|
|
76
|
-
if (typeValue === undefined ||
|
|
77
|
-
fromValue === undefined ||
|
|
78
|
-
toValue === undefined) {
|
|
79
|
-
return [];
|
|
80
|
-
}
|
|
81
|
-
return [
|
|
82
|
-
{
|
|
83
|
-
type: parsePrologValue(typeValue),
|
|
84
|
-
from: parsePrologValue(fromValue),
|
|
85
|
-
to: parsePrologValue(toValue),
|
|
86
|
-
},
|
|
87
|
-
];
|
|
88
|
-
});
|
|
89
|
-
results = parsed.filter((rel) => rel &&
|
|
90
|
-
typeof rel.type === "string" &&
|
|
91
|
-
typeof rel.from === "string" &&
|
|
92
|
-
typeof rel.to === "string" &&
|
|
93
|
-
rel.from === fromId &&
|
|
94
|
-
REL_TYPES.includes(rel.type));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else if (type || options.source) {
|
|
98
|
-
if (type && !VALID_ENTITY_TYPES.includes(type)) {
|
|
99
|
-
console.error(`Error: Invalid type '${type}'. Valid types: ${VALID_ENTITY_TYPES.join(", ")}`);
|
|
100
|
-
return { exitCode: 1 };
|
|
101
|
-
}
|
|
102
|
-
let goal;
|
|
103
|
-
if (options.source) {
|
|
104
|
-
const safeSource = String(options.source).replace(/'/g, "\\'");
|
|
105
|
-
if (type) {
|
|
106
|
-
goal = `findall([Id,'${type}',Props], (kb_entities_by_source('${safeSource}', SourceIds), member(Id, SourceIds), kb_entity(Id, '${type}', Props)), Results)`;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
goal = `findall([Id,Type,Props], (kb_entities_by_source('${safeSource}', SourceIds), member(Id, SourceIds), kb_entity(Id, Type, Props)), Results)`;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
else if (options.id) {
|
|
113
|
-
const safeId = String(options.id).replace(/'/g, "''");
|
|
114
|
-
goal = `kb_entity('${safeId}', '${type}', Props), Id = '${safeId}', Type = '${type}', Result = [Id, Type, Props]`;
|
|
115
|
-
}
|
|
116
|
-
else if (options.tag) {
|
|
117
|
-
const safeTag = String(options.tag).replace(/'/g, "''");
|
|
118
|
-
goal = `findall([Id,'${type}',Props], (kb_entity(Id, '${type}', Props), memberchk(tags=Tags, Props), member('${safeTag}', Tags)), Results)`;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
goal = `findall([Id,'${type}',Props], kb_entity(Id, '${type}', Props), Results)`;
|
|
122
|
-
}
|
|
123
|
-
const queryResult = await prolog.query(goal);
|
|
124
|
-
if (queryResult.success) {
|
|
125
|
-
if (options.id) {
|
|
126
|
-
// Single entity query
|
|
127
|
-
if (queryResult.bindings.Result) {
|
|
128
|
-
const entity = parseEntityFromBinding(queryResult.bindings.Result);
|
|
129
|
-
results = [entity];
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
// Multiple entities query
|
|
134
|
-
if (queryResult.bindings.Results) {
|
|
135
|
-
const entitiesData = parseListOfLists(queryResult.bindings.Results);
|
|
136
|
-
for (const data of entitiesData) {
|
|
137
|
-
const entity = parseEntityFromList(data);
|
|
138
|
-
results.push(entity);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
console.error("Error: Must specify entity type, --source, or --relationships option");
|
|
146
|
-
return { exitCode: 1 };
|
|
147
|
-
}
|
|
148
|
-
const limit = Number.parseInt(options.limit || "100");
|
|
149
|
-
const offset = Number.parseInt(options.offset || "0");
|
|
150
|
-
const paginated = results.slice(offset, offset + limit);
|
|
151
|
-
if (!paginated || paginated.length === 0) {
|
|
152
|
-
if (options.format === "json") {
|
|
153
|
-
console.log("[]");
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
console.log("No entities found");
|
|
157
|
-
}
|
|
22
|
+
const relationships = await queryRelationships(options.relationships);
|
|
23
|
+
printRelationships(relationships.slice(offset, offset + limit), options.format);
|
|
158
24
|
return { exitCode: 0 };
|
|
159
25
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
26
|
+
const result = await executeOperation(createCliRuntime(), querySpec, {
|
|
27
|
+
...(type !== undefined ? { type } : {}),
|
|
28
|
+
...(options.id !== undefined ? { id: options.id } : {}),
|
|
29
|
+
...(options.tag !== undefined ? { tags: [options.tag] } : {}),
|
|
30
|
+
...(options.source !== undefined ? { sourceFile: options.source } : {}),
|
|
31
|
+
limit,
|
|
32
|
+
offset,
|
|
33
|
+
}, { workspaceRoot: process.cwd() });
|
|
34
|
+
printEntities(result.structuredContent?.entities ?? [], options.format);
|
|
167
35
|
return { exitCode: 0 };
|
|
168
36
|
}
|
|
169
37
|
catch (error) {
|
|
@@ -171,57 +39,83 @@ export async function queryCommand(type, options) {
|
|
|
171
39
|
console.error(`Error: ${message}`);
|
|
172
40
|
return { exitCode: 1 };
|
|
173
41
|
}
|
|
174
|
-
|
|
175
|
-
|
|
42
|
+
}
|
|
43
|
+
async function queryRelationships(fromId) {
|
|
44
|
+
return withAttachedBranchProlog(async (prolog) => {
|
|
45
|
+
const safeFromId = fromId.replaceAll("'", "''");
|
|
46
|
+
const goal = `findall([Type,From,To], (member(Type, [${REL_TYPES.join(", ")}]), kb_relationship(Type, '${safeFromId}', To), From='${safeFromId}'), Results)`;
|
|
47
|
+
const result = await prolog.query(goal);
|
|
48
|
+
const binding = result.bindings.Results;
|
|
49
|
+
if (!result.success || !binding)
|
|
50
|
+
return [];
|
|
51
|
+
return parseListOfLists(binding).flatMap((row) => {
|
|
52
|
+
const [typeValue, fromValue, toValue] = row;
|
|
53
|
+
if (!typeValue || !fromValue || !toValue)
|
|
54
|
+
return [];
|
|
55
|
+
const type = parsePrologValue(typeValue);
|
|
56
|
+
const from = parsePrologValue(fromValue);
|
|
57
|
+
const to = parsePrologValue(toValue);
|
|
58
|
+
if (typeof type !== "string" ||
|
|
59
|
+
typeof from !== "string" ||
|
|
60
|
+
typeof to !== "string" ||
|
|
61
|
+
from !== fromId ||
|
|
62
|
+
!REL_TYPES.includes(type)) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
return [{ type, from, to }];
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function printRelationships(items, format) {
|
|
70
|
+
if (items.length === 0) {
|
|
71
|
+
console.log(format === "json" ? "[]" : "No entities found");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (format !== "table") {
|
|
75
|
+
console.log(JSON.stringify(items, null, 2));
|
|
76
|
+
return;
|
|
176
77
|
}
|
|
78
|
+
const table = new Table({
|
|
79
|
+
head: ["Type", "From", "To"],
|
|
80
|
+
colWidths: [20, 18, 18],
|
|
81
|
+
});
|
|
82
|
+
for (const item of items) {
|
|
83
|
+
table.push([
|
|
84
|
+
item.type || "N/A",
|
|
85
|
+
item.from.substring(0, 16) || "N/A",
|
|
86
|
+
item.to.substring(0, 16) || "N/A",
|
|
87
|
+
]);
|
|
88
|
+
}
|
|
89
|
+
console.log(table.toString());
|
|
177
90
|
}
|
|
178
|
-
|
|
179
|
-
* Output results as a formatted table.
|
|
180
|
-
*/
|
|
181
|
-
function outputTable(items, isRelationships) {
|
|
91
|
+
function printEntities(items, format) {
|
|
182
92
|
if (items.length === 0) {
|
|
183
|
-
console.log("No entities found
|
|
93
|
+
console.log(format === "json" ? "[]" : "No entities found");
|
|
184
94
|
return;
|
|
185
95
|
}
|
|
186
|
-
if (
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
colWidths: [20, 18, 18],
|
|
190
|
-
});
|
|
191
|
-
for (const item of items) {
|
|
192
|
-
const rel = item;
|
|
193
|
-
table.push([
|
|
194
|
-
rel.type || "N/A",
|
|
195
|
-
rel.from.substring(0, 16) || "N/A",
|
|
196
|
-
rel.to.substring(0, 16) || "N/A",
|
|
197
|
-
]);
|
|
198
|
-
}
|
|
199
|
-
console.log(table.toString());
|
|
96
|
+
if (format !== "table") {
|
|
97
|
+
console.log(JSON.stringify(items, null, 2));
|
|
98
|
+
return;
|
|
200
99
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
title.substring(0, 38),
|
|
221
|
-
status,
|
|
222
|
-
tags.substring(0, 28),
|
|
223
|
-
]);
|
|
224
|
-
}
|
|
225
|
-
console.log(table.toString());
|
|
100
|
+
const table = new Table({
|
|
101
|
+
head: ["ID", "Type", "Title", "Status", "Tags"],
|
|
102
|
+
colWidths: [18, 10, 40, 12, 30],
|
|
103
|
+
});
|
|
104
|
+
for (const item of items) {
|
|
105
|
+
const id = typeof item.id === "string" ? item.id : "N/A";
|
|
106
|
+
const entityType = typeof item.type === "string" ? item.type : "N/A";
|
|
107
|
+
const title = typeof item.title === "string" ? item.title : "N/A";
|
|
108
|
+
const status = typeof item.status === "string" ? item.status : "N/A";
|
|
109
|
+
const tags = Array.isArray(item.tags)
|
|
110
|
+
? item.tags.filter((tag) => typeof tag === "string").join(", ")
|
|
111
|
+
: "";
|
|
112
|
+
table.push([
|
|
113
|
+
id.substring(0, 16),
|
|
114
|
+
entityType,
|
|
115
|
+
title.substring(0, 38),
|
|
116
|
+
status,
|
|
117
|
+
tags.substring(0, 28),
|
|
118
|
+
]);
|
|
226
119
|
}
|
|
120
|
+
console.log(table.toString());
|
|
227
121
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
interface SearchOptions {
|
|
2
|
-
type?: string;
|
|
3
|
-
format?: "json" | "table";
|
|
4
|
-
limit?: string;
|
|
5
|
-
offset?: string;
|
|
2
|
+
readonly type?: string;
|
|
3
|
+
readonly format?: "json" | "table";
|
|
4
|
+
readonly limit?: string;
|
|
5
|
+
readonly offset?: string;
|
|
6
6
|
}
|
|
7
7
|
export declare function searchCommand(query: string | undefined, options: SearchOptions): Promise<void>;
|
|
8
8
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAmCf"}
|
package/dist/commands/search.js
CHANGED
|
@@ -1,38 +1,25 @@
|
|
|
1
|
-
import { VALID_ENTITY_TYPES,
|
|
2
|
-
import {
|
|
3
|
-
import { printDiscoveryResult
|
|
4
|
-
// implements REQ-mcp-search-discovery, REQ-003
|
|
1
|
+
import { VALID_ENTITY_TYPES, executeOperation, searchSpec, } from "../public/operations/index.js";
|
|
2
|
+
import { createCliRuntime } from "../runtime/cli-runtime.js";
|
|
3
|
+
import { printDiscoveryResult } from "./discovery-shared.js";
|
|
5
4
|
export async function searchCommand(query, options) {
|
|
5
|
+
// implements REQ-003, REQ-kibi-operation-interface-parity
|
|
6
6
|
if (!query?.trim()) {
|
|
7
7
|
console.error("Error: search query is required");
|
|
8
8
|
process.exitCode = 1;
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
|
-
if (options.type &&
|
|
11
|
+
if (options.type &&
|
|
12
|
+
!VALID_ENTITY_TYPES.some((candidate) => candidate === options.type)) {
|
|
12
13
|
console.error(`Error: invalid type '${options.type}'. Valid types: ${VALID_ENTITY_TYPES.join(", ")}`);
|
|
13
14
|
process.exitCode = 1;
|
|
14
15
|
return;
|
|
15
16
|
}
|
|
16
|
-
await
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const entitiesResult = await queryEntities(prolog, {
|
|
25
|
-
...(type !== undefined ? { type } : {}),
|
|
26
|
-
limit: 100000,
|
|
27
|
-
offset: 0,
|
|
28
|
-
});
|
|
29
|
-
const matches = await rankEntities(entitiesResult.entities, query, process.cwd());
|
|
30
|
-
const paginated = matches.slice(offset, offset + limit);
|
|
31
|
-
return { results: paginated, count: matches.length };
|
|
32
|
-
}
|
|
33
|
-
function buildSearchText(query, result) {
|
|
34
|
-
if (result.count === 0) {
|
|
35
|
-
return `No search results for '${query}'.`;
|
|
36
|
-
}
|
|
37
|
-
return `Found ${result.count} search results for '${query}'. Showing ${result.results.length}: ${result.results.map((match) => match.entity.id).join(", ")}`;
|
|
17
|
+
const result = await executeOperation(createCliRuntime(), searchSpec, {
|
|
18
|
+
query,
|
|
19
|
+
...(options.type !== undefined ? { type: options.type } : {}),
|
|
20
|
+
limit: Number.parseInt(options.limit || "20", 10),
|
|
21
|
+
offset: Number.parseInt(options.offset || "0", 10),
|
|
22
|
+
}, { workspaceRoot: process.cwd() });
|
|
23
|
+
const structured = result.structuredContent ?? { results: [], count: 0 };
|
|
24
|
+
printDiscoveryResult(options.format, structured, result.content[0]?.text ?? `No search results for '${query}'.`);
|
|
38
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAIA,UAAU,aAAa;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAazE"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { executeOperation, statusSpec } from "../public/operations/index.js";
|
|
2
|
+
import { createCliRuntime } from "../runtime/cli-runtime.js";
|
|
3
|
+
import { printDiscoveryResult } from "./discovery-shared.js";
|
|
3
4
|
export async function statusCommand(options) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
printDiscoveryResult(options.format, result, `Branch ${result.branch} is ${result.syncState} (dirty=${result.dirty})`);
|
|
8
|
-
});
|
|
5
|
+
// implements REQ-003, REQ-kibi-operation-interface-parity
|
|
6
|
+
const result = await executeOperation(createCliRuntime(), statusSpec, {}, { workspaceRoot: process.cwd() });
|
|
7
|
+
printDiscoveryResult(options.format, result.structuredContent, result.content[0]?.text ?? "Status unavailable");
|
|
9
8
|
}
|
|
@@ -2,6 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { dump as dumpYAML, load as parseYAML } from "js-yaml";
|
|
3
3
|
import { writeCoordinateArtifact } from "../../extractors/symbol-coordinates.js";
|
|
4
4
|
import { type ManifestSymbolEntry, enrichSymbolCoordinates } from "../../extractors/symbols-coordinator.js";
|
|
5
|
+
import { COARSE_GRANULARITY_REASONS } from "../../public/symbol-granularity.js";
|
|
5
6
|
import { resolveSymbolsManifestPaths } from "../../utils/manifest-paths.js";
|
|
6
7
|
interface ManifestDeps {
|
|
7
8
|
dumpYAML: typeof dumpYAML;
|
|
@@ -13,11 +14,21 @@ interface ManifestDeps {
|
|
|
13
14
|
writeCoordinateArtifact: typeof writeCoordinateArtifact;
|
|
14
15
|
resolveSymbolsManifestPaths: typeof resolveSymbolsManifestPaths;
|
|
15
16
|
}
|
|
16
|
-
export declare const SYMBOLS_MANIFEST_COMMENT_BLOCK = "# symbols.yaml\n# AUTHORED fields (edit freely):\n# id, title, sourceFile, links, status, tags, owner, priority\n#
|
|
17
|
+
export declare const SYMBOLS_MANIFEST_COMMENT_BLOCK = "# symbols.yaml\n# AUTHORED fields (edit freely):\n# id, title, sourceFile, links, status, tags, owner, priority\n# Generated coordinates are stored separately in symbol-coordinates.yaml.\n# Run `kibi sync --refresh-symbol-coordinates` to refresh them.\n";
|
|
18
|
+
/**
|
|
19
|
+
* Coarse symbol anchors for which per-symbol coordinates are not expected.
|
|
20
|
+
*
|
|
21
|
+
* Test-suite, module-level-behavior, and config-artifact symbols represent a
|
|
22
|
+
* whole file or configuration unit, and `extractor-miss` explicitly documents
|
|
23
|
+
* that the extractor cannot locate a declaration. These entries legitimately
|
|
24
|
+
* carry no generated coordinates, so coordinate refresh counts them as
|
|
25
|
+
* unchanged instead of flagging them as failures.
|
|
26
|
+
*/
|
|
27
|
+
export { COARSE_GRANULARITY_REASONS };
|
|
28
|
+
export declare function isCoarseGranularityAnchor(entry: ManifestSymbolEntry): boolean;
|
|
17
29
|
export declare function refreshManifestCoordinates(manifestPath: string, workspaceRoot: string, deps?: Partial<ManifestDeps> & {
|
|
18
30
|
refreshSymbolCoordinates?: boolean;
|
|
19
31
|
}): Promise<void>;
|
|
20
32
|
export declare function hasAllGeneratedCoordinates(entry: ManifestSymbolEntry): boolean;
|
|
21
33
|
export declare function isEligibleForCoordinateRefresh(sourceFile: string | undefined, workspaceRoot: string, deps?: Partial<ManifestDeps>): boolean;
|
|
22
|
-
export {};
|
|
23
34
|
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/manifest.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAElE,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAEL,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,UAAU,YAAY;IACpB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,2BAA2B,EAAE,OAAO,2BAA2B,CAAC;CACjE;AAgBD,eAAO,MAAM,8BAA8B,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/manifest.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAElE,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAEL,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,0BAA0B,EAE3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,UAAU,YAAY;IACpB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,2BAA2B,EAAE,OAAO,2BAA2B,CAAC;CACjE;AAgBD,eAAO,MAAM,8BAA8B,oQAK1C,CAAC;AAwBF;;;;;;;;GAQG;AACH,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAG7E;AAED,wBAAsB,0BAA0B,CAE9C,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAAE,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAE,GACpE,OAAO,CAAC,IAAI,CAAC,CAuIf;AAED,wBAAgB,0BAA0B,CAExC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAOT;AAED,wBAAgB,8BAA8B,CAE5C,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3B,OAAO,CAUT"}
|
|
@@ -20,6 +20,7 @@ import * as path from "node:path";
|
|
|
20
20
|
import { dump as dumpYAML, load as parseYAML } from "js-yaml";
|
|
21
21
|
import { writeCoordinateArtifact, } from "../../extractors/symbol-coordinates.js";
|
|
22
22
|
import { enrichSymbolCoordinates, } from "../../extractors/symbols-coordinator.js";
|
|
23
|
+
import { COARSE_GRANULARITY_REASONS, isCoarseGranularityReason, } from "../../public/symbol-granularity.js";
|
|
23
24
|
import { resolveSymbolsManifestPaths } from "../../utils/manifest-paths.js";
|
|
24
25
|
function resolveDeps(overrides) {
|
|
25
26
|
return {
|
|
@@ -37,9 +38,8 @@ function resolveDeps(overrides) {
|
|
|
37
38
|
export const SYMBOLS_MANIFEST_COMMENT_BLOCK = `# symbols.yaml
|
|
38
39
|
# AUTHORED fields (edit freely):
|
|
39
40
|
# id, title, sourceFile, links, status, tags, owner, priority
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
# Run \`kibi sync\` or call the \`kb.symbols.refresh\` MCP tool to refresh coordinates.
|
|
41
|
+
# Generated coordinates are stored separately in symbol-coordinates.yaml.
|
|
42
|
+
# Run \`kibi sync --refresh-symbol-coordinates\` to refresh them.
|
|
43
43
|
`;
|
|
44
44
|
const SYMBOL_COORD_EXTENSIONS = new Set([
|
|
45
45
|
".ts",
|
|
@@ -57,6 +57,24 @@ const GENERATED_COORD_FIELDS = [
|
|
|
57
57
|
"sourceEndLine",
|
|
58
58
|
"sourceEndColumn",
|
|
59
59
|
];
|
|
60
|
+
const GENERATED_MANIFEST_FIELDS = new Set([
|
|
61
|
+
...GENERATED_COORD_FIELDS,
|
|
62
|
+
"coordinatesGeneratedAt",
|
|
63
|
+
]);
|
|
64
|
+
/**
|
|
65
|
+
* Coarse symbol anchors for which per-symbol coordinates are not expected.
|
|
66
|
+
*
|
|
67
|
+
* Test-suite, module-level-behavior, and config-artifact symbols represent a
|
|
68
|
+
* whole file or configuration unit, and `extractor-miss` explicitly documents
|
|
69
|
+
* that the extractor cannot locate a declaration. These entries legitimately
|
|
70
|
+
* carry no generated coordinates, so coordinate refresh counts them as
|
|
71
|
+
* unchanged instead of flagging them as failures.
|
|
72
|
+
*/
|
|
73
|
+
export { COARSE_GRANULARITY_REASONS };
|
|
74
|
+
export function isCoarseGranularityAnchor(entry) {
|
|
75
|
+
const reason = entry.granularity_reason;
|
|
76
|
+
return isCoarseGranularityReason(reason);
|
|
77
|
+
}
|
|
60
78
|
export async function refreshManifestCoordinates(
|
|
61
79
|
// implements REQ-003
|
|
62
80
|
manifestPath, workspaceRoot, deps) {
|
|
@@ -108,20 +126,9 @@ manifestPath, workspaceRoot, deps) {
|
|
|
108
126
|
console.warn(`Warning: Failed to write symbol-coordinates artifact: ${String(err)}`);
|
|
109
127
|
}
|
|
110
128
|
}
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const out = { ...current };
|
|
115
|
-
const originalHadGenerated = GENERATED_COORD_FIELDS.some((f) => prev[f] !== undefined);
|
|
116
|
-
if (originalHadGenerated) {
|
|
117
|
-
for (const field of GENERATED_COORD_FIELDS) {
|
|
118
|
-
delete out[field];
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// Ensure we never write coordinatesGeneratedAt
|
|
122
|
-
out.coordinatesGeneratedAt = undefined;
|
|
123
|
-
return out;
|
|
124
|
-
});
|
|
129
|
+
// Coordinates belong exclusively to the generated artifact. Always strip
|
|
130
|
+
// them from the authored manifest so consecutive refreshes are idempotent.
|
|
131
|
+
const strippedEnriched = enriched.map((current) => Object.fromEntries(Object.entries(current).filter(([field]) => !GENERATED_MANIFEST_FIELDS.has(field))));
|
|
125
132
|
parsed.symbols = strippedEnriched;
|
|
126
133
|
let refreshed = 0;
|
|
127
134
|
let failed = 0;
|
|
@@ -135,11 +142,13 @@ manifestPath, workspaceRoot, deps) {
|
|
|
135
142
|
refreshed++;
|
|
136
143
|
continue;
|
|
137
144
|
}
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
?
|
|
142
|
-
:
|
|
145
|
+
const coarseAnchor = isCoarseGranularityAnchor(current);
|
|
146
|
+
const eligible = !coarseAnchor &&
|
|
147
|
+
isEligibleForCoordinateRefresh(typeof current.sourceFile === "string"
|
|
148
|
+
? current.sourceFile
|
|
149
|
+
: typeof previous.sourceFile === "string"
|
|
150
|
+
? previous.sourceFile
|
|
151
|
+
: undefined, workspaceRoot, resolved);
|
|
143
152
|
if (eligible && !hasAllGeneratedCoordinates(current)) {
|
|
144
153
|
failed++;
|
|
145
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/persistence.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/persistence.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA8GrD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AAmCD,wBAAsB,eAAe,CAEnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CA8FvD;AA6BD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,kBAAkB,EAAE,qBAAqB,EAAE,GAC1C,OAAO,CAAC;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CA+K7D"}
|
|
@@ -36,9 +36,31 @@ const STRING_FIELDS = new Set([
|
|
|
36
36
|
"valid_from",
|
|
37
37
|
"valid_to",
|
|
38
38
|
"canonical_key",
|
|
39
|
+
"claim_key",
|
|
40
|
+
"claim_text",
|
|
41
|
+
"predicate_name",
|
|
42
|
+
"predicate_namespace",
|
|
43
|
+
"rule_hash",
|
|
44
|
+
"rule_schema_id",
|
|
45
|
+
"rule_name",
|
|
46
|
+
"semantic_key",
|
|
47
|
+
]);
|
|
48
|
+
const NUMBER_FIELDS = new Set([
|
|
49
|
+
"value_int",
|
|
50
|
+
"value_number",
|
|
51
|
+
"predicate_arity",
|
|
52
|
+
"claim_span_start",
|
|
53
|
+
"claim_span_end",
|
|
39
54
|
]);
|
|
40
|
-
const NUMBER_FIELDS = new Set(["value_int", "value_number"]);
|
|
41
55
|
const BOOLEAN_FIELDS = new Set(["value_bool", "closed_world"]);
|
|
56
|
+
const STRING_ARRAY_FIELDS = new Set([
|
|
57
|
+
"argument_names",
|
|
58
|
+
"argument_types",
|
|
59
|
+
"argument_descriptions",
|
|
60
|
+
"aliases",
|
|
61
|
+
"examples",
|
|
62
|
+
"predicate_args",
|
|
63
|
+
]);
|
|
42
64
|
function getEntityField(entity, field) {
|
|
43
65
|
// ExtractedEntity declares all fact fields as optional properties, so indexing
|
|
44
66
|
// via keyof is safe. The cast is confined to this single helper.
|
|
@@ -54,6 +76,10 @@ function serializeTypedFactFields(entity) {
|
|
|
54
76
|
fields.push(`${field}=${toPrologString(String(value))}`);
|
|
55
77
|
}
|
|
56
78
|
}
|
|
79
|
+
const ruleIr = getEntityField(entity, "rule_ir");
|
|
80
|
+
if (ruleIr !== undefined && ruleIr !== null) {
|
|
81
|
+
fields.push(`rule_ir=${toPrologString(JSON.stringify(ruleIr))}`);
|
|
82
|
+
}
|
|
57
83
|
// Atom fields (possibly unquoted if simple)
|
|
58
84
|
for (const field of ATOM_FIELDS) {
|
|
59
85
|
const value = getEntityField(entity, field);
|
|
@@ -78,6 +104,12 @@ function serializeTypedFactFields(entity) {
|
|
|
78
104
|
fields.push(`${field}=${value}`);
|
|
79
105
|
}
|
|
80
106
|
}
|
|
107
|
+
for (const field of STRING_ARRAY_FIELDS) {
|
|
108
|
+
const value = getEntityField(entity, field);
|
|
109
|
+
if (Array.isArray(value)) {
|
|
110
|
+
fields.push(`${field}=[${value.map((item) => toPrologString(String(item))).join(",")}]`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
81
113
|
return fields;
|
|
82
114
|
}
|
|
83
115
|
function isQueryFailedError(error) {
|
|
@@ -147,6 +179,12 @@ prolog, results, entityIds) {
|
|
|
147
179
|
props.push(`severity=${toPrologAtom(entity.severity)}`);
|
|
148
180
|
if (entity.text_ref)
|
|
149
181
|
props.push(`text_ref=${toPrologString(entity.text_ref)}`);
|
|
182
|
+
if (entity.type === "req" && entity.logic_claims) {
|
|
183
|
+
props.push(`logic_claims=[${entity.logic_claims.map(toPrologAtom).join(",")}]`);
|
|
184
|
+
}
|
|
185
|
+
if (entity.type === "req" && entity.semantic_inventory) {
|
|
186
|
+
props.push(`semantic_inventory=${toPrologString(JSON.stringify(entity.semantic_inventory))}`);
|
|
187
|
+
}
|
|
150
188
|
if (sourceFile)
|
|
151
189
|
props.push(`sourceFile=${toPrologString(sourceFile)}`);
|
|
152
190
|
// Add typed fact fields for fact entities
|