@pleri/olam-cli 0.1.180 → 0.1.185
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/agent-stream/agent-sdk-to-chunks.js +44 -30
- package/dist/ask/checkout.d.ts +19 -0
- package/dist/ask/checkout.d.ts.map +1 -0
- package/dist/ask/checkout.js +40 -0
- package/dist/ask/checkout.js.map +1 -0
- package/dist/ask/knowledge-pack-builder.d.ts +72 -0
- package/dist/ask/knowledge-pack-builder.d.ts.map +1 -0
- package/dist/ask/knowledge-pack-builder.js +91 -0
- package/dist/ask/knowledge-pack-builder.js.map +1 -0
- package/dist/ask/knowledge-pack.generated.d.ts +8 -0
- package/dist/ask/knowledge-pack.generated.d.ts.map +1 -0
- package/dist/ask/knowledge-pack.generated.js +1947 -0
- package/dist/ask/knowledge-pack.generated.js.map +1 -0
- package/dist/ask/one-shot.d.ts +21 -0
- package/dist/ask/one-shot.d.ts.map +1 -0
- package/dist/ask/one-shot.js +50 -0
- package/dist/ask/one-shot.js.map +1 -0
- package/dist/ask/repl.d.ts +30 -0
- package/dist/ask/repl.d.ts.map +1 -0
- package/dist/ask/repl.js +109 -0
- package/dist/ask/repl.js.map +1 -0
- package/dist/ask/sdk-client.d.ts +87 -0
- package/dist/ask/sdk-client.d.ts.map +1 -0
- package/dist/ask/sdk-client.js +118 -0
- package/dist/ask/sdk-client.js.map +1 -0
- package/dist/ask/system-prompt.d.ts +30 -0
- package/dist/ask/system-prompt.d.ts.map +1 -0
- package/dist/ask/system-prompt.js +31 -0
- package/dist/ask/system-prompt.js.map +1 -0
- package/dist/commands/ask.d.ts +27 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +63 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/auth-list-json.d.ts +53 -0
- package/dist/commands/auth-list-json.d.ts.map +1 -0
- package/dist/commands/auth-list-json.js +47 -0
- package/dist/commands/auth-list-json.js.map +1 -0
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +80 -19
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +93 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/destroy.d.ts +41 -0
- package/dist/commands/destroy.d.ts.map +1 -1
- package/dist/commands/destroy.js +81 -33
- package/dist/commands/destroy.js.map +1 -1
- package/dist/commands/dispatch-resolve.d.ts +54 -0
- package/dist/commands/dispatch-resolve.d.ts.map +1 -0
- package/dist/commands/dispatch-resolve.js +105 -0
- package/dist/commands/dispatch-resolve.js.map +1 -0
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/dispatch.js +40 -9
- package/dist/commands/dispatch.js.map +1 -1
- package/dist/commands/doctor.js +11 -11
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/flywheel/k5-validate.d.ts +31 -0
- package/dist/commands/flywheel/k5-validate.d.ts.map +1 -1
- package/dist/commands/flywheel/k5-validate.js +80 -19
- package/dist/commands/flywheel/k5-validate.js.map +1 -1
- package/dist/commands/keys-list-json.d.ts +55 -0
- package/dist/commands/keys-list-json.d.ts.map +1 -0
- package/dist/commands/keys-list-json.js +54 -0
- package/dist/commands/keys-list-json.js.map +1 -0
- package/dist/commands/keys.d.ts.map +1 -1
- package/dist/commands/keys.js +6 -0
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/kg-classify.d.ts.map +1 -1
- package/dist/commands/kg-classify.js +20 -0
- package/dist/commands/kg-classify.js.map +1 -1
- package/dist/commands/kg-doctor.d.ts +67 -6
- package/dist/commands/kg-doctor.d.ts.map +1 -1
- package/dist/commands/kg-doctor.js +126 -46
- package/dist/commands/kg-doctor.js.map +1 -1
- package/dist/commands/lanes-list-json.d.ts +69 -0
- package/dist/commands/lanes-list-json.d.ts.map +1 -0
- package/dist/commands/lanes-list-json.js +42 -0
- package/dist/commands/lanes-list-json.js.map +1 -0
- package/dist/commands/lanes.d.ts.map +1 -1
- package/dist/commands/lanes.js +18 -7
- package/dist/commands/lanes.js.map +1 -1
- package/dist/commands/list.d.ts +27 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +67 -19
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/memory/status.d.ts +18 -0
- package/dist/commands/memory/status.d.ts.map +1 -1
- package/dist/commands/memory/status.js +38 -2
- package/dist/commands/memory/status.js.map +1 -1
- package/dist/commands/memory-service-container.d.ts +44 -0
- package/dist/commands/memory-service-container.d.ts.map +1 -1
- package/dist/commands/memory-service-container.js +49 -0
- package/dist/commands/memory-service-container.js.map +1 -1
- package/dist/commands/plans-list-json.d.ts +77 -0
- package/dist/commands/plans-list-json.d.ts.map +1 -0
- package/dist/commands/plans-list-json.js +61 -0
- package/dist/commands/plans-list-json.js.map +1 -0
- package/dist/commands/plans.d.ts.map +1 -1
- package/dist/commands/plans.js +10 -0
- package/dist/commands/plans.js.map +1 -1
- package/dist/commands/ps.d.ts +32 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +34 -0
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/repos-list-json.d.ts +58 -0
- package/dist/commands/repos-list-json.d.ts.map +1 -0
- package/dist/commands/repos-list-json.js +45 -0
- package/dist/commands/repos-list-json.js.map +1 -0
- package/dist/commands/repos.d.ts +1 -1
- package/dist/commands/repos.d.ts.map +1 -1
- package/dist/commands/repos.js +12 -2
- package/dist/commands/repos.js.map +1 -1
- package/dist/commands/runbooks.d.ts +32 -0
- package/dist/commands/runbooks.d.ts.map +1 -1
- package/dist/commands/runbooks.js +79 -22
- package/dist/commands/runbooks.js.map +1 -1
- package/dist/commands/services.d.ts +47 -1
- package/dist/commands/services.d.ts.map +1 -1
- package/dist/commands/services.js +59 -33
- package/dist/commands/services.js.map +1 -1
- package/dist/commands/skills-source.d.ts.map +1 -1
- package/dist/commands/skills-source.js +77 -2
- package/dist/commands/skills-source.js.map +1 -1
- package/dist/commands/skills.d.ts +27 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +17 -2
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/upgrade-history.d.ts +0 -2
- package/dist/commands/upgrade-history.d.ts.map +1 -1
- package/dist/commands/upgrade-history.js +0 -6
- package/dist/commands/upgrade-history.js.map +1 -1
- package/dist/commands/upgrade-lock.d.ts +0 -9
- package/dist/commands/upgrade-lock.d.ts.map +1 -1
- package/dist/commands/upgrade-lock.js +1 -1
- package/dist/commands/upgrade-lock.js.map +1 -1
- package/dist/commands/workspace-list-json.d.ts +73 -0
- package/dist/commands/workspace-list-json.d.ts.map +1 -0
- package/dist/commands/workspace-list-json.js +59 -0
- package/dist/commands/workspace-list-json.js.map +1 -0
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +7 -1
- package/dist/commands/workspace.js.map +1 -1
- package/dist/commands/world-snapshot.d.ts +13 -0
- package/dist/commands/world-snapshot.d.ts.map +1 -1
- package/dist/commands/world-snapshot.js +81 -1
- package/dist/commands/world-snapshot.js.map +1 -1
- package/dist/commands/yolo.d.ts +0 -4
- package/dist/commands/yolo.d.ts.map +1 -1
- package/dist/commands/yolo.js +2 -2
- package/dist/commands/yolo.js.map +1 -1
- package/dist/image-digests.json +8 -8
- package/dist/index.js +6097 -2563
- package/dist/index.js.map +1 -1
- package/dist/lib/anthropic-base-url-file.d.ts +37 -0
- package/dist/lib/anthropic-base-url-file.d.ts.map +1 -0
- package/dist/lib/anthropic-base-url-file.js +46 -0
- package/dist/lib/anthropic-base-url-file.js.map +1 -0
- package/dist/lib/auth-remote.d.ts +9 -0
- package/dist/lib/auth-remote.d.ts.map +1 -1
- package/dist/lib/auth-remote.js +19 -4
- package/dist/lib/auth-remote.js.map +1 -1
- package/dist/lib/cf-access-token.d.ts +32 -0
- package/dist/lib/cf-access-token.d.ts.map +1 -0
- package/dist/lib/cf-access-token.js +52 -0
- package/dist/lib/cf-access-token.js.map +1 -0
- package/dist/lib/config.d.ts +17 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +28 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/k8s-bootstrap.d.ts.map +1 -1
- package/dist/lib/k8s-bootstrap.js +13 -1
- package/dist/lib/k8s-bootstrap.js.map +1 -1
- package/dist/lib/k8s-secret-render.d.ts +2 -0
- package/dist/lib/k8s-secret-render.d.ts.map +1 -1
- package/dist/lib/k8s-secret-render.js +27 -0
- package/dist/lib/k8s-secret-render.js.map +1 -1
- package/dist/lib/kubectl-context.d.ts +49 -0
- package/dist/lib/kubectl-context.d.ts.map +1 -1
- package/dist/lib/kubectl-context.js +64 -2
- package/dist/lib/kubectl-context.js.map +1 -1
- package/dist/lib/peripheral-registry.d.ts +1 -1
- package/dist/lib/peripheral-registry.d.ts.map +1 -1
- package/dist/lib/peripheral-registry.js +13 -0
- package/dist/lib/peripheral-registry.js.map +1 -1
- package/dist/lib/upgrade-kubernetes.d.ts +13 -0
- package/dist/lib/upgrade-kubernetes.d.ts.map +1 -1
- package/dist/lib/upgrade-kubernetes.js +42 -9
- package/dist/lib/upgrade-kubernetes.js.map +1 -1
- package/dist/mcp-server.js +2624 -1041
- package/hermes-bundle/version.json +1 -1
- package/host-cp/k8s/manifests/30-configmap.yaml +11 -6
- package/host-cp/k8s/manifests/45-pvc.yaml +6 -2
- package/host-cp/k8s/manifests/50-deployment.yaml +15 -1
- package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/templates/chunks-postgres-secret-template.yaml +24 -0
- package/host-cp/k8s/templates/plan-chat-service-secret-template.yaml +35 -0
- package/host-cp/observability/trace-summary.mjs +267 -0
- package/host-cp/src/bootstrap-selective.mjs +30 -28
- package/host-cp/src/host-stream.mjs +52 -0
- package/host-cp/src/plan-chat-service.mjs +99 -74
- package/host-cp/src/redirect.mjs +7 -0
- package/host-cp/src/router.mjs +168 -0
- package/host-cp/src/serve-only-config.mjs +85 -0
- package/host-cp/src/server.mjs +482 -217
- package/host-cp/src/world-services.mjs +136 -0
- package/package.json +4 -2
|
@@ -11,5 +11,36 @@
|
|
|
11
11
|
* Plan reference: docs/plans/olam-flywheel-cli-namespace/phase-a-tasks.md § A4
|
|
12
12
|
*/
|
|
13
13
|
import type { Command } from 'commander';
|
|
14
|
+
/**
|
|
15
|
+
* Structured validation outcome. Stable shape consumed by `--json` mode — the
|
|
16
|
+
* /10x: chain reads `status` + `errors` programmatically instead of parsing the
|
|
17
|
+
* human-readable `message` prose.
|
|
18
|
+
*
|
|
19
|
+
* status 'pass' → file is valid (k5 block present + well-formed)
|
|
20
|
+
* status 'absent' → no k5 fields present (acceptable for legacy plans)
|
|
21
|
+
* status 'fail' → one or more present k5 fields fail schema validation
|
|
22
|
+
* status 'error' → file could not be read / parsed (stat / oversize / YAML)
|
|
23
|
+
*/
|
|
24
|
+
type ValidateStatus = 'pass' | 'absent' | 'fail' | 'error';
|
|
25
|
+
interface ValidateJson {
|
|
26
|
+
path: string;
|
|
27
|
+
status: ValidateStatus;
|
|
28
|
+
/** Schema-violation messages (empty unless status is 'fail' or 'error'). */
|
|
29
|
+
errors: string[];
|
|
30
|
+
/** The parsed k5 field values, when present + valid (null otherwise). */
|
|
31
|
+
k5_scores: Record<string, number> | null;
|
|
32
|
+
k5_boost: number | null;
|
|
33
|
+
k5_composite: number | null;
|
|
34
|
+
k5_scored_at: string | null;
|
|
35
|
+
/** min(k5_scores) convenience for the chain's gate logic (null if no scores). */
|
|
36
|
+
min_score: number | null;
|
|
37
|
+
}
|
|
38
|
+
export interface ValidateResult {
|
|
39
|
+
ok: boolean;
|
|
40
|
+
message: string;
|
|
41
|
+
json: ValidateJson;
|
|
42
|
+
}
|
|
43
|
+
export declare function validatePlan(path: string): ValidateResult;
|
|
14
44
|
export declare function registerFlywheelK5Validate(parent: Command): void;
|
|
45
|
+
export {};
|
|
15
46
|
//# sourceMappingURL=k5-validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"k5-validate.d.ts","sourceRoot":"","sources":["../../../src/commands/flywheel/k5-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"k5-validate.d.ts","sourceRoot":"","sources":["../../../src/commands/flywheel/k5-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2EzC;;;;;;;;;GASG;AACH,KAAK,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iFAAiF;IACjF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAwHzD;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA4ChE"}
|
|
@@ -76,40 +76,60 @@ function validateK5ScoredAt(scoredAt) {
|
|
|
76
76
|
}
|
|
77
77
|
return null;
|
|
78
78
|
}
|
|
79
|
-
function validatePlan(path) {
|
|
79
|
+
export function validatePlan(path) {
|
|
80
|
+
const emptyJson = (status, errors) => ({
|
|
81
|
+
path,
|
|
82
|
+
status,
|
|
83
|
+
errors,
|
|
84
|
+
k5_scores: null,
|
|
85
|
+
k5_boost: null,
|
|
86
|
+
k5_composite: null,
|
|
87
|
+
k5_scored_at: null,
|
|
88
|
+
min_score: null,
|
|
89
|
+
});
|
|
80
90
|
let stat;
|
|
81
91
|
try {
|
|
82
92
|
stat = statSync(path);
|
|
83
93
|
}
|
|
84
94
|
catch (err) {
|
|
85
|
-
|
|
95
|
+
const m = `FAIL cannot stat ${path}: ${err instanceof Error ? err.message : 'unknown'}`;
|
|
96
|
+
return { ok: false, message: m, json: emptyJson('error', [m]) };
|
|
86
97
|
}
|
|
87
98
|
if (stat.size > MAX_PLAN_BYTES) {
|
|
88
|
-
|
|
99
|
+
const m = `FAIL ${path}: plan file exceeds 1MB (${stat.size} bytes); refusing to parse`;
|
|
100
|
+
return { ok: false, message: m, json: emptyJson('error', [m]) };
|
|
89
101
|
}
|
|
90
102
|
let text;
|
|
91
103
|
try {
|
|
92
104
|
text = readFileSync(path, 'utf8');
|
|
93
105
|
}
|
|
94
106
|
catch (err) {
|
|
95
|
-
|
|
107
|
+
const m = `FAIL cannot read ${path}: ${err instanceof Error ? err.message : 'unknown'}`;
|
|
108
|
+
return { ok: false, message: m, json: emptyJson('error', [m]) };
|
|
96
109
|
}
|
|
97
110
|
if (!text.replace(/^/, '').startsWith('---')) {
|
|
98
|
-
|
|
111
|
+
const m = `FAIL ${path}: no YAML frontmatter (missing opening --- marker)`;
|
|
112
|
+
return { ok: false, message: m, json: emptyJson('error', [m]) };
|
|
99
113
|
}
|
|
100
114
|
if (!text.includes('\n---', 3)) {
|
|
101
|
-
|
|
115
|
+
const m = `FAIL ${path}: frontmatter block never closed (missing closing --- marker)`;
|
|
116
|
+
return { ok: false, message: m, json: emptyJson('error', [m]) };
|
|
102
117
|
}
|
|
103
118
|
const fm = extractFrontmatter(text);
|
|
104
119
|
if (fm === null) {
|
|
105
|
-
|
|
120
|
+
const m = `FAIL ${path}: frontmatter could not be parsed as YAML`;
|
|
121
|
+
return { ok: false, message: m, json: emptyJson('error', [m]) };
|
|
106
122
|
}
|
|
107
123
|
const hasScores = 'k5_scores' in fm;
|
|
108
124
|
const hasBoost = 'k5_boost' in fm;
|
|
109
125
|
const hasComposite = 'k5_composite' in fm;
|
|
110
126
|
const hasScoredAt = 'k5_scored_at' in fm;
|
|
111
127
|
if (!hasScores && !hasBoost && !hasComposite && !hasScoredAt) {
|
|
112
|
-
return {
|
|
128
|
+
return {
|
|
129
|
+
ok: true,
|
|
130
|
+
message: `PASS ${path}: k5_scores absent (acceptable — legacy plan)`,
|
|
131
|
+
json: emptyJson('absent', []),
|
|
132
|
+
};
|
|
113
133
|
}
|
|
114
134
|
const errors = [];
|
|
115
135
|
if (hasScores) {
|
|
@@ -133,51 +153,92 @@ function validatePlan(path) {
|
|
|
133
153
|
errors.push(err);
|
|
134
154
|
}
|
|
135
155
|
if (errors.length > 0) {
|
|
136
|
-
return {
|
|
137
|
-
|
|
156
|
+
return {
|
|
157
|
+
ok: false,
|
|
158
|
+
message: `FAIL ${path}: ${errors.join('; ')}`,
|
|
159
|
+
json: emptyJson('fail', errors),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// Build both the human-readable lines and the structured json payload from
|
|
163
|
+
// the same parsed values — single source of truth, no drift between surfaces.
|
|
164
|
+
const json = emptyJson('pass', []);
|
|
138
165
|
const lines = [`PASS ${path}: k5_scores valid`];
|
|
139
166
|
if (hasScores && typeof fm.k5_scores === 'object' && fm.k5_scores !== null) {
|
|
140
167
|
const scoresObj = fm.k5_scores;
|
|
168
|
+
const parsed = {};
|
|
141
169
|
const vals = [];
|
|
142
170
|
for (const dim of K5_DIMS) {
|
|
143
171
|
const raw = scoresObj[dim];
|
|
144
172
|
const n = typeof raw === 'number' ? raw : Number.parseInt(String(raw), 10);
|
|
173
|
+
parsed[dim] = n;
|
|
145
174
|
vals.push(n);
|
|
146
175
|
lines.push(` ${dim}: ${n}`);
|
|
147
176
|
}
|
|
148
|
-
|
|
177
|
+
json.k5_scores = parsed;
|
|
178
|
+
json.min_score = Math.min(...vals);
|
|
179
|
+
lines.push(` min(k5_scores): ${json.min_score}`);
|
|
149
180
|
}
|
|
150
181
|
if (hasBoost) {
|
|
151
182
|
const n = typeof fm.k5_boost === 'number' ? fm.k5_boost : Number.parseFloat(String(fm.k5_boost));
|
|
183
|
+
json.k5_boost = n;
|
|
152
184
|
lines.push(` k5_boost: ${n.toFixed(2)}`);
|
|
153
185
|
}
|
|
154
|
-
if (hasComposite)
|
|
186
|
+
if (hasComposite) {
|
|
187
|
+
const n = typeof fm.k5_composite === 'number' ? fm.k5_composite : Number.parseInt(String(fm.k5_composite), 10);
|
|
188
|
+
json.k5_composite = n;
|
|
155
189
|
lines.push(` k5_composite: ${String(fm.k5_composite)}`);
|
|
156
|
-
|
|
190
|
+
}
|
|
191
|
+
if (hasScoredAt) {
|
|
192
|
+
json.k5_scored_at = String(fm.k5_scored_at);
|
|
157
193
|
lines.push(` k5_scored_at: ${String(fm.k5_scored_at)}`);
|
|
194
|
+
}
|
|
158
195
|
if ('confidence' in fm)
|
|
159
196
|
lines.push(` confidence (existing): ${String(fm.confidence)}`);
|
|
160
|
-
return { ok: true, message: lines.join('\n') };
|
|
197
|
+
return { ok: true, message: lines.join('\n'), json };
|
|
161
198
|
}
|
|
162
199
|
export function registerFlywheelK5Validate(parent) {
|
|
163
200
|
parent
|
|
164
201
|
.command('k5-validate')
|
|
165
202
|
.description("Schema-check a plan's frontmatter k5_scores / k5_boost / k5_composite / k5_scored_at")
|
|
166
203
|
.argument('<plan-path>', 'path to the plan markdown file')
|
|
167
|
-
.
|
|
204
|
+
.option('--json', 'emit the structured validation result as JSON on stdout instead of prose')
|
|
205
|
+
.action((planPath, opts) => {
|
|
206
|
+
// Exit-code contract is identical across both surfaces:
|
|
207
|
+
// 0 = pass / absent, 1 = fail (schema violation), 2 = error (read/parse).
|
|
208
|
+
// --json mode writes the JSON payload to stdout regardless of outcome so a
|
|
209
|
+
// chain consumer can capture + branch on `.status`; prose mode keeps the
|
|
210
|
+
// pass→stdout / fail→stderr split for human-shell ergonomics.
|
|
168
211
|
try {
|
|
169
212
|
const result = validatePlan(planPath);
|
|
170
|
-
if (
|
|
213
|
+
if (opts.json) {
|
|
214
|
+
process.stdout.write(JSON.stringify(result.json) + '\n');
|
|
215
|
+
}
|
|
216
|
+
else if (result.ok) {
|
|
171
217
|
process.stdout.write(result.message + '\n');
|
|
172
|
-
process.exit(0);
|
|
173
218
|
}
|
|
174
219
|
else {
|
|
175
220
|
process.stderr.write(result.message + '\n');
|
|
176
|
-
process.exit(1);
|
|
177
221
|
}
|
|
222
|
+
const code = result.json.status === 'error' ? 2 : result.ok ? 0 : 1;
|
|
223
|
+
process.exit(code);
|
|
178
224
|
}
|
|
179
225
|
catch (err) {
|
|
180
|
-
|
|
226
|
+
const msg = `FAIL ${planPath}: unexpected error: ${err instanceof Error ? err.message : 'unknown'}`;
|
|
227
|
+
if (opts.json) {
|
|
228
|
+
process.stdout.write(JSON.stringify({
|
|
229
|
+
path: planPath,
|
|
230
|
+
status: 'error',
|
|
231
|
+
errors: [msg],
|
|
232
|
+
k5_scores: null,
|
|
233
|
+
k5_boost: null,
|
|
234
|
+
k5_composite: null,
|
|
235
|
+
k5_scored_at: null,
|
|
236
|
+
min_score: null,
|
|
237
|
+
}) + '\n');
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
process.stderr.write(msg + '\n');
|
|
241
|
+
}
|
|
181
242
|
process.exit(2);
|
|
182
243
|
}
|
|
183
244
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"k5-validate.js","sourceRoot":"","sources":["../../../src/commands/flywheel/k5-validate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"k5-validate.js","sourceRoot":"","sources":["../../../src/commands/flywheel/k5-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure JSON serialiser for `olam keys --json`.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from the command action so the wire contract is
|
|
5
|
+
* unit-testable without a filesystem round-trip (mirrors the pattern
|
|
6
|
+
* used by `auth-list-json.ts`, `repos-list-json.ts`, and
|
|
7
|
+
* `servicesStatusJson` in services.ts).
|
|
8
|
+
*
|
|
9
|
+
* WHY this exists: agent/script drivers (CI pipelines, Rico, flywheel
|
|
10
|
+
* chain skills) need to discover which LLM API keys are configured before
|
|
11
|
+
* spawning worlds that rely on them. The human table is colorized and
|
|
12
|
+
* already applies redaction for display; this serialiser gives drivers a
|
|
13
|
+
* stable, color-free array with the same redaction contract.
|
|
14
|
+
*
|
|
15
|
+
* Secret redaction: key VALUES are sensitive (e.g. `sk-proj-...` for
|
|
16
|
+
* OpenAI, provider tokens, etc.). The serialiser ALWAYS emits redacted
|
|
17
|
+
* values — same `first-8-chars + "..."` convention used by the human
|
|
18
|
+
* renderer — so `olam keys --json` is safe to pipe to CI logs, agent
|
|
19
|
+
* reasoning traces, or Rico digests without leaking secrets.
|
|
20
|
+
*
|
|
21
|
+
* The key NAMES are not secrets (e.g. "OPENAI", "ANTHROPIC") — they are
|
|
22
|
+
* emitted verbatim to let drivers check which providers are configured.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Per-key row in the `keys --json` payload.
|
|
26
|
+
* Field names are load-bearing — add new fields freely, never rename.
|
|
27
|
+
*/
|
|
28
|
+
export interface KeyListJsonEntry {
|
|
29
|
+
/** Key name as stored in keys.yaml (uppercase by convention). */
|
|
30
|
+
readonly name: string;
|
|
31
|
+
/**
|
|
32
|
+
* Redacted key value: first 8 chars + "...".
|
|
33
|
+
* Never the full secret — matches the human renderer's redact() contract.
|
|
34
|
+
*/
|
|
35
|
+
readonly redactedValue: string;
|
|
36
|
+
}
|
|
37
|
+
/** Top-level shape emitted by `olam keys --json`. */
|
|
38
|
+
export interface KeysListJson {
|
|
39
|
+
/** Number of configured keys. */
|
|
40
|
+
readonly count: number;
|
|
41
|
+
readonly keys: readonly KeyListJsonEntry[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Redact a secret value: keep first 8 chars, replace the rest with "...".
|
|
45
|
+
* Matches the `redact()` helper in keys.ts — deliberately inline so the
|
|
46
|
+
* serialiser has no runtime dependency on the command module.
|
|
47
|
+
*/
|
|
48
|
+
export declare function redactKeyValue(value: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Serialise the keys map to the stable `--json` wire shape.
|
|
51
|
+
* Accepts null (no file / empty file) and returns an empty payload.
|
|
52
|
+
* Returns a JSON string (no trailing newline — caller adds it).
|
|
53
|
+
*/
|
|
54
|
+
export declare function renderKeysListJson(keys: Record<string, string> | null): string;
|
|
55
|
+
//# sourceMappingURL=keys-list-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys-list-json.d.ts","sourceRoot":"","sources":["../../src/commands/keys-list-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAiB9E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure JSON serialiser for `olam keys --json`.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from the command action so the wire contract is
|
|
5
|
+
* unit-testable without a filesystem round-trip (mirrors the pattern
|
|
6
|
+
* used by `auth-list-json.ts`, `repos-list-json.ts`, and
|
|
7
|
+
* `servicesStatusJson` in services.ts).
|
|
8
|
+
*
|
|
9
|
+
* WHY this exists: agent/script drivers (CI pipelines, Rico, flywheel
|
|
10
|
+
* chain skills) need to discover which LLM API keys are configured before
|
|
11
|
+
* spawning worlds that rely on them. The human table is colorized and
|
|
12
|
+
* already applies redaction for display; this serialiser gives drivers a
|
|
13
|
+
* stable, color-free array with the same redaction contract.
|
|
14
|
+
*
|
|
15
|
+
* Secret redaction: key VALUES are sensitive (e.g. `sk-proj-...` for
|
|
16
|
+
* OpenAI, provider tokens, etc.). The serialiser ALWAYS emits redacted
|
|
17
|
+
* values — same `first-8-chars + "..."` convention used by the human
|
|
18
|
+
* renderer — so `olam keys --json` is safe to pipe to CI logs, agent
|
|
19
|
+
* reasoning traces, or Rico digests without leaking secrets.
|
|
20
|
+
*
|
|
21
|
+
* The key NAMES are not secrets (e.g. "OPENAI", "ANTHROPIC") — they are
|
|
22
|
+
* emitted verbatim to let drivers check which providers are configured.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Redact a secret value: keep first 8 chars, replace the rest with "...".
|
|
26
|
+
* Matches the `redact()` helper in keys.ts — deliberately inline so the
|
|
27
|
+
* serialiser has no runtime dependency on the command module.
|
|
28
|
+
*/
|
|
29
|
+
export function redactKeyValue(value) {
|
|
30
|
+
if (value.length <= 8)
|
|
31
|
+
return value + '...';
|
|
32
|
+
return value.slice(0, 8) + '...';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Serialise the keys map to the stable `--json` wire shape.
|
|
36
|
+
* Accepts null (no file / empty file) and returns an empty payload.
|
|
37
|
+
* Returns a JSON string (no trailing newline — caller adds it).
|
|
38
|
+
*/
|
|
39
|
+
export function renderKeysListJson(keys) {
|
|
40
|
+
if (!keys) {
|
|
41
|
+
const payload = { count: 0, keys: [] };
|
|
42
|
+
return JSON.stringify(payload);
|
|
43
|
+
}
|
|
44
|
+
const rows = Object.entries(keys).map(([name, value]) => ({
|
|
45
|
+
name,
|
|
46
|
+
redactedValue: redactKeyValue(value),
|
|
47
|
+
}));
|
|
48
|
+
const payload = {
|
|
49
|
+
count: rows.length,
|
|
50
|
+
keys: rows,
|
|
51
|
+
};
|
|
52
|
+
return JSON.stringify(payload);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=keys-list-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys-list-json.js","sourceRoot":"","sources":["../../src/commands/keys-list-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAuBH;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,GAAG,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmC;IACpE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,OAAO,GAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAuB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI;QACJ,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC;KACrC,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAiB;QAC5B,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,IAAI,EAAE,IAAI;KACX,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,0CAA0C;AAC1C,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgB5D;AA0BD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiFnD"}
|
package/dist/commands/keys.js
CHANGED
|
@@ -15,6 +15,7 @@ import * as os from 'node:os';
|
|
|
15
15
|
import * as path from 'node:path';
|
|
16
16
|
import YAML from 'yaml';
|
|
17
17
|
import { printError, printSuccess, printHeader, printInfo } from '../output.js';
|
|
18
|
+
import { renderKeysListJson } from './keys-list-json.js';
|
|
18
19
|
// ── File helpers ──────────────────────────────────────────────────
|
|
19
20
|
/** Honors OLAM_HOME for tests — mirrors olamHome() in host-cp.ts. */
|
|
20
21
|
function olamHome() {
|
|
@@ -82,6 +83,7 @@ export function registerKeys(program) {
|
|
|
82
83
|
.description('Manage LLM API keys stored at ~/.olam/keys.yaml')
|
|
83
84
|
.option('--set <KEY=VALUE>', 'Write or update a key (e.g. --set OPENAI=sk-proj-...)')
|
|
84
85
|
.option('--unset <KEY>', 'Remove a key')
|
|
86
|
+
.option('--json', 'Emit configured keys as machine-readable JSON (values redacted)', false)
|
|
85
87
|
.action((opts) => {
|
|
86
88
|
// olam keys path — print the file path
|
|
87
89
|
// (handled as subcommand below; this action handles the flag paths)
|
|
@@ -131,6 +133,10 @@ export function registerKeys(program) {
|
|
|
131
133
|
}
|
|
132
134
|
// Default: list keys with redacted values
|
|
133
135
|
const keys = readKeysFile();
|
|
136
|
+
if (opts.json) {
|
|
137
|
+
process.stdout.write(renderKeysListJson(keys) + '\n');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
134
140
|
printHeader('LLM API keys (~/.olam/keys.yaml)');
|
|
135
141
|
if (!keys) {
|
|
136
142
|
console.log(' No keys configured. Use olam keys --set KEY=VALUE to add one.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kg-classify.d.ts","sourceRoot":"","sources":["../../src/commands/kg-classify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"kg-classify.d.ts","sourceRoot":"","sources":["../../src/commands/kg-classify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBzC,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAiD3D"}
|
|
@@ -8,6 +8,14 @@
|
|
|
8
8
|
import pc from 'picocolors';
|
|
9
9
|
import { classify, KgServiceUnreachableError } from '@olam/core/src/kg/kg-service-client.js';
|
|
10
10
|
import { printError, printInfo } from '../output.js';
|
|
11
|
+
/** Compact token-count formatting (mirrors `kg savings`' `~`-prefix convention). */
|
|
12
|
+
function formatSavedTokens(n) {
|
|
13
|
+
if (n >= 1_000_000)
|
|
14
|
+
return `~${(n / 1_000_000).toFixed(1)}M`;
|
|
15
|
+
if (n >= 1_000)
|
|
16
|
+
return `~${Math.round(n / 1000)}k`;
|
|
17
|
+
return `~${n}`;
|
|
18
|
+
}
|
|
11
19
|
export function registerKgClassifyCommand(kg) {
|
|
12
20
|
kg.command('classify <question>')
|
|
13
21
|
.description('Route a question to kg | grep | both via the 4-layer classifier (kg-service required)')
|
|
@@ -36,6 +44,18 @@ export function registerKgClassifyCommand(kg) {
|
|
|
36
44
|
if (result.candidate_symbols.length > 0) {
|
|
37
45
|
printInfo('symbols', result.candidate_symbols.join(', '));
|
|
38
46
|
}
|
|
47
|
+
// Hit-signal metadata enriched by the server. `nodes_matched` is the
|
|
48
|
+
// count of distinct symbol/exemplar matches the route resolved to —
|
|
49
|
+
// the "matched signals" an operator wants to see at a glance. Only
|
|
50
|
+
// meaningful (and only emitted) when the route is not grep.
|
|
51
|
+
if (result.route !== 'grep') {
|
|
52
|
+
if (result.nodes_matched != null) {
|
|
53
|
+
printInfo('matched signals', String(result.nodes_matched));
|
|
54
|
+
}
|
|
55
|
+
if (result.savings && result.savings.saved_tokens_est > 0) {
|
|
56
|
+
printInfo('est. savings', `${formatSavedTokens(result.savings.saved_tokens_est)} tokens`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
39
59
|
}
|
|
40
60
|
catch (err) {
|
|
41
61
|
if (err instanceof KgServiceUnreachableError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kg-classify.js","sourceRoot":"","sources":["../../src/commands/kg-classify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAOrD,MAAM,UAAU,yBAAyB,CAAC,EAAW;IACnD,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,uFAAuF,CAAC;SACpG,MAAM,CAAC,oBAAoB,EAAE,uDAAuD,CAAC;SACrF,MAAM,CAAC,QAAQ,EAAE,gDAAgD,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,IAAuB,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,4BAA4B;YAC5B,MAAM,QAAQ,GACZ,MAAM,CAAC,KAAK,KAAK,IAAI;gBACnB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBACf,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM;oBACvB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;oBACpB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,SAAS,CAAC,OAAO,EAAE,GAAG,QAAQ,YAAY,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;YACrF,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACnD,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,UAAU;gBAAE,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,SAAS;gBAAE,SAAS,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,SAAU,SAAS,MAAM,CAAC,OAAO,IAAI,GAAG,GAAG,CAAC,CAAC;YACpG,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,yBAAyB,EAAE,CAAC;gBAC7C,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,UAAU,CAAC,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"kg-classify.js","sourceRoot":"","sources":["../../src/commands/kg-classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,76 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `olam kg doctor` — diagnostic table for the kg-service container.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* 1. Container state (running / stopped / missing)
|
|
6
|
-
* 2. /health responds with ready=true
|
|
7
|
-
* 3. /status lists at least one workspace (advisory; warn if empty)
|
|
8
|
-
* 4. /classify round-trip works end-to-end (synthetic probe)
|
|
4
|
+
* Probes (in order):
|
|
5
|
+
* 1. container — Container state (running / stopped / missing)
|
|
6
|
+
* 2. health — /health responds with ready=true (+ version + uptime)
|
|
7
|
+
* 3. workspaces — /status lists at least one workspace (advisory; warn if empty)
|
|
8
|
+
* 4. classify — /classify round-trip works end-to-end (synthetic probe)
|
|
9
|
+
* 5. savings — cumulative KG-hit tally (advisory; "is the hook firing?")
|
|
9
10
|
*
|
|
10
|
-
* Exit 0 on all-green; non-zero on first failure with remedy hint.
|
|
11
|
+
* Exit 0 on all-green; non-zero on the first hard failure with a remedy hint.
|
|
12
|
+
* Advisory warnings (empty workspaces, zero hits) never flip the exit code.
|
|
11
13
|
* --json emits a machine-readable structure for monitoring pipelines.
|
|
14
|
+
*
|
|
15
|
+
* The probe walk is a pure, injectable function (`runKgDoctor`) so it can be
|
|
16
|
+
* unit-tested without a live container — mirrors the `runKgStatus` /
|
|
17
|
+
* `runDoctor` testability pattern used elsewhere in the CLI.
|
|
12
18
|
*/
|
|
13
19
|
import type { Command } from 'commander';
|
|
20
|
+
import { type ClassifyResponse, type HealthResponse, type SavingsResponse, type StatusResponse } from '@olam/core/src/kg/kg-service-client.js';
|
|
21
|
+
interface KgDoctorOptions {
|
|
22
|
+
readonly json?: boolean;
|
|
23
|
+
}
|
|
24
|
+
interface ProbeResult {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly status: 'ok' | 'warn' | 'fail';
|
|
27
|
+
readonly detail?: string;
|
|
28
|
+
readonly remedy?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Minimal surface of `KgServiceContainerController` the probe walk needs.
|
|
32
|
+
* Declaring it as an interface lets tests inject a fake without spawning
|
|
33
|
+
* `docker inspect`.
|
|
34
|
+
*/
|
|
35
|
+
export interface KgDoctorContainerProbe {
|
|
36
|
+
status(): {
|
|
37
|
+
state: 'running' | 'stopped' | 'missing';
|
|
38
|
+
port: number;
|
|
39
|
+
};
|
|
40
|
+
imageMissingEverywhere(): boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Injectable dependencies for `runKgDoctor`. Defaults wire the real
|
|
44
|
+
* kg-service HTTP client + container controller; tests pass fakes.
|
|
45
|
+
*/
|
|
46
|
+
export interface KgDoctorDeps {
|
|
47
|
+
readonly controller?: KgDoctorContainerProbe;
|
|
48
|
+
readonly health?: (opts?: {
|
|
49
|
+
timeoutMs?: number;
|
|
50
|
+
}) => Promise<HealthResponse>;
|
|
51
|
+
readonly status?: (opts?: {
|
|
52
|
+
timeoutMs?: number;
|
|
53
|
+
}) => Promise<StatusResponse>;
|
|
54
|
+
readonly classify?: (req: {
|
|
55
|
+
q: string;
|
|
56
|
+
workspace?: string;
|
|
57
|
+
}, opts?: {
|
|
58
|
+
timeoutMs?: number;
|
|
59
|
+
}) => Promise<ClassifyResponse>;
|
|
60
|
+
readonly savings?: (opts?: {
|
|
61
|
+
timeoutMs?: number;
|
|
62
|
+
}) => Promise<SavingsResponse>;
|
|
63
|
+
}
|
|
64
|
+
export interface KgDoctorResult {
|
|
65
|
+
readonly exitCode: number;
|
|
66
|
+
readonly probes: ReadonlyArray<ProbeResult>;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Pure, injectable probe walk. Renders to the configured output when not in
|
|
70
|
+
* JSON mode and returns the structured result + exit code. Tests drive this
|
|
71
|
+
* directly with fake deps; the commander action is a thin wrapper.
|
|
72
|
+
*/
|
|
73
|
+
export declare function runKgDoctor(opts: KgDoctorOptions, deps?: KgDoctorDeps): Promise<KgDoctorResult>;
|
|
14
74
|
export declare function registerKgDoctorCommand(kg: Command): void;
|
|
75
|
+
export {};
|
|
15
76
|
//# sourceMappingURL=kg-doctor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kg-doctor.d.ts","sourceRoot":"","sources":["../../src/commands/kg-doctor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kg-doctor.d.ts","sourceRoot":"","sources":["../../src/commands/kg-doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,wCAAwC,CAAC;AAGhD,UAAU,eAAe;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,IAAI;QAAE,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,sBAAsB,IAAI,OAAO,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAClB,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EACtC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAC7C;AAoLD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,cAAc,CAAC,CAmCzB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAUzD"}
|