kibi-cli 0.18.1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-json-command.d.ts +1 -2
- package/dist/cli-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +2 -34
- package/dist/cli-operation-loader.d.ts +3 -0
- package/dist/cli-operation-loader.d.ts.map +1 -0
- package/dist/cli-operation-loader.js +91 -0
- package/dist/cli-operation-metadata.d.ts +94 -0
- package/dist/cli-operation-metadata.d.ts.map +1 -0
- package/dist/cli-operation-metadata.js +121 -0
- package/dist/cli-protocol.d.ts +1 -1
- package/dist/cli-protocol.d.ts.map +1 -1
- package/dist/cli-protocol.js +42 -11
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +28 -19
- package/dist/cli-register-json.d.ts +3 -0
- package/dist/cli-register-json.d.ts.map +1 -0
- package/dist/cli-register-json.js +35 -0
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +60 -13
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +23 -14
- package/dist/cli-register-skills.d.ts.map +1 -1
- package/dist/cli-register-skills.js +8 -6
- package/dist/cli-register-verification.d.ts +3 -0
- package/dist/cli-register-verification.d.ts.map +1 -0
- package/dist/cli-register-verification.js +16 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- 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 +36 -0
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +371 -40
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +48 -77
- package/dist/commands/coverage.js +1 -1
- package/dist/commands/discovery-shared.d.ts +2 -1
- package/dist/commands/discovery-shared.d.ts.map +1 -1
- package/dist/commands/discovery-shared.js +38 -25
- package/dist/commands/doctor.d.ts +4 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +259 -24
- package/dist/commands/engine.d.ts +8 -0
- package/dist/commands/engine.d.ts.map +1 -0
- package/dist/commands/engine.js +103 -0
- package/dist/commands/gaps.js +1 -1
- 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 +56 -0
- package/dist/commands/github-init.d.ts.map +1 -0
- package/dist/commands/github-init.js +310 -0
- package/dist/commands/graph.js +1 -1
- 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 +73 -25
- 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 +7 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +244 -91
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +3 -1
- 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/search.d.ts.map +1 -1
- package/dist/commands/search.js +3 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/sync/cache.d.ts +26 -3
- package/dist/commands/sync/cache.d.ts.map +1 -1
- package/dist/commands/sync/cache.js +141 -5
- package/dist/commands/sync/discovery.d.ts +23 -2
- package/dist/commands/sync/discovery.d.ts.map +1 -1
- package/dist/commands/sync/discovery.js +196 -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 +8 -5
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +142 -39
- package/dist/commands/sync/persistence.d.ts +10 -1
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +223 -44
- package/dist/commands/sync/staging.d.ts +10 -1
- package/dist/commands/sync/staging.d.ts.map +1 -1
- package/dist/commands/sync/staging.js +84 -1
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +710 -48
- package/dist/commands/verify.d.ts +10 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +126 -0
- package/dist/diagnostics.d.ts +1 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/engine-daemon.d.ts +3 -0
- package/dist/engine-daemon.d.ts.map +1 -0
- package/dist/engine-daemon.js +34 -0
- package/dist/engine.d.ts +156 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +1625 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +5 -6
- package/dist/extractors/manifest.d.ts +8 -1
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +51 -9
- package/dist/extractors/markdown.d.ts +2 -1
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +21 -3
- 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 +2 -0
- package/dist/extractors/relationships.d.ts.map +1 -1
- package/dist/extractors/relationships.js +16 -17
- 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/intent-search.d.ts +60 -0
- package/dist/intent-search.d.ts.map +1 -0
- package/dist/intent-search.js +433 -0
- package/dist/operations/bootstrap/activation.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/activation.js +48 -31
- 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 +8 -0
- package/dist/operations/bootstrap/generate.d.ts.map +1 -0
- package/dist/operations/bootstrap/generate.js +204 -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 +2 -2
- package/dist/operations/{autopilot → bootstrap}/guidance.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/guidance.js +2 -0
- 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.map +1 -1
- package/dist/operations/modeling/model-requirement.js +4 -17
- 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 +276 -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-4.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-4.js +155 -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.map +1 -1
- package/dist/operations/modeling/predicate-loader.js +7 -0
- 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 +156 -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 +34 -0
- 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-utils.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-utils.js +2 -0
- package/dist/operations/modeling/suggest-predicates.d.ts +1 -1
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +170 -32
- package/dist/operations/mutation/delete.d.ts.map +1 -1
- package/dist/operations/mutation/delete.js +415 -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 +10 -0
- package/dist/operations/mutation/relationships.d.ts.map +1 -1
- package/dist/operations/mutation/relationships.js +71 -1
- package/dist/operations/mutation/serialization.d.ts.map +1 -1
- package/dist/operations/mutation/serialization.js +1 -0
- package/dist/operations/mutation/source-authoring.d.ts +61 -0
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
- package/dist/operations/mutation/source-authoring.js +543 -0
- package/dist/operations/mutation/symbol-compiler-lock.d.ts +51 -0
- package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
- package/dist/operations/mutation/symbol-compiler-lock.js +274 -0
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +34 -3
- package/dist/operations/mutation/symbol-refresh.d.ts +18 -1
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +225 -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.map +1 -1
- package/dist/operations/mutation/upsert.js +363 -24
- package/dist/operations/mutation/validation.d.ts.map +1 -1
- package/dist/operations/mutation/validation.js +1 -0
- package/dist/operations/planning/apply-plan.d.ts +117 -0
- package/dist/operations/planning/apply-plan.d.ts.map +1 -0
- package/dist/operations/planning/apply-plan.js +1437 -0
- package/dist/operations/planning/compile-intent.d.ts +106 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -0
- package/dist/operations/planning/compile-intent.js +562 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +6 -2
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/clauses.js +15 -2
- 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/types.d.ts +13 -5
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/operations/verification/ingest-verification.d.ts +29 -0
- package/dist/operations/verification/ingest-verification.d.ts.map +1 -0
- package/dist/operations/verification/ingest-verification.js +192 -0
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +2 -1
- package/dist/prolog.d.ts +8 -0
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +66 -16
- 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 +69 -1
- package/dist/public/distribution-parity.d.ts +1 -1
- package/dist/public/distribution-parity.d.ts.map +1 -1
- package/dist/public/distribution-parity.js +1 -0
- 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 +6 -1
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +21 -3
- package/dist/public/impact/full-kb-quality.d.ts +4 -2
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +61 -1
- 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 +682 -67
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/catalog.js +126 -4
- 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 +72 -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 +11 -0
- package/dist/public/operations/contracts.d.ts.map +1 -0
- package/dist/public/operations/contracts.js +325 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -1
- package/dist/public/operations/discovery-entities.js +3 -2
- package/dist/public/operations/discovery-executors.d.ts +37 -1
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +246 -9
- 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 +101 -0
- package/dist/public/operations/migration-plan.d.ts.map +1 -0
- package/dist/public/operations/migration-plan.js +537 -0
- package/dist/public/operations/node-ports.d.ts.map +1 -1
- package/dist/public/operations/node-ports.js +68 -8
- 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 +55 -6
- package/dist/public/operations/repair-plan.d.ts.map +1 -1
- package/dist/public/operations/repair-plan.js +1 -0
- package/dist/public/operations/result-envelope.d.ts +13 -0
- package/dist/public/operations/result-envelope.d.ts.map +1 -0
- package/dist/public/operations/result-envelope.js +104 -0
- package/dist/public/operations/runtime-types.d.ts +126 -5
- 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.d.ts +4 -4
- package/dist/public/operations/specs/check.d.ts.map +1 -1
- package/dist/public/operations/specs/check.js +4 -3
- 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 +190 -47
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +3 -1
- 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 +270 -0
- package/dist/public/operations/specs/planning.d.ts.map +1 -0
- package/dist/public/operations/specs/planning.js +191 -0
- package/dist/public/operations/specs/reporting.d.ts +4 -1
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +46 -1
- package/dist/public/operations/specs/upsert.d.ts +204 -47
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/specs/upsert.js +9 -0
- package/dist/public/operations/specs/verification.d.ts +78 -0
- package/dist/public/operations/specs/verification.d.ts.map +1 -0
- package/dist/public/operations/specs/verification.js +62 -0
- package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
- package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
- package/dist/public/operations/symbol-repair-plan.js +123 -0
- package/dist/public/operations/types.d.ts +52 -1
- package/dist/public/operations/types.d.ts.map +1 -1
- package/dist/public/playwright-case-id.d.ts +8 -0
- package/dist/public/playwright-case-id.d.ts.map +1 -0
- package/dist/public/playwright-case-id.js +25 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +4 -2
- 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 +40 -10
- 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 +115 -239
- 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/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 +56 -3
- package/dist/public/symbol-granularity.d.ts +1 -1
- package/dist/public/symbol-granularity.d.ts.map +1 -1
- package/dist/public/symbol-granularity.js +1 -0
- package/dist/public/telemetry-acceptance.d.ts +7 -0
- package/dist/public/telemetry-acceptance.d.ts.map +1 -1
- package/dist/public/telemetry-acceptance.js +8 -1
- package/dist/public/telemetry-remediation.js +1 -1
- package/dist/public/verification-receipt.d.ts +206 -39
- package/dist/public/verification-receipt.d.ts.map +1 -1
- package/dist/public/verification-receipt.js +171 -4
- 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.d.ts +19 -0
- package/dist/report/html-report.d.ts.map +1 -0
- package/dist/report/html-report.js +963 -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.map +1 -1
- package/dist/runtime/cli-runtime.js +98 -42
- package/dist/schemas/entity.schema.json +1148 -273
- package/dist/traceability/evidence-model.d.ts +2 -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.map +1 -1
- package/dist/traceability/git-staged.js +15 -40
- package/dist/traceability/markdown-validate.d.ts.map +1 -1
- package/dist/traceability/markdown-validate.js +12 -7
- 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 +10 -38
- package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +8 -3
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +3 -0
- package/dist/types/entities.d.ts +3 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/branch-resolver.d.ts +24 -10
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +121 -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 +15 -0
- package/dist/utils/branch-store.d.ts.map +1 -0
- package/dist/utils/branch-store.js +130 -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 +48 -20
- package/dist/utils/rule-registry.d.ts.map +1 -1
- package/dist/utils/rule-registry.js +82 -77
- 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 +0 -4
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +7 -8
- package/dist/verification/playwright-reporter.d.ts +21 -0
- package/dist/verification/playwright-reporter.d.ts.map +1 -0
- package/dist/verification/playwright-reporter.js +114 -0
- package/package.json +51 -8
- 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 +79 -1
- package/src/public/distribution-parity.ts +1 -0
- package/src/public/ignore-policy.ts +16 -10
- package/src/public/impact/coverage-depth-quality.ts +36 -0
- package/src/public/impact/full-kb-quality.ts +118 -5
- package/src/public/impact/manifest.ts +2 -4
- package/src/public/operational-artifacts.ts +9 -1
- package/src/public/operations/catalog.ts +146 -9
- package/src/public/operations/check-executor.ts +102 -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 +366 -0
- package/src/public/operations/discovery-entities.ts +3 -2
- package/src/public/operations/discovery-executors.ts +343 -15
- package/src/public/operations/index.ts +9 -4
- package/src/public/operations/migration-plan.ts +740 -0
- package/src/public/operations/node-ports.ts +84 -10
- package/src/public/operations/prolog-json.ts +73 -6
- package/src/public/operations/repair-plan.ts +1 -0
- package/src/public/operations/result-envelope.ts +136 -0
- package/src/public/operations/runtime-types.ts +130 -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.ts +4 -3
- 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 +6 -1
- package/src/public/operations/specs/mutation.ts +27 -2
- package/src/public/operations/specs/planning.ts +234 -0
- package/src/public/operations/specs/reporting.ts +55 -1
- package/src/public/operations/specs/upsert.ts +10 -0
- package/src/public/operations/specs/verification.ts +78 -0
- package/src/public/operations/symbol-repair-plan.ts +164 -0
- package/src/public/operations/types.ts +62 -1
- package/src/public/playwright-case-id.ts +35 -0
- package/src/public/schemas/entity.ts +7 -2
- 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 +40 -10
- 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 +115 -239
- 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/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 +56 -3
- package/src/public/symbol-granularity.ts +1 -0
- package/src/public/telemetry-acceptance.ts +16 -1
- package/src/public/telemetry-remediation.ts +1 -1
- package/src/public/verification-receipt.ts +248 -6
- package/src/schemas/entity.schema.json +1148 -273
- package/templates/github/kibi-badge.yml +86 -0
- package/templates/github/kibi-report.yml +84 -0
- 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/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/src/public/skills/init-kibi/SKILL.md +0 -62
- /package/dist/operations/{autopilot → bootstrap}/activation.d.ts +0 -0
- /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
|
@@ -15,10 +15,152 @@
|
|
|
15
15
|
You should have received a copy of the GNU Affero General Public License
|
|
16
16
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
import { execFile } from "node:child_process";
|
|
19
|
+
import { createHash } from "node:crypto";
|
|
20
|
+
import { existsSync, readFileSync, readdirSync, unlinkSync } from "node:fs";
|
|
18
21
|
import * as path from "node:path";
|
|
22
|
+
import { promisify } from "node:util";
|
|
19
23
|
import fg from "fast-glob";
|
|
20
24
|
import { getRelationshipsDir } from "../../extractors/relationships.js";
|
|
25
|
+
import { CANONICAL_ENTITY_PATHS, isSymbolsManifestPath, } from "../../utils/kb-paths.js";
|
|
21
26
|
const MARKDOWN_DISCOVERY_IGNORE = ["**/README.md"];
|
|
27
|
+
const execFileAsync = promisify(execFile);
|
|
28
|
+
async function gitTrackedPaths(cwd) {
|
|
29
|
+
const result = await execFileAsync("git", ["-C", cwd, "ls-files", "--cached", "-z", "--"], { encoding: "buffer", maxBuffer: 64 * 1024 * 1024 });
|
|
30
|
+
return new Set(result.stdout
|
|
31
|
+
.toString("utf8")
|
|
32
|
+
.split("\0")
|
|
33
|
+
.filter(Boolean)
|
|
34
|
+
.map((value) => value.replaceAll("\\", "/")));
|
|
35
|
+
}
|
|
36
|
+
function pendingSourcePaths(cwd, recoverMissing) {
|
|
37
|
+
const root = path.join(cwd, ".kb", "recovery", "pending-sources");
|
|
38
|
+
if (!existsSync(root)) {
|
|
39
|
+
return { paths: new Map(), recoveredReceipts: [] };
|
|
40
|
+
}
|
|
41
|
+
const paths = new Map();
|
|
42
|
+
const recoveredReceipts = [];
|
|
43
|
+
for (const name of readdirSync(root)) {
|
|
44
|
+
if (!name.endsWith(".json"))
|
|
45
|
+
continue;
|
|
46
|
+
const receiptPath = path.join(root, name);
|
|
47
|
+
try {
|
|
48
|
+
const raw = readFileSync(receiptPath, "utf8");
|
|
49
|
+
const receipt = JSON.parse(raw);
|
|
50
|
+
if (typeof receipt.path === "string" &&
|
|
51
|
+
receipt.path.length > 0 &&
|
|
52
|
+
typeof receipt.afterHash === "string" &&
|
|
53
|
+
/^[a-f0-9]{64}$/i.test(receipt.afterHash)) {
|
|
54
|
+
const relative = receipt.path.replaceAll("\\", "/");
|
|
55
|
+
const absolute = path.resolve(cwd, relative);
|
|
56
|
+
if (!absolute.startsWith(`${path.resolve(cwd)}${path.sep}`)) {
|
|
57
|
+
throw new Error(`Pending source receipt escapes workspace: ${relative}`);
|
|
58
|
+
}
|
|
59
|
+
if (!existsSync(absolute)) {
|
|
60
|
+
if (recoverMissing) {
|
|
61
|
+
recoveredReceipts.push({
|
|
62
|
+
receiptPath,
|
|
63
|
+
path: relative,
|
|
64
|
+
afterHash: receipt.afterHash,
|
|
65
|
+
rawHash: createHash("sha256").update(raw).digest("hex"),
|
|
66
|
+
});
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
throw new Error(`Pending source is missing: ${relative}`);
|
|
70
|
+
}
|
|
71
|
+
const actual = createHash("sha256")
|
|
72
|
+
.update(readFileSync(absolute))
|
|
73
|
+
.digest("hex");
|
|
74
|
+
if (actual !== receipt.afterHash) {
|
|
75
|
+
throw new Error(`Pending source hash drift blocks sync for ${relative}; expected ${receipt.afterHash}, found ${actual}`);
|
|
76
|
+
}
|
|
77
|
+
paths.set(relative, receipt.afterHash);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (error instanceof Error &&
|
|
82
|
+
(/Pending source/.test(error.message) ||
|
|
83
|
+
/Pending source receipt/.test(error.message))) {
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
// Malformed receipts are ignored; an operator can remove or repair the
|
|
87
|
+
// receipt through the normal recovery operation.
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { paths, recoveredReceipts };
|
|
91
|
+
}
|
|
92
|
+
export function clearRecoveredPendingSourceReceipts(cwd, receipts) {
|
|
93
|
+
const root = path.resolve(cwd, ".kb", "recovery", "pending-sources");
|
|
94
|
+
for (const receipt of receipts) {
|
|
95
|
+
const absolute = path.resolve(receipt.receiptPath);
|
|
96
|
+
if (!absolute.startsWith(`${root}${path.sep}`)) {
|
|
97
|
+
throw new Error(`Pending source receipt escapes recovery root: ${absolute}`);
|
|
98
|
+
}
|
|
99
|
+
if (!existsSync(absolute))
|
|
100
|
+
continue;
|
|
101
|
+
// Compare-and-delete: a receipt may have been replaced while the
|
|
102
|
+
// recovery rebuild was running. Never remove the replacement merely
|
|
103
|
+
// because it has the same receipt filename. Failing closed here is
|
|
104
|
+
// important: publication may have completed, but recovery must not claim
|
|
105
|
+
// that pending intent was retired when a newer intent remains.
|
|
106
|
+
let raw;
|
|
107
|
+
try {
|
|
108
|
+
raw = readFileSync(absolute, "utf8");
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (error !== null &&
|
|
112
|
+
typeof error === "object" &&
|
|
113
|
+
"code" in error &&
|
|
114
|
+
error.code === "ENOENT") {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
throw new Error(`Failed to inspect pending source receipt for ${receipt.path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
118
|
+
}
|
|
119
|
+
const rawHash = createHash("sha256").update(raw).digest("hex");
|
|
120
|
+
if (rawHash !== receipt.rawHash) {
|
|
121
|
+
throw new Error(`Pending source receipt changed during recovery for ${receipt.path}; refusing to retire newer receipt`);
|
|
122
|
+
}
|
|
123
|
+
let current;
|
|
124
|
+
try {
|
|
125
|
+
current = JSON.parse(raw);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
throw new Error(`Pending source receipt changed during recovery for ${receipt.path}; refusing to retire newer receipt`);
|
|
129
|
+
}
|
|
130
|
+
if (current.path !== receipt.path ||
|
|
131
|
+
current.afterHash !== receipt.afterHash) {
|
|
132
|
+
throw new Error(`Pending source receipt changed during recovery for ${receipt.path}; refusing to retire newer receipt`);
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
unlinkSync(absolute);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (error !== null &&
|
|
139
|
+
typeof error === "object" &&
|
|
140
|
+
"code" in error &&
|
|
141
|
+
error.code === "ENOENT") {
|
|
142
|
+
// Another recovery or source publication may have consumed it
|
|
143
|
+
// already; cleanup is idempotent for that case.
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
throw new Error(`Failed to retire pending source receipt for ${receipt.path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function filterTracked(cwd, files, tracked, pending) {
|
|
151
|
+
const retained = [];
|
|
152
|
+
for (const file of files) {
|
|
153
|
+
const relative = path.relative(cwd, file).replaceAll(path.sep, "/");
|
|
154
|
+
if (tracked.has(relative)) {
|
|
155
|
+
retained.push(file);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (pending.has(relative)) {
|
|
159
|
+
retained.push(file);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return retained;
|
|
163
|
+
}
|
|
22
164
|
export function normalizeMarkdownPath(pattern) {
|
|
23
165
|
if (!pattern)
|
|
24
166
|
return null;
|
|
@@ -26,32 +168,71 @@ export function normalizeMarkdownPath(pattern) {
|
|
|
26
168
|
return pattern;
|
|
27
169
|
return `${pattern}/**/*.md`;
|
|
28
170
|
}
|
|
29
|
-
export async function discoverSourceFiles(cwd,
|
|
171
|
+
export async function discoverSourceFiles(cwd, options = {}) {
|
|
30
172
|
const markdownPatterns = [
|
|
31
|
-
normalizeMarkdownPath(
|
|
32
|
-
normalizeMarkdownPath(
|
|
33
|
-
normalizeMarkdownPath(
|
|
34
|
-
normalizeMarkdownPath(
|
|
35
|
-
normalizeMarkdownPath(
|
|
36
|
-
normalizeMarkdownPath(
|
|
37
|
-
normalizeMarkdownPath(
|
|
173
|
+
normalizeMarkdownPath(CANONICAL_ENTITY_PATHS.requirements),
|
|
174
|
+
normalizeMarkdownPath(CANONICAL_ENTITY_PATHS.scenarios),
|
|
175
|
+
normalizeMarkdownPath(CANONICAL_ENTITY_PATHS.tests),
|
|
176
|
+
normalizeMarkdownPath(CANONICAL_ENTITY_PATHS.adr),
|
|
177
|
+
normalizeMarkdownPath(CANONICAL_ENTITY_PATHS.flags),
|
|
178
|
+
normalizeMarkdownPath(CANONICAL_ENTITY_PATHS.events),
|
|
179
|
+
normalizeMarkdownPath(CANONICAL_ENTITY_PATHS.facts),
|
|
38
180
|
].filter((p) => Boolean(p));
|
|
39
181
|
const markdownFiles = await fg(markdownPatterns, {
|
|
40
182
|
cwd,
|
|
41
183
|
absolute: true,
|
|
42
184
|
ignore: [...MARKDOWN_DISCOVERY_IGNORE],
|
|
43
185
|
});
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
186
|
+
let entityMarkdownFiles = markdownFiles.filter((file) => !file.endsWith("/README.md"));
|
|
187
|
+
let manifestFiles = await fg(CANONICAL_ENTITY_PATHS.symbols, {
|
|
188
|
+
cwd,
|
|
189
|
+
absolute: true,
|
|
190
|
+
});
|
|
191
|
+
const recoveredPendingReceiptPaths = [];
|
|
192
|
+
if (options.trackedOnly) {
|
|
193
|
+
const tracked = await gitTrackedPaths(cwd);
|
|
194
|
+
const pending = pendingSourcePaths(cwd, options.recoverMissingPendingSources === true);
|
|
195
|
+
recoveredPendingReceiptPaths.push(...pending.recoveredReceipts);
|
|
196
|
+
entityMarkdownFiles = filterTracked(cwd, entityMarkdownFiles, tracked, new Set(pending.paths.keys()));
|
|
197
|
+
manifestFiles = filterTracked(cwd, manifestFiles, tracked, new Set(pending.paths.keys()));
|
|
198
|
+
for (const relative of pending.paths.keys()) {
|
|
199
|
+
const absolute = path.resolve(cwd, relative);
|
|
200
|
+
if (!existsSync(absolute))
|
|
201
|
+
continue;
|
|
202
|
+
if (relative.endsWith(".md") && !entityMarkdownFiles.includes(absolute)) {
|
|
203
|
+
entityMarkdownFiles.push(absolute);
|
|
204
|
+
}
|
|
205
|
+
if (isSymbolsManifestPath(relative) &&
|
|
206
|
+
!manifestFiles.includes(absolute)) {
|
|
207
|
+
manifestFiles.push(absolute);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// A pending receipt is consumed as soon as Git tracks its file. This is
|
|
211
|
+
// deliberately best-effort metadata; the source hash remains authoritative.
|
|
212
|
+
const pendingRoot = path.join(cwd, ".kb", "recovery", "pending-sources");
|
|
213
|
+
if (options.consumeTrackedPendingReceipts !== false &&
|
|
214
|
+
existsSync(pendingRoot)) {
|
|
215
|
+
for (const name of readdirSync(pendingRoot)) {
|
|
216
|
+
if (!name.endsWith(".json"))
|
|
217
|
+
continue;
|
|
218
|
+
try {
|
|
219
|
+
const receipt = JSON.parse(readFileSync(path.join(pendingRoot, name), "utf8"));
|
|
220
|
+
if (typeof receipt.path === "string" &&
|
|
221
|
+
tracked.has(receipt.path.replaceAll("\\", "/"))) {
|
|
222
|
+
unlinkSync(path.join(pendingRoot, name));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// Leave malformed receipts for explicit recovery diagnostics.
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
51
231
|
const relationshipsDir = getRelationshipsDir(path.join(cwd, ".kb"));
|
|
52
232
|
return {
|
|
53
233
|
markdownFiles: entityMarkdownFiles,
|
|
54
234
|
manifestFiles,
|
|
55
235
|
relationshipsDir,
|
|
236
|
+
recoveredPendingReceiptPaths,
|
|
56
237
|
};
|
|
57
238
|
}
|
|
@@ -7,10 +7,17 @@ export interface ExtractionOutput {
|
|
|
7
7
|
message: string;
|
|
8
8
|
}[];
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Authored source identities are workspace-relative POSIX paths. Code symbol
|
|
12
|
+
* coordinates remain a separate `sourceFile` field, but use the same stable
|
|
13
|
+
* relative identity so branch-local snapshots do not embed host-specific
|
|
14
|
+
* absolute paths.
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeExtractionSources(results: readonly ExtractionResult[], workspaceRoot: string): ExtractionResult[];
|
|
10
17
|
interface ExtractionDependencies {
|
|
11
18
|
extractFromMarkdown: (file: string) => ExtractionResult;
|
|
12
19
|
extractFromManifest: (file: string) => ExtractionResult[];
|
|
13
20
|
}
|
|
14
|
-
export declare function processExtractions(changedMarkdownFiles: string[], changedManifestFiles: string[], validateOnly: boolean, dependencies?: ExtractionDependencies): Promise<ExtractionOutput>;
|
|
21
|
+
export declare function processExtractions(changedMarkdownFiles: string[], changedManifestFiles: string[], validateOnly: boolean, workspaceRoot?: string, dependencies?: ExtractionDependencies): Promise<ExtractionOutput>;
|
|
15
22
|
export {};
|
|
16
23
|
//# sourceMappingURL=extraction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/extraction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/extraction.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,8BAA8B,CAAC;AAGtC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,aAAa,EAAE,MAAM,GACpB,gBAAgB,EAAE,CAoBpB;AAED,UAAU,sBAAsB;IAC9B,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;IACxD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,EAAE,CAAC;CAC3D;AAOD,wBAAsB,kBAAkB,CAEtC,oBAAoB,EAAE,MAAM,EAAE,EAC9B,oBAAoB,EAAE,MAAM,EAAE,EAC9B,YAAY,EAAE,OAAO,EACrB,aAAa,SAAgB,EAC7B,YAAY,GAAE,sBAAwD,GACrE,OAAO,CAAC,gBAAgB,CAAC,CAmD3B"}
|
|
@@ -15,16 +15,45 @@
|
|
|
15
15
|
You should have received a copy of the GNU Affero General Public License
|
|
16
16
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
-
import
|
|
18
|
+
import * as path from "node:path";
|
|
19
|
+
import { ManifestError, extractFromManifest, } from "../../extractors/manifest.js";
|
|
19
20
|
import { FrontmatterError, extractFromMarkdown, } from "../../extractors/markdown.js";
|
|
20
21
|
import { toCacheKey } from "./cache.js";
|
|
22
|
+
/**
|
|
23
|
+
* Authored source identities are workspace-relative POSIX paths. Code symbol
|
|
24
|
+
* coordinates remain a separate `sourceFile` field, but use the same stable
|
|
25
|
+
* relative identity so branch-local snapshots do not embed host-specific
|
|
26
|
+
* absolute paths.
|
|
27
|
+
*/
|
|
28
|
+
export function normalizeExtractionSources(results, workspaceRoot) {
|
|
29
|
+
const root = path.resolve(workspaceRoot);
|
|
30
|
+
const normalize = (value) => {
|
|
31
|
+
if (/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(value))
|
|
32
|
+
return value;
|
|
33
|
+
const absolute = path.isAbsolute(value) ? path.resolve(value) : undefined;
|
|
34
|
+
if (absolute?.startsWith(`${root}${path.sep}`)) {
|
|
35
|
+
return path.relative(root, absolute).replaceAll(path.sep, "/");
|
|
36
|
+
}
|
|
37
|
+
return value.replaceAll("\\", "/");
|
|
38
|
+
};
|
|
39
|
+
return results.map((result) => ({
|
|
40
|
+
...result,
|
|
41
|
+
entity: {
|
|
42
|
+
...result.entity,
|
|
43
|
+
source: normalize(result.entity.source),
|
|
44
|
+
},
|
|
45
|
+
...(result.sourceFile !== undefined
|
|
46
|
+
? { sourceFile: normalize(result.sourceFile) }
|
|
47
|
+
: {}),
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
21
50
|
const DEFAULT_EXTRACTION_DEPENDENCIES = {
|
|
22
51
|
extractFromMarkdown,
|
|
23
52
|
extractFromManifest,
|
|
24
53
|
};
|
|
25
54
|
export async function processExtractions(
|
|
26
55
|
// implements REQ-003
|
|
27
|
-
changedMarkdownFiles, changedManifestFiles, validateOnly, dependencies = DEFAULT_EXTRACTION_DEPENDENCIES) {
|
|
56
|
+
changedMarkdownFiles, changedManifestFiles, validateOnly, workspaceRoot = process.cwd(), dependencies = DEFAULT_EXTRACTION_DEPENDENCIES) {
|
|
28
57
|
const results = [];
|
|
29
58
|
const failedCacheKeys = new Set();
|
|
30
59
|
const errors = [];
|
|
@@ -45,7 +74,7 @@ changedMarkdownFiles, changedManifestFiles, validateOnly, dependencies = DEFAULT
|
|
|
45
74
|
else {
|
|
46
75
|
console.warn(`Warning: Failed to extract from ${file}: ${message}`);
|
|
47
76
|
}
|
|
48
|
-
failedCacheKeys.add(toCacheKey(file));
|
|
77
|
+
failedCacheKeys.add(toCacheKey(workspaceRoot, file));
|
|
49
78
|
}
|
|
50
79
|
}
|
|
51
80
|
for (const file of changedManifestFiles) {
|
|
@@ -55,13 +84,18 @@ changedMarkdownFiles, changedManifestFiles, validateOnly, dependencies = DEFAULT
|
|
|
55
84
|
}
|
|
56
85
|
catch (error) {
|
|
57
86
|
const message = error instanceof Error ? error.message : String(error);
|
|
87
|
+
if (error instanceof ManifestError &&
|
|
88
|
+
error.classification === "coordinate-artifact" &&
|
|
89
|
+
!validateOnly) {
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
58
92
|
if (validateOnly) {
|
|
59
93
|
errors.push({ file, message });
|
|
60
94
|
}
|
|
61
95
|
else {
|
|
62
96
|
console.warn(`Warning: Failed to extract from ${file}: ${message}`);
|
|
63
97
|
}
|
|
64
|
-
failedCacheKeys.add(toCacheKey(file));
|
|
98
|
+
failedCacheKeys.add(toCacheKey(workspaceRoot, file));
|
|
65
99
|
}
|
|
66
100
|
}
|
|
67
101
|
return { results, failedCacheKeys, errors };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dump as dumpYAML, load as parseYAML } from "js-yaml";
|
|
3
3
|
import { writeCoordinateArtifact } from "../../extractors/symbol-coordinates.js";
|
|
4
4
|
import { type ManifestSymbolEntry, enrichSymbolCoordinates } from "../../extractors/symbols-coordinator.js";
|
|
@@ -10,19 +10,22 @@ interface ManifestDeps {
|
|
|
10
10
|
existsSync: typeof existsSync;
|
|
11
11
|
parseYAML: typeof parseYAML;
|
|
12
12
|
readFileSync: typeof readFileSync;
|
|
13
|
+
renameSync: typeof renameSync;
|
|
14
|
+
unlinkSync: typeof unlinkSync;
|
|
13
15
|
writeFileSync: typeof writeFileSync;
|
|
14
16
|
writeCoordinateArtifact: typeof writeCoordinateArtifact;
|
|
15
17
|
resolveSymbolsManifestPaths: typeof resolveSymbolsManifestPaths;
|
|
16
18
|
}
|
|
17
19
|
export declare const SYMBOLS_MANIFEST_COMMENT_BLOCK = "# symbols.yaml\n# AUTHORED fields (edit freely):\n# id, title, sourceFile, links, status, tags, owner, priority\n# Generated coordinates are stored separately in symbol-coordinates.yaml.\n# Run `kibi sync --refresh-symbol-coordinates` to refresh them.\n";
|
|
18
20
|
/**
|
|
19
|
-
* Coarse symbol anchors for which per-
|
|
21
|
+
* Coarse symbol anchors for which AST per-declaration coordinates are not
|
|
22
|
+
* expected.
|
|
20
23
|
*
|
|
21
24
|
* Test-suite, module-level-behavior, and config-artifact symbols represent a
|
|
22
25
|
* whole file or configuration unit, and `extractor-miss` explicitly documents
|
|
23
|
-
* that the extractor cannot locate a declaration.
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
+
* that the extractor cannot locate a declaration. Refresh still counts those
|
|
27
|
+
* entries as unchanged instead of failures, but it persists title-match or
|
|
28
|
+
* whole-file coordinates so proof-bearing executable symbols can resolve.
|
|
26
29
|
*/
|
|
27
30
|
export { COARSE_GRANULARITY_REASONS };
|
|
28
31
|
export declare function isCoarseGranularityAnchor(entry: ManifestSymbolEntry): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/manifest.ts"],"names":[],"mappings":"AAkBA,OAAO,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/manifest.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAML,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,0BAA0B,EAE3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,UAAU,YAAY;IACpB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,2BAA2B,EAAE,OAAO,2BAA2B,CAAC;CACjE;AAkBD,eAAO,MAAM,8BAA8B,oQAK1C,CAAC;AAwBF;;;;;;;;;GASG;AACH,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAG7E;AAsGD,wBAAsB,0BAA0B,CAE9C,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAAE,wBAAwB,CAAC,EAAE,OAAO,CAAA;CAAE,GACpE,OAAO,CAAC,IAAI,CAAC,CA0Kf;AAED,wBAAgB,0BAA0B,CAExC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAOT;AAED,wBAAgB,8BAA8B,CAE5C,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3B,OAAO,CAUT"}
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
You should have received a copy of the GNU Affero General Public License
|
|
16
16
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
-
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
18
|
+
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
19
19
|
import * as path from "node:path";
|
|
20
20
|
import { dump as dumpYAML, load as parseYAML } from "js-yaml";
|
|
21
|
-
import { writeCoordinateArtifact, } from "../../extractors/symbol-coordinates.js";
|
|
21
|
+
import { coarseCoordinateSpan, coordinateIdentityHash, coordinateSourceHash, parseCoordinateArtifact, writeCoordinateArtifact, } from "../../extractors/symbol-coordinates.js";
|
|
22
22
|
import { enrichSymbolCoordinates, } from "../../extractors/symbols-coordinator.js";
|
|
23
23
|
import { COARSE_GRANULARITY_REASONS, isCoarseGranularityReason, } from "../../public/symbol-granularity.js";
|
|
24
24
|
import { resolveSymbolsManifestPaths } from "../../utils/manifest-paths.js";
|
|
@@ -29,6 +29,8 @@ function resolveDeps(overrides) {
|
|
|
29
29
|
existsSync,
|
|
30
30
|
parseYAML,
|
|
31
31
|
readFileSync,
|
|
32
|
+
renameSync,
|
|
33
|
+
unlinkSync,
|
|
32
34
|
writeFileSync,
|
|
33
35
|
writeCoordinateArtifact,
|
|
34
36
|
resolveSymbolsManifestPaths,
|
|
@@ -62,19 +64,94 @@ const GENERATED_MANIFEST_FIELDS = new Set([
|
|
|
62
64
|
"coordinatesGeneratedAt",
|
|
63
65
|
]);
|
|
64
66
|
/**
|
|
65
|
-
* Coarse symbol anchors for which per-
|
|
67
|
+
* Coarse symbol anchors for which AST per-declaration coordinates are not
|
|
68
|
+
* expected.
|
|
66
69
|
*
|
|
67
70
|
* Test-suite, module-level-behavior, and config-artifact symbols represent a
|
|
68
71
|
* whole file or configuration unit, and `extractor-miss` explicitly documents
|
|
69
|
-
* that the extractor cannot locate a declaration.
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
+
* that the extractor cannot locate a declaration. Refresh still counts those
|
|
73
|
+
* entries as unchanged instead of failures, but it persists title-match or
|
|
74
|
+
* whole-file coordinates so proof-bearing executable symbols can resolve.
|
|
72
75
|
*/
|
|
73
76
|
export { COARSE_GRANULARITY_REASONS };
|
|
74
77
|
export function isCoarseGranularityAnchor(entry) {
|
|
75
78
|
const reason = entry.granularity_reason;
|
|
76
79
|
return isCoarseGranularityReason(reason);
|
|
77
80
|
}
|
|
81
|
+
function extractedCoordinates(entry) {
|
|
82
|
+
const { sourceFile, sourceLine, sourceColumn, sourceEndLine, sourceEndColumn, } = entry;
|
|
83
|
+
return typeof sourceFile === "string" &&
|
|
84
|
+
typeof sourceLine === "number" &&
|
|
85
|
+
typeof sourceColumn === "number" &&
|
|
86
|
+
typeof sourceEndLine === "number" &&
|
|
87
|
+
typeof sourceEndColumn === "number"
|
|
88
|
+
? {
|
|
89
|
+
sourceFile,
|
|
90
|
+
sourceLine,
|
|
91
|
+
sourceColumn,
|
|
92
|
+
sourceEndLine,
|
|
93
|
+
sourceEndColumn,
|
|
94
|
+
}
|
|
95
|
+
: null;
|
|
96
|
+
}
|
|
97
|
+
function readSourceText(sourceFile, workspaceRoot, deps) {
|
|
98
|
+
const absolute = path.isAbsolute(sourceFile)
|
|
99
|
+
? sourceFile
|
|
100
|
+
: path.resolve(workspaceRoot, sourceFile);
|
|
101
|
+
if (!deps.existsSync(absolute))
|
|
102
|
+
return null;
|
|
103
|
+
try {
|
|
104
|
+
const content = deps.readFileSync(absolute, "utf8");
|
|
105
|
+
return typeof content === "string" ? content : null;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function fallbackCoarseCoordinates(entry, workspaceRoot, deps) {
|
|
112
|
+
if (!isCoarseGranularityAnchor(entry))
|
|
113
|
+
return null;
|
|
114
|
+
const sourceFile = typeof entry.sourceFile === "string" ? entry.sourceFile : undefined;
|
|
115
|
+
const title = typeof entry.title === "string" ? entry.title : "";
|
|
116
|
+
if (sourceFile === undefined)
|
|
117
|
+
return null;
|
|
118
|
+
const content = readSourceText(sourceFile, workspaceRoot, deps);
|
|
119
|
+
if (content === null)
|
|
120
|
+
return null;
|
|
121
|
+
return coarseCoordinateSpan(sourceFile, title, content);
|
|
122
|
+
}
|
|
123
|
+
/** Atomically replace `targetPath` with `content` via temp file + rename. */
|
|
124
|
+
function publishAtomically(targetPath, content, deps) {
|
|
125
|
+
const temporary = `${targetPath}.kibi-tmp-${process.pid}`;
|
|
126
|
+
try {
|
|
127
|
+
deps.writeFileSync(temporary, content, "utf8");
|
|
128
|
+
deps.renameSync(temporary, targetPath);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
try {
|
|
132
|
+
deps.unlinkSync(temporary);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Temp cleanup is best effort; the original failure propagates.
|
|
136
|
+
}
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function manifestEntryIdentity(entry) {
|
|
141
|
+
const title = typeof entry.title === "string" ? entry.title : undefined;
|
|
142
|
+
const sourceFile = typeof entry.sourceFile === "string" ? entry.sourceFile : undefined;
|
|
143
|
+
const granularityReason = typeof entry.granularity_reason === "string"
|
|
144
|
+
? entry.granularity_reason
|
|
145
|
+
: undefined;
|
|
146
|
+
return {
|
|
147
|
+
id: String(entry.id),
|
|
148
|
+
...(title === undefined ? {} : { title }),
|
|
149
|
+
...(sourceFile === undefined ? {} : { sourceFile }),
|
|
150
|
+
...(granularityReason === undefined
|
|
151
|
+
? {}
|
|
152
|
+
: { granularity_reason: granularityReason }),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
78
155
|
export async function refreshManifestCoordinates(
|
|
79
156
|
// implements REQ-003
|
|
80
157
|
manifestPath, workspaceRoot, deps) {
|
|
@@ -83,48 +160,52 @@ manifestPath, workspaceRoot, deps) {
|
|
|
83
160
|
const rawContent = resolved.readFileSync(manifestPath, "utf8");
|
|
84
161
|
const parsed = resolved.parseYAML(rawContent);
|
|
85
162
|
if (!isRecord(parsed)) {
|
|
86
|
-
|
|
87
|
-
return;
|
|
163
|
+
throw new Error(`symbols manifest ${manifestPath} is not a YAML object; refusing coordinate refresh`);
|
|
88
164
|
}
|
|
89
165
|
const rawSymbols = parsed.symbols;
|
|
90
166
|
if (!Array.isArray(rawSymbols)) {
|
|
91
|
-
|
|
92
|
-
return;
|
|
167
|
+
throw new Error(`symbols manifest ${manifestPath} has no symbols array; refusing coordinate refresh`);
|
|
93
168
|
}
|
|
94
169
|
const before = rawSymbols.map((entry) => isRecord(entry)
|
|
95
170
|
? { ...entry }
|
|
96
171
|
: {});
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
typeof entry.sourceColumn === "number" &&
|
|
107
|
-
typeof entry.sourceEndLine === "number" &&
|
|
108
|
-
typeof entry.sourceEndColumn === "number") {
|
|
109
|
-
coordinatesMap[id] = {
|
|
110
|
-
sourceFile: entry.sourceFile,
|
|
111
|
-
sourceLine: entry.sourceLine,
|
|
112
|
-
sourceColumn: entry.sourceColumn,
|
|
113
|
-
sourceEndLine: entry.sourceEndLine,
|
|
114
|
-
sourceEndColumn: entry.sourceEndColumn,
|
|
115
|
-
};
|
|
172
|
+
let coordinatesPath = null;
|
|
173
|
+
if (shouldRefreshCoordinates) {
|
|
174
|
+
coordinatesPath =
|
|
175
|
+
resolved.resolveSymbolsManifestPaths(workspaceRoot).coordinatesPath;
|
|
176
|
+
if (resolved.existsSync(coordinatesPath)) {
|
|
177
|
+
const existing = parseCoordinateArtifact(String(resolved.readFileSync(coordinatesPath, "utf8")));
|
|
178
|
+
if (existing.status === "invalid") {
|
|
179
|
+
throw new Error(`Failed to parse coordinate artifact ${coordinatesPath}: ${existing.reason}`);
|
|
180
|
+
}
|
|
116
181
|
}
|
|
117
182
|
}
|
|
118
|
-
|
|
183
|
+
const enriched = await resolved.enrichSymbolCoordinates(before, workspaceRoot);
|
|
184
|
+
// Publish the generated coordinate artifact when explicitly requested.
|
|
185
|
+
// Parse and I/O failures are fatal so sync never advances cache state on a
|
|
186
|
+
// partially published compiler dependency. Symbols without extractable
|
|
187
|
+
// coordinates stay absent from the artifact; coverage keeps their gap visible.
|
|
188
|
+
let refreshedArtifactBytes = null;
|
|
119
189
|
if (shouldRefreshCoordinates) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
190
|
+
const boundEntries = {};
|
|
191
|
+
for (const entry of enriched) {
|
|
192
|
+
const id = typeof entry?.id === "string" ? entry.id : undefined;
|
|
193
|
+
if (!id)
|
|
194
|
+
continue;
|
|
195
|
+
const span = extractedCoordinates(entry) ??
|
|
196
|
+
fallbackCoarseCoordinates(entry, workspaceRoot, resolved);
|
|
197
|
+
if (span === null)
|
|
198
|
+
continue;
|
|
199
|
+
const sourceText = readSourceText(span.sourceFile, workspaceRoot, resolved);
|
|
200
|
+
if (sourceText === null)
|
|
201
|
+
continue;
|
|
202
|
+
boundEntries[id] = {
|
|
203
|
+
...span,
|
|
204
|
+
identityHash: coordinateIdentityHash(manifestEntryIdentity(entry)),
|
|
205
|
+
sourceHash: coordinateSourceHash(sourceText),
|
|
206
|
+
};
|
|
127
207
|
}
|
|
208
|
+
refreshedArtifactBytes = resolved.writeCoordinateArtifact(boundEntries);
|
|
128
209
|
}
|
|
129
210
|
// Coordinates belong exclusively to the generated artifact. Always strip
|
|
130
211
|
// them from the authored manifest so consecutive refreshes are idempotent.
|
|
@@ -162,8 +243,30 @@ manifestPath, workspaceRoot, deps) {
|
|
|
162
243
|
sortKeys: false,
|
|
163
244
|
});
|
|
164
245
|
const nextContent = `${SYMBOLS_MANIFEST_COMMENT_BLOCK}${dumped}`;
|
|
165
|
-
|
|
166
|
-
|
|
246
|
+
let manifestPublished = false;
|
|
247
|
+
try {
|
|
248
|
+
if (rawContent !== nextContent) {
|
|
249
|
+
publishAtomically(manifestPath, nextContent, resolved);
|
|
250
|
+
manifestPublished = true;
|
|
251
|
+
}
|
|
252
|
+
if (refreshedArtifactBytes !== null && coordinatesPath !== null) {
|
|
253
|
+
publishAtomically(coordinatesPath, refreshedArtifactBytes, resolved);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
if (manifestPublished) {
|
|
258
|
+
try {
|
|
259
|
+
const current = resolved.readFileSync(manifestPath, "utf8");
|
|
260
|
+
if (current !== nextContent) {
|
|
261
|
+
throw new Error(`symbol manifest changed after publication; refusing rollback: ${manifestPath}`);
|
|
262
|
+
}
|
|
263
|
+
publishAtomically(manifestPath, rawContent, resolved);
|
|
264
|
+
}
|
|
265
|
+
catch (rollbackError) {
|
|
266
|
+
throw new AggregateError([error, rollbackError], `Coordinate artifact publication failed and manifest rollback failed: ${manifestPath}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
throw error;
|
|
167
270
|
}
|
|
168
271
|
console.log(`\u2713 Refreshed symbol coordinates in ${path.relative(workspaceRoot, manifestPath)} (refreshed=${refreshed}, unchanged=${unchanged}, failed=${failed})`);
|
|
169
272
|
}
|
|
@@ -5,7 +5,16 @@ export interface PersistenceResult {
|
|
|
5
5
|
relationshipCount: number;
|
|
6
6
|
kbModified: boolean;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
/** Remove entities owned by changed/deleted source files before re-upserting. */
|
|
9
|
+
export declare function retractEntitiesForSources(prolog: PrologProcess, sourceFiles: readonly string[]): Promise<number>;
|
|
10
|
+
/** Remove an exact entity delta without scanning every indexed source. */
|
|
11
|
+
export declare function retractEntitiesById(prolog: PrologProcess, entityIds: readonly string[]): Promise<number>;
|
|
12
|
+
/** Clear outgoing inline relationships for entities whose payload changed. */
|
|
13
|
+
export declare function retractEntityRelationshipsById(prolog: PrologProcess, entityIds: readonly string[]): Promise<void>;
|
|
14
|
+
export declare function retractRelationships(prolog: PrologProcess, relationships: readonly ExtractedRelationship[]): Promise<number>;
|
|
15
|
+
export declare function persistEntities(prolog: PrologProcess, results: ExtractionResult[], entityIds: Set<string>, options?: {
|
|
16
|
+
loadExistingEntityIds?: boolean;
|
|
17
|
+
}): Promise<{
|
|
9
18
|
entityCount: number;
|
|
10
19
|
kbModified: boolean;
|
|
11
20
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/persistence.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgHrD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AAmCD,wBAAsB,eAAe,CAEnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/persistence.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgHrD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AA8CD,iFAAiF;AACjF,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAAC,MAAM,CAAC,CAkCjB;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,8EAA8E;AAC9E,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,SAAS,qBAAqB,EAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAmCD,wBAAsB,eAAe,CAEnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAO,GAChD,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CA4OvD;AA6BD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,kBAAkB,EAAE,qBAAqB,EAAE,GAC1C,OAAO,CAAC;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CA0N7D"}
|