vskill 0.5.104 → 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 (76) hide show
  1. package/README.md +123 -2
  2. package/agents.json +1 -1
  3. package/dist/agents/agents-registry.d.ts +0 -1
  4. package/dist/agents/agents-registry.js +10 -30
  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 +2 -5
  10. package/dist/commands/diff.js +82 -117
  11. package/dist/commands/diff.js.map +1 -1
  12. package/dist/commands/eval/serve.js +4 -0
  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 +3 -29
  21. package/dist/commands/skill.js +6 -32
  22. package/dist/commands/skill.js.map +1 -1
  23. package/dist/eval/anthropic-catalog.d.ts +49 -0
  24. package/dist/eval/anthropic-catalog.js +238 -0
  25. package/dist/eval/anthropic-catalog.js.map +1 -0
  26. package/dist/eval/llm.d.ts +1 -1
  27. package/dist/eval/llm.js +68 -10
  28. package/dist/eval/llm.js.map +1 -1
  29. package/dist/eval/mcp-detector.js +24 -3
  30. package/dist/eval/mcp-detector.js.map +1 -1
  31. package/dist/eval/model-resolver.d.ts +39 -0
  32. package/dist/eval/model-resolver.js +94 -0
  33. package/dist/eval/model-resolver.js.map +1 -0
  34. package/dist/eval/pricing.js +42 -16
  35. package/dist/eval/pricing.js.map +1 -1
  36. package/dist/eval-server/api-routes.d.ts +8 -0
  37. package/dist/eval-server/api-routes.js +212 -51
  38. package/dist/eval-server/api-routes.js.map +1 -1
  39. package/dist/eval-server/authoring-routes.js +21 -1
  40. package/dist/eval-server/authoring-routes.js.map +1 -1
  41. package/dist/eval-server/boot-preflight.js +8 -10
  42. package/dist/eval-server/boot-preflight.js.map +1 -1
  43. package/dist/eval-server/darwin-migrator.d.ts +57 -0
  44. package/dist/eval-server/darwin-migrator.js +169 -0
  45. package/dist/eval-server/darwin-migrator.js.map +1 -0
  46. package/dist/eval-server/eval-server.d.ts +1 -0
  47. package/dist/eval-server/eval-server.js +10 -0
  48. package/dist/eval-server/eval-server.js.map +1 -1
  49. package/dist/eval-server/providers.d.ts +7 -12
  50. package/dist/eval-server/providers.js +13 -15
  51. package/dist/eval-server/providers.js.map +1 -1
  52. package/dist/eval-server/settings-store.d.ts +31 -26
  53. package/dist/eval-server/settings-store.js +246 -143
  54. package/dist/eval-server/settings-store.js.map +1 -1
  55. package/dist/eval-server/skill-create-routes.js +18 -0
  56. package/dist/eval-server/skill-create-routes.js.map +1 -1
  57. package/dist/eval-ui/assets/{CommandPalette-DiPALzlG.js → CommandPalette-DAWyTgXL.js} +1 -1
  58. package/dist/eval-ui/assets/CreateSkillPage-D5xmvnzV.js +12 -0
  59. package/dist/eval-ui/assets/UpdateDropdown-6bfwsX0-.js +1 -0
  60. package/dist/eval-ui/assets/index-C_-YXE6O.js +102 -0
  61. package/dist/eval-ui/index.html +1 -1
  62. package/dist/first-run-onboarding.d.ts +19 -0
  63. package/dist/first-run-onboarding.js +104 -0
  64. package/dist/first-run-onboarding.js.map +1 -0
  65. package/dist/index.js +18 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/installer/canonical.js +12 -13
  68. package/dist/installer/canonical.js.map +1 -1
  69. package/dist/utils/resolve-binary.js +7 -8
  70. package/dist/utils/resolve-binary.js.map +1 -1
  71. package/package.json +3 -1
  72. package/dist/eval-ui/assets/CreateSkillPage-BMrFELep.js +0 -12
  73. package/dist/eval-ui/assets/UpdateDropdown-Bj8kZzuR.js +0 -1
  74. package/dist/eval-ui/assets/_shimNode-D3bBqrAh.js +0 -1
  75. package/dist/eval-ui/assets/index-BSPDkfZG.js +0 -102
  76. package/dist/eval-ui/assets/resolve-binary-DIxhrZ6O.js +0 -2
