multi-ccp 0.1.0 → 0.1.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.
@@ -1,12 +1,35 @@
1
- import { confirm, input, password } from "@inquirer/prompts";
1
+ import { confirm, input, password, select } from "@inquirer/prompts";
2
+ import { readFileSync } from "node:fs";
2
3
  import { Command } from "commander";
3
4
  import { CcpError } from "../core/errors.js";
4
5
  import { launchClaude } from "../core/launcher.js";
5
6
  import { resolveConfigDir } from "../core/profiles.js";
6
- import { createApiProfile, createLoginProfile, listProfiles, removeProfile, summarizeProfile } from "../core/profiles.js";
7
+ import { createApiProfile, createCcrProfile, createLoginProfile, listProfiles, profileExists, removeProfile, summarizeProfile } from "../core/profiles.js";
7
8
  import { getSettingsPath } from "../core/settings.js";
8
- import { getCcrStatusPlaceholder } from "../core/ccr.js";
9
+ import { getCcrRouteChoices, getCcrStatus, installCcr, readCcrConfig, invokeCcrCli, printCcrStatus, restartCcrService, startCcrService, stopCcrService } from "../core/ccr.js";
9
10
  import { openEditor } from "../platform/editor.js";
11
+ import { parseSelectionText, syncSessions } from "../core/sessions.js";
12
+ function getPackageVersion() {
13
+ try {
14
+ const packageJsonUrl = new URL("../../package.json", import.meta.url);
15
+ const packageJson = JSON.parse(readFileSync(packageJsonUrl, "utf8"));
16
+ return packageJson.version ?? "0.0.0";
17
+ }
18
+ catch {
19
+ return "0.0.0";
20
+ }
21
+ }
22
+ async function ensureProfileCanBeCreated(name) {
23
+ if (!(await profileExists(name))) {
24
+ return true;
25
+ }
26
+ const config = await resolveConfigDir(name, { allowMain: false });
27
+ console.log(`Profile '${name}' already exists:`);
28
+ console.log(config.dir);
29
+ console.log("Use a different profile name, or remove the existing profile first with:");
30
+ console.log(` ccp remove ${name}`);
31
+ return false;
32
+ }
10
33
  function printProfile(profile) {
11
34
  if (profile.model) {
12
35
  console.log(`${profile.name}\t${profile.model}\t${profile.baseUrl}`);
@@ -15,6 +38,37 @@ function printProfile(profile) {
15
38
  console.log(`${profile.name}\t${profile.baseUrl}`);
16
39
  }
17
40
  }
41
+ async function selectSessionFiles(sessions) {
42
+ if (sessions.length === 0)
43
+ return [];
44
+ console.log("Select sessions to sync:");
45
+ sessions.forEach((item, index) => {
46
+ const when = item.lastWriteTime.toISOString().slice(0, 16).replace("T", " ");
47
+ const shortId = item.sessionId.length > 8 ? item.sessionId.slice(0, 8) : item.sessionId;
48
+ console.log("[" + (index + 1) + "] " + when + " " + item.relativeTime + " " + shortId + " " + item.title + " " + item.sizeKb + "KB");
49
+ });
50
+ const answer = await input({ message: "Choose numbers/ranges, 'a' for all, or 'q' to cancel" });
51
+ if (!answer.trim() || answer.trim().toLowerCase() === "q")
52
+ return [];
53
+ if (["a", "all"].includes(answer.trim().toLowerCase()))
54
+ return sessions;
55
+ return parseSelectionText(answer, sessions.length).map((index) => sessions[index]);
56
+ }
57
+ async function confirmSessionConflict(details) {
58
+ console.log("");
59
+ console.log("Conflict detected:");
60
+ console.log(" " + details.sourceFile);
61
+ console.log("Target: " + details.targetFile);
62
+ return select({
63
+ message: "Overwrite target with source?",
64
+ choices: [
65
+ { name: "No", value: "no" },
66
+ { name: "Yes", value: "yes" },
67
+ { name: "All", value: "all" },
68
+ { name: "Quit", value: "quit" }
69
+ ]
70
+ });
71
+ }
18
72
  async function showStatus(name) {
19
73
  const config = await resolveConfigDir(name, { allowMain: true });
20
74
  const profile = await summarizeProfile(config.name, config.dir);
@@ -58,7 +112,7 @@ export function createProgram() {
58
112
  program
59
113
  .name("ccp")
60
114
  .description("Claude Code profile manager")
61
- .version("0.1.0");
115
+ .version(getPackageVersion());
62
116
  program
63
117
  .command("list")
64
118
  .description("List Claude Code profiles")
@@ -75,6 +129,8 @@ export function createProgram() {
75
129
  .argument("<profile>")
76
130
  .description("Create an API profile with base URL, token, and model")
77
131
  .action(async (profile) => {
132
+ if (!(await ensureProfileCanBeCreated(profile)))
133
+ return;
78
134
  console.log(`Create Claude API profile: ${profile}`);
79
135
  const baseUrl = await input({ message: "ANTHROPIC_BASE_URL", required: true });
80
136
  const token = await password({ message: "ANTHROPIC_AUTH_TOKEN (hidden, Enter to leave placeholder)", mask: "*" });
@@ -93,6 +149,8 @@ export function createProgram() {
93
149
  .argument("<profile>")
94
150
  .description("Create a login profile that stores a separate Claude Code account login state")
95
151
  .action(async (profile) => {
152
+ if (!(await ensureProfileCanBeCreated(profile)))
153
+ return;
96
154
  console.log(`Create Claude login profile: ${profile}`);
97
155
  console.log("This profile will not set ANTHROPIC_BASE_URL or ANTHROPIC_AUTH_TOKEN.");
98
156
  const ok = await confirm({ message: "Create this login profile?", default: true });
@@ -105,6 +163,46 @@ export function createProgram() {
105
163
  console.log(`Run: ccp start ${created.name}`);
106
164
  console.log("Then complete the Claude Code login flow for this account.");
107
165
  });
166
+ program
167
+ .command("add-ccr")
168
+ .argument("<profile>")
169
+ .description("Create a CCR preset-bound profile")
170
+ .action(async (profile) => {
171
+ if (!(await ensureProfileCanBeCreated(profile)))
172
+ return;
173
+ const config = await readCcrConfig();
174
+ const routes = getCcrRouteChoices(config);
175
+ if (routes.length === 0) {
176
+ throw new CcpError("No CCR routes found. Run 'ccp ccr model' first.");
177
+ }
178
+ const route = await select({
179
+ message: "Bind this profile to a CCR route",
180
+ choices: routes.map((value) => ({ name: value, value }))
181
+ });
182
+ let token = "";
183
+ if (config?.APIKEY) {
184
+ const useExisting = await confirm({ message: "Use APIKEY from CCR config as ANTHROPIC_AUTH_TOKEN?", default: true });
185
+ if (useExisting) {
186
+ token = String(config.APIKEY);
187
+ }
188
+ }
189
+ if (!token) {
190
+ token = await password({ message: "ANTHROPIC_AUTH_TOKEN for CCR (hidden, Enter to use ccr-local-secret)", mask: "*" });
191
+ }
192
+ console.log("");
193
+ console.log("Profile: " + profile);
194
+ console.log("Type: ccr");
195
+ console.log("Route: " + route);
196
+ console.log("Token: set");
197
+ const ok = await confirm({ message: "Create this CCR profile?", default: true });
198
+ if (!ok) {
199
+ console.log("Cancelled.");
200
+ return;
201
+ }
202
+ const created = await createCcrProfile({ name: profile, route, token });
203
+ console.log("Created CCR profile '" + created.name + "'.");
204
+ console.log("Run: ccp start " + created.name);
205
+ });
108
206
  program
109
207
  .command("remove")
110
208
  .argument("<profile>")
@@ -171,19 +269,69 @@ export function createProgram() {
171
269
  });
172
270
  program
173
271
  .command("ccr")
272
+ .helpOption(false)
174
273
  .argument("[action]")
274
+ .allowUnknownOption(true)
275
+ .argument("[extraArgs...]", "Arguments passed through to ccr")
175
276
  .description("Manage Claude Code Router integration")
176
- .action(() => {
177
- const status = getCcrStatusPlaceholder();
178
- console.log(status.message);
179
- process.exitCode = 1;
277
+ .action(async (action, extraArgs) => {
278
+ switch (action) {
279
+ case undefined:
280
+ case "status": {
281
+ printCcrStatus(await getCcrStatus());
282
+ break;
283
+ }
284
+ case "install": {
285
+ process.exitCode = await installCcr();
286
+ break;
287
+ }
288
+ case "start": {
289
+ await startCcrService();
290
+ break;
291
+ }
292
+ case "stop": {
293
+ await stopCcrService();
294
+ break;
295
+ }
296
+ case "restart": {
297
+ await restartCcrService();
298
+ break;
299
+ }
300
+ case "ui":
301
+ case "model": {
302
+ process.exitCode = await invokeCcrCli(action, extraArgs);
303
+ break;
304
+ }
305
+ default: {
306
+ throw new CcpError(`Unknown ccr command '${action}'. Use 'ccp ccr status|install|start|stop|restart|ui|model'.`);
307
+ }
308
+ }
180
309
  });
181
310
  program
182
311
  .command("sync-session")
312
+ .argument("<first>")
183
313
  .allowUnknownOption(true)
314
+ .argument("[syncArgs...]", "Use '<source> to <target>' and optional --all")
184
315
  .description("Sync Claude Code sessions between profiles")
185
- .action(() => {
186
- throw new CcpError("sync-session is planned for a later TypeScript CLI release. Use the legacy PowerShell ccp for now.");
316
+ .action(async (first, syncArgs) => {
317
+ const result = await syncSessions({
318
+ first,
319
+ args: syncArgs,
320
+ selectSessions: selectSessionFiles,
321
+ confirmOverwrite: confirmSessionConflict
322
+ });
323
+ if (!result)
324
+ return;
325
+ console.log("Synced current project sessions.");
326
+ console.log("Project: " + result.projectKey);
327
+ console.log("From: " + result.sourceName + " -> " + result.sourceProjectDir);
328
+ console.log("To: " + result.targetName + " -> " + result.targetProjectDir);
329
+ console.log("Selected: " + result.selected);
330
+ console.log("copied=" + result.counts.copied + ", updated=" + result.counts.updated + ", unchanged=" + result.counts.unchanged + ", overwritten=" + result.counts.overwritten + ", conflict=" + result.counts.conflict);
331
+ if (result.conflicts.length > 0) {
332
+ console.log("Conflicts skipped:");
333
+ result.conflicts.forEach((name) => console.log(" " + name));
334
+ }
187
335
  });
188
336
  program
189
337
  .command("ui")
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAA2B,MAAM,qBAAqB,CAAC;AAEhG,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAyB,CAAC;QAC7F,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,IAAY;IACnD,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,mBAAmB,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,OAAqD;IACzE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAGD,KAAK,UAAU,kBAAkB,CAAC,QAA8B;IAC9D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3I,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC,CAAC;IAChG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IACrE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAC;IAExE,OAAO,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,OAAmD;IACvF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC;QACZ,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAa,EAAE;YACpC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE;YACtC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE;YACtC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAe,EAAE;SACzC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7E,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9F,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACjF,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,KAAK,CAAC;SACX,WAAW,CAAC,6BAA6B,CAAC;SAC1C,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEhC,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,WAAW,CAAC;SACrB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChC,IAAI,CAAC,CAAC,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAAE,OAAO;QACxD,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,2DAA2D,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAClH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,QAAQ,CAAC,WAAW,CAAC;SACrB,WAAW,CAAC,+EAA+E,CAAC;SAC5F,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChC,IAAI,CAAC,CAAC,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAAE,OAAO;QACxD,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACrF,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,WAAW,CAAC;SACrB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChC,IAAI,CAAC,CAAC,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAAE,OAAO;QACxD,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,iDAAiD,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;YACzB,OAAO,EAAE,kCAAkC;YAC3C,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACzD,CAAC,CAAC;QAEH,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,qDAAqD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACrH,IAAI,WAAW,EAAE,CAAC;gBAChB,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,sEAAsE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACzH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,WAAW,CAAC;SACrB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,gDAAgD,OAAO,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,OAAO,aAAa,EAAE,CAAC,CAAC;QACtE,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,WAAW,CAAC;SACrB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,WAAW,CAAC;SACrB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,WAAW,CAAC;SACrB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,WAAW,CAAC;SACrB,kBAAkB,CAAC,IAAI,CAAC;SACxB,QAAQ,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;SACtE,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,UAAoB,EAAE,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC;YAC9B,IAAI,EAAE,OAAO;YACb,UAAU;YACV,oBAAoB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;gBACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,gEAAgE,WAAW,IAAI,CAAC,CAAC;gBAC7F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9E,CAAC;SACF,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,UAAU,CAAC,KAAK,CAAC;SACjB,QAAQ,CAAC,UAAU,CAAC;SACpB,kBAAkB,CAAC,IAAI,CAAC;SACxB,QAAQ,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;SAC7D,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,SAAmB,EAAE,EAAE;QAChE,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,cAAc,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;gBACrC,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,OAAO,CAAC,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC;gBACtC,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,eAAe,EAAE,CAAC;gBACxB,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,iBAAiB,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;YACD,KAAK,IAAI,CAAC;YACV,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,OAAO,CAAC,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACzD,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,QAAQ,CAAC,wBAAwB,MAAM,8DAA8D,CAAC,CAAC;YACnH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,QAAQ,CAAC,SAAS,CAAC;SACnB,kBAAkB,CAAC,IAAI,CAAC;SACxB,QAAQ,CAAC,eAAe,EAAE,+CAA+C,CAAC;SAC1E,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,QAAkB,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,cAAc,EAAE,kBAAkB;YAClC,gBAAgB,EAAE,sBAAsB;SACzC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxN,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,QAAQ,CAAC,iFAAiF,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,5 +1,42 @@
1
+ import { type PathContext } from "./paths.js";
2
+ export interface CcrProvider {
3
+ name?: string;
4
+ models?: string[];
5
+ [key: string]: unknown;
6
+ }
7
+ export interface CcrConfig {
8
+ HOST?: string;
9
+ PORT?: number | string;
10
+ APIKEY?: string;
11
+ Providers?: CcrProvider[];
12
+ Router?: Record<string, unknown>;
13
+ [key: string]: unknown;
14
+ }
1
15
  export interface CcrStatus {
2
- implemented: false;
3
- message: string;
16
+ installed: boolean;
17
+ command?: string;
18
+ configPath: string;
19
+ endpoint: string;
20
+ running: boolean;
21
+ apiKeyStatus: "set" | "missing";
4
22
  }
5
- export declare function getCcrStatusPlaceholder(): CcrStatus;
23
+ export declare function readCcrConfig(context?: PathContext): Promise<CcrConfig | undefined>;
24
+ export declare function getCcrEndpoint(config?: CcrConfig): string;
25
+ export declare function getCcrEndpointFromConfig(context?: PathContext): Promise<string>;
26
+ export declare function getCcrCommand(): string | undefined;
27
+ export declare function isCcrInstalled(): boolean;
28
+ export declare function testTcpEndpoint(endpoint: string, timeoutMs?: number): Promise<boolean>;
29
+ export declare function getCcrStatus(context?: PathContext): Promise<CcrStatus>;
30
+ export declare function invokeCcrCli(action: string, extraArgs?: string[]): Promise<number>;
31
+ export declare function installCcr(): Promise<number>;
32
+ export declare function startCcrService(context?: PathContext): Promise<void>;
33
+ export declare function stopCcrService(): Promise<void>;
34
+ export declare function restartCcrService(context?: PathContext): Promise<void>;
35
+ export declare function printCcrStatus(status: CcrStatus): void;
36
+ export declare function getCcrPresetRoot(context?: PathContext): string;
37
+ export declare function getCcrPresetDir(name: string, context?: PathContext): string;
38
+ export declare function getCcrPresetEndpoint(name: string, context?: PathContext): Promise<string>;
39
+ export declare function getCcrRouteChoices(config?: CcrConfig): string[];
40
+ export declare function ensureCcrPreset(profileName: string, route: string, context?: PathContext): Promise<boolean>;
41
+ export declare function updateCcrProfileEndpoint(profileDir: string, endpoint: string, presetName: string): Promise<boolean>;
42
+ export declare function ensureCcrProfileGateway(profileDir: string, profileName: string, context?: PathContext): Promise<void>;
package/dist/core/ccr.js CHANGED
@@ -1,7 +1,317 @@
1
- export function getCcrStatusPlaceholder() {
1
+ import { spawn, spawnSync } from "node:child_process";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import net from "node:net";
4
+ import path from "node:path";
5
+ import { CcpError } from "./errors.js";
6
+ import { getClaudeCodeRouterConfigPath, getClaudeCodeRouterDir } from "./paths.js";
7
+ import { readMeta, readSettings, writeMeta, writeSettings } from "./settings.js";
8
+ function stripBom(value) {
9
+ return value.replace(/^/, "");
10
+ }
11
+ export async function readCcrConfig(context = {}) {
12
+ const configPath = getClaudeCodeRouterConfigPath(context);
13
+ try {
14
+ return JSON.parse(stripBom(await readFile(configPath, "utf8")));
15
+ }
16
+ catch (error) {
17
+ if (error.code === "ENOENT") {
18
+ return undefined;
19
+ }
20
+ const reason = error instanceof Error ? ` ${error.message}` : "";
21
+ throw new CcpError(`Failed to read CCR config: ${configPath}.${reason}`);
22
+ }
23
+ }
24
+ export function getCcrEndpoint(config) {
25
+ let host = String(config?.HOST ?? "127.0.0.1");
26
+ const port = Number(config?.PORT ?? 3456);
27
+ if (host === "0.0.0.0" || host === "::") {
28
+ host = "127.0.0.1";
29
+ }
30
+ return `http://${host}:${Number.isFinite(port) ? port : 3456}`;
31
+ }
32
+ export async function getCcrEndpointFromConfig(context = {}) {
33
+ return getCcrEndpoint(await readCcrConfig(context));
34
+ }
35
+ function commandExists(command) {
36
+ const result = process.platform === "win32"
37
+ ? spawnSync("where.exe", [command], { encoding: "utf8" })
38
+ : spawnSync("sh", ["-c", `command -v ${command}`], { encoding: "utf8" });
39
+ if (result.status !== 0) {
40
+ return { exists: false };
41
+ }
42
+ const candidates = result.stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
43
+ const source = process.platform === "win32"
44
+ ? candidates.find((line) => line.toLowerCase().endsWith(".cmd")) ?? candidates[0]
45
+ : candidates[0];
46
+ return { exists: true, source };
47
+ }
48
+ function spawnCli(command, args, options = {}) {
49
+ const stdio = options.stdio ?? "inherit";
50
+ if (process.platform === "win32") {
51
+ return spawn("cmd.exe", ["/d", "/c", command, ...args], {
52
+ detached: options.detached,
53
+ stdio
54
+ });
55
+ }
56
+ return spawn(command, args, {
57
+ detached: options.detached,
58
+ stdio
59
+ });
60
+ }
61
+ export function getCcrCommand() {
62
+ return commandExists("ccr").source;
63
+ }
64
+ export function isCcrInstalled() {
65
+ return commandExists("ccr").exists;
66
+ }
67
+ export async function testTcpEndpoint(endpoint, timeoutMs = 1000) {
68
+ return new Promise((resolve) => {
69
+ let settled = false;
70
+ let url;
71
+ try {
72
+ url = new URL(endpoint);
73
+ }
74
+ catch {
75
+ resolve(false);
76
+ return;
77
+ }
78
+ const socket = net.createConnection({ host: url.hostname, port: Number(url.port), timeout: timeoutMs });
79
+ const settle = (value) => {
80
+ if (settled)
81
+ return;
82
+ settled = true;
83
+ socket.destroy();
84
+ resolve(value);
85
+ };
86
+ socket.once("connect", () => settle(true));
87
+ socket.once("timeout", () => settle(false));
88
+ socket.once("error", () => settle(false));
89
+ });
90
+ }
91
+ export async function getCcrStatus(context = {}) {
92
+ const config = await readCcrConfig(context);
93
+ const endpoint = getCcrEndpoint(config);
94
+ const command = getCcrCommand();
95
+ return {
96
+ installed: Boolean(command),
97
+ command,
98
+ configPath: getClaudeCodeRouterConfigPath(context),
99
+ endpoint,
100
+ running: await testTcpEndpoint(endpoint),
101
+ apiKeyStatus: config?.APIKEY ? "set" : "missing"
102
+ };
103
+ }
104
+ export async function invokeCcrCli(action, extraArgs = []) {
105
+ if (!isCcrInstalled()) {
106
+ throw new CcpError("CCR is not installed. Run 'ccp ccr install' first.");
107
+ }
108
+ return new Promise((resolve, reject) => {
109
+ const child = spawnCli("ccr", [action, ...extraArgs]);
110
+ child.on("error", (error) => reject(new CcpError(`Failed to run ccr ${action}: ${error.message}`)));
111
+ child.on("exit", (code) => resolve(code ?? 0));
112
+ });
113
+ }
114
+ export async function installCcr() {
115
+ if (!commandExists("npm").exists) {
116
+ throw new CcpError("npm was not found. Make sure Node.js/npm is available in this terminal.");
117
+ }
118
+ if (isCcrInstalled()) {
119
+ console.log("CCR is already installed.");
120
+ return 0;
121
+ }
122
+ return new Promise((resolve, reject) => {
123
+ const child = spawnCli("npm", ["install", "-g", "@musistudio/claude-code-router"]);
124
+ child.on("error", (error) => reject(new CcpError(`Failed to install CCR: ${error.message}`)));
125
+ child.on("exit", (code) => resolve(code ?? 0));
126
+ });
127
+ }
128
+ async function waitForEndpoint(endpoint, attempts = 20, delayMs = 500) {
129
+ for (let i = 0; i < attempts; i++) {
130
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
131
+ if (await testTcpEndpoint(endpoint)) {
132
+ return true;
133
+ }
134
+ }
135
+ return false;
136
+ }
137
+ export async function startCcrService(context = {}) {
138
+ const endpoint = await getCcrEndpointFromConfig(context);
139
+ if (await testTcpEndpoint(endpoint)) {
140
+ console.log(`CCR is already running: ${endpoint}`);
141
+ return;
142
+ }
143
+ if (!isCcrInstalled()) {
144
+ throw new CcpError("CCR is not installed. Run 'ccp ccr install' first.");
145
+ }
146
+ const child = spawnCli("ccr", ["start"], { detached: true, stdio: "ignore" });
147
+ child.unref();
148
+ if (await waitForEndpoint(endpoint)) {
149
+ console.log(`CCR started: ${endpoint}`);
150
+ }
151
+ else {
152
+ console.log(`CCR start command was sent, but endpoint is not reachable yet: ${endpoint}`);
153
+ }
154
+ }
155
+ export async function stopCcrService() {
156
+ await invokeCcrCli("stop");
157
+ console.log("CCR stop command sent.");
158
+ }
159
+ export async function restartCcrService(context = {}) {
160
+ await stopCcrService();
161
+ await startCcrService(context);
162
+ const status = await getCcrStatus(context);
163
+ printCcrStatus(status);
164
+ }
165
+ export function printCcrStatus(status) {
166
+ console.log(`CCR installed: ${status.installed}`);
167
+ if (status.command) {
168
+ console.log(`CCR command: ${status.command}`);
169
+ }
170
+ console.log(`Config: ${status.configPath}`);
171
+ console.log(`Endpoint: ${status.endpoint}`);
172
+ console.log(`Running: ${status.running}`);
173
+ console.log(`APIKEY: ${status.apiKeyStatus}`);
174
+ }
175
+ export function getCcrPresetRoot(context = {}) {
176
+ return path.join(getClaudeCodeRouterDir(context), "presets");
177
+ }
178
+ export function getCcrPresetDir(name, context = {}) {
179
+ return path.join(getCcrPresetRoot(context), name);
180
+ }
181
+ export async function getCcrPresetEndpoint(name, context = {}) {
182
+ return `${await getCcrEndpointFromConfig(context)}/preset/${name}`;
183
+ }
184
+ export function getCcrRouteChoices(config) {
185
+ const choices = [];
186
+ for (const provider of config?.Providers ?? []) {
187
+ if (!provider.name)
188
+ continue;
189
+ for (const model of provider.models ?? []) {
190
+ choices.push(`${provider.name},${model}`);
191
+ }
192
+ }
193
+ return choices.sort((a, b) => a.localeCompare(b));
194
+ }
195
+ function cloneJson(value) {
196
+ return JSON.parse(JSON.stringify(value));
197
+ }
198
+ function newCcrRouterForRoute(config, route) {
199
+ const router = config.Router ?? {};
2
200
  return {
3
- implemented: false,
4
- message: "CCR management is planned for a later TypeScript CLI release. Use the legacy PowerShell ccp for CCR profiles for now."
201
+ default: route,
202
+ background: route,
203
+ think: route,
204
+ longContext: route,
205
+ longContextThreshold: Number(router.longContextThreshold ?? 60000),
206
+ webSearch: route,
207
+ image: typeof router.image === "string" ? router.image : ""
5
208
  };
6
209
  }
210
+ export async function ensureCcrPreset(profileName, route, context = {}) {
211
+ if (!route.trim()) {
212
+ return false;
213
+ }
214
+ const config = await readCcrConfig(context);
215
+ if (!config) {
216
+ throw new CcpError(`CCR config not found: ${getClaudeCodeRouterConfigPath(context)}`);
217
+ }
218
+ if (!config.Providers?.length) {
219
+ throw new CcpError("CCR config has no Providers. Run 'ccp ccr model' first.");
220
+ }
221
+ const providerName = route.split(",", 2)[0];
222
+ const provider = config.Providers.find((item) => item.name === providerName);
223
+ if (!provider) {
224
+ throw new CcpError(`CCR provider '${providerName}' was not found for route '${route}'.`);
225
+ }
226
+ const manifest = {
227
+ name: profileName,
228
+ version: "1.0.0",
229
+ description: `Generated by ccp for profile '${profileName}'.`,
230
+ Providers: [cloneJson(provider)],
231
+ Router: newCcrRouterForRoute(config, route),
232
+ noServer: false
233
+ };
234
+ const presetDir = getCcrPresetDir(profileName, context);
235
+ const manifestPath = path.join(presetDir, "manifest.json");
236
+ const nextJson = JSON.stringify(manifest, null, 2);
237
+ let currentJson = "";
238
+ try {
239
+ currentJson = await readFile(manifestPath, "utf8");
240
+ }
241
+ catch (error) {
242
+ if (error.code !== "ENOENT") {
243
+ throw error;
244
+ }
245
+ }
246
+ if (currentJson.trimEnd() === nextJson.trimEnd()) {
247
+ return false;
248
+ }
249
+ await mkdir(presetDir, { recursive: true });
250
+ await writeFile(manifestPath, nextJson + "\n", "utf8");
251
+ return true;
252
+ }
253
+ export async function updateCcrProfileEndpoint(profileDir, endpoint, presetName) {
254
+ let changed = false;
255
+ const settings = await readSettings(profileDir);
256
+ if (settings) {
257
+ settings.env ??= {};
258
+ if (settings.env.ANTHROPIC_BASE_URL !== endpoint) {
259
+ settings.env.ANTHROPIC_BASE_URL = endpoint;
260
+ await writeSettings(profileDir, settings);
261
+ changed = true;
262
+ }
263
+ }
264
+ const meta = await readMeta(profileDir);
265
+ if (meta) {
266
+ let metaChanged = false;
267
+ if (meta.endpoint !== endpoint) {
268
+ meta.endpoint = endpoint;
269
+ metaChanged = true;
270
+ }
271
+ if (presetName && meta.ccrPreset !== presetName) {
272
+ meta.ccrPreset = presetName;
273
+ metaChanged = true;
274
+ }
275
+ if (metaChanged) {
276
+ await writeMeta(profileDir, meta);
277
+ changed = true;
278
+ }
279
+ }
280
+ return changed;
281
+ }
282
+ export async function ensureCcrProfileGateway(profileDir, profileName, context = {}) {
283
+ const meta = await readMeta(profileDir);
284
+ if (!meta || meta.type !== "ccr") {
285
+ return;
286
+ }
287
+ const presetName = meta.ccrPreset || profileName;
288
+ const route = String(meta.ccrRoute ?? "");
289
+ if (!route.trim()) {
290
+ throw new CcpError(`CCR profile '${profileName}' has no ccrRoute. Run 'ccp ccr model' and recreate or edit this profile.`);
291
+ }
292
+ const endpoint = await getCcrPresetEndpoint(presetName, context);
293
+ await updateCcrProfileEndpoint(profileDir, endpoint, presetName);
294
+ const presetChanged = await ensureCcrPreset(presetName, route, context);
295
+ if (presetChanged) {
296
+ console.log(`Updated CCR preset '${presetName}': ${route}`);
297
+ }
298
+ const rootEndpoint = await getCcrEndpointFromConfig(context);
299
+ let running = await testTcpEndpoint(rootEndpoint);
300
+ if (presetChanged && running) {
301
+ console.log("CCR preset changed. Restarting CCR...");
302
+ await restartCcrService(context);
303
+ running = await testTcpEndpoint(rootEndpoint);
304
+ }
305
+ if (running) {
306
+ return;
307
+ }
308
+ if (meta.autoStart === false) {
309
+ throw new CcpError(`CCR endpoint is not reachable: ${endpoint}`);
310
+ }
311
+ console.log("CCR is not running. Starting CCR...");
312
+ await startCcrService(context);
313
+ if (!(await testTcpEndpoint(rootEndpoint))) {
314
+ throw new CcpError(`CCR endpoint is still not reachable after start: ${rootEndpoint}`);
315
+ }
316
+ }
7
317
  //# sourceMappingURL=ccr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ccr.js","sourceRoot":"","sources":["../../src/core/ccr.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,uHAAuH;KACjI,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ccr.js","sourceRoot":"","sources":["../../src/core/ccr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,6BAA6B,EAAE,sBAAsB,EAAoB,MAAM,YAAY,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA0BjF,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAuB,EAAE;IAC3D,MAAM,UAAU,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAc,CAAC;IAC/E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,QAAQ,CAAC,8BAA8B,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,WAAW,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAE1C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,GAAG,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,UAAU,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,UAAuB,EAAE;IACtE,OAAO,cAAc,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACzC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzD,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,cAAc,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACzC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE,IAAc,EAAE,UAAgE,EAAE;IACnH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE;YACtD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,SAAS,GAAG,IAAI;IACtE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAuB,EAAE;IAC1D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC;QAC3B,OAAO;QACP,UAAU,EAAE,6BAA6B,CAAC,OAAO,CAAC;QAClD,QAAQ;QACR,OAAO,EAAE,MAAM,eAAe,CAAC,QAAQ,CAAC;QACxC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,YAAsB,EAAE;IACzE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,oDAAoD,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;QACtD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,qBAAqB,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3G,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,QAAQ,CAAC,yEAAyE,CAAC,CAAC;IAChG,CAAC;IAED,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,gCAAgC,CAAC,CAAC,CAAC;QACnF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACrG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,QAAQ,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG;IAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAuB,EAAE;IAC7D,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,oDAAoD,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,IAAI,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kEAAkE,QAAQ,EAAE,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAuB,EAAE;IAC/D,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3C,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;AACvD,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAC,UAAuB,EAAE;IACxD,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,UAAuB,EAAE;IACrE,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,UAAuB,EAAE;IAChF,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI;YAAE,SAAS;QAC7B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAI,KAAQ;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM,CAAC;AAChD,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAiB,EAAE,KAAa;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,KAAK;QAClB,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,oBAAoB,IAAI,KAAK,CAAC;QAClE,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;KAC5D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,KAAa,EAAE,UAAuB,EAAE;IACjG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,yBAAyB,6BAA6B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,QAAQ,CAAC,yDAAyD,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,QAAQ,CAAC,iBAAiB,YAAY,8BAA8B,KAAK,IAAI,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,iCAAiC,WAAW,IAAI;QAC7D,SAAS,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,EAAE,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC;QAC3C,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,CAAC,YAAY,EAAE,QAAQ,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,UAAkB,EAClB,QAAgB,EAChB,UAAkB;IAElB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC;QACpB,IAAI,QAAQ,CAAC,GAAG,CAAC,kBAAkB,KAAK,QAAQ,EAAE,CAAC;YACjD,QAAQ,CAAC,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC;YAC3C,MAAM,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC1C,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;YAC5B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,WAAmB,EACnB,UAAuB,EAAE;IAEzB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,QAAQ,CAAC,gBAAgB,WAAW,2EAA2E,CAAC,CAAC;IAC7H,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEjE,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACxE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,MAAM,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,OAAO,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,aAAa,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,QAAQ,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,QAAQ,CAAC,oDAAoD,YAAY,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC"}