@jsonstudio/rcc 0.89.1121 → 0.89.1189

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/build-info.js +2 -2
  2. package/dist/cli/commands/clean.d.ts +16 -0
  3. package/dist/cli/commands/clean.js +58 -0
  4. package/dist/cli/commands/clean.js.map +1 -0
  5. package/dist/cli/commands/code.d.ts +55 -0
  6. package/dist/cli/commands/code.js +376 -0
  7. package/dist/cli/commands/code.js.map +1 -0
  8. package/dist/cli/commands/config.d.ts +31 -0
  9. package/dist/cli/commands/config.js +168 -0
  10. package/dist/cli/commands/config.js.map +1 -0
  11. package/dist/cli/commands/env.d.ts +20 -0
  12. package/dist/cli/commands/env.js +73 -0
  13. package/dist/cli/commands/env.js.map +1 -0
  14. package/dist/cli/commands/examples.d.ts +5 -0
  15. package/dist/cli/commands/examples.js +66 -0
  16. package/dist/cli/commands/examples.js.map +1 -0
  17. package/dist/cli/commands/port.d.ts +24 -0
  18. package/dist/cli/commands/port.js +85 -0
  19. package/dist/cli/commands/port.js.map +1 -0
  20. package/dist/cli/commands/restart.d.ts +50 -0
  21. package/dist/cli/commands/restart.js +176 -0
  22. package/dist/cli/commands/restart.js.map +1 -0
  23. package/dist/cli/commands/start.d.ts +68 -0
  24. package/dist/cli/commands/start.js +295 -0
  25. package/dist/cli/commands/start.js.map +1 -0
  26. package/dist/cli/commands/status.d.ts +16 -0
  27. package/dist/cli/commands/status.js +104 -0
  28. package/dist/cli/commands/status.js.map +1 -0
  29. package/dist/cli/commands/stop.d.ts +35 -0
  30. package/dist/cli/commands/stop.js +95 -0
  31. package/dist/cli/commands/stop.js.map +1 -0
  32. package/dist/cli/logger.d.ts +8 -0
  33. package/dist/cli/logger.js +9 -0
  34. package/dist/cli/logger.js.map +1 -0
  35. package/dist/cli/main.d.ts +6 -0
  36. package/dist/cli/main.js +16 -0
  37. package/dist/cli/main.js.map +1 -0
  38. package/dist/cli/program.d.ts +8 -0
  39. package/dist/cli/program.js +16 -0
  40. package/dist/cli/program.js.map +1 -0
  41. package/dist/cli/register/basic-commands.d.ts +30 -0
  42. package/dist/cli/register/basic-commands.js +11 -0
  43. package/dist/cli/register/basic-commands.js.map +1 -0
  44. package/dist/cli/register/code-command.d.ts +3 -0
  45. package/dist/cli/register/code-command.js +5 -0
  46. package/dist/cli/register/code-command.js.map +1 -0
  47. package/dist/cli/register/restart-command.d.ts +3 -0
  48. package/dist/cli/register/restart-command.js +5 -0
  49. package/dist/cli/register/restart-command.js.map +1 -0
  50. package/dist/cli/register/start-command.d.ts +3 -0
  51. package/dist/cli/register/start-command.js +5 -0
  52. package/dist/cli/register/start-command.js.map +1 -0
  53. package/dist/cli/register/status-config-commands.d.ts +16 -0
  54. package/dist/cli/register/status-config-commands.js +7 -0
  55. package/dist/cli/register/status-config-commands.js.map +1 -0
  56. package/dist/cli/register/stop-command.d.ts +3 -0
  57. package/dist/cli/register/stop-command.js +5 -0
  58. package/dist/cli/register/stop-command.js.map +1 -0
  59. package/dist/cli/runtime.d.ts +5 -0
  60. package/dist/cli/runtime.js +11 -0
  61. package/dist/cli/runtime.js.map +1 -0
  62. package/dist/cli/server/port-utils.d.ts +52 -0
  63. package/dist/cli/server/port-utils.js +193 -0
  64. package/dist/cli/server/port-utils.js.map +1 -0
  65. package/dist/cli/spinner.d.ts +10 -0
  66. package/dist/cli/spinner.js +59 -0
  67. package/dist/cli/spinner.js.map +1 -0
  68. package/dist/cli/utils/normalize.d.ts +2 -0
  69. package/dist/cli/utils/normalize.js +22 -0
  70. package/dist/cli/utils/normalize.js.map +1 -0
  71. package/dist/cli/utils/safe-read-json.d.ts +1 -0
  72. package/dist/cli/utils/safe-read-json.js +11 -0
  73. package/dist/cli/utils/safe-read-json.js.map +1 -0
  74. package/dist/cli.js +149 -1738
  75. package/dist/cli.js.map +1 -1
  76. package/dist/client/anthropic/anthropic-protocol-client.js +4 -3
  77. package/dist/client/anthropic/anthropic-protocol-client.js.map +1 -1
  78. package/dist/client/gemini/gemini-protocol-client.js +5 -0
  79. package/dist/client/gemini/gemini-protocol-client.js.map +1 -1
  80. package/dist/client/gemini-cli/gemini-cli-protocol-client.d.ts +1 -1
  81. package/dist/client/gemini-cli/gemini-cli-protocol-client.js +10 -3
  82. package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
  83. package/dist/commands/provider-update.js +355 -5
  84. package/dist/commands/provider-update.js.map +1 -1
  85. package/dist/commands/quota-daemon.js +2 -2
  86. package/dist/commands/quota-daemon.js.map +1 -1
  87. package/dist/config/provider-v2-loader.js +4 -2
  88. package/dist/config/provider-v2-loader.js.map +1 -1
  89. package/dist/docs/daemon-admin-ui.html +583 -87
  90. package/dist/index.js +32 -1
  91. package/dist/index.js.map +1 -1
  92. package/dist/manager/modules/quota/index.d.ts +19 -1
  93. package/dist/manager/modules/quota/index.js +130 -5
  94. package/dist/manager/modules/quota/index.js.map +1 -1
  95. package/dist/manager/modules/routing/index.js.map +1 -1
  96. package/dist/manager/storage/file-store.js +1 -1
  97. package/dist/manager/storage/file-store.js.map +1 -1
  98. package/dist/manager/types.d.ts +5 -0
  99. package/dist/providers/auth/oauth-lifecycle.js +2 -2
  100. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  101. package/dist/providers/core/api/provider-config.d.ts +2 -0
  102. package/dist/providers/core/api/provider-types.d.ts +2 -0
  103. package/dist/providers/core/config/service-profiles.js +1 -1
  104. package/dist/providers/core/config/service-profiles.js.map +1 -1
  105. package/dist/providers/core/runtime/base-provider.js +21 -27
  106. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  107. package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +1 -0
  108. package/dist/providers/core/runtime/gemini-cli-http-provider.js +37 -6
  109. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  110. package/dist/providers/core/runtime/http-request-executor.js +23 -29
  111. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  112. package/dist/providers/core/runtime/http-transport-provider.js +46 -38
  113. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  114. package/dist/providers/core/utils/http-client.d.ts +9 -0
  115. package/dist/providers/core/utils/http-client.js +9 -11
  116. package/dist/providers/core/utils/http-client.js.map +1 -1
  117. package/dist/providers/core/utils/provider-error-reporter.js +2 -6
  118. package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
  119. package/dist/providers/mock/mock-provider-runtime.js +19 -5
  120. package/dist/providers/mock/mock-provider-runtime.js.map +1 -1
  121. package/dist/server/handlers/handler-utils.d.ts +1 -1
  122. package/dist/server/handlers/handler-utils.js +4 -4
  123. package/dist/server/handlers/handler-utils.js.map +1 -1
  124. package/dist/server/handlers/responses-handler.js +2 -1
  125. package/dist/server/handlers/responses-handler.js.map +1 -1
  126. package/dist/server/handlers/sse-dispatcher.js +1 -4
  127. package/dist/server/handlers/sse-dispatcher.js.map +1 -1
  128. package/dist/server/runtime/http-server/colored-logger.d.ts +1 -1
  129. package/dist/server/runtime/http-server/colored-logger.js +22 -10
  130. package/dist/server/runtime/http-server/colored-logger.js.map +1 -1
  131. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +12 -6
  132. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  133. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +116 -98
  134. package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
  135. package/dist/server/runtime/http-server/daemon-admin/quota-handler.js +108 -15
  136. package/dist/server/runtime/http-server/daemon-admin/quota-handler.js.map +1 -1
  137. package/dist/server/runtime/http-server/daemon-admin/restart-handler.js +2 -1
  138. package/dist/server/runtime/http-server/daemon-admin/restart-handler.js.map +1 -1
  139. package/dist/server/runtime/http-server/daemon-admin/stats-handler.d.ts +3 -0
  140. package/dist/server/runtime/http-server/daemon-admin/stats-handler.js +56 -0
  141. package/dist/server/runtime/http-server/daemon-admin/stats-handler.js.map +1 -0
  142. package/dist/server/runtime/http-server/daemon-admin/status-handler.js +8 -4
  143. package/dist/server/runtime/http-server/daemon-admin/status-handler.js.map +1 -1
  144. package/dist/server/runtime/http-server/daemon-admin-routes.d.ts +9 -0
  145. package/dist/server/runtime/http-server/daemon-admin-routes.js +3 -0
  146. package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
  147. package/dist/server/runtime/http-server/executor-provider.js +74 -0
  148. package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
  149. package/dist/server/runtime/http-server/index.d.ts +2 -0
  150. package/dist/server/runtime/http-server/index.js +107 -17
  151. package/dist/server/runtime/http-server/index.js.map +1 -1
  152. package/dist/server/runtime/http-server/request-executor.js +18 -11
  153. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  154. package/dist/server/runtime/http-server/routes.d.ts +5 -0
  155. package/dist/server/runtime/http-server/routes.js +17 -4
  156. package/dist/server/runtime/http-server/routes.js.map +1 -1
  157. package/dist/server/runtime/http-server/stats-manager.d.ts +7 -0
  158. package/dist/server/runtime/http-server/stats-manager.js +31 -6
  159. package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
  160. package/dist/server/runtime/http-server/types.d.ts +5 -0
  161. package/dist/server/utils/http-error-mapper.js +70 -9
  162. package/dist/server/utils/http-error-mapper.js.map +1 -1
  163. package/dist/server/utils/request-id-manager.js +9 -5
  164. package/dist/server/utils/request-id-manager.js.map +1 -1
  165. package/dist/server/utils/sse-request-parser.js +2 -1
  166. package/dist/server/utils/sse-request-parser.js.map +1 -1
  167. package/dist/server/utils/utf8-chunk-buffer.d.ts +15 -30
  168. package/dist/server/utils/utf8-chunk-buffer.js +78 -88
  169. package/dist/server/utils/utf8-chunk-buffer.js.map +1 -1
  170. package/dist/server/utils/warmup-storm-tracker.js +1 -1
  171. package/dist/server/utils/warmup-storm-tracker.js.map +1 -1
  172. package/dist/tools/provider-update/fetch-models.js +8 -5
  173. package/dist/tools/provider-update/fetch-models.js.map +1 -1
  174. package/dist/tools/provider-update/probe-context.d.ts +24 -0
  175. package/dist/tools/provider-update/probe-context.js +199 -0
  176. package/dist/tools/provider-update/probe-context.js.map +1 -0
  177. package/dist/tools/provider-update/types.d.ts +1 -0
  178. package/package.json +10 -4
  179. package/scripts/anthropic-compare-modes.mjs +40 -3
  180. package/scripts/antigravity-smoke.mjs +180 -0
  181. package/scripts/backfill-apply-patch-exec-errorsamples.mjs +225 -0
  182. package/scripts/compare-codex-rccx.mjs +59 -1
  183. package/scripts/compare-responses-request.mjs +50 -4
  184. package/scripts/lib/errorsamples.mjs +23 -0
  185. package/scripts/mock-provider/run-regressions.mjs +12 -2
  186. package/scripts/policy-violations-report.mjs +257 -0
  187. package/scripts/publish-rcc.mjs +16 -2
  188. package/scripts/scan-apply-patch-samples.mjs +148 -7
  189. package/scripts/tests/unified-hub-responses-enforce-safe.mjs +37 -0
  190. package/scripts/tests/unified-hub-shadow-regression.mjs +55 -0
  191. package/scripts/unified-hub-shadow-compare.mjs +359 -0
  192. package/scripts/verify-e2e-gemini-followup-sample.mjs +269 -0
  193. package/scripts/virtual-router-shadow-v2-real.mjs +71 -1
  194. package/scripts/virtual-router-shadow-v2.mjs +41 -0
