@slkiser/opencode-quota 2.6.2 → 2.7.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 (51) hide show
  1. package/README.md +84 -6
  2. package/dist/data/modelsdev-pricing.min.json +51 -1
  3. package/dist/lib/config.d.ts.map +1 -1
  4. package/dist/lib/config.js +18 -0
  5. package/dist/lib/config.js.map +1 -1
  6. package/dist/lib/cursor-detection.d.ts +17 -0
  7. package/dist/lib/cursor-detection.d.ts.map +1 -0
  8. package/dist/lib/cursor-detection.js +125 -0
  9. package/dist/lib/cursor-detection.js.map +1 -0
  10. package/dist/lib/cursor-pricing.d.ts +33 -0
  11. package/dist/lib/cursor-pricing.d.ts.map +1 -0
  12. package/dist/lib/cursor-pricing.js +131 -0
  13. package/dist/lib/cursor-pricing.js.map +1 -0
  14. package/dist/lib/cursor-usage.d.ts +32 -0
  15. package/dist/lib/cursor-usage.d.ts.map +1 -0
  16. package/dist/lib/cursor-usage.js +127 -0
  17. package/dist/lib/cursor-usage.js.map +1 -0
  18. package/dist/lib/entries.d.ts +4 -0
  19. package/dist/lib/entries.d.ts.map +1 -1
  20. package/dist/lib/entries.js +0 -6
  21. package/dist/lib/entries.js.map +1 -1
  22. package/dist/lib/provider-metadata.d.ts.map +1 -1
  23. package/dist/lib/provider-metadata.js +4 -0
  24. package/dist/lib/provider-metadata.js.map +1 -1
  25. package/dist/lib/quota-stats.d.ts +1 -1
  26. package/dist/lib/quota-stats.d.ts.map +1 -1
  27. package/dist/lib/quota-stats.js +26 -14
  28. package/dist/lib/quota-stats.js.map +1 -1
  29. package/dist/lib/quota-status.d.ts +4 -0
  30. package/dist/lib/quota-status.d.ts.map +1 -1
  31. package/dist/lib/quota-status.js +49 -1
  32. package/dist/lib/quota-status.js.map +1 -1
  33. package/dist/lib/token-cost.d.ts +10 -0
  34. package/dist/lib/token-cost.d.ts.map +1 -0
  35. package/dist/lib/token-cost.js +16 -0
  36. package/dist/lib/token-cost.js.map +1 -0
  37. package/dist/lib/types.d.ts +4 -0
  38. package/dist/lib/types.d.ts.map +1 -1
  39. package/dist/lib/types.js +1 -0
  40. package/dist/lib/types.js.map +1 -1
  41. package/dist/plugin.d.ts.map +1 -1
  42. package/dist/plugin.js +95 -26
  43. package/dist/plugin.js.map +1 -1
  44. package/dist/providers/cursor.d.ts +3 -0
  45. package/dist/providers/cursor.d.ts.map +1 -0
  46. package/dist/providers/cursor.js +136 -0
  47. package/dist/providers/cursor.js.map +1 -0
  48. package/dist/providers/registry.d.ts.map +1 -1
  49. package/dist/providers/registry.js +2 -0
  50. package/dist/providers/registry.js.map +1 -1
  51. package/package.json +1 -1
package/README.md CHANGED
@@ -5,9 +5,9 @@
5
5
  - Automatic quota toasts after assistant responses
6
6
  - Manual `/quota` and `/tokens_*` commands for deeper local reporting with zero context window pollution
7
7
 
8
- **Quota provider supports**: GitHub Copilot, OpenAI (Plus/Pro), Qwen Code, Alibaba Coding Plan, Chutes AI, Firmware AI, Google Antigravity, and Z.ai coding plan.
8
+ **Quota provider supports**: GitHub Copilot, OpenAI (Plus/Pro), Cursor (ACP), Qwen Code, Alibaba Coding Plan, Chutes AI, Firmware AI, Google Antigravity, and Z.ai coding plan.
9
9
 
