proxitor 0.3.0 → 0.4.0

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 (62) hide show
  1. package/README.md +25 -7
  2. package/dist/add.mjs +26 -27
  3. package/dist/add.mjs.map +1 -1
  4. package/dist/browse.mjs +20 -21
  5. package/dist/browse.mjs.map +1 -1
  6. package/dist/cli.mjs +14774 -33
  7. package/dist/cli.mjs.map +1 -1
  8. package/dist/config.mjs +6 -5
  9. package/dist/config.mjs.map +1 -1
  10. package/dist/config2.mjs +5 -6
  11. package/dist/config2.mjs.map +1 -1
  12. package/dist/dist.mjs +1325 -0
  13. package/dist/dist.mjs.map +1 -0
  14. package/dist/dist2.mjs +6617 -0
  15. package/dist/dist2.mjs.map +1 -0
  16. package/dist/edit.mjs +17 -18
  17. package/dist/edit.mjs.map +1 -1
  18. package/dist/list.mjs +4 -4
  19. package/dist/list.mjs.map +1 -1
  20. package/dist/prompt.mjs +849 -0
  21. package/dist/prompt.mjs.map +1 -0
  22. package/dist/providers.mjs +16 -16
  23. package/dist/providers.mjs.map +1 -1
  24. package/dist/remove.mjs +10 -11
  25. package/dist/remove.mjs.map +1 -1
  26. package/dist/validate.mjs +9 -9
  27. package/dist/validate.mjs.map +1 -1
  28. package/dist/wizard.mjs +192 -0
  29. package/dist/wizard.mjs.map +1 -0
  30. package/package.json +1 -16
  31. package/dist/add.cjs +0 -139
  32. package/dist/add.cjs.map +0 -1
  33. package/dist/browse.cjs +0 -88
  34. package/dist/browse.cjs.map +0 -1
  35. package/dist/cli.cjs +0 -159
  36. package/dist/cli.cjs.map +0 -1
  37. package/dist/cli.d.cts +0 -1
  38. package/dist/cli.d.mts +0 -1
  39. package/dist/config.cjs +0 -68
  40. package/dist/config.cjs.map +0 -1
  41. package/dist/config2.cjs +0 -75
  42. package/dist/config2.cjs.map +0 -1
  43. package/dist/edit.cjs +0 -82
  44. package/dist/edit.cjs.map +0 -1
  45. package/dist/index.cjs +0 -12
  46. package/dist/index.d.cts +0 -261
  47. package/dist/index.d.cts.map +0 -1
  48. package/dist/index.d.mts +0 -261
  49. package/dist/index.d.mts.map +0 -1
  50. package/dist/index.mjs +0 -2
  51. package/dist/list.cjs +0 -33
  52. package/dist/list.cjs.map +0 -1
  53. package/dist/providers.cjs +0 -376
  54. package/dist/providers.cjs.map +0 -1
  55. package/dist/proxy.cjs +0 -656
  56. package/dist/proxy.cjs.map +0 -1
  57. package/dist/proxy.mjs +0 -544
  58. package/dist/proxy.mjs.map +0 -1
  59. package/dist/remove.cjs +0 -38
  60. package/dist/remove.cjs.map +0 -1
  61. package/dist/validate.cjs +0 -26
  62. package/dist/validate.cjs.map +0 -1
