@jsonstudio/rcc 0.89.1803 → 0.89.1959

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 (283) hide show
  1. package/configsamples/config.json +19 -0
  2. package/configsamples/provider/deepseek/config.v1.json +59 -0
  3. package/dist/build-info.js +2 -2
  4. package/dist/cli/commands/claude.d.ts +4 -0
  5. package/dist/cli/commands/claude.js +56 -0
  6. package/dist/cli/commands/claude.js.map +1 -0
  7. package/dist/cli/commands/clock-admin.d.ts +20 -0
  8. package/dist/cli/commands/clock-admin.js +234 -0
  9. package/dist/cli/commands/clock-admin.js.map +1 -0
  10. package/dist/cli/commands/code.d.ts +0 -42
  11. package/dist/cli/commands/code.js +4 -414
  12. package/dist/cli/commands/code.js.map +1 -1
  13. package/dist/cli/commands/codex.d.ts +4 -0
  14. package/dist/cli/commands/codex.js +43 -0
  15. package/dist/cli/commands/codex.js.map +1 -0
  16. package/dist/cli/commands/examples.js +13 -16
  17. package/dist/cli/commands/examples.js.map +1 -1
  18. package/dist/cli/commands/init/basic.d.ts +40 -0
  19. package/dist/cli/commands/init/basic.js +482 -0
  20. package/dist/cli/commands/init/basic.js.map +1 -0
  21. package/dist/cli/commands/init/camoufox.d.ts +7 -0
  22. package/dist/cli/commands/init/camoufox.js +59 -0
  23. package/dist/cli/commands/init/camoufox.js.map +1 -0
  24. package/dist/cli/commands/init/interactive.d.ts +18 -0
  25. package/dist/cli/commands/init/interactive.js +223 -0
  26. package/dist/cli/commands/init/interactive.js.map +1 -0
  27. package/dist/cli/commands/init/shared.d.ts +66 -0
  28. package/dist/cli/commands/init/shared.js +9 -0
  29. package/dist/cli/commands/init/shared.js.map +1 -0
  30. package/dist/cli/commands/init/workflows.d.ts +29 -0
  31. package/dist/cli/commands/init/workflows.js +341 -0
  32. package/dist/cli/commands/init/workflows.js.map +1 -0
  33. package/dist/cli/commands/init.d.ts +2 -26
  34. package/dist/cli/commands/init.js +220 -53
  35. package/dist/cli/commands/init.js.map +1 -1
  36. package/dist/cli/commands/launcher-kernel.d.ts +78 -0
  37. package/dist/cli/commands/launcher-kernel.js +1194 -0
  38. package/dist/cli/commands/launcher-kernel.js.map +1 -0
  39. package/dist/cli/commands/start.js +27 -1
  40. package/dist/cli/commands/start.js.map +1 -1
  41. package/dist/cli/commands/status.d.ts +2 -0
  42. package/dist/cli/commands/status.js +24 -1
  43. package/dist/cli/commands/status.js.map +1 -1
  44. package/dist/cli/commands/stop.d.ts +1 -0
  45. package/dist/cli/commands/stop.js +201 -4
  46. package/dist/cli/commands/stop.js.map +1 -1
  47. package/dist/cli/commands/tmux-inject.d.ts +20 -0
  48. package/dist/cli/commands/tmux-inject.js +212 -0
  49. package/dist/cli/commands/tmux-inject.js.map +1 -0
  50. package/dist/cli/config/init-provider-catalog.js +34 -0
  51. package/dist/cli/config/init-provider-catalog.js.map +1 -1
  52. package/dist/cli/register/claude-command.d.ts +3 -0
  53. package/dist/cli/register/claude-command.js +5 -0
  54. package/dist/cli/register/claude-command.js.map +1 -0
  55. package/dist/cli/register/clock-admin-command.d.ts +3 -0
  56. package/dist/cli/register/clock-admin-command.js +5 -0
  57. package/dist/cli/register/clock-admin-command.js.map +1 -0
  58. package/dist/cli/register/codex-command.d.ts +3 -0
  59. package/dist/cli/register/codex-command.js +5 -0
  60. package/dist/cli/register/codex-command.js.map +1 -0
  61. package/dist/cli/register/status-config-commands.d.ts +2 -0
  62. package/dist/cli/register/status-config-commands.js.map +1 -1
  63. package/dist/cli/register/tmux-inject-command.d.ts +3 -0
  64. package/dist/cli/register/tmux-inject-command.js +5 -0
  65. package/dist/cli/register/tmux-inject-command.js.map +1 -0
  66. package/dist/cli/server/port-utils.d.ts +3 -2
  67. package/dist/cli/server/port-utils.js +171 -32
  68. package/dist/cli/server/port-utils.js.map +1 -1
  69. package/dist/cli.js +45 -6
  70. package/dist/cli.js.map +1 -1
  71. package/dist/client/gemini/gemini-protocol-client.js +56 -5
  72. package/dist/client/gemini/gemini-protocol-client.js.map +1 -1
  73. package/dist/commands/token-daemon.js +59 -7
  74. package/dist/commands/token-daemon.js.map +1 -1
  75. package/dist/commands/validate.js +87 -15
  76. package/dist/commands/validate.js.map +1 -1
  77. package/dist/config/routecodex-config-loader.js +31 -2
  78. package/dist/config/routecodex-config-loader.js.map +1 -1
  79. package/dist/docs/daemon-admin-ui.html +948 -74
  80. package/dist/index.d.ts +1 -0
  81. package/dist/index.js +325 -37
  82. package/dist/index.js.map +1 -1
  83. package/dist/manager/quota/provider-quota-center.js +8 -14
  84. package/dist/manager/quota/provider-quota-center.js.map +1 -1
  85. package/dist/modules/llmswitch/bridge.d.ts +39 -0
  86. package/dist/modules/llmswitch/bridge.js +169 -0
  87. package/dist/modules/llmswitch/bridge.js.map +1 -1
  88. package/dist/modules/pipeline/utils/colored-logger.js +1 -1
  89. package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
  90. package/dist/providers/auth/deepseek-account-auth.d.ts +39 -0
  91. package/dist/providers/auth/deepseek-account-auth.js +329 -0
  92. package/dist/providers/auth/deepseek-account-auth.js.map +1 -0
  93. package/dist/providers/auth/deepseek-account-token-acquirer.d.ts +15 -0
  94. package/dist/providers/auth/deepseek-account-token-acquirer.js +644 -0
  95. package/dist/providers/auth/deepseek-account-token-acquirer.js.map +1 -0
  96. package/dist/providers/auth/oauth-lifecycle.js +26 -4
  97. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  98. package/dist/providers/auth/oauth-repair-cooldown.d.ts +5 -0
  99. package/dist/providers/auth/oauth-repair-cooldown.js +39 -0
  100. package/dist/providers/auth/oauth-repair-cooldown.js.map +1 -1
  101. package/dist/providers/auth/token-scanner/index.d.ts +6 -0
  102. package/dist/providers/auth/token-scanner/index.js +53 -0
  103. package/dist/providers/auth/token-scanner/index.js.map +1 -1
  104. package/dist/providers/core/api/provider-config.d.ts +17 -2
  105. package/dist/providers/core/api/provider-types.d.ts +6 -0
  106. package/dist/providers/core/api/provider-types.js.map +1 -1
  107. package/dist/providers/core/config/camoufox-launcher.d.ts +7 -0
  108. package/dist/providers/core/config/camoufox-launcher.js +68 -21
  109. package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
  110. package/dist/providers/core/config/service-profiles.js +19 -0
  111. package/dist/providers/core/config/service-profiles.js.map +1 -1
  112. package/dist/providers/core/contracts/deepseek-provider-contract.d.ts +34 -0
  113. package/dist/providers/core/contracts/deepseek-provider-contract.js +100 -0
  114. package/dist/providers/core/contracts/deepseek-provider-contract.js.map +1 -0
  115. package/dist/providers/core/runtime/anthropic-http-provider.d.ts +0 -5
  116. package/dist/providers/core/runtime/anthropic-http-provider.js +0 -26
  117. package/dist/providers/core/runtime/anthropic-http-provider.js.map +1 -1
  118. package/dist/providers/core/runtime/deepseek-http-provider.d.ts +35 -0
  119. package/dist/providers/core/runtime/deepseek-http-provider.js +373 -0
  120. package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -0
  121. package/dist/providers/core/runtime/deepseek-session-pow.d.ts +55 -0
  122. package/dist/providers/core/runtime/deepseek-session-pow.js +422 -0
  123. package/dist/providers/core/runtime/deepseek-session-pow.js.map +1 -0
  124. package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +0 -3
  125. package/dist/providers/core/runtime/gemini-cli-http-provider.js +0 -72
  126. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  127. package/dist/providers/core/runtime/gemini-http-provider.d.ts +1 -7
  128. package/dist/providers/core/runtime/gemini-http-provider.js +3 -110
  129. package/dist/providers/core/runtime/gemini-http-provider.js.map +1 -1
  130. package/dist/providers/core/runtime/http-request-executor.d.ts +1 -0
  131. package/dist/providers/core/runtime/http-request-executor.js +4 -0
  132. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  133. package/dist/providers/core/runtime/http-transport-provider.d.ts +10 -4
  134. package/dist/providers/core/runtime/http-transport-provider.js +308 -82
  135. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  136. package/dist/providers/core/runtime/iflow-http-provider.d.ts +0 -4
  137. package/dist/providers/core/runtime/iflow-http-provider.js +0 -28
  138. package/dist/providers/core/runtime/iflow-http-provider.js.map +1 -1
  139. package/dist/providers/core/runtime/provider-factory.d.ts +5 -0
  140. package/dist/providers/core/runtime/provider-factory.js +59 -6
  141. package/dist/providers/core/runtime/provider-factory.js.map +1 -1
  142. package/dist/providers/core/runtime/responses-provider.d.ts +0 -2
  143. package/dist/providers/core/runtime/responses-provider.js +0 -11
  144. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  145. package/dist/providers/core/strategies/oauth-device-flow.js +16 -1
  146. package/dist/providers/core/strategies/oauth-device-flow.js.map +1 -1
  147. package/dist/providers/core/utils/provider-type-utils.js +2 -1
  148. package/dist/providers/core/utils/provider-type-utils.js.map +1 -1
  149. package/dist/providers/profile/families/anthropic-profile.d.ts +2 -0
  150. package/dist/providers/profile/families/anthropic-profile.js +32 -0
  151. package/dist/providers/profile/families/anthropic-profile.js.map +1 -0
  152. package/dist/providers/profile/families/antigravity-profile.d.ts +2 -0
  153. package/dist/providers/profile/families/antigravity-profile.js +109 -0
  154. package/dist/providers/profile/families/antigravity-profile.js.map +1 -0
  155. package/dist/providers/profile/families/glm-profile.d.ts +2 -0
  156. package/dist/providers/profile/families/glm-profile.js +48 -0
  157. package/dist/providers/profile/families/glm-profile.js.map +1 -0
  158. package/dist/providers/profile/families/iflow-profile.d.ts +2 -0
  159. package/dist/providers/profile/families/iflow-profile.js +232 -0
  160. package/dist/providers/profile/families/iflow-profile.js.map +1 -0
  161. package/dist/providers/profile/families/qwen-profile.d.ts +2 -0
  162. package/dist/providers/profile/families/qwen-profile.js +14 -0
  163. package/dist/providers/profile/families/qwen-profile.js.map +1 -0
  164. package/dist/providers/profile/families/responses-profile.d.ts +2 -0
  165. package/dist/providers/profile/families/responses-profile.js +28 -0
  166. package/dist/providers/profile/families/responses-profile.js.map +1 -0
  167. package/dist/providers/profile/profile-contracts.d.ts +74 -0
  168. package/dist/providers/profile/profile-contracts.js +2 -0
  169. package/dist/providers/profile/profile-contracts.js.map +1 -0
  170. package/dist/providers/profile/profile-registry.d.ts +3 -0
  171. package/dist/providers/profile/profile-registry.js +40 -0
  172. package/dist/providers/profile/profile-registry.js.map +1 -0
  173. package/dist/providers/profile/provider-directory.d.ts +2 -0
  174. package/dist/providers/profile/provider-directory.js +55 -0
  175. package/dist/providers/profile/provider-directory.js.map +1 -0
  176. package/dist/providers/profile/provider-profile-loader.js +43 -3
  177. package/dist/providers/profile/provider-profile-loader.js.map +1 -1
  178. package/dist/providers/profile/provider-profile.d.ts +8 -0
  179. package/dist/scripts/deepseek/pow-solver.mjs +146 -0
  180. package/dist/scripts/deepseek/sha3_wasm_bg.7b9ca65ddd.wasm +0 -0
  181. package/dist/server/handlers/config-admin-handler.js +27 -0
  182. package/dist/server/handlers/config-admin-handler.js.map +1 -1
  183. package/dist/server/runtime/http-server/clock-client-registry.d.ts +113 -0
  184. package/dist/server/runtime/http-server/clock-client-registry.js +592 -0
  185. package/dist/server/runtime/http-server/clock-client-registry.js.map +1 -0
  186. package/dist/server/runtime/http-server/clock-client-routes.d.ts +2 -0
  187. package/dist/server/runtime/http-server/clock-client-routes.js +481 -0
  188. package/dist/server/runtime/http-server/clock-client-routes.js.map +1 -0
  189. package/dist/server/runtime/http-server/clock-daemon-inject-config.d.ts +1 -0
  190. package/dist/server/runtime/http-server/clock-daemon-inject-config.js +11 -0
  191. package/dist/server/runtime/http-server/clock-daemon-inject-config.js.map +1 -0
  192. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +3 -3
  193. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -1
  194. package/dist/server/runtime/http-server/daemon-admin/auth-session.d.ts +1 -0
  195. package/dist/server/runtime/http-server/daemon-admin/auth-session.js +18 -2
  196. package/dist/server/runtime/http-server/daemon-admin/auth-session.js.map +1 -1
  197. package/dist/server/runtime/http-server/daemon-admin/control-handler.js +2 -15
  198. package/dist/server/runtime/http-server/daemon-admin/control-handler.js.map +1 -1
  199. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +65 -7
  200. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  201. package/dist/server/runtime/http-server/executor-metadata.js +37 -1
  202. package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
  203. package/dist/server/runtime/http-server/executor-provider.js +55 -0
  204. package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
  205. package/dist/server/runtime/http-server/executor-response.js +49 -1
  206. package/dist/server/runtime/http-server/executor-response.js.map +1 -1
  207. package/dist/server/runtime/http-server/index.d.ts +10 -0
  208. package/dist/server/runtime/http-server/index.js +534 -9
  209. package/dist/server/runtime/http-server/index.js.map +1 -1
  210. package/dist/server/runtime/http-server/managed-process-probe.d.ts +6 -0
  211. package/dist/server/runtime/http-server/managed-process-probe.js +294 -0
  212. package/dist/server/runtime/http-server/managed-process-probe.js.map +1 -0
  213. package/dist/server/runtime/http-server/middleware.js +16 -1
  214. package/dist/server/runtime/http-server/middleware.js.map +1 -1
  215. package/dist/server/runtime/http-server/provider-utils.js +6 -2
  216. package/dist/server/runtime/http-server/provider-utils.js.map +1 -1
  217. package/dist/server/runtime/http-server/request-executor.d.ts +1 -0
  218. package/dist/server/runtime/http-server/request-executor.js +360 -35
  219. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  220. package/dist/server/runtime/http-server/routes.js +95 -3
  221. package/dist/server/runtime/http-server/routes.js.map +1 -1
  222. package/dist/server/runtime/http-server/stats-manager.d.ts +10 -0
  223. package/dist/server/runtime/http-server/stats-manager.js +119 -16
  224. package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
  225. package/dist/server/runtime/http-server/tmux-session-probe.d.ts +3 -0
  226. package/dist/server/runtime/http-server/tmux-session-probe.js +101 -0
  227. package/dist/server/runtime/http-server/tmux-session-probe.js.map +1 -0
  228. package/dist/server/utils/stage-logger.js +21 -5
  229. package/dist/server/utils/stage-logger.js.map +1 -1
  230. package/dist/token-daemon/index.js +59 -10
  231. package/dist/token-daemon/index.js.map +1 -1
  232. package/dist/token-daemon/server-utils.d.ts +1 -0
  233. package/dist/token-daemon/server-utils.js +4 -1
  234. package/dist/token-daemon/server-utils.js.map +1 -1
  235. package/dist/token-daemon/token-daemon.js +38 -4
  236. package/dist/token-daemon/token-daemon.js.map +1 -1
  237. package/dist/token-daemon/token-types.d.ts +1 -1
  238. package/dist/token-daemon/token-types.js +2 -1
  239. package/dist/token-daemon/token-types.js.map +1 -1
  240. package/dist/token-daemon/token-utils.js +5 -2
  241. package/dist/token-daemon/token-utils.js.map +1 -1
  242. package/dist/utils/clock-client-token.d.ts +3 -0
  243. package/dist/utils/clock-client-token.js +54 -0
  244. package/dist/utils/clock-client-token.js.map +1 -0
  245. package/dist/utils/managed-server-pids.d.ts +25 -0
  246. package/dist/utils/managed-server-pids.js +176 -0
  247. package/dist/utils/managed-server-pids.js.map +1 -0
  248. package/dist/utils/process-lifecycle-logger.d.ts +8 -0
  249. package/dist/utils/process-lifecycle-logger.js +151 -0
  250. package/dist/utils/process-lifecycle-logger.js.map +1 -0
  251. package/dist/utils/runtime-exit-forensics.d.ts +30 -0
  252. package/dist/utils/runtime-exit-forensics.js +101 -0
  253. package/dist/utils/runtime-exit-forensics.js.map +1 -0
  254. package/dist/utils/shutdown-caller-context.d.ts +22 -0
  255. package/dist/utils/shutdown-caller-context.js +25 -0
  256. package/dist/utils/shutdown-caller-context.js.map +1 -0
  257. package/docs/PROVIDERS_BUILTIN.md +8 -0
  258. package/docs/PROVIDER_TYPES.md +3 -1
  259. package/docs/SERVERTOOL_PRE_COMMAND_HOOKS.md +85 -0
  260. package/docs/clock-client-daemon-design.md +343 -0
  261. package/docs/daemon-admin-ui.html +948 -74
  262. package/docs/providers/deepseek-web-provider-design.md +192 -0
  263. package/docs/routing-instructions.md +4 -1
  264. package/docs/stop-message-auto.md +4 -3
  265. package/docs/v2-architecture/PROVIDER-V2-CHANGESET-RELEASE-CHECKLIST.md +80 -0
  266. package/docs/v2-architecture/PROVIDER-V2-LAYERING-ADR-DRAFT.md +225 -0
  267. package/docs/v2-architecture/PROVIDER-V2-MIGRATION-MATRIX-DRAFT.md +88 -0
  268. package/docs/v2-architecture/PROVIDER-V2-PHASED-MIGRATION-ROLLBACK-DRAFT.md +164 -0
  269. package/docs/v2-architecture/PROVIDER-V2-PROFILE-API-REGISTRY-DRAFT.md +201 -0
  270. package/docs/v2-architecture/PROVIDER-V2-PROFILE-GEMINI-DRAFT.md +56 -0
  271. package/docs/v2-architecture/PROVIDER-V2-REFACTOR-OVERVIEW-DRAFT.md +102 -0
  272. package/docs/v2-architecture/PROVIDER-V2-VERIFICATION-MATRIX-DRAFT.md +163 -0
  273. package/package.json +10 -9
  274. package/scripts/copy-compat-assets.mjs +18 -0
  275. package/scripts/copy-modules-config.mjs +1 -0
  276. package/scripts/deepseek/pow-solver.mjs +146 -0
  277. package/scripts/deepseek/sha3_wasm_bg.7b9ca65ddd.wasm +0 -0
  278. package/scripts/ensure-cli-executable.mjs +64 -0
  279. package/scripts/install-global.sh +5 -2
  280. package/scripts/install.sh +1 -1
  281. package/scripts/monitor/daemon-kill-watch.mjs +184 -0
  282. package/scripts/monitor/port-kill-watch.sh +74 -0
  283. package/scripts/quick-install.sh +1 -1
