paseo-acp-agy 1.2.9 → 1.2.10

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.
@@ -444,7 +444,7 @@ export class AntigravityQuotaProvider {
444
444
  let remainingPct = null;
445
445
  let resetsAt = null;
446
446
 
447
- const m = trimmed.match(/^(.*?)\\s{2,}(.*?Remaining)\\s+(\\d+)%(?:\\s+(.*))?$/i);
447
+ const m = trimmed.match(/^(.*?)\\s{2,}(.*?)\\s+(\\d+)%(?:\\s+(.*))?$/i);
448
448
  if (m) {
449
449
  scope = m[1].trim();
450
450
  limitType = m[2].trim();
@@ -477,13 +477,18 @@ export class AntigravityQuotaProvider {
477
477
 
478
478
  if (remainingPct !== null && !isNaN(remainingPct)) {
479
479
  const usedPct = Math.max(0, Math.min(100, 100 - remainingPct));
480
- const isFiveHour = /five\\s*hour/i.test(limitType);
481
- const isWeekly = /weekly/i.test(limitType);
482
- const isGemini = /gemini/i.test(scope);
480
+ const isFiveHour = /session|five\\s*hour|5-?hour|5h/i.test(limitType);
481
+ const isWeekly = /week|7-?day/i.test(limitType);
482
+ const isArgon = /argon/i.test(scope) || /argon/i.test(limitType);
483
+ const isClaude = /claude|gpt/i.test(scope);
484
+ const isGemini = (/gemini/i.test(scope) || !isClaude) && !isArgon;
483
485
 
484
486
  let id = isFiveHour ? "session" : isWeekly ? "weekly" : "quota";
485
487
  let label = isFiveHour ? "Session" : isWeekly ? "Weekly" : limitType.replace(/\\s+Remaining$/i, "");
486
- if (!isGemini) {
488
+ if (isArgon) {
489
+ id = \`argon_\${id}\`;
490
+ label = \`Gemini 4 Argon \${isFiveHour ? "Session" : isWeekly ? "Weekly" : limitType.replace(/\\s+Remaining$/i, "").replace(/^Gemini 4 Argon\\s+/i, "")}\`;
491
+ } else if (!isGemini) {
487
492
  id = \`claude_\${id}\`;
488
493
  label = \`Claude \${label}\`;
489
494
  }
@@ -496,16 +501,18 @@ export class AntigravityQuotaProvider {
496
501
  tone: toneFromUsedPct(usedPct),
497
502
  isFiveHour,
498
503
  isGemini,
504
+ isArgon,
499
505
  });
500
506
  }
501
507
  }
502
508
 
503
509
  rawWindows.sort((a, b) => {
504
- if (a.isGemini && !b.isGemini) return -1;
505
- if (!a.isGemini && b.isGemini) return 1;
506
- if (a.isFiveHour && !b.isFiveHour) return -1;
507
- if (!a.isFiveHour && b.isFiveHour) return 1;
508
- return 0;
510
+ const score = (w) => {
511
+ if (w.isGemini && !w.isArgon) return w.isFiveHour ? 1 : 2;
512
+ if (w.isArgon) return w.isFiveHour ? 3 : 4;
513
+ return w.isFiveHour ? 5 : 6;
514
+ };
515
+ return score(a) - score(b);
509
516
  });
510
517
 
511
518
  const windows = rawWindows.map(w => windowFromUsedPct(w));
@@ -724,7 +731,7 @@ export async function fetchAntigravityUsage() {
724
731
  let resetsAt = null;
725
732
 
726
733
  // Format 1: Table format e.g. "Gemini Models Weekly Limit Remaining 56% 2026-10-14 04:37 UTC"
727
- const m = line.match(/^(.*?)\\s{2,}(.*?Remaining)\\s+(\\d+)%(?:\\s+(.*))?$/i);
734
+ const m = line.match(/^(.*?)\\s{2,}(.*?)\\s+(\\d+)%(?:\\s+(.*))?$/i);
728
735
  if (m) {
729
736
  scope = m[1].trim();
730
737
  limitType = m[2].trim();
@@ -738,7 +745,7 @@ export async function fetchAntigravityUsage() {
738
745
  } else {
739
746
  // Format 2: Tab / multi-space separated
740
747
  const parts = line.split(/\\t+|\\s{2,}/).map(p => p.trim());
741
- if (parts.length >= 3 && parts[1]?.toLowerCase().includes("remaining")) {
748
+ if (parts.length >= 3) {
742
749
  scope = parts[0];
743
750
  limitType = parts[1];
744
751
  const remMatch = parts[2].match(/(\\d+)%/);
@@ -779,11 +786,16 @@ export async function fetchAntigravityUsage() {
779
786
  const usedPct = Math.max(0, Math.min(100, 100 - remainingPct));
780
787
  const isFiveHour = /session|five\\s*hour|5-?hour|5h/i.test(limitType);
781
788
  const isWeekly = /week|7-?day/i.test(limitType);
782
- const isGemini = /gemini/i.test(scope) || !/claude/i.test(scope);
789
+ const isArgon = /argon/i.test(scope) || /argon/i.test(limitType);
790
+ const isClaude = /claude|gpt/i.test(scope);
791
+ const isGemini = (/gemini/i.test(scope) || !isClaude) && !isArgon;
783
792
 
784
793
  let id = isFiveHour ? "session" : isWeekly ? "weekly" : "quota";
785
794
  let label = isFiveHour ? "Session" : isWeekly ? "Weekly" : limitType.replace(/\\s+Remaining$/i, "");
786
- if (!isGemini) {
795
+ if (isArgon) {
796
+ id = \`argon_\${id}\`;
797
+ label = \`Gemini 4 Argon \${isFiveHour ? "Session" : isWeekly ? "Weekly" : limitType.replace(/\\s+Remaining$/i, "").replace(/^Gemini 4 Argon\\s+/i, "")}\`;
798
+ } else if (!isGemini) {
787
799
  id = \`claude_\${id}\`;
788
800
  label = \`Claude \${label}\`;
789
801
  }
@@ -791,7 +803,7 @@ export async function fetchAntigravityUsage() {
791
803
  rawWindows.push({
792
804
  id,
793
805
  label,
794
- shortLabel: isFiveHour ? "5h" : isWeekly ? "wk" : "",
806
+ shortLabel: isFiveHour ? "5h" : isWeekly ? "wk" : isArgon ? "Argon" : "",
795
807
  summary: true,
796
808
  usedPct,
797
809
  remainingPct,
@@ -799,16 +811,18 @@ export async function fetchAntigravityUsage() {
799
811
  tone: toneFromUsedPct(usedPct),
800
812
  isFiveHour,
801
813
  isGemini,
814
+ isArgon,
802
815
  });
803
816
  }
804
817
  }
805
818
 
806
819
  rawWindows.sort((a, b) => {
807
- if (a.isGemini && !b.isGemini) return -1;
808
- if (!a.isGemini && b.isGemini) return 1;
809
- if (a.isFiveHour && !b.isFiveHour) return -1;
810
- if (!a.isFiveHour && b.isFiveHour) return 1;
811
- return 0;
820
+ const score = (w) => {
821
+ if (w.isGemini && !w.isArgon) return w.isFiveHour ? 1 : 2;
822
+ if (w.isArgon) return w.isFiveHour ? 3 : 4;
823
+ return w.isFiveHour ? 5 : 6;
824
+ };
825
+ return score(a) - score(b);
812
826
  });
813
827
 
814
828
  const windows = rawWindows.map(w => ({
package/dist/protocol.js CHANGED
@@ -137,6 +137,7 @@ export function extractPromptText(promptInput) {
137
137
  return "Please continue.";
138
138
  }
139
139
  export const MODEL_PRICING = {
140
+ "gemini-4-argon": { inputCostPerM: 1.25, outputCostPerM: 5.00, cachedInputCostPerM: 0.3125 },
140
141
  "gemini-3.8-flash": { inputCostPerM: 0.10, outputCostPerM: 0.40, cachedInputCostPerM: 0.025 },
141
142
  "gemini-3.7-flash": { inputCostPerM: 0.10, outputCostPerM: 0.40, cachedInputCostPerM: 0.025 },
142
143
  "gemini-3.6-flash": { inputCostPerM: 0.10, outputCostPerM: 0.40, cachedInputCostPerM: 0.025 },
@@ -148,6 +149,7 @@ export const MODEL_PRICING = {
148
149
  "gpt-oss-120b": { inputCostPerM: 0.15, outputCostPerM: 0.60, cachedInputCostPerM: 0.0375 },
149
150
  };
150
151
  export const MODEL_CONTEXT_WINDOWS = {
152
+ "gemini-4-argon": 1_048_576,
151
153
  "gemini-3.8-flash": 1_048_576,
152
154
  "gemini-3.7-flash": 1_048_576,
153
155
  "gemini-3.6-flash": 1_048_576,
@@ -164,6 +166,8 @@ export function getModelContextWindow(modelId) {
164
166
  if (MODEL_CONTEXT_WINDOWS[modelId])
165
167
  return MODEL_CONTEXT_WINDOWS[modelId];
166
168
  const lower = modelId.toLowerCase();
169
+ if (lower.includes("argon"))
170
+ return 1_048_576;
167
171
  if (lower.includes("pro"))
168
172
  return 2_097_152;
169
173
  if (lower.includes("claude"))
@@ -180,6 +184,8 @@ export function getModelPricing(modelId) {
180
184
  if (MODEL_PRICING[modelId])
181
185
  return MODEL_PRICING[modelId];
182
186
  const lower = modelId.toLowerCase();
187
+ if (lower.includes("argon"))
188
+ return MODEL_PRICING["gemini-4-argon"];
183
189
  if (lower.includes("opus"))
184
190
  return MODEL_PRICING["claude-opus-4-6-thinking"];
185
191
  if (lower.includes("claude") || lower.includes("sonnet"))
@@ -225,7 +231,7 @@ export function parseAgyQuotaOutput(raw) {
225
231
  let limitType = "";
226
232
  let remainingMatch = null;
227
233
  let resetsAt = null;
228
- const m = trimmed.match(/^(.*?)\s{2,}(.*?Remaining)\s+(\d+%)(?:\s+(.*))?$/i);
234
+ const m = trimmed.match(/^(.*?)\s{2,}(.*?)\s+(\d+%)(?:\s+(.*))?$/i);
229
235
  if (m) {
230
236
  scope = m[1].trim();
231
237
  limitType = m[2].trim();
@@ -244,12 +250,18 @@ export function parseAgyQuotaOutput(raw) {
244
250
  if (remainingMatch) {
245
251
  const remainingPct = parseInt(remainingMatch[1], 10);
246
252
  const usedPct = Math.max(0, Math.min(100, 100 - remainingPct));
247
- const isFiveHour = /five\s*hour/i.test(limitType);
248
- const isWeekly = /weekly/i.test(limitType);
249
- const isGemini = /gemini/i.test(scope);
253
+ const isFiveHour = /session|five\s*hour|5-?hour|5h/i.test(limitType);
254
+ const isWeekly = /week|7-?day/i.test(limitType);
255
+ const isArgon = /argon/i.test(scope) || /argon/i.test(limitType);
256
+ const isClaude = /claude|gpt/i.test(scope);
257
+ const isGemini = (/gemini/i.test(scope) || !isClaude) && !isArgon;
250
258
  let id = isFiveHour ? "session" : isWeekly ? "weekly" : "quota";
251
259
  let label = isFiveHour ? "Session (5h)" : isWeekly ? "Weekly" : limitType;
252
- if (!isGemini) {
260
+ if (isArgon) {
261
+ id = `argon_${id}`;
262
+ label = `Gemini 4 Argon ${isFiveHour ? "Session (5h)" : isWeekly ? "Weekly" : limitType.replace(/^Gemini 4 Argon\s+/i, "")}`;
263
+ }
264
+ else if (!isGemini) {
253
265
  id = `claude_${id}`;
254
266
  label = `Claude ${label}`;
255
267
  }
@@ -394,6 +406,7 @@ export const ALL_THINKING_LEVELS = {
394
406
  high: { name: "High", description: "Deep reasoning effort for complex tasks" },
395
407
  };
396
408
  export const FALLBACK_MODELS = [
409
+ { modelId: "gemini-4-argon", name: "Gemini 4 Argon", description: "Google Gemini 4 Argon", supportedEfforts: ["high", "medium", "low"], contextWindowMaxTokens: 1_048_576 },
397
410
  { modelId: "gemini-3.8-flash", name: "Gemini 3.8 Flash", description: "Google Gemini 3.8 Flash", supportedEfforts: ["high", "medium", "low"], contextWindowMaxTokens: 1_048_576 },
398
411
  { modelId: "gemini-3.7-flash", name: "Gemini 3.7 Flash", description: "Google Gemini 3.7 Flash", supportedEfforts: ["high", "medium", "low"], contextWindowMaxTokens: 1_048_576 },
399
412
  { modelId: "gemini-3.6-flash", name: "Gemini 3.6 Flash", description: "Google Gemini 3.6 Flash", supportedEfforts: ["high", "medium", "low"], contextWindowMaxTokens: 1_048_576 },
@@ -281,7 +281,7 @@ export function formatUsageOutput(rawText) {
281
281
  let rawWindow = "";
282
282
  let pctStr = "";
283
283
  let reset = "";
284
- const m = trimmedLine.match(/^(.*?)\s{2,}(.*?Remaining)\s+(\d+%)(?:\s+(.*))?$/i);
284
+ const m = trimmedLine.match(/^(.*?)\s{2,}(.*?)\s+(\d+%)(?:\s+(.*))?$/i);
285
285
  if (m) {
286
286
  fam = m[1].trim();
287
287
  rawWindow = m[2].trim();
@@ -298,20 +298,25 @@ export function formatUsageOutput(rawText) {
298
298
  reset = parts[3]?.trim() || "";
299
299
  }
300
300
  let icon = "🤖";
301
- if (fam.toLowerCase().includes("gemini")) {
301
+ const isArgon = fam.toLowerCase().includes("argon") || rawWindow.toLowerCase().includes("argon");
302
+ if (isArgon) {
303
+ fam = "Gemini 4 Argon";
304
+ icon = "⚡";
305
+ }
306
+ else if (fam.toLowerCase().includes("gemini")) {
302
307
  fam = "Google Gemini";
303
308
  icon = "🔷";
304
309
  }
305
- else if (fam.toLowerCase().includes("claude")) {
310
+ else if (fam.toLowerCase().includes("claude") || fam.toLowerCase().includes("gpt")) {
306
311
  fam = "Claude & GPT";
307
312
  icon = "🔶";
308
313
  }
309
- rawWindow = rawWindow.replace(/\s+Remaining$/i, "").trim();
314
+ rawWindow = rawWindow.replace(/\s+Remaining$/i, "").replace(/^Gemini 4 Argon\s+/i, "").trim();
310
315
  const lowerWindow = rawWindow.toLowerCase();
311
316
  const isFiveHour = lowerWindow.includes("five hour") || /\b5\s*hour/.test(lowerWindow);
312
317
  const win = isFiveHour
313
318
  ? "Janela de 5 Horas"
314
- : lowerWindow.includes("weekly")
319
+ : lowerWindow.includes("weekly") || lowerWindow.includes("week")
315
320
  ? "Cota Semanal"
316
321
  : rawWindow;
317
322
  const parsedPct = Number.parseInt(pctStr.replace("%", ""), 10);
package/dist/version.js CHANGED
@@ -122,7 +122,7 @@ export function formatDiagnosticVersion() {
122
122
  ` • CLI Backend: ${meta.agyBinaryPath} (v${meta.agyVersion})`,
123
123
  ` • Runtime: Node.js ${meta.nodeVersion} (${meta.platform} ${meta.arch})`,
124
124
  ` • Features: Token Tracking, Context Meter, Quota Windows, Model Pricing, Slash Commands (/help, /resume, /usage)`,
125
- ` • Supported Models: 7 (gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.1-pro, claude-sonnet-4-6, claude-opus-4-6-thinking, gpt-oss-120b)`,
125
+ ` • Supported Models: 8 (gemini-4-argon, gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.1-pro, claude-sonnet-4-6, claude-opus-4-6-thinking, gpt-oss-120b)`,
126
126
  ` • Session Isolation: persistent agy subprocess per Paseo session`,
127
127
  ];
128
128
  return lines.join("\n ");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "paseo-acp-agy",
3
- "version": "1.2.9",
3
+ "version": "1.2.10",
4
4
  "description": "ACP (Agent Client Protocol) provider for Google Antigravity in Paseo and Zed",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",