vskill 0.5.102 → 0.5.103

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 (38) hide show
  1. package/agents.json +1 -1
  2. package/dist/eval/skill-scanner.d.ts +5 -0
  3. package/dist/eval/skill-scanner.js +12 -0
  4. package/dist/eval/skill-scanner.js.map +1 -1
  5. package/dist/eval-server/api-routes.js +23 -14
  6. package/dist/eval-server/api-routes.js.map +1 -1
  7. package/dist/eval-server/authoring-routes.d.ts +1 -0
  8. package/dist/eval-server/authoring-routes.js +42 -0
  9. package/dist/eval-server/authoring-routes.js.map +1 -1
  10. package/dist/eval-server/boot-preflight.d.ts +1 -0
  11. package/dist/eval-server/boot-preflight.js +17 -0
  12. package/dist/eval-server/boot-preflight.js.map +1 -0
  13. package/dist/eval-server/providers.d.ts +16 -0
  14. package/dist/eval-server/providers.js +45 -0
  15. package/dist/eval-server/providers.js.map +1 -0
  16. package/dist/eval-server/settings-store.d.ts +33 -26
  17. package/dist/eval-server/settings-store.js +245 -145
  18. package/dist/eval-server/settings-store.js.map +1 -1
  19. package/dist/eval-ui/assets/{CommandPalette-BSGTaiI4.js → CommandPalette-6cLEufX0.js} +1 -1
  20. package/dist/eval-ui/assets/CreateSkillPage-kn7xDaAP.js +12 -0
  21. package/dist/eval-ui/assets/{UpdateDropdown-stNmCWki.js → UpdateDropdown-9qR5NxTi.js} +1 -1
  22. package/dist/eval-ui/assets/index-4LdVR3Lo.js +102 -0
  23. package/dist/eval-ui/assets/index-C0Gc_4KC.css +1 -0
  24. package/dist/eval-ui/index.html +2 -2
  25. package/dist/studio/lib/ops-log.js +4 -1
  26. package/dist/studio/lib/ops-log.js.map +1 -1
  27. package/dist/studio/lib/scope-transfer.d.ts +10 -0
  28. package/dist/studio/lib/scope-transfer.js +116 -13
  29. package/dist/studio/lib/scope-transfer.js.map +1 -1
  30. package/dist/studio/routes/ops.js +26 -3
  31. package/dist/studio/routes/ops.js.map +1 -1
  32. package/dist/studio/routes/promote.js +9 -15
  33. package/dist/studio/routes/promote.js.map +1 -1
  34. package/dist/studio/routes/test-install.js +4 -11
  35. package/dist/studio/routes/test-install.js.map +1 -1
  36. package/package.json +1 -1
  37. package/dist/eval-ui/assets/index-BoCK_s7q.js +0 -91
  38. package/dist/eval-ui/assets/index-D5FxVeoM.css +0 -1
@@ -1,39 +1,46 @@
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
+ /** @deprecated Retained for type-compat at consumer call sites; use ProviderId. */
4
+ export type Provider = ProviderId;
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
+ info?: (msg: string) => void;
18
+ }
19
+ export interface SaveKeyResult {
29
20
  updatedAt: string;
30
- tier: Tier;
31
- }>;
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>;
21
+ }
22
+ export declare function redactKey(key: string): string;
23
+ interface FsApi {
24
+ readFileSync: typeof nodeFs.readFileSync;
25
+ writeFileSync: typeof nodeFs.writeFileSync;
26
+ renameSync: typeof nodeFs.renameSync;
27
+ unlinkSync: typeof nodeFs.unlinkSync;
28
+ chmodSync: typeof nodeFs.chmodSync;
29
+ existsSync: typeof nodeFs.existsSync;
30
+ mkdirSync: typeof nodeFs.mkdirSync;
31
+ statSync: typeof nodeFs.statSync;
32
+ }
33
+ export declare function getKeysFilePath(): string;
34
+ export declare function saveKey(provider: ProviderId | string, key: string): Promise<SaveKeyResult>;
35
+ export declare function readKey(provider: ProviderId | string): Promise<string | null>;
36
+ export declare function readKeySync(provider: ProviderId | string): string | null;
37
+ export declare function hasKeySync(provider: ProviderId | string): boolean;
38
+ export declare function removeKey(provider: ProviderId | string): Promise<void>;
38
39
  export declare function listKeys(): ListKeysResponse;
