offrouter-cli 0.0.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.
- package/dist/catalog-cache.d.ts +60 -0
- package/dist/catalog-cache.d.ts.map +1 -0
- package/dist/catalog-cache.js +113 -0
- package/dist/catalog-cache.js.map +1 -0
- package/dist/commands/config-error.d.ts +8 -0
- package/dist/commands/config-error.d.ts.map +1 -0
- package/dist/commands/config-error.js +22 -0
- package/dist/commands/config-error.js.map +1 -0
- package/dist/commands/detection.d.ts +55 -0
- package/dist/commands/detection.d.ts.map +1 -0
- package/dist/commands/detection.js +131 -0
- package/dist/commands/detection.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +369 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/hooks.d.ts +4 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +86 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +38 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +8 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +267 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +25 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +27 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/models.d.ts +15 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +124 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/output.d.ts +6 -0
- package/dist/commands/output.d.ts.map +1 -0
- package/dist/commands/output.js +7 -0
- package/dist/commands/output.js.map +1 -0
- package/dist/commands/profiles.d.ts +4 -0
- package/dist/commands/profiles.d.ts.map +1 -0
- package/dist/commands/profiles.js +46 -0
- package/dist/commands/profiles.js.map +1 -0
- package/dist/commands/proxy.d.ts +10 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +53 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/route.d.ts +4 -0
- package/dist/commands/route.d.ts.map +1 -0
- package/dist/commands/route.js +123 -0
- package/dist/commands/route.js.map +1 -0
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +86 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +9 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +44 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +137 -0
- package/dist/index.js.map +1 -0
- package/package.json +24 -0
- package/src/catalog-cache.test.ts +258 -0
- package/src/catalog-cache.ts +169 -0
- package/src/catalog-sample.json +30 -0
- package/src/cli.test.ts +1577 -0
- package/src/commands/config-error.ts +31 -0
- package/src/commands/detection.ts +209 -0
- package/src/commands/doctor.ts +503 -0
- package/src/commands/hooks.ts +125 -0
- package/src/commands/init.ts +59 -0
- package/src/commands/install.ts +438 -0
- package/src/commands/login.ts +33 -0
- package/src/commands/mcp.ts +35 -0
- package/src/commands/models.ts +168 -0
- package/src/commands/output.ts +11 -0
- package/src/commands/profiles.ts +58 -0
- package/src/commands/proxy.ts +87 -0
- package/src/commands/route.ts +160 -0
- package/src/commands/status.ts +111 -0
- package/src/commands/update.ts +62 -0
- package/src/index.ts +174 -0
- package/tsconfig.json +17 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { loadConfig } from "offrouter-core";
|
|
2
|
+
import { formatInstallDiffText as formatClaudeDiff, installClaudeProfile, listAllowlistedPersonalClaudeProfiles, rollbackClaudeProfile, } from "offrouter-adapter-claude";
|
|
3
|
+
import { formatInstallDiffText as formatCodexDiff, installCodexProfile, listAllowlistedPersonalCodexProfiles, rollbackCodexProfile, } from "offrouter-adapter-codex";
|
|
4
|
+
import { formatInstallDiffText as formatGeminiDiff, installGeminiProfile, listAllowlistedPersonalGeminiProfiles, rollbackGeminiProfile, } from "offrouter-adapter-gemini";
|
|
5
|
+
import { formatInstallDiffText as formatGrokDiff, installGrokProfile, listAllowlistedPersonalGrokProfiles, rollbackGrokProfile, } from "offrouter-adapter-grok";
|
|
6
|
+
import { writeJson, writeText } from "./output.js";
|
|
7
|
+
import { honestyForHarness } from "./detection.js";
|
|
8
|
+
import { formatConfigError } from "./config-error.js";
|
|
9
|
+
function assertHarness(harness) {
|
|
10
|
+
if (harness !== "claude" &&
|
|
11
|
+
harness !== "codex" &&
|
|
12
|
+
harness !== "gemini" &&
|
|
13
|
+
harness !== "grok") {
|
|
14
|
+
throw new Error(`Unsupported harness "${harness}". V1 install currently supports: claude, codex, gemini, grok`);
|
|
15
|
+
}
|
|
16
|
+
return harness;
|
|
17
|
+
}
|
|
18
|
+
function harnessLabel(kind) {
|
|
19
|
+
if (kind === "codex")
|
|
20
|
+
return "Codex";
|
|
21
|
+
if (kind === "gemini")
|
|
22
|
+
return "Gemini";
|
|
23
|
+
if (kind === "grok")
|
|
24
|
+
return "Grok";
|
|
25
|
+
return "Claude";
|
|
26
|
+
}
|
|
27
|
+
function allowlistedPersonalProfiles(kind, config) {
|
|
28
|
+
if (kind === "codex")
|
|
29
|
+
return listAllowlistedPersonalCodexProfiles(config);
|
|
30
|
+
if (kind === "gemini")
|
|
31
|
+
return listAllowlistedPersonalGeminiProfiles(config);
|
|
32
|
+
if (kind === "grok")
|
|
33
|
+
return listAllowlistedPersonalGrokProfiles(config);
|
|
34
|
+
return listAllowlistedPersonalClaudeProfiles(config);
|
|
35
|
+
}
|
|
36
|
+
async function installOne(kind, args) {
|
|
37
|
+
if (kind === "codex") {
|
|
38
|
+
return installCodexProfile(args);
|
|
39
|
+
}
|
|
40
|
+
if (kind === "gemini") {
|
|
41
|
+
return installGeminiProfile(args);
|
|
42
|
+
}
|
|
43
|
+
if (kind === "grok") {
|
|
44
|
+
return installGrokProfile(args);
|
|
45
|
+
}
|
|
46
|
+
return installClaudeProfile(args);
|
|
47
|
+
}
|
|
48
|
+
async function rollbackOne(kind, args) {
|
|
49
|
+
if (kind === "codex") {
|
|
50
|
+
return rollbackCodexProfile(args);
|
|
51
|
+
}
|
|
52
|
+
if (kind === "gemini") {
|
|
53
|
+
return rollbackGeminiProfile(args);
|
|
54
|
+
}
|
|
55
|
+
if (kind === "grok") {
|
|
56
|
+
return rollbackGrokProfile(args);
|
|
57
|
+
}
|
|
58
|
+
return rollbackClaudeProfile(args);
|
|
59
|
+
}
|
|
60
|
+
function formatDiff(kind, results, headline) {
|
|
61
|
+
if (kind === "codex") {
|
|
62
|
+
return formatCodexDiff(results, headline);
|
|
63
|
+
}
|
|
64
|
+
if (kind === "gemini") {
|
|
65
|
+
return formatGeminiDiff(results, headline);
|
|
66
|
+
}
|
|
67
|
+
if (kind === "grok") {
|
|
68
|
+
return formatGrokDiff(results, headline);
|
|
69
|
+
}
|
|
70
|
+
return formatClaudeDiff(results, headline);
|
|
71
|
+
}
|
|
72
|
+
function resultExitCode(results) {
|
|
73
|
+
return results.every((r) => r.ok) ? 0 : 1;
|
|
74
|
+
}
|
|
75
|
+
export function registerInstallCommand(program, ctx) {
|
|
76
|
+
const install = program
|
|
77
|
+
.command("install")
|
|
78
|
+
.description("Install OffRouter into an allowlisted personal harness profile")
|
|
79
|
+
.option("--all-personal", "Install into every allowlisted personal harness profile (Claude or Codex)", false)
|
|
80
|
+
.option("--dry-run", "Show planned file changes without writing", false)
|
|
81
|
+
.option("--json", "Emit JSON", false)
|
|
82
|
+
.argument("[harness]", "Harness kind (V1: claude, codex)", "claude")
|
|
83
|
+
.option("--profile <profile>", "Target profile id (e.g. claude-personal, codex-personal). Required unless --all-personal.")
|
|
84
|
+
.action(async (harness, opts) => {
|
|
85
|
+
const { env, cwd, stdout, stderr } = ctx();
|
|
86
|
+
let kind = "claude";
|
|
87
|
+
try {
|
|
88
|
+
kind = assertHarness(harness);
|
|
89
|
+
const config = await loadConfig({ env, workspaceDir: cwd });
|
|
90
|
+
const dryRun = Boolean(opts.dryRun);
|
|
91
|
+
const allPersonal = Boolean(opts.allPersonal);
|
|
92
|
+
const profile = opts.profile?.trim();
|
|
93
|
+
if (allPersonal && profile) {
|
|
94
|
+
throw new Error("Use either --profile <id> or --all-personal, not both.");
|
|
95
|
+
}
|
|
96
|
+
if (!allPersonal && !profile) {
|
|
97
|
+
throw new Error("Provide --profile <id> or --all-personal. Example: offrouter install claude --profile claude-personal --dry-run");
|
|
98
|
+
}
|
|
99
|
+
const targets = allPersonal
|
|
100
|
+
? allowlistedPersonalProfiles(kind, config)
|
|
101
|
+
: [profile];
|
|
102
|
+
const honesty = honestyForHarness(kind);
|
|
103
|
+
const label = harnessLabel(kind);
|
|
104
|
+
if (targets.length === 0) {
|
|
105
|
+
const empty = [];
|
|
106
|
+
if (opts.json) {
|
|
107
|
+
writeJson(stdout, {
|
|
108
|
+
honesty,
|
|
109
|
+
dryRun,
|
|
110
|
+
harness: kind,
|
|
111
|
+
results: empty,
|
|
112
|
+
message: `No allowlisted personal ${label} profiles found for install.`,
|
|
113
|
+
});
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
writeText(stdout, honesty);
|
|
117
|
+
writeText(stdout, `No allowlisted personal ${label} profiles found for install.`);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const results = [];
|
|
121
|
+
for (const target of targets) {
|
|
122
|
+
results.push(await installOne(kind, { profile: target, config, env, dryRun }));
|
|
123
|
+
}
|
|
124
|
+
if (opts.json) {
|
|
125
|
+
writeJson(stdout, {
|
|
126
|
+
honesty,
|
|
127
|
+
dryRun,
|
|
128
|
+
harness: kind,
|
|
129
|
+
results,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
writeText(stdout, honesty);
|
|
134
|
+
const headline = allPersonal
|
|
135
|
+
? `Install matrix (allowlisted personal ${label} profiles):`
|
|
136
|
+
: undefined;
|
|
137
|
+
writeText(stdout, formatDiff(kind, results, headline).trimEnd());
|
|
138
|
+
}
|
|
139
|
+
if (resultExitCode(results) !== 0) {
|
|
140
|
+
const failed = results.filter((r) => !r.ok);
|
|
141
|
+
const msg = failed.map((r) => r.message).join("; ");
|
|
142
|
+
// Commander exitOverride path
|
|
143
|
+
const err = new Error(msg);
|
|
144
|
+
err.exitCode = 1;
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
if (err &&
|
|
150
|
+
typeof err === "object" &&
|
|
151
|
+
"exitCode" in err &&
|
|
152
|
+
typeof err.exitCode === "number") {
|
|
153
|
+
throw err;
|
|
154
|
+
}
|
|
155
|
+
const formatted = formatConfigError(err);
|
|
156
|
+
const honesty = honestyForHarness(kind);
|
|
157
|
+
if (opts.json) {
|
|
158
|
+
writeJson(stdout, {
|
|
159
|
+
honesty,
|
|
160
|
+
error: formatted,
|
|
161
|
+
});
|
|
162
|
+
const e = new Error(formatted.message);
|
|
163
|
+
e.exitCode = 1;
|
|
164
|
+
throw e;
|
|
165
|
+
}
|
|
166
|
+
writeText(stderr, formatted.message);
|
|
167
|
+
const e = new Error(formatted.message);
|
|
168
|
+
e.exitCode = 1;
|
|
169
|
+
throw e;
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// Silence unused local if tree-shaking complains; keep reference stable.
|
|
173
|
+
void install;
|
|
174
|
+
}
|
|
175
|
+
export function registerUninstallCommand(program, ctx) {
|
|
176
|
+
program
|
|
177
|
+
.command("uninstall")
|
|
178
|
+
.description("Uninstall / roll back OffRouter from a harness profile")
|
|
179
|
+
.argument("[harness]", "Harness kind (V1: claude, codex)", "claude")
|
|
180
|
+
.option("--profile <profile>", "Target profile id (e.g. claude-personal, codex-personal)")
|
|
181
|
+
.option("--all-personal", "Uninstall from every allowlisted personal harness profile that has install state", false)
|
|
182
|
+
.option("--dry-run", "Show planned rollback without writing", false)
|
|
183
|
+
.option("--json", "Emit JSON", false)
|
|
184
|
+
.action(async (harness, opts) => {
|
|
185
|
+
const { env, cwd, stdout, stderr } = ctx();
|
|
186
|
+
let kind = "claude";
|
|
187
|
+
try {
|
|
188
|
+
kind = assertHarness(harness);
|
|
189
|
+
const config = await loadConfig({ env, workspaceDir: cwd });
|
|
190
|
+
const dryRun = Boolean(opts.dryRun);
|
|
191
|
+
const allPersonal = Boolean(opts.allPersonal);
|
|
192
|
+
const profile = opts.profile?.trim();
|
|
193
|
+
if (allPersonal && profile) {
|
|
194
|
+
throw new Error("Use either --profile <id> or --all-personal, not both.");
|
|
195
|
+
}
|
|
196
|
+
if (!allPersonal && !profile) {
|
|
197
|
+
throw new Error("Provide --profile <id> or --all-personal. Example: offrouter uninstall claude --profile claude-personal");
|
|
198
|
+
}
|
|
199
|
+
const targets = allPersonal
|
|
200
|
+
? allowlistedPersonalProfiles(kind, config)
|
|
201
|
+
: [profile];
|
|
202
|
+
const results = [];
|
|
203
|
+
for (const target of targets) {
|
|
204
|
+
results.push(await rollbackOne(kind, { profile: target, env, dryRun }));
|
|
205
|
+
}
|
|
206
|
+
// Map rollback results into install-result-like text blocks.
|
|
207
|
+
const asInstallish = results.map((r) => ({
|
|
208
|
+
ok: r.ok,
|
|
209
|
+
dryRun: r.dryRun,
|
|
210
|
+
profile: r.profile,
|
|
211
|
+
profileDir: r.profileDir,
|
|
212
|
+
changes: r.changes,
|
|
213
|
+
message: r.message,
|
|
214
|
+
errorCode: r.ok
|
|
215
|
+
? undefined
|
|
216
|
+
: r.errorCode === "no_install_state"
|
|
217
|
+
? "install_error"
|
|
218
|
+
: "install_error",
|
|
219
|
+
}));
|
|
220
|
+
const honesty = honestyForHarness(kind);
|
|
221
|
+
if (opts.json) {
|
|
222
|
+
writeJson(stdout, {
|
|
223
|
+
honesty,
|
|
224
|
+
dryRun,
|
|
225
|
+
harness: kind,
|
|
226
|
+
results,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
writeText(stdout, honesty);
|
|
231
|
+
writeText(stdout, formatDiff(kind, asInstallish, "Uninstall / rollback:").trimEnd());
|
|
232
|
+
}
|
|
233
|
+
// Missing state on --all-personal is soft; invalid state/errors fail.
|
|
234
|
+
const hardFailures = results.filter((r) => !r.ok && (!allPersonal || r.errorCode !== "no_install_state"));
|
|
235
|
+
if (hardFailures.length > 0) {
|
|
236
|
+
const msg = hardFailures.map((r) => r.message).join("; ");
|
|
237
|
+
const err = new Error(msg);
|
|
238
|
+
err.exitCode = 1;
|
|
239
|
+
throw err;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
if (err &&
|
|
244
|
+
typeof err === "object" &&
|
|
245
|
+
"exitCode" in err &&
|
|
246
|
+
typeof err.exitCode === "number") {
|
|
247
|
+
throw err;
|
|
248
|
+
}
|
|
249
|
+
const formatted = formatConfigError(err);
|
|
250
|
+
const honesty = honestyForHarness(kind);
|
|
251
|
+
if (opts.json) {
|
|
252
|
+
writeJson(stdout, {
|
|
253
|
+
honesty,
|
|
254
|
+
error: formatted,
|
|
255
|
+
});
|
|
256
|
+
const e = new Error(formatted.message);
|
|
257
|
+
e.exitCode = 1;
|
|
258
|
+
throw e;
|
|
259
|
+
}
|
|
260
|
+
writeText(stderr, formatted.message);
|
|
261
|
+
const e = new Error(formatted.message);
|
|
262
|
+
e.exitCode = 1;
|
|
263
|
+
throw e;
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,cAAc,GACxB,IAAI,CAwBN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { V1_HONESTY_LINE } from "./detection.js";
|
|
2
|
+
import { writeJson, writeText } from "./output.js";
|
|
3
|
+
export function registerLoginCommand(program, ctx) {
|
|
4
|
+
program
|
|
5
|
+
.command("login")
|
|
6
|
+
.description("Guide official provider login / token-helper flows (no credential scraping)")
|
|
7
|
+
.argument("[provider]", "Provider id (optional)")
|
|
8
|
+
.option("--json", "Emit JSON", false)
|
|
9
|
+
.action(async (provider, opts) => {
|
|
10
|
+
const { stdout } = ctx();
|
|
11
|
+
const payload = {
|
|
12
|
+
honesty: V1_HONESTY_LINE,
|
|
13
|
+
provider: provider ?? null,
|
|
14
|
+
status: "not_implemented",
|
|
15
|
+
message: "Login uses official provider login, token-helper, OAuth, or user-provided API key surfaces only. Provider adapters land in a later milestone.",
|
|
16
|
+
};
|
|
17
|
+
if (opts.json) {
|
|
18
|
+
writeJson(stdout, payload);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
writeText(stdout, V1_HONESTY_LINE);
|
|
22
|
+
writeText(stdout, payload.message);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,GAAyB;IAEzB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,6EAA6E,CAC9E;SACA,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAChD,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,QAA4B,EAAE,IAAwB,EAAE,EAAE;QACvE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,QAAQ,IAAI,IAAI;YAC1B,MAAM,EAAE,iBAAiB;YACzB,OAAO,EACL,+IAA+I;SAClJ,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACnC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,cAAc,GACxB,IAAI,CA2BN"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { runMcpCli } from "offrouter-mcp";
|
|
2
|
+
export function registerMcpCommand(program, ctx) {
|
|
3
|
+
const mcp = program
|
|
4
|
+
.command("mcp")
|
|
5
|
+
.description("OffRouter MCP stdio server bridges");
|
|
6
|
+
mcp
|
|
7
|
+
.command("serve")
|
|
8
|
+
.description("Start the OffRouter MCP stdio server (route/delegate/status tools)")
|
|
9
|
+
.action(async (_opts, command) => {
|
|
10
|
+
const { env, cwd, stdout, stderr } = ctx();
|
|
11
|
+
// Forward only unknown/passthrough args after `serve`; Commander already
|
|
12
|
+
// handled --help before invoking this action.
|
|
13
|
+
const forwarded = command.args ?? [];
|
|
14
|
+
const code = await runMcpCli(forwarded, {
|
|
15
|
+
env,
|
|
16
|
+
cwd,
|
|
17
|
+
stdout,
|
|
18
|
+
stderr,
|
|
19
|
+
});
|
|
20
|
+
if (code !== 0) {
|
|
21
|
+
const err = new Error(`MCP server exited with code ${code}`);
|
|
22
|
+
err.exitCode = code;
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,GAAyB;IAEzB,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErD,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,oEAAoE,CACrE;SACA,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,OAAgB,EAAE,EAAE;QACjD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;QAC3C,yEAAyE;QACzE,8CAA8C;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE;YACtC,GAAG;YACH,GAAG;YACH,MAAM;YACN,MAAM;SACP,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;YAC5D,GAA6B,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC/C,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CommandContext } from "./init.js";
|
|
3
|
+
/**
|
|
4
|
+
* A single model entry in the merged output.
|
|
5
|
+
* source: "builtin" from core package, "cached" from remote catalog, "config" from profile config.
|
|
6
|
+
*/
|
|
7
|
+
export interface ModelEntry {
|
|
8
|
+
providerId: string;
|
|
9
|
+
modelId: string;
|
|
10
|
+
displayName?: string;
|
|
11
|
+
family?: string;
|
|
12
|
+
source: "builtin" | "cached" | "config";
|
|
13
|
+
}
|
|
14
|
+
export declare function registerModelsCommand(program: Command, ctx: () => CommandContext): void;
|
|
15
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAIhD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACzC;AAmED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,cAAc,GACxB,IAAI,CA+EN"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { loadConfig, BUILTIN_PROVIDERS } from "offrouter-core";
|
|
2
|
+
import { formatConfigError } from "./config-error.js";
|
|
3
|
+
import { writeJson, writeText } from "./output.js";
|
|
4
|
+
import { readCatalogCache, resolveCacheDir } from "../catalog-cache.js";
|
|
5
|
+
function builtinToEntries() {
|
|
6
|
+
const entries = [];
|
|
7
|
+
for (const provider of BUILTIN_PROVIDERS) {
|
|
8
|
+
for (const model of provider.knownModels) {
|
|
9
|
+
entries.push({
|
|
10
|
+
providerId: provider.providerId,
|
|
11
|
+
modelId: model.modelId,
|
|
12
|
+
displayName: model.displayName,
|
|
13
|
+
family: model.family,
|
|
14
|
+
source: "builtin",
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return entries;
|
|
19
|
+
}
|
|
20
|
+
function cachedToEntries(cached) {
|
|
21
|
+
return cached.families.map((f) => ({
|
|
22
|
+
providerId: f.providerId,
|
|
23
|
+
modelId: f.modelId,
|
|
24
|
+
displayName: f.displayName,
|
|
25
|
+
family: f.family,
|
|
26
|
+
source: "cached",
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Merge builtin and cached model entries.
|
|
31
|
+
* Cached models with the same (providerId, modelId) override builtin entries.
|
|
32
|
+
* Config provider entries are appended separately.
|
|
33
|
+
*/
|
|
34
|
+
function mergeModels(builtin, cached, config) {
|
|
35
|
+
// Build a set of (providerId,modelId) from cached entries that override builtin
|
|
36
|
+
const cachedKeys = new Set();
|
|
37
|
+
for (const entry of cached) {
|
|
38
|
+
cachedKeys.add(`${entry.providerId}:${entry.modelId}`);
|
|
39
|
+
}
|
|
40
|
+
// Filter builtin entries that are not overridden by cached
|
|
41
|
+
const merged = builtin.filter((b) => !cachedKeys.has(`${b.providerId}:${b.modelId}`));
|
|
42
|
+
// Add all cached entries
|
|
43
|
+
merged.push(...cached);
|
|
44
|
+
// Add config entries (providers from config.toml)
|
|
45
|
+
// Config entries with same (providerId, modelId) override both builtin and cached
|
|
46
|
+
const mergedKeys = new Set();
|
|
47
|
+
for (const entry of merged) {
|
|
48
|
+
mergedKeys.add(`${entry.providerId}:${entry.modelId}`);
|
|
49
|
+
}
|
|
50
|
+
for (const entry of config) {
|
|
51
|
+
if (!mergedKeys.has(`${entry.providerId}:${entry.modelId}`)) {
|
|
52
|
+
merged.push(entry);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return merged;
|
|
56
|
+
}
|
|
57
|
+
export function registerModelsCommand(program, ctx) {
|
|
58
|
+
program
|
|
59
|
+
.command("models")
|
|
60
|
+
.description("List known models from builtin catalog, cached remote catalog, and config")
|
|
61
|
+
.option("--json", "Emit JSON", false)
|
|
62
|
+
.action(async (opts) => {
|
|
63
|
+
const { env, cwd, stdout } = ctx();
|
|
64
|
+
// 1. Builtin models from offrouter-core
|
|
65
|
+
const builtinEntries = builtinToEntries();
|
|
66
|
+
// 2. Cached models from remote catalog (if available)
|
|
67
|
+
let cachedEntries = [];
|
|
68
|
+
const cacheDir = resolveCacheDir(env);
|
|
69
|
+
const cachedData = readCatalogCache(cacheDir);
|
|
70
|
+
if (cachedData) {
|
|
71
|
+
cachedEntries = cachedToEntries(cachedData);
|
|
72
|
+
}
|
|
73
|
+
// 3. Config providers
|
|
74
|
+
let configEntries = [];
|
|
75
|
+
let configError = null;
|
|
76
|
+
try {
|
|
77
|
+
const config = await loadConfig({ env, workspaceDir: cwd });
|
|
78
|
+
configEntries = Object.keys(config.providers)
|
|
79
|
+
.sort()
|
|
80
|
+
.map((providerId) => ({
|
|
81
|
+
providerId,
|
|
82
|
+
modelId: "*",
|
|
83
|
+
source: "config",
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
configError = formatConfigError(err);
|
|
88
|
+
}
|
|
89
|
+
// Merge: cached overrides builtin (same providerId+modelId), config appended
|
|
90
|
+
const models = mergeModels(builtinEntries, cachedEntries, configEntries);
|
|
91
|
+
if (opts.json) {
|
|
92
|
+
writeJson(stdout, {
|
|
93
|
+
models,
|
|
94
|
+
builtinCount: builtinEntries.length,
|
|
95
|
+
cachedCount: cachedEntries.length,
|
|
96
|
+
configCount: configEntries.length,
|
|
97
|
+
configError,
|
|
98
|
+
});
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (configError) {
|
|
102
|
+
writeText(stdout, `Config error: ${configError.message}`);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (models.length === 0) {
|
|
106
|
+
writeText(stdout, "No models available.");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Group by source for display
|
|
110
|
+
const builtinModels = models.filter((m) => m.source === "builtin");
|
|
111
|
+
const cachedModels = models.filter((m) => m.source === "cached");
|
|
112
|
+
const configProviderIds = models.filter((m) => m.source === "config");
|
|
113
|
+
writeText(stdout, `Models (${models.length} total):`);
|
|
114
|
+
writeText(stdout, ` Built-in: ${builtinModels.length} models`);
|
|
115
|
+
writeText(stdout, ` Cached: ${cachedModels.length} models`);
|
|
116
|
+
writeText(stdout, ` Config providers: ${configProviderIds.length}`);
|
|
117
|
+
writeText(stdout, "");
|
|
118
|
+
for (const m of models) {
|
|
119
|
+
const name = m.displayName ? `${m.displayName} (${m.modelId})` : m.modelId;
|
|
120
|
+
writeText(stdout, ` ${m.providerId}/${name} (${m.source})`);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/commands/output.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAEjE;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAE/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/commands/output.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,SAAS,CAAC,MAAiB,EAAE,KAAc;IACzD,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAiB,EAAE,IAAY;IACvD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/commands/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,cAAc,GACxB,IAAI,CAiDN"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { loadConfig } from "offrouter-core";
|
|
2
|
+
import { writeJson, writeText } from "./output.js";
|
|
3
|
+
export function registerProfilesCommand(program, ctx) {
|
|
4
|
+
program
|
|
5
|
+
.command("profiles")
|
|
6
|
+
.description("List OffRouter profiles and allowlist status")
|
|
7
|
+
.option("--json", "Emit JSON", false)
|
|
8
|
+
.action(async (opts) => {
|
|
9
|
+
const { env, cwd, stdout } = ctx();
|
|
10
|
+
try {
|
|
11
|
+
const config = await loadConfig({ env, workspaceDir: cwd });
|
|
12
|
+
const profiles = Object.values(config.profiles)
|
|
13
|
+
.map((p) => ({
|
|
14
|
+
id: p.id,
|
|
15
|
+
allowlisted: config.policy.allowlistedProfiles.includes(p.id),
|
|
16
|
+
deniedProviders: p.deniedProviders ?? [],
|
|
17
|
+
}))
|
|
18
|
+
.sort((a, b) => a.id.localeCompare(b.id));
|
|
19
|
+
const payload = {
|
|
20
|
+
allowlistedProfiles: [...config.policy.allowlistedProfiles].sort(),
|
|
21
|
+
deniedProfilePatterns: [
|
|
22
|
+
...(config.policy.deniedProfilePatterns ?? []),
|
|
23
|
+
].sort(),
|
|
24
|
+
profiles,
|
|
25
|
+
};
|
|
26
|
+
if (opts.json) {
|
|
27
|
+
writeJson(stdout, payload);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
writeText(stdout, `Allowlisted: ${payload.allowlistedProfiles.join(", ") || "(none)"}`);
|
|
31
|
+
writeText(stdout, `Denied patterns: ${payload.deniedProfilePatterns.join(", ") || "(none)"}`);
|
|
32
|
+
for (const p of profiles) {
|
|
33
|
+
writeText(stdout, `profile ${p.id}: allowlisted=${p.allowlisted}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
38
|
+
if (opts.json) {
|
|
39
|
+
writeJson(stdout, { error: message, profiles: [] });
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
writeText(stdout, `Failed to load profiles: ${message}`);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/commands/profiles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,GAAyB;IAEzB,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;QACzC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;iBAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE;aACzC,CAAC,CAAC;iBACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5C,MAAM,OAAO,GAAG;gBACd,mBAAmB,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE;gBAClE,qBAAqB,EAAE;oBACrB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC;iBAC/C,CAAC,IAAI,EAAE;gBACR,QAAQ;aACT,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;YACD,SAAS,CACP,MAAM,EACN,gBAAgB,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CACrE,CAAC;YACF,SAAS,CACP,MAAM,EACN,oBAAoB,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAC3E,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,SAAS,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,SAAS,CAAC,MAAM,EAAE,4BAA4B,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CommandContext } from "./init.js";
|
|
3
|
+
/**
|
|
4
|
+
* Minimal CLI bridge for the local OpenAI Responses-compatible proxy.
|
|
5
|
+
* Provider discovery (candidates/adapters) lands in a later phase; this starts
|
|
6
|
+
* the transparent gateway with the configured policy so custom-base-URL apps
|
|
7
|
+
* can point at OffRouter today.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerProxyCommand(program: Command, ctx: () => CommandContext): void;
|
|
10
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,cAAc,GACxB,IAAI,CAoEN"}
|