@jsonstudio/rcc 0.89.1548 → 0.89.1552
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/dist/build-info.js +2 -2
- package/dist/cli/commands/code.js +46 -6
- package/dist/cli/commands/code.js.map +1 -1
- package/docs/providers/antigravity-fingerprint-ua-warmup.md +91 -2
- package/docs/providers/antigravity-gemini-provider-compat.md +317 -0
- package/docs/providers/gemini-provider.md +1 -0
- package/package.json +2 -2
- package/scripts/ci/repo-sanity.mjs +50 -0
package/dist/build-info.js
CHANGED
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { LOCAL_HOSTS } from '../../constants/index.js';
|
|
4
|
+
function resolveClaudeBinary(options) {
|
|
5
|
+
const raw = String(options.command || '').trim();
|
|
6
|
+
if (!raw) {
|
|
7
|
+
return 'claude';
|
|
8
|
+
}
|
|
9
|
+
// Already a path: keep as-is.
|
|
10
|
+
if (raw.includes('/') || raw.includes('\\\\')) {
|
|
11
|
+
return raw;
|
|
12
|
+
}
|
|
13
|
+
const candidates = [];
|
|
14
|
+
try {
|
|
15
|
+
candidates.push(options.pathImpl.join('/opt/homebrew/bin', raw));
|
|
16
|
+
}
|
|
17
|
+
catch { /* ignore */ }
|
|
18
|
+
try {
|
|
19
|
+
candidates.push(options.pathImpl.join('/usr/local/bin', raw));
|
|
20
|
+
}
|
|
21
|
+
catch { /* ignore */ }
|
|
22
|
+
try {
|
|
23
|
+
candidates.push(options.pathImpl.join(options.homedir(), '.local', 'bin', raw));
|
|
24
|
+
}
|
|
25
|
+
catch { /* ignore */ }
|
|
26
|
+
for (const candidate of candidates) {
|
|
27
|
+
try {
|
|
28
|
+
if (candidate && options.fsImpl.existsSync(candidate)) {
|
|
29
|
+
return candidate;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// ignore
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return raw;
|
|
37
|
+
}
|
|
4
38
|
function parseServerUrl(raw) {
|
|
5
39
|
const trimmed = String(raw || '').trim();
|
|
6
40
|
if (!trimmed) {
|
|
@@ -319,11 +353,17 @@ export function createCodeCommand(program, ctx) {
|
|
|
319
353
|
const envPath = String(ctx.env.CLAUDE_PATH || '').trim();
|
|
320
354
|
return envPath || 'claude';
|
|
321
355
|
})();
|
|
356
|
+
const resolvedClaudeBin = resolveClaudeBinary({
|
|
357
|
+
fsImpl,
|
|
358
|
+
pathImpl,
|
|
359
|
+
homedir: ctx.homedir,
|
|
360
|
+
command: claudeBin
|
|
361
|
+
});
|
|
322
362
|
const shouldUseShell = ctx.isWindows &&
|
|
323
|
-
!pathImpl.extname(
|
|
324
|
-
!
|
|
325
|
-
!
|
|
326
|
-
const claudeProcess = ctx.spawn(
|
|
363
|
+
!pathImpl.extname(resolvedClaudeBin) &&
|
|
364
|
+
!resolvedClaudeBin.includes('/') &&
|
|
365
|
+
!resolvedClaudeBin.includes('\\\\');
|
|
366
|
+
const claudeProcess = ctx.spawn(resolvedClaudeBin, claudeArgs, {
|
|
327
367
|
stdio: 'inherit',
|
|
328
368
|
env: claudeEnv,
|
|
329
369
|
cwd: currentCwd,
|
|
@@ -331,7 +371,7 @@ export function createCodeCommand(program, ctx) {
|
|
|
331
371
|
});
|
|
332
372
|
spinner.succeed('Claude Code launched with RouteCodex proxy');
|
|
333
373
|
ctx.logger.info(`Using RouteCodex server at: http://${resolvedBaseHost}:${actualPort}`);
|
|
334
|
-
ctx.logger.info(`Claude binary: ${
|
|
374
|
+
ctx.logger.info(`Claude binary: ${resolvedClaudeBin}`);
|
|
335
375
|
ctx.logger.info(`Working directory for Claude: ${currentCwd}`);
|
|
336
376
|
ctx.logger.info('Press Ctrl+C to exit Claude Code');
|
|
337
377
|
const shutdown = async (sig) => {
|
|
@@ -352,7 +392,7 @@ export function createCodeCommand(program, ctx) {
|
|
|
352
392
|
});
|
|
353
393
|
claudeProcess.on('error', (err) => {
|
|
354
394
|
try {
|
|
355
|
-
ctx.logger.error(`Failed to launch Claude Code (${
|
|
395
|
+
ctx.logger.error(`Failed to launch Claude Code (${resolvedClaudeBin}): ${err instanceof Error ? err.message : String(err)}`);
|
|
356
396
|
if (ctx.isWindows && shouldUseShell) {
|
|
357
397
|
ctx.logger.error('Tip: If Claude is installed via npm, ensure the shim is in PATH (e.g. claude.cmd).');
|
|
358
398
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../../src/cli/commands/code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAuDvD,SAAS,cAAc,CACrB,GAAW;IAEX,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC7B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAc,CAAC,CAAC,CAAC,CAAE,IAAe,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACvG,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAE,UAAkB;IAC7D,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,EAAE,UAAU,EAAE,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;QAC1G,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,4FAA4F;IAC5F,oFAAoF;IACpF,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAAA,OAAO,SAAS,CAAC;IAAA,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC;QAAA,OAAO,SAAS,CAAC;IAAA,CAAC;IACvE,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAgB,EAAE,GAAuB;IACzE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEhD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,iHAAiH,CAClH;SACA,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;SAC7E,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,WAAW,CAAC,GAAG,CAAC;SACtE,MAAM,CAAC,aAAa,EAAE,6EAA6E,CAAC;SACpG,MAAM,CAAC,uBAAuB,EAAE,oCAAoC,CAAC;SACrE,MAAM,CAAC,mBAAmB,EAAE,iFAAiF,CAAC;SAC9G,MAAM,CAAC,sBAAsB,EAAE,gCAAgC,EAAE,QAAQ,CAAC;SAC1E,MAAM,CAAC,aAAa,EAAE,mEAAmE,CAAC;SAC1F,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;SAC1D,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;SAC3D,MAAM,CAAC,iBAAiB,EAAE,6DAA6D,CAAC;SACxF,QAAQ,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;SACvE,kBAAkB,CAAC,IAAI,CAAC;SACxB,oBAAoB,CAAC,IAAI,CAAC;SAC1B,MAAM,CAAC,KAAK,EAAE,YAAsB,EAAE,EAAE,OAA2B,EAAE,EAAE;QACtE,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAC;QAEpF,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;YAC1E,CAAC;YAED,IAAI,cAAc,GAAqB,MAAM,CAAC;YAC9C,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClE,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAC9B,IAAI,cAAc,GAAG,EAAE,CAAC;YAExB,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3C,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACjC,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC;gBACvC,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC;gBACvC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;YACnC,CAAC;YAED,6CAA6C;YAC7C,iFAAiF;YACjF,sCAAsC;YACtC,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;oBAC3E,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;oBACpF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,UAAU,6CAA6C,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACjG,IAAI,CAAC;wBACH,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;wBAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;wBACzC,UAAU,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;wBACxF,UAAU,GAAG,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,IAAI,UAAU,CAAC;oBAC9F,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;gBAC5E,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,kGAAkG,CACnG,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;YAED,MAAM,gBAAgB,GACpB,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5F,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE;oBAChF,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE;oBAClC,CAAC,CAAC,IAAI,CAAC;gBACT,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxG,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAEvC,MAAM,WAAW,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,GAAG,cAAc,MAAM,WAAW,GAAG,QAAQ,GAAG,cAAc,EAAE,CAAC;YAEnF,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,GAAG,sCAAsC,CAAC;gBACtD,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;oBACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;oBAC7D,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBACjF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC9G,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;oBAAA,CAAC;oBACxD,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClD,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;wBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;oBAAA,CAAC;oBAC1E,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;wBAC9C,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;wBAChG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBACzE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACd,CAAC;oBAED,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;oBAEjE,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,EAAE;wBACvG,KAAK,EAAE,MAAM;wBACb,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE;wBACnB,QAAQ,EAAE,IAAI;qBACf,CAAC,CAAC;oBACH,IAAI,CAAC;wBACH,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;oBAC1B,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;oBAED,OAAO,CAAC,IAAI,GAAG,kDAAkD,CAAC;oBAClE,IAAI,KAAK,GAAG,KAAK,CAAC;oBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5B,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACtB,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;4BACjF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;4BAC9E,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gCACX,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC9C,IAAI,EAAE,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;oCAC3B,KAAK,GAAG,IAAI,CAAC;oCACb,MAAM;gCACR,CAAC;4BACH,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,YAAY;wBACd,CAAC;oBACH,CAAC;oBAED,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,GAAG,0BAA0B,CAAC;YAE1C,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,aAAa,GAAG,GAAG,cAAc,MAAM,gBAAgB,GAAG,QAAQ,GAAG,cAAc,EAAE,CAAC;YAC5F,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;gBACvB,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;oBACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAChC,OAAO,QAAQ,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,MAAM,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO,MAAM,EAAE,CAAC;YAClB,CAAC,CAAC,EAAE,CAAC;YAEL,MAAM,SAAS,GAAG;gBAChB,GAAG,GAAG,CAAC,GAAG;gBACV,GAAG,EAAE,UAAU;gBACf,WAAW,EAAE,UAAU;gBACvB,kBAAkB,EAAE,UAAU;gBAC9B,cAAc,EAAE,UAAU;gBAC1B,kBAAkB,EAAE,aAAa;gBACjC,iBAAiB,EAAE,aAAa;gBAChC,iBAAiB,EAAE,gBAAgB,IAAI,eAAe;aAClC,CAAC;YAEvB,IAAI,CAAC;gBACH,OAAQ,SAAqC,CAAC,sBAAsB,CAAC,CAAC;YACxE,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,IAAI,CAAC;gBACH,OAAQ,SAAqC,CAAC,iBAAiB,CAAC,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;YACpG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,aAAa,EAAE,CAAC,CAAC;YAEnE,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;YAED,gCAAgC;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;gBACvD,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEvE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;oBACxB,IAAI;oBACJ,QAAQ;oBACR,IAAI;oBACJ,QAAQ;oBACR,OAAO;oBACP,IAAI;oBACJ,UAAU;oBACV,UAAU;oBACV,eAAe;oBACf,SAAS;oBACT,WAAW;oBACX,iBAAiB;iBAClB,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;oBAC3B,IAAI;oBACJ,QAAQ;oBACR,IAAI;oBACJ,QAAQ;oBACR,OAAO;oBACP,IAAI;oBACJ,UAAU;oBACV,UAAU;oBACV,eAAe;oBACf,SAAS;oBACT,WAAW;iBACZ,CAAC,CAAC;gBAEH,MAAM,WAAW,GAAa,EAAE,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvB,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC1B,CAAC,EAAE,CAAC;wBACN,CAAC;wBACD,SAAS;oBACX,CAAC;oBACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;wBACzB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC5B,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;4BACX,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACjC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gCAAA,SAAS;4BAAA,CAAC;wBACzC,CAAC;oBACH,CAAC;oBACD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;gBAED,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC/B,MAAM,UAAU,GAAG,CAAC,GAAa,EAAE,EAAE;oBACnC,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;wBACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;4BACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BACZ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjB,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBACF,UAAU,CAAC,sBAAsB,CAAC,CAAC;gBACnC,UAAU,CAAC,WAAW,CAAC,CAAC;gBACxB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;gBACtB,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBACnD,IAAI,CAAC,EAAE,CAAC;wBAAA,OAAO,CAAC,CAAC;oBAAA,CAAC;gBACpB,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzD,OAAO,OAAO,IAAI,QAAQ,CAAC;YAC7B,CAAC,CAAC,EAAE,CAAC;YAEL,MAAM,cAAc,GAClB,GAAG,CAAC,SAAS;gBACb,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;gBAC5B,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACxB,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE;gBACrD,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,SAAS;gBACd,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,cAAc;aACtB,CAAC,CAAC;YAEH,OAAO,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;YAC9D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,gBAAgB,IAAI,UAAU,EAAE,CAAC,CAAC;YACxF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;YAC/C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;YAC/D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAEpD,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAmB,EAAE,EAAE;gBAC7C,IAAI,CAAC;oBACH,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,CAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAmB,EAAE,EAAc,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAChG,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACtB,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;gBACvB,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChC,IAAI,CAAC;oBACH,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,iCAAiC,SAAS,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACnG,CAAC;oBACF,IAAI,GAAG,CAAC,SAAS,IAAI,cAAc,EAAE,CAAC;wBACpC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;oBACzG,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBACxC,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../../src/cli/commands/code.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,26 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## 0) 你需要知道的文件/目录/入口
|
|
10
|
+
|
|
11
|
+
### 关键目录(默认都在 `~/.routecodex/`)
|
|
12
|
+
|
|
13
|
+
- OAuth token:`auth/antigravity-oauth-*.json`
|
|
14
|
+
- Camoufox profile:`camoufox-profiles/rc-gemini.<alias>/...`
|
|
15
|
+
- Camoufox 指纹 env:`camoufox-fp/rc-gemini.<alias>.json`
|
|
16
|
+
- reauth-required 标记:`state/antigravity-reauth-required.json`
|
|
17
|
+
- UA 版本缓存:`state/antigravity-ua-version.json`
|
|
18
|
+
|
|
19
|
+
> 为什么 profileId 是 `rc-gemini.<alias>`:`gemini-cli` 与 `antigravity` 共享同一“指纹家族(gemini)”,同 alias 共用同一套 profile/指纹,避免一个账号跑出两套平台指纹。
|
|
20
|
+
|
|
21
|
+
### 关键日志/接口
|
|
22
|
+
|
|
23
|
+
- 启动 warmup:`[antigravity:warmup] ...`
|
|
24
|
+
- Quota / pool UI 数据:`GET /quota/providers`(包含 `fpOs/fpArch/fpSuffix/...`)
|
|
25
|
+
- OAuth 本地 portal:OAuth 前会展示 token + 指纹摘要(Camoufox profile + OS/Arch)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
9
29
|
## 1) 403:`verify your account`(UA/指纹不匹配导致的重新验证)
|
|
10
30
|
|
|
11
31
|
### 现象
|
|
@@ -19,6 +39,24 @@
|
|
|
19
39
|
- Antigravity/Gemini **禁止使用 Linux 指纹**(`linux/*`),发现即要求修复并重新 OAuth。
|
|
20
40
|
- 每个 alias 使用自己对应的 Camoufox profile 指纹(避免“多个账号互相污染”)。
|
|
21
41
|
|
|
42
|
+
### UA 的原则:版本可更新,OS/arch 不可漂移
|
|
43
|
+
|
|
44
|
+
`User-Agent` header 形态:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
antigravity/<version> <os>/<arch>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- `<os>/<arch>` 来自 alias 的 OAuth 指纹(Camoufox);**不能随意改**。
|
|
51
|
+
- `<version>` 允许更新(避免 “This version of Antigravity is no longer supported.”)。
|
|
52
|
+
|
|
53
|
+
RouteCodex 的版本号来源(从高到低):
|
|
54
|
+
1. `ROUTECODEX_ANTIGRAVITY_USER_AGENT` / `RCC_ANTIGRAVITY_USER_AGENT`(完全覆盖)
|
|
55
|
+
2. `ROUTECODEX_ANTIGRAVITY_UA_VERSION` / `RCC_ANTIGRAVITY_UA_VERSION`
|
|
56
|
+
3. 远程拉取(可通过 `ROUTECODEX_ANTIGRAVITY_UA_DISABLE_REMOTE=1` 禁用)
|
|
57
|
+
4. `~/.routecodex/state/antigravity-ua-version.json`
|
|
58
|
+
5. 兜底版本(仅保证“有值”,不保证不过期)
|
|
59
|
+
|
|
22
60
|
### 修复步骤
|
|
23
61
|
1. 修复指纹(把 linux 修回 windows/macos):
|
|
24
62
|
- `routecodex camoufox-fp repair --provider antigravity --all`
|
|
@@ -33,6 +71,29 @@
|
|
|
33
71
|
### 现象
|
|
34
72
|
- 上游返回 `HTTP 429`,错误体含 `RESOURCE_EXHAUSTED`。
|
|
35
73
|
|
|
74
|
+
### 关键结论(本次事故的“真因”)
|
|
75
|
+
我们遇到过一种非常典型的形态:
|
|
76
|
+
- **第一次请求 OK**(upstream 在响应里下发了 `thoughtSignature`)
|
|
77
|
+
- **第二次(带工具历史)开始 429**(本地在历史 `functionCall` part 里丢了/没注入 `thoughtSignature`)
|
|
78
|
+
|
|
79
|
+
而“丢签名”的根因不是 quota,而是 **Antigravity provider 配错了 compat profile**:
|
|
80
|
+
- `chat:gemini` 不会跑 `gemini_cli_request_wrap`(因此不会做历史 `thoughtSignature` 注入)
|
|
81
|
+
- Antigravity 必须用 `chat:gemini-cli`(Cloud Code Assist wrapper 对齐 + signature 注入)
|
|
82
|
+
|
|
83
|
+
修复点:确保你的用户配置中(`~/.routecodex/config.json`):
|
|
84
|
+
|
|
85
|
+
```jsonc
|
|
86
|
+
{
|
|
87
|
+
"virtualrouter": {
|
|
88
|
+
"providers": {
|
|
89
|
+
"antigravity": {
|
|
90
|
+
"compatibilityProfile": "chat:gemini-cli"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
36
97
|
### 说明
|
|
37
98
|
- 这类 429 可能是“真实配额/容量”或上游策略性拒绝,**不能假设一定是本地形状问题**。
|
|
38
99
|
- 但在 Antigravity/Gemini 路径上,如果请求形状/历史/工具 schema/签名注入不对齐,也会显著放大 429 的出现概率(尤其是长上下文 + 多工具历史)。
|
|
@@ -47,7 +108,19 @@
|
|
|
47
108
|
- tool 声明字段对齐(例如 Gemini 最新规范要求 `parameters`)
|
|
48
109
|
- Antigravity wrapper 语义要求:不把内部调试字段带到上游(版本/buildTime 等只留在本地快照)
|
|
49
110
|
|
|
50
|
-
|
|
111
|
+
### 如何确认签名注入真的生效(不是“占位”)
|
|
112
|
+
|
|
113
|
+
建议用 codex-samples 快照做证据链(不看日志猜测):
|
|
114
|
+
|
|
115
|
+
1. 找到一次成功返回且包含 `thoughtSignature` 的响应快照(`provider-response.json` / SSE 片段中 `candidate.content.parts[].thoughtSignature`)。
|
|
116
|
+
2. 紧接着找下一次“带工具历史”的请求快照,检查 request body 的 `contents[].parts[].functionCall` 是否带同一个 `thoughtSignature`。
|
|
117
|
+
|
|
118
|
+
> 这个验证不依赖“你是否真的有 quota”;只要 upstream 在某次响应里下发过 signature,后续注入就应当可见。
|
|
119
|
+
|
|
120
|
+
### 如何确认 compat profile 真的生效
|
|
121
|
+
用 `--snap` 或 dev 默认快照(`~/.routecodex/codex-samples/...`)检查 pipeline stage8:
|
|
122
|
+
- `chat_process.req.stage8.outbound.compat.json` 里必须出现 `chat:gemini-cli`
|
|
123
|
+
- 如果你看到的是 `chat:gemini`,说明 profile 仍然配错(很容易复发“第一次 OK,第二次 429”)
|
|
51
124
|
|
|
52
125
|
---
|
|
53
126
|
|
|
@@ -59,6 +132,23 @@
|
|
|
59
132
|
- UA 的 `<os>/<arch>` 与指纹期望一致
|
|
60
133
|
- 若修过指纹,需要完成 OAuth reauth
|
|
61
134
|
|
|
135
|
+
### Warmup 实际做了什么
|
|
136
|
+
|
|
137
|
+
实现位置:
|
|
138
|
+
- 检查逻辑:`src/providers/auth/antigravity-warmup.ts:warmupCheckAntigravityAlias()`
|
|
139
|
+
- 启动触发:`src/server/runtime/http-server/index.ts`(初始化阶段遍历 `antigravity.<alias>.*` providerKey)
|
|
140
|
+
|
|
141
|
+
行为(高层):
|
|
142
|
+
1. 读取 alias 的 Camoufox 指纹 → 推断期望 suffix(`windows|macos` + `amd64|aarch64`)。
|
|
143
|
+
2. 解析/生成 `User-Agent`(会强制刷新版本号,避免过旧)。
|
|
144
|
+
3. 校验 `ua_suffix === expected_suffix`。
|
|
145
|
+
4. 若检测到 alias 处于 `reauth_required` 状态,则提示 OAuth,并在满足条件时自动清理“陈旧标记”(通过 token 文件 mtime 判断)。
|
|
146
|
+
5. 如果 warmup 失败且 quota 模块可用,会把该 alias 下的所有 providerKey **blacklist** 一段时间(默认很长,避免运行时误用被 ban)。
|
|
147
|
+
|
|
148
|
+
可控开关:
|
|
149
|
+
- 禁用 warmup:`ROUTECODEX_ANTIGRAVITY_WARMUP=0` / `RCC_ANTIGRAVITY_WARMUP=0`
|
|
150
|
+
- blacklist 时长:`ROUTECODEX_ANTIGRAVITY_WARMUP_BLACKLIST_MS=<ms>`
|
|
151
|
+
|
|
62
152
|
### 日志格式
|
|
63
153
|
- 启动后会看到:
|
|
64
154
|
- `[antigravity:warmup] OK ... fp_os=... fp_arch=... expected=... actual=...`
|
|
@@ -72,4 +162,3 @@
|
|
|
72
162
|
## 4) 变更范围约束(架构要求)
|
|
73
163
|
- Hub Pipeline 仍是唯一执行路径;Provider 层只做传输(auth/http/retry/compat hook)。
|
|
74
164
|
- Antigravity 的 session/signature 逻辑 **不扩散**:最多位于 compat 与 gemini-cli provider 路径。
|
|
75
|
-
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
# Antigravity → Gemini(Cloud Code Assist)Provider + Compat 设计(含 UA/指纹/多账号经验)
|
|
2
|
+
|
|
3
|
+
本文整理 **RouteCodex / rcc** 在走 **Antigravity(OAuth 账号池)→ Cloud Code Assist(`v1internal:*`)** 时的设计:哪些逻辑属于 **Provider(传输层)**,哪些属于 **llmswitch-core(Hub Pipeline + compat)**,以及两者如何协作实现:
|
|
4
|
+
|
|
5
|
+
- 账号粘性(sessionId 指纹)
|
|
6
|
+
- `thoughtSignature` 缓存与后续注入(避免工具历史导致的上游拒绝/限流放大)
|
|
7
|
+
- 请求体/工具 schema 的最小清洗(不扩散到非 Antigravity 路径)
|
|
8
|
+
- `User-Agent`(版本号可更新,但 OS/arch 必须与 OAuth 指纹一致)
|
|
9
|
+
- 多账号隔离(alias → profile → UA suffix)
|
|
10
|
+
|
|
11
|
+
> 约束:单一路径 `HTTP server → llmswitch-core Hub Pipeline → Provider V2 → upstream`,Provider 不做路由与工具修复。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 0) 关键不变量(必须牢记)
|
|
16
|
+
|
|
17
|
+
1. **Provider = transport**:只负责 auth、HTTP、重试、SSE 传输与少量“协议/上游 contract”整理;不能根据用户 payload 修工具/改路由。
|
|
18
|
+
2. **“UA 版本可变,但指纹不可漂移”**:对 Cloud Code Assist,OAuth 账号与“浏览器平台指纹”强绑定。UA 的 `<os>/<arch>` 必须稳定绑定到该 alias 的 OAuth 指纹。
|
|
19
|
+
3. **禁用 Linux 指纹(Antigravity/Gemini 路径)**:我们遇到过 `linux/*` 指纹触发 re-verify/风控;因此在这条路径上明确禁止。
|
|
20
|
+
4. **signature 不扩散**:`thoughtSignature` 缓存/注入只在 `antigravity + gemini-chat` 的 compat 生效,不影响其它 provider。
|
|
21
|
+
5. **profile 必须选对**:Antigravity 走 Cloud Code Assist wrapper 时必须用 `compatibilityProfile: "chat:gemini-cli"`;用错 profile(例如 `chat:gemini`)会导致 request wrap / 历史 `thoughtSignature` 注入缺失,从而出现“第一次 OK、第二次 429”的假象。
|
|
22
|
+
|
|
23
|
+
## 1) 端到端执行路径(单一路径)
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
client (/v1/responses or /v1/chat/completions)
|
|
27
|
+
→ RouteCodex HTTP server
|
|
28
|
+
→ llmswitch-core Hub Pipeline(语义映射/工具治理/compat)
|
|
29
|
+
→ Provider V2: gemini-cli-http-provider(Antigravity transport)
|
|
30
|
+
→ Cloud Code Assist v1internal upstream
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Cloud Code Assist 的 upstream endpoint 形态是 Google 的 `v1internal:*GenerateContent`(这是上游公开服务的路径,不是 Antigravity-Manager 的内部端点)。
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 2) Upstream BaseURL + endpoints(Cloud Code Assist)
|
|
38
|
+
|
|
39
|
+
实现位置:`src/providers/auth/antigravity-userinfo-helper.ts`
|
|
40
|
+
|
|
41
|
+
### 2.1 BaseURL 候选(Sandbox → Daily → Prod)
|
|
42
|
+
|
|
43
|
+
`resolveAntigravityApiBaseCandidates()` 的行为要点:
|
|
44
|
+
- 若显式 baseURL 或环境变量 `ROUTECODEX_ANTIGRAVITY_API_BASE` / `RCC_ANTIGRAVITY_API_BASE` 指向本地(`http://127.0.0.1` / `http://localhost`),则**不做**公网 fallback(避免把本地调试误导到公网)。
|
|
45
|
+
- 否则按 **Sandbox → Daily → Prod** 生成候选列表(便于灰度与回退)。
|
|
46
|
+
|
|
47
|
+
### 2.2 userinfo / onboarding 相关端点
|
|
48
|
+
|
|
49
|
+
初始化/探测阶段会用到(是否触发取决于运行流程):
|
|
50
|
+
- `POST /v1internal:loadCodeAssist`
|
|
51
|
+
- `POST /v1internal:onboardUser`
|
|
52
|
+
|
|
53
|
+
### 2.3 生成内容端点(请求主路径)
|
|
54
|
+
|
|
55
|
+
Antigravity runtime 下我们**强制 SSE**(见下文),因此请求通常落到:
|
|
56
|
+
- `POST /v1internal:streamGenerateContent?alt=sse`
|
|
57
|
+
|
|
58
|
+
> 备注:RouteCodex 不引入 Antigravity-Manager 的“内部转发端点”概念;这里的 `v1internal:*` 是 Cloud Code Assist 的 upstream contract。
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 3) Provider(routecodex)职责:只做“传输层整理”
|
|
63
|
+
|
|
64
|
+
实现位置:`src/providers/core/runtime/gemini-cli-http-provider.ts`
|
|
65
|
+
|
|
66
|
+
### 3.1 Antigravity runtime 识别
|
|
67
|
+
|
|
68
|
+
Provider 通过 config 或 OAuth providerId 判断当前是否为 Antigravity:
|
|
69
|
+
- `config.config.providerId === 'antigravity'`
|
|
70
|
+
- 或 `oauthProviderId === 'antigravity'`
|
|
71
|
+
|
|
72
|
+
对应代码:`src/providers/core/runtime/gemini-cli-http-provider.ts`
|
|
73
|
+
- `GeminiCLIHttpProvider.isAntigravityRuntime()`
|
|
74
|
+
|
|
75
|
+
### 3.2 强制 SSE(减少 generateContent / streamGenerateContent 的策略差异)
|
|
76
|
+
|
|
77
|
+
Antigravity runtime 下强制走 SSE:
|
|
78
|
+
- `wantsUpstreamSse()` 对 antigravity 返回 `true`
|
|
79
|
+
- 从而稳定走 `:streamGenerateContent?alt=sse`
|
|
80
|
+
|
|
81
|
+
对应代码:`src/providers/core/runtime/gemini-cli-http-provider.ts:wantsUpstreamSse()`
|
|
82
|
+
|
|
83
|
+
### 3.3 请求 wrapper 字段(身份信息走 JSON wrapper)
|
|
84
|
+
|
|
85
|
+
Antigravity runtime 下,Provider 会确保 JSON wrapper 上存在(或按模式移除):
|
|
86
|
+
- `requestId`:默认前缀 `agent-`,`ROUTECODEX_ANTIGRAVITY_HEADER_MODE=minimal` 时改用 `req-`
|
|
87
|
+
- `userAgent`(值固定为 `'antigravity'`,不是 UA header)
|
|
88
|
+
- `requestType`:默认 `agent`,有图片附件时为 `image_gen`
|
|
89
|
+
|
|
90
|
+
对应代码:`src/providers/core/runtime/gemini-cli-http-provider.ts:preprocessRequest()`
|
|
91
|
+
|
|
92
|
+
> 注意:Provider **不根据用户 payload 推断语义**;例如图片/模态提示来自 Hub Pipeline 写入的 `metadata.hasImageAttachment`。
|
|
93
|
+
|
|
94
|
+
### 3.4 Header 最小化(减少 Google 客户端标识)
|
|
95
|
+
|
|
96
|
+
Antigravity runtime 下,Provider 会:
|
|
97
|
+
- 设置 HTTP `User-Agent`:`resolveAntigravityUserAgent({ alias })`
|
|
98
|
+
- 删除(大小写不敏感):
|
|
99
|
+
- `x-goog-api-client`
|
|
100
|
+
- `client-metadata`
|
|
101
|
+
- `accept-encoding`
|
|
102
|
+
- `originator`
|
|
103
|
+
|
|
104
|
+
对应代码:`src/providers/core/runtime/gemini-cli-http-provider.ts:finalizeRequestHeaders()`
|
|
105
|
+
|
|
106
|
+
并支持 `ROUTECODEX_ANTIGRAVITY_HEADER_MODE`:
|
|
107
|
+
- `default`:标准行为(保持 SSE Accept 等默认逻辑)
|
|
108
|
+
- `minimal`:更激进的 header 精简(会把 `requestId/requestType` 放到 header,wrapper 中移除)
|
|
109
|
+
- `standard`:显式要求标准 header 行为
|
|
110
|
+
|
|
111
|
+
### 3.5 sessionId 指纹(账号粘性输入)
|
|
112
|
+
|
|
113
|
+
Provider 不自己发明算法,而是从 llmswitch-core bridge 获取:
|
|
114
|
+
- `extractAntigravityGeminiSessionId(processedRequest)`
|
|
115
|
+
|
|
116
|
+
并写入:
|
|
117
|
+
- `processedRequest.metadata.antigravitySessionId`
|
|
118
|
+
- 以及 `runtimeMetadata.metadata.antigravitySessionId`
|
|
119
|
+
|
|
120
|
+
对应代码:
|
|
121
|
+
- `src/modules/llmswitch/bridge.ts:extractAntigravityGeminiSessionId()`
|
|
122
|
+
- `src/providers/core/runtime/gemini-cli-http-provider.ts:preprocessRequest()`
|
|
123
|
+
|
|
124
|
+
### 3.6 `thoughtSignature` 缓存(从上游响应中提取)
|
|
125
|
+
|
|
126
|
+
Provider 从 upstream Gemini 响应的 `candidate.content.parts[]` 里提取 `thoughtSignature` 并缓存:
|
|
127
|
+
- SSE:`GeminiSseNormalizer.emitCandidateParts()`
|
|
128
|
+
- 非 SSE:`postprocessResponse()` 中遍历 candidates
|
|
129
|
+
|
|
130
|
+
缓存入口来自 llmswitch-core(通过 bridge 暴露):
|
|
131
|
+
- `cacheAntigravitySessionSignature(sessionId, signature, messageCount)`
|
|
132
|
+
|
|
133
|
+
对应代码:
|
|
134
|
+
- `src/providers/core/runtime/gemini-cli-http-provider.ts`
|
|
135
|
+
- `src/modules/llmswitch/bridge.ts`
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 4) UA / 指纹(routecodex):每个 alias 绑定自己的指纹与 UA suffix(防止“账号互相污染”)
|
|
140
|
+
|
|
141
|
+
这部分是“账号与指纹一致性”的工程约束:**同一个 OAuth alias 的平台指纹必须稳定**。版本号允许更新以规避“版本过旧不支持”,但 OS/arch 的 UA suffix 不能漂移。
|
|
142
|
+
|
|
143
|
+
详细排障见:
|
|
144
|
+
- `docs/providers/antigravity-fingerprint-ua-warmup.md`
|
|
145
|
+
|
|
146
|
+
实现位置(可追踪):
|
|
147
|
+
- UA 版本/后缀解析:`src/providers/auth/antigravity-user-agent.ts`
|
|
148
|
+
- 指纹读取与 suffix 推断:`src/providers/auth/antigravity-fingerprint.ts`
|
|
149
|
+
- warmup 检查与黑名单:`src/providers/auth/antigravity-warmup.ts`
|
|
150
|
+
- reauth-required 状态:`src/providers/auth/antigravity-reauth-state.ts`
|
|
151
|
+
- Camoufox 指纹生成策略:`src/providers/core/config/camoufox-launcher.ts`
|
|
152
|
+
|
|
153
|
+
### 4.1 UA header 格式(对齐 Antigravity-Manager)
|
|
154
|
+
|
|
155
|
+
RouteCodex 发往 Antigravity/Cloud Code Assist 的 `User-Agent` header 形态是:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
antigravity/<version> <os>/<arch>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
其中:
|
|
162
|
+
- `<os>/<arch>`:来源于 alias 的 Camoufox OAuth 指纹(稳定绑定)。
|
|
163
|
+
- `<version>`:允许刷新(避免 “This version of Antigravity is no longer supported.”)。
|
|
164
|
+
|
|
165
|
+
> 实践经验:**绝对不要为了“更新 UA”去改 `<os>/<arch>`**。那是“账号指纹”,一改就等价于换设备/换浏览器平台,极易触发 403 re-verify。
|
|
166
|
+
|
|
167
|
+
### 4.2 版本号如何“动态获取 + 多级回退”
|
|
168
|
+
|
|
169
|
+
实现位置:`src/providers/auth/antigravity-user-agent.ts`
|
|
170
|
+
|
|
171
|
+
版本解析顺序(从高到低):
|
|
172
|
+
1. 显式 UA:`ROUTECODEX_ANTIGRAVITY_USER_AGENT` / `RCC_ANTIGRAVITY_USER_AGENT`(完全覆盖)
|
|
173
|
+
2. 显式版本号:`ROUTECODEX_ANTIGRAVITY_UA_VERSION` / `RCC_ANTIGRAVITY_UA_VERSION`
|
|
174
|
+
3. 远程拉取:`VERSION_URL`(可用 `ROUTECODEX_ANTIGRAVITY_UA_DISABLE_REMOTE=1` 禁用)
|
|
175
|
+
4. 本地磁盘 cache:`~/.routecodex/state/antigravity-ua-version.json`
|
|
176
|
+
5. 最后兜底:`LEGACY_PINNED_VERSION`(只保证“有值”,不保证不过期)
|
|
177
|
+
|
|
178
|
+
### 4.3 `<os>/<arch>` suffix 如何从指纹推断(并且为何禁 linux)
|
|
179
|
+
|
|
180
|
+
实现位置:`src/providers/auth/antigravity-fingerprint.ts`
|
|
181
|
+
|
|
182
|
+
- 指纹文件:`~/.routecodex/camoufox-fp/<profileId>.json`
|
|
183
|
+
- 从 `CAMOU_CONFIG_1` 的 `navigator.*` 字段推断:
|
|
184
|
+
- `windows|macos|linux`
|
|
185
|
+
- `amd64|aarch64`
|
|
186
|
+
|
|
187
|
+
RouteCodex 约束:
|
|
188
|
+
- Antigravity/Gemini 路径 **禁止 `linux/*`**(风险更高);发现即要求 `repair` + `reauth`。
|
|
189
|
+
|
|
190
|
+
### 4.4 alias → profile 的绑定与“多账号隔离”
|
|
191
|
+
|
|
192
|
+
实现位置:`src/providers/core/config/camoufox-launcher.ts`
|
|
193
|
+
|
|
194
|
+
- 每个 alias 都对应一个稳定 profileId(目录在 `~/.routecodex/camoufox-profiles/`)。
|
|
195
|
+
- `gemini-cli` 与 `antigravity` 共享同一“指纹家族(gemini)”,因此同 alias 在两者之间共享 profileId(避免一个账号跑出两套指纹)。
|
|
196
|
+
- OS policy:对 `(providerFamily, alias)` 做稳定 hash,把不同 alias 分布到 `windows/macos`,并**严格禁止 linux**。
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## 5) Compat(llmswitch-core)职责:请求形状清洗 + signature 注入(只在 antigravity + gemini-chat)
|
|
201
|
+
|
|
202
|
+
实现位置:`sharedmodule/llmswitch-core/src/conversion/compat/actions/gemini-cli-request.ts`
|
|
203
|
+
|
|
204
|
+
### 5.1 Cloud Code Assist wrapper(`request` 节点)
|
|
205
|
+
|
|
206
|
+
`wrapGeminiCliRequest()` 会把需要发往 Cloud Code Assist 的字段收敛到:
|
|
207
|
+
- `root.request = { contents, tools, systemInstruction, generationConfig, ... }`
|
|
208
|
+
|
|
209
|
+
并明确移除不该上送的字段:
|
|
210
|
+
- `metadata / action / web_search / stream / sessionId`(包括 root 与 request 内)
|
|
211
|
+
|
|
212
|
+
### 5.2 工具列表与 schema 规范化
|
|
213
|
+
|
|
214
|
+
compat 会做“最小必要”的规范化(不修复路由、不改语义):
|
|
215
|
+
- strip web_search 工具(Cloud Code Assist wrapper 不需要携带)
|
|
216
|
+
- normalize tool schema type(把 JSON Schema type 归一到 Gemini 兼容形式)
|
|
217
|
+
- normalize functionCall args(包含对 `exec_command` 的 `cmd`→`command` 兼容映射等)
|
|
218
|
+
- normalize tool declaration(对 `exec_command` / `write_stdin` / `apply_patch` 做参数白名单收敛)
|
|
219
|
+
|
|
220
|
+
对应代码:`sharedmodule/llmswitch-core/src/conversion/compat/actions/gemini-cli-request.ts`
|
|
221
|
+
- `stripWebSearchTools()`
|
|
222
|
+
- `normalizeToolDeclarations()`
|
|
223
|
+
- `normalizeFunctionCallArgs()`
|
|
224
|
+
|
|
225
|
+
### 5.3 `thoughtSignature` 注入(Antigravity-Manager 对齐点)
|
|
226
|
+
|
|
227
|
+
当满足 “antigravity + gemini-chat” 条件时,compat 会从 signature cache 取出 signature,并在请求中对所有 `part.functionCall` 补齐:
|
|
228
|
+
- `part.thoughtSignature` 缺失/空/占位时 → 写入缓存 signature
|
|
229
|
+
|
|
230
|
+
对应代码:
|
|
231
|
+
- `sharedmodule/llmswitch-core/src/conversion/compat/actions/gemini-cli-request.ts`
|
|
232
|
+
- `injectAntigravityThoughtSignature()`
|
|
233
|
+
- signature cache:
|
|
234
|
+
- `sharedmodule/llmswitch-core/src/conversion/compat/antigravity-session-signature.ts`
|
|
235
|
+
|
|
236
|
+
> 重要:signature 只在 antigravity + gemini-chat 的 compat 中注入,不向其它 provider 扩散。
|
|
237
|
+
|
|
238
|
+
### 5.4 为什么一定要用 `chat:gemini-cli`(而不是 `chat:gemini`)
|
|
239
|
+
本次排障中我们确认过一个“高频误配”:
|
|
240
|
+
- **`chat:gemini`**:面向 Generative Language API 的常规 Gemini 形状(不会跑 Cloud Code Assist wrapper),因此不会执行 `gemini_cli_request_wrap`,也不会把缓存的 `thoughtSignature` 回填进历史 `functionCall`。
|
|
241
|
+
- **`chat:gemini-cli`**:面向 Cloud Code Assist / Antigravity 的 wrapper 形状(会把 root 字段收敛到 `request` 节点,并对工具 schema 与历史签名做对齐)。
|
|
242
|
+
|
|
243
|
+
当 profile 配错时,典型症状是:
|
|
244
|
+
- 第一跳(无工具历史)可能 OK
|
|
245
|
+
- 第二跳(带 `functionCall` 历史但缺 `thoughtSignature`)开始出现 429 / 被策略性拒绝放大
|
|
246
|
+
|
|
247
|
+
所以,Antigravity provider 的 `compatibilityProfile` 必须显式设置为:
|
|
248
|
+
|
|
249
|
+
```jsonc
|
|
250
|
+
{
|
|
251
|
+
"virtualrouter": {
|
|
252
|
+
"providers": {
|
|
253
|
+
"antigravity": {
|
|
254
|
+
"compatibilityProfile": "chat:gemini-cli"
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 6) Signature cache(llmswitch-core):算法与 TTL
|
|
264
|
+
|
|
265
|
+
实现位置:`sharedmodule/llmswitch-core/src/conversion/compat/antigravity-session-signature.ts`
|
|
266
|
+
|
|
267
|
+
行为要点:
|
|
268
|
+
- sessionId 算法对齐 Antigravity-Manager:
|
|
269
|
+
- 优先取首个 user content 的文本 parts(>10 且不含 `<system-reminder>`)做 sha256
|
|
270
|
+
- 否则 fallback 为 JSON stringify 的 body(近似 `serde_json::Value::to_string()`)
|
|
271
|
+
- 输出 `sid-<hash前16位>`
|
|
272
|
+
- cache:
|
|
273
|
+
- TTL:2 小时
|
|
274
|
+
- 最小 signature 长度:50
|
|
275
|
+
- cache 上限:1000(超限会清理过期与最老条目)
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 7) Gemini vs Claude(经 Antigravity / `gemini-chat`)差异点
|
|
280
|
+
|
|
281
|
+
我们在 Antigravity 下同时跑过 “Gemini 系列模型” 与 “Claude 系列模型”(注意:两者都可能通过 `providerProtocol=gemini-chat` 走 Cloud Code Assist)。差异点主要体现在:
|
|
282
|
+
|
|
283
|
+
1. **工具历史敏感度**
|
|
284
|
+
长上下文 + 多工具历史时,上游对 `functionCall` part 的形状要求更严格。缺失/占位的 `thoughtSignature` 往往会放大拒绝/限流概率(尤其是连续多次请求)。
|
|
285
|
+
2. **requestType / wrapper 字段**
|
|
286
|
+
RouteCodex 在 Antigravity wrapper 中仅使用 `agent` / `image_gen` 两类 `requestType`。Hub/compat 会移除与 Cloud Code Assist schema 无关字段,避免 wrapper 漂移导致错误。
|
|
287
|
+
3. **SSE**
|
|
288
|
+
Antigravity runtime 强制 SSE,以降低不同模型/端点在非流式策略上的不稳定差异。
|
|
289
|
+
|
|
290
|
+
结论:**Gemini/Claude 的差异不应该靠 Provider 分支硬编码**;把“对齐/清洗/注入”的差异限定在 `compat`,才能保持 hub 架构一致性。
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 8) 可观测性与排障入口
|
|
295
|
+
|
|
296
|
+
- 启动 warmup 日志:`[antigravity:warmup] ...`
|
|
297
|
+
- quota admin API/UI:`/quota/providers` 会附带 antigravity alias 的 `fpSuffix/fpOs/fpArch/...`
|
|
298
|
+
- codex-samples 快照:可用于对比某次请求的 provider-request/provider-response 以及各 pipeline stage
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 9) 经验总结(403 / 429 的高概率根因与处理顺序)
|
|
303
|
+
|
|
304
|
+
1. 先处理 **403(verify your account / reauth)**:基本都是“UA suffix 与 OAuth 指纹不一致”或“linux 指纹”导致。
|
|
305
|
+
触发 403 后继续重试通常只会更糟;应先 `repair` 指纹并完成 OAuth reauth。
|
|
306
|
+
2. 再看 **429(RESOURCE_EXHAUSTED)**:它可能是真实配额/容量,但在 Antigravity/Gemini 路径上,**signature/工具历史形状不一致会显著放大 429**。
|
|
307
|
+
排查优先级通常是:`thoughtSignature` 注入是否生效 → 工具 schema 是否被 compat 规范化 → header 最小化是否生效(少带 google client 标识)。
|
|
308
|
+
3. 多账号/多 alias 强烈建议启用 warmup:让“会触发 reauth/指纹不一致”的 alias 在启动阶段就被隔离,不要进入运行期 pool。
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## 10) 变更范围边界(必须遵守)
|
|
313
|
+
|
|
314
|
+
- Provider 不负责:
|
|
315
|
+
- 工具调用修复(tool args/schema 纠正)
|
|
316
|
+
- 路由/策略选择(例如多 key pool、fallback 决策)
|
|
317
|
+
- 以上全部由 llmswitch-core Hub Pipeline / compat 承担。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsonstudio/rcc",
|
|
3
|
-
"version": "0.89.
|
|
3
|
+
"version": "0.89.1552",
|
|
4
4
|
"description": "Multi-provider OpenAI proxy server with anthropic/responses/chat support (release)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
},
|
|
148
148
|
"dependencies": {
|
|
149
149
|
"@anthropic-ai/sdk": "^0.65.0",
|
|
150
|
-
"@jsonstudio/llms": "0.6.
|
|
150
|
+
"@jsonstudio/llms": "0.6.1435",
|
|
151
151
|
"@lmstudio/sdk": "^1.5.0",
|
|
152
152
|
"@radix-ui/react-switch": "^1.2.6",
|
|
153
153
|
"@types/socket.io": "^3.0.1",
|
|
@@ -117,6 +117,55 @@ function checkUntrackedNotIgnored() {
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
function checkTrackedSecrets() {
|
|
121
|
+
// Lightweight secret scanner: prevent accidental commits of raw tokens/keys.
|
|
122
|
+
// Keep patterns tight to avoid false positives.
|
|
123
|
+
const patterns = [
|
|
124
|
+
// OpenAI-style API keys.
|
|
125
|
+
{ label: 'openai_sk', mode: 'E', pattern: String.raw`sk-[A-Za-z0-9]{20,}` },
|
|
126
|
+
// Google API keys.
|
|
127
|
+
{ label: 'google_api_key', mode: 'E', pattern: String.raw`AIza[0-9A-Za-z\-_]{20,}` },
|
|
128
|
+
// GitHub classic personal access tokens.
|
|
129
|
+
{ label: 'github_pat', mode: 'E', pattern: String.raw`ghp_[A-Za-z0-9]{30,}` },
|
|
130
|
+
// PEM private keys (fixed strings to avoid regex engine differences).
|
|
131
|
+
{ label: 'private_key', mode: 'F', pattern: '-----BEGIN PRIVATE KEY-----' },
|
|
132
|
+
{ label: 'rsa_private_key', mode: 'F', pattern: '-----BEGIN RSA PRIVATE KEY-----' },
|
|
133
|
+
{ label: 'ec_private_key', mode: 'F', pattern: '-----BEGIN EC PRIVATE KEY-----' }
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
const hits = [];
|
|
137
|
+
for (const entry of patterns) {
|
|
138
|
+
const out = spawnSync(
|
|
139
|
+
'git',
|
|
140
|
+
entry.mode === 'F'
|
|
141
|
+
? ['grep', '-nF', '-e', entry.pattern, '--', '.', ':(exclude)scripts/ci/repo-sanity.mjs']
|
|
142
|
+
: ['grep', '-nE', '-e', entry.pattern, '--', '.', ':(exclude)scripts/ci/repo-sanity.mjs'],
|
|
143
|
+
{ encoding: 'utf8' }
|
|
144
|
+
);
|
|
145
|
+
// git grep exits with 1 when no matches; 0 when matches; >1 for errors.
|
|
146
|
+
if (out.status === 0) {
|
|
147
|
+
const lines = String(out.stdout || '')
|
|
148
|
+
.split('\n')
|
|
149
|
+
.map((s) => s.trim())
|
|
150
|
+
.filter(Boolean);
|
|
151
|
+
for (const line of lines) {
|
|
152
|
+
hits.push(`[${entry.label}] ${line}`);
|
|
153
|
+
}
|
|
154
|
+
} else if ((out.status ?? 0) > 1) {
|
|
155
|
+
throw new Error(`git grep failed for ${entry.label}: ${out.stderr || out.stdout}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (hits.length) {
|
|
160
|
+
console.error('[repo-sanity] potential secrets detected in tracked files:');
|
|
161
|
+
for (const line of hits.slice(0, 200)) {
|
|
162
|
+
console.error(`- ${line}`);
|
|
163
|
+
}
|
|
164
|
+
if (hits.length > 200) console.error(`- ... (${hits.length - 200} more)`);
|
|
165
|
+
process.exit(2);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
120
169
|
const files = runGit(['ls-files']).split('\n').map((s) => s.trim()).filter(Boolean);
|
|
121
170
|
const forbidden = [];
|
|
122
171
|
for (const p of files) {
|
|
@@ -134,5 +183,6 @@ if (forbidden.length) {
|
|
|
134
183
|
|
|
135
184
|
checkRootLayout();
|
|
136
185
|
checkUntrackedNotIgnored();
|
|
186
|
+
checkTrackedSecrets();
|
|
137
187
|
|
|
138
188
|
console.log('[repo-sanity] ok');
|