useclaudeproxy 1.2.0 → 2.0.1

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 (40) hide show
  1. package/README.md +19 -3
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +5 -4
  4. package/dist/app.js.map +1 -1
  5. package/dist/args.d.ts +0 -2
  6. package/dist/args.d.ts.map +1 -1
  7. package/dist/args.js +14 -8
  8. package/dist/args.js.map +1 -1
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +2 -4
  11. package/dist/config.js.map +1 -1
  12. package/dist/install-cli-proxy.d.ts.map +1 -1
  13. package/dist/install-cli-proxy.js +1 -2
  14. package/dist/install-cli-proxy.js.map +1 -1
  15. package/dist/providers/base-provider.d.ts +14 -0
  16. package/dist/providers/base-provider.d.ts.map +1 -0
  17. package/dist/providers/base-provider.js +57 -0
  18. package/dist/providers/base-provider.js.map +1 -0
  19. package/dist/providers/hermes.d.ts +5 -8
  20. package/dist/providers/hermes.d.ts.map +1 -1
  21. package/dist/providers/hermes.js +55 -104
  22. package/dist/providers/hermes.js.map +1 -1
  23. package/dist/providers/index.d.ts +2 -3
  24. package/dist/providers/index.d.ts.map +1 -1
  25. package/dist/providers/index.js +5 -1
  26. package/dist/providers/index.js.map +1 -1
  27. package/dist/providers/opencode.d.ts +17 -0
  28. package/dist/providers/opencode.d.ts.map +1 -0
  29. package/dist/providers/opencode.js +115 -0
  30. package/dist/providers/opencode.js.map +1 -0
  31. package/dist/providers/types.d.ts +1 -7
  32. package/dist/providers/types.d.ts.map +1 -1
  33. package/dist/run-cli-proxy.d.ts.map +1 -1
  34. package/dist/run-cli-proxy.js +3 -1
  35. package/dist/run-cli-proxy.js.map +1 -1
  36. package/dist/utils.d.ts +2 -0
  37. package/dist/utils.d.ts.map +1 -0
  38. package/dist/utils.js +12 -0
  39. package/dist/utils.js.map +1 -0
  40. package/package.json +1 -1
package/README.md CHANGED
@@ -71,6 +71,21 @@ useclaudeproxy --model stealth/ox-alpha
71
71
  useclaudeproxy --proxy http://127.0.0.1:2080 --model stealth/ox-alpha
72
72
  ```
73
73
 
74
+ ### Providers
75
+
76
+ Two providers are built in. Both expose the same local proxy endpoint — they
77
+ differ only in how they authenticate upstream.
78
+
79
+ - **`hermes`** (default) — Nous Research OAuth 2.0 device flow. Completes a
80
+ browser login, then auto-refreshes the token.
81
+ - **`opencode`** — authenticates against `https://opencode.ai/zen/v1` with a key
82
+ (no device flow). Tokens persist in `data/opencode-tokens.json`.
83
+
84
+ ```bash
85
+ # Use the opencode provider, routing its upstream traffic through a proxy:
86
+ useclaudeproxy --proxy http://127.0.0.1:2080 --provider opencode --model hy3-free
87
+ ```
88
+
74
89
  On success the CLI prints the env vars to point Claude Code at the local proxy:
75
90
 
