kibi-cli 2.38.0 → 2.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +4 -0
- package/dist/cli-register-foundation.js +2 -2
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +33 -9
- package/dist/commands/coverage.d.ts +1 -0
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +40 -0
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +29 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +4 -0
- package/dist/commands/migrate-plan-record.d.ts +18 -0
- package/dist/commands/migrate-plan-record.d.ts.map +1 -0
- package/dist/commands/migrate-plan-record.js +112 -0
- package/dist/commands/migrate.d.ts +11 -2
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +60 -8
- package/dist/commands/prove.d.ts.map +1 -1
- package/dist/commands/prove.js +18 -3
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +17 -4
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +6 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +8 -0
- package/dist/commands/telemetry.d.ts.map +1 -1
- package/dist/commands/telemetry.js +12 -2
- package/dist/extractors/markdown.d.ts +6 -0
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +21 -0
- package/dist/extractors/symbol-title-match.d.ts +31 -0
- package/dist/extractors/symbol-title-match.d.ts.map +1 -0
- package/dist/extractors/symbol-title-match.js +133 -0
- package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.js +81 -12
- package/dist/operations/bootstrap/discovery-evidence.d.ts.map +1 -1
- package/dist/operations/bootstrap/discovery-evidence.js +44 -2
- package/dist/operations/bootstrap/discovery.d.ts.map +1 -1
- package/dist/operations/bootstrap/discovery.js +1 -0
- package/dist/operations/bootstrap/guidance-actions.d.ts.map +1 -1
- package/dist/operations/bootstrap/guidance-actions.js +12 -1
- package/dist/operations/bootstrap/plugin-offers.d.ts +7 -1
- package/dist/operations/bootstrap/plugin-offers.d.ts.map +1 -1
- package/dist/operations/bootstrap/plugin-offers.js +73 -3
- package/dist/operations/modeling/logic-modeling.d.ts.map +1 -1
- package/dist/operations/modeling/logic-modeling.js +2 -1
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
- package/dist/operations/modeling/model-requirement.js +2 -1
- package/dist/operations/mutation/symbol-refresh.d.ts +2 -0
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +6 -1
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +7 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -1
- package/dist/operations/planning/compile-intent.js +2 -1
- package/dist/operations/proof/claim-bindings.d.ts +11 -0
- package/dist/operations/proof/claim-bindings.d.ts.map +1 -1
- package/dist/operations/proof/claim-bindings.js +144 -1
- package/dist/operations/proof/code-certificates.d.ts +10 -3
- package/dist/operations/proof/code-certificates.d.ts.map +1 -1
- package/dist/operations/proof/code-certificates.js +65 -13
- package/dist/operations/proof/code-languages.d.ts +104 -0
- package/dist/operations/proof/code-languages.d.ts.map +1 -0
- package/dist/operations/proof/code-languages.js +119 -0
- package/dist/operations/proof/code-models.d.ts +2 -0
- package/dist/operations/proof/code-models.d.ts.map +1 -1
- package/dist/operations/proof/code-models.js +11 -5
- package/dist/operations/proof/code-runner.d.ts +12 -9
- package/dist/operations/proof/code-runner.d.ts.map +1 -1
- package/dist/operations/proof/code-runner.js +81 -38
- package/dist/operations/proof/code-scope.d.ts +8 -0
- package/dist/operations/proof/code-scope.d.ts.map +1 -1
- package/dist/operations/proof/code-scope.js +30 -1
- package/dist/operations/proof/explain.d.ts +76 -0
- package/dist/operations/proof/explain.d.ts.map +1 -1
- package/dist/operations/proof/explain.js +228 -0
- package/dist/operations/proof/ingest-proof.d.ts +2 -0
- package/dist/operations/proof/ingest-proof.d.ts.map +1 -1
- package/dist/operations/proof/ingest-proof.js +1 -0
- package/dist/operations/proof/java-package-shadow.d.ts +14 -0
- package/dist/operations/proof/java-package-shadow.d.ts.map +1 -0
- package/dist/operations/proof/java-package-shadow.js +389 -0
- package/dist/operations/proof/prolog-evaluator.d.ts +14 -0
- package/dist/operations/proof/prolog-evaluator.d.ts.map +1 -0
- package/dist/operations/proof/prolog-evaluator.js +247 -0
- package/dist/operations/proof/prolog-source-reader.d.ts +20 -0
- package/dist/operations/proof/prolog-source-reader.d.ts.map +1 -0
- package/dist/operations/proof/prolog-source-reader.js +1123 -0
- package/dist/operations/proof/source-code-readers.d.ts +6 -0
- package/dist/operations/proof/source-code-readers.d.ts.map +1 -1
- package/dist/operations/proof/source-code-readers.js +879 -75
- package/dist/operations/semantic-advisor/analyze-prose.d.ts +9 -1
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +21 -0
- package/dist/operations/semantic-advisor/case-preview.d.ts +24 -0
- package/dist/operations/semantic-advisor/case-preview.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/case-preview.js +216 -0
- package/dist/operations/semantic-advisor/shared.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/shared.js +3 -0
- package/dist/operations/semantic-advisor/types.d.ts +23 -0
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/plugins/approved-source-analyzers.generated.d.ts +15 -34
- package/dist/plugins/approved-source-analyzers.generated.d.ts.map +1 -1
- package/dist/plugins/approved-source-analyzers.generated.js +15 -34
- package/dist/plugins/plugin-install-check.d.ts +21 -0
- package/dist/plugins/plugin-install-check.d.ts.map +1 -0
- package/dist/plugins/plugin-install-check.js +62 -0
- package/dist/plugins/proof-reference-extractors.d.ts +20 -0
- package/dist/plugins/proof-reference-extractors.d.ts.map +1 -0
- package/dist/plugins/proof-reference-extractors.js +104 -0
- package/dist/plugins/reference-language-suggestion.d.ts +51 -0
- package/dist/plugins/reference-language-suggestion.d.ts.map +1 -0
- package/dist/plugins/reference-language-suggestion.js +277 -0
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +3 -1
- package/dist/plugins/source-analysis-service.d.ts.map +1 -1
- package/dist/plugins/source-analysis-service.js +4 -0
- package/dist/plugins/source-change-analysis.d.ts +26 -1
- package/dist/plugins/source-change-analysis.d.ts.map +1 -1
- package/dist/plugins/source-change-analysis.js +77 -5
- package/dist/plugins/source-classification.d.ts +2 -2
- package/dist/plugins/source-classification.d.ts.map +1 -1
- package/dist/plugins/source-classification.js +45 -1
- package/dist/public/operations/catalog.d.ts +62 -7
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +3 -0
- package/dist/public/operations/evidence-floor.d.ts +8 -0
- package/dist/public/operations/evidence-floor.d.ts.map +1 -1
- package/dist/public/operations/evidence-floor.js +19 -1
- package/dist/public/operations/repair-plan.d.ts +46 -0
- package/dist/public/operations/repair-plan.d.ts.map +1 -1
- package/dist/public/operations/repair-plan.js +110 -1
- package/dist/public/operations/schema6-check-actions.js +1 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts +1 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -1
- package/dist/public/operations/specs/check-rules.generated.js +3 -1
- package/dist/public/operations/specs/check.d.ts +1 -1
- package/dist/public/operations/specs/mutation-schemas.d.ts +61 -6
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +30 -0
- package/dist/public/operations/specs/reporting.d.ts +8 -0
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +26 -3
- package/dist/public/operations/specs/semantic.d.ts.map +1 -1
- package/dist/public/operations/specs/semantic.js +2 -1
- package/dist/public/operations/specs/upsert.d.ts +61 -6
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/symbol-coordinates-check.d.ts +11 -0
- package/dist/public/operations/symbol-coordinates-check.d.ts.map +1 -0
- package/dist/public/operations/symbol-coordinates-check.js +66 -0
- package/dist/public/proof-protocol.d.ts +31 -6
- package/dist/public/proof-protocol.d.ts.map +1 -1
- package/dist/public/proof-protocol.js +45 -15
- package/dist/public/proof-sources.d.ts +4 -2
- package/dist/public/proof-sources.d.ts.map +1 -1
- package/dist/public/proof-sources.js +43 -4
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +59 -0
- package/dist/public/skills/kibi-commit-review/SKILL.md +6 -2
- package/dist/public/skills/kibi-decisions/SKILL.md +7 -2
- package/dist/public/skills/kibi-decisions/resources/signoff-views.md +3 -1
- package/dist/public/skills/kibi-usage/SKILL.md +14 -3
- package/dist/public/skills/kibi-usage/resources/prolog-proofs.md +207 -0
- package/dist/public/skills/kibi-usage/resources/proof.md +44 -3
- package/dist/schemas/entity.schema.json +126 -6
- package/dist/search-answer.d.ts +3 -2
- package/dist/search-answer.d.ts.map +1 -1
- package/dist/search-answer.js +56 -3
- package/dist/traceability/analysis-gate.d.ts +3 -1
- package/dist/traceability/analysis-gate.d.ts.map +1 -1
- package/dist/traceability/analysis-gate.js +9 -1
- package/dist/traceability/impact-knowledge.d.ts.map +1 -1
- package/dist/traceability/impact-knowledge.js +2 -0
- package/dist/traceability/staged-file-coverage.d.ts.map +1 -1
- package/dist/traceability/staged-file-coverage.js +7 -2
- package/dist/traceability/symbol-extract.d.ts +17 -0
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +69 -15
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +11 -1
- package/dist/traceability/validate.d.ts.map +1 -1
- package/dist/traceability/validate.js +5 -7
- package/dist/types/entities.d.ts +12 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/usage-telemetry.d.ts +9 -0
- package/dist/usage-telemetry.d.ts.map +1 -1
- package/dist/usage-telemetry.js +50 -4
- package/dist/utils/first-sentence.d.ts +9 -0
- package/dist/utils/first-sentence.d.ts.map +1 -0
- package/dist/utils/first-sentence.js +52 -0
- package/dist/utils/rule-registry.generated.d.ts +11 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.js +13 -0
- package/package.json +5 -5
- package/schema/entities.pl +12 -0
- package/src/public/operations/check-executor.ts +8 -0
- package/src/public/operations/evidence-floor.ts +29 -1
- package/src/public/operations/repair-plan.ts +152 -1
- package/src/public/operations/schema6-check-actions.ts +1 -1
- package/src/public/operations/specs/check-rules.generated.ts +3 -1
- package/src/public/operations/specs/mutation-schemas.ts +34 -0
- package/src/public/operations/specs/reporting.ts +38 -3
- package/src/public/operations/specs/semantic.ts +2 -1
- package/src/public/operations/symbol-coordinates-check.ts +79 -0
- package/src/public/proof-protocol-types.d.ts +22 -5
- package/src/public/proof-protocol.ts +78 -19
- package/src/public/proof-sources.ts +51 -3
- package/src/public/schemas/entity.ts +65 -0
- package/src/public/skills/kibi-commit-review/SKILL.md +6 -2
- package/src/public/skills/kibi-decisions/SKILL.md +7 -2
- package/src/public/skills/kibi-decisions/resources/signoff-views.md +3 -1
- package/src/public/skills/kibi-usage/SKILL.md +14 -3
- package/src/public/skills/kibi-usage/resources/prolog-proofs.md +207 -0
- package/src/public/skills/kibi-usage/resources/proof.md +44 -3
- package/src/schemas/entity.schema.json +126 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-json-command.d.ts","sourceRoot":"","sources":["../src/cli-json-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-json-command.d.ts","sourceRoot":"","sources":["../src/cli-json-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAIpE;AAGD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAW7E;AAGD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS;QAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KACpC,EAAE,CAAC;CACL,CAAC;AAmDF,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC,IAAI,CAAC,CAgHf"}
|
package/dist/cli-json-command.js
CHANGED
|
@@ -6,6 +6,7 @@ import { executeOperation as executeProtocolOperation, openFailureResult, } from
|
|
|
6
6
|
import { prepareOperationInput } from "./cli-validate.js";
|
|
7
7
|
import { appendCliDiagnosticUsage, diagnosticEnvOptIn, } from "./public/diagnostic-usage.js";
|
|
8
8
|
import { createCliRuntime } from "./runtime/cli-runtime.js";
|
|
9
|
+
import { noteCliErrorCategory, noteCliResultError } from "./usage-telemetry.js";
|
|
9
10
|
export function writeOptionalStderr(stderr) {
|
|
10
11
|
if (stderr !== undefined) {
|
|
11
12
|
process.stderr.write(stderr);
|
|
@@ -31,6 +32,7 @@ export async function withConsoleOnStderr(fn) {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
function writeInputError(error) {
|
|
35
|
+
noteCliErrorCategory(error.code);
|
|
34
36
|
process.stderr.write(`Error [${error.code}]: ${error.detail}\n`);
|
|
35
37
|
process.exitCode = error.exitCode;
|
|
36
38
|
}
|
|
@@ -173,5 +175,7 @@ export async function runJsonInvocation(invocation) {
|
|
|
173
175
|
await writeAndWaitForDrain(process.stdout, result.stdout);
|
|
174
176
|
}
|
|
175
177
|
writeOptionalStderr(result.stderr);
|
|
178
|
+
if (result.exitCode !== 0)
|
|
179
|
+
noteCliResultError(result.stdout);
|
|
176
180
|
process.exitCode = result.exitCode;
|
|
177
181
|
}
|
|
@@ -21,8 +21,8 @@ export function registerFoundationCommands(program) {
|
|
|
21
21
|
.option("--dry-run", "Preview migration changes without writing files")
|
|
22
22
|
.option("--yes", "Apply migration changes without prompting")
|
|
23
23
|
.option("--format <format>", "Output format: json|table", "table")
|
|
24
|
-
.option("--apply-safe", "Apply only explicitly approved deterministic migration actions")
|
|
25
|
-
.option("--approved-plan-hash <sha256>", "Exact migration plan hash approved for --apply-safe")
|
|
24
|
+
.option("--apply-safe [sha256]", "Apply only explicitly approved deterministic migration actions of the plan with this hash")
|
|
25
|
+
.option("--approved-plan-hash <sha256>", "Exact migration plan hash approved for --apply-safe (same as --apply-safe <sha256>)")
|
|
26
26
|
.option("--backlog", "List every quality and coverage backlog action instead of counts per code")
|
|
27
27
|
.option("--approved-action <id>", "Approve one migration action (repeatable through comma-separated IDs)", (value, previous = []) => [
|
|
28
28
|
...previous,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-register-reporting.d.ts","sourceRoot":"","sources":["../src/cli-register-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"cli-register-reporting.d.ts","sourceRoot":"","sources":["../src/cli-register-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4RhE"}
|
|
@@ -75,6 +75,7 @@ export function registerReportingCommands(program) {
|
|
|
75
75
|
.option("--migration-offset <n>", "Skip ready semantic-inventory migration batches", "0")
|
|
76
76
|
.option("--migration-predicate-limit <n>", "Maximum ranked predicate schemas per proposition", "5")
|
|
77
77
|
.option("--migration-predicate-min-score <score>", "Minimum predicate schema rank score", "0.35")
|
|
78
|
+
.option("--cases", "Print the edge cases derived from each requirement's typed claims, with their predicted outcome and covering scenarios", false)
|
|
78
79
|
.option("--format <format>", "Output format: json|table", "table")
|
|
79
80
|
.action(async (options, command) => {
|
|
80
81
|
if (options.input !== undefined) {
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMtD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUrD;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAIT;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM7D;AAGD,wBAAgB,YAAY,IAAI,OAAO,CAiBtC;AAGD,wBAAsB,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMtD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUrD;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAIT;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM7D;AAGD,wBAAgB,YAAY,IAAI,OAAO,CAiBtC;AAGD,wBAAsB,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAqC3C;AAED,wBAAsB,kBAAkB,CACtC,YAAY,UAAoD,EAChE,KAAK,cAAO,GACX,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
package/dist/cli.js
CHANGED
|
@@ -75,11 +75,13 @@ export async function main() {
|
|
|
75
75
|
const program = buildProgram();
|
|
76
76
|
const commandPath = trackCommandPath(program);
|
|
77
77
|
let exitCode = process.exitCode ?? 0;
|
|
78
|
+
let failure;
|
|
78
79
|
try {
|
|
79
80
|
await program.parseAsync(workspace.argv);
|
|
80
81
|
exitCode = process.exitCode ?? 0;
|
|
81
82
|
}
|
|
82
83
|
catch (error) {
|
|
84
|
+
failure = error;
|
|
83
85
|
exitCode = exitCodeFromCliFailure(error);
|
|
84
86
|
}
|
|
85
87
|
try {
|
|
@@ -88,6 +90,7 @@ export async function main() {
|
|
|
88
90
|
packageVersion: packageVersion(packageJson),
|
|
89
91
|
startedAt,
|
|
90
92
|
exitCode: Number(exitCode),
|
|
93
|
+
error: failure,
|
|
91
94
|
});
|
|
92
95
|
}
|
|
93
96
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAsCA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAuF7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA6hBD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EACtC,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC5B,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAC3B,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAMpB;AAGD,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAyuB/B;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAoDtB;AAID,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAkEtB;AAID,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAmGtB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC,CAyCtB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAgDtB;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CA0BtB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBtB;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBtB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBtB"}
|
package/dist/commands/check.js
CHANGED
|
@@ -20,7 +20,7 @@ import { EngineClient } from "../engine.js";
|
|
|
20
20
|
import { extractFromManifestString } from "../extractors/manifest.js";
|
|
21
21
|
import { extractFromMarkdownString, } from "../extractors/markdown.js";
|
|
22
22
|
import { createMaintenanceSourceAnalysisService, fingerprintMaintenanceSourceSet, readSnapshotSourceConfig, } from "../plugins/maintenance-source-analysis.js";
|
|
23
|
-
import { analyzeSourceChanges, assertSourceAnalysisGate, } from "../plugins/source-change-analysis.js";
|
|
23
|
+
import { analyzeSourceChanges, assertSourceAnalysisGate, partialAnalysisReviews, } from "../plugins/source-change-analysis.js";
|
|
24
24
|
import { PrologProcess } from "../prolog.js";
|
|
25
25
|
import { escapeAtom, normalizeEntityId, parseTriples, parseViolationRows, } from "../prolog/codec.js";
|
|
26
26
|
import { createSemanticReviewDiagnostics, createSymbolGranularityDiagnostics, createSymbolQualityDiagnostics, hasBlockingImpactDiagnostics, } from "../public/impact-diagnostics.js";
|
|
@@ -45,7 +45,7 @@ import { classifyKibiImpactEvidence, isBehaviorSourceEdit, parseKibiImpactOverri
|
|
|
45
45
|
import { stagedInventoryDriftViolations } from "../traceability/staged-inventory-drift.js";
|
|
46
46
|
import { stagedCommitCarriesMigration } from "../traceability/staged-migration.js";
|
|
47
47
|
import { assessStagedSymbolsManifest, collectStagedAuthoredSymbolsManifestEvidence, } from "../traceability/staged-symbols-manifest.js";
|
|
48
|
-
import { createManifestLookupSentinelKey, extractSymbolsFromStagedFileAsync, } from "../traceability/symbol-extract.js";
|
|
48
|
+
import { createManifestLookupSentinelKey, extractSymbolsFromStagedFileAsync, partialAnalysisSymbolsUsable, } from "../traceability/symbol-extract.js";
|
|
49
49
|
import { cleanupTempKb, consultOverlay, createOverlayFacts, createTempKb, projectStagedEntities, } from "../traceability/temp-kb.js";
|
|
50
50
|
import { formatCoverageViolations, formatViolations as formatStagedViolations, validateStagedSymbolCoverage, validateStagedSymbols, } from "../traceability/validate.js";
|
|
51
51
|
import { resolveReadBranchAttachment } from "../utils/branch-resolver.js";
|
|
@@ -321,7 +321,7 @@ function noValidatedSymbolsMessage(sourceAnalysis) {
|
|
|
321
321
|
return [`${analysis.path}${provider}`];
|
|
322
322
|
});
|
|
323
323
|
if (partialFiles.length > 0) {
|
|
324
|
-
return `Partial source analysis was reviewed for ${partialFiles.join(", ")};
|
|
324
|
+
return `Partial source analysis was reviewed for ${partialFiles.join(", ")}; the staged change touches no declaration the analyzer placed and no staged entity.`;
|
|
325
325
|
}
|
|
326
326
|
return "No exported symbols or staged entities found in staged files.";
|
|
327
327
|
}
|
|
@@ -480,12 +480,30 @@ export async function checkCommand(options) {
|
|
|
480
480
|
const trustedSourceConfig = readSnapshotSourceConfig(snapshot, snapshot.baseTree);
|
|
481
481
|
const sourceService = createMaintenanceSourceAnalysisService(process.cwd(), trustedSourceConfig);
|
|
482
482
|
const sourceAnalysis = await analyzeSourceChanges(stagedInventory, sourceService);
|
|
483
|
+
// A partial result still places its declarations: they are checked
|
|
484
|
+
// like fully analyzed ones, and only a staged line in a gap outside
|
|
485
|
+
// them keeps the file at file-level review.
|
|
486
|
+
const partialReviews = partialAnalysisReviews(stagedInventory, sourceAnalysis);
|
|
487
|
+
const partialReviewPaths = new Set(partialReviews.map((review) => review.path));
|
|
488
|
+
const impactPolicyEnabled = stagedInventory.length > 0 && hasValidBaseImpactPolicy(snapshot);
|
|
489
|
+
const partialSymbolPaths = new Set();
|
|
483
490
|
for (const file of stagedInventory) {
|
|
484
|
-
const
|
|
485
|
-
if (
|
|
491
|
+
const after = sourceAnalysis.get(file.path)?.after;
|
|
492
|
+
if (after?.status === "ok") {
|
|
486
493
|
file.analysisDepth = "symbol";
|
|
487
494
|
file.disposition = "checked";
|
|
488
495
|
}
|
|
496
|
+
else if (after &&
|
|
497
|
+
file.status !== "D" &&
|
|
498
|
+
!file.skipReason &&
|
|
499
|
+
partialAnalysisSymbolsUsable(after)) {
|
|
500
|
+
partialSymbolPaths.add(file.path);
|
|
501
|
+
// An impact review binds the classified depth; keep it there.
|
|
502
|
+
if (!impactPolicyEnabled && !partialReviewPaths.has(file.path)) {
|
|
503
|
+
file.analysisDepth = "symbol";
|
|
504
|
+
file.disposition = "checked";
|
|
505
|
+
}
|
|
506
|
+
}
|
|
489
507
|
}
|
|
490
508
|
const mergeInherited = snapshot.mergeInherited ?? [];
|
|
491
509
|
const mergeNote = mergeInherited.length > 0
|
|
@@ -495,7 +513,11 @@ export async function checkCommand(options) {
|
|
|
495
513
|
const renameNote = renameResolved.length > 0
|
|
496
514
|
? `Baseline: HEAD with ${renameResolved.length} staged knowledge rename(s) into .kb/ resolved; renamed files are judged only on what this commit changed in them. Run kibi check for the full report.`
|
|
497
515
|
: undefined;
|
|
498
|
-
const baselineNotes = [
|
|
516
|
+
const baselineNotes = [
|
|
517
|
+
mergeNote,
|
|
518
|
+
renameNote,
|
|
519
|
+
...partialReviews.map((review) => `Partial source analysis: staged line(s) ${review.lines.map((range) => (range.startLine === range.endLine ? `${range.startLine}` : `${range.startLine}-${range.endLine}`)).join(", ")} of ${review.path} fall outside every declaration the analyzer placed (${review.detail}); review that change at file level.`),
|
|
520
|
+
].filter((note) => note !== undefined);
|
|
499
521
|
const printNotedResult = (input) => {
|
|
500
522
|
printStagedResult(baselineNotes.length === 0
|
|
501
523
|
? input
|
|
@@ -535,7 +557,6 @@ export async function checkCommand(options) {
|
|
|
535
557
|
record.providerId =
|
|
536
558
|
analysis.after?.providerId ?? analysis.before?.providerId ?? null;
|
|
537
559
|
}
|
|
538
|
-
const impactPolicyEnabled = stagedInventory.length > 0 && hasValidBaseImpactPolicy(snapshot);
|
|
539
560
|
// One rule decides which analysis gaps block (see analysis-gate): the
|
|
540
561
|
// committed side never blocks, and an after-side local gap blocks only
|
|
541
562
|
// where it overlaps the staged lines. With a policy, the impact review
|
|
@@ -568,9 +589,12 @@ export async function checkCommand(options) {
|
|
|
568
589
|
return { exitCode: 0 };
|
|
569
590
|
}
|
|
570
591
|
const symbolPaths = new Set(stagedInventory
|
|
571
|
-
.filter((file) => file.analysisDepth === "symbol"
|
|
592
|
+
.filter((file) => file.analysisDepth === "symbol" ||
|
|
593
|
+
partialSymbolPaths.has(file.path))
|
|
572
594
|
.map((file) => file.path));
|
|
573
|
-
const sourceFiles =
|
|
595
|
+
const sourceFiles = supportedStagedFiles(stagedInventory.map((file) => partialSymbolPaths.has(file.path)
|
|
596
|
+
? { ...file, analysisDepth: "symbol" }
|
|
597
|
+
: file)).filter((file) => symbolPaths.has(file.path));
|
|
574
598
|
const markdownFiles = stagedFiles.filter((file) => file.path.endsWith(".md") && isEntityLanePath(file.path));
|
|
575
599
|
const markdownErrors = [];
|
|
576
600
|
for (const f of markdownFiles) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/commands/coverage.ts"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/commands/coverage.ts"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC7E"}
|
|
@@ -26,5 +26,45 @@ export async function coverageCommand(options) {
|
|
|
26
26
|
migrationPredicateLimit: Number.parseInt(options.migrationPredicateLimit || "5", 10),
|
|
27
27
|
migrationPredicateMinScore: Number.parseFloat(options.migrationPredicateMinScore || "0.35"),
|
|
28
28
|
});
|
|
29
|
+
if (options.cases === true) {
|
|
30
|
+
printCaseTable(options.format, result.structuredContent);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
29
33
|
printDiscoveryResult(options.format, result.structuredContent, result.content[0]?.text ?? "Coverage summary unavailable.");
|
|
30
34
|
}
|
|
35
|
+
// implements REQ-kibi-case-coverage
|
|
36
|
+
// The edge cases of each returned requirement: one line per case with its
|
|
37
|
+
// predicted outcome and coverage, and the assumption an uncovered rejection
|
|
38
|
+
// case needs. JSON keeps the requirement id with its cases stage.
|
|
39
|
+
function printCaseTable(format, structured) {
|
|
40
|
+
const rows = Array.isArray(structured?.rows)
|
|
41
|
+
? structured.rows
|
|
42
|
+
: [];
|
|
43
|
+
const withCases = rows.flatMap((row) => {
|
|
44
|
+
const stages = row.proofStages;
|
|
45
|
+
const stage = stages?.cases;
|
|
46
|
+
return stage?.cases?.length ? [{ id: String(row.id), stage }] : [];
|
|
47
|
+
});
|
|
48
|
+
if (format === "json") {
|
|
49
|
+
console.log(JSON.stringify({ rows: withCases.map(({ id, stage }) => ({ id, cases: stage })) }, null, 2));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (withCases.length === 0) {
|
|
53
|
+
console.log("No requirement in this page has derived edge cases.");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const lines = [];
|
|
57
|
+
for (const { id, stage } of withCases) {
|
|
58
|
+
const summary = stage.summary ?? {};
|
|
59
|
+
lines.push(`${id}: ${stage.status} (${summary.covered ?? 0} covered, ${summary.uncovered ?? 0} uncovered, ${summary.unspecified ?? 0} unspecified, ${summary.waived ?? 0} waived)`);
|
|
60
|
+
for (const row of stage.cases ?? []) {
|
|
61
|
+
const where = row.coverage === "covered"
|
|
62
|
+
? ` by ${(row.scenarios ?? []).join(", ")}`
|
|
63
|
+
: "";
|
|
64
|
+
lines.push(` ${row.caseId} ${row.factId} ${row.constraint} -> ${row.predicted}: ${row.coverage}${where}`);
|
|
65
|
+
if (row.coverage === "uncovered" && row.predicted === "rejection")
|
|
66
|
+
lines.push(` assumes ${JSON.stringify(row.assumption ?? {})}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
console.log(lines.join("\n"));
|
|
70
|
+
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export interface DoctorOptions {
|
|
2
2
|
format?: "json" | "table";
|
|
3
3
|
}
|
|
4
|
+
/** `doctor:capability_plugins+git_hooks` for the checks that failed. */
|
|
5
|
+
export declare function doctorFailureCategory(results: readonly {
|
|
6
|
+
name: string;
|
|
7
|
+
passed: boolean;
|
|
8
|
+
}[]): string | undefined;
|
|
4
9
|
export declare function doctorCommand(options?: DoctorOptions): Promise<{
|
|
5
10
|
exitCode: number;
|
|
6
11
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAmHA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAGD,wEAAwE;AACxE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,EAAE,GACpD,MAAM,GAAG,SAAS,CAUpB;AAGD,wBAAsB,aAAa,CACjC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAyH/B;AAED,wBAAsB,4BAA4B,CAChD,IAAI,GAAE,MAAM,OAAO,CAAC;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,CACT,GACxC,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;MAkE3C;AAkGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAepB"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -22,9 +22,12 @@ import * as path from "node:path";
|
|
|
22
22
|
import { fileURLToPath } from "node:url";
|
|
23
23
|
import { bootstrapKibiEnvironment, secretSourceFromBootstrap, } from "../env/bootstrap.js";
|
|
24
24
|
import { kibiPackageVersions } from "../package-versions.js";
|
|
25
|
+
import { pluginInstallProblems } from "../plugins/plugin-install-check.js";
|
|
25
26
|
import { describeConfiguredCapabilityPlugins, readProjectKibiConfig, } from "../plugins/project-config.js";
|
|
27
|
+
import { workspaceReferenceLanguageNote } from "../plugins/reference-language-suggestion.js";
|
|
26
28
|
import { SwiplResolutionError, inspectSwiplBundle, probeRequiredLibraries, resolveSwipl, } from "../prolog/swipl-resolver.js";
|
|
27
29
|
import { buildMigrationPlan, migrationAction, } from "../public/operations/migration-plan.js";
|
|
30
|
+
import { noteCliErrorCategory } from "../usage-telemetry.js";
|
|
28
31
|
import { resolveBranchAttachment, resolveReadBranchAttachment, } from "../utils/branch-resolver.js";
|
|
29
32
|
import { branchStoreCompilation, inspectBranchStore, storeLockTakeoverReason, uncompiledBranchStoreReason, } from "../utils/branch-store.js";
|
|
30
33
|
import { LEGACY_KB_MIGRATION_COMMAND, LEGACY_KB_MIGRATION_NOTE, } from "../utils/config.js";
|
|
@@ -46,6 +49,17 @@ const FIRST_PARTY_PLUGIN_SECRETS = {
|
|
|
46
49
|
/** Static Jev defaults — must stay aligned with kibi-plugin-jev (no import). */
|
|
47
50
|
const JEV_DEFAULT_MODEL = "jev-latest";
|
|
48
51
|
const JEV_MAX_TIMEOUT_MS = 120_000;
|
|
52
|
+
// implements REQ-kibi-anonymous-usage-telemetry
|
|
53
|
+
/** `doctor:capability_plugins+git_hooks` for the checks that failed. */
|
|
54
|
+
export function doctorFailureCategory(results) {
|
|
55
|
+
const failed = results
|
|
56
|
+
.filter((result) => !result.passed)
|
|
57
|
+
.map((result) => result.name
|
|
58
|
+
.toLowerCase()
|
|
59
|
+
.replace(/[^a-z0-9]+/g, "_")
|
|
60
|
+
.replace(/^_|_$/g, ""));
|
|
61
|
+
return failed.length === 0 ? undefined : `doctor:${failed.join("+")}`;
|
|
62
|
+
}
|
|
49
63
|
// implements REQ-003
|
|
50
64
|
export async function doctorCommand(options = {}) {
|
|
51
65
|
// The repository context is per-diagnostic-run state: clearing here keeps
|
|
@@ -111,6 +125,8 @@ export async function doctorCommand(options = {}) {
|
|
|
111
125
|
results.push({ name, ...(await check()) });
|
|
112
126
|
}
|
|
113
127
|
const allPassed = results.every((result) => result.passed);
|
|
128
|
+
// Usage telemetry names the failing checks by their fixed names.
|
|
129
|
+
noteCliErrorCategory(doctorFailureCategory(results));
|
|
114
130
|
const warnings = results.filter((result) => result.passed && result.warning === true).length;
|
|
115
131
|
const runtime = await runtimeProvenance();
|
|
116
132
|
const packageActions = await packageMigrationActions(runtime);
|
|
@@ -429,10 +445,14 @@ function checkCapabilityPlugins() {
|
|
|
429
445
|
const bootstrap = bootstrapKibiEnvironment();
|
|
430
446
|
const workspaceRoot = bootstrap.workspaceRoot;
|
|
431
447
|
const rows = describeConfiguredCapabilityPlugins(workspaceRoot);
|
|
448
|
+
const languages = workspaceReferenceLanguageNote(workspaceRoot);
|
|
432
449
|
if (rows.length === 0) {
|
|
433
450
|
return {
|
|
434
451
|
passed: true,
|
|
435
452
|
message: "None configured; builtin providers only",
|
|
453
|
+
...(languages === null
|
|
454
|
+
? {}
|
|
455
|
+
: { warning: true, remediation: languages }),
|
|
436
456
|
};
|
|
437
457
|
}
|
|
438
458
|
const parts = rows.map((row) => `${row.package} ${row.capability} ${row.mode} declared=${row.declared ? "yes" : "no"}`);
|
|
@@ -447,6 +467,14 @@ function checkCapabilityPlugins() {
|
|
|
447
467
|
const packages = [
|
|
448
468
|
...new Set((config.plugins ?? []).map((plugin) => plugin.package)),
|
|
449
469
|
];
|
|
470
|
+
const installProblems = pluginInstallProblems(workspaceRoot, packages);
|
|
471
|
+
if (installProblems.length > 0) {
|
|
472
|
+
return {
|
|
473
|
+
passed: false,
|
|
474
|
+
message: `${parts.join("; ")}; ${installProblems.map((row) => row.problem).join("; ")}`,
|
|
475
|
+
remediation: installProblems.map((row) => row.fix).join(" "),
|
|
476
|
+
};
|
|
477
|
+
}
|
|
450
478
|
const missingSecrets = [];
|
|
451
479
|
// Secrets whose plugin only augments a builtin provider: without them the
|
|
452
480
|
// plugin is skipped and the builtin keeps working, so doctor warns.
|
|
@@ -499,6 +527,7 @@ function checkCapabilityPlugins() {
|
|
|
499
527
|
return {
|
|
500
528
|
passed: true,
|
|
501
529
|
message,
|
|
530
|
+
...(languages === null ? {} : { warning: true, remediation: languages }),
|
|
502
531
|
};
|
|
503
532
|
}
|
|
504
533
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA+GA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkFD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA4L/B"}
|
package/dist/commands/init.js
CHANGED
|
@@ -19,6 +19,7 @@ import { existsSync, lstatSync, realpathSync } from "node:fs";
|
|
|
19
19
|
import * as path from "node:path";
|
|
20
20
|
import { fileURLToPath } from "node:url";
|
|
21
21
|
import { classifyActivation } from "../operations/bootstrap/activation.js";
|
|
22
|
+
import { workspaceReferenceLanguageNote } from "../plugins/reference-language-suggestion.js";
|
|
22
23
|
import { nodeFilesystem } from "../public/operations/node-ports.js";
|
|
23
24
|
import { resolveBranchAttachment } from "../utils/branch-resolver.js";
|
|
24
25
|
import { readLegacyKbConfig } from "../utils/config.js";
|
|
@@ -268,6 +269,9 @@ export async function initCommand(options) {
|
|
|
268
269
|
console.log(legacyConfig
|
|
269
270
|
? " Next: run 'kibi migrate --yes' to move the legacy knowledge into .kb/."
|
|
270
271
|
: (await initNextAction(projectRoot)).message);
|
|
272
|
+
const plugins = workspaceReferenceLanguageNote(projectRoot);
|
|
273
|
+
if (plugins !== null)
|
|
274
|
+
console.log(` Suggested plugin: ${plugins}`);
|
|
271
275
|
console.log(" Optional diagnostic: run 'kibi doctor' if setup appears degraded.");
|
|
272
276
|
if (options.github === true) {
|
|
273
277
|
scaffoldGitHubIntegration({
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MigrationPlan } from "../public/operations/migration-plan.js";
|
|
2
|
+
export type PrintedPlan = Readonly<{
|
|
3
|
+
planHash: string;
|
|
4
|
+
printedAt: string;
|
|
5
|
+
expected: MigrationPlan["expected"];
|
|
6
|
+
actions: readonly Readonly<{
|
|
7
|
+
id: string;
|
|
8
|
+
code: string;
|
|
9
|
+
state: string;
|
|
10
|
+
}>[];
|
|
11
|
+
}>;
|
|
12
|
+
/** Remember a plan `kibi migrate` printed; a write failure is ignored. */
|
|
13
|
+
export declare function recordPrintedPlan(workspaceRoot: string, plan: MigrationPlan, now?: Date): void;
|
|
14
|
+
/** The printed plan with this hash, if `kibi migrate` printed it here. */
|
|
15
|
+
export declare function findPrintedPlan(workspaceRoot: string, planHash: string): PrintedPlan | undefined;
|
|
16
|
+
/** What differs between a printed plan and the current one, one line each. */
|
|
17
|
+
export declare function describePlanChange(printed: PrintedPlan, current: MigrationPlan): string[];
|
|
18
|
+
//# sourceMappingURL=migrate-plan-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-plan-record.d.ts","sourceRoot":"","sources":["../../src/commands/migrate-plan-record.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAY5E,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACpC,OAAO,EAAE,SAAS,QAAQ,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;CAC3E,CAAC,CAAC;AA0BH,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,aAAa,EACnB,GAAG,GAAE,IAAiB,GACrB,IAAI,CA0BN;AAGD,0EAA0E;AAC1E,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,WAAW,GAAG,SAAS,CAIzB;AAmBD,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,aAAa,GACrB,MAAM,EAAE,CA0BV"}
|
|
@@ -0,0 +1,112 @@
|
|
|
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 * as fs from "node:fs";
|
|
19
|
+
import * as path from "node:path";
|
|
20
|
+
/**
|
|
21
|
+
* The migration plans `kibi migrate` printed recently, so an approval of a
|
|
22
|
+
* plan that has since changed can say what changed. The file lives in the
|
|
23
|
+
* gitignored `.kb/migrations/` and is only a reading aid: a plan applies only
|
|
24
|
+
* with its current hash whatever this file says.
|
|
25
|
+
*/
|
|
26
|
+
const RECORD_FILE = "printed-plans.json";
|
|
27
|
+
const MAX_RECORDS = 8;
|
|
28
|
+
function recordPath(workspaceRoot) {
|
|
29
|
+
return path.join(workspaceRoot, ".kb", "migrations", RECORD_FILE);
|
|
30
|
+
}
|
|
31
|
+
function readRecords(workspaceRoot) {
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(fs.readFileSync(recordPath(workspaceRoot), "utf8"));
|
|
34
|
+
return Array.isArray(parsed)
|
|
35
|
+
? parsed.filter((entry) => typeof entry === "object" &&
|
|
36
|
+
entry !== null &&
|
|
37
|
+
typeof entry.planHash === "string" &&
|
|
38
|
+
Array.isArray(entry.actions))
|
|
39
|
+
: [];
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// implements REQ-cli-schema-migration
|
|
46
|
+
/** Remember a plan `kibi migrate` printed; a write failure is ignored. */
|
|
47
|
+
export function recordPrintedPlan(workspaceRoot, plan, now = new Date()) {
|
|
48
|
+
const entry = {
|
|
49
|
+
planHash: plan.planHash,
|
|
50
|
+
printedAt: now.toISOString(),
|
|
51
|
+
expected: plan.expected,
|
|
52
|
+
actions: plan.actions.map((action) => ({
|
|
53
|
+
id: action.id,
|
|
54
|
+
code: action.code,
|
|
55
|
+
state: action.state,
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
const records = [
|
|
59
|
+
entry,
|
|
60
|
+
...readRecords(workspaceRoot).filter((record) => record.planHash !== plan.planHash),
|
|
61
|
+
].slice(0, MAX_RECORDS);
|
|
62
|
+
try {
|
|
63
|
+
fs.mkdirSync(path.dirname(recordPath(workspaceRoot)), { recursive: true });
|
|
64
|
+
fs.writeFileSync(recordPath(workspaceRoot), `${JSON.stringify(records, null, 2)}\n`);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// The record only explains a changed plan; never fail a preview on it.
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// implements REQ-cli-schema-migration
|
|
71
|
+
/** The printed plan with this hash, if `kibi migrate` printed it here. */
|
|
72
|
+
export function findPrintedPlan(workspaceRoot, planHash) {
|
|
73
|
+
return readRecords(workspaceRoot).find((record) => record.planHash === planHash);
|
|
74
|
+
}
|
|
75
|
+
const EXPECTED_LABELS = {
|
|
76
|
+
branch: "the Git branch",
|
|
77
|
+
kbBranch: "the KB branch",
|
|
78
|
+
kbSnapshotId: "the KB snapshot",
|
|
79
|
+
workspaceSnapshot: "the workspace files",
|
|
80
|
+
configHash: "the KB config",
|
|
81
|
+
};
|
|
82
|
+
/** A long hash cut to its first 12 characters; other values as they are. */
|
|
83
|
+
function short(value) {
|
|
84
|
+
if (value === null)
|
|
85
|
+
return "none";
|
|
86
|
+
return /^[0-9a-f]{20,}$/i.test(value) ? value.slice(0, 12) : value;
|
|
87
|
+
}
|
|
88
|
+
// implements REQ-cli-schema-migration
|
|
89
|
+
/** What differs between a printed plan and the current one, one line each. */
|
|
90
|
+
export function describePlanChange(printed, current) {
|
|
91
|
+
const lines = [];
|
|
92
|
+
const before = new Map(printed.actions.map((action) => [action.id, action]));
|
|
93
|
+
const after = new Map(current.actions.map((action) => [action.id, action]));
|
|
94
|
+
for (const action of current.actions) {
|
|
95
|
+
const old = before.get(action.id);
|
|
96
|
+
if (old === undefined)
|
|
97
|
+
lines.push(`added ${action.state} ${action.code}: ${action.id}`);
|
|
98
|
+
else if (old.state !== action.state)
|
|
99
|
+
lines.push(`${action.id} went from ${old.state} to ${action.state}`);
|
|
100
|
+
}
|
|
101
|
+
for (const action of printed.actions) {
|
|
102
|
+
if (!after.has(action.id))
|
|
103
|
+
lines.push(`removed ${action.state} ${action.code}: ${action.id}`);
|
|
104
|
+
}
|
|
105
|
+
for (const key of Object.keys(EXPECTED_LABELS)) {
|
|
106
|
+
const was = printed.expected?.[key] ?? null;
|
|
107
|
+
const now = current.expected[key];
|
|
108
|
+
if (was !== now)
|
|
109
|
+
lines.push(`${EXPECTED_LABELS[key]} changed (${short(was)} -> ${short(now)})`);
|
|
110
|
+
}
|
|
111
|
+
return lines;
|
|
112
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { MigrationAction } from "../public/operations/migration-plan.js";
|
|
1
|
+
import type { MigrationAction, MigrationPlan } from "../public/operations/migration-plan.js";
|
|
2
2
|
interface MigrateOptions {
|
|
3
3
|
dryRun?: boolean;
|
|
4
4
|
yes?: boolean;
|
|
5
5
|
format?: "json" | "table";
|
|
6
|
-
|
|
6
|
+
/** `--apply-safe [sha256]`: true, or the approved plan hash given with it. */
|
|
7
|
+
applySafe?: boolean | string;
|
|
7
8
|
approvedPlanHash?: string;
|
|
8
9
|
approvedActionIds?: string[];
|
|
9
10
|
/** `--approved-action <id>` as the CLI parser spells it; same as approvedActionIds. */
|
|
@@ -60,6 +61,14 @@ export declare function migrateCommand(options?: MigrateOptions): Promise<{
|
|
|
60
61
|
* (for example legacy links an earlier plan action already marked).
|
|
61
62
|
*/
|
|
62
63
|
export declare function describeMigrationRun(summary: MigrationRunSummary): string;
|
|
64
|
+
/** The exact command that applies the plan with this hash. */
|
|
65
|
+
export declare function applyPlanCommand(planHash: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* Why an approved hash is not the current plan's: what changed since that
|
|
68
|
+
* plan was printed here, when Kibi recorded it, and the command for the
|
|
69
|
+
* current plan.
|
|
70
|
+
*/
|
|
71
|
+
export declare function planChangedMessage(workspaceRoot: string, approvedPlanHash: string, plan: MigrationPlan): string;
|
|
63
72
|
/**
|
|
64
73
|
* Review findings `kibi check` and `kb_status` report at any schema version:
|
|
65
74
|
* quality and coverage work, not steps of the migration. A plan lists them
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAmEA,OAAO,KAAK,EACV,eAAe,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAmEA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EAEd,MAAM,wCAAwC,CAAC;AA8BhD,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAC3E,MAAM,EAAE,SAAS,CAAC;IAClB,4BAA4B,EAAE,MAAM,CAAC;IACrC,8EAA8E;IAC9E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8DAA8D;IAC9D,4BAA4B,EAAE,MAAM,CAAC;IACrC,sEAAsE;IACtE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4FAA4F;IAC5F,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wHAAwH;IACxH,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,0EAA0E;IAC1E,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAqLD,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,OAAO,EACzB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,MAAM,CAUR;AAwXD,wBAAgB,+BAA+B,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAKtE;AAGD,wBAAsB,cAAc,CAClC,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAgkB9D;AAED;;;;GAIG;AAEH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAGzE;AAoUD,8DAA8D;AAE9D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;GAIG;AAEH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,aAAa,GAClB,MAAM,CAeR;AAuGD;;;;;GAKG;AAEH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GACpC,OAAO,CAOT"}
|