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.
Files changed (34) hide show
  1. package/dist/commands/route.d.ts.map +1 -1
  2. package/dist/commands/route.js +1 -0
  3. package/dist/commands/route.js.map +1 -1
  4. package/dist/core/GeminiCliIntelligenceProvider.d.ts +3 -0
  5. package/dist/core/GeminiCliIntelligenceProvider.d.ts.map +1 -1
  6. package/dist/core/GeminiCliIntelligenceProvider.js +51 -21
  7. package/dist/core/GeminiCliIntelligenceProvider.js.map +1 -1
  8. package/dist/core/frameworkSessionLaunch.d.ts.map +1 -1
  9. package/dist/core/frameworkSessionLaunch.js +2 -1
  10. package/dist/core/frameworkSessionLaunch.js.map +1 -1
  11. package/dist/providers/adapters/gemini-cli/config.d.ts +3 -0
  12. package/dist/providers/adapters/gemini-cli/config.d.ts.map +1 -1
  13. package/dist/providers/adapters/gemini-cli/config.js.map +1 -1
  14. package/dist/providers/adapters/gemini-cli/errors.d.ts.map +1 -1
  15. package/dist/providers/adapters/gemini-cli/errors.js +4 -2
  16. package/dist/providers/adapters/gemini-cli/errors.js.map +1 -1
  17. package/dist/providers/adapters/gemini-cli/models.d.ts +7 -4
  18. package/dist/providers/adapters/gemini-cli/models.d.ts.map +1 -1
  19. package/dist/providers/adapters/gemini-cli/models.js +10 -3
  20. package/dist/providers/adapters/gemini-cli/models.js.map +1 -1
  21. package/dist/providers/adapters/gemini-cli/observability/geminiCapacityPolicy.d.ts +54 -0
  22. package/dist/providers/adapters/gemini-cli/observability/geminiCapacityPolicy.d.ts.map +1 -0
  23. package/dist/providers/adapters/gemini-cli/observability/geminiCapacityPolicy.js +111 -0
  24. package/dist/providers/adapters/gemini-cli/observability/geminiCapacityPolicy.js.map +1 -0
  25. package/dist/providers/adapters/gemini-cli/transport/oneShotCompletion.d.ts.map +1 -1
  26. package/dist/providers/adapters/gemini-cli/transport/oneShotCompletion.js +55 -23
  27. package/dist/providers/adapters/gemini-cli/transport/oneShotCompletion.js.map +1 -1
  28. package/dist/server/routes.js +1 -1
  29. package/dist/server/routes.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/data/builtin-manifest.json +46 -46
  32. package/upgrades/1.3.215.md +41 -0
  33. package/upgrades/gemini-capacity-policy.eli16.md +21 -0
  34. 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
- const result = await spawnGeminiAndWait(this.config.geminiPath, args, {
47
- timeoutMs,
48
- env: childEnv,
49
- ...(abortSignal ? { signal: abortSignal } : {}),
50
- ...(this.config.maxOutputBytes !== undefined
51
- ? { maxOutputBytes: this.config.maxOutputBytes }
52
- : {}),
53
- });
54
- if (result.exitCode !== 0) {
55
- // Benign `Loaded cached credentials` stderr line is NOT a failure when
56
- // exit is 0; here exit is non-zero so surface the stderr.
57
- throw mapExecError(new Error(`Gemini exited ${result.exitCode}`), result.stderr);
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":"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"}
1
+ {"version":3,"file":"oneShotCompletion.js","sourceRoot":"","sources":["../../../../../src/providers/adapters/gemini-cli/transport/oneShotCompletion.ts"],"names":[],"mappings":"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"}
@@ -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({