@kaitranntt/ccs 7.79.1-dev.2 → 7.79.1-dev.21

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 (205) 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/model-id-normalizer.d.ts +8 -0
  15. package/dist/cliproxy/ai-providers/model-id-normalizer.d.ts.map +1 -1
  16. package/dist/cliproxy/ai-providers/model-id-normalizer.js +18 -1
  17. package/dist/cliproxy/ai-providers/model-id-normalizer.js.map +1 -1
  18. package/dist/cliproxy/ai-providers/service.d.ts.map +1 -1
  19. package/dist/cliproxy/ai-providers/service.js +39 -12
  20. package/dist/cliproxy/ai-providers/service.js.map +1 -1
  21. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
  22. package/dist/cliproxy/quota/quota-fetcher-claude.js +35 -4
  23. package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
  24. package/dist/cliproxy/services/oauth-usage-log-transformer.d.ts.map +1 -1
  25. package/dist/cliproxy/services/oauth-usage-log-transformer.js +5 -0
  26. package/dist/cliproxy/services/oauth-usage-log-transformer.js.map +1 -1
  27. package/dist/codex-auth/codex-account-identity.d.ts +8 -0
  28. package/dist/codex-auth/codex-account-identity.d.ts.map +1 -0
  29. package/dist/codex-auth/codex-account-identity.js +53 -0
  30. package/dist/codex-auth/codex-account-identity.js.map +1 -0
  31. package/dist/codex-auth/codex-auth-dashboard-service.d.ts +46 -0
  32. package/dist/codex-auth/codex-auth-dashboard-service.d.ts.map +1 -0
  33. package/dist/codex-auth/codex-auth-dashboard-service.js +228 -0
  34. package/dist/codex-auth/codex-auth-dashboard-service.js.map +1 -0
  35. package/dist/codex-auth/codex-auth-help.d.ts +7 -0
  36. package/dist/codex-auth/codex-auth-help.d.ts.map +1 -0
  37. package/dist/codex-auth/codex-auth-help.js +87 -0
  38. package/dist/codex-auth/codex-auth-help.js.map +1 -0
  39. package/dist/codex-auth/codex-auth-router.d.ts +16 -0
  40. package/dist/codex-auth/codex-auth-router.d.ts.map +1 -0
  41. package/dist/codex-auth/codex-auth-router.js +77 -0
  42. package/dist/codex-auth/codex-auth-router.js.map +1 -0
  43. package/dist/codex-auth/codex-config-symlink.d.ts +14 -0
  44. package/dist/codex-auth/codex-config-symlink.d.ts.map +1 -0
  45. package/dist/codex-auth/codex-config-symlink.js +128 -0
  46. package/dist/codex-auth/codex-config-symlink.js.map +1 -0
  47. package/dist/codex-auth/codex-profile-paths.d.ts +5 -0
  48. package/dist/codex-auth/codex-profile-paths.d.ts.map +1 -0
  49. package/dist/codex-auth/codex-profile-paths.js +58 -0
  50. package/dist/codex-auth/codex-profile-paths.js.map +1 -0
  51. package/dist/codex-auth/codex-profile-registry.d.ts +34 -0
  52. package/dist/codex-auth/codex-profile-registry.d.ts.map +1 -0
  53. package/dist/codex-auth/codex-profile-registry.js +360 -0
  54. package/dist/codex-auth/codex-profile-registry.js.map +1 -0
  55. package/dist/codex-auth/commands/create-command.d.ts +9 -0
  56. package/dist/codex-auth/commands/create-command.d.ts.map +1 -0
  57. package/dist/codex-auth/commands/create-command.js +189 -0
  58. package/dist/codex-auth/commands/create-command.js.map +1 -0
  59. package/dist/codex-auth/commands/import-default-command.d.ts +18 -0
  60. package/dist/codex-auth/commands/import-default-command.d.ts.map +1 -0
  61. package/dist/codex-auth/commands/import-default-command.js +385 -0
  62. package/dist/codex-auth/commands/import-default-command.js.map +1 -0
  63. package/dist/codex-auth/commands/index.d.ts +13 -0
  64. package/dist/codex-auth/commands/index.d.ts.map +1 -0
  65. package/dist/codex-auth/commands/index.js +27 -0
  66. package/dist/codex-auth/commands/index.js.map +1 -0
  67. package/dist/codex-auth/commands/login-command.d.ts +9 -0
  68. package/dist/codex-auth/commands/login-command.d.ts.map +1 -0
  69. package/dist/codex-auth/commands/login-command.js +152 -0
  70. package/dist/codex-auth/commands/login-command.js.map +1 -0
  71. package/dist/codex-auth/commands/remove-command.d.ts +10 -0
  72. package/dist/codex-auth/commands/remove-command.d.ts.map +1 -0
  73. package/dist/codex-auth/commands/remove-command.js +230 -0
  74. package/dist/codex-auth/commands/remove-command.js.map +1 -0
  75. package/dist/codex-auth/commands/show-command.d.ts +10 -0
  76. package/dist/codex-auth/commands/show-command.d.ts.map +1 -0
  77. package/dist/codex-auth/commands/show-command.js +127 -0
  78. package/dist/codex-auth/commands/show-command.js.map +1 -0
  79. package/dist/codex-auth/commands/show-detail-view.d.ts +7 -0
  80. package/dist/codex-auth/commands/show-detail-view.d.ts.map +1 -0
  81. package/dist/codex-auth/commands/show-detail-view.js +134 -0
  82. package/dist/codex-auth/commands/show-detail-view.js.map +1 -0
  83. package/dist/codex-auth/commands/switch-command.d.ts +7 -0
  84. package/dist/codex-auth/commands/switch-command.d.ts.map +1 -0
  85. package/dist/codex-auth/commands/switch-command.js +48 -0
  86. package/dist/codex-auth/commands/switch-command.js.map +1 -0
  87. package/dist/codex-auth/commands/types.d.ts +45 -0
  88. package/dist/codex-auth/commands/types.d.ts.map +1 -0
  89. package/dist/codex-auth/commands/types.js +85 -0
  90. package/dist/codex-auth/commands/types.js.map +1 -0
  91. package/dist/codex-auth/commands/use-command.d.ts +16 -0
  92. package/dist/codex-auth/commands/use-command.d.ts.map +1 -0
  93. package/dist/codex-auth/commands/use-command.js +86 -0
  94. package/dist/codex-auth/commands/use-command.js.map +1 -0
  95. package/dist/codex-auth/decode-id-token.d.ts +12 -0
  96. package/dist/codex-auth/decode-id-token.d.ts.map +1 -0
  97. package/dist/codex-auth/decode-id-token.js +83 -0
  98. package/dist/codex-auth/decode-id-token.js.map +1 -0
  99. package/dist/codex-auth/index.d.ts +8 -0
  100. package/dist/codex-auth/index.d.ts.map +1 -0
  101. package/dist/codex-auth/index.js +19 -0
  102. package/dist/codex-auth/index.js.map +1 -0
  103. package/dist/codex-auth/resolve-active-profile.d.ts +13 -0
  104. package/dist/codex-auth/resolve-active-profile.d.ts.map +1 -0
  105. package/dist/codex-auth/resolve-active-profile.js +161 -0
  106. package/dist/codex-auth/resolve-active-profile.js.map +1 -0
  107. package/dist/codex-auth/shell-detect.d.ts +19 -0
  108. package/dist/codex-auth/shell-detect.d.ts.map +1 -0
  109. package/dist/codex-auth/shell-detect.js +129 -0
  110. package/dist/codex-auth/shell-detect.js.map +1 -0
  111. package/dist/codex-auth/types.d.ts +26 -0
  112. package/dist/codex-auth/types.d.ts.map +1 -0
  113. package/dist/codex-auth/types.js +34 -0
  114. package/dist/codex-auth/types.js.map +1 -0
  115. package/dist/commands/persist-command.d.ts.map +1 -1
  116. package/dist/commands/persist-command.js +86 -5
  117. package/dist/commands/persist-command.js.map +1 -1
  118. package/dist/dispatcher/cli-argument-parser.d.ts +3 -2
  119. package/dist/dispatcher/cli-argument-parser.d.ts.map +1 -1
  120. package/dist/dispatcher/cli-argument-parser.js +37 -7
  121. package/dist/dispatcher/cli-argument-parser.js.map +1 -1
  122. package/dist/dispatcher/pre-dispatch.d.ts.map +1 -1
  123. package/dist/dispatcher/pre-dispatch.js +7 -0
  124. package/dist/dispatcher/pre-dispatch.js.map +1 -1
  125. package/dist/dispatcher/target-executor.d.ts +2 -2
  126. package/dist/dispatcher/target-executor.d.ts.map +1 -1
  127. package/dist/dispatcher/target-executor.js +5 -5
  128. package/dist/dispatcher/target-executor.js.map +1 -1
  129. package/dist/docker/docker-bootstrap.d.ts +1 -1
  130. package/dist/docker/docker-bootstrap.d.ts.map +1 -1
  131. package/dist/docker/docker-bootstrap.js +30 -3
  132. package/dist/docker/docker-bootstrap.js.map +1 -1
  133. package/dist/docker/docker-executor.d.ts.map +1 -1
  134. package/dist/docker/docker-executor.js +1 -0
  135. package/dist/docker/docker-executor.js.map +1 -1
  136. package/dist/management/checks/config-check.d.ts.map +1 -1
  137. package/dist/management/checks/config-check.js +10 -1
  138. package/dist/management/checks/config-check.js.map +1 -1
  139. package/dist/proxy/proxy-daemon.d.ts.map +1 -1
  140. package/dist/proxy/proxy-daemon.js +15 -3
  141. package/dist/proxy/proxy-daemon.js.map +1 -1
  142. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  143. package/dist/proxy/server/messages-route.js +27 -1
  144. package/dist/proxy/server/messages-route.js.map +1 -1
  145. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  146. package/dist/shared/claude-extension-setup.js +21 -1
  147. package/dist/shared/claude-extension-setup.js.map +1 -1
  148. package/dist/targets/codex-cliproxy-provider-config.d.ts.map +1 -1
  149. package/dist/targets/codex-cliproxy-provider-config.js +56 -24
  150. package/dist/targets/codex-cliproxy-provider-config.js.map +1 -1
  151. package/dist/ui/assets/Trans-J6qQqjkU.js +1 -0
  152. package/dist/ui/assets/{accounts-C-sOjvWS.js → accounts-B9Y9uOFl.js} +1 -1
  153. package/dist/ui/assets/{alert-dialog-BrOo6Lh3.js → alert-dialog-B7gsksZn.js} +1 -1
  154. package/dist/ui/assets/{api-CXdC3ABc.js → api-Cz8U6P7R.js} +1 -1
  155. package/dist/ui/assets/{auth-section-XJ5PohAT.js → auth-section-C8dzvYje.js} +1 -1
  156. package/dist/ui/assets/{backups-section-DjMi9NN5.js → backups-section-D0dn59k8.js} +1 -1
  157. package/dist/ui/assets/{channels-dD6o7KFj.js → channels-BEmwDrRW.js} +1 -1
  158. package/dist/ui/assets/{checkbox-CVS69doq.js → checkbox-DD0s2D_O.js} +1 -1
  159. package/dist/ui/assets/{claude-extension-D47wkgfq.js → claude-extension-DHVBsw6b.js} +1 -1
  160. package/dist/ui/assets/{cliproxy-CXgzAe6X.js → cliproxy-BMlbpAIO.js} +2 -2
  161. package/dist/ui/assets/{cliproxy-ai-providers-POOrpQVc.js → cliproxy-ai-providers-B440rPlH.js} +2 -2
  162. package/dist/ui/assets/{cliproxy-control-panel-BWa_KiNM.js → cliproxy-control-panel-Bo-Y41B_.js} +1 -1
  163. package/dist/ui/assets/codex-DPe04ol4.js +30 -0
  164. package/dist/ui/assets/{confirm-dialog-BuxHs897.js → confirm-dialog-MQNmqmha.js} +1 -1
  165. package/dist/ui/assets/{copilot-BQ4Cltbo.js → copilot-COZj29YU.js} +1 -1
  166. package/dist/ui/assets/{cursor-BVUNUVux.js → cursor-D0occhsH.js} +1 -1
  167. package/dist/ui/assets/{droid-Bw34FF6c.js → droid-CSaYFApd.js} +1 -1
  168. package/dist/ui/assets/{globalenv-section-B4UDGHiP.js → globalenv-section-BwuNrdbO.js} +1 -1
  169. package/dist/ui/assets/{health-30TwUdp_.js → health-DjNOO9K-.js} +1 -1
  170. package/dist/ui/assets/{index-BUBCzEHD.js → index-Bm_0r3qk.js} +1 -1
  171. package/dist/ui/assets/{index-BxIFAuoV.js → index-Bnzie_zG.js} +1 -1
  172. package/dist/ui/assets/{index-C6j8gpEb.js → index-CSlgRg0s.js} +27 -27
  173. package/dist/ui/assets/index-CjM3Ehb8.js +1 -0
  174. package/dist/ui/assets/{index-BjQ5PWH7.js → index-CmOBelFi.js} +1 -1
  175. package/dist/ui/assets/{index-DtiygQmg.js → index-D9HfyuQr.js} +1 -1
  176. package/dist/ui/assets/index-G3mgTfgR.css +1 -0
  177. package/dist/ui/assets/{index-ByGCSVsI.js → index-i2MPNni3.js} +1 -1
  178. package/dist/ui/assets/{logs-CDD_WQvt.js → logs-7bWvuc1l.js} +1 -1
  179. package/dist/ui/assets/{masked-input-DpM1vKP_.js → masked-input-D_amxi96.js} +1 -1
  180. package/dist/ui/assets/proxy-status-widget-BkC-wCtI.js +1 -0
  181. package/dist/ui/assets/{raw-json-settings-editor-panel-D-zQkcvr.js → raw-json-settings-editor-panel-CVP5Bjfm.js} +1 -1
  182. package/dist/ui/assets/{searchable-select-B8Kp0x8p.js → searchable-select-e5sY7o6g.js} +1 -1
  183. package/dist/ui/assets/{separator-DlXQBF83.js → separator-BR5bmtI7.js} +1 -1
  184. package/dist/ui/assets/{shared-D_h3QKy6.js → shared-CsqW2cFN.js} +1 -1
  185. package/dist/ui/assets/{table-Dyt0FuBK.js → table-DPheAd4c.js} +1 -1
  186. package/dist/ui/assets/{updates-DfIV0IC0.js → updates-D07RjKLJ.js} +1 -1
  187. package/dist/ui/assets/{use-accounts-Dy2ogHT-.js → use-accounts-CWVR2NXQ.js} +1 -1
  188. package/dist/ui/index.html +2 -2
  189. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  190. package/dist/web-server/middleware/auth-middleware.js +25 -1
  191. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  192. package/dist/web-server/routes/claude-extension-routes.d.ts.map +1 -1
  193. package/dist/web-server/routes/claude-extension-routes.js +5 -0
  194. package/dist/web-server/routes/claude-extension-routes.js.map +1 -1
  195. package/dist/web-server/routes/codex-routes.d.ts.map +1 -1
  196. package/dist/web-server/routes/codex-routes.js +14 -0
  197. package/dist/web-server/routes/codex-routes.js.map +1 -1
  198. package/lib/hooks/websearch-transformer.cjs +12 -3
  199. package/lib/mcp/ccs-browser-server.cjs +217 -12
  200. package/package.json +1 -1
  201. package/scripts/run-test-bucket.js +1 -0
  202. package/dist/ui/assets/codex-CYyPdHS4.js +0 -30
  203. package/dist/ui/assets/index-nSsKQx8t.css +0 -1
  204. package/dist/ui/assets/index-s94_IKNx.js +0 -1
  205. package/dist/ui/assets/proxy-status-widget-7iMiOpQe.js +0 -1
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /**
3
+ * Help text for `ccsx auth` command tree.
4
+ * ASCII-only. Includes ccsxp scope clarifier (H5).
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.printCodexAuthUseHelp = exports.printCodexAuthHelp = void 0;
8
+ function printCodexAuthHelp() {
9
+ process.stdout.write(`CCS Concurrent Codex Account Management
10
+
11
+ Usage
12
+ ccsx auth <command> [options]
13
+
14
+ Commands
15
+ create <name> Create a new Codex profile (idempotent)
16
+ login <name> Run \`codex login\` against the profile (auto-creates if missing)
17
+ switch <name> Set the persistent default Codex profile
18
+ use <name> Emit shell-eval exports to activate a profile in this shell only
19
+ show [name] List profiles or show details for one
20
+ remove <name> Delete a profile (auth.json + profile dir + registry entry)
21
+ import-default <name> Migrate legacy ~/.codex/auth.json into a new profile
22
+
23
+ Shell activation (per terminal)
24
+ bash/zsh: eval "$(ccsx auth use work)"
25
+ fish: ccsx auth use work | source
26
+ pwsh: ccsx auth use work | Invoke-Expression
27
+
28
+ Examples
29
+ ccsx auth create work
30
+ ccsx auth login work # OAuth in browser
31
+ ccsx auth create personal
32
+ ccsx auth login personal
33
+ eval "$(ccsx auth use work)" # terminal A
34
+ eval "$(ccsx auth use personal)" # terminal B
35
+ codex # each terminal uses its own account
36
+ ccsx auth show
37
+ ccsx auth switch personal # change persistent default
38
+ ccsx auth remove old --yes
39
+
40
+ Options
41
+ --yes, -y Skip confirmation (remove)
42
+ --force Re-link config.toml (create) | override default check (remove) |
43
+ overwrite existing profile (import-default)
44
+ --json JSON output (show)
45
+ --shell <s> Override shell detection (use): bash|zsh|fish|pwsh|cmd
46
+ --with-history Copy history.jsonl + sessions/ too (import-default, default: off)
47
+ --force-while-running Allow import-default even if Codex is running (risky)
48
+
49
+ Notes
50
+ Auth state (auth.json) and history.jsonl are isolated per profile.
51
+ config.toml is shared via symlink to ~/.codex/config.toml.
52
+ Default profile (switch) is persistent across shells.
53
+ Active profile (use) is per-terminal via CODEX_HOME / CCS_CODEX_PROFILE.
54
+
55
+ Note: This feature applies only to native \`codex\`. \`ccsxp\` ignores
56
+ CCS_CODEX_PROFILE and uses its own cliproxy pool.
57
+ `);
58
+ }
59
+ exports.printCodexAuthHelp = printCodexAuthHelp;
60
+ function printCodexAuthUseHelp() {
61
+ process.stdout.write(`ccsx auth use — Activate a Codex profile in the current shell
62
+
63
+ Usage
64
+ ccsx auth use <name> [--shell <bash|zsh|fish|pwsh|cmd>]
65
+
66
+ Description
67
+ Emits shell-evalable export statements to stdout. Use within eval "$(...)"
68
+ only. Output to stdout is shell-evaluatable; do not pipe to other commands.
69
+
70
+ All errors and informational messages go to stderr so the eval is never
71
+ contaminated.
72
+
73
+ Shell evaluation
74
+ bash/zsh: eval "$(ccsx auth use work)"
75
+ fish: ccsx auth use work | source
76
+ pwsh: ccsx auth use work | Invoke-Expression
77
+ cmd: (not supported natively; use PowerShell)
78
+
79
+ Options
80
+ --shell <s> Override auto-detected shell: bash|zsh|fish|pwsh|cmd
81
+
82
+ Note: This profile applies only to native \`codex\`. \`ccsxp\` ignores
83
+ CCS_CODEX_PROFILE and uses its own cliproxy pool.
84
+ `);
85
+ }
86
+ exports.printCodexAuthUseHelp = printCodexAuthUseHelp;
87
+ //# sourceMappingURL=codex-auth-help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-auth-help.js","sourceRoot":"","sources":["../../src/codex-auth/codex-auth-help.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,SAAgB,kBAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDtB,CAAC,CAAC;AACH,CAAC;AAlDD,gDAkDC;AAED,SAAgB,qBAAqB;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBtB,CAAC,CAAC;AACH,CAAC;AAzBD,sDAyBC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Codex auth command router.
3
+ *
4
+ * Exports runCodexAuth(argv) which routes argv[0] (the subcommand) to
5
+ * the appropriate handler. Returns an exit code (0 = success, non-zero = error).
6
+ *
7
+ * Phase 3 wires this into src/bin/codex-runtime.ts for argv[2]==='auth'.
8
+ */
9
+ /**
10
+ * Route a `ccsx auth <subcommand> [...args]` invocation.
11
+ *
12
+ * @param argv - Arguments after `auth`, e.g. ['create', 'work'] or ['--help']
13
+ * @returns Exit code (0 success, 1 user error, 2+ system error)
14
+ */
15
+ export declare function runCodexAuth(argv: string[]): Promise<number>;
16
+ //# sourceMappingURL=codex-auth-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-auth-router.d.ts","sourceRoot":"","sources":["../../src/codex-auth/codex-auth-router.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDlE"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * Codex auth command router.
4
+ *
5
+ * Exports runCodexAuth(argv) which routes argv[0] (the subcommand) to
6
+ * the appropriate handler. Returns an exit code (0 = success, non-zero = error).
7
+ *
8
+ * Phase 3 wires this into src/bin/codex-runtime.ts for argv[2]==='auth'.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.runCodexAuth = void 0;
12
+ const codex_profile_registry_1 = require("./codex-profile-registry");
13
+ const codex_auth_help_1 = require("./codex-auth-help");
14
+ const index_1 = require("./commands/index");
15
+ const packageJson = require('../../package.json');
16
+ /**
17
+ * Route a `ccsx auth <subcommand> [...args]` invocation.
18
+ *
19
+ * @param argv - Arguments after `auth`, e.g. ['create', 'work'] or ['--help']
20
+ * @returns Exit code (0 success, 1 user error, 2+ system error)
21
+ */
22
+ async function runCodexAuth(argv) {
23
+ const [subcommand, ...rest] = argv;
24
+ // Help / no-arg
25
+ if (!subcommand || subcommand === '--help' || subcommand === '-h' || subcommand === 'help') {
26
+ (0, codex_auth_help_1.printCodexAuthHelp)();
27
+ return 0;
28
+ }
29
+ // Version passthrough
30
+ if (subcommand === '--version' || subcommand === '-v') {
31
+ process.stdout.write(`ccsx auth ${packageJson.version}\n`);
32
+ return 0;
33
+ }
34
+ const registry = new codex_profile_registry_1.CodexProfileRegistry();
35
+ const ctx = {
36
+ registry,
37
+ version: packageJson.version,
38
+ };
39
+ try {
40
+ switch (subcommand) {
41
+ case 'create':
42
+ await (0, index_1.handleCreateCodex)(ctx, rest);
43
+ return 0;
44
+ case 'login':
45
+ await (0, index_1.handleLoginCodex)(ctx, rest);
46
+ return 0;
47
+ case 'switch':
48
+ await (0, index_1.handleSwitchCodex)(ctx, rest);
49
+ return 0;
50
+ case 'use':
51
+ await (0, index_1.handleUseCodex)(ctx, rest);
52
+ return 0;
53
+ case 'show':
54
+ await (0, index_1.handleShowCodex)(ctx, rest);
55
+ return 0;
56
+ case 'remove':
57
+ await (0, index_1.handleRemoveCodex)(ctx, rest);
58
+ return 0;
59
+ case 'import-default':
60
+ await (0, index_1.handleImportDefaultCodex)(ctx, rest);
61
+ return 0;
62
+ default:
63
+ process.stderr.write(`[X] Unknown command: ${subcommand}\n`);
64
+ process.stderr.write(` ccsx auth --help\n`);
65
+ return 1;
66
+ }
67
+ }
68
+ catch (err) {
69
+ // Unhandled errors from handlers (e.g. process.exit called inside)
70
+ // These should be rare — handlers use exitWithError() which calls process.exit
71
+ const msg = err instanceof Error ? err.message : String(err);
72
+ process.stderr.write(`[X] Unexpected error in ccsx auth ${subcommand}: ${msg}\n`);
73
+ return 1;
74
+ }
75
+ }
76
+ exports.runCodexAuth = runCodexAuth;
77
+ //# sourceMappingURL=codex-auth-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-auth-router.js","sourceRoot":"","sources":["../../src/codex-auth/codex-auth-router.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,qEAAgE;AAChE,uDAAuD;AACvD,4CAQ0B;AAG1B,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE;;;;;GAKG;AACI,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEnC,gBAAgB;IAChB,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC3F,IAAA,oCAAkB,GAAE,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,sBAAsB;IACtB,IAAI,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,6CAAoB,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAwB;QAC/B,QAAQ;QACR,OAAO,EAAE,WAAW,CAAC,OAAO;KAC7B,CAAC;IAEF,IAAI,CAAC;QACH,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO,CAAC,CAAC;YACX,KAAK,OAAO;gBACV,MAAM,IAAA,wBAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAClC,OAAO,CAAC,CAAC;YACX,KAAK,QAAQ;gBACX,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO,CAAC,CAAC;YACX,KAAK,KAAK;gBACR,MAAM,IAAA,sBAAc,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAChC,OAAO,CAAC,CAAC;YACX,KAAK,MAAM;gBACT,MAAM,IAAA,uBAAe,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACjC,OAAO,CAAC,CAAC;YACX,KAAK,QAAQ;gBACX,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO,CAAC,CAAC;YACX,KAAK,gBAAgB;gBACnB,MAAM,IAAA,gCAAwB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC1C,OAAO,CAAC,CAAC;YACX;gBACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,UAAU,IAAI,CAAC,CAAC;gBAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC/C,OAAO,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,mEAAmE;QACnE,+EAA+E;QAC/E,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,UAAU,KAAK,GAAG,IAAI,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAxDD,oCAwDC"}
@@ -0,0 +1,14 @@
1
+ export interface EnsureSharedConfigSymlinkOptions {
2
+ overwriteRegularFile?: boolean;
3
+ }
4
+ /**
5
+ * Ensure <profileDir>/config.toml points at the shared ~/.codex/config.toml.
6
+ * Self-healing: recreates stale or missing symlinks. If symlink creation is
7
+ * unavailable, copies the shared config so the profile still has settings.
8
+ *
9
+ * @param profileDir - The per-profile directory (will be created if missing).
10
+ * @param sharedConfigPath - Override for the shared target path (used in tests
11
+ * to avoid touching real ~/.codex/config.toml). Defaults to getSharedCodexConfigPath().
12
+ */
13
+ export declare function ensureSharedConfigSymlink(profileDir: string, sharedConfigPath?: string, options?: EnsureSharedConfigSymlinkOptions): void;
14
+ //# sourceMappingURL=codex-config-symlink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-config-symlink.d.ts","sourceRoot":"","sources":["../../src/codex-auth/codex-config-symlink.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gCAAgC;IAC/C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,MAAM,EACzB,OAAO,GAAE,gCAAqC,GAC7C,IAAI,CA0EN"}
@@ -0,0 +1,128 @@
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.ensureSharedConfigSymlink = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const logging_1 = require("../services/logging");
30
+ const codex_profile_paths_1 = require("./codex-profile-paths");
31
+ const logger = (0, logging_1.createLogger)('codex-auth:symlink');
32
+ /**
33
+ * Ensure <profileDir>/config.toml points at the shared ~/.codex/config.toml.
34
+ * Self-healing: recreates stale or missing symlinks. If symlink creation is
35
+ * unavailable, copies the shared config so the profile still has settings.
36
+ *
37
+ * @param profileDir - The per-profile directory (will be created if missing).
38
+ * @param sharedConfigPath - Override for the shared target path (used in tests
39
+ * to avoid touching real ~/.codex/config.toml). Defaults to getSharedCodexConfigPath().
40
+ */
41
+ function ensureSharedConfigSymlink(profileDir, sharedConfigPath, options = {}) {
42
+ const targetPath = sharedConfigPath ?? (0, codex_profile_paths_1.getSharedCodexConfigPath)();
43
+ const linkPath = path.join(profileDir, 'config.toml');
44
+ // Ensure profile directory exists
45
+ fs.mkdirSync(profileDir, { recursive: true, mode: 0o700 });
46
+ // Ensure shared config target parent directory exists
47
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true, mode: 0o700 });
48
+ // Create empty shared config if it doesn't exist — Codex will populate on first run
49
+ if (!fs.existsSync(targetPath)) {
50
+ fs.writeFileSync(targetPath, '', { mode: 0o600 });
51
+ logger.stage('dispatch', 'codex.shared-config.created', 'Created empty shared config.toml', {
52
+ path: targetPath,
53
+ });
54
+ }
55
+ // Inspect whatever currently exists at the link path
56
+ let existingStat = null;
57
+ try {
58
+ existingStat = fs.lstatSync(linkPath);
59
+ }
60
+ catch {
61
+ // ENOENT — nothing there yet, proceed to create
62
+ }
63
+ if (existingStat !== null) {
64
+ if (existingStat.isSymbolicLink()) {
65
+ const currentTarget = fs.readlinkSync(linkPath);
66
+ if (currentTarget === targetPath) {
67
+ // Already correct — idempotent return
68
+ logger.stage('dispatch', 'codex.symlink.ok', 'Shared config symlink already correct', {
69
+ link: linkPath,
70
+ });
71
+ return;
72
+ }
73
+ // Stale symlink — remove and re-create
74
+ fs.unlinkSync(linkPath);
75
+ logger.stage('dispatch', 'codex.symlink.repaired', 'Replaced stale symlink', {
76
+ link: linkPath,
77
+ was: currentTarget,
78
+ now: targetPath,
79
+ });
80
+ }
81
+ else if (options.overwriteRegularFile ||
82
+ isRegularConfigCopyUnmodified(linkPath, targetPath)) {
83
+ // Explicit repair or unchanged fallback copy — replace with a shared symlink when possible.
84
+ process.stderr.write(`[!] codex-auth: overwriting regular file at ${linkPath} with symlink to shared config.toml\n`);
85
+ fs.unlinkSync(linkPath);
86
+ }
87
+ else {
88
+ process.stderr.write(`[!] codex-auth: preserving existing regular config.toml at ${linkPath}; ` +
89
+ `use ccsx auth create <name> --force to refresh it.\n`);
90
+ logger.warn('codex-auth.symlink-regular-file-preserved', 'Preserved regular config.toml', {
91
+ link: linkPath,
92
+ target: targetPath,
93
+ });
94
+ return;
95
+ }
96
+ }
97
+ try {
98
+ fs.symlinkSync(targetPath, linkPath);
99
+ logger.stage('dispatch', 'codex.symlink.created', 'Created shared config symlink', {
100
+ link: linkPath,
101
+ target: targetPath,
102
+ });
103
+ }
104
+ catch (err) {
105
+ copySharedConfigFallback(targetPath, linkPath, err);
106
+ }
107
+ }
108
+ exports.ensureSharedConfigSymlink = ensureSharedConfigSymlink;
109
+ function isRegularConfigCopyUnmodified(linkPath, targetPath) {
110
+ try {
111
+ return fs.readFileSync(linkPath, 'utf8') === fs.readFileSync(targetPath, 'utf8');
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ function copySharedConfigFallback(targetPath, linkPath, err) {
118
+ fs.copyFileSync(targetPath, linkPath);
119
+ fs.chmodSync(linkPath, 0o600);
120
+ process.stderr.write(`[!] codex-auth: symlink unavailable; copied shared config.toml to ${linkPath}. ` +
121
+ `Config edits won't propagate automatically.\n`);
122
+ logger.warn('codex-auth.symlink-copy-fallback', 'Copied shared config after symlink failure', {
123
+ link: linkPath,
124
+ target: targetPath,
125
+ error: err instanceof Error ? err.message : String(err),
126
+ });
127
+ }
128
+ //# sourceMappingURL=codex-config-symlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-config-symlink.js","sourceRoot":"","sources":["../../src/codex-auth/codex-config-symlink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function getCodexAuthRegistryPath(): string;
2
+ export declare function getCodexInstancesDir(): string;
3
+ export declare function resolveCodexProfileDir(name: string): string;
4
+ export declare function getSharedCodexConfigPath(): string;
5
+ //# sourceMappingURL=codex-profile-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-profile-paths.d.ts","sourceRoot":"","sources":["../../src/codex-auth/codex-profile-paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa3D;AAID,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD"}
@@ -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"}