@pleri/olam-cli 0.1.148 → 0.1.150

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 (86) hide show
  1. package/dist/agent-stream/agent-sdk-to-chunks.js +276 -0
  2. package/dist/agent-stream/agent-stream-launch.js +348 -0
  3. package/dist/agent-stream/chunks-subscriber-transport.js +262 -0
  4. package/dist/agent-stream/codex-runner.js +188 -0
  5. package/dist/agent-stream/driver-runner.js +347 -0
  6. package/dist/agent-stream/operator-subscription.js +179 -0
  7. package/dist/commands/create.d.ts.map +1 -1
  8. package/dist/commands/create.js +39 -0
  9. package/dist/commands/create.js.map +1 -1
  10. package/dist/commands/doctor.d.ts +23 -0
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +77 -3
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/init.d.ts +46 -0
  15. package/dist/commands/init.d.ts.map +1 -1
  16. package/dist/commands/init.js +90 -0
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/kg-build.d.ts +23 -0
  19. package/dist/commands/kg-build.d.ts.map +1 -1
  20. package/dist/commands/kg-build.js +104 -2
  21. package/dist/commands/kg-build.js.map +1 -1
  22. package/dist/commands/restart.d.ts +18 -0
  23. package/dist/commands/restart.d.ts.map +1 -0
  24. package/dist/commands/restart.js +113 -0
  25. package/dist/commands/restart.js.map +1 -0
  26. package/dist/commands/setup-linux-gate.d.ts +26 -0
  27. package/dist/commands/setup-linux-gate.d.ts.map +1 -0
  28. package/dist/commands/setup-linux-gate.js +42 -0
  29. package/dist/commands/setup-linux-gate.js.map +1 -0
  30. package/dist/commands/setup-metrics.d.ts +26 -0
  31. package/dist/commands/setup-metrics.d.ts.map +1 -0
  32. package/dist/commands/setup-metrics.js +57 -0
  33. package/dist/commands/setup-metrics.js.map +1 -0
  34. package/dist/commands/setup-phase-5a-skill-source.d.ts +68 -0
  35. package/dist/commands/setup-phase-5a-skill-source.d.ts.map +1 -0
  36. package/dist/commands/setup-phase-5a-skill-source.js +196 -0
  37. package/dist/commands/setup-phase-5a-skill-source.js.map +1 -0
  38. package/dist/commands/setup-phase-5b-project-sweep.d.ts +38 -0
  39. package/dist/commands/setup-phase-5b-project-sweep.d.ts.map +1 -0
  40. package/dist/commands/setup-phase-5b-project-sweep.js +176 -0
  41. package/dist/commands/setup-phase-5b-project-sweep.js.map +1 -0
  42. package/dist/commands/setup.d.ts +19 -0
  43. package/dist/commands/setup.d.ts.map +1 -1
  44. package/dist/commands/setup.js +22 -0
  45. package/dist/commands/setup.js.map +1 -1
  46. package/dist/commands/skills-10x.d.ts +23 -0
  47. package/dist/commands/skills-10x.d.ts.map +1 -0
  48. package/dist/commands/skills-10x.js +308 -0
  49. package/dist/commands/skills-10x.js.map +1 -0
  50. package/dist/image-digests.json +7 -7
  51. package/dist/index.js +17873 -15826
  52. package/dist/index.js.map +1 -1
  53. package/dist/lib/build-if-stale.d.ts +33 -0
  54. package/dist/lib/build-if-stale.d.ts.map +1 -0
  55. package/dist/lib/build-if-stale.js +156 -0
  56. package/dist/lib/build-if-stale.js.map +1 -0
  57. package/dist/lib/bundle-freshness.d.ts +57 -0
  58. package/dist/lib/bundle-freshness.d.ts.map +1 -0
  59. package/dist/lib/bundle-freshness.js +223 -0
  60. package/dist/lib/bundle-freshness.js.map +1 -0
  61. package/dist/lib/bundle-source.d.ts +52 -0
  62. package/dist/lib/bundle-source.d.ts.map +1 -0
  63. package/dist/lib/bundle-source.js +83 -0
  64. package/dist/lib/bundle-source.js.map +1 -0
  65. package/dist/lib/manifest-refresh.d.ts +34 -0
  66. package/dist/lib/manifest-refresh.d.ts.map +1 -1
  67. package/dist/lib/manifest-refresh.js +66 -0
  68. package/dist/lib/manifest-refresh.js.map +1 -1
  69. package/dist/lib/upgrade-kubernetes.d.ts +17 -1
  70. package/dist/lib/upgrade-kubernetes.d.ts.map +1 -1
  71. package/dist/lib/upgrade-kubernetes.js +125 -1
  72. package/dist/lib/upgrade-kubernetes.js.map +1 -1
  73. package/dist/mcp-server.js +84 -58
  74. package/host-cp/compose.yaml +6 -0
  75. package/host-cp/k8s/manifests/30-configmap.yaml +6 -0
  76. package/host-cp/k8s/manifests/50-deployment.yaml +46 -9
  77. package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +7 -4
  78. package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +1 -1
  79. package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +7 -4
  80. package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +6 -1
  81. package/host-cp/src/agent-runtime-trigger.mjs +7 -5
  82. package/host-cp/src/plan-chat-secret.mjs +13 -2
  83. package/host-cp/src/plan-chat-service.mjs +94 -12
  84. package/host-cp/src/server.mjs +19 -7
  85. package/host-cp/src/upgrade-spawner.mjs +10 -5
  86. package/package.json +4 -2
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,+DAA+D,CAAC;IAC7E,4EAA4E;IAC5E,0EAA0E;KACzE,MAAM,CAAC,OAAO,EAAE,6DAA6D,CAAC;KAC9E,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AAE7B,gEAAgE;AAChE,6EAA6E;AAC7E,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACnD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;IACxB,qEAAqE;IACrE,+EAA+E;IAC/E,iDAAiD;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACzF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0DAA0D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK;YACtF,qEAAqE,CACxE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,sEAAsE;AACtE,yEAAyE;AACzE,0EAA0E;AAC1E,wEAAwE;AACxE,mBAAmB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC/D,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,8BAA8B,CAAC,OAAO,CAAC,CAAC;AACxC,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,0EAA0E;AAC1E,6EAA6E;AAC7E,yEAAyE;AACzE,wBAAwB;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * build-if-stale.ts — Phase B2 of olam-world-bundle-freshness.
3
+ *
4
+ * Compares the max mtime across source files in
5
+ * `packages/intelligence/src/agent-stream/` against the min mtime
6
+ * across compiled files in `packages/intelligence/dist/agent-stream/`.
7
+ * When source is newer (or dist is absent), triggers an incremental
8
+ * `npm run build --workspace=@olam/intelligence` build.
9
+ *
10
+ * Call site: `olam restart` (B2) and `olam create` (B3).
11
+ *
12
+ * Design decisions (from olam-world-bundle-freshness design doc):
13
+ * - No file-watch daemon — the bind-mount IS the watch.
14
+ * - Build failure is fatal: do NOT restart/create with a stale bundle.
15
+ * - Skip when source-mode is false (install-mode CLI has no source tree).
16
+ */
17
+ export interface BuildIfStaleResult {
18
+ /** true = dist is current (build skipped or succeeded). false = build failed. */
19
+ readonly ok: boolean;
20
+ /** Whether a build was triggered. */
21
+ readonly built: boolean;
22
+ /** Diagnostic message for logging. */
23
+ readonly message: string;
24
+ }
25
+ /**
26
+ * Check whether the agent-stream dist is stale relative to source; if so,
27
+ * trigger `npm run build --workspace=@olam/intelligence` with an ora spinner.
28
+ *
29
+ * @param repoRoot - Absolute path to the repo root (must contain `packages/`).
30
+ * @param env - Process env for isDevMode check. Defaults to `process.env`.
31
+ */
32
+ export declare function buildIfStale(repoRoot: string, env?: NodeJS.ProcessEnv): BuildIfStaleResult;
33
+ //# sourceMappingURL=build-if-stale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-if-stale.d.ts","sourceRoot":"","sources":["../../src/lib/build-if-stale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAoEH,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,kBAAkB,CAwEpB"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * build-if-stale.ts — Phase B2 of olam-world-bundle-freshness.
3
+ *
4
+ * Compares the max mtime across source files in
5
+ * `packages/intelligence/src/agent-stream/` against the min mtime
6
+ * across compiled files in `packages/intelligence/dist/agent-stream/`.
7
+ * When source is newer (or dist is absent), triggers an incremental
8
+ * `npm run build --workspace=@olam/intelligence` build.
9
+ *
10
+ * Call site: `olam restart` (B2) and `olam create` (B3).
11
+ *
12
+ * Design decisions (from olam-world-bundle-freshness design doc):
13
+ * - No file-watch daemon — the bind-mount IS the watch.
14
+ * - Build failure is fatal: do NOT restart/create with a stale bundle.
15
+ * - Skip when source-mode is false (install-mode CLI has no source tree).
16
+ */
17
+ import * as fs from 'node:fs';
18
+ import * as path from 'node:path';
19
+ import { spawnSync } from 'node:child_process';
20
+ import ora from 'ora';
21
+ import { isDevMode } from '../install-root.js';
22
+ import { resolveBundleSource, BundleSourceNotFoundError } from './bundle-source.js';
23
+ /** File extensions that count as TypeScript source. */
24
+ const TS_EXTS = new Set(['.ts', '.js', '.mjs', '.json']);
25
+ /** Maximum mtime in ms across all files in a directory tree. */
26
+ function maxMtimeMs(dir) {
27
+ if (!fs.existsSync(dir))
28
+ return 0;
29
+ let max = 0;
30
+ const scan = (d) => {
31
+ let entries;
32
+ try {
33
+ entries = fs.readdirSync(d, { withFileTypes: true });
34
+ }
35
+ catch {
36
+ return;
37
+ }
38
+ for (const entry of entries) {
39
+ const full = path.join(d, entry.name);
40
+ if (entry.isDirectory()) {
41
+ // Skip __tests__ and node_modules — they don't affect the build output.
42
+ if (entry.name === '__tests__' || entry.name === 'node_modules')
43
+ continue;
44
+ scan(full);
45
+ }
46
+ else if (entry.isFile() && TS_EXTS.has(path.extname(entry.name))) {
47
+ try {
48
+ const mt = fs.statSync(full).mtimeMs;
49
+ if (mt > max)
50
+ max = mt;
51
+ }
52
+ catch {
53
+ // ignore
54
+ }
55
+ }
56
+ }
57
+ };
58
+ scan(dir);
59
+ return max;
60
+ }
61
+ /** Minimum mtime in ms across all .js files in a directory (non-recursive). */
62
+ function minDistMtimeMs(dir) {
63
+ if (!fs.existsSync(dir))
64
+ return 0;
65
+ let min = Infinity;
66
+ let found = false;
67
+ let entries;
68
+ try {
69
+ entries = fs.readdirSync(dir, { withFileTypes: true });
70
+ }
71
+ catch {
72
+ return 0;
73
+ }
74
+ for (const entry of entries) {
75
+ if (entry.isFile() && entry.name.endsWith('.js')) {
76
+ try {
77
+ const mt = fs.statSync(path.join(dir, entry.name)).mtimeMs;
78
+ if (mt < min)
79
+ min = mt;
80
+ found = true;
81
+ }
82
+ catch {
83
+ // ignore
84
+ }
85
+ }
86
+ }
87
+ return found ? min : 0;
88
+ }
89
+ /**
90
+ * Check whether the agent-stream dist is stale relative to source; if so,
91
+ * trigger `npm run build --workspace=@olam/intelligence` with an ora spinner.
92
+ *
93
+ * @param repoRoot - Absolute path to the repo root (must contain `packages/`).
94
+ * @param env - Process env for isDevMode check. Defaults to `process.env`.
95
+ */
96
+ export function buildIfStale(repoRoot, env = process.env) {
97
+ // C3 (olam-world-bundle-freshness): branch on bundle source mode.
98
+ // install-mode → emit the C3 acceptance log line and return immediately.
99
+ // source-mode → run the B2 stale-check + rebuild logic below.
100
+ try {
101
+ const bundleSource = resolveBundleSource(env);
102
+ if (bundleSource.mode === 'install') {
103
+ process.stderr.write('bundle source: install-mode; skipping rebuild\n');
104
+ return { ok: true, built: false, message: 'bundle source: install-mode; skipping rebuild' };
105
+ }
106
+ // source-mode: fall through to the stale-check below.
107
+ }
108
+ catch (err) {
109
+ if (err instanceof BundleSourceNotFoundError) {
110
+ // Neither path exists: gracefully skip (caller will handle the fallback).
111
+ return { ok: true, built: false, message: 'bundle source unresolved; skipping build check' };
112
+ }
113
+ throw err;
114
+ }
115
+ // Legacy guard (backward compat for callers that pass a bare env without
116
+ // OLAM_DEV set). If resolveBundleSource didn't throw and returned source-mode,
117
+ // isDevMode must also be true, but we keep this guard for safety.
118
+ if (!isDevMode(env)) {
119
+ return { ok: true, built: false, message: 'install-mode: skipping build check' };
120
+ }
121
+ const srcDir = path.join(repoRoot, 'packages', 'intelligence', 'src', 'agent-stream');
122
+ const distDir = path.join(repoRoot, 'packages', 'intelligence', 'dist', 'agent-stream');
123
+ const srcMtime = maxMtimeMs(srcDir);
124
+ const distMtime = minDistMtimeMs(distDir);
125
+ if (distMtime > 0 && srcMtime <= distMtime) {
126
+ return {
127
+ ok: true,
128
+ built: false,
129
+ message: 'bundle: current; skipping rebuild',
130
+ };
131
+ }
132
+ const reason = distMtime === 0
133
+ ? 'dist is absent'
134
+ : `source newer by ${Math.round((srcMtime - distMtime) / 1000)}s`;
135
+ const spinner = ora(`Rebuilding agent-stream bundle… (${reason})`).start();
136
+ const result = spawnSync('npm', ['run', 'build', '--workspace=@olam/intelligence'], {
137
+ cwd: repoRoot,
138
+ stdio: ['ignore', 'pipe', 'pipe'],
139
+ encoding: 'utf-8',
140
+ });
141
+ if (result.status !== 0) {
142
+ spinner.fail('Agent-stream bundle build failed');
143
+ const detail = (result.stderr ?? result.stdout ?? '').trim();
144
+ if (detail) {
145
+ process.stderr.write(detail + '\n');
146
+ }
147
+ return {
148
+ ok: false,
149
+ built: false,
150
+ message: `build failed (exit ${result.status ?? 'null'})`,
151
+ };
152
+ }
153
+ spinner.succeed('Agent-stream bundle rebuilt');
154
+ return { ok: true, built: true, message: 'bundle rebuilt successfully' };
155
+ }
156
+ //# sourceMappingURL=build-if-stale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-if-stale.js","sourceRoot":"","sources":["../../src/lib/build-if-stale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * bundle-freshness.ts — Phase A1 of olam-world-bundle-freshness.
3
+ *
4
+ * Surfaces whether each running olam world is running the SAME agent-stream
5
+ * bundle that the operator has built locally (`packages/intelligence/dist/
6
+ * agent-stream/`).
7
+ *
8
+ * The bake mechanism (devbox.runtime.glibc.Dockerfile:263-287) builds the
9
+ * bundle INSIDE the world image at world-image-build time, so subsequent
10
+ * fixes to agent-stream do NOT reach running worlds via `olam restart` —
11
+ * they need either a docker cp (manual workaround) or the Phase B
12
+ * bind-mount overlay (the real fix).
13
+ *
14
+ * This probe makes the staleness gap visible BEFORE Phase B lands.
15
+ *
16
+ * Verdict:
17
+ * - fresh — every checked file's sha256 matches host + host dist ≥ container.
18
+ * - stale — at least one file's sha differs OR host dist is newer by >60s.
19
+ * - unknown — no running worlds, OR host dist missing, OR docker unreachable.
20
+ */
21
+ import type { DockerExec, ProbeResult } from './health-probes.js';
22
+ /**
23
+ * Files the probe checks inside each world's
24
+ * `/opt/olam/agent-stream/dist/`. Mirrors the brainstorm's docker-cp
25
+ * recovery list (PR #653 + PR #665).
26
+ */
27
+ export declare const BUNDLE_FILES: ReadonlyArray<string>;
28
+ export interface BundleFreshnessDeps {
29
+ readonly dockerExec?: DockerExec;
30
+ /**
31
+ * Repo root override (tests inject). When omitted the probe resolves
32
+ * the operator repo root from the running CLI's install-root pattern
33
+ * (`<cli-pkg>/../../`).
34
+ */
35
+ readonly repoRootOverride?: string;
36
+ }
37
+ export interface WorldFreshness {
38
+ readonly container: string;
39
+ readonly verdict: 'fresh' | 'stale' | 'unknown';
40
+ readonly mismatchedFiles: ReadonlyArray<string>;
41
+ readonly mtimeDeltaMs?: number;
42
+ }
43
+ /**
44
+ * Aggregate doctor probe.
45
+ *
46
+ * Returns:
47
+ * - PASS (`ok: true, no warn`) when every running world is `fresh`.
48
+ * - WARN (`ok: true, warn: true`) when at least one world is `stale`.
49
+ * - PASS-with-unknown (`ok: true, no warn`) when no running worlds OR no
50
+ * host dist exists — nothing to be stale against, so no alarm.
51
+ *
52
+ * Never FAILs — bundle staleness is an informational signal, not a
53
+ * gate. Operators land Phase B by reading this row before Phase B
54
+ * makes the row redundant.
55
+ */
56
+ export declare function probeBundleFreshness(deps?: BundleFreshnessDeps): Promise<ProbeResult>;
57
+ //# sourceMappingURL=bundle-freshness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-freshness.d.ts","sourceRoot":"","sources":["../../src/lib/bundle-freshness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,CAO9C,CAAC;AAKF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,WAAW,CAAC,CA2FtB"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * bundle-freshness.ts — Phase A1 of olam-world-bundle-freshness.
3
+ *
4
+ * Surfaces whether each running olam world is running the SAME agent-stream
5
+ * bundle that the operator has built locally (`packages/intelligence/dist/
6
+ * agent-stream/`).
7
+ *
8
+ * The bake mechanism (devbox.runtime.glibc.Dockerfile:263-287) builds the
9
+ * bundle INSIDE the world image at world-image-build time, so subsequent
10
+ * fixes to agent-stream do NOT reach running worlds via `olam restart` —
11
+ * they need either a docker cp (manual workaround) or the Phase B
12
+ * bind-mount overlay (the real fix).
13
+ *
14
+ * This probe makes the staleness gap visible BEFORE Phase B lands.
15
+ *
16
+ * Verdict:
17
+ * - fresh — every checked file's sha256 matches host + host dist ≥ container.
18
+ * - stale — at least one file's sha differs OR host dist is newer by >60s.
19
+ * - unknown — no running worlds, OR host dist missing, OR docker unreachable.
20
+ */
21
+ import { createHash } from 'node:crypto';
22
+ import { existsSync, readFileSync, statSync } from 'node:fs';
23
+ import { join, resolve } from 'node:path';
24
+ /**
25
+ * Files the probe checks inside each world's
26
+ * `/opt/olam/agent-stream/dist/`. Mirrors the brainstorm's docker-cp
27
+ * recovery list (PR #653 + PR #665).
28
+ */
29
+ export const BUNDLE_FILES = [
30
+ 'driver-runner.js',
31
+ 'codex-runner.js',
32
+ 'agent-sdk-to-chunks.js',
33
+ 'agent-stream-launch.js',
34
+ 'operator-subscription.js',
35
+ 'chunks-subscriber-transport.js',
36
+ ];
37
+ /** Mtime drift tolerance — host can be up to this much newer than world without flagging stale. */
38
+ const MTIME_TOLERANCE_MS = 60_000;
39
+ /**
40
+ * Aggregate doctor probe.
41
+ *
42
+ * Returns:
43
+ * - PASS (`ok: true, no warn`) when every running world is `fresh`.
44
+ * - WARN (`ok: true, warn: true`) when at least one world is `stale`.
45
+ * - PASS-with-unknown (`ok: true, no warn`) when no running worlds OR no
46
+ * host dist exists — nothing to be stale against, so no alarm.
47
+ *
48
+ * Never FAILs — bundle staleness is an informational signal, not a
49
+ * gate. Operators land Phase B by reading this row before Phase B
50
+ * makes the row redundant.
51
+ */
52
+ export async function probeBundleFreshness(deps = {}) {
53
+ const dockerExec = deps.dockerExec;
54
+ // Host dist path. CLI's install-root pattern: <cli-pkg>/../../.
55
+ // In source-mode this resolves to <repo>/packages/intelligence/dist/agent-stream.
56
+ // In install-mode there's no host dist; return unknown.
57
+ const repoRoot = deps.repoRootOverride ?? resolveRepoRootBestEffort();
58
+ if (!repoRoot) {
59
+ return {
60
+ ok: true,
61
+ message: 'bundle: unknown (repo root not detected; install-mode CLI cannot probe host dist)',
62
+ };
63
+ }
64
+ const hostDistDir = join(repoRoot, 'packages', 'intelligence', 'dist', 'agent-stream');
65
+ if (!existsSync(hostDistDir)) {
66
+ return {
67
+ ok: true,
68
+ message: `bundle: unknown (host dist missing at ${hostDistDir})`,
69
+ };
70
+ }
71
+ // Enumerate running olam worlds. Match container names like `olam-<id>-devbox`.
72
+ if (!dockerExec) {
73
+ return { ok: true, message: 'bundle: unknown (no docker exec injected)' };
74
+ }
75
+ const psResult = dockerExec('docker', ['ps', '--format', '{{.Names}}']);
76
+ if (psResult.status !== 0) {
77
+ return {
78
+ ok: true,
79
+ message: `bundle: unknown (docker ps failed: ${psResult.stderr.trim() || 'no stderr'})`,
80
+ };
81
+ }
82
+ const containers = psResult.stdout
83
+ .split('\n')
84
+ .map((l) => l.trim())
85
+ .filter((l) => /^olam-[a-z0-9][a-z0-9-]*-devbox$/.test(l));
86
+ if (containers.length === 0) {
87
+ return { ok: true, message: 'bundle: unknown (no running olam worlds)' };
88
+ }
89
+ // Compute host shas once.
90
+ const hostShas = new Map();
91
+ for (const f of BUNDLE_FILES) {
92
+ const p = join(hostDistDir, f);
93
+ if (!existsSync(p))
94
+ continue;
95
+ const buf = readFileSync(p);
96
+ const sha = createHash('sha256').update(buf).digest('hex');
97
+ const mtimeMs = statSync(p).mtimeMs;
98
+ hostShas.set(f, { sha, mtimeMs });
99
+ }
100
+ if (hostShas.size === 0) {
101
+ return {
102
+ ok: true,
103
+ message: `bundle: unknown (no BUNDLE_FILES present at ${hostDistDir})`,
104
+ };
105
+ }
106
+ // Per-world comparison.
107
+ const perWorld = [];
108
+ for (const container of containers) {
109
+ perWorld.push(checkWorld(container, hostShas, dockerExec));
110
+ }
111
+ const staleWorlds = perWorld.filter((w) => w.verdict === 'stale');
112
+ if (staleWorlds.length > 0) {
113
+ const remedy = `Run \`olam restart <worldId>\` after Phase B lands, OR for now: ` +
114
+ `\`for f in ${BUNDLE_FILES.join(' ')}; do docker cp packages/intelligence/dist/agent-stream/$f <container>:/opt/olam/agent-stream/dist/$f; done\``;
115
+ return {
116
+ ok: true,
117
+ warn: true,
118
+ message: `bundle: stale in ${staleWorlds.length}/${perWorld.length} world(s) — ${staleWorlds
119
+ .map((w) => `${w.container} (${w.mismatchedFiles.length} file(s) differ)`)
120
+ .join(', ')}`,
121
+ remedy,
122
+ };
123
+ }
124
+ const unknownCount = perWorld.filter((w) => w.verdict === 'unknown').length;
125
+ if (unknownCount === perWorld.length) {
126
+ return {
127
+ ok: true,
128
+ message: `bundle: unknown (could not probe ${unknownCount}/${perWorld.length} world(s); docker exec failed)`,
129
+ };
130
+ }
131
+ return {
132
+ ok: true,
133
+ message: `bundle: fresh in ${perWorld.length} world(s)`,
134
+ };
135
+ }
136
+ function checkWorld(container, hostShas, dockerExec) {
137
+ // Single exec sha256s all bundle files at once for efficiency.
138
+ // Format: `<sha> <path>` per line.
139
+ const filePaths = Array.from(hostShas.keys()).map((f) => `/opt/olam/agent-stream/dist/${f}`);
140
+ const r = dockerExec('docker', [
141
+ 'exec',
142
+ container,
143
+ 'sh',
144
+ '-c',
145
+ `for f in ${filePaths.join(' ')}; do if [ -f "$f" ]; then sha256sum "$f"; stat -c '%Y' "$f"; fi; done`,
146
+ ]);
147
+ if (r.status !== 0) {
148
+ return { container, verdict: 'unknown', mismatchedFiles: [] };
149
+ }
150
+ // Parse: alternating lines of `<sha> <path>` and `<mtime_epoch_seconds>`.
151
+ const lines = r.stdout.trim().split('\n');
152
+ const containerShas = new Map();
153
+ for (let i = 0; i < lines.length; i += 2) {
154
+ const shaLine = lines[i];
155
+ const mtimeLine = lines[i + 1];
156
+ if (!shaLine || !mtimeLine)
157
+ continue;
158
+ const m = shaLine.match(/^([a-f0-9]{64})\s+(.+)$/);
159
+ if (!m)
160
+ continue;
161
+ const sha = m[1];
162
+ const path = m[2];
163
+ const filename = path?.split('/').pop();
164
+ if (!filename)
165
+ continue;
166
+ const mtimeSecs = parseInt(mtimeLine.trim(), 10);
167
+ if (Number.isNaN(mtimeSecs) || !sha)
168
+ continue;
169
+ containerShas.set(filename, { sha, mtimeMs: mtimeSecs * 1000 });
170
+ }
171
+ const mismatched = [];
172
+ let maxMtimeDelta = 0;
173
+ for (const [filename, hostEntry] of hostShas) {
174
+ const containerEntry = containerShas.get(filename);
175
+ if (!containerEntry) {
176
+ // File present on host, absent in world → mismatch.
177
+ mismatched.push(filename);
178
+ continue;
179
+ }
180
+ if (containerEntry.sha !== hostEntry.sha) {
181
+ mismatched.push(filename);
182
+ }
183
+ const delta = hostEntry.mtimeMs - containerEntry.mtimeMs;
184
+ if (delta > maxMtimeDelta)
185
+ maxMtimeDelta = delta;
186
+ }
187
+ // Fresh = no sha mismatches AND mtime drift within tolerance.
188
+ if (mismatched.length === 0 && maxMtimeDelta <= MTIME_TOLERANCE_MS) {
189
+ return { container, verdict: 'fresh', mismatchedFiles: [], mtimeDeltaMs: maxMtimeDelta };
190
+ }
191
+ return {
192
+ container,
193
+ verdict: 'stale',
194
+ mismatchedFiles: mismatched,
195
+ mtimeDeltaMs: maxMtimeDelta,
196
+ };
197
+ }
198
+ /**
199
+ * Best-effort repo root resolution. Mirrors install-root.ts's pattern:
200
+ * the CLI lives at `<repo>/packages/cli` in source-mode; walking up two
201
+ * levels lands at the repo root iff `packages/` AND `package.json` exist
202
+ * there.
203
+ */
204
+ function resolveRepoRootBestEffort() {
205
+ // The probe is module-level; we can't reach __dirname in ESM directly,
206
+ // but the CLI loads from <repo>/packages/cli/dist/lib/bundle-freshness.js
207
+ // (or src/lib in dev), so process.argv[1] points into the CLI tree.
208
+ // Fall back to cwd if argv resolution fails.
209
+ const start = process.argv[1] ?? process.cwd();
210
+ // Walk up looking for a parent that has BOTH `packages/` AND `package.json`.
211
+ let dir = resolve(start);
212
+ for (let i = 0; i < 6; i++) {
213
+ const parent = resolve(dir, '..');
214
+ if (parent === dir)
215
+ break;
216
+ if (existsSync(join(parent, 'packages')) && existsSync(join(parent, 'package.json'))) {
217
+ return parent;
218
+ }
219
+ dir = parent;
220
+ }
221
+ return null;
222
+ }
223
+ //# sourceMappingURL=bundle-freshness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-freshness.js","sourceRoot":"","sources":["../../src/lib/bundle-freshness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * bundle-source.ts — Phase C C2 (olam-world-bundle-freshness).
3
+ *
4
+ * Single resolver for the agent-stream bind-mount source path. Two modes:
5
+ *
6
+ * source-mode (OLAM_DEV=1 + packages/ sibling in repo root):
7
+ * → <repo>/packages/intelligence/dist/agent-stream
8
+ *
9
+ * install-mode (OLAM_FORCE_INSTALL_MODE=1, or OLAM_DEV is absent/not '1',
10
+ * or the packages/ sibling is absent):
11
+ * → <cli-pkg-root>/dist/agent-stream
12
+ * (the path populated by bundle-agent-stream.mjs at publish time)
13
+ *
14
+ * Throws `BundleSourceNotFoundError` with a remediation message when neither
15
+ * path exists on disk.
16
+ *
17
+ * Design decisions:
18
+ * - Reuses `installRoot()` + `isDevMode()` from install-root.ts (the seam
19
+ * established by Phase B / fresh-install-self-bootstrap). No new heuristics.
20
+ * - `OLAM_FORCE_INSTALL_MODE=1` forces install-mode regardless of cwd; used
21
+ * by the C4 integration test to exercise install-mode paths without a real
22
+ * global install.
23
+ * - Does NOT import from @olam/adapters (dep cycle — adapters cannot import
24
+ * from @pleri/olam-cli). The container.ts refactor in Phase C receives the
25
+ * resolved path as an argument instead of computing it internally.
26
+ */
27
+ /** Resolved bundle source description. */
28
+ export interface BundleSource {
29
+ /** 'source' = operator repo dist; 'install' = CLI package dist. */
30
+ readonly mode: 'source' | 'install';
31
+ /** Absolute path to the agent-stream dist directory. */
32
+ readonly path: string;
33
+ }
34
+ /**
35
+ * Thrown when neither the source-mode nor the install-mode bundle directory
36
+ * exists on disk. Carries a remediation message operators can act on.
37
+ */
38
+ export declare class BundleSourceNotFoundError extends Error {
39
+ constructor(sourceModePath: string, installModePath: string);
40
+ }
41
+ /**
42
+ * Resolve the agent-stream bind-mount source for the current runtime context.
43
+ *
44
+ * @param env - Process environment. Defaults to `process.env`. Injectable for
45
+ * tests — pass `{ OLAM_FORCE_INSTALL_MODE: '1' }` to exercise install-mode.
46
+ * @param installRootDir - Override the CLI package root. Defaults to
47
+ * `installRoot()`. Injectable for tests.
48
+ * @returns `BundleSource` with the resolved mode and absolute directory path.
49
+ * @throws `BundleSourceNotFoundError` when neither path exists.
50
+ */
51
+ export declare function resolveBundleSource(env?: NodeJS.ProcessEnv, installRootDir?: string): BundleSource;
52
+ //# sourceMappingURL=bundle-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-source.d.ts","sourceRoot":"","sources":["../../src/lib/bundle-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IACpC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;CAa5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,cAAc,GAAE,MAAsB,GACrC,YAAY,CA2Bd"}