@pleri/olam-cli 0.1.196 → 0.1.199

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 (139) hide show
  1. package/README.md +52 -0
  2. package/dist/ask/knowledge-pack.generated.d.ts.map +1 -1
  3. package/dist/ask/knowledge-pack.generated.js +10 -8
  4. package/dist/ask/knowledge-pack.generated.js.map +1 -1
  5. package/dist/commands/auth-list-json.d.ts +34 -0
  6. package/dist/commands/auth-list-json.d.ts.map +1 -1
  7. package/dist/commands/auth-list-json.js +24 -0
  8. package/dist/commands/auth-list-json.js.map +1 -1
  9. package/dist/commands/auth-migrate.d.ts +212 -0
  10. package/dist/commands/auth-migrate.d.ts.map +1 -0
  11. package/dist/commands/auth-migrate.js +465 -0
  12. package/dist/commands/auth-migrate.js.map +1 -0
  13. package/dist/commands/auth.d.ts.map +1 -1
  14. package/dist/commands/auth.js +239 -184
  15. package/dist/commands/auth.js.map +1 -1
  16. package/dist/commands/bootstrap.d.ts +4 -0
  17. package/dist/commands/bootstrap.d.ts.map +1 -1
  18. package/dist/commands/bootstrap.js +10 -0
  19. package/dist/commands/bootstrap.js.map +1 -1
  20. package/dist/commands/dispatch.d.ts.map +1 -1
  21. package/dist/commands/dispatch.js +11 -1
  22. package/dist/commands/dispatch.js.map +1 -1
  23. package/dist/commands/doctor.d.ts +33 -0
  24. package/dist/commands/doctor.d.ts.map +1 -1
  25. package/dist/commands/doctor.js +299 -12
  26. package/dist/commands/doctor.js.map +1 -1
  27. package/dist/commands/kg-mirror.d.ts +18 -2
  28. package/dist/commands/kg-mirror.d.ts.map +1 -1
  29. package/dist/commands/kg-mirror.js +78 -3
  30. package/dist/commands/kg-mirror.js.map +1 -1
  31. package/dist/commands/mcp/complete.d.ts +36 -0
  32. package/dist/commands/mcp/complete.d.ts.map +1 -0
  33. package/dist/commands/mcp/complete.js +66 -0
  34. package/dist/commands/mcp/complete.js.map +1 -0
  35. package/dist/commands/mcp/index.d.ts +1 -1
  36. package/dist/commands/mcp/index.d.ts.map +1 -1
  37. package/dist/commands/mcp/index.js +3 -1
  38. package/dist/commands/mcp/index.js.map +1 -1
  39. package/dist/commands/memory/bridge.d.ts +1 -1
  40. package/dist/commands/memory/bridge.d.ts.map +1 -1
  41. package/dist/commands/memory/bridge.js +2 -6
  42. package/dist/commands/memory/bridge.js.map +1 -1
  43. package/dist/commands/memory/secret.d.ts.map +1 -1
  44. package/dist/commands/memory/secret.js +4 -3
  45. package/dist/commands/memory/secret.js.map +1 -1
  46. package/dist/commands/observe.d.ts +3 -3
  47. package/dist/commands/observe.d.ts.map +1 -1
  48. package/dist/commands/observe.js +11 -8
  49. package/dist/commands/observe.js.map +1 -1
  50. package/dist/commands/runbooks.d.ts.map +1 -1
  51. package/dist/commands/runbooks.js +77 -10
  52. package/dist/commands/runbooks.js.map +1 -1
  53. package/dist/commands/services-tls.d.ts.map +1 -1
  54. package/dist/commands/services-tls.js +41 -0
  55. package/dist/commands/services-tls.js.map +1 -1
  56. package/dist/commands/services.d.ts +45 -3
  57. package/dist/commands/services.d.ts.map +1 -1
  58. package/dist/commands/services.js +198 -71
  59. package/dist/commands/services.js.map +1 -1
  60. package/dist/commands/setup-phase-8-kg-hook.d.ts +48 -0
  61. package/dist/commands/setup-phase-8-kg-hook.d.ts.map +1 -0
  62. package/dist/commands/setup-phase-8-kg-hook.js +93 -0
  63. package/dist/commands/setup-phase-8-kg-hook.js.map +1 -0
  64. package/dist/commands/setup-phase-9-memory-bridge.d.ts +36 -0
  65. package/dist/commands/setup-phase-9-memory-bridge.d.ts.map +1 -0
  66. package/dist/commands/setup-phase-9-memory-bridge.js +59 -0
  67. package/dist/commands/setup-phase-9-memory-bridge.js.map +1 -0
  68. package/dist/commands/setup.d.ts +34 -1
  69. package/dist/commands/setup.d.ts.map +1 -1
  70. package/dist/commands/setup.js +328 -23
  71. package/dist/commands/setup.js.map +1 -1
  72. package/dist/commands/update.d.ts +24 -0
  73. package/dist/commands/update.d.ts.map +1 -1
  74. package/dist/commands/update.js +53 -0
  75. package/dist/commands/update.js.map +1 -1
  76. package/dist/commands/upgrade.d.ts +5 -0
  77. package/dist/commands/upgrade.d.ts.map +1 -1
  78. package/dist/commands/upgrade.js +31 -8
  79. package/dist/commands/upgrade.js.map +1 -1
  80. package/dist/image-digests.json +8 -8
  81. package/dist/index.js +4302 -2466
  82. package/dist/lib/auth-backend.d.ts +168 -0
  83. package/dist/lib/auth-backend.d.ts.map +1 -0
  84. package/dist/lib/auth-backend.js +172 -0
  85. package/dist/lib/auth-backend.js.map +1 -0
  86. package/dist/lib/auth-list-cache.d.ts +67 -0
  87. package/dist/lib/auth-list-cache.d.ts.map +1 -0
  88. package/dist/lib/auth-list-cache.js +84 -0
  89. package/dist/lib/auth-list-cache.js.map +1 -0
  90. package/dist/lib/auth-list.d.ts +107 -0
  91. package/dist/lib/auth-list.d.ts.map +1 -0
  92. package/dist/lib/auth-list.js +123 -0
  93. package/dist/lib/auth-list.js.map +1 -0
  94. package/dist/lib/auth-login.d.ts +92 -0
  95. package/dist/lib/auth-login.d.ts.map +1 -0
  96. package/dist/lib/auth-login.js +124 -0
  97. package/dist/lib/auth-login.js.map +1 -0
  98. package/dist/lib/auth-mutator-backend.d.ts +54 -0
  99. package/dist/lib/auth-mutator-backend.d.ts.map +1 -0
  100. package/dist/lib/auth-mutator-backend.js +62 -0
  101. package/dist/lib/auth-mutator-backend.js.map +1 -0
  102. package/dist/lib/auth-remote.d.ts +50 -0
  103. package/dist/lib/auth-remote.d.ts.map +1 -1
  104. package/dist/lib/auth-remote.js +84 -2
  105. package/dist/lib/auth-remote.js.map +1 -1
  106. package/dist/lib/bootstrap-kubernetes.d.ts +93 -12
  107. package/dist/lib/bootstrap-kubernetes.d.ts.map +1 -1
  108. package/dist/lib/bootstrap-kubernetes.js +364 -53
  109. package/dist/lib/bootstrap-kubernetes.js.map +1 -1
  110. package/dist/lib/config.d.ts +7 -0
  111. package/dist/lib/config.d.ts.map +1 -1
  112. package/dist/lib/config.js.map +1 -1
  113. package/dist/lib/health-probes.d.ts +0 -22
  114. package/dist/lib/health-probes.d.ts.map +1 -1
  115. package/dist/lib/health-probes.js +23 -2
  116. package/dist/lib/health-probes.js.map +1 -1
  117. package/dist/lib/peripheral-registry.d.ts +11 -0
  118. package/dist/lib/peripheral-registry.d.ts.map +1 -1
  119. package/dist/lib/peripheral-registry.js +5 -0
  120. package/dist/lib/peripheral-registry.js.map +1 -1
  121. package/dist/lib/plans-client.d.ts.map +1 -1
  122. package/dist/lib/plans-client.js +6 -3
  123. package/dist/lib/plans-client.js.map +1 -1
  124. package/dist/mcp-server.js +14 -3
  125. package/hermes-bundle/version.json +1 -1
  126. package/host-cp/k8s/manifests/30-configmap.yaml +4 -0
  127. package/host-cp/k8s/manifests/50-deployment.yaml +13 -1
  128. package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +1 -1
  129. package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +1 -1
  130. package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +1 -1
  131. package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +1 -1
  132. package/host-cp/src/dispatch-persister.mjs +157 -0
  133. package/host-cp/src/pr-nanny.mjs +7 -0
  134. package/host-cp/src/server.mjs +175 -3
  135. package/host-cp/src/world-watchdog-pid-lookup.mjs +119 -0
  136. package/host-cp/src/world-watchdog-probes.mjs +271 -0
  137. package/host-cp/src/world-watchdog-recovery.mjs +192 -0
  138. package/host-cp/src/world-watchdog.mjs +313 -0
  139. package/package.json +1 -1
