proxitor 0.9.0-beta.0 → 0.9.0-beta.2

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/dist/add.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.mjs","names":["clack.spinner","clack.autocomplete","isCancel","clack.text","clack.confirm"],"sources":["../src/commands/config/add.ts"],"sourcesContent":["import * as clack from '@clack/prompts';\nimport { isCancel } from '@clack/prompts';\nimport type { OpenRouterDataClient } from '../../openrouter/data-client.js';\nimport { fetchModels, formatPrice } from '../../openrouter/models.js';\nimport type { OpenRouterModel } from '../../openrouter/types.js';\nimport { getModelOverrides, requireConfigPath, setModelOverride } from './config.js';\nimport {\n formatContextLength,\n formatModelHint,\n formatModelLabel,\n formatPricing,\n} from './format.js';\nimport {\n fetchProvidersForModel,\n selectProvidersByMode,\n selectRoutingMode,\n} from './providers.js';\n\nconst CUSTOM_PATTERN = '__custom_pattern__';\n\n/** Run the interactive \"Add model override\" flow. */\nexport async function addOverrideCommand(client: OpenRouterDataClient): Promise<void> {\n clack.intro('Add Model Override');\n\n const configPath = requireConfigPath();\n\n const models = await loadModelsWithSpinner(client);\n if (!models) return;\n\n const modelId = await searchModel(models);\n if (!modelId) return;\n\n if (typeof modelId !== 'string') return;\n\n if (modelId === CUSTOM_PATTERN) {\n const pattern = await enterPattern(models);\n if (!pattern) return;\n\n const existing = getModelOverrides(configPath);\n if (existing[pattern]) {\n clack.log.warn(`Override for \"${pattern}\" already exists. Use Edit instead.`);\n return;\n }\n\n await configureProviderAndSave(configPath, client, pattern, true);\n return;\n }\n\n const selected = models.find(m => m.id === modelId);\n if (selected) displayModelInfo(selected);\n\n const existing = getModelOverrides(configPath);\n if (existing[modelId]) {\n clack.log.warn(`Override for \"${modelId}\" already exists. Use Edit instead.`);\n return;\n }\n\n await configureProviderAndSave(configPath, client, modelId, false);\n}\n\nasync function loadModelsWithSpinner(\n client: OpenRouterDataClient,\n): Promise<OpenRouterModel[] | null> {\n const s = clack.spinner();\n s.start('Loading models from OpenRouter...');\n try {\n const models = await fetchModels(client);\n s.stop(`${models.length} models available`);\n return models;\n } catch (error) {\n s.stop('Failed to load models');\n clack.log.error(String(error));\n return null;\n }\n}\n\nasync function searchModel(models: OpenRouterModel[]): Promise<string | symbol | null> {\n const result = await clack.autocomplete({\n message: 'Search for a model',\n placeholder: 'Type to search (e.g. \"claude\", \"gpt-4o\", \"qwen\")',\n maxItems: 15,\n options(this: { userInput: string }) {\n const query = this.userInput.trim().toLowerCase();\n\n if (!query) {\n return [\n {\n value: CUSTOM_PATTERN,\n label: '✏️ Enter custom pattern (e.g. \"claude-*\")',\n },\n ];\n }\n\n const filtered = models\n .filter(m => {\n const text = `${m.id} ${m.name}`.toLowerCase();\n return text.includes(query);\n })\n .slice(0, 14)\n .map(m => ({\n value: m.id,\n label: formatModelLabel(m),\n hint: formatModelHint(m),\n }));\n\n return [\n ...filtered,\n { value: CUSTOM_PATTERN, label: '✏️ Enter custom pattern (e.g. \"claude-*\")' },\n ];\n },\n filter: (_search: string, _option: { value: string }) => true,\n });\n\n if (isCancel(result)) return null;\n return result as string;\n}\n\nasync function enterPattern(models: OpenRouterModel[]): Promise<string | null> {\n const pattern = await clack.text({\n message: 'Enter model pattern',\n placeholder: 'e.g. claude-*, gpt-4*, anthropic/*',\n validate: v => {\n if (!v?.trim()) return 'Pattern cannot be empty';\n return undefined;\n },\n });\n\n if (isCancel(pattern)) return null;\n\n const pat = (pattern as string).trim();\n const matches = countPatternMatches(pat, models);\n if (matches > 0) {\n clack.log.info(`Pattern \"${pat}\" matches ${matches} model(s)`);\n } else {\n clack.log.warn(\n `Pattern \"${pat}\" does not match any current models — it will still be saved`,\n );\n }\n\n return pat;\n}\n\nasync function configureProviderAndSave(\n configPath: string,\n client: OpenRouterDataClient,\n modelKey: string,\n isPattern: boolean,\n): Promise<void> {\n const mode = await selectRoutingMode('Configure provider routing');\n if (isCancel(mode)) return;\n\n if (mode === 'skip') {\n setModelOverride(configPath, modelKey, {});\n clack.outro('Done — override saved without provider routing');\n return;\n }\n\n const providerOptions = await fetchProvidersForModel(client, modelKey, isPattern);\n if (!providerOptions) return;\n\n const override = await selectProvidersByMode(mode as string, providerOptions);\n if (!override) return;\n\n clack.log.info(\n `Proposed override:\\n ${modelKey}:\\n ${formatOverrideYaml(override)}`,\n );\n\n const save = await clack.confirm({ message: 'Save to config?' });\n if (isCancel(save) || !save) {\n clack.outro('Cancelled');\n return;\n }\n\n setModelOverride(configPath, modelKey, override);\n clack.outro('✓ Model override saved');\n}\n\nfunction displayModelInfo(model: OpenRouterModel): void {\n clack.log.info(`${model.name || model.id}`);\n clack.log.info(` Context: ${formatContextLength(model.context_length)} tokens`);\n clack.log.info(\n ` Pricing: ${formatPricing(model.pricing.prompt, model.pricing.completion)}`,\n );\n if (model.pricing.input_cache_read && model.pricing.input_cache_read !== '0') {\n clack.log.info(` Cache read: ${formatPrice(model.pricing.input_cache_read)}`);\n }\n if (model.pricing.input_cache_write && model.pricing.input_cache_write !== '0') {\n clack.log.info(` Cache write: ${formatPrice(model.pricing.input_cache_write)}`);\n }\n if (model.top_provider?.max_completion_tokens) {\n clack.log.info(\n ` Max output: ${formatContextLength(model.top_provider.max_completion_tokens)} tokens`,\n );\n }\n if (model.architecture?.modality) {\n clack.log.info(` Modality: ${model.architecture.modality}`);\n }\n}\n\nfunction countPatternMatches(pattern: string, models: OpenRouterModel[]): number {\n if (pattern.endsWith('*')) {\n const prefix = pattern.slice(0, -1);\n return models.filter(m => m.id.startsWith(prefix)).length;\n }\n return models.filter(m => m.id === pattern).length;\n}\n\nfunction formatOverrideYaml(override: Record<string, unknown>): string {\n const parts: string[] = [];\n if (override.provider && typeof override.provider === 'object') {\n const p = override.provider as Record<string, unknown>;\n for (const [key, value] of Object.entries(p)) {\n parts.push(`provider.${key}: ${JSON.stringify(value)}`);\n }\n }\n return parts.join('\\n ') || '(empty)';\n}\n"],"mappings":"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"}
package/dist/browse.mjs DELETED
@@ -1,85 +0,0 @@
1
- import { autocomplete as Vt, confirm as le, intro as ye, isCancel as R$1, log as R, outro as fe, spinner as vt } from "./dist.mjs";
2
- import { a as getUniqueProviders, c as formatModelHint, d as formatThroughput, f as fetchModels, h as parseModelSlug, i as fetchModelEndpoints, l as formatModelLabel, m as parseModelAuthor, o as formatContextLength, p as formatPrice, s as formatLatency, u as formatPricing } from "./providers.mjs";
3
- import { addOverrideCommand } from "./add.mjs";
4
- //#region src/commands/config/browse.ts
5
- function toOption(m) {
6
- return {
7
- value: m.id,
8
- label: formatModelLabel(m),
9
- hint: formatModelHint(m)
10
- };
11
- }
12
- function displayModelDetails(model) {
13
- R.success(`${model.name || model.id}`);
14
- if (model.description) {
15
- const desc = model.description.length > 200 ? `${model.description.slice(0, 200)}...` : model.description;
16
- R.info(` ${desc}`);
17
- }
18
- R.info(` Context: ${formatContextLength(model.context_length)} tokens`);
19
- if (model.top_provider?.max_completion_tokens) R.info(` Max output: ${formatContextLength(model.top_provider.max_completion_tokens)} tokens`);
20
- R.info(` Pricing: ${formatPricing(model.pricing.prompt, model.pricing.completion)}`);
21
- if (model.pricing.input_cache_read && model.pricing.input_cache_read !== "0") R.info(` Cache read: ${formatPrice(model.pricing.input_cache_read)}`);
22
- if (model.pricing.input_cache_write && model.pricing.input_cache_write !== "0") R.info(` Cache write: ${formatPrice(model.pricing.input_cache_write)}`);
23
- if (model.architecture?.modality) R.info(` Modality: ${model.architecture.modality}`);
24
- if (model.supported_parameters?.length) R.info(` Parameters: ${model.supported_parameters.join(", ")}`);
25
- }
26
- async function displayProviders(client, model) {
27
- const author = parseModelAuthor(model.id);
28
- const slug = parseModelSlug(model.id);
29
- const s = vt();
30
- s.start("Checking providers...");
31
- try {
32
- const endpoints = await fetchModelEndpoints(client, author, slug);
33
- const unique = getUniqueProviders(endpoints);
34
- s.stop(`${unique.length} providers available`);
35
- for (const p of unique) {
36
- const ep = endpoints.find((e) => e.tag === p.tag);
37
- const latency = formatLatency(ep?.latency_last_30m?.p50 ?? null);
38
- const throughput = formatThroughput(ep?.throughput_last_30m?.p50 ?? null);
39
- R.info(` ${p.providerName} (${p.tag}) — ${latency} · ${throughput}`);
40
- }
41
- } catch {
42
- s.stop("Could not fetch providers");
43
- }
44
- }
45
- /** Run the interactive "Browse models" flow. */
46
- async function browseModelsCommand(client) {
47
- ye("Browse Models");
48
- const s = vt();
49
- s.start("Loading models...");
50
- let models;
51
- try {
52
- models = await fetchModels(client);
53
- s.stop(`${models.length} models available`);
54
- } catch (error) {
55
- s.stop("Failed to load models");
56
- R.error(String(error));
57
- return;
58
- }
59
- const modelId = await Vt({
60
- message: "Search for a model",
61
- placeholder: "Type to search...",
62
- maxItems: 15,
63
- options() {
64
- const query = this.userInput.trim().toLowerCase();
65
- if (!query) return models.slice(0, 15).map(toOption);
66
- return models.filter((m) => `${m.id} ${m.name}`.toLowerCase().includes(query)).slice(0, 15).map(toOption);
67
- },
68
- filter: (_search, _option) => true
69
- });
70
- if (R$1(modelId)) return;
71
- const model = models.find((m) => m.id === modelId);
72
- if (!model) return;
73
- displayModelDetails(model);
74
- await displayProviders(client, model);
75
- const configure = await le({ message: `Configure routing for ${model.id}?` });
76
- if (R$1(configure) || !configure) {
77
- fe("Bye!");
78
- return;
79
- }
80
- await addOverrideCommand(client);
81
- }
82
- //#endregion
83
- export { browseModelsCommand };
84
-
85
- //# sourceMappingURL=browse.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browse.mjs","names":["clack.spinner","clack.autocomplete","isCancel","clack.confirm"],"sources":["../src/commands/config/browse.ts"],"sourcesContent":["import * as clack from '@clack/prompts';\nimport { isCancel } from '@clack/prompts';\nimport type { OpenRouterDataClient } from '../../openrouter/data-client.js';\nimport { fetchModelEndpoints, getUniqueProviders } from '../../openrouter/endpoints.js';\nimport {\n fetchModels,\n formatPrice,\n parseModelAuthor,\n parseModelSlug,\n} from '../../openrouter/models.js';\nimport type { OpenRouterModel } from '../../openrouter/types.js';\nimport { addOverrideCommand } from './add.js';\nimport {\n formatContextLength,\n formatLatency,\n formatModelHint,\n formatModelLabel,\n formatPricing,\n formatThroughput,\n} from './format.js';\n\nfunction toOption(m: OpenRouterModel) {\n return { value: m.id, label: formatModelLabel(m), hint: formatModelHint(m) };\n}\n\nfunction displayModelDetails(model: OpenRouterModel): void {\n clack.log.success(`${model.name || model.id}`);\n if (model.description) {\n const desc =\n model.description.length > 200\n ? `${model.description.slice(0, 200)}...`\n : model.description;\n clack.log.info(` ${desc}`);\n }\n clack.log.info(` Context: ${formatContextLength(model.context_length)} tokens`);\n if (model.top_provider?.max_completion_tokens) {\n clack.log.info(\n ` Max output: ${formatContextLength(model.top_provider.max_completion_tokens)} tokens`,\n );\n }\n clack.log.info(\n ` Pricing: ${formatPricing(model.pricing.prompt, model.pricing.completion)}`,\n );\n if (model.pricing.input_cache_read && model.pricing.input_cache_read !== '0') {\n clack.log.info(` Cache read: ${formatPrice(model.pricing.input_cache_read)}`);\n }\n if (model.pricing.input_cache_write && model.pricing.input_cache_write !== '0') {\n clack.log.info(` Cache write: ${formatPrice(model.pricing.input_cache_write)}`);\n }\n if (model.architecture?.modality) {\n clack.log.info(` Modality: ${model.architecture.modality}`);\n }\n if (model.supported_parameters?.length) {\n clack.log.info(` Parameters: ${model.supported_parameters.join(', ')}`);\n }\n}\n\nasync function displayProviders(\n client: OpenRouterDataClient,\n model: OpenRouterModel,\n): Promise<void> {\n const author = parseModelAuthor(model.id);\n const slug = parseModelSlug(model.id);\n const s = clack.spinner();\n s.start('Checking providers...');\n try {\n const endpoints = await fetchModelEndpoints(client, author, slug);\n const unique = getUniqueProviders(endpoints);\n s.stop(`${unique.length} providers available`);\n\n for (const p of unique) {\n const ep = endpoints.find(e => e.tag === p.tag);\n const latency = formatLatency(ep?.latency_last_30m?.p50 ?? null);\n const throughput = formatThroughput(ep?.throughput_last_30m?.p50 ?? null);\n clack.log.info(` ${p.providerName} (${p.tag}) — ${latency} · ${throughput}`);\n }\n } catch {\n s.stop('Could not fetch providers');\n }\n}\n\n/** Run the interactive \"Browse models\" flow. */\nexport async function browseModelsCommand(client: OpenRouterDataClient): Promise<void> {\n clack.intro('Browse Models');\n\n const s = clack.spinner();\n s.start('Loading models...');\n let models: OpenRouterModel[];\n try {\n models = await fetchModels(client);\n s.stop(`${models.length} models available`);\n } catch (error) {\n s.stop('Failed to load models');\n clack.log.error(String(error));\n return;\n }\n\n const modelId = await clack.autocomplete({\n message: 'Search for a model',\n placeholder: 'Type to search...',\n maxItems: 15,\n options(this: { userInput: string }) {\n const query = this.userInput.trim().toLowerCase();\n if (!query) return models.slice(0, 15).map(toOption);\n\n return models\n .filter(m => `${m.id} ${m.name}`.toLowerCase().includes(query))\n .slice(0, 15)\n .map(toOption);\n },\n filter: (_search: string, _option: { value: string }) => true,\n });\n\n if (isCancel(modelId)) return;\n\n const model = models.find(m => m.id === modelId);\n if (!model) return;\n\n displayModelDetails(model);\n await displayProviders(client, model);\n\n const configure = await clack.confirm({\n message: `Configure routing for ${model.id}?`,\n });\n\n if (isCancel(configure) || !configure) {\n clack.outro('Bye!');\n return;\n }\n\n await addOverrideCommand(client);\n}\n"],"mappings":"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"}
package/dist/config.mjs DELETED
@@ -1,46 +0,0 @@
1
- import { n as findConfigFile, t as logger } from "./cli.mjs";
2
- import { t as require_dist } from "./dist2.mjs";
3
- import { readFileSync, writeFileSync } from "node:fs";
4
- //#region src/commands/config/config.ts
5
- var import_dist = require_dist();
6
- function requireConfigPath() {
7
- const path = findConfigFile();
8
- if (!path) throw new Error("No config file found. Create proxitor.config.yaml first, or pass -c <path>.");
9
- return path;
10
- }
11
- function readConfigRaw(path) {
12
- return readFileSync(path, "utf-8");
13
- }
14
- function writeConfigRaw(path, content) {
15
- writeFileSync(path, content, "utf-8");
16
- }
17
- function setModelOverride(configPath, modelKey, override) {
18
- const doc = (0, import_dist.parseDocument)(readConfigRaw(configPath));
19
- let overrides = doc.get("modelOverrides");
20
- if (!overrides) {
21
- overrides = doc.createNode({});
22
- doc.set("modelOverrides", overrides);
23
- }
24
- overrides.set(modelKey, override);
25
- writeConfigRaw(configPath, doc.toString());
26
- logger.success(`Saved override for "${modelKey}"`);
27
- }
28
- function removeModelOverride(configPath, modelKey) {
29
- const doc = (0, import_dist.parseDocument)(readConfigRaw(configPath));
30
- const overrides = doc.get("modelOverrides");
31
- if (!overrides?.has(modelKey)) throw new Error(`No override found for "${modelKey}"`);
32
- overrides.delete(modelKey);
33
- if (overrides.items.length === 0) doc.delete("modelOverrides");
34
- writeConfigRaw(configPath, doc.toString());
35
- logger.success(`Removed override for "${modelKey}"`);
36
- }
37
- function getModelOverrides(configPath) {
38
- const overrides = (0, import_dist.parseDocument)(readConfigRaw(configPath)).get("modelOverrides");
39
- if (!overrides) return {};
40
- if (typeof overrides === "object" && overrides !== null && "toJSON" in overrides) return overrides.toJSON();
41
- return overrides;
42
- }
43
- //#endregion
44
- export { setModelOverride as i, removeModelOverride as n, requireConfigPath as r, getModelOverrides as t };
45
-
46
- //# sourceMappingURL=config.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.mjs","names":[],"sources":["../src/commands/config/config.ts"],"sourcesContent":["import { readFileSync, writeFileSync } from 'node:fs';\nimport type { YAMLMap } from 'yaml';\nimport { parseDocument } from 'yaml';\nimport { findConfigFile } from '../../config.js';\nimport type { ModelOverride } from '../../config-schema.js';\nimport { logger } from '../../logger.js';\n\nexport function requireConfigPath(): string {\n const path = findConfigFile();\n if (!path) {\n throw new Error(\n 'No config file found. Create proxitor.config.yaml first, or pass -c <path>.',\n );\n }\n return path;\n}\n\nexport function readConfigRaw(path: string): string {\n return readFileSync(path, 'utf-8');\n}\n\nexport function writeConfigRaw(path: string, content: string): void {\n writeFileSync(path, content, 'utf-8');\n}\n\nexport function setModelOverride(\n configPath: string,\n modelKey: string,\n override: ModelOverride,\n): void {\n const raw = readConfigRaw(configPath);\n const doc = parseDocument(raw);\n\n let overrides = doc.get('modelOverrides') as YAMLMap | undefined;\n if (!overrides) {\n overrides = doc.createNode({}) as YAMLMap;\n doc.set('modelOverrides', overrides);\n }\n\n overrides.set(modelKey, override);\n\n writeConfigRaw(configPath, doc.toString());\n logger.success(`Saved override for \"${modelKey}\"`);\n}\n\nexport function removeModelOverride(configPath: string, modelKey: string): void {\n const raw = readConfigRaw(configPath);\n const doc = parseDocument(raw);\n\n const overrides = doc.get('modelOverrides') as YAMLMap | undefined;\n if (!overrides?.has(modelKey)) {\n throw new Error(`No override found for \"${modelKey}\"`);\n }\n\n overrides.delete(modelKey);\n if (overrides.items.length === 0) {\n doc.delete('modelOverrides');\n }\n\n writeConfigRaw(configPath, doc.toString());\n logger.success(`Removed override for \"${modelKey}\"`);\n}\n\nexport function getModelOverrides(configPath: string): Record<string, ModelOverride> {\n const raw = readConfigRaw(configPath);\n const doc = parseDocument(raw);\n const overrides = doc.get('modelOverrides');\n if (!overrides) return {};\n if (typeof overrides === 'object' && overrides !== null && 'toJSON' in overrides) {\n return (overrides as { toJSON: () => unknown }).toJSON() as Record<\n string,\n ModelOverride\n >;\n }\n return overrides as unknown as Record<string, ModelOverride>;\n}\n"],"mappings":";;;;;AAOA,SAAgB,oBAA4B;CAC1C,MAAM,OAAO,eAAe;CAC5B,IAAI,CAAC,MACH,MAAM,IAAI,MACR,6EACF;CAEF,OAAO;AACT;AAEA,SAAgB,cAAc,MAAsB;CAClD,OAAO,aAAa,MAAM,OAAO;AACnC;AAEA,SAAgB,eAAe,MAAc,SAAuB;CAClE,cAAc,MAAM,SAAS,OAAO;AACtC;AAEA,SAAgB,iBACd,YACA,UACA,UACM;CAEN,MAAM,OAAA,GAAA,YAAA,eADM,cAAc,UACE,CAAC;CAE7B,IAAI,YAAY,IAAI,IAAI,gBAAgB;CACxC,IAAI,CAAC,WAAW;EACd,YAAY,IAAI,WAAW,CAAC,CAAC;EAC7B,IAAI,IAAI,kBAAkB,SAAS;CACrC;CAEA,UAAU,IAAI,UAAU,QAAQ;CAEhC,eAAe,YAAY,IAAI,SAAS,CAAC;CACzC,OAAO,QAAQ,uBAAuB,SAAS,EAAE;AACnD;AAEA,SAAgB,oBAAoB,YAAoB,UAAwB;CAE9E,MAAM,OAAA,GAAA,YAAA,eADM,cAAc,UACE,CAAC;CAE7B,MAAM,YAAY,IAAI,IAAI,gBAAgB;CAC1C,IAAI,CAAC,WAAW,IAAI,QAAQ,GAC1B,MAAM,IAAI,MAAM,0BAA0B,SAAS,EAAE;CAGvD,UAAU,OAAO,QAAQ;CACzB,IAAI,UAAU,MAAM,WAAW,GAC7B,IAAI,OAAO,gBAAgB;CAG7B,eAAe,YAAY,IAAI,SAAS,CAAC;CACzC,OAAO,QAAQ,yBAAyB,SAAS,EAAE;AACrD;AAEA,SAAgB,kBAAkB,YAAmD;CAGnF,MAAM,aAAA,GAAA,YAAA,eAFM,cAAc,UACE,CACR,EAAE,IAAI,gBAAgB;CAC1C,IAAI,CAAC,WAAW,OAAO,CAAC;CACxB,IAAI,OAAO,cAAc,YAAY,cAAc,QAAQ,YAAY,WACrE,OAAQ,UAAwC,OAAO;CAKzD,OAAO;AACT"}
package/dist/config2.mjs DELETED
@@ -1,73 +0,0 @@
1
- import { intro as ye, isCancel as R, outro as fe, select as Ee } from "./dist.mjs";
2
- import { addOverrideCommand } from "./add.mjs";
3
- import { browseModelsCommand } from "./browse.mjs";
4
- import { editOverrideCommand } from "./edit.mjs";
5
- import { listOverridesCommand } from "./list.mjs";
6
- import { removeOverrideCommand } from "./remove.mjs";
7
- import { validateConfigCommand } from "./validate.mjs";
8
- //#region src/commands/config.ts
9
- /** Run the interactive config manager menu. */
10
- async function runConfigMenu(client) {
11
- ye("Proxitor Config Manager");
12
- const action = await Ee({
13
- message: "What would you like to do?",
14
- options: [
15
- {
16
- value: "add",
17
- label: "➕ Add model override"
18
- },
19
- {
20
- value: "edit",
21
- label: "✏️ Edit model override"
22
- },
23
- {
24
- value: "remove",
25
- label: "🗑 Remove model override"
26
- },
27
- {
28
- value: "list",
29
- label: "📋 List current overrides"
30
- },
31
- {
32
- value: "browse",
33
- label: "🔍 Browse models"
34
- },
35
- {
36
- value: "validate",
37
- label: "✅ Validate config"
38
- },
39
- {
40
- value: "exit",
41
- label: "❌ Exit"
42
- }
43
- ]
44
- });
45
- if (R(action) || action === "exit") {
46
- fe("Bye!");
47
- return;
48
- }
49
- switch (action) {
50
- case "add":
51
- await addOverrideCommand(client);
52
- break;
53
- case "edit":
54
- await editOverrideCommand(client);
55
- break;
56
- case "remove":
57
- await removeOverrideCommand();
58
- break;
59
- case "list":
60
- await listOverridesCommand();
61
- break;
62
- case "browse":
63
- await browseModelsCommand(client);
64
- break;
65
- case "validate":
66
- await validateConfigCommand();
67
- break;
68
- }
69
- }
70
- //#endregion
71
- export { runConfigMenu };
72
-
73
- //# sourceMappingURL=config2.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config2.mjs","names":["clack.select","isCancel"],"sources":["../src/commands/config.ts"],"sourcesContent":["import * as clack from '@clack/prompts';\nimport { isCancel } from '@clack/prompts';\nimport type { OpenRouterDataClient } from '../openrouter/data-client.js';\nimport { addOverrideCommand } from './config/add.js';\nimport { browseModelsCommand } from './config/browse.js';\nimport { editOverrideCommand } from './config/edit.js';\nimport { listOverridesCommand } from './config/list.js';\nimport { removeOverrideCommand } from './config/remove.js';\nimport { validateConfigCommand } from './config/validate.js';\n\n/** Run the interactive config manager menu. */\nexport async function runConfigMenu(client: OpenRouterDataClient): Promise<void> {\n clack.intro('Proxitor Config Manager');\n\n const action = await clack.select({\n message: 'What would you like to do?',\n options: [\n { value: 'add', label: '➕ Add model override' },\n { value: 'edit', label: '✏️ Edit model override' },\n { value: 'remove', label: '🗑 Remove model override' },\n { value: 'list', label: '📋 List current overrides' },\n { value: 'browse', label: '🔍 Browse models' },\n { value: 'validate', label: '✅ Validate config' },\n { value: 'exit', label: '❌ Exit' },\n ],\n });\n\n if (isCancel(action) || action === 'exit') {\n clack.outro('Bye!');\n return;\n }\n\n switch (action) {\n case 'add':\n await addOverrideCommand(client);\n break;\n case 'edit':\n await editOverrideCommand(client);\n break;\n case 'remove':\n await removeOverrideCommand();\n break;\n case 'list':\n await listOverridesCommand();\n break;\n case 'browse':\n await browseModelsCommand(client);\n break;\n case 'validate':\n await validateConfigCommand();\n break;\n }\n}\n"],"mappings":";;;;;;;;;AAWA,eAAsB,cAAc,QAA6C;CAC/E,GAAY,yBAAyB;CAErC,MAAM,SAAS,MAAMA,GAAa;EAChC,SAAS;EACT,SAAS;GACP;IAAE,OAAO;IAAO,OAAO;GAAwB;GAC/C;IAAE,OAAO;IAAQ,OAAO;GAA2B;GACnD;IAAE,OAAO;IAAU,OAAO;GAA6B;GACvD;IAAE,OAAO;IAAQ,OAAO;GAA6B;GACrD;IAAE,OAAO;IAAU,OAAO;GAAoB;GAC9C;IAAE,OAAO;IAAY,OAAO;GAAqB;GACjD;IAAE,OAAO;IAAQ,OAAO;GAAU;EACpC;CACF,CAAC;CAED,IAAIC,EAAS,MAAM,KAAK,WAAW,QAAQ;EACzC,GAAY,MAAM;EAClB;CACF;CAEA,QAAQ,QAAR;EACE,KAAK;GACH,MAAM,mBAAmB,MAAM;GAC/B;EACF,KAAK;GACH,MAAM,oBAAoB,MAAM;GAChC;EACF,KAAK;GACH,MAAM,sBAAsB;GAC5B;EACF,KAAK;GACH,MAAM,qBAAqB;GAC3B;EACF,KAAK;GACH,MAAM,oBAAoB,MAAM;GAChC;EACF,KAAK;GACH,MAAM,sBAAsB;GAC5B;CACJ;AACF"}