@kaitranntt/ccs 8.2.0-dev.4 → 8.2.0-dev.5

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.
@@ -5,6 +5,11 @@
5
5
  * { baseUrl: string, port: number, authMode: "loopback" }
6
6
  *
7
7
  * authMode is always "loopback" for v1 (auth-enabled unsupported until v1.1).
8
+ *
9
+ * Reuse-first behavior: before starting a new server, launch probes the candidate
10
+ * ports (bar.json port first, then 3000, 3001, 3002, 8000, 8080) for a live CCS
11
+ * server at GET /api/bar/summary. A 200 response means the server is already
12
+ * running; launch reuses it without attempting to bind a new one.
8
13
  */
9
14
  export interface BarDiscoveryJson {
10
15
  baseUrl: string;
@@ -16,6 +21,12 @@ export interface DashboardInfo {
16
21
  baseUrl: string;
17
22
  }
18
23
  export interface LaunchDeps {
24
+ /**
25
+ * Probe candidate ports for a running CCS server.
26
+ * Returns { port, baseUrl } of the first live server found, or null if none.
27
+ * Never throws — any error is treated as "not found".
28
+ */
29
+ findRunningServer: () => Promise<DashboardInfo | null>;
19
30
  /**
20
31
  * Ensure the CCS web-server / dashboard is running.
21
32
  * Returns { port, baseUrl } of the running server.
@@ -34,5 +45,20 @@ export interface LaunchDeps {
34
45
  * Returns null when the file is absent or malformed.
35
46
  */
36
47
  export declare function resolveBarPort(ccsDir: string): number | null;
48
+ /**
49
+ * Probe candidate ports for a running CCS server.
50
+ *
51
+ * Both IPv4 (127.0.0.1) and IPv6 (::1) loopback addresses are probed for
52
+ * each port. This is necessary because `ccs config` starts the server with
53
+ * host 'localhost', which macOS resolves to ::1 — an IPv4-only probe would
54
+ * miss that server and start a redundant second instance.
55
+ *
56
+ * All probes are fired concurrently (cheap loopback requests) so worst-case
57
+ * latency is ~1.5 s (one timeout) rather than N × 1.5 s sequentially.
58
+ * Priority selection is still applied after all results are in: the bar.json
59
+ * port is preferred over the defaults (3000, 3001, 3002, 8000, 8080), and
60
+ * within a port 127.0.0.1 is preferred over [::1].
61
+ */
62
+ export declare function defaultFindRunningServer(ccsDir: string): Promise<DashboardInfo | null>;
37
63
  export declare function handleBarLaunch(_args: string[], deps?: Partial<LaunchDeps>): Promise<void>;
38
64
  //# sourceMappingURL=launch-subcommand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/bar/launch-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9C,sEAAsE;IACtE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,qEAAqE;IACrE,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,oFAAoF;IACpF,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS5D;AA4CD,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE,OAAO,CAAC,UAAU,CAAM,GAC7B,OAAO,CAAC,IAAI,CAAC,CAmDf"}
1
+ {"version":3,"file":"launch-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/bar/launch-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACvD;;;;OAIG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9C,sEAAsE;IACtE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,qEAAqE;IACrE,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,oFAAoF;IACpF,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS5D;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAiD5F;AA4CD,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE,OAAO,CAAC,UAAU,CAAM,GAC7B,OAAO,CAAC,IAAI,CAAC,CAyEf"}
@@ -6,6 +6,11 @@
6
6
  * { baseUrl: string, port: number, authMode: "loopback" }
7
7
  *
8
8
  * authMode is always "loopback" for v1 (auth-enabled unsupported until v1.1).
9
+ *
10
+ * Reuse-first behavior: before starting a new server, launch probes the candidate
11
+ * ports (bar.json port first, then 3000, 3001, 3002, 8000, 8080) for a live CCS
12
+ * server at GET /api/bar/summary. A 200 response means the server is already
13
+ * running; launch reuses it without attempting to bind a new one.
9
14
  */
10
15
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
16
  if (k2 === undefined) k2 = k;
@@ -31,7 +36,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
31
36
  return result;
32
37
  };
33
38
  Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.handleBarLaunch = exports.resolveBarPort = void 0;
39
+ exports.handleBarLaunch = exports.defaultFindRunningServer = exports.resolveBarPort = void 0;
35
40
  const fs = __importStar(require("fs"));
36
41
  const os = __importStar(require("os"));
37
42
  const path = __importStar(require("path"));
@@ -58,12 +63,76 @@ exports.resolveBarPort = resolveBarPort;
58
63
  // ---------------------------------------------------------------------------
59
64
  // Default production dependencies
60
65
  // ---------------------------------------------------------------------------
66
+ /**
67
+ * Probe candidate ports for a running CCS server.
68
+ *
69
+ * Both IPv4 (127.0.0.1) and IPv6 (::1) loopback addresses are probed for
70
+ * each port. This is necessary because `ccs config` starts the server with
71
+ * host 'localhost', which macOS resolves to ::1 — an IPv4-only probe would
72
+ * miss that server and start a redundant second instance.
73
+ *
74
+ * All probes are fired concurrently (cheap loopback requests) so worst-case
75
+ * latency is ~1.5 s (one timeout) rather than N × 1.5 s sequentially.
76
+ * Priority selection is still applied after all results are in: the bar.json
77
+ * port is preferred over the defaults (3000, 3001, 3002, 8000, 8080), and
78
+ * within a port 127.0.0.1 is preferred over [::1].
79
+ */
80
+ async function defaultFindRunningServer(ccsDir) {
81
+ const { request } = await Promise.resolve().then(() => __importStar(require('undici')));
82
+ /**
83
+ * Probe a single URL. Resolves to { ok: true } on HTTP 200, { ok: false }
84
+ * on any other status or error (connection refused, timeout, etc.).
85
+ * Never rejects — all errors are absorbed so Promise.all never short-circuits.
86
+ */
87
+ async function probe(url) {
88
+ try {
89
+ const { statusCode, body } = await request(url, {
90
+ method: 'GET',
91
+ headersTimeout: 1500,
92
+ bodyTimeout: 1500,
93
+ });
94
+ // Drain the body to avoid hanging sockets regardless of status.
95
+ // body.dump() is not available in Bun's undici shim; body.text() works
96
+ // cross-runtime and fully consumes the response stream.
97
+ await body.text();
98
+ return { ok: statusCode === 200 };
99
+ }
100
+ catch {
101
+ return { ok: false };
102
+ }
103
+ }
104
+ const barJsonPort = resolveBarPort(ccsDir);
105
+ const base = [3000, 3001, 3002, 8000, 8080];
106
+ const candidates = barJsonPort !== null ? [barJsonPort, ...base.filter((p) => p !== barJsonPort)] : base;
107
+ // Build the ordered list of (port, host, baseUrl) tuples. Within each port,
108
+ // IPv4 comes before IPv6 to preserve the existing priority semantics.
109
+ const probeTargets = candidates.flatMap((port) => [
110
+ { port, baseUrl: `http://127.0.0.1:${port}`, url: `http://127.0.0.1:${port}/api/bar/summary` },
111
+ { port, baseUrl: `http://[::1]:${port}`, url: `http://[::1]:${port}/api/bar/summary` },
112
+ ]);
113
+ // Fire all probes concurrently. Each probe resolves (never rejects), so
114
+ // Promise.all collects all results without short-circuiting on failure.
115
+ const results = await Promise.all(probeTargets.map((t) => probe(t.url)));
116
+ // Walk the results in priority order and return the first successful hit.
117
+ for (let i = 0; i < probeTargets.length; i++) {
118
+ if (results[i].ok) {
119
+ const { port, baseUrl } = probeTargets[i];
120
+ return { port, baseUrl };
121
+ }
122
+ }
123
+ return null;
124
+ }
125
+ exports.defaultFindRunningServer = defaultFindRunningServer;
61
126
  async function defaultEnsureDashboard() {
62
127
  // Reuse the same startup path as `ccs config`:
63
128
  // find a free port then start the web-server via startServer().
64
129
  const getPort = (await Promise.resolve().then(() => __importStar(require('get-port')))).default;
65
130
  const { startServer } = await Promise.resolve().then(() => __importStar(require('../../web-server')));
66
- const port = await getPort({ port: [3000, 3001, 3002, 8000, 8080] });
131
+ // Pass host: '127.0.0.1' so getPort probes the same address that startServer
132
+ // will bind. On macOS, a wildcard bind and a specific 127.0.0.1 bind are
133
+ // independent: getPort without a host can return 3000 "free" while a live
134
+ // CCS server already holds 127.0.0.1:3000, causing EADDRINUSE on startServer.
135
+ const port = await getPort({ port: [3000, 3001, 3002, 8000, 8080], host: '127.0.0.1' });
67
136
  // Bind IPv4 loopback explicitly. Without a host, startServer defaults to
68
137
  // 'localhost', which on macOS resolves to ::1 (IPv6) — but bar.json's baseUrl
69
138
  // (and the Swift app) use 127.0.0.1, so the app could not reach its own server.
@@ -94,16 +163,34 @@ async function handleBarLaunch(_args, deps = {}) {
94
163
  const openApp = deps.openApp ?? defaultOpenApp;
95
164
  const ccsDir = (deps.getCcsDir ?? defaultGetCcsDir)();
96
165
  const appInstallPath = deps.appInstallPath ?? DEFAULT_APP_INSTALL_PATH;
97
- // 1. Ensure the web-server/dashboard is running.
98
- let dashboardInfo;
166
+ // Wire findRunningServer after ccsDir is resolved so the default impl can
167
+ // read bar.json from the correct directory.
168
+ const findRunningServer = deps.findRunningServer ?? (() => defaultFindRunningServer(ccsDir));
169
+ // 1. Try to reuse an already-running CCS server; fall back to starting one.
170
+ // Probe errors are treated as "not found" — they never abort the launch flow.
171
+ let running = null;
99
172
  try {
100
- dashboardInfo = await ensureDashboard();
173
+ running = await findRunningServer();
101
174
  }
102
- catch (err) {
103
- const msg = err instanceof Error ? err.message : String(err);
104
- console.error(`[X] Could not start CCS web-server: ${msg}`);
105
- console.error('[i] Run `ccs config` to start the dashboard manually.');
106
- return;
175
+ catch {
176
+ // Any probe error counts as null; ensureDashboard() is the fallback.
177
+ }
178
+ let dashboardInfo;
179
+ let reused = false;
180
+ if (running !== null) {
181
+ dashboardInfo = running;
182
+ reused = true;
183
+ }
184
+ else {
185
+ try {
186
+ dashboardInfo = await ensureDashboard();
187
+ }
188
+ catch (err) {
189
+ const msg = err instanceof Error ? err.message : String(err);
190
+ console.error(`[X] Could not start CCS web-server: ${msg}`);
191
+ console.error('[i] Run `ccs config` to start the dashboard manually.');
192
+ return;
193
+ }
107
194
  }
108
195
  // 2. Write bar.json — this is the single source of discovery for the Swift app.
109
196
  const barJson = {
@@ -120,7 +207,12 @@ async function handleBarLaunch(_args, deps = {}) {
120
207
  console.error(`[X] Failed to write bar.json: ${msg}`);
121
208
  return;
122
209
  }
123
- console.log(`[OK] CCS web-server running at ${dashboardInfo.baseUrl}`);
210
+ if (reused) {
211
+ console.log(`[OK] Reusing running CCS web-server at ${dashboardInfo.baseUrl}`);
212
+ }
213
+ else {
214
+ console.log(`[OK] CCS web-server running at ${dashboardInfo.baseUrl}`);
215
+ }
124
216
  console.log(`[i] Discovery file written: ${path.join(ccsDir, 'bar.json')}`);
125
217
  // 3. Open the app.
126
218
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"launch-subcommand.js","sourceRoot":"","sources":["../../../src/commands/bar/launch-subcommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launch-subcommand.js","sourceRoot":"","sources":["../../../src/commands/bar/launch-subcommand.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,4EAA8D;AAsC9D,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E;;;GAGG;AACH,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8B,CAAC;QAC5D,OAAO,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AATD,wCASC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,wBAAwB,CAAC,MAAc;IAC3D,MAAM,EAAE,OAAO,EAAE,GAAG,wDAAa,QAAQ,GAAC,CAAC;IAE3C;;;;OAIG;IACH,KAAK,UAAU,KAAK,CAAC,GAAW;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;gBAC9C,MAAM,EAAE,KAAK;gBACb,cAAc,EAAE,IAAI;gBACpB,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,gEAAgE;YAChE,uEAAuE;YACvE,wDAAwD;YACxD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GACd,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExF,4EAA4E;IAC5E,sEAAsE;IACtE,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,IAAI,EAAE,EAAE,GAAG,EAAE,oBAAoB,IAAI,kBAAkB,EAAE;QAC9F,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,IAAI,EAAE,EAAE,GAAG,EAAE,gBAAgB,IAAI,kBAAkB,EAAE;KACvF,CAAC,CAAC;IAEH,wEAAwE;IACxE,wEAAwE;IACxE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzE,0EAA0E;IAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAjDD,4DAiDC;AAED,KAAK,UAAU,sBAAsB;IACnC,+CAA+C;IAC/C,gEAAgE;IAChE,MAAM,OAAO,GAAG,CAAC,wDAAa,UAAU,GAAC,CAAC,CAAC,OAAO,CAAC;IACnD,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;IAEzD,6EAA6E;IAC7E,yEAAyE;IACzE,0EAA0E;IAC1E,8EAA8E;IAC9E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACxF,yEAAyE;IACzE,8EAA8E;IAC9E,gFAAgF;IAChF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAElE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,MAAM,OAAO,GAAG,oBAAoB,YAAY,EAAE,CAAC;IACnD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;IACnD,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAA,gCAAS,GAAE,CAAC;AACrB,CAAC;AAED,uFAAuF;AACvF,oFAAoF;AACpF,kFAAkF;AAClF,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AAExF,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAEvE,KAAK,UAAU,eAAe,CACnC,KAAe,EACf,OAA4B,EAAE;IAE9B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,gBAAgB,CAAC,EAAE,CAAC;IACtD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAAC;IAEvE,0EAA0E;IAC1E,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7F,4EAA4E;IAC5E,8EAA8E;IAC9E,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;IAED,IAAI,aAA4B,CAAC;IACjC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,aAAa,GAAG,OAAO,CAAC;QACxB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,eAAe,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,MAAM,OAAO,GAAqB;QAChC,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,QAAQ,EAAE,UAAU;KACrB,CAAC;IAEF,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,0CAA0C,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kCAAkC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAE7E,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;QACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,yCAAyC,cAAc,GAAG,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;AACH,CAAC;AA5ED,0CA4EC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaitranntt/ccs",
3
- "version": "8.2.0-dev.4",
3
+ "version": "8.2.0-dev.5",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude, GLM, Kimi, and more",
5
5
  "keywords": [
6
6
  "cli",