useclaudeproxy 1.2.0 → 2.0.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 (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 +125 -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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAiB,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAEjC,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,YAAY,GAAG,mEAAmE,OAAO,EAAE,CAAC;AAClG,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAEhE,SAAS,SAAS;IAChB,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACpB,IAAI,QAAgB,CAAC;IACrB,IAAI,GAAqB,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,OAAO;YACV,QAAQ,GAAG,SAAS,CAAC;YACrB,GAAG,GAAG,KAAK,CAAC;YACZ,MAAM;QACR,KAAK,QAAQ;YACX,QAAQ,GAAG,QAAQ,CAAC;YACpB,GAAG,GAAG,QAAQ,CAAC;YACf,MAAM;QACR,KAAK,SAAS;YACZ,QAAQ,GAAG,SAAS,CAAC;YACrB,GAAG,GAAG,QAAQ,CAAC;YACf,MAAM;QACR,KAAK,OAAO;YACV,QAAQ,GAAG,OAAO,CAAC;YACnB,GAAG,GAAG,QAAQ,CAAC;YACf,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,IAAY,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,KAAK;YACR,IAAI,GAAG,OAAO,CAAC;YACf,MAAM;QACR,KAAK,OAAO;YACV,IAAI,GAAG,SAAS,CAAC;YACjB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,eAAe,OAAO,IAAI,QAAQ,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAChE,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,WAAmB,EAAE,OAAe;IACnD,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3D,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;QACzD,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,GAAG,YAAY,IAAI,KAAK,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAa,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE5D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC5B,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IACE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QACxB,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;QACpC,CAAC,IAAI,CAAC,KAAK,EACX,CAAC;QACD,GAAG,CAAC,sDAAsD,EAAE,SAAS,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,8EAA8E,SAAS,EAAE,CAC1F,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,kEAAkE;IAClE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QAC7C,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,gDAAgD,EAAE,WAAW,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAChC,GAAG,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CACX,kBAAkB;YAChB,WAAW;YACX,wDAAwD,CAC3D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAChC,GAAG,CAAC,6BAA6B,EAAE,WAAW,CAAC,CAAC;IAChD,YAAY,EAAE,CAAC;IACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO;IACvC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtC,GAAG,CAAC,mBAAmB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
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,CAkD3D;CACF;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -0,0 +1,125 @@
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: [
91
+ {
92
+ role: "system",
93
+ content: 'You are a title generator. You output ONLY a thread title. Nothing else.\n\n<task>\nGenerate a brief title that would help the user find this conversation later.\n\nFollow all rules in <rules>\nUse the <examples> so you know what a good title looks like.\nYour output must be:\n- A single line\n- ≤50 characters\n- No explanations\n</task>\n\n<rules>\n- you MUST use the same language as the user message you are summarizing\n- Title must be grammatically correct and read naturally - no word salad\n- Never include tool names in the title (e.g. "read tool", "bash tool", "edit tool")\n- Focus on the main topic or question the user needs to retrieve\n- Vary your phrasing - avoid repetitive patterns like always starting with "Analyzing"\n- When a file is mentioned, focus on WHAT the user wants to do WITH the file, not just that they shared it\n- Keep exact: technical terms, numbers, filenames, HTTP codes\n- Remove: the, this, my, a, an\n- Never assume tech stack\n- Never use tools\n- NEVER respond to questions, just generate a title for the conversation\n- The title should NEVER include "summarizing" or "generating" when generating a title\n- DO NOT SAY YOU CANNOT GENERATE A TITLE OR COMPLAIN ABOUT THE INPUT\n- Always output something meaningful, even if the input is minimal.\n- If the user message is short or conversational (e.g. "hello", "lol", "what\'s up", "hey"):\n → create a title that reflects the user\'s tone or intent (such as Greeting, Quick check-in, Light chat, Intro message, etc.)\n</rules>\n\n<examples>\n"debug 500 errors in production" → Debugging production 500 errors\n"refactor user service" → Refactoring user service\n"why is app.js failing" → app.js failure investigation\n"implement rate limiting" → Rate limiting implementation\n"how do I connect postgres to my API" → Postgres API connection\n"best practices for React hooks" → React hooks best practices\n"@src/auth.ts can you add refresh token support" → Auth refresh token support\n"@utils/parser.ts this is broken" → Parser bug fix\n"look at @config.json" → Config review\n"@App.tsx add dark mode toggle" → Dark mode toggle in App\n</examples>\n',
94
+ },
95
+ {
96
+ role: "user",
97
+ content: "Generate a title for this conversation:\n",
98
+ },
99
+ { role: "user", content: "Hello" },
100
+ ],
101
+ stream: false,
102
+ max_tokens: 100,
103
+ temperature: 0.5,
104
+ reasoning_effort: "low",
105
+ stream_options: { include_usage: true },
106
+ },
107
+ throwHttpErrors: false,
108
+ retry: { limit: 0 },
109
+ timeout: { request: 30_000 },
110
+ https: { rejectUnauthorized: false },
111
+ });
112
+ if (res.statusCode !== 200) {
113
+ throw new Error(`StatusCode: ${res.statusCode}`);
114
+ }
115
+ log("OpenCode provider reachable");
116
+ }
117
+ catch (err) {
118
+ errorLog("OpenCode provider unavailable: %o", err);
119
+ }
120
+ await sleep(WATCH_INTERVAL_MS, signal);
121
+ }
122
+ }
123
+ }
124
+ export const openCodeProvider = new OpenCodeProvider();
125
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAM/B,SAAS,iBAAiB;IACxB,OAAO,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,iBAAiB,CAAC,EAA6B;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;SAC9B,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrB,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAkB;IAC9C,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,iBAAiB,EAAE,CAAC;IAC3E,OAAO;QACL,cAAc,EAAE,kBAAkB;QAClC,YAAY,EACV,kEAAkE;QACpE,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,cAAc;QACpC,oBAAoB,EAAE,iBAAiB,EAAE;QACzC,oBAAoB,EAAE,QAAQ;QAC9B,MAAM,EAAE,KAAK;QACb,iBAAiB,EAAE,mBAAmB;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACvC,IAAI,GAAG,UAAU,CAAC;IAClB,OAAO,GAAG,4BAA4B,CAAC;IACvC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACvD,IAAI,GAAG,qBAAqB,EAAE,CAAC;IAChD,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;QAC7B,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvD,MAAM,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,GAAG;YACd,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE;YAC5C,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;SAChC,CAAC;QACF,GAAG,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;QAE9B,GAAG,CAAC,SAAS,CAAC,GAAG,oBAAoB,EAAE,CAAC;QAExC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE1B,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAS,CAAC;YAC5C,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QAED,MAAM,KAAK,GAAU;YACnB,GAAG,EAAE,QAAQ;SACd,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvB,OAAO,KAAK,CAAC;IACf,CAAC;IAEQ,UAAU,CAAC,KAAY;QAC9B,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAoB;QAC1C,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAEzC,GAAG,CACD,6CAA6C,EAC7C,IAAI,CAAC,OAAO,EACZ,iBAAiB,CAClB,CAAC;QACF,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;oBACnE,OAAO,EAAE;wBACP,GAAG,oBAAoB,EAAE;wBACzB,aAAa,EAAE,UAAU,KAAK,CAAC,GAAG,EAAE;qBACrC;oBACD,IAAI,EAAE;wBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,QAAQ,EAAE;4BACR;gCACE,IAAI,EAAE,QAAQ;gCACd,OAAO,EACL,gmEAAgmE;6BACnmE;4BACD;gCACE,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,2CAA2C;6BACrD;4BACD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;yBACnC;wBACD,MAAM,EAAE,KAAK;wBACb,UAAU,EAAE,GAAG;wBACf,WAAW,EAAE,GAAG;wBAChB,gBAAgB,EAAE,KAAK;wBACvB,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;qBACxC;oBACD,eAAe,EAAE,KAAK;oBACtB,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;oBACnB,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;oBAC5B,KAAK,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE;iBACrC,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBACnD,CAAC;gBACD,GAAG,CAAC,6BAA6B,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
@@ -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.0",
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",