@indigoai-us/hq-cloud 6.7.0 → 6.8.0

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 (40) hide show
  1. package/dist/bin/sync-runner.d.ts.map +1 -1
  2. package/dist/bin/sync-runner.js +33 -1
  3. package/dist/bin/sync-runner.js.map +1 -1
  4. package/dist/bin/sync-runner.test.js +73 -4
  5. package/dist/bin/sync-runner.test.js.map +1 -1
  6. package/dist/cli/reindex.d.ts +11 -0
  7. package/dist/cli/reindex.d.ts.map +1 -1
  8. package/dist/cli/reindex.js +1 -1
  9. package/dist/cli/reindex.js.map +1 -1
  10. package/dist/cli/reindex.test.js +5 -4
  11. package/dist/cli/reindex.test.js.map +1 -1
  12. package/dist/cli/rescue.d.ts +20 -0
  13. package/dist/cli/rescue.d.ts.map +1 -1
  14. package/dist/cli/rescue.js +36 -2
  15. package/dist/cli/rescue.js.map +1 -1
  16. package/dist/cli/rescue.test.js +38 -1
  17. package/dist/cli/rescue.test.js.map +1 -1
  18. package/dist/cognito-auth.d.ts +6 -1
  19. package/dist/cognito-auth.d.ts.map +1 -1
  20. package/dist/cognito-auth.js +22 -5
  21. package/dist/cognito-auth.js.map +1 -1
  22. package/dist/machine-auth.test.js +35 -2
  23. package/dist/machine-auth.test.js.map +1 -1
  24. package/dist/operation-lock.d.ts +81 -10
  25. package/dist/operation-lock.d.ts.map +1 -1
  26. package/dist/operation-lock.js +177 -27
  27. package/dist/operation-lock.js.map +1 -1
  28. package/dist/operation-lock.test.js +122 -11
  29. package/dist/operation-lock.test.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/bin/sync-runner.test.ts +83 -4
  32. package/src/bin/sync-runner.ts +39 -1
  33. package/src/cli/reindex.test.ts +5 -4
  34. package/src/cli/reindex.ts +12 -1
  35. package/src/cli/rescue.test.ts +43 -1
  36. package/src/cli/rescue.ts +48 -2
  37. package/src/cognito-auth.ts +30 -6
  38. package/src/machine-auth.test.ts +37 -2
  39. package/src/operation-lock.test.ts +147 -10
  40. package/src/operation-lock.ts +234 -26