@@ -0,0 +1,465 @@
1
+ /**
2
+ * olam auth migrate — one-shot migration tool for operators with a legacy
3
+ * `~/.olam/auth-data/accounts.json` (the file the pre-Phase-A auth-service
4
+ * container wrote OAuth tokens to). Reads each local account and walks the
5
+ * operator through re-authenticating it against the cloud auth-worker.
6
+ *
7
+ * ───────────────────────────────────────────────────────────────────────────
8
+ * IMPORTANT — DESIGN-DOC NOTE FROM B2's AUDIT
9
+ * ───────────────────────────────────────────────────────────────────────────
10
+ *
11
+ * **There is no `POST /v1/credentials` endpoint on the cloud auth-worker DO.**
12
+ * Phase A's design doc (`docs/architecture/cloud-only-vault.md` §3 — "the
13
+ * bearer IS the credential") makes the explicit choice that the cloud vault
14
+ * does not accept already-minted OAuth tokens over HTTP. The only way a
15
+ * credential lands in the DO is via the worker's own OAuth-callback handler
16
+ * after the operator completes the Anthropic device-code dance.
17
+ *
18
+ * So "migrate" here does NOT mean "POST tokens into the cloud DO" (phase-b-
19
+ * tasks.md B3's wording is shorthand). It means: **for each local account,
20
+ * re-run the OAuth-start flow against the cloud auth-worker so the operator
21
+ * re-authenticates that Anthropic account, and the worker's callback stores
22
+ * the resulting token server-side.**
23
+ *
24
+ * The local OAuth token bytes themselves are never sent anywhere — they
25
+ * remain in `~/.olam/auth-data/accounts.json` until the operator approves
26
+ * the final timestamped rename. Local file is NEVER deleted automatically.
27
+ *
28
+ * ───────────────────────────────────────────────────────────────────────────
29
+ * IDEMPOTENCE MODEL
30
+ * ───────────────────────────────────────────────────────────────────────────
31
+ *
32
+ * Per-account migration state lives in `~/.olam/auth-data/migration-state.json`:
33
+ *
34
+ * {
35
+ * "version": 1,
36
+ * "migrated": {
37
+ * "<sha256(stable-content-shape)>": {
38
+ * "migratedAt": "2026-05-29T...Z",
39
+ * "email": "alice@example.com",
40
+ * "provider": "claude"
41
+ * },
42
+ * ...
43
+ * }
44
+ * }
45
+ *
46
+ * The hash is computed from a STABLE JSON shape (`{email, provider,
47
+ * anthropicAccountId}`) — re-running migrate after the local vault changes
48
+ * picks up new accounts but skips already-migrated ones. Atomic write
49
+ * (write-to-tmp then rename) guarantees that a mid-flight kill resumes
50
+ * cleanly: any account whose state record is durable on disk is skipped;
51
+ * the rest are re-attempted.
52
+ *
53
+ * ───────────────────────────────────────────────────────────────────────────
54
+ * CLI SURFACE
55
+ * ───────────────────────────────────────────────────────────────────────────
56
+ *
57
+ * olam auth migrate # default: interactive live-run
58
+ * olam auth migrate --dry-run # print the per-account plan only
59
+ * olam auth migrate --remote <url> # override auth-worker URL
60
+ * olam auth migrate --yes # CI safety; only valid w/ --dry-run
61
+ */
62
+ import * as fs from 'node:fs';
63
+ import * as os from 'node:os';
64
+ import * as path from 'node:path';
65
+ import * as crypto from 'node:crypto';
66
+ import * as readline from 'node:readline/promises';
67
+ import pc from 'picocolors';
68
+ import { requireBackend, ConflictingBackendFlags, } from '../lib/auth-backend.js';
69
+ import { resolveRemoteUrl, DEFAULT_AUTH_WORKER_URL } from '../lib/auth-login.js';
70
+ import { printError, printHeader, printSuccess } from '../output.js';
71
+ // ── Path helpers ────────────────────────────────────────────────────────────
72
+ function defaultAccountsPath() {
73
+ return path.join(os.homedir(), '.olam', 'auth-data', 'accounts.json');
74
+ }
75
+ function defaultStatePath() {
76
+ return path.join(os.homedir(), '.olam', 'auth-data', 'migration-state.json');
77
+ }
78
+ // ── Hash + state IO ─────────────────────────────────────────────────────────
79
+ /**
80
+ * Stable content hash for an account. Two accounts with identical
81
+ * (email, provider, anthropicAccountId) tuples produce the same hash —
82
+ * the operator deleting + re-adding the same Anthropic account locally
83
+ * still resolves to "already migrated" on the cloud side. Tests rely on
84
+ * this invariant being stable (no random salt, no time component).
85
+ */
86
+ export function accountContentHash(account) {
87
+ const stable = JSON.stringify({
88
+ email: account.email,
89
+ provider: account.provider,
90
+ anthropicAccountId: account.anthropicAccountId ?? null,
91
+ });
92
+ return crypto.createHash('sha256').update(stable).digest('hex');
93
+ }
94
+ /** Empty initial migration state (version 1). */
95
+ export function emptyMigrationState() {
96
+ return { version: 1, migrated: {} };
97
+ }
98
+ /**
99
+ * Read + parse migration-state.json. Returns `emptyMigrationState()` when
100
+ * the file is absent (first-ever migrate run). Throws on parse-failure or
101
+ * version drift so the caller can exit 1 with a manual-inspection message.
102
+ */
103
+ export function readMigrationState(statePath, deps) {
104
+ const existsSync = deps.existsSync ?? fs.existsSync;
105
+ const readFileSync = deps.readFileSync ?? ((p) => fs.readFileSync(p, 'utf-8'));
106
+ if (!existsSync(statePath))
107
+ return emptyMigrationState();
108
+ const raw = readFileSync(statePath);
109
+ let parsed;
110
+ try {
111
+ parsed = JSON.parse(raw);
112
+ }
113
+ catch {
114
+ throw new Error(`Migration state file is corrupt at ${statePath}. ` +
115
+ `Inspect manually or delete to restart migration.`);
116
+ }
117
+ if (typeof parsed !== 'object' ||
118
+ parsed === null ||
119
+ parsed.version !== 1 ||
120
+ typeof parsed.migrated !== 'object' ||
121
+ parsed.migrated === null) {
122
+ throw new Error(`Migration state file is corrupt at ${statePath}. ` +
123
+ `Inspect manually or delete to restart migration.`);
124
+ }
125
+ return parsed;
126
+ }
127
+ /**
128
+ * Atomically write migration state. Strategy: serialise to `<path>.tmp`,
129
+ * then `rename` over the live file. The rename is atomic on POSIX (and on
130
+ * NTFS via ReplaceFileEx semantics); a process kill between the .tmp write
131
+ * and the rename leaves the live file untouched.
132
+ *
133
+ * Throws on write or rename failure; caller is expected to surface the
134
+ * error and exit 1 without touching anything else.
135
+ */
136
+ export function writeMigrationStateAtomic(statePath, state, deps) {
137
+ const writeFileSync = deps.writeFileSync ?? ((p, d) => fs.writeFileSync(p, d, 'utf-8'));
138
+ const renameSync = deps.renameSync ?? fs.renameSync;
139
+ const tmpPath = `${statePath}.tmp`;
140
+ writeFileSync(tmpPath, JSON.stringify(state, null, 2) + '\n');
141
+ renameSync(tmpPath, statePath);
142
+ }
143
+ /**
144
+ * Read + parse the legacy local vault file. Returns `null` when absent
145
+ * (the "nothing to migrate" path). Throws on parse failure.
146
+ */
147
+ export function readLocalAccounts(accountsPath, deps) {
148
+ const existsSync = deps.existsSync ?? fs.existsSync;
149
+ const readFileSync = deps.readFileSync ?? ((p) => fs.readFileSync(p, 'utf-8'));
150
+ if (!existsSync(accountsPath))
151
+ return null;
152
+ const raw = readFileSync(accountsPath);
153
+ let parsed;
154
+ try {
155
+ parsed = JSON.parse(raw);
156
+ }
157
+ catch (err) {
158
+ const msg = err instanceof Error ? err.message : String(err);
159
+ throw new Error(`Failed to parse ${accountsPath}: ${msg}`);
160
+ }
161
+ if (typeof parsed !== 'object' ||
162
+ parsed === null ||
163
+ !Array.isArray(parsed.accounts)) {
164
+ throw new Error(`Malformed ${accountsPath}: expected { accounts: LocalAccount[] }`);
165
+ }
166
+ for (const a of parsed.accounts) {
167
+ if (typeof a !== 'object' ||
168
+ a === null ||
169
+ typeof a.email !== 'string' ||
170
+ typeof a.provider !== 'string') {
171
+ throw new Error(`Malformed ${accountsPath}: each account must have string email + provider.`);
172
+ }
173
+ }
174
+ return parsed;
175
+ }
176
+ // ── Plan computation ────────────────────────────────────────────────────────
177
+ /**
178
+ * Pure planner — given the local accounts + the migration state, decide
179
+ * what each account's status is. No IO; trivial to unit-test.
180
+ */
181
+ export function planMigration(accounts, state) {
182
+ return accounts.map((account) => {
183
+ const hash = accountContentHash(account);
184
+ const existing = state.migrated[hash];
185
+ if (existing) {
186
+ return { account, hash, status: 'already-migrated', migratedRecord: existing };
187
+ }
188
+ return { account, hash, status: 'pending' };
189
+ });
190
+ }
191
+ // ── Rendering ───────────────────────────────────────────────────────────────
192
+ function renderPlanTable(plan, remoteUrl) {
193
+ const lines = [];
194
+ lines.push(`Local vault accounts (${plan.length}):`);
195
+ for (let i = 0; i < plan.length; i += 1) {
196
+ const p = plan[i];
197
+ const idx = String(i + 1).padStart(2, ' ');
198
+ const emailPad = p.account.email.padEnd(34);
199
+ const provider = `(${p.account.provider})`.padEnd(10);
200
+ if (p.status === 'already-migrated') {
201
+ const recorded = p.migratedRecord?.migratedAt ?? 'unknown';
202
+ lines.push(` [${idx}] ${emailPad} ${provider} status: ALREADY MIGRATED (recorded ${recorded})`);
203
+ }
204
+ else {
205
+ lines.push(` [${idx}] ${emailPad} ${provider} status: pending hash: ${p.hash.slice(0, 12)}...`);
206
+ }
207
+ }
208
+ const pending = plan.filter((p) => p.status === 'pending').length;
209
+ const migrated = plan.length - pending;
210
+ lines.push('');
211
+ if (pending === 0) {
212
+ lines.push(`All ${migrated} account(s) already migrated to ${remoteUrl}. Nothing to do.`);
213
+ }
214
+ else {
215
+ lines.push(`Migration plan: ${pending} account(s) will be re-OAuth'd against ${remoteUrl}.`);
216
+ }
217
+ return lines.join('\n') + '\n';
218
+ }
219
+ // ── Default deps for production IO ──────────────────────────────────────────
220
+ function defaultIsTty() {
221
+ return Boolean(process.stdin.isTTY);
222
+ }
223
+ async function defaultPromptLine(question) {
224
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
225
+ try {
226
+ const answer = await rl.question(question);
227
+ return answer.trim();
228
+ }
229
+ finally {
230
+ rl.close();
231
+ }
232
+ }
233
+ // ── Core orchestration — the testable entry point ───────────────────────────
234
+ /**
235
+ * Run the `olam auth migrate` decision tree. Every IO touchpoint is funnelled
236
+ * through `AuthMigrateDeps` so tests assert on orchestration without spawning
237
+ * real OAuth round-trips, filesystem writes, or readline reads.
238
+ */
239
+ export async function runAuthMigrate(opts, deps = {}) {
240
+ const stdout = deps.stdout ?? process.stdout;
241
+ const stderr = deps.stderr ?? process.stderr;
242
+ const now = deps.now ?? (() => new Date().toISOString());
243
+ const accountsPath = deps.accountsPath ?? defaultAccountsPath();
244
+ const statePath = deps.statePath ?? defaultStatePath();
245
+ // (0) Safety: --yes only meaningful with --dry-run.
246
+ if (opts.yes === true && opts.dryRun !== true) {
247
+ stderr.write('error: --yes is only valid with --dry-run ' +
248
+ '(interactive browser is required for real migrations).\n');
249
+ return { exitCode: 1 };
250
+ }
251
+ // (1) Backend resolution (gives us the remote-URL hint).
252
+ let resolution;
253
+ try {
254
+ resolution = requireBackend({ local: opts.local, remote: opts.remote });
255
+ }
256
+ catch (err) {
257
+ if (err instanceof ConflictingBackendFlags) {
258
+ stderr.write(`error: ${err.message}\n`);
259
+ return { exitCode: 1 };
260
+ }
261
+ throw err;
262
+ }
263
+ // `--local` makes no sense for migrate (migrate's whole purpose is to move
264
+ // to remote). Treat the explicit --local opt-out as a user error.
265
+ if (resolution.backend === 'local' && opts.local === true) {
266
+ stderr.write('error: --local is incompatible with `olam auth migrate` ' +
267
+ '(migrate exists to move local vault → cloud auth-worker).\n');
268
+ return { exitCode: 1 };
269
+ }
270
+ const remoteUrl = resolveRemoteUrl(resolution, {
271
+ readEnv: deps.readEnv,
272
+ readAuthWorkerUrlFile: deps.readAuthWorkerUrlFile,
273
+ });
274
+ // (2) Read the local vault. Empty / absent → exit 0 cleanly.
275
+ let vault;
276
+ try {
277
+ vault = readLocalAccounts(accountsPath, deps);
278
+ }
279
+ catch (err) {
280
+ stderr.write(`error: ${err instanceof Error ? err.message : String(err)}\n`);
281
+ return { exitCode: 1 };
282
+ }
283
+ if (vault === null || vault.accounts.length === 0) {
284
+ stdout.write('No local vault found; nothing to migrate.\n');
285
+ return { exitCode: 0, accountsTotal: 0 };
286
+ }
287
+ // (3) Read the migration state. Corrupt → exit 1.
288
+ let state;
289
+ try {
290
+ state = readMigrationState(statePath, deps);
291
+ }
292
+ catch (err) {
293
+ stderr.write(`error: ${err instanceof Error ? err.message : String(err)}\n`);
294
+ return { exitCode: 1 };
295
+ }
296
+ // (4) Compute the plan.
297
+ const plan = planMigration(vault.accounts, state);
298
+ const pending = plan.filter((p) => p.status === 'pending');
299
+ const alreadyMigrated = plan.length - pending.length;
300
+ // (5) --dry-run branch.
301
+ if (opts.dryRun === true) {
302
+ stdout.write(renderPlanTable(plan, remoteUrl));
303
+ if (pending.length > 0) {
304
+ stdout.write('Re-run without --dry-run to begin.\n');
305
+ }
306
+ return {
307
+ exitCode: 0,
308
+ accountsTotal: plan.length,
309
+ accountsAlreadyMigrated: alreadyMigrated,
310
+ accountsMigratedNow: 0,
311
+ accountsSkipped: 0,
312
+ dryRun: true,
313
+ resolvedRemoteUrl: remoteUrl,
314
+ };
315
+ }
316
+ // (6) Live-run requires a TTY (operator must complete the browser flow).
317
+ const isTty = (deps.isTty ?? defaultIsTty)();
318
+ if (!isTty) {
319
+ stderr.write('error: `olam auth migrate` requires an interactive terminal.\n');
320
+ return { exitCode: 1 };
321
+ }
322
+ stdout.write(renderPlanTable(plan, remoteUrl));
323
+ if (pending.length === 0) {
324
+ return {
325
+ exitCode: 0,
326
+ accountsTotal: plan.length,
327
+ accountsAlreadyMigrated: alreadyMigrated,
328
+ accountsMigratedNow: 0,
329
+ accountsSkipped: 0,
330
+ dryRun: false,
331
+ resolvedRemoteUrl: remoteUrl,
332
+ };
333
+ }
334
+ // (7) Per-account live-run loop.
335
+ let migratedNow = 0;
336
+ let skipped = 0;
337
+ let currentState = state;
338
+ const promptPerAccount = deps.promptPerAccount ?? defaultPromptLine;
339
+ for (const entry of pending) {
340
+ stdout.write(`\nMigrating ${entry.account.email} (${entry.account.provider})...\n`);
341
+ const startUrl = `${remoteUrl.replace(/\/+$/, '')}/v1/oauth/start?label=${encodeURIComponent(entry.account.email)}`;
342
+ stdout.write(` Open: ${startUrl}\n`);
343
+ const ans = (await promptPerAccount(` Press Enter when login succeeds in browser. (s = skip, q = abort): `))
344
+ .trim()
345
+ .toLowerCase();
346
+ if (ans === 'q' || ans === 'quit' || ans === 'abort') {
347
+ stderr.write('Migration aborted by operator. Partial state saved; safe to re-run.\n');
348
+ return {
349
+ exitCode: 1,
350
+ accountsTotal: plan.length,
351
+ accountsAlreadyMigrated: alreadyMigrated,
352
+ accountsMigratedNow: migratedNow,
353
+ accountsSkipped: skipped,
354
+ dryRun: false,
355
+ resolvedRemoteUrl: remoteUrl,
356
+ };
357
+ }
358
+ if (ans === 's' || ans === 'skip') {
359
+ stdout.write(` Skipped ${entry.account.email}.\n`);
360
+ skipped += 1;
361
+ continue;
362
+ }
363
+ // Confirm + record. Build the next state immutably so a writeFileSync
364
+ // exception (atomic-write failure) does not pollute the in-memory state.
365
+ const record = {
366
+ migratedAt: now(),
367
+ email: entry.account.email,
368
+ provider: entry.account.provider,
369
+ };
370
+ const nextState = {
371
+ version: 1,
372
+ migrated: { ...currentState.migrated, [entry.hash]: record },
373
+ };
374
+ try {
375
+ writeMigrationStateAtomic(statePath, nextState, deps);
376
+ }
377
+ catch (err) {
378
+ stderr.write(`error: failed to persist migration state: ` +
379
+ `${err instanceof Error ? err.message : String(err)}\n`);
380
+ return {
381
+ exitCode: 1,
382
+ accountsTotal: plan.length,
383
+ accountsAlreadyMigrated: alreadyMigrated,
384
+ accountsMigratedNow: migratedNow,
385
+ accountsSkipped: skipped,
386
+ dryRun: false,
387
+ resolvedRemoteUrl: remoteUrl,
388
+ };
389
+ }
390
+ currentState = nextState;
391
+ migratedNow += 1;
392
+ stdout.write(` Recorded ${entry.account.email} as migrated.\n`);
393
+ }
394
+ // (8) Final rename prompt — only when ALL accounts were migrated.
395
+ if (skipped === 0 && migratedNow === pending.length) {
396
+ const ts = now().replace(/[:.]/g, '-');
397
+ const backupPath = `${accountsPath}.migrated-${ts}.bak`;
398
+ const promptFinalRename = deps.promptFinalRename ?? defaultPromptLine;
399
+ const ans = (await promptFinalRename(`\nAll accounts migrated. Rename ${accountsPath} -> ${backupPath}? [y/N] `))
400
+ .trim()
401
+ .toLowerCase();
402
+ if (ans === 'y' || ans === 'yes') {
403
+ const renameSync = deps.renameSync ?? fs.renameSync;
404
+ try {
405
+ renameSync(accountsPath, backupPath);
406
+ stdout.write(`Local vault renamed to ${backupPath}.\n`);
407
+ }
408
+ catch (err) {
409
+ stderr.write(`warning: rename failed: ${err instanceof Error ? err.message : String(err)}. ` +
410
+ `Migration state is intact; rename ${accountsPath} manually when ready.\n`);
411
+ }
412
+ }
413
+ else {
414
+ stdout.write('Local vault left in place. Use OLAM_CREDENTIAL_BACKEND=local to ' +
415
+ 'keep using it, or rename manually when ready.\n');
416
+ }
417
+ }
418
+ else {
419
+ stdout.write(`\n${migratedNow} migrated, ${skipped} skipped. Re-run to handle skipped accounts.\n`);
420
+ }
421
+ return {
422
+ exitCode: 0,
423
+ accountsTotal: plan.length,
424
+ accountsAlreadyMigrated: alreadyMigrated,
425
+ accountsMigratedNow: migratedNow,
426
+ accountsSkipped: skipped,
427
+ dryRun: false,
428
+ resolvedRemoteUrl: remoteUrl,
429
+ };
430
+ }
431
+ // ── Commander registration ──────────────────────────────────────────────────
432
+ /**
433
+ * Register `olam auth migrate` on the supplied `auth` subcommand. Called
434
+ * from `packages/cli/src/commands/auth.ts`.
435
+ */
436
+ export function registerAuthMigrate(auth) {
437
+ auth
438
+ .command('migrate')
439
+ .description('Migrate local ~/.olam/auth-data/accounts.json to the cloud auth-worker. ' +
440
+ 'Each local account is re-OAuth\'d against the cloud worker; local file ' +
441
+ 'is preserved until operator approves the timestamped rename. Idempotent ' +
442
+ 'on re-run via content-hash state in migration-state.json. ' +
443
+ '(Design note: cloud DO has no POST /v1/credentials; migration = per-account re-OAuth.)')
444
+ .option('--dry-run', 'Print the migration plan without acting')
445
+ .option('--yes', 'Skip interactive prompts (only valid with --dry-run)')
446
+ .option('--remote <url>', 'Override auth-worker URL (defaults to canonical zone)')
447
+ .option('--local', '(Disallowed — migrate only makes sense going to remote)')
448
+ .action(async (opts) => {
449
+ const result = await runAuthMigrate(opts, {});
450
+ if (result.exitCode !== 0) {
451
+ process.exitCode = result.exitCode;
452
+ }
453
+ });
454
+ }
455
+ // Re-export for the deprecated stub in auth.ts so the redirect can call it.
456
+ export { DEFAULT_AUTH_WORKER_URL };
457
+ // Silence "unused import" lints when the symbols below are only used by
458
+ // downstream re-exports + Commander action wiring (TS strict mode).
459
+ export const _internal = {
460
+ printError,
461
+ printHeader,
462
+ printSuccess,
463
+ pc,
464
+ };
465
+ //# sourceMappingURL=auth-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-migrate.js","sourceRoot":"","sources":["../../src/commands/auth-migrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2qBnD"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+LzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmpBnD"}