kibi-cli 0.19.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-errors.d.ts +3 -1
- package/dist/cli-errors.d.ts.map +1 -1
- package/dist/cli-errors.js +4 -1
- package/dist/cli-json-command.d.ts +1 -0
- package/dist/cli-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +13 -4
- package/dist/cli-operation-loader.d.ts.map +1 -1
- package/dist/cli-operation-loader.js +53 -20
- package/dist/cli-operation-metadata.d.ts +21 -8
- package/dist/cli-operation-metadata.d.ts.map +1 -1
- package/dist/cli-operation-metadata.js +27 -10
- package/dist/cli-protocol.d.ts.map +1 -1
- package/dist/cli-protocol.js +38 -8
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +14 -2
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +33 -4
- package/dist/cli-register-proof.d.ts +3 -0
- package/dist/cli-register-proof.d.ts.map +1 -0
- package/dist/cli-register-proof.js +103 -0
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +11 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -8
- package/dist/commands/aggregated-checks.d.ts +1 -2
- package/dist/commands/aggregated-checks.d.ts.map +1 -1
- package/dist/commands/aggregated-checks.js +14 -9
- package/dist/commands/branch.d.ts +37 -0
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +375 -40
- package/dist/commands/check.d.ts +14 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +209 -110
- package/dist/commands/coverage.d.ts +1 -0
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +6 -0
- package/dist/commands/discovery-shared.d.ts.map +1 -1
- package/dist/commands/discovery-shared.js +10 -19
- package/dist/commands/doctor.d.ts +26 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +291 -30
- package/dist/commands/engine.d.ts +12 -0
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +50 -7
- package/dist/commands/gc.d.ts +5 -2
- package/dist/commands/gc.d.ts.map +1 -1
- package/dist/commands/gc.js +140 -71
- package/dist/commands/github-init.d.ts +57 -0
- package/dist/commands/github-init.d.ts.map +1 -0
- package/dist/commands/github-init.js +314 -0
- package/dist/commands/init-helpers.d.ts +1 -1
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +109 -28
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +79 -24
- package/dist/commands/legacy-storage-migration.d.ts +54 -0
- package/dist/commands/legacy-storage-migration.d.ts.map +1 -0
- package/dist/commands/legacy-storage-migration.js +277 -0
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +249 -96
- package/dist/commands/proof-migrate-legacy.d.ts +7 -0
- package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
- package/dist/commands/proof-migrate-legacy.js +45 -0
- package/dist/commands/proof-prune.d.ts +8 -0
- package/dist/commands/proof-prune.d.ts.map +1 -0
- package/dist/commands/proof-prune.js +53 -0
- package/dist/commands/prove.d.ts +37 -0
- package/dist/commands/prove.d.ts.map +1 -0
- package/dist/commands/prove.js +470 -0
- package/dist/commands/report.d.ts +24 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +191 -0
- package/dist/commands/sync/cache.d.ts +16 -3
- package/dist/commands/sync/cache.d.ts.map +1 -1
- package/dist/commands/sync/cache.js +111 -4
- package/dist/commands/sync/discovery.d.ts +26 -2
- package/dist/commands/sync/discovery.d.ts.map +1 -1
- package/dist/commands/sync/discovery.js +204 -15
- package/dist/commands/sync/extraction.d.ts +8 -1
- package/dist/commands/sync/extraction.d.ts.map +1 -1
- package/dist/commands/sync/extraction.js +38 -4
- package/dist/commands/sync/manifest.d.ts +9 -6
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +195 -60
- package/dist/commands/sync/persistence.d.ts +4 -1
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +26 -12
- package/dist/commands/sync/staging.d.ts +1 -0
- package/dist/commands/sync/staging.d.ts.map +1 -1
- package/dist/commands/sync/staging.js +5 -2
- package/dist/commands/sync/untracked-targets.d.ts +24 -0
- package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
- package/dist/commands/sync/untracked-targets.js +108 -0
- package/dist/commands/sync.d.ts +17 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +375 -106
- package/dist/diagnostics.d.ts +1 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/engine-daemon.d.ts +3 -1
- package/dist/engine-daemon.d.ts.map +1 -1
- package/dist/engine-daemon.js +49 -20
- package/dist/engine.d.ts +34 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +578 -42
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +5 -6
- package/dist/extractors/manifest.d.ts +13 -1
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +97 -10
- package/dist/extractors/markdown.d.ts +5 -2
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +47 -12
- package/dist/extractors/playwright-cases.d.ts +24 -0
- package/dist/extractors/playwright-cases.d.ts.map +1 -0
- package/dist/extractors/playwright-cases.js +126 -0
- package/dist/extractors/relationships.d.ts +6 -0
- package/dist/extractors/relationships.d.ts.map +1 -1
- package/dist/extractors/relationships.js +2 -1
- package/dist/extractors/symbol-coordinates.d.ts +81 -3
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
- package/dist/extractors/symbol-coordinates.js +389 -51
- package/dist/extractors/symbols-coordinator.js +11 -1
- package/dist/extractors/symbols-ts.d.ts +1 -0
- package/dist/extractors/symbols-ts.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +142 -67
- package/dist/intent-search.d.ts +61 -0
- package/dist/intent-search.d.ts.map +1 -0
- package/dist/intent-search.js +437 -0
- package/dist/logic/ir.d.ts +1 -0
- package/dist/logic/ir.d.ts.map +1 -1
- package/dist/logic/ir.js +1 -1
- package/dist/operations/bootstrap/activation.d.ts +5 -0
- package/dist/operations/bootstrap/activation.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/activation.js +58 -33
- package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts.map +1 -1
- package/dist/operations/bootstrap/candidates.d.ts +4 -0
- package/dist/operations/{autopilot → bootstrap}/candidates.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/candidates.js +22 -8
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.js +46 -6
- package/dist/operations/{autopilot → bootstrap}/discovery.d.ts +1 -1
- package/dist/operations/bootstrap/discovery.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/discovery.js +21 -14
- package/dist/operations/bootstrap/generate.d.ts +9 -0
- package/dist/operations/bootstrap/generate.d.ts.map +1 -0
- package/dist/operations/bootstrap/generate.js +207 -0
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.js +4 -4
- package/dist/operations/{autopilot → bootstrap}/guidance.d.ts +3 -2
- package/dist/operations/bootstrap/guidance.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/guidance.js +3 -1
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.js +4 -3
- package/dist/operations/bootstrap/presentation.d.ts +15 -0
- package/dist/operations/bootstrap/presentation.d.ts.map +1 -0
- package/dist/operations/bootstrap/presentation.js +177 -0
- package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/types.d.ts +63 -21
- package/dist/operations/bootstrap/types.d.ts.map +1 -0
- package/dist/operations/bootstrap/types.js +25 -0
- package/dist/operations/modeling/model-requirement.d.ts +5 -0
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
- package/dist/operations/modeling/model-requirement.js +57 -63
- package/dist/operations/modeling/predicate-applicability.d.ts +16 -0
- package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-applicability.js +375 -0
- package/dist/operations/modeling/predicate-applyplan.d.ts +13 -2
- package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-applyplan.js +100 -3
- package/dist/operations/modeling/predicate-bindings.d.ts +6 -0
- package/dist/operations/modeling/predicate-bindings.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-bindings.js +122 -0
- package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-2.js +18 -2
- package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-3.js +17 -1
- package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-4.js +155 -0
- package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
- package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog-5.js +291 -0
- package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog.js +4 -0
- package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-inference-1.js +8 -0
- package/dist/operations/modeling/predicate-inference-launcher.d.ts +10 -0
- package/dist/operations/modeling/predicate-inference-launcher.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-inference-launcher.js +13 -0
- package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-inference.js +4 -0
- package/dist/operations/modeling/predicate-loader.d.ts +1 -0
- package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-loader.js +11 -3
- package/dist/operations/modeling/predicate-ranker.d.ts +8 -1
- package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-ranker.js +159 -24
- package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-score-3.js +6 -0
- package/dist/operations/modeling/predicate-types.d.ts +35 -1
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-usage-hints-3.js +40 -0
- package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
- package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
- package/dist/operations/modeling/predicate-utils.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-utils.js +2 -0
- package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +203 -32
- package/dist/operations/mutation/contradictions.d.ts +2 -1
- package/dist/operations/mutation/contradictions.d.ts.map +1 -1
- package/dist/operations/mutation/contradictions.js +26 -5
- package/dist/operations/mutation/delete.d.ts +3 -0
- package/dist/operations/mutation/delete.d.ts.map +1 -1
- package/dist/operations/mutation/delete.js +483 -19
- package/dist/operations/mutation/entity-projection.d.ts +11 -0
- package/dist/operations/mutation/entity-projection.d.ts.map +1 -0
- package/dist/operations/mutation/entity-projection.js +14 -0
- package/dist/operations/mutation/relationships.d.ts +11 -0
- package/dist/operations/mutation/relationships.d.ts.map +1 -1
- package/dist/operations/mutation/relationships.js +77 -5
- package/dist/operations/mutation/saga.d.ts +51 -0
- package/dist/operations/mutation/saga.d.ts.map +1 -0
- package/dist/operations/mutation/saga.js +67 -0
- package/dist/operations/mutation/serialization.d.ts.map +1 -1
- package/dist/operations/mutation/serialization.js +3 -1
- package/dist/operations/mutation/source-authoring.d.ts +65 -0
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
- package/dist/operations/mutation/source-authoring.js +576 -0
- package/dist/operations/mutation/strict-fact.d.ts +1 -0
- package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
- package/dist/operations/mutation/strict-fact.js +8 -5
- package/dist/operations/mutation/symbol-compiler-lock.d.ts +54 -0
- package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
- package/dist/operations/mutation/symbol-compiler-lock.js +337 -0
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +35 -4
- package/dist/operations/mutation/symbol-refresh.d.ts +19 -1
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +227 -63
- package/dist/operations/mutation/types.d.ts +57 -1
- package/dist/operations/mutation/types.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.d.ts +18 -2
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +403 -32
- package/dist/operations/mutation/validate-upsert.js +2 -2
- package/dist/operations/mutation/validation.d.ts.map +1 -1
- package/dist/operations/mutation/validation.js +47 -4
- package/dist/operations/mutation/warnings.d.ts +1 -0
- package/dist/operations/mutation/warnings.d.ts.map +1 -1
- package/dist/operations/mutation/warnings.js +7 -5
- package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
- package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
- package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
- package/dist/operations/planning/apply-plan.d.ts +19 -0
- package/dist/operations/planning/apply-plan.d.ts.map +1 -0
- package/dist/operations/planning/apply-plan.js +1514 -0
- package/dist/operations/planning/compile-intent.d.ts +108 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -0
- package/dist/operations/planning/compile-intent.js +618 -0
- package/dist/operations/proof/ingest-proof.d.ts +34 -0
- package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
- package/dist/operations/proof/ingest-proof.js +307 -0
- package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
- package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
- package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
- package/dist/operations/proof/prune-receipts.d.ts +35 -0
- package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
- package/dist/operations/proof/prune-receipts.js +91 -0
- package/dist/operations/proof/receipt-document.d.ts +29 -0
- package/dist/operations/proof/receipt-document.d.ts.map +1 -0
- package/dist/operations/proof/receipt-document.js +117 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +52 -28
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/clauses.js +35 -9
- package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/ingestion-boundary.js +7 -3
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +51 -0
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/predicate-rules-launcher.js +96 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
- package/dist/operations/semantic-advisor/types.d.ts +13 -5
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/prolog/codec.d.ts +13 -1
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +269 -153
- package/dist/prolog/error-terms.d.ts +47 -0
- package/dist/prolog/error-terms.d.ts.map +1 -0
- package/dist/prolog/error-terms.js +334 -0
- package/dist/prolog/janitor.d.ts +50 -0
- package/dist/prolog/janitor.d.ts.map +1 -0
- package/dist/prolog/janitor.js +154 -0
- package/dist/prolog/store-lock.d.ts +45 -0
- package/dist/prolog/store-lock.d.ts.map +1 -0
- package/dist/prolog/store-lock.js +195 -0
- package/dist/prolog.d.ts +7 -0
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +82 -25
- package/dist/proof/evaluate.d.ts +27 -0
- package/dist/proof/evaluate.d.ts.map +1 -0
- package/dist/proof/evaluate.js +151 -0
- package/dist/proof/inspect.d.ts +12 -0
- package/dist/proof/inspect.d.ts.map +1 -0
- package/dist/proof/inspect.js +236 -0
- package/dist/proof/integrations.d.ts +35 -0
- package/dist/proof/integrations.d.ts.map +1 -0
- package/dist/proof/integrations.js +123 -0
- package/dist/proof/producers/junit-adapter.d.ts +26 -0
- package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
- package/dist/proof/producers/junit-adapter.js +186 -0
- package/dist/proof/producers/playwright-case-id.d.ts +8 -0
- package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
- package/dist/proof/producers/playwright-case-id.js +25 -0
- package/dist/proof/producers/playwright-reporter.d.ts +27 -0
- package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
- package/dist/proof/producers/playwright-reporter.js +138 -0
- package/dist/proof/producers/tap-adapter.d.ts +10 -0
- package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
- package/dist/proof/producers/tap-adapter.js +200 -0
- package/dist/proof/receipt-outcome.d.ts +2 -0
- package/dist/proof/receipt-outcome.d.ts.map +1 -0
- package/dist/proof/receipt-outcome.js +1 -0
- package/dist/public/branch-resolver.d.ts +1 -0
- package/dist/public/branch-resolver.d.ts.map +1 -1
- package/dist/public/branch-resolver.js +1 -0
- package/dist/public/check-types.d.ts +2 -2
- package/dist/public/check-types.d.ts.map +1 -1
- package/dist/public/check-types.js +16 -16
- package/dist/public/diagnostic-usage.d.ts.map +1 -1
- package/dist/public/diagnostic-usage.js +74 -6
- package/dist/public/distribution-parity.d.ts +7 -1
- package/dist/public/distribution-parity.d.ts.map +1 -1
- package/dist/public/distribution-parity.js +15 -9
- package/dist/public/ignore-policy.d.ts.map +1 -1
- package/dist/public/ignore-policy.js +16 -4
- package/dist/public/impact/coverage-depth-quality.d.ts +7 -1
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +22 -4
- package/dist/public/impact/diagnostics.d.ts.map +1 -1
- package/dist/public/impact/diagnostics.js +2 -2
- package/dist/public/impact/diff-meaning.d.ts +1 -0
- package/dist/public/impact/diff-meaning.d.ts.map +1 -1
- package/dist/public/impact/diff-meaning.js +5 -2
- package/dist/public/impact/full-kb-quality.d.ts +7 -2
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +364 -39
- package/dist/public/impact/manifest.d.ts.map +1 -1
- package/dist/public/impact/manifest.js +2 -5
- package/dist/public/operational-artifacts.d.ts.map +1 -1
- package/dist/public/operational-artifacts.js +7 -1
- package/dist/public/operations/catalog.d.ts +900 -34
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/catalog.js +130 -6
- package/dist/public/operations/check-executor.d.ts +2 -2
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +68 -13
- package/dist/public/operations/check-format-shared.d.ts +3 -0
- package/dist/public/operations/check-format-shared.d.ts.map +1 -1
- package/dist/public/operations/check-format-shared.js +3 -0
- package/dist/public/operations/check-helpers.d.ts +27 -2
- package/dist/public/operations/check-helpers.d.ts.map +1 -1
- package/dist/public/operations/check-helpers.js +62 -26
- package/dist/public/operations/contracts.d.ts +18 -0
- package/dist/public/operations/contracts.d.ts.map +1 -0
- package/dist/public/operations/contracts.js +334 -0
- package/dist/public/operations/discovery-entities.d.ts +3 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -1
- package/dist/public/operations/discovery-entities.js +4 -0
- package/dist/public/operations/discovery-executors.d.ts +43 -7
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +216 -13
- package/dist/public/operations/index.d.ts +9 -4
- package/dist/public/operations/index.d.ts.map +1 -1
- package/dist/public/operations/index.js +8 -3
- package/dist/public/operations/migration-plan.d.ts +102 -0
- package/dist/public/operations/migration-plan.d.ts.map +1 -0
- package/dist/public/operations/migration-plan.js +539 -0
- package/dist/public/operations/node-ports.d.ts.map +1 -1
- package/dist/public/operations/node-ports.js +71 -11
- package/dist/public/operations/prolog-json.d.ts +14 -0
- package/dist/public/operations/prolog-json.d.ts.map +1 -1
- package/dist/public/operations/prolog-json.js +44 -5
- package/dist/public/operations/repair-plan.d.ts +3 -3
- package/dist/public/operations/repair-plan.d.ts.map +1 -1
- package/dist/public/operations/repair-plan.js +49 -18
- package/dist/public/operations/result-envelope.d.ts +14 -0
- package/dist/public/operations/result-envelope.d.ts.map +1 -0
- package/dist/public/operations/result-envelope.js +106 -0
- package/dist/public/operations/runtime-types.d.ts +102 -7
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- package/dist/public/operations/source-relationship-parity.d.ts +13 -0
- package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
- package/dist/public/operations/source-relationship-parity.js +162 -0
- package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
- package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
- package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
- package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
- package/dist/public/operations/specs/check-rules.generated.js +34 -0
- package/dist/public/operations/specs/check.d.ts +9 -4
- package/dist/public/operations/specs/check.d.ts.map +1 -1
- package/dist/public/operations/specs/check.js +10 -21
- package/dist/public/operations/specs/discovery.d.ts +87 -3
- package/dist/public/operations/specs/discovery.d.ts.map +1 -1
- package/dist/public/operations/specs/discovery.js +53 -3
- package/dist/public/operations/specs/modeling.d.ts +3 -3
- package/dist/public/operations/specs/modeling.js +3 -3
- package/dist/public/operations/specs/mutation-schemas.d.ts +251 -14
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +16 -6
- package/dist/public/operations/specs/mutation.d.ts +42 -2
- package/dist/public/operations/specs/mutation.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation.js +26 -2
- package/dist/public/operations/specs/planning.d.ts +279 -0
- package/dist/public/operations/specs/planning.d.ts.map +1 -0
- package/dist/public/operations/specs/planning.js +197 -0
- package/dist/public/operations/specs/proof.d.ts +212 -0
- package/dist/public/operations/specs/proof.d.ts.map +1 -0
- package/dist/public/operations/specs/proof.js +30 -0
- package/dist/public/operations/specs/reporting.d.ts +23 -1
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +156 -11
- package/dist/public/operations/specs/upsert.d.ts +265 -14
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/specs/upsert.js +9 -0
- package/dist/public/operations/symbol-repair-plan.d.ts +22 -0
- package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
- package/dist/public/operations/symbol-repair-plan.js +238 -0
- package/dist/public/operations/types.d.ts +52 -1
- package/dist/public/operations/types.d.ts.map +1 -1
- package/dist/public/proof-fingerprint.d.ts +54 -0
- package/dist/public/proof-fingerprint.d.ts.map +1 -0
- package/dist/public/proof-fingerprint.js +141 -0
- package/dist/public/proof-protocol.d.ts +354 -0
- package/dist/public/proof-protocol.d.ts.map +1 -0
- package/dist/public/proof-protocol.js +454 -0
- package/dist/public/proof-receipt.d.ts +279 -0
- package/dist/public/proof-receipt.d.ts.map +1 -0
- package/dist/public/proof-receipt.js +377 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +22 -6
- package/dist/public/skills/kibi-bootstrap/SKILL.md +58 -0
- package/dist/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
- package/dist/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
- package/dist/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
- package/dist/public/skills/kibi-freshness/SKILL.md +39 -9
- package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
- package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
- package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
- package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
- package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
- package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
- package/dist/public/skills/kibi-usage/SKILL.md +136 -231
- package/dist/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
- package/dist/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
- package/dist/public/skills/kibi-usage/resources/operation-access.md +36 -38
- package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
- package/dist/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
- package/dist/public/skills/kibi-usage/resources/source-authoring.md +31 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +57 -4
- package/dist/public/symbol-granularity.d.ts +3 -14
- package/dist/public/symbol-granularity.d.ts.map +1 -1
- package/dist/public/symbol-granularity.generated.d.ts +16 -0
- package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
- package/dist/public/symbol-granularity.generated.js +20 -0
- package/dist/public/symbol-granularity.js +6 -46
- package/dist/public/telemetry-acceptance.d.ts +3 -70
- package/dist/public/telemetry-acceptance.d.ts.map +1 -1
- package/dist/public/telemetry-acceptance.js +11 -2
- package/dist/public/telemetry-remediation.js +1 -1
- package/dist/relationships/shards.d.ts +16 -0
- package/dist/relationships/shards.d.ts.map +1 -1
- package/dist/relationships/shards.js +87 -2
- package/dist/report/brand.d.ts +19 -0
- package/dist/report/brand.d.ts.map +1 -0
- package/dist/report/brand.js +112 -0
- package/dist/report/html-report.css +282 -0
- package/dist/report/html-report.d.ts +21 -0
- package/dist/report/html-report.d.ts.map +1 -0
- package/dist/report/html-report.js +700 -0
- package/dist/report/relative-time.d.ts +4 -0
- package/dist/report/relative-time.d.ts.map +1 -0
- package/dist/report/relative-time.js +46 -0
- package/dist/report/report-view.d.ts +17 -0
- package/dist/report/report-view.d.ts.map +1 -0
- package/dist/report/report-view.js +33 -0
- package/dist/report/repository.d.ts +35 -0
- package/dist/report/repository.d.ts.map +1 -0
- package/dist/report/repository.js +151 -0
- package/dist/runtime/cli-runtime.d.ts +2 -0
- package/dist/runtime/cli-runtime.d.ts.map +1 -1
- package/dist/runtime/cli-runtime.js +90 -23
- package/dist/schemas/entity.schema.json +1254 -239
- package/dist/search-ranking.d.ts +1 -0
- package/dist/search-ranking.d.ts.map +1 -1
- package/dist/search-ranking.js +3 -0
- package/dist/traceability/evidence-model.d.ts +30 -2
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- package/dist/traceability/evidence-model.js +2 -2
- package/dist/traceability/git-staged.d.ts +20 -0
- package/dist/traceability/git-staged.d.ts.map +1 -1
- package/dist/traceability/git-staged.js +156 -37
- package/dist/traceability/markdown-validate.d.ts.map +1 -1
- package/dist/traceability/markdown-validate.js +12 -7
- package/dist/traceability/staged-diagnostics.d.ts +7 -0
- package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
- package/dist/traceability/staged-diagnostics.js +78 -7
- package/dist/traceability/staged-file-coverage.d.ts +33 -0
- package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
- package/dist/traceability/staged-file-coverage.js +284 -0
- package/dist/traceability/staged-impact-contract.d.ts +3 -3
- package/dist/traceability/staged-impact-contract.d.ts.map +1 -1
- package/dist/traceability/staged-impact-contract.js +12 -40
- package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
- package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +142 -26
- package/dist/traceability/symbol-extract.d.ts +5 -0
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +1 -1
- package/dist/traceability/temp-kb.d.ts +2 -0
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +14 -2
- package/dist/types/entities.d.ts +5 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/branch-resolver.d.ts +25 -10
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +124 -38
- package/dist/utils/branch-store-locator.d.ts +23 -0
- package/dist/utils/branch-store-locator.d.ts.map +1 -0
- package/dist/utils/branch-store-locator.js +90 -0
- package/dist/utils/branch-store.d.ts +21 -0
- package/dist/utils/branch-store.d.ts.map +1 -0
- package/dist/utils/branch-store.js +157 -0
- package/dist/utils/config.d.ts +39 -37
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +107 -119
- package/dist/utils/kb-manifest.d.ts +35 -0
- package/dist/utils/kb-manifest.d.ts.map +1 -0
- package/dist/utils/kb-manifest.js +154 -0
- package/dist/utils/kb-paths.d.ts +54 -0
- package/dist/utils/kb-paths.d.ts.map +1 -0
- package/dist/utils/kb-paths.js +125 -0
- package/dist/utils/manifest-paths.d.ts +4 -4
- package/dist/utils/manifest-paths.d.ts.map +1 -1
- package/dist/utils/manifest-paths.js +8 -56
- package/dist/utils/rule-registry.d.ts +42 -24
- package/dist/utils/rule-registry.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.d.ts +97 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -0
- package/dist/utils/rule-registry.generated.js +125 -0
- package/dist/utils/rule-registry.js +52 -148
- package/dist/utils/schema-version.d.ts +5 -5
- package/dist/utils/schema-version.d.ts.map +1 -1
- package/dist/utils/schema-version.js +26 -6
- package/dist/utils/strict-modeling.d.ts +1 -4
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +8 -9
- package/package.json +47 -11
- package/schema/config.json +2 -2
- package/schema/manifest.json +26 -0
- package/src/public/branch-resolver.ts +1 -0
- package/src/public/check-types.ts +22 -19
- package/src/public/diagnostic-usage.ts +84 -6
- package/src/public/distribution-parity.ts +17 -9
- package/src/public/ignore-policy.ts +16 -10
- package/src/public/impact/coverage-depth-quality.ts +37 -1
- package/src/public/impact/diagnostics.ts +2 -1
- package/src/public/impact/diff-meaning.ts +11 -4
- package/src/public/impact/full-kb-quality.ts +545 -41
- package/src/public/impact/manifest.ts +2 -4
- package/src/public/operational-artifacts.ts +9 -1
- package/src/public/operations/catalog.ts +153 -10
- package/src/public/operations/check-executor.ts +98 -15
- package/src/public/operations/check-format-shared.ts +6 -0
- package/src/public/operations/check-helpers.ts +74 -35
- package/src/public/operations/contracts.ts +382 -0
- package/src/public/operations/discovery-entities.ts +7 -0
- package/src/public/operations/discovery-executors.ts +315 -25
- package/src/public/operations/index.ts +9 -4
- package/src/public/operations/migration-plan.ts +747 -0
- package/src/public/operations/node-ports.ts +87 -13
- package/src/public/operations/prolog-json.ts +60 -5
- package/src/public/operations/repair-plan.ts +60 -22
- package/src/public/operations/result-envelope.ts +141 -0
- package/src/public/operations/runtime-types.ts +96 -5
- package/src/public/operations/source-relationship-parity.ts +226 -0
- package/src/public/operations/specs/{autopilot.ts → bootstrap.ts} +17 -16
- package/src/public/operations/specs/check-rules.generated.ts +37 -0
- package/src/public/operations/specs/check.ts +14 -22
- package/src/public/operations/specs/discovery.ts +57 -3
- package/src/public/operations/specs/modeling.ts +3 -3
- package/src/public/operations/specs/mutation-schemas.ts +24 -6
- package/src/public/operations/specs/mutation.ts +27 -2
- package/src/public/operations/specs/planning.ts +241 -0
- package/src/public/operations/specs/proof.ts +43 -0
- package/src/public/operations/specs/reporting.ts +193 -12
- package/src/public/operations/specs/upsert.ts +10 -0
- package/src/public/operations/symbol-repair-plan.ts +324 -0
- package/src/public/operations/types.ts +62 -1
- package/src/public/proof-fingerprint.ts +216 -0
- package/src/public/proof-protocol-types.d.ts +96 -0
- package/src/public/proof-protocol.ts +589 -0
- package/src/public/proof-receipt.ts +499 -0
- package/src/public/schemas/entity.ts +27 -6
- package/src/public/skills/kibi-bootstrap/SKILL.md +58 -0
- package/src/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
- package/src/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
- package/src/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
- package/src/public/skills/kibi-freshness/SKILL.md +39 -9
- package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
- package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
- package/src/public/skills/kibi-traceability/SKILL.md +47 -47
- package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
- package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
- package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
- package/src/public/skills/kibi-usage/SKILL.md +136 -231
- package/src/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
- package/src/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
- package/src/public/skills/kibi-usage/resources/operation-access.md +36 -38
- package/src/public/skills/kibi-usage/resources/proof.md +105 -0
- package/src/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
- package/src/public/skills/kibi-usage/resources/source-authoring.md +31 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +57 -4
- package/src/public/symbol-granularity.generated.ts +41 -0
- package/src/public/symbol-granularity.ts +35 -59
- package/src/public/telemetry-acceptance-types.d.ts +98 -0
- package/src/public/telemetry-acceptance.ts +30 -93
- package/src/public/telemetry-remediation.ts +1 -1
- package/src/schemas/entity.schema.json +1254 -239
- package/templates/github/kibi-badge.yml +86 -0
- package/templates/github/kibi-report.yml +84 -0
- package/dist/operations/autopilot/activation.d.ts +0 -4
- package/dist/operations/autopilot/activation.d.ts.map +0 -1
- package/dist/operations/autopilot/candidates.d.ts +0 -4
- package/dist/operations/autopilot/discovery.d.ts.map +0 -1
- package/dist/operations/autopilot/generate.d.ts +0 -8
- package/dist/operations/autopilot/generate.d.ts.map +0 -1
- package/dist/operations/autopilot/generate.js +0 -112
- package/dist/operations/autopilot/guidance.d.ts.map +0 -1
- package/dist/operations/autopilot/presentation.d.ts +0 -13
- package/dist/operations/autopilot/presentation.d.ts.map +0 -1
- package/dist/operations/autopilot/presentation.js +0 -91
- package/dist/operations/autopilot/types.d.ts.map +0 -1
- package/dist/operations/autopilot/types.js +0 -8
- package/dist/public/operations/specs/autopilot.d.ts.map +0 -1
- package/dist/public/skills/init-kibi/SKILL.md +0 -62
- package/dist/public/verification-receipt.d.ts +0 -75
- package/dist/public/verification-receipt.d.ts.map +0 -1
- package/dist/public/verification-receipt.js +0 -129
- package/src/public/skills/init-kibi/SKILL.md +0 -62
- package/src/public/verification-receipt.ts +0 -170
- /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts +0 -0
- /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.js +0 -0
- /package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts +0 -0
- /package/dist/operations/{autopilot → bootstrap}/requirement-claims.js +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
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 { existsSync, rmSync } from "node:fs";
|
|
19
|
+
import { readFileSync } from "node:fs";
|
|
20
|
+
import { dirname, join } from "node:path";
|
|
21
|
+
import { escapeAtom } from "./codec.js";
|
|
22
|
+
/**
|
|
23
|
+
* Stewardship for the branch-store lock.
|
|
24
|
+
*
|
|
25
|
+
* rdf_persistency holds the store lock while an engine is attached, and the
|
|
26
|
+
* ownership journal written by kb.pl records who the holder is. This module
|
|
27
|
+
* classifies a recorded holder (alive, dead, unknown) and breaks the lock
|
|
28
|
+
* only when the holder is provably dead — a crash, a kill, or a removed
|
|
29
|
+
* worktree then self-heals on the next attach instead of wedging the store
|
|
30
|
+
* behind an opaque "Access denied or KB locked".
|
|
31
|
+
*/
|
|
32
|
+
// implements REQ-core-journaled-engine-persistence
|
|
33
|
+
let cachedBootId;
|
|
34
|
+
/** Linux boot id; guards against PID reuse across reboots. Null elsewhere. */
|
|
35
|
+
export function currentBootId() {
|
|
36
|
+
if (cachedBootId !== undefined)
|
|
37
|
+
return cachedBootId;
|
|
38
|
+
if (process.platform !== "linux") {
|
|
39
|
+
cachedBootId = null;
|
|
40
|
+
return cachedBootId;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const raw = readFileSync("/proc/sys/kernel/random/boot_id", "utf8");
|
|
44
|
+
cachedBootId = raw.trim();
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
cachedBootId = null;
|
|
48
|
+
}
|
|
49
|
+
return cachedBootId;
|
|
50
|
+
}
|
|
51
|
+
export function isProcessAlive(pid) {
|
|
52
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
53
|
+
return false;
|
|
54
|
+
try {
|
|
55
|
+
process.kill(pid, 0);
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const code = error?.code;
|
|
60
|
+
// EPERM means the process exists but is owned by another user.
|
|
61
|
+
return code === "EPERM";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export function classifyStoreLockHolder(owner) {
|
|
65
|
+
if (owner === null || typeof owner.pid !== "number")
|
|
66
|
+
return "unknown";
|
|
67
|
+
if (owner.pid === process.pid)
|
|
68
|
+
return "self";
|
|
69
|
+
const alive = isProcessAlive(owner.pid);
|
|
70
|
+
if (!alive)
|
|
71
|
+
return "dead";
|
|
72
|
+
const bootId = currentBootId();
|
|
73
|
+
// A recorded boot id that differs from ours means the holder ran before a
|
|
74
|
+
// reboot: the PID cannot be trusted as a sign of life.
|
|
75
|
+
if (bootId !== null && owner.bootId !== undefined && owner.bootId !== "") {
|
|
76
|
+
return owner.bootId === bootId ? "alive" : "dead";
|
|
77
|
+
}
|
|
78
|
+
return "alive";
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Read an ownership journal from a branch store. Older builds kept the
|
|
82
|
+
* journal beside the rdf lock; the store-root location wins when both exist.
|
|
83
|
+
* Shared by the janitor sweep and the status stale-reason surfacing so both
|
|
84
|
+
* classify the same evidence with the same boot-id-aware semantics.
|
|
85
|
+
*/
|
|
86
|
+
// implements REQ-core-journaled-engine-persistence
|
|
87
|
+
export function readStoreLockOwner(storePath) {
|
|
88
|
+
const candidates = [
|
|
89
|
+
join(storePath, ".kibi-lock-owner.json"),
|
|
90
|
+
join(storePath, "rdf", ".kibi-lock-owner.json"),
|
|
91
|
+
];
|
|
92
|
+
for (const journalPath of candidates) {
|
|
93
|
+
if (!existsSync(journalPath))
|
|
94
|
+
continue;
|
|
95
|
+
let parsed;
|
|
96
|
+
try {
|
|
97
|
+
parsed = JSON.parse(readFileSync(journalPath, "utf8"));
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (parsed === null || typeof parsed !== "object")
|
|
103
|
+
continue;
|
|
104
|
+
const record = parsed;
|
|
105
|
+
const owner = {
|
|
106
|
+
...(typeof record.pid === "number" ? { pid: record.pid } : {}),
|
|
107
|
+
...(typeof record.workspaceRoot === "string"
|
|
108
|
+
? { workspaceRoot: record.workspaceRoot }
|
|
109
|
+
: {}),
|
|
110
|
+
...(typeof record.bootId === "string" ? { bootId: record.bootId } : {}),
|
|
111
|
+
...(typeof record.startedAt === "string"
|
|
112
|
+
? { startedAt: record.startedAt }
|
|
113
|
+
: {}),
|
|
114
|
+
};
|
|
115
|
+
return { owner, journalPath };
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Remove the stale lock artifacts so a fresh attach can take the store.
|
|
121
|
+
* The rdf lock lives inside the persistency directory; the ownership journal
|
|
122
|
+
* lives at the branch-store root (older builds kept it beside the lock).
|
|
123
|
+
*/
|
|
124
|
+
export function breakStoreLock(rdfDirectory) {
|
|
125
|
+
const candidates = [
|
|
126
|
+
join(rdfDirectory, "lock"),
|
|
127
|
+
join(rdfDirectory, ".kibi-lock-owner.json"),
|
|
128
|
+
join(dirname(rdfDirectory), ".kibi-lock-owner.json"),
|
|
129
|
+
];
|
|
130
|
+
for (const candidate of candidates) {
|
|
131
|
+
if (existsSync(candidate)) {
|
|
132
|
+
rmSync(candidate, { force: true });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Decide whether a store-locked failure may be auto-healed. Only a provably
|
|
138
|
+
* dead holder (or a holder from a previous boot) is broken; live or unknown
|
|
139
|
+
* holders are surfaced so the operator can close the real session.
|
|
140
|
+
*/
|
|
141
|
+
export function decideStoreLockTakeover(owner) {
|
|
142
|
+
const state = classifyStoreLockHolder(owner);
|
|
143
|
+
switch (state) {
|
|
144
|
+
case "dead":
|
|
145
|
+
return {
|
|
146
|
+
action: "break",
|
|
147
|
+
reason: `recorded holder pid ${owner?.pid ?? "?"} is no longer running`,
|
|
148
|
+
};
|
|
149
|
+
case "unknown":
|
|
150
|
+
return {
|
|
151
|
+
action: "surface",
|
|
152
|
+
reason: "no ownership journal; the holder cannot be verified",
|
|
153
|
+
};
|
|
154
|
+
case "self":
|
|
155
|
+
case "alive":
|
|
156
|
+
return {
|
|
157
|
+
action: "surface",
|
|
158
|
+
reason: `holder pid ${owner?.pid ?? "?"} is still running${owner?.workspaceRoot !== undefined ? ` for ${owner.workspaceRoot}` : ""}`,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* A store-locked attach failure with a provably dead holder (crashed or
|
|
164
|
+
* killed engine, removed worktree) is safe to auto-heal: break the stale
|
|
165
|
+
* lock artifacts and retry once on the same port. Live or unverifiable
|
|
166
|
+
* holders are surfaced with the holder identity and remediation. Shared by
|
|
167
|
+
* the CLI runtime and the engine daemon attach paths.
|
|
168
|
+
*/
|
|
169
|
+
// implements REQ-core-journaled-engine-persistence
|
|
170
|
+
export async function retryAttachAfterBreakingStaleLock(prolog, kbPath, failed) {
|
|
171
|
+
const record = failed.errorRecord;
|
|
172
|
+
const storeLocked = record?.storeLocked;
|
|
173
|
+
if (storeLocked === undefined)
|
|
174
|
+
return failed;
|
|
175
|
+
const decision = decideStoreLockTakeover(storeLocked.owner);
|
|
176
|
+
if (decision.action !== "break") {
|
|
177
|
+
const holderSummary = storeLocked.owner === null
|
|
178
|
+
? decision.reason
|
|
179
|
+
: `pid ${storeLocked.owner.pid ?? "?"} (${decision.reason})`;
|
|
180
|
+
return {
|
|
181
|
+
...failed,
|
|
182
|
+
error: `${failed.error}
|
|
183
|
+
Store lock holder: ${holderSummary}. Close that session, or run 'kibi engine stop' for its workspace, then retry.`,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const lockDirectory = storeLocked.lockDirectory !== ""
|
|
187
|
+
? storeLocked.lockDirectory
|
|
188
|
+
: join(kbPath, "rdf");
|
|
189
|
+
breakStoreLock(lockDirectory);
|
|
190
|
+
const retried = await prolog.query(`kb_attach('${escapeAtom(kbPath)}')`);
|
|
191
|
+
if (retried.success) {
|
|
192
|
+
console.warn(`[KIBI] Broke a stale branch-store lock (${decision.reason}) and reattached.`);
|
|
193
|
+
}
|
|
194
|
+
return retried;
|
|
195
|
+
}
|
package/dist/prolog.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type PrologErrorRecord } from "./prolog/error-terms.js";
|
|
1
2
|
export declare function resolveKbPlPath(): string;
|
|
2
3
|
export interface PrologOptions {
|
|
3
4
|
swiplPath?: string;
|
|
@@ -13,7 +14,10 @@ export interface QueryResult {
|
|
|
13
14
|
success: boolean;
|
|
14
15
|
bindings: Record<string, string>;
|
|
15
16
|
error?: string;
|
|
17
|
+
errorRecord?: PrologErrorRecord;
|
|
16
18
|
}
|
|
19
|
+
export declare function registerProcessExitOnce(current: (() => void) | null, handler: () => void, on?: (event: "exit", listener: () => void) => void): () => void;
|
|
20
|
+
export declare function bindProcessExitHandler(current: (() => void) | null, terminate: () => void | Promise<void>, on?: (event: "exit", listener: () => void) => void): () => void;
|
|
17
21
|
export declare class PrologProcess {
|
|
18
22
|
private process;
|
|
19
23
|
private swiplPath;
|
|
@@ -31,6 +35,7 @@ export declare class PrologProcess {
|
|
|
31
35
|
private attachedKbPath;
|
|
32
36
|
private onProcessExit;
|
|
33
37
|
constructor(options?: PrologOptions);
|
|
38
|
+
attachProcessExitHandler(on?: (event: "exit", listener: () => void) => void): void;
|
|
34
39
|
start(): Promise<void>;
|
|
35
40
|
private waitForReady;
|
|
36
41
|
query(goal: string | string[]): Promise<QueryResult>;
|
|
@@ -53,6 +58,8 @@ export declare class PrologProcess {
|
|
|
53
58
|
private terminateProcessTree;
|
|
54
59
|
private isProcessUsable;
|
|
55
60
|
private extractBindings;
|
|
61
|
+
/** Prefer the structured error term; fall back to text heuristics. */
|
|
62
|
+
private classifyErrorOutput;
|
|
56
63
|
private translateError;
|
|
57
64
|
isRunning(): boolean;
|
|
58
65
|
getPid(): number;
|
package/dist/prolog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prolog.d.ts","sourceRoot":"","sources":["../src/prolog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prolog.d.ts","sourceRoot":"","sources":["../src/prolog.ts"],"names":[],"mappings":"AAwBA,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,yBAAyB,CAAC;AA2BjC,wBAAgB,eAAe,IAAI,MAAM,CAsCxC;AACD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAGD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,EAC5B,OAAO,EAAE,MAAM,IAAI,EACnB,EAAE,GAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAChB,GAC5B,MAAM,IAAI,CAIZ;AAGD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,EAC5B,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACrC,EAAE,GAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAChB,GAC5B,MAAM,IAAI,CAQZ;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,aAAa,CAA6B;gBAEtC,OAAO,GAAE,aAAkB;IAUvC,wBAAwB,CACtB,EAAE,GAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAChB,GAC5B,IAAI;IAQD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAiDd,YAAY;IAgDpB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAsN1D,wEAAwE;IAClE,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAIhE,eAAe,IAAI,IAAI;IAIvB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;YAIZ,YAAY;IA2C1B,OAAO,CAAC,WAAW;IAgOnB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;YAkBX,oBAAoB;IAyBlC,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAmCvB,sEAAsE;IACtE,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,cAAc;IA+EtB,SAAS,IAAI,OAAO;IASpB,MAAM,IAAI,MAAM;IAIV,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAkCjC"}
|
package/dist/prolog.js
CHANGED
|
@@ -21,6 +21,7 @@ import { createRequire } from "node:module";
|
|
|
21
21
|
import path from "node:path";
|
|
22
22
|
import { fileURLToPath } from "node:url";
|
|
23
23
|
import { getKbPlPathOverride, isPrologDebugEnabled } from "./env.js";
|
|
24
|
+
import { extractPrologErrorRecord, } from "./prolog/error-terms.js";
|
|
24
25
|
const importMetaDir = path.dirname(fileURLToPath(import.meta.url));
|
|
25
26
|
const PROLOG_OUTPUT_MAX_BUFFER_BYTES = 8 * 1024 * 1024;
|
|
26
27
|
const PROLOG_OUTPUT_OVERFLOW_ERROR = "Query exceeded bounded Prolog output capacity (ENOBUFS); narrow the operation or reduce stored entity size";
|
|
@@ -78,6 +79,19 @@ export function resolveKbPlPath() {
|
|
|
78
79
|
throw new Error("Unable to resolve kb.pl. Expected kibi-core to be installed (node_modules) " +
|
|
79
80
|
"or to be running inside the monorepo checkout.");
|
|
80
81
|
}
|
|
82
|
+
// implements REQ-core-prolog-process-management
|
|
83
|
+
export function registerProcessExitOnce(current, handler, on = (event, listener) => process.on(event, listener)) {
|
|
84
|
+
if (current)
|
|
85
|
+
return current;
|
|
86
|
+
on("exit", handler);
|
|
87
|
+
return handler;
|
|
88
|
+
}
|
|
89
|
+
// implements REQ-core-prolog-process-management
|
|
90
|
+
export function bindProcessExitHandler(current, terminate, on = (event, listener) => process.on(event, listener)) {
|
|
91
|
+
return registerProcessExitOnce(current, () => {
|
|
92
|
+
void terminate();
|
|
93
|
+
}, on);
|
|
94
|
+
}
|
|
81
95
|
export class PrologProcess {
|
|
82
96
|
process = null;
|
|
83
97
|
swiplPath;
|
|
@@ -102,6 +116,10 @@ export class PrologProcess {
|
|
|
102
116
|
(process.env.NODE_ENV === "test" &&
|
|
103
117
|
typeof globalThis.Bun !== "undefined");
|
|
104
118
|
}
|
|
119
|
+
// implements REQ-core-prolog-process-management
|
|
120
|
+
attachProcessExitHandler(on = (event, listener) => process.on(event, listener)) {
|
|
121
|
+
this.onProcessExit = bindProcessExitHandler(this.onProcessExit, () => this.terminate(), on);
|
|
122
|
+
}
|
|
105
123
|
async start() {
|
|
106
124
|
if (!existsSync(this.swiplPath) && this.swiplPath !== "swipl") {
|
|
107
125
|
throw new Error(`SWI-Prolog not found at ${this.swiplPath}. Please install SWI-Prolog or check your PATH.`);
|
|
@@ -131,12 +149,7 @@ export class PrologProcess {
|
|
|
131
149
|
this.appendErrorChunk(chunk);
|
|
132
150
|
});
|
|
133
151
|
this.process.stdin.write("true.\n");
|
|
134
|
-
|
|
135
|
-
this.onProcessExit = () => {
|
|
136
|
-
void this.terminate();
|
|
137
|
-
};
|
|
138
|
-
process.on("exit", this.onProcessExit);
|
|
139
|
-
}
|
|
152
|
+
this.attachProcessExitHandler();
|
|
140
153
|
await this.waitForReady();
|
|
141
154
|
}
|
|
142
155
|
async waitForReady() {
|
|
@@ -144,8 +157,13 @@ export class PrologProcess {
|
|
|
144
157
|
const start = Date.now();
|
|
145
158
|
const maxStartWait = 2000; // ms
|
|
146
159
|
while (Date.now() - start < maxStartWait) {
|
|
147
|
-
// If process exited or was killed, surface the error buffer.
|
|
148
|
-
|
|
160
|
+
// If process exited or was killed, surface the error buffer. A signal
|
|
161
|
+
// kill leaves exitCode null but populates signalCode, so both must be
|
|
162
|
+
// checked or an externally killed child looks "still starting".
|
|
163
|
+
if (!this.process ||
|
|
164
|
+
this.process.killed ||
|
|
165
|
+
this.process.exitCode !== null ||
|
|
166
|
+
this.process.signalCode !== null) {
|
|
149
167
|
throw new Error(`Prolog process terminated unexpectedly during startup: ${this.translateError(this.errorBuffer)}`);
|
|
150
168
|
}
|
|
151
169
|
// If stderr contains an ERROR, fail fast with translated message.
|
|
@@ -221,9 +239,13 @@ export class PrologProcess {
|
|
|
221
239
|
const goalWithPersistence = shouldPersist
|
|
222
240
|
? `(${normalizedGoal}, kb_save)`
|
|
223
241
|
: normalizedGoal;
|
|
242
|
+
// Report the thrown term structurally ahead of SWI's human-readable
|
|
243
|
+
// print_message output. Built-ins only, so the wrapper works against
|
|
244
|
+
// any installed kibi-core version.
|
|
245
|
+
const errorReport = `(write(user_error, '__KIBI_ERROR__:'), write_term(user_error, _E, [quoted(true), max_depth(8)]), nl(user_error), print_message(error, _E), fail)`;
|
|
224
246
|
const wrappedGoal = /^once\s*\(/.test(goalWithPersistence)
|
|
225
|
-
? `catch(${goalWithPersistence}, _E,
|
|
226
|
-
: `catch(once((${goalWithPersistence})), _E,
|
|
247
|
+
? `catch(${goalWithPersistence}, _E, ${errorReport})`
|
|
248
|
+
: `catch(once((${goalWithPersistence})), _E, ${errorReport})`;
|
|
227
249
|
const start = Date.now();
|
|
228
250
|
if (debug) {
|
|
229
251
|
console.error(`[prolog debug] start query: ${goalLabel}`);
|
|
@@ -233,7 +255,7 @@ export class PrologProcess {
|
|
|
233
255
|
let settled = false;
|
|
234
256
|
const timeoutId = setTimeout(() => {
|
|
235
257
|
const stage = this.lastDiagnosticStage(this.errorBuffer) ?? "unknown";
|
|
236
|
-
const msg = `Query timeout after ${this.timeout / 1000}s (stage=${stage}, pid=${this.process?.pid ?? 0}, killed=${this.process?.killed ? "yes" : "no"}, exitCode=${this.process?.exitCode ?? "null"}, goal=${goalLabel})
|
|
258
|
+
const msg = `Query timeout after ${this.timeout / 1000}s (stage=${stage}, pid=${this.process?.pid ?? 0}, killed=${this.process?.killed ? "yes" : "no"}, exitCode=${this.process?.exitCode ?? "null"}, signal=${this.process?.signalCode ?? "null"}, goal=${goalLabel}). If several fresh Kibi commands hang or crawl the same way, the engine state is likely wedged: run 'kibi engine stop' (then 'kibi sync --rebuild' if needed) and retry.`;
|
|
237
259
|
if (debug) {
|
|
238
260
|
console.error(`[prolog debug] timeout: ${msg}`);
|
|
239
261
|
const runtime = this.errorBuffer
|
|
@@ -279,10 +301,12 @@ export class PrologProcess {
|
|
|
279
301
|
if (debug) {
|
|
280
302
|
console.error(`[prolog debug] query error: ${goalLabel} error=${this.errorBuffer.split("\n")[0]}`);
|
|
281
303
|
}
|
|
304
|
+
const classified = this.classifyErrorOutput(this.errorBuffer);
|
|
282
305
|
resolve({
|
|
283
306
|
success: false,
|
|
284
307
|
bindings: {},
|
|
285
|
-
error: this.addDiagnosticStage(
|
|
308
|
+
error: this.addDiagnosticStage(classified.message, normalizedGoal, this.errorBuffer),
|
|
309
|
+
...(classified.record ? { errorRecord: classified.record } : {}),
|
|
286
310
|
});
|
|
287
311
|
return;
|
|
288
312
|
}
|
|
@@ -436,7 +460,7 @@ export class PrologProcess {
|
|
|
436
460
|
"read_term_from_atom(GoalAtom, Goal, [variable_names(Vars)])",
|
|
437
461
|
kbPath ? "getenv('KIBI_KB_PATH', KBPath), kb_attach(KBPath)" : "true",
|
|
438
462
|
isBatch ? "WrappedGoal = rdf_transaction(Goal)" : "WrappedGoal = Goal",
|
|
439
|
-
"(catch(call(WrappedGoal), E, (print_message(error, E), fail)) -> QuerySucceeded = true ; QuerySucceeded = false)",
|
|
463
|
+
"(catch(call(WrappedGoal), E, (write(user_error, '__KIBI_ERROR__:'), write_term(user_error, E, [quoted(true), max_depth(8)]), nl(user_error), print_message(error, E), fail)) -> QuerySucceeded = true ; QuerySucceeded = false)",
|
|
440
464
|
kbPath &&
|
|
441
465
|
(explicitSaveRequested ||
|
|
442
466
|
goalList.some((item) => this.isMutatingGoal(item)))
|
|
@@ -556,10 +580,12 @@ export class PrologProcess {
|
|
|
556
580
|
};
|
|
557
581
|
}
|
|
558
582
|
if (stderr.includes("ERROR")) {
|
|
583
|
+
const classified = this.classifyErrorOutput(stderr);
|
|
559
584
|
return {
|
|
560
585
|
success: false,
|
|
561
586
|
bindings: {},
|
|
562
|
-
error: this.addDiagnosticStage(
|
|
587
|
+
error: this.addDiagnosticStage(classified.message, combinedGoal ?? "true", stderr),
|
|
588
|
+
...(classified.record ? { errorRecord: classified.record } : {}),
|
|
563
589
|
};
|
|
564
590
|
}
|
|
565
591
|
if (stdout.includes("__KIBI_TRUE__")) {
|
|
@@ -685,28 +711,56 @@ export class PrologProcess {
|
|
|
685
711
|
isProcessUsable() {
|
|
686
712
|
return Boolean(this.process?.stdin &&
|
|
687
713
|
!this.process?.killed &&
|
|
688
|
-
this.process?.exitCode === null
|
|
714
|
+
this.process?.exitCode === null &&
|
|
715
|
+
this.process?.signalCode === null);
|
|
689
716
|
}
|
|
690
717
|
extractBindings(output) {
|
|
691
718
|
const bindings = {};
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
if (
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
719
|
+
let variableName;
|
|
720
|
+
let valueLines = [];
|
|
721
|
+
const flush = () => {
|
|
722
|
+
if (variableName === undefined)
|
|
723
|
+
return;
|
|
724
|
+
bindings[variableName] = valueLines
|
|
725
|
+
.join("\n")
|
|
726
|
+
.trim()
|
|
727
|
+
.replace(/\.$/, "")
|
|
728
|
+
.replace(/,$/, "");
|
|
729
|
+
variableName = undefined;
|
|
730
|
+
valueLines = [];
|
|
731
|
+
};
|
|
732
|
+
// Prolog may print a quoted string over multiple physical lines when the
|
|
733
|
+
// long-lived session's answer formatting is configured for readable JSON.
|
|
734
|
+
// Parse assignment records as blocks instead of dropping every continuation
|
|
735
|
+
// line after the first one (which previously reduced JsonString to "{").
|
|
736
|
+
for (const line of output.split("\n")) {
|
|
737
|
+
const match = line.match(/^([A-Z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);
|
|
738
|
+
if (match?.[1] !== undefined && match[2] !== undefined) {
|
|
739
|
+
flush();
|
|
740
|
+
variableName = match[1];
|
|
741
|
+
valueLines = [match[2]];
|
|
742
|
+
continue;
|
|
700
743
|
}
|
|
744
|
+
if (variableName !== undefined)
|
|
745
|
+
valueLines.push(line);
|
|
701
746
|
}
|
|
747
|
+
flush();
|
|
702
748
|
return bindings;
|
|
703
749
|
}
|
|
750
|
+
/** Prefer the structured error term; fall back to text heuristics. */
|
|
751
|
+
classifyErrorOutput(errorText) {
|
|
752
|
+
const record = extractPrologErrorRecord(errorText);
|
|
753
|
+
if (record) {
|
|
754
|
+
return { message: record.message, record };
|
|
755
|
+
}
|
|
756
|
+
return { message: this.translateError(errorText) };
|
|
757
|
+
}
|
|
704
758
|
// implements REQ-core-prolog-process-management
|
|
705
759
|
translateError(errorText) {
|
|
706
760
|
// Diagnostic markers intentionally contain words such as `lock` and the
|
|
707
761
|
// audit path. Remove them before classifying the actual Prolog error so a
|
|
708
762
|
// contradiction at the check stage is not mistaken for an audit lock.
|
|
709
|
-
const cleanError = errorText.replace(/^__KIBI_(?:STAGE|RUNTIME)__:[^\r\n]*\r?\n?/gm, "");
|
|
763
|
+
const cleanError = errorText.replace(/^__KIBI_(?:STAGE|RUNTIME|ERROR)__:[^\r\n]*\r?\n?/gm, "");
|
|
710
764
|
if (cleanError.includes("stale_snapshot")) {
|
|
711
765
|
return "KB snapshot is stale; reattach or refresh the runtime before retrying (stale_snapshot)";
|
|
712
766
|
}
|
|
@@ -765,7 +819,10 @@ export class PrologProcess {
|
|
|
765
819
|
return simpleError || "Unknown error";
|
|
766
820
|
}
|
|
767
821
|
isRunning() {
|
|
768
|
-
return Boolean(this.process &&
|
|
822
|
+
return Boolean(this.process &&
|
|
823
|
+
!this.process.killed &&
|
|
824
|
+
this.process?.exitCode === null &&
|
|
825
|
+
this.process?.signalCode === null);
|
|
769
826
|
}
|
|
770
827
|
getPid() {
|
|
771
828
|
return this.process?.pid || 0;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ProofContract, ProofResult, ProofRunArtifact } from "../public/proof-protocol.js";
|
|
2
|
+
import type { ProofReceiptOutcome } from "./receipt-outcome.js";
|
|
3
|
+
export type ProofGap = Readonly<{
|
|
4
|
+
symbol_id: string;
|
|
5
|
+
target: string;
|
|
6
|
+
reason: string;
|
|
7
|
+
}>;
|
|
8
|
+
export type ContractEvaluation = Readonly<{
|
|
9
|
+
satisfied: boolean;
|
|
10
|
+
outcome: ProofReceiptOutcome;
|
|
11
|
+
gaps: readonly ProofGap[];
|
|
12
|
+
projectedResults: readonly ProofResult[];
|
|
13
|
+
}>;
|
|
14
|
+
export declare function mapRunOutcome(outcome: ProofRunArtifact["run"]["outcome"]): ProofReceiptOutcome;
|
|
15
|
+
/**
|
|
16
|
+
* Kibi evaluates proof. Producers only report what happened.
|
|
17
|
+
*
|
|
18
|
+
* - The run must have completed successfully; a failed run never proves
|
|
19
|
+
* anything, no matter how many individual results passed.
|
|
20
|
+
* - `native_case` results must carry complete attempt history with a passing
|
|
21
|
+
* first attempt; unknown history fails closed.
|
|
22
|
+
* - `aggregate_run` results are satisfied by the one Kibi-launched process
|
|
23
|
+
* invocation itself (the process attempt), never by invented native-case
|
|
24
|
+
* evidence.
|
|
25
|
+
*/
|
|
26
|
+
export declare function evaluateContractAgainstRun(artifact: ProofRunArtifact, contract: ProofContract): ContractEvaluation;
|
|
27
|
+
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/proof/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC1B,gBAAgB,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C,CAAC,CAAC;AAEH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAC1C,mBAAmB,CAgBrB;AA6CD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,aAAa,GACtB,kBAAkB,CA4GpB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
export function mapRunOutcome(outcome) {
|
|
2
|
+
switch (outcome) {
|
|
3
|
+
case "passed":
|
|
4
|
+
return "passed";
|
|
5
|
+
case "errored":
|
|
6
|
+
return "errored";
|
|
7
|
+
case "cancelled":
|
|
8
|
+
return "cancelled";
|
|
9
|
+
case "timed_out":
|
|
10
|
+
return "timed_out";
|
|
11
|
+
case "interrupted":
|
|
12
|
+
return "interrupted";
|
|
13
|
+
case "no_results":
|
|
14
|
+
case "failed":
|
|
15
|
+
return "failed";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const MAX_ATTRIBUTED_MEMBERS = 5;
|
|
19
|
+
/**
|
|
20
|
+
* When a run fails, attribute the failure to the individual proof results
|
|
21
|
+
* that did not pass. Consumers prove domain contracts through aggregate
|
|
22
|
+
* bindings, so a single slow member would otherwise refuse every contract
|
|
23
|
+
* with an opaque "run did not pass" even though each obligation's own result
|
|
24
|
+
* passed. Diagnostics only: attribution never changes pass/fail semantics.
|
|
25
|
+
*/
|
|
26
|
+
function failingMemberSummary(artifact, observed) {
|
|
27
|
+
const failing = artifact.proof_results.filter((result) => result.outcome !== "passed");
|
|
28
|
+
if (failing.length === 0)
|
|
29
|
+
return "";
|
|
30
|
+
const ownOutcome = observed === undefined
|
|
31
|
+
? undefined
|
|
32
|
+
: observed.outcome === "passed"
|
|
33
|
+
? "passed"
|
|
34
|
+
: observed.outcome;
|
|
35
|
+
const others = failing.filter((result) => result !== observed);
|
|
36
|
+
const parts = [];
|
|
37
|
+
if (ownOutcome !== undefined && ownOutcome !== "passed") {
|
|
38
|
+
parts.push(`this obligation's own result outcome is '${ownOutcome}'`);
|
|
39
|
+
}
|
|
40
|
+
else if (ownOutcome === "passed") {
|
|
41
|
+
parts.push("this obligation's own result passed");
|
|
42
|
+
}
|
|
43
|
+
if (others.length > 0) {
|
|
44
|
+
const listed = others
|
|
45
|
+
.slice(0, MAX_ATTRIBUTED_MEMBERS)
|
|
46
|
+
.map((result) => `${result.symbol_id} (${result.outcome})`);
|
|
47
|
+
const overflow = others.length > MAX_ATTRIBUTED_MEMBERS
|
|
48
|
+
? ` +${others.length - MAX_ATTRIBUTED_MEMBERS} more`
|
|
49
|
+
: "";
|
|
50
|
+
parts.push(`failing member result(s): ${listed.join(", ")}${overflow}`);
|
|
51
|
+
}
|
|
52
|
+
return parts.length === 0 ? "" : `; ${parts.join("; ")}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Kibi evaluates proof. Producers only report what happened.
|
|
56
|
+
*
|
|
57
|
+
* - The run must have completed successfully; a failed run never proves
|
|
58
|
+
* anything, no matter how many individual results passed.
|
|
59
|
+
* - `native_case` results must carry complete attempt history with a passing
|
|
60
|
+
* first attempt; unknown history fails closed.
|
|
61
|
+
* - `aggregate_run` results are satisfied by the one Kibi-launched process
|
|
62
|
+
* invocation itself (the process attempt), never by invented native-case
|
|
63
|
+
* evidence.
|
|
64
|
+
*/
|
|
65
|
+
export function evaluateContractAgainstRun(artifact, contract) {
|
|
66
|
+
const runPassed = artifact.run.outcome === "passed";
|
|
67
|
+
const gaps = [];
|
|
68
|
+
const projectedResults = [];
|
|
69
|
+
for (const obligation of contract.required_proofs) {
|
|
70
|
+
const observed = artifact.proof_results.find((result) => result.symbol_id === obligation.symbol_id &&
|
|
71
|
+
result.target === obligation.target);
|
|
72
|
+
if (observed)
|
|
73
|
+
projectedResults.push(observed);
|
|
74
|
+
if (!runPassed) {
|
|
75
|
+
const attribution = failingMemberSummary(artifact, observed);
|
|
76
|
+
gaps.push({
|
|
77
|
+
symbol_id: obligation.symbol_id,
|
|
78
|
+
target: obligation.target,
|
|
79
|
+
reason: artifact.run.outcome === "no_results"
|
|
80
|
+
? `run produced no results (outcome: no_results${artifact.run.failure_phase ? `, phase: ${artifact.run.failure_phase}` : ""})`
|
|
81
|
+
: `run did not pass (outcome: ${artifact.run.outcome}${artifact.run.failure_phase ? `, phase: ${artifact.run.failure_phase}` : ""})${attribution}`,
|
|
82
|
+
});
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (!observed) {
|
|
86
|
+
gaps.push({
|
|
87
|
+
symbol_id: obligation.symbol_id,
|
|
88
|
+
target: obligation.target,
|
|
89
|
+
reason: "missing proof result: the run reported no result for this obligation",
|
|
90
|
+
});
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (observed.outcome !== "passed") {
|
|
94
|
+
gaps.push({
|
|
95
|
+
symbol_id: obligation.symbol_id,
|
|
96
|
+
target: obligation.target,
|
|
97
|
+
reason: `proof result outcome is '${observed.outcome}'`,
|
|
98
|
+
});
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (observed.binding === "native_case") {
|
|
102
|
+
if (observed.attempts.status === "unavailable") {
|
|
103
|
+
gaps.push({
|
|
104
|
+
symbol_id: obligation.symbol_id,
|
|
105
|
+
target: obligation.target,
|
|
106
|
+
reason: "attempt history unavailable: strict first-attempt policy cannot verify a native-case pass",
|
|
107
|
+
});
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const first = observed.attempts.entries[0];
|
|
111
|
+
if (!first || first.outcome !== "passed") {
|
|
112
|
+
gaps.push({
|
|
113
|
+
symbol_id: obligation.symbol_id,
|
|
114
|
+
target: obligation.target,
|
|
115
|
+
reason: `first attempt outcome is '${first?.outcome ?? "unknown"}'`,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
// aggregate_run: the single Kibi-launched command invocation is known
|
|
121
|
+
// first-attempt process evidence when the run passed with exit code 0.
|
|
122
|
+
if (artifact.run.exit_code !== 0) {
|
|
123
|
+
gaps.push({
|
|
124
|
+
symbol_id: obligation.symbol_id,
|
|
125
|
+
target: obligation.target,
|
|
126
|
+
reason: `aggregate run exit code is ${artifact.run.exit_code}`,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (!runPassed) {
|
|
131
|
+
return {
|
|
132
|
+
satisfied: false,
|
|
133
|
+
outcome: mapRunOutcome(artifact.run.outcome),
|
|
134
|
+
gaps,
|
|
135
|
+
projectedResults,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
if (gaps.length > 0) {
|
|
139
|
+
let outcome = "failed";
|
|
140
|
+
if (projectedResults.some((result) => contract.required_proofs.some((obligation) => obligation.symbol_id === result.symbol_id &&
|
|
141
|
+
obligation.target === result.target) && result.outcome === "interrupted")) {
|
|
142
|
+
outcome = "interrupted";
|
|
143
|
+
}
|
|
144
|
+
else if (projectedResults.some((result) => contract.required_proofs.some((obligation) => obligation.symbol_id === result.symbol_id &&
|
|
145
|
+
obligation.target === result.target) && result.outcome === "timed_out")) {
|
|
146
|
+
outcome = "timed_out";
|
|
147
|
+
}
|
|
148
|
+
return { satisfied: false, outcome, gaps, projectedResults };
|
|
149
|
+
}
|
|
150
|
+
return { satisfied: true, outcome: "passed", gaps: [], projectedResults };
|
|
151
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type ProofInspection = Readonly<{
|
|
2
|
+
languages: readonly string[];
|
|
3
|
+
buildSystems: readonly string[];
|
|
4
|
+
detectedRunners: readonly string[];
|
|
5
|
+
ciWorkflows: readonly string[];
|
|
6
|
+
currentIntegration: string | null;
|
|
7
|
+
recommendation: string;
|
|
8
|
+
missing: readonly string[];
|
|
9
|
+
}>;
|
|
10
|
+
export declare function directoryEntriesMatch(directory: string, regex: RegExp): boolean;
|
|
11
|
+
export declare function inspectProofEnvironment(root: string): ProofInspection;
|
|
12
|
+
//# sourceMappingURL=inspect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/proof/inspect.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC;AAwIH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAMT;AA2BD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAoFrE"}
|