@pleri/olam-cli 0.1.160 → 0.1.162

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 (59) hide show
  1. package/README.md +11 -0
  2. package/dist/agent-stream/agent-sdk-to-chunks.js +20 -2
  3. package/dist/commands/bootstrap.d.ts +15 -0
  4. package/dist/commands/bootstrap.d.ts.map +1 -1
  5. package/dist/commands/bootstrap.js +58 -5
  6. package/dist/commands/bootstrap.js.map +1 -1
  7. package/dist/commands/flywheel/migrate-overlays.d.ts +1 -0
  8. package/dist/commands/flywheel/migrate-overlays.d.ts.map +1 -1
  9. package/dist/commands/flywheel/migrate-overlays.js +29 -3
  10. package/dist/commands/flywheel/migrate-overlays.js.map +1 -1
  11. package/dist/commands/skills-source.d.ts.map +1 -1
  12. package/dist/commands/skills-source.js +57 -2
  13. package/dist/commands/skills-source.js.map +1 -1
  14. package/dist/commands/skills.d.ts.map +1 -1
  15. package/dist/commands/skills.js +14 -0
  16. package/dist/commands/skills.js.map +1 -1
  17. package/dist/image-digests.json +7 -7
  18. package/dist/index.js +2424 -1781
  19. package/dist/lib/bootstrap-kubernetes.d.ts +42 -0
  20. package/dist/lib/bootstrap-kubernetes.d.ts.map +1 -0
  21. package/dist/lib/bootstrap-kubernetes.js +367 -0
  22. package/dist/lib/bootstrap-kubernetes.js.map +1 -0
  23. package/dist/lib/config.d.ts.map +1 -1
  24. package/dist/lib/config.js +6 -1
  25. package/dist/lib/config.js.map +1 -1
  26. package/dist/mcp-server.js +568 -368
  27. package/hermes-bundle/version.json +1 -1
  28. package/host-cp/k8s/manifests/50-deployment.yaml +1 -1
  29. package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +1 -1
  30. package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +1 -1
  31. package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +1 -1
  32. package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +1 -1
  33. package/host-cp/observability/grafana-port-forward.sh +283 -0
  34. package/host-cp/observability/kyverno-cardinality-mutate.sh +462 -0
  35. package/host-cp/observability/loki-ingest.sh +253 -0
  36. package/host-cp/observability/prom-no-double-grafana.sh +311 -0
  37. package/host-cp/peripheral-services/helm-values/grafana-values.yaml +159 -0
  38. package/host-cp/peripheral-services/helm-values/kube-prom-stack-values.yaml +229 -0
  39. package/host-cp/peripheral-services/helm-values/kyverno-values.yaml +85 -0
  40. package/host-cp/peripheral-services/helm-values/loki-values.yaml +166 -0
  41. package/host-cp/peripheral-services/helm-values/promtail-staging.yaml +92 -0
  42. package/host-cp/peripheral-services/helm-values/promtail-values.yaml +102 -0
  43. package/host-cp/peripheral-services/helm-values/traefik-values.yaml +73 -0
  44. package/host-cp/peripheral-services/manifests/20-namespace.yaml +6 -0
  45. package/host-cp/peripheral-services/manifests/24-deploy-kg-service.yaml +245 -0
  46. package/host-cp/peripheral-services/manifests/30-traefik-ingressroute-host-cp.yaml +22 -0
  47. package/host-cp/peripheral-services/manifests/40-traefik-ingressroute-kg.yaml +29 -0
  48. package/host-cp/peripheral-services/manifests/50-traefik-ingressroute-agent-memory.yaml +29 -0
  49. package/host-cp/peripheral-services/manifests/60-networkpolicy-ingress.yaml +80 -0
  50. package/host-cp/peripheral-services/manifests/65-networkpolicy-loki-prom-deny.yaml +67 -0
  51. package/host-cp/peripheral-services/manifests/80-grafana-dashboard-configmap.yaml +1349 -0
  52. package/host-cp/peripheral-services/manifests/90-prom-alert-cardinality.yaml +50 -0
  53. package/host-cp/peripheral-services/manifests/91-servicemonitor-host-cp.yaml +70 -0
  54. package/host-cp/peripheral-services/manifests/92-servicemonitor-kg-service.yaml +70 -0
  55. package/host-cp/peripheral-services/manifests/93-servicemonitor-memory-service.yaml +87 -0
  56. package/host-cp/peripheral-services/manifests/95-prom-recording-rules.yaml +108 -0
  57. package/host-cp/peripheral-services/manifests/96-kyverno-cardinality-mutate.yaml +195 -0
  58. package/host-cp/src/plan-chat-service.mjs +147 -1
  59. package/package.json +1 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * bootstrap-kubernetes.ts — k3s mode of `olam bootstrap`.
