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
|
@@ -1,8 +1,72 @@
|
|
|
1
1
|
import type { CommandResult } from "../cli.js";
|
|
2
|
-
|
|
2
|
+
import { type TelemetryAcceptanceReport, type TelemetryUsageEvent } from "../public/telemetry-acceptance.js";
|
|
3
|
+
export interface UsageMetricsOptions {
|
|
3
4
|
format?: "json" | "table";
|
|
4
5
|
limit?: string;
|
|
6
|
+
requireAcceptance?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface UsageLogRow extends TelemetryUsageEvent {
|
|
9
|
+
branch?: string;
|
|
10
|
+
active_branch?: string;
|
|
11
|
+
sourceFile?: string;
|
|
12
|
+
args?: {
|
|
13
|
+
sourceFile?: string;
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
};
|
|
16
|
+
business_args?: Readonly<{
|
|
17
|
+
sourceFile?: string;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}>;
|
|
20
|
+
result_summary?: string;
|
|
21
|
+
violation_count?: number;
|
|
22
|
+
error?: string;
|
|
23
|
+
error_message?: string;
|
|
24
|
+
error_category?: string;
|
|
25
|
+
error_stage?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface UsageMetricsReport {
|
|
28
|
+
rowCount: number;
|
|
29
|
+
dateRange: {
|
|
30
|
+
first: string | null;
|
|
31
|
+
last: string | null;
|
|
32
|
+
};
|
|
33
|
+
toolCounts: Record<string, number>;
|
|
34
|
+
branchCounts: Record<string, number>;
|
|
35
|
+
outcomeCounts: {
|
|
36
|
+
success: number;
|
|
37
|
+
error: number;
|
|
38
|
+
};
|
|
39
|
+
telemetry: {
|
|
40
|
+
completeCount: number;
|
|
41
|
+
missingCount: number;
|
|
42
|
+
completenessRate: number;
|
|
43
|
+
};
|
|
44
|
+
zeroResults: {
|
|
45
|
+
count: number;
|
|
46
|
+
rate: number;
|
|
47
|
+
byTool: Record<string, number>;
|
|
48
|
+
topSourceFiles: Array<{
|
|
49
|
+
sourceFile: string;
|
|
50
|
+
count: number;
|
|
51
|
+
}>;
|
|
52
|
+
};
|
|
53
|
+
kbCheck: {
|
|
54
|
+
violationTrend: Array<{
|
|
55
|
+
timestamp: string;
|
|
56
|
+
violationCount: number;
|
|
57
|
+
}>;
|
|
58
|
+
};
|
|
59
|
+
upsertErrors: {
|
|
60
|
+
categories: Record<string, number>;
|
|
61
|
+
};
|
|
62
|
+
errors: {
|
|
63
|
+
categories: Record<string, number>;
|
|
64
|
+
stages: Record<string, number>;
|
|
65
|
+
byTool: Record<string, number>;
|
|
66
|
+
};
|
|
67
|
+
acceptance: TelemetryAcceptanceReport;
|
|
5
68
|
}
|
|
6
69
|
export declare function usageMetricsCommand(options: UsageMetricsOptions): Promise<CommandResult | undefined>;
|
|
7
|
-
export
|
|
70
|
+
export declare function parseUsageLog(contents: string): UsageLogRow[];
|
|
71
|
+
export declare function buildUsageMetricsReport(rows: UsageLogRow[], limit: number, now?: Date): UsageMetricsReport;
|
|
8
72
|
//# sourceMappingURL=usage-metrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-metrics.d.ts","sourceRoot":"","sources":["../../src/commands/usage-metrics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"usage-metrics.d.ts","sourceRoot":"","sources":["../../src/commands/usage-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import Table from "cli-table3";
|
|
4
|
+
import { analyzeTelemetryAcceptance, parseTelemetryUsageLog, } from "../public/telemetry-acceptance.js";
|
|
4
5
|
// implements REQ-003
|
|
5
6
|
export async function usageMetricsCommand(options) {
|
|
6
7
|
const limit = Number.parseInt(options.limit || "10", 10);
|
|
@@ -15,36 +16,23 @@ export async function usageMetricsCommand(options) {
|
|
|
15
16
|
}
|
|
16
17
|
const rows = parseUsageLog(readFileSync(usageLogPath, "utf8"));
|
|
17
18
|
const report = buildUsageMetricsReport(rows, limit);
|
|
19
|
+
const gateResult = options.requireAcceptance === true && report.acceptance.status !== "passed"
|
|
20
|
+
? { exitCode: 1 }
|
|
21
|
+
: undefined;
|
|
18
22
|
if (options.format === "json") {
|
|
19
23
|
console.log(JSON.stringify(report, null, 2));
|
|
20
|
-
return;
|
|
24
|
+
return gateResult;
|
|
21
25
|
}
|
|
22
26
|
console.log(renderUsageMetricsReport(report));
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
function parseUsageLog(contents) {
|
|
26
|
-
const rows = [];
|
|
27
|
-
for (const [index, line] of contents.split(/\r?\n/).entries()) {
|
|
28
|
-
const trimmed = line.trim();
|
|
29
|
-
if (!trimmed) {
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
let parsed;
|
|
33
|
-
try {
|
|
34
|
-
parsed = JSON.parse(trimmed);
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
38
|
-
throw new Error(`Failed to parse .kb/usage.log line ${index + 1}: ${message}`);
|
|
39
|
-
}
|
|
40
|
-
if (!parsed || typeof parsed !== "object") {
|
|
41
|
-
throw new Error(`Failed to parse .kb/usage.log line ${index + 1}: expected object`);
|
|
42
|
-
}
|
|
43
|
-
rows.push(parsed);
|
|
27
|
+
if (gateResult) {
|
|
28
|
+
console.error(`Telemetry acceptance gate: ${report.acceptance.status}. Review the acceptance metrics and quality diagnostics before completion.`);
|
|
44
29
|
}
|
|
45
|
-
return
|
|
30
|
+
return gateResult;
|
|
31
|
+
}
|
|
32
|
+
export function parseUsageLog(contents) {
|
|
33
|
+
return parseTelemetryUsageLog(contents);
|
|
46
34
|
}
|
|
47
|
-
function buildUsageMetricsReport(rows, limit) {
|
|
35
|
+
export function buildUsageMetricsReport(rows, limit, now = new Date()) {
|
|
48
36
|
const timestamps = rows
|
|
49
37
|
.map((row) => row.timestamp)
|
|
50
38
|
.filter((value) => typeof value === "string")
|
|
@@ -140,6 +128,7 @@ function buildUsageMetricsReport(rows, limit) {
|
|
|
140
128
|
stages: mapToSortedObject(errorStages),
|
|
141
129
|
byTool: mapToSortedObject(errorsByTool),
|
|
142
130
|
},
|
|
131
|
+
acceptance: analyzeTelemetryAcceptance(rows, now),
|
|
143
132
|
};
|
|
144
133
|
}
|
|
145
134
|
function hasCompleteTelemetry(row) {
|
|
@@ -271,6 +260,7 @@ function mapToSortedObject(counts) {
|
|
|
271
260
|
function renderUsageMetricsReport(report) {
|
|
272
261
|
const sections = [
|
|
273
262
|
renderSummaryTable(report),
|
|
263
|
+
renderAcceptanceTable(report.acceptance),
|
|
274
264
|
renderCountsTable("Tool Counts", "Tool", report.toolCounts),
|
|
275
265
|
renderCountsTable("Branch Counts", "Branch", report.branchCounts),
|
|
276
266
|
renderCountsTable("Outcome Counts", "Outcome", report.outcomeCounts),
|
|
@@ -284,6 +274,26 @@ function renderUsageMetricsReport(report) {
|
|
|
284
274
|
].filter(Boolean);
|
|
285
275
|
return sections.join("\n\n");
|
|
286
276
|
}
|
|
277
|
+
function renderAcceptanceTable(report) {
|
|
278
|
+
const table = new Table({
|
|
279
|
+
head: ["Metric", "Status", "Observed", "Rate"],
|
|
280
|
+
colWidths: [36, 24, 18, 14],
|
|
281
|
+
wordWrap: true,
|
|
282
|
+
});
|
|
283
|
+
for (const metric of report.metrics) {
|
|
284
|
+
table.push([
|
|
285
|
+
metric.id,
|
|
286
|
+
metric.status,
|
|
287
|
+
`${metric.numerator}/${metric.denominator}`,
|
|
288
|
+
metric.rate === undefined ? "-" : formatRate(metric.rate),
|
|
289
|
+
]);
|
|
290
|
+
}
|
|
291
|
+
return [
|
|
292
|
+
`Telemetry Acceptance (${report.version})`,
|
|
293
|
+
`Status: ${report.status}; evidence fresh: ${report.scope.fresh ? "yes" : "no"}`,
|
|
294
|
+
table.toString(),
|
|
295
|
+
].join("\n");
|
|
296
|
+
}
|
|
287
297
|
function renderSummaryTable(report) {
|
|
288
298
|
const table = new Table({
|
|
289
299
|
head: ["Field", "Value"],
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CommandResult } from "../cli.js";
|
|
2
|
+
import { type TelemetryRemediationReport } from "../public/telemetry-remediation.js";
|
|
3
|
+
export interface UsageRemediationOptions {
|
|
4
|
+
readonly format?: "json" | "table";
|
|
5
|
+
readonly limit?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function renderUsageRemediationReport(report: TelemetryRemediationReport, limit: number): string;
|
|
8
|
+
export declare function usageRemediationCommand(options: UsageRemediationOptions): Promise<CommandResult | undefined>;
|
|
9
|
+
//# sourceMappingURL=usage-remediation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-remediation.d.ts","sourceRoot":"","sources":["../../src/commands/usage-remediation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EACL,KAAK,0BAA0B,EAEhC,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,0BAA0B,EAClC,KAAK,EAAE,MAAM,GACZ,MAAM,CA0BR;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA0BpC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import Table from "cli-table3";
|
|
4
|
+
import { parseTelemetryUsageLog } from "../public/telemetry-acceptance.js";
|
|
5
|
+
import { buildTelemetryRemediationReport, } from "../public/telemetry-remediation.js";
|
|
6
|
+
export function renderUsageRemediationReport(report, limit) {
|
|
7
|
+
const table = new Table({
|
|
8
|
+
head: ["Rank", "Metric", "Line", "Target", "Reason", "Repair"],
|
|
9
|
+
colWidths: [7, 28, 8, 26, 42, 48],
|
|
10
|
+
wordWrap: true,
|
|
11
|
+
});
|
|
12
|
+
for (const item of report.items.slice(0, limit)) {
|
|
13
|
+
table.push([
|
|
14
|
+
item.rank,
|
|
15
|
+
item.metric,
|
|
16
|
+
item.event?.logLine ?? "report",
|
|
17
|
+
item.target,
|
|
18
|
+
item.reason,
|
|
19
|
+
item.action,
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
const suffix = report.items.length > limit
|
|
23
|
+
? `\nShowing ${limit}/${report.items.length} remediation items.`
|
|
24
|
+
: "";
|
|
25
|
+
return ([
|
|
26
|
+
`Telemetry remediation: ${report.status} (${report.summary.eventItems} event, ${report.summary.reportItems} report-level)`,
|
|
27
|
+
table.toString(),
|
|
28
|
+
].join("\n") + suffix);
|
|
29
|
+
}
|
|
30
|
+
export async function usageRemediationCommand(options) {
|
|
31
|
+
const limit = Number.parseInt(options.limit ?? "50", 10);
|
|
32
|
+
if (!Number.isFinite(limit) || limit < 1) {
|
|
33
|
+
console.error("Error: --limit must be a positive integer");
|
|
34
|
+
return { exitCode: 1 };
|
|
35
|
+
}
|
|
36
|
+
if (options.format !== undefined &&
|
|
37
|
+
!["json", "table"].includes(options.format)) {
|
|
38
|
+
console.error("Error: --format must be json or table");
|
|
39
|
+
return { exitCode: 1 };
|
|
40
|
+
}
|
|
41
|
+
const usageLogPath = path.join(process.cwd(), ".kb", "usage.log");
|
|
42
|
+
if (!existsSync(usageLogPath)) {
|
|
43
|
+
console.error(`Error: usage log not found at ${usageLogPath}`);
|
|
44
|
+
return { exitCode: 1 };
|
|
45
|
+
}
|
|
46
|
+
const events = parseTelemetryUsageLog(readFileSync(usageLogPath, "utf8"));
|
|
47
|
+
const report = buildTelemetryRemediationReport(events);
|
|
48
|
+
console.log(options.format === "json"
|
|
49
|
+
? JSON.stringify(report, null, 2)
|
|
50
|
+
: renderUsageRemediationReport(report, limit));
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-daemon.d.ts","sourceRoot":"","sources":["../src/engine-daemon.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { writeFileSync } from "node:fs";
|
|
3
|
+
import { runEngineDaemon } from "./engine.js";
|
|
4
|
+
function requiredArg(args, name) {
|
|
5
|
+
const index = args.indexOf(name);
|
|
6
|
+
const value = index >= 0 ? args[index + 1] : undefined;
|
|
7
|
+
if (value === undefined || value.length === 0) {
|
|
8
|
+
throw new Error(`Missing ${name} argument`);
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
const args = process.argv.slice(2);
|
|
13
|
+
try {
|
|
14
|
+
await runEngineDaemon({
|
|
15
|
+
workspaceRoot: requiredArg(args, "--workspace"),
|
|
16
|
+
branch: requiredArg(args, "--branch"),
|
|
17
|
+
socketPath: requiredArg(args, "--socket"),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
22
|
+
console.error(message);
|
|
23
|
+
const socketIndex = args.indexOf("--socket");
|
|
24
|
+
const socketPath = socketIndex >= 0 ? args[socketIndex + 1] : undefined;
|
|
25
|
+
if (socketPath) {
|
|
26
|
+
try {
|
|
27
|
+
writeFileSync(`${socketPath}.error`, `${message}\n`, { mode: 0o600 });
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Preserve the process exit code even if the diagnostic path is gone.
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
}
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { PrologQueryResult } from "./public/operations/runtime-types.js";
|
|
2
|
+
import type { PrologEntityQueryInput, PrologEntityQueryResult, PrologSearchQueryInput, PrologSearchQueryResult } from "./public/operations/runtime-types.js";
|
|
3
|
+
export declare const ENGINE_PROTOCOL_VERSION = 1;
|
|
4
|
+
export declare const ENGINE_IDLE_TIMEOUT_MS: number;
|
|
5
|
+
export declare const ENGINE_PACKAGE_VERSIONS: string;
|
|
6
|
+
/**
|
|
7
|
+
* Cross the kernel durability boundary before a journaled mutation is
|
|
8
|
+
* acknowledged. SWI flushes completed RDF transaction records to its journal
|
|
9
|
+
* stream; fsyncing the journal and atomic CURRENT pointer makes that flush
|
|
10
|
+
* survive a host crash as well as a process crash.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fsyncJournaledBranchStore(branchPath: string): void;
|
|
13
|
+
export declare function engineSocketPath(workspaceRoot: string, branch: string): string;
|
|
14
|
+
export declare function enginePidPath(workspaceRoot: string, branch: string): string;
|
|
15
|
+
export declare function engineStartLockPath(workspaceRoot: string, branch: string): string;
|
|
16
|
+
export type EngineClientOptions = {
|
|
17
|
+
readonly workspaceRoot: string;
|
|
18
|
+
readonly branch: string;
|
|
19
|
+
readonly timeout?: number;
|
|
20
|
+
};
|
|
21
|
+
/** PrologPort-compatible client used by CLI and MCP operation runtimes. */
|
|
22
|
+
export declare class EngineClient {
|
|
23
|
+
private readonly workspaceRoot;
|
|
24
|
+
private readonly branch;
|
|
25
|
+
private readonly timeout;
|
|
26
|
+
private socket;
|
|
27
|
+
private daemon;
|
|
28
|
+
private inputBuffer;
|
|
29
|
+
private requestId;
|
|
30
|
+
private pending;
|
|
31
|
+
private requestTail;
|
|
32
|
+
private lastResult;
|
|
33
|
+
constructor(options: EngineClientOptions);
|
|
34
|
+
start(allowSpawn?: boolean): Promise<void>;
|
|
35
|
+
private attachSocket;
|
|
36
|
+
private handleResponse;
|
|
37
|
+
private request;
|
|
38
|
+
query(goal: string, signal?: AbortSignal): Promise<PrologQueryResult>;
|
|
39
|
+
queryBatch(goals: readonly string[]): Promise<PrologQueryResult>;
|
|
40
|
+
queryEntities(input: PrologEntityQueryInput): Promise<PrologEntityQueryResult>;
|
|
41
|
+
searchEntities(input: PrologSearchQueryInput): Promise<PrologSearchQueryResult>;
|
|
42
|
+
/** Best-effort cancellation for a queued request. */
|
|
43
|
+
cancel(requestId: number): void;
|
|
44
|
+
nextSolution(): Promise<PrologQueryResult | null>;
|
|
45
|
+
save(): Promise<PrologQueryResult>;
|
|
46
|
+
storageStatus(): Promise<PrologQueryResult>;
|
|
47
|
+
checkpoint(): Promise<PrologQueryResult>;
|
|
48
|
+
queryStatusJson(): Promise<PrologQueryResult>;
|
|
49
|
+
compact(): Promise<PrologQueryResult>;
|
|
50
|
+
exportStorage(targetDirectory: string): Promise<PrologQueryResult>;
|
|
51
|
+
invalidateCache(): void;
|
|
52
|
+
isRunning(): boolean;
|
|
53
|
+
getPid(): number;
|
|
54
|
+
stop(startIfMissing?: boolean): Promise<void>;
|
|
55
|
+
terminate(): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
export declare function ensureJournaledBranchStoreAsync(branchPath: string): Promise<void>;
|
|
58
|
+
export declare function runEngineDaemon(options: {
|
|
59
|
+
readonly workspaceRoot: string;
|
|
60
|
+
readonly branch: string;
|
|
61
|
+
readonly socketPath: string;
|
|
62
|
+
}): Promise<void>;
|
|
63
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|