76
91
  ```bash
@@ -86,7 +101,7 @@ These work in **any position** — before or after the command.
86
101
  | Flag | Default | Notes |
87
102
  | ------------------- | ------------------ | ------------------------------------------------------------- |
88
103
  | `--model <model>` | _(required)_ | Model name to expose in OpenAI compatibility. |
89
- | `--provider <name>` | `hermes` | OAuth provider to use (hermes only, for now). |
104
+ | `--provider <name>` | `hermes` | OAuth provider to use (`hermes` \| `opencode`). |
90
105
  | `--node-env <env>` | `development` | `development` \| `production`. |
91
106
  | `--debug <ns>` | `useclaudeproxy:*` | `debug` namespaces, e.g. `useclaudeproxy:oauth`. |
92
107
  | `--data-dir <dir>` | `data` | Token storage directory. |
@@ -111,8 +126,9 @@ useclaudeproxy --model stealth/ox-alpha --data-dir ~/.useclaudeproxy --debug use
111
126
  - Two independent "proxy" concepts: the TS app's OAuth calls can use an outbound
112
127
  proxy (`--proxy`), and the binary has its own separate `proxy-url` for upstream
113
128
  provider traffic. They do not affect each other.
114
- - Providers are pluggable. `hermes` is registered in `src/providers/index.ts`;
115
- add another by implementing the `Provider` interface in `src/providers/types.ts`.
129
+ - Providers are pluggable. `hermes` and `opencode` are registered in
130
+ `src/providers/index.ts`; add another by implementing `BaseProvider` in
131
+ `src/providers/`.
116
132
 
117
133
  ## License
118
134
 
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAUA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBzC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAUA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBzC"}
package/dist/app.js CHANGED
@@ -1,16 +1,17 @@
1
1
  import Debug from "debug";
2
2
  import { args } from "./args.js";
3
- import { setProxyUrl } from "./config-yaml.js";
4
3
  import { ensureCliProxy } from "./install-cli-proxy.js";
5
4
  import { getProvider } from "./providers/index.js";
6
5
  import { runCliProxy } from "./run-cli-proxy.js";
7
6
  const log = Debug("useclaudeproxy:oauth");
8
7
  const errorLog = Debug("useclaudeproxy:oauth:error");
9
8
  export async function app() {
10
- await ensureCliProxy();
11
9
  const provider = getProvider(args.activeProvider);
12
- await provider.getValidToken();
13
- setProxyUrl(args.proxy);
10
+ await ensureCliProxy();
11
+ if (args.renew)
12
+ process.exit(0);
13
+ provider.initConfig();
14
+ provider.logConfigInfo();
14
15
  runCliProxy()
15
16
  .then((code) => process.exit(code))
16
17
  .catch((err) => {
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAiB,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,GAAG;IACvB,MAAM,cAAc,EAAE,CAAC;IAEvB,MAAM,QAAQ,GAAa,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE5D,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;IAE/B,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,WAAW,EAAE;SACV,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,QAAQ,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;QACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,GAAG;IACvB,MAAM,QAAQ,GAAiB,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAEhE,MAAM,cAAc,EAAE,CAAC;IAEvB,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAEtB,QAAQ,CAAC,aAAa,EAAE,CAAC;IAEzB,WAAW,EAAE;SACV,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,QAAQ,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;QACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC"}
package/dist/args.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  export declare const PROVIDERS: string[];
2
2
  interface CliArgs {
3
3
  force: boolean;
4
- nodeEnv: string;
5
- debug: string;
6
4
  dataDir: string;
7
5
  proxy: string;
8
6
  renew: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,UAAgC,CAAC;AAEvD,UAAU,OAAO;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAiED,eAAO,MAAM,IAAI,SAAM,CAAC"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,UAAgC,CAAC;AAEvD,UAAU,OAAO;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAqED,eAAO,MAAM,IAAI,SAAM,CAAC"}
package/dist/args.js CHANGED
@@ -4,19 +4,27 @@ const program = new Command();
4
4
  program
5
5
  .name("useclaudeproxy")
6
6
  .description("Hermes OAuth Device Flow")
7
- .option("--node-env <env>", "development | production", "development")
8
- .option("--debug <ns>", 'debug namespaces, e.g. "useclaudeproxy:*"', "useclaudeproxy:*")
9
7
  .option("--data-dir <dir>", "token storage directory", "data")
10
- .requiredOption("--model <model>", "model name to expose in openai-compatibility")
8
+ .option("--model <model>", "model name to expose in openai-compatibility")
11
9
  .option("--proxy <url>", 'CLIProxyAPI outbound proxy (omit for "", or ""|direct|none to clear)')
12
10
  .option("--provider <name>", "OAuth provider to use (default: hermes)", "hermes")
13
11
  .option("--force", "re-download CLIProxyAPI even if already installed")
14
12
  .option("--renew", "re-extract from the kept archive and re-run device flow")
15
13
  .parse();
14
+ if (!program.opts().renew &&
15
+ !program.opts().model) {
16
+ program.error("required option '--model <model>' not specified");
17
+ }
18
+ program.addHelpText("after", `
19
+ Environment variables:
20
+ NODE_ENV development | production
21
+ Example: export NODE_ENV=production
22
+
23
+ DEBUG debug namespaces, e.g. "useclaudeproxy:*"
24
+ Example: export DEBUG="useclaudeproxy:*"
25
+ `);
16
26
  const cli = {
17
27
  force: false,
18
- nodeEnv: "development",
19
- debug: "useclaudeproxy:*",
20
28
  dataDir: "data",
21
29
  proxy: "",
22
30
  renew: false,
@@ -24,9 +32,7 @@ const cli = {
24
32
  model: "",
25
33
  };
26
34
  const opts = program.opts();
27
- process.env.DEBUG = opts.debug;
28
- cli.nodeEnv = opts.nodeEnv;
29
- cli.debug = opts.debug;
35
+ process.env.DEBUG ??= "useclaudeproxy:*";
30
36
  cli.dataDir = opts.dataDir;
31
37
  cli.proxy = opts.proxy ?? "";
32
38
  cli.model = opts.model;
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAgBvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,EAAE,aAAa,CAAC;KACrE,MAAM,CACL,cAAc,EACd,2CAA2C,EAC3C,kBAAkB,CACnB;KACA,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC7D,cAAc,CACb,iBAAiB,EACjB,8CAA8C,CAC/C;KACA,MAAM,CACL,eAAe,EACf,sEAAsE,CACvE;KACA,MAAM,CACL,mBAAmB,EACnB,yCAAyC,EACzC,QAAQ,CACT;KACA,MAAM,CAAC,SAAS,EAAE,mDAAmD,CAAC;KACtE,MAAM,CAAC,SAAS,EAAE,yDAAyD,CAAC;KAC5E,KAAK,EAAE,CAAC;AAEX,MAAM,GAAG,GAAY;IACnB,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,kBAAkB;IACzB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,KAAK;IACZ,cAAc,EAAE,QAAQ;IACxB,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAWxB,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC/B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AAC7B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;AAEnC,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAcvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC7D,MAAM,CAAC,iBAAiB,EAAE,8CAA8C,CAAC;KACzE,MAAM,CACL,eAAe,EACf,sEAAsE,CACvE;KACA,MAAM,CACL,mBAAmB,EACnB,yCAAyC,EACzC,QAAQ,CACT;KACA,MAAM,CAAC,SAAS,EAAE,mDAAmD,CAAC;KACtE,MAAM,CAAC,SAAS,EAAE,yDAAyD,CAAC;KAC5E,KAAK,EAAE,CAAC;AAEX,IACE,CAAC,OAAO,CAAC,IAAI,EAAsC,CAAC,KAAK;IACzD,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EACrB,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACnE,CAAC;AAED,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;;CAOD,CACA,CAAC;AAEF,MAAM,GAAG,GAAY;IACnB,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,KAAK;IACZ,cAAc,EAAE,QAAQ;IACxB,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EASxB,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,kBAAkB,CAAC;AACzC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AAC7B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;AAEnC,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,MAAM;;;;EAAgC,CAAC;AACpD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,MAAM;;;;EAAgC,CAAC;AACpD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
package/dist/config.js CHANGED
@@ -1,8 +1,6 @@
1
1
  import fs from "node:fs";
2
2
  import { z } from "zod";
3
3
  import { args } from "./args.js";
4
- // All config is supplied via CLI flags (see args.ts). Validated with zod and
5
- // frozen. Importing this module also creates DATA_DIR.
6
4
  const envSchema = z.object({
7
5
  NODE_ENV: z.enum(["development", "production"]).default("development"),
8
6
  DATA_DIR: z.string().default("data"),
@@ -10,9 +8,9 @@ const envSchema = z.object({
10
8
  // Proxy
11
9
  });
12
10
  const parsedEnv = envSchema.safeParse({
13
- NODE_ENV: args.nodeEnv,
11
+ NODE_ENV: process.env.NODE_ENV,
14
12
  DATA_DIR: args.dataDir,
15
- DEBUG: args.debug,
13
+ DEBUG: process.env.DEBUG,
16
14
  });
17
15
  if (!parsedEnv.success) {
18
16
  console.error("❌ Invalid arguments:");
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,6EAA6E;AAC7E,uDAAuD;AACvD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACtE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE5B,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACpC,QAAQ,EAAE,IAAI,CAAC,OAAO;IACtB,QAAQ,EAAE,IAAI,CAAC,OAAO;IACtB,KAAK,EAAE,IAAI,CAAC,KAAK;CAClB,CAAC,CAAC;AACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEpD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACtE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE5B,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACpC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;IAC9B,QAAQ,EAAE,IAAI,CAAC,OAAO;IACtB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK;CACzB,CAAC,CAAC;AACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEpD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"install-cli-proxy.d.ts","sourceRoot":"","sources":["../src/install-cli-proxy.ts"],"names":[],"mappings":"AA8EA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCpD;AAsBD,wBAAgB,YAAY,IAAI,IAAI,CASnC"}
1
+ {"version":3,"file":"install-cli-proxy.d.ts","sourceRoot":"","sources":["../src/install-cli-proxy.ts"],"names":[],"mappings":"AA+EA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCpD;AAsBD,wBAAgB,YAAY,IAAI,IAAI,CASnC"}
@@ -9,7 +9,7 @@ import { args } from "./args.js";
9
9
  import { CONFIG_PATH } from "./config-yaml.js";
10
10
  import { getProvider } from "./providers/index.js";
11
11
  const log = Debug("app:install");
12
- const VERSION = "7.2.142";
12
+ const VERSION = "7.2.144";
13
13
  const RELEASE_BASE = `https://github.com/router-for-me/CLIProxyAPI/releases/download/v${VERSION}`;
