kibi-cli 0.19.0 → 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-operation-loader.d.ts.map +1 -1
- package/dist/cli-operation-loader.js +53 -20
- package/dist/cli-operation-metadata.d.ts +20 -8
- package/dist/cli-operation-metadata.d.ts.map +1 -1
- package/dist/cli-operation-metadata.js +23 -8
- package/dist/cli-protocol.d.ts.map +1 -1
- package/dist/cli-protocol.js +38 -8
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +14 -2
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +26 -4
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +10 -0
- 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 +2 -0
- 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 +20 -67
- package/dist/commands/discovery-shared.d.ts.map +1 -1
- package/dist/commands/discovery-shared.js +10 -19
- 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.map +1 -1
- package/dist/commands/engine.js +10 -7
- package/dist/commands/gc.d.ts +5 -2
- package/dist/commands/gc.d.ts.map +1 -1
- package/dist/commands/gc.js +140 -71
- package/dist/commands/github-init.d.ts +56 -0
- package/dist/commands/github-init.d.ts.map +1 -0
- package/dist/commands/github-init.js +310 -0
- package/dist/commands/init-helpers.d.ts +1 -1
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +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/report.d.ts +24 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +191 -0
- package/dist/commands/sync/cache.d.ts +16 -3
- package/dist/commands/sync/cache.d.ts.map +1 -1
- package/dist/commands/sync/cache.js +111 -4
- package/dist/commands/sync/discovery.d.ts +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.map +1 -1
- package/dist/commands/sync/persistence.js +3 -0
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +304 -79
- 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.d.ts +96 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +392 -23
- 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.map +1 -1
- package/dist/extractors/relationships.js +1 -0
- 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.map +1 -1
- package/dist/prolog.js +27 -8
- 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-executors.d.ts +37 -1
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +206 -6
- 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 +44 -5
- 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 +97 -7
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- package/dist/public/operations/source-relationship-parity.d.ts +13 -0
- package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
- package/dist/public/operations/source-relationship-parity.js +162 -0
- package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
- package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
- package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
- package/dist/public/operations/specs/check.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 +39 -9
- package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
- package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
- package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
- package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
- package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
- package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
- package/dist/public/skills/kibi-usage/SKILL.md +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 +82 -22
- 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 +46 -7
- 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-executors.ts +299 -12
- 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 +60 -5
- 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 +91 -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 +39 -9
- package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
- package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
- package/src/public/skills/kibi-traceability/SKILL.md +47 -47
- package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
- package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
- package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
- package/src/public/skills/kibi-usage/SKILL.md +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
package/dist/engine.js
CHANGED
|
@@ -15,12 +15,14 @@ import { fileURLToPath } from "node:url";
|
|
|
15
15
|
import { PrologProcess, resolveKbPlPath } from "./prolog.js";
|
|
16
16
|
import { parseEntityFromList, parseListOfLists } from "./prolog/codec.js";
|
|
17
17
|
import { isValidBranchName } from "./utils/branch-resolver.js";
|
|
18
|
+
import { ensureBranchStoreManifest } from "./utils/branch-store-locator.js";
|
|
18
19
|
export const ENGINE_PROTOCOL_VERSION = 1;
|
|
19
20
|
export const ENGINE_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
|
|
20
21
|
export const ENGINE_PACKAGE_VERSIONS = process.env.KIBI_PACKAGE_VERSIONS ?? "unknown";
|
|
21
22
|
const ENGINE_QUERY_CACHE_MAX_ENTRIES = 128;
|
|
22
23
|
const ENGINE_QUERY_CACHE_MAX_RESULT_BYTES = 8 * 1024 * 1024;
|
|
23
24
|
const ENGINE_FRESHNESS_CACHE_MS = 100;
|
|
25
|
+
const ENGINE_PUBLICATION_LOCK_STALE_MS = 5_000;
|
|
24
26
|
function engineIdleTimeoutMs() {
|
|
25
27
|
const configured = Number.parseInt(process.env.KIBI_ENGINE_IDLE_TIMEOUT_MS ?? "", 10);
|
|
26
28
|
return Number.isFinite(configured) && configured >= 100
|
|
@@ -48,15 +50,84 @@ function cacheableEngineGoal(goal) {
|
|
|
48
50
|
function mutatingEngineGoal(goal) {
|
|
49
51
|
return /(?:kb_(?:assert|retract|commit|save|delete)|rdf_transaction|rdf_assert|rdf_retract)/.test(goal);
|
|
50
52
|
}
|
|
53
|
+
function maskPrologData(goal) {
|
|
54
|
+
const chars = [...goal];
|
|
55
|
+
let quote = null;
|
|
56
|
+
let lineComment = false;
|
|
57
|
+
let blockComment = false;
|
|
58
|
+
for (let index = 0; index < chars.length; index += 1) {
|
|
59
|
+
const current = chars[index];
|
|
60
|
+
const next = chars[index + 1];
|
|
61
|
+
if (lineComment) {
|
|
62
|
+
if (current === "\n")
|
|
63
|
+
lineComment = false;
|
|
64
|
+
else
|
|
65
|
+
chars[index] = " ";
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (blockComment) {
|
|
69
|
+
if (current === "*" && next === "/") {
|
|
70
|
+
chars[index] = " ";
|
|
71
|
+
chars[index + 1] = " ";
|
|
72
|
+
index += 1;
|
|
73
|
+
blockComment = false;
|
|
74
|
+
}
|
|
75
|
+
else if (current !== "\n") {
|
|
76
|
+
chars[index] = " ";
|
|
77
|
+
}
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (quote !== null) {
|
|
81
|
+
if (current === "\\") {
|
|
82
|
+
chars[index] = " ";
|
|
83
|
+
if (index + 1 < chars.length) {
|
|
84
|
+
chars[index + 1] = " ";
|
|
85
|
+
index += 1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (current === quote) {
|
|
89
|
+
if (next === quote) {
|
|
90
|
+
chars[index] = " ";
|
|
91
|
+
chars[index + 1] = " ";
|
|
92
|
+
index += 1;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
chars[index] = " ";
|
|
96
|
+
quote = null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (current !== "\n") {
|
|
100
|
+
chars[index] = " ";
|
|
101
|
+
}
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (current === "%") {
|
|
105
|
+
chars[index] = " ";
|
|
106
|
+
lineComment = true;
|
|
107
|
+
}
|
|
108
|
+
else if (current === "/" && next === "*") {
|
|
109
|
+
chars[index] = " ";
|
|
110
|
+
chars[index + 1] = " ";
|
|
111
|
+
index += 1;
|
|
112
|
+
blockComment = true;
|
|
113
|
+
}
|
|
114
|
+
else if (current === "'" || current === '"' || current === "`") {
|
|
115
|
+
chars[index] = " ";
|
|
116
|
+
quote = current;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return chars.join("");
|
|
120
|
+
}
|
|
51
121
|
function safeEngineGoal(goal) {
|
|
52
122
|
// The socket is a local capability boundary, not a general-purpose SWI
|
|
53
123
|
// console. Public clients may compose the typed Kibi predicates needed by
|
|
54
|
-
// the
|
|
124
|
+
// the typed operation contracts, but process/filesystem/network escape hatches
|
|
55
125
|
// are rejected before they reach Prolog.
|
|
56
|
-
|
|
126
|
+
const executable = maskPrologData(goal);
|
|
127
|
+
if (/\b(?:halt|abort|shell|system|process_create|consult|load_files|open|close|delete_file|rename_file|make_directory|thread_create|rdf_attach_db|rdf_load|rdf_save|assertz|asserta|retractall|set_prolog_flag)\s*\(/.test(executable)) {
|
|
57
128
|
return false;
|
|
58
129
|
}
|
|
59
|
-
return /(?:^|[(:,\s])(?:kb_|checks:|status:|discovery:|requirement_proof:|findall\(|aggregate_all\(|rdf_transaction\(|
|
|
130
|
+
return /(?:^|[(:,\s])(?:kb_|checks:|status:|discovery:|requirement_proof:|findall\(|aggregate_all\(|rdf_transaction\(|use_module\(|atom_json_dict\(|member\(|once\(|true\b|fail\b)/.test(goal.trim());
|
|
60
131
|
}
|
|
61
132
|
function frame(value) {
|
|
62
133
|
const payload = Buffer.from(JSON.stringify(value), "utf8");
|
|
@@ -199,6 +270,127 @@ export function engineStartLockPath(workspaceRoot, branch) {
|
|
|
199
270
|
}
|
|
200
271
|
return `${engineSocketPath(workspaceRoot, branch)}.start.lock`;
|
|
201
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* A generation publisher holds this lease from the existing daemon shutdown
|
|
275
|
+
* through the atomic branch-store cutover. Engine clients honor the lease so
|
|
276
|
+
* another process cannot auto-start a writer in the stop-to-publish gap.
|
|
277
|
+
*/
|
|
278
|
+
export function enginePublicationLockPath(workspaceRoot, branch) {
|
|
279
|
+
return `${engineSocketPath(workspaceRoot, branch)}.publish.lock`;
|
|
280
|
+
}
|
|
281
|
+
function publicationLockOwner(lockPath) {
|
|
282
|
+
try {
|
|
283
|
+
const [pidText, createdText] = readFileSync(lockPath, "utf8")
|
|
284
|
+
.trim()
|
|
285
|
+
.split(":");
|
|
286
|
+
const pid = Number.parseInt(pidText ?? "", 10);
|
|
287
|
+
const createdAt = Number.parseInt(createdText ?? "", 10);
|
|
288
|
+
if (!Number.isInteger(pid) || pid <= 1 || !Number.isFinite(createdAt)) {
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
return { pid, createdAt };
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
function processIsAlive(pid) {
|
|
298
|
+
try {
|
|
299
|
+
process.kill(pid, 0);
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function clearStalePublicationLock(lockPath) {
|
|
307
|
+
if (!existsSync(lockPath))
|
|
308
|
+
return true;
|
|
309
|
+
const owner = publicationLockOwner(lockPath);
|
|
310
|
+
let age = 0;
|
|
311
|
+
try {
|
|
312
|
+
age = Date.now() - statSync(lockPath).mtimeMs;
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
if ((owner === null || !processIsAlive(owner.pid)) &&
|
|
318
|
+
age > ENGINE_PUBLICATION_LOCK_STALE_MS) {
|
|
319
|
+
try {
|
|
320
|
+
unlinkSync(lockPath);
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
function publicationLockIsActive(lockPath) {
|
|
330
|
+
if (!existsSync(lockPath))
|
|
331
|
+
return false;
|
|
332
|
+
if (clearStalePublicationLock(lockPath))
|
|
333
|
+
return false;
|
|
334
|
+
return existsSync(lockPath);
|
|
335
|
+
}
|
|
336
|
+
export function acquireEnginePublicationLease(workspaceRoot, branch) {
|
|
337
|
+
const lockPath = enginePublicationLockPath(workspaceRoot, branch);
|
|
338
|
+
mkdirSync(path.dirname(lockPath), { recursive: true, mode: 0o700 });
|
|
339
|
+
let descriptor = null;
|
|
340
|
+
try {
|
|
341
|
+
descriptor = openSync(lockPath, "wx", 0o600);
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
if (clearStalePublicationLock(lockPath)) {
|
|
345
|
+
try {
|
|
346
|
+
descriptor = openSync(lockPath, "wx", 0o600);
|
|
347
|
+
}
|
|
348
|
+
catch {
|
|
349
|
+
// Fall through to the stable fail-closed error below.
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
if (descriptor === null) {
|
|
354
|
+
throw new Error(`Kibi engine publication is already in progress: ${lockPath}`);
|
|
355
|
+
}
|
|
356
|
+
try {
|
|
357
|
+
writeFileSync(lockPath, `${process.pid}:${Date.now()}\n`, { flag: "w" });
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
closeSync(descriptor);
|
|
361
|
+
unlinkSync(lockPath);
|
|
362
|
+
throw error;
|
|
363
|
+
}
|
|
364
|
+
const startLockPath = engineStartLockPath(workspaceRoot, branch);
|
|
365
|
+
const startDescriptor = tryAcquireStartLock(startLockPath);
|
|
366
|
+
if (startDescriptor === null) {
|
|
367
|
+
closeSync(descriptor);
|
|
368
|
+
unlinkSync(lockPath);
|
|
369
|
+
throw new Error(`Kibi engine publication cannot acquire the engine start lease: ${startLockPath}`);
|
|
370
|
+
}
|
|
371
|
+
let released = false;
|
|
372
|
+
return {
|
|
373
|
+
path: lockPath,
|
|
374
|
+
release: () => {
|
|
375
|
+
if (released)
|
|
376
|
+
return;
|
|
377
|
+
released = true;
|
|
378
|
+
try {
|
|
379
|
+
closeSync(descriptor);
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
// The descriptor may already have been closed during process cleanup.
|
|
383
|
+
}
|
|
384
|
+
releaseStartLock(startLockPath, startDescriptor);
|
|
385
|
+
try {
|
|
386
|
+
unlinkSync(lockPath);
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
// A subsequent publisher may have replaced a stale lock after a crash.
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
};
|
|
393
|
+
}
|
|
202
394
|
function tryAcquireStartLock(lockPath) {
|
|
203
395
|
try {
|
|
204
396
|
const descriptor = openSync(lockPath, "wx", 0o600);
|
|
@@ -377,6 +569,7 @@ export class EngineClient {
|
|
|
377
569
|
workspaceRoot;
|
|
378
570
|
branch;
|
|
379
571
|
timeout;
|
|
572
|
+
allowPublicationLock;
|
|
380
573
|
socket = null;
|
|
381
574
|
daemon = null;
|
|
382
575
|
inputBuffer = Buffer.alloc(0);
|
|
@@ -397,11 +590,17 @@ export class EngineClient {
|
|
|
397
590
|
}
|
|
398
591
|
this.branch = options.branch;
|
|
399
592
|
this.timeout = options.timeout ?? 120_000;
|
|
593
|
+
this.allowPublicationLock = options.allowPublicationLock ?? false;
|
|
400
594
|
}
|
|
401
595
|
async start(allowSpawn = true) {
|
|
402
596
|
if (this.socket !== null && !this.socket.destroyed)
|
|
403
597
|
return;
|
|
404
598
|
const socketPath = engineSocketPath(this.workspaceRoot, this.branch);
|
|
599
|
+
const publicationLockPath = enginePublicationLockPath(this.workspaceRoot, this.branch);
|
|
600
|
+
if (!this.allowPublicationLock &&
|
|
601
|
+
publicationLockIsActive(publicationLockPath)) {
|
|
602
|
+
throw new Error(`Kibi engine publication is in progress: ${publicationLockPath}`);
|
|
603
|
+
}
|
|
405
604
|
try {
|
|
406
605
|
if (existsSync(socketPath)) {
|
|
407
606
|
this.socket = await connectWithRetry(socketPath, 150);
|
|
@@ -576,22 +775,28 @@ export class EngineClient {
|
|
|
576
775
|
release();
|
|
577
776
|
}
|
|
578
777
|
}
|
|
778
|
+
/** Execute a versioned, goal-free engine command. Raw query remains private
|
|
779
|
+
* compatibility traffic for the in-process Prolog adapter only. */
|
|
780
|
+
async command(command, signal) {
|
|
781
|
+
return this.request({ method: "command", command }, signal);
|
|
782
|
+
}
|
|
579
783
|
async queryBatch(goals) {
|
|
580
784
|
const normalized = goals.map((goal) => goal.trim().replace(/\.+\s*$/, ""));
|
|
581
785
|
return this.query(`rdf_transaction((${normalized.join(", ")}))`);
|
|
582
786
|
}
|
|
583
|
-
async queryEntities(input) {
|
|
584
|
-
const result = await this.
|
|
585
|
-
|
|
787
|
+
async queryEntities(input, signal) {
|
|
788
|
+
const result = await this.command({
|
|
789
|
+
version: 1,
|
|
790
|
+
kind: "entities",
|
|
586
791
|
...(input.type !== undefined ? { type: input.type } : {}),
|
|
587
|
-
...(input.id !== undefined ? {
|
|
792
|
+
...(input.id !== undefined ? { id: input.id } : {}),
|
|
588
793
|
...(input.tags !== undefined ? { tags: input.tags } : {}),
|
|
589
794
|
...(input.sourceFile !== undefined
|
|
590
795
|
? { sourceFile: input.sourceFile }
|
|
591
796
|
: {}),
|
|
592
797
|
limit: input.limit,
|
|
593
798
|
offset: input.offset,
|
|
594
|
-
});
|
|
799
|
+
}, signal);
|
|
595
800
|
if (!result.success) {
|
|
596
801
|
throw new Error(result.error ?? "Indexed entity query failed");
|
|
597
802
|
}
|
|
@@ -604,14 +809,15 @@ export class EngineClient {
|
|
|
604
809
|
count: Number.isFinite(count) ? count : rows.length,
|
|
605
810
|
};
|
|
606
811
|
}
|
|
607
|
-
async searchEntities(input) {
|
|
608
|
-
const result = await this.
|
|
609
|
-
|
|
610
|
-
|
|
812
|
+
async searchEntities(input, signal) {
|
|
813
|
+
const result = await this.command({
|
|
814
|
+
version: 1,
|
|
815
|
+
kind: "search",
|
|
816
|
+
query: input.query,
|
|
611
817
|
...(input.type !== undefined ? { type: input.type } : {}),
|
|
612
818
|
limit: input.limit,
|
|
613
819
|
offset: input.offset,
|
|
614
|
-
});
|
|
820
|
+
}, signal);
|
|
615
821
|
if (!result.success) {
|
|
616
822
|
throw new Error(result.error ?? "Indexed search candidate query failed");
|
|
617
823
|
}
|
|
@@ -645,20 +851,20 @@ export class EngineClient {
|
|
|
645
851
|
this.lastResult = null;
|
|
646
852
|
return result;
|
|
647
853
|
}
|
|
648
|
-
async save() {
|
|
649
|
-
return this.query("kb_save");
|
|
854
|
+
async save(signal) {
|
|
855
|
+
return this.query("kb_save", signal);
|
|
650
856
|
}
|
|
651
857
|
async storageStatus() {
|
|
652
858
|
return this.request({ method: "status" });
|
|
653
859
|
}
|
|
654
860
|
async checkpoint() {
|
|
655
|
-
return this.
|
|
861
|
+
return this.command({ version: 1, kind: "checkpoint" });
|
|
656
862
|
}
|
|
657
863
|
async queryStatusJson() {
|
|
658
|
-
return this.
|
|
864
|
+
return this.command({ version: 1, kind: "status" });
|
|
659
865
|
}
|
|
660
866
|
async compact() {
|
|
661
|
-
return this.
|
|
867
|
+
return this.command({ version: 1, kind: "compact" });
|
|
662
868
|
}
|
|
663
869
|
async exportStorage(targetDirectory) {
|
|
664
870
|
return this.request({
|
|
@@ -693,9 +899,19 @@ export class EngineClient {
|
|
|
693
899
|
throw new Error("Unable to start Kibi engine for stop request");
|
|
694
900
|
}
|
|
695
901
|
}
|
|
696
|
-
if (!this.isRunning())
|
|
902
|
+
if (!this.isRunning()) {
|
|
903
|
+
if (existsSync(socketPath)) {
|
|
904
|
+
throw new Error(`Kibi engine socket remains present but is not reachable: ${socketPath}`);
|
|
905
|
+
}
|
|
697
906
|
return;
|
|
698
|
-
|
|
907
|
+
}
|
|
908
|
+
let requestError;
|
|
909
|
+
try {
|
|
910
|
+
await this.request({ method: "stop" });
|
|
911
|
+
}
|
|
912
|
+
catch (error) {
|
|
913
|
+
requestError = error;
|
|
914
|
+
}
|
|
699
915
|
this.socket?.destroy();
|
|
700
916
|
this.socket = null;
|
|
701
917
|
// The daemon acknowledges stop before its SWI child has flushed and the
|
|
@@ -705,6 +921,10 @@ export class EngineClient {
|
|
|
705
921
|
while (existsSync(socketPath) && Date.now() < deadline) {
|
|
706
922
|
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
707
923
|
}
|
|
924
|
+
if (existsSync(socketPath)) {
|
|
925
|
+
const detail = requestError instanceof Error ? `: ${requestError.message}` : "";
|
|
926
|
+
throw new Error(`Kibi engine did not stop within 5 seconds${detail}`);
|
|
927
|
+
}
|
|
708
928
|
}
|
|
709
929
|
async terminate() {
|
|
710
930
|
// Closing a client connection releases the engine; the daemon remains
|
|
@@ -924,10 +1144,10 @@ export async function runEngineDaemon(options) {
|
|
|
924
1144
|
if (!isValidBranchName(options.branch)) {
|
|
925
1145
|
throw new Error(`Invalid Kibi engine branch name: ${options.branch}`);
|
|
926
1146
|
}
|
|
927
|
-
|
|
1147
|
+
const branchPath = ensureBranchStoreManifest(options.workspaceRoot, options.branch);
|
|
1148
|
+
await ensureJournaledBranchStoreAsync(branchPath);
|
|
928
1149
|
const prolog = new PrologProcess({ timeout: 120_000, oneShot: false });
|
|
929
1150
|
await prolog.start();
|
|
930
|
-
const branchPath = path.join(options.workspaceRoot, ".kb", "branches", options.branch);
|
|
931
1151
|
const attached = await prolog.query(`kb_attach('${quoteProlog(branchPath)}')`);
|
|
932
1152
|
if (!attached.success)
|
|
933
1153
|
throw new Error(attached.error ?? "Failed to attach branch KB");
|
|
@@ -968,6 +1188,25 @@ export async function runEngineDaemon(options) {
|
|
|
968
1188
|
const cancelledRequests = new Set();
|
|
969
1189
|
const clients = new Set();
|
|
970
1190
|
let shuttingDown = false;
|
|
1191
|
+
const exactBranchStatus = (result) => {
|
|
1192
|
+
if (!result.success || typeof result.bindings.JsonString !== "string") {
|
|
1193
|
+
return result;
|
|
1194
|
+
}
|
|
1195
|
+
try {
|
|
1196
|
+
const decoded = JSON.parse(JSON.parse(result.bindings.JsonString));
|
|
1197
|
+
decoded.branch = options.branch;
|
|
1198
|
+
return {
|
|
1199
|
+
...result,
|
|
1200
|
+
bindings: {
|
|
1201
|
+
...result.bindings,
|
|
1202
|
+
JsonString: JSON.stringify(JSON.stringify(decoded)),
|
|
1203
|
+
},
|
|
1204
|
+
};
|
|
1205
|
+
}
|
|
1206
|
+
catch {
|
|
1207
|
+
return result;
|
|
1208
|
+
}
|
|
1209
|
+
};
|
|
971
1210
|
const scheduleIdleExit = () => {
|
|
972
1211
|
if (activeClients > 0)
|
|
973
1212
|
return;
|
|
@@ -1057,12 +1296,142 @@ export async function runEngineDaemon(options) {
|
|
|
1057
1296
|
}
|
|
1058
1297
|
return result;
|
|
1059
1298
|
}
|
|
1299
|
+
case "command": {
|
|
1300
|
+
const command = request.command;
|
|
1301
|
+
if (command === undefined || command.version !== 1) {
|
|
1302
|
+
throw new Error("engine.command must use version 1");
|
|
1303
|
+
}
|
|
1304
|
+
switch (command.kind) {
|
|
1305
|
+
case "status":
|
|
1306
|
+
return exactBranchStatus(await prolog.query("status:kb_status_json(JsonString)"));
|
|
1307
|
+
case "checkpoint": {
|
|
1308
|
+
queryCache.clear();
|
|
1309
|
+
freshnessCache = null;
|
|
1310
|
+
const result = await prolog.query("kb_sync_checkpoint");
|
|
1311
|
+
if (result.success)
|
|
1312
|
+
fsyncJournaledBranchStore(branchPath);
|
|
1313
|
+
return result;
|
|
1314
|
+
}
|
|
1315
|
+
case "compact": {
|
|
1316
|
+
const result = await prolog.query("kb_storage_compact");
|
|
1317
|
+
if (result.success)
|
|
1318
|
+
fsyncJournaledBranchStore(branchPath);
|
|
1319
|
+
return result;
|
|
1320
|
+
}
|
|
1321
|
+
case "save": {
|
|
1322
|
+
const result = await prolog.query("kb_save");
|
|
1323
|
+
if (result.success)
|
|
1324
|
+
fsyncJournaledBranchStore(branchPath);
|
|
1325
|
+
return result;
|
|
1326
|
+
}
|
|
1327
|
+
case "check": {
|
|
1328
|
+
if (command.rule !== undefined &&
|
|
1329
|
+
!/^[a-z][a-z0-9_]*$/.test(command.rule)) {
|
|
1330
|
+
throw new Error("engine.check.rule must be a lowercase rule name");
|
|
1331
|
+
}
|
|
1332
|
+
// Rule selection is intentionally resolved inside the engine. A
|
|
1333
|
+
// caller never supplies a Prolog goal over the command boundary.
|
|
1334
|
+
return prolog.query("checks:check_all_json(JsonString)");
|
|
1335
|
+
}
|
|
1336
|
+
case "relationship": {
|
|
1337
|
+
if (!command.type || !command.from || !command.to) {
|
|
1338
|
+
throw new Error("engine.relationship requires type, from, and to");
|
|
1339
|
+
}
|
|
1340
|
+
const type = quoteProlog(command.type);
|
|
1341
|
+
const from = quoteProlog(command.from);
|
|
1342
|
+
const to = quoteProlog(command.to);
|
|
1343
|
+
const goal = command.action === "assert"
|
|
1344
|
+
? `kb_assert_relationship('${type}', '${from}', '${to}', [])`
|
|
1345
|
+
: `kb_retract_relationship('${type}', '${from}', '${to}')`;
|
|
1346
|
+
const result = await prolog.query(goal);
|
|
1347
|
+
if (result.success) {
|
|
1348
|
+
queryCache.clear();
|
|
1349
|
+
freshnessCache = null;
|
|
1350
|
+
fsyncJournaledBranchStore(branchPath);
|
|
1351
|
+
}
|
|
1352
|
+
return result;
|
|
1353
|
+
}
|
|
1354
|
+
case "persistence": {
|
|
1355
|
+
const goal = command.action === "checkpoint"
|
|
1356
|
+
? "kb_sync_checkpoint"
|
|
1357
|
+
: command.action === "compact"
|
|
1358
|
+
? "kb_storage_compact"
|
|
1359
|
+
: command.action === "save"
|
|
1360
|
+
? "kb_save"
|
|
1361
|
+
: command.targetDirectory
|
|
1362
|
+
? `kb_storage_export('${quoteProlog(command.targetDirectory)}')`
|
|
1363
|
+
: null;
|
|
1364
|
+
if (goal === null) {
|
|
1365
|
+
throw new Error("engine.persistence.export requires targetDirectory");
|
|
1366
|
+
}
|
|
1367
|
+
const result = await prolog.query(goal);
|
|
1368
|
+
if (result.success)
|
|
1369
|
+
fsyncJournaledBranchStore(branchPath);
|
|
1370
|
+
return result;
|
|
1371
|
+
}
|
|
1372
|
+
case "lifecycle": {
|
|
1373
|
+
if (command.action === "stop") {
|
|
1374
|
+
setImmediate(() => void shutdown());
|
|
1375
|
+
return { stopped: true };
|
|
1376
|
+
}
|
|
1377
|
+
if (!Number.isInteger(command.requestId)) {
|
|
1378
|
+
throw new Error("engine.lifecycle.cancel requires requestId");
|
|
1379
|
+
}
|
|
1380
|
+
const requestId = command.requestId;
|
|
1381
|
+
cancelledRequests.add(requestId);
|
|
1382
|
+
return { cancelled: requestId };
|
|
1383
|
+
}
|
|
1384
|
+
case "stop":
|
|
1385
|
+
setImmediate(() => void shutdown());
|
|
1386
|
+
return { stopped: true };
|
|
1387
|
+
case "cancel":
|
|
1388
|
+
cancelledRequests.add(command.requestId);
|
|
1389
|
+
return { cancelled: command.requestId };
|
|
1390
|
+
case "entities": {
|
|
1391
|
+
if (!Number.isInteger(command.limit) ||
|
|
1392
|
+
!Number.isInteger(command.offset) ||
|
|
1393
|
+
command.limit < 0 ||
|
|
1394
|
+
command.offset < 0 ||
|
|
1395
|
+
command.limit > 100_000) {
|
|
1396
|
+
throw new Error("engine.entities.limit/offset must be bounded integers");
|
|
1397
|
+
}
|
|
1398
|
+
const type = command.type === undefined
|
|
1399
|
+
? "none"
|
|
1400
|
+
: `'${quoteProlog(command.type)}'`;
|
|
1401
|
+
const id = command.id === undefined
|
|
1402
|
+
? "none"
|
|
1403
|
+
: `'${quoteProlog(command.id)}'`;
|
|
1404
|
+
const tags = `[${(command.tags ?? []).map((tag) => `'${quoteProlog(tag)}'`).join(",")}]`;
|
|
1405
|
+
const source = command.sourceFile === undefined
|
|
1406
|
+
? "none"
|
|
1407
|
+
: `'${quoteProlog(command.sourceFile)}'`;
|
|
1408
|
+
return prolog.query(`kb_query_entities(${type}, ${id}, ${tags}, ${source}, ${command.limit}, ${command.offset}, Rows, Count)`);
|
|
1409
|
+
}
|
|
1410
|
+
case "search": {
|
|
1411
|
+
if (!command.query.trim())
|
|
1412
|
+
throw new Error("engine.search.query must be non-empty");
|
|
1413
|
+
if (!Number.isInteger(command.limit) ||
|
|
1414
|
+
!Number.isInteger(command.offset) ||
|
|
1415
|
+
command.limit < 0 ||
|
|
1416
|
+
command.offset < 0 ||
|
|
1417
|
+
command.limit > 100_000) {
|
|
1418
|
+
throw new Error("engine.search.limit/offset must be bounded integers");
|
|
1419
|
+
}
|
|
1420
|
+
const type = command.type === undefined
|
|
1421
|
+
? "none"
|
|
1422
|
+
: `'${quoteProlog(command.type)}'`;
|
|
1423
|
+
return prolog.query(`kb_search_entities(${type}, '${quoteProlog(command.query)}', ${command.limit}, ${command.offset}, Rows, Count)`);
|
|
1424
|
+
}
|
|
1425
|
+
default:
|
|
1426
|
+
throw new Error("engine.command kind is unsupported");
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1060
1429
|
case "kbStatus": {
|
|
1061
1430
|
if (freshnessCache !== null &&
|
|
1062
1431
|
Date.now() - freshnessCache.capturedAt <= ENGINE_FRESHNESS_CACHE_MS) {
|
|
1063
1432
|
return freshnessCache.result;
|
|
1064
1433
|
}
|
|
1065
|
-
const result = await prolog.query("status:kb_status_json(JsonString)");
|
|
1434
|
+
const result = exactBranchStatus(await prolog.query("status:kb_status_json(JsonString)"));
|
|
1066
1435
|
if (result.success) {
|
|
1067
1436
|
freshnessCache = { capturedAt: Date.now(), result };
|
|
1068
1437
|
}
|
package/dist/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAeA,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAMtD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAGxD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAG3C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAG3C;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAGlD;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C"}
|
package/dist/env.js
CHANGED
|
@@ -11,13 +11,12 @@ function getEnvValue(key) {
|
|
|
11
11
|
const value = process.env[key];
|
|
12
12
|
return typeof value === "string" ? value : undefined;
|
|
13
13
|
}
|
|
14
|
-
function getTrimmedEnvValue(key) {
|
|
15
|
-
const value = getEnvValue(key)?.trim();
|
|
16
|
-
return value ? value : undefined;
|
|
17
|
-
}
|
|
18
14
|
export function getBranchOverride() {
|
|
19
|
-
//
|
|
20
|
-
|
|
15
|
+
// Branch identity is exact and must not be normalized. Preserve whitespace
|
|
16
|
+
// so the Git-ref validator rejects an accidental value instead of silently
|
|
17
|
+
// attaching a different branch.
|
|
18
|
+
const value = getEnvValue("KIBI_BRANCH");
|
|
19
|
+
return value === undefined || value.length === 0 ? undefined : value;
|
|
21
20
|
}
|
|
22
21
|
export function getKbPlPathOverride() {
|
|
23
22
|
// implements REQ-003
|
|
@@ -25,7 +25,8 @@ export interface ExtractionResult {
|
|
|
25
25
|
}
|
|
26
26
|
export declare class ManifestError extends Error {
|
|
27
27
|
filePath: string;
|
|
28
|
-
|
|
28
|
+
readonly classification?: "coordinate-artifact" | undefined;
|
|
29
|
+
constructor(message: string, filePath: string, classification?: "coordinate-artifact" | undefined);
|
|
29
30
|
}
|
|
30
31
|
export interface ManifestSymbolRecord {
|
|
31
32
|
id?: string;
|
|
@@ -56,6 +57,12 @@ export interface ManifestSymbolRecord {
|
|
|
56
57
|
coordinatesGeneratedAt?: string;
|
|
57
58
|
[key: string]: unknown;
|
|
58
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Convert overlay-merged manifest symbol records into extraction results.
|
|
62
|
+
* Exported so mutation flows can re-extract one canonical entity from the
|
|
63
|
+
* authored manifest plus generated coordinate artifact before committing.
|
|
64
|
+
*/
|
|
65
|
+
export declare function extractManifestSymbolRecords(manifestSymbols: ManifestSymbolRecord[], filePath: string): ExtractionResult[];
|
|
59
66
|
export declare function extractFromManifestString(content: string, filePath: string): ExtractionResult[];
|
|
60
67
|
export declare function extractManifestSymbolRecordsString(content: string, filePath: string): ManifestSymbolRecord[];
|
|
61
68
|
export declare function extractFromManifest(filePath: string): ExtractionResult[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/extractors/manifest.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA6JD,qBAAa,aAAc,SAAQ,KAAK;IAG7B,QAAQ,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/extractors/manifest.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA6JD,qBAAa,aAAc,SAAQ,KAAK;IAG7B,QAAQ,EAAE,MAAM;aACP,cAAc,CAAC,EAAE,qBAAqB;gBAFtD,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,MAAM,EACP,cAAc,CAAC,EAAE,qBAAqB,YAAA;CAKzD;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAsFD;;;;GAIG;AAEH,wBAAgB,4BAA4B,CAC1C,eAAe,EAAE,oBAAoB,EAAE,EACvC,QAAQ,EAAE,MAAM,GACf,gBAAgB,EAAE,CAkDpB;AAYD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,gBAAgB,EAAE,CAmBpB;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,oBAAoB,EAAE,CAmBxB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAKxE;AA4ED,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,oBAAoB,EAAE,CAaxB"}
|