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/commands/gc.js
CHANGED
|
@@ -1,84 +1,153 @@
|
|
|
1
|
-
|
|
2
|
-
Kibi — repo-local, per-branch, queryable long-term memory for software projects
|
|
3
|
-
Copyright (C) 2026 Piotr Franczyk
|
|
4
|
-
|
|
5
|
-
This program is free software: you can redistribute it and/or modify
|
|
6
|
-
it under the terms of the GNU Affero General Public License as published by
|
|
7
|
-
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
(at your option) any later version.
|
|
9
|
-
|
|
10
|
-
This program is distributed in the hope that it will be useful,
|
|
11
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
GNU Affero General Public License for more details.
|
|
14
|
-
|
|
15
|
-
You should have received a copy of the GNU Affero General Public License
|
|
16
|
-
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
-
*/
|
|
18
|
-
import { execSync } from "node:child_process";
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
19
2
|
import * as fs from "node:fs";
|
|
20
3
|
import * as path from "node:path";
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
4
|
+
import { branchStoreKey, branchStoresRoot, readBranchStoreManifest, } from "../utils/branch-store-locator.js";
|
|
5
|
+
const DEFAULT_RETENTION_DAYS = 30;
|
|
6
|
+
function localBranches(workspaceRoot) {
|
|
7
|
+
const result = spawnSync("git", ["branch", "--format=%(refname:short)"], {
|
|
8
|
+
encoding: "utf8",
|
|
9
|
+
cwd: workspaceRoot,
|
|
10
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
11
|
+
});
|
|
12
|
+
if (result.status !== 0) {
|
|
13
|
+
throw new Error(result.stderr?.trim() || "unable to list local Git branches");
|
|
14
|
+
}
|
|
15
|
+
const output = result.stdout ?? "";
|
|
16
|
+
const live = new Set(output
|
|
17
|
+
.split("\n")
|
|
18
|
+
.map((branch) => branch.trim())
|
|
19
|
+
.filter(Boolean));
|
|
20
|
+
// A branch checked out in another worktree is live even when it is not the
|
|
21
|
+
// current worktree's symbolic HEAD. Remote-only refs are deliberately not
|
|
22
|
+
// included: they have no local authored checkout to protect.
|
|
23
|
+
const worktrees = spawnSync("git", ["worktree", "list", "--porcelain"], {
|
|
24
|
+
encoding: "utf8",
|
|
25
|
+
cwd: workspaceRoot,
|
|
26
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
27
|
+
});
|
|
28
|
+
if (worktrees.status === 0) {
|
|
29
|
+
for (const line of (worktrees.stdout ?? "").split("\n")) {
|
|
30
|
+
const match = line.match(/^branch refs\/heads\/(.+)$/);
|
|
31
|
+
if (match?.[1])
|
|
32
|
+
live.add(match[1]);
|
|
30
33
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
34
|
+
}
|
|
35
|
+
return live;
|
|
36
|
+
}
|
|
37
|
+
function quarantineRoot(workspaceRoot) {
|
|
38
|
+
return path.join(workspaceRoot, ".kb", "quarantine", "branches");
|
|
39
|
+
}
|
|
40
|
+
function quarantineBranch(workspaceRoot, sourcePath, branch) {
|
|
41
|
+
const target = path.join(quarantineRoot(workspaceRoot), branchStoreKey(branch), new Date().toISOString().replaceAll(":", "-"));
|
|
42
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
43
|
+
fs.renameSync(sourcePath, target);
|
|
44
|
+
fs.writeFileSync(path.join(target, "quarantine.json"), `${JSON.stringify({
|
|
45
|
+
version: 1,
|
|
46
|
+
branch,
|
|
47
|
+
key: branchStoreKey(branch),
|
|
48
|
+
quarantinedAt: new Date().toISOString(),
|
|
49
|
+
sourcePath: path.relative(workspaceRoot, sourcePath),
|
|
50
|
+
}, null, 2)}\n`, { mode: 0o600 });
|
|
51
|
+
return target;
|
|
52
|
+
}
|
|
53
|
+
function purgeQuarantine(workspaceRoot, retentionDays) {
|
|
54
|
+
const root = quarantineRoot(workspaceRoot);
|
|
55
|
+
if (!fs.existsSync(root))
|
|
56
|
+
return 0;
|
|
57
|
+
const cutoff = Date.now() - retentionDays * 24 * 60 * 60 * 1000;
|
|
58
|
+
let purged = 0;
|
|
59
|
+
for (const key of fs.readdirSync(root, { withFileTypes: true })) {
|
|
60
|
+
if (!key.isDirectory())
|
|
61
|
+
continue;
|
|
62
|
+
const keyPath = path.join(root, key.name);
|
|
63
|
+
for (const entry of fs.readdirSync(keyPath, { withFileTypes: true })) {
|
|
64
|
+
if (!entry.isDirectory())
|
|
65
|
+
continue;
|
|
66
|
+
const candidate = path.join(keyPath, entry.name);
|
|
67
|
+
const metadataPath = path.join(candidate, "quarantine.json");
|
|
68
|
+
let quarantinedAt = fs.statSync(candidate).mtimeMs;
|
|
69
|
+
try {
|
|
70
|
+
const metadata = JSON.parse(fs.readFileSync(metadataPath, "utf8"));
|
|
71
|
+
if (metadata.quarantinedAt) {
|
|
72
|
+
const parsed = Date.parse(metadata.quarantinedAt);
|
|
73
|
+
if (Number.isFinite(parsed))
|
|
74
|
+
quarantinedAt = parsed;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// A missing or malformed journal falls back to the directory mtime.
|
|
79
|
+
}
|
|
80
|
+
if (retentionDays > 0 && quarantinedAt > cutoff)
|
|
81
|
+
continue;
|
|
82
|
+
fs.rmSync(candidate, { recursive: true, force: true });
|
|
83
|
+
purged += 1;
|
|
84
|
+
}
|
|
85
|
+
if (fs.readdirSync(keyPath).length === 0) {
|
|
86
|
+
fs.rmSync(keyPath, { recursive: true, force: true });
|
|
50
87
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
88
|
+
}
|
|
89
|
+
return purged;
|
|
90
|
+
}
|
|
91
|
+
export async function gcCommand(options = {}) {
|
|
92
|
+
const workspaceRoot = process.cwd();
|
|
93
|
+
const retentionDays = Number.isFinite(options.retentionDays) && (options.retentionDays ?? 0) >= 0
|
|
94
|
+
? Math.floor(options.retentionDays)
|
|
95
|
+
: DEFAULT_RETENTION_DAYS;
|
|
96
|
+
const branchesRoot = branchStoresRoot(workspaceRoot);
|
|
97
|
+
try {
|
|
98
|
+
if (!fs.existsSync(branchesRoot)) {
|
|
99
|
+
console.log("No branch KBs found (.kb/branches does not exist)");
|
|
100
|
+
process.exitCode = 0;
|
|
55
101
|
return;
|
|
56
102
|
}
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
103
|
+
const live = localBranches(workspaceRoot);
|
|
104
|
+
const candidates = [];
|
|
105
|
+
const visit = (dir, relativeBranch) => {
|
|
106
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
107
|
+
for (const entry of entries) {
|
|
108
|
+
const candidatePath = path.join(dir, entry.name);
|
|
109
|
+
if (!entry.isDirectory())
|
|
110
|
+
continue;
|
|
111
|
+
const manifest = readBranchStoreManifest(candidatePath);
|
|
112
|
+
if (manifest !== null) {
|
|
113
|
+
candidates.push({
|
|
114
|
+
branch: manifest.branch,
|
|
115
|
+
path: candidatePath,
|
|
116
|
+
legacy: false,
|
|
117
|
+
});
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const next = relativeBranch
|
|
121
|
+
? `${relativeBranch}/${entry.name}`
|
|
122
|
+
: entry.name;
|
|
123
|
+
if (fs.existsSync(path.join(candidatePath, "kb.rdf")) ||
|
|
124
|
+
fs.existsSync(path.join(candidatePath, "storage.json"))) {
|
|
125
|
+
candidates.push({ branch: next, path: candidatePath, legacy: true });
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
visit(candidatePath, next);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
visit(branchesRoot, "");
|
|
133
|
+
const stale = candidates.filter(({ branch }) => !live.has(branch));
|
|
134
|
+
if (!options.force && !options.purge) {
|
|
135
|
+
console.log(`Found ${stale.length} stale branch KB(s) (dry run - not quarantined)`);
|
|
136
|
+
for (const candidate of stale) {
|
|
137
|
+
console.log(` - ${candidate.branch}: ${candidate.path}`);
|
|
71
138
|
}
|
|
139
|
+
process.exitCode = 0;
|
|
140
|
+
return;
|
|
72
141
|
}
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
console.log(` - ${b}`);
|
|
142
|
+
if (options.force && !options.purge) {
|
|
143
|
+
for (const candidate of stale) {
|
|
144
|
+
const destination = quarantineBranch(workspaceRoot, candidate.path, candidate.branch);
|
|
145
|
+
console.log(`Quarantined ${candidate.branch}: ${destination}`);
|
|
78
146
|
}
|
|
79
147
|
}
|
|
80
|
-
|
|
81
|
-
|
|
148
|
+
if (options.purge) {
|
|
149
|
+
const purged = purgeQuarantine(workspaceRoot, retentionDays);
|
|
150
|
+
console.log(`Purged ${purged} quarantined branch store(s) older than ${retentionDays} day(s)`);
|
|
82
151
|
}
|
|
83
152
|
process.exitCode = 0;
|
|
84
153
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export declare const GITHUB_REPORT_WORKFLOW_RELPATH = ".github/workflows/kibi-report.yml";
|
|
2
|
+
export declare const GITHUB_BADGE_WORKFLOW_RELPATH = ".github/workflows/kibi-badge.yml";
|
|
3
|
+
export declare const GITHUB_PAGES_NAMESPACE = "kibi-report";
|
|
4
|
+
export declare const KIBI_BADGE_ALT = "Kibi requirement health";
|
|
5
|
+
export declare const KIBI_METRIC_DOCS_URL = "https://github.com/Looted/kibi/blob/develop/docs/github-integration.md#what-the-badge-means";
|
|
6
|
+
export declare const PLACEHOLDER_OWNER = "OWNER";
|
|
7
|
+
export declare const PLACEHOLDER_REPO = "REPOSITORY";
|
|
8
|
+
export type GitHubRepo = Readonly<{
|
|
9
|
+
owner: string;
|
|
10
|
+
repo: string;
|
|
11
|
+
}>;
|
|
12
|
+
export type GitRemote = Readonly<{
|
|
13
|
+
name: string;
|
|
14
|
+
url: string;
|
|
15
|
+
}>;
|
|
16
|
+
export type GitHubPagesUrls = Readonly<{
|
|
17
|
+
siteUrl: string;
|
|
18
|
+
badgeUrl: string;
|
|
19
|
+
}>;
|
|
20
|
+
export type GitHubWorkflowKind = "report" | "badge";
|
|
21
|
+
export type WorkflowWriteStatus = "created" | "unchanged" | "conflict";
|
|
22
|
+
export type ReadmeWriteStatus = "updated" | "unchanged" | "printed" | "skipped-unknown-repo";
|
|
23
|
+
export type GitIgnoreWriteStatus = "updated" | "unchanged";
|
|
24
|
+
export type GitHubScaffoldOptions = Readonly<{
|
|
25
|
+
cwd: string;
|
|
26
|
+
badgeOnly: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
export type GitHubInitDeps = Readonly<{
|
|
29
|
+
listRemotes?: (cwd: string) => GitRemote[];
|
|
30
|
+
log?: (message: string) => void;
|
|
31
|
+
error?: (message: string) => void;
|
|
32
|
+
}>;
|
|
33
|
+
export type GitHubScaffoldResult = Readonly<{
|
|
34
|
+
exitCode: number;
|
|
35
|
+
workflow: WorkflowWriteStatus;
|
|
36
|
+
readme: ReadmeWriteStatus;
|
|
37
|
+
gitignore: GitIgnoreWriteStatus;
|
|
38
|
+
repo: GitHubRepo | undefined;
|
|
39
|
+
}>;
|
|
40
|
+
export declare function githubTemplateDir(): string;
|
|
41
|
+
export declare function githubWorkflowTemplateFileName(kind: GitHubWorkflowKind): string;
|
|
42
|
+
export declare function loadGitHubWorkflowTemplate(kind: GitHubWorkflowKind): string;
|
|
43
|
+
export declare function parseGitHubRemote(url: string): GitHubRepo | undefined;
|
|
44
|
+
export declare function githubPagesUrls(repo: GitHubRepo): GitHubPagesUrls;
|
|
45
|
+
export declare function formatKibiBadgeMarkdown(badgeUrl: string, linkUrl: string): string;
|
|
46
|
+
export declare function placeholderPagesUrls(): GitHubPagesUrls;
|
|
47
|
+
export declare function placeholderBadgeMarkdown(badgeOnly: boolean): string;
|
|
48
|
+
export declare function hasKibiBadge(content: string): boolean;
|
|
49
|
+
export declare function detectReadmePath(cwd: string): string | undefined;
|
|
50
|
+
export declare function insertKibiBadge(content: string, badgeMarkdown: string): string;
|
|
51
|
+
export declare function listGitRemotes(cwd: string): GitRemote[];
|
|
52
|
+
export declare function resolveGitHubRepo(remotes: readonly GitRemote[]): GitHubRepo | undefined;
|
|
53
|
+
export declare function writeGitHubWorkflow(cwd: string, kind: GitHubWorkflowKind, template: string): WorkflowWriteStatus;
|
|
54
|
+
export declare function ensureKibiReportGitIgnore(cwd: string): GitIgnoreWriteStatus;
|
|
55
|
+
export declare function scaffoldGitHubIntegration(options: GitHubScaffoldOptions, deps?: GitHubInitDeps): GitHubScaffoldResult;
|
|
56
|
+
//# sourceMappingURL=github-init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-init.d.ts","sourceRoot":"","sources":["../../src/commands/github-init.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,8BAA8B,sCACN,CAAC;AACtC,eAAO,MAAM,6BAA6B,qCAAqC,CAAC;AAChF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AACpD,eAAO,MAAM,cAAc,4BAA4B,CAAC;AACxD,eAAO,MAAM,oBAAoB,gGAC8D,CAAC;AAChG,eAAO,MAAM,iBAAiB,UAAU,CAAC;AACzC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAM7C,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AACvE,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,WAAW,GACX,SAAS,GACT,sBAAsB,CAAC;AAC3B,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IAC3C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,oBAAoB,CAAC;IAChC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;CAC9B,CAAC,CAAC;AAGH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,kBAAkB,GACvB,MAAM,CAER;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAS3E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CA+BrE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAUjE;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAKtD;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAMnE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQhE;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,MAAM,CAuBR;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAiBvD;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,SAAS,EAAE,GAC5B,UAAU,GAAG,SAAS,CASxB;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAcrB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAa3E;AAGD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,IAAI,GAAE,cAAmB,GACxB,oBAAoB,CAsDtB"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Kibi — repo-local, per-branch, queryable long-term memory for software projects
|
|
3
|
+
Copyright (C) 2026 Piotr Franczyk
|
|
4
|
+
|
|
5
|
+
This program is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Affero General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { execFileSync } from "node:child_process";
|
|
19
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
20
|
+
import * as path from "node:path";
|
|
21
|
+
import { fileURLToPath } from "node:url";
|
|
22
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
23
|
+
const __dirname = path.dirname(__filename);
|
|
24
|
+
export const GITHUB_REPORT_WORKFLOW_RELPATH = ".github/workflows/kibi-report.yml";
|
|
25
|
+
export const GITHUB_BADGE_WORKFLOW_RELPATH = ".github/workflows/kibi-badge.yml";
|
|
26
|
+
export const GITHUB_PAGES_NAMESPACE = "kibi-report";
|
|
27
|
+
export const KIBI_BADGE_ALT = "Kibi requirement health";
|
|
28
|
+
export const KIBI_METRIC_DOCS_URL = "https://github.com/Looted/kibi/blob/develop/docs/github-integration.md#what-the-badge-means";
|
|
29
|
+
export const PLACEHOLDER_OWNER = "OWNER";
|
|
30
|
+
export const PLACEHOLDER_REPO = "REPOSITORY";
|
|
31
|
+
const README_CANDIDATES = ["README.md", "readme.md", "Readme.md"];
|
|
32
|
+
const BADGE_OR_IMAGE_LINE = /^\s*(?:\[!\[[^\]]*\]\([^)]+\)\]\([^)]+\)|!\[[^\]]*\]\([^)]+\))\s*$/;
|
|
33
|
+
// implements REQ-kibi-github-report-integration
|
|
34
|
+
export function githubTemplateDir() {
|
|
35
|
+
return path.resolve(__dirname, "..", "..", "templates", "github");
|
|
36
|
+
}
|
|
37
|
+
export function githubWorkflowTemplateFileName(kind) {
|
|
38
|
+
return kind === "badge" ? "kibi-badge.yml" : "kibi-report.yml";
|
|
39
|
+
}
|
|
40
|
+
export function loadGitHubWorkflowTemplate(kind) {
|
|
41
|
+
const templatePath = path.join(githubTemplateDir(), githubWorkflowTemplateFileName(kind));
|
|
42
|
+
if (!existsSync(templatePath)) {
|
|
43
|
+
throw new Error(`Kibi GitHub workflow template missing: ${templatePath}`);
|
|
44
|
+
}
|
|
45
|
+
return readFileSync(templatePath, "utf8");
|
|
46
|
+
}
|
|
47
|
+
export function parseGitHubRemote(url) {
|
|
48
|
+
const trimmed = url.trim();
|
|
49
|
+
if (trimmed.length === 0) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const patterns = [
|
|
53
|
+
/^https?:\/\/(?:www\.)?github\.com\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/i,
|
|
54
|
+
/^git@github\.com:([^/]+)\/([^/]+?)(?:\.git)?\/?$/i,
|
|
55
|
+
/^ssh:\/\/(?:git@)?github\.com(?::\d+)?\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/i,
|
|
56
|
+
/^git:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/i,
|
|
57
|
+
];
|
|
58
|
+
for (const pattern of patterns) {
|
|
59
|
+
const match = trimmed.match(pattern);
|
|
60
|
+
const owner = match?.[1];
|
|
61
|
+
const repoRaw = match?.[2];
|
|
62
|
+
if (!owner || !repoRaw) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (owner.includes(":") || repoRaw.includes(" ")) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const repo = repoRaw.replace(/\.git$/i, "");
|
|
69
|
+
if (owner.length === 0 || repo.length === 0) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
return { owner, repo };
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
export function githubPagesUrls(repo) {
|
|
77
|
+
const owner = repo.owner.toLowerCase();
|
|
78
|
+
const name = repo.repo.toLowerCase();
|
|
79
|
+
const isUserSite = name === `${owner}.github.io`;
|
|
80
|
+
const origin = isUserSite
|
|
81
|
+
? `https://${owner}.github.io/`
|
|
82
|
+
: `https://${owner}.github.io/${name}/`;
|
|
83
|
+
const siteUrl = `${origin}${GITHUB_PAGES_NAMESPACE}/`;
|
|
84
|
+
const badgeUrl = `${siteUrl}badge.svg`;
|
|
85
|
+
return { siteUrl, badgeUrl };
|
|
86
|
+
}
|
|
87
|
+
export function formatKibiBadgeMarkdown(badgeUrl, linkUrl) {
|
|
88
|
+
return `[](${linkUrl})`;
|
|
89
|
+
}
|
|
90
|
+
export function placeholderPagesUrls() {
|
|
91
|
+
return {
|
|
92
|
+
siteUrl: `https://${PLACEHOLDER_OWNER}.github.io/${PLACEHOLDER_REPO}/${GITHUB_PAGES_NAMESPACE}/`,
|
|
93
|
+
badgeUrl: `https://${PLACEHOLDER_OWNER}.github.io/${PLACEHOLDER_REPO}/${GITHUB_PAGES_NAMESPACE}/badge.svg`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function placeholderBadgeMarkdown(badgeOnly) {
|
|
97
|
+
const urls = placeholderPagesUrls();
|
|
98
|
+
return formatKibiBadgeMarkdown(urls.badgeUrl, badgeOnly ? KIBI_METRIC_DOCS_URL : urls.siteUrl);
|
|
99
|
+
}
|
|
100
|
+
export function hasKibiBadge(content) {
|
|
101
|
+
return /\[!\[Kibi requirement health\]/i.test(content);
|
|
102
|
+
}
|
|
103
|
+
export function detectReadmePath(cwd) {
|
|
104
|
+
for (const name of README_CANDIDATES) {
|
|
105
|
+
const candidate = path.join(cwd, name);
|
|
106
|
+
if (existsSync(candidate)) {
|
|
107
|
+
return candidate;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
export function insertKibiBadge(content, badgeMarkdown) {
|
|
113
|
+
const newline = content.includes("\r\n") ? "\r\n" : "\n";
|
|
114
|
+
const lines = content.split(/\r?\n/);
|
|
115
|
+
let h1Index = -1;
|
|
116
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
117
|
+
if (/^#\s+\S/.test(lines[index] ?? "")) {
|
|
118
|
+
h1Index = index;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const clusterEnd = findBadgeClusterEnd(lines, h1Index >= 0 ? h1Index + 1 : 0);
|
|
123
|
+
if (h1Index >= 0) {
|
|
124
|
+
const insertAt = clusterEnd > h1Index + 1 ? clusterEnd : h1Index + 1;
|
|
125
|
+
return insertLine(lines, insertAt, badgeMarkdown, newline);
|
|
126
|
+
}
|
|
127
|
+
if (clusterEnd > 0) {
|
|
128
|
+
return insertLine(lines, clusterEnd, badgeMarkdown, newline);
|
|
129
|
+
}
|
|
130
|
+
if (content.length === 0) {
|
|
131
|
+
return `${badgeMarkdown}${newline}`;
|
|
132
|
+
}
|
|
133
|
+
return `${badgeMarkdown}${newline}${newline}${content}`;
|
|
134
|
+
}
|
|
135
|
+
export function listGitRemotes(cwd) {
|
|
136
|
+
try {
|
|
137
|
+
const output = execFileSync("git", ["-C", cwd, "remote", "-v"], {
|
|
138
|
+
encoding: "utf8",
|
|
139
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
140
|
+
});
|
|
141
|
+
const remotes = [];
|
|
142
|
+
for (const line of output.split("\n")) {
|
|
143
|
+
const match = line.match(/^(\S+)\s+(\S+)\s+\(fetch\)$/);
|
|
144
|
+
if (match?.[1] && match[2]) {
|
|
145
|
+
remotes.push({ name: match[1], url: match[2] });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return remotes;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export function resolveGitHubRepo(remotes) {
|
|
155
|
+
const parsed = remotes
|
|
156
|
+
.map((remote) => ({ remote, repo: parseGitHubRemote(remote.url) }))
|
|
157
|
+
.filter((entry) => entry.repo !== undefined);
|
|
158
|
+
const origin = parsed.find((entry) => entry.remote.name === "origin");
|
|
159
|
+
return origin?.repo ?? parsed[0]?.repo;
|
|
160
|
+
}
|
|
161
|
+
export function writeGitHubWorkflow(cwd, kind, template) {
|
|
162
|
+
const relativePath = kind === "badge"
|
|
163
|
+
? GITHUB_BADGE_WORKFLOW_RELPATH
|
|
164
|
+
: GITHUB_REPORT_WORKFLOW_RELPATH;
|
|
165
|
+
const dest = path.join(cwd, relativePath);
|
|
166
|
+
const normalizedTemplate = normalizeNewlines(template);
|
|
167
|
+
if (existsSync(dest)) {
|
|
168
|
+
const existing = normalizeNewlines(readFileSync(dest, "utf8"));
|
|
169
|
+
return existing === normalizedTemplate ? "unchanged" : "conflict";
|
|
170
|
+
}
|
|
171
|
+
mkdirSync(path.dirname(dest), { recursive: true });
|
|
172
|
+
writeFileSync(dest, normalizedTemplate);
|
|
173
|
+
return "created";
|
|
174
|
+
}
|
|
175
|
+
export function ensureKibiReportGitIgnore(cwd) {
|
|
176
|
+
const gitignorePath = path.join(cwd, ".gitignore");
|
|
177
|
+
const current = existsSync(gitignorePath)
|
|
178
|
+
? readFileSync(gitignorePath, "utf8")
|
|
179
|
+
: "";
|
|
180
|
+
if (/(?:^|\n)kibi-report\/(?:\n|$)/.test(current)) {
|
|
181
|
+
return "unchanged";
|
|
182
|
+
}
|
|
183
|
+
const next = current
|
|
184
|
+
? `${current.replace(/\s*$/, "")}\nkibi-report/\n`
|
|
185
|
+
: "kibi-report/\n";
|
|
186
|
+
writeFileSync(gitignorePath, next);
|
|
187
|
+
return "updated";
|
|
188
|
+
}
|
|
189
|
+
// implements REQ-kibi-github-report-integration
|
|
190
|
+
export function scaffoldGitHubIntegration(options, deps = {}) {
|
|
191
|
+
const log = deps.log ?? ((message) => console.log(message));
|
|
192
|
+
const error = deps.error ?? ((message) => console.error(message));
|
|
193
|
+
const listRemotes = deps.listRemotes ?? listGitRemotes;
|
|
194
|
+
const kind = options.badgeOnly ? "badge" : "report";
|
|
195
|
+
const workflowPath = kind === "badge"
|
|
196
|
+
? GITHUB_BADGE_WORKFLOW_RELPATH
|
|
197
|
+
: GITHUB_REPORT_WORKFLOW_RELPATH;
|
|
198
|
+
const siblingPath = kind === "badge"
|
|
199
|
+
? GITHUB_REPORT_WORKFLOW_RELPATH
|
|
200
|
+
: GITHUB_BADGE_WORKFLOW_RELPATH;
|
|
201
|
+
const template = loadGitHubWorkflowTemplate(kind);
|
|
202
|
+
const workflow = writeGitHubWorkflow(options.cwd, kind, template);
|
|
203
|
+
const gitignore = ensureKibiReportGitIgnore(options.cwd);
|
|
204
|
+
const repo = resolveGitHubRepo(listRemotes(options.cwd));
|
|
205
|
+
if (existsSync(path.join(options.cwd, siblingPath))) {
|
|
206
|
+
error(`Warning: ${siblingPath} already exists. GitHub Pages can host one site; keep a single Kibi workflow.`);
|
|
207
|
+
}
|
|
208
|
+
if (workflow === "created") {
|
|
209
|
+
log(`✓ Added ${workflowPath}`);
|
|
210
|
+
}
|
|
211
|
+
else if (workflow === "unchanged") {
|
|
212
|
+
log(`✓ ${workflowPath} already configured`);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
error(`Warning: ${workflowPath} already exists and differs from the Kibi template.`);
|
|
216
|
+
error(`Left the existing file in place. Compare it with https://github.com/Looted/kibi/blob/develop/docs/examples/github/${githubWorkflowTemplateFileName(kind)}.`);
|
|
217
|
+
}
|
|
218
|
+
if (gitignore === "updated") {
|
|
219
|
+
log("✓ Added kibi-report/ to .gitignore");
|
|
220
|
+
}
|
|
221
|
+
const readme = updateReadmeBadge(options, repo, log, error);
|
|
222
|
+
log("");
|
|
223
|
+
log("Manual step required:");
|
|
224
|
+
log("GitHub → Settings → Pages → Source → GitHub Actions");
|
|
225
|
+
return {
|
|
226
|
+
exitCode: 0,
|
|
227
|
+
workflow,
|
|
228
|
+
readme,
|
|
229
|
+
gitignore,
|
|
230
|
+
repo,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
function updateReadmeBadge(options, repo, log, error) {
|
|
234
|
+
const markdown = repo
|
|
235
|
+
? formatKibiBadgeMarkdown(githubPagesUrls(repo).badgeUrl, options.badgeOnly
|
|
236
|
+
? KIBI_METRIC_DOCS_URL
|
|
237
|
+
: githubPagesUrls(repo).siteUrl)
|
|
238
|
+
: placeholderBadgeMarkdown(options.badgeOnly);
|
|
239
|
+
const readmePath = detectReadmePath(options.cwd);
|
|
240
|
+
if (!repo) {
|
|
241
|
+
error("Warning: Could not determine a github.com owner/repository from git remotes.");
|
|
242
|
+
error("Did not invent a badge URL. Add this Markdown after replacing OWNER/REPOSITORY:");
|
|
243
|
+
log(markdown);
|
|
244
|
+
if (!readmePath) {
|
|
245
|
+
return "printed";
|
|
246
|
+
}
|
|
247
|
+
return "skipped-unknown-repo";
|
|
248
|
+
}
|
|
249
|
+
if (!readmePath) {
|
|
250
|
+
log("No README found. Add this badge Markdown manually:");
|
|
251
|
+
log(markdown);
|
|
252
|
+
return "printed";
|
|
253
|
+
}
|
|
254
|
+
const existing = readFileSync(readmePath, "utf8");
|
|
255
|
+
if (hasKibiBadge(existing)) {
|
|
256
|
+
log("✓ README already contains the Kibi requirement-health badge");
|
|
257
|
+
return "unchanged";
|
|
258
|
+
}
|
|
259
|
+
writeFileSync(readmePath, insertKibiBadge(existing, markdown));
|
|
260
|
+
log(`✓ Added Kibi requirement-health badge to ${path.basename(readmePath)}`);
|
|
261
|
+
return "updated";
|
|
262
|
+
}
|
|
263
|
+
function normalizeNewlines(value) {
|
|
264
|
+
const unix = value.replace(/\r\n/g, "\n");
|
|
265
|
+
return unix.endsWith("\n") ? unix : `${unix}\n`;
|
|
266
|
+
}
|
|
267
|
+
function findBadgeClusterEnd(lines, start) {
|
|
268
|
+
let index = start;
|
|
269
|
+
while (index < lines.length && (lines[index] ?? "").trim() === "") {
|
|
270
|
+
index += 1;
|
|
271
|
+
}
|
|
272
|
+
if (index >= lines.length || !BADGE_OR_IMAGE_LINE.test(lines[index] ?? "")) {
|
|
273
|
+
return start;
|
|
274
|
+
}
|
|
275
|
+
while (index < lines.length) {
|
|
276
|
+
const line = lines[index] ?? "";
|
|
277
|
+
if (BADGE_OR_IMAGE_LINE.test(line)) {
|
|
278
|
+
index += 1;
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
if (line.trim() === "") {
|
|
282
|
+
let peek = index + 1;
|
|
283
|
+
while (peek < lines.length && (lines[peek] ?? "").trim() === "") {
|
|
284
|
+
peek += 1;
|
|
285
|
+
}
|
|
286
|
+
if (peek < lines.length && BADGE_OR_IMAGE_LINE.test(lines[peek] ?? "")) {
|
|
287
|
+
index = peek;
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
return index;
|
|
295
|
+
}
|
|
296
|
+
function insertLine(lines, index, badgeMarkdown, newline) {
|
|
297
|
+
const before = lines.slice(0, index);
|
|
298
|
+
const after = lines.slice(index);
|
|
299
|
+
const prefixBlank = before.length === 0 || (before[before.length - 1] ?? "").trim() === ""
|
|
300
|
+
? []
|
|
301
|
+
: [""];
|
|
302
|
+
const suffixBlank = after.length === 0 || (after[0] ?? "").trim() === "" ? [] : [""];
|
|
303
|
+
return [
|
|
304
|
+
...before,
|
|
305
|
+
...prefixBlank,
|
|
306
|
+
badgeMarkdown,
|
|
307
|
+
...suffixBlank,
|
|
308
|
+
...after,
|
|
309
|
+
].join(newline);
|
|
310
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare function getCurrentBranch(cwd?: string): Promise<string>;
|
|
2
2
|
export declare function createKbDirectoryStructure(kbDir: string, currentBranch: string): void;
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function createManifestFile(kbDir: string): void;
|
|
4
4
|
export declare function updateGitIgnore(cwd: string): void;
|
|
5
5
|
export declare function ensureSymbolsManifestFile(cwd: string): void;
|
|
6
6
|
export declare function copySchemaFiles(kbDir: string, schemaSourceDir: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/init-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/init-helpers.ts"],"names":[],"mappings":"AAgGA,wBAAsB,gBAAgB,CACpC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,IAAI,CAUN;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA6BjD;AAiDD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAU3D;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAYf;AASD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAkCnE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBpD"}
|