@@ -0,0 +1,169 @@
1
+ // ---------------------------------------------------------------------------
2
+ // darwin-migrator.ts — Optional one-shot migration from the pre-0702
3
+ // macOS Keychain storage model to the new file-backed settings store.
4
+ //
5
+ // Shape:
6
+ // - `available()` → probes the keychain for legacy entries so the UI can
7
+ // decide whether to show a migration banner.
8
+ // - `migrate()` → copies each legacy entry into the file store, writes
9
+ // a state file so this run is idempotent.
10
+ // - `acknowledge()` → user dismissed the banner; records ackedAt so we
11
+ // don't prompt again within the 30-day grace window.
12
+ //
13
+ // Security: raw keys never leak through logs. Only `redactKey()` output is
14
+ // emitted. Non-Darwin callers get a silent no-op (no `security` invocation).
15
+ // ---------------------------------------------------------------------------
16
+ import * as nodeFs from "node:fs";
17
+ import * as nodeChildProcess from "node:child_process";
18
+ import * as path from "node:path";
19
+ import * as os from "node:os";
20
+ import { PROVIDERS } from "./providers.js";
21
+ import { redactKey, saveKey } from "./settings-store.js";
22
+ export const DEFAULT_GRACE_PERIOD_DAYS = 30;
23
+ // ---------------------------------------------------------------------------
24
+ // State file helpers — exported for test fixtures + the api-routes handler.
25
+ // ---------------------------------------------------------------------------
26
+ function defaultStatePath() {
27
+ const base = process.env.VSKILL_CONFIG_DIR && process.env.VSKILL_CONFIG_DIR.length > 0
28
+ ? process.env.VSKILL_CONFIG_DIR
29
+ : path.join(os.homedir(), ".vskill");
30
+ return path.join(base, "migration-state.json");
31
+ }
32
+ export function readMigrationState(filePath) {
33
+ if (!nodeFs.existsSync(filePath))
34
+ return null;
35
+ try {
36
+ const raw = nodeFs.readFileSync(filePath, "utf8");
37
+ const parsed = JSON.parse(raw);
38
+ return {
39
+ acknowledged: parsed.acknowledged === true,
40
+ ackedAt: typeof parsed.ackedAt === "string" ? parsed.ackedAt : null,
41
+ migratedAt: typeof parsed.migratedAt === "string" ? parsed.migratedAt : null,
42
+ };
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ }
48
+ export function writeMigrationState(filePath, state) {
49
+ nodeFs.mkdirSync(path.dirname(filePath), { recursive: true });
50
+ nodeFs.writeFileSync(filePath, JSON.stringify(state, null, 2) + "\n", "utf8");
51
+ }
52
+ // ---------------------------------------------------------------------------
53
+ // Service name mapping — matches the pre-0702 keychain convention
54
+ // `vskill-<provider>` with account `vskill-user`.
55
+ // ---------------------------------------------------------------------------
56
+ function keychainService(provider) {
57
+ return `vskill-${provider}`;
58
+ }
59
+ const KEYCHAIN_ACCOUNT = "vskill-user";
60
+ // ---------------------------------------------------------------------------
61
+ // Migrator
62
+ // ---------------------------------------------------------------------------
63
+ const defaultLogger = {
64
+ warn: (m) => console.warn(m),
65
+ error: (m) => console.error(m),
66
+ info: (m) => console.log(m),
67
+ };
68
+ export class DarwinKeychainMigrator {
69
+ platform;
70
+ spawnSync;
71
+ statePath;
72
+ logger;
73
+ constructor(opts = {}) {
74
+ this.platform = opts.platform ?? process.platform;
75
+ this.spawnSync = opts.spawnSync ?? nodeChildProcess.spawnSync;
76
+ this.statePath = opts.statePath ?? defaultStatePath();
77
+ this.logger = opts.logger ?? defaultLogger;
78
+ }
79
+ /** Probe the keychain for legacy entries. Never writes; never errors on non-Darwin. */
80
+ async available() {
81
+ const state = readMigrationState(this.statePath);
82
+ if (this.platform !== "darwin") {
83
+ return {
84
+ hasLegacyKeys: false,
85
+ providers: [],
86
+ ackStatus: state
87
+ ? { acknowledged: state.acknowledged, ackedAt: state.ackedAt, migratedAt: state.migratedAt }
88
+ : undefined,
89
+ };
90
+ }
91
+ const found = [];
92
+ for (const p of PROVIDERS) {
93
+ const raw = this.probe(p.id);
94
+ if (raw !== null)
95
+ found.push(p.id);
96
+ }
97
+ return {
98
+ hasLegacyKeys: found.length > 0,
99
+ providers: found,
100
+ ackStatus: state
101
+ ? { acknowledged: state.acknowledged, ackedAt: state.ackedAt, migratedAt: state.migratedAt }
102
+ : undefined,
103
+ };
104
+ }
105
+ /** Copy legacy keychain entries into the file store. Idempotent. */
106
+ async migrate() {
107
+ if (this.platform !== "darwin")
108
+ return { migrated: [] };
109
+ const state = readMigrationState(this.statePath);
110
+ if (state && state.migratedAt) {
111
+ // Already migrated — honor idempotency.
112
+ return { migrated: [] };
113
+ }
114
+ const migrated = [];
115
+ for (const p of PROVIDERS) {
116
+ const raw = this.probe(p.id);
117
+ if (raw === null)
118
+ continue;
119
+ try {
120
+ await saveKey(p.id, raw);
121
+ migrated.push(p.id);
122
+ this.logger.info?.(`[darwin-migrator] migrated ${p.id} (${redactKey(raw)}) from keychain`);
123
+ }
124
+ catch (err) {
125
+ this.logger.error(`[darwin-migrator] failed to migrate ${p.id}: ${err.message}`);
126
+ }
127
+ }
128
+ writeMigrationState(this.statePath, {
129
+ acknowledged: false,
130
+ ackedAt: null,
131
+ migratedAt: new Date().toISOString(),
132
+ });
133
+ return { migrated };
134
+ }
135
+ /** Record that the user dismissed the migration banner. */
136
+ async acknowledge() {
137
+ const prev = readMigrationState(this.statePath);
138
+ writeMigrationState(this.statePath, {
139
+ acknowledged: true,
140
+ ackedAt: new Date().toISOString(),
141
+ migratedAt: prev?.migratedAt ?? null,
142
+ });
143
+ }
144
+ /** Read a single keychain entry via `security find-generic-password`. */
145
+ probe(provider) {
146
+ const args = [
147
+ "find-generic-password",
148
+ "-s",
149
+ keychainService(provider),
150
+ "-a",
151
+ KEYCHAIN_ACCOUNT,
152
+ "-w",
153
+ ];
154
+ let result;
155
+ try {
156
+ result = this.spawnSync("security", args);
157
+ }
158
+ catch (err) {
159
+ this.logger.warn(`[darwin-migrator] security spawn failed for ${provider}: ${err.message}`);
160
+ return null;
161
+ }
162
+ if (result.status !== 0)
163
+ return null;
164
+ const stdout = typeof result.stdout === "string" ? result.stdout : result.stdout.toString("utf8");
165
+ const value = stdout.trim();
166
+ return value.length > 0 ? value : null;
167
+ }
168
+ }
169
+ //# sourceMappingURL=darwin-migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"darwin-migrator.js","sourceRoot":"","sources":["../../src/eval-server/darwin-migrator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import "./boot-preflight.js";
1
2
  import * as http from "node:http";
2
3
  export interface EvalServerOptions {
3
4
  port: number;
@@ -1,6 +1,16 @@
1
1
  // ---------------------------------------------------------------------------
2
2
  // eval-server.ts -- HTTP server for the eval UI
3
+ //
4
+ // DO NOT REORDER the `./boot-preflight.js` import below — it MUST be the
5
+ // first import in this file so `mergeStoredKeysIntoEnv()` runs before any
6
+ // provider module (Anthropic / OpenAI / OpenRouter SDK) captures
7
+ // `process.env.*_API_KEY` at module-load time. Moving it lower (or guarding
8
+ // it) silently breaks stored-key-only boots. See 0702 T-020/T-021.
3
9
  // ---------------------------------------------------------------------------
10
+ // Side-effect import: populates process.env.*_API_KEY from the file-backed
11
+ // settings store BEFORE any downstream module reads those env vars. Must
12
+ // remain the first import — do not reorder.
13
+ import "./boot-preflight.js";
4
14
  import * as http from "node:http";
5
15
  import * as fs from "node:fs";
6
16
  import * as path from "node:path";
@@ -1 +1 @@
1
- {"version":3,"file":"eval-server.js","sourceRoot":"","sources":["../../src/eval-server/eval-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-server.js","sourceRoot":"","sources":["../../src/eval-server/eval-server.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,11 @@
1
1
  export interface ProviderDescriptor {
2
- /** Stable identifier used as the storage key (lowercase, no dashes). */
3
- id: "anthropic" | "openai" | "openrouter";
4
- /** Human-readable label shown in the UI. */
5
- label: string;
6
- /** Environment variable name that provider SDKs read. */
7
- envVarName: string;
8
- /** Expected prefix of a valid API key (for soft validation + UI hints). */
9
- keyPrefix: string;
10
- /** Canonical URL where users obtain a new key. */
11
- keyIssuanceUrl: string;
2
+ readonly id: "anthropic" | "openai" | "openrouter";
3
+ readonly envVarName: string;
4
+ readonly keyPrefix: string;
5
+ readonly keyIssuanceUrl: string;
6
+ readonly label: string;
12
7
  }
13
8
  export declare const PROVIDERS: readonly ProviderDescriptor[];
14
9
  export type ProviderId = (typeof PROVIDERS)[number]["id"];
15
- export declare function getProvider(id: ProviderId): ProviderDescriptor;
16
- export declare function isProviderId(value: unknown): value is ProviderId;
10
+ export declare function getProviderById(id: ProviderId): ProviderDescriptor;
11
+ export declare function isProviderId(id: string): id is ProviderId;
@@ -1,45 +1,43 @@
1
1
  // ---------------------------------------------------------------------------
2
- // providers.ts — Single source of truth for API-key providers (increment 0702).
2
+ // providers.ts — Single source of truth for provider metadata.
3
3
  //
4
4
  // Consumed by:
5
- // - FileBackedStore (settings-store.ts) iteration for load/save/list
6
- // - mergeStoredKeysIntoEnv — env-var mapping
7
- // - detectAvailableProviders (api-routes.ts) — UI dropdown + CLI validation
8
- // - SettingsModal (UI) — provider rows
9
- // - vskill keys CLI — subcommand validation
10
- //
11
- // Adding a fourth provider should require editing ONLY this file.
5
+ // - settings-store (save/read/merge iteration)
6
+ // - api-routes::detectAvailableProviders
7
+ // - src/cli/keys-command (Phase 3)
8
+ // - src/eval-ui/src/components/SettingsModal (Phase 5)
9
+ // - src/cli/first-run (Phase 4)
12
10
  // ---------------------------------------------------------------------------
13
11
  export const PROVIDERS = [
14
12
  {
15
13
  id: "anthropic",
16
- label: "Anthropic",
17
14
  envVarName: "ANTHROPIC_API_KEY",
18
15
  keyPrefix: "sk-ant-",
19
16
  keyIssuanceUrl: "https://console.anthropic.com/settings/keys",
17
+ label: "Anthropic",
20
18
  },
21
19
  {
22
20
  id: "openai",
23
- label: "OpenAI",
24
21
  envVarName: "OPENAI_API_KEY",
25
22
  keyPrefix: "sk-",
26
23
  keyIssuanceUrl: "https://platform.openai.com/api-keys",
24
+ label: "OpenAI",
27
25
  },
28
26
  {
29
27
  id: "openrouter",
30
- label: "OpenRouter",
31
28
  envVarName: "OPENROUTER_API_KEY",
32
29
  keyPrefix: "sk-or-",
33
30
  keyIssuanceUrl: "https://openrouter.ai/keys",
31
+ label: "OpenRouter",
34
32
  },
35
33
  ];
36
- export function getProvider(id) {
34
+ export function getProviderById(id) {
37
35
  const p = PROVIDERS.find((x) => x.id === id);
38
36
  if (!p)
39
- throw new Error(`Unknown provider: ${String(id)}`);
37
+ throw new Error(`unknown provider: ${id}`);
40
38
  return p;
41
39
  }
42
- export function isProviderId(value) {
43
- return PROVIDERS.some((p) => p.id === value);
40
+ export function isProviderId(id) {
41
+ return PROVIDERS.some((p) => p.id === id);
44
42
  }
45
43
  //# sourceMappingURL=providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/eval-server/providers.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,eAAe;AACf,yEAAyE;AACzE,+CAA+C;AAC/C,8EAA8E;AAC9E,yCAAyC;AACzC,8CAA8C;AAC9C,EAAE;AACF,kEAAkE;AAClE,8EAA8E;AAe9E,MAAM,CAAC,MAAM,SAAS,GAAkC;IACtD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,UAAU,EAAE,mBAAmB;QAC/B,SAAS,EAAE,SAAS;QACpB,cAAc,EAAE,6CAA6C;KAC9D;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,gBAAgB;QAC5B,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,sCAAsC;KACvD;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,QAAQ;QACnB,cAAc,EAAE,4BAA4B;KAC7C;CACO,CAAC;AAIX,MAAM,UAAU,WAAW,CAAC,EAAc;IACxC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/eval-server/providers.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+DAA+D;AAC/D,EAAE;AACF,eAAe;AACf,iDAAiD;AACjD,2CAA2C;AAC3C,qCAAqC;AACrC,yDAAyD;AACzD,kCAAkC;AAClC,8EAA8E;AAU9E,MAAM,CAAC,MAAM,SAAS,GAAkC;IACtD;QACE,EAAE,EAAE,WAAW;QACf,UAAU,EAAE,mBAAmB;QAC/B,SAAS,EAAE,SAAS;QACpB,cAAc,EAAE,6CAA6C;QAC7D,KAAK,EAAE,WAAW;KACnB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,UAAU,EAAE,gBAAgB;QAC5B,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,sCAAsC;QACtD,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,YAAY;QAChB,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,QAAQ;QACnB,cAAc,EAAE,4BAA4B;QAC5C,KAAK,EAAE,YAAY;KACpB;CACO,CAAC;AAIX,MAAM,UAAU,eAAe,CAAC,EAAc;IAC5C,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,39 +1,44 @@
1
- import * as childProcess from "node:child_process";
2
- declare const realSpawn: typeof childProcess.spawn;
3
- export type Provider = "anthropic" | "openrouter";
4
- export type Tier = "browser" | "keychain";
1
+ import * as nodeFs from "node:fs";
2
+ import { type ProviderId } from "./providers.js";
3
+ export type Provider = ProviderId;
4
+ export type { ProviderId } from "./providers.js";
5
5
  export interface KeyMetadata {
6
6
  stored: boolean;
7
7
  updatedAt: string | null;
8
- tier: Tier;
9
8
  }
10
9
  export interface ListKeysResponse {
11
10
  anthropic: KeyMetadata;
11
+ openai: KeyMetadata;
12
12
  openrouter: KeyMetadata;
13
13
  }
14
- export declare class UnsupportedTierError extends Error {
15
- constructor(message: string);
16
- }
17
- export declare function redactKey(key: string): string;
18
- type Logger = {
14
+ export interface Logger {
19
15
  warn: (msg: string) => void;
20
16
  error: (msg: string) => void;
21
- };
22
- export declare function _setLogger(l: Logger): void;
23
- export declare function _setSpawn(s: typeof realSpawn): void;
24
- export declare function _setPlatformOverride(p: NodeJS.Platform | null): void;
25
- export declare function resetSettingsStore(): void;
26
- export declare function getTier(): Tier;
27
- export declare function setTier(tier: Tier): Promise<void>;
28
- export declare function saveKey(provider: Provider, key: string, tier?: Tier): Promise<{
17
+ }
18
+ interface FsFacade {
19
+ writeFileSync: typeof nodeFs.writeFileSync;
20
+ renameSync: typeof nodeFs.renameSync;
21
+ chmodSync: typeof nodeFs.chmodSync;
22
+ readFileSync: typeof nodeFs.readFileSync;
23
+ existsSync: typeof nodeFs.existsSync;
24
+ unlinkSync: typeof nodeFs.unlinkSync;
25
+ mkdirSync: typeof nodeFs.mkdirSync;
26
+ statSync: typeof nodeFs.statSync;
27
+ }
28
+ export declare function getKeysFilePath(): string;
29
+ export declare function redactKey(key: string): string;
30
+ export declare function saveKey(provider: ProviderId, key: string): Promise<{
29
31
  updatedAt: string;
30
- tier: Tier;
31
32
  }>;
32
- export declare function readKey(provider: Provider): string | null;
33
- /** Synchronous accessor used by detectAvailableProviders safe, same semantics. */
34
- export declare function readKeySync(provider: Provider): string | null;
35
- /** Has-key predicate exposed for synchronous availability checks. */
36
- export declare function hasKeySync(provider: Provider): boolean;
37
- export declare function removeKey(provider: Provider): Promise<void>;
33
+ export declare function readKey(provider: ProviderId): string | null;
34
+ export declare function readKeySync(provider: ProviderId): string | null;
35
+ export declare function hasKeySync(provider: ProviderId): boolean;
36
+ export declare function removeKey(provider: ProviderId): Promise<void>;
38
37
  export declare function listKeys(): ListKeysResponse;
39
- export {};
38
+ export declare function mergeStoredKeysIntoEnv(): void;
39
+ export interface ResetOptions {
40
+ logger?: Logger;
41
+ fs?: FsFacade;
42
+ configDir?: string | null;
43
+ }
44
+ export declare function resetSettingsStore(opts?: ResetOptions): void;