@anthonyhaussman/opencode-agy-auth 1.0.10 → 1.0.11-alpha.1

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/index.js CHANGED
@@ -212,6 +212,23 @@ async function retrieveUserQuota(accessToken, projectId, userAgentModel) {
212
212
  return null;
213
213
  }
214
214
  }
215
+ async function retrieveUserQuotaSummary(accessToken, projectId, userAgentModel) {
216
+ const url2 = `${AGY_CODE_ASSIST_ENDPOINT}/v1internal:retrieveUserQuotaSummary`;
217
+ const headers = buildCodeAssistHeaders(accessToken, userAgentModel);
218
+ try {
219
+ const response = await agyFetch(url2, {
220
+ method: "POST",
221
+ headers,
222
+ body: JSON.stringify({ project: projectId })
223
+ });
224
+ if (!response.ok) {
225
+ return null;
226
+ }
227
+ return await response.json();
228
+ } catch {
229
+ return null;
230
+ }
231
+ }
215
232
  function buildCodeAssistHeaders(accessToken, userAgentModel) {
216
233
  const userAgent = buildAgyCliUserAgent(userAgentModel);
217
234
  return {
@@ -14142,6 +14159,62 @@ async function fetchTokenRefresh(refreshToken) {
14142
14159
  return agyFetch(tokenUrl, init);
14143
14160
  }
14144
14161
 
14162
+ // src/plugin/quota-utils.ts
14163
+ function clamp(value, min, max) {
14164
+ if (value < min) {
14165
+ return min;
14166
+ }
14167
+ if (value > max) {
14168
+ return max;
14169
+ }
14170
+ return value;
14171
+ }
14172
+ function pad(value, width) {
14173
+ if (value.length >= width) {
14174
+ return value;
14175
+ }
14176
+ return value.padEnd(width, " ");
14177
+ }
14178
+ function buildProgressBar(fraction, width = 20) {
14179
+ const clamped = clamp(fraction, 0, 1);
14180
+ const filled = clamped >= 1 ? width : Math.max(0, Math.min(width, Math.max(clamped > 0 ? 1 : 0, Math.floor(clamped * width))));
14181
+ const empty = width - filled;
14182
+ return `${"\u2593".repeat(filled)}${"\u2591".repeat(empty)}`;
14183
+ }
14184
+ function formatRemainingAmount(value) {
14185
+ if (!value) {
14186
+ return void 0;
14187
+ }
14188
+ const parsed = Number.parseInt(value, 10);
14189
+ if (!Number.isFinite(parsed)) {
14190
+ return value;
14191
+ }
14192
+ return parsed.toLocaleString("en-US");
14193
+ }
14194
+ function formatRelativeResetTime(resetTime) {
14195
+ if (!resetTime) {
14196
+ return void 0;
14197
+ }
14198
+ const resetAt = new Date(resetTime).getTime();
14199
+ if (Number.isNaN(resetAt)) {
14200
+ return void 0;
14201
+ }
14202
+ const diffMs = resetAt - Date.now();
14203
+ if (diffMs <= 0) {
14204
+ return "reset pending";
14205
+ }
14206
+ const totalMinutes = Math.ceil(diffMs / (1e3 * 60));
14207
+ const hours = Math.floor(totalMinutes / 60);
14208
+ const minutes = totalMinutes % 60;
14209
+ if (hours > 0 && minutes > 0) {
14210
+ return `resets in ${hours}h ${minutes}m`;
14211
+ }
14212
+ if (hours > 0) {
14213
+ return `resets in ${hours}h`;
14214
+ }
14215
+ return `resets in ${minutes}m`;
14216
+ }
14217
+
14145
14218
  // src/plugin/quota.ts
14146
14219
  var AGY_QUOTA_TOOL_NAME = "agy_quota";
14147
14220
  function createAgyQuotaTool({
@@ -14269,60 +14342,6 @@ function formatUsageRemaining(bucket) {
14269
14342
  }
14270
14343
  return "unknown";
14271
14344
  }
14272
- function formatRemainingAmount(value) {
14273
- if (!value) {
14274
- return void 0;
14275
- }
14276
- const parsed = Number.parseInt(value, 10);
14277
- if (!Number.isFinite(parsed)) {
14278
- return value;
14279
- }
14280
- return parsed.toLocaleString("en-US");
14281
- }
14282
- function formatRelativeResetTime(resetTime) {
14283
- if (!resetTime) {
14284
- return void 0;
14285
- }
14286
- const resetAt = new Date(resetTime).getTime();
14287
- if (Number.isNaN(resetAt)) {
14288
- return void 0;
14289
- }
14290
- const diffMs = resetAt - Date.now();
14291
- if (diffMs <= 0) {
14292
- return "reset pending";
14293
- }
14294
- const totalMinutes = Math.ceil(diffMs / (1e3 * 60));
14295
- const hours = Math.floor(totalMinutes / 60);
14296
- const minutes = totalMinutes % 60;
14297
- if (hours > 0 && minutes > 0) {
14298
- return `resets in ${hours}h ${minutes}m`;
14299
- }
14300
- if (hours > 0) {
14301
- return `resets in ${hours}h`;
14302
- }
14303
- return `resets in ${minutes}m`;
14304
- }
14305
- function buildProgressBar(fraction, width = 20) {
14306
- const clamped = clamp(fraction, 0, 1);
14307
- const filled = clamped >= 1 ? width : Math.max(0, Math.min(width, Math.max(clamped > 0 ? 1 : 0, Math.floor(clamped * width))));
14308
- const empty = width - filled;
14309
- return `${"\u2593".repeat(filled)}${"\u2591".repeat(empty)}`;
14310
- }
14311
- function pad(value, width) {
14312
- if (value.length >= width) {
14313
- return value;
14314
- }
14315
- return value.padEnd(width, " ");
14316
- }
14317
- function clamp(value, min, max) {
14318
- if (value < min) {
14319
- return min;
14320
- }
14321
- if (value > max) {
14322
- return max;
14323
- }
14324
- return value;
14325
- }
14326
14345
  function normalizeTokenType(bucket) {
14327
14346
  const value = bucket.tokenType?.trim();
14328
14347
  return value ? value.toUpperCase() : "REQUESTS";
@@ -14435,6 +14454,205 @@ function splitModelVariant(modelId) {
14435
14454
  };
14436
14455
  }
14437
14456
 
14457
+ // src/plugin/quota-summary.ts
14458
+ var AGY_QUOTA_SUMMARY_TOOL_NAME = "agy_quota_summary";
14459
+ function createAgyQuotaSummaryTool({
14460
+ client,
14461
+ getAuthResolver,
14462
+ getConfiguredProjectId,
14463
+ getUserAgentModel
14464
+ }) {
14465
+ return tool({
14466
+ description: "Retrieve Agy Code Assist quota summary with weekly and 5-hour limits grouped by model family.",
14467
+ args: {},
14468
+ async execute() {
14469
+ const getAuth = getAuthResolver();
14470
+ if (!getAuth) {
14471
+ return "Agy quota summary is unavailable before Google auth is initialized. Authenticate with the Google provider and retry.";
14472
+ }
14473
+ const auth = await getAuth();
14474
+ if (!isOAuthAuth(auth)) {
14475
+ return "Agy quota summary requires OAuth with Google. Run `opencode auth login` and choose `Google OAuth (Antigravity CLI)` or `Google OAuth (Gemini CLI)`.";
14476
+ }
14477
+ let authRecord = resolveCachedAuth(auth);
14478
+ if (accessTokenExpired(authRecord)) {
14479
+ const refreshed = await refreshAccessToken(authRecord, client);
14480
+ if (!refreshed?.access) {
14481
+ return "Agy quota summary lookup failed because the access token could not be refreshed. Re-authenticate and retry.";
14482
+ }
14483
+ authRecord = refreshed;
14484
+ }
14485
+ if (!authRecord.access) {
14486
+ return "Agy quota summary lookup failed because no access token is available. Re-authenticate and retry.";
14487
+ }
14488
+ try {
14489
+ const projectContext = await ensureProjectContext(
14490
+ authRecord,
14491
+ client,
14492
+ getConfiguredProjectId(),
14493
+ getUserAgentModel()
14494
+ );
14495
+ if (!projectContext.effectiveProjectId) {
14496
+ return "Agy quota summary lookup failed because no Google Cloud project could be resolved.";
14497
+ }
14498
+ const summary = await retrieveUserQuotaSummary(
14499
+ authRecord.access,
14500
+ projectContext.effectiveProjectId,
14501
+ getUserAgentModel()
14502
+ );
14503
+ if (!summary) {
14504
+ return `No Agy quota summary available for project \`${projectContext.effectiveProjectId}\`.`;
14505
+ }
14506
+ return formatAgyQuotaSummaryOutput(
14507
+ projectContext.effectiveProjectId,
14508
+ summary
14509
+ );
14510
+ } catch (error45) {
14511
+ const message = error45 instanceof Error ? error45.message : "unknown error";
14512
+ return `Agy quota summary lookup failed: ${message}`;
14513
+ }
14514
+ }
14515
+ });
14516
+ }
14517
+ var BAR_WIDTH = 50;
14518
+ function windowLabel(window) {
14519
+ switch (window?.toUpperCase()) {
14520
+ case "WEEKLY":
14521
+ return "Weekly Limit";
14522
+ case "FIVE_HOUR":
14523
+ return "Five Hour Limit";
14524
+ default:
14525
+ return "Other Limit";
14526
+ }
14527
+ }
14528
+ function formatSummaryBucket(bucket, indent) {
14529
+ if (bucket.disabled) {
14530
+ const desc = bucket.description?.trim() || "weekly limit exhausted";
14531
+ return [`${indent}Disabled: ${desc}`];
14532
+ }
14533
+ const lines = [];
14534
+ const fraction = bucket.remainingFraction;
14535
+ const hasFraction = typeof fraction === "number" && Number.isFinite(fraction);
14536
+ if (hasFraction) {
14537
+ const clamped = clamp(fraction, 0, 1);
14538
+ const percent = (clamped * 100).toFixed(2);
14539
+ const bar = buildProgressBar(clamped, BAR_WIDTH);
14540
+ lines.push(`${indent}[${bar}] ${percent}%`);
14541
+ const remaining = formatRemainingAmount(bucket.remainingAmount);
14542
+ if (remaining) {
14543
+ const pctWhole = (clamped * 100).toFixed(0);
14544
+ lines.push(`${indent}${pctWhole}% remaining \xB7 ${remaining} left`);
14545
+ } else {
14546
+ const pctWhole = (clamped * 100).toFixed(0);
14547
+ lines.push(`${indent}${pctWhole}% remaining`);
14548
+ }
14549
+ } else {
14550
+ const remaining = formatRemainingAmount(bucket.remainingAmount);
14551
+ lines.push(remaining ? `${indent}${remaining} remaining` : `${indent}unknown remaining`);
14552
+ }
14553
+ const resetLabel = formatRelativeResetTime(bucket.resetTime);
14554
+ if (resetLabel) {
14555
+ lines.push(`${indent}${resetLabel.replace("resets in ", "Refreshes in ")}`);
14556
+ }
14557
+ return lines;
14558
+ }
14559
+ function groupBucketsByWindow(buckets) {
14560
+ const groups = /* @__PURE__ */ new Map();
14561
+ const order = ["WEEKLY", "FIVE_HOUR"];
14562
+ for (const bucket of buckets) {
14563
+ const key = bucket.window?.toUpperCase() || "UNKNOWN";
14564
+ const existing = groups.get(key);
14565
+ if (existing) {
14566
+ existing.push(bucket);
14567
+ } else {
14568
+ groups.set(key, [bucket]);
14569
+ }
14570
+ }
14571
+ const sorted = /* @__PURE__ */ new Map();
14572
+ for (const key of order) {
14573
+ const group = groups.get(key);
14574
+ if (group) {
14575
+ sorted.set(key, group);
14576
+ }
14577
+ }
14578
+ for (const [key, group] of groups) {
14579
+ if (!sorted.has(key)) {
14580
+ sorted.set(key, group);
14581
+ }
14582
+ }
14583
+ return sorted;
14584
+ }
14585
+ function formatSummaryGroup(group) {
14586
+ const lines = [];
14587
+ const name = group.displayName?.trim();
14588
+ if (name) {
14589
+ lines.push(name);
14590
+ }
14591
+ const desc = group.description?.trim();
14592
+ if (desc) {
14593
+ lines.push(` Models within this group: ${desc}`);
14594
+ }
14595
+ const buckets = group.buckets;
14596
+ if (buckets?.length) {
14597
+ const windowGroups = groupBucketsByWindow(buckets);
14598
+ let firstWindow = true;
14599
+ for (const [, windowBuckets] of windowGroups) {
14600
+ if (!firstWindow) {
14601
+ lines.push("");
14602
+ }
14603
+ for (const bucket of windowBuckets) {
14604
+ const label = windowLabel(bucket.window);
14605
+ lines.push(` ${label}`);
14606
+ lines.push(...formatSummaryBucket(bucket, " "));
14607
+ firstWindow = false;
14608
+ }
14609
+ }
14610
+ }
14611
+ return lines;
14612
+ }
14613
+ function formatTopLevelBuckets(buckets) {
14614
+ const lines = [];
14615
+ const windowGroups = groupBucketsByWindow(buckets);
14616
+ let firstWindow = true;
14617
+ for (const [, windowBuckets] of windowGroups) {
14618
+ if (!firstWindow) {
14619
+ lines.push("");
14620
+ }
14621
+ for (const bucket of windowBuckets) {
14622
+ const label = windowLabel(bucket.window);
14623
+ lines.push(label);
14624
+ lines.push(...formatSummaryBucket(bucket, " "));
14625
+ firstWindow = false;
14626
+ }
14627
+ }
14628
+ return lines;
14629
+ }
14630
+ function formatAgyQuotaSummaryOutput(projectId, summary) {
14631
+ const lines = [
14632
+ `Agy quota summary for project \`${projectId}\``,
14633
+ ""
14634
+ ];
14635
+ const groups = summary.groups;
14636
+ if (groups?.length) {
14637
+ for (let i = 0; i < groups.length; i++) {
14638
+ const group = groups[i];
14639
+ if (!group) {
14640
+ continue;
14641
+ }
14642
+ if (i > 0) {
14643
+ lines.push("");
14644
+ lines.push("");
14645
+ }
14646
+ lines.push(...formatSummaryGroup(group));
14647
+ }
14648
+ } else if (summary.buckets?.length) {
14649
+ lines.push(...formatTopLevelBuckets(summary.buckets));
14650
+ } else {
14651
+ lines.push("No quota information available.");
14652
+ }
14653
+ return lines.join("\n");
14654
+ }
14655
+
14438
14656
  // src/plugin/notify.ts
14439
14657
  var MODEL_CAPACITY_TOAST_COOLDOWN_MS = 3e4;
14440
14658
  var modelCapacityToastCooldownByKey = /* @__PURE__ */ new Map();
@@ -14660,6 +14878,904 @@ function buildTrajectoryAnalyticsBody(cascadeId = randomUUID(), platform2 = "DAR
14660
14878
  // src/sdk/request/prepare.ts
14661
14879
  import { randomUUID as randomUUID3 } from "crypto";
14662
14880
 
14881
+ // models.json
14882
+ var models_default = {
14883
+ models: {
14884
+ tab_jump_flash_lite_preview: {
14885
+ maxTokens: 16384,
14886
+ maxOutputTokens: 4096,
14887
+ tokenizerType: "LLAMA_WITH_SPECIAL",
14888
+ quotaInfo: {
14889
+ remainingFraction: 1
14890
+ },
14891
+ model: "MODEL_PLACEHOLDER_M28",
14892
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
14893
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
14894
+ supportsCumulativeContext: true,
14895
+ tabJumpPrintLineRange: true,
14896
+ supportsEstimateTokenCounter: true,
14897
+ addCursorToFindReplaceTarget: true,
14898
+ toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
14899
+ requiresLeadInGeneration: true,
14900
+ requiresNoXmlToolExamples: true
14901
+ },
14902
+ "gemini-3.1-pro-high": {
14903
+ displayName: "Gemini 3.1 Pro (High)",
14904
+ supportsImages: true,
14905
+ supportsThinking: true,
14906
+ thinkingBudget: 10001,
14907
+ minThinkingBudget: 128,
14908
+ recommended: true,
14909
+ maxTokens: 1048576,
14910
+ maxOutputTokens: 65535,
14911
+ tokenizerType: "LLAMA_WITH_SPECIAL",
14912
+ quotaInfo: {
14913
+ remainingFraction: 1,
14914
+ resetTime: "2026-05-29T18:30:05Z"
14915
+ },
14916
+ model: "MODEL_PLACEHOLDER_M37",
14917
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
14918
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
14919
+ supportsVideo: true,
14920
+ tagTitle: "New",
14921
+ supportedMimeTypes: {
14922
+ "audio/webm;codecs=opus": true,
14923
+ "application/x-python-code": true,
14924
+ "text/xml": true,
14925
+ "text/x-python": true,
14926
+ "text/html": true,
14927
+ "application/x-ipynb+json": true,
14928
+ "video/text/timestamp": true,
14929
+ "text/markdown": true,
14930
+ "text/x-python-script": true,
14931
+ "video/jpeg2000": true,
14932
+ "image/jpeg": true,
14933
+ "image/png": true,
14934
+ "image/heic": true,
14935
+ "text/plain": true,
14936
+ "application/x-javascript": true,
14937
+ "application/json": true,
14938
+ "application/pdf": true,
14939
+ "text/javascript": true,
14940
+ "image/webp": true,
14941
+ "application/x-typescript": true,
14942
+ "text/x-typescript": true,
14943
+ "text/rtf": true,
14944
+ "video/webm": true,
14945
+ "video/audio/wav": true,
14946
+ "video/audio/s16le": true,
14947
+ "text/csv": true,
14948
+ "video/mp4": true,
14949
+ "video/videoframe/jpeg2000": true,
14950
+ "image/heif": true,
14951
+ "text/css": true,
14952
+ "application/rtf": true
14953
+ },
14954
+ modelExperiments: {
14955
+ experiments: {
14956
+ "cascade-include-ephemeral-message": {
14957
+ stringValue: '{\n "enabled": true,\n "disabledHeuristics": ["running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
14958
+ },
14959
+ template__system_prompts__communication_style: {
14960
+ stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [filename](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n\nCRITICAL INSTRUCTION 1: You may have access to a variety of tools at your disposal. Some tools may be for a specific task such as 'view_file' (for viewing contents of a file). Others may be very broadly applicable such as the ability to run a command on a terminal. Always prioritize using the most specific tool you can for the task at hand. Here are some rules: (a) NEVER run cat inside a bash command to create a new file or append to an existing file. (b) ALWAYS use grep_search instead of running grep inside a bash command unless absolutely needed. (c) DO NOT use ls for listing, cat for viewing, grep for finding, sed for replacing.\nCRITICAL INSTRUCTION 2: Before making tool calls T, think and explicitly list out any related tools for the task at hand. You can only execute a set of tools T if all other tools in the list are either more generic or cannot be used for the task at hand. ALWAYS START your thought with recalling critical instructions 1 and 2. In particular, the format for the start of your thought block must be '...94>thought\\nCRITICAL INSTRUCTION 1: ...\\nCRITICAL INSTRUCTION 2: ...'."
14961
+ },
14962
+ template__system_prompts__identity: {
14963
+ stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
14964
+ },
14965
+ template__system_prompts__planning_more_artifacts: {
14966
+ stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
14967
+ },
14968
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
14969
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
14970
+ }
14971
+ }
14972
+ }
14973
+ },
14974
+ "gemini-2.5-flash": {
14975
+ displayName: "Gemini 3.1 Flash Lite",
14976
+ maxTokens: 1048576,
14977
+ maxOutputTokens: 65535,
14978
+ tokenizerType: "LLAMA_WITH_SPECIAL",
14979
+ quotaInfo: {
14980
+ remainingFraction: 1,
14981
+ resetTime: "2026-05-29T18:30:05Z"
14982
+ },
14983
+ model: "MODEL_GOOGLE_GEMINI_2_5_FLASH",
14984
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
14985
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
14986
+ modelExperiments: {
14987
+ experiments: {
14988
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
14989
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
14990
+ }
14991
+ }
14992
+ }
14993
+ },
14994
+ "claude-opus-4-6-thinking": {
14995
+ displayName: "Claude Opus 4.6 (Thinking)",
14996
+ supportsImages: true,
14997
+ supportsThinking: true,
14998
+ thinkingBudget: 1024,
14999
+ recommended: true,
15000
+ maxTokens: 25e4,
15001
+ maxOutputTokens: 64e3,
15002
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15003
+ quotaInfo: {
15004
+ remainingFraction: 0.6,
15005
+ resetTime: "2026-05-29T19:43:59Z"
15006
+ },
15007
+ model: "MODEL_PLACEHOLDER_M26",
15008
+ apiProvider: "API_PROVIDER_ANTHROPIC_VERTEX",
15009
+ modelProvider: "MODEL_PROVIDER_ANTHROPIC",
15010
+ supportedMimeTypes: {
15011
+ "image/webp": true,
15012
+ "video/jpeg2000": true,
15013
+ "video/videoframe/jpeg2000": true,
15014
+ "image/heic": true,
15015
+ "image/heif": true,
15016
+ "image/jpeg": true,
15017
+ "image/png": true
15018
+ },
15019
+ modelExperiments: {
15020
+ experiments: {
15021
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15022
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_UNSPECIFIED",\n "max_token_limit": "160000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15023
+ },
15024
+ template__system_prompts__planning_more_artifacts: {
15025
+ stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
15026
+ }
15027
+ }
15028
+ },
15029
+ vertexModelId: "claude-opus-4-6@default"
15030
+ },
15031
+ "gemini-2.5-flash-thinking": {
15032
+ displayName: "Gemini 3.1 Flash Lite",
15033
+ maxTokens: 1048576,
15034
+ maxOutputTokens: 65535,
15035
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15036
+ quotaInfo: {
15037
+ remainingFraction: 1,
15038
+ resetTime: "2026-05-29T18:30:05Z"
15039
+ },
15040
+ model: "MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING",
15041
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15042
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15043
+ modelExperiments: {
15044
+ experiments: {
15045
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15046
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15047
+ }
15048
+ }
15049
+ }
15050
+ },
15051
+ "gemini-2.5-pro": {
15052
+ displayName: "Gemini 2.5 Pro",
15053
+ supportsImages: true,
15054
+ supportsThinking: true,
15055
+ thinkingBudget: 1024,
15056
+ minThinkingBudget: 128,
15057
+ recommended: true,
15058
+ maxTokens: 1048576,
15059
+ maxOutputTokens: 65535,
15060
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15061
+ quotaInfo: {
15062
+ remainingFraction: 1,
15063
+ resetTime: "2026-05-29T18:30:05Z"
15064
+ },
15065
+ model: "MODEL_GOOGLE_GEMINI_2_5_PRO",
15066
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15067
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15068
+ supportedMimeTypes: {
15069
+ "video/audio/wav": true,
15070
+ "image/heic": true,
15071
+ "text/html": true,
15072
+ "application/x-python-code": true,
15073
+ "image/heif": true,
15074
+ "text/xml": true,
15075
+ "image/webp": true,
15076
+ "video/jpeg2000": true,
15077
+ "application/pdf": true,
15078
+ "text/csv": true,
15079
+ "image/jpeg": true,
15080
+ "text/markdown": true,
15081
+ "text/css": true,
15082
+ "audio/webm;codecs=opus": true,
15083
+ "application/json": true,
15084
+ "text/x-python-script": true,
15085
+ "video/audio/s16le": true,
15086
+ "text/javascript": true,
15087
+ "text/x-typescript": true,
15088
+ "text/plain": true,
15089
+ "application/x-typescript": true,
15090
+ "application/x-ipynb+json": true,
15091
+ "text/rtf": true,
15092
+ "video/text/timestamp": true,
15093
+ "video/webm": true,
15094
+ "text/x-python": true,
15095
+ "video/videoframe/jpeg2000": true,
15096
+ "application/x-javascript": true,
15097
+ "application/rtf": true,
15098
+ "video/mp4": true,
15099
+ "image/png": true
15100
+ },
15101
+ requiresImageOutputOutsideFunctionResponses: true,
15102
+ modelExperiments: {
15103
+ experiments: {
15104
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15105
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15106
+ }
15107
+ }
15108
+ }
15109
+ },
15110
+ "gemini-3.1-flash-image": {
15111
+ displayName: "Gemini 3.1 Flash Image",
15112
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15113
+ quotaInfo: {
15114
+ remainingFraction: 1,
15115
+ resetTime: "2026-05-29T18:30:05Z"
15116
+ },
15117
+ model: "MODEL_PLACEHOLDER_M21",
15118
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15119
+ modelProvider: "MODEL_PROVIDER_GOOGLE"
15120
+ },
15121
+ "gemini-pro-agent": {
15122
+ displayName: "Gemini 3.1 Pro (High)",
15123
+ supportsImages: true,
15124
+ supportsThinking: true,
15125
+ thinkingBudget: 10001,
15126
+ minThinkingBudget: 128,
15127
+ recommended: true,
15128
+ maxTokens: 1048576,
15129
+ maxOutputTokens: 65535,
15130
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15131
+ quotaInfo: {
15132
+ remainingFraction: 1,
15133
+ resetTime: "2026-05-29T18:30:05Z"
15134
+ },
15135
+ model: "MODEL_PLACEHOLDER_M16",
15136
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15137
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15138
+ supportsVideo: true,
15139
+ supportedMimeTypes: {
15140
+ "image/png": true,
15141
+ "image/heic": true,
15142
+ "text/plain": true,
15143
+ "video/mp4": true,
15144
+ "text/css": true,
15145
+ "text/rtf": true,
15146
+ "text/javascript": true,
15147
+ "audio/webm;codecs=opus": true,
15148
+ "application/x-typescript": true,
15149
+ "video/jpeg2000": true,
15150
+ "video/videoframe/jpeg2000": true,
15151
+ "application/rtf": true,
15152
+ "text/xml": true,
15153
+ "video/text/timestamp": true,
15154
+ "application/x-python-code": true,
15155
+ "text/markdown": true,
15156
+ "text/x-python": true,
15157
+ "image/webp": true,
15158
+ "application/x-javascript": true,
15159
+ "text/x-python-script": true,
15160
+ "application/json": true,
15161
+ "text/html": true,
15162
+ "video/webm": true,
15163
+ "video/audio/s16le": true,
15164
+ "application/x-ipynb+json": true,
15165
+ "image/jpeg": true,
15166
+ "text/x-typescript": true,
15167
+ "text/csv": true,
15168
+ "video/audio/wav": true,
15169
+ "image/heif": true,
15170
+ "application/pdf": true
15171
+ },
15172
+ modelExperiments: {
15173
+ experiments: {
15174
+ template__system_prompts__communication_style: {
15175
+ stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [filename](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n\nCRITICAL INSTRUCTION 1: You may have access to a variety of tools at your disposal. Some tools may be for a specific task such as 'view_file' (for viewing contents of a file). Others may be very broadly applicable such as the ability to run a command on a terminal. Always prioritize using the most specific tool you can for the task at hand. Here are some rules: (a) NEVER run cat inside a bash command to create a new file or append to an existing file. (b) ALWAYS use grep_search instead of running grep inside a bash command unless absolutely needed. (c) DO NOT use ls for listing, cat for viewing, grep for finding, sed for replacing.\nCRITICAL INSTRUCTION 2: Before making tool calls T, think and explicitly list out any related tools for the task at hand. You can only execute a set of tools T if all other tools in the list are either more generic or cannot be used for the task at hand. ALWAYS START your thought with recalling critical instructions 1 and 2. In particular, the format for the start of your thought block must be '...94>thought\\nCRITICAL INSTRUCTION 1: ...\\nCRITICAL INSTRUCTION 2: ...'."
15176
+ },
15177
+ template__system_prompts__identity: {
15178
+ stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
15179
+ },
15180
+ template__system_prompts__planning_more_artifacts: {
15181
+ stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
15182
+ },
15183
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15184
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15185
+ },
15186
+ "cascade-include-ephemeral-message": {
15187
+ stringValue: '{\n "enabled": true,\n "disabledHeuristics": ["running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
15188
+ }
15189
+ }
15190
+ }
15191
+ },
15192
+ "gemini-3.5-flash-extra-low": {
15193
+ displayName: "Gemini 3.5 Flash (Low)",
15194
+ supportsImages: true,
15195
+ supportsThinking: true,
15196
+ thinkingBudget: 1e3,
15197
+ minThinkingBudget: 32,
15198
+ recommended: true,
15199
+ maxTokens: 1048576,
15200
+ maxOutputTokens: 65536,
15201
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15202
+ quotaInfo: {
15203
+ remainingFraction: 1,
15204
+ resetTime: "2026-05-29T18:30:05Z"
15205
+ },
15206
+ model: "MODEL_PLACEHOLDER_M187",
15207
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15208
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15209
+ supportsVideo: true,
15210
+ tagTitle: "Fast",
15211
+ tagDescription: "Limited time",
15212
+ supportedMimeTypes: {
15213
+ "video/audio/s16le": true,
15214
+ "video/mp4": true,
15215
+ "image/heif": true,
15216
+ "application/x-typescript": true,
15217
+ "image/png": true,
15218
+ "video/jpeg2000": true,
15219
+ "text/csv": true,
15220
+ "text/x-python-script": true,
15221
+ "image/jpeg": true,
15222
+ "text/rtf": true,
15223
+ "text/x-python": true,
15224
+ "audio/webm;codecs=opus": true,
15225
+ "video/text/timestamp": true,
15226
+ "application/pdf": true,
15227
+ "image/webp": true,
15228
+ "application/x-javascript": true,
15229
+ "text/markdown": true,
15230
+ "application/x-ipynb+json": true,
15231
+ "video/audio/wav": true,
15232
+ "text/javascript": true,
15233
+ "application/rtf": true,
15234
+ "video/webm": true,
15235
+ "text/css": true,
15236
+ "text/html": true,
15237
+ "text/xml": true,
15238
+ "text/x-typescript": true,
15239
+ "application/x-python-code": true,
15240
+ "application/json": true,
15241
+ "image/heic": true,
15242
+ "text/plain": true,
15243
+ "video/videoframe/jpeg2000": true
15244
+ },
15245
+ modelExperiments: {
15246
+ experiments: {
15247
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15248
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "100000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": true,\n "max_user_requests": 10,\n "include_last_user_message": true,\n "include_conversation_log": false,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15249
+ },
15250
+ template__system_prompts__identity: {
15251
+ stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
15252
+ },
15253
+ template__system_prompts__planning_more_artifacts: {
15254
+ stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
15255
+ }
15256
+ }
15257
+ }
15258
+ },
15259
+ "gemini-3-flash-agent": {
15260
+ displayName: "Gemini 3.5 Flash (High)",
15261
+ supportsImages: true,
15262
+ supportsThinking: true,
15263
+ thinkingBudget: 1e4,
15264
+ minThinkingBudget: 32,
15265
+ recommended: true,
15266
+ maxTokens: 1048576,
15267
+ maxOutputTokens: 65536,
15268
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15269
+ quotaInfo: {
15270
+ remainingFraction: 1,
15271
+ resetTime: "2026-05-29T18:30:05Z"
15272
+ },
15273
+ model: "MODEL_PLACEHOLDER_M132",
15274
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15275
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15276
+ supportsVideo: true,
15277
+ tagTitle: "Fast",
15278
+ tagDescription: "Limited time",
15279
+ supportedMimeTypes: {
15280
+ "application/json": true,
15281
+ "text/html": true,
15282
+ "text/markdown": true,
15283
+ "image/webp": true,
15284
+ "video/text/timestamp": true,
15285
+ "application/pdf": true,
15286
+ "text/javascript": true,
15287
+ "application/rtf": true,
15288
+ "video/jpeg2000": true,
15289
+ "video/videoframe/jpeg2000": true,
15290
+ "text/csv": true,
15291
+ "text/x-python-script": true,
15292
+ "text/rtf": true,
15293
+ "image/png": true,
15294
+ "audio/webm;codecs=opus": true,
15295
+ "application/x-ipynb+json": true,
15296
+ "video/audio/wav": true,
15297
+ "video/audio/s16le": true,
15298
+ "video/webm": true,
15299
+ "text/x-python": true,
15300
+ "image/heif": true,
15301
+ "text/plain": true,
15302
+ "video/mp4": true,
15303
+ "application/x-javascript": true,
15304
+ "image/heic": true,
15305
+ "text/x-typescript": true,
15306
+ "application/x-python-code": true,
15307
+ "text/css": true,
15308
+ "image/jpeg": true,
15309
+ "text/xml": true,
15310
+ "application/x-typescript": true
15311
+ },
15312
+ modelExperiments: {
15313
+ experiments: {
15314
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15315
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "100000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": true,\n "max_user_requests": 10,\n "include_last_user_message": true,\n "include_conversation_log": false,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15316
+ },
15317
+ template__system_prompts__identity: {
15318
+ stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
15319
+ },
15320
+ template__system_prompts__planning_more_artifacts: {
15321
+ stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
15322
+ }
15323
+ }
15324
+ }
15325
+ },
15326
+ chat_23310: {
15327
+ maxTokens: 32768,
15328
+ tokenizerType: "QWEN2",
15329
+ quotaInfo: {
15330
+ remainingFraction: 1
15331
+ },
15332
+ model: "MODEL_CHAT_23310",
15333
+ apiProvider: "API_PROVIDER_INTERNAL",
15334
+ supportsCumulativeContext: true,
15335
+ supportsEstimateTokenCounter: true,
15336
+ isInternal: true,
15337
+ promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
15338
+ toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
15339
+ requiresLeadInGeneration: true
15340
+ },
15341
+ chat_20706: {
15342
+ maxTokens: 16384,
15343
+ tokenizerType: "QWEN2",
15344
+ quotaInfo: {
15345
+ remainingFraction: 1
15346
+ },
15347
+ model: "MODEL_CHAT_20706",
15348
+ apiProvider: "API_PROVIDER_INTERNAL",
15349
+ supportsCumulativeContext: true,
15350
+ tabJumpPrintLineRange: true,
15351
+ supportsEstimateTokenCounter: true,
15352
+ isInternal: true,
15353
+ addCursorToFindReplaceTarget: true,
15354
+ promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
15355
+ toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
15356
+ requiresLeadInGeneration: true
15357
+ },
15358
+ "gpt-oss-120b-medium": {
15359
+ displayName: "GPT-OSS 120B (Medium)",
15360
+ supportsThinking: true,
15361
+ thinkingBudget: 8192,
15362
+ recommended: true,
15363
+ maxTokens: 131072,
15364
+ maxOutputTokens: 32768,
15365
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15366
+ quotaInfo: {
15367
+ remainingFraction: 0.6,
15368
+ resetTime: "2026-05-29T19:43:59Z"
15369
+ },
15370
+ model: "MODEL_OPENAI_GPT_OSS_120B_MEDIUM",
15371
+ apiProvider: "API_PROVIDER_OPENAI_VERTEX",
15372
+ modelProvider: "MODEL_PROVIDER_OPENAI",
15373
+ modelExperiments: {
15374
+ experiments: {
15375
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15376
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_UNSPECIFIED",\n "max_token_limit": "80000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "8192",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15377
+ }
15378
+ }
15379
+ },
15380
+ vertexModelId: "openai/gpt-oss-120b-maas"
15381
+ },
15382
+ tab_flash_lite_preview: {
15383
+ maxTokens: 16384,
15384
+ maxOutputTokens: 4096,
15385
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15386
+ quotaInfo: {
15387
+ remainingFraction: 1
15388
+ },
15389
+ model: "MODEL_PLACEHOLDER_M19",
15390
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15391
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15392
+ supportsCumulativeContext: true,
15393
+ supportsEstimateTokenCounter: true,
15394
+ toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
15395
+ requiresLeadInGeneration: true
15396
+ },
15397
+ "gemini-2.5-flash-lite": {
15398
+ displayName: "Gemini 3.1 Flash Lite",
15399
+ maxTokens: 1048576,
15400
+ maxOutputTokens: 65535,
15401
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15402
+ quotaInfo: {
15403
+ remainingFraction: 1,
15404
+ resetTime: "2026-05-29T18:30:05Z"
15405
+ },
15406
+ model: "MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE",
15407
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15408
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15409
+ modelExperiments: {
15410
+ experiments: {
15411
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15412
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15413
+ }
15414
+ }
15415
+ }
15416
+ },
15417
+ "gemini-3.1-flash-lite": {
15418
+ displayName: "Gemini 3.1 Flash Lite",
15419
+ maxTokens: 1048576,
15420
+ maxOutputTokens: 65535,
15421
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15422
+ quotaInfo: {
15423
+ remainingFraction: 1,
15424
+ resetTime: "2026-05-29T18:30:05Z"
15425
+ },
15426
+ model: "MODEL_PLACEHOLDER_M50",
15427
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15428
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15429
+ modelExperiments: {
15430
+ experiments: {
15431
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15432
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15433
+ }
15434
+ }
15435
+ }
15436
+ },
15437
+ "gemini-3-flash": {
15438
+ displayName: "Gemini 3 Flash",
15439
+ supportsImages: true,
15440
+ supportsThinking: true,
15441
+ thinkingBudget: -1,
15442
+ minThinkingBudget: 32,
15443
+ recommended: true,
15444
+ maxTokens: 1048576,
15445
+ maxOutputTokens: 65536,
15446
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15447
+ quotaInfo: {
15448
+ remainingFraction: 1,
15449
+ resetTime: "2026-05-29T18:30:05Z"
15450
+ },
15451
+ model: "MODEL_PLACEHOLDER_M18",
15452
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15453
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15454
+ supportsVideo: true,
15455
+ supportedMimeTypes: {
15456
+ "text/csv": true,
15457
+ "text/html": true,
15458
+ "application/x-typescript": true,
15459
+ "image/heic": true,
15460
+ "audio/webm;codecs=opus": true,
15461
+ "text/javascript": true,
15462
+ "video/videoframe/jpeg2000": true,
15463
+ "video/mp4": true,
15464
+ "application/x-python-code": true,
15465
+ "video/text/timestamp": true,
15466
+ "video/audio/wav": true,
15467
+ "video/jpeg2000": true,
15468
+ "text/css": true,
15469
+ "video/audio/s16le": true,
15470
+ "application/x-javascript": true,
15471
+ "text/x-python-script": true,
15472
+ "text/markdown": true,
15473
+ "image/webp": true,
15474
+ "text/x-python": true,
15475
+ "application/pdf": true,
15476
+ "application/x-ipynb+json": true,
15477
+ "image/heif": true,
15478
+ "application/json": true,
15479
+ "text/x-typescript": true,
15480
+ "text/plain": true,
15481
+ "image/png": true,
15482
+ "application/rtf": true,
15483
+ "text/xml": true,
15484
+ "image/jpeg": true,
15485
+ "video/webm": true,
15486
+ "text/rtf": true
15487
+ },
15488
+ modelExperiments: {
15489
+ experiments: {
15490
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15491
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15492
+ },
15493
+ template__system_prompts__communication_style: {
15494
+ stringValue: '- Keep your responses concise.\n- Provide a summary of your work when you end your turn. Ground your response in the work you did. Keep your tone professional and avoid overconfident language, bragging, or overclaiming success.\n- AVOID using superlatives such as "perfectly", "flawlessly", "100% correct", "Summary of Accomplishments" etc. to summarize your work for the user. Be humble.\n- AVOID over-the-top politeness or complimenting the user excessively.\n- Format your responses in github-style markdown.'
15495
+ }
15496
+ }
15497
+ }
15498
+ },
15499
+ "claude-sonnet-4-6": {
15500
+ displayName: "Claude Sonnet 4.6 (Thinking)",
15501
+ supportsImages: true,
15502
+ supportsThinking: true,
15503
+ thinkingBudget: 1024,
15504
+ recommended: true,
15505
+ maxTokens: 25e4,
15506
+ maxOutputTokens: 64e3,
15507
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15508
+ quotaInfo: {
15509
+ remainingFraction: 0.6,
15510
+ resetTime: "2026-05-29T19:43:59Z"
15511
+ },
15512
+ model: "MODEL_PLACEHOLDER_M35",
15513
+ apiProvider: "API_PROVIDER_ANTHROPIC_VERTEX",
15514
+ modelProvider: "MODEL_PROVIDER_ANTHROPIC",
15515
+ supportedMimeTypes: {
15516
+ "image/png": true,
15517
+ "image/webp": true,
15518
+ "video/jpeg2000": true,
15519
+ "video/videoframe/jpeg2000": true,
15520
+ "image/heic": true,
15521
+ "image/heif": true,
15522
+ "image/jpeg": true
15523
+ },
15524
+ modelExperiments: {
15525
+ experiments: {
15526
+ template__system_prompts__planning_more_artifacts: {
15527
+ stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
15528
+ },
15529
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15530
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_UNSPECIFIED",\n "max_token_limit": "160000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15531
+ },
15532
+ template__system_prompts__identity: {
15533
+ stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
15534
+ }
15535
+ }
15536
+ },
15537
+ vertexModelId: "claude-sonnet-4-6@default"
15538
+ },
15539
+ "gemini-3.1-pro-low": {
15540
+ displayName: "Gemini 3.1 Pro (Low)",
15541
+ supportsImages: true,
15542
+ supportsThinking: true,
15543
+ thinkingBudget: 1001,
15544
+ minThinkingBudget: 128,
15545
+ recommended: true,
15546
+ maxTokens: 1048576,
15547
+ maxOutputTokens: 65535,
15548
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15549
+ quotaInfo: {
15550
+ remainingFraction: 1,
15551
+ resetTime: "2026-05-29T18:30:05Z"
15552
+ },
15553
+ model: "MODEL_PLACEHOLDER_M36",
15554
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15555
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15556
+ supportsVideo: true,
15557
+ supportedMimeTypes: {
15558
+ "text/x-typescript": true,
15559
+ "audio/webm;codecs=opus": true,
15560
+ "image/webp": true,
15561
+ "application/json": true,
15562
+ "application/rtf": true,
15563
+ "text/x-python": true,
15564
+ "video/mp4": true,
15565
+ "text/csv": true,
15566
+ "video/text/timestamp": true,
15567
+ "text/css": true,
15568
+ "image/heif": true,
15569
+ "application/x-typescript": true,
15570
+ "text/x-python-script": true,
15571
+ "application/x-python-code": true,
15572
+ "text/plain": true,
15573
+ "video/webm": true,
15574
+ "video/audio/wav": true,
15575
+ "image/jpeg": true,
15576
+ "text/xml": true,
15577
+ "application/x-javascript": true,
15578
+ "text/javascript": true,
15579
+ "text/html": true,
15580
+ "video/jpeg2000": true,
15581
+ "image/heic": true,
15582
+ "application/pdf": true,
15583
+ "video/audio/s16le": true,
15584
+ "text/markdown": true,
15585
+ "video/videoframe/jpeg2000": true,
15586
+ "image/png": true,
15587
+ "application/x-ipynb+json": true,
15588
+ "text/rtf": true
15589
+ },
15590
+ modelExperiments: {
15591
+ experiments: {
15592
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15593
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SINGLE_PROMPT",\n "max_token_limit": "128000",\n "token_threshold": "50000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": false,\n "is_sync": false,\n "max_user_requests": 10,\n "include_last_user_message": false,\n "include_conversation_log": true,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15594
+ },
15595
+ "cascade-include-ephemeral-message": {
15596
+ stringValue: '{\n "enabled": true,\n "disabledHeuristics": ["running_tasks_reminder"],\n "staticMessages": [],\n "useAllowlist": false,\n "enabledHeuristics": []\n}'
15597
+ },
15598
+ template__system_prompts__communication_style: {
15599
+ stringValue: "- Keep your responses concise.\n- Provide a summary of your work when you end your turn.\n- Format your responses in github-style markdown.\n- If you're unsure about the user's intent, ask for clarification rather than making assumptions.\n- You MUST create clickable links for all files and code symbols (classes, types, functions, structs). Use github style markdown links with the `file://` scheme (e.g., [filename](file:///path/to/file) or [ClassName](file:///path/to/file#L10-L20)`). For Windows, use forward slashes for paths.\n\nCRITICAL INSTRUCTION 1: You may have access to a variety of tools at your disposal. Some tools may be for a specific task such as 'view_file' (for viewing contents of a file). Others may be very broadly applicable such as the ability to run a command on a terminal. Always prioritize using the most specific tool you can for the task at hand. Here are some rules: (a) NEVER run cat inside a bash command to create a new file or append to an existing file. (b) ALWAYS use grep_search instead of running grep inside a bash command unless absolutely needed. (c) DO NOT use ls for listing, cat for viewing, grep for finding, sed for replacing.\nCRITICAL INSTRUCTION 2: Before making tool calls T, think and explicitly list out any related tools for the task at hand. You can only execute a set of tools T if all other tools in the list are either more generic or cannot be used for the task at hand. ALWAYS START your thought with recalling critical instructions 1 and 2. In particular, the format for the start of your thought block must be '...94>thought\\nCRITICAL INSTRUCTION 1: ...\\nCRITICAL INSTRUCTION 2: ...'."
15600
+ },
15601
+ template__system_prompts__identity: {
15602
+ stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
15603
+ },
15604
+ template__system_prompts__planning_more_artifacts: {
15605
+ stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
15606
+ }
15607
+ }
15608
+ }
15609
+ },
15610
+ "gemini-3.5-flash-low": {
15611
+ displayName: "Gemini 3.5 Flash (Medium)",
15612
+ supportsImages: true,
15613
+ supportsThinking: true,
15614
+ thinkingBudget: 4e3,
15615
+ minThinkingBudget: 32,
15616
+ recommended: true,
15617
+ maxTokens: 1048576,
15618
+ maxOutputTokens: 65536,
15619
+ tokenizerType: "LLAMA_WITH_SPECIAL",
15620
+ quotaInfo: {
15621
+ remainingFraction: 1,
15622
+ resetTime: "2026-05-29T18:30:05Z"
15623
+ },
15624
+ model: "MODEL_PLACEHOLDER_M20",
15625
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
15626
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
15627
+ supportsVideo: true,
15628
+ tagTitle: "Fast",
15629
+ tagDescription: "Limited time",
15630
+ supportedMimeTypes: {
15631
+ "video/mp4": true,
15632
+ "text/x-python": true,
15633
+ "image/heic": true,
15634
+ "application/x-ipynb+json": true,
15635
+ "text/markdown": true,
15636
+ "video/text/timestamp": true,
15637
+ "application/x-javascript": true,
15638
+ "video/videoframe/jpeg2000": true,
15639
+ "text/xml": true,
15640
+ "text/x-python-script": true,
15641
+ "image/heif": true,
15642
+ "application/rtf": true,
15643
+ "video/jpeg2000": true,
15644
+ "application/pdf": true,
15645
+ "text/css": true,
15646
+ "application/json": true,
15647
+ "image/webp": true,
15648
+ "text/csv": true,
15649
+ "text/javascript": true,
15650
+ "text/plain": true,
15651
+ "video/audio/wav": true,
15652
+ "image/png": true,
15653
+ "application/x-python-code": true,
15654
+ "video/audio/s16le": true,
15655
+ "audio/webm;codecs=opus": true,
15656
+ "video/webm": true,
15657
+ "image/jpeg": true,
15658
+ "text/rtf": true,
15659
+ "text/html": true,
15660
+ "application/x-typescript": true,
15661
+ "text/x-typescript": true
15662
+ },
15663
+ modelExperiments: {
15664
+ experiments: {
15665
+ template__system_prompts__identity: {
15666
+ stringValue: "You are Antigravity, a powerful agentic AI coding assistant designed by the Google DeepMind team working on Advanced Agentic Coding.\nYou are pair programming with a USER to solve their coding task. The task may require creating a new codebase, modifying or debugging an existing codebase, or simply answering a question.\nThe USER will send you requests, which you must always prioritize addressing. User requests are enclosed within <USER_REQUEST> tags. Along with each USER request, we will attach additional metadata about their current state, such as what files they have open and where their cursor is.\nThis information may or may not be relevant to the coding task, it is up for you to decide."
15667
+ },
15668
+ template__system_prompts__planning_more_artifacts: {
15669
+ stringValue: "When in planning mode, you will work with three special artifacts.\n\n# Tasks\nPath: {{ArtifactDirectoryPath}}/task.md\n\n**Purpose**: A TODO list to organize your work during execution. Create this artifact after receiving user approval on your implementation plan. Break down complex tasks into component-level items and track progress as a living document.\n\n**Format**:\n```markdown\n- `[ ]` uncompleted tasks\n- `[/]` in progress tasks (custom notation)\n- `[x]` completed tasks\n- Use indented lists for sub-items\n```\n\n**Updating task.md**: Mark items as `[/]` when starting work on them, and `[x]` when completed. Update task.md as you make progress through your checklist.\n\n# Implementation Plan\nPath: {{ArtifactDirectoryPath}}/implementation_plan.md\n\n**Purpose**: A detailed design document to present your technical implementation plan to the user for feedback and approval.\nAfter reading the document, the user should understand the key technical details of your plan, and be able to make an informed decision on whether to approve it.\n\n**Format**: Use the following format, omitting any irrelevant sections.\n```markdown\n# [Goal Description]\n\nProvide a brief description of the problem, any background context, and what the change accomplishes.\n\n## User Review Required\n\nDocument anything that requires user review or feedback, for example, breaking changes or significant design decisions. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Open Questions\n\nAny clarifying or design questions for the user that will impact the implementation plan. Use GitHub alerts (IMPORTANT/WARNING/CAUTION) to highlight critical items.\n\n## Proposed Changes\n\nGroup files by component (e.g., package, feature area, dependency layer) and order logically (dependencies first). Separate components with horizontal rules for visual clarity.\n\n### [Component Name]\n\nSummary of what will change in this component, separated by files. For specific files, Use [NEW] and [DELETE] to demarcate new and deleted files, for example:\n\n#### [MODIFY] [file basename](file:///absolute/path/to/modifiedfile)\n#### [NEW] [file basename](file:///absolute/path/to/newfile)\n#### [DELETE] [file basename](file:///absolute/path/to/deletedfile)\n\n## Verification Plan\n\nSummary of how you will verify that your changes have the desired effects.\n\n### Automated Tests\n- The commands of any automated tests you'll run.\n\n### Manual Verification\n- Asking the user to deploy to staging and testing, verifying UI changes on an iOS app etc.\n```\n\n# Walkthrough\nPath: {{ArtifactDirectoryPath}}/walkthrough.md\n\n**Purpose**: After completing work, summarize what you accomplished. Update an existing walkthrough for related follow-up work rather than creating a new one.\n\n**Document**:\n- Changes made\n- What was tested\n- Validation results\n\nEmbed screenshots and recordings to visually demonstrate UI changes and user flows.\n"
15670
+ },
15671
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
15672
+ stringValue: '{\n "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",\n "max_token_limit": "256000",\n "token_threshold": "100000",\n "max_overhead_ratio": "0.15",\n "moving_window_size": "1",\n "enabled": true,\n "max_output_tokens": "16384",\n "checkpoint_model": "MODEL_PLACEHOLDER_M50",\n "use_last_planner_model": true,\n "is_sync": true,\n "max_user_requests": 10,\n "include_last_user_message": true,\n "include_conversation_log": false,\n "include_running_task_snapshots": true,\n "include_subagent_snapshots": true,\n "include_artifact_snapshots": true,\n "retry_config": {\n "max_retries": 0,\n "initial_sleep_duration_ms": 1000,\n "exponential_multiplier": 2,\n "include_error_feedback": false\n }\n}'
15673
+ }
15674
+ }
15675
+ }
15676
+ }
15677
+ },
15678
+ defaultAgentModelId: "gemini-3.5-flash",
15679
+ agentModelSorts: [
15680
+ {
15681
+ displayName: "Recommended",
15682
+ groups: [
15683
+ {
15684
+ modelIds: [
15685
+ "gemini-3.5-flash",
15686
+ "gemini-3.1-pro",
15687
+ "claude-sonnet-4-6",
15688
+ "claude-opus-4-6-thinking",
15689
+ "gpt-oss-120b-medium"
15690
+ ]
15691
+ }
15692
+ ]
15693
+ }
15694
+ ],
15695
+ commandModelIds: [
15696
+ "gemini-3-flash"
15697
+ ],
15698
+ tabModelIds: [
15699
+ "chat_20706",
15700
+ "chat_23310"
15701
+ ],
15702
+ imageGenerationModelIds: [
15703
+ "gemini-3.1-flash-image"
15704
+ ],
15705
+ mqueryModelIds: [
15706
+ "gemini-3.1-flash-lite"
15707
+ ],
15708
+ webSearchModelIds: [
15709
+ "gemini-3.1-flash-lite"
15710
+ ],
15711
+ deprecatedModelIds: {
15712
+ "gemini-3.1-pro-high": {
15713
+ newModelId: "gemini-pro-agent",
15714
+ oldModelEnum: "MODEL_PLACEHOLDER_M37",
15715
+ newModelEnum: "MODEL_PLACEHOLDER_M16"
15716
+ }
15717
+ },
15718
+ commitMessageModelIds: [
15719
+ "gemini-3.1-flash-lite"
15720
+ ],
15721
+ audioTranscriptionModelIds: [
15722
+ "models/proactive-observer"
15723
+ ],
15724
+ experimentIds: [
15725
+ 106101246,
15726
+ 106168863,
15727
+ 105979552,
15728
+ 105979574,
15729
+ 106015333,
15730
+ 105979579,
15731
+ 105867471,
15732
+ 106123599,
15733
+ 106076629,
15734
+ 106100625,
15735
+ 105930909,
15736
+ 106143956,
15737
+ 105879567,
15738
+ 105856899,
15739
+ 106064030,
15740
+ 105757908,
15741
+ 106240760,
15742
+ 106106760,
15743
+ 106021688,
15744
+ 106014288,
15745
+ 105887299,
15746
+ 106278607,
15747
+ 106212376,
15748
+ 106281951,
15749
+ 106264532,
15750
+ 106044947,
15751
+ 106032303,
15752
+ 106228452,
15753
+ 106121606,
15754
+ 105979531,
15755
+ 105979553,
15756
+ 106015328,
15757
+ 105867469,
15758
+ 106123597,
15759
+ 106100654,
15760
+ 106064028,
15761
+ 106240748,
15762
+ 106038164,
15763
+ 106032301,
15764
+ 106121604
15765
+ ],
15766
+ tieredModelIds: {
15767
+ flashLite: [
15768
+ "gemini-3.1-flash-lite"
15769
+ ],
15770
+ flash: [
15771
+ "gemini-3-flash-agent"
15772
+ ],
15773
+ pro: [
15774
+ "gemini-3.1-pro-low"
15775
+ ]
15776
+ }
15777
+ };
15778
+
14663
15779
  // src/sdk/request-helpers/types.ts
