@kaitranntt/ccs 8.4.0 → 8.5.0-dev.1

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 (749) hide show
  1. package/README.md +5 -2
  2. package/config/base-claude.settings.json +1 -1
  3. package/config/base-glm.settings.json +4 -4
  4. package/config/base-glmt.settings.json +4 -4
  5. package/config/base-km.settings.json +4 -4
  6. package/config/base-mm.settings.json +4 -4
  7. package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
  8. package/dist/api/services/cliproxy-profile-bridge.js +20 -9
  9. package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
  10. package/dist/api/services/profile-lifecycle-validation.d.ts.map +1 -1
  11. package/dist/api/services/profile-lifecycle-validation.js +2 -0
  12. package/dist/api/services/profile-lifecycle-validation.js.map +1 -1
  13. package/dist/auth/commands/backup-command.d.ts.map +1 -1
  14. package/dist/auth/commands/backup-command.js +0 -1
  15. package/dist/auth/commands/backup-command.js.map +1 -1
  16. package/dist/auth/commands/create-command.d.ts.map +1 -1
  17. package/dist/auth/commands/create-command.js +4 -14
  18. package/dist/auth/commands/create-command.js.map +1 -1
  19. package/dist/auth/commands/default-command.d.ts.map +1 -1
  20. package/dist/auth/commands/default-command.js +0 -1
  21. package/dist/auth/commands/default-command.js.map +1 -1
  22. package/dist/auth/commands/index.d.ts +2 -1
  23. package/dist/auth/commands/index.d.ts.map +1 -1
  24. package/dist/auth/commands/index.js +0 -1
  25. package/dist/auth/commands/index.js.map +1 -1
  26. package/dist/auth/commands/remove-command.d.ts.map +1 -1
  27. package/dist/auth/commands/remove-command.js +0 -2
  28. package/dist/auth/commands/remove-command.js.map +1 -1
  29. package/dist/auth/commands/resources-command.d.ts.map +1 -1
  30. package/dist/auth/commands/resources-command.js +0 -1
  31. package/dist/auth/commands/resources-command.js.map +1 -1
  32. package/dist/auth/commands/show-command.d.ts.map +1 -1
  33. package/dist/auth/commands/show-command.js +0 -1
  34. package/dist/auth/commands/show-command.js.map +1 -1
  35. package/dist/auth/commands/types.d.ts.map +1 -1
  36. package/dist/auth/commands/types.js +0 -1
  37. package/dist/auth/commands/types.js.map +1 -1
  38. package/dist/auth/profile-registry.d.ts +3 -1
  39. package/dist/auth/profile-registry.d.ts.map +1 -1
  40. package/dist/auth/profile-registry.js +21 -15
  41. package/dist/auth/profile-registry.js.map +1 -1
  42. package/dist/ccs.js +27 -21
  43. package/dist/ccs.js.map +1 -1
  44. package/dist/cliproxy/accounts/account-safety.d.ts.map +1 -1
  45. package/dist/cliproxy/accounts/account-safety.js +56 -56
  46. package/dist/cliproxy/accounts/account-safety.js.map +1 -1
  47. package/dist/cliproxy/auth/antigravity-responsibility.d.ts.map +1 -1
  48. package/dist/cliproxy/auth/antigravity-responsibility.js +15 -15
  49. package/dist/cliproxy/auth/antigravity-responsibility.js.map +1 -1
  50. package/dist/cliproxy/auth/auth-token-manager.d.ts.map +1 -1
  51. package/dist/cliproxy/auth/auth-token-manager.js +2 -1
  52. package/dist/cliproxy/auth/auth-token-manager.js.map +1 -1
  53. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  54. package/dist/cliproxy/auth/auth-types.js +3 -2
  55. package/dist/cliproxy/auth/auth-types.js.map +1 -1
  56. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  57. package/dist/cliproxy/auth/oauth-handler.js +16 -5
  58. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  59. package/dist/cliproxy/auth/provider-refreshers/index.d.ts +2 -1
  60. package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -1
  61. package/dist/cliproxy/auth/provider-refreshers/index.js +4 -2
  62. package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -1
  63. package/dist/cliproxy/auth/token-manager.d.ts +2 -1
  64. package/dist/cliproxy/auth/token-manager.d.ts.map +1 -1
  65. package/dist/cliproxy/auth/token-manager.js +2 -1
  66. package/dist/cliproxy/auth/token-manager.js.map +1 -1
  67. package/dist/cliproxy/binary/lifecycle.d.ts.map +1 -1
  68. package/dist/cliproxy/binary/lifecycle.js +3 -2
  69. package/dist/cliproxy/binary/lifecycle.js.map +1 -1
  70. package/dist/cliproxy/config/env-builder.d.ts +19 -2
  71. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  72. package/dist/cliproxy/config/env-builder.js +58 -9
  73. package/dist/cliproxy/config/env-builder.js.map +1 -1
  74. package/dist/cliproxy/config/model-config.d.ts.map +1 -1
  75. package/dist/cliproxy/config/model-config.js +32 -32
  76. package/dist/cliproxy/config/model-config.js.map +1 -1
  77. package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -1
  78. package/dist/cliproxy/executor/arg-parser.js +26 -26
  79. package/dist/cliproxy/executor/arg-parser.js.map +1 -1
  80. package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -1
  81. package/dist/cliproxy/executor/auth-coordinator.js +15 -14
  82. package/dist/cliproxy/executor/auth-coordinator.js.map +1 -1
  83. package/dist/cliproxy/executor/browser-launch-setup.d.ts.map +1 -1
  84. package/dist/cliproxy/executor/browser-launch-setup.js +6 -2
  85. package/dist/cliproxy/executor/browser-launch-setup.js.map +1 -1
  86. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  87. package/dist/cliproxy/executor/index.js +27 -17
  88. package/dist/cliproxy/executor/index.js.map +1 -1
  89. package/dist/cliproxy/executor/lifecycle-manager.d.ts.map +1 -1
  90. package/dist/cliproxy/executor/lifecycle-manager.js +18 -16
  91. package/dist/cliproxy/executor/lifecycle-manager.js.map +1 -1
  92. package/dist/cliproxy/executor/model-warnings.d.ts.map +1 -1
  93. package/dist/cliproxy/executor/model-warnings.js +24 -13
  94. package/dist/cliproxy/executor/model-warnings.js.map +1 -1
  95. package/dist/cliproxy/executor/retry-handler.d.ts.map +1 -1
  96. package/dist/cliproxy/executor/retry-handler.js +13 -11
  97. package/dist/cliproxy/executor/retry-handler.js.map +1 -1
  98. package/dist/cliproxy/executor/session-bridge.d.ts.map +1 -1
  99. package/dist/cliproxy/executor/session-bridge.js +18 -10
  100. package/dist/cliproxy/executor/session-bridge.js.map +1 -1
  101. package/dist/cliproxy/management/remote-token-uploader.d.ts.map +1 -1
  102. package/dist/cliproxy/management/remote-token-uploader.js +11 -11
  103. package/dist/cliproxy/management/remote-token-uploader.js.map +1 -1
  104. package/dist/cliproxy/provider-capabilities.d.ts +6 -0
  105. package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
  106. package/dist/cliproxy/provider-capabilities.js +28 -3
  107. package/dist/cliproxy/provider-capabilities.js.map +1 -1
  108. package/dist/cliproxy/proxy/https-tunnel-proxy.d.ts +5 -1
  109. package/dist/cliproxy/proxy/https-tunnel-proxy.d.ts.map +1 -1
  110. package/dist/cliproxy/proxy/https-tunnel-proxy.js +22 -10
  111. package/dist/cliproxy/proxy/https-tunnel-proxy.js.map +1 -1
  112. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts +0 -12
  113. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
  114. package/dist/cliproxy/proxy/tool-sanitization-proxy.js +42 -72
  115. package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
  116. package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.d.ts +21 -0
  117. package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.d.ts.map +1 -0
  118. package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.js +154 -0
  119. package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.js.map +1 -0
  120. package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.d.ts +35 -0
  121. package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.d.ts.map +1 -0
  122. package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.js +98 -0
  123. package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.js.map +1 -0
  124. package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.d.ts +22 -0
  125. package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.d.ts.map +1 -0
  126. package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.js +111 -0
  127. package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.js.map +1 -0
  128. package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.d.ts +17 -0
  129. package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.d.ts.map +1 -0
  130. package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.js +85 -0
  131. package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.js.map +1 -0
  132. package/dist/cliproxy/quota/quota-fetcher/constants.d.ts +25 -0
  133. package/dist/cliproxy/quota/quota-fetcher/constants.d.ts.map +1 -0
  134. package/dist/cliproxy/quota/quota-fetcher/constants.js +31 -0
  135. package/dist/cliproxy/quota/quota-fetcher/constants.js.map +1 -0
  136. package/dist/cliproxy/quota/quota-fetcher/http-client.d.ts +29 -0
  137. package/dist/cliproxy/quota/quota-fetcher/http-client.d.ts.map +1 -0
  138. package/dist/cliproxy/quota/quota-fetcher/http-client.js +199 -0
  139. package/dist/cliproxy/quota/quota-fetcher/http-client.js.map +1 -0
  140. package/dist/cliproxy/quota/quota-fetcher/project-lookup.d.ts +16 -0
  141. package/dist/cliproxy/quota/quota-fetcher/project-lookup.d.ts.map +1 -0
  142. package/dist/cliproxy/quota/quota-fetcher/project-lookup.js +89 -0
  143. package/dist/cliproxy/quota/quota-fetcher/project-lookup.js.map +1 -0
  144. package/dist/cliproxy/quota/quota-fetcher/status-classifier.d.ts +29 -0
  145. package/dist/cliproxy/quota/quota-fetcher/status-classifier.d.ts.map +1 -0
  146. package/dist/cliproxy/quota/quota-fetcher/status-classifier.js +168 -0
  147. package/dist/cliproxy/quota/quota-fetcher/status-classifier.js.map +1 -0
  148. package/dist/cliproxy/quota/quota-fetcher/types.d.ts +165 -0
  149. package/dist/cliproxy/quota/quota-fetcher/types.d.ts.map +1 -0
  150. package/dist/cliproxy/quota/quota-fetcher/types.js +9 -0
  151. package/dist/cliproxy/quota/quota-fetcher/types.js.map +1 -0
  152. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
  153. package/dist/cliproxy/quota/quota-fetcher-claude.js +14 -3
  154. package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
  155. package/dist/cliproxy/quota/quota-fetcher-codex.d.ts.map +1 -1
  156. package/dist/cliproxy/quota/quota-fetcher-codex.js +36 -9
  157. package/dist/cliproxy/quota/quota-fetcher-codex.js.map +1 -1
  158. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.d.ts +26 -0
  159. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.d.ts.map +1 -0
  160. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.js +132 -0
  161. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.js.map +1 -0
  162. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.d.ts +23 -0
  163. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.d.ts.map +1 -0
  164. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.js +54 -0
  165. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.js.map +1 -0
  166. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.d.ts +26 -0
  167. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.d.ts.map +1 -0
  168. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.js +29 -0
  169. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.js.map +1 -0
  170. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.d.ts +61 -0
  171. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.d.ts.map +1 -0
  172. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.js +259 -0
  173. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.js.map +1 -0
  174. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.d.ts +20 -0
  175. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.d.ts.map +1 -0
  176. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.js +38 -0
  177. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.js.map +1 -0
  178. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.d.ts +82 -0
  179. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.d.ts.map +1 -0
  180. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.js +263 -0
  181. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.js.map +1 -0
  182. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.d.ts +46 -0
  183. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.d.ts.map +1 -0
  184. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.js +188 -0
  185. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.js.map +1 -0
  186. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.d.ts +35 -0
  187. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.d.ts.map +1 -0
  188. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.js +65 -0
  189. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.js.map +1 -0
  190. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.d.ts +37 -0
  191. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.d.ts.map +1 -0
  192. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.js +117 -0
  193. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.js.map +1 -0
  194. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.d.ts +31 -0
  195. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.d.ts.map +1 -0
  196. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.js +77 -0
  197. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.js.map +1 -0
  198. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.d.ts +114 -0
  199. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.d.ts.map +1 -0
  200. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.js +10 -0
  201. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.js.map +1 -0
  202. package/dist/cliproxy/quota/quota-fetcher-gemini-cli.d.ts +13 -58
  203. package/dist/cliproxy/quota/quota-fetcher-gemini-cli.d.ts.map +1 -1
  204. package/dist/cliproxy/quota/quota-fetcher-gemini-cli.js +20 -819
  205. package/dist/cliproxy/quota/quota-fetcher-gemini-cli.js.map +1 -1
  206. package/dist/cliproxy/quota/quota-fetcher-ghcp.d.ts.map +1 -1
  207. package/dist/cliproxy/quota/quota-fetcher-ghcp.js +19 -4
  208. package/dist/cliproxy/quota/quota-fetcher-ghcp.js.map +1 -1
  209. package/dist/cliproxy/quota/quota-fetcher.d.ts +12 -108
  210. package/dist/cliproxy/quota/quota-fetcher.d.ts.map +1 -1
  211. package/dist/cliproxy/quota/quota-fetcher.js +23 -766
  212. package/dist/cliproxy/quota/quota-fetcher.js.map +1 -1
  213. package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
  214. package/dist/cliproxy/quota/quota-manager.js +7 -3
  215. package/dist/cliproxy/quota/quota-manager.js.map +1 -1
  216. package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
  217. package/dist/cliproxy/routing/routing-strategy.js +11 -3
  218. package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
  219. package/dist/commands/api-command/create-command.d.ts.map +1 -1
  220. package/dist/commands/api-command/create-command.js +17 -8
  221. package/dist/commands/api-command/create-command.js.map +1 -1
  222. package/dist/commands/bar/bar-server-probe.d.ts +16 -3
  223. package/dist/commands/bar/bar-server-probe.d.ts.map +1 -1
  224. package/dist/commands/bar/bar-server-probe.js +83 -18
  225. package/dist/commands/bar/bar-server-probe.js.map +1 -1
  226. package/dist/commands/bar/help-subcommand.d.ts.map +1 -1
  227. package/dist/commands/bar/help-subcommand.js +3 -2
  228. package/dist/commands/bar/help-subcommand.js.map +1 -1
  229. package/dist/commands/bar/index.d.ts.map +1 -1
  230. package/dist/commands/bar/index.js +1 -0
  231. package/dist/commands/bar/index.js.map +1 -1
  232. package/dist/commands/bar/install-subcommand.d.ts +4 -10
  233. package/dist/commands/bar/install-subcommand.d.ts.map +1 -1
  234. package/dist/commands/bar/install-subcommand.js +44 -53
  235. package/dist/commands/bar/install-subcommand.js.map +1 -1
  236. package/dist/commands/bar/launch-subcommand.d.ts +11 -1
  237. package/dist/commands/bar/launch-subcommand.d.ts.map +1 -1
  238. package/dist/commands/bar/launch-subcommand.js +82 -15
  239. package/dist/commands/bar/launch-subcommand.js.map +1 -1
  240. package/dist/commands/cliproxy/help-subcommand.js +5 -5
  241. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  242. package/dist/commands/cliproxy/index.d.ts.map +1 -1
  243. package/dist/commands/cliproxy/index.js +7 -2
  244. package/dist/commands/cliproxy/index.js.map +1 -1
  245. package/dist/commands/cliproxy/pool-subcommand.d.ts.map +1 -1
  246. package/dist/commands/cliproxy/pool-subcommand.js +4 -2
  247. package/dist/commands/cliproxy/pool-subcommand.js.map +1 -1
  248. package/dist/commands/cliproxy/proxy-lifecycle-subcommand.d.ts +1 -1
  249. package/dist/commands/cliproxy/proxy-lifecycle-subcommand.d.ts.map +1 -1
  250. package/dist/commands/cliproxy/proxy-lifecycle-subcommand.js +13 -1
  251. package/dist/commands/cliproxy/proxy-lifecycle-subcommand.js.map +1 -1
  252. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.d.ts +26 -0
  253. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.d.ts.map +1 -0
  254. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.js +82 -0
  255. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.js.map +1 -0
  256. package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.d.ts +41 -0
  257. package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.d.ts.map +1 -0
  258. package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.js +202 -0
  259. package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.js.map +1 -0
  260. package/dist/commands/cliproxy/quota-subcommand/format-helpers.d.ts +32 -0
  261. package/dist/commands/cliproxy/quota-subcommand/format-helpers.d.ts.map +1 -0
  262. package/dist/commands/cliproxy/quota-subcommand/format-helpers.js +90 -0
  263. package/dist/commands/cliproxy/quota-subcommand/format-helpers.js.map +1 -0
  264. package/dist/commands/cliproxy/quota-subcommand/handlers.d.ts +25 -0
  265. package/dist/commands/cliproxy/quota-subcommand/handlers.d.ts.map +1 -0
  266. package/dist/commands/cliproxy/quota-subcommand/handlers.js +245 -0
  267. package/dist/commands/cliproxy/quota-subcommand/handlers.js.map +1 -0
  268. package/dist/commands/cliproxy/quota-subcommand/profile-args.d.ts +10 -0
  269. package/dist/commands/cliproxy/quota-subcommand/profile-args.d.ts.map +1 -0
  270. package/dist/commands/cliproxy/quota-subcommand/profile-args.js +37 -0
  271. package/dist/commands/cliproxy/quota-subcommand/profile-args.js.map +1 -0
  272. package/dist/commands/cliproxy/quota-subcommand/provider-runtime.d.ts +12 -0
  273. package/dist/commands/cliproxy/quota-subcommand/provider-runtime.d.ts.map +1 -0
  274. package/dist/commands/cliproxy/quota-subcommand/provider-runtime.js +64 -0
  275. package/dist/commands/cliproxy/quota-subcommand/provider-runtime.js.map +1 -0
  276. package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.d.ts +27 -0
  277. package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.d.ts.map +1 -0
  278. package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.js +74 -0
  279. package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.js.map +1 -0
  280. package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.d.ts +10 -0
  281. package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.d.ts.map +1 -0
  282. package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.js +46 -0
  283. package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.js.map +1 -0
  284. package/dist/commands/cliproxy/quota-subcommand/sections/claude.d.ts +14 -0
  285. package/dist/commands/cliproxy/quota-subcommand/sections/claude.d.ts.map +1 -0
  286. package/dist/commands/cliproxy/quota-subcommand/sections/claude.js +68 -0
  287. package/dist/commands/cliproxy/quota-subcommand/sections/claude.js.map +1 -0
  288. package/dist/commands/cliproxy/quota-subcommand/sections/codex.d.ts +14 -0
  289. package/dist/commands/cliproxy/quota-subcommand/sections/codex.d.ts.map +1 -0
  290. package/dist/commands/cliproxy/quota-subcommand/sections/codex.js +82 -0
  291. package/dist/commands/cliproxy/quota-subcommand/sections/codex.js.map +1 -0
  292. package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.d.ts +14 -0
  293. package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.d.ts.map +1 -0
  294. package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.js +61 -0
  295. package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.js.map +1 -0
  296. package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.d.ts +13 -0
  297. package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.d.ts.map +1 -0
  298. package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.js +63 -0
  299. package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.js.map +1 -0
  300. package/dist/commands/cliproxy/quota-subcommand/test-exports.d.ts +19 -0
  301. package/dist/commands/cliproxy/quota-subcommand/test-exports.d.ts.map +1 -0
  302. package/dist/commands/cliproxy/quota-subcommand/test-exports.js +22 -0
  303. package/dist/commands/cliproxy/quota-subcommand/test-exports.js.map +1 -0
  304. package/dist/commands/cliproxy/quota-subcommand/types.d.ts +42 -0
  305. package/dist/commands/cliproxy/quota-subcommand/types.d.ts.map +1 -0
  306. package/dist/commands/cliproxy/quota-subcommand/types.js +9 -0
  307. package/dist/commands/cliproxy/quota-subcommand/types.js.map +1 -0
  308. package/dist/commands/cliproxy/quota-subcommand.d.ts +14 -36
  309. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  310. package/dist/commands/cliproxy/quota-subcommand.js +21 -872
  311. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  312. package/dist/commands/command-catalog.js +1 -1
  313. package/dist/commands/command-catalog.js.map +1 -1
  314. package/dist/commands/config-channels-command.d.ts +1 -1
  315. package/dist/commands/config-channels-command.d.ts.map +1 -1
  316. package/dist/commands/config-channels-command.js +3 -3
  317. package/dist/commands/config-channels-command.js.map +1 -1
  318. package/dist/commands/config-command-options.d.ts.map +1 -1
  319. package/dist/commands/config-command-options.js +11 -2
  320. package/dist/commands/config-command-options.js.map +1 -1
  321. package/dist/commands/persist-command/arg-parsing.d.ts +14 -0
  322. package/dist/commands/persist-command/arg-parsing.d.ts.map +1 -0
  323. package/dist/commands/persist-command/arg-parsing.js +84 -0
  324. package/dist/commands/persist-command/arg-parsing.js.map +1 -0
  325. package/dist/commands/persist-command/backup-rotation.d.ts +23 -0
  326. package/dist/commands/persist-command/backup-rotation.d.ts.map +1 -0
  327. package/dist/commands/persist-command/backup-rotation.js +265 -0
  328. package/dist/commands/persist-command/backup-rotation.js.map +1 -0
  329. package/dist/commands/persist-command/handler.d.ts +10 -0
  330. package/dist/commands/persist-command/handler.d.ts.map +1 -0
  331. package/dist/commands/persist-command/handler.js +267 -0
  332. package/dist/commands/persist-command/handler.js.map +1 -0
  333. package/dist/commands/persist-command/help.d.ts +9 -0
  334. package/dist/commands/persist-command/help.d.ts.map +1 -0
  335. package/dist/commands/persist-command/help.js +86 -0
  336. package/dist/commands/persist-command/help.js.map +1 -0
  337. package/dist/commands/persist-command/receipt.d.ts +13 -0
  338. package/dist/commands/persist-command/receipt.d.ts.map +1 -0
  339. package/dist/commands/persist-command/receipt.js +102 -0
  340. package/dist/commands/persist-command/receipt.js.map +1 -0
  341. package/dist/commands/persist-command/secret-detection.d.ts +11 -0
  342. package/dist/commands/persist-command/secret-detection.d.ts.map +1 -0
  343. package/dist/commands/persist-command/secret-detection.js +54 -0
  344. package/dist/commands/persist-command/secret-detection.js.map +1 -0
  345. package/dist/commands/persist-command/secure-file.d.ts +21 -0
  346. package/dist/commands/persist-command/secure-file.d.ts.map +1 -0
  347. package/dist/commands/persist-command/secure-file.js +231 -0
  348. package/dist/commands/persist-command/secure-file.js.map +1 -0
  349. package/dist/commands/persist-command/types.d.ts +42 -0
  350. package/dist/commands/persist-command/types.d.ts.map +1 -0
  351. package/dist/commands/persist-command/types.js +34 -0
  352. package/dist/commands/persist-command/types.js.map +1 -0
  353. package/dist/commands/persist-command.d.ts +7 -2
  354. package/dist/commands/persist-command.d.ts.map +1 -1
  355. package/dist/commands/persist-command.js +17 -933
  356. package/dist/commands/persist-command.js.map +1 -1
  357. package/dist/commands/proxy-command.d.ts.map +1 -1
  358. package/dist/commands/proxy-command.js +7 -1
  359. package/dist/commands/proxy-command.js.map +1 -1
  360. package/dist/commands/setup-command.d.ts.map +1 -1
  361. package/dist/commands/setup-command.js +11 -1
  362. package/dist/commands/setup-command.js.map +1 -1
  363. package/dist/commands/tokens-command.d.ts.map +1 -1
  364. package/dist/commands/tokens-command.js +6 -0
  365. package/dist/commands/tokens-command.js.map +1 -1
  366. package/dist/config/config-loader-facade.d.ts +1 -1
  367. package/dist/config/config-loader-facade.d.ts.map +1 -1
  368. package/dist/config/config-loader-facade.js +3 -1
  369. package/dist/config/config-loader-facade.js.map +1 -1
  370. package/dist/config/loader/config-getters.d.ts +16 -0
  371. package/dist/config/loader/config-getters.d.ts.map +1 -1
  372. package/dist/config/loader/config-getters.js +33 -1
  373. package/dist/config/loader/config-getters.js.map +1 -1
  374. package/dist/config/loader/defaults-merger.d.ts.map +1 -1
  375. package/dist/config/loader/defaults-merger.js +4 -0
  376. package/dist/config/loader/defaults-merger.js.map +1 -1
  377. package/dist/config/loader/yaml-serializer.d.ts.map +1 -1
  378. package/dist/config/loader/yaml-serializer.js +13 -0
  379. package/dist/config/loader/yaml-serializer.js.map +1 -1
  380. package/dist/config/schemas/index.d.ts +2 -0
  381. package/dist/config/schemas/index.d.ts.map +1 -1
  382. package/dist/config/schemas/index.js +5 -1
  383. package/dist/config/schemas/index.js.map +1 -1
  384. package/dist/config/schemas/runtime.d.ts +57 -0
  385. package/dist/config/schemas/runtime.d.ts.map +1 -0
  386. package/dist/config/schemas/runtime.js +51 -0
  387. package/dist/config/schemas/runtime.js.map +1 -0
  388. package/dist/config/schemas/unified-config.d.ts +3 -0
  389. package/dist/config/schemas/unified-config.d.ts.map +1 -1
  390. package/dist/config/schemas/unified-config.js.map +1 -1
  391. package/dist/config/unified-config-loader.d.ts +1 -1
  392. package/dist/config/unified-config-loader.d.ts.map +1 -1
  393. package/dist/config/unified-config-loader.js +25 -13
  394. package/dist/config/unified-config-loader.js.map +1 -1
  395. package/dist/copilot/copilot-executor.js +25 -25
  396. package/dist/copilot/copilot-executor.js.map +1 -1
  397. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  398. package/dist/cursor/cursor-daemon-entry.js +34 -9
  399. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  400. package/dist/cursor/cursor-daemon.d.ts.map +1 -1
  401. package/dist/cursor/cursor-daemon.js +1 -0
  402. package/dist/cursor/cursor-daemon.js.map +1 -1
  403. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
  404. package/dist/cursor/cursor-profile-executor.js +18 -17
  405. package/dist/cursor/cursor-profile-executor.js.map +1 -1
  406. package/dist/delegation/delegation-handler.d.ts.map +1 -1
  407. package/dist/delegation/delegation-handler.js +29 -23
  408. package/dist/delegation/delegation-handler.js.map +1 -1
  409. package/dist/delegation/headless-executor.d.ts +1 -0
  410. package/dist/delegation/headless-executor.d.ts.map +1 -1
  411. package/dist/delegation/headless-executor.js +36 -15
  412. package/dist/delegation/headless-executor.js.map +1 -1
  413. package/dist/delegation/session-manager.d.ts.map +1 -1
  414. package/dist/delegation/session-manager.js +12 -4
  415. package/dist/delegation/session-manager.js.map +1 -1
  416. package/dist/dispatcher/cli-argument-parser.d.ts +1 -1
  417. package/dist/dispatcher/cli-argument-parser.d.ts.map +1 -1
  418. package/dist/dispatcher/cli-argument-parser.js +24 -23
  419. package/dist/dispatcher/cli-argument-parser.js.map +1 -1
  420. package/dist/dispatcher/flows/cliproxy-flow.d.ts.map +1 -1
  421. package/dist/dispatcher/flows/cliproxy-flow.js +12 -15
  422. package/dist/dispatcher/flows/cliproxy-flow.js.map +1 -1
  423. package/dist/dispatcher/flows/copilot-flow.js +1 -1
  424. package/dist/dispatcher/flows/copilot-flow.js.map +1 -1
  425. package/dist/dispatcher/flows/cursor-flow.js +1 -1
  426. package/dist/dispatcher/flows/cursor-flow.js.map +1 -1
  427. package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -1
  428. package/dist/dispatcher/flows/settings-flow.js +32 -29
  429. package/dist/dispatcher/flows/settings-flow.js.map +1 -1
  430. package/dist/dispatcher/pre-dispatch.d.ts.map +1 -1
  431. package/dist/dispatcher/pre-dispatch.js +26 -10
  432. package/dist/dispatcher/pre-dispatch.js.map +1 -1
  433. package/dist/dispatcher/profile-resolver.d.ts +1 -1
  434. package/dist/dispatcher/profile-resolver.d.ts.map +1 -1
  435. package/dist/dispatcher/profile-resolver.js +36 -23
  436. package/dist/dispatcher/profile-resolver.js.map +1 -1
  437. package/dist/docker/supervisord-lifecycle.d.ts.map +1 -1
  438. package/dist/docker/supervisord-lifecycle.js +5 -1
  439. package/dist/docker/supervisord-lifecycle.js.map +1 -1
  440. package/dist/errors/error-types.d.ts +26 -22
  441. package/dist/errors/error-types.d.ts.map +1 -1
  442. package/dist/errors/error-types.js +15 -12
  443. package/dist/errors/error-types.js.map +1 -1
  444. package/dist/errors/exit-codes.d.ts +20 -13
  445. package/dist/errors/exit-codes.d.ts.map +1 -1
  446. package/dist/errors/exit-codes.js +32 -28
  447. package/dist/errors/exit-codes.js.map +1 -1
  448. package/dist/glmt/delta-accumulator.d.ts +1 -0
  449. package/dist/glmt/delta-accumulator.d.ts.map +1 -1
  450. package/dist/glmt/delta-accumulator.js +12 -4
  451. package/dist/glmt/delta-accumulator.js.map +1 -1
  452. package/dist/glmt/glmt-proxy.d.ts.map +1 -1
  453. package/dist/glmt/glmt-proxy.js +39 -10
  454. package/dist/glmt/glmt-proxy.js.map +1 -1
  455. package/dist/glmt/glmt-transformer.d.ts.map +1 -1
  456. package/dist/glmt/glmt-transformer.js +1 -4
  457. package/dist/glmt/glmt-transformer.js.map +1 -1
  458. package/dist/glmt/pipeline/request-transformer.d.ts.map +1 -1
  459. package/dist/glmt/pipeline/request-transformer.js +5 -1
  460. package/dist/glmt/pipeline/request-transformer.js.map +1 -1
  461. package/dist/glmt/pipeline/response-builder.d.ts.map +1 -1
  462. package/dist/glmt/pipeline/response-builder.js +7 -3
  463. package/dist/glmt/pipeline/response-builder.js.map +1 -1
  464. package/dist/glmt/pipeline/stream-parser.d.ts.map +1 -1
  465. package/dist/glmt/pipeline/stream-parser.js +11 -5
  466. package/dist/glmt/pipeline/stream-parser.js.map +1 -1
  467. package/dist/glmt/pipeline/tool-call-handler.d.ts.map +1 -1
  468. package/dist/glmt/pipeline/tool-call-handler.js +7 -1
  469. package/dist/glmt/pipeline/tool-call-handler.js.map +1 -1
  470. package/dist/glmt/sse-parser.d.ts +1 -0
  471. package/dist/glmt/sse-parser.d.ts.map +1 -1
  472. package/dist/glmt/sse-parser.js +7 -3
  473. package/dist/glmt/sse-parser.js.map +1 -1
  474. package/dist/management/checks/cliproxy-check.d.ts.map +1 -1
  475. package/dist/management/checks/cliproxy-check.js +15 -1
  476. package/dist/management/checks/cliproxy-check.js.map +1 -1
  477. package/dist/management/checks/config-check.d.ts.map +1 -1
  478. package/dist/management/checks/config-check.js +4 -1
  479. package/dist/management/checks/config-check.js.map +1 -1
  480. package/dist/management/checks/profile-check.d.ts.map +1 -1
  481. package/dist/management/checks/profile-check.js +10 -6
  482. package/dist/management/checks/profile-check.js.map +1 -1
  483. package/dist/management/doctor.d.ts +7 -0
  484. package/dist/management/doctor.d.ts.map +1 -1
  485. package/dist/management/doctor.js +31 -9
  486. package/dist/management/doctor.js.map +1 -1
  487. package/dist/management/shared-manager/fs-helpers.d.ts +69 -0
  488. package/dist/management/shared-manager/fs-helpers.d.ts.map +1 -0
  489. package/dist/management/shared-manager/fs-helpers.js +241 -0
  490. package/dist/management/shared-manager/fs-helpers.js.map +1 -0
  491. package/dist/management/shared-manager/migrations.d.ts +21 -0
  492. package/dist/management/shared-manager/migrations.d.ts.map +1 -0
  493. package/dist/management/shared-manager/migrations.js +187 -0
  494. package/dist/management/shared-manager/migrations.js.map +1 -0
  495. package/dist/management/shared-manager/orchestrator.d.ts +87 -0
  496. package/dist/management/shared-manager/orchestrator.d.ts.map +1 -0
  497. package/dist/management/shared-manager/orchestrator.js +161 -0
  498. package/dist/management/shared-manager/orchestrator.js.map +1 -0
  499. package/dist/management/shared-manager/plugin-layout-internals.d.ts +42 -0
  500. package/dist/management/shared-manager/plugin-layout-internals.d.ts.map +1 -0
  501. package/dist/management/shared-manager/plugin-layout-internals.js +192 -0
  502. package/dist/management/shared-manager/plugin-layout-internals.js.map +1 -0
  503. package/dist/management/shared-manager/plugin-metadata-normalizer.d.ts +53 -0
  504. package/dist/management/shared-manager/plugin-metadata-normalizer.d.ts.map +1 -0
  505. package/dist/management/shared-manager/plugin-metadata-normalizer.js +253 -0
  506. package/dist/management/shared-manager/plugin-metadata-normalizer.js.map +1 -0
  507. package/dist/management/shared-manager/project-context-sync.d.ts +36 -0
  508. package/dist/management/shared-manager/project-context-sync.d.ts.map +1 -0
  509. package/dist/management/shared-manager/project-context-sync.js +204 -0
  510. package/dist/management/shared-manager/project-context-sync.js.map +1 -0
  511. package/dist/management/shared-manager/project-memory-sync.d.ts +21 -0
  512. package/dist/management/shared-manager/project-memory-sync.d.ts.map +1 -0
  513. package/dist/management/shared-manager/project-memory-sync.js +113 -0
  514. package/dist/management/shared-manager/project-memory-sync.js.map +1 -0
  515. package/dist/management/shared-manager/shared-dir-linker.d.ts +41 -0
  516. package/dist/management/shared-manager/shared-dir-linker.d.ts.map +1 -0
  517. package/dist/management/shared-manager/shared-dir-linker.js +227 -0
  518. package/dist/management/shared-manager/shared-dir-linker.js.map +1 -0
  519. package/dist/management/shared-manager/symlink-helpers.d.ts +61 -0
  520. package/dist/management/shared-manager/symlink-helpers.d.ts.map +1 -0
  521. package/dist/management/shared-manager/symlink-helpers.js +243 -0
  522. package/dist/management/shared-manager/symlink-helpers.js.map +1 -0
  523. package/dist/management/shared-manager/types.d.ts +45 -0
  524. package/dist/management/shared-manager/types.d.ts.map +1 -0
  525. package/dist/management/shared-manager/types.js +57 -0
  526. package/dist/management/shared-manager/types.js.map +1 -0
  527. package/dist/management/shared-manager.d.ts +13 -160
  528. package/dist/management/shared-manager.d.ts.map +1 -1
  529. package/dist/management/shared-manager.js +18 -1294
  530. package/dist/management/shared-manager.js.map +1 -1
  531. package/dist/proxy/proxy-daemon-entry.js +1 -1
  532. package/dist/proxy/proxy-daemon-entry.js.map +1 -1
  533. package/dist/proxy/server/messages-route.d.ts +10 -0
  534. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  535. package/dist/proxy/server/messages-route.js +34 -7
  536. package/dist/proxy/server/messages-route.js.map +1 -1
  537. package/dist/proxy/server/proxy-server.d.ts.map +1 -1
  538. package/dist/proxy/server/proxy-server.js +1 -1
  539. package/dist/proxy/server/proxy-server.js.map +1 -1
  540. package/dist/proxy/transformers/sse-stream-transformer.d.ts.map +1 -1
  541. package/dist/proxy/transformers/sse-stream-transformer.js +12 -17
  542. package/dist/proxy/transformers/sse-stream-transformer.js.map +1 -1
  543. package/dist/services/logging/index.d.ts +1 -1
  544. package/dist/services/logging/index.d.ts.map +1 -1
  545. package/dist/services/logging/index.js +6 -1
  546. package/dist/services/logging/index.js.map +1 -1
  547. package/dist/services/logging/log-context.d.ts +27 -2
  548. package/dist/services/logging/log-context.d.ts.map +1 -1
  549. package/dist/services/logging/log-context.js +43 -4
  550. package/dist/services/logging/log-context.js.map +1 -1
  551. package/dist/services/logging/log-redaction.d.ts +9 -0
  552. package/dist/services/logging/log-redaction.d.ts.map +1 -1
  553. package/dist/services/logging/log-redaction.js +31 -3
  554. package/dist/services/logging/log-redaction.js.map +1 -1
  555. package/dist/services/logging/logger.js +2 -2
  556. package/dist/services/logging/logger.js.map +1 -1
  557. package/dist/shared/provider-preset-catalog.d.ts +1 -1
  558. package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
  559. package/dist/shared/provider-preset-catalog.js +21 -7
  560. package/dist/shared/provider-preset-catalog.js.map +1 -1
  561. package/dist/targets/claude-adapter.d.ts.map +1 -1
  562. package/dist/targets/claude-adapter.js +5 -0
  563. package/dist/targets/claude-adapter.js.map +1 -1
  564. package/dist/targets/codex-adapter.d.ts.map +1 -1
  565. package/dist/targets/codex-adapter.js +11 -10
  566. package/dist/targets/codex-adapter.js.map +1 -1
  567. package/dist/targets/codex-detector.d.ts.map +1 -1
  568. package/dist/targets/codex-detector.js +14 -0
  569. package/dist/targets/codex-detector.js.map +1 -1
  570. package/dist/targets/droid-adapter.d.ts.map +1 -1
  571. package/dist/targets/droid-adapter.js +12 -12
  572. package/dist/targets/droid-adapter.js.map +1 -1
  573. package/dist/ui/assets/{Trans-RG_sMDEu.js → Trans-GYzYLs2D.js} +1 -1
  574. package/dist/ui/assets/{accounts-yTXURc-q.js → accounts-DC1QuyI9.js} +1 -1
  575. package/dist/ui/assets/{alert-dialog-DjvPgzFs.js → alert-dialog-6SiedqmE.js} +1 -1
  576. package/dist/ui/assets/{api-Ck1dtNEM.js → api-3s21dbNJ.js} +1 -1
  577. package/dist/ui/assets/{auth-section-DBnY_LPz.js → auth-section-XBfNgVN4.js} +1 -1
  578. package/dist/ui/assets/{backups-section-Ci-uL4Of.js → backups-section-BidiiVlq.js} +1 -1
  579. package/dist/ui/assets/{channels-BeS9O5q0.js → channels-pfgPUDGt.js} +1 -1
  580. package/dist/ui/assets/{checkbox-DFeFDZBp.js → checkbox-CJw_-nvC.js} +1 -1
  581. package/dist/ui/assets/{claude-extension-DS5qN19Z.js → claude-extension-BIIUOvTJ.js} +1 -1
  582. package/dist/ui/assets/{cliproxy-D7HJH4mZ.js → cliproxy-Cq8OX0Pu.js} +1 -1
  583. package/dist/ui/assets/{cliproxy-ai-providers-oJQZXrtc.js → cliproxy-ai-providers-DI760ZF0.js} +1 -1
  584. package/dist/ui/assets/{cliproxy-control-panel-2mRPEcRj.js → cliproxy-control-panel-CBqvpOqj.js} +1 -1
  585. package/dist/ui/assets/{codex-D0AUQ6jA.js → codex-DL4OLBUu.js} +1 -1
  586. package/dist/ui/assets/{confirm-dialog-B37-CVuq.js → confirm-dialog-CC_Cc3EO.js} +1 -1
  587. package/dist/ui/assets/{copilot-KaaW-mko.js → copilot-D2kEhTXR.js} +1 -1
  588. package/dist/ui/assets/{cursor-BKiTgYi5.js → cursor-BashLrYk.js} +1 -1
  589. package/dist/ui/assets/{droid-DHdqGnFw.js → droid-DaKTINFL.js} +1 -1
  590. package/dist/ui/assets/{globalenv-section-SfZO97nU.js → globalenv-section-BQicL8L0.js} +1 -1
  591. package/dist/ui/assets/{health-CSRS9O0D.js → health-bRbE_ADg.js} +1 -1
  592. package/dist/ui/assets/{index-CGgavq2X.js → index-B2JEyN3d.js} +36 -36
  593. package/dist/ui/assets/{index-Cu_F55_O.js → index-BwZdl1HU.js} +1 -1
  594. package/dist/ui/assets/{index-DWUuSBUe.js → index-CgeAb1-K.js} +1 -1
  595. package/dist/ui/assets/{index-iQuEEGbH.js → index-DAQ0qIQ_.js} +1 -1
  596. package/dist/ui/assets/{index-ChTYEBCZ.js → index-O2x1grGh.js} +1 -1
  597. package/dist/ui/assets/{index-DycwEe96.js → index-WA7tK6np.js} +1 -1
  598. package/dist/ui/assets/{index-DJ66NrBH.js → index-mf2X1GwS.js} +1 -1
  599. package/dist/ui/assets/{logs-tiZ_51mo.js → logs-qrBHUJ0H.js} +1 -1
  600. package/dist/ui/assets/{masked-input-D9FVoeMA.js → masked-input-CXwQ4E-g.js} +1 -1
  601. package/dist/ui/assets/{proxy-status-widget-2k26d8pS.js → proxy-status-widget-DPz4nCzR.js} +1 -1
  602. package/dist/ui/assets/{raw-json-settings-editor-panel-CguBh93H.js → raw-json-settings-editor-panel-CcvsWVh1.js} +1 -1
  603. package/dist/ui/assets/{searchable-select-C4wShshD.js → searchable-select-EXSjNCRu.js} +1 -1
  604. package/dist/ui/assets/{separator-mvGlDdEW.js → separator-D2CTfWBQ.js} +1 -1
  605. package/dist/ui/assets/{shared-Ck0yAwbs.js → shared-DpgzhFqe.js} +1 -1
  606. package/dist/ui/assets/{table-DrUJOxKL.js → table-DwbiGRYk.js} +1 -1
  607. package/dist/ui/assets/{updates-BVHBFcq8.js → updates-D8jfIb2y.js} +1 -1
  608. package/dist/ui/assets/{use-accounts-DLtuaniS.js → use-accounts-Bwtpnx-x.js} +1 -1
  609. package/dist/ui/index.html +1 -1
  610. package/dist/utils/bar-auth-token.d.ts +4 -0
  611. package/dist/utils/bar-auth-token.d.ts.map +1 -0
  612. package/dist/utils/bar-auth-token.js +60 -0
  613. package/dist/utils/bar-auth-token.js.map +1 -0
  614. package/dist/utils/browser/browser-settings.d.ts +3 -1
  615. package/dist/utils/browser/browser-settings.d.ts.map +1 -1
  616. package/dist/utils/browser/browser-settings.js +2 -2
  617. package/dist/utils/browser/browser-settings.js.map +1 -1
  618. package/dist/utils/browser/browser-setup.d.ts.map +1 -1
  619. package/dist/utils/browser/browser-setup.js +3 -1
  620. package/dist/utils/browser/browser-setup.js.map +1 -1
  621. package/dist/utils/browser/browser-status.d.ts.map +1 -1
  622. package/dist/utils/browser/browser-status.js +4 -2
  623. package/dist/utils/browser/browser-status.js.map +1 -1
  624. package/dist/utils/fetch-proxy-setup.d.ts +3 -2
  625. package/dist/utils/fetch-proxy-setup.d.ts.map +1 -1
  626. package/dist/utils/fetch-proxy-setup.js +10 -6
  627. package/dist/utils/fetch-proxy-setup.js.map +1 -1
  628. package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
  629. package/dist/utils/image-analysis/mcp-installer.js +16 -13
  630. package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
  631. package/dist/utils/websearch/index.d.ts +1 -1
  632. package/dist/utils/websearch/index.d.ts.map +1 -1
  633. package/dist/utils/websearch/index.js +2 -1
  634. package/dist/utils/websearch/index.js.map +1 -1
  635. package/dist/utils/websearch/mcp-installer.d.ts +8 -0
  636. package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
  637. package/dist/utils/websearch/mcp-installer.js +34 -13
  638. package/dist/utils/websearch/mcp-installer.js.map +1 -1
  639. package/dist/utils/websearch-manager.d.ts +1 -1
  640. package/dist/utils/websearch-manager.d.ts.map +1 -1
  641. package/dist/utils/websearch-manager.js +2 -1
  642. package/dist/utils/websearch-manager.js.map +1 -1
  643. package/dist/web-server/middleware/request-logging-middleware.d.ts.map +1 -1
  644. package/dist/web-server/middleware/request-logging-middleware.js +14 -9
  645. package/dist/web-server/middleware/request-logging-middleware.js.map +1 -1
  646. package/dist/web-server/model-pricing.d.ts.map +1 -1
  647. package/dist/web-server/model-pricing.js +22 -2
  648. package/dist/web-server/model-pricing.js.map +1 -1
  649. package/dist/web-server/routes/bar-routes.d.ts +12 -1
  650. package/dist/web-server/routes/bar-routes.d.ts.map +1 -1
  651. package/dist/web-server/routes/bar-routes.js +22 -6
  652. package/dist/web-server/routes/bar-routes.js.map +1 -1
  653. package/dist/web-server/routes/claude-extension-routes.d.ts.map +1 -1
  654. package/dist/web-server/routes/claude-extension-routes.js +3 -2
  655. package/dist/web-server/routes/claude-extension-routes.js.map +1 -1
  656. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +1 -0
  657. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  658. package/dist/web-server/routes/cliproxy-auth-routes.js +20 -5
  659. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  660. package/dist/web-server/routes/cliproxy-stats-routes/config-routes.d.ts +16 -0
  661. package/dist/web-server/routes/cliproxy-stats-routes/config-routes.d.ts.map +1 -0
  662. package/dist/web-server/routes/cliproxy-stats-routes/config-routes.js +219 -0
  663. package/dist/web-server/routes/cliproxy-stats-routes/config-routes.js.map +1 -0
  664. package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.d.ts +12 -0
  665. package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.d.ts.map +1 -0
  666. package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.js +153 -0
  667. package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.js.map +1 -0
  668. package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.d.ts +19 -0
  669. package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.d.ts.map +1 -0
  670. package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.js +38 -0
  671. package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.js.map +1 -0
  672. package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.d.ts +13 -0
  673. package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.d.ts.map +1 -0
  674. package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.js +195 -0
  675. package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.js.map +1 -0
  676. package/dist/web-server/routes/cliproxy-stats-routes/restart-route.d.ts +17 -0
  677. package/dist/web-server/routes/cliproxy-stats-routes/restart-route.d.ts.map +1 -0
  678. package/dist/web-server/routes/cliproxy-stats-routes/restart-route.js +34 -0
  679. package/dist/web-server/routes/cliproxy-stats-routes/restart-route.js.map +1 -0
  680. package/dist/web-server/routes/cliproxy-stats-routes/router.d.ts +10 -0
  681. package/dist/web-server/routes/cliproxy-stats-routes/router.d.ts.map +1 -0
  682. package/dist/web-server/routes/cliproxy-stats-routes/router.js +245 -0
  683. package/dist/web-server/routes/cliproxy-stats-routes/router.js.map +1 -0
  684. package/dist/web-server/routes/cliproxy-stats-routes/shared.d.ts +35 -0
  685. package/dist/web-server/routes/cliproxy-stats-routes/shared.d.ts.map +1 -0
  686. package/dist/web-server/routes/cliproxy-stats-routes/shared.js +59 -0
  687. package/dist/web-server/routes/cliproxy-stats-routes/shared.js.map +1 -0
  688. package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.d.ts +44 -0
  689. package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.d.ts.map +1 -0
  690. package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.js +66 -0
  691. package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.js.map +1 -0
  692. package/dist/web-server/routes/cliproxy-stats-routes.d.ts +16 -57
  693. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  694. package/dist/web-server/routes/cliproxy-stats-routes.js +25 -926
  695. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  696. package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -1
  697. package/dist/web-server/routes/cliproxy-sync-routes.js +9 -2
  698. package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -1
  699. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -1
  700. package/dist/web-server/routes/copilot-settings-routes.js +2 -1
  701. package/dist/web-server/routes/copilot-settings-routes.js.map +1 -1
  702. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  703. package/dist/web-server/routes/cursor-routes.js +3 -1
  704. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  705. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  706. package/dist/web-server/routes/image-analysis-routes.js +2 -1
  707. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  708. package/dist/web-server/routes/index.d.ts.map +1 -1
  709. package/dist/web-server/routes/index.js +6 -0
  710. package/dist/web-server/routes/index.js.map +1 -1
  711. package/dist/web-server/routes/persist-routes.d.ts.map +1 -1
  712. package/dist/web-server/routes/persist-routes.js +8 -1
  713. package/dist/web-server/routes/persist-routes.js.map +1 -1
  714. package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
  715. package/dist/web-server/routes/proxy-routes.js +33 -5
  716. package/dist/web-server/routes/proxy-routes.js.map +1 -1
  717. package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
  718. package/dist/web-server/routes/route-helpers.js +18 -6
  719. package/dist/web-server/routes/route-helpers.js.map +1 -1
  720. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  721. package/dist/web-server/routes/settings-routes.js +7 -6
  722. package/dist/web-server/routes/settings-routes.js.map +1 -1
  723. package/dist/web-server/usage/aggregator.d.ts.map +1 -1
  724. package/dist/web-server/usage/aggregator.js +8 -8
  725. package/dist/web-server/usage/aggregator.js.map +1 -1
  726. package/dist/web-server/usage/bar-analytics.d.ts +21 -0
  727. package/dist/web-server/usage/bar-analytics.d.ts.map +1 -1
  728. package/dist/web-server/usage/bar-analytics.js +78 -9
  729. package/dist/web-server/usage/bar-analytics.js.map +1 -1
  730. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts.map +1 -1
  731. package/dist/web-server/usage/cliproxy-usage-transformer.js +9 -4
  732. package/dist/web-server/usage/cliproxy-usage-transformer.js.map +1 -1
  733. package/dist/web-server/usage/codex-local-quota-collector.d.ts +2 -2
  734. package/dist/web-server/usage/codex-local-quota-collector.d.ts.map +1 -1
  735. package/dist/web-server/usage/codex-local-quota-collector.js +39 -11
  736. package/dist/web-server/usage/codex-local-quota-collector.js.map +1 -1
  737. package/dist/web-server/usage/handlers.d.ts.map +1 -1
  738. package/dist/web-server/usage/handlers.js +1 -1
  739. package/dist/web-server/usage/handlers.js.map +1 -1
  740. package/dist/web-server/usage/native-quota-collector.d.ts +37 -9
  741. package/dist/web-server/usage/native-quota-collector.d.ts.map +1 -1
  742. package/dist/web-server/usage/native-quota-collector.js +226 -23
  743. package/dist/web-server/usage/native-quota-collector.js.map +1 -1
  744. package/package.json +1 -1
  745. package/scripts/ci-parity-gate.sh +31 -0
  746. package/scripts/generate-throw-error-baseline.js +103 -0
  747. package/scripts/github/stable-release-issue-cleanup-lib.mjs +51 -11
  748. package/scripts/hardening-inventory.js +62 -4
  749. package/scripts/maintainability-metrics.js +356 -0
