@artblocks/abx-cli 0.1.0-alpha.34 → 0.1.0-alpha.35

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/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @artblocks/abx-cli
2
2
 
3
+ ## 0.1.0-alpha.35
4
+
5
+ ### Minor Changes
6
+
7
+ - 4072f0c: Add `abx auth login`, an OAuth 2.0 Device Authorization Grant flow for first-party and named remote
8
+ services. Human email/OTP approval stays in the browser; the CLI polls according to RFC 8628 and
9
+ writes the resulting bearer key to a Git-ignored `.env` without printing it. The bundled ABX skill
10
+ now recommends this agent-safe flow and keeps manual signup only as a recovery path. The SDK's
11
+ service-descriptor documentation likewise distinguishes provider recovery URLs from standard OAuth
12
+ discovery.
13
+
14
+ ### Patch Changes
15
+
16
+ - 4072f0c: `deploy-code --dry-run` now treats a resolver-declared attached renderer as the owner of rendered stills and traits, without contradicting that managed path with local runner, backend, or `fs` warnings.
17
+
18
+ The managed lane now prints one truthful verification path instead of asking creators to stand up infrastructure the provider already supplies. Reported during the 2026-08-26 fresh onboarding test (feedback `5b7c3f10-e08f-4fb8-85de-ec509f4f33f6`).
19
+
20
+ - Updated dependencies [4072f0c]
21
+ - @artblocks/abx-sdk@0.1.0-alpha.27
22
+ - @artblocks/abx-indexer@0.1.0-alpha.28
23
+ - @artblocks/abx-storage@0.1.0-alpha.27
24
+ - @artblocks/abx-token-api@0.1.0-alpha.30
25
+
3
26
  ## 0.1.0-alpha.34
4
27
 
5
28
  ### Minor Changes