10
- **Token provider supports**: All models and providers in [models.dev](https://models.dev).
10
+ **Token provider supports**: All models and providers in [models.dev](https://models.dev), plus deterministic local pricing for Cursor Auto/Composer and Cursor model aliases that are not on models.dev.
11
11
 
12
12
 
13
13
  ![Image of quota toasts](https://github.com/slkiser/opencode-quota/blob/main/toast.png)
@@ -53,9 +53,19 @@ If you already use Copilot, OpenAI, Firmware, Chutes, or Z.ai in OpenCode, start
53
53
  }
54
54
  ```
55
55
 
56
+ ### Cursor
57
+
58
+ Cursor model support requires the `opencode-cursor` [companion ACP plugin](https://github.com/Nomadcxx/opencode-cursor):
59
+
60
+ ```jsonc
61
+ {
62
+ "plugin": ["@rama_nigg/open-cursor", "@slkiser/opencode-quota"]
63
+ }
64
+ ```
65
+
56
66
  ### Google Antigravity
57
67
 
58
- Google quota support depends on the companion auth plugin:
68
+ Google quota support requires the `opencode-antigravity-auth` [companion auth plugin](https://github.com/NoeFabris/opencode-antigravity-auth):
59
69
 
60
70
  ```jsonc
61
71
  {
@@ -65,7 +75,7 @@ Google quota support depends on the companion auth plugin:
65
75
 
66
76
  ### Qwen Code
67
77
 
68
- Qwen quota support depends on the companion auth plugin:
78
+ Qwen quota support requires the `opencode-qwencode-auth` [companion auth plugin](https://github.com/gustavodiasdev/opencode-qwencode-auth):
69
79
 
70
80
  ```jsonc
71
81
  {
@@ -73,6 +83,8 @@ Qwen quota support depends on the companion auth plugin:
73
83
  }
74
84
  ```
75
85
 
86
+ Quota and `/tokens_*` output are computed from local OpenCode session history.
87
+
76
88
  ## Commands
77
89
 
78
90
  | Command | What it shows |
@@ -135,6 +147,7 @@ If Alibaba Coding Plan auth does not include a `tier`, you can set the fallback
135
147
  | --- | --- | --- |
136
148
  | GitHub Copilot | Usually yes | Add `copilot-quota-token.json` only for managed org or enterprise billing |
137
149
  | OpenAI | Yes | None |
150
+ | Cursor | Needs `opencode-cursor` | Optional `cursorPlan`, `cursorIncludedApiUsd`, and `cursorBillingCycleStartDay` for monthly API budget tracking |
138
151
  | Qwen Code | Needs `opencode-qwencode-auth` | Local free-tier request estimation |
139
152
  | Alibaba Coding Plan | Yes | Local request-count estimation |
140
153
  | Firmware AI | Usually yes | Optional API key |
@@ -198,6 +211,57 @@ No extra setup is required if OpenCode already has OpenAI or ChatGPT auth config
198
211
 
199
212
  </details>
200
213
 
214
+ <details>
215
+ <summary><strong>Cursor</strong></summary>
216
+
217
+ Cursor support requires the `opencode-cursor` plugin and stays local-only and deterministic once `@rama_nigg/open-cursor` is installed in OpenCode.
218
+
219
+ Recommended install path:
220
+
221
+ - Follow Option B from the upstream [`opencode-cursor` README](https://github.com/Nomadcxx/opencode-cursor).
222
+ - Keep the Cursor model list in sync with `cursor-agent models`.
223
+
224
+ Current behavior:
225
+
226
+ - Detects Cursor usage from OpenCode history when the current model or stored message model is `cursor-acp/*`
227
+ - `/tokens_*` maps Cursor API-pool models into official pricing and uses bundled static rates for `auto` and `composer*`
228
+ - `/quota` and toasts estimate the current billing-cycle spend from local OpenCode history
229
+ - Percentage remaining is shown only when you configure `cursorPlan` or `cursorIncludedApiUsd`
230
+ - Billing cycle defaults to the local calendar month unless you set `cursorBillingCycleStartDay`
231
+
232
+ Notes:
233
+
234
+ - Session cookies and Cursor team APIs are not required for this local reporting path
235
+ - Unknown future Cursor model ids are surfaced in `/quota_status` under Cursor diagnostics and `unknown_pricing`
236
+
237
+ Example config for a personal Pro account:
238
+
239
+ ```jsonc
240
+ {
241
+ "experimental": {
242
+ "quotaToast": {
243
+ "cursorPlan": "pro",
244
+ "cursorBillingCycleStartDay": 7
245
+ }
246
+ }
247
+ }
248
+ ```
249
+
250
+ If you need a custom included API budget, override it directly:
251
+
252
+ ```jsonc
253
+ {
254
+ "experimental": {
255
+ "quotaToast": {
256
+ "cursorPlan": "none",
257
+ "cursorIncludedApiUsd": 120
258
+ }
259
+ }
260
+ }
261
+ ```
262
+
263
+ </details>
264
+
201
265
  <details>
202
266
  <summary><strong>Qwen Code</strong></summary>
203
267
 
@@ -326,17 +390,21 @@ All plugin settings live under `experimental.quotaToast`.
326
390
  | `layout.tinyAt` | `32` | Tiny layout breakpoint |
327
391
  | `googleModels` | `["CLAUDE"]` | Google model keys: `CLAUDE`, `G3PRO`, `G3FLASH`, `G3IMAGE` |
328
392
  | `alibabaCodingPlanTier` | `"lite"` | Fallback Alibaba Coding Plan tier when auth does not include `tier` |
393
+ | `cursorPlan` | `"none"` | Cursor included API budget preset: `none`, `pro`, `pro-plus`, `ultra` |
394
+ | `cursorIncludedApiUsd` | unset | Override Cursor monthly included API budget in USD |
395
+ | `cursorBillingCycleStartDay` | unset | Local billing-cycle anchor day `1..28`; when unset, Cursor usage resets on the local calendar month |
329
396
  | `debug` | `false` | Include debug context in toast output |
330
397
 
331
398
  ## Token Pricing Snapshot
332
399
 
333
- `/tokens_*` uses a local `models.dev` pricing snapshot.
400
+ `/tokens_*` uses a local `models.dev` pricing snapshot plus bundled static Cursor pricing for Cursor-only pool models.
334
401
 
335
402
  Behavior:
336
403
 
337
404
  - A bundled snapshot ships with the plugin for offline use.
338
405
  - The plugin can refresh the local runtime snapshot when the data is stale.
339
406
  - Reports continue to work if refresh fails.
407
+ - Cursor `auto` and `composer*` pricing is bundled in the plugin because those ids are not on `models.dev`.
340
408
 
341
409
  Useful environment variables:
342
410
 
@@ -388,7 +456,7 @@ If you are using an agent to install the plugin for you, the safe default is:
388
456
 
389
457
  Then verify with `/quota_status`.
390
458
 
391
- Only add explicit `enabledProviders` if you want to limit which providers are queried. Only add companion plugins when the user actually uses Google Antigravity or Qwen Code.
459
+ Only add explicit `enabledProviders` if you want to limit which providers are queried. Only add companion plugins when the user actually uses Google Antigravity or Qwen Code, and only add `@rama_nigg/open-cursor` when the user actually uses Cursor models in OpenCode.
392
460
 
393
461
  ## License
394
462
 
@@ -397,3 +465,13 @@ MIT
397
465
  ## Remarks
398
466
 
399
467
  Opencode Quota is not built by the OpenCode team and is not affiliated with OpenCode or any provider listed above.
468
+
469
+ ## Star History
470
+
471
+ <a href="https://www.star-history.com/?repos=slkiser%2Fopencode-quota&type=date&legend=bottom-right">
472
+ <picture>
473
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=slkiser/opencode-quota&type=date&theme=dark&legend=bottom-right" />
474
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=slkiser/opencode-quota&type=date&legend=bottom-right" />
475
+ <img alt="Star History Chart" src="https://api.star-history.com/image?repos=slkiser/opencode-quota&type=date&legend=bottom-right" />
476
+ </picture>
477
+ </a>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_meta": {
3
- "generatedAt": 1772498852258,
3
+ "generatedAt": 1773949200336,
4
4
  "providers": [
5
5
  "anthropic",
6
6
  "google",
@@ -256,6 +256,16 @@
256
256
  "output": 12,
257
257
  "cache_read": 0.2
258
258
  },
259
+ "gemini-3.1-flash-image-preview": {
260
+ "input": 0.25,
261
+ "output": 60
262
+ },
263
+ "gemini-3.1-flash-lite-preview": {
264
+ "input": 0.25,
265
+ "output": 1.5,
266
+ "cache_read": 0.025,
267
+ "cache_write": 1
268
+ },
259
269
  "gemini-3.1-pro-preview": {
260
270
  "input": 2,
261
271
  "output": 12,
@@ -461,6 +471,25 @@
461
471
  "output": 14,
462
472
  "cache_read": 0.175
463
473
  },
474
+ "gpt-5.4": {
475
+ "input": 2.5,
476
+ "output": 15,
477
+ "cache_read": 0.25
478
+ },
479
+ "gpt-5.4-mini": {
480
+ "input": 0.75,
481
+ "output": 4.5,
482
+ "cache_read": 0.075
483
+ },
484
+ "gpt-5.4-nano": {
485
+ "input": 0.2,
486
+ "output": 1.25,
487
+ "cache_read": 0.02
488
+ },
489
+ "gpt-5.4-pro": {
490
+ "input": 30,
491
+ "output": 180
492
+ },
464
493
  "o1": {
465
494
  "input": 15,
466
495
  "output": 60,
@@ -618,6 +647,21 @@
618
647
  "output": 0.5,
619
648
  "cache_read": 0.05
620
649
  },
650
+ "grok-4.20-beta-latest-non-reasoning": {
651
+ "input": 2,
652
+ "output": 6,
653
+ "cache_read": 0.2
654
+ },
655
+ "grok-4.20-beta-latest-reasoning": {
656
+ "input": 2,
657
+ "output": 6,
658
+ "cache_read": 0.2
659
+ },
660
+ "grok-4.20-multi-agent-beta-latest": {
661
+ "input": 2,
662
+ "output": 6,
663
+ "cache_read": 0.2
664
+ },
621
665
  "grok-beta": {
622
666
  "input": 5,
623
667
  "output": 15,
@@ -684,6 +728,12 @@
684
728
  "output": 3.2,
685
729
  "cache_read": 0.2,
686
730
  "cache_write": 0
731
+ },
732
+ "glm-5-turbo": {
733
+ "input": 1.2,
734
+ "output": 4,
735
+ "cache_read": 0.24,
736
+ "cache_write": 0
687
737
  }
688
738
  }
689
739
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAWlE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAgBD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IACN,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE;gBAAE,YAAY,CAAC,EAAE;oBAAE,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;KAC9F,CAAC;CACH,EACD,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAoL3B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAmB,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAWnF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAuBD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IACN,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE;gBAAE,YAAY,CAAC,EAAE;oBAAE,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;KAC9F,CAAC;CACH,EACD,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAoM3B"}
@@ -20,6 +20,10 @@ export function createLoadConfigMeta() {
20
20
  function isValidGoogleModelId(id) {
21
21
  return typeof id === "string" && ["G3PRO", "G3FLASH", "CLAUDE", "G3IMAGE"].includes(id);
22
22
  }
23
+ function isValidCursorQuotaPlan(plan) {
24
+ return (typeof plan === "string" &&
25
+ ["none", "pro", "pro-plus", "ultra"].includes(plan));
26
+ }
23
27
  /**
24
28
  * Remove duplicates from an array while preserving order
25
29
  */
@@ -65,6 +69,20 @@ export async function loadConfig(client, meta) {
65
69
  quotaToastConfig.alibabaCodingPlanTier === "pro"
66
70
  ? quotaToastConfig.alibabaCodingPlanTier
67
71
  : DEFAULT_CONFIG.alibabaCodingPlanTier,
72
+ cursorPlan: isValidCursorQuotaPlan(quotaToastConfig.cursorPlan)
73
+ ? quotaToastConfig.cursorPlan
74
+ : DEFAULT_CONFIG.cursorPlan,
75
+ cursorIncludedApiUsd: typeof quotaToastConfig.cursorIncludedApiUsd === "number" &&
76
+ Number.isFinite(quotaToastConfig.cursorIncludedApiUsd) &&
77
+ quotaToastConfig.cursorIncludedApiUsd > 0
78
+ ? quotaToastConfig.cursorIncludedApiUsd
79
+ : undefined,
80
+ cursorBillingCycleStartDay: typeof quotaToastConfig.cursorBillingCycleStartDay === "number" &&
81
+ Number.isInteger(quotaToastConfig.cursorBillingCycleStartDay) &&
82
+ quotaToastConfig.cursorBillingCycleStartDay >= 1 &&
83
+ quotaToastConfig.cursorBillingCycleStartDay <= 28
84
+ ? quotaToastConfig.cursorBillingCycleStartDay
85
+ : undefined,
68
86
  showOnIdle: typeof quotaToastConfig.showOnIdle === "boolean"
69
87
  ? quotaToastConfig.showOnIdle
70
88
  : DEFAULT_CONFIG.showOnIdle,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAO9E,MAAM,UAAU,oBAAoB;IAClC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,EAAW;IACvC,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAa;IAC3C,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACpD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAI,IAAS;IAC1B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAIC,EACD,IAAqB;IAErB,SAAS,SAAS,CAChB,gBAA8D;QAE9D,IAAI,CAAC,gBAAgB;YAAE,OAAO,cAAc,CAAC;QAE7C,MAAM,MAAM,GAAqB;YAC/B,OAAO,EACL,OAAO,gBAAgB,CAAC,OAAO,KAAK,SAAS;gBAC3C,CAAC,CAAC,gBAAgB,CAAC,OAAO;gBAC1B,CAAC,CAAC,cAAc,CAAC,OAAO;YAE5B,WAAW,EACT,OAAO,gBAAgB,CAAC,WAAW,KAAK,SAAS;gBAC/C,CAAC,CAAC,gBAAgB,CAAC,WAAW;gBAC9B,CAAC,CAAC,cAAc,CAAC,WAAW;YAEhC,UAAU,EACR,gBAAgB,CAAC,UAAU,KAAK,SAAS,IAAI,gBAAgB,CAAC,UAAU,KAAK,SAAS;gBACpF,CAAC,CAAC,gBAAgB,CAAC,UAAU;gBAC7B,CAAC,CAAC,cAAc,CAAC,UAAU;YAC/B,aAAa,EACX,OAAO,gBAAgB,CAAC,aAAa,KAAK,QAAQ,IAAI,gBAAgB,CAAC,aAAa,GAAG,CAAC;gBACtF,CAAC,CAAC,gBAAgB,CAAC,aAAa;gBAChC,CAAC,CAAC,cAAc,CAAC,aAAa;YAElC,KAAK,EACH,OAAO,gBAAgB,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK;YAE7F,gBAAgB,EACd,gBAAgB,CAAC,gBAAgB,KAAK,MAAM;gBAC1C,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;oBAChD,CAAC,CAAC,MAAM,CACJ,gBAAgB,CAAC,gBAAgB;yBAC9B,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;yBACjD,GAAG,CAAC,wBAAwB,CAAC;yBAC7B,MAAM,CAAC,OAAO,CAAC,CACnB;oBACH,CAAC,CAAC,cAAc,CAAC,gBAAgB;YACvC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC;gBACxD,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC;gBAC5D,CAAC,CAAC,cAAc,CAAC,YAAY;YAC/B,qBAAqB,EACnB,gBAAgB,CAAC,qBAAqB,KAAK,MAAM;gBACjD,gBAAgB,CAAC,qBAAqB,KAAK,KAAK;gBAC9C,CAAC,CAAC,gBAAgB,CAAC,qBAAqB;gBACxC,CAAC,CAAC,cAAc,CAAC,qBAAqB;YAC1C,UAAU,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,CAAC;gBAC7D,CAAC,CAAC,gBAAgB,CAAC,UAAU;gBAC7B,CAAC,CAAC,cAAc,CAAC,UAAU;YAC7B,oBAAoB,EAClB,OAAO,gBAAgB,CAAC,oBAAoB,KAAK,QAAQ;gBACzD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;gBACtD,gBAAgB,CAAC,oBAAoB,GAAG,CAAC;gBACvC,CAAC,CAAC,gBAAgB,CAAC,oBAAoB;gBACvC,CAAC,CAAC,SAAS;YACf,0BAA0B,EACxB,OAAO,gBAAgB,CAAC,0BAA0B,KAAK,QAAQ;gBAC/D,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,0BAA0B,CAAC;gBAC7D,gBAAgB,CAAC,0BAA0B,IAAI,CAAC;gBAChD,gBAAgB,CAAC,0BAA0B,IAAI,EAAE;gBAC/C,CAAC,CAAC,gBAAgB,CAAC,0BAA0B;gBAC7C,CAAC,CAAC,SAAS;YACf,UAAU,EACR,OAAO,gBAAgB,CAAC,UAAU,KAAK,SAAS;gBAC9C,CAAC,CAAC,gBAAgB,CAAC,UAAU;gBAC7B,CAAC,CAAC,cAAc,CAAC,UAAU;YAC/B,cAAc,EACZ,OAAO,gBAAgB,CAAC,cAAc,KAAK,SAAS;gBAClD,CAAC,CAAC,gBAAgB,CAAC,cAAc;gBACjC,CAAC,CAAC,cAAc,CAAC,cAAc;YACnC,aAAa,EACX,OAAO,gBAAgB,CAAC,aAAa,KAAK,SAAS;gBACjD,CAAC,CAAC,gBAAgB,CAAC,aAAa;gBAChC,CAAC,CAAC,cAAc,CAAC,aAAa;YAClC,cAAc,EACZ,OAAO,gBAAgB,CAAC,cAAc,KAAK,SAAS;gBAClD,CAAC,CAAC,gBAAgB,CAAC,cAAc;gBACjC,CAAC,CAAC,cAAc,CAAC,cAAc;YACnC,eAAe,EACb,OAAO,gBAAgB,CAAC,eAAe,KAAK,QAAQ,IAAI,gBAAgB,CAAC,eAAe,GAAG,CAAC;gBAC1F,CAAC,CAAC,gBAAgB,CAAC,eAAe;gBAClC,CAAC,CAAC,cAAc,CAAC,eAAe;YACpC,gBAAgB,EACd,OAAO,gBAAgB,CAAC,gBAAgB,KAAK,SAAS;gBACpD,CAAC,CAAC,gBAAgB,CAAC,gBAAgB;gBACnC,CAAC,CAAC,cAAc,CAAC,gBAAgB;YACrC,iBAAiB,EACf,OAAO,gBAAgB,CAAC,iBAAiB,KAAK,SAAS;gBACrD,CAAC,CAAC,gBAAgB,CAAC,iBAAiB;gBACpC,CAAC,CAAC,cAAc,CAAC,iBAAiB;YACtC,MAAM,EAAE;gBACN,QAAQ,EACN,OAAO,gBAAgB,CAAC,MAAM,EAAE,QAAQ,KAAK,QAAQ;oBACrD,gBAAgB,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC;oBAClC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ;oBAClC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ;gBACpC,QAAQ,EACN,OAAO,gBAAgB,CAAC,MAAM,EAAE,QAAQ,KAAK,QAAQ;oBACrD,gBAAgB,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC;oBAClC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ;oBAClC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ;gBACpC,MAAM,EACJ,OAAO,gBAAgB,CAAC,MAAM,EAAE,MAAM,KAAK,QAAQ,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;oBACvF,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM;oBAChC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;aACnC;SACF,CAAC;QAEF,mFAAmF;QAEnF,iDAAiD;QACjD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;QACpD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,IAAY;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,UAAU,aAAa;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,+BAA+B,EAAE,CAAC;QAEzD,6CAA6C;QAC7C,8DAA8D;QAC9D,8EAA8E;QAC9E,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;QAEvC,MAAM,KAAK,GAA8B,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,KAAK,MAAM,QAAQ,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAC7B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;oBAAE,SAAS;gBAEpD,MAAM,IAAI,GAAG,MAAa,CAAC;gBAE3B,MAAM,KAAK,GAA2C;oBACpD,EAAE,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE;iBAC1E,CAAC;gBAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;wBAAE,SAAS;oBAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAE3C,2EAA2E;QAC3E,gEAAgE;QAChE,MAAM,gBAAgB,GAAI,QAAQ,CAAC,IAAY,EAAE,YAAY,EAAE,UAElD,CAAC;QAEd,IAAI,gBAAgB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YAC7D,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,KAAK,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,MAAM,aAAa,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,aAAa,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface CursorAuthPresence {
2
+ state: "missing" | "present" | "invalid";
3
+ selectedPath?: string;
4
+ presentPaths: string[];
5
+ candidatePaths: string[];
6
+ error?: string;
7
+ }
8
+ export interface CursorOpenCodeIntegration {
9
+ pluginEnabled: boolean;
10
+ providerConfigured: boolean;
11
+ matchedPaths: string[];
12
+ checkedPaths: string[];
13
+ }
14
+ export declare function getCursorAuthCandidatePaths(): string[];
15
+ export declare function inspectCursorAuthPresence(): Promise<CursorAuthPresence>;
16
+ export declare function inspectCursorOpenCodeIntegration(): Promise<CursorOpenCodeIntegration>;
17
+ //# sourceMappingURL=cursor-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-detection.d.ts","sourceRoot":"","sources":["../../src/lib/cursor-detection.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAUD,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAoBtD;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAuC7E;AAkBD,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAwC3F"}
@@ -0,0 +1,125 @@
1
+ import { existsSync } from "fs";
2
+ import { readFile } from "fs/promises";
3
+ import { homedir, platform } from "os";
4
+ import { join } from "path";
5
+ import { parseJsonOrJsonc } from "./jsonc.js";
6
+ import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
7
+ import { CURSOR_OPENCODE_PROVIDER_ID } from "./cursor-pricing.js";
8
+ function dedupe(list) {
9
+ return [...new Set(list.filter(Boolean))];
10
+ }
11
+ function getCursorHomeDir() {
12
+ return process.env.CURSOR_ACP_HOME_DIR?.trim() || homedir();
13
+ }
14
+ export function getCursorAuthCandidatePaths() {
15
+ const home = getCursorHomeDir();
16
+ const authFiles = ["cli-config.json", "auth.json"];
17
+ const paths = [];
18
+ if (platform() === "darwin") {
19
+ for (const file of authFiles)
20
+ paths.push(join(home, ".cursor", file));
21
+ for (const file of authFiles)
22
+ paths.push(join(home, ".config", "cursor", file));
23
+ }
24
+ else {
25
+ for (const file of authFiles)
26
+ paths.push(join(home, ".config", "cursor", file));
27
+ const xdgConfigHome = process.env.XDG_CONFIG_HOME?.trim();
28
+ if (xdgConfigHome && xdgConfigHome !== join(home, ".config")) {
29
+ for (const file of authFiles)
30
+ paths.push(join(xdgConfigHome, "cursor", file));
31
+ }
32
+ for (const file of authFiles)
33
+ paths.push(join(home, ".cursor", file));
34
+ }
35
+ return dedupe(paths);
36
+ }
37
+ export async function inspectCursorAuthPresence() {
38
+ const candidatePaths = getCursorAuthCandidatePaths();
39
+ const presentPaths = candidatePaths.filter((path) => existsSync(path));
40
+ let invalidPath;
41
+ let invalidError;
42
+ for (const path of presentPaths) {
43
+ try {
44
+ const raw = await readFile(path, "utf8");
45
+ const parsed = JSON.parse(raw);
46
+ if (parsed && typeof parsed === "object") {
47
+ return {
48
+ state: "present",
49
+ selectedPath: path,
50
+ presentPaths,
51
+ candidatePaths,
52
+ };
53
+ }
54
+ }
55
+ catch (error) {
56
+ invalidPath ??= path;
57
+ invalidError ??= error instanceof Error ? error.message : String(error);
58
+ }
59
+ }
60
+ if (invalidPath) {
61
+ return {
62
+ state: "invalid",
63
+ selectedPath: invalidPath,
64
+ presentPaths,
65
+ candidatePaths,
66
+ error: invalidError,
67
+ };
68
+ }
69
+ return {
70
+ state: "missing",
71
+ presentPaths,
72
+ candidatePaths,
73
+ };
74
+ }
75
+ function pluginIncludesCursor(value) {
76
+ if (typeof value !== "string")
77
+ return false;
78
+ const normalized = value.trim().toLowerCase();
79
+ return (normalized === CURSOR_OPENCODE_PROVIDER_ID ||
80
+ normalized === "open-cursor" ||
81
+ normalized === "@rama_nigg/open-cursor" ||
82
+ normalized.endsWith("/open-cursor"));
83
+ }
84
+ function providerConfigIncludesCursor(value) {
85
+ if (!value || typeof value !== "object")
86
+ return false;
87
+ return Object.prototype.hasOwnProperty.call(value, CURSOR_OPENCODE_PROVIDER_ID);
88
+ }
89
+ export async function inspectCursorOpenCodeIntegration() {
90
+ const { configDirs } = getOpencodeRuntimeDirCandidates();
91
+ const checkedPaths = dedupe([...configDirs, process.cwd()].flatMap((dir) => [
92
+ join(dir, "opencode.json"),
93
+ join(dir, "opencode.jsonc"),
94
+ ]));
95
+ const matchedPaths = [];
96
+ let pluginEnabled = false;
97
+ let providerConfigured = false;
98
+ for (const path of checkedPaths) {
99
+ if (!existsSync(path))
100
+ continue;
101
+ try {
102
+ const raw = await readFile(path, "utf8");
103
+ const parsed = parseJsonOrJsonc(raw, path.endsWith(".jsonc"));
104
+ const plugin = Array.isArray(parsed?.plugin) ? parsed.plugin : [];
105
+ const provider = parsed?.provider;
106
+ const matchedPlugin = plugin.some(pluginIncludesCursor);
107
+ const matchedProvider = providerConfigIncludesCursor(provider);
108
+ if (matchedPlugin || matchedProvider) {
109
+ matchedPaths.push(path);
110
+ }
111
+ pluginEnabled ||= matchedPlugin;
112
+ providerConfigured ||= matchedProvider;
113
+ }
114
+ catch {
115
+ // Ignore invalid user configs here and let status output show missing matches.
116
+ }
117
+ }
118
+ return {
119
+ pluginEnabled,
120
+ providerConfigured,
121
+ matchedPaths,
122
+ checkedPaths,
123
+ };
124
+ }
125
+ //# sourceMappingURL=cursor-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-detection.js","sourceRoot":"","sources":["../../src/lib/cursor-detection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { CursorQuotaPlan } from "./types.js";
2
+ import type { CostBuckets } from "./modelsdev-pricing.js";
3
+ export type CursorLocalPricingModel = "auto" | "composer-1" | "composer-1.5" | "composer-2" | "composer-2-fast";
4
+ export type CursorResolvedModel = {
5
+ kind: "local";
6
+ model: CursorLocalPricingModel;
7
+ pool: "auto_composer";
8
+ } | {
9
+ kind: "official";
10
+ providerHint: string;
11
+ modelHint: string;
12
+ pool: "api";
13
+ } | {
14
+ kind: "unknown";
15
+ };
16
+ export declare const CURSOR_PROVIDER_ID = "cursor";
17
+ export declare const CURSOR_OPENCODE_PROVIDER_ID = "cursor-acp";
18
+ export declare const CURSOR_INCLUDED_API_USD_BY_PLAN: Readonly<Record<Exclude<CursorQuotaPlan, "none">, number>>;
19
+ export declare const CURSOR_OFFICIAL_MODEL_ALIASES: Readonly<Record<string, {
20
+ providerHint: string;
21
+ modelHint: string;
22
+ }>>;
23
+ export declare function isCursorProviderId(raw?: string): boolean;
24
+ export declare function isCursorModelId(raw?: string): boolean;
25
+ export declare function extractCursorModelPart(rawModelId: string): string;
26
+ export declare function getCursorPlanDisplayName(plan: CursorQuotaPlan): string | null;
27
+ export declare function getEffectiveCursorIncludedApiUsd(params: {
28
+ plan: CursorQuotaPlan;
29
+ overrideUsd?: number;
30
+ }): number | undefined;
31
+ export declare function lookupCursorLocalCost(model: string): CostBuckets | null;
32
+ export declare function resolveCursorModel(rawModelId?: string): CursorResolvedModel;
33
+ //# sourceMappingURL=cursor-pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-pricing.d.ts","sourceRoot":"","sources":["../../src/lib/cursor-pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAC/B,MAAM,GACN,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,iBAAiB,CAAC;AAEtB,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAC3C,eAAO,MAAM,2BAA2B,eAAe,CAAC;AAExD,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAItG,CAAC;AA8CF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAClD,MAAM,CAAC,MAAM,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB5D,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAW7E;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACvD,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,GAAG,SAAS,CAMrB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAEvE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAqB3E"}
@@ -0,0 +1,131 @@
1
+ export const CURSOR_PROVIDER_ID = "cursor";
2
+ export const CURSOR_OPENCODE_PROVIDER_ID = "cursor-acp";
3
+ export const CURSOR_INCLUDED_API_USD_BY_PLAN = {
4
+ pro: 20,
5
+ "pro-plus": 70,
6
+ ultra: 400,
7
+ };
8
+ const CURSOR_PROVIDER_IDS = new Set([
9
+ CURSOR_PROVIDER_ID,
10
+ CURSOR_OPENCODE_PROVIDER_ID,
11
+ "open-cursor",
12
+ "@rama_nigg/open-cursor",
13
+ ]);
14
+ const CURSOR_LOCAL_PRICING = {
15
+ auto: {
16
+ input: 1.25,
17
+ output: 6,
18
+ cache_read: 0.25,
19
+ },
20
+ "composer-1": {
21
+ input: 1.25,
22
+ output: 10,
23
+ cache_read: 0.125,
24
+ },
25
+ "composer-1.5": {
26
+ input: 3.5,
27
+ output: 17.5,
28
+ cache_read: 0.35,
29
+ },
30
+ "composer-2": {
31
+ input: 0.5,
32
+ output: 2.5,
33
+ cache_read: 0.2,
34
+ },
35
+ "composer-2-fast": {
36
+ input: 1.5,
37
+ output: 7.5,
38
+ cache_read: 0.35,
39
+ },
40
+ };
41
+ const CURSOR_LOCAL_MODEL_ALIASES = {
42
+ auto: "auto",
43
+ "default[]": "auto",
44
+ "composer-1": "composer-1",
45
+ "composer-1.5": "composer-1.5",
46
+ "composer-2": "composer-2",
47
+ "composer-2-fast": "composer-2-fast",
48
+ };
49
+ export const CURSOR_OFFICIAL_MODEL_ALIASES = {
50
+ "gemini-3-flash": { providerHint: "google", modelHint: "gemini-3-flash-preview" },
51
+ "gemini-3-pro": { providerHint: "google", modelHint: "gemini-3-pro-preview" },
52
+ "gemini-3.1-pro": { providerHint: "google", modelHint: "gemini-3.1-pro-preview" },
53
+ "gpt-5.2": { providerHint: "openai", modelHint: "gpt-5.2" },
54
+ "gpt-5.3-codex": { providerHint: "openai", modelHint: "gpt-5.3-codex" },
55
+ "gpt-5.4": { providerHint: "openai", modelHint: "gpt-5.4" },
56
+ "gpt-5.4-high": { providerHint: "openai", modelHint: "gpt-5.4" },
57
+ "gpt-5.4-medium": { providerHint: "openai", modelHint: "gpt-5.4" },
58
+ grok: { providerHint: "xai", modelHint: "grok-code-fast-1" },
59
+ "kimi-k2.5": { providerHint: "moonshotai", modelHint: "kimi-k2.5" },
60
+ "opus-4.5": { providerHint: "anthropic", modelHint: "claude-opus-4-5" },
61
+ "opus-4.5-thinking": { providerHint: "anthropic", modelHint: "claude-opus-4-5" },
62
+ "opus-4.6": { providerHint: "anthropic", modelHint: "claude-opus-4-6" },
63
+ "opus-4.6-thinking": { providerHint: "anthropic", modelHint: "claude-opus-4-6" },
64
+ "premium-routing": { providerHint: "cursor", modelHint: "premium-routing" },
65
+ "sonnet-4.5": { providerHint: "anthropic", modelHint: "claude-sonnet-4-5" },
66
+ "sonnet-4.5-thinking": { providerHint: "anthropic", modelHint: "claude-sonnet-4-5" },
67
+ "sonnet-4.6": { providerHint: "anthropic", modelHint: "claude-sonnet-4-6" },
68
+ "sonnet-4.6-thinking": { providerHint: "anthropic", modelHint: "claude-sonnet-4-6" },
69
+ };
70
+ export function isCursorProviderId(raw) {
71
+ if (!raw || typeof raw !== "string")
72
+ return false;
73
+ return CURSOR_PROVIDER_IDS.has(raw.trim().toLowerCase());
74
+ }
75
+ export function isCursorModelId(raw) {
76
+ if (!raw || typeof raw !== "string")
77
+ return false;
78
+ const normalized = raw.trim().toLowerCase();
79
+ return normalized.startsWith(`${CURSOR_OPENCODE_PROVIDER_ID}/`) || normalized.startsWith("cursor/");
80
+ }
81
+ export function extractCursorModelPart(rawModelId) {
82
+ const trimmed = rawModelId.trim();
83
+ const lastSlash = trimmed.lastIndexOf("/");
84
+ if (lastSlash === -1)
85
+ return trimmed.toLowerCase();
86
+ return trimmed.slice(lastSlash + 1).trim().toLowerCase();
87
+ }
88
+ export function getCursorPlanDisplayName(plan) {
89
+ switch (plan) {
90
+ case "pro":
91
+ return "Pro";
92
+ case "pro-plus":
93
+ return "Pro Plus";
94
+ case "ultra":
95
+ return "Ultra";
96
+ default:
97
+ return null;
98
+ }
99
+ }
100
+ export function getEffectiveCursorIncludedApiUsd(params) {
101
+ if (typeof params.overrideUsd === "number" && Number.isFinite(params.overrideUsd) && params.overrideUsd > 0) {
102
+ return params.overrideUsd;
103
+ }
104
+ if (params.plan === "none")
105
+ return undefined;
106
+ return CURSOR_INCLUDED_API_USD_BY_PLAN[params.plan];
107
+ }
108
+ export function lookupCursorLocalCost(model) {
109
+ return CURSOR_LOCAL_PRICING[model] ?? null;
110
+ }
111
+ export function resolveCursorModel(rawModelId) {
112
+ if (!rawModelId || typeof rawModelId !== "string")
113
+ return { kind: "unknown" };
114
+ const model = extractCursorModelPart(rawModelId);
115
+ if (!model)
116
+ return { kind: "unknown" };
117
+ const localModel = CURSOR_LOCAL_MODEL_ALIASES[model];
118
+ if (localModel) {
119
+ return {
120
+ kind: "local",
121
+ model: localModel,
122
+ pool: "auto_composer",
123
+ };
124
+ }
125
+ const official = CURSOR_OFFICIAL_MODEL_ALIASES[model];
126
+ if (!official || official.providerHint === "cursor") {
127
+ return { kind: "unknown" };
128
+ }
129
+ return { kind: "official", ...official, pool: "api" };
130
+ }
131
+ //# sourceMappingURL=cursor-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-pricing.js","sourceRoot":"","sources":["../../src/lib/cursor-pricing.ts"],"names":[],"mappings":"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"}