@@ -1 +1 @@
1
- {"version":3,"file":"operation-lock.test.js","sourceRoot":"","sources":["../src/operation-lock.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operation-lock.test.js","sourceRoot":"","sources":["../src/operation-lock.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cloud",
3
- "version": "6.7.0",
3
+ "version": "6.8.0",
4
4
  "description": "HQ by Indigo cloud sync engine — bidirectional S3 sync for mobile access",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -3604,7 +3604,7 @@ describe("runRunnerWithLoop — operation lock", () => {
3604
3604
  return p;
3605
3605
  }
3606
3606
 
3607
- it("one-shot sync refuses fast (exit 17) when another op holds the root", async () => {
3607
+ it("one-shot sync refuses immediately (exit 17) with --lock-timeout 0 when another op holds the root", async () => {
3608
3608
  const lp = writeLiveHolder("rescue");
3609
3609
  const errs: string[] = [];
3610
3610
  const spy = vi
@@ -3614,12 +3614,21 @@ describe("runRunnerWithLoop — operation lock", () => {
3614
3614
  return true;
3615
3615
  });
3616
3616
 
3617
- // No --watch → one-shot. Refusal short-circuits BEFORE runRunner (so no
3618
- // network / auth is touched).
3619
- const code = await runRunnerWithLoop(["--companies", "--hq-root", HQ]);
3617
+ // No --watch → one-shot. `--lock-timeout 0` keeps the pre-wait
3618
+ // refuse-immediately behavior (the default is now to WAIT for the holder).
3619
+ // Refusal short-circuits BEFORE runRunner (so no network / auth is touched).
3620
+ const start = Date.now();
3621
+ const code = await runRunnerWithLoop([
3622
+ "--companies",
3623
+ "--hq-root",
3624
+ HQ,
3625
+ "--lock-timeout",
3626
+ "0",
3627
+ ]);
3620
3628
 
3621
3629
  spy.mockRestore();
3622
3630
  expect(code).toBe(OPERATION_LOCKED_EXIT);
3631
+ expect(Date.now() - start).toBeLessThan(1500); // did not wait
3623
3632
  expect(errs.join("")).toContain("rescue"); // names the holder
3624
3633
  // The holder's lock is left intact — we refused, we didn't take it over.
3625
3634
  const held = JSON.parse(fs.readFileSync(lp, "utf8"));
@@ -3627,6 +3636,76 @@ describe("runRunnerWithLoop — operation lock", () => {
3627
3636
  expect(held.command).toBe("rescue");
3628
3637
  });
3629
3638
 
3639
+ it("one-shot sync WAITS for a live holder (default), bounded by --lock-timeout, then refuses with exit 17", async () => {
3640
+ const lp = writeLiveHolder("rescue");
3641
+ const errs: string[] = [];
3642
+ const spy = vi
3643
+ .spyOn(process.stderr, "write")
3644
+ .mockImplementation((chunk: string | Uint8Array) => {
3645
+ errs.push(String(chunk));
3646
+ return true;
3647
+ });
3648
+
3649
+ // The holder never releases here; --lock-timeout 1 bounds the wait so the
3650
+ // runner waits ~1s, emits a single "Waiting for …" status line, then
3651
+ // refuses (exit 17) — proving the runner threads the flag through and
3652
+ // takes the wait path (rather than refusing instantly). It still never
3653
+ // enters runRunner, so no network/auth is touched.
3654
+ const start = Date.now();
3655
+ const code = await runRunnerWithLoop([
3656
+ "--companies",
3657
+ "--hq-root",
3658
+ HQ,
3659
+ "--lock-timeout",
3660
+ "1",
3661
+ ]);
3662
+ const elapsed = Date.now() - start;
3663
+
3664
+ spy.mockRestore();
3665
+ expect(code).toBe(OPERATION_LOCKED_EXIT);
3666
+ expect(elapsed).toBeGreaterThanOrEqual(800); // actually waited ~1s
3667
+ expect(errs.join("")).toContain("Waiting for"); // status line emitted once
3668
+ expect(errs.join("")).toContain("rescue"); // names the holder
3669
+ const held = JSON.parse(fs.readFileSync(lp, "utf8"));
3670
+ expect(held.pid).toBe(1); // holder untouched
3671
+ }, 20_000);
3672
+
3673
+ it("DEV-1772: one-shot waits out a SHORT-LIVED holder (reindex) then PROCEEDS to sync", async () => {
3674
+ // The exact reported scenario (feedback_28a1833f / DEV-1772): a frequent
3675
+ // ~1-min `reindex` briefly holds the lock; the instant-sync one-shot used
3676
+ // to exit 17 and silently die. Now it WAITS (default) and proceeds the
3677
+ // moment the short holder releases. We model the short holder with a
3678
+ // foreign live pid (1) whose lock file is removed shortly after, and inject
3679
+ // runPass so "proceeds → syncs" is observable without the network.
3680
+ writeLiveHolder("reindex");
3681
+ const errs: string[] = [];
3682
+ const spy = vi
3683
+ .spyOn(process.stderr, "write")
3684
+ .mockImplementation((chunk: string | Uint8Array) => {
3685
+ errs.push(String(chunk));
3686
+ return true;
3687
+ });
3688
+
3689
+ const runPass = vi.fn().mockResolvedValue(0);
3690
+ // The short-lived holder releases ~150ms in.
3691
+ setTimeout(() => fs.rmSync(lockPathFor(HQ), { force: true }), 150);
3692
+
3693
+ const code = await runRunnerWithLoop(
3694
+ ["--companies", "--hq-root", HQ],
3695
+ { runPass },
3696
+ );
3697
+
3698
+ spy.mockRestore();
3699
+ // It did NOT refuse/die — it waited then ran the sync pass exactly once.
3700
+ expect(code).toBe(0);
3701
+ expect(code).not.toBe(OPERATION_LOCKED_EXIT);
3702
+ expect(runPass).toHaveBeenCalledTimes(1);
3703
+ // A single "Waiting for …" status line named the short holder.
3704
+ const out = errs.join("");
3705
+ expect(out).toContain("Waiting for");
3706
+ expect(out).toContain("reindex");
3707
+ }, 20_000);
3708
+
3630
3709
  it("the watch runner is EXEMPT — runs despite a held lock and never takes it", async () => {
3631
3710
  const lp = writeLiveHolder("sync");
3632
3711
  const watcher = makeWatcherStub();
@@ -607,6 +607,13 @@ interface ParsedArgs {
607
607
  * mode (single-company runs never visit the personal target).
608
608
  */
609
609
  skipPersonal: boolean;
610
+ /**
611
+ * Bounded wait (seconds) for the per-root operation lock when another op is
612
+ * already running. `0` → refuse immediately (pre-wait behavior); omitted →
613
+ * inherit `HQ_OP_LOCK_TIMEOUT` / infinite wait. Only meaningful on the
614
+ * one-shot path (the `--watch` runner is lock-exempt).
615
+ */
616
+ lockTimeoutSec?: number;
610
617
  }
611
618
 
612
619
  function parseArgs(argv: string[]): ParsedArgs | { error: string } {
@@ -620,6 +627,7 @@ function parseArgs(argv: string[]): ParsedArgs | { error: string } {
620
627
  let pollRemoteMs: number | undefined;
621
628
  let skipPersonal = false;
622
629
  let eventPush = false;
630
+ let lockTimeoutSec: number | undefined;
623
631
 
624
632
  for (let i = 0; i < argv.length; i++) {
625
633
  const arg = argv[i];
@@ -693,6 +701,18 @@ function parseArgs(argv: string[]): ParsedArgs | { error: string } {
693
701
  // @getindigo.ai identities for the first release.
694
702
  eventPush = true;
695
703
  break;
704
+ case "--lock-timeout": {
705
+ const val = argv[++i];
706
+ if (!val) return { error: "--lock-timeout requires a value (seconds)" };
707
+ const n = Number(val);
708
+ if (!Number.isInteger(n) || n < 0) {
709
+ return {
710
+ error: `--lock-timeout must be a non-negative integer (seconds), got: ${val}`,
711
+ };
712
+ }
713
+ lockTimeoutSec = n;
714
+ break;
715
+ }
696
716
  default:
697
717
  return { error: `Unknown argument: ${arg}` };
698
718
  }
@@ -732,6 +752,7 @@ function parseArgs(argv: string[]): ParsedArgs | { error: string } {
732
752
  pollRemoteMs,
733
753
  skipPersonal,
734
754
  eventPush,
755
+ lockTimeoutSec,
735
756
  };
736
757
  }
737
758
 
@@ -1855,10 +1876,27 @@ export async function runRunnerWithLoop(
1855
1876
  // surfaces the parse error rather than us masking it with a lock failure.
1856
1877
  const parsed = parseArgs(argv);
1857
1878
  if ("error" in parsed) return runRunner(argv);
1879
+ // The actual sync pass — same seam the watch loop uses (deps.runPass),
1880
+ // so a test can assert "waits for a short-lived holder, THEN proceeds to
1881
+ // sync" without touching the network. Production passes `argv` to
1882
+ // runRunner exactly as before. Regression guard for DEV-1772
1883
+ // (feedback_28a1833f): instant-sync one-shots used to exit 17 and die on
1884
+ // a lock conflict with the ~1-min reindex hook; they now WAIT (default)
1885
+ // and proceed once the short holder releases.
1886
+ const runOnce = deps.runPass ?? ((passArgv: string[]) => runRunner(passArgv));
1858
1887
  try {
1859
- return await withOperationLock(parsed.hqRoot, "sync", () => runRunner(argv));
1888
+ return await withOperationLock(parsed.hqRoot, "sync", () => runOnce(argv), {
1889
+ timeoutSec: parsed.lockTimeoutSec,
1890
+ });
1860
1891
  } catch (err) {
1861
1892
  if (err instanceof OperationLockedError) {
1893
+ // The lock wait was BOUNDED and tripped (a holder never released
1894
+ // within --lock-timeout / HQ_OP_LOCK_TIMEOUT). Surface it loudly on
1895
+ // stderr and exit with the stable OPERATION_LOCKED_EXIT (17) so the
1896
+ // spawner (menubar) can recognize a lock conflict and SCHEDULE A
1897
+ // RETRY rather than treating it as a hard failure and silently giving
1898
+ // up (DEV-1772). With the default (no bound) we never reach here — the
1899
+ // one-shot waits indefinitely and proceeds.
1862
1900
  process.stderr.write(err.message + "\n");
1863
1901
  return OPERATION_LOCKED_EXIT;
1864
1902
  }
@@ -135,9 +135,10 @@ describe("reindex", () => {
135
135
 
136
136
  // ── operation lock (mutual exclusion with sync/rescue) ──────────────────
137
137
 
138
- it("refuses (OPERATION_LOCKED_EXIT) when another op holds this root's lock", () => {
139
- // A live holder in another process (pid 1) → reindex must refuse fast and
140
- // do no work.
138
+ it("refuses (OPERATION_LOCKED_EXIT) when another op holds this root's lock (lockTimeoutSec:0)", () => {
139
+ // A live holder in another process (pid 1) → with lockTimeoutSec:0 reindex
140
+ // refuses immediately and does no work. (The new default is to WAIT; the
141
+ // wait-then-acquire path is covered in operation-lock.test.ts.)
141
142
  const lp = lockPathFor(root);
142
143
  fs.mkdirSync(path.dirname(lp), { recursive: true });
143
144
  fs.writeFileSync(
@@ -145,7 +146,7 @@ describe("reindex", () => {
145
146
  JSON.stringify({ pid: 1, command: "sync", startedAt: new Date(0).toISOString(), hqRoot: root }),
146
147
  );
147
148
  const before = fs.existsSync(path.join(root, ".claude/skills"));
148
- const { status } = reindex({ repoRoot: root });
149
+ const { status } = reindex({ repoRoot: root, lockTimeoutSec: 0 });
149
150
  expect(status).toBe(OPERATION_LOCKED_EXIT);
150
151
  // It refused before doing any work (didn't create .claude/skills).
151
152
  expect(fs.existsSync(path.join(root, ".claude/skills"))).toBe(before);
@@ -35,6 +35,17 @@ export interface ReindexOptions {
35
35
  * exclusive with a running sync/rescue.
36
36
  */
37
37
  skipLock?: boolean;
38
+ /**
39
+ * Bounded wait (seconds) for the per-root operation lock when a sync/rescue
40
+ * is already running. `0` → refuse immediately; omitted → inherit
41
+ * `HQ_OP_LOCK_TIMEOUT` / infinite wait. Ignored when `skipLock` is set.
42
+ *
43
+ * NB: standalone `hq reindex` waits by default, which is what a human running
44
+ * it wants. The hq-core reindex HOOK (Stop / PostToolUse) should set a small
45
+ * `HQ_OP_LOCK_TIMEOUT` (or `0`) so a hook fired mid-sync never blocks the
46
+ * interactive agent indefinitely.
47
+ */
48
+ lockTimeoutSec?: number;
38
49
  }
39
50
 
40
51
  export interface ReindexResult {
@@ -151,7 +162,7 @@ export function reindex(opts: ReindexOptions = {}): ReindexResult {
151
162
  let opLock: LockHandle | null = null;
152
163
  if (!opts.skipLock) {
153
164
  try {
154
- opLock = acquireOperationLock(root, "reindex");
165
+ opLock = acquireOperationLock(root, "reindex", { timeoutSec: opts.lockTimeoutSec });
155
166
  } catch (err) {
156
167
  if (err instanceof OperationLockedError) {
157
168
  warn(err.message);
@@ -1,5 +1,47 @@
1
1
  import { describe, it, expect } from "vitest";
2
- import { buildRescueArgs } from "./rescue.js";
2
+ import { buildRescueArgs, extractLockTimeout } from "./rescue.js";
3
+
4
+ describe("extractLockTimeout", () => {
5
+ it("returns the explicit option untouched when extraArgs is empty/absent", () => {
6
+ expect(extractLockTimeout({ lockTimeoutSec: 5 })).toEqual({
7
+ lockTimeoutSec: 5,
8
+ cleanedExtraArgs: undefined,
9
+ });
10
+ expect(extractLockTimeout({ lockTimeoutSec: 5, extraArgs: [] })).toEqual({
11
+ lockTimeoutSec: 5,
12
+ cleanedExtraArgs: [],
13
+ });
14
+ });
15
+
16
+ it("pulls --lock-timeout <secs> out of extraArgs and strips it from the forwarded args", () => {
17
+ const r = extractLockTimeout({
18
+ extraArgs: ["--lock-timeout", "30", "--dry-run", "--yes"],
19
+ });
20
+ expect(r.lockTimeoutSec).toBe(30);
21
+ // The flag + its value never reach the rescue script.
22
+ expect(r.cleanedExtraArgs).toEqual(["--dry-run", "--yes"]);
23
+ });
24
+
25
+ it("honors --lock-timeout 0 (refuse immediately)", () => {
26
+ const r = extractLockTimeout({ extraArgs: ["--lock-timeout", "0"] });
27
+ expect(r.lockTimeoutSec).toBe(0);
28
+ expect(r.cleanedExtraArgs).toEqual([]);
29
+ });
30
+
31
+ it("explicit option wins over a flag in extraArgs", () => {
32
+ const r = extractLockTimeout({
33
+ lockTimeoutSec: 0,
34
+ extraArgs: ["--lock-timeout", "60"],
35
+ });
36
+ expect(r.lockTimeoutSec).toBe(0);
37
+ expect(r.cleanedExtraArgs).toEqual([]);
38
+ });
39
+
40
+ it("ignores a non-numeric / negative --lock-timeout value (treated as unset)", () => {
41
+ expect(extractLockTimeout({ extraArgs: ["--lock-timeout", "abc"] }).lockTimeoutSec).toBeUndefined();
42
+ expect(extractLockTimeout({ extraArgs: ["--lock-timeout", "-3"] }).lockTimeoutSec).toBeUndefined();
43
+ });
44
+ });
3
45
 
4
46
  describe("buildRescueArgs", () => {
5
47
  it("emits no args for an empty option set (script defaults apply)", () => {
package/src/cli/rescue.ts CHANGED
@@ -57,10 +57,52 @@ export interface RescueOptions {
57
57
  /** GitHub token forwarded to the script as `GH_TOKEN` (avoids the
58
58
  * anonymous-clone rate limit; required for private sources). */
59
59
  ghToken?: string;
60
+ /**
61
+ * Bounded wait (seconds) for the per-root operation lock when a sync/reindex
62
+ * is already running. `0` → refuse immediately; omitted → inherit
63
+ * `HQ_OP_LOCK_TIMEOUT` / infinite wait. Also accepted as `--lock-timeout
64
+ * <secs>` inside {@link extraArgs} (the machine `hq-rescue` entrypoint
65
+ * forwards raw argv) — it is consumed here and never passed to the rescue
66
+ * script, which doesn't understand it.
67
+ */
68
+ lockTimeoutSec?: number;
60
69
  /** Escape hatch — additional raw args appended verbatim. */
61
70
  extraArgs?: string[];
62
71
  }
63
72
 
73
+ /**
74
+ * Pull `--lock-timeout <secs>` out of `extraArgs` (the raw argv the machine
75
+ * `hq-rescue` entrypoint forwards) so it controls the operation-lock wait
76
+ * instead of leaking to the rescue script. Returns the resolved timeout
77
+ * (explicit `opts.lockTimeoutSec` wins) and a copy of extraArgs with the flag
78
+ * removed.
79
+ */
80
+ export function extractLockTimeout(opts: RescueOptions): {
81
+ lockTimeoutSec: number | undefined;
82
+ cleanedExtraArgs: string[] | undefined;
83
+ } {
84
+ const raw = opts.extraArgs;
85
+ if (!raw || raw.length === 0) {
86
+ return { lockTimeoutSec: opts.lockTimeoutSec, cleanedExtraArgs: raw };
87
+ }
88
+ const cleaned: string[] = [];
89
+ let fromArgs: number | undefined;
90
+ for (let i = 0; i < raw.length; i++) {
91
+ if (raw[i] === "--lock-timeout") {
92
+ const val = Number(raw[i + 1]);
93
+ if (Number.isInteger(val) && val >= 0) fromArgs = val;
94
+ i++; // skip the value too
95
+ continue;
96
+ }
97
+ cleaned.push(raw[i]);
98
+ }
99
+ // Explicit option beats the parsed flag.
100
+ return {
101
+ lockTimeoutSec: opts.lockTimeoutSec ?? fromArgs,
102
+ cleanedExtraArgs: cleaned,
103
+ };
104
+ }
105
+
64
106
  export interface RescueResult {
65
107
  /** Exit status of the underlying script (0 = success). */
66
108
  status: number;
@@ -100,9 +142,13 @@ export function rescue(opts: RescueOptions = {}): RescueResult {
100
142
  // lock on the same root the rescue script resolves (cwd when --hq-root is
101
143
  // omitted). Rescue is never the exempt push watcher, so it always locks.
102
144
  const lockRoot = opts.hqRoot ?? process.cwd();
145
+ // Consume --lock-timeout from extraArgs (machine entrypoint) before it can
146
+ // reach the rescue script, which doesn't understand it.
147
+ const { lockTimeoutSec, cleanedExtraArgs } = extractLockTimeout(opts);
148
+ const rescueOpts: RescueOptions = { ...opts, extraArgs: cleanedExtraArgs };
103
149
  let handle;
104
150
  try {
105
- handle = acquireOperationLock(lockRoot, "rescue");
151
+ handle = acquireOperationLock(lockRoot, "rescue", { timeoutSec: lockTimeoutSec });
106
152
  } catch (err) {
107
153
  if (err instanceof OperationLockedError) {
108
154
  process.stderr.write(err.message + "\n");
@@ -111,7 +157,7 @@ export function rescue(opts: RescueOptions = {}): RescueResult {
111
157
  throw err;
112
158
  }
113
159
  try {
114
- const args = buildRescueArgs(opts);
160
+ const args = buildRescueArgs(rescueOpts);
115
161
  const env: NodeJS.ProcessEnv = { ...process.env };
116
162
  if (opts.ghToken) env.GH_TOKEN = opts.ghToken;
117
163
  const { status } = runRescue(args, { env });
@@ -165,10 +165,15 @@ export function decodeAccessTokenClientId(accessToken: string): string | null {
165
165
  // token type each API actually validates.
166
166
 
167
167
  export interface MachineCreds {
168
- /** Cognito username, always "machine-agt_<ulid>". */
168
+ /** Cognito username (live boxes: "agt-<ulid>@agents.getindigo.ai"). */
169
169
  username: string;
170
170
  /** Long-lived machine secret (USER_PASSWORD_AUTH password). */
171
171
  secret: string;
172
+ /** App client to mint against — provisioned creds carry their own
173
+ * (USER_PASSWORD_AUTH must be enabled on it); falls back to config. */
174
+ clientId?: string;
175
+ /** Cognito region for the mint endpoint; falls back to config. */
176
+ region?: string;
172
177
  }
173
178
 
174
179
  /** Resolve the machine-creds file path (HQ_MACHINE_CREDS_FILE overrides). */
@@ -190,14 +195,25 @@ export function loadMachineCreds(): MachineCreds | null {
190
195
  const raw = JSON.parse(fs.readFileSync(file, "utf-8")) as {
191
196
  username?: unknown;
192
197
  secret?: unknown;
198
+ clientId?: unknown;
199
+ region?: unknown;
193
200
  };
201
+ // The creds FILE is the machine-identity signal — no username-shape
202
+ // gate. (6.7.0 required a "machine-" prefix, but live boxes are
203
+ // provisioned with "agt-<ulid>@agents.getindigo.ai", so detection
204
+ // never engaged on the first real agent box, 2026-06-12.)
194
205
  if (
195
206
  typeof raw.username === "string" &&
196
- raw.username.startsWith("machine-") &&
207
+ raw.username.length > 0 &&
197
208
  typeof raw.secret === "string" &&
198
209
  raw.secret.length > 0
199
210
  ) {
200
- return { username: raw.username, secret: raw.secret };
211
+ return {
212
+ username: raw.username,
213
+ secret: raw.secret,
214
+ clientId: typeof raw.clientId === "string" ? raw.clientId : undefined,
215
+ region: typeof raw.region === "string" ? raw.region : undefined,
216
+ };
201
217
  }
202
218
  return null;
203
219
  } catch {
@@ -238,8 +254,13 @@ export async function mintMachineTokens(
238
254
  `No machine credentials found at ${machineCredsFilePath()}`,
239
255
  );
240
256
  }
257
+ // Prefer the creds file's own clientId/region: provisioning pairs the
258
+ // machine user with an app client that has USER_PASSWORD_AUTH enabled,
259
+ // which the CLI's default (browser) client may not.
260
+ const region = machineCreds.region ?? config.region;
261
+ const clientId = machineCreds.clientId ?? config.clientId;
241
262
  const res = await fetch(
242
- `https://cognito-idp.${config.region}.amazonaws.com/`,
263
+ `https://cognito-idp.${region}.amazonaws.com/`,
243
264
  {
244
265
  method: "POST",
245
266
  headers: {
@@ -248,7 +269,7 @@ export async function mintMachineTokens(
248
269
  },
249
270
  body: JSON.stringify({
250
271
  AuthFlow: "USER_PASSWORD_AUTH",
251
- ClientId: config.clientId,
272
+ ClientId: clientId,
252
273
  AuthParameters: {
253
274
  USERNAME: machineCreds.username,
254
275
  PASSWORD: machineCreds.secret,
@@ -291,7 +312,10 @@ export async function getValidMachineTokens(
291
312
  const cached = loadCachedTokens();
292
313
  if (cached && !isExpiring(cached, 120)) {
293
314
  const cachedClientId = decodeAccessTokenClientId(cached.accessToken);
294
- if (cachedClientId === null || cachedClientId === config.clientId) {
315
+ // Compare against the client we'd actually mint with (creds-file
316
+ // clientId wins over config).
317
+ const expectedClientId = loadMachineCreds()?.clientId ?? config.clientId;
318
+ if (cachedClientId === null || cachedClientId === expectedClientId) {
295
319
  return cached;
296
320
  }
297
321
  }
@@ -112,6 +112,26 @@ describe("machine identity detection", () => {
112
112
  expect(loadMachineCreds()).toEqual({
113
113
  username: "machine-agt_01TEST",
114
114
  secret: "s3cret",
115
+ clientId: undefined,
116
+ region: undefined,
117
+ });
118
+ expect(isMachineIdentity()).toBe(true);
119
+ });
120
+
121
+ it("detects provisioned-shape creds (agt-<ulid>@agents domain + clientId/region)", async () => {
122
+ writeCreds({
123
+ username: "agt-01ktt1rjj6kqrhnhhst0k4vrgt@agents.getindigo.ai",
124
+ secret: "s3cret",
125
+ clientId: "agent-client-1",
126
+ region: "us-east-1",
127
+ userPoolId: "us-east-1_pool",
128
+ });
129
+ const { isMachineIdentity, loadMachineCreds } = await importModule();
130
+ expect(loadMachineCreds()).toEqual({
131
+ username: "agt-01ktt1rjj6kqrhnhhst0k4vrgt@agents.getindigo.ai",
132
+ secret: "s3cret",
133
+ clientId: "agent-client-1",
134
+ region: "us-east-1",
115
135
  });
116
136
  expect(isMachineIdentity()).toBe(true);
117
137
  });
@@ -128,9 +148,9 @@ describe("machine identity detection", () => {
128
148
  expect(loadMachineCreds()?.username).toBe("machine-agt_X");
129
149
  });
130
150
 
131
- it("rejects malformed creds (wrong username prefix, missing secret, bad JSON)", async () => {
151
+ it("rejects malformed creds (missing secret, empty username, bad JSON)", async () => {
132
152
  const { loadMachineCreds } = await importModule();
133
- writeCreds({ username: "stefan@example.com", secret: "x" });
153
+ writeCreds({ username: "", secret: "x" });
134
154
  expect(loadMachineCreds()).toBeNull();
135
155
  writeCreds({ username: "machine-agt_01TEST" });
136
156
  expect(loadMachineCreds()).toBeNull();
@@ -144,6 +164,21 @@ describe("machine identity detection", () => {
144
164
  // ---------------------------------------------------------------------------
145
165
 
146
166
  describe("mintMachineTokens", () => {
167
+ it("prefers the creds file's clientId/region over config (agent app client has USER_PASSWORD_AUTH)", async () => {
168
+ writeCreds({
169
+ username: "agt-01ktt1rjj6kqrhnhhst0k4vrgt@agents.getindigo.ai",
170
+ secret: "s3cret",
171
+ clientId: "agent-client-1",
172
+ region: "eu-west-1",
173
+ });
174
+ const { calls } = stubMintFetch();
175
+ const { mintMachineTokens } = await importModule();
176
+ await mintMachineTokens(CONFIG);
177
+ expect(calls[0].url).toBe("https://cognito-idp.eu-west-1.amazonaws.com/");
178
+ const body = JSON.parse(String(calls[0].init.body));
179
+ expect(body.ClientId).toBe("agent-client-1");
180
+ });
181
+
147
182
  it("mints via USER_PASSWORD_AUTH and caches both tokens with correct fields", async () => {
148
183
  writeCreds();
149
184
  const { calls } = stubMintFetch({ RefreshToken: "rt" });