anyray-connect 0.2.0 → 0.5.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 +5 -0
- package/dist/cli.js +242 -65
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.js +86 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/hook.js +233 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/shared.js +83 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/status.js +71 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.js +87 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/target.js +11 -1
- package/dist/target.js.map +1 -1
- package/dist/tools/claudeCode.js +88 -2
- package/dist/tools/claudeCode.js.map +1 -1
- package/dist/tools/codex.js +3 -3
- package/dist/tools/codex.js.map +1 -1
- package/dist/tools/shellEnv.js +40 -8
- package/dist/tools/shellEnv.js.map +1 -1
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -1
- package/dist/util/persist.js +32 -7
- package/dist/util/persist.js.map +1 -1
- package/dist/util/policySync.js +143 -0
- package/dist/util/policySync.js.map +1 -0
- package/dist/util/savings.js +71 -0
- package/dist/util/savings.js.map +1 -0
- package/dist/util/seatState.js +79 -0
- package/dist/util/seatState.js.map +1 -0
- package/dist/util/setupLink.js +5 -1
- package/dist/util/setupLink.js.map +1 -1
- package/dist/util/trimOutput.js +120 -0
- package/dist/util/trimOutput.js.map +1 -0
- package/dist/util/verify.js +192 -0
- package/dist/util/verify.js.map +1 -0
- package/package.json +1 -1
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,21 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `anyray-connect` CLI orchestration.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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';
|
|
13
14
|
import { parseSetupLink, resolveSetupLink } from './util/setupLink.js';
|
|
14
15
|
import { REGISTRY, byId } from './tools/index.js';
|
|
15
|
-
import { metadataHeaderValue } from './types.js';
|
|
16
|
+
import { effectiveSubscription, metadataHeaderValue } from './types.js';
|
|
16
17
|
import { bold, cyan, dim, fail, heading, info, note, ok, warn, } from './util/log.js';
|
|
17
|
-
import { detectDisplayName } from './util/identity.js';
|
|
18
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 { verifyConnection } from './util/verify.js';
|
|
22
|
+
import { detectSeatState } from './util/seatState.js';
|
|
23
|
+
import { runStatus } from './commands/status.js';
|
|
24
|
+
import { runDoctor } from './commands/doctor.js';
|
|
25
|
+
import { runSync } from './commands/sync.js';
|
|
26
|
+
import { runPostToolUseHook } from './commands/hook.js';
|
|
19
27
|
const HELP = `${bold('anyray-connect')} — point your local coding tools at the Anyray gateway
|
|
20
28
|
|
|
21
29
|
${bold('Usage')}
|
|
@@ -24,6 +32,13 @@ ${bold('Usage')}
|
|
|
24
32
|
admin shared; resolves the org's gateway for you)
|
|
25
33
|
npx anyray-connect [options] (gateway from $ANYRAY_GATEWAY_URL, the ~/.anyray cache, or http://localhost:8787)
|
|
26
34
|
|
|
35
|
+
${bold('Subcommands')}
|
|
36
|
+
wizard Interactive guided setup (also the default on a TTY)
|
|
37
|
+
status Show current config: tools pointed at Anyray, gateway, name/team, savings
|
|
38
|
+
doctor Diagnose gateway reachability + tool config; exits non-zero on problems
|
|
39
|
+
sync Pull the team's shared skills/instructions into each tool's skills dir
|
|
40
|
+
(no subcommand) Apply the connect flow (wizard-driven when interactive)
|
|
41
|
+
|
|
27
42
|
${bold('Options')}
|
|
28
43
|
--gateway <url> Gateway origin or a shared setup link (default:
|
|
29
44
|
$ANYRAY_GATEWAY_URL, then the ~/.anyray cache, then
|
|
@@ -40,16 +55,24 @@ ${bold('Options')}
|
|
|
40
55
|
--subscription it rides x-anyray-api-key instead (your seat
|
|
41
56
|
OAuth token stays the bearer). Defaults --user/--team from
|
|
42
57
|
the invite unless you pass them. Redemption is single-use,
|
|
43
|
-
so --dry-run skips it (the invite is not consumed).
|
|
58
|
+
so --dry-run skips it (the invite is not consumed). The key
|
|
59
|
+
is saved to ~/.anyray (mode 600) so ${dim('status')} and ${dim('sync')} reuse it
|
|
60
|
+
(needed once the gateway enforces per-user keys).
|
|
44
61
|
Already have a key? Set $ANYRAY_CLIENT_KEY instead.
|
|
45
|
-
--subscription
|
|
46
|
-
|
|
47
|
-
Honored by Claude Code (Anthropic
|
|
48
|
-
seats)
|
|
62
|
+
--subscription Force seat (subscription) pass-through for every seat-capable
|
|
63
|
+
tool: the tool's own OAuth token rides through the gateway
|
|
64
|
+
instead of the org API key. Honored by Claude Code (Anthropic
|
|
65
|
+
seats) and Codex (ChatGPT seats).
|
|
66
|
+
--placeholder, --org
|
|
67
|
+
Force the org key for everything (never use a local seat).
|
|
68
|
+
(Default is AUTO: each tool rides your subscription when
|
|
69
|
+
you're signed into it, else the org key — zero setup.)
|
|
49
70
|
--tools <ids> Comma-separated subset: ${REGISTRY.map((t) => t.id).join(', ')}
|
|
50
71
|
--dry-run Show what would change without writing anything
|
|
51
72
|
--yes, -y Don't prompt for confirmation (for scripted rollout)
|
|
52
73
|
--force Skip the gateway reachability check before writing
|
|
74
|
+
--skip-verify Skip the post-apply smoke test (it sends one tiny request
|
|
75
|
+
through the gateway to confirm auth + routing actually work)
|
|
53
76
|
--revert Undo a previous run
|
|
54
77
|
--help, -h Show this help
|
|
55
78
|
|
|
@@ -57,14 +80,17 @@ ${bold('What it does')}
|
|
|
57
80
|
Writes each tool's base URL + a ${dim('placeholder')} key so requests flow through the
|
|
58
81
|
gateway. The real provider key stays server-side (ANYRAY_PROVIDER_KEY_*); your
|
|
59
82
|
tools never hold it. Only metadata (user/team) is attached — never prompt content.
|
|
60
|
-
|
|
83
|
+
~/.anyray (mode 600) remembers your gateway, name/team, personal key, and the
|
|
84
|
+
per-skill versions ${dim('sync')} last wrote — for zero-question re-runs.`;
|
|
61
85
|
const parseArgs = (argv) => {
|
|
62
86
|
const args = {
|
|
63
87
|
subscription: false,
|
|
88
|
+
placeholder: false,
|
|
64
89
|
dryRun: false,
|
|
65
90
|
yes: false,
|
|
66
91
|
revert: false,
|
|
67
92
|
force: false,
|
|
93
|
+
skipVerify: false,
|
|
68
94
|
help: false,
|
|
69
95
|
};
|
|
70
96
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -98,6 +124,10 @@ const parseArgs = (argv) => {
|
|
|
98
124
|
case '--subscription':
|
|
99
125
|
args.subscription = true;
|
|
100
126
|
break;
|
|
127
|
+
case '--placeholder':
|
|
128
|
+
case '--org':
|
|
129
|
+
args.placeholder = true;
|
|
130
|
+
break;
|
|
101
131
|
case '--tools':
|
|
102
132
|
args.tools = (next() ?? '')
|
|
103
133
|
.split(',')
|
|
@@ -114,6 +144,9 @@ const parseArgs = (argv) => {
|
|
|
114
144
|
case '--force':
|
|
115
145
|
args.force = true;
|
|
116
146
|
break;
|
|
147
|
+
case '--skip-verify':
|
|
148
|
+
args.skipVerify = true;
|
|
149
|
+
break;
|
|
117
150
|
case '--revert':
|
|
118
151
|
args.revert = true;
|
|
119
152
|
break;
|
|
@@ -150,7 +183,19 @@ const selectAdapters = (ids) => {
|
|
|
150
183
|
const printTarget = (target) => {
|
|
151
184
|
heading('Gateway target');
|
|
152
185
|
info(` Origin: ${cyan(target.origin)}`);
|
|
153
|
-
if (target.authMode === '
|
|
186
|
+
if (target.authMode === 'auto') {
|
|
187
|
+
const claude = effectiveSubscription(target, 'anthropic')
|
|
188
|
+
? cyan('your subscription')
|
|
189
|
+
: 'org key';
|
|
190
|
+
const codex = effectiveSubscription(target, 'openai')
|
|
191
|
+
? cyan('your subscription')
|
|
192
|
+
: 'org key';
|
|
193
|
+
info(` Auth: auto ${dim('(per tool)')} — Claude: ${claude}, Codex: ${codex}`);
|
|
194
|
+
if (target.clientKey) {
|
|
195
|
+
info(` Client key: personal gateway key (${maskKey(target.clientKey)})`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else if (target.authMode === 'subscription') {
|
|
154
199
|
info(` Auth: subscription pass-through ${dim('(seat OAuth token; Claude Code + Codex)')}`);
|
|
155
200
|
if (target.clientKey) {
|
|
156
201
|
info(` Client key: personal gateway key (${maskKey(target.clientKey)}) ${dim('rides x-anyray-api-key')}`);
|
|
@@ -164,55 +209,6 @@ const printTarget = (target) => {
|
|
|
164
209
|
}
|
|
165
210
|
info(` Attribution: ${metadataHeaderValue(target.metadata) ?? dim('(none — pass --user)')}`);
|
|
166
211
|
};
|
|
167
|
-
const confirm = async (question) => {
|
|
168
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
169
|
-
try {
|
|
170
|
-
const answer = (await rl.question(`${question} ${dim('[y/N]')} `)).trim();
|
|
171
|
-
return /^y(es)?$/i.test(answer);
|
|
172
|
-
}
|
|
173
|
-
finally {
|
|
174
|
-
rl.close();
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
const prompt = async (question, defaultValue) => {
|
|
178
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
179
|
-
try {
|
|
180
|
-
const hint = defaultValue ? ` ${dim(`[${defaultValue}]`)}` : '';
|
|
181
|
-
const raw = (await rl.question(`${question}${hint}: `)).trim();
|
|
182
|
-
return raw || defaultValue;
|
|
183
|
-
}
|
|
184
|
-
finally {
|
|
185
|
-
rl.close();
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
/** Explicit flag wins ('' clears the cache) → cached → detected, prompted on a TTY. */
|
|
189
|
-
const resolveDisplayName = async (explicit, cached, yes) => {
|
|
190
|
-
if (explicit !== undefined)
|
|
191
|
-
return explicit.trim() || undefined;
|
|
192
|
-
if (cached) {
|
|
193
|
-
note(`Your name: ${cached} ${dim('(cached — pass --user to change)')}`);
|
|
194
|
-
return cached;
|
|
195
|
-
}
|
|
196
|
-
const detected = detectDisplayName();
|
|
197
|
-
// Without a TTY, prompting would block forever on a silent pipe — behave like --yes.
|
|
198
|
-
if (yes || !process.stdin.isTTY) {
|
|
199
|
-
note(`Your name: ${detected} ${dim('(auto-detected — pass --user to change)')}`);
|
|
200
|
-
return detected;
|
|
201
|
-
}
|
|
202
|
-
return prompt('? Your name', detected);
|
|
203
|
-
};
|
|
204
|
-
/** Explicit flag wins ('' clears the cache) → cached → optional prompt on a TTY. */
|
|
205
|
-
const resolveTeam = async (explicit, cached, yes) => {
|
|
206
|
-
if (explicit !== undefined)
|
|
207
|
-
return explicit.trim() || undefined;
|
|
208
|
-
if (cached) {
|
|
209
|
-
note(`Team: ${cached} ${dim('(cached — pass --team to change)')}`);
|
|
210
|
-
return cached;
|
|
211
|
-
}
|
|
212
|
-
if (yes || !process.stdin.isTTY)
|
|
213
|
-
return undefined;
|
|
214
|
-
return prompt('? Team (optional)');
|
|
215
|
-
};
|
|
216
212
|
const runApply = async (adapters, target, opts, revert) => {
|
|
217
213
|
let changes = 0;
|
|
218
214
|
for (const adapter of adapters) {
|
|
@@ -245,7 +241,131 @@ const runApply = async (adapters, target, opts, revert) => {
|
|
|
245
241
|
}
|
|
246
242
|
return changes;
|
|
247
243
|
};
|
|
244
|
+
/**
|
|
245
|
+
* Interactive wizard — guided first-run setup on a TTY. Detects installed
|
|
246
|
+
* tools, lets the dev pick which to configure, confirms the gateway URL, name,
|
|
247
|
+
* and team, then hands back the chosen args for the apply flow. Mutates and
|
|
248
|
+
* returns `args`; falls through untouched if anything is already specified.
|
|
249
|
+
*
|
|
250
|
+
* Only the questions the dev hasn't already answered via flags are asked, so
|
|
251
|
+
* `wizard --user x` stays terse. The apply flow still does the real work (and
|
|
252
|
+
* its own preflight + persistence) — the wizard only gathers input.
|
|
253
|
+
*/
|
|
254
|
+
const runWizard = async (args, profile) => {
|
|
255
|
+
info(bold('Anyray connect — guided setup'));
|
|
256
|
+
info(dim('Point your local coding tools at the Anyray gateway. Ctrl-C to abort.'));
|
|
257
|
+
// Tool selection: show what's installed, let the dev narrow it down.
|
|
258
|
+
if (!args.tools || args.tools.length === 0) {
|
|
259
|
+
heading('Tools detected');
|
|
260
|
+
const installed = [];
|
|
261
|
+
for (const adapter of REGISTRY) {
|
|
262
|
+
const detected = await adapter.detect();
|
|
263
|
+
if (detected.installed) {
|
|
264
|
+
installed.push(adapter.id);
|
|
265
|
+
ok(` ${adapter.title} ${dim(`(${adapter.id})`)}`);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
note(` ${adapter.title} — not installed`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const pick = await prompt('? Tools to configure (comma-separated, blank = all detected)', installed.join(',') || undefined);
|
|
272
|
+
const chosen = (pick ?? '')
|
|
273
|
+
.split(',')
|
|
274
|
+
.map((s) => s.trim())
|
|
275
|
+
.filter(Boolean);
|
|
276
|
+
if (chosen.length > 0)
|
|
277
|
+
args.tools = chosen;
|
|
278
|
+
}
|
|
279
|
+
// Gateway URL: default to the cached/env/default origin.
|
|
280
|
+
if (!args.gateway) {
|
|
281
|
+
heading('Gateway');
|
|
282
|
+
const fallback = profile.gateway || process.env.ANYRAY_GATEWAY_URL;
|
|
283
|
+
const answer = await prompt('? Gateway URL', fallback);
|
|
284
|
+
if (answer)
|
|
285
|
+
args.gateway = answer;
|
|
286
|
+
}
|
|
287
|
+
// Identity is resolved by the apply flow's resolveDisplayName/resolveTeam,
|
|
288
|
+
// which already prompt on a TTY — leave args.user/args.team untouched so the
|
|
289
|
+
// wizard doesn't double-ask.
|
|
290
|
+
return args;
|
|
291
|
+
};
|
|
292
|
+
/**
|
|
293
|
+
* Print the dev's content-free savings after a successful apply (and reused by
|
|
294
|
+
* `status`). Best-effort: an older gateway (404) or a network hiccup silently
|
|
295
|
+
* skips the line — it must never break the apply flow.
|
|
296
|
+
*/
|
|
297
|
+
const printSavings = async (target) => {
|
|
298
|
+
try {
|
|
299
|
+
const key = target.clientKey ?? target.placeholderKey;
|
|
300
|
+
const savings = await fetchSavings(target.origin, key);
|
|
301
|
+
if (savings) {
|
|
302
|
+
heading('Your savings');
|
|
303
|
+
info(` ${formatSavingsLine(savings)}`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
// Never let the savings readout break onboarding.
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
/**
|
|
311
|
+
* Post-apply smoke test: send one tiny request through the gateway with the
|
|
312
|
+
* same auth the tool will use, and print a clear PASS/FAIL with the exact next
|
|
313
|
+
* step. This is the difference between "connect said done" and "the tool
|
|
314
|
+
* actually works" — without it, a routing or sign-in problem only surfaces as a
|
|
315
|
+
* cryptic 4xx on the dev's first real request. Best-effort: it never changes the
|
|
316
|
+
* exit code (the config was written); its job is to TELL the dev, loudly.
|
|
317
|
+
*/
|
|
318
|
+
const runVerify = async (target) => {
|
|
319
|
+
heading('Verifying the connection');
|
|
320
|
+
const verdict = await verifyConnection(target);
|
|
321
|
+
if (verdict.kind === 'ok')
|
|
322
|
+
ok(` ${verdict.detail}`);
|
|
323
|
+
else if (verdict.kind === 'unreachable' || verdict.kind === 'unknown')
|
|
324
|
+
warn(` ${verdict.detail}`);
|
|
325
|
+
else
|
|
326
|
+
fail(` ${verdict.detail}`);
|
|
327
|
+
for (const line of verdict.remedy)
|
|
328
|
+
info(dim(` ${line}`));
|
|
329
|
+
};
|
|
330
|
+
const SUBCOMMANDS = new Set(['wizard', 'status', 'doctor', 'sync']);
|
|
248
331
|
export const run = async (argv) => {
|
|
332
|
+
// Hidden hook entrypoint: Claude Code invokes `anyray-connect __anyray-hook`
|
|
333
|
+
// as a PostToolUse hook. It speaks the hook stdin/stdout JSON protocol, so it
|
|
334
|
+
// must run BEFORE any human-facing logging touches stdout. Never throws.
|
|
335
|
+
if (argv[0] === '__anyray-hook') {
|
|
336
|
+
return runPostToolUseHook();
|
|
337
|
+
}
|
|
338
|
+
// Subcommand dispatch: a known verb as the first token routes to that
|
|
339
|
+
// command. Everything else (a gateway URL, flags, or nothing) runs the apply
|
|
340
|
+
// flow, so the bare `anyray-connect` invocation stays backward compatible.
|
|
341
|
+
const sub = argv[0];
|
|
342
|
+
if (sub && SUBCOMMANDS.has(sub)) {
|
|
343
|
+
const rest = argv.slice(1);
|
|
344
|
+
let parsed;
|
|
345
|
+
try {
|
|
346
|
+
parsed = parseArgs(rest);
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
fail(error.message);
|
|
350
|
+
info('\nRun `anyray-connect --help` for usage.');
|
|
351
|
+
return 1;
|
|
352
|
+
}
|
|
353
|
+
if (parsed.help) {
|
|
354
|
+
info(HELP);
|
|
355
|
+
return 0;
|
|
356
|
+
}
|
|
357
|
+
if (sub === 'status')
|
|
358
|
+
return runStatus({ gateway: parsed.gateway });
|
|
359
|
+
if (sub === 'doctor')
|
|
360
|
+
return runDoctor({ gateway: parsed.gateway });
|
|
361
|
+
if (sub === 'sync')
|
|
362
|
+
return runSync({ gateway: parsed.gateway });
|
|
363
|
+
// 'wizard' → apply flow with the wizard enabled.
|
|
364
|
+
return runApplyCommand(rest, true);
|
|
365
|
+
}
|
|
366
|
+
return runApplyCommand(argv, false);
|
|
367
|
+
};
|
|
368
|
+
const runApplyCommand = async (argv, forceWizard) => {
|
|
249
369
|
let args;
|
|
250
370
|
try {
|
|
251
371
|
args = parseArgs(argv);
|
|
@@ -259,6 +379,20 @@ export const run = async (argv) => {
|
|
|
259
379
|
info(HELP);
|
|
260
380
|
return 0;
|
|
261
381
|
}
|
|
382
|
+
const profile = await loadProfile();
|
|
383
|
+
// Wizard: explicit `wizard` subcommand, or a bare interactive invocation
|
|
384
|
+
// (no gateway, not a revert/dry-run/scripted run). Non-TTY always falls
|
|
385
|
+
// through to the flag-driven flow.
|
|
386
|
+
const bareInteractive = !forceWizard &&
|
|
387
|
+
isInteractive() &&
|
|
388
|
+
!args.gateway &&
|
|
389
|
+
!args.revert &&
|
|
390
|
+
!args.yes &&
|
|
391
|
+
!args.dryRun &&
|
|
392
|
+
!args.invite;
|
|
393
|
+
if ((forceWizard || bareInteractive) && isInteractive()) {
|
|
394
|
+
args = await runWizard(args, profile);
|
|
395
|
+
}
|
|
262
396
|
let adapters;
|
|
263
397
|
try {
|
|
264
398
|
adapters = selectAdapters(args.tools);
|
|
@@ -267,7 +401,6 @@ export const run = async (argv) => {
|
|
|
267
401
|
fail(error.message);
|
|
268
402
|
return 1;
|
|
269
403
|
}
|
|
270
|
-
const profile = await loadProfile();
|
|
271
404
|
info(bold(args.revert ? 'Anyray connect — revert' : 'Anyray connect'));
|
|
272
405
|
// A pasted shareable setup link (https://app.anyray.ai/setup/<token>)
|
|
273
406
|
// resolves to the org's gateway URL via the portal's setup-info endpoint —
|
|
@@ -280,6 +413,13 @@ export const run = async (argv) => {
|
|
|
280
413
|
const resolved = await resolveSetupLink(setupLink);
|
|
281
414
|
args.gateway = resolved.gatewayUrl;
|
|
282
415
|
note(`Setup link${resolved.org ? ` for ${resolved.org}` : ''}: gateway ${resolved.gatewayUrl}`);
|
|
416
|
+
// Subscription-seat org → default to pass-through auth so the dev's own
|
|
417
|
+
// Claude Code / Codex seat is used. An explicit --subscription already
|
|
418
|
+
// set it; this only fills in the default (there is no --no-subscription).
|
|
419
|
+
if (resolved.seatMode && !args.subscription) {
|
|
420
|
+
args.subscription = true;
|
|
421
|
+
note('Subscription org: using pass-through auth (--subscription) — your own seat sign-in is used.');
|
|
422
|
+
}
|
|
283
423
|
}
|
|
284
424
|
catch (error) {
|
|
285
425
|
fail(error instanceof Error ? error.message : String(error));
|
|
@@ -333,11 +473,28 @@ export const run = async (argv) => {
|
|
|
333
473
|
resolvedUser = await resolveDisplayName(args.user, profile.name, args.yes);
|
|
334
474
|
resolvedTeam = await resolveTeam(args.team, profile.team, args.yes);
|
|
335
475
|
}
|
|
476
|
+
// Auth mode. Forced flags win; otherwise AUTO — detect which subscription
|
|
477
|
+
// seats this machine is signed into so each tool rides the dev's own seat when
|
|
478
|
+
// present and falls back to the org key when not. Detection is read-only,
|
|
479
|
+
// best-effort, and never prompts (metadata-only credential probes).
|
|
480
|
+
let seat;
|
|
481
|
+
if (!args.revert && !args.subscription && !args.placeholder) {
|
|
482
|
+
seat = await detectSeatState();
|
|
483
|
+
heading('Detecting your sign-ins');
|
|
484
|
+
info(` Claude (Anthropic): ${seat.anthropic
|
|
485
|
+
? cyan('signed in → your subscription')
|
|
486
|
+
: dim('not signed in → org key')}`);
|
|
487
|
+
info(` Codex (ChatGPT): ${seat.openai
|
|
488
|
+
? cyan('signed in → your subscription')
|
|
489
|
+
: dim('not signed in → org key')}`);
|
|
490
|
+
}
|
|
336
491
|
const target = resolveTarget({
|
|
337
492
|
origin,
|
|
338
493
|
placeholderKey: args.key,
|
|
339
494
|
clientKey,
|
|
340
495
|
subscription: args.subscription,
|
|
496
|
+
placeholder: args.placeholder,
|
|
497
|
+
seat,
|
|
341
498
|
user: resolvedUser,
|
|
342
499
|
team: resolvedTeam,
|
|
343
500
|
intent: args.intent,
|
|
@@ -350,6 +507,10 @@ export const run = async (argv) => {
|
|
|
350
507
|
if (args.dryRun)
|
|
351
508
|
note('\nDry run — no files will be written.');
|
|
352
509
|
if (!args.yes && !args.dryRun) {
|
|
510
|
+
if (!isInteractive()) {
|
|
511
|
+
fail('\nNon-interactive session — cannot ask for confirmation. Pass --yes to proceed.');
|
|
512
|
+
return 1;
|
|
513
|
+
}
|
|
353
514
|
const verb = args.revert ? 'remove Anyray config from' : 'configure';
|
|
354
515
|
const proceed = await confirm(`\n${verb} ${adapters.length} tool target(s)?`);
|
|
355
516
|
if (!proceed) {
|
|
@@ -381,7 +542,15 @@ export const run = async (argv) => {
|
|
|
381
542
|
}
|
|
382
543
|
else {
|
|
383
544
|
ok(`Done (${changes} file(s) written).`);
|
|
384
|
-
|
|
545
|
+
// Smoke-test the connection so a routing/sign-in problem surfaces NOW with a
|
|
546
|
+
// concrete fix, not as a cryptic 4xx on the dev's first real request.
|
|
547
|
+
if (args.skipVerify) {
|
|
548
|
+
note('\nSkipped the connection smoke test (--skip-verify).');
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
await runVerify(target);
|
|
552
|
+
}
|
|
553
|
+
info('\nRe-test by hand any time:');
|
|
385
554
|
// A minimal chat completion is the one request every healthy gateway
|
|
386
555
|
// serves (there is no unauthenticated GET under /v1). "anyray-default"
|
|
387
556
|
// lets the gateway's routing config pick the real model/provider.
|
|
@@ -395,15 +564,23 @@ export const run = async (argv) => {
|
|
|
395
564
|
` -d '{"model":"anyray-default","messages":[{"role":"user","content":"ping"}],"max_tokens":16}'`));
|
|
396
565
|
info(dim(' Revert: npx anyray-connect --revert'));
|
|
397
566
|
try {
|
|
567
|
+
// Preserve any prior sync state — saveProfile replaces the file wholesale.
|
|
568
|
+
// Persist a freshly redeemed personal key so the read-only status/sync
|
|
569
|
+
// commands can present it (else they'd 401 under key enforcement); keep
|
|
570
|
+
// any previously stored key when this run didn't redeem one.
|
|
398
571
|
await saveProfile({
|
|
572
|
+
...profile,
|
|
399
573
|
gateway: target.origin,
|
|
400
574
|
name: resolvedUser,
|
|
401
575
|
team: resolvedTeam,
|
|
576
|
+
clientKey: target.clientKey ?? profile.clientKey,
|
|
402
577
|
});
|
|
403
578
|
}
|
|
404
579
|
catch (error) {
|
|
405
580
|
warn(`Could not save profile: ${error instanceof Error ? error.message : String(error)}`);
|
|
406
581
|
}
|
|
582
|
+
// Close onboarding with the tangible savings number (best-effort).
|
|
583
|
+
await printSavings(target);
|
|
407
584
|
}
|
|
408
585
|
return 0;
|
|
409
586
|
};
|
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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"}
|