@ai21/gateway 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +21 -17
  2. package/dist/agents/claude-code/index.d.ts +7 -0
  3. package/dist/agents/claude-code/index.js +112 -0
  4. package/dist/agents/claude-code/index.js.map +1 -0
  5. package/dist/agents/claude-code/verify.d.ts +6 -46
  6. package/dist/agents/claude-code/verify.js +2 -2
  7. package/dist/agents/claude-code/verify.js.map +1 -1
  8. package/dist/agents/codex/config.d.ts +20 -0
  9. package/dist/agents/codex/config.js +344 -0
  10. package/dist/agents/codex/config.js.map +1 -0
  11. package/dist/agents/codex/index.d.ts +2 -0
  12. package/dist/agents/codex/index.js +79 -0
  13. package/dist/agents/codex/index.js.map +1 -0
  14. package/dist/agents/codex/snippets.d.ts +23 -0
  15. package/dist/agents/codex/snippets.js +39 -0
  16. package/dist/agents/codex/snippets.js.map +1 -0
  17. package/dist/agents/codex/status.d.ts +8 -0
  18. package/dist/agents/codex/status.js +36 -0
  19. package/dist/agents/codex/status.js.map +1 -0
  20. package/dist/agents/codex/toml.d.ts +57 -0
  21. package/dist/agents/codex/toml.js +196 -0
  22. package/dist/agents/codex/toml.js.map +1 -0
  23. package/dist/agents/codex/verify.d.ts +2 -0
  24. package/dist/agents/codex/verify.js +43 -0
  25. package/dist/agents/codex/verify.js.map +1 -0
  26. package/dist/agents/registry.d.ts +10 -0
  27. package/dist/agents/registry.js +14 -0
  28. package/dist/agents/registry.js.map +1 -0
  29. package/dist/agents/types.d.ts +10 -0
  30. package/dist/args.d.ts +2 -3
  31. package/dist/args.js +7 -9
  32. package/dist/args.js.map +1 -1
  33. package/dist/cli.d.ts +1 -1
  34. package/dist/cli.js +18 -12
  35. package/dist/cli.js.map +1 -1
  36. package/dist/fs/safeFile.d.ts +1 -0
  37. package/dist/fs/safeFile.js.map +1 -1
  38. package/dist/fs/snapshot.d.ts +1 -1
  39. package/dist/fs/snapshot.js +1 -1
  40. package/dist/precheck.d.ts +4 -1
  41. package/dist/precheck.js +12 -9
  42. package/dist/precheck.js.map +1 -1
  43. package/dist/report.d.ts +16 -19
  44. package/dist/report.js +36 -62
  45. package/dist/report.js.map +1 -1
  46. package/dist/result.d.ts +5 -5
  47. package/dist/result.js +5 -5
  48. package/dist/result.js.map +1 -1
  49. package/dist/router.d.ts +5 -2
  50. package/dist/router.js +115 -113
  51. package/dist/router.js.map +1 -1
  52. package/dist/telemetry/events.d.ts +3 -2
  53. package/dist/telemetry/events.js +0 -6
  54. package/dist/telemetry/events.js.map +1 -1
  55. package/package.json +1 -1
package/README.md CHANGED
@@ -9,9 +9,13 @@ Ships as the `@ai21/gateway` package.
9
9
  npx @ai21/gateway install --agent-id <AGENT_ID>