40
+ export declare function mergeStoredKeysIntoEnv(): void;
41
+ export declare function resetSettingsStore(opts?: {
42
+ logger?: Logger;
43
+ fs?: Partial<FsApi>;
44
+ }): void;
45
+ export declare function _internalMapSize(): number;
39
46
  export {};
@@ -1,195 +1,295 @@
1
1
  // ---------------------------------------------------------------------------
2
- // settings-store.ts — Tiered API key storage for vSkill Studio (0682 / US-004).
2
+ // settings-store.ts — File-backed API key storage (increment 0702).
3
3
  //
4
- // Two tiers:
5
- // - "browser" (default, all platforms) in-memory map keyed by provider.
6
- // The browser mirrors the write into localStorage so a page
7
- // reload does not require re-entry.
8
- // - "keychain" (Darwin opt-in) shells out to the `security` binary to
9
- // store under `vskill-<provider>`. No native-module dep.
4
+ // Replaces the prior two-backend credential store with a single
5
+ // FileBackedStore persisting to `$VSKILL_CONFIG_DIR/keys.env` (default
6
+ // `~/.vskill/keys.env`). Keys are merged into `process.env` at boot via
7
+ // `mergeStoredKeysIntoEnv(...)` so provider SDKs that read env vars
8
+ // directly (e.g. createAnthropicClient) see them without any wiring changes.
10
9
  //
11
10
  // Contract:
12
11
  // - Keys NEVER appear in any log, error, toast, network URL, or stdout.
13
- // The only redacted form ever emitted is `****<last-4>` via `redactKey`.
14
- // - `listKeys()` returns metadata only (stored boolean, updatedAt, tier).
15
- // - `removeKey()` is idempotent.
16
- // - Tier switch (setTier) wipes the old tier's entry and re-saves into the
17
- // new tier so the live state stays coherent.
18
- //
19
- // Tests inject a fake logger + a fake spawn factory so the Darwin path is
20
- // exercisable on any host. See __tests__/settings-store.test.ts.
21
- // ---------------------------------------------------------------------------
22
- import * as childProcess from "node:child_process";
23
- // Lazy accessor some test files mock `node:child_process` without re-
24
- // exporting `spawn`. Reading through the namespace at call time avoids
25
- // touching the mock at module-load time, so those tests keep passing.
26
- const realSpawn = ((...args) => childProcess.spawn(...args));
27
- export class UnsupportedTierError extends Error {
28
- constructor(message) {
29
- super(message);
30
- this.name = "UnsupportedTierError";
31
- }
32
- }
12
+ // Only `redactKey()` output (`****<last-4>`) is ever emitted.
13
+ // - Writes are atomic: write tmp chmod 0600 (POSIX) → rename. A failed
14
+ // rename leaves the original file untouched and removes the tmp file.
15
+ // - Parser is lenient: malformed lines are logged once (aggregated) and
16
+ // skipped. Never throws from construction.
17
+ // - Real env vars ALWAYS win over stored keys during merge.
18
+ // ---------------------------------------------------------------------------
19
+ import * as nodeFs from "node:fs";
20
+ import * as os from "node:os";
21
+ import * as path from "node:path";
22
+ import { PROVIDERS } from "./providers.js";
23
+ // ---------------------------------------------------------------------------
24
+ // Redaction the ONLY way raw keys should ever reach a sink.
25
+ // ---------------------------------------------------------------------------
33
26
  export function redactKey(key) {
34
27
  if (!key || key.length <= 4)
35
28
  return "****";
36
29
  return "****" + key.slice(-4);
37
30
  }