@@ -0,0 +1,104 @@
1
+ import { LOCAL_HOSTS } from '../../constants/index.js';
2
+ function pickPortHost(userConfig) {
3
+ const portCandidate = userConfig?.httpserver?.port ?? userConfig?.server?.port ?? userConfig?.port;
4
+ const port = typeof portCandidate === 'number' && Number.isFinite(portCandidate) ? portCandidate : null;
5
+ const hostCandidate = typeof userConfig?.httpserver?.host === 'string'
6
+ ? userConfig.httpserver.host
7
+ : (typeof userConfig?.server?.host === 'string' ? userConfig.server.host : userConfig?.host);
8
+ const host = typeof hostCandidate === 'string' && hostCandidate.trim() ? hostCandidate.trim() : LOCAL_HOSTS.LOCALHOST;
9
+ return { port, host };
10
+ }
11
+ async function checkServer(ctx, port, host) {
12
+ const startedAt = Date.now();
13
+ const controller = new AbortController();
14
+ const t = setTimeout(() => {
15
+ try {
16
+ controller.abort();
17
+ }
18
+ catch {
19
+ /* ignore */
20
+ }
21
+ }, 5000);
22
+ try {
23
+ const url = `http://${host}:${port}/health`;
24
+ const res = await ctx.fetch(url, { method: 'GET', signal: controller.signal });
25
+ const responseTime = Date.now() - startedAt;
26
+ if (!res.ok) {
27
+ return { status: 'error', port, host, responseTime };
28
+ }
29
+ const data = await res.json().catch(() => null);
30
+ const status = data?.status ? String(data.status) : 'unknown';
31
+ return { status, port, host, responseTime };
32
+ }
33
+ catch (error) {
34
+ const responseTime = Date.now() - startedAt;
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ const isTimeout = message.toLowerCase().includes('aborted') || message.toLowerCase().includes('timeout');
37
+ return { status: isTimeout ? 'timeout' : 'stopped', port, host, responseTime, error: message };
38
+ }
39
+ finally {
40
+ clearTimeout(t);
41
+ }
42
+ }
43
+ function printHuman(ctx, status) {
44
+ const normalized = status.status === 'healthy' || status.status === 'ready' ? 'running' : status.status;
45
+ switch (normalized) {
46
+ case 'running':
47
+ ctx.logger.success(`Server is running on ${status.host}:${status.port}`);
48
+ break;
49
+ case 'stopped':
50
+ ctx.logger.error('Server is not running');
51
+ break;
52
+ case 'error':
53
+ ctx.logger.error('Server is in error state');
54
+ break;
55
+ default:
56
+ ctx.logger.warning('Server status unknown');
57
+ }
58
+ }
59
+ export function createStatusCommand(program, ctx) {
60
+ program
61
+ .command('status')
62
+ .description('Show server status')
63
+ .option('-j, --json', 'Output in JSON format')
64
+ .action(async (options) => {
65
+ try {
66
+ let loaded = null;
67
+ try {
68
+ loaded = await ctx.loadConfig();
69
+ }
70
+ catch {
71
+ loaded = null;
72
+ }
73
+ if (!loaded) {
74
+ ctx.logger.error('Configuration file not found');
75
+ ctx.logger.info('Please create a configuration file first:');
76
+ ctx.logger.info(' rcc config init');
77
+ if (options.json) {
78
+ ctx.log(JSON.stringify({ error: 'Configuration file not found' }, null, 2));
79
+ }
80
+ return;
81
+ }
82
+ const { port, host } = pickPortHost(loaded.userConfig);
83
+ if (!port || port <= 0) {
84
+ const errorMsg = 'Invalid or missing port configuration in configuration file';
85
+ ctx.logger.error(errorMsg);
86
+ if (options.json) {
87
+ ctx.log(JSON.stringify({ error: errorMsg }, null, 2));
88
+ }
89
+ return;
90
+ }
91
+ const status = await checkServer(ctx, port, host);
92
+ if (options.json) {
93
+ ctx.log(JSON.stringify(status, null, 2));
94
+ }
95
+ else {
96
+ printHuman(ctx, status);
97
+ }
98
+ }
99
+ catch (error) {
100
+ ctx.logger.error(`Status check failed: ${error instanceof Error ? error.message : String(error)}`);
101
+ }
102
+ });
103
+ }
104
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import type { Command } from 'commander';
4
+ type Spinner = {
5
+ start(text?: string): Spinner;
6
+ succeed(text?: string): void;
7
+ fail(text?: string): void;
8
+ warn(text?: string): void;
9
+ info(text?: string): void;
10
+ stop(): void;
11
+ text: string;
12
+ };
13
+ type LoggerLike = {
14
+ info: (msg: string) => void;
15
+ error: (msg: string) => void;
16
+ };
17
+ export type StopCommandContext = {
18
+ isDevPackage: boolean;
19
+ defaultDevPort: number;
20
+ createSpinner: (text: string) => Promise<Spinner>;
21
+ logger: LoggerLike;
22
+ findListeningPids: (port: number) => number[];
23
+ killPidBestEffort: (pid: number, opts: {
24
+ force: boolean;
25
+ }) => void;
26
+ sleep: (ms: number) => Promise<void>;
27
+ stopTokenDaemonIfRunning?: () => Promise<void>;
28
+ env?: Record<string, string | undefined>;
29
+ fsImpl?: Pick<typeof fs, 'existsSync' | 'readFileSync'>;
30
+ pathImpl?: Pick<typeof path, 'join'>;
31
+ getHomeDir?: () => string;
32
+ exit: (code: number) => never;
33
+ };
34
+ export declare function createStopCommand(program: Command, ctx: StopCommandContext): void;
35
+ export {};
@@ -0,0 +1,95 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ function parseConfigPort(config) {
5
+ const port = config?.httpserver?.port ?? config?.server?.port ?? config?.port;
6
+ return typeof port === 'number' && Number.isFinite(port) ? port : NaN;
7
+ }
8
+ function resolveStopPort(ctx, spinner) {
9
+ if (ctx.isDevPackage) {
10
+ const envPort = Number(ctx.env?.ROUTECODEX_PORT || ctx.env?.RCC_PORT || NaN);
11
+ if (!Number.isNaN(envPort) && envPort > 0) {
12
+ ctx.logger.info(`Using port ${envPort} from environment (ROUTECODEX_PORT/RCC_PORT) [dev package: routecodex]`);
13
+ return envPort;
14
+ }
15
+ const resolvedPort = ctx.defaultDevPort;
16
+ ctx.logger.info(`Using dev default port ${resolvedPort} (routecodex dev package)`);
17
+ return resolvedPort;
18
+ }
19
+ const fsImpl = ctx.fsImpl ?? fs;
20
+ const pathImpl = ctx.pathImpl ?? path;
21
+ const home = ctx.getHomeDir ?? (() => homedir());
22
+ const configPath = pathImpl.join(home(), '.routecodex', 'config.json');
23
+ if (!fsImpl.existsSync(configPath)) {
24
+ spinner.fail(`Configuration file not found: ${configPath}`);
25
+ ctx.logger.error('Cannot determine server port without configuration file');
26
+ ctx.logger.info('Please create a configuration file first:');
27
+ ctx.logger.info(' rcc config init');
28
+ ctx.exit(1);
29
+ }
30
+ let config;
31
+ try {
32
+ const configContent = fsImpl.readFileSync(configPath, 'utf8');
33
+ config = JSON.parse(configContent);
34
+ }
35
+ catch {
36
+ spinner.fail('Failed to parse configuration file');
37
+ ctx.logger.error(`Invalid JSON in configuration file: ${configPath}`);
38
+ ctx.exit(1);
39
+ }
40
+ const port = parseConfigPort(config);
41
+ if (!Number.isFinite(port) || port <= 0) {
42
+ spinner.fail('Invalid or missing port configuration');
43
+ ctx.logger.error('Configuration file must specify a valid port number');
44
+ ctx.exit(1);
45
+ }
46
+ return port;
47
+ }
48
+ export function createStopCommand(program, ctx) {
49
+ program
50
+ .command('stop')
51
+ .description('Stop the RouteCodex server')
52
+ .action(async () => {
53
+ const spinner = await ctx.createSpinner('Stopping RouteCodex server...');
54
+ try {
55
+ const resolvedPort = resolveStopPort(ctx, spinner);
56
+ const pids = ctx.findListeningPids(resolvedPort);
57
+ if (!pids.length) {
58
+ spinner.succeed(`No server listening on ${resolvedPort}.`);
59
+ if (ctx.isDevPackage) {
60
+ await ctx.stopTokenDaemonIfRunning?.();
61
+ }
62
+ return;
63
+ }
64
+ for (const pid of pids) {
65
+ ctx.killPidBestEffort(pid, { force: false });
66
+ }
67
+ const deadline = Date.now() + 3000;
68
+ while (Date.now() < deadline) {
69
+ if (ctx.findListeningPids(resolvedPort).length === 0) {
70
+ spinner.succeed(`Stopped server on ${resolvedPort}.`);
71
+ if (ctx.isDevPackage) {
72
+ await ctx.stopTokenDaemonIfRunning?.();
73
+ }
74
+ return;
75
+ }
76
+ await ctx.sleep(100);
77
+ }
78
+ const remain = ctx.findListeningPids(resolvedPort);
79
+ if (remain.length) {
80
+ for (const pid of remain) {
81
+ ctx.killPidBestEffort(pid, { force: true });
82
+ }
83
+ }
84
+ spinner.succeed(`Force stopped server on ${resolvedPort}.`);
85
+ if (ctx.isDevPackage) {
86
+ await ctx.stopTokenDaemonIfRunning?.();
87
+ }
88
+ }
89
+ catch (e) {
90
+ spinner.fail(`Failed to stop: ${e.message}`);
91
+ ctx.exit(1);
92
+ }
93
+ });
94
+ }
95
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type CliLogger = {
2
+ info: (msg: string) => void;
3
+ success: (msg: string) => void;
4
+ warning: (msg: string) => void;
5
+ error: (msg: string) => void;
6
+ debug: (msg: string) => void;
7
+ };
8
+ export declare const logger: CliLogger;
@@ -0,0 +1,9 @@
1
+ import chalk from 'chalk';
2
+ export const logger = {
3
+ info: (msg) => console.log(`${chalk.blue('ℹ')} ${msg}`),
4
+ success: (msg) => console.log(`${chalk.green('✓')} ${msg}`),
5
+ warning: (msg) => console.log(`${chalk.yellow('⚠')} ${msg}`),
6
+ error: (msg) => console.log(`${chalk.red('✗')} ${msg}`),
7
+ debug: (msg) => console.log(`${chalk.gray('◉')} ${msg}`)
8
+ };
9
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,CAAC,MAAM,MAAM,GAAc;IAC/B,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAG,IAAM,GAAG,EAAE,CAAC;IACnE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAG,IAAM,GAAG,EAAE,CAAC;IACvE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAG,IAAM,GAAG,EAAE,CAAC;IACxE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAG,IAAM,GAAG,EAAE,CAAC;IACnE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAG,IAAM,GAAG,EAAE,CAAC;CACrE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CliRuntime } from './runtime.js';
2
+ export declare function runCli(argv: string[], ctx: {
3
+ pkgName: string;
4
+ cliVersion: string;
5
+ runtime: CliRuntime;
6
+ }): Promise<number>;
@@ -0,0 +1,16 @@
1
+ import { createCliProgram } from './program.js';
2
+ export async function runCli(argv, ctx) {
3
+ const program = createCliProgram(ctx);
4
+ program.exitOverride((err) => {
5
+ throw err;
6
+ });
7
+ try {
8
+ await program.parseAsync(argv, { from: 'node' });
9
+ return 0;
10
+ }
11
+ catch (err) {
12
+ const e = err;
13
+ return typeof e?.exitCode === 'number' ? e.exitCode : 1;
14
+ }
15
+ }
16
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAc,EACd,GAAiE;IAEjE,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAEtC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAyB,CAAC;QACpC,OAAO,OAAO,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ import type { CliRuntime } from './runtime.js';
3
+ export type CliProgramContext = {
4
+ pkgName: string;
5
+ cliVersion: string;
6
+ runtime: CliRuntime;
7
+ };
8
+ export declare function createCliProgram(ctx: CliProgramContext): Command;
@@ -0,0 +1,16 @@
1
+ import { Command } from 'commander';
2
+ export function createCliProgram(ctx) {
3
+ const program = new Command();
4
+ program.configureOutput({
5
+ writeOut: (str) => ctx.runtime.writeOut(str),
6
+ writeErr: (str) => ctx.runtime.writeErr(str)
7
+ });
8
+ program
9
+ .name(ctx.pkgName === 'rcc' ? 'rcc' : 'routecodex')
10
+ .description('RouteCodex CLI - Multi-provider OpenAI proxy server and Claude Code interface')
11
+ .version(ctx.cliVersion);
12
+ // Keep behavior deterministic in tests (Commander will treat extra args as unknown command).
13
+ program.command('noop', { hidden: true }).description('internal').action(() => { });
14
+ return program;
15
+ }
16
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,MAAM,UAAU,gBAAgB,CAAC,GAAsB;IACrD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO,CAAC,eAAe,CAAC;QACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC5C,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;KAC7C,CAAC,CAAC;IAEH,OAAO;SACJ,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;SAClD,WAAW,CAAC,+EAA+E,CAAC;SAC5F,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE3B,6FAA6F;IAC7F,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEnF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { Command } from 'commander';
2
+ import type { Spinner } from '../spinner.js';
3
+ import type { CliLogger } from '../logger.js';
4
+ export declare function registerBasicCommands(program: Command, deps: {
5
+ env: {
6
+ isDevPackage: boolean;
7
+ defaultDevPort: number;
8
+ log: (line: string) => void;
9
+ error: (line: string) => void;
10
+ exit: (code: number) => never;
11
+ };
12
+ clean: {
13
+ logger: CliLogger;
14
+ };
15
+ examples: {
16
+ log: (line: string) => void;
17
+ };
18
+ port: {
19
+ defaultPort: number;
20
+ createSpinner: (text: string) => Promise<Spinner>;
21
+ findListeningPids: (port: number) => number[];
22
+ killPidBestEffort: (pid: number, opts: {
23
+ force: boolean;
24
+ }) => void;
25
+ sleep: (ms: number) => Promise<void>;
26
+ log: (line: string) => void;
27
+ error: (line: string) => void;
28
+ exit: (code: number) => never;
29
+ };
30
+ }): void;
@@ -0,0 +1,11 @@
1
+ import { createCleanCommand } from '../commands/clean.js';
2
+ import { createEnvCommand } from '../commands/env.js';
3
+ import { createExamplesCommand } from '../commands/examples.js';
4
+ import { createPortCommand } from '../commands/port.js';
5
+ export function registerBasicCommands(program, deps) {
6
+ createEnvCommand(program, deps.env);
7
+ createCleanCommand(program, deps.clean);
8
+ createExamplesCommand(program, deps.examples);
9
+ createPortCommand(program, deps.port);
10
+ }
11
+ //# sourceMappingURL=basic-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-commands.js","sourceRoot":"","sources":["../../../src/cli/register/basic-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,IAwBC;IAED,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type CodeCommandContext } from '../commands/code.js';
3
+ export declare function registerCodeCommand(program: Command, ctx: CodeCommandContext): void;
@@ -0,0 +1,5 @@
1
+ import { createCodeCommand } from '../commands/code.js';
2
+ export function registerCodeCommand(program, ctx) {
3
+ createCodeCommand(program, ctx);
4
+ }
5
+ //# sourceMappingURL=code-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-command.js","sourceRoot":"","sources":["../../../src/cli/register/code-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAA2B,MAAM,qBAAqB,CAAC;AAEjF,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,GAAuB;IAC3E,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type RestartCommandContext } from '../commands/restart.js';
3
+ export declare function registerRestartCommand(program: Command, ctx: RestartCommandContext): void;
@@ -0,0 +1,5 @@
1
+ import { createRestartCommand } from '../commands/restart.js';
2
+ export function registerRestartCommand(program, ctx) {
3
+ createRestartCommand(program, ctx);
4
+ }
5
+ //# sourceMappingURL=restart-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-command.js","sourceRoot":"","sources":["../../../src/cli/register/restart-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAA8B,MAAM,wBAAwB,CAAC;AAE1F,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,GAA0B;IACjF,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type StartCommandContext } from '../commands/start.js';
3
+ export declare function registerStartCommand(program: Command, ctx: StartCommandContext): void;
@@ -0,0 +1,5 @@
1
+ import { createStartCommand } from '../commands/start.js';
2
+ export function registerStartCommand(program, ctx) {
3
+ createStartCommand(program, ctx);
4
+ }
5
+ //# sourceMappingURL=start-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-command.js","sourceRoot":"","sources":["../../../src/cli/register/start-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAA4B,MAAM,sBAAsB,CAAC;AAEpF,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,GAAwB;IAC7E,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Command } from 'commander';
2
+ import type { LoadedRouteCodexConfig } from '../../config/routecodex-config-loader.js';
3
+ import type { CliLogger } from '../logger.js';
4
+ import type { Spinner } from '../spinner.js';
5
+ export declare function registerStatusConfigCommands(program: Command, deps: {
6
+ config: {
7
+ logger: CliLogger;
8
+ createSpinner: (text: string) => Promise<Spinner>;
9
+ };
10
+ status: {
11
+ logger: CliLogger;
12
+ log: (line: string) => void;
13
+ loadConfig: () => Promise<LoadedRouteCodexConfig>;
14
+ fetch: typeof fetch;
15
+ };
16
+ }): void;
@@ -0,0 +1,7 @@
1
+ import { createConfigCommand } from '../commands/config.js';
2
+ import { createStatusCommand } from '../commands/status.js';
3
+ export function registerStatusConfigCommands(program, deps) {
4
+ createConfigCommand(program, deps.config);
5
+ createStatusCommand(program, deps.status);
6
+ }
7
+ //# sourceMappingURL=status-config-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-config-commands.js","sourceRoot":"","sources":["../../../src/cli/register/status-config-commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,4BAA4B,CAC1C,OAAgB,EAChB,IAWC;IAED,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import { type StopCommandContext } from '../commands/stop.js';
3
+ export declare function registerStopCommand(program: Command, ctx: StopCommandContext): void;
@@ -0,0 +1,5 @@
1
+ import { createStopCommand } from '../commands/stop.js';
2
+ export function registerStopCommand(program, ctx) {
3
+ createStopCommand(program, ctx);
4
+ }
5
+ //# sourceMappingURL=stop-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-command.js","sourceRoot":"","sources":["../../../src/cli/register/stop-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAA2B,MAAM,qBAAqB,CAAC;AAEjF,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,GAAuB;IAC3E,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type CliRuntime = {
2
+ writeOut: (text: string) => void;
3
+ writeErr: (text: string) => void;
4
+ };
5
+ export declare function createNodeRuntime(): CliRuntime;
@@ -0,0 +1,11 @@
1
+ export function createNodeRuntime() {
2
+ return {
3
+ writeOut: (text) => {
4
+ process.stdout.write(text);
5
+ },
6
+ writeErr: (text) => {
7
+ process.stderr.write(text);
8
+ }
9
+ };
10
+ }
11
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/cli/runtime.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { spawnSync as nodeSpawnSync } from 'node:child_process';
2
+ export type PortUtilsSpinner = {
3
+ start(text?: string): PortUtilsSpinner;
4
+ succeed(text?: string): void;
5
+ fail(text?: string): void;
6
+ warn(text?: string): void;
7
+ info(text?: string): void;
8
+ stop(): void;
9
+ text: string;
10
+ };
11
+ export type PortUtilsLogger = {
12
+ info: (msg: string) => void;
13
+ success: (msg: string) => void;
14
+ warning: (msg: string) => void;
15
+ error: (msg: string) => void;
16
+ };
17
+ export declare function killPidBestEffortImpl(args: {
18
+ pid: number;
19
+ force: boolean;
20
+ isWindows: boolean;
21
+ spawnSyncImpl?: typeof nodeSpawnSync;
22
+ processKill?: typeof process.kill;
23
+ }): void;
24
+ export declare function findListeningPidsImpl(args: {
25
+ port: number;
26
+ isWindows: boolean;
27
+ spawnSyncImpl?: typeof nodeSpawnSync;
28
+ logger: PortUtilsLogger;
29
+ parseNetstatListeningPids: (stdout: string, port: number) => number[];
30
+ }): number[];
31
+ export declare function isServerHealthyQuickImpl(args: {
32
+ port: number;
33
+ fetchImpl: typeof fetch;
34
+ }): Promise<boolean>;
35
+ export declare function ensurePortAvailableImpl(args: {
36
+ port: number;
37
+ parentSpinner: PortUtilsSpinner;
38
+ opts?: {
39
+ restart?: boolean;
40
+ };
41
+ fetchImpl: typeof fetch;
42
+ sleep: (ms: number) => Promise<void>;
43
+ env: NodeJS.ProcessEnv;
44
+ logger: PortUtilsLogger;
45
+ createSpinner: (text: string) => Promise<PortUtilsSpinner>;
46
+ findListeningPids: (port: number) => number[];
47
+ killPidBestEffort: (pid: number, opts: {
48
+ force: boolean;
49
+ }) => void;
50
+ isServerHealthyQuick: (port: number) => Promise<boolean>;
51
+ exit: (code: number) => never;
52
+ }): Promise<void>;