@kaitranntt/ccs 7.79.1-dev.3 → 7.79.1-dev.30

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 (250) hide show
  1. package/README.md +29 -11
  2. package/dist/bin/ccsxp-runtime.d.ts.map +1 -1
  3. package/dist/bin/ccsxp-runtime.js +8 -0
  4. package/dist/bin/ccsxp-runtime.js.map +1 -1
  5. package/dist/bin/codex-runtime-router.d.ts +24 -0
  6. package/dist/bin/codex-runtime-router.d.ts.map +1 -0
  7. package/dist/bin/codex-runtime-router.js +91 -0
  8. package/dist/bin/codex-runtime-router.js.map +1 -0
  9. package/dist/bin/codex-runtime.d.ts +1 -0
  10. package/dist/bin/codex-runtime.js +7 -2
  11. package/dist/bin/codex-runtime.js.map +1 -1
  12. package/dist/ccs.js +2 -1
  13. package/dist/ccs.js.map +1 -1
  14. package/dist/cliproxy/ai-providers/codex-plan-compatibility.js +2 -2
  15. package/dist/cliproxy/ai-providers/codex-plan-compatibility.js.map +1 -1
  16. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts +2 -2
  17. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts.map +1 -1
  18. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js +16 -8
  19. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
  20. package/dist/cliproxy/ai-providers/model-id-normalizer.d.ts +1 -1
  21. package/dist/cliproxy/ai-providers/model-id-normalizer.d.ts.map +1 -1
  22. package/dist/cliproxy/ai-providers/model-id-normalizer.js +1 -1
  23. package/dist/cliproxy/ai-providers/model-id-normalizer.js.map +1 -1
  24. package/dist/cliproxy/ai-providers/service.d.ts.map +1 -1
  25. package/dist/cliproxy/ai-providers/service.js +39 -12
  26. package/dist/cliproxy/ai-providers/service.js.map +1 -1
  27. package/dist/cliproxy/config/thinking-config.js +6 -6
  28. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  29. package/dist/cliproxy/executor/env-resolver.js +1 -1
  30. package/dist/cliproxy/executor/env-resolver.js.map +1 -1
  31. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
  32. package/dist/cliproxy/quota/quota-fetcher-claude.js +35 -4
  33. package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
  34. package/dist/cliproxy/services/oauth-usage-log-transformer.d.ts.map +1 -1
  35. package/dist/cliproxy/services/oauth-usage-log-transformer.js +5 -0
  36. package/dist/cliproxy/services/oauth-usage-log-transformer.js.map +1 -1
  37. package/dist/codex-auth/codex-account-identity.d.ts +8 -0
  38. package/dist/codex-auth/codex-account-identity.d.ts.map +1 -0
  39. package/dist/codex-auth/codex-account-identity.js +53 -0
  40. package/dist/codex-auth/codex-account-identity.js.map +1 -0
  41. package/dist/codex-auth/codex-auth-dashboard-service.d.ts +46 -0
  42. package/dist/codex-auth/codex-auth-dashboard-service.d.ts.map +1 -0
  43. package/dist/codex-auth/codex-auth-dashboard-service.js +228 -0
  44. package/dist/codex-auth/codex-auth-dashboard-service.js.map +1 -0
  45. package/dist/codex-auth/codex-auth-help.d.ts +7 -0
  46. package/dist/codex-auth/codex-auth-help.d.ts.map +1 -0
  47. package/dist/codex-auth/codex-auth-help.js +87 -0
  48. package/dist/codex-auth/codex-auth-help.js.map +1 -0
  49. package/dist/codex-auth/codex-auth-router.d.ts +16 -0
  50. package/dist/codex-auth/codex-auth-router.d.ts.map +1 -0
  51. package/dist/codex-auth/codex-auth-router.js +77 -0
  52. package/dist/codex-auth/codex-auth-router.js.map +1 -0
  53. package/dist/codex-auth/codex-config-symlink.d.ts +14 -0
  54. package/dist/codex-auth/codex-config-symlink.d.ts.map +1 -0
  55. package/dist/codex-auth/codex-config-symlink.js +128 -0
  56. package/dist/codex-auth/codex-config-symlink.js.map +1 -0
  57. package/dist/codex-auth/codex-profile-paths.d.ts +5 -0
  58. package/dist/codex-auth/codex-profile-paths.d.ts.map +1 -0
  59. package/dist/codex-auth/codex-profile-paths.js +58 -0
  60. package/dist/codex-auth/codex-profile-paths.js.map +1 -0
  61. package/dist/codex-auth/codex-profile-registry.d.ts +34 -0
  62. package/dist/codex-auth/codex-profile-registry.d.ts.map +1 -0
  63. package/dist/codex-auth/codex-profile-registry.js +360 -0
  64. package/dist/codex-auth/codex-profile-registry.js.map +1 -0
  65. package/dist/codex-auth/commands/create-command.d.ts +9 -0
  66. package/dist/codex-auth/commands/create-command.d.ts.map +1 -0
  67. package/dist/codex-auth/commands/create-command.js +189 -0
  68. package/dist/codex-auth/commands/create-command.js.map +1 -0
  69. package/dist/codex-auth/commands/import-default-command.d.ts +18 -0
  70. package/dist/codex-auth/commands/import-default-command.d.ts.map +1 -0
  71. package/dist/codex-auth/commands/import-default-command.js +385 -0
  72. package/dist/codex-auth/commands/import-default-command.js.map +1 -0
  73. package/dist/codex-auth/commands/index.d.ts +13 -0
  74. package/dist/codex-auth/commands/index.d.ts.map +1 -0
  75. package/dist/codex-auth/commands/index.js +27 -0
  76. package/dist/codex-auth/commands/index.js.map +1 -0
  77. package/dist/codex-auth/commands/login-command.d.ts +9 -0
  78. package/dist/codex-auth/commands/login-command.d.ts.map +1 -0
  79. package/dist/codex-auth/commands/login-command.js +152 -0
  80. package/dist/codex-auth/commands/login-command.js.map +1 -0
  81. package/dist/codex-auth/commands/remove-command.d.ts +10 -0
  82. package/dist/codex-auth/commands/remove-command.d.ts.map +1 -0
  83. package/dist/codex-auth/commands/remove-command.js +230 -0
  84. package/dist/codex-auth/commands/remove-command.js.map +1 -0
  85. package/dist/codex-auth/commands/show-command.d.ts +10 -0
  86. package/dist/codex-auth/commands/show-command.d.ts.map +1 -0
  87. package/dist/codex-auth/commands/show-command.js +127 -0
  88. package/dist/codex-auth/commands/show-command.js.map +1 -0
  89. package/dist/codex-auth/commands/show-detail-view.d.ts +7 -0
  90. package/dist/codex-auth/commands/show-detail-view.d.ts.map +1 -0
  91. package/dist/codex-auth/commands/show-detail-view.js +134 -0
  92. package/dist/codex-auth/commands/show-detail-view.js.map +1 -0
  93. package/dist/codex-auth/commands/switch-command.d.ts +7 -0
  94. package/dist/codex-auth/commands/switch-command.d.ts.map +1 -0
  95. package/dist/codex-auth/commands/switch-command.js +48 -0
  96. package/dist/codex-auth/commands/switch-command.js.map +1 -0
  97. package/dist/codex-auth/commands/types.d.ts +45 -0
  98. package/dist/codex-auth/commands/types.d.ts.map +1 -0
  99. package/dist/codex-auth/commands/types.js +85 -0
  100. package/dist/codex-auth/commands/types.js.map +1 -0
  101. package/dist/codex-auth/commands/use-command.d.ts +16 -0
  102. package/dist/codex-auth/commands/use-command.d.ts.map +1 -0
  103. package/dist/codex-auth/commands/use-command.js +86 -0
  104. package/dist/codex-auth/commands/use-command.js.map +1 -0
  105. package/dist/codex-auth/decode-id-token.d.ts +12 -0
  106. package/dist/codex-auth/decode-id-token.d.ts.map +1 -0
  107. package/dist/codex-auth/decode-id-token.js +83 -0
  108. package/dist/codex-auth/decode-id-token.js.map +1 -0
  109. package/dist/codex-auth/index.d.ts +8 -0
  110. package/dist/codex-auth/index.d.ts.map +1 -0
  111. package/dist/codex-auth/index.js +19 -0
  112. package/dist/codex-auth/index.js.map +1 -0
  113. package/dist/codex-auth/resolve-active-profile.d.ts +13 -0
  114. package/dist/codex-auth/resolve-active-profile.d.ts.map +1 -0
  115. package/dist/codex-auth/resolve-active-profile.js +161 -0
  116. package/dist/codex-auth/resolve-active-profile.js.map +1 -0
  117. package/dist/codex-auth/shell-detect.d.ts +19 -0
  118. package/dist/codex-auth/shell-detect.d.ts.map +1 -0
  119. package/dist/codex-auth/shell-detect.js +129 -0
  120. package/dist/codex-auth/shell-detect.js.map +1 -0
  121. package/dist/codex-auth/types.d.ts +26 -0
  122. package/dist/codex-auth/types.d.ts.map +1 -0
  123. package/dist/codex-auth/types.js +34 -0
  124. package/dist/codex-auth/types.js.map +1 -0
  125. package/dist/commands/cliproxy/variant-subcommand.js +1 -1
  126. package/dist/commands/cliproxy/variant-subcommand.js.map +1 -1
  127. package/dist/commands/config-command.d.ts +2 -0
  128. package/dist/commands/config-command.d.ts.map +1 -1
  129. package/dist/commands/config-command.js +31 -20
  130. package/dist/commands/config-command.js.map +1 -1
  131. package/dist/commands/persist-command.d.ts.map +1 -1
  132. package/dist/commands/persist-command.js +77 -5
  133. package/dist/commands/persist-command.js.map +1 -1
  134. package/dist/dispatcher/cli-argument-parser.d.ts +3 -2
  135. package/dist/dispatcher/cli-argument-parser.d.ts.map +1 -1
  136. package/dist/dispatcher/cli-argument-parser.js +37 -7
  137. package/dist/dispatcher/cli-argument-parser.js.map +1 -1
  138. package/dist/dispatcher/pre-dispatch.d.ts.map +1 -1
  139. package/dist/dispatcher/pre-dispatch.js +7 -0
  140. package/dist/dispatcher/pre-dispatch.js.map +1 -1
  141. package/dist/dispatcher/target-executor.d.ts +2 -2
  142. package/dist/dispatcher/target-executor.d.ts.map +1 -1
  143. package/dist/dispatcher/target-executor.js +5 -5
  144. package/dist/dispatcher/target-executor.js.map +1 -1
  145. package/dist/docker/docker-bootstrap.d.ts +1 -1
  146. package/dist/docker/docker-bootstrap.d.ts.map +1 -1
  147. package/dist/docker/docker-bootstrap.js +30 -3
  148. package/dist/docker/docker-bootstrap.js.map +1 -1
  149. package/dist/docker/docker-executor.d.ts.map +1 -1
  150. package/dist/docker/docker-executor.js +1 -0
  151. package/dist/docker/docker-executor.js.map +1 -1
  152. package/dist/management/checks/config-check.d.ts.map +1 -1
  153. package/dist/management/checks/config-check.js +10 -1
  154. package/dist/management/checks/config-check.js.map +1 -1
  155. package/dist/proxy/proxy-daemon.d.ts.map +1 -1
  156. package/dist/proxy/proxy-daemon.js +15 -3
  157. package/dist/proxy/proxy-daemon.js.map +1 -1
  158. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  159. package/dist/proxy/server/messages-route.js +27 -1
  160. package/dist/proxy/server/messages-route.js.map +1 -1
  161. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  162. package/dist/shared/claude-extension-setup.js +21 -1
  163. package/dist/shared/claude-extension-setup.js.map +1 -1
  164. package/dist/shared/stale-codex-translator-settings.d.ts +4 -0
  165. package/dist/shared/stale-codex-translator-settings.d.ts.map +1 -0
  166. package/dist/shared/stale-codex-translator-settings.js +35 -0
  167. package/dist/shared/stale-codex-translator-settings.js.map +1 -0
  168. package/dist/targets/codex-cliproxy-provider-config.d.ts.map +1 -1
  169. package/dist/targets/codex-cliproxy-provider-config.js +17 -13
  170. package/dist/targets/codex-cliproxy-provider-config.js.map +1 -1
  171. package/dist/ui/assets/Trans-dEd8UC39.js +1 -0
  172. package/dist/ui/assets/{accounts-C-sOjvWS.js → accounts-B2THsSu_.js} +1 -1
  173. package/dist/ui/assets/{alert-dialog-BrOo6Lh3.js → alert-dialog-Vurq1xzV.js} +1 -1
  174. package/dist/ui/assets/{api-CXdC3ABc.js → api-CjLfG9mL.js} +1 -1
  175. package/dist/ui/assets/{auth-section-XJ5PohAT.js → auth-section-iGkrMaT4.js} +1 -1
  176. package/dist/ui/assets/{backups-section-DjMi9NN5.js → backups-section-DUGG_4KP.js} +1 -1
  177. package/dist/ui/assets/{channels-dD6o7KFj.js → channels-CimlCc2d.js} +1 -1
  178. package/dist/ui/assets/{checkbox-CVS69doq.js → checkbox-HiMHasEB.js} +1 -1
  179. package/dist/ui/assets/claude-extension-B2v9bsN9.js +1 -0
  180. package/dist/ui/assets/{cliproxy-ai-providers-POOrpQVc.js → cliproxy-ai-providers-2lI5jSHb.js} +6 -6
  181. package/dist/ui/assets/{cliproxy-control-panel-BWa_KiNM.js → cliproxy-control-panel-63gDI-e5.js} +1 -1
  182. package/dist/ui/assets/cliproxy-fai69Vyd.js +4 -0
  183. package/dist/ui/assets/codex-i_hfI4Tv.js +30 -0
  184. package/dist/ui/assets/{confirm-dialog-BuxHs897.js → confirm-dialog-B_6SrSxL.js} +1 -1
  185. package/dist/ui/assets/{copilot-BQ4Cltbo.js → copilot-BgG5x_X6.js} +2 -2
  186. package/dist/ui/assets/{cursor-BVUNUVux.js → cursor-DF63lFcy.js} +1 -1
  187. package/dist/ui/assets/droid-CqlQmFtN.js +2 -0
  188. package/dist/ui/assets/{globalenv-section-B4UDGHiP.js → globalenv-section-CYNmD12i.js} +1 -1
  189. package/dist/ui/assets/{health-30TwUdp_.js → health-7ZO5PEm9.js} +1 -1
  190. package/dist/ui/assets/{index-BxIFAuoV.js → index-BC5ssPfF.js} +1 -1
  191. package/dist/ui/assets/index-BMoGhs28.css +1 -0
  192. package/dist/ui/assets/{index-ByGCSVsI.js → index-Bgcd4FYK.js} +1 -1
  193. package/dist/ui/assets/{index-BjQ5PWH7.js → index-CFu0saCM.js} +1 -1
  194. package/dist/ui/assets/index-CqsmdQoA.js +1 -0
  195. package/dist/ui/assets/index-D3kxCuJ7.js +1 -0
  196. package/dist/ui/assets/{index-C6j8gpEb.js → index-DmV9wJET.js} +27 -27
  197. package/dist/ui/assets/{index-BUBCzEHD.js → index-hHb9o079.js} +1 -1
  198. package/dist/ui/assets/{logs-CDD_WQvt.js → logs-Dy-yZhIK.js} +1 -1
  199. package/dist/ui/assets/{masked-input-DpM1vKP_.js → masked-input-BSLeznEs.js} +1 -1
  200. package/dist/ui/assets/proxy-status-widget-hRH1agF9.js +1 -0
  201. package/dist/ui/assets/{raw-json-settings-editor-panel-D-zQkcvr.js → raw-json-settings-editor-panel-Bs83yILR.js} +1 -1
  202. package/dist/ui/assets/{searchable-select-B8Kp0x8p.js → searchable-select-pXUC_0Ih.js} +1 -1
  203. package/dist/ui/assets/{separator-DlXQBF83.js → separator-FZR_61I9.js} +1 -1
  204. package/dist/ui/assets/{shared-D_h3QKy6.js → shared-BiIwM7--.js} +1 -1
  205. package/dist/ui/assets/{table-Dyt0FuBK.js → table-_9IusQ8G.js} +1 -1
  206. package/dist/ui/assets/{updates-DfIV0IC0.js → updates-ButNfJqt.js} +1 -1
  207. package/dist/ui/assets/{use-accounts-Dy2ogHT-.js → use-accounts-BdtI0lBv.js} +1 -1
  208. package/dist/ui/index.html +2 -2
  209. package/dist/utils/claude-subcommand-detector.d.ts +7 -0
  210. package/dist/utils/claude-subcommand-detector.d.ts.map +1 -1
  211. package/dist/utils/claude-subcommand-detector.js +51 -9
  212. package/dist/utils/claude-subcommand-detector.js.map +1 -1
  213. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  214. package/dist/web-server/middleware/auth-middleware.js +25 -1
  215. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  216. package/dist/web-server/routes/claude-extension-routes.d.ts.map +1 -1
  217. package/dist/web-server/routes/claude-extension-routes.js +5 -0
  218. package/dist/web-server/routes/claude-extension-routes.js.map +1 -1
  219. package/dist/web-server/routes/codex-routes.d.ts.map +1 -1
  220. package/dist/web-server/routes/codex-routes.js +14 -0
  221. package/dist/web-server/routes/codex-routes.js.map +1 -1
  222. package/dist/web-server/services/codex-dashboard-service.d.ts.map +1 -1
  223. package/dist/web-server/services/codex-dashboard-service.js +30 -3
  224. package/dist/web-server/services/codex-dashboard-service.js.map +1 -1
  225. package/dist/web-server/usage/aggregator.d.ts +13 -7
  226. package/dist/web-server/usage/aggregator.d.ts.map +1 -1
  227. package/dist/web-server/usage/aggregator.js +37 -22
  228. package/dist/web-server/usage/aggregator.js.map +1 -1
  229. package/dist/web-server/usage/handlers.d.ts +1 -0
  230. package/dist/web-server/usage/handlers.d.ts.map +1 -1
  231. package/dist/web-server/usage/handlers.js +16 -8
  232. package/dist/web-server/usage/handlers.js.map +1 -1
  233. package/dist/web-server/usage/profile-filter.d.ts +13 -0
  234. package/dist/web-server/usage/profile-filter.d.ts.map +1 -0
  235. package/dist/web-server/usage/profile-filter.js +30 -0
  236. package/dist/web-server/usage/profile-filter.js.map +1 -0
  237. package/dist/web-server/usage/types.d.ts +8 -0
  238. package/dist/web-server/usage/types.d.ts.map +1 -1
  239. package/lib/hooks/websearch-transformer.cjs +12 -3
  240. package/lib/mcp/ccs-browser-server.cjs +217 -12
  241. package/package.json +1 -1
  242. package/scripts/run-test-bucket.js +1 -0
  243. package/dist/ui/assets/claude-extension-D47wkgfq.js +0 -1
  244. package/dist/ui/assets/cliproxy-CXgzAe6X.js +0 -4
  245. package/dist/ui/assets/codex-CYyPdHS4.js +0 -30
  246. package/dist/ui/assets/droid-Bw34FF6c.js +0 -2
  247. package/dist/ui/assets/index-DtiygQmg.js +0 -1
  248. package/dist/ui/assets/index-nSsKQx8t.css +0 -1
  249. package/dist/ui/assets/index-s94_IKNx.js +0 -1
  250. package/dist/ui/assets/proxy-status-widget-7iMiOpQe.js +0 -1
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.getSharedCodexConfigPath = exports.resolveCodexProfileDir = exports.getCodexInstancesDir = exports.getCodexAuthRegistryPath = void 0;
27
+ const path = __importStar(require("path"));
28
+ const os = __importStar(require("os"));
29
+ const config_manager_1 = require("../utils/config-manager");
30
+ const types_1 = require("./types");
31
+ function getCodexAuthRegistryPath() {
32
+ return path.join((0, config_manager_1.getCcsDir)(), 'codex-profiles.yaml');
33
+ }
34
+ exports.getCodexAuthRegistryPath = getCodexAuthRegistryPath;
35
+ function getCodexInstancesDir() {
36
+ return path.join((0, config_manager_1.getCcsDir)(), 'codex-instances');
37
+ }
38
+ exports.getCodexInstancesDir = getCodexInstancesDir;
39
+ function resolveCodexProfileDir(name) {
40
+ const nameError = (0, types_1.getCodexProfileNameError)(name);
41
+ if (nameError) {
42
+ throw new Error(nameError);
43
+ }
44
+ const instancesDir = path.resolve(getCodexInstancesDir());
45
+ const profileDir = path.resolve(path.join(instancesDir, name));
46
+ if (profileDir !== instancesDir && profileDir.startsWith(`${instancesDir}${path.sep}`)) {
47
+ return profileDir;
48
+ }
49
+ throw new Error('Profile directory resolved outside codex-instances.');
50
+ }
51
+ exports.resolveCodexProfileDir = resolveCodexProfileDir;
52
+ // Uses os.homedir() intentionally — this is the upstream Codex location,
53
+ // not a CCS-owned path. Tests must override the shared config path explicitly.
54
+ function getSharedCodexConfigPath() {
55
+ return path.join(os.homedir(), '.codex', 'config.toml');
56
+ }
57
+ exports.getSharedCodexConfigPath = getSharedCodexConfigPath;
58
+ //# sourceMappingURL=codex-profile-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-profile-paths.js","sourceRoot":"","sources":["../../src/codex-auth/codex-profile-paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,uCAAyB;AACzB,4DAAoD;AACpD,mCAAmD;AAEnD,SAAgB,wBAAwB;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAS,GAAE,EAAE,qBAAqB,CAAC,CAAC;AACvD,CAAC;AAFD,4DAEC;AAED,SAAgB,oBAAoB;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAS,GAAE,EAAE,iBAAiB,CAAC,CAAC;AACnD,CAAC;AAFD,oDAEC;AAED,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,SAAS,GAAG,IAAA,gCAAwB,EAAC,IAAI,CAAC,CAAC;IACjD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACvF,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACzE,CAAC;AAbD,wDAaC;AAED,yEAAyE;AACzE,+EAA+E;AAC/E,SAAgB,wBAAwB;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC1D,CAAC;AAFD,4DAEC"}
@@ -0,0 +1,34 @@
1
+ import type { CodexProfileData, CodexProfileMetadata } from './types';
2
+ export declare class CodexProfileRegistryReadError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare function validateCodexProfileRegistryData(parsed: unknown): CodexProfileData;
6
+ /**
7
+ * Registry for codex auth profiles stored at ~/.ccs/codex-profiles.yaml.
8
+ *
9
+ * Writes are guarded by a registry-directory lock around the read-modify-write
10
+ * cycle, then persisted atomically with tmp file + POSIX rename.
11
+ *
12
+ * Constructor accepts an optional registryPath for test isolation.
13
+ */
14
+ export declare class CodexProfileRegistry {
15
+ private readonly registryPath;
16
+ constructor(registryPath?: string);
17
+ private _read;
18
+ private _write;
19
+ private _withRegistryWriteLock;
20
+ private _cleanOrphanTmpFiles;
21
+ createProfile(name: string, meta?: Partial<CodexProfileMetadata>): void;
22
+ getProfile(name: string): CodexProfileMetadata;
23
+ updateProfile(name: string, partial: Partial<CodexProfileMetadata>): void;
24
+ removeProfile(name: string, options?: {
25
+ forceDefault?: boolean;
26
+ }): void;
27
+ listProfiles(): string[];
28
+ hasProfile(name: string): boolean;
29
+ getDefault(): string | null;
30
+ setDefault(name: string): void;
31
+ clearDefault(): void;
32
+ touchProfile(name: string): void;
33
+ }
34
+ //# sourceMappingURL=codex-profile-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-profile-registry.d.ts","sourceRoot":"","sources":["../../src/codex-auth/codex-profile-registry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAWtE,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAiClF;AAmFD;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,YAAY,CAAC,EAAE,MAAM;IAOjC,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,MAAM;IA2Bd,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,oBAAoB;IAyB5B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAAG,IAAI;IAkB3E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB;IAU9C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAYzE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAmB3E,YAAY,IAAI,MAAM,EAAE;IAIxB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOjC,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY9B,YAAY,IAAI,IAAI;IAQpB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGjC"}
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.CodexProfileRegistry = exports.validateCodexProfileRegistryData = exports.CodexProfileRegistryReadError = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const yaml = __importStar(require("js-yaml"));
30
+ const lockfile = __importStar(require("proper-lockfile"));
31
+ const logging_1 = require("../services/logging");
32
+ const codex_profile_paths_1 = require("./codex-profile-paths");
33
+ const config_manager_1 = require("../utils/config-manager");
34
+ const types_1 = require("./types");
35
+ const logger = (0, logging_1.createLogger)('codex-auth:registry');
36
+ const REGISTRY_LOCK_STALE_MS = 10000;
37
+ const REGISTRY_LOCK_RETRIES = 40;
38
+ const REGISTRY_LOCK_RETRY_DELAY_MS = 50;
39
+ function emptyRegistry() {
40
+ return { version: types_1.CODEX_PROFILE_SCHEMA_VERSION, default: null, profiles: {} };
41
+ }
42
+ class CodexProfileRegistryReadError extends Error {
43
+ constructor(message) {
44
+ super(message);
45
+ this.name = 'CodexProfileRegistryReadError';
46
+ }
47
+ }
48
+ exports.CodexProfileRegistryReadError = CodexProfileRegistryReadError;
49
+ function validateCodexProfileRegistryData(parsed) {
50
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
51
+ throw new Error('registry YAML root is not an object');
52
+ }
53
+ const data = parsed;
54
+ if (!data.profiles || typeof data.profiles !== 'object' || Array.isArray(data.profiles)) {
55
+ throw new Error('registry YAML is missing an object profiles map');
56
+ }
57
+ if (data.default !== undefined && data.default !== null && typeof data.default !== 'string') {
58
+ throw new Error('registry YAML default must be a string or null');
59
+ }
60
+ if (typeof data.default === 'string') {
61
+ assertValidProfileName(data.default);
62
+ }
63
+ const profiles = {};
64
+ for (const [name, profile] of Object.entries(data.profiles)) {
65
+ assertValidProfileName(name);
66
+ profiles[name] = validateProfileMetadata(name, profile);
67
+ }
68
+ if (typeof data.default === 'string' &&
69
+ !Object.prototype.hasOwnProperty.call(profiles, data.default)) {
70
+ throw new Error('registry YAML default profile is missing from profiles map');
71
+ }
72
+ return {
73
+ version: typeof data.version === 'string' ? data.version : types_1.CODEX_PROFILE_SCHEMA_VERSION,
74
+ default: data.default ?? null,
75
+ profiles,
76
+ };
77
+ }
78
+ exports.validateCodexProfileRegistryData = validateCodexProfileRegistryData;
79
+ function assertValidProfileName(name) {
80
+ const nameError = (0, types_1.getCodexProfileNameError)(name);
81
+ if (nameError) {
82
+ throw new Error(`registry YAML contains invalid profile name "${name}": ${nameError}`);
83
+ }
84
+ }
85
+ function validateProfileMetadata(name, profile) {
86
+ if (!profile || typeof profile !== 'object' || Array.isArray(profile)) {
87
+ throw new Error(`registry YAML profile "${name}" must be an object`);
88
+ }
89
+ const meta = profile;
90
+ if (meta.type !== 'codex') {
91
+ throw new Error(`registry YAML profile "${name}" must have type "codex"`);
92
+ }
93
+ if (typeof meta.created !== 'string') {
94
+ throw new Error(`registry YAML profile "${name}" must have a string created timestamp`);
95
+ }
96
+ if (meta.last_used !== null && typeof meta.last_used !== 'string') {
97
+ throw new Error(`registry YAML profile "${name}" must have a string or null last_used timestamp`);
98
+ }
99
+ if (meta.email !== undefined && typeof meta.email !== 'string') {
100
+ throw new Error(`registry YAML profile "${name}" email must be a string`);
101
+ }
102
+ if (meta.plan_type !== undefined &&
103
+ meta.plan_type !== null &&
104
+ typeof meta.plan_type !== 'string') {
105
+ throw new Error(`registry YAML profile "${name}" plan_type must be a string or null`);
106
+ }
107
+ if (meta.account_id !== undefined && typeof meta.account_id !== 'string') {
108
+ throw new Error(`registry YAML profile "${name}" account_id must be a string`);
109
+ }
110
+ return meta;
111
+ }
112
+ function registryDisplayPath(registryPath) {
113
+ const [source] = (0, config_manager_1.getCcsDirSource)();
114
+ const defaultRegistryPath = path.resolve((0, codex_profile_paths_1.getCodexAuthRegistryPath)());
115
+ if (path.resolve(registryPath) !== defaultRegistryPath) {
116
+ return path.basename(registryPath);
117
+ }
118
+ if (source === 'default') {
119
+ return process.platform === 'win32'
120
+ ? '%USERPROFILE%\\.ccs\\codex-profiles.yaml'
121
+ : '~/.ccs/codex-profiles.yaml';
122
+ }
123
+ if (source === 'CCS_HOME' || source === 'scoped:CCS_HOME') {
124
+ return '$CCS_HOME/.ccs/codex-profiles.yaml';
125
+ }
126
+ if (source === 'CCS_DIR' || source === 'scoped:CCS_DIR') {
127
+ return '$CCS_DIR/codex-profiles.yaml';
128
+ }
129
+ return 'codex-profiles.yaml';
130
+ }
131
+ function safeRegistryReadMessage(err) {
132
+ if (err?.name === 'YAMLException') {
133
+ return 'registry YAML could not be parsed';
134
+ }
135
+ return err instanceof Error ? err.message : String(err);
136
+ }
137
+ function sleepSync(ms) {
138
+ try {
139
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
140
+ }
141
+ catch {
142
+ const end = Date.now() + ms;
143
+ while (Date.now() < end) {
144
+ // Fall back for runtimes without Atomics.wait.
145
+ }
146
+ }
147
+ }
148
+ function isLockContentionError(err) {
149
+ return err?.code === 'ELOCKED';
150
+ }
151
+ /**
152
+ * Registry for codex auth profiles stored at ~/.ccs/codex-profiles.yaml.
153
+ *
154
+ * Writes are guarded by a registry-directory lock around the read-modify-write
155
+ * cycle, then persisted atomically with tmp file + POSIX rename.
156
+ *
157
+ * Constructor accepts an optional registryPath for test isolation.
158
+ */
159
+ class CodexProfileRegistry {
160
+ constructor(registryPath) {
161
+ this.registryPath = registryPath ?? (0, codex_profile_paths_1.getCodexAuthRegistryPath)();
162
+ this._cleanOrphanTmpFiles();
163
+ }
164
+ // ── private read/write ──────────────────────────────────────────────────
165
+ _read() {
166
+ if (!fs.existsSync(this.registryPath)) {
167
+ return emptyRegistry();
168
+ }
169
+ try {
170
+ const raw = fs.readFileSync(this.registryPath, 'utf8');
171
+ return validateCodexProfileRegistryData(yaml.load(raw));
172
+ }
173
+ catch (err) {
174
+ const msg = safeRegistryReadMessage(err);
175
+ const displayPath = registryDisplayPath(this.registryPath);
176
+ logger.warn('codex-auth.registry.read-failed', `Registry at ${displayPath} could not be read safely; refusing empty-state rewrite: ${msg}`);
177
+ throw new CodexProfileRegistryReadError(`Codex profile registry at ${displayPath} could not be read safely: ${msg}. Refusing to rewrite it.`);
178
+ }
179
+ }
180
+ _write(data) {
181
+ const dir = path.dirname(this.registryPath);
182
+ if (!fs.existsSync(dir)) {
183
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
184
+ }
185
+ // Unique tmp suffix avoids collisions on concurrent writes and orphan leaks
186
+ const tmpPath = `${this.registryPath}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`;
187
+ try {
188
+ fs.writeFileSync(tmpPath, yaml.dump(data, { indent: 2, lineWidth: -1 }), {
189
+ mode: 0o600,
190
+ });
191
+ fs.renameSync(tmpPath, this.registryPath);
192
+ }
193
+ catch (err) {
194
+ if (fs.existsSync(tmpPath)) {
195
+ try {
196
+ fs.unlinkSync(tmpPath);
197
+ }
198
+ catch {
199
+ // best-effort cleanup
200
+ }
201
+ }
202
+ const msg = err instanceof Error ? err.message : String(err);
203
+ throw new Error(`Failed to write codex profile registry: ${msg}`);
204
+ }
205
+ }
206
+ _withRegistryWriteLock(callback) {
207
+ const dir = path.dirname(this.registryPath);
208
+ if (!fs.existsSync(dir)) {
209
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
210
+ }
211
+ let release;
212
+ let lastLockError;
213
+ for (let attempt = 0; attempt <= REGISTRY_LOCK_RETRIES; attempt++) {
214
+ try {
215
+ release = lockfile.lockSync(dir, { stale: REGISTRY_LOCK_STALE_MS });
216
+ break;
217
+ }
218
+ catch (err) {
219
+ if (!isLockContentionError(err) || attempt === REGISTRY_LOCK_RETRIES) {
220
+ throw err;
221
+ }
222
+ lastLockError = err;
223
+ sleepSync(REGISTRY_LOCK_RETRY_DELAY_MS);
224
+ }
225
+ }
226
+ if (!release) {
227
+ const msg = lastLockError instanceof Error ? lastLockError.message : 'unknown lock error';
228
+ throw new Error(`Failed to acquire codex profile registry lock: ${msg}`);
229
+ }
230
+ try {
231
+ return callback();
232
+ }
233
+ finally {
234
+ try {
235
+ release();
236
+ }
237
+ catch {
238
+ // Best-effort release.
239
+ }
240
+ }
241
+ }
242
+ // Best-effort cleanup of orphan tmp files older than 1 hour (H3 mitigation).
243
+ _cleanOrphanTmpFiles() {
244
+ const dir = path.dirname(this.registryPath);
245
+ const base = path.basename(this.registryPath);
246
+ if (!fs.existsSync(dir))
247
+ return;
248
+ try {
249
+ const oneHourAgo = Date.now() - 60 * 60 * 1000;
250
+ for (const entry of fs.readdirSync(dir)) {
251
+ if (!entry.startsWith(`${base}.tmp.`))
252
+ continue;
253
+ const full = path.join(dir, entry);
254
+ try {
255
+ const stat = fs.statSync(full);
256
+ if (stat.mtimeMs < oneHourAgo) {
257
+ fs.unlinkSync(full);
258
+ }
259
+ }
260
+ catch {
261
+ // ignore per-file errors
262
+ }
263
+ }
264
+ }
265
+ catch {
266
+ // ignore cleanup failure silently
267
+ }
268
+ }
269
+ // ── CRUD ────────────────────────────────────────────────────────────────
270
+ createProfile(name, meta = {}) {
271
+ assertValidProfileName(name);
272
+ this._withRegistryWriteLock(() => {
273
+ const data = this._read();
274
+ if (data.profiles[name]) {
275
+ throw new Error(`Profile already exists: ${name}`);
276
+ }
277
+ data.profiles[name] = {
278
+ type: 'codex',
279
+ created: new Date().toISOString(),
280
+ last_used: null,
281
+ ...meta,
282
+ };
283
+ this._write(data);
284
+ logger.stage('route', 'codex-auth.profile.created', 'Codex profile created', { name });
285
+ });
286
+ }
287
+ getProfile(name) {
288
+ assertValidProfileName(name);
289
+ const data = this._read();
290
+ const profile = data.profiles[name];
291
+ if (!profile) {
292
+ throw new Error(`Profile not found: ${name}`);
293
+ }
294
+ return profile;
295
+ }
296
+ updateProfile(name, partial) {
297
+ assertValidProfileName(name);
298
+ this._withRegistryWriteLock(() => {
299
+ const data = this._read();
300
+ if (!data.profiles[name]) {
301
+ throw new Error(`Profile not found: ${name}`);
302
+ }
303
+ data.profiles[name] = { ...data.profiles[name], ...partial };
304
+ this._write(data);
305
+ });
306
+ }
307
+ removeProfile(name, options = {}) {
308
+ assertValidProfileName(name);
309
+ this._withRegistryWriteLock(() => {
310
+ const data = this._read();
311
+ if (!data.profiles[name]) {
312
+ throw new Error(`Profile not found: ${name}`);
313
+ }
314
+ if (data.default === name && Object.keys(data.profiles).length > 1 && !options.forceDefault) {
315
+ throw new Error('Cannot remove default profile while other profiles exist without --force');
316
+ }
317
+ delete data.profiles[name];
318
+ if (data.default === name) {
319
+ data.default = null;
320
+ }
321
+ this._write(data);
322
+ logger.stage('cleanup', 'codex-auth.profile.deleted', 'Codex profile removed', { name });
323
+ });
324
+ }
325
+ listProfiles() {
326
+ return Object.keys(this._read().profiles);
327
+ }
328
+ hasProfile(name) {
329
+ if ((0, types_1.getCodexProfileNameError)(name))
330
+ return false;
331
+ return Object.prototype.hasOwnProperty.call(this._read().profiles, name);
332
+ }
333
+ // ── Default pointer ──────────────────────────────────────────────────────
334
+ getDefault() {
335
+ return this._read().default;
336
+ }
337
+ setDefault(name) {
338
+ assertValidProfileName(name);
339
+ this._withRegistryWriteLock(() => {
340
+ const data = this._read();
341
+ if (!data.profiles[name]) {
342
+ throw new Error(`Profile not found: ${name}`);
343
+ }
344
+ data.default = name;
345
+ this._write(data);
346
+ });
347
+ }
348
+ clearDefault() {
349
+ this._withRegistryWriteLock(() => {
350
+ const data = this._read();
351
+ data.default = null;
352
+ this._write(data);
353
+ });
354
+ }
355
+ touchProfile(name) {
356
+ this.updateProfile(name, { last_used: new Date().toISOString() });
357
+ }
358
+ }
359
+ exports.CodexProfileRegistry = CodexProfileRegistry;
360
+ //# sourceMappingURL=codex-profile-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-profile-registry.js","sourceRoot":"","sources":["../../src/codex-auth/codex-profile-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * codex-auth create command.
3
+ * Creates a new profile dir + shared config.toml symlink.
4
+ * After creation, auto-spawns `codex login` with CODEX_HOME pinned (D11).
5
+ * --force: re-link config.toml only, preserve auth.json (D9).
6
+ */
7
+ import type { CodexCommandContext } from './types';
8
+ export declare function handleCreateCodex(ctx: CodexCommandContext, args: string[]): Promise<void>;
9
+ //# sourceMappingURL=create-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-command.d.ts","sourceRoot":"","sources":["../../../src/codex-auth/commands/create-command.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAInD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF/F"}