10
10
  ```
11
11
 
12
- Merges `~/.claude/settings.json` so Claude Code routes through the gateway from
13
- every project on the machine (pass `--repo` to configure only the current one), then
14
- sends one request to prove it works. With no key stored it signs you in through the
12
+ Configures a coding agent — Claude Code or Codex — so it routes through the
13
+ gateway. Writes the agent's config file (`.claude/settings.json` for Claude Code,
14
+ `config.toml` for Codex), then sends one request to prove it works.
15
+
16
+ Use `--client codex` for Codex (user-level only; Codex ignores `model_provider`
17
+ and `model_providers` in a project's `.codex/config.toml`). `--client claude-code`
18
+ is the default and also accepts `--repo` for a project-local setup. With no key stored it signs you in through the
15
19
  browser first and creates an AI21 key for you, all in the one command — pass `--key`
16
20
  only for scripting, since a key in argv stays in your shell history.
17
21
 
@@ -25,17 +29,17 @@ and a warning says the key went unchecked.
25
29
  `--no-verify` turns off the _post-write_ check — the one that proves end to end that
26
30
  Claude Code reaches the gateway. It does not affect the pre-write key check.
27
31
 
28
- The gateway passes your own Claude credential through, so without a Claude login it
29
- can never answer. When `claude` reports no login — before the write, or when the
30
- post-write check proves it — the command prints `No Claude subscription detected`,
31
- leaves `settings.json` as it was before the run, and exits 9. A timeout or any other
32
- verification failure only warns and keeps the config. `--no-verify` skips this too, for
33
- machines where Claude Code is signed in later.
32
+ The gateway passes the agent's own login through. Without one it can never answer,
33
+ so `install` checks before the write (with `claude auth status` or `codex login
34
+ status`) and, when verification proves it, undoes the write and exits 9. A timeout
35
+ or any other verification failure only warns and keeps the config. The no-subscription
36
+ check and verification are skipped under `--no-verify`. For Claude Code an Anthropic
37
+ key (`--anthropic-key` or `ANTHROPIC_API_KEY`) can stand in for the login.
34
38
 
35
- The gateway currently supports only the Claude Code CLI. With no `claude` on PATH and
36
- no Anthropic key (`--anthropic-key` or `ANTHROPIC_API_KEY`), `install` stops before
37
- signing in, writes nothing, and exits 10, even under `--no-verify`. With an Anthropic
38
- key it goes ahead and verifies with a direct request instead.
39
+ Without the agent's CLI on PATH, `install` stops before signing in, writes nothing,
40
+ and exits 10, even under `--no-verify` (or, for Claude Code, without an Anthropic
41
+ key). For Codex there is no stand-in: only the Codex CLI can send the ChatGPT login
42
+ the gateway forwards.
39
43
 
40
44
  The dashboard prints this command for you (Add agent, or Reconnect on an existing
41
45
  agent) and offers the key as a separate copy.
@@ -95,10 +99,10 @@ derive, so `login` asks for `--app <url>` instead of guessing.
95
99
  `--print` renders the config instead of writing it, with the key masked. `--help`
96
100
  lists the rest.
97
101
 
98
- `--client <name>` picks which agent to configure. `claude-code` is the default and
99
- the only one supported so far — an unsupported name is refused rather than
100
- defaulted, so a `--client` we do not implement never writes Claude Code's file by
101
- mistake.
102
+ `--client <name>` picks which agent to configure: `claude-code` (the default) or
103
+ `codex`. An unsupported name is refused rather than defaulted, so it never writes
104
+ the wrong agent's file by mistake. `uninstall` also takes `--client` to know whose
105
+ file to revert.
102
106
 
103
107
  `install` reports onboarding events to AI21's product analytics (Amplitude), so we can
104
108
  see where setup fails: when it started, then whether it completed or at which step it
@@ -0,0 +1,7 @@
1
+ import type { CodingAgent, Warning } from "../types.js";
2
+ /** Pure, so tests pass the shadowing file as data rather than write one. */
3
+ export declare function claudeWarnings(processEnv: Record<string, string | undefined>, localOverride: {
4
+ readonly path: string;
5
+ readonly agentId?: string;
6
+ } | undefined): Warning[];
7
+ export declare const claudeCode: CodingAgent;
@@ -0,0 +1,112 @@
1
+ /** Claude Code: `env` keys in `settings.json`, checked with `claude auth status`, verified with `claude -p`. */
2
+ import { findOnPath } from "../../process.js";
3
+ import { revertConfig } from "./revert.js";
4
+ import { resolvePaths, shadowingLocalConfig, writeConfig } from "./settings.js";
5
+ import { ccSettings, ccSettingsEnv } from "./snippets.js";
6
+ import { checkClaudeLogin } from "./status.js";
7
+ import { CLAUDE_COMMAND, resolveAnthropicKey, verify } from "./verify.js";
8
+ const text = {
9
+ // Predates the agent-neutral outcome; `--json` consumers already match on it.
10
+ noSubscriptionOutcome: "no-claude-credential",
11
+ noSubscription: {
12
+ "logged-out": {
13
+ headline: "No Claude subscription detected.",
14
+ nextStep: "If you have one, run `/login` inside `claude`, then re-run this command. Otherwise, subscribe to Claude.",
15
+ jsonReason: "no_claude_subscription",
16
+ telemetryReason: "agent not logged in",
17
+ },
18
+ "key-rejected": {
19
+ headline: "Anthropic rejected your API key.",
20
+ nextStep: "Check ANTHROPIC_API_KEY (or --anthropic-key), or unset it and run `/login` inside `claude`, then re-run this command.",
21
+ jsonReason: "anthropic_key_rejected",
22
+ telemetryReason: "upstream credential rejected",
23
+ },
24
+ },
25
+ verifiedVia: {
26
+ "claude-cli": "`claude -p`",
27
+ "direct-ping": "a direct request",
28
+ },
29
+ skippedBecause: "no Anthropic credential was available",
30
+ notInstalled: {
31
+ message: "The Claude Code CLI was not found. The AI21 gateway currently supports only the Claude Code CLI; install it to use the gateway, then re-run this command.",
32
+ jsonOutcome: "no-claude-cli",
33
+ // Kept apart from `no_claude_subscription` so a funnel can split them.
34
+ jsonReason: "claude_code_cli_not_installed",
35
+ telemetryReason: "agent cli not installed",
36
+ },
37
+ checkingLogin: "Checking your Claude login…",
38
+ loginFound: "Claude login found",
39
+ };
40
+ /** Pure, so tests pass the shadowing file as data rather than write one. */
41
+ export function claudeWarnings(processEnv, localOverride) {
42
+ const found = [];
43
+ if (processEnv.ANTHROPIC_API_KEY !== undefined && processEnv.ANTHROPIC_API_KEY !== "") {
44
+ found.push({
45
+ code: "anthropic-api-key-set",
46
+ // It shadows the claude.ai login and surfaces as a 401 from the gateway,
47
+ // which reads as "the CLI wrote a bad config" rather than "unset this".
48
+ message: "ANTHROPIC_API_KEY is set in your environment. It overrides the credential Claude Code manages and can cause 401s through the gateway — unset it if requests start failing.",
49
+ });
50
+ }
51
+ if (localOverride !== undefined) {
52
+ const { path, agentId } = localOverride;
53
+ found.push({
54
+ code: "shadowed-by-local-config",
55
+ message: `${path} also sets Claude Code's env, and it is read after this file — so it wins. ` +
56
+ (agentId === undefined
57
+ ? "Requests will not use the agent configured here."
58
+ : `Requests will report as '${agentId}', not the agent configured here.`) +
59
+ " Remove its env block, or move your override into this file.",
60
+ });
61
+ }
62
+ return found;
63
+ }
64
+ export const claudeCode = {
65
+ id: "claude-code",
66
+ kind: "claude_code",
67
+ displayName: "Claude Code",
68
+ configLabel: "settings.json",
69
+ targets: ["user", "repo"],
70
+ verifyFlags: ["anthropic-key"],
71
+ checkInstalled(ctx, deps) {
72
+ // An Anthropic key alone is enough: it serves any other client, and the direct ping verifies with it.
73
+ if (findOnPath(CLAUDE_COMMAND, deps.lookup) !== undefined)
74
+ return { kind: "present" };
75
+ return resolveAnthropicKey({ anthropicKey: ctx.upstreamKey, processEnv: ctx.processEnv }) === undefined
76
+ ? { kind: "missing" }
77
+ : { kind: "present" };
78
+ },
79
+ resolvePaths(target, env) {
80
+ // `claude` must run where the file we wrote is the one that wins: a project-local
81
+ // settings.json outranks the home one, so a `--user` config is verified from home.
82
+ return { ...resolvePaths(target, env), verifyCwd: target === "user" ? env.home : env.cwd };
83
+ },
84
+ preview(inputs) {
85
+ return { text: ccSettings(inputs), json: { settings: { env: ccSettingsEnv(inputs) } } };
86
+ },
87
+ write(paths, inputs, options) {
88
+ return writeConfig(paths, ccSettingsEnv(inputs), options);
89
+ },
90
+ revert: revertConfig,
91
+ redact(value) {
92
+ return value.replace(/(x-ai21-key:\s*)\S+/gi, "$1****");
93
+ },
94
+ warnings(paths, processEnv) {
95
+ return claudeWarnings(processEnv, shadowingLocalConfig(paths));
96
+ },
97
+ async checkSubscription(paths, deps) {
98
+ switch (await checkClaudeLogin(paths.verifyCwd, deps)) {
99
+ case "logged-in":
100
+ return { kind: "present" };
101
+ case "logged-out":
102
+ return { kind: "missing", reason: "logged-out" };
103
+ case "inconclusive":
104
+ return { kind: "inconclusive" };
105
+ }
106
+ },
107
+ verify(ctx, deps) {
108
+ return verify({ ...ctx, anthropicKey: ctx.upstreamKey }, deps);
109
+ },
110
+ text,
111
+ };
112
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/claude-code/index.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,4 @@
1
- /**
2
- * One real request through the gateway, to prove the written config works and flip
3
- * the agent's `used` latch. Three tiers, because the CLI holds no Anthropic
4
- * credential and the gateway requires one: `claude -p` if it is on PATH, else a
5
- * direct ping if a key is available, else skip.
6
- *
7
- * Two invariants: exactly one request is fired — a winning tier means no later tier
8
- * runs — and only a definite missing-credential result changes the exit code. A
9
- * timeout or unrecognised failure stays a warning, so a flaky network never undoes a
10
- * good write.
11
- */
12
- import { type ResolvedUrls } from "../../args.js";
13
- import type { AgentDeps } from "../types.js";
1
+ import type { AgentDeps, VerifyContext as AgentVerifyContext, VerifyOutcome } from "../types.js";
14
2
  export declare const CLAUDE_COMMAND = "claude";
