anyray-connect 0.1.0 → 0.3.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/README.md CHANGED
@@ -5,6 +5,8 @@ coding tools at the **Anyray gateway** by writing each tool's base URL and a
5
5
  **placeholder** API key. The gateway stays the brain (routing, spend store,
6
6
  content encryption, optimizer) — this only does capture/onboarding.
7
7
 
8
+ > The Anyray gateway you target may itself front an existing gateway (LiteLLM, OpenRouter, Portkey, homegrown) via the `anyray-upstream` provider — that's configured server-side on the gateway, with no client-side difference to `connect`.
9
+
8
10
  ```bash
9
11
  npx anyray-connect --gateway https://gw.yourorg.internal --user you@yourorg.com
10
12
  ```
@@ -78,6 +80,9 @@ touched.**
78
80
  --revert Undo a previous run
79
81
  ```
80
82
 
83
+ Without a TTY (CI, piped stdin) the CLI exits 1 instead of prompting — pass
84
+ `--yes` for any scripted run, including `--revert` (piping `y` no longer works).
85
+
81
86
  ## Adding a tool
82
87
 
83
88
  Adapters live in `src/tools/` and are registered in `src/tools/index.ts`
package/dist/cli.js CHANGED
@@ -1,29 +1,45 @@
1
1
  /**
2
2
  * `anyray-connect` CLI orchestration.
3
3
  *
4
- * Resolve the gateway target detect installed tools show the plan
5
- * (confirm)apply each adapterprint a summary with a verify step. All
6
- * intelligence stays in the gateway; this only writes base URLs + placeholder
7
- * keys + content-free attribution.
4
+ * A small subcommand dispatcher routes to one of: the apply flow (the default
5
+ * resolve target detect tools confirm apply summary), an interactive
6
+ * `wizard`, and the read-only `status`, `doctor`, and `sync` commands. A bare
7
+ * invocation with no subcommand runs apply (wizard-driven on a TTY) so existing
8
+ * usage keeps working. All intelligence stays in the gateway; this only writes
9
+ * base URLs + placeholder keys + content-free attribution.
8
10
  */
9
- import { createInterface } from 'node:readline/promises';
10
11
  import { resolveOrigin, resolveTarget } from './target.js';
11
12
  import { checkGateway } from './util/preflight.js';
12
13
  import { maskKey, redeemInvite } from './util/redeem.js';
14
+ import { parseSetupLink, resolveSetupLink } from './util/setupLink.js';
13
15
  import { REGISTRY, byId } from './tools/index.js';
14
16
  import { metadataHeaderValue } from './types.js';
15
17
  import { bold, cyan, dim, fail, heading, info, note, ok, warn, } from './util/log.js';
16
- import { detectDisplayName } from './util/identity.js';
17
18
  import { loadProfile, saveProfile } from './util/persist.js';
19
+ import { confirm, isInteractive, prompt, resolveDisplayName, resolveTeam, } from './commands/shared.js';
20
+ import { fetchSavings, formatSavingsLine } from './util/savings.js';
21
+ import { runStatus } from './commands/status.js';
22
+ import { runDoctor } from './commands/doctor.js';
23
+ import { runSync } from './commands/sync.js';
18
24
  const HELP = `${bold('anyray-connect')} — point your local coding tools at the Anyray gateway
19
25
 
20
26
  ${bold('Usage')}
21
27
  npx anyray-connect <gateway-url> [options]
