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.
Files changed (102) hide show
  1. package/README.md +147 -4
  2. package/agents.json +1 -1
  3. package/dist/agents/agents-registry.d.ts +13 -3
  4. package/dist/agents/agents-registry.js +100 -57
  5. package/dist/agents/agents-registry.js.map +1 -1
  6. package/dist/api/client.d.ts +21 -0
  7. package/dist/api/client.js +39 -5
  8. package/dist/api/client.js.map +1 -1
  9. package/dist/commands/diff.d.ts +6 -0
  10. package/dist/commands/diff.js +104 -0
  11. package/dist/commands/diff.js.map +1 -0
  12. package/dist/commands/eval/serve.js +29 -83
  13. package/dist/commands/eval/serve.js.map +1 -1
  14. package/dist/commands/keys.d.ts +14 -0
  15. package/dist/commands/keys.js +166 -0
  16. package/dist/commands/keys.js.map +1 -0
  17. package/dist/commands/masked-stdin.d.ts +14 -0
  18. package/dist/commands/masked-stdin.js +79 -0
  19. package/dist/commands/masked-stdin.js.map +1 -0
  20. package/dist/commands/skill.d.ts +6 -0
  21. package/dist/commands/skill.js +366 -0
  22. package/dist/commands/skill.js.map +1 -0
  23. package/dist/commands/update.js +15 -4
  24. package/dist/commands/update.js.map +1 -1
  25. package/dist/core/skill-emitter.d.ts +37 -0
  26. package/dist/core/skill-emitter.js +333 -0
  27. package/dist/core/skill-emitter.js.map +1 -0
  28. package/dist/core/skill-generator.d.ts +27 -0
  29. package/dist/core/skill-generator.js +100 -0
  30. package/dist/core/skill-generator.js.map +1 -0
  31. package/dist/eval/anthropic-catalog.d.ts +49 -0
  32. package/dist/eval/anthropic-catalog.js +238 -0
  33. package/dist/eval/anthropic-catalog.js.map +1 -0
  34. package/dist/eval/llm.d.ts +1 -1
  35. package/dist/eval/llm.js +68 -10
  36. package/dist/eval/llm.js.map +1 -1
  37. package/dist/eval/mcp-detector.js +24 -3
  38. package/dist/eval/mcp-detector.js.map +1 -1
  39. package/dist/eval/model-resolver.d.ts +39 -0
  40. package/dist/eval/model-resolver.js +94 -0
  41. package/dist/eval/model-resolver.js.map +1 -0
  42. package/dist/eval/pricing.js +42 -16
  43. package/dist/eval/pricing.js.map +1 -1
  44. package/dist/eval/skill-scanner.d.ts +0 -5
  45. package/dist/eval/skill-scanner.js +0 -12
  46. package/dist/eval/skill-scanner.js.map +1 -1
  47. package/dist/eval-server/api-routes.d.ts +1 -0
  48. package/dist/eval-server/api-routes.js +191 -63
  49. package/dist/eval-server/api-routes.js.map +1 -1
  50. package/dist/eval-server/authoring-routes.js +21 -1
  51. package/dist/eval-server/authoring-routes.js.map +1 -1
  52. package/dist/eval-server/boot-preflight.js +8 -10
  53. package/dist/eval-server/boot-preflight.js.map +1 -1
  54. package/dist/eval-server/darwin-migrator.d.ts +57 -0
  55. package/dist/eval-server/darwin-migrator.js +169 -0
  56. package/dist/eval-server/darwin-migrator.js.map +1 -0
  57. package/dist/eval-server/eval-server.d.ts +1 -0
  58. package/dist/eval-server/eval-server.js +10 -0
  59. package/dist/eval-server/eval-server.js.map +1 -1
  60. package/dist/eval-server/providers.d.ts +7 -12
  61. package/dist/eval-server/providers.js +13 -15
  62. package/dist/eval-server/providers.js.map +1 -1
  63. package/dist/eval-server/settings-store.d.ts +17 -19
  64. package/dist/eval-server/settings-store.js +192 -189
  65. package/dist/eval-server/settings-store.js.map +1 -1
  66. package/dist/eval-server/skill-create-routes.d.ts +62 -0
  67. package/dist/eval-server/skill-create-routes.js +97 -132
  68. package/dist/eval-server/skill-create-routes.js.map +1 -1
  69. package/dist/eval-ui/assets/{CommandPalette-6cLEufX0.js → CommandPalette-DAWyTgXL.js} +1 -1
  70. package/dist/eval-ui/assets/CreateSkillPage-D5xmvnzV.js +12 -0
  71. package/dist/eval-ui/assets/UpdateDropdown-6bfwsX0-.js +1 -0
  72. package/dist/eval-ui/assets/index-C_-YXE6O.js +102 -0
  73. package/dist/eval-ui/index.html +1 -1
  74. package/dist/first-run-onboarding.d.ts +19 -0
  75. package/dist/first-run-onboarding.js +104 -0
  76. package/dist/first-run-onboarding.js.map +1 -0
  77. package/dist/index.js +21 -0
  78. package/dist/index.js.map +1 -1
  79. package/dist/installer/canonical.d.ts +2 -0
  80. package/dist/installer/canonical.js +33 -3
  81. package/dist/installer/canonical.js.map +1 -1
  82. package/dist/studio/lib/ops-log.js +1 -4
  83. package/dist/studio/lib/ops-log.js.map +1 -1
  84. package/dist/studio/lib/scope-transfer.d.ts +0 -10
  85. package/dist/studio/lib/scope-transfer.js +13 -116
  86. package/dist/studio/lib/scope-transfer.js.map +1 -1
  87. package/dist/studio/routes/ops.js +3 -26
  88. package/dist/studio/routes/ops.js.map +1 -1
  89. package/dist/studio/routes/promote.js +15 -9
  90. package/dist/studio/routes/promote.js.map +1 -1
  91. package/dist/studio/routes/test-install.js +11 -4
  92. package/dist/studio/routes/test-install.js.map +1 -1
  93. package/dist/utils/agent-filter.js +5 -4
  94. package/dist/utils/agent-filter.js.map +1 -1
  95. package/dist/utils/resolve-binary.d.ts +22 -0
  96. package/dist/utils/resolve-binary.js +44 -1
  97. package/dist/utils/resolve-binary.js.map +1 -1
  98. package/package.json +3 -1
  99. package/scripts/preuninstall.cjs +2 -9
  100. package/dist/eval-ui/assets/CreateSkillPage-kn7xDaAP.js +0 -12
  101. package/dist/eval-ui/assets/UpdateDropdown-9qR5NxTi.js +0 -1
  102. 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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"}
