@pleri/olam-cli 0.1.69 → 0.1.72

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 (250) hide show
  1. package/dist/cli-version.d.ts +16 -0
  2. package/dist/cli-version.d.ts.map +1 -0
  3. package/dist/cli-version.js +39 -0
  4. package/dist/cli-version.js.map +1 -0
  5. package/dist/commands/create.d.ts.map +1 -1
  6. package/dist/commands/create.js +2 -0
  7. package/dist/commands/create.js.map +1 -1
  8. package/dist/commands/host-cp.d.ts.map +1 -1
  9. package/dist/commands/host-cp.js +10 -0
  10. package/dist/commands/host-cp.js.map +1 -1
  11. package/dist/commands/runbooks.d.ts +13 -0
  12. package/dist/commands/runbooks.d.ts.map +1 -0
  13. package/dist/commands/runbooks.js +189 -0
  14. package/dist/commands/runbooks.js.map +1 -0
  15. package/dist/commands/world-snapshot.d.ts +1 -0
  16. package/dist/commands/world-snapshot.d.ts.map +1 -1
  17. package/dist/commands/world-snapshot.js +126 -1
  18. package/dist/commands/world-snapshot.js.map +1 -1
  19. package/dist/commands/worldspec/compile.d.ts +20 -0
  20. package/dist/commands/worldspec/compile.d.ts.map +1 -0
  21. package/dist/commands/worldspec/compile.js +130 -0
  22. package/dist/commands/worldspec/compile.js.map +1 -0
  23. package/dist/commands/worldspec/index.d.ts +12 -0
  24. package/dist/commands/worldspec/index.d.ts.map +1 -0
  25. package/dist/commands/worldspec/index.js +23 -0
  26. package/dist/commands/worldspec/index.js.map +1 -0
  27. package/dist/commands/worldspec/init.d.ts +15 -0
  28. package/dist/commands/worldspec/init.d.ts.map +1 -0
  29. package/dist/commands/worldspec/init.js +166 -0
  30. package/dist/commands/worldspec/init.js.map +1 -0
  31. package/dist/commands/worldspec/schema.d.ts +11 -0
  32. package/dist/commands/worldspec/schema.d.ts.map +1 -0
  33. package/dist/commands/worldspec/schema.js +55 -0
  34. package/dist/commands/worldspec/schema.js.map +1 -0
  35. package/dist/commands/worldspec/validate.d.ts +15 -0
  36. package/dist/commands/worldspec/validate.d.ts.map +1 -0
  37. package/dist/commands/worldspec/validate.js +66 -0
  38. package/dist/commands/worldspec/validate.js.map +1 -0
  39. package/dist/exit-codes.d.ts +32 -0
  40. package/dist/exit-codes.d.ts.map +1 -1
  41. package/dist/exit-codes.js +32 -0
  42. package/dist/exit-codes.js.map +1 -1
  43. package/dist/image-digests.json +5 -5
  44. package/dist/index.js +4726 -1231
  45. package/dist/index.js.map +1 -1
  46. package/dist/mcp-server.js +1424 -321
  47. package/host-cp/compose.yaml +6 -0
  48. package/host-cp/src/global-config-source.mjs +71 -0
  49. package/host-cp/src/listening-server-poller.mjs +1 -1
  50. package/host-cp/src/plan-orchestrator.mjs +20 -1
  51. package/host-cp/src/port-bridge-manager.mjs +1 -1
  52. package/host-cp/src/server.mjs +46 -7
  53. package/host-cp/src/version-status.mjs +36 -0
  54. package/package.json +4 -2
  55. package/dist/__tests__/audit-publish-deps-contract.test.d.ts +0 -26
  56. package/dist/__tests__/audit-publish-deps-contract.test.d.ts.map +0 -1
  57. package/dist/__tests__/audit-publish-deps-contract.test.js +0 -86
  58. package/dist/__tests__/audit-publish-deps-contract.test.js.map +0 -1
  59. package/dist/__tests__/auth-status.test.d.ts +0 -2
  60. package/dist/__tests__/auth-status.test.d.ts.map +0 -1
  61. package/dist/__tests__/auth-status.test.js +0 -291
  62. package/dist/__tests__/auth-status.test.js.map +0 -1
  63. package/dist/__tests__/auth-upgrade.test.d.ts +0 -9
  64. package/dist/__tests__/auth-upgrade.test.d.ts.map +0 -1
  65. package/dist/__tests__/auth-upgrade.test.js +0 -397
  66. package/dist/__tests__/auth-upgrade.test.js.map +0 -1
  67. package/dist/__tests__/bootstrap-tag-mcp-auth.test.d.ts +0 -22
  68. package/dist/__tests__/bootstrap-tag-mcp-auth.test.d.ts.map +0 -1
  69. package/dist/__tests__/bootstrap-tag-mcp-auth.test.js +0 -63
  70. package/dist/__tests__/bootstrap-tag-mcp-auth.test.js.map +0 -1
  71. package/dist/__tests__/cli-mcp-revoke.test.d.ts +0 -8
  72. package/dist/__tests__/cli-mcp-revoke.test.d.ts.map +0 -1
  73. package/dist/__tests__/cli-mcp-revoke.test.js +0 -124
  74. package/dist/__tests__/cli-mcp-revoke.test.js.map +0 -1
  75. package/dist/__tests__/config.test.d.ts +0 -2
  76. package/dist/__tests__/config.test.d.ts.map +0 -1
  77. package/dist/__tests__/config.test.js +0 -95
  78. package/dist/__tests__/config.test.js.map +0 -1
  79. package/dist/__tests__/create-app-urls.test.d.ts +0 -2
  80. package/dist/__tests__/create-app-urls.test.d.ts.map +0 -1
  81. package/dist/__tests__/create-app-urls.test.js +0 -102
  82. package/dist/__tests__/create-app-urls.test.js.map +0 -1
  83. package/dist/__tests__/docker-host.test.d.ts +0 -14
  84. package/dist/__tests__/docker-host.test.d.ts.map +0 -1
  85. package/dist/__tests__/docker-host.test.js +0 -109
  86. package/dist/__tests__/docker-host.test.js.map +0 -1
  87. package/dist/__tests__/enter.test.d.ts +0 -2
  88. package/dist/__tests__/enter.test.d.ts.map +0 -1
  89. package/dist/__tests__/enter.test.js +0 -90
  90. package/dist/__tests__/enter.test.js.map +0 -1
  91. package/dist/__tests__/help-output.test.d.ts +0 -2
  92. package/dist/__tests__/help-output.test.d.ts.map +0 -1
  93. package/dist/__tests__/help-output.test.js +0 -74
  94. package/dist/__tests__/help-output.test.js.map +0 -1
  95. package/dist/__tests__/host-cp-gh-token.test.d.ts +0 -9
  96. package/dist/__tests__/host-cp-gh-token.test.d.ts.map +0 -1
  97. package/dist/__tests__/host-cp-gh-token.test.js +0 -119
  98. package/dist/__tests__/host-cp-gh-token.test.js.map +0 -1
  99. package/dist/__tests__/host-cp.test.d.ts +0 -9
  100. package/dist/__tests__/host-cp.test.d.ts.map +0 -1
  101. package/dist/__tests__/host-cp.test.js +0 -327
  102. package/dist/__tests__/host-cp.test.js.map +0 -1
  103. package/dist/__tests__/image-presence.test.d.ts +0 -2
  104. package/dist/__tests__/image-presence.test.d.ts.map +0 -1
  105. package/dist/__tests__/image-presence.test.js +0 -44
  106. package/dist/__tests__/image-presence.test.js.map +0 -1
  107. package/dist/__tests__/install-root.test.d.ts +0 -2
  108. package/dist/__tests__/install-root.test.d.ts.map +0 -1
  109. package/dist/__tests__/install-root.test.js +0 -119
  110. package/dist/__tests__/install-root.test.js.map +0 -1
  111. package/dist/__tests__/keys.test.d.ts +0 -9
  112. package/dist/__tests__/keys.test.d.ts.map +0 -1
  113. package/dist/__tests__/keys.test.js +0 -145
  114. package/dist/__tests__/keys.test.js.map +0 -1
  115. package/dist/__tests__/logs.test.d.ts +0 -9
  116. package/dist/__tests__/logs.test.d.ts.map +0 -1
  117. package/dist/__tests__/logs.test.js +0 -124
  118. package/dist/__tests__/logs.test.js.map +0 -1
  119. package/dist/__tests__/mcp-import.test.d.ts +0 -11
  120. package/dist/__tests__/mcp-import.test.d.ts.map +0 -1
  121. package/dist/__tests__/mcp-import.test.js +0 -134
  122. package/dist/__tests__/mcp-import.test.js.map +0 -1
  123. package/dist/__tests__/protocol-version.test.d.ts +0 -2
  124. package/dist/__tests__/protocol-version.test.d.ts.map +0 -1
  125. package/dist/__tests__/protocol-version.test.js +0 -170
  126. package/dist/__tests__/protocol-version.test.js.map +0 -1
  127. package/dist/__tests__/ps.test.d.ts +0 -2
  128. package/dist/__tests__/ps.test.d.ts.map +0 -1
  129. package/dist/__tests__/ps.test.js +0 -172
  130. package/dist/__tests__/ps.test.js.map +0 -1
  131. package/dist/__tests__/registry-allowlist.test.d.ts +0 -2
  132. package/dist/__tests__/registry-allowlist.test.d.ts.map +0 -1
  133. package/dist/__tests__/registry-allowlist.test.js +0 -129
  134. package/dist/__tests__/registry-allowlist.test.js.map +0 -1
  135. package/dist/__tests__/services.test.d.ts +0 -8
  136. package/dist/__tests__/services.test.d.ts.map +0 -1
  137. package/dist/__tests__/services.test.js +0 -185
  138. package/dist/__tests__/services.test.js.map +0 -1
  139. package/dist/__tests__/status-app-urls.test.d.ts +0 -2
  140. package/dist/__tests__/status-app-urls.test.d.ts.map +0 -1
  141. package/dist/__tests__/status-app-urls.test.js +0 -125
  142. package/dist/__tests__/status-app-urls.test.js.map +0 -1
  143. package/dist/__tests__/upgrade-gh-token-contract.test.d.ts +0 -19
  144. package/dist/__tests__/upgrade-gh-token-contract.test.d.ts.map +0 -1
  145. package/dist/__tests__/upgrade-gh-token-contract.test.js +0 -63
  146. package/dist/__tests__/upgrade-gh-token-contract.test.js.map +0 -1
  147. package/dist/__tests__/upgrade.test.d.ts +0 -9
  148. package/dist/__tests__/upgrade.test.d.ts.map +0 -1
  149. package/dist/__tests__/upgrade.test.js +0 -586
  150. package/dist/__tests__/upgrade.test.js.map +0 -1
  151. package/dist/commands/__tests__/__fixtures__/upgrade-helpers.d.ts +0 -6
  152. package/dist/commands/__tests__/__fixtures__/upgrade-helpers.d.ts.map +0 -1
  153. package/dist/commands/__tests__/__fixtures__/upgrade-helpers.js +0 -26
  154. package/dist/commands/__tests__/__fixtures__/upgrade-helpers.js.map +0 -1
  155. package/dist/commands/__tests__/begin.test.d.ts +0 -7
  156. package/dist/commands/__tests__/begin.test.d.ts.map +0 -1
  157. package/dist/commands/__tests__/begin.test.js +0 -72
  158. package/dist/commands/__tests__/begin.test.js.map +0 -1
  159. package/dist/commands/__tests__/bootstrap.test.d.ts +0 -2
  160. package/dist/commands/__tests__/bootstrap.test.d.ts.map +0 -1
  161. package/dist/commands/__tests__/bootstrap.test.js +0 -370
  162. package/dist/commands/__tests__/bootstrap.test.js.map +0 -1
  163. package/dist/commands/__tests__/carry-uncommitted.test.d.ts +0 -14
  164. package/dist/commands/__tests__/carry-uncommitted.test.d.ts.map +0 -1
  165. package/dist/commands/__tests__/carry-uncommitted.test.js +0 -83
  166. package/dist/commands/__tests__/carry-uncommitted.test.js.map +0 -1
  167. package/dist/commands/__tests__/clean.test.d.ts +0 -9
  168. package/dist/commands/__tests__/clean.test.d.ts.map +0 -1
  169. package/dist/commands/__tests__/clean.test.js +0 -105
  170. package/dist/commands/__tests__/clean.test.js.map +0 -1
  171. package/dist/commands/__tests__/crystallize.test.d.ts +0 -2
  172. package/dist/commands/__tests__/crystallize.test.d.ts.map +0 -1
  173. package/dist/commands/__tests__/crystallize.test.js +0 -133
  174. package/dist/commands/__tests__/crystallize.test.js.map +0 -1
  175. package/dist/commands/__tests__/diagnose.test.d.ts +0 -9
  176. package/dist/commands/__tests__/diagnose.test.d.ts.map +0 -1
  177. package/dist/commands/__tests__/diagnose.test.js +0 -108
  178. package/dist/commands/__tests__/diagnose.test.js.map +0 -1
  179. package/dist/commands/__tests__/openHostCpUrl.test.d.ts +0 -2
  180. package/dist/commands/__tests__/openHostCpUrl.test.d.ts.map +0 -1
  181. package/dist/commands/__tests__/openHostCpUrl.test.js +0 -63
  182. package/dist/commands/__tests__/openHostCpUrl.test.js.map +0 -1
  183. package/dist/commands/__tests__/refresh.test.d.ts +0 -13
  184. package/dist/commands/__tests__/refresh.test.d.ts.map +0 -1
  185. package/dist/commands/__tests__/refresh.test.js +0 -170
  186. package/dist/commands/__tests__/refresh.test.js.map +0 -1
  187. package/dist/commands/__tests__/status.test.d.ts +0 -8
  188. package/dist/commands/__tests__/status.test.d.ts.map +0 -1
  189. package/dist/commands/__tests__/status.test.js +0 -62
  190. package/dist/commands/__tests__/status.test.js.map +0 -1
  191. package/dist/commands/__tests__/stop.test.d.ts +0 -5
  192. package/dist/commands/__tests__/stop.test.d.ts.map +0 -1
  193. package/dist/commands/__tests__/stop.test.js +0 -30
  194. package/dist/commands/__tests__/stop.test.js.map +0 -1
  195. package/dist/commands/__tests__/update.test.d.ts +0 -7
  196. package/dist/commands/__tests__/update.test.d.ts.map +0 -1
  197. package/dist/commands/__tests__/update.test.js +0 -224
  198. package/dist/commands/__tests__/update.test.js.map +0 -1
  199. package/dist/commands/__tests__/upgrade.all-three.test.d.ts +0 -19
  200. package/dist/commands/__tests__/upgrade.all-three.test.d.ts.map +0 -1
  201. package/dist/commands/__tests__/upgrade.all-three.test.js +0 -80
  202. package/dist/commands/__tests__/upgrade.all-three.test.js.map +0 -1
  203. package/dist/commands/__tests__/upgrade.compose-path.test.d.ts +0 -20
  204. package/dist/commands/__tests__/upgrade.compose-path.test.d.ts.map +0 -1
  205. package/dist/commands/__tests__/upgrade.compose-path.test.js +0 -140
  206. package/dist/commands/__tests__/upgrade.compose-path.test.js.map +0 -1
  207. package/dist/commands/__tests__/upgrade.history.test.d.ts +0 -15
  208. package/dist/commands/__tests__/upgrade.history.test.d.ts.map +0 -1
  209. package/dist/commands/__tests__/upgrade.history.test.js +0 -199
  210. package/dist/commands/__tests__/upgrade.history.test.js.map +0 -1
  211. package/dist/commands/__tests__/upgrade.lock.test.d.ts +0 -15
  212. package/dist/commands/__tests__/upgrade.lock.test.d.ts.map +0 -1
  213. package/dist/commands/__tests__/upgrade.lock.test.js +0 -253
  214. package/dist/commands/__tests__/upgrade.lock.test.js.map +0 -1
  215. package/dist/commands/__tests__/upgrade.olam-tag.test.d.ts +0 -21
  216. package/dist/commands/__tests__/upgrade.olam-tag.test.d.ts.map +0 -1
  217. package/dist/commands/__tests__/upgrade.olam-tag.test.js +0 -114
  218. package/dist/commands/__tests__/upgrade.olam-tag.test.js.map +0 -1
  219. package/dist/commands/__tests__/upgrade.poll.test.d.ts +0 -14
  220. package/dist/commands/__tests__/upgrade.poll.test.d.ts.map +0 -1
  221. package/dist/commands/__tests__/upgrade.poll.test.js +0 -136
  222. package/dist/commands/__tests__/upgrade.poll.test.js.map +0 -1
  223. package/dist/commands/__tests__/upgrade.recreate.test.d.ts +0 -17
  224. package/dist/commands/__tests__/upgrade.recreate.test.d.ts.map +0 -1
  225. package/dist/commands/__tests__/upgrade.recreate.test.js +0 -83
  226. package/dist/commands/__tests__/upgrade.recreate.test.js.map +0 -1
  227. package/dist/commands/__tests__/upgrade.rollback.test.d.ts +0 -12
  228. package/dist/commands/__tests__/upgrade.rollback.test.d.ts.map +0 -1
  229. package/dist/commands/__tests__/upgrade.rollback.test.js +0 -255
  230. package/dist/commands/__tests__/upgrade.rollback.test.js.map +0 -1
  231. package/dist/commands/__tests__/upgrade.sha-capture.test.d.ts +0 -12
  232. package/dist/commands/__tests__/upgrade.sha-capture.test.d.ts.map +0 -1
  233. package/dist/commands/__tests__/upgrade.sha-capture.test.js +0 -63
  234. package/dist/commands/__tests__/upgrade.sha-capture.test.js.map +0 -1
  235. package/dist/commands/__tests__/upgrade.smoke.test.d.ts +0 -19
  236. package/dist/commands/__tests__/upgrade.smoke.test.d.ts.map +0 -1
  237. package/dist/commands/__tests__/upgrade.smoke.test.js +0 -87
  238. package/dist/commands/__tests__/upgrade.smoke.test.js.map +0 -1
  239. package/dist/commands/__tests__/upgrade.swap.test.d.ts +0 -19
  240. package/dist/commands/__tests__/upgrade.swap.test.d.ts.map +0 -1
  241. package/dist/commands/__tests__/upgrade.swap.test.js +0 -312
  242. package/dist/commands/__tests__/upgrade.swap.test.js.map +0 -1
  243. package/dist/commands/__tests__/world-upgrade.test.d.ts +0 -8
  244. package/dist/commands/__tests__/world-upgrade.test.d.ts.map +0 -1
  245. package/dist/commands/__tests__/world-upgrade.test.js +0 -73
  246. package/dist/commands/__tests__/world-upgrade.test.js.map +0 -1
  247. package/dist/lib/__tests__/symlink-reconcile.test.d.ts +0 -2
  248. package/dist/lib/__tests__/symlink-reconcile.test.d.ts.map +0 -1
  249. package/dist/lib/__tests__/symlink-reconcile.test.js +0 -106
  250. package/dist/lib/__tests__/symlink-reconcile.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"carry-uncommitted.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/carry-uncommitted.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Smoke tests for `olam clean`'s formatting + dry-run path. The
