@pleri/olam-cli 0.1.180 → 0.1.182

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.
Files changed (110) hide show
  1. package/dist/commands/auth.d.ts.map +1 -1
  2. package/dist/commands/auth.js +67 -19
  3. package/dist/commands/auth.js.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +93 -0
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/destroy.d.ts +41 -0
  8. package/dist/commands/destroy.d.ts.map +1 -1
  9. package/dist/commands/destroy.js +81 -33
  10. package/dist/commands/destroy.js.map +1 -1
  11. package/dist/commands/dispatch-resolve.d.ts +54 -0
  12. package/dist/commands/dispatch-resolve.d.ts.map +1 -0
  13. package/dist/commands/dispatch-resolve.js +105 -0
  14. package/dist/commands/dispatch-resolve.js.map +1 -0
  15. package/dist/commands/dispatch.d.ts.map +1 -1
  16. package/dist/commands/dispatch.js +40 -9
  17. package/dist/commands/dispatch.js.map +1 -1
  18. package/dist/commands/flywheel/k5-validate.d.ts +31 -0
  19. package/dist/commands/flywheel/k5-validate.d.ts.map +1 -1
  20. package/dist/commands/flywheel/k5-validate.js +80 -19
  21. package/dist/commands/flywheel/k5-validate.js.map +1 -1
  22. package/dist/commands/kg-classify.d.ts.map +1 -1
  23. package/dist/commands/kg-classify.js +20 -0
  24. package/dist/commands/kg-classify.js.map +1 -1
  25. package/dist/commands/kg-doctor.d.ts +67 -6
  26. package/dist/commands/kg-doctor.d.ts.map +1 -1
  27. package/dist/commands/kg-doctor.js +126 -46
  28. package/dist/commands/kg-doctor.js.map +1 -1
  29. package/dist/commands/list.d.ts +27 -0
  30. package/dist/commands/list.d.ts.map +1 -1
  31. package/dist/commands/list.js +67 -19
  32. package/dist/commands/list.js.map +1 -1
  33. package/dist/commands/memory/status.d.ts +18 -0
  34. package/dist/commands/memory/status.d.ts.map +1 -1
  35. package/dist/commands/memory/status.js +38 -2
  36. package/dist/commands/memory/status.js.map +1 -1
  37. package/dist/commands/memory-service-container.d.ts +44 -0
  38. package/dist/commands/memory-service-container.d.ts.map +1 -1
  39. package/dist/commands/memory-service-container.js +49 -0
  40. package/dist/commands/memory-service-container.js.map +1 -1
  41. package/dist/commands/ps.d.ts +32 -0
  42. package/dist/commands/ps.d.ts.map +1 -1
  43. package/dist/commands/ps.js +34 -0
  44. package/dist/commands/ps.js.map +1 -1
  45. package/dist/commands/runbooks.d.ts +32 -0
  46. package/dist/commands/runbooks.d.ts.map +1 -1
  47. package/dist/commands/runbooks.js +79 -22
  48. package/dist/commands/runbooks.js.map +1 -1
  49. package/dist/commands/skills-source.d.ts.map +1 -1
  50. package/dist/commands/skills-source.js +77 -2
  51. package/dist/commands/skills-source.js.map +1 -1
  52. package/dist/commands/upgrade-history.d.ts +0 -2
  53. package/dist/commands/upgrade-history.d.ts.map +1 -1
  54. package/dist/commands/upgrade-history.js +0 -6
  55. package/dist/commands/upgrade-history.js.map +1 -1
  56. package/dist/commands/upgrade-lock.d.ts +0 -9
  57. package/dist/commands/upgrade-lock.d.ts.map +1 -1
  58. package/dist/commands/upgrade-lock.js +1 -1
  59. package/dist/commands/upgrade-lock.js.map +1 -1
  60. package/dist/commands/world-snapshot.d.ts +13 -0
  61. package/dist/commands/world-snapshot.d.ts.map +1 -1
  62. package/dist/commands/world-snapshot.js +81 -1
  63. package/dist/commands/world-snapshot.js.map +1 -1
  64. package/dist/commands/yolo.d.ts +0 -4
  65. package/dist/commands/yolo.d.ts.map +1 -1
  66. package/dist/commands/yolo.js +2 -2
  67. package/dist/commands/yolo.js.map +1 -1
  68. package/dist/image-digests.json +8 -8
  69. package/dist/index.js +3403 -2459
  70. package/dist/lib/anthropic-base-url-file.d.ts +37 -0
  71. package/dist/lib/anthropic-base-url-file.d.ts.map +1 -0
  72. package/dist/lib/anthropic-base-url-file.js +46 -0
  73. package/dist/lib/anthropic-base-url-file.js.map +1 -0
  74. package/dist/lib/auth-remote.d.ts +9 -0
  75. package/dist/lib/auth-remote.d.ts.map +1 -1
  76. package/dist/lib/auth-remote.js +19 -4
  77. package/dist/lib/auth-remote.js.map +1 -1
  78. package/dist/lib/cf-access-token.d.ts +32 -0
  79. package/dist/lib/cf-access-token.d.ts.map +1 -0
  80. package/dist/lib/cf-access-token.js +52 -0
  81. package/dist/lib/cf-access-token.js.map +1 -0
  82. package/dist/lib/config.d.ts +17 -3
  83. package/dist/lib/config.d.ts.map +1 -1
  84. package/dist/lib/config.js +28 -4
  85. package/dist/lib/config.js.map +1 -1
  86. package/dist/lib/kubectl-context.d.ts +49 -0
  87. package/dist/lib/kubectl-context.d.ts.map +1 -1
  88. package/dist/lib/kubectl-context.js +64 -2
  89. package/dist/lib/kubectl-context.js.map +1 -1
  90. package/dist/lib/upgrade-kubernetes.d.ts +7 -0
  91. package/dist/lib/upgrade-kubernetes.d.ts.map +1 -1
  92. package/dist/lib/upgrade-kubernetes.js +35 -8
  93. package/dist/lib/upgrade-kubernetes.js.map +1 -1
  94. package/dist/mcp-server.js +1457 -1004
  95. package/hermes-bundle/version.json +1 -1
  96. package/host-cp/k8s/manifests/45-pvc.yaml +6 -2
  97. package/host-cp/k8s/manifests/50-deployment.yaml +1 -1
  98. package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +1 -1
  99. package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +1 -1
  100. package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +1 -1
  101. package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +1 -1
  102. package/host-cp/observability/trace-summary.mjs +267 -0
  103. package/host-cp/src/bootstrap-selective.mjs +30 -28
  104. package/host-cp/src/host-stream.mjs +52 -0
  105. package/host-cp/src/redirect.mjs +7 -0
  106. package/host-cp/src/router.mjs +168 -0
  107. package/host-cp/src/serve-only-config.mjs +85 -0
  108. package/host-cp/src/server.mjs +346 -217
  109. package/host-cp/src/world-services.mjs +136 -0
  110. package/package.json +1 -1
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Pure resolution + validation helpers for `olam dispatch`.
3
+ *
4
+ * Extracted so the operator-facing ergonomics (resolve-by-name,
5
+ * "did you mean" suggestions, mode validation) can be unit-tested
6
+ * without the container/IO surface of the command action.
7
+ */
8
+ /** Minimal world shape these helpers need (subset of WorldMetadata). */
9
+ export interface DispatchWorldRef {
10
+ readonly id: string;
11
+ readonly name: string;
12
+ readonly status: string;
13
+ }
14
+ /** The execution modes `olam dispatch --mode` accepts. */
15
+ export declare const DISPATCH_MODES: readonly ["auto", "deep", "fast"];
16
+ export type DispatchMode = (typeof DISPATCH_MODES)[number];
17
+ /**
18
+ * Resolve a world by the user-supplied argument.
19
+ *
20
+ * Precedence (backward-compatible — exact ID still wins):
21
+ * 1. Exact ID match.
22
+ * 2. Exact name match (operators usually remember the name, not the id).
23
+ *
24
+ * Returns the matched world, or `undefined` when nothing matches.
25
+ * When two worlds share a name, the first registered wins — callers
26
+ * should fall back to the unambiguous ID, which is surfaced in the
27
+ * not-found suggestion list.
28
+ */
29
+ export declare function resolveWorld<T extends DispatchWorldRef>(worlds: readonly T[], arg: string): T | undefined;
30
+ /**
31
+ * Rank worlds by how likely the operator meant them, given a typo'd or
32
+ * partial argument. Used to build a "did you mean" hint on not-found.
33
+ *
34
+ * Matching signal (lower score = better):
35
+ * - substring match on id or name (case-insensitive) → strong signal
36
+ * - small edit distance to id or name → typo signal
37
+ *
38
+ * Returns at most `limit` candidates, best first. Worlds with no
39
+ * plausible relationship to the argument are dropped, so an empty
40
+ * result is meaningful ("nothing close").
41
+ */
42
+ export declare function suggestWorlds<T extends DispatchWorldRef>(worlds: readonly T[], arg: string, limit?: number): T[];
43
+ /**
44
+ * Validate a `--mode` value. Returns the canonical mode on success, or
45
+ * an `error` describing the valid set on failure. Unknown modes used to
46
+ * silently fall through to non-deep behaviour; surfacing them prevents
47
+ * a typo (`--mode dep`) from quietly running the wrong execution shape.
48
+ */
49
+ export declare function validateMode(raw: string): {
50
+ mode: DispatchMode;
51
+ } | {
52
+ error: string;
53
+ };
54
+ //# sourceMappingURL=dispatch-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-resolve.d.ts","sourceRoot":"","sources":["../../src/commands/dispatch-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,0DAA0D;AAC1D,eAAO,MAAM,cAAc,mCAAoC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,gBAAgB,EACrD,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,GAAG,EAAE,MAAM,GACV,CAAC,GAAG,SAAS,CAIf;AAgCD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,gBAAgB,EACtD,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,SAAI,GACR,CAAC,EAAE,CAoBL;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,GACV;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAQ5C"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Pure resolution + validation helpers for `olam dispatch`.
3
+ *
4
+ * Extracted so the operator-facing ergonomics (resolve-by-name,
5
+ * "did you mean" suggestions, mode validation) can be unit-tested
6
+ * without the container/IO surface of the command action.
7
+ */
8
+ /** The execution modes `olam dispatch --mode` accepts. */
9
+ export const DISPATCH_MODES = ['auto', 'deep', 'fast'];
10
+ /**
11
+ * Resolve a world by the user-supplied argument.
12
+ *
13
+ * Precedence (backward-compatible — exact ID still wins):
14
+ * 1. Exact ID match.
15
+ * 2. Exact name match (operators usually remember the name, not the id).
16
+ *
17
+ * Returns the matched world, or `undefined` when nothing matches.
18
+ * When two worlds share a name, the first registered wins — callers
19
+ * should fall back to the unambiguous ID, which is surfaced in the
20
+ * not-found suggestion list.
21
+ */
22
+ export function resolveWorld(worlds, arg) {
23
+ const byId = worlds.find((w) => w.id === arg);
24
+ if (byId)
25
+ return byId;
26
+ return worlds.find((w) => w.name === arg);
27
+ }
28
+ /**
29
+ * Case-insensitive Levenshtein distance, capped — we only care about
30
+ * "close enough to be a typo", not the exact edit count.
31
+ */
32
+ function editDistance(a, b) {
33
+ const s = a.toLowerCase();
34
+ const t = b.toLowerCase();
35
+ if (s === t)
36
+ return 0;
37
+ const m = s.length;
38
+ const n = t.length;
39
+ if (m === 0)
40
+ return n;
41
+ if (n === 0)
42
+ return m;
43
+ // Single-row DP. `row[j]` holds the distance for the previous source
44
+ // prefix; `prevDiag` carries the diagonal value across the inner loop.
45
+ const row = Array.from({ length: n + 1 }, (_, i) => i);
46
+ for (let i = 1; i <= m; i += 1) {
47
+ let prevDiag = row[0]; // row[0] before overwrite = D[i-1][0]
48
+ row[0] = i;
49
+ for (let j = 1; j <= n; j += 1) {
50
+ const cost = s.charCodeAt(i - 1) === t.charCodeAt(j - 1) ? 0 : 1;
51
+ const above = row[j]; // D[i-1][j]
52
+ const left = row[j - 1]; // D[i][j-1]
53
+ row[j] = Math.min(left + 1, above + 1, prevDiag + cost);
54
+ prevDiag = above;
55
+ }
56
+ }
57
+ return row[n];
58
+ }
59
+ /**
60
+ * Rank worlds by how likely the operator meant them, given a typo'd or
61
+ * partial argument. Used to build a "did you mean" hint on not-found.
62
+ *
63
+ * Matching signal (lower score = better):
64
+ * - substring match on id or name (case-insensitive) → strong signal
65
+ * - small edit distance to id or name → typo signal
66
+ *
67
+ * Returns at most `limit` candidates, best first. Worlds with no
68
+ * plausible relationship to the argument are dropped, so an empty
69
+ * result is meaningful ("nothing close").
70
+ */
71
+ export function suggestWorlds(worlds, arg, limit = 3) {
72
+ const needle = arg.toLowerCase();
73
+ // Typos within ~40% of the token length are plausible; clamp to >=2 so
74
+ // short ids/names still tolerate a one-char slip.
75
+ const threshold = Math.max(2, Math.ceil(needle.length * 0.4));
76
+ const scored = worlds
77
+ .map((w) => {
78
+ const id = w.id.toLowerCase();
79
+ const name = w.name.toLowerCase();
80
+ const substring = id.includes(needle) || name.includes(needle);
81
+ const dist = Math.min(editDistance(arg, w.id), editDistance(arg, w.name));
82
+ // Substring matches sort ahead of pure edit-distance matches.
83
+ const score = substring ? -1000 + dist : dist;
84
+ return { world: w, score, plausible: substring || dist <= threshold };
85
+ })
86
+ .filter((c) => c.plausible)
87
+ .sort((a, b) => a.score - b.score);
88
+ return scored.slice(0, limit).map((c) => c.world);
89
+ }
90
+ /**
91
+ * Validate a `--mode` value. Returns the canonical mode on success, or
92
+ * an `error` describing the valid set on failure. Unknown modes used to
93
+ * silently fall through to non-deep behaviour; surfacing them prevents
94
+ * a typo (`--mode dep`) from quietly running the wrong execution shape.
95
+ */
96
+ export function validateMode(raw) {
97
+ const normalized = raw.trim().toLowerCase();
98
+ if (DISPATCH_MODES.includes(normalized)) {
99
+ return { mode: normalized };
100
+ }
101
+ return {
102
+ error: `Invalid --mode "${raw}". Valid modes: ${DISPATCH_MODES.join(', ')}.`,
103
+ };
104
+ }
105
+ //# sourceMappingURL=dispatch-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-resolve.js","sourceRoot":"","sources":["../../src/commands/dispatch-resolve.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgHvD"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8IvD"}
@@ -9,34 +9,65 @@ import pc from 'picocolors';
9
9
  import { loadContext } from '../context.js';
