kibi-cli 1.0.1 → 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.js +3 -3
- package/dist/cli-operation-metadata.d.ts +4 -3
- package/dist/cli-operation-metadata.d.ts.map +1 -1
- package/dist/cli-operation-metadata.js +7 -5
- package/dist/cli-protocol.js +1 -1
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +7 -0
- 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 +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -10
- package/dist/commands/branch.d.ts +1 -0
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +8 -4
- package/dist/commands/check.d.ts +14 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +190 -44
- 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/doctor.d.ts +22 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +48 -22
- package/dist/commands/engine.d.ts +12 -0
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +40 -0
- package/dist/commands/github-init.d.ts +1 -0
- package/dist/commands/github-init.d.ts.map +1 -1
- package/dist/commands/github-init.js +9 -5
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +38 -5
- package/dist/commands/migrate.d.ts +4 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +7 -7
- 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.js +1 -1
- package/dist/commands/sync/discovery.d.ts +3 -0
- package/dist/commands/sync/discovery.d.ts.map +1 -1
- package/dist/commands/sync/discovery.js +36 -28
- package/dist/commands/sync/manifest.d.ts +1 -1
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +53 -21
- 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 +25 -14
- 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 +11 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +74 -30
- 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 +14 -76
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +197 -30
- package/dist/extractors/manifest.d.ts +5 -0
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +46 -1
- package/dist/extractors/markdown.d.ts +5 -3
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +41 -24
- package/dist/extractors/playwright-cases.js +1 -1
- package/dist/extractors/relationships.d.ts +6 -0
- package/dist/extractors/relationships.d.ts.map +1 -1
- package/dist/extractors/relationships.js +1 -1
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -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 +1 -0
- package/dist/intent-search.d.ts.map +1 -1
- package/dist/intent-search.js +7 -3
- 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 +2 -1
- package/dist/operations/bootstrap/activation.d.ts.map +1 -1
- package/dist/operations/bootstrap/activation.js +11 -3
- package/dist/operations/bootstrap/generate.d.ts +2 -1
- package/dist/operations/bootstrap/generate.d.ts.map +1 -1
- package/dist/operations/bootstrap/generate.js +6 -3
- package/dist/operations/bootstrap/guidance.d.ts +1 -0
- package/dist/operations/bootstrap/guidance.d.ts.map +1 -1
- package/dist/operations/bootstrap/guidance.js +1 -1
- 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 +53 -46
- package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-applicability.js +103 -4
- 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-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-loader.d.ts +1 -0
- package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-loader.js +4 -3
- package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-ranker.js +4 -1
- package/dist/operations/modeling/predicate-types.d.ts +1 -1
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
- 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/suggest-predicates.d.ts +3 -1
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +52 -19
- 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 +100 -32
- package/dist/operations/mutation/relationships.d.ts +1 -0
- package/dist/operations/mutation/relationships.d.ts.map +1 -1
- package/dist/operations/mutation/relationships.js +6 -4
- 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 -2
- package/dist/operations/mutation/source-authoring.d.ts +5 -1
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
- package/dist/operations/mutation/source-authoring.js +79 -46
- 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 +5 -2
- package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-compiler-lock.js +65 -2
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +2 -2
- package/dist/operations/mutation/symbol-refresh.d.ts +1 -0
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +10 -8
- 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 +86 -54
- 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 +46 -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 +8 -106
- package/dist/operations/planning/apply-plan.d.ts.map +1 -1
- package/dist/operations/planning/apply-plan.js +113 -36
- package/dist/operations/planning/compile-intent.d.ts +2 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -1
- package/dist/operations/planning/compile-intent.js +70 -14
- 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 +46 -26
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/clauses.js +20 -7
- 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/prolog/codec.d.ts +13 -1
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +269 -154
- 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 +55 -17
- 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/{public → proof/producers}/playwright-case-id.d.ts +1 -1
- package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
- package/dist/{public → proof/producers}/playwright-case-id.js +3 -3
- 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/diagnostic-usage.js +6 -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 -10
- package/dist/public/impact/coverage-depth-quality.d.ts +1 -0
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +1 -1
- 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 +5 -2
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +329 -64
- package/dist/public/operations/catalog.d.ts +447 -196
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/catalog.js +6 -4
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +3 -7
- package/dist/public/operations/contracts.d.ts +7 -0
- package/dist/public/operations/contracts.d.ts.map +1 -1
- package/dist/public/operations/contracts.js +31 -22
- 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 +9 -9
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +17 -14
- package/dist/public/operations/index.d.ts +1 -1
- package/dist/public/operations/index.d.ts.map +1 -1
- package/dist/public/operations/index.js +1 -1
- package/dist/public/operations/migration-plan.d.ts +4 -3
- package/dist/public/operations/migration-plan.d.ts.map +1 -1
- package/dist/public/operations/migration-plan.js +23 -21
- package/dist/public/operations/node-ports.js +6 -6
- 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 -19
- package/dist/public/operations/result-envelope.d.ts +1 -0
- package/dist/public/operations/result-envelope.d.ts.map +1 -1
- package/dist/public/operations/result-envelope.js +12 -10
- package/dist/public/operations/runtime-types.d.ts +5 -0
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- 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 +7 -2
- package/dist/public/operations/specs/check.d.ts.map +1 -1
- package/dist/public/operations/specs/check.js +8 -20
- package/dist/public/operations/specs/mutation-schemas.d.ts +257 -163
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +15 -7
- package/dist/public/operations/specs/planning.d.ts +9 -0
- package/dist/public/operations/specs/planning.d.ts.map +1 -1
- package/dist/public/operations/specs/planning.js +6 -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 +19 -0
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +112 -12
- package/dist/public/operations/specs/upsert.d.ts +257 -163
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
- package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
- package/dist/public/operations/symbol-repair-plan.js +118 -3
- package/dist/public/operations/types.d.ts +1 -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 +21 -7
- package/dist/public/skills/kibi-freshness/SKILL.md +1 -1
- package/dist/public/skills/kibi-usage/SKILL.md +41 -12
- package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
- package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +6 -6
- 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 -47
- package/dist/public/telemetry-acceptance.d.ts +3 -77
- package/dist/public/telemetry-acceptance.d.ts.map +1 -1
- package/dist/public/telemetry-acceptance.js +4 -2
- package/dist/public/telemetry-remediation.js +1 -1
- package/dist/report/html-report.css +282 -0
- package/dist/report/html-report.d.ts +4 -2
- package/dist/report/html-report.d.ts.map +1 -1
- package/dist/report/html-report.js +37 -300
- 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 +14 -7
- package/dist/schemas/entity.schema.json +355 -215
- 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 +28 -0
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- 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 +145 -1
- 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.js +4 -4
- 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 +138 -27
- 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 +13 -4
- package/dist/types/entities.d.ts +5 -3
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/branch-resolver.d.ts +1 -0
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +7 -4
- package/dist/utils/branch-store.d.ts +6 -0
- package/dist/utils/branch-store.d.ts.map +1 -1
- package/dist/utils/branch-store.js +27 -0
- package/dist/utils/kb-paths.d.ts +1 -1
- package/dist/utils/kb-paths.d.ts.map +1 -1
- package/dist/utils/kb-paths.js +1 -1
- package/dist/utils/rule-registry.d.ts +1 -11
- 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 +12 -113
- package/dist/utils/strict-modeling.d.ts +1 -0
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +1 -1
- package/package.json +8 -11
- package/src/public/diagnostic-usage.ts +6 -6
- package/src/public/distribution-parity.ts +17 -10
- package/src/public/impact/coverage-depth-quality.ts +1 -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 +463 -72
- package/src/public/operations/catalog.ts +10 -4
- package/src/public/operations/check-executor.ts +3 -7
- package/src/public/operations/contracts.ts +38 -22
- package/src/public/operations/discovery-entities.ts +7 -0
- package/src/public/operations/discovery-executors.ts +26 -23
- package/src/public/operations/index.ts +1 -1
- package/src/public/operations/migration-plan.ts +32 -25
- package/src/public/operations/node-ports.ts +6 -6
- package/src/public/operations/repair-plan.ts +60 -23
- package/src/public/operations/result-envelope.ts +15 -10
- package/src/public/operations/runtime-types.ts +5 -0
- package/src/public/operations/specs/check-rules.generated.ts +37 -0
- package/src/public/operations/specs/check.ts +12 -21
- package/src/public/operations/specs/mutation-schemas.ts +22 -9
- package/src/public/operations/specs/planning.ts +7 -0
- package/src/public/operations/specs/proof.ts +43 -0
- package/src/public/operations/specs/reporting.ts +140 -13
- package/src/public/operations/symbol-repair-plan.ts +163 -3
- package/src/public/operations/types.ts +1 -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 +26 -10
- package/src/public/skills/kibi-freshness/SKILL.md +1 -1
- package/src/public/skills/kibi-usage/SKILL.md +41 -12
- package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
- package/src/public/skills/kibi-usage/resources/proof.md +105 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +6 -6
- package/src/public/symbol-granularity.generated.ts +41 -0
- package/src/public/symbol-granularity.ts +35 -60
- package/src/public/telemetry-acceptance-types.d.ts +98 -0
- package/src/public/telemetry-acceptance.ts +22 -100
- package/src/public/telemetry-remediation.ts +1 -1
- package/src/schemas/entity.schema.json +355 -215
- package/dist/cli-register-verification.d.ts +0 -3
- package/dist/cli-register-verification.d.ts.map +0 -1
- package/dist/cli-register-verification.js +0 -16
- package/dist/commands/verify.d.ts +0 -10
- package/dist/commands/verify.d.ts.map +0 -1
- package/dist/commands/verify.js +0 -126
- package/dist/operations/verification/ingest-verification.d.ts +0 -29
- package/dist/operations/verification/ingest-verification.d.ts.map +0 -1
- package/dist/operations/verification/ingest-verification.js +0 -192
- package/dist/public/operations/specs/verification.d.ts +0 -78
- package/dist/public/operations/specs/verification.d.ts.map +0 -1
- package/dist/public/operations/specs/verification.js +0 -62
- package/dist/public/playwright-case-id.d.ts.map +0 -1
- package/dist/public/verification-receipt.d.ts +0 -242
- package/dist/public/verification-receipt.d.ts.map +0 -1
- package/dist/public/verification-receipt.js +0 -296
- package/dist/verification/playwright-reporter.d.ts +0 -21
- package/dist/verification/playwright-reporter.d.ts.map +0 -1
- package/dist/verification/playwright-reporter.js +0 -114
- package/src/public/operations/specs/verification.ts +0 -78
- package/src/public/playwright-case-id.ts +0 -35
- package/src/public/verification-receipt.ts +0 -412
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { load as parseYaml } from "js-yaml";
|
|
3
|
+
import { extractFromManifestString } from "../extractors/manifest.js";
|
|
4
|
+
import { extractFromMarkdownString } from "../extractors/markdown.js";
|
|
5
|
+
import { CANONICAL_ENTITY_PATHS, isEntityLanePath } from "../utils/kb-paths.js";
|
|
6
|
+
export const STAGED_FILE_COVERAGE_RESULT_VERSION = "kibi.staged-file-coverage.v1";
|
|
7
|
+
function defaultGitReader(args) {
|
|
8
|
+
return execFileSync("git", args, {
|
|
9
|
+
encoding: "buffer",
|
|
10
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
11
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function readRequired(reader, args) {
|
|
15
|
+
try {
|
|
16
|
+
return reader(args).toString("utf8");
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
20
|
+
throw new Error(`git command failed: git ${args.join(" ")} -> ${message}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function manifestEntries(content) {
|
|
24
|
+
if (!content?.trim())
|
|
25
|
+
return [];
|
|
26
|
+
try {
|
|
27
|
+
return extractFromManifestString(content, CANONICAL_ENTITY_PATHS.symbols);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function parseRelationships(content) {
|
|
34
|
+
if (!content?.trim())
|
|
35
|
+
return [];
|
|
36
|
+
try {
|
|
37
|
+
const parsed = parseYaml(content);
|
|
38
|
+
if (!Array.isArray(parsed?.relationships))
|
|
39
|
+
return [];
|
|
40
|
+
return parsed.relationships.flatMap((value) => {
|
|
41
|
+
if (!value || typeof value !== "object")
|
|
42
|
+
return [];
|
|
43
|
+
const row = value;
|
|
44
|
+
return typeof row.type === "string" &&
|
|
45
|
+
typeof row.from === "string" &&
|
|
46
|
+
typeof row.to === "string"
|
|
47
|
+
? [{ type: row.type, from: row.from, to: row.to }]
|
|
48
|
+
: [];
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function headKbPaths(reader) {
|
|
56
|
+
try {
|
|
57
|
+
if (reader(["rev-parse", "--verify", "HEAD"]).toString("utf8").trim() === "") {
|
|
58
|
+
return new Set();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// A repository with an unborn branch has no committed knowledge yet.
|
|
63
|
+
return new Set();
|
|
64
|
+
}
|
|
65
|
+
const output = readRequired(reader, [
|
|
66
|
+
"ls-tree",
|
|
67
|
+
"-r",
|
|
68
|
+
"--name-only",
|
|
69
|
+
"-z",
|
|
70
|
+
"HEAD",
|
|
71
|
+
"--",
|
|
72
|
+
".kb",
|
|
73
|
+
]);
|
|
74
|
+
return new Set(output.split("\0").filter(Boolean));
|
|
75
|
+
}
|
|
76
|
+
function effectiveRelationshipFiles(inventory, headPaths, reader) {
|
|
77
|
+
const head = new Map();
|
|
78
|
+
for (const path of [...headPaths].sort()) {
|
|
79
|
+
if (!path.startsWith(".kb/relationships/"))
|
|
80
|
+
continue;
|
|
81
|
+
head.set(path, readRequired(reader, ["show", `HEAD:${path}`]));
|
|
82
|
+
}
|
|
83
|
+
const effective = new Map(head);
|
|
84
|
+
for (const entry of inventory) {
|
|
85
|
+
if (!entry.path.startsWith(".kb/relationships/"))
|
|
86
|
+
continue;
|
|
87
|
+
if (entry.oldPath)
|
|
88
|
+
effective.delete(entry.oldPath);
|
|
89
|
+
if (entry.status === "D")
|
|
90
|
+
effective.delete(entry.path);
|
|
91
|
+
else if (entry.content !== undefined)
|
|
92
|
+
effective.set(entry.path, entry.content);
|
|
93
|
+
}
|
|
94
|
+
return { head, effective };
|
|
95
|
+
}
|
|
96
|
+
function effectiveRequirementIds(inventory, headPaths, reader) {
|
|
97
|
+
const files = new Map();
|
|
98
|
+
for (const path of [...headPaths].sort()) {
|
|
99
|
+
if (!path.startsWith(".kb/requirements/") || !path.endsWith(".md")) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
files.set(path, readRequired(reader, ["show", `HEAD:${path}`]));
|
|
103
|
+
}
|
|
104
|
+
for (const entry of inventory) {
|
|
105
|
+
if (entry.oldPath)
|
|
106
|
+
files.delete(entry.oldPath);
|
|
107
|
+
if (!entry.path.startsWith(".kb/requirements/") ||
|
|
108
|
+
!entry.path.endsWith(".md")) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (entry.status === "D")
|
|
112
|
+
files.delete(entry.path);
|
|
113
|
+
else if (entry.content !== undefined)
|
|
114
|
+
files.set(entry.path, entry.content);
|
|
115
|
+
}
|
|
116
|
+
const ids = new Set();
|
|
117
|
+
for (const [path, content] of files) {
|
|
118
|
+
try {
|
|
119
|
+
const result = extractFromMarkdownString(content, path);
|
|
120
|
+
if (result.entity.type === "req")
|
|
121
|
+
ids.add(result.entity.id);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Malformed staged entity markdown is reported by the staged validator.
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return ids;
|
|
128
|
+
}
|
|
129
|
+
function relationshipSet(files) {
|
|
130
|
+
return [...files.values()].flatMap(parseRelationships);
|
|
131
|
+
}
|
|
132
|
+
function stagedManifestContent(inventory) {
|
|
133
|
+
const file = inventory.find((entry) => entry.path === CANONICAL_ENTITY_PATHS.symbols ||
|
|
134
|
+
entry.path === ".kb/symbols.yml");
|
|
135
|
+
if (!file)
|
|
136
|
+
return undefined;
|
|
137
|
+
return file.status === "D" ? null : (file.content ?? null);
|
|
138
|
+
}
|
|
139
|
+
function sourcePaths(entry) {
|
|
140
|
+
return new Set([entry.path, ...(entry.oldPath ? [entry.oldPath] : [])]);
|
|
141
|
+
}
|
|
142
|
+
function entriesForPaths(entries, paths) {
|
|
143
|
+
return entries.filter((entry) => {
|
|
144
|
+
const source = entry.sourceFile ?? entry.entity.source;
|
|
145
|
+
return (typeof source === "string" && paths.has(source.replaceAll("\\", "/")));
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function relevantEntityEvidence(inventory, requirementIds) {
|
|
149
|
+
return inventory.flatMap((entry) => {
|
|
150
|
+
if (entry.status === "D" ||
|
|
151
|
+
entry.content === undefined ||
|
|
152
|
+
!entry.path.endsWith(".md") ||
|
|
153
|
+
!isEntityLanePath(entry.path)) {
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
const parsed = extractFromMarkdownString(entry.content, entry.path);
|
|
158
|
+
return parsed.entity.type === "req" &&
|
|
159
|
+
requirementIds.has(parsed.entity.id)
|
|
160
|
+
? [entry.path]
|
|
161
|
+
: [];
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function stableEntry(entry) {
|
|
169
|
+
return JSON.stringify({
|
|
170
|
+
id: entry.entity.id,
|
|
171
|
+
title: entry.entity.title,
|
|
172
|
+
sourceFile: entry.sourceFile,
|
|
173
|
+
relationships: entry.relationships
|
|
174
|
+
.map((relationship) => ({
|
|
175
|
+
type: relationship.type,
|
|
176
|
+
from: relationship.from,
|
|
177
|
+
to: relationship.to,
|
|
178
|
+
}))
|
|
179
|
+
.sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b))),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
function changedManifestEvidence(paths, headEntries, effectiveEntries, inventory) {
|
|
183
|
+
const staged = stagedManifestContent(inventory);
|
|
184
|
+
if (staged === undefined)
|
|
185
|
+
return [];
|
|
186
|
+
const before = entriesForPaths(headEntries, paths).map(stableEntry).sort();
|
|
187
|
+
const after = entriesForPaths(effectiveEntries, paths)
|
|
188
|
+
.map(stableEntry)
|
|
189
|
+
.sort();
|
|
190
|
+
return JSON.stringify(before) === JSON.stringify(after)
|
|
191
|
+
? []
|
|
192
|
+
: [CANONICAL_ENTITY_PATHS.symbols];
|
|
193
|
+
}
|
|
194
|
+
function changedRelationshipEvidence(symbolIds, headFiles, effectiveFiles) {
|
|
195
|
+
const paths = new Set([...headFiles.keys(), ...effectiveFiles.keys()]);
|
|
196
|
+
return [...paths].filter((path) => {
|
|
197
|
+
const select = (content) => parseRelationships(content ?? null)
|
|
198
|
+
.filter((row) => row.type === "implements" && symbolIds.has(row.from))
|
|
199
|
+
.map((row) => `${row.from}\0${row.to}`)
|
|
200
|
+
.sort();
|
|
201
|
+
return (JSON.stringify(select(headFiles.get(path))) !==
|
|
202
|
+
JSON.stringify(select(effectiveFiles.get(path))));
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/** Resolve advisory file-level ownership from committed knowledge plus staged evidence. */
|
|
206
|
+
export function analyzeStagedFileCoverage(inventory, reader = defaultGitReader) {
|
|
207
|
+
const headPaths = headKbPaths(reader);
|
|
208
|
+
const headManifest = headPaths.has(CANONICAL_ENTITY_PATHS.symbols)
|
|
209
|
+
? readRequired(reader, ["show", `HEAD:${CANONICAL_ENTITY_PATHS.symbols}`])
|
|
210
|
+
: null;
|
|
211
|
+
const stagedManifest = stagedManifestContent(inventory);
|
|
212
|
+
const headEntries = manifestEntries(headManifest);
|
|
213
|
+
const effectiveEntries = manifestEntries(stagedManifest === undefined ? headManifest : stagedManifest);
|
|
214
|
+
const relationshipFiles = effectiveRelationshipFiles(inventory, headPaths, reader);
|
|
215
|
+
const actualRequirementIds = effectiveRequirementIds(inventory, headPaths, reader);
|
|
216
|
+
const headRelationships = relationshipSet(relationshipFiles.head);
|
|
217
|
+
const effectiveRelationships = relationshipSet(relationshipFiles.effective);
|
|
218
|
+
const files = [];
|
|
219
|
+
const diagnostics = [];
|
|
220
|
+
for (const entry of inventory) {
|
|
221
|
+
const paths = sourcePaths(entry);
|
|
222
|
+
const headOwned = entriesForPaths(headEntries, paths);
|
|
223
|
+
const effectiveOwned = entriesForPaths(effectiveEntries, paths);
|
|
224
|
+
const owned = [...headOwned, ...effectiveOwned];
|
|
225
|
+
const symbolIds = new Set(owned.map((item) => item.entity.id));
|
|
226
|
+
const inlineRelationships = owned.flatMap((item) => item.relationships);
|
|
227
|
+
const requirementIds = [
|
|
228
|
+
...new Set([
|
|
229
|
+
...inlineRelationships,
|
|
230
|
+
...headRelationships,
|
|
231
|
+
...effectiveRelationships,
|
|
232
|
+
]
|
|
233
|
+
.filter((row) => row.type === "implements" &&
|
|
234
|
+
symbolIds.has(row.from) &&
|
|
235
|
+
actualRequirementIds.has(row.to))
|
|
236
|
+
.map((row) => row.to)),
|
|
237
|
+
].sort();
|
|
238
|
+
const evidencePaths = [
|
|
239
|
+
...new Set([
|
|
240
|
+
...changedManifestEvidence(paths, headEntries, effectiveEntries, inventory),
|
|
241
|
+
...changedRelationshipEvidence(symbolIds, relationshipFiles.head, relationshipFiles.effective),
|
|
242
|
+
...relevantEntityEvidence(inventory, new Set(requirementIds)),
|
|
243
|
+
]),
|
|
244
|
+
].sort();
|
|
245
|
+
files.push({
|
|
246
|
+
path: entry.path,
|
|
247
|
+
...(entry.oldPath ? { oldPath: entry.oldPath } : {}),
|
|
248
|
+
status: entry.status,
|
|
249
|
+
analysisDepth: entry.analysisDepth,
|
|
250
|
+
disposition: entry.disposition,
|
|
251
|
+
...(entry.skipReason ? { reason: entry.skipReason } : {}),
|
|
252
|
+
requirementIds,
|
|
253
|
+
evidencePaths,
|
|
254
|
+
providerId: entry.analysisDepth === "symbol" ? "ts-morph" : null,
|
|
255
|
+
});
|
|
256
|
+
if (entry.analysisDepth !== "file")
|
|
257
|
+
continue;
|
|
258
|
+
if (requirementIds.length === 0) {
|
|
259
|
+
diagnostics.push({
|
|
260
|
+
id: "staged_file_ownership_missing",
|
|
261
|
+
severity: "warning",
|
|
262
|
+
blocking: false,
|
|
263
|
+
path: entry.path,
|
|
264
|
+
message: `Staged text file has no source-linked requirement ownership: ${entry.path}`,
|
|
265
|
+
suggestion: "Review the change and add an authored file/module symbol with an implements relationship when it affects product behavior.",
|
|
266
|
+
requirementIds: [],
|
|
267
|
+
evidencePaths: [],
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
else if (evidencePaths.length === 0) {
|
|
271
|
+
diagnostics.push({
|
|
272
|
+
id: "staged_file_impact_review_needed",
|
|
273
|
+
severity: "warning",
|
|
274
|
+
blocking: false,
|
|
275
|
+
path: entry.path,
|
|
276
|
+
message: `Review staged impact for ${entry.path}; existing ownership links to ${requirementIds.join(", ")} but no matching KB evidence changed.`,
|
|
277
|
+
suggestion: "Confirm the linked requirements still describe the behavior, then stage the relevant requirement or ownership evidence when semantics changed.",
|
|
278
|
+
requirementIds,
|
|
279
|
+
evidencePaths: [],
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return { version: STAGED_FILE_COVERAGE_RESULT_VERSION, files, diagnostics };
|
|
284
|
+
}
|
|
@@ -41,7 +41,7 @@ export const KIBI_IMPACT_DIAGNOSTICS = {
|
|
|
41
41
|
title: "Behavior edit requires staged Kibi impact evidence",
|
|
42
42
|
resolution: [
|
|
43
43
|
"Query Kibi via visible MCP tools or the trusted project-local CLI (peer surfaces): use kb_search for discovery, then kb_query for exact follow-up.",
|
|
44
|
-
"MCP writes update KB state but do not stage tracked evidence; also stage related KB entity markdown under .kb/, authored .kb/symbols.yaml metadata, or refreshed .kb/symbol-coordinates.yaml.",
|
|
44
|
+
"MCP writes update KB state but do not stage tracked evidence; also stage related KB entity markdown under .kb/, authored .kb/symbols.yaml metadata (the Detail lines name the symbols lacking evidence), or refreshed .kb/symbol-coordinates.yaml.",
|
|
45
45
|
"Re-run or let the hook run kibi check --staged.",
|
|
46
46
|
],
|
|
47
47
|
},
|
|
@@ -49,9 +49,9 @@ export const KIBI_IMPACT_DIAGNOSTICS = {
|
|
|
49
49
|
id: "symbols_manifest_stale",
|
|
50
50
|
title: "Symbol coordinates evidence is stale for changed extraction output",
|
|
51
51
|
resolution: [
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
52
|
+
"Read the Detail lines: they name the extracted symbols the staged .kb/symbols.yaml evidence does not cover.",
|
|
53
|
+
"Author .kb/symbols.yaml entries for the uncovered symbols (kibi upsert, with implements/covered_by links), then refresh symbol coordinates with kibi sync --refresh-symbol-coordinates.",
|
|
54
|
+
"Stage .kb/symbol-coordinates.yaml and .kb/symbols.yaml in the same change as the behavior edit, then re-run or let the hook run kibi check --staged.",
|
|
55
55
|
],
|
|
56
56
|
},
|
|
57
57
|
kibi_impact_override_missing_rationale: {
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
import { type ParsedCoordinateArtifact } from "../extractors/symbol-coordinates.js";
|
|
2
|
+
import type { KibiImpactSymbolsManifestFileDetail } from "./evidence-model.js";
|
|
1
3
|
import type { StagedFile } from "./git-staged.js";
|
|
2
4
|
export interface StagedSymbolsManifestAssessment {
|
|
3
5
|
state: "fresh" | "stale" | "missing" | "not_required";
|
|
4
6
|
sourcePaths: string[];
|
|
5
7
|
path: string;
|
|
8
|
+
/**
|
|
9
|
+
* Per-file extraction-vs-evidence diffs for the source paths whose symbol
|
|
10
|
+
* output changed. Lets diagnostics name the uncovered symbols instead of
|
|
11
|
+
* reporting a bare "stale" verdict.
|
|
12
|
+
*/
|
|
13
|
+
fileDetails?: KibiImpactSymbolsManifestFileDetail[];
|
|
6
14
|
}
|
|
7
15
|
export interface StagedAuthoredSymbolsManifestEvidence {
|
|
8
16
|
path: string;
|
|
@@ -12,6 +20,11 @@ export interface StagedAuthoredSymbolsManifestEvidence {
|
|
|
12
20
|
}>;
|
|
13
21
|
changedEntityIds: string[];
|
|
14
22
|
}
|
|
23
|
+
export declare function parsedCoordinateOrNull(parse: () => ParsedCoordinateArtifact): ParsedCoordinateArtifact | null;
|
|
24
|
+
export declare function manifestRecordSourcePath(record: {
|
|
25
|
+
sourceFile?: unknown;
|
|
26
|
+
source?: unknown;
|
|
27
|
+
}): string | null;
|
|
15
28
|
export declare function assessStagedSymbolsManifest(options: {
|
|
16
29
|
symbolsManifestPath: string;
|
|
17
30
|
sourceFiles: StagedFile[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staged-symbols-manifest.d.ts","sourceRoot":"","sources":["../../src/traceability/staged-symbols-manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"staged-symbols-manifest.d.ts","sourceRoot":"","sources":["../../src/traceability/staged-symbols-manifest.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,qCAAqC,CAAC;AAI7C,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA0ClD,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;IACtD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,WAAW,CAAC,EAAE,mCAAmC,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,qCAAqC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC5D,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AA6ED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,wBAAwB,GACpC,wBAAwB,GAAG,IAAI,CAOjC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,MAAM,GAAG,IAAI,CAMhB;AAqSD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACnD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,GAAG,+BAA+B,CAgLlC;AAED,wBAAgB,4CAA4C,CAAC,OAAO,EAAE;IACpE,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,GAAG,qCAAqC,CAmExC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { extractManifestSymbolRecordsString, } from "../extractors/manifest.js";
|
|
4
4
|
import { mergeCoordinatesWithManifest, parseCoordinateArtifact as parseStrict, } from "../extractors/symbol-coordinates.js";
|
|
@@ -38,14 +38,27 @@ function resolveRelativeManifestPaths(symbolsManifestPath) {
|
|
|
38
38
|
coordinatesPath: toRepoRelativePath(coordinatesPath),
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
function readHeadFileContent(filePath) {
|
|
41
|
+
function readHeadFileContent(filePath, cache) {
|
|
42
|
+
const normalizedPath = filePath.replace(/\\/g, "/");
|
|
43
|
+
const cacheKey = `${process.cwd()}\u0000${normalizedPath}`;
|
|
44
|
+
if (cache?.has(cacheKey)) {
|
|
45
|
+
return cache.get(cacheKey) ?? null;
|
|
46
|
+
}
|
|
42
47
|
try {
|
|
43
|
-
|
|
48
|
+
// Use argv-based git invocation so a source path cannot alter the command.
|
|
49
|
+
// The manifest can exceed a shell helper's small default maxBuffer; without
|
|
50
|
+
// the raised limit the read fails with ENOBUFS and is silently treated as
|
|
51
|
+
// missing, which permanently reports the coordinates manifest as stale.
|
|
52
|
+
const content = execFileSync("git", ["show", `HEAD:${normalizedPath}`], {
|
|
44
53
|
encoding: "utf8",
|
|
45
54
|
stdio: ["pipe", "pipe", "pipe"],
|
|
55
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
46
56
|
});
|
|
57
|
+
cache?.set(cacheKey, content);
|
|
58
|
+
return content;
|
|
47
59
|
}
|
|
48
60
|
catch {
|
|
61
|
+
cache?.set(cacheKey, null);
|
|
49
62
|
return null;
|
|
50
63
|
}
|
|
51
64
|
}
|
|
@@ -60,6 +73,22 @@ function parseManifestRecords(content, filePath) {
|
|
|
60
73
|
return null;
|
|
61
74
|
}
|
|
62
75
|
}
|
|
76
|
+
export function parsedCoordinateOrNull(parse) {
|
|
77
|
+
try {
|
|
78
|
+
const parsed = parse();
|
|
79
|
+
return parsed.status === "invalid" ? null : parsed;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export function manifestRecordSourcePath(record) {
|
|
86
|
+
return typeof record.sourceFile === "string"
|
|
87
|
+
? record.sourceFile
|
|
88
|
+
: typeof record.source === "string"
|
|
89
|
+
? record.source
|
|
90
|
+
: null;
|
|
91
|
+
}
|
|
63
92
|
function parseCoordinateArtifact(content) {
|
|
64
93
|
// An absent artifact must not masquerade as an empty authoritative one:
|
|
65
94
|
// inline authored coordinates stay comparable until the artifact exists.
|
|
@@ -68,13 +97,7 @@ function parseCoordinateArtifact(content) {
|
|
|
68
97
|
if (content === null || content === undefined) {
|
|
69
98
|
return null;
|
|
70
99
|
}
|
|
71
|
-
|
|
72
|
-
const parsed = parseStrict(content);
|
|
73
|
-
return parsed.status === "invalid" ? null : parsed;
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
100
|
+
return parsedCoordinateOrNull(() => parseStrict(content));
|
|
78
101
|
}
|
|
79
102
|
function normalizeNumber(value) {
|
|
80
103
|
return typeof value === "number" ? value : null;
|
|
@@ -114,7 +137,7 @@ function normalizeRelationships(relationships) {
|
|
|
114
137
|
.sort((left, right) => JSON.stringify(left).localeCompare(JSON.stringify(right)));
|
|
115
138
|
}
|
|
116
139
|
function normalizeManifestSymbolsForSourceFile(records, sourceFile) {
|
|
117
|
-
|
|
140
|
+
const symbols = records
|
|
118
141
|
.filter((record) => {
|
|
119
142
|
if (isDocumentedCoarseRecord(record)) {
|
|
120
143
|
return false;
|
|
@@ -135,6 +158,11 @@ function normalizeManifestSymbolsForSourceFile(records, sourceFile) {
|
|
|
135
158
|
sourceEndColumn: normalizeNumber(record.sourceEndColumn),
|
|
136
159
|
}))
|
|
137
160
|
.sort(compareNormalizedSymbols);
|
|
161
|
+
// Several logical records may own the same declaration. Only identical
|
|
162
|
+
// validated spans collapse; a stale duplicate still carries null coordinates
|
|
163
|
+
// and must remain visible to the equality check.
|
|
164
|
+
return symbols.filter((symbol, index) => index === 0 ||
|
|
165
|
+
JSON.stringify(symbol) !== JSON.stringify(symbols[index - 1]));
|
|
138
166
|
}
|
|
139
167
|
function normalizeAuthoredManifestSymbolsForSourceFile(records, sourceFile) {
|
|
140
168
|
return records
|
|
@@ -209,8 +237,8 @@ function signaturesEqual(left, right) {
|
|
|
209
237
|
function uniqueSorted(paths) {
|
|
210
238
|
return Array.from(new Set(paths)).sort();
|
|
211
239
|
}
|
|
212
|
-
function mergeManifestRecordsWithCoordinates(manifestRecords, coordinateArtifact) {
|
|
213
|
-
return mergeCoordinatesWithManifest(manifestRecords ?? [], coordinateArtifact);
|
|
240
|
+
function mergeManifestRecordsWithCoordinates(manifestRecords, coordinateArtifact, options = {}) {
|
|
241
|
+
return mergeCoordinatesWithManifest(manifestRecords ?? [], coordinateArtifact, options);
|
|
214
242
|
}
|
|
215
243
|
function getEffectiveManifestRecords(options) {
|
|
216
244
|
const { headCoordinateArtifact, headManifestRecords, paths, stagedFiles } = options;
|
|
@@ -229,28 +257,69 @@ function getEffectiveManifestRecords(options) {
|
|
|
229
257
|
stagedCoordinateArtifact,
|
|
230
258
|
};
|
|
231
259
|
}
|
|
260
|
+
/** Max missing/extra symbol titles surfaced per file before "+N more". */
|
|
261
|
+
const MAX_DETAIL_ITEMS = 6;
|
|
262
|
+
function diffSymbolEvidence(sourcePath, expectedSymbols, stagedSymbols) {
|
|
263
|
+
const stagedTitles = new Set(stagedSymbols.map((symbol) => symbol.title));
|
|
264
|
+
const expectedTitles = new Set(expectedSymbols.map((symbol) => symbol.title));
|
|
265
|
+
const missing = expectedSymbols
|
|
266
|
+
.filter((symbol) => !stagedTitles.has(symbol.title))
|
|
267
|
+
.map((symbol) => ({ title: symbol.title, line: symbol.sourceLine ?? 0 }))
|
|
268
|
+
.sort((left, right) => left.title.localeCompare(right.title));
|
|
269
|
+
const extra = stagedSymbols
|
|
270
|
+
.filter((symbol) => !expectedTitles.has(symbol.title))
|
|
271
|
+
.map((symbol) => symbol.title)
|
|
272
|
+
.sort();
|
|
273
|
+
// Pure coordinate drift (titles unchanged) has no symbol-level remedy to
|
|
274
|
+
// name; leave the detail out so the diagnostic stays verdict + refresh.
|
|
275
|
+
if (missing.length === 0 && extra.length === 0) {
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
path: sourcePath,
|
|
280
|
+
expectedCount: expectedSymbols.length,
|
|
281
|
+
coveredCount: stagedSymbols.length,
|
|
282
|
+
missing: missing.slice(0, MAX_DETAIL_ITEMS),
|
|
283
|
+
extra: extra.slice(0, MAX_DETAIL_ITEMS),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
232
286
|
export function assessStagedSymbolsManifest(options) {
|
|
233
287
|
const { sourceFiles, stagedFiles, symbolsManifestPath } = options;
|
|
234
288
|
const paths = resolveRelativeManifestPaths(symbolsManifestPath);
|
|
235
|
-
|
|
236
|
-
|
|
289
|
+
// Scope HEAD memoization to one assessment. A long-lived CLI process may
|
|
290
|
+
// assess several commits in the same checkout; a process-global cache would
|
|
291
|
+
// otherwise reuse content from the previous HEAD.
|
|
292
|
+
const headFileContentCache = new Map();
|
|
293
|
+
const readAssessmentHeadFileContent = (filePath) => readHeadFileContent(filePath, headFileContentCache);
|
|
294
|
+
const headManifestRecords = parseManifestRecords(readAssessmentHeadFileContent(paths.symbolsPath), paths.symbolsPath);
|
|
295
|
+
const headCoordinateArtifact = parseCoordinateArtifact(readAssessmentHeadFileContent(paths.coordinatesPath));
|
|
237
296
|
const { stagedCoordinatesFile, stagedCoordinateArtifact, stagedManifestRecords, } = getEffectiveManifestRecords({
|
|
238
297
|
stagedFiles,
|
|
239
298
|
paths,
|
|
240
299
|
headManifestRecords,
|
|
241
300
|
headCoordinateArtifact,
|
|
242
301
|
});
|
|
243
|
-
const
|
|
244
|
-
|
|
302
|
+
const stagedSourceText = new Map(stagedFiles.map((stagedFile) => [
|
|
303
|
+
stagedFile.path.replace(/\\/g, "/"),
|
|
304
|
+
typeof stagedFile.content === "string" ? stagedFile.content : null,
|
|
305
|
+
]));
|
|
306
|
+
const resolveStagedSourceText = (sourceFile) => {
|
|
307
|
+
const normalizedSourceFile = sourceFile.replace(/\\/g, "/");
|
|
308
|
+
return stagedSourceText.has(normalizedSourceFile)
|
|
309
|
+
? (stagedSourceText.get(normalizedSourceFile) ?? null)
|
|
310
|
+
: readAssessmentHeadFileContent(sourceFile);
|
|
311
|
+
};
|
|
312
|
+
const baselineMergedRecords = mergeManifestRecordsWithCoordinates(headManifestRecords, headCoordinateArtifact,
|
|
313
|
+
// Existing bindings must also be valid for the proposed source. Comparing
|
|
314
|
+
// them against HEAD would miss body edits that leave spans unchanged.
|
|
315
|
+
{ resolveSourceText: resolveStagedSourceText });
|
|
316
|
+
const stagedMergedRecords = mergeManifestRecordsWithCoordinates(stagedManifestRecords, stagedCoordinateArtifact, { resolveSourceText: resolveStagedSourceText });
|
|
245
317
|
const requiredRefreshPaths = [];
|
|
246
318
|
const freshPaths = new Set();
|
|
319
|
+
const symbolDetails = [];
|
|
247
320
|
for (const sourceFile of sourceFiles) {
|
|
248
321
|
const manifestRecordsForFile = (stagedManifestRecords ?? []).filter((record) => {
|
|
249
|
-
const recordSource =
|
|
250
|
-
? record.sourceFile
|
|
251
|
-
: typeof record.source === "string"
|
|
252
|
-
? record.source
|
|
253
|
-
: null;
|
|
322
|
+
const recordSource = manifestRecordSourcePath(record);
|
|
254
323
|
return recordSource === sourceFile.path;
|
|
255
324
|
});
|
|
256
325
|
const coarseCovered = manifestRecordsForFile.length > 0 &&
|
|
@@ -258,16 +327,39 @@ export function assessStagedSymbolsManifest(options) {
|
|
|
258
327
|
if (coarseCovered) {
|
|
259
328
|
continue;
|
|
260
329
|
}
|
|
261
|
-
const
|
|
330
|
+
const recordsByTitle = new Map();
|
|
331
|
+
for (const record of manifestRecordsForFile) {
|
|
332
|
+
if (typeof record.title !== "string")
|
|
333
|
+
continue;
|
|
334
|
+
const records = recordsByTitle.get(record.title) ?? [];
|
|
335
|
+
records.push(record);
|
|
336
|
+
recordsByTitle.set(record.title, records);
|
|
337
|
+
}
|
|
338
|
+
// A coarse anchor is allowed to stand in for its extracted declaration
|
|
339
|
+
// only when every authored record with that title is explicitly coarse.
|
|
340
|
+
// If a granular record shares the title, keep the declaration in the
|
|
341
|
+
// equality check so a duplicate anchor cannot hide stale coordinates.
|
|
342
|
+
const coarseTitles = new Set([...recordsByTitle.entries()]
|
|
343
|
+
.filter(([, records]) => records.every(isDocumentedCoarseRecord))
|
|
344
|
+
.map(([title]) => title));
|
|
345
|
+
const expectedSymbols = normalizeExpectedSymbolsForStagedFile(sourceFile).filter((symbol) => !coarseTitles.has(symbol.title));
|
|
262
346
|
const baselineSymbols = normalizeManifestSymbolsForSourceFile(baselineMergedRecords, sourceFile.path);
|
|
263
347
|
if (signaturesEqual(expectedSymbols, baselineSymbols)) {
|
|
264
348
|
continue;
|
|
265
349
|
}
|
|
266
350
|
requiredRefreshPaths.push(sourceFile.path);
|
|
267
|
-
|
|
351
|
+
// Without a usable staged coordinate artifact there is nothing to diff
|
|
352
|
+
// against: every extracted symbol counts as uncovered evidence.
|
|
353
|
+
const stagedSymbols = stagedCoordinateArtifact === null
|
|
354
|
+
? []
|
|
355
|
+
: normalizeManifestSymbolsForSourceFile(stagedMergedRecords, sourceFile.path);
|
|
356
|
+
const detail = diffSymbolEvidence(sourceFile.path, expectedSymbols, stagedSymbols);
|
|
357
|
+
if (detail !== null) {
|
|
358
|
+
symbolDetails.push(detail);
|
|
359
|
+
}
|
|
360
|
+
if (!stagedCoordinatesFile) {
|
|
268
361
|
continue;
|
|
269
362
|
}
|
|
270
|
-
const stagedSymbols = normalizeManifestSymbolsForSourceFile(stagedMergedRecords, sourceFile.path);
|
|
271
363
|
if (signaturesEqual(expectedSymbols, stagedSymbols)) {
|
|
272
364
|
freshPaths.add(sourceFile.path);
|
|
273
365
|
}
|
|
@@ -283,10 +375,29 @@ export function assessStagedSymbolsManifest(options) {
|
|
|
283
375
|
if (sourcePaths.every((sourcePath) => freshPaths.has(sourcePath))) {
|
|
284
376
|
return { state: "fresh", sourcePaths, path: paths.coordinatesPath };
|
|
285
377
|
}
|
|
378
|
+
// Details are only meaningful for the states whose diagnostics fire; a
|
|
379
|
+
// fresh refresh carries no uncovered symbols by definition, and the stale
|
|
380
|
+
// state cites only the non-fresh paths, so details follow that filter.
|
|
381
|
+
const nonFreshDetails = symbolDetails.filter((detail) => !freshPaths.has(detail.path));
|
|
382
|
+
const detailSpread = nonFreshDetails.length > 0
|
|
383
|
+
? {
|
|
384
|
+
fileDetails: nonFreshDetails.sort((left, right) => left.path.localeCompare(right.path)),
|
|
385
|
+
}
|
|
386
|
+
: {};
|
|
286
387
|
if (!stagedCoordinatesFile) {
|
|
287
|
-
return {
|
|
388
|
+
return {
|
|
389
|
+
state: "missing",
|
|
390
|
+
sourcePaths,
|
|
391
|
+
path: paths.coordinatesPath,
|
|
392
|
+
...detailSpread,
|
|
393
|
+
};
|
|
288
394
|
}
|
|
289
|
-
return {
|
|
395
|
+
return {
|
|
396
|
+
state: "stale",
|
|
397
|
+
sourcePaths: sourcePaths.filter((sourcePath) => !freshPaths.has(sourcePath)),
|
|
398
|
+
path: paths.coordinatesPath,
|
|
399
|
+
...detailSpread,
|
|
400
|
+
};
|
|
290
401
|
}
|
|
291
402
|
export function collectStagedAuthoredSymbolsManifestEvidence(options) {
|
|
292
403
|
const { sourceFiles, stagedFiles } = options;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Scope } from "ts-morph";
|
|
1
2
|
import { type SymbolKind, type SymbolRole } from "../public/symbol-granularity.js";
|
|
2
3
|
import type { HunkRange, StagedFile } from "./git-staged.js";
|
|
3
4
|
type TraceabilityRelationship = {
|
|
@@ -25,5 +26,9 @@ export interface ManifestLookupEntry {
|
|
|
25
26
|
export type ManifestLookup = Map<string, ManifestLookupEntry>;
|
|
26
27
|
export declare function createManifestLookupSentinelKey(manifestPath: string): string;
|
|
27
28
|
export declare function extractSymbolsFromStagedFile(stagedFile: StagedFile, manifestLookup?: ManifestLookup): ExtractedSymbol[];
|
|
29
|
+
export declare function isPrivateClassMember(member: {
|
|
30
|
+
getName?: () => string;
|
|
31
|
+
getScope?: () => Scope;
|
|
32
|
+
}): boolean;
|
|
28
33
|
export {};
|
|
29
34
|
//# sourceMappingURL=symbol-extract.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbol-extract.d.ts","sourceRoot":"","sources":["../../src/traceability/symbol-extract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"symbol-extract.d.ts","sourceRoot":"","sources":["../../src/traceability/symbol-extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,EAA+B,MAAM,UAAU,CAAC;AAEvE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7D,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAU7D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAE9D,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG5E;AAmOD,wBAAgB,4BAA4B,CAE1C,UAAU,EAAE,UAAU,EACtB,cAAc,CAAC,EAAE,cAAc,GAC9B,eAAe,EAAE,CA2SnB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,KAAK,CAAC;CACxB,GAAG,OAAO,CASV"}
|
|
@@ -379,7 +379,7 @@ stagedFile, manifestLookup) {
|
|
|
379
379
|
}
|
|
380
380
|
return results;
|
|
381
381
|
}
|
|
382
|
-
function isPrivateClassMember(member) {
|
|
382
|
+
export function isPrivateClassMember(member) {
|
|
383
383
|
const name = typeof member.getName === "function" ? member.getName() : "";
|
|
384
384
|
if (name.startsWith("#")) {
|
|
385
385
|
return true;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare function skipNonIntegerFactNumber(field: string, value: number): boolean;
|
|
1
2
|
import type { ExtractionResult } from "../extractors/markdown.js";
|
|
2
3
|
import { PrologProcess } from "../prolog.js";
|
|
3
4
|
import type { ExtractedSymbol } from "./symbol-extract";
|
|
@@ -18,6 +19,7 @@ export declare function resetModuleState(): void;
|
|
|
18
19
|
*/
|
|
19
20
|
export declare function _setPrologFactory(factory: (opts: {
|
|
20
21
|
timeout: number;
|
|
22
|
+
oneShot: false;
|
|
21
23
|
}) => PrologProcess): void;
|
|
22
24
|
declare function consultOverlay(ctx: TempKbContext): Promise<void>;
|
|
23
25
|
export { consultOverlay };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temp-kb.d.ts","sourceRoot":"","sources":["../../src/traceability/temp-kb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"temp-kb.d.ts","sourceRoot":"","sources":["../../src/traceability/temp-kb.ts"],"names":[],"mappings":"AAMA,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAET;AACD,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;CACvB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,KAAK,aAAa,GACpE,IAAI,CAEN;AAmQD,iBAAe,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/D;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAG1B,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6C7E;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAkBrE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BlE"}
|