opencode-claude-auth 0.7.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -32
- package/dist/betas.d.ts +1 -0
- package/dist/betas.d.ts.map +1 -1
- package/dist/betas.js +33 -18
- package/dist/betas.js.map +1 -1
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +10 -4
- package/dist/credentials.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -14
- package/dist/index.js.map +1 -1
- package/dist/keychain.d.ts.map +1 -1
- package/dist/keychain.js +5 -5
- package/dist/keychain.js.map +1 -1
- package/dist/transforms.d.ts.map +1 -1
- package/dist/transforms.js.map +1 -1
- package/installation.md +1 -0
- package/opencode-claude-auth.js +1 -1
- package/package.json +32 -29
package/README.md
CHANGED
|
@@ -29,6 +29,21 @@ Paste this into your AI agent (Claude Code, Cursor, Copilot, etc.):
|
|
|
29
29
|
Fetch https://raw.githubusercontent.com/griffinmartin/opencode-claude-auth/main/installation.md and follow every step exactly as written.
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
### Install with Homebrew (macOS)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
brew tap griffinmartin/opencode-claude-auth https://github.com/griffinmartin/opencode-claude-auth.git
|
|
36
|
+
brew install opencode-claude-auth
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Then add to the `plugin` array in your `opencode.json`:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"plugin": ["opencode-claude-auth"]
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
32
47
|
### Manual install
|
|
33
48
|
|
|
34
49
|
```bash
|
|
@@ -49,25 +64,25 @@ Just run OpenCode. The plugin handles auth automatically — it reads your Claud
|
|
|
49
64
|
|
|
50
65
|
## Supported models
|
|
51
66
|
|
|
52
|
-
15 supported models. Run `
|
|
53
|
-
|
|
54
|
-
| Model
|
|
55
|
-
|
|
56
|
-
| claude-3-haiku-20240307
|
|
57
|
-
| claude-haiku-4-5
|
|
58
|
-
| claude-haiku-4-5-20251001
|
|
59
|
-
| claude-opus-4-0
|
|
60
|
-
| claude-opus-4-1
|
|
61
|
-
| claude-opus-4-1-20250805
|
|
62
|
-
| claude-opus-4-20250514
|
|
63
|
-
| claude-opus-4-5
|
|
64
|
-
| claude-opus-4-5-20251101
|
|
65
|
-
| claude-opus-4-6
|
|
66
|
-
| claude-sonnet-4-0
|
|
67
|
-
| claude-sonnet-4-20250514
|
|
68
|
-
| claude-sonnet-4-5
|
|
67
|
+
15 supported models. Run `pnpm run test:models` to verify against your account.
|
|
68
|
+
|
|
69
|
+
| Model |
|
|
70
|
+
| -------------------------- |
|
|
71
|
+
| claude-3-haiku-20240307 |
|
|
72
|
+
| claude-haiku-4-5 |
|
|
73
|
+
| claude-haiku-4-5-20251001 |
|
|
74
|
+
| claude-opus-4-0 |
|
|
75
|
+
| claude-opus-4-1 |
|
|
76
|
+
| claude-opus-4-1-20250805 |
|
|
77
|
+
| claude-opus-4-20250514 |
|
|
78
|
+
| claude-opus-4-5 |
|
|
79
|
+
| claude-opus-4-5-20251101 |
|
|
80
|
+
| claude-opus-4-6 |
|
|
81
|
+
| claude-sonnet-4-0 |
|
|
82
|
+
| claude-sonnet-4-20250514 |
|
|
83
|
+
| claude-sonnet-4-5 |
|
|
69
84
|
| claude-sonnet-4-5-20250929 |
|
|
70
|
-
| claude-sonnet-4-6
|
|
85
|
+
| claude-sonnet-4-6 |
|
|
71
86
|
|
|
72
87
|
## Credential sources
|
|
73
88
|
|
|
@@ -78,30 +93,47 @@ The plugin checks these in order:
|
|
|
78
93
|
|
|
79
94
|
## Troubleshooting
|
|
80
95
|
|
|
81
|
-
| Problem
|
|
82
|
-
|
|
83
|
-
| "Credentials not found"
|
|
84
|
-
| "Keychain is locked"
|
|
85
|
-
| "Token expired and refresh failed"
|
|
86
|
-
| Not working on Linux/Windows
|
|
87
|
-
| Keychain access denied
|
|
88
|
-
| Keychain read timed out
|
|
89
|
-
| "Credentials are unavailable or expired"
|
|
96
|
+
| Problem | Solution |
|
|
97
|
+
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
98
|
+
| "Credentials not found" | Run `claude` to authenticate with Claude Code first |
|
|
99
|
+
| "Keychain is locked" | Run `security unlock-keychain ~/Library/Keychains/login.keychain-db` |
|
|
100
|
+
| "Token expired and refresh failed" | The plugin runs `claude` CLI to refresh automatically. If this fails, re-authenticate manually by running `claude` |
|
|
101
|
+
| Not working on Linux/Windows | Ensure `~/.claude/.credentials.json` exists. Run `claude` to create it |
|
|
102
|
+
| Keychain access denied | Grant access when macOS prompts you |
|
|
103
|
+
| Keychain read timed out | Restart Keychain Access (can happen on macOS Tahoe) |
|
|
104
|
+
| "Credentials are unavailable or expired" | Run `claude` to refresh your Claude Code credentials |
|
|
105
|
+
| "Extra usage is required for long context requests" | Your conversation exceeded 200k tokens. See [Long context (1M)](#long-context-1m) below |
|
|
106
|
+
|
|
107
|
+
## Long context (1M)
|
|
108
|
+
|
|
109
|
+
The `context-1m-2025-08-07` beta header is not sent by default. Without it, the API caps context at 200k tokens.
|
|
110
|
+
|
|
111
|
+
To enable 1M context (requires Claude Max or a plan with extra usage coverage):
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
export ANTHROPIC_ENABLE_1M_CONTEXT=true
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The Claude CLI itself treats 1M context as opt-in (via a `[1m]` model suffix). Sending the beta without a plan that covers long context charges causes "Extra usage is required for long context requests" errors. Versions before 0.8.0 sent this beta automatically for 4.6+ models, which broke things for Pro users ([#64](https://github.com/griffinmartin/opencode-claude-auth/issues/64)).
|
|
118
|
+
|
|
119
|
+
If a long context error still occurs (e.g. from a beta flag added via `ANTHROPIC_BETA_FLAGS`), the plugin retries without the offending flag.
|
|
90
120
|
|
|
91
121
|
## Environment variable overrides
|
|
92
122
|
|
|
93
123
|
All configurable parameters can be overridden via environment variables. If Anthropic changes something before we publish an update, set an env var and keep working:
|
|
94
124
|
|
|
95
|
-
| Variable
|
|
96
|
-
|
|
97
|
-
| `ANTHROPIC_CLI_VERSION`
|
|
98
|
-
| `ANTHROPIC_USER_AGENT`
|
|
99
|
-
| `ANTHROPIC_BETA_FLAGS`
|
|
125
|
+
| Variable | Description | Default |
|
|
126
|
+
| ----------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
127
|
+
| `ANTHROPIC_CLI_VERSION` | Claude CLI version for user-agent and billing headers | `2.1.80` |
|
|
128
|
+
| `ANTHROPIC_USER_AGENT` | Full User-Agent string (overrides CLI version) | `claude-cli/{version} (external, cli)` |
|
|
129
|
+
| `ANTHROPIC_BETA_FLAGS` | Comma-separated beta feature flags | `claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,prompt-caching-scope-2026-01-05` |
|
|
130
|
+
| `ANTHROPIC_ENABLE_1M_CONTEXT` | Enable 1M token context window for 4.6+ models (requires Max subscription) | `false` |
|
|
100
131
|
|
|
101
132
|
Example:
|
|
102
133
|
|
|
103
134
|
```bash
|
|
104
135
|
export ANTHROPIC_CLI_VERSION=2.2.0
|
|
136
|
+
export ANTHROPIC_ENABLE_1M_CONTEXT=true # requires Claude Max
|
|
105
137
|
```
|
|
106
138
|
|
|
107
139
|
## How it works (technical)
|
package/dist/betas.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export declare function getExcludedBetas(modelId: string): Set<string>;
|
|
|
3
3
|
export declare function addExcludedBeta(modelId: string, beta: string): void;
|
|
4
4
|
export declare function isLongContextError(responseBody: string): boolean;
|
|
5
5
|
export declare function getNextBetaToExclude(modelId: string): string | null;
|
|
6
|
+
export declare function supports1mContext(modelId: string): boolean;
|
|
6
7
|
export declare function getModelBetas(modelId: string, excluded?: Set<string>): string[];
|
|
7
8
|
//# sourceMappingURL=betas.d.ts.map
|
package/dist/betas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betas.d.ts","sourceRoot":"","sources":["../src/betas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"betas.d.ts","sourceRoot":"","sources":["../src/betas.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,UAG9B,CAAA;AAgBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAe7D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAInE;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAMhE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQnE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAU1D;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,MAAM,EAAE,CA+BV"}
|
package/dist/betas.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
const DEFAULT_BETA_FLAGS = "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,prompt-caching-scope-2026-01-05";
|
|
2
2
|
// Beta flags to try removing in order when "long context" errors occur
|
|
3
|
-
export const LONG_CONTEXT_BETAS = [
|
|
3
|
+
export const LONG_CONTEXT_BETAS = [
|
|
4
|
+
"context-1m-2025-08-07",
|
|
5
|
+
"interleaved-thinking-2025-05-14",
|
|
6
|
+
];
|
|
4
7
|
function getRequiredBetas() {
|
|
5
8
|
return (process.env.ANTHROPIC_BETA_FLAGS ?? DEFAULT_BETA_FLAGS)
|
|
6
|
-
.split(",")
|
|
9
|
+
.split(",")
|
|
10
|
+
.map((s) => s.trim())
|
|
11
|
+
.filter(Boolean);
|
|
7
12
|
}
|
|
8
13
|
// Session-level cache of excluded beta flags per model (resets on process restart)
|
|
9
14
|
const excludedBetas = new Map();
|
|
@@ -30,8 +35,7 @@ export function addExcludedBeta(modelId, beta) {
|
|
|
30
35
|
excludedBetas.set(modelId, existing);
|
|
31
36
|
}
|
|
32
37
|
export function isLongContextError(responseBody) {
|
|
33
|
-
return responseBody.includes("Extra usage is required for long context requests")
|
|
34
|
-
|| responseBody.includes("long context beta is not yet available");
|
|
38
|
+
return (responseBody.includes("Extra usage is required for long context requests") || responseBody.includes("long context beta is not yet available"));
|
|
35
39
|
}
|
|
36
40
|
export function getNextBetaToExclude(modelId) {
|
|
37
41
|
const excluded = getExcludedBetas(modelId);
|
|
@@ -42,22 +46,33 @@ export function getNextBetaToExclude(modelId) {
|
|
|
42
46
|
}
|
|
43
47
|
return null; // All long-context betas already excluded
|
|
44
48
|
}
|
|
49
|
+
export function supports1mContext(modelId) {
|
|
50
|
+
const lower = modelId.toLowerCase();
|
|
51
|
+
if (!lower.includes("opus") && !lower.includes("sonnet"))
|
|
52
|
+
return false;
|
|
53
|
+
const versionMatch = lower.match(/(opus|sonnet)-(\d+)-(\d+)/);
|
|
54
|
+
if (!versionMatch)
|
|
55
|
+
return false;
|
|
56
|
+
const major = parseInt(versionMatch[2], 10);
|
|
57
|
+
const minor = parseInt(versionMatch[3], 10);
|
|
58
|
+
// Date suffixes like 20250514 are not minor versions — treat as x.0
|
|
59
|
+
const effectiveMinor = minor > 99 ? 0 : minor;
|
|
60
|
+
return major > 4 || (major === 4 && effectiveMinor >= 6);
|
|
61
|
+
}
|
|
45
62
|
export function getModelBetas(modelId, excluded) {
|
|
46
63
|
const betas = [...getRequiredBetas()];
|
|
47
64
|
const lower = modelId.toLowerCase();
|
|
48
|
-
// context-1m only
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
// If no version found (bare alias like "sonnet"), exclude 1M beta
|
|
65
|
+
// context-1m is OPT-IN only, matching the official Claude CLI behavior.
|
|
66
|
+
// The CLI only sends this beta when the model ID has a [1m] suffix.
|
|
67
|
+
// Without it, the API enforces a 200k context limit. Sending the beta
|
|
68
|
+
// without a subscription that covers long context billing causes
|
|
69
|
+
// "Extra usage is required for long context requests" errors.
|
|
70
|
+
//
|
|
71
|
+
// Users who want 1M context should set ANTHROPIC_ENABLE_1M_CONTEXT=true
|
|
72
|
+
// (requires a Claude Max subscription or a plan that covers extra usage).
|
|
73
|
+
if (process.env.ANTHROPIC_ENABLE_1M_CONTEXT === "true" &&
|
|
74
|
+
supports1mContext(modelId)) {
|
|
75
|
+
betas.push("context-1m-2025-08-07");
|
|
61
76
|
}
|
|
62
77
|
// haiku doesn't get claude-code-20250219
|
|
63
78
|
if (lower.includes("haiku")) {
|
|
@@ -67,7 +82,7 @@ export function getModelBetas(modelId, excluded) {
|
|
|
67
82
|
}
|
|
68
83
|
// Filter out excluded betas (from previous failed requests due to long context errors)
|
|
69
84
|
if (excluded && excluded.size > 0) {
|
|
70
|
-
return betas.filter(beta => !excluded.has(beta));
|
|
85
|
+
return betas.filter((beta) => !excluded.has(beta));
|
|
71
86
|
}
|
|
72
87
|
return betas;
|
|
73
88
|
}
|
package/dist/betas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betas.js","sourceRoot":"","sources":["../src/betas.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"betas.js","sourceRoot":"","sources":["../src/betas.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GACtB,uGAAuG,CAAA;AAEzG,uEAAuE;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,uBAAuB;IACvB,iCAAiC;CAClC,CAAA;AAED,SAAS,gBAAgB;IACvB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,kBAAkB,CAAC;SAC5D,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAA;AACpB,CAAC;AAED,mFAAmF;AACnF,MAAM,aAAa,GAA6B,IAAI,GAAG,EAAE,CAAA;AAEzD,qEAAqE;AACrE,IAAI,gBAAgB,GAAuB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA;AAC3E,IAAI,WAA+B,CAAA;AAEnC,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA;IACzD,IAAI,gBAAgB,KAAK,gBAAgB,EAAE,CAAC;QAC1C,aAAa,CAAC,KAAK,EAAE,CAAA;QACrB,gBAAgB,GAAG,gBAAgB,CAAA;IACrC,CAAC;IAED,mFAAmF;IACnF,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACzD,aAAa,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IACD,WAAW,GAAG,OAAO,CAAA;IAErB,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,IAAY;IAC3D,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAA;IACxD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAClB,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAAoB;IACrD,OAAO,CACL,YAAY,CAAC,QAAQ,CACnB,mDAAmD,CACpD,IAAI,YAAY,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CACrE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC1C,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA,CAAC,0CAA0C;AACxD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAA;IACtE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAC7D,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC3C,oEAAoE;IACpE,MAAM,cAAc,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC7C,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,cAAc,IAAI,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,QAAsB;IAEtB,MAAM,KAAK,GAAG,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAEnC,wEAAwE;IACxE,oEAAoE;IACpE,sEAAsE;IACtE,iEAAiE;IACjE,8DAA8D;IAC9D,EAAE;IACF,wEAAwE;IACxE,0EAA0E;IAC1E,IACE,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,MAAM;QAClD,iBAAiB,CAAC,OAAO,CAAC,EAC1B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACrC,CAAC;IAED,yCAAyC;IACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QACjD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,uFAAuF;IACvF,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,eAAe,CAAA;AAiD7E,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAI3D;AAmBD,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAW1D;AAMD,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAoB/D;AAED,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/credentials.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
|
|
4
3
|
import { homedir } from "node:os";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
5
|
import { readClaudeCredentials } from "./keychain.js";
|
|
6
6
|
const CREDENTIAL_CACHE_TTL_MS = 30_000;
|
|
7
7
|
let cachedCredentials = null;
|
|
@@ -36,9 +36,15 @@ function syncToPath(authPath, creds) {
|
|
|
36
36
|
};
|
|
37
37
|
const dir = dirname(authPath);
|
|
38
38
|
if (!existsSync(dir)) {
|
|
39
|
-
mkdirSync(dir, { recursive: true });
|
|
39
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
40
|
+
}
|
|
41
|
+
writeFileSync(authPath, JSON.stringify(auth, null, 2), {
|
|
42
|
+
encoding: "utf-8",
|
|
43
|
+
mode: 0o600,
|
|
44
|
+
});
|
|
45
|
+
if (process.platform !== "win32") {
|
|
46
|
+
chmodSync(authPath, 0o600);
|
|
40
47
|
}
|
|
41
|
-
writeFileSync(authPath, JSON.stringify(auth, null, 2), "utf-8");
|
|
42
48
|
}
|
|
43
49
|
export function syncAuthJson(creds) {
|
|
44
50
|
for (const authPath of getAuthJsonPaths()) {
|
package/dist/credentials.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Plugin } from "@opencode-ai/plugin";
|
|
2
|
-
export { getExcludedBetas,
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
2
|
+
export { addExcludedBeta, getExcludedBetas, getModelBetas, getNextBetaToExclude, isLongContextError, LONG_CONTEXT_BETAS, } from "./betas.js";
|
|
3
|
+
export { type ClaudeCredentials, getCachedCredentials, refreshIfNeeded, syncAuthJson, } from "./credentials.js";
|
|
4
|
+
export { stripToolPrefix, transformBody, transformResponseStream, } from "./transforms.js";
|
|
5
5
|
type FetchFn = typeof fetch;
|
|
6
6
|
export declare function fetchWithRetry(input: RequestInfo | URL, init?: RequestInit, retries?: number, fetchImpl?: FetchFn): Promise<Response>;
|
|
7
7
|
export declare function buildRequestHeaders(input: RequestInfo | URL, init: RequestInit, accessToken: string, modelId?: string, excludedBetas?: Set<string>): Headers;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAkBjD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,KAAK,iBAAiB,EACtB,oBAAoB,EACpB,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,eAAe,EACf,aAAa,EACb,uBAAuB,GACxB,MAAM,iBAAiB,CAAA;AAiBxB,KAAK,OAAO,GAAG,OAAO,KAAK,CAAA;AAE3B,wBAAsB,cAAc,CAClC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,SAAI,EACX,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,QAAQ,CAAC,CAanB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,SAAY,EACnB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,OAAO,CA+CT;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAID,QAAA,MAAM,MAAM,EAAE,MAqKb,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAS,CAAA;AACtC,eAAe,MAAM,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
+
import { addExcludedBeta, getExcludedBetas, getModelBetas, getNextBetaToExclude, isLongContextError, LONG_CONTEXT_BETAS, } from "./betas.js";
|
|
2
|
+
import { getCachedCredentials, refreshIfNeeded, syncAuthJson, } from "./credentials.js";
|
|
1
3
|
import { readClaudeCredentials } from "./keychain.js";
|
|
2
|
-
import { getExcludedBetas, addExcludedBeta, getNextBetaToExclude, isLongContextError, getModelBetas, LONG_CONTEXT_BETAS } from "./betas.js";
|
|
3
4
|
import { transformBody, transformResponseStream } from "./transforms.js";
|
|
4
|
-
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export { getCachedCredentials, syncAuthJson, refreshIfNeeded } from "./credentials.js";
|
|
5
|
+
export { addExcludedBeta, getExcludedBetas, getModelBetas, getNextBetaToExclude, isLongContextError, LONG_CONTEXT_BETAS, } from "./betas.js";
|
|
6
|
+
export { getCachedCredentials, refreshIfNeeded, syncAuthJson, } from "./credentials.js";
|
|
7
|
+
export { stripToolPrefix, transformBody, transformResponseStream, } from "./transforms.js";
|
|
8
8
|
const SYSTEM_IDENTITY_PREFIX = "You are Claude Code, Anthropic's official CLI for Claude.";
|
|
9
9
|
const DEFAULT_CC_VERSION = "2.1.80";
|
|
10
10
|
function getCliVersion() {
|
|
11
11
|
return process.env.ANTHROPIC_CLI_VERSION ?? DEFAULT_CC_VERSION;
|
|
12
12
|
}
|
|
13
13
|
function getUserAgent() {
|
|
14
|
-
return process.env.ANTHROPIC_USER_AGENT ??
|
|
14
|
+
return (process.env.ANTHROPIC_USER_AGENT ??
|
|
15
|
+
`claude-cli/${getCliVersion()} (external, cli)`);
|
|
15
16
|
}
|
|
16
17
|
export async function fetchWithRetry(input, init, retries = 3, fetchImpl = fetch) {
|
|
17
18
|
for (let i = 0; i < retries; i++) {
|
|
18
19
|
const res = await fetchImpl(input, init);
|
|
19
20
|
if ((res.status === 429 || res.status === 529) && i < retries - 1) {
|
|
20
21
|
const retryAfter = res.headers.get("retry-after");
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
await new Promise(r => setTimeout(r, delay));
|
|
22
|
+
const parsed = retryAfter ? parseInt(retryAfter, 10) : NaN;
|
|
23
|
+
const delay = Number.isNaN(parsed) ? (i + 1) * 2000 : parsed * 1000;
|
|
24
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
25
25
|
continue;
|
|
26
26
|
}
|
|
27
27
|
return res;
|
|
@@ -56,7 +56,15 @@ export function buildRequestHeaders(input, init, accessToken, modelId = "unknown
|
|
|
56
56
|
}
|
|
57
57
|
const modelBetas = getModelBetas(modelId, excludedBetas);
|
|
58
58
|
const incomingBeta = headers.get("anthropic-beta") ?? "";
|
|
59
|
-
const mergedBetas = [
|
|
59
|
+
const mergedBetas = [
|
|
60
|
+
...new Set([
|
|
61
|
+
...modelBetas,
|
|
62
|
+
...incomingBeta
|
|
63
|
+
.split(",")
|
|
64
|
+
.map((item) => item.trim())
|
|
65
|
+
.filter(Boolean),
|
|
66
|
+
]),
|
|
67
|
+
];
|
|
60
68
|
headers.set("authorization", `Bearer ${accessToken}`);
|
|
61
69
|
headers.set("anthropic-beta", mergedBetas.join(","));
|
|
62
70
|
headers.set("x-app", "cli");
|
|
@@ -92,7 +100,7 @@ const plugin = async () => {
|
|
|
92
100
|
console.warn("opencode-claude-auth: Claude credentials are expired and could not be refreshed via Claude CLI.");
|
|
93
101
|
}
|
|
94
102
|
// Keep auth.json synced, refreshing via CLI if token is near expiry
|
|
95
|
-
setInterval(() => {
|
|
103
|
+
const syncTimer = setInterval(() => {
|
|
96
104
|
try {
|
|
97
105
|
const fresh = refreshIfNeeded();
|
|
98
106
|
if (fresh) {
|
|
@@ -103,6 +111,7 @@ const plugin = async () => {
|
|
|
103
111
|
// Non-fatal
|
|
104
112
|
}
|
|
105
113
|
}, SYNC_INTERVAL);
|
|
114
|
+
syncTimer.unref();
|
|
106
115
|
return {
|
|
107
116
|
"experimental.chat.system.transform": async (input, output) => {
|
|
108
117
|
if (input.model?.providerID !== "anthropic") {
|
|
@@ -135,11 +144,14 @@ const plugin = async () => {
|
|
|
135
144
|
throw new Error("Claude Code credentials are unavailable or expired. Run `claude` to refresh them.");
|
|
136
145
|
}
|
|
137
146
|
const requestInit = init ?? {};
|
|
138
|
-
const bodyStr = typeof requestInit.body === "string"
|
|
147
|
+
const bodyStr = typeof requestInit.body === "string"
|
|
148
|
+
? requestInit.body
|
|
149
|
+
: undefined;
|
|
139
150
|
let modelId = "unknown";
|
|
140
151
|
if (bodyStr) {
|
|
141
152
|
try {
|
|
142
|
-
modelId =
|
|
153
|
+
modelId =
|
|
154
|
+
JSON.parse(bodyStr).model ?? "unknown";
|
|
143
155
|
}
|
|
144
156
|
catch { }
|
|
145
157
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/keychain.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB;
|
|
1
|
+
{"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB;AAoCD,wBAAgB,qBAAqB,IAAI,iBAAiB,GAAG,IAAI,CAkFhE"}
|
package/dist/keychain.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
3
|
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
5
|
const SERVICE_NAME = "Claude Code-credentials";
|
|
6
6
|
function readCredentialsFile() {
|
|
7
7
|
try {
|
|
@@ -39,18 +39,18 @@ export function readClaudeCredentials() {
|
|
|
39
39
|
catch (err) {
|
|
40
40
|
const error = err;
|
|
41
41
|
if (error.killed || error.code === "ETIMEDOUT") {
|
|
42
|
-
throw new Error("Keychain read timed out. This can happen on macOS Tahoe. Try restarting Keychain Access.");
|
|
42
|
+
throw new Error("Keychain read timed out. This can happen on macOS Tahoe. Try restarting Keychain Access.", { cause: err });
|
|
43
43
|
}
|
|
44
44
|
if (error.status === 44) {
|
|
45
45
|
return readCredentialsFile();
|
|
46
46
|
}
|
|
47
47
|
if (error.status === 36) {
|
|
48
|
-
throw new Error("macOS Keychain is locked. Please unlock it or run: security unlock-keychain ~/Library/Keychains/login.keychain-db");
|
|
48
|
+
throw new Error("macOS Keychain is locked. Please unlock it or run: security unlock-keychain ~/Library/Keychains/login.keychain-db", { cause: err });
|
|
49
49
|
}
|
|
50
50
|
if (error.status === 128) {
|
|
51
|
-
throw new Error("Keychain access was denied. Please grant access when prompted by macOS.");
|
|
51
|
+
throw new Error("Keychain access was denied. Please grant access when prompted by macOS.", { cause: err });
|
|
52
52
|
}
|
|
53
|
-
throw new Error(`Failed to read Claude Code credentials from Keychain (exit ${error.status ?? "unknown"}). Try re-authenticating with Claude Code
|
|
53
|
+
throw new Error(`Failed to read Claude Code credentials from Keychain (exit ${error.status ?? "unknown"}). Try re-authenticating with Claude Code.`, { cause: err });
|
|
54
54
|
}
|
|
55
55
|
let parsed;
|
|
56
56
|
try {
|
package/dist/keychain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"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"}
|
package/dist/transforms.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,
|
|
1
|
+
{"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAChC,QAAQ,GAAG,IAAI,GAAG,SAAS,CA8C7B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CA0CpE"}
|
package/dist/transforms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transforms.js","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,MAAM,CAAA;AAE1B,MAAM,UAAU,aAAa,
|
|
1
|
+
{"version":3,"file":"transforms.js","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"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"}
|
package/installation.md
CHANGED
package/opencode-claude-auth.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { ClaudeAuthPlugin, default } from "./dist/index.js"
|
|
1
|
+
export { ClaudeAuthPlugin, default } from "./dist/index.js"
|
package/package.json
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-claude-auth",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "OpenCode plugin that uses your Claude Code credentials — no separate login needed.",
|
|
5
|
-
"
|
|
5
|
+
"keywords": [
|
|
6
|
+
"anthropic",
|
|
7
|
+
"auth",
|
|
8
|
+
"claude",
|
|
9
|
+
"opencode",
|
|
10
|
+
"plugin"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/griffinmartin/opencode-claude-auth.git"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"opencode-claude-auth.js",
|
|
19
|
+
"dist",
|
|
20
|
+
"installation.md"
|
|
21
|
+
],
|
|
22
|
+
"type": "module",
|
|
6
23
|
"main": "opencode-claude-auth.js",
|
|
7
24
|
"module": "opencode-claude-auth.js",
|
|
8
25
|
"types": "dist/index.d.ts",
|
|
9
|
-
"type": "module",
|
|
10
26
|
"exports": {
|
|
11
27
|
".": {
|
|
12
28
|
"types": "./dist/index.d.ts",
|
|
@@ -29,35 +45,22 @@
|
|
|
29
45
|
"import": "./dist/index.js"
|
|
30
46
|
}
|
|
31
47
|
},
|
|
32
|
-
"files": [
|
|
33
|
-
"opencode-claude-auth.js",
|
|
34
|
-
"dist",
|
|
35
|
-
"installation.md"
|
|
36
|
-
],
|
|
37
|
-
"scripts": {
|
|
38
|
-
"build": "tsc && cp src/anthropic-prompt.txt dist/",
|
|
39
|
-
"test": "node --test --experimental-strip-types src/**/*.test.ts",
|
|
40
|
-
"test:models": "npm run build && node scripts/test-models.ts",
|
|
41
|
-
"prepublishOnly": "npm run build && npm test"
|
|
42
|
-
},
|
|
43
|
-
"peerDependencies": {
|
|
44
|
-
"@opencode-ai/plugin": "*"
|
|
45
|
-
},
|
|
46
48
|
"devDependencies": {
|
|
47
49
|
"@opencode-ai/plugin": "latest",
|
|
48
50
|
"@types/node": "^25.5.0",
|
|
51
|
+
"oxfmt": "0.41.0",
|
|
52
|
+
"oxlint": "1.56.0",
|
|
49
53
|
"typescript": "^5.0.0"
|
|
50
54
|
},
|
|
51
|
-
"
|
|
52
|
-
"opencode"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
"url": "git+https://github.com/griffinmartin/opencode-claude-auth.git"
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"@opencode-ai/plugin": "*"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsc && cp src/anthropic-prompt.txt dist/",
|
|
60
|
+
"test": "node --test --experimental-strip-types src/**/*.test.ts",
|
|
61
|
+
"test:models": "pnpm run build && node scripts/test-models.ts",
|
|
62
|
+
"lint": "oxlint && oxfmt --check .",
|
|
63
|
+
"lint:fix": "oxlint --fix . && oxfmt --write .",
|
|
64
|
+
"format": "oxfmt --write ."
|
|
62
65
|
}
|
|
63
|
-
}
|
|
66
|
+
}
|