@slkiser/opencode-quota 2.6.1 → 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 (54) 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/copilot.d.ts.map +1 -1
  7. package/dist/lib/copilot.js +21 -1
  8. package/dist/lib/copilot.js.map +1 -1
  9. package/dist/lib/cursor-detection.d.ts +17 -0
  10. package/dist/lib/cursor-detection.d.ts.map +1 -0
  11. package/dist/lib/cursor-detection.js +125 -0
  12. package/dist/lib/cursor-detection.js.map +1 -0
  13. package/dist/lib/cursor-pricing.d.ts +33 -0
  14. package/dist/lib/cursor-pricing.d.ts.map +1 -0
  15. package/dist/lib/cursor-pricing.js +131 -0
  16. package/dist/lib/cursor-pricing.js.map +1 -0
  17. package/dist/lib/cursor-usage.d.ts +32 -0
  18. package/dist/lib/cursor-usage.d.ts.map +1 -0
  19. package/dist/lib/cursor-usage.js +127 -0
  20. package/dist/lib/cursor-usage.js.map +1 -0
  21. package/dist/lib/entries.d.ts +4 -0
  22. package/dist/lib/entries.d.ts.map +1 -1
  23. package/dist/lib/entries.js +0 -6
  24. package/dist/lib/entries.js.map +1 -1
  25. package/dist/lib/provider-metadata.d.ts.map +1 -1
  26. package/dist/lib/provider-metadata.js +4 -0
  27. package/dist/lib/provider-metadata.js.map +1 -1
  28. package/dist/lib/quota-stats.d.ts +1 -1
  29. package/dist/lib/quota-stats.d.ts.map +1 -1
  30. package/dist/lib/quota-stats.js +26 -14
  31. package/dist/lib/quota-stats.js.map +1 -1
  32. package/dist/lib/quota-status.d.ts +4 -0
  33. package/dist/lib/quota-status.d.ts.map +1 -1
  34. package/dist/lib/quota-status.js +49 -1
  35. package/dist/lib/quota-status.js.map +1 -1
  36. package/dist/lib/token-cost.d.ts +10 -0
  37. package/dist/lib/token-cost.d.ts.map +1 -0
  38. package/dist/lib/token-cost.js +16 -0
  39. package/dist/lib/token-cost.js.map +1 -0
  40. package/dist/lib/types.d.ts +4 -0
  41. package/dist/lib/types.d.ts.map +1 -1
  42. package/dist/lib/types.js +1 -0
  43. package/dist/lib/types.js.map +1 -1
  44. package/dist/plugin.d.ts.map +1 -1
  45. package/dist/plugin.js +95 -26
  46. package/dist/plugin.js.map +1 -1
  47. package/dist/providers/cursor.d.ts +3 -0
  48. package/dist/providers/cursor.d.ts.map +1 -0
  49. package/dist/providers/cursor.js +136 -0
  50. package/dist/providers/cursor.js.map +1 -0
  51. package/dist/providers/registry.d.ts.map +1 -1
  52. package/dist/providers/registry.js +2 -0
  53. package/dist/providers/registry.js.map +1 -1
  54. package/package.json +1 -1