15
3
  export declare const CLAUDE_PROMPT = "ai21-gateway CLI connectivity check \u2014 reply with OK and nothing else.";
16
4
  export declare const PING_PATH = "/v1/messages";
@@ -31,43 +19,15 @@ export declare const PING_BODY: {
31
19
  readonly content: "Hello through the gateway";
32
20
  }];
33
21
  };
34
- export type VerifyVia = "claude-cli" | "direct-ping";
35
22
  /**
36
- * Why the Anthropic side definitely cannot work: `claude` has no login at all, or the
37
- * API key the direct ping sent was refused by Anthropic itself.
23
+ * `via` is `claude-cli` or `direct-ping`. A `no-subscription` reason is `logged-out`
24
+ * (`claude` has no login at all) or `key-rejected` (Anthropic itself refused the key
25
+ * the direct ping sent).
38
26
  */
39
- export type MissingCredential = "logged-out" | "key-rejected";
40
- /** How verification ended. Only `no-claude-credential` maps to a non-zero exit code. */
41
- export type VerifyOutcome = {
42
- readonly kind: "disabled";
43
- } | {
44
- readonly kind: "skipped";
45
- readonly hint: string;
46
- } | {
47
- readonly kind: "passed";
48
- readonly via: VerifyVia;
49
- } | {
50
- readonly kind: "failed";
51
- readonly via: VerifyVia;
52
- readonly reason: string;
53
- } | {
54
- readonly kind: "no-claude-credential";
55
- readonly via: VerifyVia;
56
- readonly reason: MissingCredential;
57
- };
58
- export interface VerifyContext {
59
- readonly urls: ResolvedUrls;
60
- readonly agentId: string;
61
- readonly ai21Key: string;
62
- readonly userId?: string | undefined;
27
+ /** Claude Code's verification also takes `--anthropic-key`, for the direct-ping tier. */
28
+ export interface VerifyContext extends AgentVerifyContext {
63
29
  /** `--anthropic-key`, which outranks the environment. */
64
30
  readonly anthropicKey?: string | undefined;
65
- readonly processEnv: Record<string, string | undefined>;
66
- /**
67
- * Where to run `claude`: the directory in which the file we wrote is the one that
68
- * wins. Home for `--user`, since a project-local settings.json outranks it.
69
- */
70
- readonly cwd: string;
71
31
  }
72
32
  /** What the direct ping would send: `--anthropic-key`, else a non-empty ANTHROPIC_API_KEY. */
73
33
  export declare function resolveAnthropicKey(ctx: Pick<VerifyContext, "anthropicKey" | "processEnv">): string | undefined;
@@ -82,7 +82,7 @@ async function viaClaude(executable, ctx, deps) {
82
82
  return { kind: "passed", via: "claude-cli" };
83
83
  // Printed before any request is made, so it cannot be a gateway or network symptom.
84
84
  if (!result.timedOut && result.code !== null && NOT_LOGGED_IN.test(result.output)) {
85
- return { kind: "no-claude-credential", via: "claude-cli", reason: "logged-out" };
85
+ return { kind: "no-subscription", via: "claude-cli", reason: "logged-out" };
86
86
  }
87
87
  const failed = (reason) => ({ kind: "failed", via: "claude-cli", reason });
88
88
  if (result.timedOut) {
@@ -219,7 +219,7 @@ async function viaDirectPing(anthropicKey, ctx, deps) {
219
219
  if (response.ok)
220
220
  return { kind: "passed", via: "direct-ping" };
221
221
  if (response.status === 401 && isAnthropicAuthError((await response.text?.()) ?? "")) {
222
- return { kind: "no-claude-credential", via: "direct-ping", reason: "key-rejected" };
222
+ return { kind: "no-subscription", via: "direct-ping", reason: "key-rejected" };
223
223
  }
224
224
  const hint = STATUS_HINTS[response.status];
225
225
  const note = response.status === 401 ? environmentNote(ctx) : "";
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/agents/claude-code/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/agents/claude-code/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type ConfigPaths } from "../../fs/safeFile.js";
2
+ import type { ConfigOutcome, RevertOptions, RevertOutcome, SnippetInputs } from "../types.js";
3
+ import { type Scan } from "./toml.js";
4
+ /** What a conflict shows instead of an AI21 key. */
5
+ export declare const REDACTED = "****";
6
+ export declare const MARKER_BEGIN = "# >>> AI21 Gateway (managed by ai21-gateway; `ai21-gateway uninstall --client codex` removes it)";
7
+ export declare const MARKER_END = "# <<< AI21 Gateway";
8
+ /** `CODEX_HOME` wins, as it does for Codex; a relative one is resolved against the cwd, as Codex does. */
9
+ export declare function codexHome(env: {
10
+ readonly home: string;
11
+ readonly cwd: string;
12
+ readonly processEnv: Record<string, string | undefined>;
13
+ }): string;
14
+ export declare function resolveCodexPaths(dir: string): ConfigPaths;
15
+ /** The agent id our block names, for the uninstall guard. */
16
+ export declare function storedAgentId(scanned: Scan): string | undefined;
17
+ export declare function writeCodexConfig(paths: ConfigPaths, inputs: SnippetInputs, options: {
18
+ readonly force: boolean;
19
+ }): ConfigOutcome;
20
+ export declare function revertCodexConfig(paths: ConfigPaths, options: RevertOptions): RevertOutcome;