28
+ npx anyray-connect <setup-link> [options] (the https://…/setup/<token> link your
29
+ admin shared; resolves the org's gateway for you)
22
30
  npx anyray-connect [options] (gateway from $ANYRAY_GATEWAY_URL, the ~/.anyray cache, or http://localhost:8787)
23
31
 
32
+ ${bold('Subcommands')}
33
+ wizard Interactive guided setup (also the default on a TTY)
34
+ status Show current config: tools pointed at Anyray, gateway, name/team, savings
35
+ doctor Diagnose gateway reachability + tool config; exits non-zero on problems
36
+ sync Pull the team's shared skills/instructions into each tool's skills dir
37
+ (no subcommand) Apply the connect flow (wizard-driven when interactive)
38
+
24
39
  ${bold('Options')}
25
- --gateway <url> Gateway origin (default: $ANYRAY_GATEWAY_URL, then the
26
- ~/.anyray cache, then http://localhost:8787)
40
+ --gateway <url> Gateway origin or a shared setup link (default:
41
+ $ANYRAY_GATEWAY_URL, then the ~/.anyray cache, then
42
+ http://localhost:8787)
27
43
  --user <id> Attribute spend to this user (default: cached name, else
28
44
  git config user.name/email, else OS user; '' clears the cache)
29
45
  --team <id> Attribute spend to this team ('' clears the cached team)
@@ -36,7 +52,9 @@ ${bold('Options')}
36
52
  --subscription it rides x-anyray-api-key instead (your seat
37
53
  OAuth token stays the bearer). Defaults --user/--team from
38
54
  the invite unless you pass them. Redemption is single-use,
39
- so --dry-run skips it (the invite is not consumed).
55
+ so --dry-run skips it (the invite is not consumed). The key
56
+ is saved to ~/.anyray (mode 600) so ${dim('status')} and ${dim('sync')} reuse it
57
+ (needed once the gateway enforces per-user keys).
40
58
  Already have a key? Set $ANYRAY_CLIENT_KEY instead.
41
59
  --subscription Keep seat (subscription) sign-in: the tool's own OAuth token
42
60
  passes through the gateway instead of the org API key.
@@ -53,7 +71,8 @@ ${bold('What it does')}
53
71
  Writes each tool's base URL + a ${dim('placeholder')} key so requests flow through the
54
72
  gateway. The real provider key stays server-side (ANYRAY_PROVIDER_KEY_*); your
55
73
  tools never hold it. Only metadata (user/team) is attached — never prompt content.
56
- Gateway/name/team are remembered in ~/.anyray (mode 600) for zero-question re-runs.`;
74
+ ~/.anyray (mode 600) remembers your gateway, name/team, personal key, and the
75
+ per-skill versions ${dim('sync')} last wrote — for zero-question re-runs.`;
57
76
  const parseArgs = (argv) => {
58
77
  const args = {
59
78
  subscription: false,
@@ -160,55 +179,6 @@ const printTarget = (target) => {
160
179
  }
161
180
  info(` Attribution: ${metadataHeaderValue(target.metadata) ?? dim('(none — pass --user)')}`);
162
181
  };
163
- const confirm = async (question) => {
164
- const rl = createInterface({ input: process.stdin, output: process.stdout });
165
- try {
166
- const answer = (await rl.question(`${question} ${dim('[y/N]')} `)).trim();
167
- return /^y(es)?$/i.test(answer);
168
- }
169
- finally {
170
- rl.close();
171
- }
172
- };
173
- const prompt = async (question, defaultValue) => {
174
- const rl = createInterface({ input: process.stdin, output: process.stdout });
175
- try {
176
- const hint = defaultValue ? ` ${dim(`[${defaultValue}]`)}` : '';
177
- const raw = (await rl.question(`${question}${hint}: `)).trim();
178
- return raw || defaultValue;
179
- }
180
- finally {
181
- rl.close();
182
- }
183
- };
184
- /** Explicit flag wins ('' clears the cache) → cached → detected, prompted on a TTY. */
185
- const resolveDisplayName = async (explicit, cached, yes) => {
186
- if (explicit !== undefined)
187
- return explicit.trim() || undefined;
188
- if (cached) {
189
- note(`Your name: ${cached} ${dim('(cached — pass --user to change)')}`);
190
- return cached;
191
- }
192
- const detected = detectDisplayName();
193
- // Without a TTY, prompting would block forever on a silent pipe — behave like --yes.
194
- if (yes || !process.stdin.isTTY) {
195
- note(`Your name: ${detected} ${dim('(auto-detected — pass --user to change)')}`);
196
- return detected;
197
- }
198
- return prompt('? Your name', detected);
199
- };
200
- /** Explicit flag wins ('' clears the cache) → cached → optional prompt on a TTY. */
201
- const resolveTeam = async (explicit, cached, yes) => {
202
- if (explicit !== undefined)
203
- return explicit.trim() || undefined;
204
- if (cached) {
205
- note(`Team: ${cached} ${dim('(cached — pass --team to change)')}`);
206
- return cached;
207
- }
208
- if (yes || !process.stdin.isTTY)
209
- return undefined;
210
- return prompt('? Team (optional)');
211
- };
212
182
  const runApply = async (adapters, target, opts, revert) => {
213
183
  let changes = 0;
214
184
  for (const adapter of adapters) {
@@ -241,7 +211,105 @@ const runApply = async (adapters, target, opts, revert) => {
241
211
  }
242
212
  return changes;
243
213
  };
214
+ /**
215
+ * Interactive wizard — guided first-run setup on a TTY. Detects installed
216
+ * tools, lets the dev pick which to configure, confirms the gateway URL, name,
217
+ * and team, then hands back the chosen args for the apply flow. Mutates and
218
+ * returns `args`; falls through untouched if anything is already specified.
219
+ *
220
+ * Only the questions the dev hasn't already answered via flags are asked, so
221
+ * `wizard --user x` stays terse. The apply flow still does the real work (and
222
+ * its own preflight + persistence) — the wizard only gathers input.
223
+ */
224
+ const runWizard = async (args, profile) => {
225
+ info(bold('Anyray connect — guided setup'));
226
+ info(dim('Point your local coding tools at the Anyray gateway. Ctrl-C to abort.'));
227
+ // Tool selection: show what's installed, let the dev narrow it down.
228
+ if (!args.tools || args.tools.length === 0) {
229
+ heading('Tools detected');
230
+ const installed = [];
231
+ for (const adapter of REGISTRY) {
232
+ const detected = await adapter.detect();
233
+ if (detected.installed) {
234
+ installed.push(adapter.id);
235
+ ok(` ${adapter.title} ${dim(`(${adapter.id})`)}`);
236
+ }
237
+ else {
238
+ note(` ${adapter.title} — not installed`);
239
+ }
240
+ }
241
+ const pick = await prompt('? Tools to configure (comma-separated, blank = all detected)', installed.join(',') || undefined);
242
+ const chosen = (pick ?? '')
243
+ .split(',')
244
+ .map((s) => s.trim())
245
+ .filter(Boolean);
246
+ if (chosen.length > 0)
247
+ args.tools = chosen;
248
+ }
249
+ // Gateway URL: default to the cached/env/default origin.
250
+ if (!args.gateway) {
251
+ heading('Gateway');
252
+ const fallback = profile.gateway || process.env.ANYRAY_GATEWAY_URL;
253
+ const answer = await prompt('? Gateway URL', fallback);
254
+ if (answer)
255
+ args.gateway = answer;
256
+ }
257
+ // Identity is resolved by the apply flow's resolveDisplayName/resolveTeam,
258
+ // which already prompt on a TTY — leave args.user/args.team untouched so the
259
+ // wizard doesn't double-ask.
260
+ return args;
261
+ };
262
+ /**
263
+ * Print the dev's content-free savings after a successful apply (and reused by
264
+ * `status`). Best-effort: an older gateway (404) or a network hiccup silently
265
+ * skips the line — it must never break the apply flow.
266
+ */
267
+ const printSavings = async (target) => {
268
+ try {
269
+ const key = target.clientKey ?? target.placeholderKey;
270
+ const savings = await fetchSavings(target.origin, key);
271
+ if (savings) {
272
+ heading('Your savings');
273
+ info(` ${formatSavingsLine(savings)}`);
274
+ }
275
+ }
276
+ catch {
277
+ // Never let the savings readout break onboarding.
278
+ }
279
+ };
280
+ const SUBCOMMANDS = new Set(['wizard', 'status', 'doctor', 'sync']);
244
281
  export const run = async (argv) => {
282
+ // Subcommand dispatch: a known verb as the first token routes to that
283
+ // command. Everything else (a gateway URL, flags, or nothing) runs the apply
284
+ // flow, so the bare `anyray-connect` invocation stays backward compatible.
285
+ const sub = argv[0];
286
+ if (sub && SUBCOMMANDS.has(sub)) {
287
+ const rest = argv.slice(1);
288
+ let parsed;
289
+ try {
290
+ parsed = parseArgs(rest);
291
+ }
292
+ catch (error) {
293
+ fail(error.message);
294
+ info('\nRun `anyray-connect --help` for usage.');
295
+ return 1;
296
+ }
297
+ if (parsed.help) {
298
+ info(HELP);
299
+ return 0;
300
+ }
301
+ if (sub === 'status')
302
+ return runStatus({ gateway: parsed.gateway });
303
+ if (sub === 'doctor')
304
+ return runDoctor({ gateway: parsed.gateway });
305
+ if (sub === 'sync')
306
+ return runSync({ gateway: parsed.gateway });
307
+ // 'wizard' → apply flow with the wizard enabled.
308
+ return runApplyCommand(rest, true);
309
+ }
310
+ return runApplyCommand(argv, false);
311
+ };
312
+ const runApplyCommand = async (argv, forceWizard) => {
245
313
  let args;
246
314
  try {
247
315
  args = parseArgs(argv);
@@ -255,6 +323,20 @@ export const run = async (argv) => {
255
323
  info(HELP);
256
324
  return 0;
257
325
  }
326
+ const profile = await loadProfile();
327
+ // Wizard: explicit `wizard` subcommand, or a bare interactive invocation
328
+ // (no gateway, not a revert/dry-run/scripted run). Non-TTY always falls
329
+ // through to the flag-driven flow.
330
+ const bareInteractive = !forceWizard &&
331
+ isInteractive() &&
332
+ !args.gateway &&
333
+ !args.revert &&
334
+ !args.yes &&
335
+ !args.dryRun &&
336
+ !args.invite;
337
+ if ((forceWizard || bareInteractive) && isInteractive()) {
338
+ args = await runWizard(args, profile);
339
+ }
258
340
  let adapters;
259
341
  try {
260
342
  adapters = selectAdapters(args.tools);
@@ -263,7 +345,31 @@ export const run = async (argv) => {
263
345
  fail(error.message);
264
346
  return 1;
265
347
  }
266
- const profile = await loadProfile();
348
+ info(bold(args.revert ? 'Anyray connect — revert' : 'Anyray connect'));
349
+ // A pasted shareable setup link (https://app.anyray.ai/setup/<token>)
350
+ // resolves to the org's gateway URL via the portal's setup-info endpoint —
351
+ // admins share the link, devs shouldn't have to know the gateway address.
352
+ // Must happen before resolveOrigin: the link itself is a valid https URL
353
+ // and would otherwise be mistaken for the gateway origin.
354
+ const setupLink = args.gateway ? parseSetupLink(args.gateway) : undefined;
355
+ if (setupLink) {
356
+ try {
357
+ const resolved = await resolveSetupLink(setupLink);
358
+ args.gateway = resolved.gatewayUrl;
359
+ note(`Setup link${resolved.org ? ` for ${resolved.org}` : ''}: gateway ${resolved.gatewayUrl}`);
360
+ // Subscription-seat org → default to pass-through auth so the dev's own
361
+ // Claude Code / Codex seat is used. An explicit --subscription already
362
+ // set it; this only fills in the default (there is no --no-subscription).
363
+ if (resolved.seatMode && !args.subscription) {
364
+ args.subscription = true;
365
+ note('Subscription org: using pass-through auth (--subscription) — your own seat sign-in is used.');
366
+ }
367
+ }
368
+ catch (error) {
369
+ fail(error instanceof Error ? error.message : String(error));
370
+ return 1;
371
+ }
372
+ }
267
373
  const cachedGateway = !args.gateway && !process.env.ANYRAY_GATEWAY_URL
268
374
  ? profile.gateway
269
375
  : undefined;
@@ -280,7 +386,6 @@ export const run = async (argv) => {
280
386
  }
281
387
  let resolvedUser;
282
388
  let resolvedTeam;
283
- info(bold(args.revert ? 'Anyray connect — revert' : 'Anyray connect'));
284
389
  if (cachedGateway && !args.revert) {
285
390
  note(`Gateway: ${origin} ${dim('(cached in ~/.anyray — pass a URL to change)')}`);
286
391
  }
@@ -329,6 +434,10 @@ export const run = async (argv) => {
329
434
  if (args.dryRun)
330
435
  note('\nDry run — no files will be written.');
331
436
  if (!args.yes && !args.dryRun) {
437
+ if (!isInteractive()) {
438
+ fail('\nNon-interactive session — cannot ask for confirmation. Pass --yes to proceed.');
439
+ return 1;
440
+ }
332
441
  const verb = args.revert ? 'remove Anyray config from' : 'configure';
333
442
  const proceed = await confirm(`\n${verb} ${adapters.length} tool target(s)?`);
334
443
  if (!proceed) {
@@ -361,22 +470,36 @@ export const run = async (argv) => {
361
470
  else {
362
471
  ok(`Done (${changes} file(s) written).`);
363
472
  info('\nVerify a request flows through the gateway:');
473
+ // A minimal chat completion is the one request every healthy gateway
474
+ // serves (there is no unauthenticated GET under /v1). "anyray-default"
475
+ // lets the gateway's routing config pick the real model/provider.
364
476
  info(dim(
365
477
  // Never echo a personal key — point at the tool config it landed in.
366
- ` curl ${target.openaiBaseUrl}/models -H "Authorization: Bearer ${target.clientKey
367
- ? `<your personal key (${maskKey(target.clientKey)}) — see your tool config>`
368
- : target.placeholderKey}"`));
478
+ ` curl -sS ${target.openaiBaseUrl}/chat/completions \\\n` +
479
+ ` -H "Content-Type: application/json" \\\n` +
480
+ ` -H "Authorization: Bearer ${target.clientKey
481
+ ? `<your personal key (${maskKey(target.clientKey)}) — see your tool config>`
482
+ : target.placeholderKey}" \\\n` +
483
+ ` -d '{"model":"anyray-default","messages":[{"role":"user","content":"ping"}],"max_tokens":16}'`));
369
484
  info(dim(' Revert: npx anyray-connect --revert'));
370
485
  try {
486
+ // Preserve any prior sync state — saveProfile replaces the file wholesale.
487
+ // Persist a freshly redeemed personal key so the read-only status/sync
488
+ // commands can present it (else they'd 401 under key enforcement); keep
489
+ // any previously stored key when this run didn't redeem one.
371
490
  await saveProfile({
491
+ ...profile,
372
492
  gateway: target.origin,
373
493
  name: resolvedUser,
374
494
  team: resolvedTeam,
495
+ clientKey: target.clientKey ?? profile.clientKey,
375
496
  });
376
497
  }
377
498
  catch (error) {
378
499
  warn(`Could not save profile: ${error instanceof Error ? error.message : String(error)}`);
379
500
  }
501
+ // Close onboarding with the tangible savings number (best-effort).
502
+ await printSavings(target);
380
503
  }
381
504
  return 0;
382
505
  };
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * `anyray-connect doctor` — read-only diagnostics with actionable fixes.
3
+ *
4
+ * Checks: gateway reachability, whether each detected tool's config points at
5
+ * the gateway, and whether a personal key is present (vs the shared
6
+ * placeholder). Prints a fix for every problem and exits non-zero when any
7
+ * problem is found, so it's usable as a CI/health gate. Writes nothing.
8
+ *
9
+ * PRIVACY: inspects metadata only (gateway origin, tool base URLs, whether a
10
+ * key is set) — never prompt/response content, and never prints a key.
11
+ */
12
+ import { REGISTRY } from '../tools/index.js';
13
+ import { loadProfile } from '../util/persist.js';
14
+ import { checkGateway } from '../util/preflight.js';
15
+ import { resolveGatewayOrigin } from './shared.js';
16
+ import { bold, dim, fail, heading, info, ok, warn } from '../util/log.js';
17
+ export const runDoctor = async (args) => {
18
+ const profile = await loadProfile();
19
+ info(bold('Anyray connect — doctor'));
20
+ let origin;
21
+ try {
22
+ origin = resolveGatewayOrigin(args.gateway, profile);
23
+ }
24
+ catch (error) {
25
+ fail(` Gateway URL: ${error.message}`);
26
+ info(dim(' Fix: pass a gateway URL, e.g. `anyray-connect doctor http://localhost:8787`.'));
27
+ return 1;
28
+ }
29
+ let problems = 0;
30
+ heading('Gateway');
31
+ const probe = await checkGateway(origin);
32
+ if (probe.reachable) {
33
+ ok(` Reachable: ${origin} ${dim(`(${probe.detail})`)}`);
34
+ }
35
+ else {
36
+ problems += 1;
37
+ fail(` Unreachable: ${origin} (${probe.detail})`);
38
+ info(dim(' Fix: start the gateway, or check the URL with `anyray-connect status`.'));
39
+ }
40
+ heading('Personal key');
41
+ if (process.env.ANYRAY_CLIENT_KEY?.trim()) {
42
+ ok(' Personal gateway key present ($ANYRAY_CLIENT_KEY).');
43
+ }
44
+ else {
45
+ // Not a hard failure — placeholder mode is a valid setup — but worth
46
+ // surfacing, since per-user attribution/savings need a personal key.
47
+ warn(' No personal key — using the shared placeholder.');
48
+ info(dim(' Fix (optional): redeem an invite (`anyray-connect --invite <token>`) or set $ANYRAY_CLIENT_KEY for per-user attribution.'));
49
+ }
50
+ heading('Tools');
51
+ let anyPointed = false;
52
+ for (const adapter of REGISTRY) {
53
+ const detected = await adapter.detect();
54
+ if (!detected.installed) {
55
+ info(dim(` ${adapter.title}: not installed (skipped)`));
56
+ continue;
57
+ }
58
+ if (!adapter.pointsAt) {
59
+ info(dim(` ${adapter.title}: installed (config not introspectable)`));
60
+ continue;
61
+ }
62
+ const pointed = await adapter.pointsAt(origin);
63
+ if (pointed) {
64
+ anyPointed = true;
65
+ ok(` ${adapter.title}: pointed at ${origin}`);
66
+ }
67
+ else {
68
+ problems += 1;
69
+ fail(` ${adapter.title}: installed but not pointed at ${origin}`);
70
+ info(dim(' Fix: run `anyray-connect` to (re)configure it.'));
71
+ }
72
+ }
73
+ if (!anyPointed && problems === 0) {
74
+ // No introspectable tool is configured and nothing else is wrong — nudge.
75
+ warn(' No tools are pointed at this gateway yet.');
76
+ info(dim(' Fix: run `anyray-connect` to configure your tools.'));
77
+ }
78
+ heading('Summary');
79
+ if (problems === 0) {
80
+ ok(' No problems found.');
81
+ return 0;
82
+ }
83
+ fail(` ${problems} problem(s) found — see fixes above.`);
84
+ return 1;
85
+ };
86
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Shared helpers for the `anyray-connect` subcommands.
3
+ *
4
+ * The apply/wizard/status/doctor/sync commands all need the same primitives:
5
+ * interactive prompts, identity resolution, and the gateway origin resolved
6
+ * from flags → env → the ~/.anyray cache. Keeping them here lets each command
7
+ * stay small and avoids cli.ts ⇄ command circular imports.
8
+ *
9
+ * PRIVACY: nothing here logs or persists prompt/response content — only the
10
+ * gateway origin and content-free identity (user/team).
11
+ */
12
+ import { createInterface } from 'node:readline/promises';
13
+ import { resolveOrigin } from '../target.js';
14
+ import { detectDisplayName } from '../util/identity.js';
15
+ import { dim, note } from '../util/log.js';
16
+ export const isInteractive = () => Boolean(process.stdin.isTTY);
17
+ export const confirm = async (question) => {
18
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
19
+ try {
20
+ const answer = (await rl.question(`${question} ${dim('[y/N]')} `)).trim();
21
+ return /^y(es)?$/i.test(answer);
22
+ }
23
+ finally {
24
+ rl.close();
25
+ }
26
+ };
27
+ export const prompt = async (question, defaultValue) => {
28
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
29
+ try {
30
+ const hint = defaultValue ? ` ${dim(`[${defaultValue}]`)}` : '';
31
+ const raw = (await rl.question(`${question}${hint}: `)).trim();
32
+ return raw || defaultValue;
33
+ }
34
+ finally {
35
+ rl.close();
36
+ }
37
+ };
38
+ /** Explicit flag wins ('' clears the cache) → cached → detected, prompted on a TTY. */
39
+ export const resolveDisplayName = async (explicit, cached, yes) => {
40
+ if (explicit !== undefined)
41
+ return explicit.trim() || undefined;
42
+ if (cached) {
43
+ note(`Your name: ${cached} ${dim('(cached — pass --user to change)')}`);
44
+ return cached;
45
+ }
46
+ const detected = detectDisplayName();
47
+ // Without a TTY, prompting would block forever on a silent pipe — behave like --yes.
48
+ if (yes || !isInteractive()) {
49
+ note(`Your name: ${detected} ${dim('(auto-detected — pass --user to change)')}`);
50
+ return detected;
51
+ }
52
+ return prompt('? Your name', detected);
53
+ };
54
+ /** Explicit flag wins ('' clears the cache) → cached → optional prompt on a TTY. */
55
+ export const resolveTeam = async (explicit, cached, yes) => {
56
+ if (explicit !== undefined)
57
+ return explicit.trim() || undefined;
58
+ if (cached) {
59
+ note(`Team: ${cached} ${dim('(cached — pass --team to change)')}`);
60
+ return cached;
61
+ }
62
+ if (yes || !isInteractive())
63
+ return undefined;
64
+ return prompt('? Team (optional)');
65
+ };
66
+ /**
67
+ * Resolve the gateway origin a read-only command should act on: explicit flag →
68
+ * `$ANYRAY_GATEWAY_URL` → the ~/.anyray cache → the default. Validated as an
69
+ * http(s) URL (throws on a bad value).
70
+ */
71
+ export const resolveGatewayOrigin = (explicit, profile) => {
72
+ const cached = !explicit && !process.env.ANYRAY_GATEWAY_URL ? profile.gateway : undefined;
73
+ return resolveOrigin(explicit ?? cached);
74
+ };
75
+ /**
76
+ * The key a read-only request to the gateway should present, in precedence
77
+ * order: an explicit `$ANYRAY_CLIENT_KEY` override, the personal key persisted
78
+ * by a prior invite redemption (`profile.clientKey`), else the shared
79
+ * placeholder. Without the persisted key, `status`/`sync` would send the
80
+ * placeholder and 401 under key enforcement.
81
+ */
82
+ export const requestKey = (storedKey, placeholder) => process.env.ANYRAY_CLIENT_KEY?.trim() || storedKey?.trim() || placeholder;
83
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}