@@ -7,940 +7,24 @@
7
7
  *
8
8
  * Supports API, CLIProxy, Copilot, account, and default flows
9
9
  * through the shared Claude extension setup resolver.
10
+ *
11
+ * NOTE: This file is a thin barrel. Implementation lives in focused
12
+ * submodules under ./persist-command/. Only `handlePersistCommand` is
13
+ * part of the public surface; everything else is module-private to
14
+ * the submodule that owns it.
10
15
  */
11
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
- if (k2 === undefined) k2 = k;
13
- var desc = Object.getOwnPropertyDescriptor(m, k);
14
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
- desc = { enumerable: true, get: function() { return m[k]; } };
16
- }
17
- Object.defineProperty(o, k2, desc);
18
- }) : (function(o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- o[k2] = m[k];
21
- }));
22
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
- Object.defineProperty(o, "default", { enumerable: true, value: v });
24
- }) : function(o, v) {
25
- o["default"] = v;
26
- });
27
- var __importStar = (this && this.__importStar) || function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
16
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.handlePersistCommand = void 0;
39
- const fs = __importStar(require("fs"));
40
- const path = __importStar(require("path"));
41
- const os = __importStar(require("os"));
42
- const lockfile = __importStar(require("proper-lockfile"));
43
- const ui_1 = require("../utils/ui");
44
- const prompt_1 = require("../utils/prompt");
45
- const profile_detector_1 = __importDefault(require("../auth/profile-detector"));
46
- const claude_config_path_1 = require("../utils/claude-config-path");
47
- const arg_extractor_1 = require("./arg-extractor");
48
- const claude_extension_setup_1 = require("../shared/claude-extension-setup");
49
- const stale_codex_translator_settings_1 = require("../shared/stale-codex-translator-settings");
50
- const PERSIST_KNOWN_FLAGS = [
51
- '--yes',
52
- '-y',
53
- '--list-backups',
54
- '--restore',
55
- '--permission-mode',
56
- '--dangerously-skip-permissions',
57
- '--auto-approve',
58
- '--help',
59
- '-h',
17
+ exports.handlePersistCommand = exports.VALID_PERMISSION_MODES = void 0;
18
+ // Canonical permission-mode list. Mirrored as an export here so that
19
+ // characterization tests in tests/unit/commands/persist-command.test.js can
20
+ // grep the literal declaration in this file's source text. Runtime consumers
21
+ // import from ./persist-command/types, which owns the same list.
22
+ exports.VALID_PERMISSION_MODES = [
23
+ 'default',
24
+ 'plan',
25
+ 'acceptEdits',
26
+ 'bypassPermissions',
60
27
  ];
61
- const VALID_PERMISSION_MODES = ['default', 'plan', 'acceptEdits', 'bypassPermissions'];
62
- const PERSIST_LOCK_STALE_MS = 10000;
63
- const PERSIST_LOCK_RETRIES = 5;
64
- const PERSIST_LOCK_RETRY_MIN_MS = 100;
65
- const PERSIST_LOCK_RETRY_MAX_MS = 500;
66
- const NATIVE_CODEX_TARGETS = ['ccsxp', 'ccs codex --target codex'];
67
- function isPermissionMode(value) {
68
- return VALID_PERMISSION_MODES.includes(value);
69
- }
70
- function isKnownPersistFlagToken(token) {
71
- return PERSIST_KNOWN_FLAGS.some((flag) => token === flag || token.startsWith(`${flag}=`));
72
- }
73
- function resolvePermissionMode(parsedArgs) {
74
- if (!parsedArgs.dangerouslySkipPermissions) {
75
- return parsedArgs.permissionMode;
76
- }
77
- if (parsedArgs.permissionMode && parsedArgs.permissionMode !== 'bypassPermissions') {
78
- throw new Error('--dangerously-skip-permissions conflicts with --permission-mode. Use bypassPermissions or remove one flag.');
79
- }
80
- return 'bypassPermissions';
81
- }
82
- /** Parse command line arguments */
83
- function parseArgs(args) {
84
- const result = {
85
- yes: (0, arg_extractor_1.hasAnyFlag)(args, ['--yes', '-y']),
86
- listBackups: (0, arg_extractor_1.hasAnyFlag)(args, ['--list-backups']),
87
- };
88
- const restoreOption = (0, arg_extractor_1.extractOption)(args, ['--restore']);
89
- if (restoreOption.found) {
90
- result.restore = restoreOption.missingValue ? true : restoreOption.value || true;
91
- }
92
- const permissionModeOption = (0, arg_extractor_1.extractOption)(restoreOption.remainingArgs, ['--permission-mode'], {
93
- knownFlags: PERSIST_KNOWN_FLAGS,
94
- });
95
- if (permissionModeOption.found) {
96
- if (permissionModeOption.missingValue) {
97
- result.parseError = 'Missing value for --permission-mode';
98
- }
99
- else if (permissionModeOption.value) {
100
- if (!isPermissionMode(permissionModeOption.value)) {
101
- result.parseError = `Invalid --permission-mode "${permissionModeOption.value}". Valid modes: ${VALID_PERMISSION_MODES.join(', ')}`;
102
- }
103
- else {
104
- result.permissionMode = permissionModeOption.value;
105
- }
106
- }
107
- }
108
- result.dangerouslySkipPermissions = (0, arg_extractor_1.hasAnyFlag)(permissionModeOption.remainingArgs, [
109
- '--dangerously-skip-permissions',
110
- '--auto-approve',
111
- ]);
112
- const unknownFlags = permissionModeOption.remainingArgs.filter((arg) => arg.startsWith('-') && !isKnownPersistFlagToken(arg));
113
- if (!result.parseError && unknownFlags.length > 0) {
114
- const unknownList = unknownFlags.map((flag) => `"${flag}"`).join(', ');
115
- result.parseError = `Unknown option(s): ${unknownList}. Run 'ccs persist --help' for usage.`;
116
- }
117
- if (!result.parseError && result.listBackups && result.restore) {
118
- result.parseError = '--list-backups cannot be used with --restore';
119
- }
120
- if (!result.parseError &&
121
- (result.listBackups || result.restore) &&
122
- (result.permissionMode || result.dangerouslySkipPermissions)) {
123
- result.parseError =
124
- 'Permission flags are not valid with backup operations. Use them only with ccs persist <profile>.';
125
- }
126
- for (const arg of permissionModeOption.remainingArgs) {
127
- if (!arg.startsWith('-')) {
128
- result.profile = arg;
129
- break;
130
- }
131
- }
132
- return result;
133
- }
134
- function formatDisplayPath(filePath) {
135
- const defaultClaudeDir = path.join(os.homedir(), '.claude');
136
- const claudeDir = (0, claude_config_path_1.getClaudeConfigDir)();
137
- // Keep real path when user overrides Claude directory.
138
- if (path.resolve(claudeDir) !== path.resolve(defaultClaudeDir)) {
139
- return filePath;
140
- }
141
- if (filePath === claudeDir) {
142
- return '~/.claude';
143
- }
144
- const claudePrefix = `${claudeDir}${path.sep}`;
145
- if (filePath.startsWith(claudePrefix)) {
146
- return filePath.replace(claudePrefix, '~/.claude/');
147
- }
148
- return filePath;
149
- }
150
- function getClaudeSettingsDisplayPath() {
151
- return formatDisplayPath((0, claude_config_path_1.getClaudeSettingsPath)());
152
- }
153
- async function pathExists(filePath) {
154
- try {
155
- await fs.promises.access(filePath, fs.constants.F_OK);
156
- return true;
157
- }
158
- catch {
159
- return false;
160
- }
161
- }
162
- async function isSymlinkAsync(filePath) {
163
- try {
164
- const stats = await fs.promises.lstat(filePath);
165
- return stats.isSymbolicLink();
166
- }
167
- catch {
168
- return false;
169
- }
170
- }
171
- function getNoFollowFlag() {
172
- const candidate = fs.constants['O_NOFOLLOW'];
173
- if (process.platform !== 'win32' && typeof candidate === 'number') {
174
- return candidate;
175
- }
176
- return 0;
177
- }
178
- function createSymlinkReadError(filePath) {
179
- const error = new Error(`Refusing to read symlinked file for security: ${formatDisplayPath(filePath)}`);
180
- error.code = 'ELOOP';
181
- return error;
182
- }
183
- async function readFileUtf8NoFollow(filePath) {
184
- if (await isSymlinkAsync(filePath)) {
185
- throw createSymlinkReadError(filePath);
186
- }
187
- const noFollowFlag = getNoFollowFlag();
188
- const flags = fs.constants.O_RDONLY | noFollowFlag;
189
- const handle = await fs.promises.open(filePath, flags);
190
- try {
191
- // Best-effort fallback for platforms without O_NOFOLLOW (notably Windows).
192
- // Re-check symlink status after open to reduce check-then-use windows.
193
- if (noFollowFlag === 0 && (await isSymlinkAsync(filePath))) {
194
- throw createSymlinkReadError(filePath);
195
- }
196
- const stats = await handle.stat();
197
- if (!stats.isFile()) {
198
- throw new Error('Path is not a regular file');
199
- }
200
- if (noFollowFlag === 0) {
201
- const latestStats = await fs.promises.stat(filePath);
202
- if (latestStats.dev !== stats.dev || latestStats.ino !== stats.ino) {
203
- throw new Error('Path changed during secure read');
204
- }
205
- }
206
- return await handle.readFile({ encoding: 'utf8' });
207
- }
208
- finally {
209
- await handle.close();
210
- }
211
- }
212
- function parseSettingsObject(content, sourceLabel) {
213
- if (!content.trim()) {
214
- return {};
215
- }
216
- const parsed = JSON.parse(content);
217
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
218
- throw new Error(`${sourceLabel} must contain a JSON object, not an array or primitive`);
219
- }
220
- return parsed;
221
- }
222
- async function withPersistSettingsLock(operation) {
223
- const settingsPath = (0, claude_config_path_1.getClaudeSettingsPath)();
224
- const settingsDir = path.dirname(settingsPath);
225
- await fs.promises.mkdir(settingsDir, { recursive: true });
226
- let release;
227
- try {
228
- release = await lockfile.lock(settingsDir, {
229
- stale: PERSIST_LOCK_STALE_MS,
230
- retries: {
231
- retries: PERSIST_LOCK_RETRIES,
232
- minTimeout: PERSIST_LOCK_RETRY_MIN_MS,
233
- maxTimeout: PERSIST_LOCK_RETRY_MAX_MS,
234
- },
235
- realpath: false,
236
- });
237
- }
238
- catch (error) {
239
- throw new Error(`Failed to lock Claude settings directory (${formatDisplayPath(settingsDir)}): ${error.message}`);
240
- }
241
- try {
242
- return await operation();
243
- }
244
- finally {
245
- if (release) {
246
- try {
247
- await release();
248
- }
249
- catch {
250
- // Best-effort release.
251
- }
252
- }
253
- }
254
- }
255
- /** Read existing Claude settings.json with validation */
256
- async function readClaudeSettings() {
257
- const settingsPath = (0, claude_config_path_1.getClaudeSettingsPath)();
258
- try {
259
- const content = await readFileUtf8NoFollow(settingsPath);
260
- return parseSettingsObject(content, 'settings.json');
261
- }
262
- catch (error) {
263
- const nodeError = error;
264
- if (nodeError.code === 'ENOENT') {
265
- return {};
266
- }
267
- if (nodeError.code === 'ELOOP') {
268
- throw new Error('settings.json is a symlink - refusing to read for security');
269
- }
270
- throw new Error(`Failed to parse settings.json: ${error.message}`);
271
- }
272
- }
273
- /** Write settings back to settings.json with atomic replace semantics. */
274
- async function writeClaudeSettings(settings) {
275
- const settingsPath = (0, claude_config_path_1.getClaudeSettingsPath)();
276
- if (await isSymlinkAsync(settingsPath)) {
277
- throw new Error('settings.json is a symlink - refusing to write for security');
278
- }
279
- const settingsDir = path.dirname(settingsPath);
280
- await fs.promises.mkdir(settingsDir, { recursive: true });
281
- const nonce = `${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
282
- const tmpPath = path.join(settingsDir, `settings.json.tmp-${nonce}`);
283
- const flags = fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | getNoFollowFlag();
284
- let handle;
285
- try {
286
- handle = await fs.promises.open(tmpPath, flags, 0o600);
287
- await handle.writeFile(JSON.stringify(settings, null, 2) + '\n', { encoding: 'utf8' });
288
- await handle.sync();
289
- }
290
- finally {
291
- if (handle) {
292
- await handle.close();
293
- }
294
- }
295
- try {
296
- await fs.promises.rename(tmpPath, settingsPath);
297
- }
298
- catch (error) {
299
- try {
300
- await fs.promises.unlink(tmpPath);
301
- }
302
- catch {
303
- // Best-effort cleanup.
304
- }
305
- throw error;
306
- }
307
- try {
308
- await fs.promises.chmod(settingsPath, 0o600);
309
- }
310
- catch {
311
- // Best-effort permission hardening.
312
- }
313
- }
314
- /** Maximum number of backups to keep (oldest are deleted) */
315
- const MAX_BACKUPS = 10;
316
- /** Create backup of settings.json with proper permissions and rotation */
317
- async function createBackup() {
318
- const settingsPath = (0, claude_config_path_1.getClaudeSettingsPath)();
319
- if (!(await pathExists(settingsPath))) {
320
- throw new Error('No settings.json to backup');
321
- }
322
- const settingsContent = await readFileUtf8NoFollow(settingsPath);
323
- const now = new Date();
324
- const timestamp = now.getFullYear().toString() +
325
- (now.getMonth() + 1).toString().padStart(2, '0') +
326
- now.getDate().toString().padStart(2, '0') +
327
- '_' +
328
- now.getHours().toString().padStart(2, '0') +
329
- now.getMinutes().toString().padStart(2, '0') +
330
- now.getSeconds().toString().padStart(2, '0');
331
- const backupPath = `${settingsPath}.backup.${timestamp}`;
332
- const flags = fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | getNoFollowFlag();
333
- let handle;
334
- try {
335
- handle = await fs.promises.open(backupPath, flags, 0o600);
336
- await handle.writeFile(settingsContent, { encoding: 'utf8' });
337
- await handle.sync();
338
- }
339
- finally {
340
- if (handle) {
341
- await handle.close();
342
- }
343
- }
344
- try {
345
- await fs.promises.chmod(backupPath, 0o600);
346
- }
347
- catch {
348
- // Best-effort permission hardening.
349
- }
350
- // Cleanup: Rotate old backups (keep only MAX_BACKUPS)
351
- cleanupOldBackups();
352
- return backupPath;
353
- }
354
- /** Remove old backups keeping only MAX_BACKUPS most recent */
355
- function cleanupOldBackups() {
356
- const backups = getBackupFiles();
357
- if (backups.length > MAX_BACKUPS) {
358
- const toDelete = backups.slice(MAX_BACKUPS);
359
- for (const backup of toDelete) {
360
- try {
361
- fs.unlinkSync(backup.path);
362
- }
363
- catch (error) {
364
- console.log((0, ui_1.warn)(`Failed to delete old backup ${formatDisplayPath(backup.path)}: ${error.message}`));
365
- }
366
- }
367
- }
368
- }
369
- function parseBackupTimestamp(timestamp) {
370
- const year = parseInt(timestamp.slice(0, 4), 10);
371
- const month = parseInt(timestamp.slice(4, 6), 10);
372
- const day = parseInt(timestamp.slice(6, 8), 10);
373
- const hour = parseInt(timestamp.slice(9, 11), 10);
374
- const minute = parseInt(timestamp.slice(11, 13), 10);
375
- const second = parseInt(timestamp.slice(13, 15), 10);
376
- const date = new Date(year, month - 1, day, hour, minute, second);
377
- if (date.getFullYear() !== year)
378
- return null;
379
- if (date.getMonth() !== month - 1)
380
- return null;
381
- if (date.getDate() !== day)
382
- return null;
383
- if (date.getHours() !== hour)
384
- return null;
385
- if (date.getMinutes() !== minute)
386
- return null;
387
- if (date.getSeconds() !== second)
388
- return null;
389
- return date;
390
- }
391
- /** Get all backup files sorted by date (newest first) */
392
- function getBackupFiles() {
393
- const settingsPath = (0, claude_config_path_1.getClaudeSettingsPath)();
394
- const dir = path.dirname(settingsPath);
395
- if (!fs.existsSync(dir)) {
396
- return [];
397
- }
398
- const backupPattern = /^settings\.json\.backup\.(\d{8}_\d{6})$/;
399
- const files = fs
400
- .readdirSync(dir)
401
- .filter((f) => backupPattern.test(f))
402
- .map((f) => {
403
- const match = f.match(backupPattern);
404
- if (!match)
405
- return null;
406
- const timestamp = match[1];
407
- const date = parseBackupTimestamp(timestamp);
408
- if (!date)
409
- return null;
410
- return {
411
- path: path.join(dir, f),
412
- timestamp,
413
- date,
414
- };
415
- })
416
- .filter((f) => f !== null)
417
- .sort((a, b) => b.date.getTime() - a.date.getTime()); // newest first
418
- return files;
419
- }
420
- /** Mask API key for display (show first 4 and last 4 chars) */
421
- function maskApiKey(key) {
422
- if (key.length <= 12) {
423
- return '****';
424
- }
425
- return `${key.slice(0, 4)}...${key.slice(-4)}`;
426
- }
427
- const SENSITIVE_ENV_PARTS = new Set([
428
- 'TOKEN',
429
- 'KEY',
430
- 'SECRET',
431
- 'PASSWORD',
432
- 'PASS',
433
- 'AUTH',
434
- 'CREDENTIAL',
435
- 'PRIVATE',
436
- 'ACCESS',
437
- 'REFRESH',
438
- 'APIKEY',
439
- ]);
440
- function splitSensitiveKeyParts(key) {
441
- const withCamelCaseBoundaries = key.replace(/([a-z0-9])([A-Z])/g, '$1_$2');
442
- return withCamelCaseBoundaries
443
- .toUpperCase()
444
- .split(/[^A-Z0-9]+/)
445
- .filter(Boolean);
446
- }
447
- function isSensitiveEnvKey(key) {
448
- const parts = splitSensitiveKeyParts(key);
449
- if (parts.some((part) => SENSITIVE_ENV_PARTS.has(part))) {
450
- return true;
451
- }
452
- const compact = parts.join('');
453
- return (compact.includes('TOKEN') ||
454
- compact.includes('APIKEY') ||
455
- compact.includes('ACCESSKEY') ||
456
- compact.includes('AUTHKEY') ||
457
- compact.includes('SECRET') ||
458
- compact.includes('PASSWORD') ||
459
- compact.includes('CREDENTIAL'));
460
- }
461
- function buildPersistReceipt(existingEnv, existingSettings, mergedSettings, resolved, resolvedPermissionMode) {
462
- const mergedEnv = typeof mergedSettings.env === 'object' &&
463
- mergedSettings.env !== null &&
464
- !Array.isArray(mergedSettings.env)
465
- ? mergedSettings.env
466
- : {};
467
- const clearedKeys = resolved.clearEnvKeys.filter((key) => Object.prototype.hasOwnProperty.call(existingEnv, key) && mergedEnv[key] === undefined);
468
- const clearedCodexTranslatorUrlKeys = clearedKeys.filter((key) => (0, stale_codex_translator_settings_1.findCodexTranslatorUrlPaths)(existingEnv[key]).length > 0);
469
- const writtenKeys = Object.entries(resolved.env)
470
- .filter(([key, value]) => existingEnv[key] !== value)
471
- .map(([key]) => key)
472
- .sort((left, right) => left.localeCompare(right));
473
- const unchangedWrittenKeys = Object.entries(resolved.env)
474
- .filter(([key, value]) => existingEnv[key] === value)
475
- .map(([key]) => key)
476
- .sort((left, right) => left.localeCompare(right));
477
- const existingPermissions = typeof existingSettings.permissions === 'object' &&
478
- existingSettings.permissions !== null &&
479
- !Array.isArray(existingSettings.permissions)
480
- ? existingSettings.permissions
481
- : {};
482
- const writtenSettings = resolvedPermissionMode && existingPermissions.defaultMode !== resolvedPermissionMode
483
- ? ['permissions.defaultMode']
484
- : [];
485
- const unchangedSettings = resolvedPermissionMode && existingPermissions.defaultMode === resolvedPermissionMode
486
- ? ['permissions.defaultMode']
487
- : [];
488
- return {
489
- clearedKeys,
490
- clearedCodexTranslatorUrlKeys,
491
- writtenKeys,
492
- unchangedWrittenKeys,
493
- writtenSettings,
494
- unchangedSettings,
495
- codexTranslatorUrlPaths: (0, stale_codex_translator_settings_1.findCodexTranslatorUrlPaths)(mergedSettings),
496
- };
497
- }
498
- function formatKeyList(keys) {
499
- return keys.length > 0 ? keys.join(', ') : 'none';
500
- }
501
- function printPersistReceipt(receipt) {
502
- console.log((0, ui_1.subheader)('Config Receipt'));
503
- console.log(` Settings: ${getClaudeSettingsDisplayPath()}`);
504
- console.log(` Cleared managed keys: ${formatKeyList(receipt.clearedKeys)}`);
505
- console.log(` Written/rewritten managed keys: ${formatKeyList(receipt.writtenKeys)}`);
506
- if (receipt.unchangedWrittenKeys.length > 0) {
507
- console.log(` Already current keys: ${formatKeyList(receipt.unchangedWrittenKeys)}`);
508
- }
509
- if (receipt.writtenSettings.length > 0 || receipt.unchangedSettings.length > 0) {
510
- console.log(` Written/rewritten managed settings: ${formatKeyList(receipt.writtenSettings)}`);
511
- if (receipt.unchangedSettings.length > 0) {
512
- console.log(` Already current settings: ${formatKeyList(receipt.unchangedSettings)}`);
513
- }
514
- }
515
- const hadCodexTranslatorCleanup = receipt.clearedCodexTranslatorUrlKeys.length > 0;
516
- if (receipt.codexTranslatorUrlPaths.length > 0) {
517
- console.log((0, ui_1.warn)(` Codex translator URL: still found at ${(0, stale_codex_translator_settings_1.formatSettingsPathList)(receipt.codexTranslatorUrlPaths)} (${stale_codex_translator_settings_1.CODEX_TRANSLATOR_URL_MARKER})`));
518
- }
519
- else {
520
- console.log((0, ui_1.ok)(' Codex translator URL: not found'));
521
- }
522
- if (hadCodexTranslatorCleanup || receipt.codexTranslatorUrlPaths.length > 0) {
523
- console.log(` Native Codex target: ${NATIVE_CODEX_TARGETS.join(' or ')}`);
524
- }
525
- }
526
- /** Resolve shared Claude settings payload for a profile */
527
- async function resolveProfileEnvVars(profileName) {
528
- const setup = await (0, claude_extension_setup_1.resolveClaudeExtensionSetup)(profileName);
529
- const typeLabel = {
530
- settings: 'API',
531
- cliproxy: 'CLIProxy',
532
- copilot: 'Copilot',
533
- account: 'Account',
534
- default: 'Default',
535
- };
536
- return {
537
- env: setup.extensionEnv,
538
- clearEnvKeys: setup.removeEnvKeys,
539
- profileType: typeLabel[setup.profileType] ?? setup.profileType,
540
- warnings: setup.warnings,
541
- notes: setup.notes,
542
- };
543
- }
544
- /** Handle --list-backups flag */
545
- async function handleListBackups() {
546
- await (0, ui_1.initUI)();
547
- const backups = getBackupFiles();
548
- if (backups.length === 0) {
549
- console.log((0, ui_1.info)('No backups found'));
550
- return;
551
- }
552
- console.log((0, ui_1.header)('Available Backups'));
553
- console.log('');
554
- backups.forEach((b, i) => {
555
- const dateStr = b.date.toLocaleString();
556
- const marker = i === 0 ? (0, ui_1.color)(' (latest)', 'success') : '';
557
- console.log(` ${(0, ui_1.color)(b.timestamp, 'command')} ${(0, ui_1.dim)(dateStr)}${marker}`);
558
- });
559
- console.log('');
560
- console.log((0, ui_1.dim)('To restore: ccs persist --restore [timestamp]'));
561
- }
562
- /** Handle --restore [timestamp] flag */
563
- async function handleRestore(timestamp, yes) {
564
- await (0, ui_1.initUI)();
565
- const backups = getBackupFiles();
566
- if (backups.length === 0) {
567
- console.log((0, ui_1.fail)('No backups found'));
568
- process.exit(1);
569
- }
570
- // Find backup to restore
571
- let backup;
572
- if (timestamp === true) {
573
- // Use latest
574
- backup = backups[0];
575
- }
576
- else {
577
- const found = backups.find((b) => b.timestamp === timestamp);
578
- if (!found) {
579
- console.log((0, ui_1.fail)(`Backup not found: ${timestamp}`));
580
- console.log('');
581
- console.log('Available backups:');
582
- backups.slice(0, 5).forEach((b) => console.log(` ${b.timestamp}`));
583
- process.exit(1);
584
- }
585
- backup = found;
586
- }
587
- console.log((0, ui_1.header)('Restore Backup'));
588
- console.log('');
589
- console.log(`Backup: ${(0, ui_1.color)(backup.timestamp, 'command')}`);
590
- console.log(`Date: ${backup.date.toLocaleString()}`);
591
- console.log('');
592
- console.log((0, ui_1.warn)(`This will replace ${getClaudeSettingsDisplayPath()}`));
593
- console.log('');
594
- if (!yes) {
595
- const proceed = await prompt_1.InteractivePrompt.confirm('Proceed with restore?', { default: false });
596
- if (!proceed) {
597
- console.log((0, ui_1.info)('Cancelled'));
598
- process.exit(0);
599
- }
600
- }
601
- let parsedBackupSettings;
602
- try {
603
- const backupContent = await readFileUtf8NoFollow(backup.path);
604
- parsedBackupSettings = parseSettingsObject(backupContent, 'Backup file');
605
- }
606
- catch (error) {
607
- const nodeError = error;
608
- if (nodeError.code === 'ENOENT') {
609
- console.log((0, ui_1.fail)('Backup was deleted during restore'));
610
- process.exit(1);
611
- }
612
- if (nodeError.code === 'ELOOP') {
613
- console.log((0, ui_1.fail)('Backup file is a symlink - refusing to restore for security'));
614
- process.exit(1);
615
- }
616
- console.log((0, ui_1.fail)(`Backup file is corrupted: ${error.message}`));
617
- process.exit(1);
618
- }
619
- try {
620
- await withPersistSettingsLock(async () => {
621
- const settingsPath = (0, claude_config_path_1.getClaudeSettingsPath)();
622
- if (await isSymlinkAsync(settingsPath)) {
623
- throw new Error('settings.json is a symlink - refusing to restore for security');
624
- }
625
- let rollbackBackupPath = null;
626
- if (await pathExists(settingsPath)) {
627
- rollbackBackupPath = await createBackup();
628
- }
629
- try {
630
- await writeClaudeSettings(parsedBackupSettings);
631
- }
632
- catch (error) {
633
- const writeError = error;
634
- if (rollbackBackupPath) {
635
- try {
636
- const rollbackContent = await readFileUtf8NoFollow(rollbackBackupPath);
637
- const rollbackSettings = parseSettingsObject(rollbackContent, 'Rollback backup');
638
- await writeClaudeSettings(rollbackSettings);
639
- }
640
- catch (rollbackError) {
641
- throw new Error(`Restore failed: ${writeError.message}. Rollback also failed: ${rollbackError.message}. Manual recovery backup: ${formatDisplayPath(rollbackBackupPath)}`);
642
- }
643
- }
644
- throw new Error(`Restore failed: ${writeError.message}`);
645
- }
646
- });
647
- }
648
- catch (error) {
649
- console.log((0, ui_1.fail)(error.message));
650
- process.exit(1);
651
- }
652
- console.log((0, ui_1.ok)(`Restored from backup: ${backup.timestamp}`));
653
- }
654
- /** Show help for persist command */
655
- async function showHelp() {
656
- await (0, ui_1.initUI)();
657
- console.log((0, ui_1.header)('CCS Persist Command'));
658
- console.log('');
659
- console.log((0, ui_1.subheader)('Usage'));
660
- console.log(` ${(0, ui_1.color)('ccs persist', 'command')} <profile> [options]`);
661
- console.log(` ${(0, ui_1.color)('ccs persist', 'command')} --list-backups`);
662
- console.log(` ${(0, ui_1.color)('ccs persist', 'command')} --restore [timestamp]`);
663
- console.log('');
664
- console.log((0, ui_1.subheader)('Description'));
665
- console.log(" Writes a profile's Claude setup directly to");
666
- console.log(` ${getClaudeSettingsDisplayPath()} for native Claude Code usage.`);
667
- console.log('');
668
- console.log(' This is the preferred shared-settings path for Claude Code');
669
- console.log(' and the Claude IDE extension when you want one profile everywhere.');
670
- console.log('');
671
- console.log((0, ui_1.subheader)('Options'));
672
- console.log(` ${(0, ui_1.color)('--yes, -y', 'command')} Skip confirmation prompts (auto-backup)`);
673
- console.log(` ${(0, ui_1.color)('--permission-mode <mode>', 'command')} Set default permission mode in settings.json`);
674
- console.log(` ${(0, ui_1.color)('--dangerously-skip-permissions', 'command')} Persist auto-approve (bypassPermissions)`);
675
- console.log(` ${(0, ui_1.color)('--auto-approve', 'command')} Alias for --dangerously-skip-permissions`);
676
- console.log(` ${(0, ui_1.color)('--help, -h', 'command')} Show this help message`);
677
- console.log('');
678
- console.log((0, ui_1.subheader)('Backup Management'));
679
- console.log(` ${(0, ui_1.color)('--list-backups', 'command')} List available backup files`);
680
- console.log(` ${(0, ui_1.color)('--restore', 'command')} Restore from the most recent backup`);
681
- console.log(` ${(0, ui_1.color)('--restore <ts>', 'command')} Restore from specific backup (e.g., 20260110_205324)`);
682
- console.log('');
683
- console.log((0, ui_1.subheader)('Supported Profile Types'));
684
- console.log(` ${(0, ui_1.color)('API profiles', 'command')} glm, km, custom API profiles`);
685
- console.log(` ${(0, ui_1.color)('CLIProxy', 'command')} gemini, agy, qwen, kiro, ghcp`);
686
- console.log(` ${(0, ui_1.color)('Copilot', 'command')} copilot (requires copilot-api daemon)`);
687
- console.log(` ${(0, ui_1.color)('Account profiles', 'command')} work, personal, client (persists CLAUDE_CONFIG_DIR)`);
688
- console.log(` ${(0, ui_1.color)('default', 'command')} Clears CCS-managed overrides or inherits mapped continuity`);
689
- console.log('');
690
- console.log((0, ui_1.subheader)('Examples'));
691
- console.log(` ${(0, ui_1.dim)('# Persist GLM profile')}`);
692
- console.log(` ${(0, ui_1.color)('ccs persist glm', 'command')}`);
693
- console.log('');
694
- console.log(` ${(0, ui_1.dim)('# Persist with auto-confirmation')}`);
695
- console.log(` ${(0, ui_1.color)('ccs persist gemini --yes', 'command')}`);
696
- console.log('');
697
- console.log(` ${(0, ui_1.dim)('# Persist with default permission mode')}`);
698
- console.log(` ${(0, ui_1.color)('ccs persist glm --permission-mode acceptEdits', 'command')}`);
699
- console.log('');
700
- console.log(` ${(0, ui_1.dim)('# Persist with auto-approve enabled')}`);
701
- console.log(` ${(0, ui_1.color)('ccs persist glm --dangerously-skip-permissions', 'command')}`);
702
- console.log('');
703
- console.log(` ${(0, ui_1.dim)('# Persist an account profile for IDE/native Claude use')}`);
704
- console.log(` ${(0, ui_1.color)('ccs persist work --yes', 'command')}`);
705
- console.log('');
706
- console.log(` ${(0, ui_1.dim)('# Reset to native Claude defaults (clear CCS-managed overrides)')}`);
707
- console.log(` ${(0, ui_1.color)('ccs persist default --yes', 'command')}`);
708
- console.log('');
709
- console.log(` ${(0, ui_1.dim)('# List all backups')}`);
710
- console.log(` ${(0, ui_1.color)('ccs persist --list-backups', 'command')}`);
711
- console.log('');
712
- console.log(` ${(0, ui_1.dim)('# Restore latest backup')}`);
713
- console.log(` ${(0, ui_1.color)('ccs persist --restore', 'command')}`);
714
- console.log('');
715
- console.log(` ${(0, ui_1.dim)('# Restore specific backup')}`);
716
- console.log(` ${(0, ui_1.color)('ccs persist --restore 20260110_205324', 'command')}`);
717
- console.log('');
718
- console.log((0, ui_1.subheader)('Notes'));
719
- console.log(' [i] CLIProxy profiles require the proxy to be running.');
720
- console.log(' [i] Codex CLIProxy profiles are native Codex-only: use ccsxp or ccs codex --target codex.');
721
- console.log(' [i] Copilot profiles require copilot-api daemon.');
722
- console.log(' [i] Account/default flows remove stale ANTHROPIC_* overrides before applying new setup.');
723
- console.log(' [i] For IDE-local settings.json snippets, use: ccs env <profile> --format claude-extension');
724
- console.log(` [i] Backups are saved as ${getClaudeSettingsDisplayPath()}.backup.YYYYMMDD_HHMMSS`);
725
- console.log('');
726
- }
727
- /** Main persist command handler */
728
- async function handlePersistCommand(args) {
729
- // Check for help first
730
- if (args.includes('--help') || args.includes('-h') || args.length === 0) {
731
- await showHelp();
732
- return;
733
- }
734
- const parsedArgs = parseArgs(args);
735
- if (parsedArgs.parseError) {
736
- throw new Error(parsedArgs.parseError);
737
- }
738
- // Handle --list-backups
739
- if (parsedArgs.listBackups) {
740
- await handleListBackups();
741
- return;
742
- }
743
- // Handle --restore
744
- if (parsedArgs.restore) {
745
- await handleRestore(parsedArgs.restore, parsedArgs.yes ?? false);
746
- return;
747
- }
748
- await (0, ui_1.initUI)();
749
- const resolvedPermissionMode = resolvePermissionMode(parsedArgs);
750
- if (!parsedArgs.profile) {
751
- console.log((0, ui_1.fail)('Profile name is required'));
752
- console.log('');
753
- console.log('Usage:');
754
- console.log(` ${(0, ui_1.color)('ccs persist <profile>', 'command')}`);
755
- console.log('');
756
- console.log('Run for help:');
757
- console.log(` ${(0, ui_1.color)('ccs persist --help', 'command')}`);
758
- process.exit(1);
759
- }
760
- // Detect profile
761
- const detector = new profile_detector_1.default();
762
- try {
763
- detector.detectProfileType(parsedArgs.profile);
764
- }
765
- catch (error) {
766
- const err = error;
767
- console.log((0, ui_1.fail)(`Profile not found: ${parsedArgs.profile}`));
768
- console.log('');
769
- if (err.availableProfiles) {
770
- console.log(err.availableProfiles);
771
- }
772
- process.exit(1);
773
- }
774
- // Resolve env vars
775
- let resolved;
776
- try {
777
- resolved = await resolveProfileEnvVars(parsedArgs.profile);
778
- }
779
- catch (error) {
780
- console.log((0, ui_1.fail)(error.message));
781
- process.exit(1);
782
- }
783
- // Display what will be written
784
- console.log((0, ui_1.header)(`Persist Profile: ${parsedArgs.profile}`));
785
- console.log('');
786
- console.log(`Profile type: ${(0, ui_1.color)(resolved.profileType, 'command')}`);
787
- console.log('');
788
- const envKeys = Object.keys(resolved.env);
789
- if (envKeys.length > 0) {
790
- console.log(`The following env vars will be written to ${getClaudeSettingsDisplayPath()}:`);
791
- console.log('');
792
- const maxKeyLen = Math.max(...envKeys.map((k) => k.length));
793
- for (const [key, value] of Object.entries(resolved.env)) {
794
- const paddedKey = key.padEnd(maxKeyLen + 2);
795
- const displayValue = isSensitiveEnvKey(key) ? maskApiKey(value) : value;
796
- console.log(` ${(0, ui_1.color)(paddedKey, 'command')} = ${displayValue}`);
797
- }
798
- console.log('');
799
- }
800
- else {
801
- console.log((0, ui_1.info)('No new env vars will be added.'));
802
- console.log((0, ui_1.dim)(' CCS-managed transport overrides will be removed if present.'));
803
- console.log('');
804
- }
805
- if (resolved.clearEnvKeys.length > 0) {
806
- console.log('Managed env keys replaced/cleared on write:');
807
- console.log(` ${(0, ui_1.dim)(resolved.clearEnvKeys.join(', '))}`);
808
- console.log('');
809
- }
810
- if (resolvedPermissionMode) {
811
- console.log(`Default permission mode: ${(0, ui_1.color)(resolvedPermissionMode, 'command')}`);
812
- if (resolvedPermissionMode === 'bypassPermissions') {
813
- console.log((0, ui_1.warn)('Auto-approve enabled: Claude will skip permission prompts by default.'));
814
- }
815
- console.log('');
816
- }
817
- if (resolved.warnings?.length) {
818
- for (const message of resolved.warnings) {
819
- console.log((0, ui_1.warn)(message));
820
- }
821
- console.log('');
822
- }
823
- if (resolved.notes?.length) {
824
- for (const note of resolved.notes) {
825
- console.log((0, ui_1.info)(note));
826
- }
827
- console.log('');
828
- }
829
- // Warning about modification
830
- console.log((0, ui_1.warn)(`This will modify ${getClaudeSettingsDisplayPath()}`));
831
- console.log((0, ui_1.dim)(' Existing hooks and other settings will be preserved.'));
832
- console.log((0, ui_1.dim)(' Existing managed profile env keys will be replaced to avoid stale routing.'));
833
- console.log('');
834
- // Check if settings.json exists for backup
835
- const settingsPath = (0, claude_config_path_1.getClaudeSettingsPath)();
836
- const settingsExist = fs.existsSync(settingsPath);
837
- let createBackupFlag = false;
838
- // Track backup path for error recovery guidance
839
- let createdBackupPath = null;
840
- // Backup prompt (unless --yes)
841
- if (settingsExist) {
842
- createBackupFlag = parsedArgs.yes === true; // Auto-backup with --yes
843
- if (!parsedArgs.yes) {
844
- createBackupFlag = await prompt_1.InteractivePrompt.confirm('Create backup before modifying?', {
845
- default: true,
846
- });
847
- }
848
- }
849
- // Proceed confirmation (unless --yes)
850
- if (!parsedArgs.yes) {
851
- const proceed = await prompt_1.InteractivePrompt.confirm('Proceed with persist?', { default: true });
852
- if (!proceed) {
853
- console.log((0, ui_1.info)('Cancelled'));
854
- process.exit(0);
855
- }
856
- }
857
- try {
858
- await withPersistSettingsLock(async () => {
859
- if (createBackupFlag && (await pathExists(settingsPath))) {
860
- try {
861
- createdBackupPath = await createBackup();
862
- console.log((0, ui_1.ok)(`Backup created: ${formatDisplayPath(createdBackupPath)}`));
863
- console.log('');
864
- }
865
- catch (error) {
866
- throw new Error(`Failed to create backup: ${error.message}`);
867
- }
868
- }
869
- // Read existing settings and merge
870
- const existingSettings = await readClaudeSettings();
871
- // Validate existing env is an object (not array/primitive)
872
- const rawEnv = existingSettings.env;
873
- let existingEnv = {};
874
- if (rawEnv !== undefined) {
875
- if (rawEnv === null) {
876
- console.log((0, ui_1.warn)('Existing env in settings.json is null - it will be replaced'));
877
- }
878
- else if (typeof rawEnv !== 'object' || Array.isArray(rawEnv)) {
879
- console.log((0, ui_1.warn)('Existing env in settings.json is not an object - it will be replaced'));
880
- }
881
- else {
882
- existingEnv = rawEnv;
883
- }
884
- }
885
- const preservedEnv = { ...existingEnv };
886
- for (const key of resolved.clearEnvKeys) {
887
- delete preservedEnv[key];
888
- }
889
- const mergedSettings = {
890
- ...existingSettings,
891
- env: {
892
- ...preservedEnv,
893
- ...resolved.env,
894
- },
895
- };
896
- if (resolvedPermissionMode) {
897
- const rawPermissions = existingSettings.permissions;
898
- let existingPermissions = {};
899
- if (rawPermissions !== undefined) {
900
- if (rawPermissions === null) {
901
- console.log((0, ui_1.warn)('Existing permissions in settings.json is null - it will be replaced'));
902
- }
903
- else if (typeof rawPermissions !== 'object' || Array.isArray(rawPermissions)) {
904
- console.log((0, ui_1.warn)('Existing permissions in settings.json is not an object - it will be replaced'));
905
- }
906
- else {
907
- existingPermissions = rawPermissions;
908
- }
909
- }
910
- mergedSettings.permissions = {
911
- ...existingPermissions,
912
- defaultMode: resolvedPermissionMode,
913
- };
914
- }
915
- await writeClaudeSettings(mergedSettings);
916
- const persistedSettings = await readClaudeSettings();
917
- const receipt = buildPersistReceipt(existingEnv, existingSettings, persistedSettings, resolved, resolvedPermissionMode);
918
- console.log('');
919
- console.log((0, ui_1.ok)(`Profile '${parsedArgs.profile}' written to ${getClaudeSettingsDisplayPath()}`));
920
- console.log('');
921
- printPersistReceipt(receipt);
922
- console.log('');
923
- });
924
- }
925
- catch (error) {
926
- const message = error.message;
927
- if (message.startsWith('Failed to create backup:')) {
928
- console.log((0, ui_1.fail)(message));
929
- }
930
- else {
931
- console.log((0, ui_1.fail)(`Failed to write settings: ${message}`));
932
- }
933
- if (createdBackupPath) {
934
- console.log('');
935
- console.log((0, ui_1.info)(`A backup was created before this error:`));
936
- console.log(` ${formatDisplayPath(createdBackupPath)}`);
937
- console.log((0, ui_1.dim)(' To restore: ccs persist --restore'));
938
- }
939
- process.exit(1);
940
- }
941
- console.log((0, ui_1.info)('Claude Code will now use this profile by default.'));
942
- console.log((0, ui_1.dim)(' To revert, restore the backup or edit settings.json manually.'));
943
- console.log('');
944
- }
945
- exports.handlePersistCommand = handlePersistCommand;
28
+ var handler_1 = require("./persist-command/handler");
29
+ Object.defineProperty(exports, "handlePersistCommand", { enumerable: true, get: function () { return handler_1.handlePersistCommand; } });
946
30
  //# sourceMappingURL=persist-command.js.map