10
10
  import { printError, printInfo, printHeader } from '../output.js';
11
11
  import { DEEP_MODE_SUFFIX, COMPLEX_PROMPT_RE } from '@olam/core/src/orchestrator/dispatch.js';
12
+ import { resolveWorld, suggestWorlds, validateMode, DISPATCH_MODES } from './dispatch-resolve.js';
12
13
  export function registerDispatch(program) {
13
14
  program
14
15
  .command('dispatch')
15
16
  .description('Send a prompt to a world for execution')
16
- .argument('<world>', 'World ID')
17
+ .argument('<world>', 'World ID or name')
17
18
  .argument('<prompt>', 'Task prompt')
18
- .option('--mode <mode>', 'Execution mode: deep, fast, auto', 'auto')
19
+ .option('--mode <mode>', `Execution mode: ${DISPATCH_MODES.join(', ')}`, 'auto')
19
20
  .option('--max-turns <n>', 'Maximum turns', parseInt)
20
- .action(async (worldId, prompt, opts) => {
21
+ .action(async (world, prompt, opts) => {
22
+ // Validate --mode up front: a typo (`--mode dep`) used to fall
23
+ // through to non-deep behaviour silently. Fail loud instead.
24
+ const modeResult = validateMode(opts.mode);
25
+ if ('error' in modeResult) {
26
+ printError(modeResult.error);
27
+ process.exitCode = 1;
28
+ return;
29
+ }
30
+ const mode = modeResult.mode;
21
31
  const { ctx, error } = await loadContext();
22
32
  if (!ctx) {
23
33
  printError(error?.message ?? 'Olam is not configured. Run `olam init` first.');
24
34
  process.exitCode = 1;
25
35
  return;
26
36
  }
27
- const worldMeta = ctx.worldManager.getWorld(worldId);
37
+ const worlds = ctx.worldManager.listWorlds();
38
+ // Accept either a world ID (existing contract) or a name — operators
39
+ // usually remember the name, not the generated id.
40
+ const worldMeta = resolveWorld(worlds, world);
28
41
  if (!worldMeta) {
29
- printError(`World "${worldId}" not found. Run \`olam list\` to see worlds.`);
42
+ printError(`World "${world}" not found.`);
43
+ const suggestions = suggestWorlds(worlds, world);
44
+ if (suggestions.length > 0) {
45
+ console.error(pc.dim('\n Did you mean:'));
46
+ for (const s of suggestions) {
47
+ console.error(` ${pc.bold(s.name)} ${pc.dim(`(${s.id})`)} ${pc.dim(s.status)}`);
48
+ }
49
+ }
50
+ console.error(pc.dim('\n Run `olam list` to see all worlds.'));
30
51
  process.exitCode = 1;
31
52
  return;
32
53
  }
54
+ const worldId = worldMeta.id;
33
55
  // D3: warn-not-block version pin check (once per world per session).
34
56
  {
35
57
  const { checkVersionPin } = await import('@olam/core/src/world/version-pin.js');
36
58
  checkVersionPin(worldId, worldMeta.workspacePath);
37
59
  }
38
60
  if (worldMeta.status !== 'running') {
39
- printError(`World "${worldId}" is ${worldMeta.status}. Only running worlds accept dispatches.`);
61
+ printError(`World "${worldMeta.name}" (${worldId}) is ${worldMeta.status}. Only running worlds accept dispatches.`);
62
+ if (worldMeta.status === 'paused') {
63
+ console.error(pc.dim(`\n Resume it first: olam resume ${worldId}`));
64
+ }
65
+ else if (worldMeta.status === 'destroyed') {
66
+ console.error(pc.dim('\n This world was destroyed. Create a fresh one with `olam create`.'));
67
+ }
68
+ else {
69
+ console.error(pc.dim(`\n Check what it's doing: olam status ${worldId}`));
70
+ }
40
71
  process.exitCode = 1;
41
72
  return;
42
73
  }
@@ -53,10 +84,10 @@ export function registerDispatch(program) {
53
84
  await computeWorld.exec('curl -s -X POST http://localhost:8080/api/claude/start');
54
85
  // Enhance prompt based on mode (shared regex with MCP server)
55
86
  let finalPrompt = prompt;
56
- if (opts.mode === 'deep') {
87
+ if (mode === 'deep') {
57
88
  finalPrompt += DEEP_MODE_SUFFIX;
58
89
  }
59
- else if (opts.mode === 'auto') {
90
+ else if (mode === 'auto') {
60
91
  const isComplex = prompt.length > 100 ||
61
92
  COMPLEX_PROMPT_RE.test(prompt);
62
93
  if (isComplex) {
@@ -83,7 +114,7 @@ export function registerDispatch(program) {
83
114
  const terminalPort = 17681 + worldMeta.portOffset;
84
115
  printHeader('Dispatch');
85
116
  printInfo('World', `${worldMeta.name} (${worldId})`);
86
- printInfo('Mode', opts.mode);
117
+ printInfo('Mode', mode);
87
118
  printInfo('Dashboard', `http://localhost:${dashboardPort}`);
88
119
  printInfo('Terminal', `http://localhost:${terminalPort}`);
89
120
  const containerName = `olam-${worldId}-devbox`;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE9F,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,wCAAwC,CAAC;SACrD,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;SAC/B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;SACnC,MAAM,CAAC,eAAe,EAAE,kCAAkC,EAAE,MAAM,CAAC;SACnE,MAAM,CAAC,iBAAiB,EAAE,eAAe,EAAE,QAAQ,CAAC;SACpD,MAAM,CAAC,KAAK,EACX,OAAe,EACf,MAAc,EACd,IAAyC,EACzC,EAAE;QACF,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,UAAU,CAAC,KAAK,EAAE,OAAO,IAAI,gDAAgD,CAAC,CAAC;YAC/E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,UAAU,OAAO,+CAA+C,CAAC,CAAC;YAC7E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,CAAC;YAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC;YAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAAC,CAAC;QAEvI,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,UAAU,CAAC,UAAU,OAAO,QAAQ,SAAS,CAAC,MAAM,0CAA0C,CAAC,CAAC;YAChG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACxC,UAAU,CAAC,+CAA+C,CAAC,CAAC;gBAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,iCAAiC;YACjC,MAAM,YAAY,CAAC,IAAI,CACrB,wDAAwD,CACzD,CAAC;YAEF,8DAA8D;YAC9D,IAAI,WAAW,GAAG,MAAM,CAAC;YAEzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,WAAW,IAAI,gBAAgB,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG;oBACnC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,SAAS,EAAE,CAAC;oBACd,WAAW,IAAI,gBAAgB,CAAC;gBAClC,CAAC;YACH,CAAC;YAED,6DAA6D;YAC7D,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;YAC3D,MAAM,YAAY,CAAC,IAAI,CACrB,SAAS,iBAAiB,mBAAmB,IAAI,CAAC,SAAS,CAAC;gBAC1D,SAAS,EAAE,YAAY;gBACvB,UAAU,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;gBACnC,eAAe,EAAE,QAAQ;aAC1B,CAAC,YAAY,CACf,CAAC;YACF,MAAM,YAAY,CAAC,IAAI,CACrB,2DAA2D,iBAAiB,sCAAsC,CACnH,CAAC;YAEF,qDAAqD;YACrD,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;YACtD,MAAM,YAAY,CAAC,IAAI,CACrB,SAAS,mBAAmB,mBAAmB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,YAAY,CACnG,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CACpC,2DAA2D,mBAAmB,iCAAiC,CAChH,CAAC;YAEF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,sBAAsB,CAAC,CAAC;YAC3D,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAEjC,MAAM,aAAa,GAAG,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC;YACnD,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC;YAElD,WAAW,CAAC,UAAU,CAAC,CAAC;YACxB,SAAS,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;YACrD,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,SAAS,CAAC,WAAW,EAAE,oBAAoB,aAAa,EAAE,CAAC,CAAC;YAC5D,SAAS,CAAC,UAAU,EAAE,oBAAoB,YAAY,EAAE,CAAC,CAAC;YAE1D,MAAM,aAAa,GAAG,QAAQ,OAAO,SAAS,CAAC;YAC/C,OAAO,CAAC,GAAG,CACT,KAAK,EAAE,CAAC,GAAG,CAAC,+BAA+B,aAAa,gCAAgC,CAAC,EAAE,CAC5F,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAChC,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"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"}
@@ -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;AAkKzC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAoBhE"}
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
- return { ok: false, message: `FAIL cannot stat ${path}: ${err instanceof Error ? err.message : 'unknown'}` };
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
- return { ok: false, message: `FAIL ${path}: plan file exceeds 1MB (${stat.size} bytes); refusing to parse` };
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
- return { ok: false, message: `FAIL cannot read ${path}: ${err instanceof Error ? err.message : 'unknown'}` };
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
- return { ok: false, message: `FAIL ${path}: no YAML frontmatter (missing opening --- marker)` };
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
- return { ok: false, message: `FAIL ${path}: frontmatter block never closed (missing closing --- marker)` };
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
- return { ok: false, message: `FAIL ${path}: frontmatter could not be parsed as YAML` };
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 { ok: true, message: `PASS ${path}: k5_scores absent (acceptable — legacy plan)` };
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 { ok: false, message: `FAIL ${path}: ${errors.join('; ')}` };
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
- lines.push(` min(k5_scores): ${Math.min(...vals)}`);
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
- if (hasScoredAt)
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
- .action((planPath) => {
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 (result.ok) {
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
- process.stderr.write(`FAIL ${planPath}: unexpected error: ${err instanceof Error ? err.message : 'unknown'}\n`);
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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"}
@@ -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;AAUzC,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAqC3D"}
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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"}