@@ -0,0 +1,21 @@
1
+ import { type Flags } from '../flags.js';
2
+ export interface DeviceLoginDeps {
3
+ fetchImpl?: typeof fetch;
4
+ sleep?: (ms: number) => Promise<void>;
5
+ now?: () => number;
6
+ openBrowser?: (url: string) => boolean;
7
+ line?: (message: string) => void;
8
+ warning?: (message: string) => void;
9
+ }
10
+ export interface DeviceLoginOptions {
11
+ baseUrl: string;
12
+ envVar: string;
13
+ envPath: string;
14
+ force?: boolean;
15
+ noOpen?: boolean;
16
+ }
17
+ /** Standards-only core, dependency-injected for a no-secret-output regression test. */
18
+ export declare function deviceLogin(options: DeviceLoginOptions, deps?: DeviceLoginDeps): Promise<void>;
19
+ export declare function cmdAuth(args: string[], flags: Flags): Promise<void>;
20
+ export declare const AUTH_HELP: string;
21
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,KAAK,EAAkB,MAAM,aAAa,CAAA;AA2BxD,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACxB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IACtC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AA0JD,uFAAuF;AACvF,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHxG;AAaD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBzE;AAED,eAAO,MAAM,SAAS,QAQwG,CAAA"}
@@ -0,0 +1,312 @@
1
+ import { execFileSync, spawn } from 'node:child_process';
2
+ import { existsSync, lstatSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
3
+ import { basename, dirname, resolve as resolvePath } from 'node:path';
4
+ import { randomBytes } from 'node:crypto';
5
+ import { parseEnvContent } from '@artblocks/abx-sdk/node';
6
+ import { positionalArgs } from '../flags.js';
7
+ import { ABX_SERVICES_API_KEY_VAR, resolveRemote } from '../remote.js';
8
+ import { bold, dim, g, info, ok } from '../output.js';
9
+ const DEVICE_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:device_code';
10
+ const DEVICE_CLIENT_ID = 'abx-cli';
11
+ function cleanBaseUrl(value) {
12
+ return value.replace(/\/+$/, '');
13
+ }
14
+ function safeDescription(value) {
15
+ return typeof value === 'string' ? value.replace(/[\r\n\t]+/g, ' ').slice(0, 240) : '';
16
+ }
17
+ async function jsonObject(response) {
18
+ const body = (await response.json().catch(() => null));
19
+ return body && typeof body === 'object' && !Array.isArray(body) ? body : {};
20
+ }
21
+ function oauthFailure(prefix, response, body, sensitiveValues = []) {
22
+ const code = safeDescription(body.error) || `HTTP ${response.status}`;
23
+ let detail = safeDescription(body.error_description);
24
+ for (const value of sensitiveValues)
25
+ if (value)
26
+ detail = detail.replaceAll(value, '[redacted]');
27
+ return new Error(`${prefix}: ${code}${detail ? ` — ${detail}` : ''}`);
28
+ }
29
+ function assertUrl(value, field) {
30
+ if (typeof value !== 'string')
31
+ throw new Error(`OAuth discovery omitted ${field}`);
32
+ const parsed = new URL(value);
33
+ if (parsed.username || parsed.password)
34
+ throw new Error(`OAuth discovery returned credentials in ${field}`);
35
+ if (parsed.protocol !== 'https:' && !(parsed.protocol === 'http:' && ['127.0.0.1', 'localhost'].includes(parsed.hostname))) {
36
+ throw new Error(`OAuth discovery returned an insecure ${field}; HTTPS is required outside localhost`);
37
+ }
38
+ return parsed.toString();
39
+ }
40
+ function discoverUrl(baseUrl) {
41
+ const parsed = new URL(cleanBaseUrl(baseUrl));
42
+ const issuerPath = parsed.pathname.replace(/\/+$/, '');
43
+ parsed.pathname = `/.well-known/oauth-authorization-server${issuerPath}`;
44
+ parsed.search = '';
45
+ parsed.hash = '';
46
+ return parsed.toString();
47
+ }
48
+ function defaultSleep(ms) {
49
+ return new Promise((resolve) => setTimeout(resolve, ms));
50
+ }
51
+ /** Best-effort only: the complete verification link is always printed, so headless and sandboxed
52
+ * agents still have a correct handoff when the OS refuses to launch a browser. */
53
+ function defaultOpenBrowser(url) {
54
+ if (process.env.CI)
55
+ return false;
56
+ try {
57
+ const command = process.platform === 'darwin'
58
+ ? { file: 'open', args: [url] }
59
+ : process.platform === 'win32'
60
+ ? { file: 'rundll32', args: ['url.dll,FileProtocolHandler', url] }
61
+ : { file: 'xdg-open', args: [url] };
62
+ const child = spawn(command.file, command.args, { detached: true, stdio: 'ignore' });
63
+ child.on('error', () => { });
64
+ child.unref();
65
+ return true;
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ function activeEnvLine(source, key) {
72
+ const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
73
+ return new RegExp(`^\\s*(?:export\\s+)?${escaped}\\s*=`, 'm').test(source);
74
+ }
75
+ function gitCheck(cwd, args) {
76
+ try {
77
+ execFileSync('git', args, { cwd, stdio: 'ignore' });
78
+ return true;
79
+ }
80
+ catch (error) {
81
+ const status = error.status;
82
+ return status === 1 || status === 128 ? false : null;
83
+ }
84
+ }
85
+ /** Refuse the two silent secret-exposure modes: replacing a tracked file, or creating an unignored
86
+ * .env inside a Git worktree. A non-Git directory is fine. */
87
+ function assertPrivateEnvPath(envPath) {
88
+ const cwd = dirname(envPath);
89
+ if (existsSync(envPath) && lstatSync(envPath).isSymbolicLink()) {
90
+ throw new Error(`refusing to store an API key through symbolic-link ${basename(envPath)}`);
91
+ }
92
+ if (!gitCheck(cwd, ['rev-parse', '--is-inside-work-tree']))
93
+ return;
94
+ if (gitCheck(cwd, ['ls-files', '--error-unmatch', '--', basename(envPath)])) {
95
+ throw new Error(`refusing to store an API key in tracked ${basename(envPath)} — remove it from Git history first`);
96
+ }
97
+ if (!gitCheck(cwd, ['check-ignore', '--quiet', '--', basename(envPath)])) {
98
+ throw new Error(`${basename(envPath)} is not Git-ignored. Add '${basename(envPath)}' to .gitignore, then run login again.`);
99
+ }
100
+ }
101
+ function saveEnvSecret(envPath, key, value) {
102
+ // RFC 6750 bearer-token grammar is safe to round-trip through the CLI's minimal .env parser.
103
+ // Reject anything broader instead of quoting a provider-controlled value incorrectly.
104
+ if (!/^[A-Z][A-Z0-9_]*$/.test(key) || !/^[A-Za-z0-9._~+/-]+={0,}$/.test(value)) {
105
+ throw new Error('the provider returned a credential that cannot be stored safely in an environment file');
106
+ }
107
+ const source = existsSync(envPath) ? readFileSync(envPath, 'utf8') : '';
108
+ const eol = source.includes('\r\n') ? '\r\n' : '\n';
109
+ const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
110
+ const lineRe = new RegExp(`^\\s*(?:export\\s+)?${escaped}\\s*=`);
111
+ const lines = source ? source.split(/\r?\n/) : [];
112
+ const next = [];
113
+ let replaced = false;
114
+ for (const line of lines) {
115
+ if (!lineRe.test(line)) {
116
+ next.push(line);
117
+ continue;
118
+ }
119
+ if (!replaced)
120
+ next.push(`${key}=${value}`);
121
+ replaced = true;
122
+ }
123
+ if (!replaced) {
124
+ if (next.length && next[next.length - 1] !== '')
125
+ next.push('');
126
+ next.push(`${key}=${value}`);
127
+ }
128
+ while (next[next.length - 1] === '')
129
+ next.pop();
130
+ const output = `${next.join(eol)}${eol}`;
131
+ const temp = resolvePath(dirname(envPath), `.${basename(envPath)}.${process.pid}.${randomBytes(6).toString('hex')}.tmp`);
132
+ try {
133
+ writeFileSync(temp, output, { encoding: 'utf8', mode: 0o600 });
134
+ renameSync(temp, envPath);
135
+ }
136
+ catch (error) {
137
+ if (existsSync(temp))
138
+ unlinkSync(temp);
139
+ throw error;
140
+ }
141
+ }
142
+ function assertLoginDestination(options) {
143
+ assertPrivateEnvPath(options.envPath);
144
+ const source = existsSync(options.envPath) ? readFileSync(options.envPath, 'utf8') : '';
145
+ const fileValue = parseEnvContent(source).entries.find(([key]) => key === options.envVar)?.[1];
146
+ if (activeEnvLine(source, options.envVar) && !options.force) {
147
+ throw new Error(`${options.envVar} already exists in ${basename(options.envPath)}; pass --force to replace it`);
148
+ }
149
+ if (process.env[options.envVar] !== undefined && process.env[options.envVar] !== fileValue) {
150
+ throw new Error(`${options.envVar} is already set outside ${basename(options.envPath)}. Unset it before login so it cannot shadow the newly issued key.`);
151
+ }
152
+ }
153
+ /** Standards-only core, dependency-injected for a no-secret-output regression test. */
154
+ export async function deviceLogin(options, deps = {}) {
155
+ assertLoginDestination(options);
156
+ const fetchImpl = deps.fetchImpl ?? fetch;
157
+ const sleep = deps.sleep ?? defaultSleep;
158
+ const now = deps.now ?? Date.now;
159
+ const openBrowser = deps.openBrowser ?? defaultOpenBrowser;
160
+ const line = deps.line ?? console.log;
161
+ const warning = deps.warning ?? console.warn;
162
+ const expectedIssuer = cleanBaseUrl(assertUrl(options.baseUrl, 'provider base URL'));
163
+ const metadataResponse = await fetchImpl(discoverUrl(expectedIssuer), {
164
+ headers: { accept: 'application/json' },
165
+ signal: AbortSignal.timeout(15_000)
166
+ });
167
+ const metadataBody = await jsonObject(metadataResponse);
168
+ if (!metadataResponse.ok)
169
+ throw oauthFailure('OAuth discovery failed', metadataResponse, metadataBody);
170
+ const metadata = metadataBody;
171
+ assertUrl(metadata.issuer, 'issuer');
172
+ if (metadata.issuer !== expectedIssuer) {
173
+ throw new Error(`OAuth issuer mismatch: expected ${expectedIssuer}, received ${safeDescription(metadata.issuer)}`);
174
+ }
175
+ if (!metadata.grant_types_supported?.includes(DEVICE_GRANT_TYPE)) {
176
+ throw new Error('the provider does not advertise the OAuth device authorization grant');
177
+ }
178
+ const deviceEndpoint = assertUrl(metadata.device_authorization_endpoint, 'device_authorization_endpoint');
179
+ const tokenEndpoint = assertUrl(metadata.token_endpoint, 'token_endpoint');
180
+ const startResponse = await fetchImpl(deviceEndpoint, {
181
+ method: 'POST',
182
+ headers: { 'content-type': 'application/x-www-form-urlencoded', accept: 'application/json' },
183
+ body: new URLSearchParams({ client_id: DEVICE_CLIENT_ID }),
184
+ signal: AbortSignal.timeout(15_000)
185
+ });
186
+ const startBody = await jsonObject(startResponse);
187
+ if (!startResponse.ok)
188
+ throw oauthFailure('device authorization failed', startResponse, startBody);
189
+ const grant = startBody;
190
+ if (typeof grant.device_code !== 'string' ||
191
+ typeof grant.user_code !== 'string' ||
192
+ typeof grant.expires_in !== 'number' ||
193
+ !Number.isFinite(grant.expires_in) ||
194
+ grant.expires_in <= 0) {
195
+ throw new Error('the provider returned an invalid device authorization response');
196
+ }
197
+ const verificationUrl = assertUrl(grant.verification_uri_complete ?? grant.verification_uri, 'verification_uri');
198
+ let pollSeconds = typeof grant.interval === 'number' && Number.isFinite(grant.interval) && grant.interval >= 1
199
+ ? grant.interval
200
+ : 5;
201
+ const deadline = now() + grant.expires_in * 1000;
202
+ line(`Browser approval: ${verificationUrl}`);
203
+ line(`Confirm code: ${grant.user_code}`);
204
+ if (!options.noOpen && !openBrowser(verificationUrl)) {
205
+ warning('Could not open a browser automatically; open the approval URL above.');
206
+ }
207
+ line('Waiting for human approval…');
208
+ while (now() < deadline) {
209
+ await sleep(pollSeconds * 1000);
210
+ // Re-check before polling so a destination changed during the human approval wait normally
211
+ // aborts before the provider consumes a one-time grant and issues an orphaned credential.
212
+ assertLoginDestination(options);
213
+ let response;
214
+ try {
215
+ response = await fetchImpl(tokenEndpoint, {
216
+ method: 'POST',
217
+ headers: { 'content-type': 'application/x-www-form-urlencoded', accept: 'application/json' },
218
+ body: new URLSearchParams({
219
+ grant_type: DEVICE_GRANT_TYPE,
220
+ client_id: DEVICE_CLIENT_ID,
221
+ device_code: grant.device_code
222
+ }),
223
+ signal: AbortSignal.timeout(15_000)
224
+ });
225
+ }
226
+ catch {
227
+ pollSeconds = Math.min(Math.max(pollSeconds * 2, 5), 30);
228
+ warning(`The provider is temporarily unreachable; retrying in ${pollSeconds}s.`);
229
+ continue;
230
+ }
231
+ const body = await jsonObject(response);
232
+ if (response.ok) {
233
+ const accessToken = body.access_token;
234
+ if (typeof accessToken !== 'string' || !accessToken || /[\r\n]/.test(accessToken)) {
235
+ throw new Error('the provider returned an invalid OAuth access token');
236
+ }
237
+ if (typeof body.token_type !== 'string' || body.token_type.toLowerCase() !== 'bearer') {
238
+ throw new Error('the provider returned an unsupported OAuth token type');
239
+ }
240
+ // Re-check after the human wait: another process must not have tracked, unignored, symlinked,
241
+ // or newly populated the destination while this command was polling.
242
+ assertLoginDestination(options);
243
+ saveEnvSecret(options.envPath, options.envVar, accessToken);
244
+ return;
245
+ }
246
+ const code = safeDescription(body.error);
247
+ if (code === 'authorization_pending')
248
+ continue;
249
+ if (code === 'slow_down') {
250
+ pollSeconds += 5;
251
+ continue;
252
+ }
253
+ if (response.status === 429 || response.status >= 500) {
254
+ const retryAfter = Number(response.headers.get('retry-after'));
255
+ pollSeconds = Number.isFinite(retryAfter) && retryAfter > 0 ? retryAfter : Math.min(pollSeconds * 2, 30);
256
+ warning(`The provider asked the CLI to wait; retrying in ${pollSeconds}s.`);
257
+ continue;
258
+ }
259
+ if (code === 'access_denied')
260
+ throw new Error('device authorization was denied');
261
+ if (code === 'expired_token')
262
+ throw new Error('device authorization expired; run login again');
263
+ throw oauthFailure('OAuth token exchange failed', response, body, [grant.device_code]);
264
+ }
265
+ throw new Error('device authorization expired; run login again');
266
+ }
267
+ function targetForAuth(spec) {
268
+ const target = resolveRemote(spec);
269
+ if (!target)
270
+ throw new Error('auth login needs a remote');
271
+ if (target.source === 'url' || target.source === 'default') {
272
+ throw new Error('auth login needs a named remote so the credential has an unambiguous env var. Configure ABX_REMOTE_<NAME>_URL, then run `abx auth login <name>`.');
273
+ }
274
+ return target;
275
+ }
276
+ export async function cmdAuth(args, flags) {
277
+ const positions = positionalArgs(args);
278
+ const subcommand = positions[0];
279
+ if (subcommand !== 'login' || positions.length > 2) {
280
+ throw new Error('usage: abx auth login [<remote-name>] [--no-open] [--force]');
281
+ }
282
+ if (flags.remote === 'true')
283
+ throw new Error('--remote needs a named remote, for example `--remote abx`');
284
+ const positionalTarget = positions[1];
285
+ const flagTarget = typeof flags.remote === 'string' && flags.remote !== 'true' ? flags.remote : undefined;
286
+ if (positionalTarget && flagTarget)
287
+ throw new Error('choose a positional remote name or --remote, not both');
288
+ const spec = positionalTarget ?? flagTarget ?? 'abx';
289
+ const target = targetForAuth(spec);
290
+ const envPath = resolvePath(process.cwd(), '.env');
291
+ console.log(`\n ${bold('ABX device login')} ${dim(`→ ${target.url}`)}`);
292
+ info('Email and the one-time code stay in your browser. The CLI receives the API key after approval and never prints it.');
293
+ await deviceLogin({
294
+ baseUrl: target.url,
295
+ envVar: target.tokenVar,
296
+ envPath,
297
+ force: flags.force !== undefined,
298
+ noOpen: flags['no-open'] !== undefined
299
+ });
300
+ ok(`authorized and saved ${target.tokenVar} in your private .env (the key was not printed)`);
301
+ info(`verify it with ${g(`abx remote ${target.name?.toLowerCase() ?? spec}`)}`);
302
+ }
303
+ export const AUTH_HELP = `
304
+ ${bold('abx auth login')} [<remote-name>] ${dim('— authorize this CLI with OAuth 2.0 Device Authorization Grant')}
305
+ ${g('abx auth login')} first-party ABX Services (default)
306
+ ${g('abx auth login <name>')} another named remote configured by ABX_REMOTE_<NAME>_URL
307
+ ${g('--remote <name>')} equivalent target spelling for agent workflows
308
+ ${g('--no-open')} print the browser URL and code without trying to open it
309
+ ${g('--force')} replace that remote's existing credential in .env
310
+ ${dim(`The browser owns email + OTP approval. Only the waiting CLI receives the key, stores it as ${ABX_SERVICES_API_KEY_VAR}`)}
311
+ ${dim('(or the named remote\'s token variable), and never prints it. .env must be Git-ignored and must not be tracked.')}`;
312
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -3658,7 +3658,8 @@ export async function cmdDeployCodeBody(flags, emit) {
3658
3658
  info(` ${dim('render mode (a still is never on-chain):')} ${bold('service')} (auto-render every mint/param change — a live/for-sale drop) · ${bold('once')} (fixed supply) · ${bold('none')} (placeholder). ${dim('freshness: no resolver ⇒ no chain-watcher ⇒ MANUAL/backfill (`abx render` after mints + each param change; the on-chain animation updates live, the bucket still does NOT). Continuous/live stills ⇒ run a resolver.')}`);
3659
3659
  // A managed provider whose descriptor says `render.attached` owns rendering — local
3660
3660
  // ABX_STORAGE_BACKEND is irrelevant, and warning "placeholder forever" is a lie.
3661
- if (hasPublicUrl && !loopbackBaseUrl(baseUrl)) {
3661
+ if (hasPublicUrl &&
3662
+ (!loopbackBaseUrl(baseUrl) || process.env.ABX_DEV_ALLOW_LOCALHOST_URI === '1')) {
3662
3663
  try {
3663
3664
  const d = await new AbxServiceClient({ baseUrl, timeoutMs: 2_500 }).descriptor();
3664
3665
  renderAttached = !!d.render?.attached;
@@ -3666,7 +3667,7 @@ export async function cmdDeployCodeBody(flags, emit) {
3666
3667
  catch { /* advisory — a down/non-ABX URL must not fail the dry run */ }
3667
3668
  }
3668
3669
  if (renderAttached) {
3669
- info(` ${dim('render storage home:')} ${bold('managed by the resolver')} ${dim(`(${baseUrl}) — local ABX_STORAGE_BACKEND is irrelevant; skip abx deploy-effects`)}`);
3670
+ info(` ${dim('render storage home:')} ${bold('managed by the resolver')} ${dim(`(${baseUrl}) — nothing local to configure`)}`);
3670
3671
  }
3671
3672
  else if (renderHome === 'fs') {
3672
3673
  // The fs render-home footgun bites the RESOLVER lane hardest (a hosted resolver can't read your
@@ -3699,6 +3700,10 @@ export async function cmdDeployCodeBody(flags, emit) {
3699
3700
  info(` ${g('nothing to render')} — the thumbnail is computed on-chain${hasProgram ? ' and the animation assembles on-chain from your script' : ''}; no runner, no bucket, no refresh. ` +
3700
3701
  `verify from chain: ${bold('abx tokenuri ' + (shownAddr ?? '<address>'))} ${dim('(decodes name + on-chain SVG + traits)')}`);
3701
3702
  }
3703
+ else if (renderAttached) {
3704
+ info(` ${dim('managed renderer:')} ${bold(baseUrl)} ${dim('owns the still + traits — no local runner, storage backend, or render command.')} ` +
3705
+ `verify: ${bold('abx verify ' + (shownAddr ?? '<address>') + ' --remote ' + baseUrl)}`);
3706
+ }
3702
3707
  else {
3703
3708
  const remoteRender = !(onChainUri && hasImageBase);
3704
3709
  info(` ${dim('stand up the runner:')} ${bold('abx deploy-effects --resolver-url ' + baseUrl)} · one-shot: ${bold('abx render ' + (shownAddr ?? '<address>') + (remoteRender ? ' --remote ' + baseUrl : ''))} · verify: ${bold('abx verify ' + (shownAddr ?? '<address>'))}`);
@@ -3714,7 +3719,10 @@ export async function cmdDeployCodeBody(flags, emit) {
3714
3719
  // combo, with what `abx render --remote`/`abx effects` enforce later — deploy-code can't know FOR
3715
3720
  // CERTAIN whether a future render will be remote or co-located, so this best-effort signal
3716
3721
  // mirrors the nudge above rather than hard-refusing a legitimate co-located workflow).
3717
- {
3722
+ if (renderAttached) {
3723
+ info(`render/storage ✓ managed by the resolver ${dim(`(${baseUrl}); local ABX_STORAGE_BACKEND is irrelevant`)}`);
3724
+ }
3725
+ else {
3718
3726
  const renderStorageBackendId = backendResolution(storageOverrides(flags)).backend;
3719
3727
  const renderStorageOpts = storageOptions(storageOverrides(flags));
3720
3728
  const renderStorageCombo = validateRenderStorageCombo({
@@ -3735,7 +3743,7 @@ export async function cmdDeployCodeBody(flags, emit) {
3735
3743
  // bare `✓ fs + --image-base` sat a few lines under "render storage home is fs … placeholder
3736
3744
  // forever" and read as though it overruled it. Name what the ✓ covers, and point at the other
3737
3745
  // line when that one is unhappy, so one setup stops producing two verdicts.
3738
- const fsHomeUnresolved = renderHome === 'fs' && !renderAttached && !imageOrphaned && !hasImageRenderer;
3746
+ const fsHomeUnresolved = renderHome === 'fs' && !imageOrphaned && !hasImageRenderer;
3739
3747
  if (renderStorageCombo.ok) {
3740
3748
  const scope = hasImageBase ? '--image-base is a valid mutable target' : `${renderStorageBackendId} can serve what it stores`;
3741
3749
  info(`render/storage ✓ ${scope}` +