3
+ *
4
+ * Wraps the legacy `scripts/dogfood/up.sh` reference flow into a CLI
5
+ * routine so external operators with only the published `@pleri/olam-cli`
6
+ * tarball (no access to the private `pleri/olam` repo) can bring up an
7
+ * end-to-end olam-on-k3s stack with one command.
8
+ *
9
+ * Steps (idempotent):
10
+ * 0. Preflight — detect required tools (k3d, kubectl, helm, jq, curl,
11
+ * openssl, gh, docker). With --auto-install on macOS, run `brew
12
+ * install` for missing brew-formulae.
13
+ * 1. Secrets — generate `~/.olam/{auth-secret,kg-bearer-token,
14
+ * auth-db-secret,mcp-auth-jwt-secret,memory-bearer-secret}` if absent.
15
+ * 2. Colima (macOS only) — ensure running; chmod /var/run/docker.sock
16
+ * inside the VM (virtiofs mitigation).
17
+ * 3. k3d cluster — create `<cluster>` with the gh-config bind. Skipped
18
+ * if cluster already exists.
19
+ * 4. Observability — chain bundled scripts in `<install>/host-cp/
20
+ * observability/` to install Loki + Promtail + Grafana +
21
+ * kube-prometheus-stack + Kyverno admission policy.
22
+ * 5. Delegate to `olam upgrade -y` — that flow handles namespace + RBAC
23
+ * + secrets + ghcr-pull + host-side docker-socket-proxy +
24
+ * manifest apply + rollout + verify.
25
+ *
26
+ * Note: `olam upgrade` already ships the 8-step k8s flow in
27
+ * `upgrade-kubernetes.ts` (Phase 1b C2 + Phase 2 C/D). This module is
28
+ * the prereq + cluster-create + observability wrapper around it.
29
+ */
30
+ export declare const DEFAULT_K3S_CLUSTER = "olam-host";
31
+ export interface BootstrapKubernetesOptions {
32
+ readonly cluster: string;
33
+ readonly autoInstall: boolean;
34
+ readonly skipObservability: boolean;
35
+ readonly skipClusterCreate: boolean;
36
+ }
37
+ export interface BootstrapKubernetesResult {
38
+ readonly exitCode: number;
39
+ readonly summary: string;
40
+ }
41
+ export declare function runBootstrapKubernetes(rawOpts: Partial<BootstrapKubernetesOptions>): Promise<BootstrapKubernetesResult>;
42
+ //# sourceMappingURL=bootstrap-kubernetes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-kubernetes.d.ts","sourceRoot":"","sources":["../../src/lib/bootstrap-kubernetes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAcH,eAAO,MAAM,mBAAmB,cAAc,CAAC;AA4B/C,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAkTD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAC3C,OAAO,CAAC,yBAAyB,CAAC,CA6BpC"}
@@ -0,0 +1,367 @@
1
+ /**
2
+ * bootstrap-kubernetes.ts — k3s mode of `olam bootstrap`.
3
+ *
4
+ * Wraps the legacy `scripts/dogfood/up.sh` reference flow into a CLI
5
+ * routine so external operators with only the published `@pleri/olam-cli`
6
+ * tarball (no access to the private `pleri/olam` repo) can bring up an
7
+ * end-to-end olam-on-k3s stack with one command.
8
+ *
9
+ * Steps (idempotent):
10
+ * 0. Preflight — detect required tools (k3d, kubectl, helm, jq, curl,
11
+ * openssl, gh, docker). With --auto-install on macOS, run `brew
12
+ * install` for missing brew-formulae.
13
+ * 1. Secrets — generate `~/.olam/{auth-secret,kg-bearer-token,
14
+ * auth-db-secret,mcp-auth-jwt-secret,memory-bearer-secret}` if absent.
15
+ * 2. Colima (macOS only) — ensure running; chmod /var/run/docker.sock
16
+ * inside the VM (virtiofs mitigation).
17
+ * 3. k3d cluster — create `<cluster>` with the gh-config bind. Skipped
18
+ * if cluster already exists.
19
+ * 4. Observability — chain bundled scripts in `<install>/host-cp/
20
+ * observability/` to install Loki + Promtail + Grafana +
21
+ * kube-prometheus-stack + Kyverno admission policy.
22
+ * 5. Delegate to `olam upgrade -y` — that flow handles namespace + RBAC
23
+ * + secrets + ghcr-pull + host-side docker-socket-proxy +
24
+ * manifest apply + rollout + verify.
25
+ *
26
+ * Note: `olam upgrade` already ships the 8-step k8s flow in
27
+ * `upgrade-kubernetes.ts` (Phase 1b C2 + Phase 2 C/D). This module is
28
+ * the prereq + cluster-create + observability wrapper around it.
29
+ */
30
+ import { spawnSync } from 'node:child_process';
31
+ import { existsSync, mkdirSync, writeFileSync, chmodSync } from 'node:fs';
32
+ import { join } from 'node:path';
33
+ import { homedir, platform } from 'node:os';
34
+ import { randomBytes } from 'node:crypto';
35
+ import pc from 'picocolors';
36
+ import { printError, printSuccess, printInfo, printWarning, printHeader } from '../output.js';
37
+ import { installRoot } from '../install-root.js';
38
+ import { resolveK8sAssetsRoot } from './k8s-bootstrap.js';
39
+ const OLAM_HOME = join(homedir(), '.olam');
40
+ export const DEFAULT_K3S_CLUSTER = 'olam-host';
41
+ const REQUIRED_TOOLS = [
42
+ { name: 'k3d', brew: 'k3d' },
43
+ { name: 'kubectl', brew: 'kubectl' },
44
+ { name: 'helm', brew: 'helm' },
45
+ { name: 'jq', brew: 'jq' },
46
+ { name: 'curl', hint: 'expected on macOS by default; `apt install curl` on linux' },
47
+ { name: 'openssl', hint: 'expected on macOS by default; `apt install openssl` on linux' },
48
+ { name: 'gh', brew: 'gh', hint: 'after install: `gh auth login`' },
49
+ { name: 'docker', hint: 'Docker Desktop, or colima on macOS' },
50
+ ];
51
+ const SECRET_FILES = [
52
+ 'auth-secret',
53
+ 'kg-bearer-token',
54
+ 'auth-db-secret',
55
+ 'mcp-auth-jwt-secret',
56
+ 'memory-bearer-secret',
57
+ ];
58
+ const OBSERVABILITY_SCRIPTS = [
59
+ 'loki-ingest.sh',
60
+ 'grafana-port-forward.sh',
61
+ 'prom-no-double-grafana.sh',
62
+ 'kyverno-cardinality-mutate.sh',
63
+ ];
64
+ /** Wraps `command -v <tool>` returning true when the binary is on PATH. */
65
+ function hasTool(tool) {
66
+ const result = spawnSync('command', ['-v', tool], { shell: true, stdio: 'pipe' });
67
+ return result.status === 0;
68
+ }
69
+ function detectMissingTools() {
70
+ return REQUIRED_TOOLS.filter((tool) => !hasTool(tool.name));
71
+ }
72
+ function runOrFail(cmd, args, description) {
73
+ const result = spawnSync(cmd, args, { stdio: 'inherit' });
74
+ if (result.status !== 0) {
75
+ printError(`${description} failed (exit ${result.status ?? 'signal'})`);
76
+ process.exit(result.status ?? 1);
77
+ }
78
+ }
79
+ function runCapture(cmd, args) {
80
+ const result = spawnSync(cmd, args, { encoding: 'utf8' });
81
+ return {
82
+ ok: result.status === 0,
83
+ stdout: result.stdout ?? '',
84
+ stderr: result.stderr ?? '',
85
+ };
86
+ }
87
+ function step(label) {
88
+ process.stdout.write('\n' + pc.bold(pc.cyan(`==> ${label}`)) + '\n');
89
+ }
90
+ function preflight(opts) {
91
+ step('0/6 — preflight (tool detection)');
92
+ const missing = detectMissingTools();
93
+ if (missing.length === 0) {
94
+ printSuccess('all required tools present');
95
+ }
96
+ else if (opts.autoInstall && platform() === 'darwin') {
97
+ const brewable = missing.filter((t) => t.brew);
98
+ if (brewable.length > 0) {
99
+ printInfo('auto-install', `${brewable.length} brew formula(s): ${brewable.map((t) => t.brew).join(', ')}`);
100
+ runOrFail('brew', ['install', ...brewable.map((t) => t.brew)], 'brew install');
101
+ }
102
+ const stillMissing = detectMissingTools();
103
+ if (stillMissing.length > 0) {
104
+ printError('tools still missing after auto-install:');
105
+ for (const t of stillMissing) {
106
+ process.stderr.write(` - ${t.name}${t.hint ? ` — ${t.hint}` : ''}\n`);
107
+ }
108
+ process.exit(1);
109
+ }
110
+ printSuccess('all required tools present after auto-install');
111
+ }
112
+ else {
113
+ printError(`${missing.length} required tool(s) missing:`);
114
+ for (const t of missing) {
115
+ const hint = t.brew ? `brew install ${t.brew}` : t.hint ?? '(install manually)';
116
+ process.stderr.write(` - ${pc.bold(t.name)}: ${hint}\n`);
117
+ }
118
+ process.stderr.write('\nRe-run with --auto-install on macOS to install brew-formulae automatically.\n');
119
+ process.exit(1);
120
+ }
121
+ // gh auth
122
+ if (!runCapture('gh', ['auth', 'status']).ok) {
123
+ printError('gh is not authenticated — run: gh auth login');
124
+ process.exit(1);
125
+ }
126
+ printSuccess('gh authenticated');
127
+ // docker reachability
128
+ if (!runCapture('docker', ['info']).ok) {
129
+ printError('docker daemon unreachable — start Docker Desktop or colima');
130
+ process.exit(1);
131
+ }
132
+ printSuccess('docker daemon reachable');
133
+ }
134
+ function ensureSecrets() {
135
+ step('1/6 — operator secrets');
136
+ mkdirSync(OLAM_HOME, { recursive: true });
137
+ for (const name of SECRET_FILES) {
138
+ const path = join(OLAM_HOME, name);
139
+ if (existsSync(path)) {
140
+ printInfo('skip', `~/.olam/${name} already exists`);
141
+ continue;
142
+ }
143
+ const hex = randomBytes(32).toString('hex');
144
+ writeFileSync(path, hex + '\n', { encoding: 'utf8', mode: 0o600 });
145
+ chmodSync(path, 0o600);
146
+ printSuccess(`generated ~/.olam/${name}`);
147
+ }
148
+ }
149
+ function ensureColima() {
150
+ if (platform() !== 'darwin')
151
+ return;
152
+ step('2/6 — colima (macOS)');
153
+ if (!runCapture('colima', ['status']).ok) {
154
+ printWarning('colima not running — starting');
155
+ runOrFail('colima', ['start', '--cpu', '4', '--memory', '8', '--vm-type=vz', '--mount-type=virtiofs'], 'colima start');
156
+ }
157
+ printSuccess('colima running');
158
+ // virtiofs blocks chmod of docker.sock from the macOS side. Idempotent + non-fatal.
159
+ const chmod = runCapture('colima', ['ssh', '--', 'sudo', 'chmod', '666', '/var/run/docker.sock']);
160
+ if (chmod.ok) {
161
+ printSuccess('docker.sock chmod applied inside colima VM');
162
+ }
163
+ else {
164
+ printWarning('colima ssh chmod failed — k3d cluster create may still succeed');
165
+ }
166
+ }
167
+ function ensureCluster(opts) {
168
+ if (opts.skipClusterCreate) {
169
+ step('3/6 — cluster (skipped via --skip-cluster-create)');
170
+ return;
171
+ }
172
+ step(`3/6 — k3d cluster create (${opts.cluster})`);
173
+ if (runCapture('k3d', ['cluster', 'list', opts.cluster]).ok) {
174
+ printInfo('cluster', `'${opts.cluster}' already exists`);
175
+ return;
176
+ }
177
+ const ghConfigBind = `${homedir()}/.config/gh:/host/.config/gh`;
178
+ runOrFail('k3d', ['cluster', 'create', opts.cluster, '--volume', ghConfigBind, '--wait', '--timeout', '90s'], `k3d cluster create ${opts.cluster}`);
179
+ if (!runCapture('kubectl', ['cluster-info']).ok) {
180
+ printError('kubectl cannot reach the cluster — check kubeconfig context');
181
+ process.exit(1);
182
+ }
183
+ printSuccess(`cluster ready (${runCapture('kubectl', ['config', 'current-context']).stdout.trim()})`);
184
+ }
185
+ /** Resolve the bundled observability scripts dir. */
186
+ function resolveObservabilityScriptsDir() {
187
+ // Install-mode: bundle-host-cp.mjs copies scripts/e2e/*.sh to
188
+ // <install-root>/host-cp/observability/.
189
+ const installed = join(installRoot(), 'host-cp', 'observability');
190
+ if (existsSync(installed))
191
+ return installed;
192
+ // Dev-mode fallback: resolve via the k8s assets root + walk up to repo
193
+ // root then into scripts/e2e/. Works when running against the monorepo.
194
+ const k8sRoot = resolveK8sAssetsRoot();
195
+ if (k8sRoot) {
196
+ const dev = join(k8sRoot, '..', '..', '..', 'scripts', 'e2e');
197
+ if (existsSync(dev))
198
+ return dev;
199
+ }
200
+ return null;
201
+ }
202
+ /**
203
+ * Resolve the bundled peripheral-services dir (helm-values + manifests).
204
+ * Returns null when neither install-mode nor dev-mode layout matches.
205
+ */
206
+ function resolvePeripheralServicesDir() {
207
+ // Install-mode: bundle-host-cp.mjs copies packages/peripheral-services/
208
+ // {helm-values,manifests} to <install-root>/host-cp/peripheral-services/.
209
+ const installed = join(installRoot(), 'host-cp', 'peripheral-services');
210
+ if (existsSync(installed))
211
+ return installed;
212
+ // Dev-mode fallback: walk up from k8s assets root to packages/peripheral-services.
213
+ const k8sRoot = resolveK8sAssetsRoot();
214
+ if (k8sRoot) {
215
+ const dev = join(k8sRoot, '..', '..', 'peripheral-services');
216
+ if (existsSync(dev))
217
+ return dev;
218
+ }
219
+ return null;
220
+ }
221
+ /**
222
+ * Resolve OLAM_BUNDLE_ROOT — the dir the observability scripts read to find
223
+ * `peripheral-services/{helm-values,manifests}/...`. In install-mode this is
224
+ * `<install>/host-cp`; in dev-mode it's the monorepo's `packages/` dir.
225
+ */
226
+ function resolveBundleRoot() {
227
+ const installed = join(installRoot(), 'host-cp');
228
+ if (existsSync(join(installed, 'peripheral-services')))
229
+ return installed;
230
+ const k8sRoot = resolveK8sAssetsRoot();
231
+ if (k8sRoot) {
232
+ const dev = join(k8sRoot, '..', '..');
233
+ if (existsSync(join(dev, 'peripheral-services')))
234
+ return dev;
235
+ }
236
+ return null;
237
+ }
238
+ function installObservability(opts) {
239
+ if (opts.skipObservability) {
240
+ step('4/6 — observability (skipped via --skip-observability)');
241
+ return;
242
+ }
243
+ step('4/6 — observability stack (Loki + Promtail + Grafana + Prometheus + Kyverno)');
244
+ const observabilityDir = resolveObservabilityScriptsDir();
245
+ if (!observabilityDir) {
246
+ printWarning('bundled observability scripts not found — skipping');
247
+ printWarning(' (expected in published CLI installs; missing only in dev tarballs without bundling)');
248
+ return;
249
+ }
250
+ // Export OLAM_BUNDLE_ROOT so the scripts resolve helm-values/manifests from
251
+ // the published tarball instead of `git rev-parse` (which fails outside the
252
+ // monorepo). resolveBundleRoot returns null only in degenerate dev contexts;
253
+ // the scripts handle absence by falling back to git.
254
+ const bundleRoot = resolveBundleRoot();
255
+ const scriptEnv = { ...process.env };
256
+ if (bundleRoot) {
257
+ scriptEnv.OLAM_BUNDLE_ROOT = bundleRoot;
258
+ }
259
+ for (const script of OBSERVABILITY_SCRIPTS) {
260
+ const path = join(observabilityDir, script);
261
+ if (!existsSync(path)) {
262
+ printWarning(`observability script missing: ${script} — skipping`);
263
+ continue;
264
+ }
265
+ printInfo('run', script);
266
+ const result = spawnSync('bash', [path], { stdio: 'inherit', env: scriptEnv });
267
+ if (result.status !== 0) {
268
+ // loki-ingest's 10s scrub-wait is known to flake on cold-start; the
269
+ // underlying Loki/Promtail install almost always succeeded.
270
+ if (script === 'loki-ingest.sh') {
271
+ printWarning('loki-ingest non-zero — likely Promtail scrub-wait flake; continuing');
272
+ }
273
+ else {
274
+ printError(`${script} failed — observability stack not ready`);
275
+ process.exit(1);
276
+ }
277
+ }
278
+ else {
279
+ printSuccess(`${script} passed`);
280
+ }
281
+ }
282
+ }
283
+ /**
284
+ * Step 5: Apply the peripheral-services manifest tree (IngressRoutes,
285
+ * NetworkPolicies, ServiceMonitors, recording rules, Grafana dashboard
286
+ * ConfigMaps, Kyverno ClusterPolicy). These are NOT covered by `olam
287
+ * upgrade`'s host-cp manifest apply — without this step, the observability
288
+ * stack runs but has no scrape targets and no dashboards.
289
+ */
290
+ function applyPeripheralServicesManifests() {
291
+ step('5/6 — peripheral-services manifests (IngressRoutes + ServiceMonitors + recording rules + dashboards + Kyverno)');
292
+ const dir = resolvePeripheralServicesDir();
293
+ if (!dir) {
294
+ printWarning('bundled peripheral-services manifests not found — skipping');
295
+ return;
296
+ }
297
+ const manifestsDir = join(dir, 'manifests');
298
+ if (!existsSync(manifestsDir)) {
299
+ printWarning(`peripheral-services/manifests not found at ${manifestsDir} — skipping`);
300
+ return;
301
+ }
302
+ printInfo('apply', manifestsDir);
303
+ const result = spawnSync('kubectl', ['apply', '-f', manifestsDir], { stdio: 'inherit' });
304
+ if (result.status !== 0) {
305
+ printError('kubectl apply failed — peripheral-services manifests not applied');
306
+ process.exit(result.status ?? 1);
307
+ }
308
+ printSuccess('peripheral-services manifests applied');
309
+ }
310
+ function delegateToUpgrade() {
311
+ step('6/6 — apply host-cp + peripherals + rollout (olam upgrade)');
312
+ // Re-invoke `olam upgrade -y` via the same process binary. The upgrade
313
+ // flow's 8-step k8s path (upgrade-kubernetes.ts) handles namespace +
314
+ // RBAC + Secrets + ghcr-pull + host-side docker-socket-proxy + manifest
315
+ // apply + rollout status + port-forward + /health verify + audit log.
316
+ const olamBin = process.argv[1] ?? 'olam';
317
+ const result = spawnSync(process.execPath, [olamBin, 'upgrade', '-y'], { stdio: 'inherit' });
318
+ if (result.status !== 0) {
319
+ printError('olam upgrade failed — see output above');
320
+ process.exit(result.status ?? 1);
321
+ }
322
+ }
323
+ function summary(opts) {
324
+ step('done');
325
+ process.stdout.write(`
326
+ Cluster: ${opts.cluster}
327
+ Next steps:
328
+ olam doctor # verify the stack
329
+ olam services status # peripherals 1/1
330
+ kubectl get pods -n olam
331
+
332
+ Grafana:
333
+ kubectl port-forward -n monitoring svc/olam-grafana 3000:80
334
+ open http://localhost:3000
335
+ # admin password:
336
+ kubectl get secret olam-grafana-admin -n monitoring \\
337
+ -o jsonpath='{.data.admin-password}' | base64 -d
338
+ `);
339
+ }
340
+ export async function runBootstrapKubernetes(rawOpts) {
341
+ // Default auto-install ON for macOS. The wizard contract is "fresh
342
+ // machine → working cluster in one command", which requires installing
343
+ // missing brew formulae without operator intervention. Linux operators
344
+ // see a per-tool install hint (apt/dnf auto-install is queued as a
345
+ // follow-up). Pass --no-auto-install or set autoInstall=false to
346
+ // restore the earlier opt-in behaviour.
347
+ const defaultAutoInstall = platform() === 'darwin';
348
+ const opts = {
349
+ cluster: rawOpts.cluster ?? DEFAULT_K3S_CLUSTER,
350
+ autoInstall: rawOpts.autoInstall ?? defaultAutoInstall,
351
+ skipObservability: rawOpts.skipObservability ?? false,
352
+ skipClusterCreate: rawOpts.skipClusterCreate ?? false,
353
+ };
354
+ printHeader('olam setup — k3s mode');
355
+ printInfo('mode', 'one-command bring-up of olam peripherals + observability on a local k3d cluster');
356
+ preflight(opts);
357
+ ensureSecrets();
358
+ ensureColima();
359
+ ensureCluster(opts);
360
+ installObservability(opts);
361
+ applyPeripheralServicesManifests();
362
+ delegateToUpgrade();
363
+ summary(opts);
364
+ printSuccess('setup complete');
365
+ return { exitCode: 0, summary: `setup complete on cluster ${opts.cluster}` };
366
+ }
367
+ //# sourceMappingURL=bootstrap-kubernetes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-kubernetes.js","sourceRoot":"","sources":["../../src/lib/bootstrap-kubernetes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAcH,eAAO,MAAM,SAAS,QAA2B,CAAC;AAClD,eAAO,MAAM,cAAc,QAA2B,CAAC;AACvD,eAAO,MAAM,gBAAgB,QAAiC,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG;IACvB,eAAe,EAAE,CAAC,CAAC;IACnB,IAAI,EAAE;QAAE,SAAS,EAAE,SAAS,CAAA;KAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA0DF;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAC3B,GACL,UAAU,CAsCZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,EAC/C,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAC3B,GACL,UAAU,CAaZ"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAcH,eAAO,MAAM,SAAS,QAA2B,CAAC;AAClD,eAAO,MAAM,cAAc,QAA2B,CAAC;AACvD,eAAO,MAAM,gBAAgB,QAAiC,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG;IACvB,eAAe,EAAE,CAAC,CAAC;IACnB,IAAI,EAAE;QAAE,SAAS,EAAE,SAAS,CAAA;KAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA+DF;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAC3B,GACL,UAAU,CAsCZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,EAC/C,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAC3B,GACL,UAAU,CAaZ"}
@@ -27,7 +27,12 @@ import { randomUUID } from 'node:crypto';
27
27
  export const OLAM_HOME = join(homedir(), '.olam');
28
28
  export const OLAM_STATE_DIR = join(OLAM_HOME, 'state');
29
29
  export const OLAM_CONFIG_PATH = join(OLAM_HOME, 'config.json');
30
- const DEFAULT_SUBSTRATE = 'compose';
30
+ // k3s mode is the canonical olam substrate as of feat/cli-bootstrap-k3s-default
31
+ // (2026-05-22). Fresh installs default to `kubernetes`; existing installs whose
32
+ // ~/.olam/config.json explicitly carries `host.substrate: 'compose'` keep their
33
+ // current behaviour (compose mode remains supported but is no longer the
34
+ // default). To pin compose on a fresh install: `olam config set host.substrate compose`.
35
+ const DEFAULT_SUBSTRATE = 'kubernetes';
31
36
  function makeDefaultConfig() {
32
37
  return {
33
38
  'config.schema': 1,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}