@@ -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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"}
@@ -0,0 +1,32 @@
1
+ import type { TokenBuckets } from "./quota-stats.js";
2
+ export interface CursorCycleWindow {
3
+ sinceMs: number;
4
+ untilMs: number;
5
+ resetTimeIso: string;
6
+ source: "configured_day" | "calendar_month";
7
+ }
8
+ export interface CursorUsageBucket {
9
+ costUsd: number;
10
+ tokens: TokenBuckets;
11
+ messageCount: number;
12
+ }
13
+ export interface CursorUsageSummary {
14
+ window: CursorCycleWindow;
15
+ api: CursorUsageBucket;
16
+ autoComposer: CursorUsageBucket;
17
+ total: CursorUsageBucket;
18
+ unknownModels: Array<{
19
+ sourceModelID: string;
20
+ messageCount: number;
21
+ tokens: TokenBuckets;
22
+ }>;
23
+ }
24
+ export declare function computeCursorCycleWindow(params?: {
25
+ nowMs?: number;
26
+ billingCycleStartDay?: number;
27
+ }): CursorCycleWindow;
28
+ export declare function getCurrentCursorUsageSummary(params?: {
29
+ nowMs?: number;
30
+ billingCycleStartDay?: number;
31
+ }): Promise<CursorUsageSummary>;
32
+ //# sourceMappingURL=cursor-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-usage.d.ts","sourceRoot":"","sources":["../../src/lib/cursor-usage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAUrD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,GAAG,EAAE,iBAAiB,CAAC;IACvB,YAAY,EAAE,iBAAiB,CAAC;IAChC,KAAK,EAAE,iBAAiB,CAAC;IACzB,aAAa,EAAE,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;CAC7F;AA0CD,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,GAAG,iBAAiB,CA4BpB;AAED,wBAAsB,4BAA4B,CAAC,MAAM,CAAC,EAAE;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+D9B"}
@@ -0,0 +1,127 @@
1
+ import { lookupCost } from "./modelsdev-pricing.js";
2
+ import { iterAssistantMessages } from "./opencode-storage.js";
3
+ import { resolvePricingKey } from "./quota-stats.js";
4
+ import { isCursorModelId, isCursorProviderId, lookupCursorLocalCost, resolveCursorModel, } from "./cursor-pricing.js";
5
+ import { calculateUsdFromTokenBuckets } from "./token-cost.js";
6
+ function emptyBuckets() {
7
+ return { input: 0, output: 0, reasoning: 0, cache_read: 0, cache_write: 0 };
8
+ }
9
+ function emptyUsageBucket() {
10
+ return { costUsd: 0, tokens: emptyBuckets(), messageCount: 0 };
11
+ }
12
+ function addBuckets(a, b) {
13
+ return {
14
+ input: a.input + b.input,
15
+ output: a.output + b.output,
16
+ reasoning: a.reasoning + b.reasoning,
17
+ cache_read: a.cache_read + b.cache_read,
18
+ cache_write: a.cache_write + b.cache_write,
19
+ };
20
+ }
21
+ function messageBuckets(msg) {
22
+ const t = msg.tokens;
23
+ if (!t)
24
+ return emptyBuckets();
25
+ return {
26
+ input: typeof t.input === "number" ? t.input : 0,
27
+ output: typeof t.output === "number" ? t.output : 0,
28
+ reasoning: typeof t.reasoning === "number" ? t.reasoning : 0,
29
+ cache_read: typeof t.cache?.read === "number" ? t.cache.read : 0,
30
+ cache_write: typeof t.cache?.write === "number" ? t.cache.write : 0,
31
+ };
32
+ }
33
+ function accumulateBucket(bucket, tokens, costUsd) {
34
+ bucket.tokens = addBuckets(bucket.tokens, tokens);
35
+ bucket.costUsd += costUsd;
36
+ bucket.messageCount += 1;
37
+ }
38
+ function isCursorMessage(msg) {
39
+ return isCursorProviderId(msg.providerID) || isCursorModelId(msg.modelID);
40
+ }
41
+ export function computeCursorCycleWindow(params) {
42
+ const nowMs = params?.nowMs ?? Date.now();
43
+ const now = new Date(nowMs);
44
+ const day = params?.billingCycleStartDay;
45
+ if (typeof day === "number" && Number.isInteger(day) && day >= 1 && day <= 28) {
46
+ const currentMonthStart = new Date(now.getFullYear(), now.getMonth(), day);
47
+ const start = nowMs >= currentMonthStart.getTime()
48
+ ? currentMonthStart
49
+ : new Date(now.getFullYear(), now.getMonth() - 1, day);
50
+ const reset = new Date(start.getFullYear(), start.getMonth() + 1, day);
51
+ return {
52
+ sinceMs: start.getTime(),
53
+ untilMs: reset.getTime(),
54
+ resetTimeIso: reset.toISOString(),
55
+ source: "configured_day",
56
+ };
57
+ }
58
+ const start = new Date(now.getFullYear(), now.getMonth(), 1);
59
+ const reset = new Date(now.getFullYear(), now.getMonth() + 1, 1);
60
+ return {
61
+ sinceMs: start.getTime(),
62
+ untilMs: reset.getTime(),
63
+ resetTimeIso: reset.toISOString(),
64
+ source: "calendar_month",
65
+ };
66
+ }
67
+ export async function getCurrentCursorUsageSummary(params) {
68
+ const nowMs = params?.nowMs ?? Date.now();
69
+ const window = computeCursorCycleWindow({
70
+ nowMs,
71
+ billingCycleStartDay: params?.billingCycleStartDay,
72
+ });
73
+ const messages = await iterAssistantMessages({ sinceMs: window.sinceMs, untilMs: nowMs });
74
+ const api = emptyUsageBucket();
75
+ const autoComposer = emptyUsageBucket();
76
+ const total = emptyUsageBucket();
77
+ const unknownModels = new Map();
78
+ for (const msg of messages) {
79
+ if (!isCursorMessage(msg))
80
+ continue;
81
+ const sourceModelID = msg.modelID ?? "unknown";
82
+ const tokens = messageBuckets(msg);
83
+ const resolved = resolveCursorModel(sourceModelID);
84
+ if (resolved.kind === "local") {
85
+ const cost = lookupCursorLocalCost(resolved.model);
86
+ if (!cost)
87
+ continue;
88
+ const costUsd = calculateUsdFromTokenBuckets(cost, tokens);
89
+ accumulateBucket(autoComposer, tokens, costUsd);
90
+ accumulateBucket(total, tokens, costUsd);
91
+ continue;
92
+ }
93
+ if (resolved.kind === "official") {
94
+ const mapped = resolvePricingKey({
95
+ providerID: resolved.providerHint,
96
+ modelID: `${resolved.providerHint}/${resolved.modelHint}`,
97
+ });
98
+ if (mapped.ok) {
99
+ const cost = lookupCost(mapped.key.provider, mapped.key.model);
100
+ if (cost) {
101
+ const costUsd = calculateUsdFromTokenBuckets(cost, tokens);
102
+ accumulateBucket(api, tokens, costUsd);
103
+ accumulateBucket(total, tokens, costUsd);
104
+ continue;
105
+ }
106
+ }
107
+ }
108
+ total.tokens = addBuckets(total.tokens, tokens);
109
+ total.messageCount += 1;
110
+ const existing = unknownModels.get(sourceModelID);
111
+ if (existing) {
112
+ existing.tokens = addBuckets(existing.tokens, tokens);
113
+ existing.messageCount += 1;
114
+ }
115
+ else {
116
+ unknownModels.set(sourceModelID, { sourceModelID, messageCount: 1, tokens });
117
+ }
118
+ }
119
+ return {
120
+ window,
121
+ api,
122
+ autoComposer,
123
+ total,
124
+ unknownModels: [...unknownModels.values()].sort((a, b) => b.messageCount - a.messageCount),
125
+ };
126
+ }
127
+ //# sourceMappingURL=cursor-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-usage.js","sourceRoot":"","sources":["../../src/lib/cursor-usage.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { CursorQuotaPlan } from "./types.js";
1
2
  /**
2
3
  * Normalized quota output model.
3
4
  *
@@ -83,6 +84,9 @@ export interface QuotaProviderContext {
83
84
  config: {
84
85
  googleModels: string[];
85
86
  alibabaCodingPlanTier: "lite" | "pro";
87
+ cursorPlan: CursorQuotaPlan;
88
+ cursorIncludedApiUsd?: number;
89
+ cursorBillingCycleStartDay?: number;
86
90
  toastStyle?: "classic" | "grouped";
87
91
  onlyCurrentModel?: boolean;
88
92
  currentModel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,3 @@
1
- /**
2
- * Normalized quota output model.
3
- *
4
- * Providers should map their internal quota shapes into these types so that
5
- * formatting and toast display stays universal across providers.
6
- */
7
1
  export function isValueEntry(e) {
8
2
  return e.kind === "value";
9
3
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0CH,MAAM,UAAU,YAAY,CAC1B,CAAkB;IAElB,OAAQ,CAAS,CAAC,IAAI,KAAK,OAAO,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,CAAkB;IAElB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"AAiDA,MAAM,UAAU,YAAY,CAC1B,CAAkB;IAElB,OAAQ,CAAS,CAAC,IAAI,KAAK,OAAO,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,CAAkB;IAElB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-metadata.d.ts","sourceRoot":"","sources":["../../src/lib/provider-metadata.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASlE,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMvE,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/D"}
1
+ {"version":3,"file":"provider-metadata.d.ts","sourceRoot":"","sources":["../../src/lib/provider-metadata.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUlE,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASvE,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/D"}
@@ -4,6 +4,7 @@ export const QUOTA_PROVIDER_LABELS = {
4
4
  "google-antigravity": "Google",
5
5
  firmware: "Firmware",
6
6
  chutes: "Chutes",
7
+ cursor: "Cursor",
7
8
  "qwen-code": "Qwen",
8
9
  "alibaba-coding-plan": "Alibaba Coding Plan",
9
10
  zai: "Z.ai",
@@ -12,6 +13,9 @@ export const QUOTA_PROVIDER_ID_SYNONYMS = {
12
13
  "github-copilot": "copilot",
13
14
  "copilot-chat": "copilot",
14
15
  "github-copilot-chat": "copilot",
16
+ "cursor-acp": "cursor",
17
+ "open-cursor": "cursor",
18
+ "@rama_nigg/open-cursor": "cursor",
15
19
  qwen: "qwen-code",
16
20
  alibaba: "alibaba-coding-plan",
17
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"provider-metadata.js","sourceRoot":"","sources":["../../src/lib/provider-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAqC;IACrE,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,oBAAoB,EAAE,QAAQ;IAC9B,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,MAAM;IACnB,qBAAqB,EAAE,qBAAqB;IAC5C,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAqC;IAC1E,gBAAgB,EAAE,SAAS;IAC3B,cAAc,EAAE,SAAS;IACzB,qBAAqB,EAAE,SAAS;IAChC,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,qBAAqB;CAC/B,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,EAAU;IACjD,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,0BAA0B,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAAU;IACrD,OAAO,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"provider-metadata.js","sourceRoot":"","sources":["../../src/lib/provider-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAqC;IACrE,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,oBAAoB,EAAE,QAAQ;IAC9B,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,MAAM;IACnB,qBAAqB,EAAE,qBAAqB;IAC5C,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAqC;IAC1E,gBAAgB,EAAE,SAAS;IAC3B,cAAc,EAAE,SAAS;IACzB,qBAAqB,EAAE,SAAS;IAChC,YAAY,EAAE,QAAQ;IACtB,aAAa,EAAE,QAAQ;IACvB,wBAAwB,EAAE,QAAQ;IAClC,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,qBAAqB;CAC/B,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,EAAU;IACjD,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,0BAA0B,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAAU;IACrD,OAAO,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC"}
@@ -22,7 +22,7 @@ export type UnknownKey = {
22
22
  export type PricingResolution = {
23
23
  ok: true;
24
24
  key: PricedKey;
25
- method: "source_provider" | "model_prefix" | "unique_model" | "alias_fallback";
25
+ method: "source_provider" | "model_prefix" | "unique_model" | "alias_fallback" | "cursor_local" | "cursor_api_alias";
26
26
  } | {
27
27
  ok: false;
28
28
  unknown: UnknownKey;
@@ -1 +1 @@
1
- {"version":3,"file":"quota-stats.d.ts","sourceRoot":"","sources":["../../src/lib/quota-stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-stats.d.ts","sourceRoot":"","sources":["../../src/lib/quota-stats.ts"],"names":[],"mappings":"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"}