@@ -1,422 +1,12 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { LOCAL_HOSTS } from '../../constants/index.js';
4
- function resolveClaudeBinary(options) {
5
- const raw = String(options.command || '').trim();
6
- if (!raw) {
7
- return 'claude';
8
- }
9
- // Already a path: keep as-is.
10
- if (raw.includes('/') || raw.includes('\\\\')) {
11
- return raw;
12
- }
13
- const candidates = [];
14
- try {
15
- candidates.push(options.pathImpl.join('/opt/homebrew/bin', raw));
16
- }
17
- catch { /* ignore */ }
18
- try {
19
- candidates.push(options.pathImpl.join('/usr/local/bin', raw));
20
- }
21
- catch { /* ignore */ }
22
- try {
23
- candidates.push(options.pathImpl.join(options.homedir(), '.local', 'bin', raw));
24
- }
25
- catch { /* ignore */ }
26
- for (const candidate of candidates) {
27
- try {
28
- if (candidate && options.fsImpl.existsSync(candidate)) {
29
- return candidate;
30
- }
31
- }
32
- catch {
33
- // ignore
34
- }
35
- }
36
- return raw;
37
- }
38
- function parseServerUrl(raw) {
39
- const trimmed = String(raw || '').trim();
40
- if (!trimmed) {
41
- throw new Error('--url is empty');
42
- }
43
- let parsed;
44
- try {
45
- parsed = new URL(trimmed);
46
- }
47
- catch {
48
- parsed = new URL(`http://${trimmed}`);
49
- }
50
- const protocol = parsed.protocol === 'https:' ? 'https' : 'http';
51
- const host = parsed.hostname;
52
- const hasExplicitPort = Boolean(parsed.port && parsed.port.trim());
53
- const port = hasExplicitPort ? Number(parsed.port) : null;
54
- const rawPath = typeof parsed.pathname === 'string' ? parsed.pathname : '';
55
- const basePath = rawPath && rawPath !== '/' ? rawPath.replace(/\/+$/, '') : '';
56
- return { protocol, host, port: Number.isFinite(port) ? port : null, basePath };
57
- }
58
- function readConfigApiKey(fsImpl, configPath) {
59
- try {
60
- if (!configPath || !fsImpl.existsSync(configPath)) {
61
- return null;
62
- }
63
- const txt = fsImpl.readFileSync(configPath, 'utf8');
64
- const cfg = JSON.parse(txt);
65
- const direct = cfg?.httpserver?.apikey ?? cfg?.modules?.httpserver?.config?.apikey ?? cfg?.server?.apikey;
66
- const value = typeof direct === 'string' ? direct.trim() : '';
67
- return value ? value : null;
68
- }
69
- catch {
70
- return null;
71
- }
72
- }
73
- function normalizeConnectHost(host) {
74
- const v = String(host || '').toLowerCase();
75
- // NOTE: routecodex expects local base URLs to use 0.0.0.0 (not 127.0.0.1) for compatibility
76
- // with environments where loopback is not reachable from the launched tool process.
77
- if (v === '0.0.0.0') {
78
- return '0.0.0.0';
79
- }
80
- if (v === '::' || v === '::1' || v === 'localhost') {
81
- return '0.0.0.0';
82
- }
83
- return host || '0.0.0.0';
84
- }
85
1
  export function createCodeCommand(program, ctx) {
86
- const fsImpl = ctx.fsImpl ?? fs;
87
- const pathImpl = ctx.pathImpl ?? path;
88
- const getCwd = ctx.cwd ?? (() => process.cwd());
89
2
  program
90
3
  .command('code')
91
- .description('Launch Claude Code interface with RouteCodex as proxy (args after this command are passed to Claude by default)')
92
- .option('-p, --port <port>', 'RouteCodex server port (overrides config file)')
93
- .option('-h, --host <host>', 'RouteCodex server host', LOCAL_HOSTS.ANY)
94
- .option('--url <url>', 'RouteCodex base URL (overrides host/port), e.g. https://code.codewhisper.cc')
95
- .option('-c, --config <config>', 'RouteCodex configuration file path')
96
- .option('--apikey <apikey>', 'RouteCodex server apikey (defaults to httpserver.apikey in config when present)')
97
- .option('--claude-path <path>', 'Path to Claude Code executable', 'claude')
98
- .option('--cwd <dir>', 'Working directory for Claude Code (defaults to current shell cwd)')
99
- .option('--model <model>', 'Model to use with Claude Code')
100
- .option('--profile <profile>', 'Claude Code profile to use')
101
- .option('--ensure-server', 'Ensure RouteCodex server is running before launching Claude')
102
- .argument('[extraArgs...]', 'Additional args to pass through to Claude')
4
+ .description('Deprecated. Use `rcc claude` instead.')
103
5
  .allowUnknownOption(true)
104
6
  .allowExcessArguments(true)
105
- .action(async (extraArgs = [], options) => {
106
- const extraArgsFromCommander = Array.isArray(extraArgs) ? extraArgs : [];
107
- const spinner = await ctx.createSpinner('Preparing Claude Code with RouteCodex...');
108
- try {
109
- let configPath = options.config;
110
- if (!configPath) {
111
- configPath = pathImpl.join(ctx.homedir(), '.routecodex', 'config.json');
112
- }
113
- let actualProtocol = 'http';
114
- let actualPort = options.port ? parseInt(options.port, 10) : null;
115
- let actualHost = options.host;
116
- let actualBasePath = '';
117
- if (options.url && String(options.url).trim()) {
118
- const parsed = parseServerUrl(options.url);
119
- actualProtocol = parsed.protocol;
120
- actualHost = parsed.host || actualHost;
121
- actualPort = parsed.port ?? actualPort;
122
- actualBasePath = parsed.basePath;
123
- }
124
- // Determine effective port for code command:
125
- // - dev package (routecodex): env override, otherwise固定 DEFAULT_DEV_PORT,不读取配置端口
126
- // - release package (rcc): 按配置/参数解析端口
127
- if (ctx.isDevPackage) {
128
- if (!actualPort) {
129
- const envPort = Number(ctx.env.ROUTECODEX_PORT || ctx.env.RCC_PORT || NaN);
130
- actualPort = Number.isFinite(envPort) && envPort > 0 ? envPort : ctx.defaultDevPort;
131
- ctx.logger.info(`Using dev default port ${actualPort} for routecodex code (config ports ignored)`);
132
- }
133
- }
134
- else {
135
- if (!actualPort && fsImpl.existsSync(configPath) && !(options.url && String(options.url).trim())) {
136
- try {
137
- const configContent = fsImpl.readFileSync(configPath, 'utf8');
138
- const config = JSON.parse(configContent);
139
- actualPort = (config?.httpserver?.port ?? config?.server?.port ?? config?.port) || null;
140
- actualHost = config?.httpserver?.host || config?.server?.host || config?.host || actualHost;
141
- }
142
- catch {
143
- spinner.warn('Failed to read configuration file, using defaults');
144
- }
145
- }
146
- }
147
- if (!(options.url && String(options.url).trim()) && !actualPort) {
148
- spinner.fail('Invalid or missing port configuration for RouteCodex server');
149
- ctx.logger.error('Please set httpserver.port in your configuration (e.g., ~/.routecodex/config.json) or use --port');
150
- ctx.exit(1);
151
- }
152
- const configuredApiKey = (typeof options.apikey === 'string' && options.apikey.trim() ? options.apikey.trim() : null) ??
153
- (typeof ctx.env.ROUTECODEX_APIKEY === 'string' && ctx.env.ROUTECODEX_APIKEY.trim()
154
- ? ctx.env.ROUTECODEX_APIKEY.trim()
155
- : null) ??
156
- (typeof ctx.env.RCC_APIKEY === 'string' && ctx.env.RCC_APIKEY.trim() ? ctx.env.RCC_APIKEY.trim() : null) ??
157
- readConfigApiKey(fsImpl, configPath);
158
- const connectHost = normalizeConnectHost(actualHost);
159
- const portPart = actualPort ? `:${actualPort}` : '';
160
- const serverUrl = `${actualProtocol}://${connectHost}${portPart}${actualBasePath}`;
161
- if (options.ensureServer) {
162
- spinner.text = 'Checking RouteCodex server status...';
163
- try {
164
- const controller = new AbortController();
165
- const timeoutId = setTimeout(() => controller.abort(), 3000);
166
- const headers = configuredApiKey ? { 'x-api-key': configuredApiKey } : undefined;
167
- const response = await ctx.fetch(`${serverUrl}/ready`, { signal: controller.signal, method: 'GET', headers });
168
- clearTimeout(timeoutId);
169
- if (!response.ok) {
170
- throw new Error('Server not ready');
171
- }
172
- const j = await response.json().catch(() => ({}));
173
- if (j?.status !== 'ready') {
174
- throw new Error('Server reported not_ready');
175
- }
176
- spinner.succeed('RouteCodex server is ready');
177
- }
178
- catch (error) {
179
- if (options.url && String(options.url).trim()) {
180
- spinner.fail('RouteCodex server is not reachable (ensure-server with --url cannot auto-start)');
181
- ctx.logger.error(error instanceof Error ? error.message : String(error));
182
- ctx.exit(1);
183
- }
184
- spinner.info('RouteCodex server is not running, starting it...');
185
- const serverProcess = ctx.spawn(ctx.nodeBin, [ctx.resolveServerEntryPath(), ctx.getModulesConfigPath()], {
186
- stdio: 'pipe',
187
- env: { ...ctx.env },
188
- detached: true
189
- });
190
- try {
191
- serverProcess.unref?.();
192
- }
193
- catch {
194
- // ignore
195
- }
196
- spinner.text = 'Waiting for RouteCodex server to become ready...';
197
- let ready = false;
198
- for (let i = 0; i < 30; i++) {
199
- await ctx.sleep(1000);
200
- try {
201
- const headers = configuredApiKey ? { 'x-api-key': configuredApiKey } : undefined;
202
- const res = await ctx.fetch(`${serverUrl}/ready`, { method: 'GET', headers });
203
- if (res.ok) {
204
- const jr = await res.json().catch(() => ({}));
205
- if (jr?.status === 'ready') {
206
- ready = true;
207
- break;
208
- }
209
- }
210
- }
211
- catch {
212
- /* ignore */
213
- }
214
- }
215
- if (ready) {
216
- spinner.succeed('RouteCodex server is ready');
217
- }
218
- else {
219
- spinner.warn('RouteCodex server may not be fully ready, continuing...');
220
- }
221
- }
222
- }
223
- spinner.text = 'Launching Claude Code...';
224
- const resolvedBaseHost = normalizeConnectHost(actualHost);
225
- const anthropicBase = `${actualProtocol}://${resolvedBaseHost}${portPart}${actualBasePath}`;
226
- const currentCwd = (() => {
227
- try {
228
- const d = options.cwd ? String(options.cwd) : getCwd();
229
- const resolved = pathImpl.resolve(d);
230
- if (fsImpl.existsSync(resolved)) {
231
- return resolved;
232
- }
233
- }
234
- catch {
235
- return getCwd();
236
- }
237
- return getCwd();
238
- })();
239
- const claudeEnv = {
240
- ...ctx.env,
241
- PWD: currentCwd,
242
- RCC_WORKDIR: currentCwd,
243
- ROUTECODEX_WORKDIR: currentCwd,
244
- CLAUDE_WORKDIR: currentCwd,
245
- ANTHROPIC_BASE_URL: anthropicBase,
246
- ANTHROPIC_API_URL: anthropicBase,
247
- ANTHROPIC_API_KEY: configuredApiKey || 'rcc-proxy-key'
248
- };
249
- try {
250
- delete claudeEnv['ANTHROPIC_AUTH_TOKEN'];
251
- }
252
- catch {
253
- /* ignore */
254
- }
255
- try {
256
- delete claudeEnv['ANTHROPIC_TOKEN'];
257
- }
258
- catch {
259
- /* ignore */
260
- }
261
- ctx.logger.info('Unset ANTHROPIC_AUTH_TOKEN/ANTHROPIC_TOKEN for Claude process to avoid conflicts');
262
- ctx.logger.info(`Setting Anthropic base URL to: ${anthropicBase}`);
263
- const claudeArgs = [];
264
- if (options.model) {
265
- claudeArgs.push('--model', options.model);
266
- }
267
- if (options.profile) {
268
- claudeArgs.push('--profile', options.profile);
269
- }
270
- // passthrough args after `code`
271
- try {
272
- const rawArgv = Array.isArray(ctx.rawArgv) ? ctx.rawArgv : [];
273
- const idxCode = rawArgv.findIndex((a) => a === 'code');
274
- const afterCode = idxCode >= 0 ? rawArgv.slice(idxCode + 1) : [];
275
- const sepIndex = afterCode.indexOf('--');
276
- const tail = sepIndex >= 0 ? afterCode.slice(sepIndex + 1) : afterCode;
277
- const knownOpts = new Set([
278
- '-p',
279
- '--port',
280
- '-h',
281
- '--host',
282
- '--url',
283
- '-c',
284
- '--config',
285
- '--apikey',
286
- '--claude-path',
287
- '--model',
288
- '--profile',
289
- '--ensure-server'
290
- ]);
291
- const requireValue = new Set([
292
- '-p',
293
- '--port',
294
- '-h',
295
- '--host',
296
- '--url',
297
- '-c',
298
- '--config',
299
- '--apikey',
300
- '--claude-path',
301
- '--model',
302
- '--profile'
303
- ]);
304
- const passThrough = [];
305
- for (let i = 0; i < tail.length; i++) {
306
- const tok = tail[i];
307
- if (knownOpts.has(tok)) {
308
- if (requireValue.has(tok)) {
309
- i++;
310
- }
311
- continue;
312
- }
313
- if (tok.startsWith('--')) {
314
- const eq = tok.indexOf('=');
315
- if (eq > 2) {
316
- const optName = tok.slice(0, eq);
317
- if (knownOpts.has(optName)) {
318
- continue;
319
- }
320
- }
321
- }
322
- passThrough.push(tok);
323
- }
324
- const merged = [];
325
- const seen = new Set();
326
- const pushUnique = (arr) => {
327
- for (const t of arr) {
328
- if (!seen.has(t)) {
329
- seen.add(t);
330
- merged.push(t);
331
- }
332
- }
333
- };
334
- pushUnique(extraArgsFromCommander);
335
- pushUnique(passThrough);
336
- if (merged.length) {
337
- claudeArgs.push(...merged);
338
- }
339
- }
340
- catch {
341
- /* ignore passthrough errors */
342
- }
343
- const claudeBin = (() => {
344
- try {
345
- const v = String(options?.claudePath || '').trim();
346
- if (v) {
347
- return v;
348
- }
349
- }
350
- catch {
351
- // ignore
352
- }
353
- const envPath = String(ctx.env.CLAUDE_PATH || '').trim();
354
- return envPath || 'claude';
355
- })();
356
- const resolvedClaudeBin = resolveClaudeBinary({
357
- fsImpl,
358
- pathImpl,
359
- homedir: ctx.homedir,
360
- command: claudeBin
361
- });
362
- const shouldUseShell = ctx.isWindows &&
363
- !pathImpl.extname(resolvedClaudeBin) &&
364
- !resolvedClaudeBin.includes('/') &&
365
- !resolvedClaudeBin.includes('\\\\');
366
- const claudeProcess = ctx.spawn(resolvedClaudeBin, claudeArgs, {
367
- stdio: 'inherit',
368
- env: claudeEnv,
369
- cwd: currentCwd,
370
- shell: shouldUseShell
371
- });
372
- spinner.succeed('Claude Code launched with RouteCodex proxy');
373
- ctx.logger.info(`Using RouteCodex server at: http://${resolvedBaseHost}:${actualPort}`);
374
- ctx.logger.info(`Claude binary: ${resolvedClaudeBin}`);
375
- ctx.logger.info(`Working directory for Claude: ${currentCwd}`);
376
- ctx.logger.info('Press Ctrl+C to exit Claude Code');
377
- const shutdown = async (sig) => {
378
- try {
379
- claudeProcess.kill(sig);
380
- }
381
- catch {
382
- /* ignore */
383
- }
384
- ctx.exit(0);
385
- };
386
- const onSignal = ctx.onSignal ?? ((sig, cb) => process.on(sig, cb));
387
- onSignal('SIGINT', () => {
388
- void shutdown('SIGINT');
389
- });
390
- onSignal('SIGTERM', () => {
391
- void shutdown('SIGTERM');
392
- });
393
- claudeProcess.on('error', (err) => {
394
- try {
395
- ctx.logger.error(`Failed to launch Claude Code (${resolvedClaudeBin}): ${err instanceof Error ? err.message : String(err)}`);
396
- if (ctx.isWindows && shouldUseShell) {
397
- ctx.logger.error('Tip: If Claude is installed via npm, ensure the shim is in PATH (e.g. claude.cmd).');
398
- }
399
- }
400
- catch {
401
- /* ignore */
402
- }
403
- ctx.exit(1);
404
- });
405
- claudeProcess.on('exit', (code, signal) => {
406
- if (signal) {
407
- ctx.exit(0);
408
- }
409
- else {
410
- ctx.exit(code ?? 0);
411
- }
412
- });
413
- await ctx.waitForever();
414
- }
415
- catch (error) {
416
- spinner.fail('Failed to launch Claude Code');
417
- ctx.logger.error(error instanceof Error ? error.message : String(error));
418
- ctx.exit(1);
419
- }
7
+ .action(() => {
8
+ ctx.logger.error('`rcc code` has been removed. Use `rcc claude` instead.');
9
+ ctx.exit(1);
420
10
  });
421
11
  }
422
12
  //# sourceMappingURL=code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"code.js","sourceRoot":"","sources":["../../../src/cli/commands/code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../../src/cli/commands/code.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,iBAAiB,CAAC,OAAgB,EAAE,GAAuB;IACzE,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uCAAuC,CAAC;SACpD,kBAAkB,CAAC,IAAI,CAAC;SACxB,oBAAoB,CAAC,IAAI,CAAC;SAC1B,MAAM,CAAC,GAAG,EAAE;QACX,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC3E,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ import { type LauncherCommandContext } from './launcher-kernel.js';
3
+ export type CodexCommandContext = LauncherCommandContext;
4
+ export declare function createCodexCommand(program: Command, ctx: CodexCommandContext): void;
@@ -0,0 +1,43 @@
1
+ import { createLauncherCommand, normalizeOpenAiBaseUrl } from './launcher-kernel.js';
2
+ export function createCodexCommand(program, ctx) {
3
+ createLauncherCommand(program, ctx, {
4
+ commandName: 'codex',
5
+ displayName: 'Codex',
6
+ description: 'Launch Codex with RouteCodex as proxy (args after this command are passed through)',
7
+ binaryOptionFlags: '--codex-path <path>',
8
+ binaryOptionName: 'codexPath',
9
+ binaryOptionDescription: 'Path to Codex executable',
10
+ binaryDefault: 'codex',
11
+ binaryEnvKey: 'CODEX_PATH',
12
+ extraKnownOptions: ['--codex-path', '--model', '--profile'],
13
+ withModelOption: true,
14
+ withProfileOption: true,
15
+ buildArgs: (options) => {
16
+ const args = [];
17
+ if (typeof options.model === 'string' && options.model.trim()) {
18
+ args.push('--model', options.model.trim());
19
+ }
20
+ if (typeof options.profile === 'string' && options.profile.trim()) {
21
+ args.push('--profile', options.profile.trim());
22
+ }
23
+ return args;
24
+ },
25
+ buildEnv: ({ env, baseUrl, configuredApiKey, cwd }) => {
26
+ const openAiBase = normalizeOpenAiBaseUrl(baseUrl);
27
+ return {
28
+ ...env,
29
+ PWD: cwd,
30
+ RCC_WORKDIR: cwd,
31
+ ROUTECODEX_WORKDIR: cwd,
32
+ CODEX_WORKDIR: cwd,
33
+ OPENAI_BASE_URL: openAiBase,
34
+ OPENAI_API_BASE: openAiBase,
35
+ OPENAI_API_BASE_URL: openAiBase,
36
+ OPENAI_API_KEY: (typeof env.OPENAI_API_KEY === 'string' && env.OPENAI_API_KEY.trim())
37
+ ? env.OPENAI_API_KEY.trim()
38
+ : (configuredApiKey || 'rcc-proxy-key')
39
+ };
40
+ }
41
+ });
42
+ }
43
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli/commands/codex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAA+B,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAIlH,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,GAAwB;IAC3E,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE;QAClC,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,oFAAoF;QACjG,iBAAiB,EAAE,qBAAqB;QACxC,gBAAgB,EAAE,WAAW;QAC7B,uBAAuB,EAAE,0BAA0B;QACnD,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,YAAY;QAC1B,iBAAiB,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC;QAC3D,eAAe,EAAE,IAAI;QACrB,iBAAiB,EAAE,IAAI;QACvB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YACrB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,EAAE;YACpD,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO;gBACL,GAAG,GAAG;gBACN,GAAG,EAAE,GAAG;gBACR,WAAW,EAAE,GAAG;gBAChB,kBAAkB,EAAE,GAAG;gBACvB,aAAa,EAAE,GAAG;gBAClB,eAAe,EAAE,UAAU;gBAC3B,eAAe,EAAE,UAAU;gBAC3B,mBAAmB,EAAE,UAAU;gBAC/B,cAAc,EAAE,CAAC,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;oBACnF,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;oBAC3B,CAAC,CAAC,CAAC,gBAAgB,IAAI,eAAe,CAAC;aACrB,CAAC;QACzB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -24,18 +24,15 @@ export function createExamplesCommand(program, ctx) {
24
24
  ctx.log(' # Start with custom config');
25
25
  ctx.log(' rcc start --config ./config/lmstudio-config.json');
26
26
  ctx.log('');
27
- ctx.log(' # Note: Port must be specified in configuration file');
28
- ctx.log(' # Server will not start without valid port configuration');
27
+ ctx.log(chalk.yellow('3. Launch Tooling (auto-start server):'));
28
+ ctx.log(' # Launch Claude (recommended replacement for deprecated `rcc code`)');
29
+ ctx.log(' rcc claude -- --help');
29
30
  ctx.log('');
30
- ctx.log(chalk.yellow('3. Launch Claude Code:'));
31
- ctx.log(' # Launch Claude Code with automatic server start');
32
- ctx.log(' rcc code --ensure-server');
31
+ ctx.log(' # Launch Codex');
32
+ ctx.log(' rcc codex -- --help');
33
33
  ctx.log('');
34
- ctx.log(' # Launch Claude Code with specific model');
35
- ctx.log(' rcc code --model claude-3-haiku');
36
- ctx.log('');
37
- ctx.log(' # Launch Claude Code with custom profile');
38
- ctx.log(' rcc code --profile my-profile');
34
+ ctx.log(' # Pin model/profile when needed');
35
+ ctx.log(' rcc claude --model claude-sonnet-4-5 --profile my-profile');
39
36
  ctx.log('');
40
37
  ctx.log(chalk.yellow('4. Configuration Management:'));
41
38
  ctx.log(' # Show current configuration');
@@ -47,19 +44,19 @@ export function createExamplesCommand(program, ctx) {
47
44
  ctx.log(' # Validate configuration');
48
45
  ctx.log(' rcc config validate');
49
46
  ctx.log('');
50
- ctx.log(chalk.yellow('6. Environment Variables:'));
51
- ctx.log(' # Set LM Studio API Key');
52
- ctx.log(' export LM_STUDIO_API_KEY="your-api-key"');
53
- ctx.log('');
47
+ ctx.log(chalk.yellow('5. Environment Variables:'));
54
48
  ctx.log(' # Set OpenAI API Key');
55
49
  ctx.log(' export OPENAI_API_KEY="your-api-key"');
56
50
  ctx.log('');
57
- ctx.log(chalk.yellow('7. Testing:'));
51
+ ctx.log(' # Set Tab API Key');
52
+ ctx.log(' export TAB_API_KEY="your-api-key"');
53
+ ctx.log('');
54
+ ctx.log(chalk.yellow('6. Testing:'));
58
55
  ctx.log(' # Test with curl');
59
56
  ctx.log(' curl -X POST http://localhost:5506/v1/chat/completions \\');
60
57
  ctx.log(' -H "Content-Type: application/json" \\');
61
58
  ctx.log(' -H "Authorization: Bearer test-key" \\');
62
- ctx.log(' -d \'{"model": "gpt-4", "messages": [{"role": "user", "content": "Hello!"}]}\'');
59
+ ctx.log(" -d '{\"model\": \"gpt-4\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]}'");
63
60
  ctx.log('');
64
61
  });
65
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../../src/cli/commands/examples.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../../src/cli/commands/examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import type { InitProviderTemplate } from '../../config/init-provider-catalog.js';
4
+ import type { ConfigState, DuplicateMigrationStrategy, DuplicateProviderResolution, InitCommandContext, LoggerLike, PromptLike, ProviderV2Payload, RoutingConfig, UnknownRecord } from './shared.js';
5
+ export declare function isRecord(value: unknown): value is UnknownRecord;
6
+ export declare function asRecord(value: unknown): UnknownRecord;
7
+ export declare function normalizeHost(input: string | undefined): string | undefined;
8
+ export declare function normalizePort(input: string | number | undefined): number | undefined;
9
+ export declare function buildInteractivePrompt(ctx: InitCommandContext): {
10
+ prompt: PromptLike;
11
+ close: () => void;
12
+ } | null;
13
+ export declare function getProviderRoot(pathImpl: typeof path, homeDir: string): string;
14
+ export declare function getProviderV2Path(pathImpl: typeof path, providerRoot: string, providerId: string): string;
15
+ export declare function inferDefaultModel(providerNode: UnknownRecord): string;
16
+ export declare function buildRouting(defaultTarget: string, overrides?: Partial<Record<'default' | 'thinking' | 'tools', string>>): RoutingConfig;
17
+ export declare function readPrimaryTargetFromRoute(routeNode: unknown): string | null;
18
+ export declare function readRoutingFromConfig(config: UnknownRecord): RoutingConfig;
19
+ export declare function readProvidersFromV1(config: UnknownRecord): Record<string, UnknownRecord>;
20
+ export declare function inspectConfigState(fsImpl: typeof fs, configPath: string): ConfigState;
21
+ export declare function ensureDir(fsImpl: typeof fs, dirPath: string): void;
22
+ export declare function mergeRecordsPreferExisting(baseFromV1: UnknownRecord, existing: UnknownRecord): UnknownRecord;
23
+ export declare function readProviderV2Payload(fsImpl: typeof fs, filePath: string): ProviderV2Payload | null;
24
+ export declare function backupFileBestEffort(fsImpl: typeof fs, filePath: string): string | null;
25
+ export declare function promptDuplicateProviderResolution(prompt: PromptLike, providerId: string): Promise<DuplicateProviderResolution>;
26
+ export declare function promptDuplicateMigrationStrategy(prompt: PromptLike, duplicateProviderIds: string[]): Promise<DuplicateMigrationStrategy>;
27
+ export declare function computeBackupPath(fsImpl: typeof fs, filePath: string): string;
28
+ export declare function writeJsonFile(fsImpl: typeof fs, filePath: string, payload: unknown): void;
29
+ export declare function writeProviderV2(fsImpl: typeof fs, pathImpl: typeof path, providerRoot: string, providerId: string, providerNode: UnknownRecord): string;
30
+ export declare function loadProviderV2Map(fsImpl: typeof fs, pathImpl: typeof path, providerRoot: string): Record<string, ProviderV2Payload>;
31
+ export declare function maskSecretTail3(raw: string): string;
32
+ export declare function collectProviderKeyMasks(providerNode: UnknownRecord): string[];
33
+ export declare function collectOauthTokenNames(providerNode: UnknownRecord): string[];
34
+ export declare function getProviderSummaryLine(providerId: string, payload: ProviderV2Payload): string;
35
+ export declare function printConfiguredProviders(logger: LoggerLike, providerMap: Record<string, ProviderV2Payload>): void;
36
+ export declare function normalizeEnvVarName(providerId: string): string;
37
+ export declare function isBackInput(value: string): boolean;
38
+ export declare function resolveSelectedTemplates(providerIds: string[], catalogById: Map<string, InitProviderTemplate>): InitProviderTemplate[];
39
+ export declare function ensureTargetProvidersExist(routing: RoutingConfig, providerIds: Set<string>): string[];
40
+ export declare function buildV2ConfigFromExisting(existing: UnknownRecord, routing: RoutingConfig, host: string, port: number): UnknownRecord;