14
14
  const TOOLS_DIR = path.join(import.meta.dirname, "..", "tools");
15
15
  function pickAsset() {
@@ -120,7 +120,6 @@ function renewFromArchive(archivePath) {
120
120
  extract(archivePath, TOOLS_DIR);
121
121
  log("Renewed CLIProxyAPI from %s", archivePath);
122
122
  createConfig();
123
- args.renew = false;
124
123
  }
125
124
  export function createConfig() {
126
125
  const example = path.join(TOOLS_DIR, "config.example.yaml");
@@ -1 +1 @@
1
- {"version":3,"file":"install-cli-proxy.js","sourceRoot":"","sources":["../src/install-cli-proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-cli-proxy.js","sourceRoot":"","sources":["../src/install-cli-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare abstract class BaseProvider {
2
+ abstract readonly name: string;
3
+ abstract readonly baseUrl: string;
4
+ abstract readonly tokenPath: string;
5
+ abstract initConfig(): Promise<void>;
6
+ abstract getValidToken(): Promise<unknown>;
7
+ abstract startTokenWatcher(signal?: AbortSignal): Promise<void>;
8
+ logConfigInfo(): void;
9
+ readStoredToken<T>(): T | undefined;
10
+ clearStoredToken(): void;
11
+ saveTokens(token: unknown): void;
12
+ setApiKey(apiKey: string): void;
13
+ }
14
+ //# sourceMappingURL=base-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"AAQA,8BAAsB,YAAY;IAChC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAEpC,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE,aAAa,SAoBZ;IACD,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,CAOlC;IAED,gBAAgB,IAAI,IAAI,CAOvB;IAED,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAI/B;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ9B;CACF"}
@@ -0,0 +1,57 @@
1
+ import Debug from "debug";
2
+ import fs from "node:fs";
3
+ import { args } from "../args.js";
4
+ import { readConfig, writeConfig } from "../config-yaml.js";
5
+ const log = Debug("useclaudeproxy:BaseProvider");
6
+ const errorLog = Debug("useclaudeproxy:BaseProvider:error");
7
+ export class BaseProvider {
8
+ logConfigInfo() {
9
+ const config = readConfig();
10
+ const text = `
11
+ #API-KEY: ${config["api-keys"]}
12
+ OpenAI-compatible: http://${config["host"]}:${config["port"]}/v1
13
+ Anthropic-compatible: http://${config["host"]}:${config["port"]}
14
+ Gemini-compatible: http://${config["host"]}:${config["port"]}
15
+
16
+ Model >>> Alias:
17
+ ${args.model} >>> claude-opus-5
18
+ ${args.model} >>> ${args.model}
19
+
20
+ [ClaudeCode]
21
+ export ANTHROPIC_MODEL=claude-opus-5
22
+ export ANTHROPIC_BASE_URL=http://${config["host"]}:${config["port"]}
23
+ export ANTHROPIC_AUTH_TOKEN=${config["api-keys"]}
24
+ `;
25
+ console.log(text);
26
+ }
27
+ readStoredToken() {
28
+ if (!fs.existsSync(this.tokenPath))
29
+ return undefined;
30
+ try {
31
+ return JSON.parse(fs.readFileSync(this.tokenPath, "utf8"));
32
+ }
33
+ catch {
34
+ return undefined;
35
+ }
36
+ }
37
+ clearStoredToken() {
38
+ fs.rmSync(args.dataDir, {
39
+ recursive: true,
40
+ force: true,
41
+ });
42
+ log("Cleared stored token");
43
+ }
44
+ saveTokens(token) {
45
+ fs.writeFileSync(this.tokenPath, JSON.stringify(token, null, 2), {
46
+ mode: 0o600,
47
+ });
48
+ }
49
+ setApiKey(apiKey) {
50
+ const config = readConfig();
51
+ const api = config["openai-compatibility"][0];
52
+ api["api-key-entries"] = [{ "api-key": apiKey }];
53
+ api["headers"]["Authorization"] = `Bearer ${apiKey}`;
54
+ writeConfig(config);
55
+ }
56
+ }
57
+ //# sourceMappingURL=base-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,GAAG,GAAG,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,mCAAmC,CAAC,CAAC;AAE5D,MAAM,OAAgB,YAAY;IAShC,aAAa;QACX,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,MAAM,IAAI,GAAG;gBACD,MAAM,CAAC,UAAU,CAAC;gCACF,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;mCAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;gCACnC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;;;UAGtD,IAAI,CAAC,KAAK;UACV,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK;;;;uCAIC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;kCACrC,MAAM,CAAC,UAAU,CAAC;KAC/C,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,eAAe;QACb,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QACrD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAM,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;YACtB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,KAAc;QACvB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,GAAG,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;QAErD,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;CACF"}
@@ -1,23 +1,20 @@
1
- import type { Provider } from "./types.ts";
1
+ import { BaseProvider } from "./base-provider.ts";
2
2
  type TokenResponse = {
3
3
  access_token: string;
4
4
  refresh_token?: string;
5
5
  token_type: string;
6
6
  expires_in?: number;
7
7
  };
8
- export declare class HermesProvider implements Provider {
8
+ export declare class HermesProvider extends BaseProvider {
9
9
  readonly name = "hermes";
10
+ readonly baseUrl = "https://inference-api.nousresearch.com/v1";
10
11
  readonly tokenPath: string;
11
12
  private readonly client;
13
+ initConfig(): Promise<void>;
12
14
  getValidToken(): Promise<TokenResponse>;
13
15
  startTokenWatcher(signal?: AbortSignal): Promise<void>;
14
- private getAccountInfo;
15
16
  private runDeviceFlow;
16
- clearStoredToken(): void;
17
- private readStoredToken;
18
- private saveTokens;
19
- private initConfig;
20
- private setApiKey;
17
+ saveTokens(token: TokenResponse): void;
21
18
  }
22
19
  export declare const hermesProvider: HermesProvider;
23
20
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/providers/hermes.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6B3C,KAAK,aAAa,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAmJF,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,SAAS,SAAoD;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEjD,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAwB5C;IAEK,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3D;YAEa,cAAc;YAMd,aAAa;IAsB3B,gBAAgB,IAAI,IAAI,CAKvB;IAED,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAiDlB,OAAO,CAAC,SAAS;CASlB;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
1
+ {"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/providers/hermes.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAqBlD,KAAK,aAAa,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA8IF,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,OAAO,+CAA+C;IAC/D,QAAQ,CAAC,SAAS,SAAoD;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEjD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiChC;IAEK,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAwB5C;IAEK,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3D;YAEa,aAAa;IAqBlB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAG9C;CACF;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import Debug from "debug";
2
- import fs from "node:fs";
3
2
  import path from "node:path";
4
3
  import open from "open";
5
4
  import { args } from "../args.js";
@@ -7,21 +6,16 @@ import { readConfig, writeConfig } from "../config-yaml.js";
7
6
  import { config } from "../config.js";
8
7
  import { createOAuthHttpClient } from "../http-client.js";
9
8
  import { AccessDeniedError } from "../types.js";
10
- const log = Debug("useclaudeproxy:oauth");
11
- const errorLog = Debug("useclaudeproxy:oauth:error");
9
+ import { sleep } from "../utils.js";
10
+ import { BaseProvider } from "./base-provider.js";
11
+ const log = Debug("useclaudeproxy:hermes");
12
+ const errorLog = Debug("useclaudeproxy:hermes:error");
12
13
  const POLL_INTERVAL_MS = 7000;
13
14
  const WATCH_INTERVAL_MS = 7000;
14
15
  const FORM_HEADERS = {
15
16
  "Content-Type": "application/x-www-form-urlencoded",
16
17
  Accept: "application/json",
17
18
  };
18
- const OAUTH = {
19
- baseUrl: "https://portal.nousresearch.com/api/oauth",
20
- clientId: "hermes-cli",
21
- scope: "inference:invoke",
22
- grantType: "urn:ietf:params:oauth:grant-type:device_code",
23
- refreshTokenHeader: "X-Nous-Refresh-Token",
24
- };
25
19
  class OAuthHttpError extends Error {
26
20
  statusCode;
27
21
  body;
@@ -40,14 +34,21 @@ class DeviceCodeExpiredError extends Error {
40
34
  }
41
35
  class HermesDeviceFlowClient {
42
36
  http;
37
+ OAUTH = {
38
+ baseUrl: "https://portal.nousresearch.com/api/oauth",
39
+ clientId: "hermes-cli",
40
+ scope: "inference:invoke",
41
+ grantType: "urn:ietf:params:oauth:grant-type:device_code",
42
+ refreshTokenHeader: "X-Nous-Refresh-Token",
43
+ };
43
44
  constructor(http = createOAuthHttpClient()) {
44
45
  this.http = http;
45
46
  }
46
47
  async requestDeviceCode() {
47
48
  log("Requesting device code");
48
- const response = await this.http.post(`${OAUTH.baseUrl}/device/code`, {
49
+ const response = await this.http.post(`${this.OAUTH.baseUrl}/device/code`, {
49
50
  headers: FORM_HEADERS,
50
- body: `client_id=${OAUTH.clientId}&scope=${encodeURIComponent(OAUTH.scope)}`,
51
+ body: `client_id=${this.OAUTH.clientId}&scope=${encodeURIComponent(this.OAUTH.scope)}`,
51
52
  });
52
53
  return this.parseOrThrow(response, "Failed to get device code");
53
54
  }
@@ -55,9 +56,9 @@ class HermesDeviceFlowClient {
55
56
  log("Polling for token");
56
57
  while (true) {
57
58
  await sleep(POLL_INTERVAL_MS);
58
- const response = await this.http.post(`${OAUTH.baseUrl}/token`, {
59
+ const response = await this.http.post(`${this.OAUTH.baseUrl}/token`, {
59
60
  headers: FORM_HEADERS,
60
- body: `grant_type=${OAUTH.grantType}&client_id=${OAUTH.clientId}&device_code=${deviceCode}`,
61
+ body: `grant_type=${this.OAUTH.grantType}&client_id=${this.OAUTH.clientId}&device_code=${deviceCode}`,
61
62
  });
62
63
  if (response.statusCode === 200)
63
64
  return parseBody(response);
@@ -70,15 +71,18 @@ class HermesDeviceFlowClient {
70
71
  }
71
72
  async refreshToken(refreshToken) {
72
73
  log("Refreshing access token");
73
- const response = await this.http.post(`${OAUTH.baseUrl}/token`, {
74
- headers: { ...FORM_HEADERS, [OAUTH.refreshTokenHeader]: refreshToken },
75
- body: `grant_type=refresh_token&client_id=${OAUTH.clientId}`,
74
+ const response = await this.http.post(`${this.OAUTH.baseUrl}/token`, {
75
+ headers: {
76
+ ...FORM_HEADERS,
77
+ [this.OAUTH.refreshTokenHeader]: refreshToken,
78
+ },
79
+ body: `grant_type=refresh_token&client_id=${this.OAUTH.clientId}`,
76
80
  });
77
81
  return this.parseOrThrow(response, "Failed to refresh token");
78
82
  }
79
83
  async fetchAccountInfo(accessToken) {
80
84
  log("Fetching account information");
81
- const response = await this.http.get(`${OAUTH.baseUrl}/account`, {
85
+ const response = await this.http.get(`${this.OAUTH.baseUrl}/account`, {
82
86
  headers: {
83
87
  Authorization: `Bearer ${accessToken}`,
84
88
  Accept: "application/json",
@@ -111,21 +115,39 @@ function parseBody(response) {
111
115
  ? JSON.parse(response.body)
112
116
  : response.body;
113
117
  }
114
- function sleep(ms, signal) {
115
- return new Promise((resolve) => {
116
- if (signal?.aborted)
117
- return resolve();
118
- const t = setTimeout(resolve, ms);
119
- signal?.addEventListener("abort", () => {
120
- clearTimeout(t);
121
- resolve();
122
- }, { once: true });
123
- });
124
- }
125
- export class HermesProvider {
118
+ export class HermesProvider extends BaseProvider {
126
119
  name = "hermes";
120
+ baseUrl = "https://inference-api.nousresearch.com/v1";
127
121
  tokenPath = path.join(config.DATA_DIR, "hermes-tokens.json");
128
122
  client = new HermesDeviceFlowClient();
123
+ async initConfig() {
124
+ const config = readConfig();
125
+ config["host"] = "127.0.0.1";
126
+ config["api-keys"] = ["456789"];
127
+ config["openai-compatibility"] = [{ name: this.name }];
128
+ const api = config["openai-compatibility"][0];
129
+ api["base-url"] = this.baseUrl;
130
+ api["models"] = [
131
+ { name: args.model, alias: "claude-opus-5" },
132
+ { name: args.model, alias: "" },
133
+ ];
134
+ api["headers"] = {
135
+ "User-Agent": "OpenAI/Python 2.24.0",
136
+ "X-Stainless-Arch": "x64",
137
+ "X-Stainless-Async": "false",
138
+ "X-Stainless-Lang": "python",
139
+ "X-Stainless-Os": "Linux",
140
+ "X-Stainless-Package-Version": "2.24.0",
141
+ "X-Stainless-Read-Timeout": "30.0",
142
+ "X-Stainless-Retry-Count": "0",
143
+ "X-Stainless-Runtime": "CPython",
144
+ "X-Stainless-Runtime-Version": "3.11.15",
145
+ };
146
+ api["disable-cooling"] = true;
147
+ const token = await this.getValidToken();
148
+ this.setApiKey(token.access_token);
149
+ writeConfig(config);
150
+ }
129
151
  async getValidToken() {
130
152
  const stored = this.readStoredToken();
131
153
  if (stored) {
@@ -156,8 +178,8 @@ export class HermesProvider {
156
178
  let current = (await this.getValidToken()).access_token;
157
179
  while (!signal?.aborted) {
158
180
  try {
159
- const account = await this.getAccountInfo(current);
160
- // log("Account Information:\n" + JSON.stringify(account, null, 2));
181
+ const account = await this.client.fetchAccountInfo(current);
182
+ // log("Account Information:", account);
161
183
  log("Token valid");
162
184
  }
163
185
  catch (err) {
@@ -169,9 +191,6 @@ export class HermesProvider {
169
191
  await sleep(WATCH_INTERVAL_MS, signal);
170
192
  }
171
193
  }
172
- async getAccountInfo(accessToken) {
173
- return this.client.fetchAccountInfo(accessToken);
174
- }
175
194
  async runDeviceFlow() {
176
195
  const deviceCode = await this.client.requestDeviceCode();
177
196
  log("Device code received: user_code=%s", deviceCode.user_code);
@@ -180,81 +199,13 @@ export class HermesProvider {
180
199
  console.log(`Opened ${verificationUrl}. If it didn't open, enter code ${deviceCode.user_code} there.`);
181
200
  const token = await this.client.pollForToken(deviceCode.device_code);
182
201
  log("Authorization successful");
183
- this.initConfig(args.model);
184
202
  this.saveTokens(token);
185
203
  return token;
186
204
  }
187
- clearStoredToken() {
188
- if (fs.existsSync(this.tokenPath)) {
189
- fs.rmSync(this.tokenPath, { force: true });
190
- log("Cleared stored token");
191
- }
192
- }
193
- readStoredToken() {
194
- if (!fs.existsSync(this.tokenPath))
195
- return undefined;
196
- try {
197
- return JSON.parse(fs.readFileSync(this.tokenPath, "utf8"));
198
- }
199
- catch {
200
- return undefined;
201
- }
202
- }
203
205
  saveTokens(token) {
204
- fs.writeFileSync(this.tokenPath, JSON.stringify(token, null, 2), {
205
- mode: 0o600,
206
- });
206
+ super.saveTokens(token);
207
207
  this.setApiKey(token.access_token);
208
208
  }
209
- initConfig(model) {
210
- const config = readConfig();
211
- config["host"] = "127.0.0.1";
212
- config["api-keys"] = ["456789"];
213
- config["openai-compatibility"] = [{ name: args.activeProvider }];
214
- const api = config["openai-compatibility"][0];
215
- api["base-url"] = "https://inference-api.nousresearch.com/v1";
216
- api["models"] = [
217
- { name: model, alias: "claude-opus-5" },
218
- { name: model, alias: "" },
219
- ];
220
- api["headers"] = {
221
- "User-Agent": "OpenAI/Python 2.24.0",
222
- "X-Stainless-Arch": "x64",
223
- "X-Stainless-Async": "false",
224
- "X-Stainless-Lang": "python",
225
- "X-Stainless-Os": "Linux",
226
- "X-Stainless-Package-Version": "2.24.0",
227
- "X-Stainless-Read-Timeout": "30.0",
228
- "X-Stainless-Retry-Count": "0",
229
- "X-Stainless-Runtime": "CPython",
230
- "X-Stainless-Runtime-Version": "3.11.15",
231
- };
232
- api["disable-cooling"] = true;
233
- const text = `
234
- #API-KEY: ${config["api-keys"]}
235
- OpenAI-compatible: http://127.0.0.1:${config["port"]}/v1
236
- Anthropic-compatible: http://127.0.0.1:${config["port"]}
237
- Gemini-compatible: http://127.0.0.1:${config["port"]}
238
-
239
- Model >>> Alias:
240
- ${model} >>> claude-opus-5
241
- ${model} >>>
242
-
243
- [ClaudeCode]
244
- export ANTHROPIC_MODEL=claude-opus-5
245
- export ANTHROPIC_BASE_URL=http://127.0.0.1:${config["port"]}
246
- export ANTHROPIC_AUTH_TOKEN=${config["api-keys"]}
247
- `;
248
- console.log(text);
249
- writeConfig(config);
250
- }
251
- setApiKey(apiKey) {
252
- const config = readConfig();
253
- const api = config["openai-compatibility"][0];
254
- api["api-key-entries"] = [{ "api-key": apiKey }];
255
- api["headers"]["Authorization"] = `Bearer ${apiKey}`;
256
- writeConfig(config);
257
- }
258
209
  }
259
210
  export const hermesProvider = new HermesProvider();
260
211
  //# sourceMappingURL=hermes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/providers/hermes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/providers/hermes.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import type { Provider } from "./types.ts";
2
- export declare function getProvider(name: string): Provider;
1
+ import type { BaseProvider } from "./base-provider.ts";
2
+ export declare function getProvider(name: string): BaseProvider;
3
3
  export declare const PROVIDER_NAMES: string[];
4
- export type { Provider };
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAQlD;AAED,eAAO,MAAM,cAAc,UAAuB,CAAC;AAEnD,YAAY,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAQtD;AAED,eAAO,MAAM,cAAc,UAAuB,CAAC"}
@@ -1,5 +1,9 @@
1
1
  import { hermesProvider } from "./hermes.js";
2
- const registry = new Map([["hermes", hermesProvider]]);
2
+ import { openCodeProvider } from "./opencode.js";
3
+ const registry = new Map([
4
+ ["hermes", hermesProvider],
5
+ ["opencode", openCodeProvider],
6
+ ]);
3
7
  export function getProvider(name) {
4
8
  const provider = registry.get(name.toLowerCase());
5
9
  if (!provider) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAmB,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAEzE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,kBAAkB,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAuB;IAC7C,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1B,CAAC,UAAU,EAAE,gBAAgB,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,kBAAkB,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { BaseProvider } from "./base-provider.ts";
2
+ type Token = {
3
+ key: string;
4
+ };
5
+ export declare class OpenCodeProvider extends BaseProvider {
6
+ readonly name = "opencode";
7
+ readonly baseUrl = "https://opencode.ai/zen/v1";
8
+ readonly tokenPath: string;
9
+ private readonly http;
10
+ initConfig(): Promise<void>;
11
+ getValidToken(): Promise<Token>;
12
+ saveTokens(token: Token): void;
13
+ startTokenWatcher(signal?: AbortSignal): Promise<void>;
14
+ }
15
+ export declare const openCodeProvider: OpenCodeProvider;
16
+ export {};
17
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAgCF,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,OAAO,gCAAgC;IAChD,QAAQ,CAAC,SAAS,SAAsD;IACxE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAC1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBhC;IAEK,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,CAYpC;IAEQ,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAGtC;IAEK,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC3D;CACF;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -0,0 +1,115 @@
1
+ import Debug from "debug";
2
+ import crypto from "node:crypto";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import { args } from "../args.js";
6
+ import { readConfig, writeConfig } from "../config-yaml.js";
7
+ import { config } from "../config.js";
8
+ import { createOAuthHttpClient } from "../http-client.js";
9
+ import { sleep } from "../utils.js";
10
+ import { BaseProvider } from "./base-provider.js";
11
+ const log = Debug("useclaudeproxy:opencode");
12
+ const errorLog = Debug("useclaudeproxy:opencode:error");
13
+ const WATCH_INTERVAL_MS = 7000;
14
+ function generateRequestId() {
15
+ return `msg_${crypto.randomUUID().replace(/-/g, "")}`;
16
+ }
17
+ function generateSessionId() {
18
+ return `ses_${crypto.randomUUID().replace(/-/g, "")}`;
19
+ }
20
+ function toOpencodeSession(id) {
21
+ const stripped = String(id ?? "")
22
+ .replace(/^ses_/, "")
23
+ .replace(/-/g, "");
24
+ return stripped ? `ses_${stripped}` : null;
25
+ }
26
+ function buildOpenCodeHeaders(sessionId) {
27
+ const currentSession = toOpencodeSession(sessionId) ?? generateSessionId();
28
+ return {
29
+ "Content-Type": "application/json",
30
+ "User-Agent": "opencode/1.18.23 ai-sdk/provider-utils/4.0.23 runtime/bun/1.3.14",
31
+ "x-opencode-client": "cli",
32
+ "x-opencode-session": currentSession,
33
+ "x-opencode-request": generateRequestId(),
34
+ "x-opencode-project": "global",
35
+ accept: "*/*",
36
+ "accept-encoding": "gzip, deflate, br",
37
+ };
38
+ }
39
+ export class OpenCodeProvider extends BaseProvider {
40
+ name = "opencode";
41
+ baseUrl = "https://opencode.ai/zen/v1";
42
+ tokenPath = path.join(config.DATA_DIR, "opencode-tokens.json");
43
+ http = createOAuthHttpClient();
44
+ async initConfig() {
45
+ const config = readConfig();
46
+ config["host"] = "127.0.0.1";
47
+ config["api-keys"] = ["456789"];
48
+ config["openai-compatibility"] = [{ name: this.name }];
49
+ const api = config["openai-compatibility"][0];
50
+ api["base-url"] = this.baseUrl;
51
+ api["models"] = [
52
+ { name: args.model, alias: "claude-opus-5" },
53
+ { name: args.model, alias: "" },
54
+ ];
55
+ api["disable-cooling"] = true;
56
+ api["headers"] = buildOpenCodeHeaders();
57
+ const token = await this.getValidToken();
58
+ this.setApiKey(token.key);
59
+ writeConfig(config);
60
+ }
61
+ async getValidToken() {
62
+ if (fs.existsSync(this.tokenPath)) {
63
+ const token = this.readStoredToken();
64
+ if (token)
65
+ return token;
66
+ }
67
+ const token = {
68
+ key: "public",
69
+ };
70
+ this.saveTokens(token);
71
+ return token;
72
+ }
73
+ saveTokens(token) {
74
+ super.saveTokens(token);
75
+ this.setApiKey(token.key);
76
+ }
77
+ async startTokenWatcher(signal) {
78
+ const cfg = readConfig();
79
+ const token = await this.getValidToken();
80
+ log("Watching OpenCode provider at %s every %dms", this.baseUrl, WATCH_INTERVAL_MS);
81
+ while (!signal?.aborted) {
82
+ try {
83
+ const res = await this.http.post(`${this.baseUrl}/chat/completions`, {
84
+ headers: {
85
+ ...buildOpenCodeHeaders(),
86
+ Authorization: `Bearer ${token.key}`,
87
+ },
88
+ json: {
89
+ model: args.model,
90
+ messages: [{ role: "user", content: "ping" }],
91
+ stream: false,
92
+ max_tokens: 5,
93
+ temperature: 0.5,
94
+ reasoning_effort: "low",
95
+ stream_options: { include_usage: true },
96
+ },
97
+ throwHttpErrors: false,
98
+ retry: { limit: 0 },
99
+ timeout: { request: 30_000 },
100
+ https: { rejectUnauthorized: false },
101
+ });
102
+ if (res.statusCode !== 200) {
103
+ throw new Error(`StatusCode: ${res.statusCode}`);
104
+ }
105
+ log("OpenCode provider reachable");
106
+ }
107
+ catch (err) {
108
+ errorLog("OpenCode provider unavailable: %o", err);
109
+ }
110
+ await sleep(WATCH_INTERVAL_MS, signal);
111
+ }
112
+ }
113
+ }
114
+ export const openCodeProvider = new OpenCodeProvider();
115
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,2 @@
1
- export interface Provider {
2
- readonly name: string;
3
- readonly tokenPath: string;
4
- getValidToken(): Promise<unknown>;
5
- startTokenWatcher(signal?: AbortSignal): Promise<void>;
6
- clearStoredToken(): void;
7
- }
1
+ export {};
8
2
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,gBAAgB,IAAI,IAAI,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"run-cli-proxy.d.ts","sourceRoot":"","sources":["../src/run-cli-proxy.ts"],"names":[],"mappings":"AAaA,wBAAsB,WAAW,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAa3E"}
1
+ {"version":3,"file":"run-cli-proxy.d.ts","sourceRoot":"","sources":["../src/run-cli-proxy.ts"],"names":[],"mappings":"AAaA,wBAAsB,WAAW,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAe3E"}
@@ -1,13 +1,15 @@
1
1
  import Debug from "debug";
2
2
  import cp from "node:child_process";
3
3
  import path from "node:path";
4
- import { CONFIG_PATH } from "./config-yaml.js";
4
+ import { args } from "./args.js";
5
+ import { CONFIG_PATH, setProxyUrl } from "./config-yaml.js";
5
6
  const log = Debug("app:run");
6
7
  const BINARY = path.join(import.meta.dirname, "..", "tools", "cli-proxy-api");
7
8
  // Spawns the extracted binary with tools/config.yaml. `proxyArgs` are passed
8
9
  // through verbatim (e.g. --tui, --standalone). Inherits stdio and forwards
9
10
  // signals so the user drives it directly (Ctrl+C shuts the server down).
10
11
  export async function runCliProxy(proxyArgs = []) {
12
+ setProxyUrl(args.proxy);
11
13
  const argv = [BINARY, "-config", CONFIG_PATH, ...proxyArgs];
12
14
  log("Spawning: %s", argv.join(" "));
13
15
  const child = cp.spawn(argv[0], argv.slice(1), { stdio: "inherit" });
@@ -1 +1 @@
1
- {"version":3,"file":"run-cli-proxy.js","sourceRoot":"","sources":["../src/run-cli-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AAE9E,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAS,GAAa,EAAE;IACxD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC;IAC5D,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,CAAC,GAAmB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAEvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAC/C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-cli-proxy.js","sourceRoot":"","sources":["../src/run-cli-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AAE9E,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAS,GAAa,EAAE;IACxD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExB,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC;IAC5D,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,CAAC,GAAmB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAEvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAC/C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE"}
package/dist/utils.js ADDED
@@ -0,0 +1,12 @@
1
+ export function sleep(ms, signal) {
2
+ return new Promise((resolve) => {
3
+ if (signal?.aborted)
4
+ return resolve();
5
+ const t = setTimeout(resolve, ms);
6
+ signal?.addEventListener("abort", () => {
7
+ clearTimeout(t);
8
+ resolve();
9
+ }, { once: true });
10
+ });
11
+ }
12
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,EAAE,gBAAgB,CACtB,OAAO,EACP,GAAG,EAAE;YACH,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "useclaudeproxy",
3
- "version": "1.2.0",
3
+ "version": "2.0.1",
4
4
  "author": "maanimeisam",
5
5
  "description": "useclaudeproxy — OAuth device-flow CLI that authenticates the Hermes CLI and runs CLIProxyAPI as a local OpenAI/Claude/Gemini/Codex proxy.",
6
6
  "main": "./dist/index.js",