instar 1.3.214 → 1.3.215
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/commands/route.d.ts.map +1 -1
- package/dist/commands/route.js +1 -0
- package/dist/commands/route.js.map +1 -1
- package/dist/core/GeminiCliIntelligenceProvider.d.ts +3 -0
- package/dist/core/GeminiCliIntelligenceProvider.d.ts.map +1 -1
- package/dist/core/GeminiCliIntelligenceProvider.js +51 -21
- package/dist/core/GeminiCliIntelligenceProvider.js.map +1 -1
- package/dist/core/frameworkSessionLaunch.d.ts.map +1 -1
- package/dist/core/frameworkSessionLaunch.js +2 -1
- package/dist/core/frameworkSessionLaunch.js.map +1 -1
- package/dist/providers/adapters/gemini-cli/config.d.ts +3 -0
- package/dist/providers/adapters/gemini-cli/config.d.ts.map +1 -1
- package/dist/providers/adapters/gemini-cli/config.js.map +1 -1
- package/dist/providers/adapters/gemini-cli/errors.d.ts.map +1 -1
- package/dist/providers/adapters/gemini-cli/errors.js +4 -2
- package/dist/providers/adapters/gemini-cli/errors.js.map +1 -1
- package/dist/providers/adapters/gemini-cli/models.d.ts +7 -4
- package/dist/providers/adapters/gemini-cli/models.d.ts.map +1 -1
- package/dist/providers/adapters/gemini-cli/models.js +10 -3
- package/dist/providers/adapters/gemini-cli/models.js.map +1 -1
- package/dist/providers/adapters/gemini-cli/observability/geminiCapacityPolicy.d.ts +54 -0
- package/dist/providers/adapters/gemini-cli/observability/geminiCapacityPolicy.d.ts.map +1 -0
- package/dist/providers/adapters/gemini-cli/observability/geminiCapacityPolicy.js +111 -0
- package/dist/providers/adapters/gemini-cli/observability/geminiCapacityPolicy.js.map +1 -0
- package/dist/providers/adapters/gemini-cli/transport/oneShotCompletion.d.ts.map +1 -1
- package/dist/providers/adapters/gemini-cli/transport/oneShotCompletion.js +55 -23
- package/dist/providers/adapters/gemini-cli/transport/oneShotCompletion.js.map +1 -1
- package/dist/server/routes.js +1 -1
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +46 -46
- package/upgrades/1.3.215.md +41 -0
- package/upgrades/gemini-capacity-policy.eli16.md +21 -0
- package/upgrades/side-effects/gemini-capacity-policy.md +139 -0
|
@@ -16,10 +16,12 @@
|
|
|
16
16
|
* unbounded Buffer.concat.
|
|
17
17
|
*/
|
|
18
18
|
import { CapabilityFlag } from '../../../capabilities.js';
|
|
19
|
-
import { AbortError } from '../../../errors.js';
|
|
19
|
+
import { AbortError, QuotaError } from '../../../errors.js';
|
|
20
20
|
import { GEMINI_CLI_ID, mapExecError } from '../errors.js';
|
|
21
21
|
import { resolveCliModelFlag } from '../models.js';
|
|
22
|
+
import { decideGeminiCapacityPolicy, getGeminiCapacityGate, recordGeminiCapacityDeferral, } from '../observability/geminiCapacityPolicy.js';
|
|
22
23
|
import { buildGeminiChildEnv, buildGeminiOneShotArgv, spawnGeminiAndWait, } from './geminiSpawn.js';
|
|
24
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
23
25
|
class GeminiCliOneShotCompletion {
|
|
24
26
|
config;
|
|
25
27
|
capability = CapabilityFlag.OneShotCompletion;
|
|
@@ -29,42 +31,72 @@ class GeminiCliOneShotCompletion {
|
|
|
29
31
|
async evaluate(prompt, options) {
|
|
30
32
|
const timeoutMs = options?.timeoutMs ?? this.config.defaultOneShotTimeoutMs ?? 60_000;
|
|
31
33
|
const model = resolveCliModelFlag(options?.model ?? this.config.defaultModel);
|
|
34
|
+
let currentModel = model;
|
|
35
|
+
const gate = getGeminiCapacityGate();
|
|
36
|
+
if (!gate.allow) {
|
|
37
|
+
throw new QuotaError(`Gemini capacity deferred until ${new Date(gate.deferredUntil ?? Date.now()).toISOString()}` +
|
|
38
|
+
(gate.reason ? `: ${gate.reason}` : ''), GEMINI_CLI_ID, { retryAfterMs: gate.retryAfterMs, limitKind: 'unknown' });
|
|
39
|
+
}
|
|
32
40
|
// System prompt is prepended to the user prompt (Gemini's one-shot `-p`
|
|
33
41
|
// takes a single string; there's no separate system flag on this path).
|
|
34
42
|
const effectivePrompt = options?.system
|
|
35
43
|
? `${options.system}\n\n${prompt}`
|
|
36
44
|
: prompt;
|
|
37
|
-
// CANONICAL argv — the only form this primitive ever emits.
|
|
38
|
-
// --approval-mode default is pinned here; the prompt is exactly one slot.
|
|
39
|
-
const args = buildGeminiOneShotArgv(model, effectivePrompt);
|
|
40
45
|
const childEnv = buildGeminiChildEnv();
|
|
41
46
|
const abortSignal = options?.signal;
|
|
42
47
|
if (abortSignal?.aborted) {
|
|
43
48
|
throw new AbortError('Aborted before start', GEMINI_CLI_ID);
|
|
44
49
|
}
|
|
45
50
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
:
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
let attempt = 0;
|
|
52
|
+
// eslint-disable-next-line no-constant-condition
|
|
53
|
+
while (true) {
|
|
54
|
+
const args = buildGeminiOneShotArgv(currentModel, effectivePrompt);
|
|
55
|
+
const result = await spawnGeminiAndWait(this.config.geminiPath, args, {
|
|
56
|
+
timeoutMs,
|
|
57
|
+
env: childEnv,
|
|
58
|
+
...(abortSignal ? { signal: abortSignal } : {}),
|
|
59
|
+
...(this.config.maxOutputBytes !== undefined
|
|
60
|
+
? { maxOutputBytes: this.config.maxOutputBytes }
|
|
61
|
+
: {}),
|
|
62
|
+
});
|
|
63
|
+
if (result.exitCode !== 0) {
|
|
64
|
+
// Benign `Loaded cached credentials` stderr line is NOT a failure when
|
|
65
|
+
// exit is 0; here exit is non-zero so surface the stderr.
|
|
66
|
+
const mapped = mapExecError(new Error(`Gemini exited ${result.exitCode}`), result.stderr);
|
|
67
|
+
const capacity = decideGeminiCapacityPolicy({
|
|
68
|
+
errorMessage: `${mapped.message}\n${result.stderr}`,
|
|
69
|
+
attempt,
|
|
70
|
+
model: currentModel,
|
|
71
|
+
config: this.config.capacityPolicy,
|
|
72
|
+
});
|
|
73
|
+
if (capacity.action === 'retry' && capacity.retryAfterMs !== undefined) {
|
|
74
|
+
currentModel = capacity.model;
|
|
75
|
+
attempt += 1;
|
|
76
|
+
await sleep(capacity.retryAfterMs);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (capacity.action === 'defer' && capacity.retryAfterMs !== undefined) {
|
|
80
|
+
recordGeminiCapacityDeferral({
|
|
81
|
+
retryAfterMs: capacity.retryAfterMs,
|
|
82
|
+
reason: capacity.reason ?? mapped.message,
|
|
83
|
+
});
|
|
84
|
+
throw new QuotaError(`${capacity.reason}: ${mapped.message}`, GEMINI_CLI_ID, { retryAfterMs: capacity.retryAfterMs, limitKind: 'unknown', cause: mapped });
|
|
85
|
+
}
|
|
86
|
+
throw mapped;
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
text: result.stdout.trim(),
|
|
90
|
+
usage: null,
|
|
91
|
+
providerSpecific: {
|
|
92
|
+
[GEMINI_CLI_ID]: { model, approvalMode: 'default', truncated: result.truncated },
|
|
93
|
+
},
|
|
94
|
+
};
|
|
58
95
|
}
|
|
59
|
-
return {
|
|
60
|
-
text: result.stdout.trim(),
|
|
61
|
-
usage: null,
|
|
62
|
-
providerSpecific: {
|
|
63
|
-
[GEMINI_CLI_ID]: { model, approvalMode: 'default', truncated: result.truncated },
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
96
|
}
|
|
67
97
|
catch (err) {
|
|
98
|
+
if (err instanceof QuotaError)
|
|
99
|
+
throw err;
|
|
68
100
|
const error = err;
|
|
69
101
|
if (error.name === 'AbortError' || abortSignal?.aborted) {
|
|
70
102
|
throw new AbortError('Aborted during execution', GEMINI_CLI_ID, err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oneShotCompletion.js","sourceRoot":"","sources":["../../../../../src/providers/adapters/gemini-cli/transport/oneShotCompletion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"oneShotCompletion.js","sourceRoot":"","sources":["../../../../../src/providers/adapters/gemini-cli/transport/oneShotCompletion.ts"],"names":[],"mappings":"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"}
|
package/dist/server/routes.js
CHANGED
|
@@ -15424,7 +15424,7 @@ export function createRoutes(ctx) {
|
|
|
15424
15424
|
const KNOWN_FRAMEWORKS = ['claude-code', 'codex-cli', 'gemini-cli'];
|
|
15425
15425
|
const KNOWN_MODELS = [
|
|
15426
15426
|
'opus-4.7', 'sonnet-4.6', 'haiku-4.5',
|
|
15427
|
-
'gpt-5.3-codex', 'gemini-2.5-pro', 'deepseek-v4',
|
|
15427
|
+
'gpt-5.3-codex', 'gemini-2.5-flash', 'gemini-2.5-pro', 'deepseek-v4',
|
|
15428
15428
|
];
|
|
15429
15429
|
const classifier = new TaskClassifier({ intelligence: stubIntelligence });
|
|
15430
15430
|
const overrideDetector = new OverrideDetector({
|