@@ -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",
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/eval/pricing.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAU9E,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E,MAAM,OAAO,GAAiD;IAC5D,SAAS,EAAE;QACT,iBAAiB,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;QACxF,iBAAiB,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;QACxF,wBAAwB,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;QAChG,mBAAmB,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;QAC1F,0BAA0B,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;QACjG,2BAA2B,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE;KACrG;IACD,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE;QACrF,SAAS,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE;QAC/E,cAAc,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE;KAC3F;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;QAC1F,kBAAkB,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE;KAC/F;CACF,CAAC;AAEF,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,MAAM,aAAa,GAA2C;IAC5D,SAAS,EAAE;QACT,QAAQ,EAAE,mBAAmB;QAC7B,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,2BAA2B;QACpC,eAAe,EAAE,mBAAmB;QACpC,aAAa,EAAE,iBAAiB;QAChC,cAAc,EAAE,2BAA2B;KAC5C;IACD,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,yEAAyE;AACzE,MAAM,oBAAoB,GAA2B;IACnD,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,QAAQ;IACrB,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,aAAa,GAAgC;IACjD,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,WAAW;IACzB,QAAQ,EAAE,MAAM;IAChB,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,MAAM;CACrB,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,KAAa;IAChE,sDAAsD;IACtD,MAAM,eAAe,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACnE,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,eAAe;IACf,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAEtD,mBAAmB;IACnB,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,aAAa,CAAC,QAAQ,CAAC;YAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,KAAa,EACb,WAA0B,EAC1B,YAA2B;IAE3B,gCAAgC;IAChC,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAElD,sCAAsC;IACtC,IAAI,WAAW,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAE7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IACtE,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACzE,OAAO,SAAS,GAAG,UAAU,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,KAAa,EACb,cAAsB,EACtB,eAAuB;IAEvB,OAAO,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AACzE,CAAC"}
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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"}
@@ -113,6 +113,7 @@ type OpenRouterCacheEntry = {
113
113
  id: string;
114
114
  name: string;
115
115
  contextWindow?: number;
116
+ /** USD per 1M tokens (canonical wire unit; converted from per-token at ingestion). */
116
117
  pricing: {
117
118
  prompt: number;
118
119
  completion: number;
@@ -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
- // 0701 — Anthropic API pricing per 1M tokens (input/output only; cache read/write
479
- // not surfaced in this release).
480
- // Source: https://www.anthropic.com/pricing snapshot 2026-04-24. Re-verify annually.
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
- // file-backed settings store (`$VSKILL_CONFIG_DIR/keys.env`).
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 (0702cross-platform file-backed storage).
835
- // Keys live on-device at `$VSKILL_CONFIG_DIR/keys.env`. Never logged, never
836
- // synced, never returned through GET. Response includes only metadata
837
- // (stored, updatedAt).
865
+ // Settings / API key endpoints (0682US-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 !== "anthropic" &&
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(body.provider, body.key.trim());
861
- // Prefix hint — non-blocking, purely informational
862
- let warning;
863
- if (body.provider === "anthropic" && !body.key.startsWith("sk-ant-")) {
864
- warning = "key doesn't match typical Anthropic prefix sk-ant-";
865
- }
866
- else if (body.provider === "openai" && !body.key.startsWith("sk-")) {
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 (req, res) => {
884
- const provider = req.params?.provider;
885
- if (provider !== "anthropic" &&
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 proxy route
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
- const resp = await fetch(`${PLATFORM_BASE}${apiPath}`, {
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
- sendJson(res, { error: "Platform API unavailable" }, 502, req);
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
- // 0704: a missing evals.json is a legitimate "no data yet" state for a
1413
- // freshly-created skill not a route error. Return 200 with a valid-empty
1414
- // EvalsFile body so the devtools Network tab stays clean and consumers don't
1415
- // have to pattern-match on 404.
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
- sendJson(res, { error: err.message, errors: err.errors }, 400, req);
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
- // 0704: "no benchmark yet" is a normal state for a freshly-created skill —
2061
- // return 200 null so the client sees null without a 404 in the network tab.
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
- const runs = await listActivationRuns(skillDir);
2187
- sendJson(res, { runs }, 200, req);
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) => {