14664
15780
  var GEMINI_PREVIEW_LINK = "https://goo.gle/enable-preview-features";
14665
15781
  var CLOUDCODE_DOMAINS2 = [
@@ -14920,7 +16036,8 @@ import { randomUUID as randomUUID2 } from "crypto";
14920
16036
 
14921
16037
  // src/sdk/request/shared.ts
14922
16038
  var REQUEST_MODEL_FALLBACKS = {
14923
- "gemini-2.5-flash-image": "gemini-2.5-flash"
16039
+ "gemini-2.5-flash-image": "gemini-2.5-flash",
16040
+ "gemini-3.1-pro-high": "gemini-pro-agent"
14924
16041
  };
14925
16042
  var GENERATIVE_LANGUAGE_HOST = new URL(AGY_GENERATIVE_LANGUAGE_ENDPOINT).host;
14926
16043
  var CODE_ASSIST_HOST_SUFFIX = "cloudcode-pa.googleapis.com";
@@ -15613,6 +16730,17 @@ function prepareAgyRequest(input, init, accessToken, projectId, thinkingConfigDe
15613
16730
  sessionId
15614
16731
  };
15615
16732
  }
16733
+ function getModelEnum(modelName) {
16734
+ const models = models_default.models;
16735
+ if (models && models[modelName] && models[modelName].model) {
16736
+ return models[modelName].model;
16737
+ }
16738
+ const deprecated = models_default.deprecatedModelIds;
16739
+ if (deprecated && deprecated[modelName] && deprecated[modelName].oldModelEnum) {
16740
+ return deprecated[modelName].oldModelEnum;
16741
+ }
16742
+ return "MODEL_PLACEHOLDER_M16";
16743
+ }
15616
16744
  function transformRequestBody(body, projectId, effectiveModel, requestedModel, thinkingConfigDefaults) {
15617
16745
  const fallbackId = randomUUID3();
15618
16746
  try {
@@ -15641,7 +16769,7 @@ function transformRequestBody(body, projectId, effectiveModel, requestedModel, t
15641
16769
  requestPayloadInside.labels = {
15642
16770
  last_execution_id: randomUUID3(),
15643
16771
  last_step_index: "0",
15644
- model_enum: "MODEL_PLACEHOLDER_M16",
16772
+ model_enum: getModelEnum(effectiveModel),
15645
16773
  trajectory_id: randomUUID3(),
15646
16774
  used_claude: "false",
15647
16775
  used_claude_conservative: "false"
@@ -15652,12 +16780,13 @@ function transformRequestBody(body, projectId, effectiveModel, requestedModel, t
15652
16780
  }
15653
16781
  if (requestPayloadInside && Array.isArray(requestPayloadInside.contents)) {
15654
16782
  let contents2 = requestPayloadInside.contents;
16783
+ injectMissingToolCallIds(contents2);
16784
+ fixOrphanedFunctionResponses(contents2);
15655
16785
  const state = analyzeConversationState(contents2);
15656
16786
  if (needsThinkingRecovery(state)) {
15657
16787
  contents2 = closeToolLoopForThinking(contents2);
15658
16788
  }
15659
16789
  contents2 = normalizeContentsSequence(contents2);
15660
- injectMissingToolCallIds(contents2);
15661
16790
  const latestSig = getLatestSignature(sessionId2);
15662
16791
  applyLatestSignature(contents2, latestSig);
15663
16792
  requestPayloadInside.contents = contents2;
@@ -15680,12 +16809,13 @@ function transformRequestBody(body, projectId, effectiveModel, requestedModel, t
15680
16809
  const { userPromptId, sessionId, requestId } = normalizeRequestPayloadIdentifiers(requestPayload);
15681
16810
  let contents = requestPayload.contents;
15682
16811
  if (Array.isArray(contents)) {
16812
+ injectMissingToolCallIds(contents);
16813
+ fixOrphanedFunctionResponses(contents);
15683
16814
  const state = analyzeConversationState(contents);
15684
16815
  if (needsThinkingRecovery(state)) {
15685
16816
  contents = closeToolLoopForThinking(contents);
15686
16817
  }
15687
16818
  contents = normalizeContentsSequence(contents);
15688
- injectMissingToolCallIds(contents);
15689
16819
  const latestSig = getLatestSignature(sessionId);
15690
16820
  applyLatestSignature(contents, latestSig);
15691
16821
  requestPayload.contents = contents;
@@ -15697,7 +16827,7 @@ function transformRequestBody(body, projectId, effectiveModel, requestedModel, t
15697
16827
  requestPayload.labels = {
15698
16828
  last_execution_id: randomUUID3(),
15699
16829
  last_step_index: "0",
15700
- model_enum: "MODEL_PLACEHOLDER_M16",
16830
+ model_enum: getModelEnum(effectiveModel),
15701
16831
  trajectory_id: randomUUID3(),
15702
16832
  used_claude: "false",
15703
16833
  used_claude_conservative: "false"
@@ -15945,6 +17075,41 @@ function applyLatestSignature(contents, latestSig) {
15945
17075
  }
15946
17076
  }
15947
17077
  }
17078
+ function fixOrphanedFunctionResponses(contents) {
17079
+ const validCallIds = /* @__PURE__ */ new Set();
17080
+ for (const content of contents) {
17081
+ if (!content || typeof content !== "object" || !Array.isArray(content.parts)) {
17082
+ continue;
17083
+ }
17084
+ for (const part of content.parts) {
17085
+ if (part && typeof part === "object" && part.functionCall && part.functionCall.id) {
17086
+ validCallIds.add(part.functionCall.id);
17087
+ }
17088
+ }
17089
+ }
17090
+ for (const content of contents) {
17091
+ if (!content || typeof content !== "object" || !Array.isArray(content.parts)) {
17092
+ continue;
17093
+ }
17094
+ for (const part of content.parts) {
17095
+ if (part && typeof part === "object" && part.functionResponse) {
17096
+ const id = part.functionResponse.id;
17097
+ if (!id || !validCallIds.has(id)) {
17098
+ const name = part.functionResponse.name || "unknown_tool";
17099
+ const responseObj = part.functionResponse.response || {};
17100
+ let responseStr = "";
17101
+ try {
17102
+ responseStr = typeof responseObj === "string" ? responseObj : JSON.stringify(responseObj);
17103
+ } catch (e) {
17104
+ responseStr = String(responseObj);
17105
+ }
17106
+ part.text = `[Orphaned Tool Response for ${name}]: ${responseStr}`;
17107
+ delete part.functionResponse;
17108
+ }
17109
+ }
17110
+ }
17111
+ }
17112
+ }
15948
17113
 
15949
17114
  // src/sdk/request/response.ts
15950
17115
  async function transformAgyResponse(response, streaming, _ignoredDebugContext, requestedModel, sessionId, chatLogger) {
@@ -16296,6 +17461,12 @@ var AGY_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the c
16296
17461
  Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
16297
17462
  Do not call other tools.
16298
17463
  `;
17464
+ var AGY_QUOTA_SUMMARY_COMMAND = "agyquotasummary";
17465
+ var AGY_QUOTA_SUMMARY_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota summary (weekly and 5-hour limits by model group) for the current authenticated account.
17466
+
17467
+ Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
17468
+ Do not call other tools.
17469
+ `;
16299
17470
  var latestAgyAuthResolver;
16300
17471
  var latestAgyConfiguredProjectId;
16301
17472
  var latestAgyUserAgentModel;
@@ -16354,8 +17525,8 @@ var TIER_MAPPING = {
16354
17525
  },
16355
17526
  "gemini-3.1-pro": {
16356
17527
  low: "gemini-3.1-pro-low",
16357
- medium: "gemini-pro-agent",
16358
- high: "gemini-pro-agent"
17528
+ medium: "gemini-3.1-pro-high",
17529
+ high: "gemini-3.1-pro-high"
16359
17530
  }
16360
17531
  };
16361
17532
  var buildModelFromSimple = (modelId, simple) => {
@@ -16542,6 +17713,10 @@ var AgyCLIOAuthPlugin = async ({ client }) => {
16542
17713
  description: "Show Agy Code Assist quota usage",
16543
17714
  template: AGY_QUOTA_COMMAND_TEMPLATE
16544
17715
  };
17716
+ config2.command[AGY_QUOTA_SUMMARY_COMMAND] = {
17717
+ description: "Show Agy Code Assist quota summary with weekly and 5-hour limits",
17718
+ template: AGY_QUOTA_SUMMARY_COMMAND_TEMPLATE
17719
+ };
16545
17720
  config2.provider = config2.provider || {};
16546
17721
  config2.provider[AGY_PROVIDER_ID] = {
16547
17722
  npm: "@ai-sdk/google",
@@ -16558,6 +17733,12 @@ var AgyCLIOAuthPlugin = async ({ client }) => {
16558
17733
  getAuthResolver: () => latestAgyAuthResolver,
16559
17734
  getConfiguredProjectId: () => latestAgyConfiguredProjectId,
16560
17735
  getUserAgentModel: () => latestAgyUserAgentModel
17736
+ }),
17737
+ [AGY_QUOTA_SUMMARY_TOOL_NAME]: createAgyQuotaSummaryTool({
17738
+ client,
17739
+ getAuthResolver: () => latestAgyAuthResolver,
17740
+ getConfiguredProjectId: () => latestAgyConfiguredProjectId,
17741
+ getUserAgentModel: () => latestAgyUserAgentModel
16561
17742
  })
16562
17743
  },
16563
17744
  auth: {