vskill 0.5.103 → 0.5.105
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 +147 -4
- package/agents.json +1 -1
- package/dist/agents/agents-registry.d.ts +13 -3
- package/dist/agents/agents-registry.js +100 -57
- 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 +6 -0
- package/dist/commands/diff.js +104 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/eval/serve.js +29 -83
- 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 +6 -0
- package/dist/commands/skill.js +366 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/update.js +15 -4
- package/dist/commands/update.js.map +1 -1
- package/dist/core/skill-emitter.d.ts +37 -0
- package/dist/core/skill-emitter.js +333 -0
- package/dist/core/skill-emitter.js.map +1 -0
- package/dist/core/skill-generator.d.ts +27 -0
- package/dist/core/skill-generator.js +100 -0
- package/dist/core/skill-generator.js.map +1 -0
- 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/skill-scanner.d.ts +0 -5
- package/dist/eval/skill-scanner.js +0 -12
- package/dist/eval/skill-scanner.js.map +1 -1
- package/dist/eval-server/api-routes.d.ts +1 -0
- package/dist/eval-server/api-routes.js +191 -63
- 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 +10 -0
- package/dist/eval-server/eval-server.js.map +1 -1
- 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 +17 -19
- package/dist/eval-server/settings-store.js +192 -189
- package/dist/eval-server/settings-store.js.map +1 -1
- package/dist/eval-server/skill-create-routes.d.ts +62 -0
- package/dist/eval-server/skill-create-routes.js +97 -132
- package/dist/eval-server/skill-create-routes.js.map +1 -1
- package/dist/eval-ui/assets/{CommandPalette-6cLEufX0.js → CommandPalette-DAWyTgXL.js} +1 -1
- package/dist/eval-ui/assets/CreateSkillPage-D5xmvnzV.js +12 -0
- package/dist/eval-ui/assets/UpdateDropdown-6bfwsX0-.js +1 -0
- package/dist/eval-ui/assets/index-C_-YXE6O.js +102 -0
- package/dist/eval-ui/index.html +1 -1
- 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 +21 -0
- package/dist/index.js.map +1 -1
- package/dist/installer/canonical.d.ts +2 -0
- package/dist/installer/canonical.js +33 -3
- package/dist/installer/canonical.js.map +1 -1
- package/dist/studio/lib/ops-log.js +1 -4
- package/dist/studio/lib/ops-log.js.map +1 -1
- package/dist/studio/lib/scope-transfer.d.ts +0 -10
- package/dist/studio/lib/scope-transfer.js +13 -116
- package/dist/studio/lib/scope-transfer.js.map +1 -1
- package/dist/studio/routes/ops.js +3 -26
- package/dist/studio/routes/ops.js.map +1 -1
- package/dist/studio/routes/promote.js +15 -9
- package/dist/studio/routes/promote.js.map +1 -1
- package/dist/studio/routes/test-install.js +11 -4
- package/dist/studio/routes/test-install.js.map +1 -1
- package/dist/utils/agent-filter.js +5 -4
- package/dist/utils/agent-filter.js.map +1 -1
- package/dist/utils/resolve-binary.d.ts +22 -0
- package/dist/utils/resolve-binary.js +44 -1
- package/dist/utils/resolve-binary.js.map +1 -1
- package/package.json +3 -1
- package/scripts/preuninstall.cjs +2 -9
- package/dist/eval-ui/assets/CreateSkillPage-kn7xDaAP.js +0 -12
- package/dist/eval-ui/assets/UpdateDropdown-9qR5NxTi.js +0 -1
- package/dist/eval-ui/assets/index-4LdVR3Lo.js +0 -102
|
@@ -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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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Provenance } from "../studio/types.js";
|
|
2
1
|
/** Scope classification — where a skill lives in the three-part world. */
|
|
3
2
|
export type SkillScope = "own" | "installed" | "global";
|
|
4
3
|
/**
|
|
@@ -29,10 +28,6 @@ export interface SkillInfo {
|
|
|
29
28
|
/** 0686 sourceAgent — the registry agent id whose scope owns this skill.
|
|
30
29
|
* null for own-scope skills. */
|
|
31
30
|
sourceAgent?: string | null;
|
|
32
|
-
/** 0688 T-024: `.vskill-meta.json` sidecar contents on OWN-scope skills that
|
|
33
|
-
* were created via Promote (INSTALLED/GLOBAL → OWN). `null` when the
|
|
34
|
-
* sidecar is absent or unreadable. Always `null` for installed/global. */
|
|
35
|
-
provenance?: Provenance | null;
|
|
36
31
|
scopeV2?: SkillScopeV2;
|
|
37
32
|
group?: SkillGroup;
|
|
38
33
|
source?: SkillSource;
|
|
@@ -15,7 +15,6 @@ import { readdirSync, existsSync, lstatSync, realpathSync, statSync } from "node
|
|
|
15
15
|
import { join, basename, dirname, relative, sep } from "node:path";
|
|
16
16
|
import { AGENTS_REGISTRY, NON_AGENT_CONFIG_DIRS, } from "../agents/agents-registry.js";
|
|
17
17
|
import { resolveGlobalSkillsDir } from "./path-utils.js";
|
|
18
|
-
import { readProvenance } from "../studio/lib/provenance.js";
|
|
19
18
|
/** 0698 T-002: translate legacy scope → new 5-value vocabulary. */
|
|
20
19
|
function legacyToV2(legacy) {
|
|
21
20
|
if (legacy === "installed")
|
|
@@ -257,17 +256,6 @@ export async function scanSkillsTriScope(root, opts) {
|
|
|
257
256
|
}
|
|
258
257
|
}
|
|
259
258
|
}
|
|
260
|
-
// 0688 T-024: read `.vskill-meta.json` sidecar for OWN-scope skills.
|
|
261
|
-
// Best-effort — `readProvenance` swallows ENOENT and JSON parse errors and
|
|
262
|
-
// returns `null`, so a missing/corrupt sidecar never aborts the scan.
|
|
263
|
-
await Promise.all(results.map(async (s) => {
|
|
264
|
-
if (s.scope === "own") {
|
|
265
|
-
s.provenance = await readProvenance(s.dir);
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
s.provenance = null;
|
|
269
|
-
}
|
|
270
|
-
}));
|
|
271
259
|
// 0698 T-002: enrich with new scope vocabulary + compute precedence/shadowing
|
|
272
260
|
return enrichAndComputePrecedence(results);
|
|
273
261
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-scanner.js","sourceRoot":"","sources":["../../src/eval/skill-scanner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skill-scanner.js","sourceRoot":"","sources":["../../src/eval/skill-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ import { classifyOrigin, scanSkillsTriScope } from "../eval/skill-scanner.js";
|
|
|
18
18
|
import { scanInstalledPluginSkills, scanAuthoredPluginSkills, } from "../eval/plugin-scanner.js";
|
|
19
19
|
import { resolveGlobalSkillsDir } from "../eval/path-utils.js";
|
|
20
20
|
import { loadAndValidateEvals, EvalValidationError } from "../eval/schema.js";
|
|
21
|
+
import { ANTHROPIC_CATALOG_SNAPSHOT } from "../eval/anthropic-catalog.js";
|
|
21
22
|
import { readBenchmark } from "../eval/benchmark.js";
|
|
22
23
|
import { writeHistoryEntry, listHistory, readHistoryEntry, computeRegressions, deleteHistoryEntry, getCaseHistory, computeStats } from "../eval/benchmark-history.js";
|
|
23
24
|
import { judgeAssertion } from "../eval/judge.js";
|
|
@@ -33,6 +34,8 @@ import { writeActivationRun, listActivationRuns, getActivationRun } from "../eva
|
|
|
33
34
|
import { AGENTS_REGISTRY, detectInstalledAgents } from "../agents/agents-registry.js";
|
|
34
35
|
import { resolveOllamaBaseUrl } from "../eval/env.js";
|
|
35
36
|
import * as settingsStore from "./settings-store.js";
|
|
37
|
+
import { isProviderId, getProviderById } from "./providers.js";
|
|
38
|
+
import { DarwinKeychainMigrator } from "./darwin-migrator.js";
|
|
36
39
|
import { loadStudioSelection, saveStudioSelection } from "./studio-json.js";
|
|
37
40
|
/**
|
|
38
41
|
* Build the response for GET /api/agents/installed.
|
|
@@ -475,21 +478,31 @@ function computeBenchmarkStatus(benchmark, evalIds, hasEvals) {
|
|
|
475
478
|
// Use overall_pass_rate as single source of truth
|
|
476
479
|
return (benchmark.overall_pass_rate ?? 0) >= 1 ? "pass" : "fail";
|
|
477
480
|
}
|
|
478
|
-
//
|
|
479
|
-
//
|
|
480
|
-
//
|
|
481
|
+
// 0711 — Anthropic models + pricing now derive from the dated catalog
|
|
482
|
+
// snapshot at `src/eval/anthropic-catalog.ts`. Manual maintenance of this
|
|
483
|
+
// list led to stale prices (Opus 4.7 shown at $15/$75 instead of $5/$25)
|
|
484
|
+
// because three different files held copies of the same fact. The catalog
|
|
485
|
+
// file is the single source of truth; CI fails if its snapshotDate is
|
|
486
|
+
// older than 6 months.
|
|
487
|
+
function buildAnthropicProviderModels() {
|
|
488
|
+
return ANTHROPIC_CATALOG_SNAPSHOT.models
|
|
489
|
+
.filter((m) => m.status === "active")
|
|
490
|
+
.map((m) => ({
|
|
491
|
+
id: m.id,
|
|
492
|
+
label: `${m.displayName} (API)`,
|
|
493
|
+
pricing: {
|
|
494
|
+
prompt: m.pricing.promptUsdPer1M,
|
|
495
|
+
completion: m.pricing.completionUsdPer1M,
|
|
496
|
+
},
|
|
497
|
+
}));
|
|
498
|
+
}
|
|
481
499
|
export const PROVIDER_MODELS = {
|
|
482
500
|
"claude-cli": [
|
|
483
501
|
{ id: "sonnet", label: "Claude Sonnet" },
|
|
484
502
|
{ id: "opus", label: "Claude Opus" },
|
|
485
503
|
{ id: "haiku", label: "Claude Haiku" },
|
|
486
504
|
],
|
|
487
|
-
"anthropic":
|
|
488
|
-
{ id: "claude-sonnet-4-6", label: "Claude Sonnet 4.6 (API)", pricing: { prompt: 3, completion: 15 } },
|
|
489
|
-
{ id: "claude-opus-4-7", label: "Claude Opus 4.7 (API)", pricing: { prompt: 15, completion: 75 } },
|
|
490
|
-
{ id: "claude-opus-4-6", label: "Claude Opus 4.6 (API)", pricing: { prompt: 15, completion: 75 } },
|
|
491
|
-
{ id: "claude-haiku-4-5-20251001", label: "Claude Haiku 4.5 (API)", pricing: { prompt: 1, completion: 5 } },
|
|
492
|
-
],
|
|
505
|
+
"anthropic": buildAnthropicProviderModels(),
|
|
493
506
|
"ollama": [
|
|
494
507
|
{ id: "llama3.1:8b", label: "Llama 3.1 8B" },
|
|
495
508
|
{ id: "qwen2.5:32b", label: "Qwen 2.5 32B" },
|
|
@@ -504,6 +517,13 @@ export const PROVIDER_MODELS = {
|
|
|
504
517
|
{ id: "o3", label: "OpenAI o3" },
|
|
505
518
|
{ id: "o4-mini", label: "OpenAI o4-mini" },
|
|
506
519
|
],
|
|
520
|
+
"openai": [
|
|
521
|
+
{ id: "gpt-4o-mini", label: "GPT-4o mini (API)", pricing: { prompt: 0.15, completion: 0.60 } },
|
|
522
|
+
{ id: "gpt-4o", label: "GPT-4o (API)", pricing: { prompt: 2.50, completion: 10 } },
|
|
523
|
+
{ id: "gpt-4.1", label: "GPT-4.1 (API)", pricing: { prompt: 2, completion: 8 } },
|
|
524
|
+
{ id: "gpt-4.1-mini", label: "GPT-4.1 mini (API)", pricing: { prompt: 0.40, completion: 1.60 } },
|
|
525
|
+
{ id: "o4-mini", label: "o4-mini (API)", pricing: { prompt: 1.10, completion: 4.40 } },
|
|
526
|
+
],
|
|
507
527
|
"openrouter": [
|
|
508
528
|
// Anthropic via OpenRouter
|
|
509
529
|
{ id: "anthropic/claude-opus-4", label: "Claude Opus 4 (via OpenRouter)" },
|
|
@@ -682,7 +702,7 @@ export async function detectAvailableProviders() {
|
|
|
682
702
|
resolvedModel: resolveClaudeCodeModel(),
|
|
683
703
|
});
|
|
684
704
|
// Anthropic API — available if ANTHROPIC_API_KEY is set OR a key is in the
|
|
685
|
-
//
|
|
705
|
+
// settings-store. After 0702 the tier concept is gone; storage is file-only.
|
|
686
706
|
providers.push({
|
|
687
707
|
id: "anthropic",
|
|
688
708
|
label: "Anthropic API",
|
|
@@ -690,6 +710,14 @@ export async function detectAvailableProviders() {
|
|
|
690
710
|
settingsStore.hasKeySync("anthropic"),
|
|
691
711
|
models: PROVIDER_MODELS["anthropic"],
|
|
692
712
|
});
|
|
713
|
+
// OpenAI API — available if OPENAI_API_KEY is set OR a key is stored (0702 T-023).
|
|
714
|
+
providers.push({
|
|
715
|
+
id: "openai",
|
|
716
|
+
label: "OpenAI API",
|
|
717
|
+
available: !!process.env.OPENAI_API_KEY ||
|
|
718
|
+
settingsStore.hasKeySync("openai"),
|
|
719
|
+
models: PROVIDER_MODELS["openai"],
|
|
720
|
+
});
|
|
693
721
|
// OpenRouter — available if OPENROUTER_API_KEY is set OR a key is stored.
|
|
694
722
|
providers.push({
|
|
695
723
|
id: "openrouter",
|
|
@@ -812,9 +840,12 @@ export function registerRoutes(router, root, projectName) {
|
|
|
812
840
|
id: m.id,
|
|
813
841
|
name: m.name || m.id,
|
|
814
842
|
contextWindow: typeof m.context_length === "number" ? m.context_length : undefined,
|
|
843
|
+
// 0710 — OpenRouter publishes USD per token; canonicalize to USD per 1M
|
|
844
|
+
// tokens so the wire contract matches PROVIDER_MODELS["anthropic"]
|
|
845
|
+
// (3, 15, 75, …) and every consumer can assume one unit.
|
|
815
846
|
pricing: {
|
|
816
|
-
prompt: parseFloat(m.pricing?.prompt || "0"),
|
|
817
|
-
completion: parseFloat(m.pricing?.completion || "0"),
|
|
847
|
+
prompt: parseFloat(m.pricing?.prompt || "0") * 1_000_000,
|
|
848
|
+
completion: parseFloat(m.pricing?.completion || "0") * 1_000_000,
|
|
818
849
|
},
|
|
819
850
|
}));
|
|
820
851
|
OPENROUTER_CACHE.set(cacheKey, { value: models, fetchedAt: now });
|
|
@@ -831,13 +862,17 @@ export function registerRoutes(router, root, projectName) {
|
|
|
831
862
|
sendJson(res, { error: err.message }, 500);
|
|
832
863
|
}
|
|
833
864
|
});
|
|
834
|
-
// Settings / API key endpoints (
|
|
835
|
-
// Keys live on-device
|
|
836
|
-
//
|
|
837
|
-
// (stored, updatedAt).
|
|
865
|
+
// Settings / API key endpoints (0682 — US-004).
|
|
866
|
+
// Keys live on-device only. Never logged, never synced, never returned
|
|
867
|
+
// through GET. Response includes only metadata (stored, updatedAt, tier).
|
|
838
868
|
router.get("/api/settings/keys", async (_req, res) => {
|
|
839
869
|
sendJson(res, settingsStore.listKeys());
|
|
840
870
|
});
|
|
871
|
+
// 0702 T-024: expose the absolute keys.env path for the Settings footer +
|
|
872
|
+
// "Copy path" button. Key contents are NEVER returned — path only.
|
|
873
|
+
router.get("/api/settings/storage-path", async (_req, res) => {
|
|
874
|
+
sendJson(res, { path: settingsStore.getKeysFilePath() });
|
|
875
|
+
});
|
|
841
876
|
router.post("/api/settings/keys", async (req, res) => {
|
|
842
877
|
// Reject any request that smuggles the key in a query-string — JSON body only.
|
|
843
878
|
const url = req.url || "";
|
|
@@ -850,25 +885,19 @@ export function registerRoutes(router, root, projectName) {
|
|
|
850
885
|
sendJson(res, { error: "key must be non-empty string" }, 400);
|
|
851
886
|
return;
|
|
852
887
|
}
|
|
853
|
-
if (body.provider !== "
|
|
854
|
-
body.provider !== "openai" &&
|
|
855
|
-
body.provider !== "openrouter") {
|
|
888
|
+
if (typeof body.provider !== "string" || !isProviderId(body.provider)) {
|
|
856
889
|
sendJson(res, { error: `unknown provider: ${String(body.provider)}` }, 400);
|
|
857
890
|
return;
|
|
858
891
|
}
|
|
892
|
+
const providerId = body.provider;
|
|
859
893
|
try {
|
|
860
|
-
const saved = await settingsStore.saveKey(
|
|
861
|
-
// Prefix hint — non-blocking, purely informational
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
warning = "key doesn't match typical OpenAI prefix sk-";
|
|
868
|
-
}
|
|
869
|
-
else if (body.provider === "openrouter" && !body.key.startsWith("sk-or-")) {
|
|
870
|
-
warning = "key doesn't match typical OpenRouter prefix sk-or-";
|
|
871
|
-
}
|
|
894
|
+
const saved = await settingsStore.saveKey(providerId, body.key.trim());
|
|
895
|
+
// Prefix hint — non-blocking, purely informational. Sourced from PROVIDERS
|
|
896
|
+
// so adding a provider later automatically extends the warning.
|
|
897
|
+
const descriptor = getProviderById(providerId);
|
|
898
|
+
const warning = descriptor.keyPrefix && !body.key.startsWith(descriptor.keyPrefix)
|
|
899
|
+
? `key doesn't match typical ${descriptor.label} prefix ${descriptor.keyPrefix}`
|
|
900
|
+
: undefined;
|
|
872
901
|
sendJson(res, {
|
|
873
902
|
ok: true,
|
|
874
903
|
updatedAt: saved.updatedAt,
|
|
@@ -880,17 +909,51 @@ export function registerRoutes(router, root, projectName) {
|
|
|
880
909
|
sendJson(res, { error: err.message }, 500);
|
|
881
910
|
}
|
|
882
911
|
});
|
|
883
|
-
router.delete("/api/settings/keys/:provider", async (
|
|
884
|
-
const provider =
|
|
885
|
-
if (provider !== "
|
|
886
|
-
provider !== "openai" &&
|
|
887
|
-
provider !== "openrouter") {
|
|
912
|
+
router.delete("/api/settings/keys/:provider", async (_req, res, params) => {
|
|
913
|
+
const provider = params.provider;
|
|
914
|
+
if (typeof provider !== "string" || !isProviderId(provider)) {
|
|
888
915
|
sendJson(res, { error: `unknown provider: ${String(provider)}` }, 400);
|
|
889
916
|
return;
|
|
890
917
|
}
|
|
891
918
|
await settingsStore.removeKey(provider);
|
|
892
919
|
sendJson(res, { ok: true });
|
|
893
920
|
});
|
|
921
|
+
// Migration — one-shot copy from pre-0702 macOS Keychain into the file store.
|
|
922
|
+
// Non-Darwin platforms short-circuit inside the migrator (no spawn).
|
|
923
|
+
router.get("/api/settings/migration-status", async (_req, res) => {
|
|
924
|
+
try {
|
|
925
|
+
const migrator = new DarwinKeychainMigrator();
|
|
926
|
+
const availability = await migrator.available();
|
|
927
|
+
sendJson(res, {
|
|
928
|
+
hasLegacyKeys: availability.hasLegacyKeys,
|
|
929
|
+
providers: availability.providers,
|
|
930
|
+
ackStatus: availability.ackStatus ?? null,
|
|
931
|
+
});
|
|
932
|
+
}
|
|
933
|
+
catch (err) {
|
|
934
|
+
sendJson(res, { error: err.message }, 500);
|
|
935
|
+
}
|
|
936
|
+
});
|
|
937
|
+
router.post("/api/settings/migration/perform", async (_req, res) => {
|
|
938
|
+
try {
|
|
939
|
+
const migrator = new DarwinKeychainMigrator();
|
|
940
|
+
const result = await migrator.migrate();
|
|
941
|
+
sendJson(res, { migrated: result.migrated });
|
|
942
|
+
}
|
|
943
|
+
catch (err) {
|
|
944
|
+
sendJson(res, { error: err.message }, 500);
|
|
945
|
+
}
|
|
946
|
+
});
|
|
947
|
+
router.post("/api/settings/migration/acknowledge", async (_req, res) => {
|
|
948
|
+
try {
|
|
949
|
+
const migrator = new DarwinKeychainMigrator();
|
|
950
|
+
await migrator.acknowledge();
|
|
951
|
+
sendJson(res, { ok: true });
|
|
952
|
+
}
|
|
953
|
+
catch (err) {
|
|
954
|
+
sendJson(res, { error: err.message }, 500);
|
|
955
|
+
}
|
|
956
|
+
});
|
|
894
957
|
// Config — expose current provider/model + available providers + project
|
|
895
958
|
// IMPORTANT: Return raw model IDs (e.g. "sonnet"), NOT display models
|
|
896
959
|
// (e.g. "claude-sonnet"). The frontend round-trips config.model back to
|
|
@@ -1105,35 +1168,59 @@ export function registerRoutes(router, root, projectName) {
|
|
|
1105
1168
|
}
|
|
1106
1169
|
return skill;
|
|
1107
1170
|
}
|
|
1108
|
-
// T-009: Versions
|
|
1171
|
+
// T-009 (proxy) + 0707 T-021 (harden): Versions endpoint
|
|
1172
|
+
//
|
|
1173
|
+
// Envelope: { versions: VersionEntry[], count: number, source: "platform" | "none" }
|
|
1174
|
+
// - source:"platform" → remote Verified-Skill platform responded
|
|
1175
|
+
// - source:"none" → skill has no VCS surface (local fixture, platform
|
|
1176
|
+
// unreachable, or platform returned non-OK). In this
|
|
1177
|
+
// case the `X-Skill-VCS: unavailable` response header
|
|
1178
|
+
// is also emitted so the UI can badge the skill as
|
|
1179
|
+
// "no version history" without treating it as an error.
|
|
1180
|
+
//
|
|
1181
|
+
// Never returns 5xx for the "no VCS surface" case — that is normal empty state.
|
|
1109
1182
|
router.get("/api/skills/:plugin/:skill/versions", async (req, res, params) => {
|
|
1110
1183
|
const fullName = resolveSkillApiName(params.skill);
|
|
1111
1184
|
const parts = fullName.split("/");
|
|
1112
1185
|
const apiPath = parts.length === 3
|
|
1113
1186
|
? `/api/v1/skills/${parts.map(encodeURIComponent).join("/")}/versions`
|
|
1114
1187
|
: `/api/v1/skills/${encodeURIComponent(fullName)}/versions`;
|
|
1188
|
+
const emptyEnvelope = () => {
|
|
1189
|
+
res.setHeader("X-Skill-VCS", "unavailable");
|
|
1190
|
+
sendJson(res, { versions: [], count: 0, source: "none" }, 200, req);
|
|
1191
|
+
};
|
|
1192
|
+
let fetchResp;
|
|
1115
1193
|
try {
|
|
1116
|
-
|
|
1194
|
+
fetchResp = await fetch(`${PLATFORM_BASE}${apiPath}`, {
|
|
1117
1195
|
signal: AbortSignal.timeout(10_000),
|
|
1118
1196
|
});
|
|
1119
|
-
if (!resp.ok) {
|
|
1120
|
-
sendJson(res, { error: "Platform API unavailable" }, 502, req);
|
|
1121
|
-
return;
|
|
1122
|
-
}
|
|
1123
|
-
const data = (await resp.json());
|
|
1124
|
-
const versions = Array.isArray(data.versions) ? data.versions : [];
|
|
1125
|
-
// Enrich with isInstalled from lockfile
|
|
1126
|
-
const lock = readLockfile();
|
|
1127
|
-
const installedVersion = lock?.skills[params.skill]?.version;
|
|
1128
|
-
const enriched = versions.map((v) => ({
|
|
1129
|
-
...v,
|
|
1130
|
-
isInstalled: installedVersion ? v.version === installedVersion : undefined,
|
|
1131
|
-
}));
|
|
1132
|
-
sendJson(res, enriched, 200, req);
|
|
1133
1197
|
}
|
|
1134
1198
|
catch {
|
|
1135
|
-
|
|
1199
|
+
// Network failure / timeout / no VCS surface → empty envelope, not 502.
|
|
1200
|
+
emptyEnvelope();
|
|
1201
|
+
return;
|
|
1202
|
+
}
|
|
1203
|
+
if (!fetchResp.ok) {
|
|
1204
|
+
emptyEnvelope();
|
|
1205
|
+
return;
|
|
1136
1206
|
}
|
|
1207
|
+
let data;
|
|
1208
|
+
try {
|
|
1209
|
+
data = (await fetchResp.json());
|
|
1210
|
+
}
|
|
1211
|
+
catch {
|
|
1212
|
+
emptyEnvelope();
|
|
1213
|
+
return;
|
|
1214
|
+
}
|
|
1215
|
+
const versions = Array.isArray(data.versions) ? data.versions : [];
|
|
1216
|
+
// Enrich with isInstalled from lockfile
|
|
1217
|
+
const lock = readLockfile();
|
|
1218
|
+
const installedVersion = lock?.skills[params.skill]?.version;
|
|
1219
|
+
const enriched = versions.map((v) => ({
|
|
1220
|
+
...v,
|
|
1221
|
+
isInstalled: installedVersion ? v.version === installedVersion : undefined,
|
|
1222
|
+
}));
|
|
1223
|
+
sendJson(res, { versions: enriched, count: enriched.length, source: "platform" }, 200, req);
|
|
1137
1224
|
});
|
|
1138
1225
|
// T-010: Diff proxy route
|
|
1139
1226
|
router.get("/api/skills/:plugin/:skill/versions/diff", async (req, res, params) => {
|
|
@@ -1409,24 +1496,35 @@ export function registerRoutes(router, root, projectName) {
|
|
|
1409
1496
|
sendJson(res, { description, rawContent: skillContent }, 200, req);
|
|
1410
1497
|
});
|
|
1411
1498
|
// Get evals.json
|
|
1412
|
-
//
|
|
1413
|
-
//
|
|
1414
|
-
//
|
|
1415
|
-
//
|
|
1499
|
+
//
|
|
1500
|
+
// Envelope (0707 T-023 / T-025):
|
|
1501
|
+
// 200 { exists: false, evals: [] } when evals.json is missing
|
|
1502
|
+
// 200 { exists: true, ...EvalsFile } when valid (evals[], skill_name, …)
|
|
1503
|
+
// 422 { error, errors[] } when malformed / fails schema
|
|
1504
|
+
// 500 { error } only for unexpected I/O failures
|
|
1505
|
+
//
|
|
1506
|
+
// "missing" must be distinguishable from "malformed" so the UI can render
|
|
1507
|
+
// the former as an empty-state CTA ("Create evals") and the latter as a
|
|
1508
|
+
// validation error panel. The earlier 400 status conflated malformed with
|
|
1509
|
+
// generic client errors — 422 Unprocessable Entity is the correct semantic
|
|
1510
|
+
// for well-formed requests whose payload fails validation.
|
|
1416
1511
|
router.get("/api/skills/:plugin/:skill/evals", async (req, res, params) => {
|
|
1417
1512
|
const skillDir = resolveSkillDir(root, params.plugin, params.skill);
|
|
1418
1513
|
const evalsPath = join(skillDir, "evals", "evals.json");
|
|
1419
1514
|
if (!existsSync(evalsPath)) {
|
|
1515
|
+
// 0704: 200 empty-state sentinel (was 404) — "no evals.json yet" is
|
|
1516
|
+
// authoring empty state, not an error the client has to filter.
|
|
1420
1517
|
sendJson(res, { exists: false, evals: [] }, 200, req);
|
|
1421
1518
|
return;
|
|
1422
1519
|
}
|
|
1423
1520
|
try {
|
|
1424
1521
|
const evals = loadAndValidateEvals(skillDir);
|
|
1425
|
-
sendJson(res, evals, 200, req);
|
|
1522
|
+
sendJson(res, { exists: true, ...evals }, 200, req);
|
|
1426
1523
|
}
|
|
1427
1524
|
catch (err) {
|
|
1428
1525
|
if (err instanceof EvalValidationError) {
|
|
1429
|
-
|
|
1526
|
+
// 0707 T-023: malformed → 422 (was 400).
|
|
1527
|
+
sendJson(res, { error: err.message, errors: err.errors }, 422, req);
|
|
1430
1528
|
}
|
|
1431
1529
|
else {
|
|
1432
1530
|
sendJson(res, { error: String(err.message) }, 500, req);
|
|
@@ -2057,9 +2155,16 @@ export function registerRoutes(router, root, projectName) {
|
|
|
2057
2155
|
sendJson(res, stats, 200, req);
|
|
2058
2156
|
});
|
|
2059
2157
|
// Get latest benchmark
|
|
2060
|
-
//
|
|
2061
|
-
//
|
|
2158
|
+
//
|
|
2159
|
+
// Envelope (0707 T-022 / T-025):
|
|
2160
|
+
// 200 null when no benchmark has been persisted
|
|
2161
|
+
// 200 <BenchmarkResult> when a benchmark exists
|
|
2162
|
+
//
|
|
2163
|
+
// Always 200 — a missing benchmark is normal empty state, not an error.
|
|
2164
|
+
// Works for any plugin slug (including dashes like `google-workspace`)
|
|
2165
|
+
// because routing uses `[^/]+` groups (see router.ts T-020).
|
|
2062
2166
|
router.get("/api/skills/:plugin/:skill/benchmark/latest", async (req, res, params) => {
|
|
2167
|
+
// 0704: always 200; body null = no benchmark persisted yet.
|
|
2063
2168
|
const skillDir = resolveSkillDir(root, params.plugin, params.skill);
|
|
2064
2169
|
const benchmark = await readBenchmark(skillDir);
|
|
2065
2170
|
sendJson(res, benchmark ?? null, 200, req);
|
|
@@ -2181,10 +2286,33 @@ Return ONLY the JSON lines, no other text.`;
|
|
|
2181
2286
|
}
|
|
2182
2287
|
});
|
|
2183
2288
|
// List activation test history (summaries only)
|
|
2289
|
+
//
|
|
2290
|
+
// Envelope (0707 T-024 / T-025):
|
|
2291
|
+
// 200 { runs: [], count: 0 } when the history log doesn't
|
|
2292
|
+
// exist / the skill has never been
|
|
2293
|
+
// activation-tested. listActivation-
|
|
2294
|
+
// Runs() catches ENOENT internally
|
|
2295
|
+
// and returns [] — see activation-
|
|
2296
|
+
// history.ts readHistoryFile().
|
|
2297
|
+
// 200 { runs: [...], count: <N> } when entries exist
|
|
2298
|
+
// 500 { error } only for unexpected I/O failures
|
|
2299
|
+
// (ENOENT is explicitly not one)
|
|
2184
2300
|
router.get("/api/skills/:plugin/:skill/activation-history", async (req, res, params) => {
|
|
2185
2301
|
const skillDir = resolveSkillDir(root, params.plugin, params.skill);
|
|
2186
|
-
|
|
2187
|
-
|
|
2302
|
+
try {
|
|
2303
|
+
const runs = await listActivationRuns(skillDir);
|
|
2304
|
+
sendJson(res, { runs, count: runs.length }, 200, req);
|
|
2305
|
+
}
|
|
2306
|
+
catch (err) {
|
|
2307
|
+
const code = err?.code;
|
|
2308
|
+
if (code === "ENOENT") {
|
|
2309
|
+
// Defensive — listActivationRuns already swallows ENOENT, but in case
|
|
2310
|
+
// a future refactor propagates it we still return the empty envelope.
|
|
2311
|
+
sendJson(res, { runs: [], count: 0 }, 200, req);
|
|
2312
|
+
return;
|
|
2313
|
+
}
|
|
2314
|
+
sendJson(res, { error: err.message }, 500, req);
|
|
2315
|
+
}
|
|
2188
2316
|
});
|
|
2189
2317
|
// Get full activation test run by ID
|
|
2190
2318
|
router.get("/api/skills/:plugin/:skill/activation-history/:runId", async (req, res, params) => {
|