package/dist/cli.cjs DELETED
@@ -1,159 +0,0 @@
1
- #!/usr/bin/env node
2
- const require_proxy = require("./proxy.cjs");
3
- let cmd_ts = require("cmd-ts");
4
- let dotenv = require("dotenv");
5
- //#region src/version.ts
6
- const version = "0.2.1";
7
- //#endregion
8
- //#region src/cli.ts
9
- const argv = process.argv.slice(2);
10
- const isInfo = argv.includes("--help") || argv.includes("-h") || argv.includes("--version") || argv.includes("-v");
11
- if (!isInfo) (0, dotenv.config)();
12
- async function resolveApiKey(configPath, openrouterKey) {
13
- if (openrouterKey) return openrouterKey;
14
- const envKey = process.env.OPENROUTER_API_KEY;
15
- if (envKey) return envKey;
16
- try {
17
- const cfg = await require_proxy.loadConfig({ configPath });
18
- if (cfg.openrouterKey) return cfg.openrouterKey;
19
- } catch {}
20
- require_proxy.logger.error("OpenRouter API key required. Set OPENROUTER_API_KEY, pass --openrouter-key, or add it to config.");
21
- return null;
22
- }
23
- const configOptionArgs = {
24
- config: (0, cmd_ts.option)({
25
- long: "config",
26
- short: "c",
27
- type: (0, cmd_ts.optional)(cmd_ts.string),
28
- description: "Path to config file"
29
- }),
30
- openrouterKey: (0, cmd_ts.option)({
31
- long: "openrouter-key",
32
- type: (0, cmd_ts.optional)(cmd_ts.string),
33
- description: "OpenRouter API key"
34
- })
35
- };
36
- const startCommand = (0, cmd_ts.command)({
37
- name: "start",
38
- description: "Start proxy server",
39
- args: {
40
- port: (0, cmd_ts.option)({
41
- long: "port",
42
- short: "p",
43
- type: cmd_ts.number,
44
- description: "Proxy server port",
45
- defaultValue: () => 8080,
46
- defaultValueIsSerializable: true
47
- }),
48
- host: (0, cmd_ts.option)({
49
- long: "host",
50
- type: cmd_ts.string,
51
- description: "Proxy server host",
52
- defaultValue: () => "0.0.0.0",
53
- defaultValueIsSerializable: true
54
- }),
55
- config: (0, cmd_ts.option)({
56
- long: "config",
57
- short: "c",
58
- type: (0, cmd_ts.optional)(cmd_ts.string),
59
- description: "Path to config file"
60
- }),
61
- noConfig: (0, cmd_ts.flag)({
62
- long: "no-config",
63
- description: "Skip config file discovery"
64
- }),
65
- openrouterKey: (0, cmd_ts.option)({
66
- long: "openrouter-key",
67
- type: (0, cmd_ts.optional)(cmd_ts.string),
68
- description: "OpenRouter API key"
69
- }),
70
- verbose: (0, cmd_ts.flag)({
71
- long: "verbose",
72
- description: "Enable verbose logging"
73
- })
74
- },
75
- handler: async (args) => {
76
- try {
77
- const cfg = await require_proxy.loadConfig({
78
- configPath: args.config ?? void 0,
79
- noConfig: args.noConfig,
80
- port: args.port,
81
- host: args.host,
82
- openrouterKey: args.openrouterKey ?? void 0,
83
- verbose: args.verbose
84
- });
85
- require_proxy.startProxyServer(cfg, () => {
86
- require_proxy.logger.ready(`Proxitor proxy listening on ${cfg.host}:${cfg.port}`);
87
- require_proxy.logger.info("Routing requests to OpenRouter");
88
- });
89
- } catch (error) {
90
- require_proxy.logger.error("Failed to start proxy:", error);
91
- process.exit(1);
92
- }
93
- }
94
- });
95
- const withApiKey = (fn) => async (args) => {
96
- const apiKey = await resolveApiKey(args.config ?? void 0, args.openrouterKey ?? void 0);
97
- if (apiKey) await fn(apiKey);
98
- };
99
- const rootCli = (0, cmd_ts.subcommands)({
100
- name: "proxitor",
101
- version,
102
- description: "Lightweight proxy for routing CLI requests to OpenRouter",
103
- cmds: {
104
- start: startCommand,
105
- config: (0, cmd_ts.subcommands)({
106
- name: "config",
107
- description: "Manage proxy configuration",
108
- cmds: {
109
- add: (0, cmd_ts.command)({
110
- name: "add",
111
- description: "Add model override",
112
- args: configOptionArgs,
113
- handler: withApiKey(async (k) => (await Promise.resolve().then(() => require("./add.cjs"))).addOverrideCommand(k))
114
- }),
115
- edit: (0, cmd_ts.command)({
116
- name: "edit",
117
- description: "Edit model override",
118
- args: configOptionArgs,
119
- handler: withApiKey(async (k) => (await Promise.resolve().then(() => require("./edit.cjs"))).editOverrideCommand(k))
120
- }),
121
- remove: (0, cmd_ts.command)({
122
- name: "remove",
123
- description: "Remove model override",
124
- args: {},
125
- handler: async () => (await Promise.resolve().then(() => require("./remove.cjs"))).removeOverrideCommand()
126
- }),
127
- list: (0, cmd_ts.command)({
128
- name: "list",
129
- description: "List current overrides",
130
- args: {},
131
- handler: async () => (await Promise.resolve().then(() => require("./list.cjs"))).listOverridesCommand()
132
- }),
133
- browse: (0, cmd_ts.command)({
134
- name: "browse",
135
- description: "Browse models",
136
- args: configOptionArgs,
137
- handler: withApiKey(async (k) => (await Promise.resolve().then(() => require("./browse.cjs"))).browseModelsCommand(k))
138
- }),
139
- validate: (0, cmd_ts.command)({
140
- name: "validate",
141
- description: "Validate config",
142
- args: {},
143
- handler: async () => (await Promise.resolve().then(() => require("./validate.cjs"))).validateConfigCommand()
144
- }),
145
- menu: (0, cmd_ts.command)({
146
- name: "menu",
147
- description: "Interactive configuration menu",
148
- args: configOptionArgs,
149
- handler: withApiKey(async (k) => (await Promise.resolve().then(() => require("./config2.cjs"))).runConfigMenu(k))
150
- })
151
- }
152
- })
153
- }
154
- });
155
- if (argv.some((a) => !a.startsWith("-")) || isInfo) (0, cmd_ts.run)(rootCli, argv);
156
- else (0, cmd_ts.run)(startCommand, argv);
157
- //#endregion
158
-
159
- //# sourceMappingURL=cli.cjs.map
package/dist/cli.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.cjs","names":["loadConfig","string","number"],"sources":["../src/version.ts","../src/cli.ts"],"sourcesContent":["export const version = '0.2.1'\n","#!/usr/bin/env node\nimport { command, flag, number, option, optional, run, string, subcommands } from 'cmd-ts'\nimport { config as loadDotenv } from 'dotenv'\nimport { loadConfig } from './config.js'\nimport { logger } from './logger.js'\nimport { startProxyServer } from './proxy.js'\nimport { version } from './version.js'\n\nconst argv = process.argv.slice(2)\nconst isInfo =\n argv.includes('--help') ||\n argv.includes('-h') ||\n argv.includes('--version') ||\n argv.includes('-v')\nif (!isInfo) loadDotenv()\n\nasync function resolveApiKey(\n configPath?: string,\n openrouterKey?: string,\n): Promise<string | null> {\n if (openrouterKey) return openrouterKey\n const envKey = process.env.OPENROUTER_API_KEY\n if (envKey) return envKey\n\n try {\n const cfg = await loadConfig({ configPath })\n if (cfg.openrouterKey) return cfg.openrouterKey\n } catch {\n // Config not found or invalid — fall through\n }\n\n logger.error(\n 'OpenRouter API key required. Set OPENROUTER_API_KEY, pass --openrouter-key, or add it to config.',\n )\n return null\n}\n\nconst configOptionArgs = {\n config: option({\n long: 'config',\n short: 'c',\n type: optional(string),\n description: 'Path to config file',\n }),\n openrouterKey: option({\n long: 'openrouter-key',\n type: optional(string),\n description: 'OpenRouter API key',\n }),\n}\n\nconst startCommand = command({\n name: 'start',\n description: 'Start proxy server',\n args: {\n port: option({\n long: 'port',\n short: 'p',\n type: number,\n description: 'Proxy server port',\n defaultValue: () => 8080,\n defaultValueIsSerializable: true,\n }),\n host: option({\n long: 'host',\n type: string,\n description: 'Proxy server host',\n defaultValue: () => '0.0.0.0',\n defaultValueIsSerializable: true,\n }),\n config: option({\n long: 'config',\n short: 'c',\n type: optional(string),\n description: 'Path to config file',\n }),\n noConfig: flag({ long: 'no-config', description: 'Skip config file discovery' }),\n openrouterKey: option({\n long: 'openrouter-key',\n type: optional(string),\n description: 'OpenRouter API key',\n }),\n verbose: flag({ long: 'verbose', description: 'Enable verbose logging' }),\n },\n handler: async args => {\n try {\n const cfg = await loadConfig({\n configPath: args.config ?? undefined,\n noConfig: args.noConfig,\n port: args.port,\n host: args.host,\n openrouterKey: args.openrouterKey ?? undefined,\n verbose: args.verbose,\n })\n startProxyServer(cfg, () => {\n logger.ready(`Proxitor proxy listening on ${cfg.host}:${cfg.port}`)\n logger.info('Routing requests to OpenRouter')\n })\n } catch (error) {\n logger.error('Failed to start proxy:', error)\n process.exit(1)\n }\n },\n})\n\nconst withApiKey =\n (fn: (apiKey: string) => Promise<void>) =>\n async (args: { config?: string; openrouterKey?: string }) => {\n const apiKey = await resolveApiKey(\n args.config ?? undefined,\n args.openrouterKey ?? undefined,\n )\n if (apiKey) await fn(apiKey)\n }\n\nconst configCli = subcommands({\n name: 'config',\n description: 'Manage proxy configuration',\n cmds: {\n add: command({\n name: 'add',\n description: 'Add model override',\n args: configOptionArgs,\n handler: withApiKey(async k =>\n (await import('./commands/config/add.js')).addOverrideCommand(k),\n ),\n }),\n edit: command({\n name: 'edit',\n description: 'Edit model override',\n args: configOptionArgs,\n handler: withApiKey(async k =>\n (await import('./commands/config/edit.js')).editOverrideCommand(k),\n ),\n }),\n remove: command({\n name: 'remove',\n description: 'Remove model override',\n args: {},\n handler: async () =>\n (await import('./commands/config/remove.js')).removeOverrideCommand(),\n }),\n list: command({\n name: 'list',\n description: 'List current overrides',\n args: {},\n handler: async () =>\n (await import('./commands/config/list.js')).listOverridesCommand(),\n }),\n browse: command({\n name: 'browse',\n description: 'Browse models',\n args: configOptionArgs,\n handler: withApiKey(async k =>\n (await import('./commands/config/browse.js')).browseModelsCommand(k),\n ),\n }),\n validate: command({\n name: 'validate',\n description: 'Validate config',\n args: {},\n handler: async () =>\n (await import('./commands/config/validate.js')).validateConfigCommand(),\n }),\n menu: command({\n name: 'menu',\n description: 'Interactive configuration menu',\n args: configOptionArgs,\n handler: withApiKey(async k =>\n (await import('./commands/config.js')).runConfigMenu(k),\n ),\n }),\n },\n})\n\nconst rootCli = subcommands({\n name: 'proxitor',\n version,\n description: 'Lightweight proxy for routing CLI requests to OpenRouter',\n cmds: { start: startCommand, config: configCli },\n})\n\nconst hasSubcommand = argv.some(a => !a.startsWith('-'))\nif (hasSubcommand || isInfo) {\n void run(rootCli, argv)\n} else {\n void run(startCommand, argv)\n}\n"],"mappings":"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"}
package/dist/cli.d.cts DELETED
@@ -1 +0,0 @@
1
- export { };
package/dist/cli.d.mts DELETED
@@ -1 +0,0 @@
1
- export { };
package/dist/config.cjs DELETED
@@ -1,68 +0,0 @@
1
- const require_proxy = require("./proxy.cjs");
2
- let node_fs = require("node:fs");
3
- let yaml = require("yaml");
4
- //#region src/commands/config/config.ts
5
- function requireConfigPath() {
6
- const path = require_proxy.findConfigFile();
7
- if (!path) throw new Error("No config file found. Create proxitor.config.yaml first, or pass -c <path>.");
8
- return path;
9
- }
10
- function readConfigRaw(path) {
11
- return (0, node_fs.readFileSync)(path, "utf-8");
12
- }
13
- function writeConfigRaw(path, content) {
14
- (0, node_fs.writeFileSync)(path, content, "utf-8");
15
- }
16
- function setModelOverride(configPath, modelKey, override) {
17
- const doc = (0, yaml.parseDocument)(readConfigRaw(configPath));
18
- let overrides = doc.get("modelOverrides");
19
- if (!overrides) {
20
- overrides = doc.createNode({});
21
- doc.set("modelOverrides", overrides);
22
- }
23
- overrides.set(modelKey, override);
24
- writeConfigRaw(configPath, doc.toString());
25
- require_proxy.logger.success(`Saved override for "${modelKey}"`);
26
- }
27
- function removeModelOverride(configPath, modelKey) {
28
- const doc = (0, yaml.parseDocument)(readConfigRaw(configPath));
29
- const overrides = doc.get("modelOverrides");
30
- if (!overrides?.has(modelKey)) throw new Error(`No override found for "${modelKey}"`);
31
- overrides.delete(modelKey);
32
- if (overrides.items.length === 0) doc.delete("modelOverrides");
33
- writeConfigRaw(configPath, doc.toString());
34
- require_proxy.logger.success(`Removed override for "${modelKey}"`);
35
- }
36
- function getModelOverrides(configPath) {
37
- const overrides = (0, yaml.parseDocument)(readConfigRaw(configPath)).get("modelOverrides");
38
- if (!overrides) return {};
39
- if (typeof overrides === "object" && overrides !== null && "toJSON" in overrides) return overrides.toJSON();
40
- return overrides;
41
- }
42
- //#endregion
43
- Object.defineProperty(exports, "getModelOverrides", {
44
- enumerable: true,
45
- get: function() {
46
- return getModelOverrides;
47
- }
48
- });
49
- Object.defineProperty(exports, "removeModelOverride", {
50
- enumerable: true,
51
- get: function() {
52
- return removeModelOverride;
53
- }
54
- });
55
- Object.defineProperty(exports, "requireConfigPath", {
56
- enumerable: true,
57
- get: function() {
58
- return requireConfigPath;
59
- }
60
- });
61
- Object.defineProperty(exports, "setModelOverride", {
62
- enumerable: true,
63
- get: function() {
64
- return setModelOverride;
65
- }
66
- });
67
-
68
- //# sourceMappingURL=config.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.cjs","names":["findConfigFile"],"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,OAAOA,cAAAA,eAAe;CAC5B,IAAI,CAAC,MACH,MAAM,IAAI,MACR,6EACF;CAEF,OAAO;AACT;AAEA,SAAgB,cAAc,MAAsB;CAClD,QAAA,GAAA,QAAA,cAAoB,MAAM,OAAO;AACnC;AAEA,SAAgB,eAAe,MAAc,SAAuB;CAClE,CAAA,GAAA,QAAA,eAAc,MAAM,SAAS,OAAO;AACtC;AAEA,SAAgB,iBACd,YACA,UACA,UACM;CAEN,MAAM,OAAA,GAAA,KAAA,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,cAAA,OAAO,QAAQ,uBAAuB,SAAS,EAAE;AACnD;AAEA,SAAgB,oBAAoB,YAAoB,UAAwB;CAE9E,MAAM,OAAA,GAAA,KAAA,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,cAAA,OAAO,QAAQ,yBAAyB,SAAS,EAAE;AACrD;AAEA,SAAgB,kBAAkB,YAAmD;CAGnF,MAAM,aAAA,GAAA,KAAA,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.cjs DELETED
@@ -1,75 +0,0 @@
1
- const require_proxy = require("./proxy.cjs");
2
- const require_add = require("./add.cjs");
3
- const require_browse = require("./browse.cjs");
4
- const require_edit = require("./edit.cjs");
5
- const require_list = require("./list.cjs");
6
- const require_remove = require("./remove.cjs");
7
- const require_validate = require("./validate.cjs");
8
- let _clack_prompts = require("@clack/prompts");
9
- _clack_prompts = require_proxy.__toESM(_clack_prompts, 1);
10
- //#region src/commands/config.ts
11
- /** Run the interactive config manager menu. */
12
- async function runConfigMenu(apiKey) {
13
- _clack_prompts.intro("Proxitor Config Manager");
14
- const action = await _clack_prompts.select({
15
- message: "What would you like to do?",
16
- options: [
17
- {
18
- value: "add",
19
- label: "➕ Add model override"
20
- },
21
- {
22
- value: "edit",
23
- label: "✏️ Edit model override"
24
- },
25
- {
26
- value: "remove",
27
- label: "🗑 Remove model override"
28
- },
29
- {
30
- value: "list",
31
- label: "📋 List current overrides"
32
- },
33
- {
34
- value: "browse",
35
- label: "🔍 Browse models"
36
- },
37
- {
38
- value: "validate",
39
- label: "✅ Validate config"
40
- },
41
- {
42
- value: "exit",
43
- label: "❌ Exit"
44
- }
45
- ]
46
- });
47
- if ((0, _clack_prompts.isCancel)(action) || action === "exit") {
48
- _clack_prompts.outro("Bye!");
49
- return;
50
- }
51
- switch (action) {
52
- case "add":
53
- await require_add.addOverrideCommand(apiKey);
54
- break;
55
- case "edit":
56
- await require_edit.editOverrideCommand(apiKey);
57
- break;
58
- case "remove":
59
- await require_remove.removeOverrideCommand();
60
- break;
61
- case "list":
62
- await require_list.listOverridesCommand();
63
- break;
64
- case "browse":
65
- await require_browse.browseModelsCommand(apiKey);
66
- break;
67
- case "validate":
68
- await require_validate.validateConfigCommand();
69
- break;
70
- }
71
- }
72
- //#endregion
73
- exports.runConfigMenu = runConfigMenu;
74
-
75
- //# sourceMappingURL=config2.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config2.cjs","names":["clack","addOverrideCommand","editOverrideCommand","removeOverrideCommand","listOverridesCommand","browseModelsCommand","validateConfigCommand"],"sources":["../src/commands/config.ts"],"sourcesContent":["import * as clack from '@clack/prompts'\nimport { isCancel } from '@clack/prompts'\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(apiKey: string): 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(apiKey)\n break\n case 'edit':\n await editOverrideCommand(apiKey)\n break\n case 'remove':\n await removeOverrideCommand()\n break\n case 'list':\n await listOverridesCommand()\n break\n case 'browse':\n await browseModelsCommand(apiKey)\n break\n case 'validate':\n await validateConfigCommand()\n break\n }\n}\n"],"mappings":";;;;;;;;;;;AAUA,eAAsB,cAAc,QAA+B;CACjE,eAAM,MAAM,yBAAyB;CAErC,MAAM,SAAS,MAAMA,eAAM,OAAO;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,KAAA,GAAA,eAAA,UAAa,MAAM,KAAK,WAAW,QAAQ;EACzC,eAAM,MAAM,MAAM;EAClB;CACF;CAEA,QAAQ,QAAR;EACE,KAAK;GACH,MAAMC,YAAAA,mBAAmB,MAAM;GAC/B;EACF,KAAK;GACH,MAAMC,aAAAA,oBAAoB,MAAM;GAChC;EACF,KAAK;GACH,MAAMC,eAAAA,sBAAsB;GAC5B;EACF,KAAK;GACH,MAAMC,aAAAA,qBAAqB;GAC3B;EACF,KAAK;GACH,MAAMC,eAAAA,oBAAoB,MAAM;GAChC;EACF,KAAK;GACH,MAAMC,iBAAAA,sBAAsB;GAC5B;CACJ;AACF"}
package/dist/edit.cjs DELETED
@@ -1,82 +0,0 @@
1
- const require_proxy = require("./proxy.cjs");
2
- const require_providers = require("./providers.cjs");
3
- const require_config = require("./config.cjs");
4
- let _clack_prompts = require("@clack/prompts");
5
- _clack_prompts = require_proxy.__toESM(_clack_prompts, 1);
6
- //#region src/commands/config/edit.ts
7
- function formatOverrideHint(override) {
8
- if (!override?.provider) return "(no provider routing)";
9
- return Object.keys(override.provider).map((k) => `${k}: ${JSON.stringify(override.provider?.[k])}`).join(", ");
10
- }
11
- function showCurrentConfig(modelKey, current) {
12
- _clack_prompts.log.info(`Current config for "${modelKey}":`);
13
- if (current.provider) for (const [field, value] of Object.entries(current.provider)) _clack_prompts.log.info(` provider.${field}: ${JSON.stringify(value)}`);
14
- if (current.headers) for (const [name, value] of Object.entries(current.headers)) _clack_prompts.log.info(` headers.${name}: ${value}`);
15
- }
16
- function withoutProvider(current) {
17
- return current.headers ? { headers: current.headers } : {};
18
- }
19
- async function updateProviderRouting(configPath, modelKey, current, apiKey) {
20
- const isPattern = modelKey.includes("*");
21
- const client = new require_providers.OpenRouterClient(apiKey);
22
- const mode = await require_providers.selectRoutingMode("Routing mode");
23
- if ((0, _clack_prompts.isCancel)(mode)) return;
24
- if (mode === "skip") {
25
- require_config.setModelOverride(configPath, modelKey, withoutProvider(current));
26
- _clack_prompts.outro("✓ Override updated");
27
- return;
28
- }
29
- const providerOptions = await require_providers.fetchProvidersForModel(client, modelKey, isPattern);
30
- if (!providerOptions) return;
31
- const override = await require_providers.selectProvidersByMode(mode, providerOptions);
32
- if (override === null) return;
33
- const updated = withoutProvider(current);
34
- if (override.provider) updated.provider = override.provider;
35
- const save = await _clack_prompts.confirm({ message: "Save changes?" });
36
- if ((0, _clack_prompts.isCancel)(save) || !save) {
37
- _clack_prompts.outro("Cancelled");
38
- return;
39
- }
40
- require_config.setModelOverride(configPath, modelKey, updated);
41
- _clack_prompts.outro("✓ Override updated");
42
- }
43
- /** Run the interactive "Edit model override" flow. */
44
- async function editOverrideCommand(apiKey) {
45
- _clack_prompts.intro("Edit Model Override");
46
- const configPath = require_config.requireConfigPath();
47
- const overrides = require_config.getModelOverrides(configPath);
48
- const keys = Object.keys(overrides);
49
- if (keys.length === 0) {
50
- _clack_prompts.log.warn("No model overrides found. Use Add instead.");
51
- _clack_prompts.outro("");
52
- return;
53
- }
54
- const selected = await _clack_prompts.select({
55
- message: "Select override to edit",
56
- options: keys.map((k) => ({
57
- value: k,
58
- label: k,
59
- hint: formatOverrideHint(overrides[k])
60
- }))
61
- });
62
- if ((0, _clack_prompts.isCancel)(selected)) return;
63
- const modelKey = selected;
64
- const current = overrides[modelKey] ?? {};
65
- showCurrentConfig(modelKey, current);
66
- const target = await _clack_prompts.select({
67
- message: "What to change?",
68
- options: [{
69
- value: "provider",
70
- label: "Provider routing"
71
- }, {
72
- value: "replace",
73
- label: "Replace entirely"
74
- }]
75
- });
76
- if ((0, _clack_prompts.isCancel)(target)) return;
77
- if (target === "provider" || target === "replace") await updateProviderRouting(configPath, modelKey, current, apiKey);
78
- }
79
- //#endregion
80
- exports.editOverrideCommand = editOverrideCommand;
81
-
82
- //# sourceMappingURL=edit.cjs.map
package/dist/edit.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.cjs","names":["OpenRouterClient","selectRoutingMode","fetchProvidersForModel","selectProvidersByMode","clack","requireConfigPath","getModelOverrides"],"sources":["../src/commands/config/edit.ts"],"sourcesContent":["import * as clack from '@clack/prompts'\nimport { isCancel } from '@clack/prompts'\nimport type { ModelOverride } from '../../config-schema.js'\nimport { OpenRouterClient } from '../../openrouter/client.js'\nimport { getModelOverrides, requireConfigPath, setModelOverride } from './config.js'\nimport {\n fetchProvidersForModel,\n selectProvidersByMode,\n selectRoutingMode,\n} from './providers.js'\n\nfunction formatOverrideHint(override: ModelOverride | undefined): string {\n if (!override?.provider) return '(no provider routing)'\n const keys = Object.keys(override.provider)\n return keys\n .map(\n k => `${k}: ${JSON.stringify((override.provider as Record<string, unknown>)?.[k])}`,\n )\n .join(', ')\n}\n\nfunction showCurrentConfig(modelKey: string, current: ModelOverride): void {\n clack.log.info(`Current config for \"${modelKey}\":`)\n if (current.provider) {\n for (const [field, value] of Object.entries(current.provider)) {\n clack.log.info(` provider.${field}: ${JSON.stringify(value)}`)\n }\n }\n if (current.headers) {\n for (const [name, value] of Object.entries(current.headers)) {\n clack.log.info(` headers.${name}: ${value}`)\n }\n }\n}\n\nfunction withoutProvider(current: ModelOverride): ModelOverride {\n return current.headers ? { headers: current.headers } : {}\n}\n\nasync function updateProviderRouting(\n configPath: string,\n modelKey: string,\n current: ModelOverride,\n apiKey: string,\n): Promise<void> {\n const isPattern = modelKey.includes('*')\n const client = new OpenRouterClient(apiKey)\n\n const mode = await selectRoutingMode('Routing mode')\n if (isCancel(mode)) return\n\n if (mode === 'skip') {\n setModelOverride(configPath, modelKey, withoutProvider(current))\n clack.outro('✓ Override updated')\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 === null) return\n\n const updated = withoutProvider(current)\n if (override.provider) {\n updated.provider = override.provider as ModelOverride['provider']\n }\n\n const save = await clack.confirm({ message: 'Save changes?' })\n if (isCancel(save) || !save) {\n clack.outro('Cancelled')\n return\n }\n\n setModelOverride(configPath, modelKey, updated)\n clack.outro('✓ Override updated')\n}\n\n/** Run the interactive \"Edit model override\" flow. */\nexport async function editOverrideCommand(apiKey: string): Promise<void> {\n clack.intro('Edit Model Override')\n\n const configPath = requireConfigPath()\n const overrides = getModelOverrides(configPath)\n const keys = Object.keys(overrides)\n\n if (keys.length === 0) {\n clack.log.warn('No model overrides found. Use Add instead.')\n clack.outro('')\n return\n }\n\n const selected = await clack.select({\n message: 'Select override to edit',\n options: keys.map(k => ({\n value: k,\n label: k,\n hint: formatOverrideHint(overrides[k]),\n })),\n })\n if (isCancel(selected)) return\n\n const modelKey = selected as string\n const current: ModelOverride = overrides[modelKey] ?? {}\n\n showCurrentConfig(modelKey, current)\n\n const target = await clack.select({\n message: 'What to change?',\n options: [\n { value: 'provider', label: 'Provider routing' },\n { value: 'replace', label: 'Replace entirely' },\n ],\n })\n if (isCancel(target)) return\n\n if (target === 'provider' || target === 'replace') {\n await updateProviderRouting(configPath, modelKey, current, apiKey)\n }\n}\n"],"mappings":";;;;;;AAWA,SAAS,mBAAmB,UAA6C;CACvE,IAAI,CAAC,UAAU,UAAU,OAAO;CAEhC,OADa,OAAO,KAAK,SAAS,QACxB,EACP,KACC,MAAK,GAAG,EAAE,IAAI,KAAK,UAAW,SAAS,WAAuC,EAAE,GAClF,EACC,KAAK,IAAI;AACd;AAEA,SAAS,kBAAkB,UAAkB,SAA8B;CACzE,eAAM,IAAI,KAAK,uBAAuB,SAAS,GAAG;CAClD,IAAI,QAAQ,UACV,KAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,QAAQ,QAAQ,GAC1D,eAAM,IAAI,KAAK,cAAc,MAAM,IAAI,KAAK,UAAU,KAAK,GAAG;CAGlE,IAAI,QAAQ,SACV,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO,GACxD,eAAM,IAAI,KAAK,aAAa,KAAK,IAAI,OAAO;AAGlD;AAEA,SAAS,gBAAgB,SAAuC;CAC9D,OAAO,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAC3D;AAEA,eAAe,sBACb,YACA,UACA,SACA,QACe;CACf,MAAM,YAAY,SAAS,SAAS,GAAG;CACvC,MAAM,SAAS,IAAIA,kBAAAA,iBAAiB,MAAM;CAE1C,MAAM,OAAO,MAAMC,kBAAAA,kBAAkB,cAAc;CACnD,KAAA,GAAA,eAAA,UAAa,IAAI,GAAG;CAEpB,IAAI,SAAS,QAAQ;EACnB,eAAA,iBAAiB,YAAY,UAAU,gBAAgB,OAAO,CAAC;EAC/D,eAAM,MAAM,oBAAoB;EAChC;CACF;CAEA,MAAM,kBAAkB,MAAMC,kBAAAA,uBAAuB,QAAQ,UAAU,SAAS;CAChF,IAAI,CAAC,iBAAiB;CAEtB,MAAM,WAAW,MAAMC,kBAAAA,sBAAsB,MAAgB,eAAe;CAC5E,IAAI,aAAa,MAAM;CAEvB,MAAM,UAAU,gBAAgB,OAAO;CACvC,IAAI,SAAS,UACX,QAAQ,WAAW,SAAS;CAG9B,MAAM,OAAO,MAAMC,eAAM,QAAQ,EAAE,SAAS,gBAAgB,CAAC;CAC7D,KAAA,GAAA,eAAA,UAAa,IAAI,KAAK,CAAC,MAAM;EAC3B,eAAM,MAAM,WAAW;EACvB;CACF;CAEA,eAAA,iBAAiB,YAAY,UAAU,OAAO;CAC9C,eAAM,MAAM,oBAAoB;AAClC;;AAGA,eAAsB,oBAAoB,QAA+B;CACvE,eAAM,MAAM,qBAAqB;CAEjC,MAAM,aAAaC,eAAAA,kBAAkB;CACrC,MAAM,YAAYC,eAAAA,kBAAkB,UAAU;CAC9C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAAG;EACrB,eAAM,IAAI,KAAK,4CAA4C;EAC3D,eAAM,MAAM,EAAE;EACd;CACF;CAEA,MAAM,WAAW,MAAMF,eAAM,OAAO;EAClC,SAAS;EACT,SAAS,KAAK,KAAI,OAAM;GACtB,OAAO;GACP,OAAO;GACP,MAAM,mBAAmB,UAAU,EAAE;EACvC,EAAE;CACJ,CAAC;CACD,KAAA,GAAA,eAAA,UAAa,QAAQ,GAAG;CAExB,MAAM,WAAW;CACjB,MAAM,UAAyB,UAAU,aAAa,CAAC;CAEvD,kBAAkB,UAAU,OAAO;CAEnC,MAAM,SAAS,MAAMA,eAAM,OAAO;EAChC,SAAS;EACT,SAAS,CACP;GAAE,OAAO;GAAY,OAAO;EAAmB,GAC/C;GAAE,OAAO;GAAW,OAAO;EAAmB,CAChD;CACF,CAAC;CACD,KAAA,GAAA,eAAA,UAAa,MAAM,GAAG;CAEtB,IAAI,WAAW,cAAc,WAAW,WACtC,MAAM,sBAAsB,YAAY,UAAU,SAAS,MAAM;AAErE"}
package/dist/index.cjs DELETED
@@ -1,12 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_proxy = require("./proxy.cjs");
3
- exports.ConfigParseError = require_proxy.ConfigParseError;
4
- exports.ConfigValidationError = require_proxy.ConfigValidationError;
5
- exports.buildProviderRouting = require_proxy.buildProviderRouting;
6
- exports.createProxyServer = require_proxy.createProxyServer;
7
- exports.extractModel = require_proxy.extractModel;
8
- exports.loadConfig = require_proxy.loadConfig;
9
- exports.matchScore = require_proxy.matchScore;
10
- exports.resolveModelConfig = require_proxy.resolveModelConfig;
11
- exports.toArray = require_proxy.toArray;
12
- exports.tryParseBody = require_proxy.tryParseBody;