kibi-cli 0.17.0 → 0.19.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 +1 -2
- package/dist/cli-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +88 -44
- package/dist/cli-operation-loader.d.ts +3 -0
- package/dist/cli-operation-loader.d.ts.map +1 -0
- package/dist/cli-operation-loader.js +58 -0
- package/dist/cli-operation-metadata.d.ts +82 -0
- package/dist/cli-operation-metadata.d.ts.map +1 -0
- package/dist/cli-operation-metadata.js +106 -0
- package/dist/cli-protocol.d.ts +1 -1
- package/dist/cli-protocol.d.ts.map +1 -1
- package/dist/cli-protocol.js +4 -3
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +14 -17
- package/dist/cli-register-json.d.ts +3 -0
- package/dist/cli-register-json.d.ts.map +1 -0
- package/dist/cli-register-json.js +35 -0
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +41 -8
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +18 -14
- package/dist/cli-register-skills.d.ts.map +1 -1
- package/dist/cli-register-skills.js +8 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -2
- package/dist/commands/aggregated-checks.d.ts.map +1 -1
- package/dist/commands/aggregated-checks.js +1 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +30 -12
- package/dist/commands/coverage.d.ts +5 -0
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +6 -1
- package/dist/commands/discovery-shared.d.ts +2 -1
- package/dist/commands/discovery-shared.d.ts.map +1 -1
- package/dist/commands/discovery-shared.js +35 -13
- package/dist/commands/discovery-table.d.ts.map +1 -1
- package/dist/commands/discovery-table.js +96 -5
- package/dist/commands/engine.d.ts +8 -0
- package/dist/commands/engine.d.ts.map +1 -0
- package/dist/commands/engine.js +100 -0
- package/dist/commands/gaps.js +1 -1
- package/dist/commands/graph.js +1 -1
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +3 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +3 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/sync/cache.d.ts +12 -0
- package/dist/commands/sync/cache.d.ts.map +1 -1
- package/dist/commands/sync/cache.js +38 -1
- package/dist/commands/sync/persistence.d.ts +10 -1
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +276 -43
- package/dist/commands/sync/staging.d.ts +10 -1
- package/dist/commands/sync/staging.d.ts.map +1 -1
- package/dist/commands/sync/staging.js +84 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +521 -27
- package/dist/commands/usage-metrics.d.ts +66 -2
- package/dist/commands/usage-metrics.d.ts.map +1 -1
- package/dist/commands/usage-metrics.js +34 -24
- package/dist/commands/usage-remediation.d.ts +9 -0
- package/dist/commands/usage-remediation.d.ts.map +1 -0
- package/dist/commands/usage-remediation.js +52 -0
- package/dist/engine-daemon.d.ts +3 -0
- package/dist/engine-daemon.d.ts.map +1 -0
- package/dist/engine-daemon.js +34 -0
- package/dist/engine.d.ts +63 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +1256 -0
- package/dist/extractors/markdown.d.ts +8 -0
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +69 -2
- package/dist/extractors/relationships.d.ts +2 -0
- package/dist/extractors/relationships.d.ts.map +1 -1
- package/dist/extractors/relationships.js +15 -17
- package/dist/operations/modeling/logic-modeling.d.ts.map +1 -1
- package/dist/operations/modeling/logic-modeling.js +14 -5
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
- package/dist/operations/modeling/model-requirement.js +27 -2
- package/dist/operations/modeling/predicate-applyplan.d.ts +1 -1
- package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-applyplan.js +18 -6
- package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-inference.js +5 -17
- package/dist/operations/modeling/predicate-loader.js +1 -1
- package/dist/operations/modeling/predicate-types.d.ts +9 -1
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +35 -11
- package/dist/operations/mutation/audit.js +1 -1
- package/dist/operations/mutation/contradictions.d.ts +1 -1
- package/dist/operations/mutation/contradictions.d.ts.map +1 -1
- package/dist/operations/mutation/contradictions.js +23 -18
- package/dist/operations/mutation/serialization.d.ts.map +1 -1
- package/dist/operations/mutation/serialization.js +6 -3
- package/dist/operations/mutation/upsert.d.ts +3 -1
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +51 -12
- package/dist/operations/mutation/validate-upsert.d.ts.map +1 -1
- package/dist/operations/mutation/validate-upsert.js +18 -2
- package/dist/operations/mutation/validation.d.ts.map +1 -1
- package/dist/operations/mutation/validation.js +8 -0
- package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analysis-receipt.js +7 -1
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +76 -61
- package/dist/operations/semantic-advisor/clauses.d.ts +1 -0
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/clauses.js +7 -7
- package/dist/operations/semantic-advisor/ingestion-boundary.d.ts +18 -0
- package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/ingestion-boundary.js +167 -0
- package/dist/operations/semantic-advisor/shared.d.ts +8 -0
- package/dist/operations/semantic-advisor/shared.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/shared.js +37 -3
- package/dist/operations/semantic-advisor/types.d.ts +5 -0
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +9 -2
- package/dist/prolog.d.ts +14 -0
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +279 -69
- package/dist/public/diagnostic-usage.d.ts +17 -0
- package/dist/public/diagnostic-usage.d.ts.map +1 -0
- package/dist/public/diagnostic-usage.js +152 -0
- package/dist/public/distribution-parity.d.ts +90 -0
- package/dist/public/distribution-parity.d.ts.map +1 -0
- package/dist/public/distribution-parity.js +367 -0
- package/dist/public/impact/full-kb-quality.d.ts +2 -0
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +53 -1
- package/dist/public/impact-diagnostics.d.ts +2 -0
- package/dist/public/impact-diagnostics.d.ts.map +1 -1
- package/dist/public/impact-diagnostics.js +1 -0
- package/dist/public/operations/catalog.d.ts +151 -6
- 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 +4 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -1
- package/dist/public/operations/discovery-entities.js +3 -2
- package/dist/public/operations/discovery-executors.d.ts +6 -0
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +58 -5
- package/dist/public/operations/index.d.ts +4 -0
- package/dist/public/operations/index.d.ts.map +1 -1
- package/dist/public/operations/index.js +4 -0
- package/dist/public/operations/legacy-migration-plan.d.ts +113 -0
- package/dist/public/operations/legacy-migration-plan.d.ts.map +1 -0
- package/dist/public/operations/legacy-migration-plan.js +409 -0
- package/dist/public/operations/node-ports.d.ts.map +1 -1
- package/dist/public/operations/node-ports.js +90 -0
- package/dist/public/operations/prolog-json.d.ts.map +1 -1
- package/dist/public/operations/prolog-json.js +14 -4
- package/dist/public/operations/repair-plan.d.ts +184 -0
- package/dist/public/operations/repair-plan.d.ts.map +1 -0
- package/dist/public/operations/repair-plan.js +397 -0
- package/dist/public/operations/runtime-types.d.ts +38 -0
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- package/dist/public/operations/specs/check.d.ts +2 -2
- package/dist/public/operations/specs/check.js +2 -2
- package/dist/public/operations/specs/discovery.d.ts +1 -1
- package/dist/public/operations/specs/discovery.js +1 -1
- package/dist/public/operations/specs/modeling.d.ts +19 -1
- package/dist/public/operations/specs/modeling.d.ts.map +1 -1
- package/dist/public/operations/specs/modeling.js +16 -1
- package/dist/public/operations/specs/mutation-schemas.d.ts +96 -1
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +40 -1
- package/dist/public/operations/specs/reporting.d.ts +42 -1
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +70 -6
- package/dist/public/operations/specs/semantic.js +1 -1
- package/dist/public/operations/specs/upsert.d.ts +96 -1
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/workspace-snapshot.d.ts +10 -0
- package/dist/public/operations/workspace-snapshot.d.ts.map +1 -0
- package/dist/public/operations/workspace-snapshot.js +20 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +43 -1
- package/dist/public/skills/init-kibi/SKILL.md +2 -2
- package/dist/public/skills/kibi-freshness/SKILL.md +2 -2
- package/dist/public/skills/kibi-traceability/SKILL.md +8 -2
- package/dist/public/skills/kibi-usage/SKILL.md +12 -6
- package/dist/public/skills/kibi-usage/resources/fact-lanes.md +1 -1
- package/dist/public/skills/kibi-usage/resources/logic-ir.md +1 -1
- package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
- package/dist/public/skills/kibi-usage/resources/workflows.md +19 -2
- package/dist/public/telemetry-acceptance.d.ts +89 -0
- package/dist/public/telemetry-acceptance.d.ts.map +1 -0
- package/dist/public/telemetry-acceptance.js +597 -0
- package/dist/public/telemetry-remediation.d.ts +33 -0
- package/dist/public/telemetry-remediation.d.ts.map +1 -0
- package/dist/public/telemetry-remediation.js +257 -0
- package/dist/public/verification-receipt.d.ts +75 -0
- package/dist/public/verification-receipt.d.ts.map +1 -0
- package/dist/public/verification-receipt.js +129 -0
- package/dist/runtime/cli-runtime.d.ts.map +1 -1
- package/dist/runtime/cli-runtime.js +33 -37
- package/dist/schemas/entity.schema.json +96 -2
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +36 -3
- package/dist/types/entities.d.ts +1 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/rule-registry.d.ts +2 -0
- package/dist/utils/rule-registry.d.ts.map +1 -1
- package/package.json +36 -4
- package/src/public/diagnostic-usage.ts +206 -0
- package/src/public/distribution-parity.ts +580 -0
- package/src/public/impact/full-kb-quality.ts +74 -1
- package/src/public/impact-diagnostics.ts +16 -0
- package/src/public/operations/check-executor.ts +4 -0
- package/src/public/operations/discovery-entities.ts +3 -2
- package/src/public/operations/discovery-executors.ts +68 -5
- package/src/public/operations/index.ts +4 -0
- package/src/public/operations/legacy-migration-plan.ts +688 -0
- package/src/public/operations/node-ports.ts +109 -0
- package/src/public/operations/prolog-json.ts +15 -3
- package/src/public/operations/repair-plan.ts +562 -0
- package/src/public/operations/runtime-types.ts +47 -0
- package/src/public/operations/specs/check.ts +2 -2
- package/src/public/operations/specs/discovery.ts +1 -1
- package/src/public/operations/specs/modeling.ts +19 -1
- package/src/public/operations/specs/mutation-schemas.ts +47 -1
- package/src/public/operations/specs/reporting.ts +91 -6
- package/src/public/operations/specs/semantic.ts +1 -1
- package/src/public/operations/workspace-snapshot.ts +28 -0
- package/src/public/schemas/entity.ts +44 -1
- package/src/public/skills/init-kibi/SKILL.md +2 -2
- package/src/public/skills/kibi-freshness/SKILL.md +2 -2
- package/src/public/skills/kibi-traceability/SKILL.md +8 -2
- package/src/public/skills/kibi-usage/SKILL.md +12 -6
- package/src/public/skills/kibi-usage/resources/fact-lanes.md +1 -1
- package/src/public/skills/kibi-usage/resources/logic-ir.md +1 -1
- package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
- package/src/public/skills/kibi-usage/resources/workflows.md +19 -2
- package/src/public/telemetry-acceptance.ts +859 -0
- package/src/public/telemetry-remediation.ts +462 -0
- package/src/public/verification-receipt.ts +170 -0
- package/src/schemas/entity.schema.json +96 -2
|
@@ -241,12 +241,33 @@
|
|
|
241
241
|
"severity": { "type": "string" },
|
|
242
242
|
"links": { "type": "array", "items": { "type": "string" } },
|
|
243
243
|
"text_ref": { "type": "string" },
|
|
244
|
+
"semantic_text": {
|
|
245
|
+
"type": "string",
|
|
246
|
+
"description": "Requirement-only authored prose whose exact UTF-8 bytes anchor the semantic inventory without replacing text_ref evidence."
|
|
247
|
+
},
|
|
244
248
|
"logic_claims": {
|
|
245
249
|
"type": "array",
|
|
246
250
|
"minItems": 1,
|
|
247
251
|
"uniqueItems": true,
|
|
248
252
|
"items": { "type": "string", "pattern": "^CLAIM-[A-F0-9]{16}$" }
|
|
249
253
|
},
|
|
254
|
+
"semantic_clauses": {
|
|
255
|
+
"type": "array",
|
|
256
|
+
"minItems": 1,
|
|
257
|
+
"items": { "type": "string", "minLength": 1 }
|
|
258
|
+
},
|
|
259
|
+
"semantic_inventory_version": {
|
|
260
|
+
"type": "string",
|
|
261
|
+
"const": "kibi.semantic-inventory.v1"
|
|
262
|
+
},
|
|
263
|
+
"semantic_source_field": {
|
|
264
|
+
"type": "string",
|
|
265
|
+
"enum": ["semantic_text", "text_ref", "title"]
|
|
266
|
+
},
|
|
267
|
+
"semantic_source_hash": {
|
|
268
|
+
"type": "string",
|
|
269
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
270
|
+
},
|
|
250
271
|
"semantic_inventory": {
|
|
251
272
|
"type": "array",
|
|
252
273
|
"items": {
|
|
@@ -323,6 +344,63 @@
|
|
|
323
344
|
"type": "string",
|
|
324
345
|
"enum": ["internal", "consumer"]
|
|
325
346
|
},
|
|
347
|
+
"verification_receipts": {
|
|
348
|
+
"type": "array",
|
|
349
|
+
"maxItems": 50,
|
|
350
|
+
"items": {
|
|
351
|
+
"type": "object",
|
|
352
|
+
"required": [
|
|
353
|
+
"version",
|
|
354
|
+
"receipt_id",
|
|
355
|
+
"test_id",
|
|
356
|
+
"runner",
|
|
357
|
+
"command",
|
|
358
|
+
"scope",
|
|
359
|
+
"outcome",
|
|
360
|
+
"code_snapshot",
|
|
361
|
+
"environment_hash",
|
|
362
|
+
"started_at",
|
|
363
|
+
"finished_at",
|
|
364
|
+
"artifact_digest"
|
|
365
|
+
],
|
|
366
|
+
"properties": {
|
|
367
|
+
"version": {
|
|
368
|
+
"type": "string",
|
|
369
|
+
"const": "kibi.verification-receipt.v1"
|
|
370
|
+
},
|
|
371
|
+
"receipt_id": {
|
|
372
|
+
"type": "string",
|
|
373
|
+
"pattern": "^VR-[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$"
|
|
374
|
+
},
|
|
375
|
+
"test_id": { "type": "string", "minLength": 1 },
|
|
376
|
+
"runner": { "type": "string", "minLength": 1 },
|
|
377
|
+
"command": { "type": "string", "minLength": 1 },
|
|
378
|
+
"scope": {
|
|
379
|
+
"type": "string",
|
|
380
|
+
"enum": ["unit", "integration", "end_to_end"]
|
|
381
|
+
},
|
|
382
|
+
"outcome": {
|
|
383
|
+
"type": "string",
|
|
384
|
+
"enum": ["passed", "failed", "errored", "cancelled", "skipped"]
|
|
385
|
+
},
|
|
386
|
+
"code_snapshot": {
|
|
387
|
+
"type": "string",
|
|
388
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
389
|
+
},
|
|
390
|
+
"environment_hash": {
|
|
391
|
+
"type": "string",
|
|
392
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
393
|
+
},
|
|
394
|
+
"started_at": { "type": "string", "minLength": 1 },
|
|
395
|
+
"finished_at": { "type": "string", "minLength": 1 },
|
|
396
|
+
"artifact_digest": {
|
|
397
|
+
"type": "string",
|
|
398
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"additionalProperties": false
|
|
402
|
+
}
|
|
403
|
+
},
|
|
326
404
|
"type": {
|
|
327
405
|
"type": "string",
|
|
328
406
|
"enum": [
|
|
@@ -427,11 +505,16 @@
|
|
|
427
505
|
"not": {
|
|
428
506
|
"anyOf": [
|
|
429
507
|
{ "required": ["verification_scope"] },
|
|
430
|
-
{ "required": ["verification_perspective"] }
|
|
508
|
+
{ "required": ["verification_perspective"] },
|
|
509
|
+
{ "required": ["verification_receipts"] }
|
|
431
510
|
]
|
|
432
511
|
}
|
|
433
512
|
}
|
|
434
513
|
},
|
|
514
|
+
{
|
|
515
|
+
"if": { "required": ["verification_receipts"] },
|
|
516
|
+
"then": { "required": ["verification_scope"] }
|
|
517
|
+
},
|
|
435
518
|
{
|
|
436
519
|
"if": {
|
|
437
520
|
"properties": {
|
|
@@ -513,7 +596,18 @@
|
|
|
513
596
|
"properties": { "type": { "const": "req" } }
|
|
514
597
|
},
|
|
515
598
|
"then": {},
|
|
516
|
-
"else": {
|
|
599
|
+
"else": {
|
|
600
|
+
"not": {
|
|
601
|
+
"anyOf": [
|
|
602
|
+
{ "required": ["semantic_inventory"] },
|
|
603
|
+
{ "required": ["semantic_clauses"] },
|
|
604
|
+
{ "required": ["semantic_text"] },
|
|
605
|
+
{ "required": ["semantic_inventory_version"] },
|
|
606
|
+
{ "required": ["semantic_source_field"] },
|
|
607
|
+
{ "required": ["semantic_source_hash"] }
|
|
608
|
+
]
|
|
609
|
+
}
|
|
610
|
+
}
|
|
517
611
|
},
|
|
518
612
|
{
|
|
519
613
|
"if": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temp-kb.d.ts","sourceRoot":"","sources":["../../src/traceability/temp-kb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;CACvB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,aAAa,GACpD,IAAI,CAEN;
|
|
1
|
+
{"version":3,"file":"temp-kb.d.ts","sourceRoot":"","sources":["../../src/traceability/temp-kb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;CACvB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,aAAa,GACpD,IAAI,CAEN;AAoPD,iBAAe,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/D;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAG1B,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6C7E;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAkBrE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BlE"}
|
|
@@ -133,7 +133,7 @@ function serializeTypedFactFields(entity) {
|
|
|
133
133
|
}
|
|
134
134
|
return fields;
|
|
135
135
|
}
|
|
136
|
-
function buildEntityAssertionGoal(entity) {
|
|
136
|
+
function buildEntityAssertionGoal(entity, sourceFile) {
|
|
137
137
|
const props = [
|
|
138
138
|
`id=${toPrologAtom(entity.id)}`,
|
|
139
139
|
`title=${toPrologString(entity.title)}`,
|
|
@@ -153,12 +153,45 @@ function buildEntityAssertionGoal(entity) {
|
|
|
153
153
|
props.push(`severity=${toPrologAtom(entity.severity)}`);
|
|
154
154
|
if (entity.text_ref)
|
|
155
155
|
props.push(`text_ref=${toPrologString(entity.text_ref)}`);
|
|
156
|
+
if (entity.type === "req" && entity.semantic_text) {
|
|
157
|
+
props.push(`semantic_text=${toPrologString(entity.semantic_text)}`);
|
|
158
|
+
}
|
|
156
159
|
if (entity.type === "req" && entity.logic_claims) {
|
|
157
160
|
props.push(`logic_claims=[${entity.logic_claims.map(toPrologAtom).join(",")}]`);
|
|
158
161
|
}
|
|
162
|
+
if (entity.type === "req" && entity.semantic_clauses) {
|
|
163
|
+
props.push(`semantic_clauses=[${entity.semantic_clauses.map(toPrologString).join(",")}]`);
|
|
164
|
+
}
|
|
165
|
+
if (entity.type === "req" && entity.semantic_inventory_version) {
|
|
166
|
+
props.push(`semantic_inventory_version=${toPrologString(entity.semantic_inventory_version)}`);
|
|
167
|
+
}
|
|
168
|
+
if (entity.type === "req" && entity.semantic_source_field) {
|
|
169
|
+
props.push(`semantic_source_field=${toPrologString(entity.semantic_source_field)}`);
|
|
170
|
+
}
|
|
171
|
+
if (entity.type === "req" && entity.semantic_source_hash) {
|
|
172
|
+
props.push(`semantic_source_hash=${toPrologString(entity.semantic_source_hash)}`);
|
|
173
|
+
}
|
|
159
174
|
if (entity.type === "req" && entity.semantic_inventory) {
|
|
160
175
|
props.push(`semantic_inventory=${toPrologString(JSON.stringify(entity.semantic_inventory))}`);
|
|
161
176
|
}
|
|
177
|
+
if (sourceFile)
|
|
178
|
+
props.push(`sourceFile=${toPrologString(sourceFile)}`);
|
|
179
|
+
if (entity.type === "symbol") {
|
|
180
|
+
if (entity.symbol_role)
|
|
181
|
+
props.push(`symbol_role=${toPrologAtom(entity.symbol_role)}`);
|
|
182
|
+
if (entity.granularity_reason)
|
|
183
|
+
props.push(`granularity_reason=${toPrologAtom(entity.granularity_reason)}`);
|
|
184
|
+
for (const key of [
|
|
185
|
+
"sourceLine",
|
|
186
|
+
"sourceColumn",
|
|
187
|
+
"sourceEndLine",
|
|
188
|
+
"sourceEndColumn",
|
|
189
|
+
]) {
|
|
190
|
+
const value = entity[key];
|
|
191
|
+
if (typeof value === "number")
|
|
192
|
+
props.push(`${key}=${value}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
162
195
|
if (entity.type === "fact") {
|
|
163
196
|
props.push(...serializeTypedFactFields(entity));
|
|
164
197
|
}
|
|
@@ -215,11 +248,11 @@ async function consultOverlay(ctx) {
|
|
|
215
248
|
export { consultOverlay };
|
|
216
249
|
// implements REQ-014
|
|
217
250
|
export async function projectStagedEntities(prolog, results) {
|
|
218
|
-
for (const { entity } of results) {
|
|
251
|
+
for (const { entity, sourceFile } of results) {
|
|
219
252
|
// Retract stale relationships before re-asserting entity
|
|
220
253
|
// (kb_assert_entity_no_audit preserves relationships on upsert)
|
|
221
254
|
await prolog.query(`kb_retract_entity_relationships('${entity.id}')`);
|
|
222
|
-
const assertEntityResult = await prolog.query(buildEntityAssertionGoal(entity));
|
|
255
|
+
const assertEntityResult = await prolog.query(buildEntityAssertionGoal(entity, sourceFile));
|
|
223
256
|
if (!assertEntityResult.success) {
|
|
224
257
|
throw new Error(`Failed to assert staged entity ${entity.id}: ${assertEntityResult.error || "unknown error"}`);
|
|
225
258
|
}
|
package/dist/types/entities.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/types/entities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/types/entities.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ export interface Violation {
|
|
|
18
18
|
description: string;
|
|
19
19
|
suggestion?: string;
|
|
20
20
|
source?: string;
|
|
21
|
+
/** Exact source-bound proof evidence, when the check can produce it. */
|
|
22
|
+
evidence?: Readonly<Record<string, unknown>>;
|
|
21
23
|
}
|
|
22
24
|
export interface ChecksConfig {
|
|
23
25
|
rules: Record<string, boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-registry.d.ts","sourceRoot":"","sources":["../../src/utils/rule-registry.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,cAAc,CAAC;CACnE;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-registry.d.ts","sourceRoot":"","sources":["../../src/utils/rule-registry.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,cAAc,CAAC;CACnE;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,kBAAkB,EAAE,yBAAyB,CAAC;CAC/C;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,cAAc,EAsHjC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU,aAAoC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAKnC,CAAC;AAEF;;;;;GAKG;AAEH,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,GAChB,GAAG,CAAC,MAAM,CAAC,CAsBb;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC9B,YAAY,CAWd"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kibi-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Kibi CLI for knowledge base management",
|
|
6
6
|
"engines": {
|
|
7
|
-
"node": ">=18"
|
|
8
|
-
"bun": ">=1.0"
|
|
7
|
+
"node": ">=18"
|
|
9
8
|
},
|
|
10
9
|
"main": "./dist/cli.js",
|
|
11
10
|
"bin": {
|
|
@@ -14,6 +13,7 @@
|
|
|
14
13
|
"files": ["dist", "bin", "schema", "src/schemas", "src/public"],
|
|
15
14
|
"scripts": {
|
|
16
15
|
"build": "tsc -p tsconfig.json && mkdir -p dist/public/skills && cp -r src/public/skills/. dist/public/skills/",
|
|
16
|
+
"test": "node ../../scripts/run-owned-engine-tests.mjs -- bun test --timeout 15000 .",
|
|
17
17
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
18
18
|
"prepack": "npm run build"
|
|
19
19
|
},
|
|
@@ -30,10 +30,22 @@
|
|
|
30
30
|
"types": "./dist/prolog/codec.d.ts",
|
|
31
31
|
"default": "./dist/prolog/codec.js"
|
|
32
32
|
},
|
|
33
|
+
"./engine": {
|
|
34
|
+
"types": "./dist/engine.d.ts",
|
|
35
|
+
"default": "./dist/engine.js"
|
|
36
|
+
},
|
|
33
37
|
"./operations/runtime-types": {
|
|
34
38
|
"types": "./dist/public/operations/runtime-types.d.ts",
|
|
35
39
|
"default": "./dist/public/operations/runtime-types.js"
|
|
36
40
|
},
|
|
41
|
+
"./operations/node-ports": {
|
|
42
|
+
"types": "./dist/public/operations/node-ports.d.ts",
|
|
43
|
+
"default": "./dist/public/operations/node-ports.js"
|
|
44
|
+
},
|
|
45
|
+
"./verification-receipt": {
|
|
46
|
+
"types": "./dist/public/verification-receipt.d.ts",
|
|
47
|
+
"default": "./dist/public/verification-receipt.js"
|
|
48
|
+
},
|
|
37
49
|
"./operations/semantic-advisor/analyze-prose": {
|
|
38
50
|
"types": "./dist/operations/semantic-advisor/analyze-prose.d.ts",
|
|
39
51
|
"default": "./dist/operations/semantic-advisor/analyze-prose.js"
|
|
@@ -90,6 +102,26 @@
|
|
|
90
102
|
"types": "./dist/public/impact-diagnostics.d.ts",
|
|
91
103
|
"default": "./dist/public/impact-diagnostics.js"
|
|
92
104
|
},
|
|
105
|
+
"./telemetry-acceptance": {
|
|
106
|
+
"types": "./dist/public/telemetry-acceptance.d.ts",
|
|
107
|
+
"default": "./dist/public/telemetry-acceptance.js"
|
|
108
|
+
},
|
|
109
|
+
"./telemetry-remediation": {
|
|
110
|
+
"types": "./dist/public/telemetry-remediation.d.ts",
|
|
111
|
+
"default": "./dist/public/telemetry-remediation.js"
|
|
112
|
+
},
|
|
113
|
+
"./diagnostic-usage": {
|
|
114
|
+
"types": "./dist/public/diagnostic-usage.d.ts",
|
|
115
|
+
"default": "./dist/public/diagnostic-usage.js"
|
|
116
|
+
},
|
|
117
|
+
"./distribution-parity": {
|
|
118
|
+
"types": "./dist/public/distribution-parity.d.ts",
|
|
119
|
+
"default": "./dist/public/distribution-parity.js"
|
|
120
|
+
},
|
|
121
|
+
"./legacy-migration-plan": {
|
|
122
|
+
"types": "./dist/public/operations/legacy-migration-plan.d.ts",
|
|
123
|
+
"default": "./dist/public/operations/legacy-migration-plan.js"
|
|
124
|
+
},
|
|
93
125
|
"./public/symbol-granularity": {
|
|
94
126
|
"types": "./dist/public/symbol-granularity.d.ts",
|
|
95
127
|
"default": "./dist/public/symbol-granularity.js"
|
|
@@ -161,7 +193,7 @@
|
|
|
161
193
|
"fast-glob": "^3.2.12",
|
|
162
194
|
"gray-matter": "^4.0.3",
|
|
163
195
|
"js-yaml": "^4.1.0",
|
|
164
|
-
"kibi-core": "^0.
|
|
196
|
+
"kibi-core": "^0.10.0",
|
|
165
197
|
"ts-morph": "^23.0.0",
|
|
166
198
|
"ignore": "^5.3.0"
|
|
167
199
|
},
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { appendFileSync, mkdirSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
|
|
5
|
+
export interface DiagnosticUsageInput {
|
|
6
|
+
readonly workspaceRoot: string;
|
|
7
|
+
readonly tool: string;
|
|
8
|
+
readonly businessArgs: Readonly<Record<string, unknown>>;
|
|
9
|
+
readonly telemetry: Readonly<Record<string, unknown>> | null;
|
|
10
|
+
readonly startedAt: Date;
|
|
11
|
+
readonly finishedAt?: Date;
|
|
12
|
+
readonly status: "success" | "error";
|
|
13
|
+
readonly result?: unknown;
|
|
14
|
+
readonly error?: string;
|
|
15
|
+
readonly requestId?: string;
|
|
16
|
+
readonly logPath?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
20
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function resultRecord(result: unknown): Record<string, unknown> | undefined {
|
|
24
|
+
if (!isRecord(result)) return undefined;
|
|
25
|
+
return isRecord(result.structuredContent) ? result.structuredContent : result;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function stringArray(value: unknown): string[] {
|
|
29
|
+
return Array.isArray(value)
|
|
30
|
+
? value.filter((item): item is string => typeof item === "string")
|
|
31
|
+
: [];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function canonicalValue(value: unknown): unknown {
|
|
35
|
+
if (Array.isArray(value)) return value.map(canonicalValue);
|
|
36
|
+
if (!isRecord(value)) return value;
|
|
37
|
+
return Object.fromEntries(
|
|
38
|
+
Object.entries(value)
|
|
39
|
+
.filter(([key]) => key !== "_diagnostic_telemetry")
|
|
40
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
41
|
+
.map(([key, child]) => [key, canonicalValue(child)]),
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function diagnosticMutationFingerprint(
|
|
46
|
+
args: Readonly<Record<string, unknown>>,
|
|
47
|
+
): string {
|
|
48
|
+
return createHash("sha256")
|
|
49
|
+
.update(JSON.stringify(canonicalValue(args)))
|
|
50
|
+
.digest("hex");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function appendMutationFields(
|
|
54
|
+
fields: Record<string, unknown>,
|
|
55
|
+
args: Readonly<Record<string, unknown>>,
|
|
56
|
+
): void {
|
|
57
|
+
fields.mutation_fingerprint = diagnosticMutationFingerprint(args);
|
|
58
|
+
const type = typeof args.type === "string" ? args.type : "unknown";
|
|
59
|
+
const id = typeof args.id === "string" ? args.id : "unknown";
|
|
60
|
+
fields.mutation_target = `${type}:${id}`;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function appendSemanticFields(
|
|
64
|
+
fields: Record<string, unknown>,
|
|
65
|
+
receipt: unknown,
|
|
66
|
+
): void {
|
|
67
|
+
if (!isRecord(receipt)) return;
|
|
68
|
+
const inventory = isRecord(receipt.inventory_contract)
|
|
69
|
+
? receipt.inventory_contract
|
|
70
|
+
: undefined;
|
|
71
|
+
if (typeof inventory?.source_hash === "string") {
|
|
72
|
+
fields.semantic_source_hash = inventory.source_hash;
|
|
73
|
+
}
|
|
74
|
+
if (typeof receipt.logic_readiness === "string") {
|
|
75
|
+
fields.semantic_logic_readiness = receipt.logic_readiness;
|
|
76
|
+
}
|
|
77
|
+
if (typeof receipt.candidate_lane === "string") {
|
|
78
|
+
fields.semantic_candidate_lane = receipt.candidate_lane;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const RECEIPT_GAP_CODES = new Set([
|
|
83
|
+
"missing_verification_receipt",
|
|
84
|
+
"stale_verification_receipt",
|
|
85
|
+
"failed_verification_receipt",
|
|
86
|
+
"invalid_verification_receipt",
|
|
87
|
+
"verification_snapshot_unavailable",
|
|
88
|
+
]);
|
|
89
|
+
|
|
90
|
+
function appendCoverageFields(
|
|
91
|
+
fields: Record<string, unknown>,
|
|
92
|
+
args: Readonly<Record<string, unknown>>,
|
|
93
|
+
result: Record<string, unknown>,
|
|
94
|
+
): void {
|
|
95
|
+
const rows = Array.isArray(result.rows) ? result.rows.filter(isRecord) : [];
|
|
96
|
+
const summary = isRecord(result.summary) ? result.summary : {};
|
|
97
|
+
const gapCodes = rows.flatMap((row) => stringArray(row.proofGaps));
|
|
98
|
+
const repairPlan = isRecord(result.repairPlan)
|
|
99
|
+
? result.repairPlan
|
|
100
|
+
: undefined;
|
|
101
|
+
const scope = isRecord(repairPlan?.scope) ? repairPlan.scope : undefined;
|
|
102
|
+
fields.coverage_by = typeof args.by === "string" ? args.by : "req";
|
|
103
|
+
fields.coverage_requirement_count = Number(summary.total ?? rows.length);
|
|
104
|
+
fields.coverage_proven_count = Number(summary.proofProven ?? 0);
|
|
105
|
+
fields.coverage_proof_missing_count = Number(summary.proofMissing ?? 0);
|
|
106
|
+
fields.coverage_proof_gap_count = gapCodes.length;
|
|
107
|
+
fields.coverage_gap_codes = [...new Set(gapCodes)].sort();
|
|
108
|
+
fields.coverage_receipt_gap_count = gapCodes.filter((code) =>
|
|
109
|
+
RECEIPT_GAP_CODES.has(code),
|
|
110
|
+
).length;
|
|
111
|
+
if (typeof scope?.complete === "boolean") {
|
|
112
|
+
fields.coverage_scope_complete = scope.complete;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function deriveDiagnosticUsageFields(
|
|
117
|
+
tool: string,
|
|
118
|
+
args: Readonly<Record<string, unknown>>,
|
|
119
|
+
telemetry: Readonly<Record<string, unknown>> | null,
|
|
120
|
+
result: unknown,
|
|
121
|
+
): Record<string, unknown> {
|
|
122
|
+
const fields: Record<string, unknown> = {
|
|
123
|
+
telemetry_status: telemetry ? "provided" : "missing",
|
|
124
|
+
};
|
|
125
|
+
if (telemetry) {
|
|
126
|
+
fields.telemetry_is_autonomous = telemetry.is_autonomous ?? null;
|
|
127
|
+
fields.telemetry_confidence_score = telemetry.confidence_score ?? null;
|
|
128
|
+
fields.telemetry_attempt_number = telemetry.attempt_number ?? null;
|
|
129
|
+
if (typeof telemetry.session_id === "string") {
|
|
130
|
+
fields.session_id = telemetry.session_id;
|
|
131
|
+
}
|
|
132
|
+
if (typeof telemetry.actor_id === "string") {
|
|
133
|
+
fields.actor_id = telemetry.actor_id;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const structured = resultRecord(result);
|
|
138
|
+
if (tool === "kb_query" || tool === "kb_search") {
|
|
139
|
+
const resultCount = Number(structured?.count ?? 0);
|
|
140
|
+
fields.result_count = resultCount;
|
|
141
|
+
fields.zero_results = resultCount === 0;
|
|
142
|
+
fields.result_summary =
|
|
143
|
+
resultCount === 0 ? "0 results" : `${resultCount} results`;
|
|
144
|
+
}
|
|
145
|
+
if (tool === "kb_check") {
|
|
146
|
+
const count = Number(structured?.count ?? 0);
|
|
147
|
+
fields.violation_count = count;
|
|
148
|
+
fields.requested_rules = Array.isArray(args.rules) ? args.rules : [];
|
|
149
|
+
fields.result_summary =
|
|
150
|
+
count === 0 ? "0 violations" : `${count} violations`;
|
|
151
|
+
}
|
|
152
|
+
if (tool === "kb_coverage" && structured) {
|
|
153
|
+
appendCoverageFields(fields, args, structured);
|
|
154
|
+
fields.result_summary = `${String(
|
|
155
|
+
fields.coverage_proven_count,
|
|
156
|
+
)} proven; ${String(fields.coverage_proof_gap_count)} proof gaps`;
|
|
157
|
+
}
|
|
158
|
+
if (tool === "kb_semantic_advisor" && structured) {
|
|
159
|
+
appendSemanticFields(fields, structured.receipt);
|
|
160
|
+
}
|
|
161
|
+
if (tool === "kb_validate_upsert") {
|
|
162
|
+
appendMutationFields(fields, args);
|
|
163
|
+
fields.validation_valid = structured?.valid === true;
|
|
164
|
+
appendSemanticFields(fields, structured?.semanticAdvisor);
|
|
165
|
+
}
|
|
166
|
+
if (tool === "kb_upsert") {
|
|
167
|
+
appendMutationFields(fields, args);
|
|
168
|
+
appendSemanticFields(fields, structured?.semanticAdvisor);
|
|
169
|
+
}
|
|
170
|
+
if (!fields.result_summary) fields.result_summary = `${tool} completed`;
|
|
171
|
+
return fields;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export function appendCliDiagnosticUsage(input: DiagnosticUsageInput): void {
|
|
175
|
+
const finishedAt = input.finishedAt ?? new Date();
|
|
176
|
+
const requestId = input.requestId ?? `cli-${randomUUID()}`;
|
|
177
|
+
const logPath =
|
|
178
|
+
input.logPath ??
|
|
179
|
+
process.env.KIBI_CLI_DIAGNOSTIC_USAGE_LOG_PATH ??
|
|
180
|
+
path.join(input.workspaceRoot, ".kb", "usage.log");
|
|
181
|
+
mkdirSync(path.dirname(logPath), { recursive: true });
|
|
182
|
+
appendFileSync(
|
|
183
|
+
logPath,
|
|
184
|
+
`${JSON.stringify({
|
|
185
|
+
timestamp: finishedAt.toISOString(),
|
|
186
|
+
request_id: requestId,
|
|
187
|
+
tool: input.tool,
|
|
188
|
+
interface: "cli_json",
|
|
189
|
+
telemetry: input.telemetry,
|
|
190
|
+
business_args: input.businessArgs,
|
|
191
|
+
status: input.status,
|
|
192
|
+
started_at: input.startedAt.toISOString(),
|
|
193
|
+
finished_at: finishedAt.toISOString(),
|
|
194
|
+
duration_ms: finishedAt.getTime() - input.startedAt.getTime(),
|
|
195
|
+
active_branch: process.env.KIBI_BRANCH ?? null,
|
|
196
|
+
...(input.error ? { error_message: input.error } : {}),
|
|
197
|
+
...deriveDiagnosticUsageFields(
|
|
198
|
+
input.tool,
|
|
199
|
+
input.businessArgs,
|
|
200
|
+
input.telemetry,
|
|
201
|
+
input.result,
|
|
202
|
+
),
|
|
203
|
+
})}\n`,
|
|
204
|
+
"utf8",
|
|
205
|
+
);
|
|
206
|
+
}
|