@slkiser/opencode-quota 1.3.0 → 1.4.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.
Files changed (42) hide show
  1. package/README.md +170 -73
  2. package/dist/lib/config.d.ts.map +1 -1
  3. package/dist/lib/config.js +31 -4
  4. package/dist/lib/config.js.map +1 -1
  5. package/dist/lib/copilot.d.ts.map +1 -1
  6. package/dist/lib/copilot.js +8 -1
  7. package/dist/lib/copilot.js.map +1 -1
  8. package/dist/lib/firmware.d.ts +22 -0
  9. package/dist/lib/firmware.d.ts.map +1 -1
  10. package/dist/lib/firmware.js +96 -7
  11. package/dist/lib/firmware.js.map +1 -1
  12. package/dist/lib/markdown-table.d.ts +7 -0
  13. package/dist/lib/markdown-table.d.ts.map +1 -1
  14. package/dist/lib/markdown-table.js +76 -9
  15. package/dist/lib/markdown-table.js.map +1 -1
  16. package/dist/lib/opencode-auth.d.ts.map +1 -1
  17. package/dist/lib/opencode-auth.js +3 -1
  18. package/dist/lib/opencode-auth.js.map +1 -1
  19. package/dist/lib/quota-stats-format.d.ts.map +1 -1
  20. package/dist/lib/quota-stats-format.js +9 -3
  21. package/dist/lib/quota-stats-format.js.map +1 -1
  22. package/dist/lib/quota-stats.d.ts.map +1 -1
  23. package/dist/lib/quota-stats.js +36 -2
  24. package/dist/lib/quota-stats.js.map +1 -1
  25. package/dist/lib/quota-status.d.ts +3 -1
  26. package/dist/lib/quota-status.d.ts.map +1 -1
  27. package/dist/lib/quota-status.js +9 -2
  28. package/dist/lib/quota-status.js.map +1 -1
  29. package/dist/lib/types.d.ts +4 -1
  30. package/dist/lib/types.d.ts.map +1 -1
  31. package/dist/lib/types.js +2 -2
  32. package/dist/lib/types.js.map +1 -1
  33. package/dist/plugin.d.ts.map +1 -1
  34. package/dist/plugin.js +159 -181
  35. package/dist/plugin.js.map +1 -1
  36. package/dist/providers/copilot.d.ts.map +1 -1
  37. package/dist/providers/copilot.js +10 -5
  38. package/dist/providers/copilot.js.map +1 -1
  39. package/dist/providers/firmware.d.ts.map +1 -1
  40. package/dist/providers/firmware.js +40 -7
  41. package/dist/providers/firmware.js.map +1 -1
  42. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"quota-status.js","sourceRoot":"","sources":["../../src/lib/quota-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-status.js","sourceRoot":"","sources":["../../src/lib/quota-status.ts"],"names":[],"mappings":"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"}
