@vybestack/llxprt-code 0.9.0 → 0.9.2
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 +31 -13
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/package.json +3 -3
- package/dist/src/auth/BucketFailoverHandlerImpl.d.ts +2 -0
- package/dist/src/auth/BucketFailoverHandlerImpl.js +115 -14
- package/dist/src/auth/BucketFailoverHandlerImpl.js.map +1 -1
- package/dist/src/auth/BucketFailoverHandlerImpl.spec.js +156 -0
- package/dist/src/auth/BucketFailoverHandlerImpl.spec.js.map +1 -1
- package/dist/src/gemini.js +3 -3
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +45 -0
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/integration-tests/cli-args.integration.test.js +26 -0
- package/dist/src/integration-tests/cli-args.integration.test.js.map +1 -1
- package/dist/src/providers/aliases/codex.config +1 -0
- package/dist/src/providers/providerAliases.codex.test.js +2 -2
- package/dist/src/providers/providerAliases.codex.test.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +1 -0
- package/dist/src/ui/components/Footer.js +7 -3
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/layouts/DefaultAppLayout.js +4 -2
- package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -1
- package/dist/src/ui/themes/theme.js +7 -1
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/utils/sandbox-ssh.test.js +73 -50
- package/dist/src/utils/sandbox-ssh.test.js.map +1 -1
- package/dist/src/utils/sandbox.d.ts +28 -3
- package/dist/src/utils/sandbox.js +224 -54
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
<h1>
|
|
2
|
+
<img src="docs/assets/llxprt.svg" alt="LLxprt logo" width="42" />
|
|
3
|
+
<a href="https://vybestack.dev/llxprt-code.html">LLxprt Code</a>
|
|
4
|
+
</h1>
|
|
2
5
|
|
|
3
6
|
[](https://github.com/vybestack/llxprt-code/actions/workflows/ci.yml)
|
|
4
|
-
[](https://discord.gg/Wc6dZqWWYv) 
|
|
5
8
|
|
|
6
9
|

|
|
7
10
|
|
|
@@ -45,7 +48,7 @@ Get started immediately with powerful LLM options:
|
|
|
45
48
|
- **Load Balancer Profiles**: Balance requests across providers or accounts with automatic failover
|
|
46
49
|
- **Free Tier Support**: Start coding immediately with Gemini or Qwen free tiers
|
|
47
50
|
- **Provider Flexibility**: Switch between any Anthropic, Gemini, OpenAI, Kimi, or OpenAI-compatible provider
|
|
48
|
-
- **Top Open Models**: Works seamlessly with GLM
|
|
51
|
+
- **Top Open Models**: Works seamlessly with GLM 5, Kimi K2.5, MiniMax M2.5, and Qwen 3 Coder Next
|
|
49
52
|
- **Local Models**: Run models locally with LM Studio, llama.cpp for complete privacy
|
|
50
53
|
- **Privacy First**: No telemetry by default, local processing available
|
|
51
54
|
- **Subagent Flexibility**: Create agents with different models, providers, or settings
|
|
@@ -53,8 +56,15 @@ Get started immediately with powerful LLM options:
|
|
|
53
56
|
- **Zed Integration**: Native Zed editor integration for seamless workflow
|
|
54
57
|
|
|
55
58
|
```bash
|
|
56
|
-
#
|
|
59
|
+
# macOS (Homebrew)
|
|
60
|
+
brew tap vybestack/homebrew-tap
|
|
61
|
+
brew update
|
|
62
|
+
brew install llxprt-code
|
|
63
|
+
|
|
64
|
+
# npm
|
|
57
65
|
npm install -g @vybestack/llxprt-code
|
|
66
|
+
|
|
67
|
+
# Start coding
|
|
58
68
|
llxprt
|
|
59
69
|
|
|
60
70
|
# Try without installing
|
|
@@ -75,13 +85,21 @@ LLxprt Code is a command-line AI assistant designed for developers who want powe
|
|
|
75
85
|
|
|
76
86
|
## Quick Start
|
|
77
87
|
|
|
78
|
-
1. **Prerequisites:** Node.js 20+ installed
|
|
88
|
+
1. **Prerequisites:** Node.js 20+ installed (not required for Homebrew)
|
|
79
89
|
2. **Install:**
|
|
90
|
+
|
|
80
91
|
```bash
|
|
92
|
+
# macOS (Homebrew)
|
|
93
|
+
brew tap vybestack/homebrew-tap
|
|
94
|
+
brew update
|
|
95
|
+
brew install llxprt-code
|
|
96
|
+
|
|
97
|
+
# npm
|
|
81
98
|
npm install -g @vybestack/llxprt-code
|
|
82
99
|
# Or try without installing:
|
|
83
100
|
npx @vybestack/llxprt-code
|
|
84
101
|
```
|
|
102
|
+
|
|
85
103
|
3. **Run:** `llxprt`
|
|
86
104
|
4. **Choose provider:** Use `/provider` to select your preferred LLM service
|
|
87
105
|
5. **Start coding:** Ask questions, generate code, or analyze projects
|
|
@@ -103,7 +121,7 @@ llxprt
|
|
|
103
121
|
- **Multi-Account Failover** - Configure multiple OAuth buckets that failover automatically on rate limits
|
|
104
122
|
- **Load Balancer Profiles** - Balance across providers/accounts with roundrobin or failover policies
|
|
105
123
|
- **Extensive Provider Support** - Anthropic, Gemini, OpenAI, Kimi, and any OpenAI-compatible provider [**Provider Guide →**](./docs/providers/quick-reference.md)
|
|
106
|
-
- **Top Open Models** - GLM
|
|
124
|
+
- **Top Open Models** - GLM 5, Kimi K2.5, MiniMax M2.5, Qwen 3 Coder Next
|
|
107
125
|
- **Local Model Support** - LM Studio, llama.cpp, Ollama for complete privacy
|
|
108
126
|
- **Profile System** - Save provider configurations and model settings
|
|
109
127
|
- **Advanced Subagents** - Isolated AI assistants with different models/providers
|
|
@@ -138,7 +156,7 @@ llxprt "Generate unit tests for payment module" > tests/payment.test.js
|
|
|
138
156
|
|
|
139
157
|
LLxprt Code works seamlessly with the best open-weight models:
|
|
140
158
|
|
|
141
|
-
### Kimi K2
|
|
159
|
+
### Kimi K2.5
|
|
142
160
|
|
|
143
161
|
- **Context Window**: 262,144 tokens
|
|
144
162
|
- **Architecture**: Trillion-parameter MoE (32B active)
|
|
@@ -147,27 +165,27 @@ LLxprt Code works seamlessly with the best open-weight models:
|
|
|
147
165
|
|
|
148
166
|
```bash
|
|
149
167
|
/provider kimi
|
|
150
|
-
/model kimi-
|
|
168
|
+
/model kimi-for-coding
|
|
151
169
|
# Or via Synthetic/Chutes:
|
|
152
170
|
/provider synthetic
|
|
153
|
-
/model hf:moonshotai/Kimi-K2
|
|
171
|
+
/model hf:moonshotai/Kimi-K2.5
|
|
154
172
|
```
|
|
155
173
|
|
|
156
|
-
### GLM
|
|
174
|
+
### GLM 5
|
|
157
175
|
|
|
158
176
|
- **Context Window**: 200,000 tokens
|
|
159
177
|
- **Max Output**: 131,072 tokens
|
|
160
178
|
- **Architecture**: Mixture-of-Experts with 355B total parameters (32B active)
|
|
161
179
|
- **Strengths**: Coding, multi-step planning, tool integration
|
|
162
180
|
|
|
163
|
-
### MiniMax M2.
|
|
181
|
+
### MiniMax M2.5
|
|
164
182
|
|
|
165
183
|
- **Context Window**: 196,608 tokens
|
|
166
184
|
- **Architecture**: MoE with 230B total parameters (10B active)
|
|
167
185
|
- **Strengths**: Coding workflows, multi-step agents, tool calling
|
|
168
186
|
- **Cost**: Only 8% of Claude Sonnet, ~2x faster
|
|
169
187
|
|
|
170
|
-
###
|
|
188
|
+
### Qwen 3 Coder Next
|
|
171
189
|
|
|
172
190
|
- **Context Window**: 262,144 tokens
|
|
173
191
|
- **Max Output**: 65,536 tokens
|
|
@@ -211,7 +229,7 @@ Create specialized AI assistants with isolated contexts and different configurat
|
|
|
211
229
|
Each subagent can be configured with:
|
|
212
230
|
|
|
213
231
|
- **Different providers** (Gemini vs Anthropic vs Qwen vs Local)
|
|
214
|
-
- **Different models** (Flash vs Sonnet vs GLM
|
|
232
|
+
- **Different models** (Flash vs Sonnet vs GLM 5 vs Custom)
|
|
215
233
|
- **Different tool access** (Restrict or allow specific tools)
|
|
216
234
|
- **Different settings** (Temperature, timeouts, max turns)
|
|
217
235
|
- **Isolated runtime context** (No memory or state crossover)
|
package/dist/index.js
CHANGED
|
@@ -6,23 +6,27 @@
|
|
|
6
6
|
*/
|
|
7
7
|
// Note: Using --no-deprecation in shebang to suppress deprecation warnings from dependencies
|
|
8
8
|
import { main } from './src/gemini.js';
|
|
9
|
-
import { FatalError } from '@vybestack/llxprt-code-core';
|
|
9
|
+
import { FatalError, writeToStderr } from '@vybestack/llxprt-code-core';
|
|
10
10
|
// --- Global Entry Point ---
|
|
11
|
+
// Use writeToStderr instead of console.error so that fatal errors are always
|
|
12
|
+
// visible even after patchStdio() has redirected process.stderr.write to the
|
|
13
|
+
// internal event bus (which may not have listeners yet). Fixes #1667 where
|
|
14
|
+
// config validation errors were silently swallowed.
|
|
11
15
|
main().catch((error) => {
|
|
12
16
|
if (error instanceof FatalError) {
|
|
13
17
|
let errorMessage = error.message;
|
|
14
18
|
if (!process.env['NO_COLOR']) {
|
|
15
19
|
errorMessage = `\x1b[31m${errorMessage}\x1b[0m`;
|
|
16
20
|
}
|
|
17
|
-
|
|
21
|
+
writeToStderr(`${errorMessage}\n`);
|
|
18
22
|
process.exit(error.exitCode);
|
|
19
23
|
}
|
|
20
|
-
|
|
24
|
+
writeToStderr('An unexpected critical error occurred:\n');
|
|
21
25
|
if (error instanceof Error) {
|
|
22
|
-
|
|
26
|
+
writeToStderr(`${error.stack}\n`);
|
|
23
27
|
}
|
|
24
28
|
else {
|
|
25
|
-
|
|
29
|
+
writeToStderr(`${String(error)}\n`);
|
|
26
30
|
}
|
|
27
31
|
process.exit(1);
|
|
28
32
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,6FAA6F;AAE7F,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,6FAA6F;AAE7F,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAExE,6BAA6B;AAC7B,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,oDAAoD;AACpD,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,IAAI,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,YAAY,GAAG,WAAW,YAAY,SAAS,CAAC;QAClD,CAAC;QACD,aAAa,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IACD,aAAa,CAAC,0CAA0C,CAAC,CAAC;IAC1D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vybestack/llxprt-code",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "LLxprt Code",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
36
|
"config": {
|
|
37
|
-
"sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.9.
|
|
37
|
+
"sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.9.2"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@agentclientprotocol/sdk": "^0.14.1",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@iarna/toml": "^2.2.5",
|
|
45
45
|
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
46
46
|
"@types/update-notifier": "^6.0.8",
|
|
47
|
-
"@vybestack/llxprt-code-core": "0.9.
|
|
47
|
+
"@vybestack/llxprt-code-core": "0.9.2",
|
|
48
48
|
"ansi-regex": "^6.2.2",
|
|
49
49
|
"chalk": "^5.3.0",
|
|
50
50
|
"cli-spinners": "2.9.2",
|
|
@@ -25,6 +25,8 @@ export declare class BucketFailoverHandlerImpl implements BucketFailoverHandler
|
|
|
25
25
|
private readonly provider;
|
|
26
26
|
private readonly oauthManager;
|
|
27
27
|
private triedBucketsThisSession;
|
|
28
|
+
private ensureBucketsAuthInFlight;
|
|
29
|
+
private foregroundReauthInFlightByBucket;
|
|
28
30
|
/**
|
|
29
31
|
* @plan PLAN-20260223-ISSUE1598.P05
|
|
30
32
|
* @requirement REQ-1598-IC09
|
|
@@ -25,6 +25,8 @@ export class BucketFailoverHandlerImpl {
|
|
|
25
25
|
provider;
|
|
26
26
|
oauthManager;
|
|
27
27
|
triedBucketsThisSession;
|
|
28
|
+
ensureBucketsAuthInFlight = null;
|
|
29
|
+
foregroundReauthInFlightByBucket = new Map();
|
|
28
30
|
/**
|
|
29
31
|
* @plan PLAN-20260223-ISSUE1598.P05
|
|
30
32
|
* @requirement REQ-1598-IC09
|
|
@@ -294,17 +296,93 @@ export class BucketFailoverHandlerImpl {
|
|
|
294
296
|
candidateBucket = currentBucket;
|
|
295
297
|
}
|
|
296
298
|
if (candidateBucket !== undefined) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
299
|
+
const existingForegroundReauth = this.foregroundReauthInFlightByBucket.get(candidateBucket);
|
|
300
|
+
if (existingForegroundReauth) {
|
|
301
|
+
return existingForegroundReauth;
|
|
302
|
+
}
|
|
303
|
+
const pass3Promise = (async () => {
|
|
304
|
+
const eagerAuthInFlight = this.ensureBucketsAuthInFlight;
|
|
305
|
+
if (eagerAuthInFlight) {
|
|
306
|
+
logger.debug(`Foreground reauth waiting for in-flight eager auth (provider=${this.provider}, bucket=${candidateBucket})`);
|
|
307
|
+
try {
|
|
308
|
+
await eagerAuthInFlight;
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
logger.debug(`In-flight eager auth failed before pass-3 reauth for ${candidateBucket}:`, error);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// Re-check whether token became available while this failover attempt was
|
|
315
|
+
// evaluating candidates (e.g. concurrent turn-boundary eager auth).
|
|
316
|
+
let existingToken = null;
|
|
317
|
+
try {
|
|
318
|
+
existingToken = await this.oauthManager.getOAuthToken(this.provider, candidateBucket);
|
|
319
|
+
}
|
|
320
|
+
catch (error) {
|
|
321
|
+
logger.debug(`Token re-check failed before pass-3 reauth for ${candidateBucket}:`, error);
|
|
322
|
+
}
|
|
323
|
+
if (existingToken !== null) {
|
|
324
|
+
const bucketIndex = this.buckets.indexOf(candidateBucket);
|
|
325
|
+
if (bucketIndex >= 0) {
|
|
326
|
+
this.currentBucketIndex = bucketIndex;
|
|
327
|
+
}
|
|
305
328
|
this.triedBucketsThisSession.add(candidateBucket);
|
|
329
|
+
try {
|
|
330
|
+
this.oauthManager.setSessionBucket(this.provider, candidateBucket);
|
|
331
|
+
}
|
|
332
|
+
catch (setError) {
|
|
333
|
+
logger.warn(`Failed to set session bucket during pass-3 token re-check switch: ${setError}`);
|
|
334
|
+
// Continue anyway
|
|
335
|
+
}
|
|
336
|
+
logger.warn(() => `Bucket failover: switched from ${currentBucket} to ${candidateBucket} after token became available`);
|
|
337
|
+
return true;
|
|
306
338
|
}
|
|
307
|
-
|
|
339
|
+
const lateEagerAuthInFlight = this.ensureBucketsAuthInFlight;
|
|
340
|
+
if (lateEagerAuthInFlight) {
|
|
341
|
+
logger.debug(`Foreground reauth detected late in-flight eager auth (provider=${this.provider}, bucket=${candidateBucket})`);
|
|
342
|
+
try {
|
|
343
|
+
await lateEagerAuthInFlight;
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
logger.debug(`Late in-flight eager auth failed before pass-3 reauth for ${candidateBucket}:`, error);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// Final TOCTOU guard: token state may have changed after the initial
|
|
350
|
+
// snapshot/re-checks, including when eager auth started and completed
|
|
351
|
+
// between checks. Re-check one last time before interactive auth.
|
|
352
|
+
let tokenBeforeForegroundAuth = null;
|
|
353
|
+
try {
|
|
354
|
+
tokenBeforeForegroundAuth = await this.oauthManager.getOAuthToken(this.provider, candidateBucket);
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
logger.debug(`Final token re-check failed before pass-3 reauth for ${candidateBucket}:`, error);
|
|
358
|
+
}
|
|
359
|
+
if (tokenBeforeForegroundAuth !== null) {
|
|
360
|
+
const bucketIndex = this.buckets.indexOf(candidateBucket);
|
|
361
|
+
if (bucketIndex >= 0) {
|
|
362
|
+
this.currentBucketIndex = bucketIndex;
|
|
363
|
+
}
|
|
364
|
+
this.triedBucketsThisSession.add(candidateBucket);
|
|
365
|
+
try {
|
|
366
|
+
this.oauthManager.setSessionBucket(this.provider, candidateBucket);
|
|
367
|
+
}
|
|
368
|
+
catch (setError) {
|
|
369
|
+
logger.warn(`Failed to set session bucket during final pass-3 token re-check switch: ${setError}`);
|
|
370
|
+
// Continue anyway
|
|
371
|
+
}
|
|
372
|
+
logger.warn(() => `Bucket failover: switched from ${currentBucket} to ${candidateBucket} after final token re-check`);
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
try {
|
|
376
|
+
logger.debug(`Attempting foreground reauth for bucket: ${candidateBucket}`);
|
|
377
|
+
await this.oauthManager.authenticate(this.provider, candidateBucket);
|
|
378
|
+
// Verify token exists after reauth (REQ-1598-FL08)
|
|
379
|
+
const token = await this.oauthManager.getOAuthToken(this.provider, candidateBucket);
|
|
380
|
+
if (token === null) {
|
|
381
|
+
logger.warn(`Foreground reauth succeeded but token is null for bucket: ${candidateBucket}`);
|
|
382
|
+
this.lastFailoverReasons[candidateBucket] = 'reauth-failed';
|
|
383
|
+
this.triedBucketsThisSession.add(candidateBucket);
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
308
386
|
// Reauth succeeded — switch bucket
|
|
309
387
|
const bucketIndex = this.buckets.indexOf(candidateBucket);
|
|
310
388
|
if (bucketIndex >= 0) {
|
|
@@ -321,11 +399,22 @@ export class BucketFailoverHandlerImpl {
|
|
|
321
399
|
logger.warn(() => `Bucket failover: switched from ${currentBucket} to ${candidateBucket} after reauth`);
|
|
322
400
|
return true;
|
|
323
401
|
}
|
|
402
|
+
catch (reauthError) {
|
|
403
|
+
logger.warn(`Foreground reauth failed for bucket ${candidateBucket}:`, reauthError);
|
|
404
|
+
this.lastFailoverReasons[candidateBucket] = 'reauth-failed';
|
|
405
|
+
this.triedBucketsThisSession.add(candidateBucket);
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
})();
|
|
409
|
+
this.foregroundReauthInFlightByBucket.set(candidateBucket, pass3Promise);
|
|
410
|
+
try {
|
|
411
|
+
return await pass3Promise;
|
|
324
412
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
413
|
+
finally {
|
|
414
|
+
const current = this.foregroundReauthInFlightByBucket.get(candidateBucket);
|
|
415
|
+
if (current === pass3Promise) {
|
|
416
|
+
this.foregroundReauthInFlightByBucket.delete(candidateBucket);
|
|
417
|
+
}
|
|
329
418
|
}
|
|
330
419
|
}
|
|
331
420
|
// All passes exhausted — failover unsuccessful
|
|
@@ -355,7 +444,19 @@ export class BucketFailoverHandlerImpl {
|
|
|
355
444
|
if (this.buckets.length <= 1) {
|
|
356
445
|
return;
|
|
357
446
|
}
|
|
358
|
-
|
|
447
|
+
if (this.ensureBucketsAuthInFlight) {
|
|
448
|
+
await this.ensureBucketsAuthInFlight;
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
const authPromise = this.oauthManager
|
|
452
|
+
.authenticateMultipleBuckets(this.provider, this.buckets)
|
|
453
|
+
.finally(() => {
|
|
454
|
+
if (this.ensureBucketsAuthInFlight === authPromise) {
|
|
455
|
+
this.ensureBucketsAuthInFlight = null;
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
this.ensureBucketsAuthInFlight = authPromise;
|
|
459
|
+
await authPromise;
|
|
359
460
|
}
|
|
360
461
|
/**
|
|
361
462
|
* Reset the session tracking so failover can try buckets again in a new request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BucketFailoverHandlerImpl.js","sourceRoot":"","sources":["../../../src/auth/BucketFailoverHandlerImpl.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BucketFailoverHandlerImpl.js","sourceRoot":"","sources":["../../../src/auth/BucketFailoverHandlerImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -908,5 +908,161 @@ describe('ensureBucketsAuthenticated', () => {
|
|
|
908
908
|
// Assert
|
|
909
909
|
expect(oauthManager.authenticateMultipleBuckets).not.toHaveBeenCalled();
|
|
910
910
|
});
|
|
911
|
+
it('coalesces concurrent ensureBucketsAuthenticated calls into one in-flight auth run', async () => {
|
|
912
|
+
// Arrange
|
|
913
|
+
const tokenStore = new MemoryTokenStore();
|
|
914
|
+
let resolveAuthRun;
|
|
915
|
+
const authRunPromise = new Promise((resolve) => {
|
|
916
|
+
resolveAuthRun = resolve;
|
|
917
|
+
});
|
|
918
|
+
const oauthManager = {
|
|
919
|
+
getOAuthToken: vi.fn(async () => null),
|
|
920
|
+
getTokenStore: vi.fn(() => tokenStore),
|
|
921
|
+
setSessionBucket: vi.fn(),
|
|
922
|
+
getSessionBucket: vi.fn(() => undefined),
|
|
923
|
+
authenticate: vi.fn(async () => { }),
|
|
924
|
+
authenticateMultipleBuckets: vi.fn(async () => authRunPromise),
|
|
925
|
+
};
|
|
926
|
+
const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b', 'bucket-c'], 'anthropic', oauthManager);
|
|
927
|
+
// Act
|
|
928
|
+
const first = handler.ensureBucketsAuthenticated();
|
|
929
|
+
const second = handler.ensureBucketsAuthenticated();
|
|
930
|
+
// Assert (before completion): only one underlying auth run started
|
|
931
|
+
expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledTimes(1);
|
|
932
|
+
// Complete in-flight run and verify both callers resolve
|
|
933
|
+
resolveAuthRun?.();
|
|
934
|
+
await Promise.all([first, second]);
|
|
935
|
+
expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledTimes(1);
|
|
936
|
+
});
|
|
937
|
+
it('clears in-flight state after failure so a later call can retry', async () => {
|
|
938
|
+
// Arrange
|
|
939
|
+
const tokenStore = new MemoryTokenStore();
|
|
940
|
+
const oauthManager = {
|
|
941
|
+
getOAuthToken: vi.fn(async () => null),
|
|
942
|
+
getTokenStore: vi.fn(() => tokenStore),
|
|
943
|
+
setSessionBucket: vi.fn(),
|
|
944
|
+
getSessionBucket: vi.fn(() => undefined),
|
|
945
|
+
authenticate: vi.fn(async () => { }),
|
|
946
|
+
authenticateMultipleBuckets: vi
|
|
947
|
+
.fn()
|
|
948
|
+
.mockRejectedValueOnce(new Error('first auth attempt failed'))
|
|
949
|
+
.mockResolvedValueOnce(undefined),
|
|
950
|
+
};
|
|
951
|
+
const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b'], 'anthropic', oauthManager);
|
|
952
|
+
// Act / Assert
|
|
953
|
+
await expect(handler.ensureBucketsAuthenticated()).rejects.toThrow('first auth attempt failed');
|
|
954
|
+
await expect(handler.ensureBucketsAuthenticated()).resolves.toBeUndefined();
|
|
955
|
+
expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledTimes(2);
|
|
956
|
+
});
|
|
957
|
+
it('reuses token from in-flight eager auth in tryFailover pass 3 without duplicate authenticate call', async () => {
|
|
958
|
+
// Arrange
|
|
959
|
+
const tokenStore = new MemoryTokenStore();
|
|
960
|
+
let releaseEagerAuth;
|
|
961
|
+
const eagerAuthPromise = new Promise((resolve) => {
|
|
962
|
+
releaseEagerAuth = resolve;
|
|
963
|
+
});
|
|
964
|
+
const oauthManager = {
|
|
965
|
+
getOAuthToken: vi.fn(async (_provider, bucket) => tokenStore.getToken('anthropic', bucket)),
|
|
966
|
+
getTokenStore: vi.fn(() => tokenStore),
|
|
967
|
+
setSessionBucket: vi.fn(),
|
|
968
|
+
getSessionBucket: vi.fn(() => 'bucket-a'),
|
|
969
|
+
authenticate: vi.fn(async () => {
|
|
970
|
+
throw new Error('pass-3 authenticate should not be called');
|
|
971
|
+
}),
|
|
972
|
+
authenticateMultipleBuckets: vi.fn(async () => {
|
|
973
|
+
await eagerAuthPromise;
|
|
974
|
+
await tokenStore.saveToken('anthropic', makeToken('eager-token'), 'bucket-b');
|
|
975
|
+
}),
|
|
976
|
+
};
|
|
977
|
+
const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b'], 'anthropic', oauthManager);
|
|
978
|
+
// Start eager auth and leave it in-flight while failover starts
|
|
979
|
+
const ensurePromise = handler.ensureBucketsAuthenticated();
|
|
980
|
+
const failoverPromise = handler.tryFailover({ triggeringStatus: 401 });
|
|
981
|
+
releaseEagerAuth?.();
|
|
982
|
+
await ensurePromise;
|
|
983
|
+
// Assert
|
|
984
|
+
await expect(failoverPromise).resolves.toBe(true);
|
|
985
|
+
expect(handler.getCurrentBucket()).toBe('bucket-b');
|
|
986
|
+
expect(oauthManager.authenticate).not.toHaveBeenCalled();
|
|
987
|
+
expect(oauthManager.setSessionBucket).toHaveBeenCalledWith('anthropic', 'bucket-b');
|
|
988
|
+
});
|
|
989
|
+
it('coalesces concurrent pass-3 foreground reauth for the same bucket', async () => {
|
|
990
|
+
// Arrange
|
|
991
|
+
const tokenStore = new MemoryTokenStore();
|
|
992
|
+
// Current bucket starts with no token to force pass-3 foreground auth.
|
|
993
|
+
let releaseForegroundAuth;
|
|
994
|
+
const foregroundAuthGate = new Promise((resolve) => {
|
|
995
|
+
releaseForegroundAuth = resolve;
|
|
996
|
+
});
|
|
997
|
+
const oauthManager = {
|
|
998
|
+
getOAuthToken: vi.fn(async (_provider, bucket) => tokenStore.getToken('anthropic', bucket)),
|
|
999
|
+
getTokenStore: vi.fn(() => tokenStore),
|
|
1000
|
+
setSessionBucket: vi.fn(),
|
|
1001
|
+
getSessionBucket: vi.fn(() => 'bucket-a'),
|
|
1002
|
+
authenticate: vi.fn(async (_provider, bucket) => {
|
|
1003
|
+
await foregroundAuthGate;
|
|
1004
|
+
await tokenStore.saveToken('anthropic', makeToken('pass3-token'), bucket ?? 'default');
|
|
1005
|
+
}),
|
|
1006
|
+
authenticateMultipleBuckets: vi.fn(async () => undefined),
|
|
1007
|
+
};
|
|
1008
|
+
const handler = new BucketFailoverHandlerImpl(['bucket-a'], 'anthropic', oauthManager);
|
|
1009
|
+
// Act: Launch two failovers concurrently that both need pass-3 reauth.
|
|
1010
|
+
const first = handler.tryFailover({ triggeringStatus: 401 });
|
|
1011
|
+
const second = handler.tryFailover({ triggeringStatus: 401 });
|
|
1012
|
+
// Allow the shared pass-3 authenticate call to complete.
|
|
1013
|
+
releaseForegroundAuth?.();
|
|
1014
|
+
// Assert: both calls succeed but only one foreground authenticate occurs.
|
|
1015
|
+
await expect(first).resolves.toBe(true);
|
|
1016
|
+
await expect(second).resolves.toBe(true);
|
|
1017
|
+
expect(oauthManager.authenticate).toHaveBeenCalledTimes(1);
|
|
1018
|
+
expect(oauthManager.authenticate).toHaveBeenCalledWith('anthropic', 'bucket-a');
|
|
1019
|
+
});
|
|
1020
|
+
it('re-checks late-started eager auth before pass-3 foreground reauth', async () => {
|
|
1021
|
+
// Arrange
|
|
1022
|
+
const tokenStore = new MemoryTokenStore();
|
|
1023
|
+
let releaseFirstGetOAuthToken;
|
|
1024
|
+
const firstGetOAuthTokenGate = new Promise((resolve) => {
|
|
1025
|
+
releaseFirstGetOAuthToken = resolve;
|
|
1026
|
+
});
|
|
1027
|
+
let releaseEagerAuth;
|
|
1028
|
+
const eagerAuthGate = new Promise((resolve) => {
|
|
1029
|
+
releaseEagerAuth = resolve;
|
|
1030
|
+
});
|
|
1031
|
+
let getOAuthTokenCalls = 0;
|
|
1032
|
+
const oauthManager = {
|
|
1033
|
+
getOAuthToken: vi.fn(async (_provider, bucket) => {
|
|
1034
|
+
getOAuthTokenCalls += 1;
|
|
1035
|
+
if (getOAuthTokenCalls === 1) {
|
|
1036
|
+
await firstGetOAuthTokenGate;
|
|
1037
|
+
return null;
|
|
1038
|
+
}
|
|
1039
|
+
return tokenStore.getToken('anthropic', bucket);
|
|
1040
|
+
}),
|
|
1041
|
+
getTokenStore: vi.fn(() => tokenStore),
|
|
1042
|
+
setSessionBucket: vi.fn(),
|
|
1043
|
+
getSessionBucket: vi.fn(() => 'bucket-b'),
|
|
1044
|
+
authenticate: vi.fn(async (_provider, bucket) => {
|
|
1045
|
+
await tokenStore.saveToken('anthropic', makeToken('pass3-token'), bucket ?? 'default');
|
|
1046
|
+
}),
|
|
1047
|
+
authenticateMultipleBuckets: vi.fn(async () => {
|
|
1048
|
+
await eagerAuthGate;
|
|
1049
|
+
await tokenStore.saveToken('anthropic', makeToken('late-eager-token'), 'bucket-a');
|
|
1050
|
+
}),
|
|
1051
|
+
};
|
|
1052
|
+
const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b'], 'anthropic', oauthManager);
|
|
1053
|
+
const failoverPromise = handler.tryFailover({ triggeringStatus: 401 });
|
|
1054
|
+
// Start eager auth after pass-3 started, while first token check is blocked.
|
|
1055
|
+
const ensurePromise = handler.ensureBucketsAuthenticated();
|
|
1056
|
+
// Allow first check to complete with null so pass-3 executes late in-flight re-check.
|
|
1057
|
+
releaseFirstGetOAuthToken?.();
|
|
1058
|
+
// Keep eager auth in-flight until pass-3 reaches late guard.
|
|
1059
|
+
await Promise.resolve();
|
|
1060
|
+
releaseEagerAuth?.();
|
|
1061
|
+
await ensurePromise;
|
|
1062
|
+
await expect(failoverPromise).resolves.toBe(true);
|
|
1063
|
+
expect(getOAuthTokenCalls).toBe(2);
|
|
1064
|
+
expect(oauthManager.authenticate).not.toHaveBeenCalled();
|
|
1065
|
+
expect(handler.getCurrentBucket()).toBe('bucket-a');
|
|
1066
|
+
});
|
|
911
1067
|
});
|
|
912
1068
|
//# sourceMappingURL=BucketFailoverHandlerImpl.spec.js.map
|