38
- const store = new Map();
39
- let currentTier = "browser";
40
- let logger = {
31
+ const defaultLogger = {
41
32
  warn: (m) => console.warn(m),
42
33
  error: (m) => console.error(m),
34
+ info: (m) => console.info(m),
43
35
  };
44
- let spawn = realSpawn;
45
- let platformOverride = null;
46
- export function _setLogger(l) {
47
- logger = l;
48
- }
49
- export function _setSpawn(s) {
50
- spawn = s;
51
- }
52
- export function _setPlatformOverride(p) {
53
- platformOverride = p;
54
- }
55
- export function resetSettingsStore() {
56
- store.clear();
57
- currentTier = "browser";
58
- platformOverride = null;
59
- logger = {
60
- warn: (m) => console.warn(m),
61
- error: (m) => console.error(m),
36
+ // The default `fs` object reads functions lazily from `nodeFs` at call time so
37
+ // that test spies such as `vi.spyOn(fs, 'renameSync')` are honored without
38
+ // needing explicit DI.
39
+ function defaultFs() {
40
+ return {
41
+ readFileSync: (...a) => nodeFs.readFileSync(...a),
42
+ writeFileSync: (...a) => nodeFs.writeFileSync(...a),
43
+ renameSync: (...a) => nodeFs.renameSync(...a),
44
+ unlinkSync: (...a) => nodeFs.unlinkSync(...a),
45
+ chmodSync: (...a) => nodeFs.chmodSync(...a),
46
+ existsSync: (...a) => nodeFs.existsSync(...a),
47
+ mkdirSync: (...a) => nodeFs.mkdirSync(...a),
48
+ statSync: (...a) => nodeFs.statSync(...a),
62
49
  };
63
- spawn = realSpawn;
64
- }
65
- function getPlatform() {
66
- return platformOverride ?? process.platform;
67
50
  }
51
+ const memoryMap = new Map();
52
+ let loadedForPath = null;
53
+ let logger = defaultLogger;
54
+ let fsApi = defaultFs();
68
55
  // ---------------------------------------------------------------------------
69
- // Tier management
56
+ // Path resolution
70
57
  // ---------------------------------------------------------------------------
71
- export function getTier() {
72
- return currentTier;
58
+ function resolveConfigDir() {
59
+ return process.env.VSKILL_CONFIG_DIR ?? path.join(os.homedir(), ".vskill");
73
60
  }
74
- export async function setTier(tier) {
75
- if (tier === "keychain" && getPlatform() !== "darwin") {
76
- throw new UnsupportedTierError("macOS Keychain tier is only supported on Darwin");
61
+ export function getKeysFilePath() {
62
+ return path.join(resolveConfigDir(), "keys.env");
63
+ }
64
+ const ENV_VAR_TO_PROVIDER = new Map(PROVIDERS.map((p) => [p.envVarName, p.id]));
65
+ function parseKeysEnv(content, fileMtime) {
66
+ // Strip BOM if present.
67
+ const body = content.replace(/^\uFEFF/, "");
68
+ const lines = body.split(/\r?\n/);
69
+ const entries = new Map();
70
+ let malformedCount = 0;
71
+ for (const raw of lines) {
72
+ const line = raw.trim();
73
+ // Skip blanks and comments silently — NOT malformed.
74
+ if (line.length === 0 || line.startsWith("#"))
75
+ continue;
76
+ const eqIdx = line.indexOf("=");
77
+ if (eqIdx <= 0) {
78
+ malformedCount++;
79
+ continue;
80
+ }
81
+ const key = line.slice(0, eqIdx).trim();
82
+ const value = line.slice(eqIdx + 1).trim();
83
+ if (key.length === 0 || value.length === 0) {
84
+ malformedCount++;
85
+ continue;
86
+ }
87
+ // Only accept known provider env var names — anything else is malformed.
88
+ const providerId = ENV_VAR_TO_PROVIDER.get(key);
89
+ if (!providerId) {
90
+ malformedCount++;
91
+ continue;
92
+ }
93
+ entries.set(providerId, { key: value, updatedAt: fileMtime });
94
+ }
95
+ return { entries, malformedCount };
96
+ }
97
+ // ---------------------------------------------------------------------------
98
+ // Internal: load from disk into the memory map (idempotent per path).
99
+ // ---------------------------------------------------------------------------
100
+ function loadFromDisk() {
101
+ const filePath = getKeysFilePath();
102
+ if (loadedForPath === filePath)
103
+ return;
104
+ memoryMap.clear();
105
+ loadedForPath = filePath;
106
+ if (!fsApi.existsSync(filePath))
107
+ return;
108
+ let content;
109
+ let mtime;
110
+ try {
111
+ content = String(fsApi.readFileSync(filePath, "utf8"));
112
+ const stat = fsApi.statSync(filePath);
113
+ mtime = stat.mtime.toISOString();
77
114
  }
78
- if (tier === currentTier)
115
+ catch (err) {
116
+ logger.warn(`[settings-store] could not read keys file: ${err.message}`);
79
117
  return;
80
- // Move every stored key into the new tier.
81
- const entries = Array.from(store.entries());
82
- for (const [provider, entry] of entries) {
83
- if (tier === "keychain") {
84
- await keychainAdd(provider, entry.key);
85
- store.set(provider, { ...entry, tier });
118
+ }
119
+ const parsed = parseKeysEnv(content, mtime);
120
+ for (const [id, entry] of parsed.entries) {
121
+ memoryMap.set(id, entry);
122
+ }
123
+ if (parsed.malformedCount > 0) {
124
+ logger.warn(`[settings-store] ${parsed.malformedCount} malformed line(s) in ${filePath} were skipped`);
125
+ }
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // Internal: serialize the current memory map back to disk atomically.
129
+ // ---------------------------------------------------------------------------
130
+ function writeToDisk() {
131
+ const filePath = getKeysFilePath();
132
+ const dir = path.dirname(filePath);
133
+ // Ensure the config directory exists.
134
+ try {
135
+ if (!fsApi.existsSync(dir)) {
136
+ fsApi.mkdirSync(dir, { recursive: true, mode: 0o700 });
86
137
  }
87
- else {
88
- // Switching browser → keychain → browser is also supported; clear the
89
- // keychain entry so it doesn't linger.
90
- await keychainDelete(provider).catch(() => { });
91
- store.set(provider, { ...entry, tier });
138
+ }
139
+ catch (err) {
140
+ logger.error(`[settings-store] could not create config dir: ${err.message}`);
141
+ throw err;
142
+ }
143
+ // Build the file body in PROVIDERS order for stable output.
144
+ const lines = [
145
+ "# vskill credentials — do not commit. Managed by `vskill keys` or Skill Studio Settings.",
146
+ ];
147
+ for (const p of PROVIDERS) {
148
+ const entry = memoryMap.get(p.id);
149
+ if (!entry)
150
+ continue;
151
+ lines.push(`${p.envVarName}=${entry.key}`);
152
+ }
153
+ const body = lines.join("\n") + "\n";
154
+ const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
155
+ try {
156
+ fsApi.writeFileSync(tmpPath, body, { mode: 0o600 });
157
+ if (process.platform !== "win32") {
158
+ try {
159
+ fsApi.chmodSync(tmpPath, 0o600);
160
+ }
161
+ catch {
162
+ // Windows and some exotic FSs don't support chmod — swallow.
163
+ }
164
+ }
165
+ fsApi.renameSync(tmpPath, filePath);
166
+ }
167
+ catch (err) {
168
+ // Cleanup tmp on any failure.
169
+ try {
170
+ if (fsApi.existsSync(tmpPath))
171
+ fsApi.unlinkSync(tmpPath);
172
+ }
173
+ catch {
174
+ /* best-effort */
92
175
  }
176
+ // Never include the raw key in the error. Re-throw a sanitized error.
177
+ const sanitized = new Error(`[settings-store] atomic write to ${filePath} failed: ${err.message}`);
178
+ logger.error(sanitized.message);
179
+ throw sanitized;
93
180
  }
94
- currentTier = tier;
95
181
  }
96
182
  // ---------------------------------------------------------------------------
97
183
  // Public API — save / read / remove / list
98
184
  // ---------------------------------------------------------------------------
99
- export async function saveKey(provider, key, tier = currentTier) {
185
+ function assertProvider(provider) {
186
+ if (!PROVIDERS.some((p) => p.id === provider)) {
187
+ throw new Error(`unknown provider: ${String(provider)}`);
188
+ }
189
+ }
190
+ export async function saveKey(provider, key) {
100
191
  if (!key || typeof key !== "string" || key.trim().length === 0) {
101
192
  throw new Error("key must be non-empty string");
102
193
  }
103
- if (tier === "keychain" && getPlatform() !== "darwin") {
104
- throw new UnsupportedTierError("macOS Keychain tier is only supported on Darwin");
105
- }
194
+ assertProvider(provider);
195
+ loadFromDisk();
106
196
  const updatedAt = new Date().toISOString();
197
+ memoryMap.set(provider, { key, updatedAt });
107
198
  try {
108
- if (tier === "keychain") {
109
- await keychainAdd(provider, key);
110
- }
111
- store.set(provider, { key, updatedAt, tier });
112
- currentTier = tier;
113
- return { updatedAt, tier };
199
+ writeToDisk();
114
200
  }
115
201
  catch (err) {
116
- // NEVER log the raw key only the redacted form.
117
- logger.error(`[settings-store] saveKey(${provider}, ${redactKey(key)}) failed: ${err.message}`);
202
+ // Roll back the in-memory mutation so the store stays consistent with disk.
203
+ memoryMap.delete(provider);
204
+ // loadFromDisk will re-populate on next access if needed.
205
+ loadedForPath = null;
118
206
  throw err;
119
207
  }
208
+ return { updatedAt };
120
209
  }
121
- export function readKey(provider) {
122
- return store.get(provider)?.key ?? null;
210
+ export async function readKey(provider) {
211
+ assertProvider(provider);
212
+ loadFromDisk();
213
+ // Favor the live process.env if it has been populated (e.g. after merge).
214
+ const p = PROVIDERS.find((x) => x.id === provider);
215
+ const envVal = process.env[p.envVarName];
216
+ if (envVal && envVal.length > 0)
217
+ return envVal;
218
+ return memoryMap.get(provider)?.key ?? null;
123
219
  }
124
- /** Synchronous accessor used by detectAvailableProviders — safe, same semantics. */
125
220
  export function readKeySync(provider) {
126
- return readKey(provider);
221
+ assertProvider(provider);
222
+ loadFromDisk();
223
+ const p = PROVIDERS.find((x) => x.id === provider);
224
+ const envVal = process.env[p.envVarName];
225
+ if (envVal && envVal.length > 0)
226
+ return envVal;
227
+ return memoryMap.get(provider)?.key ?? null;
127
228
  }
128
- /** Has-key predicate exposed for synchronous availability checks. */
129
229
  export function hasKeySync(provider) {
130
- return store.has(provider);
230
+ assertProvider(provider);
231
+ loadFromDisk();
232
+ const p = PROVIDERS.find((x) => x.id === provider);
233
+ if (process.env[p.envVarName])
234
+ return true;
235
+ return memoryMap.has(provider);
131
236
  }
132
237
  export async function removeKey(provider) {
133
- const entry = store.get(provider);
134
- if (!entry)
238
+ assertProvider(provider);
239
+ loadFromDisk();
240
+ if (!memoryMap.has(provider))
135
241
  return;
136
- if (entry.tier === "keychain") {
137
- try {
138
- await keychainDelete(provider);
139
- }
140
- catch (err) {
141
- logger.warn(`[settings-store] keychain remove for ${provider} failed: ${err.message}`);
142
- }
143
- }
144
- store.delete(provider);
242
+ memoryMap.delete(provider);
243
+ writeToDisk();
145
244
  }
146
245
  export function listKeys() {
147
- const read = (p) => {
148
- const e = store.get(p);
246
+ loadFromDisk();
247
+ const read = (id) => {
248
+ const e = memoryMap.get(id);
149
249
  return e
150
- ? { stored: true, updatedAt: e.updatedAt, tier: e.tier }
151
- : { stored: false, updatedAt: null, tier: currentTier };
250
+ ? { stored: true, updatedAt: e.updatedAt }
251
+ : { stored: false, updatedAt: null };
252
+ };
253
+ return {
254
+ anthropic: read("anthropic"),
255
+ openai: read("openai"),
256
+ openrouter: read("openrouter"),
152
257
  };
153
- return { anthropic: read("anthropic"), openrouter: read("openrouter") };
154
- }
155
- // ---------------------------------------------------------------------------
156
- // Darwin Keychain bridge via `security` binary.
157
- // ---------------------------------------------------------------------------
158
- function keychainAdd(provider, key) {
159
- return new Promise((resolve, reject) => {
160
- const args = [
161
- "add-generic-password",
162
- "-s",
163
- `vskill-${provider}`,
164
- "-a",
165
- "vskill-user",
166
- "-w",
167
- key,
168
- "-U",
169
- ];
170
- const opts = { stdio: ["ignore", "pipe", "pipe"] };
171
- const child = spawn("security", args, opts);
172
- let stderr = "";
173
- child.stderr?.on("data", (d) => (stderr += String(d)));
174
- child.on("error", (err) => reject(err));
175
- child.on("close", (code) => {
176
- if (code === 0)
177
- resolve();
178
- else
179
- reject(new Error(`security add-generic-password exited ${code}: ${stderr.slice(0, 200)}`));
180
- });
181
- });
182
- }
183
- function keychainDelete(provider) {
184
- return new Promise((resolve, reject) => {
185
- const child = spawn("security", ["delete-generic-password", "-s", `vskill-${provider}`, "-a", "vskill-user"], { stdio: ["ignore", "pipe", "pipe"] });
186
- child.on("error", (err) => reject(err));
187
- child.on("close", (code) => {
188
- if (code === 0 || code === 44)
189
- resolve(); // 44 = not found, idempotent
190
- else
191
- resolve(); // be lenient — delete must not block removeKey
192
- });
193
- });
258
+ }
259
+ // ---------------------------------------------------------------------------
260
+ // mergeStoredKeysIntoEnv — called ONCE at server boot before provider imports.
261
+ // Real env vars WIN; only missing env vars are populated. After merge the
262
+ // in-memory map is cleared to shrink the plaintext dwell window.
263
+ // ---------------------------------------------------------------------------
264
+ export function mergeStoredKeysIntoEnv() {
265
+ loadFromDisk();
266
+ for (const p of PROVIDERS) {
267
+ const stored = memoryMap.get(p.id);
268
+ if (!stored)
269
+ continue;
270
+ const current = process.env[p.envVarName];
271
+ if (current && current.length > 0) {
272
+ // Real env var wins — do not overwrite.
273
+ continue;
274
+ }
275
+ process.env[p.envVarName] = stored.key;
276
+ }
277
+ // Shrink plaintext dwell: drop the in-memory map.
278
+ memoryMap.clear();
279
+ // Keep loadedForPath so subsequent listKeys()/readKey() re-read from disk
280
+ // on demand rather than returning a stale empty map.
281
+ loadedForPath = null;
282
+ }
283
+ // ---------------------------------------------------------------------------
284
+ // Test hooks
285
+ // ---------------------------------------------------------------------------
286
+ export function resetSettingsStore(opts) {
287
+ memoryMap.clear();
288
+ loadedForPath = null;
289
+ logger = opts?.logger ?? defaultLogger;
290
+ fsApi = { ...defaultFs(), ...(opts?.fs ?? {}) };
291
+ }
292
+ export function _internalMapSize() {
293
+ return memoryMap.size;
194
294
  }
195
295
  //# sourceMappingURL=settings-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../src/eval-server/settings-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../src/eval-server/settings-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{r as a,j as o,s as g}from"./index-BoCK_s7q.js";/* empty css */function h(r,i){if(!i)return 1;const n=i.toLowerCase(),c=[r.label,r.description??"",...r.keywords??[]].join(" ").toLowerCase();if(c.startsWith(n))return 100;const s=r.label.toLowerCase();if(s.startsWith(n))return 90;if(s.includes(n))return 80;if(c.includes(n))return 60;let l=0;for(const u of c)if(u===n[l]&&l++,l===n.length)return 40;return 0}function j({open:r,onClose:i,commands:n,placeholder:c=g.palette.inputPlaceholder}){const[s,l]=a.useState(""),[u,f]=a.useState(0),m=a.useRef(null),v=a.useRef(null),b=a.useRef(null),p=a.useMemo(()=>n.map(e=>({c:e,s:h(e,s)})).filter(e=>e.s>0).sort((e,x)=>x.s-e.s).map(e=>e.c),[n,s]);if(a.useEffect(()=>{if(r)return m.current=document.activeElement??null,l(""),f(0),requestAnimationFrame(()=>{var t;return(t=v.current)==null?void 0:t.focus()}),()=>{var t,e;(e=(t=m.current)==null?void 0:t.focus)==null||e.call(t),m.current=null}},[r]),a.useEffect(()=>{f(0)},[s]),a.useEffect(()=>{if(!r)return;function t(e){var x;if(e.key==="Escape"){e.preventDefault(),i();return}if(e.key==="ArrowDown"){e.preventDefault(),f(d=>Math.min(d+1,Math.max(p.length-1,0)));return}if(e.key==="ArrowUp"){e.preventDefault(),f(d=>Math.max(d-1,0));return}if(e.key==="Enter"){const d=p[u];d&&(e.preventDefault(),d.onInvoke(),i());return}e.key==="Tab"&&(e.preventDefault(),(x=v.current)==null||x.focus())}return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[r,i,p,u]),!r)return null;const y="command-palette-listbox";return o.jsx("div",{"data-testid":"command-palette",role:"presentation",onClick:t=>{t.target===t.currentTarget&&i()},style:{position:"fixed",inset:0,background:"color-mix(in srgb, var(--bg-canvas) 70%, transparent)",display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"12vh",zIndex:60},children:o.jsxs("div",{ref:b,role:"dialog","aria-modal":"true","aria-label":"Command palette",style:{width:"min(560px, 92vw)",background:"var(--bg-canvas)",border:"1px solid var(--border-default)",borderRadius:8,boxShadow:"0 24px 64px rgba(0,0,0,0.2)",overflow:"hidden",fontFamily:"var(--font-sans)",color:"var(--text-primary)"},children:[o.jsx("div",{role:"combobox","aria-expanded":"true","aria-controls":y,"aria-haspopup":"listbox",style:{padding:"8px 12px",borderBottom:"1px solid var(--border-default)"},children:o.jsx("input",{ref:v,type:"text",value:s,onChange:t=>l(t.currentTarget.value),"aria-label":"Command","aria-autocomplete":"list","aria-controls":y,placeholder:c,style:{width:"100%",border:"none",outline:"none",background:"transparent",color:"var(--text-primary)",fontFamily:"var(--font-sans)",fontSize:14,padding:"6px 0"}})}),o.jsxs("ul",{id:y,role:"listbox",style:{listStyle:"none",margin:0,padding:"4px 0",maxHeight:320,overflow:"auto"},children:[p.length===0&&o.jsx("li",{role:"option","aria-selected":"false",style:{padding:"10px 12px",color:"var(--text-secondary)",fontSize:12},children:g.palette.emptyResults}),p.map((t,e)=>o.jsxs("li",{role:"option","aria-selected":e===u,onMouseEnter:()=>f(e),onClick:()=>{t.onInvoke(),i()},style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 12px",background:e===u?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent",cursor:"pointer",fontSize:13},children:[o.jsx("span",{children:t.label}),t.description&&o.jsx("span",{style:{fontSize:11,color:"var(--text-secondary)",marginLeft:12},children:t.description})]},t.id))]})]})})}export{j as CommandPalette,j as default,h as scoreCommand};
1
+ import{r as a,j as o,s as g}from"./index-4LdVR3Lo.js";/* empty css */function h(r,i){if(!i)return 1;const n=i.toLowerCase(),c=[r.label,r.description??"",...r.keywords??[]].join(" ").toLowerCase();if(c.startsWith(n))return 100;const s=r.label.toLowerCase();if(s.startsWith(n))return 90;if(s.includes(n))return 80;if(c.includes(n))return 60;let l=0;for(const u of c)if(u===n[l]&&l++,l===n.length)return 40;return 0}function j({open:r,onClose:i,commands:n,placeholder:c=g.palette.inputPlaceholder}){const[s,l]=a.useState(""),[u,f]=a.useState(0),m=a.useRef(null),v=a.useRef(null),b=a.useRef(null),p=a.useMemo(()=>n.map(e=>({c:e,s:h(e,s)})).filter(e=>e.s>0).sort((e,x)=>x.s-e.s).map(e=>e.c),[n,s]);if(a.useEffect(()=>{if(r)return m.current=document.activeElement??null,l(""),f(0),requestAnimationFrame(()=>{var t;return(t=v.current)==null?void 0:t.focus()}),()=>{var t,e;(e=(t=m.current)==null?void 0:t.focus)==null||e.call(t),m.current=null}},[r]),a.useEffect(()=>{f(0)},[s]),a.useEffect(()=>{if(!r)return;function t(e){var x;if(e.key==="Escape"){e.preventDefault(),i();return}if(e.key==="ArrowDown"){e.preventDefault(),f(d=>Math.min(d+1,Math.max(p.length-1,0)));return}if(e.key==="ArrowUp"){e.preventDefault(),f(d=>Math.max(d-1,0));return}if(e.key==="Enter"){const d=p[u];d&&(e.preventDefault(),d.onInvoke(),i());return}e.key==="Tab"&&(e.preventDefault(),(x=v.current)==null||x.focus())}return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[r,i,p,u]),!r)return null;const y="command-palette-listbox";return o.jsx("div",{"data-testid":"command-palette",role:"presentation",onClick:t=>{t.target===t.currentTarget&&i()},style:{position:"fixed",inset:0,background:"color-mix(in srgb, var(--bg-canvas) 70%, transparent)",display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"12vh",zIndex:60},children:o.jsxs("div",{ref:b,role:"dialog","aria-modal":"true","aria-label":"Command palette",style:{width:"min(560px, 92vw)",background:"var(--bg-canvas)",border:"1px solid var(--border-default)",borderRadius:8,boxShadow:"0 24px 64px rgba(0,0,0,0.2)",overflow:"hidden",fontFamily:"var(--font-sans)",color:"var(--text-primary)"},children:[o.jsx("div",{role:"combobox","aria-expanded":"true","aria-controls":y,"aria-haspopup":"listbox",style:{padding:"8px 12px",borderBottom:"1px solid var(--border-default)"},children:o.jsx("input",{ref:v,type:"text",value:s,onChange:t=>l(t.currentTarget.value),"aria-label":"Command","aria-autocomplete":"list","aria-controls":y,placeholder:c,style:{width:"100%",border:"none",outline:"none",background:"transparent",color:"var(--text-primary)",fontFamily:"var(--font-sans)",fontSize:14,padding:"6px 0"}})}),o.jsxs("ul",{id:y,role:"listbox",style:{listStyle:"none",margin:0,padding:"4px 0",maxHeight:320,overflow:"auto"},children:[p.length===0&&o.jsx("li",{role:"option","aria-selected":"false",style:{padding:"10px 12px",color:"var(--text-secondary)",fontSize:12},children:g.palette.emptyResults}),p.map((t,e)=>o.jsxs("li",{role:"option","aria-selected":e===u,onMouseEnter:()=>f(e),onClick:()=>{t.onInvoke(),i()},style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 12px",background:e===u?"color-mix(in srgb, var(--accent-surface) 10%, transparent)":"transparent",cursor:"pointer",fontSize:13},children:[o.jsx("span",{children:t.label}),t.description&&o.jsx("span",{style:{fontSize:11,color:"var(--text-secondary)",marginLeft:12},children:t.description})]},t.id))]})]})})}export{j as CommandPalette,j as default,h as scoreCommand};