@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.
- package/README.md +84 -6
- package/dist/data/modelsdev-pricing.min.json +51 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +18 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +21 -1
- package/dist/lib/copilot.js.map +1 -1
- package/dist/lib/cursor-detection.d.ts +17 -0
- package/dist/lib/cursor-detection.d.ts.map +1 -0
- package/dist/lib/cursor-detection.js +125 -0
- package/dist/lib/cursor-detection.js.map +1 -0
- package/dist/lib/cursor-pricing.d.ts +33 -0
- package/dist/lib/cursor-pricing.d.ts.map +1 -0
- package/dist/lib/cursor-pricing.js +131 -0
- package/dist/lib/cursor-pricing.js.map +1 -0
- package/dist/lib/cursor-usage.d.ts +32 -0
- package/dist/lib/cursor-usage.d.ts.map +1 -0
- package/dist/lib/cursor-usage.js +127 -0
- package/dist/lib/cursor-usage.js.map +1 -0
- package/dist/lib/entries.d.ts +4 -0
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/entries.js +0 -6
- package/dist/lib/entries.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +4 -0
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-stats.d.ts +1 -1
- package/dist/lib/quota-stats.d.ts.map +1 -1
- package/dist/lib/quota-stats.js +26 -14
- package/dist/lib/quota-stats.js.map +1 -1
- package/dist/lib/quota-status.d.ts +4 -0
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +49 -1
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/token-cost.d.ts +10 -0
- package/dist/lib/token-cost.d.ts.map +1 -0
- package/dist/lib/token-cost.js +16 -0
- package/dist/lib/token-cost.js.map +1 -0
- package/dist/lib/types.d.ts +4 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +1 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +95 -26
- package/dist/plugin.js.map +1 -1
- package/dist/providers/cursor.d.ts +3 -0
- package/dist/providers/cursor.d.ts.map +1 -0
- package/dist/providers/cursor.js +136 -0
- package/dist/providers/cursor.js.map +1 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -0
- package/dist/providers/registry.js.map +1 -1
- 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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"}
|
package/dist/lib/entries.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,qBAAqB;IACpC,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GACvB,CAAC,qBAAqB,GAAG;IACvB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IAEb,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAC;IAEzB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,GACF,CAAC,qBAAqB,GAAG;IACvB,0CAA0C;IAC1C,IAAI,EAAE,OAAO,CAAC;IAEd,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IAEb,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IAEd,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEP,wBAAgB,YAAY,CAC1B,CAAC,EAAE,eAAe,GACjB,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAElD;AAED,wBAAgB,cAAc,CAC5B,CAAC,EAAE,eAAe,GACjB,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAE7D;AAED,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QACN,MAAM,EAAE;YACN,SAAS,EAAE,MAAM,OAAO,CAAC;gBAAE,IAAI,CAAC,EAAE;oBAAE,SAAS,EAAE,KAAK,CAAC;wBAAE,EAAE,EAAE,MAAM,CAAA;qBAAE,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAC;YAC1E,GAAG,EAAE,MAAM,OAAO,CAAC;gBAAE,IAAI,CAAC,EAAE;oBAAE,KAAK,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAC;SACnD,CAAC;KACH,CAAC;IACF,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,qBAAqB,EAAE,MAAM,GAAG,KAAK,CAAC;QACtC,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;QACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IAEX,8DAA8D;IAC9D,WAAW,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7D,kDAAkD;IAClD,KAAK,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEnE,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAClD"}
|
|
1
|
+
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/entries.js
CHANGED
package/dist/lib/entries.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"
|
|
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,
|
|
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":"
|
|
1
|
+
{"version":3,"file":"quota-stats.d.ts","sourceRoot":"","sources":["../../src/lib/quota-stats.ts"],"names":[],"mappings":"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"}
|