@tokenfactory/acc-runner 0.37.4 → 0.38.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.
package/dist/config.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { RunnerRealtimeConfig } from "./types.js";
1
2
  export interface RunnerConfig {
2
3
  publicUrl: string;
3
4
  supabaseUrl: string;
@@ -65,7 +66,87 @@ export interface RunnerConfig {
65
66
  */
66
67
  selfUpdateOn426?: boolean;
67
68
  }
68
- export type ConfigSource = "env" | "file" | "default";
69
+ export type ConfigSource = "env" | "file" | "bootstrap" | "default";
70
+ /**
71
+ * RD-1 (BOOTSTRAP-CONFIG): the connection slice the device-code exchange
72
+ * returns and the CLI persists in its keychain session. Both StoredSession
73
+ * and DeviceCodeSuccess are structurally assignable to this, so callers pass
74
+ * either without a conversion step.
75
+ */
76
+ export interface BootstrapConfigInput {
77
+ supabase_url?: string | null;
78
+ anon_key?: string | null;
79
+ realtime_config?: RunnerRealtimeConfig | null;
80
+ }
81
+ /**
82
+ * RD-1: overlay the device-code bootstrap config onto a resolved RunnerConfig.
83
+ * Precedence for supabaseUrl / supabaseAnonKey (highest → lowest):
84
+ * 1. ACC_SUPABASE_URL / ACC_SUPABASE_ANON_KEY env override
85
+ * 2. bootstrap value from the exchange (the new primary path)
86
+ * 3. the DEPRECATED hard-coded default already baked into `cfg`
87
+ * `cfg.supabaseUrl` is already env-or-default from loadConfig(); this only
88
+ * lifts the bootstrap value above the default when no env override is set, so
89
+ * the env-wins invariant is preserved. A null / empty bootstrap is a no-op,
90
+ * which keeps env-token runners and pre-RD-1 sessions byte-identical.
91
+ */
92
+ export declare function applyBootstrapConfig(cfg: RunnerConfig, bootstrap: BootstrapConfigInput | null | undefined): RunnerConfig;
93
+ /**
94
+ * RD-1: resolve the source label of a Supabase config value given the
95
+ * available bootstrap. env override wins, then the device-code bootstrap,
96
+ * else the deprecated default. Used by `doctor` to annotate the resolved
97
+ * config and to decide whether to emit the deprecation warning.
98
+ */
99
+ export declare function supabaseConfigSource(bootstrap: BootstrapConfigInput | null | undefined, which: "url" | "anonKey"): ConfigSource;
100
+ /**
101
+ * CONC-1: runner concurrency resolution, shared by the
102
+ * `watch` loop (WatchState.concurrencyLimit / reservedReviewSlots) AND the
103
+ * register_runner caps payload (login.ts `runnerCapsWithRepos`). Publishing the
104
+ * resolved concurrency in caps lets the server's `runnerReviewSlots()` see the
105
+ * runner's REAL capacity instead of falling back to DEFAULT_RUNNER_SLOTS=2, and
106
+ * computing it in ONE helper guarantees the advertised number can never drift
107
+ * from the number the watch loop actually runs.
108
+ *
109
+ * These live in config.ts (not watch.ts) because login.ts must import them too,
110
+ * and watch.ts already imports from login.ts — a login→watch import would be a
111
+ * cycle. watch.ts re-exports `resolveConcurrencyLimit` /
112
+ * `resolveReservedReviewSlots` so existing test imports (`../src/watch.js`) keep
113
+ * resolving.
114
+ */
115
+ export declare const CONCURRENCY_ENV = "ACC_RUNNER_CONCURRENCY";
116
+ export declare const DEFAULT_CONCURRENCY_LIMIT = 5;
117
+ export declare const RESERVED_REVIEW_SLOT_ENV = "ACC_REVIEW_RESERVED_SLOT";
118
+ export declare const DEFAULT_RESERVED_REVIEW_SLOTS = 1;
119
+ /**
120
+ * Resolve ACC_RUNNER_CONCURRENCY. Parsed with Number.parseInt;
121
+ * blank/absent/non-numeric ⇒ DEFAULT_CONCURRENCY_LIMIT (5); numeric values
122
+ * clamp to 1..50. An explicit env value always wins over the default so
123
+ * machines with a set value are unaffected by the default change.
124
+ */
125
+ export declare function resolveConcurrencyLimit(raw: string | undefined | null): number;
126
+ /**
127
+ * REVFB (G1): resolve ACC_REVIEW_RESERVED_SLOT. Blank/absent ⇒ default; "0" ⇒
128
+ * disabled; negative/non-numeric ⇒ default (a typo must not starve reviews).
129
+ * Mirrors resolveReservedReviewSlots in api/_lib/review-retry.ts — the runner is
130
+ * a standalone package and must NOT import from api/_lib. // keep in sync
131
+ */
132
+ export declare function resolveReservedReviewSlots(raw: string | undefined | null): number;
133
+ /**
134
+ * CONC-1: the runner's effective concurrency, resolved from the environment.
135
+ * `concurrency` is the parallel-task ceiling; `reservedReviewSlots` is how many
136
+ * of those slots are held back for reviews. Both are advertised in the caps
137
+ * payload so the server can compute executor slots = concurrency − reserve
138
+ * without guessing (the server-side consumer is CONC-2's job).
139
+ */
140
+ export interface RunnerConcurrency {
141
+ concurrency: number;
142
+ reservedReviewSlots: number;
143
+ }
144
+ /**
145
+ * CONC-1: resolve the runner's effective concurrency ONCE from the environment.
146
+ * Both the register caps payload and the watch loop consume the SAME result so
147
+ * "what the runner advertises" and "what the runner runs" can never diverge.
148
+ */
149
+ export declare function resolveRunnerConcurrency(env?: NodeJS.ProcessEnv): RunnerConcurrency;
69
150
  /**
70
151
  * Canonical capability vocabulary, mirrored from
71
152
  * `api/_lib/capabilities.ts` and the CHECK constraint enforced by
@@ -167,7 +248,7 @@ export declare function loadConfig(): RunnerConfig;
167
248
  * Source of each resolved config value. Used by `doctor` to annotate
168
249
  * the resolved config with "(env)" / "(default)" labels.
169
250
  */
170
- export declare function configSources(): Record<keyof RunnerConfig, ConfigSource>;
251
+ export declare function configSources(bootstrap?: BootstrapConfigInput | null): Record<keyof RunnerConfig, ConfigSource>;
171
252
  /**
172
253
  * Kept for callers that still treat config-load failure as recoverable.
173
254
  * With defaults in place loadConfig() does not throw, so this returns
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA8EA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAMtD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,qFAQ/B,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAM7E;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,IAAI,gBAAgB,EAAE,CAQnC;AA8GD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CASlE;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,EAAE,CAOzD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAOlD;AAkBD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAC1C,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,OAAO,CAKT;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb;;sCAEkC;IAClC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC;;;4CAGwC;IACxC,aAAa,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;;;;yEAKqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA+ED;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,aAAa,GAAG,IAAI,CAkBlD;AA6BD,wBAAgB,UAAU,IAAI,YAAY,CA+CzC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,YAAY,EAAE,YAAY,CAAC,CAsCxE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAMtD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -63,13 +63,20 @@ import path from "node:path";
63
63
  import { fileURLToPath } from "node:url";
64
64
  // DEFAULT_ACC_PUBLIC_URL points to the working Vercel deployment (custom domain DNS is unresolved as of v0.42).
65
65
  const DEFAULT_ACC_PUBLIC_URL = "https://agent-control-center-sepia.vercel.app";
66
- // v0.30.0 (Gate-0 / parent-DB cutover): production now reads its own parent
66
+ // RD-1 (BOOTSTRAP-CONFIG, v0.38): the primary source of supabaseUrl /
67
+ // supabaseAnonKey is now the device-code exchange (persisted in the keychain
68
+ // session, applied via applyBootstrapConfig). The two constants below are a
69
+ // DEPRECATED last-resort fallback, retained for ONE version so runners logged
70
+ // in before RD-1 keep working until they re-login. `doctor` emits a loud
71
+ // deprecation warning (checkBootstrapConfig) whenever a value resolves to one
72
+ // of these defaults. They will be deleted in v0.39. An explicit
73
+ // ACC_SUPABASE_URL / ACC_SUPABASE_ANON_KEY env var still overrides everything.
74
+ //
75
+ // Background for the retained fallback value — production reads its parent
67
76
  // project `ctknjrtevjrzwpuojghx` (TechArch), not the shared staging branch
68
77
  // `qfevnwuybyygexkcbdfy`. Device-code tokens are signed with the parent's JWT
69
- // secret, so the CLI must talk to the parent or PostgREST rejects the token
70
- // ("No suitable key or wrong key type" against staging). The anon key below is
71
- // public (RLS-protected). Point ACC_SUPABASE_URL / ACC_SUPABASE_ANON_KEY at the
72
- // staging branch only for staging/dev runners.
78
+ // secret, so the CLI must talk to the parent or PostgREST rejects the token.
79
+ // The anon key below is public (RLS-protected).
73
80
  const DEFAULT_ACC_SUPABASE_URL = "https://ctknjrtevjrzwpuojghx.supabase.co";
74
81
  const DEFAULT_ACC_SUPABASE_ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImN0a25qcnRldmpyendwdW9qZ2h4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzYzMzU4NjUsImV4cCI6MjA5MTkxMTg2NX0.rOoyjvNK98DKWVgobolytKxF3M93tb6C076Lacc_DlQ";
75
82
  const DEFAULT_ACC_TARGET_REPO = "tokenfactory-pvt-ltd/TechArch";
@@ -77,6 +84,100 @@ const DEFAULT_ACC_INTEGRATION_BRANCH = "acc/integration";
77
84
  function envOrDefault(name, fallback) {
78
85
  return process.env[name]?.trim() || fallback;
79
86
  }
87
+ /**
88
+ * RD-1: overlay the device-code bootstrap config onto a resolved RunnerConfig.
89
+ * Precedence for supabaseUrl / supabaseAnonKey (highest → lowest):
90
+ * 1. ACC_SUPABASE_URL / ACC_SUPABASE_ANON_KEY env override
91
+ * 2. bootstrap value from the exchange (the new primary path)
92
+ * 3. the DEPRECATED hard-coded default already baked into `cfg`
93
+ * `cfg.supabaseUrl` is already env-or-default from loadConfig(); this only
94
+ * lifts the bootstrap value above the default when no env override is set, so
95
+ * the env-wins invariant is preserved. A null / empty bootstrap is a no-op,
96
+ * which keeps env-token runners and pre-RD-1 sessions byte-identical.
97
+ */
98
+ export function applyBootstrapConfig(cfg, bootstrap) {
99
+ const envUrl = process.env.ACC_SUPABASE_URL?.trim();
100
+ const envKey = process.env.ACC_SUPABASE_ANON_KEY?.trim();
101
+ const bootUrl = bootstrap?.supabase_url?.trim();
102
+ const bootKey = bootstrap?.anon_key?.trim();
103
+ return {
104
+ ...cfg,
105
+ supabaseUrl: envUrl ? cfg.supabaseUrl : bootUrl || cfg.supabaseUrl,
106
+ supabaseAnonKey: envKey ? cfg.supabaseAnonKey : bootKey || cfg.supabaseAnonKey,
107
+ };
108
+ }
109
+ /**
110
+ * RD-1: resolve the source label of a Supabase config value given the
111
+ * available bootstrap. env override wins, then the device-code bootstrap,
112
+ * else the deprecated default. Used by `doctor` to annotate the resolved
113
+ * config and to decide whether to emit the deprecation warning.
114
+ */
115
+ export function supabaseConfigSource(bootstrap, which) {
116
+ const envName = which === "url" ? "ACC_SUPABASE_URL" : "ACC_SUPABASE_ANON_KEY";
117
+ if (process.env[envName]?.trim())
118
+ return "env";
119
+ const bootVal = which === "url" ? bootstrap?.supabase_url : bootstrap?.anon_key;
120
+ if (bootVal?.trim())
121
+ return "bootstrap";
122
+ return "default";
123
+ }
124
+ /**
125
+ * CONC-1: runner concurrency resolution, shared by the
126
+ * `watch` loop (WatchState.concurrencyLimit / reservedReviewSlots) AND the
127
+ * register_runner caps payload (login.ts `runnerCapsWithRepos`). Publishing the
128
+ * resolved concurrency in caps lets the server's `runnerReviewSlots()` see the
129
+ * runner's REAL capacity instead of falling back to DEFAULT_RUNNER_SLOTS=2, and
130
+ * computing it in ONE helper guarantees the advertised number can never drift
131
+ * from the number the watch loop actually runs.
132
+ *
133
+ * These live in config.ts (not watch.ts) because login.ts must import them too,
134
+ * and watch.ts already imports from login.ts — a login→watch import would be a
135
+ * cycle. watch.ts re-exports `resolveConcurrencyLimit` /
136
+ * `resolveReservedReviewSlots` so existing test imports (`../src/watch.js`) keep
137
+ * resolving.
138
+ */
139
+ export const CONCURRENCY_ENV = "ACC_RUNNER_CONCURRENCY";
140
+ export const DEFAULT_CONCURRENCY_LIMIT = 5;
141
+ export const RESERVED_REVIEW_SLOT_ENV = "ACC_REVIEW_RESERVED_SLOT";
142
+ export const DEFAULT_RESERVED_REVIEW_SLOTS = 1;
143
+ /**
144
+ * Resolve ACC_RUNNER_CONCURRENCY. Parsed with Number.parseInt;
145
+ * blank/absent/non-numeric ⇒ DEFAULT_CONCURRENCY_LIMIT (5); numeric values
146
+ * clamp to 1..50. An explicit env value always wins over the default so
147
+ * machines with a set value are unaffected by the default change.
148
+ */
149
+ export function resolveConcurrencyLimit(raw) {
150
+ const parsed = Number.parseInt(raw ?? "", 10);
151
+ return Number.isNaN(parsed)
152
+ ? DEFAULT_CONCURRENCY_LIMIT
153
+ : Math.min(50, Math.max(1, parsed));
154
+ }
155
+ /**
156
+ * REVFB (G1): resolve ACC_REVIEW_RESERVED_SLOT. Blank/absent ⇒ default; "0" ⇒
157
+ * disabled; negative/non-numeric ⇒ default (a typo must not starve reviews).
158
+ * Mirrors resolveReservedReviewSlots in api/_lib/review-retry.ts — the runner is
159
+ * a standalone package and must NOT import from api/_lib. // keep in sync
160
+ */
161
+ export function resolveReservedReviewSlots(raw) {
162
+ const trimmed = (raw ?? "").trim();
163
+ if (!trimmed)
164
+ return DEFAULT_RESERVED_REVIEW_SLOTS;
165
+ const n = Number.parseInt(trimmed, 10);
166
+ if (!Number.isFinite(n) || n < 0)
167
+ return DEFAULT_RESERVED_REVIEW_SLOTS;
168
+ return n;
169
+ }
170
+ /**
171
+ * CONC-1: resolve the runner's effective concurrency ONCE from the environment.
172
+ * Both the register caps payload and the watch loop consume the SAME result so
173
+ * "what the runner advertises" and "what the runner runs" can never diverge.
174
+ */
175
+ export function resolveRunnerConcurrency(env = process.env) {
176
+ return {
177
+ concurrency: resolveConcurrencyLimit(env[CONCURRENCY_ENV]),
178
+ reservedReviewSlots: resolveReservedReviewSlots(env[RESERVED_REVIEW_SLOT_ENV]),
179
+ };
180
+ }
80
181
  /**
81
182
  * Canonical capability vocabulary, mirrored from
82
183
  * `api/_lib/capabilities.ts` and the CHECK constraint enforced by
@@ -458,7 +559,7 @@ export function loadConfig() {
458
559
  * Source of each resolved config value. Used by `doctor` to annotate
459
560
  * the resolved config with "(env)" / "(default)" labels.
460
561
  */
461
- export function configSources() {
562
+ export function configSources(bootstrap) {
462
563
  const src = (name) => process.env[name]?.trim() ? "env" : "default";
463
564
  const repoPathSrc = process.env.ACC_REPO_PATH?.trim()
464
565
  ? "env"
@@ -472,8 +573,10 @@ export function configSources() {
472
573
  : "default";
473
574
  return {
474
575
  publicUrl: src("ACC_PUBLIC_URL"),
475
- supabaseUrl: src("ACC_SUPABASE_URL"),
476
- supabaseAnonKey: src("ACC_SUPABASE_ANON_KEY"),
576
+ // RD-1: fold the bootstrap into the two Supabase sources so `doctor`
577
+ // can show "(bootstrap)" vs the DEPRECATED "(default)".
578
+ supabaseUrl: supabaseConfigSource(bootstrap, "url"),
579
+ supabaseAnonKey: supabaseConfigSource(bootstrap, "anonKey"),
477
580
  repoPath: repoPathSrc,
478
581
  targetRepo: src("ACC_TARGET_REPO"),
479
582
  integrationBranch: src("ACC_INTEGRATION_BRANCH"),
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/doctor.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type RunnerConfig } from "./config.js";
1
+ import { type BootstrapConfigInput, type RunnerConfig } from "./config.js";
2
2
  import { type NpmLatestDeps } from "./runtime/version-drift.js";
3
3
  export declare const LAUNCHD_LABEL = "com.tokenfactory.acc-runner";
4
4
  export declare function launchdPlistPath(): string;
@@ -68,6 +68,22 @@ export declare function detectCapableEngines(deps?: EngineDetectDeps): Promise<s
68
68
  * An already-expired token fails the check with a clear remediation.
69
69
  */
70
70
  export declare function checkEnvToken(): Promise<CheckOutcome>;
71
+ /**
72
+ * RD-1 (BOOTSTRAP-CONFIG): best-effort load of the persisted keychain / env
73
+ * session so the doctor can show WHERE the Supabase config resolved from and
74
+ * warn when it fell back to the deprecated built-in default. Never throws — a
75
+ * missing / unreadable session simply yields null (source resolves to env or
76
+ * the deprecated default).
77
+ */
78
+ export declare function loadBootstrapConfig(): Promise<BootstrapConfigInput | null>;
79
+ /**
80
+ * RD-1: surface the Supabase config source and loudly flag the deprecated
81
+ * hard-coded fallback. OK (quiet) when it came from the device-code bootstrap
82
+ * or an explicit env override; an advisory WARN when it resolved to the
83
+ * built-in default — that path is removed in the next version, so re-logging
84
+ * in (which fetches config from the control plane) is the fix.
85
+ */
86
+ export declare function checkBootstrapConfig(bootstrap: BootstrapConfigInput | null): Promise<CheckOutcome>;
71
87
  export interface SingletonCheckDeps {
72
88
  /** Injectable foreign-pid scanner for tests. Defaults to the real ps scan. */
73
89
  scan?: (selfPid: number) => Promise<number[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBjF,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAKpC,eAAO,MAAM,aAAa,gCAAgC,CAAC;AAC3D,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAYxD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAY5D,CAAC;AA0DF,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA2DD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CA+B9D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1C;AAED,wBAAsB,oBAAoB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWzF;AA0FD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,CA8D3D;AAuMD,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/C;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,YAAY,GAAG,IAAI,EACxB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA+CvB;AAQD,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,YAAY,CAAC,CA4BvB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,YAAY,GAAG,IAAI,GACvB,OAAO,CAAC,YAAY,CAAC,CAevB;AAED,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC/C;AAED,wBAAsB,gBAAgB,CACpC,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,YAAY,CAAC,CA6BvB;AAiGD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAiF1F;AAkED,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5C;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiBD,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkFhF"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,KAAK,oBAAoB,EAIzB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAKpC,eAAO,MAAM,aAAa,gCAAgC,CAAC;AAC3D,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAYxD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAY5D,CAAC;AAoEF,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA2DD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CA+B9D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1C;AAED,wBAAsB,oBAAoB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWzF;AA0FD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,CA8D3D;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAMhF;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,oBAAoB,GAAG,IAAI,GACrC,OAAO,CAAC,YAAY,CAAC,CAkBvB;AAuMD,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/C;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,YAAY,GAAG,IAAI,EACxB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA+CvB;AAQD,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,YAAY,CAAC,CA4BvB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,YAAY,GAAG,IAAI,GACvB,OAAO,CAAC,YAAY,CAAC,CAevB;AAED,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC/C;AAED,wBAAsB,gBAAgB,CACpC,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,YAAY,CAAC,CA6BvB;AAmGD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAmF1F;AAkED,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5C;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiBD,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuFhF"}
package/dist/doctor.js CHANGED
@@ -13,7 +13,7 @@ import { resolveAuthMode, describeAuthMode, authPrecedenceHint } from "./provide
13
13
  import { openaiApiKey, openaiApiKeyFromKeychain, describeCodexAuthMode, } from "./provider-auth.js";
14
14
  import { codexEngineEnabled, resolveCodexSpawnMode } from "./engines/codex.js";
15
15
  import { claudeCodeEngine } from "./engines/claude-code.js";
16
- import { configSources, loadConfigOrNull } from "./config.js";
16
+ import { applyBootstrapConfig, configSources, loadConfigOrNull, supabaseConfigSource, } from "./config.js";
17
17
  import { getTokenProvider, resolveTokenMode } from "./token-provider.js";
18
18
  import { cacheDir } from "./runtime/cache-dir.js";
19
19
  import { cloneCacheRoot, listCachedClones } from "./runtime/clone-cache.js";
@@ -64,8 +64,8 @@ function maskKey(s) {
64
64
  return "<short>";
65
65
  return `${s.slice(0, 4)}…${s.slice(-4)} (len ${s.length})`;
66
66
  }
67
- function formatConfig(cfg) {
68
- const src = configSources();
67
+ function formatConfig(cfg, bootstrap) {
68
+ const src = configSources(bootstrap);
69
69
  const lines = Object.keys(CONFIG_LABELS).map((k) => {
70
70
  // v0.41-B: worktreeRepoPath is optional at the config layer
71
71
  // (undefined means "use repoPath"). Render "<not set>" rather than
@@ -76,9 +76,16 @@ function formatConfig(cfg) {
76
76
  : raw === undefined
77
77
  ? "<not set>"
78
78
  : raw;
79
+ // RD-1: the two Supabase values can now resolve from the device-code
80
+ // bootstrap; a "(default)" for them is the DEPRECATED hard-coded path.
81
+ const isSupabase = k === "supabaseUrl" || k === "supabaseAnonKey";
79
82
  const tag = src[k] === "env"
80
83
  ? chalk.gray(`(env: ${ENV_NAMES[k]})`)
81
- : chalk.gray("(default)");
84
+ : src[k] === "bootstrap"
85
+ ? chalk.gray("(device-code bootstrap)")
86
+ : isSupabase
87
+ ? chalk.yellow("(default — DEPRECATED, run `acc-runner login`)")
88
+ : chalk.gray("(default)");
82
89
  return ` ${CONFIG_LABELS[k].padEnd(20, " ")}${value} ${tag}`;
83
90
  });
84
91
  return [chalk.bold("Config:"), ...lines].join("\n");
@@ -373,6 +380,47 @@ export async function checkEnvToken() {
373
380
  detail: `runner ${session.runner_id} (id: ${idSource}), ${refresh}, ${fleet}, expires ${session.access_expires_at}`,
374
381
  };
375
382
  }
383
+ /**
384
+ * RD-1 (BOOTSTRAP-CONFIG): best-effort load of the persisted keychain / env
385
+ * session so the doctor can show WHERE the Supabase config resolved from and
386
+ * warn when it fell back to the deprecated built-in default. Never throws — a
387
+ * missing / unreadable session simply yields null (source resolves to env or
388
+ * the deprecated default).
389
+ */
390
+ export async function loadBootstrapConfig() {
391
+ try {
392
+ return (await getTokenProvider().load()) ?? null;
393
+ }
394
+ catch {
395
+ return null;
396
+ }
397
+ }
398
+ /**
399
+ * RD-1: surface the Supabase config source and loudly flag the deprecated
400
+ * hard-coded fallback. OK (quiet) when it came from the device-code bootstrap
401
+ * or an explicit env override; an advisory WARN when it resolved to the
402
+ * built-in default — that path is removed in the next version, so re-logging
403
+ * in (which fetches config from the control plane) is the fix.
404
+ */
405
+ export async function checkBootstrapConfig(bootstrap) {
406
+ const name = "supabase config source";
407
+ const urlSource = supabaseConfigSource(bootstrap, "url");
408
+ const keySource = supabaseConfigSource(bootstrap, "anonKey");
409
+ if (urlSource === "default" || keySource === "default") {
410
+ return {
411
+ name,
412
+ ok: false,
413
+ warn: true,
414
+ detail: `url: ${urlSource}, anon_key: ${keySource} — using the built-in default (DEPRECATED)`,
415
+ fix: "Run `acc-runner login` to fetch Supabase config from the control plane (device-code bootstrap), or set ACC_SUPABASE_URL / ACC_SUPABASE_ANON_KEY. The hard-coded default is removed in the next version.",
416
+ };
417
+ }
418
+ return {
419
+ name,
420
+ ok: true,
421
+ detail: `url: ${urlSource}, anon_key: ${keySource}`,
422
+ };
423
+ }
376
424
  async function checkServer(publicUrl) {
377
425
  try {
378
426
  const res = await fetch(`${publicUrl.replace(/\/+$/, "")}/api/health`, {
@@ -735,7 +783,9 @@ async function checkRegistration() {
735
783
  };
736
784
  }
737
785
  try {
738
- const supabase = createRunnerClient(cfg, session.access_token);
786
+ // RD-1: target the project the session was bootstrapped against.
787
+ const hcfg = applyBootstrapConfig(cfg, session);
788
+ const supabase = createRunnerClient(hcfg, session.access_token, session.realtime_config);
739
789
  const { data, error } = await supabase
740
790
  .from("runners")
741
791
  .select("id,bound_user_id,status")
@@ -809,7 +859,9 @@ export async function checkRepoAssignments(cfg) {
809
859
  }
810
860
  let rows;
811
861
  try {
812
- const supabase = createRunnerClient(cfg, session.access_token);
862
+ // RD-1: target the project the session was bootstrapped against.
863
+ const hcfg = applyBootstrapConfig(cfg, session);
864
+ const supabase = createRunnerClient(hcfg, session.access_token, session.realtime_config);
813
865
  const { data, error } = await supabase
814
866
  .from("repo_machine_assignments")
815
867
  .select("repo, machine, enforced, active")
@@ -942,7 +994,11 @@ function format(outcome, strict = false) {
942
994
  return `${tag} ${outcome.name.padEnd(28, " ")} ${chalk.gray(outcome.detail)}${fix}`;
943
995
  }
944
996
  export async function doctorCommand(options = {}) {
945
- const cfg = loadConfigOrNull();
997
+ const rawCfg = loadConfigOrNull();
998
+ // RD-1: overlay the persisted device-code bootstrap so the displayed config
999
+ // and the Supabase-backed checks reflect the project the runner really uses.
1000
+ const bootstrap = await loadBootstrapConfig();
1001
+ const cfg = rawCfg ? applyBootstrapConfig(rawCfg, bootstrap) : rawCfg;
946
1002
  const checks = options.checks ?? [
947
1003
  checkNode,
948
1004
  checkClaude,
@@ -952,6 +1008,7 @@ export async function doctorCommand(options = {}) {
952
1008
  checkGit,
953
1009
  checkKeychain,
954
1010
  checkEnvToken,
1011
+ () => checkBootstrapConfig(bootstrap),
955
1012
  ...(cfg ? [() => checkServer(cfg.publicUrl)] : []),
956
1013
  ...(cfg ? [() => checkProtocolVersion(cfg.publicUrl)] : []),
957
1014
  checkRegistration,
@@ -970,7 +1027,7 @@ export async function doctorCommand(options = {}) {
970
1027
  ];
971
1028
  const strict = options.strict === true;
972
1029
  if (cfg && !options.checks) {
973
- console.log(formatConfig(cfg));
1030
+ console.log(formatConfig(cfg, bootstrap));
974
1031
  console.log("");
975
1032
  console.log(formatRuntime());
976
1033
  console.log("");