@@ -24,8 +24,11 @@ export interface QuotaToastConfig {
24
24
  *
25
25
  * Keep this list short and user-friendly; each provider advertises a stable id.
26
26
  * Example: ["copilot", "google-antigravity"].
27
+ *
28
+ * When set to "auto" (or left unconfigured), the plugin will auto-enable
29
+ * all providers whose `isAvailable()` returns true at runtime.
27
30
  */
28
- enabledProviders: string[];
31
+ enabledProviders: string[] | "auto";
29
32
  googleModels: GoogleModelId[];
30
33
  showOnIdle: boolean;
31
34
  showOnQuestion: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
package/dist/lib/types.js CHANGED
@@ -8,8 +8,8 @@ export const DEFAULT_CONFIG = {
8
8
  toastStyle: "classic",
9
9
  minIntervalMs: 300000, // 5 minutes
10
10
  debug: false,
11
- // Providers are OFF by default; users opt-in via config.
12
- enabledProviders: [],
11
+ // Providers are auto-detected by default; set to explicit list to opt-in manually.
12
+ enabledProviders: "auto",
13
13
  // If Google Antigravity is enabled, default to Claude only.
14
14
  googleModels: ["CLAUDE"],
15
15
  showOnIdle: true,
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8DH,mCAAmC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,OAAO,EAAE,IAAI;IAEb,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,MAAM,EAAE,YAAY;IAEnC,KAAK,EAAE,KAAK;IAEZ,yDAAyD;IACzD,gBAAgB,EAAE,EAAE;IAEpB,4DAA4D;IAC5D,YAAY,EAAE,CAAC,QAAQ,CAAC;IAExB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,KAAK;IACvB,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE;QACN,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;KACX;CACF,CAAC;AAuNF,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,sCAAsC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,uCAAuC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAG1B;IACF,KAAK,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE;IACjF,OAAO,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE;IACtD,MAAM,EAAE,EAAE,GAAG,EAAE,0BAA0B,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE;IACzF,OAAO,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE;CAC3D,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,OAAO,EAAE,IAAI;IAEb,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,MAAM,EAAE,YAAY;IAEnC,KAAK,EAAE,KAAK;IAEZ,mFAAmF;IACnF,gBAAgB,EAAE,MAAe;IAEjC,4DAA4D;IAC5D,YAAY,EAAE,CAAC,QAAQ,CAAC;IAExB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,KAAK;IACvB,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE;QACN,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;KACX;CACF,CAAC;AAuNF,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,sCAAsC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,uCAAuC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAG1B;IACF,KAAK,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE;IACjF,OAAO,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE;IACtD,MAAM,EAAE,EAAE,GAAG,EAAE,0BAA0B,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE;IACzF,OAAO,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE;CAC3D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAkQlD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAy/B9B,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAwOlD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAghC9B,CAAC"}
package/dist/plugin.js CHANGED
@@ -16,13 +16,12 @@ import { aggregateUsage, getSessionTokenSummary, SessionNotFoundError } from "./
16
16
  import { formatQuotaStatsReport } from "./lib/quota-stats-format.js";
17
17
  import { buildQuotaStatusReport } from "./lib/quota-status.js";
18
18
  import { refreshGoogleTokensForAllAccounts } from "./lib/google.js";
19
+ import { resetFirmwareQuotaWindow } from "./lib/firmware.js";
19
20
  /** All token report command specifications */
20
21
  const TOKEN_REPORT_COMMANDS = [
21
22
  {
22
23
  id: "tokens_today",
23
- legacyId: "quota_today",
24
24
  template: "/tokens_today",
25
- legacyTemplate: "/quota_today",
26
25
  description: "Token + official API cost summary for today (calendar day, local timezone).",
27
26
  title: "Tokens used (Today) (/tokens_today)",
28
27
  metadataTitle: "Tokens used (Today)",
@@ -30,9 +29,7 @@ const TOKEN_REPORT_COMMANDS = [
30
29
  },
31
30
  {
32
31
  id: "tokens_daily",
33
- legacyId: "quota_daily",
34
32
  template: "/tokens_daily",
35
- legacyTemplate: "/quota_daily",
36
33
  description: "Token + official API cost summary for the last 24 hours (rolling).",
37
34
  title: "Tokens used (Last 24 Hours) (/tokens_daily)",
38
35
  metadataTitle: "Tokens used (Last 24 Hours)",
@@ -41,9 +38,7 @@ const TOKEN_REPORT_COMMANDS = [
41
38
  },
42
39
  {
43
40
  id: "tokens_weekly",
44
- legacyId: "quota_weekly",
45
41
  template: "/tokens_weekly",
46
- legacyTemplate: "/quota_weekly",
47
42
  description: "Token + official API cost summary for the last 7 days (rolling).",
48
43
  title: "Tokens used (Last 7 Days) (/tokens_weekly)",
49
44
  metadataTitle: "Tokens used (Last 7 Days)",
@@ -52,9 +47,7 @@ const TOKEN_REPORT_COMMANDS = [
52
47
  },
53
48
  {
54
49
  id: "tokens_monthly",
55
- legacyId: "quota_monthly",
56
50
  template: "/tokens_monthly",
57
- legacyTemplate: "/quota_monthly",
58
51
  description: "Token + official API cost summary for the last 30 days (rolling).",
59
52
  title: "Tokens used (Last 30 Days) (/tokens_monthly)",
60
53
  metadataTitle: "Tokens used (Last 30 Days)",
@@ -63,9 +56,7 @@ const TOKEN_REPORT_COMMANDS = [
63
56
  },
64
57
  {
65
58
  id: "tokens_all",
66
- legacyId: "quota_all",
67
59
  template: "/tokens_all",
68
- legacyTemplate: "/quota_all",
69
60
  description: "Token + official API cost summary for all locally saved OpenCode history.",
70
61
  title: "Tokens used (All Time) (/tokens_all)",
71
62
  metadataTitle: "Tokens used (All Time)",
@@ -75,9 +66,7 @@ const TOKEN_REPORT_COMMANDS = [
75
66
  },
76
67
  {
77
68
  id: "tokens_session",
78
- legacyId: "quota_session",
79
69
  template: "/tokens_session",
80
- legacyTemplate: "/quota_session",
81
70
  description: "Token + official API cost summary for current session only.",
82
71
  title: "Tokens used (Current Session) (/tokens_session)",
83
72
  metadataTitle: "Tokens used (Current Session)",
@@ -85,9 +74,7 @@ const TOKEN_REPORT_COMMANDS = [
85
74
  },
86
75
  {
87
76
  id: "tokens_between",
88
- legacyId: "quota_between",
89
77
  template: "/tokens_between",
90
- legacyTemplate: "/quota_between",
91
78
  description: "Token + cost report between two YYYY-MM-DD dates (local timezone, inclusive).",
92
79
  titleForRange: (startYmd, endYmd) => {
93
80
  const formatYmd = (ymd) => {
@@ -102,12 +89,11 @@ const TOKEN_REPORT_COMMANDS = [
102
89
  kind: "between",
103
90
  },
104
91
  ];
105
- /** Build a lookup map from command ID (both new and legacy) to spec */
92
+ /** Build a lookup map from command ID to spec */
106
93
  const TOKEN_REPORT_COMMANDS_BY_ID = (() => {
107
94
  const map = new Map();
108
95
  for (const spec of TOKEN_REPORT_COMMANDS) {
109
96
  map.set(spec.id, spec);
110
- map.set(spec.legacyId, spec);
111
97
  }
112
98
  return map;
113
99
  })();
@@ -225,7 +211,7 @@ export const QuotaToastPlugin = async ({ client }) => {
225
211
  return new Date(ymd.y, ymd.m - 1, ymd.d + 1).getTime();
226
212
  }
227
213
  /**
228
- * Parse /quota_between arguments. Supports:
214
+ * Parse /tokens_between arguments. Supports:
229
215
  * - Positional: "2026-01-01 2026-01-15"
230
216
  * - JSON: {"starting_date":"2026-01-01","ending_date":"2026-01-15"}
231
217
  */
@@ -351,11 +337,33 @@ export const QuotaToastPlugin = async ({ client }) => {
351
337
  return false;
352
338
  }
353
339
  }
340
+ /**
341
+ * Get the current model from the active session.
342
+ *
343
+ * Only uses session-scoped model lookup. Does NOT fall back to
344
+ * client.config.get() because that returns the global/default model
345
+ * which can be stale across sessions.
346
+ */
347
+ async function getCurrentModel(sessionID) {
348
+ if (!sessionID)
349
+ return undefined;
350
+ try {
351
+ const sessionResp = await typedClient.session.get({ path: { id: sessionID } });
352
+ return sessionResp.data?.modelID;
353
+ }
354
+ catch {
355
+ return undefined;
356
+ }
357
+ }
354
358
  function formatDebugInfo(params) {
355
359
  const availability = params.availability
356
360
  ? params.availability.map((x) => `${x.id}=${x.ok ? "ok" : "no"}`).join(" ")
357
361
  : "unknown";
358
- const providers = params.enabledProviders.length > 0 ? params.enabledProviders.join(",") : "(none)";
362
+ const providers = params.enabledProviders === "auto"
363
+ ? "(auto)"
364
+ : params.enabledProviders.length > 0
365
+ ? params.enabledProviders.join(",")
366
+ : "(none)";
359
367
  const modelPart = params.currentModel ? ` model=${params.currentModel}` : "";
360
368
  const paths = configMeta.paths.length > 0 ? configMeta.paths.join(" | ") : "(none)";
361
369
  return [
@@ -377,22 +385,23 @@ export const QuotaToastPlugin = async ({ client }) => {
377
385
  ? formatDebugInfo({ trigger, reason: "disabled", enabledProviders: [] })
378
386
  : null;
379
387
  }
380
- const providers = getProviders().filter((p) => config.enabledProviders.includes(p.id));
381
- // Providers are opt-in; when none are enabled, do nothing.
382
- if (providers.length === 0) {
388
+ const allProviders = getProviders();
389
+ const isAutoMode = config.enabledProviders === "auto";
390
+ const enabledProviderIds = isAutoMode ? [] : config.enabledProviders;
391
+ // When enabledProviders is "auto", we'll filter by availability below.
392
+ // When explicit, filter to just the listed providers.
393
+ const providers = isAutoMode
394
+ ? allProviders
395
+ : allProviders.filter((p) => enabledProviderIds.includes(p.id));
396
+ // Only bail on empty if user explicitly configured an empty list.
397
+ if (!isAutoMode && providers.length === 0) {
383
398
  return config.debug
384
399
  ? formatDebugInfo({ trigger, reason: "enabledProviders empty", enabledProviders: [] })
385
400
  : null;
386
401
  }
387
402
  let currentModel;
388
403
  if (config.onlyCurrentModel) {
389
- try {
390
- const configResponse = await typedClient.config.get();
391
- currentModel = configResponse.data?.model;
392
- }
393
- catch {
394
- currentModel = undefined;
395
- }
404
+ currentModel = await getCurrentModel(sessionID);
396
405
  }
397
406
  const ctx = {
398
407
  client: typedClient,
@@ -466,7 +475,7 @@ export const QuotaToastPlugin = async ({ client }) => {
466
475
  });
467
476
  if (!config.debug)
468
477
  return formatted;
469
- const debugFooter = `\n\n[debug] src=${configMeta.source} providers=${config.enabledProviders.join(",") || "(none)"} avail=${avail
478
+ const debugFooter = `\n\n[debug] src=${configMeta.source} providers=${config.enabledProviders === "auto" ? "(auto)" : config.enabledProviders.join(",") || "(none)"} avail=${avail
470
479
  .map((x) => `${x.p.id}:${x.ok ? "ok" : "no"}`)
471
480
  .join(" ")}`;
472
481
  return formatted + debugFooter;
@@ -548,8 +557,12 @@ export const QuotaToastPlugin = async ({ client }) => {
548
557
  await refreshConfig();
549
558
  if (!config.enabled)
550
559
  return null;
551
- const providers = getProviders().filter((p) => config.enabledProviders.includes(p.id));
552
- if (providers.length === 0)
560
+ const allProviders = getProviders();
561
+ const isAutoMode = config.enabledProviders === "auto";
562
+ const providers = isAutoMode
563
+ ? allProviders
564
+ : allProviders.filter((p) => config.enabledProviders.includes(p.id));
565
+ if (!isAutoMode && providers.length === 0)
553
566
  return null;
554
567
  const ctx = {
555
568
  client: typedClient,
@@ -620,14 +633,13 @@ export const QuotaToastPlugin = async ({ client }) => {
620
633
  }
621
634
  async function buildStatusReport(params) {
622
635
  await refreshConfig();
623
- let currentModel;
624
- try {
625
- const configResponse = await typedClient.config.get();
626
- currentModel = configResponse.data?.model;
627
- }
628
- catch {
629
- currentModel = undefined;
630
- }
636
+ const currentModel = await getCurrentModel(params.sessionID);
637
+ const sessionModelLookup = !params.sessionID
638
+ ? "no_session"
639
+ : currentModel
640
+ ? "ok"
641
+ : "not_found";
642
+ const isAutoMode = config.enabledProviders === "auto";
631
643
  const providers = getProviders();
632
644
  const availability = await Promise.all(providers.map(async (p) => {
633
645
  let ok = false;
@@ -642,7 +654,8 @@ export const QuotaToastPlugin = async ({ client }) => {
642
654
  }
643
655
  return {
644
656
  id: p.id,
645
- enabled: config.enabledProviders.includes(p.id),
657
+ // In auto mode, a provider is effectively "enabled" if it's available.
658
+ enabled: isAutoMode ? ok : config.enabledProviders.includes(p.id),
646
659
  available: ok,
647
660
  matchesCurrentModel: typeof p.matchesCurrentModel === "function" && currentModel
648
661
  ? p.matchesCurrentModel(currentModel)
@@ -658,6 +671,7 @@ export const QuotaToastPlugin = async ({ client }) => {
658
671
  enabledProviders: config.enabledProviders,
659
672
  onlyCurrentModel: config.onlyCurrentModel,
660
673
  currentModel,
674
+ sessionModelLookup,
661
675
  providerAvailability: availability,
662
676
  googleRefresh: refresh
663
677
  ? {
@@ -685,18 +699,16 @@ export const QuotaToastPlugin = async ({ client }) => {
685
699
  template: "/quota_status",
686
700
  description: "Diagnostics for toast + pricing + local storage (includes unknown pricing report).",
687
701
  };
688
- // Register token report commands (primary /tokens_* and legacy /quota_* aliases)
702
+ cfg.command["firmware_reset_window"] = {
703
+ template: "/firmware_reset_window",
704
+ description: "Manually reset your Firmware 5-hour spending window (consumes 1 of 2 weekly resets).",
705
+ };
706
+ // Register token report commands (/tokens_*)
689
707
  for (const spec of TOKEN_REPORT_COMMANDS) {
690
- // Primary command (/tokens_*)
691
708
  cfg.command[spec.id] = {
692
709
  template: spec.template,
693
710
  description: spec.description,
694
711
  };
695
- // Legacy alias (/quota_*) for backwards compatibility
696
- cfg.command[spec.legacyId] = {
697
- template: spec.legacyTemplate,
698
- description: `${spec.description} (Legacy alias for /${spec.id})`,
699
- };
700
712
  }
701
713
  },
702
714
  "command.execute.before": async (input) => {
@@ -729,14 +741,43 @@ export const QuotaToastPlugin = async ({ client }) => {
729
741
  quotaCache.timestamp = Date.now();
730
742
  }
731
743
  if (!msg) {
732
- await injectRawOutput(sessionID, "Quota unavailable");
744
+ // Provide an actionable message instead of a generic "unavailable".
745
+ if (!configLoaded) {
746
+ await injectRawOutput(sessionID, "Quota unavailable (config not loaded, try again)");
747
+ }
748
+ else if (!config.enabled) {
749
+ await injectRawOutput(sessionID, "Quota disabled in config (enabled: false)");
750
+ }
751
+ else {
752
+ // Check what providers are available for a more specific hint.
753
+ const allProvs = getProviders();
754
+ const ctx = {
755
+ client: typedClient,
756
+ config: { googleModels: config.googleModels },
757
+ };
758
+ const avail = await Promise.all(allProvs.map(async (p) => {
759
+ try {
760
+ return { id: p.id, ok: await p.isAvailable(ctx) };
761
+ }
762
+ catch {
763
+ return { id: p.id, ok: false };
764
+ }
765
+ }));
766
+ const availableIds = avail.filter((x) => x.ok).map((x) => x.id);
767
+ if (availableIds.length === 0) {
768
+ await injectRawOutput(sessionID, "Quota unavailable\n\nNo quota providers detected. Make sure you are logged in to a supported provider (Copilot, OpenAI, etc.).\n\nRun /quota_status for diagnostics.");
769
+ }
770
+ else {
771
+ await injectRawOutput(sessionID, `Quota unavailable\n\nProviders detected (${availableIds.join(", ")}) but returned no data. This may be a temporary API error.\n\nRun /quota_status for diagnostics.`);
772
+ }
773
+ }
733
774
  throw new Error("__QUOTA_COMMAND_HANDLED__");
734
775
  }
735
776
  await injectRawOutput(sessionID, msg);
736
777
  throw new Error("__QUOTA_COMMAND_HANDLED__");
737
778
  }
738
779
  const untilMs = Date.now();
739
- // Handle token report commands generically (both /tokens_* and legacy /quota_* aliases)
780
+ // Handle token report commands (/tokens_*)
740
781
  if (isTokenReportCommand(cmd)) {
741
782
  const spec = TOKEN_REPORT_COMMANDS_BY_ID.get(cmd);
742
783
  if (spec.kind === "between") {
@@ -808,78 +849,56 @@ export const QuotaToastPlugin = async ({ client }) => {
808
849
  ? parsed.value["skewMs"]
809
850
  : undefined,
810
851
  force: parsed.value["force"] === true,
852
+ sessionID,
811
853
  });
812
854
  await injectRawOutput(sessionID, out);
813
855
  throw new Error("__QUOTA_COMMAND_HANDLED__");
814
856
  }
857
+ // Handle /firmware_reset_window (reset 5-hour spending window)
858
+ if (cmd === "firmware_reset_window") {
859
+ const raw = input.arguments?.trim() || "";
860
+ // Check for confirmation: accept "confirm" as positional or {"confirm": true} as JSON
861
+ let confirmed = false;
862
+ if (raw.toLowerCase() === "confirm") {
863
+ confirmed = true;
864
+ }
865
+ else if (raw.startsWith("{")) {
866
+ try {
867
+ const parsed = JSON.parse(raw);
868
+ confirmed = parsed["confirm"] === true;
869
+ }
870
+ catch {
871
+ await injectRawOutput(sessionID, `Invalid JSON arguments for /firmware_reset_window\n\nTo proceed, run:\n/firmware_reset_window confirm`);
872
+ throw new Error("__QUOTA_COMMAND_HANDLED__");
873
+ }
874
+ }
875
+ // Require explicit confirmation (destructive action with limited weekly resets)
876
+ if (!confirmed) {
877
+ await injectRawOutput(sessionID, `⚠️ This will reset your Firmware 5-hour spending window.\nYou have a maximum of 2 resets per week.\n\nTo proceed, run:\n/firmware_reset_window confirm`);
878
+ throw new Error("__QUOTA_COMMAND_HANDLED__");
879
+ }
880
+ const result = await resetFirmwareQuotaWindow();
881
+ if (!result) {
882
+ await injectRawOutput(sessionID, "Firmware API key not configured. Cannot reset window.");
883
+ throw new Error("__QUOTA_COMMAND_HANDLED__");
884
+ }
885
+ if (!result.success) {
886
+ await injectRawOutput(sessionID, `Failed to reset Firmware window:\n${result.error}`);
887
+ throw new Error("__QUOTA_COMMAND_HANDLED__");
888
+ }
889
+ // Build success message
890
+ const resetsLeft = result.windowResetsRemaining;
891
+ const resetsMsg = resetsLeft !== undefined
892
+ ? ` (${resetsLeft} reset${resetsLeft === 1 ? "" : "s"} remaining this week)`
893
+ : "";
894
+ // Fetch updated quota to show new status
895
+ const quotaMsg = await fetchQuotaCommandMessage("command:/firmware_reset_window", sessionID);
896
+ const successOutput = `✓ Firmware 5-hour window reset successful${resetsMsg}${quotaMsg ? `\n\n${quotaMsg}` : ""}`;
897
+ await injectRawOutput(sessionID, successOutput);
898
+ throw new Error("__QUOTA_COMMAND_HANDLED__");
899
+ }
815
900
  },
816
901
  tool: {
817
- quota_daily: tool({
818
- description: "Token + official API cost summary for the last 24 hours (rolling).",
819
- args: {},
820
- async execute(_args, context) {
821
- const untilMs = Date.now();
822
- const sinceMs = untilMs - 24 * 60 * 60 * 1000;
823
- const out = await buildQuotaReport({
824
- title: "Tokens used (Last 24 Hours) (/tokens_daily)",
825
- sinceMs,
826
- untilMs,
827
- sessionID: context.sessionID,
828
- });
829
- context.metadata({ title: "Tokens used (Last 24 Hours)" });
830
- await injectRawOutput(context.sessionID, out);
831
- return ""; // Empty return - output already injected with noReply
832
- },
833
- }),
834
- quota_weekly: tool({
835
- description: "Token + official API cost summary for the last 7 days (rolling).",
836
- args: {},
837
- async execute(_args, context) {
838
- const untilMs = Date.now();
839
- const sinceMs = untilMs - 7 * 24 * 60 * 60 * 1000;
840
- const out = await buildQuotaReport({
841
- title: "Tokens used (Last 7 Days) (/tokens_weekly)",
842
- sinceMs,
843
- untilMs,
844
- sessionID: context.sessionID,
845
- });
846
- context.metadata({ title: "Tokens used (Last 7 Days)" });
847
- await injectRawOutput(context.sessionID, out);
848
- return ""; // Empty return - output already injected with noReply
849
- },
850
- }),
851
- quota_monthly: tool({
852
- description: "Token + official API cost summary for the last 30 days (rolling).",
853
- args: {},
854
- async execute(_args, context) {
855
- const untilMs = Date.now();
856
- const sinceMs = untilMs - 30 * 24 * 60 * 60 * 1000;
857
- const out = await buildQuotaReport({
858
- title: "Tokens used (Last 30 Days) (/tokens_monthly)",
859
- sinceMs,
860
- untilMs,
861
- sessionID: context.sessionID,
862
- });
863
- context.metadata({ title: "Tokens used (Last 30 Days)" });
864
- await injectRawOutput(context.sessionID, out);
865
- return ""; // Empty return - output already injected with noReply
866
- },
867
- }),
868
- quota_all: tool({
869
- description: "Token + official API cost summary for all locally saved OpenCode history.",
870
- args: {},
871
- async execute(_args, context) {
872
- const out = await buildQuotaReport({
873
- title: "Tokens used (All Time) (/tokens_all)",
874
- sessionID: context.sessionID,
875
- topModels: 12,
876
- topSessions: 12,
877
- });
878
- context.metadata({ title: "Tokens used (All Time)" });
879
- await injectRawOutput(context.sessionID, out);
880
- return ""; // Empty return - output already injected with noReply
881
- },
882
- }),
883
902
  quota_status: tool({
884
903
  description: "Diagnostics for toast + pricing + local storage (includes unknown pricing report).",
885
904
  args: {
@@ -903,87 +922,46 @@ export const QuotaToastPlugin = async ({ client }) => {
903
922
  refreshGoogleTokens: args.refreshGoogleTokens,
904
923
  skewMs: args.skewMs,
905
924
  force: args.force,
906
- });
907
- context.metadata({ title: "Quota Status" });
908
- await injectRawOutput(context.sessionID, out);
909
- return ""; // Empty return - output already injected with noReply
910
- },
911
- }),
912
- quota_today: tool({
913
- description: "Token + official API cost summary for today (calendar day, local timezone).",
914
- args: {},
915
- async execute(_args, context) {
916
- const now = new Date();
917
- const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());
918
- const sinceMs = startOfDay.getTime();
919
- const untilMs = now.getTime();
920
- const out = await buildQuotaReport({
921
- title: "Tokens used (Today) (/tokens_today)",
922
- sinceMs,
923
- untilMs,
924
925
  sessionID: context.sessionID,
925
926
  });
926
- context.metadata({ title: "Tokens used (Today)" });
927
- await injectRawOutput(context.sessionID, out);
928
- return ""; // Empty return - output already injected with noReply
929
- },
930
- }),
931
- quota_session: tool({
932
- description: "Token + official API cost summary for current session only.",
933
- args: {},
934
- async execute(_args, context) {
935
- const out = await buildQuotaReport({
936
- title: "Tokens used (Current Session) (/tokens_session)",
937
- sessionID: context.sessionID,
938
- filterSessionID: context.sessionID,
939
- sessionOnly: true,
940
- });
941
- context.metadata({ title: "Tokens used (Current Session)" });
927
+ context.metadata({ title: "Quota Status" });
942
928
  await injectRawOutput(context.sessionID, out);
943
929
  return ""; // Empty return - output already injected with noReply
944
930
  },
945
931
  }),
946
- quota_between: tool({
947
- description: "Token + official API cost summary between two YYYY-MM-DD dates (local timezone, inclusive).",
932
+ firmware_reset_window: tool({
933
+ description: "Manually reset your Firmware 5-hour spending window. Consumes 1 of 2 weekly resets. Requires confirm=true.",
948
934
  args: {
949
- startingDate: tool.schema
950
- .string()
951
- .regex(/^\d{4}-\d{2}-\d{2}$/)
952
- .describe("Starting date in YYYY-MM-DD format (local timezone)"),
953
- endingDate: tool.schema
954
- .string()
955
- .regex(/^\d{4}-\d{2}-\d{2}$/)
956
- .describe("Ending date in YYYY-MM-DD format (local timezone, inclusive)"),
935
+ confirm: tool.schema
936
+ .boolean()
937
+ .optional()
938
+ .describe("Must be true to proceed (destructive action with limited weekly resets)"),
957
939
  },
958
940
  async execute(args, context) {
959
- const startYmd = parseYyyyMmDd(args.startingDate);
960
- if (!startYmd) {
961
- await injectRawOutput(context.sessionID, `Invalid starting date: "${args.startingDate}". Expected YYYY-MM-DD.`);
941
+ // Require explicit confirmation (destructive action with limited weekly resets)
942
+ if (args.confirm !== true) {
943
+ await injectRawOutput(context.sessionID, `⚠️ This will reset your Firmware 5-hour spending window.\nYou have a maximum of 2 resets per week.\n\nTo proceed, call with confirm: true`);
962
944
  return "";
963
945
  }
964
- const endYmd = parseYyyyMmDd(args.endingDate);
965
- if (!endYmd) {
966
- await injectRawOutput(context.sessionID, `Invalid ending date: "${args.endingDate}". Expected YYYY-MM-DD.`);
946
+ const result = await resetFirmwareQuotaWindow();
947
+ if (!result) {
948
+ await injectRawOutput(context.sessionID, "Firmware API key not configured. Cannot reset window.");
967
949
  return "";
968
950
  }
969
- const startMs = startOfLocalDayMs(startYmd);
970
- const endMs = startOfLocalDayMs(endYmd);
971
- if (endMs < startMs) {
972
- await injectRawOutput(context.sessionID, `Ending date (${args.endingDate}) is before starting date (${args.startingDate}).`);
951
+ if (!result.success) {
952
+ await injectRawOutput(context.sessionID, `Failed to reset Firmware window:\n${result.error}`);
973
953
  return "";
974
954
  }
975
- const sinceMs = startMs;
976
- const untilMs = startOfNextLocalDayMs(endYmd); // Exclusive upper bound for inclusive end date
977
- const startStr = formatYmd(startYmd);
978
- const endStr = formatYmd(endYmd);
979
- const out = await buildQuotaReport({
980
- title: `Tokens used (${startStr} .. ${endStr}) (/tokens_between)`,
981
- sinceMs,
982
- untilMs,
983
- sessionID: context.sessionID,
984
- });
985
- context.metadata({ title: "Tokens used (Date Range)" });
986
- await injectRawOutput(context.sessionID, out);
955
+ // Build success message
956
+ const resetsLeft = result.windowResetsRemaining;
957
+ const resetsMsg = resetsLeft !== undefined
958
+ ? ` (${resetsLeft} reset${resetsLeft === 1 ? "" : "s"} remaining this week)`
959
+ : "";
960
+ // Fetch updated quota to show new status
961
+ const quotaMsg = await fetchQuotaCommandMessage("tool:firmware_reset_window", context.sessionID);
962
+ const successOutput = `✓ Firmware 5-hour window reset successful${resetsMsg}${quotaMsg ? `\n\n${quotaMsg}` : ""}`;
963
+ context.metadata({ title: "Firmware Window Reset" });
964
+ await injectRawOutput(context.sessionID, successOutput);
987
965
  return ""; // Empty return - output already injected with noReply
988
966
  },
989
967
  }),