vskill 0.5.104 → 0.5.106
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 +123 -2
- package/agents.json +1 -1
- package/dist/agents/agents-registry.d.ts +0 -1
- package/dist/agents/agents-registry.js +10 -30
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/api/client.d.ts +21 -0
- package/dist/api/client.js +39 -5
- package/dist/api/client.js.map +1 -1
- package/dist/commands/diff.d.ts +2 -5
- package/dist/commands/diff.js +82 -117
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/eval/serve.js +4 -0
- package/dist/commands/eval/serve.js.map +1 -1
- package/dist/commands/keys.d.ts +14 -0
- package/dist/commands/keys.js +166 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/masked-stdin.d.ts +14 -0
- package/dist/commands/masked-stdin.js +79 -0
- package/dist/commands/masked-stdin.js.map +1 -0
- package/dist/commands/skill.d.ts +3 -29
- package/dist/commands/skill.js +6 -32
- package/dist/commands/skill.js.map +1 -1
- package/dist/eval/anthropic-catalog.d.ts +49 -0
- package/dist/eval/anthropic-catalog.js +238 -0
- package/dist/eval/anthropic-catalog.js.map +1 -0
- package/dist/eval/llm.d.ts +1 -1
- package/dist/eval/llm.js +68 -10
- package/dist/eval/llm.js.map +1 -1
- package/dist/eval/mcp-detector.js +24 -3
- package/dist/eval/mcp-detector.js.map +1 -1
- package/dist/eval/model-resolver.d.ts +39 -0
- package/dist/eval/model-resolver.js +94 -0
- package/dist/eval/model-resolver.js.map +1 -0
- package/dist/eval/pricing.js +42 -16
- package/dist/eval/pricing.js.map +1 -1
- package/dist/eval-server/api-routes.d.ts +9 -0
- package/dist/eval-server/api-routes.js +241 -73
- package/dist/eval-server/api-routes.js.map +1 -1
- package/dist/eval-server/authoring-routes.js +21 -1
- package/dist/eval-server/authoring-routes.js.map +1 -1
- package/dist/eval-server/boot-preflight.js +8 -10
- package/dist/eval-server/boot-preflight.js.map +1 -1
- package/dist/eval-server/darwin-migrator.d.ts +57 -0
- package/dist/eval-server/darwin-migrator.js +169 -0
- package/dist/eval-server/darwin-migrator.js.map +1 -0
- package/dist/eval-server/eval-server.d.ts +1 -0
- package/dist/eval-server/eval-server.js +21 -0
- package/dist/eval-server/eval-server.js.map +1 -1
- package/dist/eval-server/integration-routes.js +7 -0
- package/dist/eval-server/integration-routes.js.map +1 -1
- package/dist/eval-server/platform-proxy.d.ts +18 -0
- package/dist/eval-server/platform-proxy.js +153 -0
- package/dist/eval-server/platform-proxy.js.map +1 -0
- package/dist/eval-server/providers.d.ts +7 -12
- package/dist/eval-server/providers.js +13 -15
- package/dist/eval-server/providers.js.map +1 -1
- package/dist/eval-server/settings-store.d.ts +31 -26
- package/dist/eval-server/settings-store.js +246 -143
- package/dist/eval-server/settings-store.js.map +1 -1
- package/dist/eval-server/skill-create-routes.js +18 -0
- package/dist/eval-server/skill-create-routes.js.map +1 -1
- package/dist/eval-server/skill-name-resolver.d.ts +35 -0
- package/dist/eval-server/skill-name-resolver.js +146 -0
- package/dist/eval-server/skill-name-resolver.js.map +1 -0
- package/dist/eval-ui/assets/{CommandPalette-DiPALzlG.js → CommandPalette-COqdrmRl.js} +1 -1
- package/dist/eval-ui/assets/CreateSkillPage-C3IjO8es.js +12 -0
- package/dist/eval-ui/assets/UpdateDropdown-DnKKMBBN.js +1 -0
- package/dist/eval-ui/assets/index-Dmja1p3A.css +1 -0
- package/dist/eval-ui/assets/index-KIcQ5e5a.js +102 -0
- package/dist/eval-ui/index.html +2 -2
- package/dist/first-run-onboarding.d.ts +19 -0
- package/dist/first-run-onboarding.js +104 -0
- package/dist/first-run-onboarding.js.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/installer/canonical.js +12 -13
- package/dist/installer/canonical.js.map +1 -1
- package/dist/utils/resolve-binary.js +7 -8
- package/dist/utils/resolve-binary.js.map +1 -1
- package/package.json +5 -2
- package/dist/eval-ui/assets/CreateSkillPage-BMrFELep.js +0 -12
- package/dist/eval-ui/assets/UpdateDropdown-Bj8kZzuR.js +0 -1
- package/dist/eval-ui/assets/_shimNode-D3bBqrAh.js +0 -1
- package/dist/eval-ui/assets/index-BSPDkfZG.js +0 -102
- package/dist/eval-ui/assets/index-C0Gc_4KC.css +0 -1
- package/dist/eval-ui/assets/resolve-binary-DIxhrZ6O.js +0 -2
|
@@ -56,9 +56,30 @@ const MCP_REGISTRY = [
|
|
|
56
56
|
url: "https://mcp.sentry.dev/mcp",
|
|
57
57
|
transport: "http",
|
|
58
58
|
},
|
|
59
|
+
{
|
|
60
|
+
// Custom showcase MCP (US-005): demonstrates how a non-HTTP, user-owned
|
|
61
|
+
// MCP server plugs into the registry. Launched via npx over stdio with
|
|
62
|
+
// an API-key env var — copied into the user's Claude config verbatim
|
|
63
|
+
// from `configSnippet`.
|
|
64
|
+
server: "EasyChamp",
|
|
65
|
+
prefixes: ["easychamp_"],
|
|
66
|
+
url: "https://easychamp.com/mcp",
|
|
67
|
+
transport: "stdio",
|
|
68
|
+
configSnippet: {
|
|
69
|
+
command: "npx",
|
|
70
|
+
args: ["-y", "easychamp-mcp"],
|
|
71
|
+
env: { EASYCHAMP_API_KEY: "${EASYCHAMP_API_KEY}" },
|
|
72
|
+
},
|
|
73
|
+
},
|
|
59
74
|
];
|
|
60
|
-
function buildConfigSnippet(
|
|
61
|
-
|
|
75
|
+
function buildConfigSnippet(entry) {
|
|
76
|
+
const key = entry.server.toLowerCase().replace(/\s+/g, "-");
|
|
77
|
+
// Custom stdio MCPs (e.g. EasyChamp) carry a pre-authored config block.
|
|
78
|
+
if (entry.transport === "stdio" && entry.configSnippet) {
|
|
79
|
+
return JSON.stringify({ mcpServers: { [key]: entry.configSnippet } }, null, 2);
|
|
80
|
+
}
|
|
81
|
+
// Default HTTP shape used by the built-in hosted MCPs.
|
|
82
|
+
return JSON.stringify({ mcpServers: { [key]: { type: "http", url: entry.url } } }, null, 2);
|
|
62
83
|
}
|
|
63
84
|
function parseFrontmatterField(content, field) {
|
|
64
85
|
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
@@ -114,7 +135,7 @@ export function detectMcpDependencies(content) {
|
|
|
114
135
|
url: entry.url,
|
|
115
136
|
transport: entry.transport,
|
|
116
137
|
matchedTools: [...new Set(matched)],
|
|
117
|
-
configSnippet: buildConfigSnippet(entry
|
|
138
|
+
configSnippet: buildConfigSnippet(entry),
|
|
118
139
|
});
|
|
119
140
|
}
|
|
120
141
|
return deps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-detector.js","sourceRoot":"","sources":["../../src/eval/mcp-detector.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,oFAAoF;AACpF,8EAA8E;
|
|
1
|
+
{"version":3,"file":"mcp-detector.js","sourceRoot":"","sources":["../../src/eval/mcp-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type AnthropicCatalog, type AnthropicModelEntry, type AnthropicPricing } from "./anthropic-catalog.js";
|
|
2
|
+
export type ModelResolutionSource = "snapshot" | "env-override" | "passthrough";
|
|
3
|
+
export interface ResolvedAnthropicModel {
|
|
4
|
+
/** What the caller asked for, verbatim — useful for forensic logging. */
|
|
5
|
+
requestedAlias: string;
|
|
6
|
+
/** Canonical Anthropic API ID after resolution. */
|
|
7
|
+
resolvedId: string;
|
|
8
|
+
/** Marketing display name, or empty when source === "passthrough". */
|
|
9
|
+
displayName: string;
|
|
10
|
+
/** Pricing block when known; null when source === "passthrough". */
|
|
11
|
+
pricing: AnthropicPricing | null;
|
|
12
|
+
/** Where this answer came from. */
|
|
13
|
+
source: ModelResolutionSource;
|
|
14
|
+
/** ISO date of the catalog snapshot used. Always populated. */
|
|
15
|
+
snapshotDate: string;
|
|
16
|
+
/** Status from the catalog (active/deprecated/retired) when known. */
|
|
17
|
+
status: AnthropicModelEntry["status"] | null;
|
|
18
|
+
/** Sunset date from the catalog when known. */
|
|
19
|
+
sunsetDate: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface ResolveOptions {
|
|
22
|
+
/** Inject a custom catalog (for tests). Defaults to the dated snapshot. */
|
|
23
|
+
catalog?: AnthropicCatalog;
|
|
24
|
+
/** Inject a custom env getter (for tests). Defaults to `process.env`. */
|
|
25
|
+
env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolve an Anthropic alias / canonical ID into a provenance-rich record.
|
|
29
|
+
*
|
|
30
|
+
* Precedence:
|
|
31
|
+
* 1. ENV override `VSKILL_DEFAULT_MODEL_ANTHROPIC` — only when the input is
|
|
32
|
+
* a plain alias (`opus|sonnet|haiku|best`) so explicit canonical IDs
|
|
33
|
+
* always win over a tuned default.
|
|
34
|
+
* 2. Catalog lookup — alias OR canonical ID, case-insensitive.
|
|
35
|
+
* 3. Passthrough — unknown future ID; keep the input as `resolvedId`,
|
|
36
|
+
* record `source: "passthrough"` so the UI can warn about pricing
|
|
37
|
+
* and the test suite can flag missing entries.
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveAnthropicModel(input: string, opts?: ResolveOptions): ResolvedAnthropicModel;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// 0711 — model-resolver
|
|
3
|
+
//
|
|
4
|
+
// Single chokepoint that turns an alias / canonical id / env override into a
|
|
5
|
+
// fully-resolved record with provenance. Replaces the scattered
|
|
6
|
+
// `ANTHROPIC_NORMALIZE` lookups in llm.ts so that:
|
|
7
|
+
// - `aiMeta.model` now records the concrete ID rather than the alias,
|
|
8
|
+
// making "regenerated on Opus 4.6 vs 4.7" diffable.
|
|
9
|
+
// - Pricing + display name come from a SINGLE catalog file; fixing one
|
|
10
|
+
// stale ref no longer means hunting through three modules.
|
|
11
|
+
// - ENV override (`VSKILL_DEFAULT_MODEL_ANTHROPIC`) lets early-access users
|
|
12
|
+
// route plain `opus`/`sonnet`/`haiku` aliases to a not-yet-shipped model
|
|
13
|
+
// without code changes.
|
|
14
|
+
//
|
|
15
|
+
// Pure function. Server + browser safe (no node:* imports). Server-side
|
|
16
|
+
// runtime catalog refresh lives in `catalog-fetcher.ts` (separate file) and
|
|
17
|
+
// is OPTIONAL — when offline, the dated snapshot is the source of truth.
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
import { ANTHROPIC_CATALOG_SNAPSHOT, findAnthropicModel, } from "./anthropic-catalog.js";
|
|
20
|
+
const PLAIN_ALIASES = new Set(["opus", "sonnet", "haiku", "best"]);
|
|
21
|
+
function passthrough(requestedAlias, catalog) {
|
|
22
|
+
return {
|
|
23
|
+
requestedAlias,
|
|
24
|
+
resolvedId: requestedAlias,
|
|
25
|
+
displayName: "",
|
|
26
|
+
pricing: null,
|
|
27
|
+
source: "passthrough",
|
|
28
|
+
snapshotDate: catalog.snapshotDate,
|
|
29
|
+
status: null,
|
|
30
|
+
sunsetDate: null,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function fromCatalog(requestedAlias, entry, source, catalog) {
|
|
34
|
+
return {
|
|
35
|
+
requestedAlias,
|
|
36
|
+
resolvedId: entry.id,
|
|
37
|
+
displayName: entry.displayName,
|
|
38
|
+
pricing: entry.pricing,
|
|
39
|
+
source,
|
|
40
|
+
snapshotDate: catalog.snapshotDate,
|
|
41
|
+
status: entry.status,
|
|
42
|
+
sunsetDate: entry.sunsetDate,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve an Anthropic alias / canonical ID into a provenance-rich record.
|
|
47
|
+
*
|
|
48
|
+
* Precedence:
|
|
49
|
+
* 1. ENV override `VSKILL_DEFAULT_MODEL_ANTHROPIC` — only when the input is
|
|
50
|
+
* a plain alias (`opus|sonnet|haiku|best`) so explicit canonical IDs
|
|
51
|
+
* always win over a tuned default.
|
|
52
|
+
* 2. Catalog lookup — alias OR canonical ID, case-insensitive.
|
|
53
|
+
* 3. Passthrough — unknown future ID; keep the input as `resolvedId`,
|
|
54
|
+
* record `source: "passthrough"` so the UI can warn about pricing
|
|
55
|
+
* and the test suite can flag missing entries.
|
|
56
|
+
*/
|
|
57
|
+
export function resolveAnthropicModel(input, opts = {}) {
|
|
58
|
+
const catalog = opts.catalog ?? ANTHROPIC_CATALOG_SNAPSHOT;
|
|
59
|
+
const env = opts.env ?? process.env;
|
|
60
|
+
const requestedAlias = input ?? "";
|
|
61
|
+
const trimmed = requestedAlias.trim();
|
|
62
|
+
if (!trimmed)
|
|
63
|
+
return passthrough(requestedAlias, catalog);
|
|
64
|
+
// 1. ENV override only kicks in for plain aliases — explicit canonical IDs
|
|
65
|
+
// are honoured exactly as the caller wrote them.
|
|
66
|
+
const isPlainAlias = PLAIN_ALIASES.has(trimmed.toLowerCase());
|
|
67
|
+
const overrideRaw = env.VSKILL_DEFAULT_MODEL_ANTHROPIC;
|
|
68
|
+
const override = typeof overrideRaw === "string" ? overrideRaw.trim() : "";
|
|
69
|
+
if (isPlainAlias && override) {
|
|
70
|
+
const overrideEntry = findAnthropicModel(override, catalog);
|
|
71
|
+
if (overrideEntry) {
|
|
72
|
+
return fromCatalog(requestedAlias, overrideEntry, "env-override", catalog);
|
|
73
|
+
}
|
|
74
|
+
// Override is a future ID we do not know yet — preserve provenance and
|
|
75
|
+
// signal that the snapshot is stale.
|
|
76
|
+
return {
|
|
77
|
+
requestedAlias,
|
|
78
|
+
resolvedId: override,
|
|
79
|
+
displayName: "",
|
|
80
|
+
pricing: null,
|
|
81
|
+
source: "env-override",
|
|
82
|
+
snapshotDate: catalog.snapshotDate,
|
|
83
|
+
status: null,
|
|
84
|
+
sunsetDate: null,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// 2. Catalog lookup.
|
|
88
|
+
const entry = findAnthropicModel(trimmed, catalog);
|
|
89
|
+
if (entry)
|
|
90
|
+
return fromCatalog(requestedAlias, entry, "snapshot", catalog);
|
|
91
|
+
// 3. Passthrough.
|
|
92
|
+
return passthrough(trimmed, catalog);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=model-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/eval/model-resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/eval/pricing.js
CHANGED
|
@@ -1,22 +1,34 @@
|
|
|
1
1
|
// ---------------------------------------------------------------------------
|
|
2
2
|
// pricing.ts -- centralized pricing table + cost calculator for all providers
|
|
3
|
+
//
|
|
4
|
+
// 0711: Anthropic pricing now derives from the dated catalog snapshot in
|
|
5
|
+
// `anthropic-catalog.ts` so we maintain rates in exactly one place. Other
|
|
6
|
+
// providers still use the inline table below until each gets its own
|
|
7
|
+
// catalog (tracked in 0711 follow-ups).
|
|
3
8
|
// ---------------------------------------------------------------------------
|
|
9
|
+
import { ANTHROPIC_CATALOG_SNAPSHOT } from "./anthropic-catalog.js";
|
|
4
10
|
// ---------------------------------------------------------------------------
|
|
5
11
|
// Pricing table — update rates here when providers change pricing
|
|
6
12
|
// ---------------------------------------------------------------------------
|
|
13
|
+
function buildAnthropicPricing() {
|
|
14
|
+
const out = {};
|
|
15
|
+
for (const m of ANTHROPIC_CATALOG_SNAPSHOT.models) {
|
|
16
|
+
out[m.id] = {
|
|
17
|
+
inputPerMillion: m.pricing.promptUsdPer1M,
|
|
18
|
+
outputPerMillion: m.pricing.completionUsdPer1M,
|
|
19
|
+
updatedAt: ANTHROPIC_CATALOG_SNAPSHOT.snapshotDate,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
7
24
|
const PRICING = {
|
|
8
|
-
anthropic:
|
|
9
|
-
"claude-opus-4-7": { inputPerMillion: 5, outputPerMillion: 25, updatedAt: "2026-04-16" },
|
|
10
|
-
"claude-opus-4-6": { inputPerMillion: 5, outputPerMillion: 25, updatedAt: "2026-04-16" },
|
|
11
|
-
"claude-opus-4-20250514": { inputPerMillion: 15, outputPerMillion: 75, updatedAt: "2025-05-01" },
|
|
12
|
-
"claude-sonnet-4-6": { inputPerMillion: 3, outputPerMillion: 15, updatedAt: "2025-05-01" },
|
|
13
|
-
"claude-sonnet-4-20250514": { inputPerMillion: 3, outputPerMillion: 15, updatedAt: "2025-05-01" },
|
|
14
|
-
"claude-haiku-4-5-20251001": { inputPerMillion: 0.80, outputPerMillion: 4, updatedAt: "2025-05-01" },
|
|
15
|
-
},
|
|
25
|
+
anthropic: buildAnthropicPricing(),
|
|
16
26
|
openai: {
|
|
17
27
|
"o4-mini": { inputPerMillion: 1.10, outputPerMillion: 4.40, updatedAt: "2025-05-01" },
|
|
18
28
|
"gpt-4.1": { inputPerMillion: 2, outputPerMillion: 8, updatedAt: "2025-05-01" },
|
|
19
29
|
"gpt-4.1-mini": { inputPerMillion: 0.40, outputPerMillion: 1.60, updatedAt: "2025-05-01" },
|
|
30
|
+
"gpt-4o": { inputPerMillion: 2.50, outputPerMillion: 10, updatedAt: "2026-04-24" },
|
|
31
|
+
"gpt-4o-mini": { inputPerMillion: 0.15, outputPerMillion: 0.60, updatedAt: "2026-04-24" },
|
|
20
32
|
},
|
|
21
33
|
google: {
|
|
22
34
|
"gemini-2.5-pro": { inputPerMillion: 1.25, outputPerMillion: 10, updatedAt: "2025-05-01" },
|
|
@@ -26,15 +38,27 @@ const PRICING = {
|
|
|
26
38
|
// ---------------------------------------------------------------------------
|
|
27
39
|
// Model alias maps — resolve shorthand names to pricing table keys
|
|
28
40
|
// ---------------------------------------------------------------------------
|
|
41
|
+
// 0711: Anthropic alias resolution lives in `model-resolver.ts` (catalog +
|
|
42
|
+
// env override). Inline this map ONLY for the well-known short aliases that
|
|
43
|
+
// the resolver also accepts — keeps `getPricing()` synchronous and pure for
|
|
44
|
+
// existing callers. Full-ID lookups bypass this map entirely.
|
|
45
|
+
function buildAnthropicAliases() {
|
|
46
|
+
const out = {};
|
|
47
|
+
for (const m of ANTHROPIC_CATALOG_SNAPSHOT.models) {
|
|
48
|
+
for (const a of m.aliases) {
|
|
49
|
+
// Skip variants with [1m] suffix etc — getPricing keys are bare IDs.
|
|
50
|
+
if (!out[a])
|
|
51
|
+
out[a] = m.id;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Legacy compat: vskill historically accepted these display-style strings.
|
|
55
|
+
out["claude-sonnet"] ??= "claude-sonnet-4-6";
|
|
56
|
+
out["claude-opus"] ??= "claude-opus-4-7";
|
|
57
|
+
out["claude-haiku"] ??= "claude-haiku-4-5-20251001";
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
29
60
|
const MODEL_ALIASES = {
|
|
30
|
-
anthropic:
|
|
31
|
-
"sonnet": "claude-sonnet-4-6",
|
|
32
|
-
"opus": "claude-opus-4-7",
|
|
33
|
-
"haiku": "claude-haiku-4-5-20251001",
|
|
34
|
-
"claude-sonnet": "claude-sonnet-4-6",
|
|
35
|
-
"claude-opus": "claude-opus-4-7",
|
|
36
|
-
"claude-haiku": "claude-haiku-4-5-20251001",
|
|
37
|
-
},
|
|
61
|
+
anthropic: buildAnthropicAliases(),
|
|
38
62
|
openai: {},
|
|
39
63
|
google: {},
|
|
40
64
|
};
|
|
@@ -49,8 +73,10 @@ const PROVIDER_PRICING_MAP = {
|
|
|
49
73
|
// ---------------------------------------------------------------------------
|
|
50
74
|
const BILLING_MODES = {
|
|
51
75
|
"anthropic": "per-token",
|
|
76
|
+
"openai": "per-token",
|
|
52
77
|
"openrouter": "per-token",
|
|
53
78
|
"ollama": "free",
|
|
79
|
+
"lm-studio": "free",
|
|
54
80
|
"claude-cli": "subscription",
|
|
55
81
|
"codex-cli": "subscription",
|
|
56
82
|
"gemini-cli": "free",
|
package/dist/eval/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/eval/pricing.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/eval/pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -102,12 +102,19 @@ export declare function buildSkillMetadata(skillDir: string, origin: "source" |
|
|
|
102
102
|
interface ModelOption {
|
|
103
103
|
id: string;
|
|
104
104
|
label: string;
|
|
105
|
+
pricing?: {
|
|
106
|
+
prompt: number;
|
|
107
|
+
completion: number;
|
|
108
|
+
};
|
|
109
|
+
resolvedId?: string;
|
|
105
110
|
}
|
|
111
|
+
export declare const PROVIDER_MODELS: Record<ProviderName, ModelOption[]>;
|
|
106
112
|
type OpenRouterCacheEntry = {
|
|
107
113
|
value: Array<{
|
|
108
114
|
id: string;
|
|
109
115
|
name: string;
|
|
110
116
|
contextWindow?: number;
|
|
117
|
+
/** USD per 1M tokens (canonical wire unit; converted from per-token at ingestion). */
|
|
111
118
|
pricing: {
|
|
112
119
|
prompt: number;
|
|
113
120
|
completion: number;
|
|
@@ -138,11 +145,13 @@ export declare function resetProjectDetectionCache(): void;
|
|
|
138
145
|
* `which`) cached for 30 s so repeated `/api/config` polls don't burn CPU.
|
|
139
146
|
*/
|
|
140
147
|
export declare function detectProjectAgents(root: string): DetectionInfo;
|
|
148
|
+
export declare function resolveClaudeCodeModel(): string | null;
|
|
141
149
|
export declare function detectAvailableProviders(): Promise<Array<{
|
|
142
150
|
id: ProviderName;
|
|
143
151
|
label: string;
|
|
144
152
|
available: boolean;
|
|
145
153
|
models: ModelOption[];
|
|
154
|
+
resolvedModel?: string | null;
|
|
146
155
|
}>>;
|
|
147
156
|
export declare function registerRoutes(router: Router, root: string, projectName?: string): void;
|
|
148
157
|
export {};
|