3
- * categorisation logic is exercised against a fixture worlds dir
4
- * with a known shape; the file ops are limited to fs.rmSync calls
5
- * we make in --apply mode (covered separately by reapEntry tests
6
- * if/when that surface needs deeper coverage).
7
- */
8
- export {};
9
- //# sourceMappingURL=clean.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clean.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/clean.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -1,105 +0,0 @@
1
- /**
2
- * Smoke tests for `olam clean`'s formatting + dry-run path. The
3
- * categorisation logic is exercised against a fixture worlds dir
4
- * with a known shape; the file ops are limited to fs.rmSync calls
5
- * we make in --apply mode (covered separately by reapEntry tests
6
- * if/when that surface needs deeper coverage).
7
- */
8
- import { describe, expect, it, beforeEach, afterEach, vi } from 'vitest';
9
- import fs from 'node:fs';
10
- import os from 'node:os';
11
- import path from 'node:path';
12
- import { runClean } from '../clean.js';
13
- let tmpHome;
14
- let originalHome;
15
- let stdoutChunks;
16
- let stderrChunks;
17
- function mockStdout() {
18
- stdoutChunks = [];
19
- stderrChunks = [];
20
- vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
21
- stdoutChunks.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString());
22
- return true;
23
- });
24
- vi.spyOn(process.stderr, 'write').mockImplementation((chunk) => {
25
- stderrChunks.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString());
26
- return true;
27
- });
28
- }
29
- beforeEach(() => {
30
- originalHome = process.env.HOME;
31
- tmpHome = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-clean-test-'));
32
- process.env.HOME = tmpHome;
33
- // Minimal shape — clean.ts only needs ~/.olam/worlds/ + the registry,
34
- // and we test against the dry-run path so registry can be empty.
35
- fs.mkdirSync(path.join(tmpHome, '.olam', 'worlds'), { recursive: true });
36
- });
37
- afterEach(() => {
38
- vi.restoreAllMocks();
39
- if (originalHome !== undefined)
40
- process.env.HOME = originalHome;
41
- else
42
- delete process.env.HOME;
43
- fs.rmSync(tmpHome, { recursive: true, force: true });
44
- });
45
- describe('runClean — dry-run', () => {
46
- it('returns 0 and lists no entries when worlds dir is empty', async () => {
47
- mockStdout();
48
- const code = await runClean({
49
- apply: false,
50
- includeDirty: false,
51
- yes: false,
52
- json: false,
53
- });
54
- expect(code).toBe(0);
55
- const out = stdoutChunks.join('');
56
- expect(out).toContain('no worlds on disk');
57
- expect(out).toContain('Dry-run only');
58
- });
59
- it('emits JSON inventory when --json is set', async () => {
60
- fs.mkdirSync(path.join(tmpHome, '.olam', 'worlds', 'gold-arc-1454'), { recursive: true });
61
- fs.writeFileSync(path.join(tmpHome, '.olam', 'worlds', 'gold-arc-1454', 'world.db'), Buffer.alloc(1024));
62
- mockStdout();
63
- const code = await runClean({
64
- apply: false,
65
- includeDirty: false,
66
- yes: false,
67
- json: true,
68
- });
69
- expect(code).toBe(0);
70
- const out = stdoutChunks.join('');
71
- const parsed = JSON.parse(out);
72
- expect(parsed.entries).toHaveLength(1);
73
- expect(parsed.entries[0]?.id).toBe('gold-arc-1454');
74
- expect(parsed.entries[0]?.category).toBe('orphan');
75
- expect(parsed.entries[0]?.bytes).toBe(1024);
76
- });
77
- it('classifies a no-git directory as orphan', async () => {
78
- fs.mkdirSync(path.join(tmpHome, '.olam', 'worlds', 'no-git-test'), { recursive: true });
79
- fs.writeFileSync(path.join(tmpHome, '.olam', 'worlds', 'no-git-test', 'a.bin'), Buffer.alloc(2048));
80
- mockStdout();
81
- const code = await runClean({
82
- apply: false,
83
- includeDirty: false,
84
- yes: false,
85
- json: true,
86
- });
87
- expect(code).toBe(0);
88
- const parsed = JSON.parse(stdoutChunks.join(''));
89
- expect(parsed.entries.find((e) => e.id === 'no-git-test')?.category).toBe('orphan');
90
- });
91
- it('handles a missing worlds directory gracefully', async () => {
92
- fs.rmSync(path.join(tmpHome, '.olam', 'worlds'), { recursive: true });
93
- mockStdout();
94
- const code = await runClean({
95
- apply: false,
96
- includeDirty: false,
97
- yes: false,
98
- json: true,
99
- });
100
- expect(code).toBe(0);
101
- const parsed = JSON.parse(stdoutChunks.join(''));
102
- expect(parsed.entries).toHaveLength(0);
103
- });
104
- });
105
- //# sourceMappingURL=clean.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clean.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/clean.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=crystallize.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crystallize.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/crystallize.test.ts"],"names":[],"mappings":""}
@@ -1,133 +0,0 @@
1
- // A1 (Phase A — fresh-install self-bootstrap): when PLERI is not configured,
2
- // `olam crystallize` exits 2 (named constant) with a stderr-only warn so
3
- // piped scripts can detect "skipped" without parsing stdout.
4
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
5
- import { Command } from 'commander';
6
- import { registerCrystallize } from '../crystallize.js';
7
- import { EXIT_PLERI_NOT_CONFIGURED } from '../../exit-codes.js';
8
- import * as ctxModule from '../../context.js';
9
- function captureStreams() {
10
- const sink = { stdout: '', stderr: '' };
11
- const origStdout = process.stdout.write.bind(process.stdout);
12
- const origStderr = process.stderr.write.bind(process.stderr);
13
- process.stdout.write = (chunk) => {
14
- sink.stdout += typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString();
15
- return true;
16
- };
17
- process.stderr.write = (chunk) => {
18
- sink.stderr += typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString();
19
- return true;
20
- };
21
- // Save originals on the sink so the caller can restore them.
22
- sink.restore = () => {
23
- process.stdout.write = origStdout;
24
- process.stderr.write = origStderr;
25
- };
26
- return sink;
27
- }
28
- describe('olam crystallize — PLERI not configured', () => {
29
- let originalExitCode;
30
- beforeEach(() => {
31
- originalExitCode = process.exitCode;
32
- process.exitCode = 0;
33
- });
34
- afterEach(() => {
35
- process.exitCode = originalExitCode ?? 0;
36
- vi.restoreAllMocks();
37
- });
38
- it('exits with EXIT_PLERI_NOT_CONFIGURED (2) when ctx.pleriClient is null', async () => {
39
- // Stub loadContext to return a ctx with no pleriClient (PLERI not configured).
40
- vi.spyOn(ctxModule, 'loadContext').mockResolvedValue({
41
- ctx: {
42
- // Minimal shape — only the field crystallize reads at the gate is needed.
43
- pleriClient: null,
44
- },
45
- error: undefined,
46
- });
47
- const program = new Command();
48
- registerCrystallize(program);
49
- const sink = captureStreams();
50
- try {
51
- // commander throws on `process.exit` calls but we set exitCode + return,
52
- // so this is just an async function call.
53
- await program.parseAsync(['node', 'olam', 'crystallize', 'fake-world-id']);
54
- }
55
- finally {
56
- sink.restore();
57
- }
58
- expect(process.exitCode).toBe(EXIT_PLERI_NOT_CONFIGURED);
59
- expect(process.exitCode).toBe(2);
60
- expect(sink.stderr).toContain('crystallize requires PLERI_BASE_URL');
61
- expect(sink.stdout).toBe('');
62
- });
63
- it('keeps stdout empty so piped consumers can distinguish skip from success', async () => {
64
- vi.spyOn(ctxModule, 'loadContext').mockResolvedValue({
65
- // Match production shape: pleriClient is `undefined` when not configured
66
- // (set conditionally inside `if (config.pleri)` in context.ts).
67
- ctx: {
68
- pleriClient: undefined,
69
- },
70
- error: undefined,
71
- });
72
- const program = new Command();
73
- registerCrystallize(program);
74
- const sink = captureStreams();
75
- try {
76
- await program.parseAsync(['node', 'olam', 'crystallize', 'any-world']);
77
- }
78
- finally {
79
- sink.restore();
80
- }
81
- // The contract: stdout is empty on skip; stderr carries the warn.
82
- expect(sink.stdout.length).toBe(0);
83
- expect(sink.stderr.length).toBeGreaterThan(0);
84
- });
85
- it('exits 2 on a truly fresh install (no .olam/ dir → OlamConfigNotFoundError)', async () => {
86
- // The "fresh-install" scenario this epic is named after: a user runs
87
- // `npm i -g @pleri/olam-cli && olam crystallize <world>` on a project
88
- // with no `.olam/` directory at all. PLERI is by definition not
89
- // configured; the skip semantics should match the partial-config case.
90
- const configNotFound = new Error('No olam config found');
91
- configNotFound.name = 'OlamConfigNotFoundError';
92
- vi.spyOn(ctxModule, 'loadContext').mockResolvedValue({
93
- ctx: undefined,
94
- error: configNotFound,
95
- });
96
- const program = new Command();
97
- registerCrystallize(program);
98
- const sink = captureStreams();
99
- try {
100
- await program.parseAsync(['node', 'olam', 'crystallize', 'fresh-install-world']);
101
- }
102
- finally {
103
- sink.restore();
104
- }
105
- expect(process.exitCode).toBe(EXIT_PLERI_NOT_CONFIGURED);
106
- expect(sink.stderr).toContain('crystallize requires PLERI_BASE_URL');
107
- expect(sink.stderr).toContain('Olam is not initialised');
108
- expect(sink.stdout).toBe('');
109
- });
110
- it('warn message names the remediation path (config or env var)', async () => {
111
- vi.spyOn(ctxModule, 'loadContext').mockResolvedValue({
112
- // Match production shape: pleriClient is `undefined` when not configured
113
- // (set conditionally inside `if (config.pleri)` in context.ts).
114
- ctx: {
115
- pleriClient: undefined,
116
- },
117
- error: undefined,
118
- });
119
- const program = new Command();
120
- registerCrystallize(program);
121
- const sink = captureStreams();
122
- try {
123
- await program.parseAsync(['node', 'olam', 'crystallize', 'world']);
124
- }
125
- finally {
126
- sink.restore();
127
- }
128
- // Operators looking at the warn line need to know how to enable the feature.
129
- expect(sink.stderr).toMatch(/PLERI_BASE_URL/);
130
- expect(sink.stderr).toMatch(/\.olam\/config\.yaml/);
131
- });
132
- });
133
- //# sourceMappingURL=crystallize.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crystallize.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/crystallize.test.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,yEAAyE;AACzE,6DAA6D;AAE7D,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAI9C,SAAS,cAAc;IACrB,MAAM,IAAI,GAAe,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAA0B,EAAW,EAAE;QAC7D,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAA0B,EAAW,EAAE;QAC7D,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,6DAA6D;IAC5D,IAA2C,CAAC,OAAO,GAAG,GAAS,EAAE;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;IACpC,CAAC,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,IAAI,gBAAoD,CAAC;IAEzD,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;QACpC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,QAAQ,GAAG,gBAAgB,IAAI,CAAC,CAAC;QACzC,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,+EAA+E;QAC/E,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,iBAAiB,CAAC;YACnD,GAAG,EAAE;gBACH,0EAA0E;gBAC1E,WAAW,EAAE,IAAI;aACqD;YACxE,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,yEAAyE;YACzE,0CAA0C;YAC1C,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;QAC7E,CAAC;gBAAS,CAAC;YACR,IAA2C,CAAC,OAAO,EAAE,CAAC;QACzD,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,iBAAiB,CAAC;YACnD,yEAAyE;YACzE,gEAAgE;YAChE,GAAG,EAAE;gBACH,WAAW,EAAE,SAAS;aACgD;YACxE,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;QACzE,CAAC;gBAAS,CAAC;YACR,IAA2C,CAAC,OAAO,EAAE,CAAC;QACzD,CAAC;QAED,kEAAkE;QAClE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,qEAAqE;QACrE,sEAAsE;QACtE,gEAAgE;QAChE,uEAAuE;QACvE,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzD,cAAc,CAAC,IAAI,GAAG,yBAAyB,CAAC;QAEhD,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,iBAAiB,CAAC;YACnD,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,cAAc;SACtB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACR,IAA2C,CAAC,OAAO,EAAE,CAAC;QACzD,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,iBAAiB,CAAC;YACnD,yEAAyE;YACzE,gEAAgE;YAChE,GAAG,EAAE;gBACH,WAAW,EAAE,SAAS;aACgD;YACxE,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QACrE,CAAC;gBAAS,CAAC;YACR,IAA2C,CAAC,OAAO,EAAE,CAAC;QACzD,CAAC;QAED,6EAA6E;QAC7E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Tests for G1/G2/G3 — olam diagnose.
3
- *
4
- * buildDiagnosticsZip is injectable via _exec, _outDir, _logDir, _zip so no
5
- * real zip command or home-dir paths are touched during tests.
6
- * buildTelemetryPayload is async and tested with lazy import injection.
7
- */
8
- export {};
9
- //# sourceMappingURL=diagnose.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnose.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/diagnose.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -1,108 +0,0 @@
1
- /**
2
- * Tests for G1/G2/G3 — olam diagnose.
3
- *
4
- * buildDiagnosticsZip is injectable via _exec, _outDir, _logDir, _zip so no
5
- * real zip command or home-dir paths are touched during tests.
6
- * buildTelemetryPayload is async and tested with lazy import injection.
7
- */
8
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
9
- import * as fs from 'node:fs';
10
- import * as path from 'node:path';
11
- import * as os from 'node:os';
12
- // Phase F's machine-schema is intentionally NOT cherry-picked alongside this
13
- // Phase G code; buildTelemetryPayload hard-codes channel='stable' for now.
14
- import { buildDiagnosticsZip, buildTelemetryPayload } from '../diagnose.js';
15
- function makeFakeZip(outDir) {
16
- const written = {};
17
- const fakeZip = (zipPath, files) => {
18
- for (const f of files) {
19
- if (fs.existsSync(f))
20
- written[path.basename(f)] = fs.readFileSync(f, 'utf-8');
21
- }
22
- fs.writeFileSync(zipPath, 'fake-zip');
23
- };
24
- return { fakeZip, written };
25
- }
26
- describe('buildDiagnosticsZip (G1 — show-telemetry)', () => {
27
- let tmpOut;
28
- let tmpLog;
29
- beforeEach(() => {
30
- tmpOut = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-diag-test-'));
31
- tmpLog = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-log-test-'));
32
- });
33
- afterEach(() => {
34
- try {
35
- fs.rmSync(tmpOut, { recursive: true, force: true });
36
- }
37
- catch { /* ok */ }
38
- try {
39
- fs.rmSync(tmpLog, { recursive: true, force: true });
40
- }
41
- catch { /* ok */ }
42
- });
43
- it('calls zip with the expected output path and returns entries', async () => {
44
- const zipCalls = [];
45
- const fakeZip = (zipPath, files) => {
46
- zipCalls.push({ zipPath, files });
47
- fs.writeFileSync(zipPath, 'fake-zip');
48
- };
49
- const { zipPath, entries } = await buildDiagnosticsZip(() => '', tmpOut, tmpLog, fakeZip);
50
- expect(zipPath).toContain('olam-diag-');
51
- expect(zipPath.endsWith('.zip')).toBe(true);
52
- expect(entries).toContain('version.txt');
53
- expect(entries).toContain('os-info.txt');
54
- expect(zipCalls).toHaveLength(1);
55
- expect(zipCalls[0].zipPath).toBe(zipPath);
56
- });
57
- it('version.txt contains CLI version from env', async () => {
58
- process.env['OLAM_CLI_VERSION'] = '0.1.9';
59
- const { fakeZip, written } = makeFakeZip(tmpOut);
60
- await buildDiagnosticsZip(() => '', tmpOut, tmpLog, fakeZip);
61
- expect(written['version.txt']).toContain('0.1.9');
62
- delete process.env['OLAM_CLI_VERSION'];
63
- });
64
- it('os-info.txt does not contain homedir or hostname', async () => {
65
- const { fakeZip, written } = makeFakeZip(tmpOut);
66
- await buildDiagnosticsZip(() => '', tmpOut, tmpLog, fakeZip);
67
- const osInfo = written['os-info.txt'] ?? '';
68
- expect(osInfo).not.toContain(os.homedir());
69
- expect(osInfo).not.toContain(os.hostname());
70
- });
71
- it('strips secrets from log content before writing', async () => {
72
- // Write a fake log file with a secret in the injectable _logDir
73
- fs.writeFileSync(path.join(tmpLog, 'host-2026-05-06.log'), 'token=sk-ant-abcdefghijklmnopqrstuvwxyz012345\nother log line\n');
74
- const { fakeZip, written } = makeFakeZip(tmpOut);
75
- await buildDiagnosticsZip(() => '', tmpOut, tmpLog, fakeZip);
76
- const logContent = written['log-tail.txt'] ?? '';
77
- expect(logContent).toBeTruthy(); // log-tail.txt was actually written (real code path)
78
- expect(logContent).not.toContain('sk-ant-');
79
- expect(logContent).toContain('[REDACTED]');
80
- });
81
- it('throws if zip function throws', async () => {
82
- const failZip = (_zipPath, _files) => {
83
- throw new Error('zip: command not found');
84
- };
85
- await expect(buildDiagnosticsZip(() => '', tmpOut, tmpLog, failZip)).rejects.toThrow(/zip command/);
86
- });
87
- });
88
- describe('buildTelemetryPayload (G2 --show-telemetry)', () => {
89
- it('contains required fields, no userid or path', async () => {
90
- const payload = await buildTelemetryPayload();
91
- expect(payload).toHaveProperty('version');
92
- expect(payload).toHaveProperty('os');
93
- expect(payload).toHaveProperty('arch');
94
- expect(payload).toHaveProperty('channel');
95
- expect(payload).toHaveProperty('manifest_age_hours');
96
- // Privacy invariant: no userid, no project, no path, no hostname
97
- expect(payload).not.toHaveProperty('userid');
98
- expect(payload).not.toHaveProperty('project');
99
- expect(payload).not.toHaveProperty('path');
100
- expect(payload).not.toHaveProperty('hostname');
101
- expect(payload).not.toHaveProperty('homedir');
102
- });
103
- it('returns channel from config', async () => {
104
- const payload = await buildTelemetryPayload();
105
- expect(payload.channel).toBe('stable');
106
- });
107
- });
108
- //# sourceMappingURL=diagnose.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnose.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/diagnose.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=openHostCpUrl.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openHostCpUrl.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/openHostCpUrl.test.ts"],"names":[],"mappings":""}
@@ -1,63 +0,0 @@
1
- // Phase D6 (olam-dogfood-vision): unit tests for the openHostCpUrl
2
- // helper's skip paths. Doesn't actually open a browser; covers the
3
- // non-interactive / CI / headless-linux short-circuits.
4
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
5
- import { openHostCpUrl } from '../host-cp.js';
6
- const ORIGINAL_CI = process.env.CI;
7
- const ORIGINAL_DISPLAY = process.env.DISPLAY;
8
- const ORIGINAL_WAYLAND = process.env.WAYLAND_DISPLAY;
9
- const ORIGINAL_PLATFORM = process.platform;
10
- beforeEach(() => {
11
- delete process.env.CI;
12
- });
13
- afterEach(() => {
14
- if (ORIGINAL_CI !== undefined)
15
- process.env.CI = ORIGINAL_CI;
16
- if (ORIGINAL_DISPLAY !== undefined)
17
- process.env.DISPLAY = ORIGINAL_DISPLAY;
18
- if (ORIGINAL_WAYLAND !== undefined)
19
- process.env.WAYLAND_DISPLAY = ORIGINAL_WAYLAND;
20
- Object.defineProperty(process, 'platform', { value: ORIGINAL_PLATFORM });
21
- });
22
- describe('openHostCpUrl — skip paths', () => {
23
- it('skips when CI=true', () => {
24
- process.env.CI = 'true';
25
- const result = openHostCpUrl('http://127.0.0.1:19000/world/test');
26
- expect(result.opened).toBe(false);
27
- expect(result.reason).toContain('CI');
28
- });
29
- it('skips when stdout is not a TTY (vitest runs piped)', () => {
30
- // vitest's default reporter pipes stdout, so this is the natural
31
- // state during the test run. CI=undefined, isTTY=false → skip.
32
- delete process.env.CI;
33
- const result = openHostCpUrl('http://127.0.0.1:19000/world/test');
34
- // We can't always pin which path triggers (depends on vitest
35
- // reporter / CI env), but the function MUST report opened=false
36
- // here without throwing.
37
- expect(result.opened).toBe(false);
38
- expect(typeof result.reason).toBe('string');
39
- expect(result.reason.length).toBeGreaterThan(0);
40
- });
41
- it('returns a structured shape (never throws)', () => {
42
- // Defensive contract: openHostCpUrl is a UX helper and must
43
- // never throw — failures must come back as
44
- // {opened: false, reason: string}.
45
- const result = openHostCpUrl('http://malformed-but-not-spawnable.local/');
46
- expect(result).toHaveProperty('opened');
47
- expect(typeof result.opened).toBe('boolean');
48
- if (!result.opened) {
49
- expect(typeof result.reason).toBe('string');
50
- }
51
- });
52
- it('skips on linux without DISPLAY/WAYLAND_DISPLAY', () => {
53
- Object.defineProperty(process, 'platform', { value: 'linux' });
54
- delete process.env.DISPLAY;
55
- delete process.env.WAYLAND_DISPLAY;
56
- const result = openHostCpUrl('http://127.0.0.1:19000/world/test');
57
- expect(result.opened).toBe(false);
58
- // Either CI / non-TTY / headless-linux can short-circuit; assert
59
- // we got SOME structured reason rather than a thrown exception.
60
- expect(typeof result.reason).toBe('string');
61
- });
62
- });
63
- //# sourceMappingURL=openHostCpUrl.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openHostCpUrl.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/openHostCpUrl.test.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Unit tests for `olam refresh` command.
3
- *
4
- * Tests:
5
- * 1. collectCpSourceFiles — mirrors build-devbox.sh:38-77 logic
6
- * 2. validateServerMjsPresent — sanity-check gate
7
- * 3. Command parser — arg/flag validation
8
- * 4. Snapshot test — actual standalone dir matches expected structure
9
- *
10
- * Run: `cd packages/cli && npx vitest run src/commands/__tests__/refresh.test.ts`
11
- */
12
- export {};
13
- //# sourceMappingURL=refresh.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"refresh.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/refresh.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}