@kaitranntt/ccs 7.76.0 → 7.77.0

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 (554) hide show
  1. package/README.md +2 -1
  2. package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
  3. package/dist/api/services/cliproxy-profile-bridge.js +5 -6
  4. package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
  5. package/dist/api/services/openrouter-catalog.js +2 -2
  6. package/dist/api/services/openrouter-catalog.js.map +1 -1
  7. package/dist/api/services/profile-lifecycle-service.d.ts.map +1 -1
  8. package/dist/api/services/profile-lifecycle-service.js +6 -6
  9. package/dist/api/services/profile-lifecycle-service.js.map +1 -1
  10. package/dist/api/services/profile-reader.d.ts.map +1 -1
  11. package/dist/api/services/profile-reader.js +14 -15
  12. package/dist/api/services/profile-reader.js.map +1 -1
  13. package/dist/api/services/profile-writer.d.ts.map +1 -1
  14. package/dist/api/services/profile-writer.js +13 -13
  15. package/dist/api/services/profile-writer.js.map +1 -1
  16. package/dist/auth/commands/create-command.d.ts.map +1 -1
  17. package/dist/auth/commands/create-command.js +2 -2
  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 +3 -3
  21. package/dist/auth/commands/default-command.js.map +1 -1
  22. package/dist/auth/commands/remove-command.d.ts.map +1 -1
  23. package/dist/auth/commands/remove-command.js +2 -2
  24. package/dist/auth/commands/remove-command.js.map +1 -1
  25. package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -1
  26. package/dist/auth/profile-continuity-inheritance.js +4 -4
  27. package/dist/auth/profile-continuity-inheritance.js.map +1 -1
  28. package/dist/auth/profile-detector.d.ts.map +1 -1
  29. package/dist/auth/profile-detector.js +5 -6
  30. package/dist/auth/profile-detector.js.map +1 -1
  31. package/dist/auth/profile-registry.d.ts.map +1 -1
  32. package/dist/auth/profile-registry.js +14 -15
  33. package/dist/auth/profile-registry.js.map +1 -1
  34. package/dist/auth/resume-lane-diagnostics.d.ts.map +1 -1
  35. package/dist/auth/resume-lane-diagnostics.js +2 -2
  36. package/dist/auth/resume-lane-diagnostics.js.map +1 -1
  37. package/dist/ccs.js +30 -1257
  38. package/dist/ccs.js.map +1 -1
  39. package/dist/channels/official-channels-ids.d.ts +21 -0
  40. package/dist/channels/official-channels-ids.d.ts.map +1 -0
  41. package/dist/channels/official-channels-ids.js +46 -0
  42. package/dist/channels/official-channels-ids.js.map +1 -0
  43. package/dist/channels/official-channels-runtime.d.ts +2 -5
  44. package/dist/channels/official-channels-runtime.d.ts.map +1 -1
  45. package/dist/channels/official-channels-runtime.js +14 -29
  46. package/dist/channels/official-channels-runtime.js.map +1 -1
  47. package/dist/channels/official-channels-store.d.ts.map +1 -1
  48. package/dist/channels/official-channels-store.js +2 -2
  49. package/dist/channels/official-channels-store.js.map +1 -1
  50. package/dist/cliproxy/accounts/account-safety.js +4 -4
  51. package/dist/cliproxy/accounts/account-safety.js.map +1 -1
  52. package/dist/cliproxy/auth/antigravity-responsibility.js +2 -2
  53. package/dist/cliproxy/auth/antigravity-responsibility.js.map +1 -1
  54. package/dist/cliproxy/auth/auth-token-manager.d.ts.map +1 -1
  55. package/dist/cliproxy/auth/auth-token-manager.js +8 -8
  56. package/dist/cliproxy/auth/auth-token-manager.js.map +1 -1
  57. package/dist/cliproxy/auth/token-refresh-config.d.ts.map +1 -1
  58. package/dist/cliproxy/auth/token-refresh-config.js +2 -2
  59. package/dist/cliproxy/auth/token-refresh-config.js.map +1 -1
  60. package/dist/cliproxy/binary/lifecycle.js +2 -2
  61. package/dist/cliproxy/binary/lifecycle.js.map +1 -1
  62. package/dist/cliproxy/binary/platform-detector.d.ts +4 -4
  63. package/dist/cliproxy/binary/platform-detector.d.ts.map +1 -1
  64. package/dist/cliproxy/binary/platform-detector.js +2 -2
  65. package/dist/cliproxy/binary/platform-detector.js.map +1 -1
  66. package/dist/cliproxy/binary-manager.d.ts.map +1 -1
  67. package/dist/cliproxy/binary-manager.js +5 -3
  68. package/dist/cliproxy/binary-manager.js.map +1 -1
  69. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  70. package/dist/cliproxy/config/env-builder.js +2 -2
  71. package/dist/cliproxy/config/env-builder.js.map +1 -1
  72. package/dist/cliproxy/config/generator.d.ts +6 -2
  73. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  74. package/dist/cliproxy/config/generator.js +43 -10
  75. package/dist/cliproxy/config/generator.js.map +1 -1
  76. package/dist/cliproxy/config/model-config.d.ts.map +1 -1
  77. package/dist/cliproxy/config/model-config.js +2 -2
  78. package/dist/cliproxy/config/model-config.js.map +1 -1
  79. package/dist/cliproxy/config/path-resolver.d.ts.map +1 -1
  80. package/dist/cliproxy/config/path-resolver.js +4 -4
  81. package/dist/cliproxy/config/path-resolver.js.map +1 -1
  82. package/dist/cliproxy/config/port-manager.d.ts +6 -0
  83. package/dist/cliproxy/config/port-manager.d.ts.map +1 -1
  84. package/dist/cliproxy/config/port-manager.js +19 -1
  85. package/dist/cliproxy/config/port-manager.js.map +1 -1
  86. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  87. package/dist/cliproxy/config/thinking-config.js +2 -2
  88. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  89. package/dist/cliproxy/executor/account-resolution.d.ts +52 -0
  90. package/dist/cliproxy/executor/account-resolution.d.ts.map +1 -0
  91. package/dist/cliproxy/executor/account-resolution.js +154 -0
  92. package/dist/cliproxy/executor/account-resolution.js.map +1 -0
  93. package/dist/cliproxy/executor/arg-parser.d.ts +96 -0
  94. package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -0
  95. package/dist/cliproxy/executor/arg-parser.js +529 -0
  96. package/dist/cliproxy/executor/arg-parser.js.map +1 -0
  97. package/dist/cliproxy/executor/auth-coordinator.d.ts +96 -0
  98. package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -0
  99. package/dist/cliproxy/executor/auth-coordinator.js +342 -0
  100. package/dist/cliproxy/executor/auth-coordinator.js.map +1 -0
  101. package/dist/cliproxy/executor/browser-launch-setup.d.ts +36 -0
  102. package/dist/cliproxy/executor/browser-launch-setup.d.ts.map +1 -0
  103. package/dist/cliproxy/executor/browser-launch-setup.js +80 -0
  104. package/dist/cliproxy/executor/browser-launch-setup.js.map +1 -0
  105. package/dist/cliproxy/executor/claude-launcher.d.ts +55 -0
  106. package/dist/cliproxy/executor/claude-launcher.d.ts.map +1 -0
  107. package/dist/cliproxy/executor/claude-launcher.js +112 -0
  108. package/dist/cliproxy/executor/claude-launcher.js.map +1 -0
  109. package/dist/cliproxy/executor/index.d.ts +4 -9
  110. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  111. package/dist/cliproxy/executor/index.js +110 -866
  112. package/dist/cliproxy/executor/index.js.map +1 -1
  113. package/dist/cliproxy/executor/model-warnings.d.ts +22 -0
  114. package/dist/cliproxy/executor/model-warnings.d.ts.map +1 -0
  115. package/dist/cliproxy/executor/model-warnings.js +67 -0
  116. package/dist/cliproxy/executor/model-warnings.js.map +1 -0
  117. package/dist/cliproxy/executor/proxy-chain-builder.d.ts +71 -0
  118. package/dist/cliproxy/executor/proxy-chain-builder.d.ts.map +1 -0
  119. package/dist/cliproxy/executor/proxy-chain-builder.js +143 -0
  120. package/dist/cliproxy/executor/proxy-chain-builder.js.map +1 -0
  121. package/dist/cliproxy/executor/proxy-resolver.d.ts +44 -0
  122. package/dist/cliproxy/executor/proxy-resolver.d.ts.map +1 -0
  123. package/dist/cliproxy/executor/proxy-resolver.js +173 -0
  124. package/dist/cliproxy/executor/proxy-resolver.js.map +1 -0
  125. package/dist/cliproxy/proxy/proxy-target-resolver.d.ts.map +1 -1
  126. package/dist/cliproxy/proxy/proxy-target-resolver.js +3 -3
  127. package/dist/cliproxy/proxy/proxy-target-resolver.js.map +1 -1
  128. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
  129. package/dist/cliproxy/proxy/tool-sanitization-proxy.js +2 -2
  130. package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
  131. package/dist/cliproxy/quota/quota-fetcher.d.ts.map +1 -1
  132. package/dist/cliproxy/quota/quota-fetcher.js +28 -9
  133. package/dist/cliproxy/quota/quota-fetcher.js.map +1 -1
  134. package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
  135. package/dist/cliproxy/quota/quota-manager.js +4 -4
  136. package/dist/cliproxy/quota/quota-manager.js.map +1 -1
  137. package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
  138. package/dist/cliproxy/routing/routing-strategy.js +5 -5
  139. package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
  140. package/dist/cliproxy/service-manager.js +2 -2
  141. package/dist/cliproxy/service-manager.js.map +1 -1
  142. package/dist/cliproxy/services/binary-service.js +8 -8
  143. package/dist/cliproxy/services/binary-service.js.map +1 -1
  144. package/dist/cliproxy/services/catalog-cache.d.ts.map +1 -1
  145. package/dist/cliproxy/services/catalog-cache.js +2 -2
  146. package/dist/cliproxy/services/catalog-cache.js.map +1 -1
  147. package/dist/cliproxy/services/proxy-lifecycle-service.d.ts +1 -0
  148. package/dist/cliproxy/services/proxy-lifecycle-service.d.ts.map +1 -1
  149. package/dist/cliproxy/services/proxy-lifecycle-service.js +6 -6
  150. package/dist/cliproxy/services/proxy-lifecycle-service.js.map +1 -1
  151. package/dist/cliproxy/services/variant-config-adapter.d.ts.map +1 -1
  152. package/dist/cliproxy/services/variant-config-adapter.js +10 -10
  153. package/dist/cliproxy/services/variant-config-adapter.js.map +1 -1
  154. package/dist/cliproxy/services/variant-service.d.ts.map +1 -1
  155. package/dist/cliproxy/services/variant-service.js +7 -8
  156. package/dist/cliproxy/services/variant-service.js.map +1 -1
  157. package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
  158. package/dist/cliproxy/services/variant-settings.js +5 -5
  159. package/dist/cliproxy/services/variant-settings.js.map +1 -1
  160. package/dist/cliproxy/session-tracker.d.ts +1 -0
  161. package/dist/cliproxy/session-tracker.d.ts.map +1 -1
  162. package/dist/cliproxy/session-tracker.js +14 -8
  163. package/dist/cliproxy/session-tracker.js.map +1 -1
  164. package/dist/cliproxy/sync/auto-sync-watcher.js +3 -4
  165. package/dist/cliproxy/sync/auto-sync-watcher.js.map +1 -1
  166. package/dist/cliproxy/sync/profile-mapper.d.ts.map +1 -1
  167. package/dist/cliproxy/sync/profile-mapper.js +2 -2
  168. package/dist/cliproxy/sync/profile-mapper.js.map +1 -1
  169. package/dist/commands/browser-command.d.ts.map +1 -1
  170. package/dist/commands/browser-command.js +7 -7
  171. package/dist/commands/browser-command.js.map +1 -1
  172. package/dist/commands/cliproxy/proxy-lifecycle-subcommand.js +5 -5
  173. package/dist/commands/cliproxy/proxy-lifecycle-subcommand.js.map +1 -1
  174. package/dist/commands/cliproxy/variant-subcommand.d.ts.map +1 -1
  175. package/dist/commands/cliproxy/variant-subcommand.js +4 -4
  176. package/dist/commands/cliproxy/variant-subcommand.js.map +1 -1
  177. package/dist/commands/config-auth/disable-command.d.ts.map +1 -1
  178. package/dist/commands/config-auth/disable-command.js +3 -3
  179. package/dist/commands/config-auth/disable-command.js.map +1 -1
  180. package/dist/commands/config-auth/setup-command.d.ts.map +1 -1
  181. package/dist/commands/config-auth/setup-command.js +2 -2
  182. package/dist/commands/config-auth/setup-command.js.map +1 -1
  183. package/dist/commands/config-auth/show-command.js +2 -2
  184. package/dist/commands/config-auth/show-command.js.map +1 -1
  185. package/dist/commands/config-channels-command.d.ts.map +1 -1
  186. package/dist/commands/config-channels-command.js +4 -4
  187. package/dist/commands/config-channels-command.js.map +1 -1
  188. package/dist/commands/config-command.d.ts +1 -1
  189. package/dist/commands/config-command.d.ts.map +1 -1
  190. package/dist/commands/config-command.js +4 -4
  191. package/dist/commands/config-command.js.map +1 -1
  192. package/dist/commands/config-image-analysis-command.d.ts.map +1 -1
  193. package/dist/commands/config-image-analysis-command.js +4 -4
  194. package/dist/commands/config-image-analysis-command.js.map +1 -1
  195. package/dist/commands/config-thinking-command.d.ts.map +1 -1
  196. package/dist/commands/config-thinking-command.js +4 -4
  197. package/dist/commands/config-thinking-command.js.map +1 -1
  198. package/dist/commands/copilot-command.d.ts.map +1 -1
  199. package/dist/commands/copilot-command.js +4 -4
  200. package/dist/commands/copilot-command.js.map +1 -1
  201. package/dist/commands/cursor-command.d.ts.map +1 -1
  202. package/dist/commands/cursor-command.js +7 -7
  203. package/dist/commands/cursor-command.js.map +1 -1
  204. package/dist/commands/env-command.d.ts.map +1 -1
  205. package/dist/commands/env-command.js +2 -2
  206. package/dist/commands/env-command.js.map +1 -1
  207. package/dist/commands/migrate-command.d.ts.map +1 -1
  208. package/dist/commands/migrate-command.js +2 -2
  209. package/dist/commands/migrate-command.js.map +1 -1
  210. package/dist/commands/proxy-command.d.ts.map +1 -1
  211. package/dist/commands/proxy-command.js +2 -1
  212. package/dist/commands/proxy-command.js.map +1 -1
  213. package/dist/commands/setup-command.d.ts.map +1 -1
  214. package/dist/commands/setup-command.js +6 -7
  215. package/dist/commands/setup-command.js.map +1 -1
  216. package/dist/commands/version-command.d.ts.map +1 -1
  217. package/dist/commands/version-command.js +2 -1
  218. package/dist/commands/version-command.js.map +1 -1
  219. package/dist/config/loader/config-getters.d.ts +121 -0
  220. package/dist/config/loader/config-getters.d.ts.map +1 -0
  221. package/dist/config/loader/config-getters.js +260 -0
  222. package/dist/config/loader/config-getters.js.map +1 -0
  223. package/dist/config/loader/defaults-merger.d.ts +21 -0
  224. package/dist/config/loader/defaults-merger.d.ts.map +1 -0
  225. package/dist/config/loader/defaults-merger.js +278 -0
  226. package/dist/config/loader/defaults-merger.js.map +1 -0
  227. package/dist/config/loader/io-locks.d.ts +76 -0
  228. package/dist/config/loader/io-locks.d.ts.map +1 -0
  229. package/dist/config/loader/io-locks.js +297 -0
  230. package/dist/config/loader/io-locks.js.map +1 -0
  231. package/dist/config/loader/normalizers.d.ts +40 -0
  232. package/dist/config/loader/normalizers.d.ts.map +1 -0
  233. package/dist/config/loader/normalizers.js +172 -0
  234. package/dist/config/loader/normalizers.js.map +1 -0
  235. package/dist/config/loader/yaml-serializer.d.ts +19 -0
  236. package/dist/config/loader/yaml-serializer.d.ts.map +1 -0
  237. package/dist/config/loader/yaml-serializer.js +300 -0
  238. package/dist/config/loader/yaml-serializer.js.map +1 -0
  239. package/dist/config/schemas/cliproxy.d.ts +2 -0
  240. package/dist/config/schemas/cliproxy.d.ts.map +1 -1
  241. package/dist/config/unified-config-loader.d.ts +21 -124
  242. package/dist/config/unified-config-loader.d.ts.map +1 -1
  243. package/dist/config/unified-config-loader.js +100 -1098
  244. package/dist/config/unified-config-loader.js.map +1 -1
  245. package/dist/copilot/copilot-daemon.d.ts.map +1 -1
  246. package/dist/copilot/copilot-daemon.js +2 -2
  247. package/dist/copilot/copilot-daemon.js.map +1 -1
  248. package/dist/copilot/copilot-executor.d.ts.map +1 -1
  249. package/dist/copilot/copilot-executor.js +3 -3
  250. package/dist/copilot/copilot-executor.js.map +1 -1
  251. package/dist/copilot/copilot-package-manager.js +2 -2
  252. package/dist/copilot/copilot-package-manager.js.map +1 -1
  253. package/dist/cursor/cursor-auth.js +2 -2
  254. package/dist/cursor/cursor-auth.js.map +1 -1
  255. package/dist/cursor/cursor-daemon-pid.js +2 -2
  256. package/dist/cursor/cursor-daemon-pid.js.map +1 -1
  257. package/dist/cursor/cursor-profile-executor.d.ts +10 -1
  258. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
  259. package/dist/cursor/cursor-profile-executor.js +10 -6
  260. package/dist/cursor/cursor-profile-executor.js.map +1 -1
  261. package/dist/delegation/delegation-handler.js +2 -2
  262. package/dist/delegation/delegation-handler.js.map +1 -1
  263. package/dist/delegation/headless-executor.d.ts.map +1 -1
  264. package/dist/delegation/headless-executor.js +5 -5
  265. package/dist/delegation/headless-executor.js.map +1 -1
  266. package/dist/delegation/session-manager.js +2 -2
  267. package/dist/delegation/session-manager.js.map +1 -1
  268. package/dist/dispatcher/cli-argument-parser.d.ts +70 -0
  269. package/dist/dispatcher/cli-argument-parser.d.ts.map +1 -0
  270. package/dist/dispatcher/cli-argument-parser.js +285 -0
  271. package/dist/dispatcher/cli-argument-parser.js.map +1 -0
  272. package/dist/dispatcher/dispatcher-context.d.ts +24 -0
  273. package/dist/dispatcher/dispatcher-context.d.ts.map +1 -0
  274. package/dist/dispatcher/dispatcher-context.js +11 -0
  275. package/dist/dispatcher/dispatcher-context.js.map +1 -0
  276. package/dist/dispatcher/environment-builder.d.ts +20 -0
  277. package/dist/dispatcher/environment-builder.d.ts.map +1 -0
  278. package/dist/dispatcher/environment-builder.js +95 -0
  279. package/dist/dispatcher/environment-builder.js.map +1 -0
  280. package/dist/dispatcher/flows/account-flow.d.ts +9 -0
  281. package/dist/dispatcher/flows/account-flow.d.ts.map +1 -0
  282. package/dist/dispatcher/flows/account-flow.js +49 -0
  283. package/dist/dispatcher/flows/account-flow.js.map +1 -0
  284. package/dist/dispatcher/flows/cliproxy-flow.d.ts +8 -0
  285. package/dist/dispatcher/flows/cliproxy-flow.d.ts.map +1 -0
  286. package/dist/dispatcher/flows/cliproxy-flow.js +165 -0
  287. package/dist/dispatcher/flows/cliproxy-flow.js.map +1 -0
  288. package/dist/dispatcher/flows/copilot-flow.d.ts +8 -0
  289. package/dist/dispatcher/flows/copilot-flow.d.ts.map +1 -0
  290. package/dist/dispatcher/flows/copilot-flow.js +72 -0
  291. package/dist/dispatcher/flows/copilot-flow.js.map +1 -0
  292. package/dist/dispatcher/flows/cursor-flow.d.ts +8 -0
  293. package/dist/dispatcher/flows/cursor-flow.d.ts.map +1 -0
  294. package/dist/dispatcher/flows/cursor-flow.js +62 -0
  295. package/dist/dispatcher/flows/cursor-flow.js.map +1 -0
  296. package/dist/dispatcher/flows/default-flow.d.ts +10 -0
  297. package/dist/dispatcher/flows/default-flow.d.ts.map +1 -0
  298. package/dist/dispatcher/flows/default-flow.js +99 -0
  299. package/dist/dispatcher/flows/default-flow.js.map +1 -0
  300. package/dist/dispatcher/flows/settings-flow.d.ts +9 -0
  301. package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -0
  302. package/dist/dispatcher/flows/settings-flow.js +318 -0
  303. package/dist/dispatcher/flows/settings-flow.js.map +1 -0
  304. package/dist/dispatcher/flows/settings-image-analysis-prep.d.ts +28 -0
  305. package/dist/dispatcher/flows/settings-image-analysis-prep.d.ts.map +1 -0
  306. package/dist/dispatcher/flows/settings-image-analysis-prep.js +81 -0
  307. package/dist/dispatcher/flows/settings-image-analysis-prep.js.map +1 -0
  308. package/dist/dispatcher/pre-dispatch.d.ts +23 -0
  309. package/dist/dispatcher/pre-dispatch.d.ts.map +1 -0
  310. package/dist/dispatcher/pre-dispatch.js +156 -0
  311. package/dist/dispatcher/pre-dispatch.js.map +1 -0
  312. package/dist/dispatcher/profile-resolver.d.ts +65 -0
  313. package/dist/dispatcher/profile-resolver.d.ts.map +1 -0
  314. package/dist/dispatcher/profile-resolver.js +290 -0
  315. package/dist/dispatcher/profile-resolver.js.map +1 -0
  316. package/dist/dispatcher/target-executor.d.ts +26 -0
  317. package/dist/dispatcher/target-executor.d.ts.map +1 -0
  318. package/dist/dispatcher/target-executor.js +81 -0
  319. package/dist/dispatcher/target-executor.js.map +1 -0
  320. package/dist/docker/docker-assets.d.ts.map +1 -1
  321. package/dist/docker/docker-assets.js +2 -2
  322. package/dist/docker/docker-assets.js.map +1 -1
  323. package/dist/glmt/glmt-transformer.d.ts.map +1 -1
  324. package/dist/glmt/glmt-transformer.js +2 -2
  325. package/dist/glmt/glmt-transformer.js.map +1 -1
  326. package/dist/management/checks/config-check.d.ts.map +1 -1
  327. package/dist/management/checks/config-check.js +2 -2
  328. package/dist/management/checks/config-check.js.map +1 -1
  329. package/dist/management/checks/env-check.d.ts.map +1 -1
  330. package/dist/management/checks/env-check.js +2 -1
  331. package/dist/management/checks/env-check.js.map +1 -1
  332. package/dist/management/checks/image-analysis-check.d.ts.map +1 -1
  333. package/dist/management/checks/image-analysis-check.js +4 -4
  334. package/dist/management/checks/image-analysis-check.js.map +1 -1
  335. package/dist/management/checks/profile-check.js +4 -4
  336. package/dist/management/checks/profile-check.js.map +1 -1
  337. package/dist/management/checks/symlink-check.js +2 -2
  338. package/dist/management/checks/symlink-check.js.map +1 -1
  339. package/dist/management/checks/system-check.js +2 -2
  340. package/dist/management/checks/system-check.js.map +1 -1
  341. package/dist/management/instance-manager.d.ts.map +1 -1
  342. package/dist/management/instance-manager.js +2 -1
  343. package/dist/management/instance-manager.js.map +1 -1
  344. package/dist/management/recovery-manager.d.ts.map +1 -1
  345. package/dist/management/recovery-manager.js +5 -5
  346. package/dist/management/recovery-manager.js.map +1 -1
  347. package/dist/management/repair/auto-repair.d.ts.map +1 -1
  348. package/dist/management/repair/auto-repair.js +2 -2
  349. package/dist/management/repair/auto-repair.js.map +1 -1
  350. package/dist/management/shared-manager.d.ts.map +1 -1
  351. package/dist/management/shared-manager.js +2 -2
  352. package/dist/management/shared-manager.js.map +1 -1
  353. package/dist/proxy/proxy-daemon-entry.js +2 -2
  354. package/dist/proxy/proxy-daemon-entry.js.map +1 -1
  355. package/dist/proxy/proxy-daemon-paths.js +2 -2
  356. package/dist/proxy/proxy-daemon-paths.js.map +1 -1
  357. package/dist/proxy/proxy-port-resolver.js +2 -2
  358. package/dist/proxy/proxy-port-resolver.js.map +1 -1
  359. package/dist/proxy/request-router.d.ts.map +1 -1
  360. package/dist/proxy/request-router.js +3 -3
  361. package/dist/proxy/request-router.js.map +1 -1
  362. package/dist/services/logging/log-config.d.ts.map +1 -1
  363. package/dist/services/logging/log-config.js +3 -3
  364. package/dist/services/logging/log-config.js.map +1 -1
  365. package/dist/services/logging/log-paths.js +3 -3
  366. package/dist/services/logging/log-paths.js.map +1 -1
  367. package/dist/targets/droid-provider.d.ts.map +1 -1
  368. package/dist/targets/droid-provider.js +9 -6
  369. package/dist/targets/droid-provider.js.map +1 -1
  370. package/dist/ui/assets/{accounts-CDgKt-GZ.js → accounts-CybVGDsm.js} +1 -1
  371. package/dist/ui/assets/{alert-dialog-CRqbTpjm.js → alert-dialog-C6npAhT0.js} +1 -1
  372. package/dist/ui/assets/{api-C7W2ibtd.js → api-DZosWVkR.js} +1 -1
  373. package/dist/ui/assets/{auth-section-RBgQQrdk.js → auth-section-D4MZkgcP.js} +1 -1
  374. package/dist/ui/assets/{backups-section-DptarTls.js → backups-section-DvMJrmHH.js} +1 -1
  375. package/dist/ui/assets/{channels-BMQs4wmY.js → channels-BVftYfOn.js} +1 -1
  376. package/dist/ui/assets/{checkbox-BrRyK0T3.js → checkbox-BLRznRTO.js} +1 -1
  377. package/dist/ui/assets/{claude-extension-DrSuOyf4.js → claude-extension-C6OeBQ73.js} +1 -1
  378. package/dist/ui/assets/cliproxy-B3Jyu3r9.js +3 -0
  379. package/dist/ui/assets/{cliproxy-ai-providers-B8aZTWIe.js → cliproxy-ai-providers-BAJ78pUc.js} +1 -1
  380. package/dist/ui/assets/{cliproxy-control-panel-BpXgvmht.js → cliproxy-control-panel-XEvUMVJe.js} +1 -1
  381. package/dist/ui/assets/{codex-CYoq5g4z.js → codex-CY2vikqX.js} +1 -1
  382. package/dist/ui/assets/{confirm-dialog-CP-4T1Wp.js → confirm-dialog-DjLHh1qX.js} +1 -1
  383. package/dist/ui/assets/{copilot-aEdlrY3S.js → copilot-afee2lL9.js} +1 -1
  384. package/dist/ui/assets/{cursor-CSJ0aqxS.js → cursor-DuWy60wp.js} +1 -1
  385. package/dist/ui/assets/{droid-DTdvqOvV.js → droid-FlceoQ6k.js} +1 -1
  386. package/dist/ui/assets/{globalenv-section-DXbRVgOM.js → globalenv-section-DpJ7unxC.js} +1 -1
  387. package/dist/ui/assets/{health-CDce37cB.js → health-BEMgcKD3.js} +1 -1
  388. package/dist/ui/assets/{index-vN-yw8kw.js → index-0GkznW41.js} +1 -1
  389. package/dist/ui/assets/{index-DjxqZO4B.js → index-0n_43sCZ.js} +1 -1
  390. package/dist/ui/assets/{index-Fd17BSGq.js → index-BRtgic66.js} +2 -2
  391. package/dist/ui/assets/{index-dnIWLkjb.js → index-Ba4ysocb.js} +1 -1
  392. package/dist/ui/assets/{index-Bm9k7s_T.js → index-Cj7EjEq6.js} +1 -1
  393. package/dist/ui/assets/{index-KK76yIJk.js → index-Cq9VySs6.js} +1 -1
  394. package/dist/ui/assets/{index-D_FmvtnX.js → index-DOC7_hun.js} +1 -1
  395. package/dist/ui/assets/{logs-C_MtpQIE.js → logs-Dth4naJl.js} +1 -1
  396. package/dist/ui/assets/{masked-input-BAWBYIqo.js → masked-input-DL6pJ8pE.js} +1 -1
  397. package/dist/ui/assets/{proxy-status-widget-DUqasX3c.js → proxy-status-widget-DW4cPFeD.js} +1 -1
  398. package/dist/ui/assets/{raw-json-settings-editor-panel-DuVlOXFi.js → raw-json-settings-editor-panel-Dcumu3Qi.js} +1 -1
  399. package/dist/ui/assets/{searchable-select-BCxZHr8N.js → searchable-select-CWL2D5Ft.js} +1 -1
  400. package/dist/ui/assets/{separator-BV4BKMsB.js → separator-Do_vqTQD.js} +1 -1
  401. package/dist/ui/assets/{shared-D-Cu_o1h.js → shared-CwWuZx24.js} +1 -1
  402. package/dist/ui/assets/{table-DW66THR9.js → table-BP6nBZzg.js} +1 -1
  403. package/dist/ui/assets/{updates-V0D_Q8n4.js → updates-BTHJZ7Rk.js} +1 -1
  404. package/dist/ui/index.html +1 -1
  405. package/dist/utils/browser/browser-setup.d.ts +2 -2
  406. package/dist/utils/browser/browser-setup.d.ts.map +1 -1
  407. package/dist/utils/browser/browser-setup.js +4 -4
  408. package/dist/utils/browser/browser-setup.js.map +1 -1
  409. package/dist/utils/browser/browser-status.d.ts.map +1 -1
  410. package/dist/utils/browser/browser-status.js +3 -3
  411. package/dist/utils/browser/browser-status.js.map +1 -1
  412. package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -1
  413. package/dist/utils/hooks/get-image-analysis-hook-env.js +2 -2
  414. package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -1
  415. package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts.map +1 -1
  416. package/dist/utils/hooks/image-analyzer-hook-configuration.js +2 -2
  417. package/dist/utils/hooks/image-analyzer-hook-configuration.js.map +1 -1
  418. package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +1 -1
  419. package/dist/utils/hooks/image-analyzer-hook-installer.js +2 -2
  420. package/dist/utils/hooks/image-analyzer-hook-installer.js.map +1 -1
  421. package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -1
  422. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +2 -2
  423. package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -1
  424. package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
  425. package/dist/utils/image-analysis/mcp-installer.js +5 -5
  426. package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
  427. package/dist/utils/shell-executor.d.ts.map +1 -1
  428. package/dist/utils/shell-executor.js +2 -2
  429. package/dist/utils/shell-executor.js.map +1 -1
  430. package/dist/utils/websearch/hook-config.d.ts.map +1 -1
  431. package/dist/utils/websearch/hook-config.js +3 -3
  432. package/dist/utils/websearch/hook-config.js.map +1 -1
  433. package/dist/utils/websearch/hook-env.js +2 -2
  434. package/dist/utils/websearch/hook-env.js.map +1 -1
  435. package/dist/utils/websearch/hook-installer.d.ts.map +1 -1
  436. package/dist/utils/websearch/hook-installer.js +2 -2
  437. package/dist/utils/websearch/hook-installer.js.map +1 -1
  438. package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
  439. package/dist/utils/websearch/mcp-installer.js +5 -5
  440. package/dist/utils/websearch/mcp-installer.js.map +1 -1
  441. package/dist/utils/websearch/profile-hook-injector.d.ts.map +1 -1
  442. package/dist/utils/websearch/profile-hook-injector.js +3 -3
  443. package/dist/utils/websearch/profile-hook-injector.js.map +1 -1
  444. package/dist/utils/websearch/provider-secrets.js +2 -2
  445. package/dist/utils/websearch/provider-secrets.js.map +1 -1
  446. package/dist/utils/websearch/status.d.ts.map +1 -1
  447. package/dist/utils/websearch/status.js +4 -4
  448. package/dist/utils/websearch/status.js.map +1 -1
  449. package/dist/web-server/file-watcher.js +2 -2
  450. package/dist/web-server/file-watcher.js.map +1 -1
  451. package/dist/web-server/health/config-checks.d.ts.map +1 -1
  452. package/dist/web-server/health/config-checks.js +3 -3
  453. package/dist/web-server/health/config-checks.js.map +1 -1
  454. package/dist/web-server/health/profile-checks.d.ts.map +1 -1
  455. package/dist/web-server/health/profile-checks.js +3 -3
  456. package/dist/web-server/health/profile-checks.js.map +1 -1
  457. package/dist/web-server/health-service.d.ts.map +1 -1
  458. package/dist/web-server/health-service.js +7 -6
  459. package/dist/web-server/health-service.js.map +1 -1
  460. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  461. package/dist/web-server/middleware/auth-middleware.js +6 -7
  462. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  463. package/dist/web-server/models-dev/registry-cache.d.ts.map +1 -1
  464. package/dist/web-server/models-dev/registry-cache.js +2 -2
  465. package/dist/web-server/models-dev/registry-cache.js.map +1 -1
  466. package/dist/web-server/overview-routes.d.ts.map +1 -1
  467. package/dist/web-server/overview-routes.js +2 -2
  468. package/dist/web-server/overview-routes.js.map +1 -1
  469. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  470. package/dist/web-server/routes/account-routes.js +7 -7
  471. package/dist/web-server/routes/account-routes.js.map +1 -1
  472. package/dist/web-server/routes/auth-routes.d.ts.map +1 -1
  473. package/dist/web-server/routes/auth-routes.js +4 -4
  474. package/dist/web-server/routes/auth-routes.js.map +1 -1
  475. package/dist/web-server/routes/browser-routes.d.ts.map +1 -1
  476. package/dist/web-server/routes/browser-routes.js +2 -2
  477. package/dist/web-server/routes/browser-routes.js.map +1 -1
  478. package/dist/web-server/routes/channels-routes.d.ts.map +1 -1
  479. package/dist/web-server/routes/channels-routes.js +4 -4
  480. package/dist/web-server/routes/channels-routes.js.map +1 -1
  481. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  482. package/dist/web-server/routes/cliproxy-auth-routes.js +2 -2
  483. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  484. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  485. package/dist/web-server/routes/cliproxy-local-proxy.js +1 -11
  486. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  487. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  488. package/dist/web-server/routes/cliproxy-stats-routes.js +10 -8
  489. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  490. package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -1
  491. package/dist/web-server/routes/cliproxy-sync-routes.js +2 -2
  492. package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -1
  493. package/dist/web-server/routes/config-routes.d.ts.map +1 -1
  494. package/dist/web-server/routes/config-routes.js +6 -6
  495. package/dist/web-server/routes/config-routes.js.map +1 -1
  496. package/dist/web-server/routes/copilot-routes.d.ts.map +1 -1
  497. package/dist/web-server/routes/copilot-routes.js +3 -3
  498. package/dist/web-server/routes/copilot-routes.js.map +1 -1
  499. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -1
  500. package/dist/web-server/routes/copilot-settings-routes.js +6 -7
  501. package/dist/web-server/routes/copilot-settings-routes.js.map +1 -1
  502. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  503. package/dist/web-server/routes/cursor-routes.js +5 -5
  504. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  505. package/dist/web-server/routes/cursor-settings-routes.d.ts.map +1 -1
  506. package/dist/web-server/routes/cursor-settings-routes.js +8 -9
  507. package/dist/web-server/routes/cursor-settings-routes.js.map +1 -1
  508. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  509. package/dist/web-server/routes/image-analysis-routes.js +5 -6
  510. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  511. package/dist/web-server/routes/misc-routes.d.ts.map +1 -1
  512. package/dist/web-server/routes/misc-routes.js +10 -11
  513. package/dist/web-server/routes/misc-routes.js.map +1 -1
  514. package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
  515. package/dist/web-server/routes/proxy-routes.js +40 -10
  516. package/dist/web-server/routes/proxy-routes.js.map +1 -1
  517. package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
  518. package/dist/web-server/routes/route-helpers.js +7 -6
  519. package/dist/web-server/routes/route-helpers.js.map +1 -1
  520. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  521. package/dist/web-server/routes/settings-routes.js +8 -9
  522. package/dist/web-server/routes/settings-routes.js.map +1 -1
  523. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -1
  524. package/dist/web-server/routes/websearch-routes.js +4 -4
  525. package/dist/web-server/routes/websearch-routes.js.map +1 -1
  526. package/dist/web-server/services/claude-extension-binding-service.js +2 -2
  527. package/dist/web-server/services/claude-extension-binding-service.js.map +1 -1
  528. package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts.map +1 -1
  529. package/dist/web-server/services/cliproxy-dashboard-install-service.js +4 -3
  530. package/dist/web-server/services/cliproxy-dashboard-install-service.js.map +1 -1
  531. package/dist/web-server/services/logs-dashboard-service.d.ts.map +1 -1
  532. package/dist/web-server/services/logs-dashboard-service.js +2 -2
  533. package/dist/web-server/services/logs-dashboard-service.js.map +1 -1
  534. package/dist/web-server/shared-routes.d.ts.map +1 -1
  535. package/dist/web-server/shared-routes.js +4 -4
  536. package/dist/web-server/shared-routes.js.map +1 -1
  537. package/dist/web-server/usage/aggregator.d.ts.map +1 -1
  538. package/dist/web-server/usage/aggregator.js +2 -2
  539. package/dist/web-server/usage/aggregator.js.map +1 -1
  540. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -1
  541. package/dist/web-server/usage/cliproxy-usage-syncer.js +2 -2
  542. package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -1
  543. package/dist/web-server/usage/codex-native-usage-collector.d.ts +2 -0
  544. package/dist/web-server/usage/codex-native-usage-collector.d.ts.map +1 -1
  545. package/dist/web-server/usage/codex-native-usage-collector.js +99 -1
  546. package/dist/web-server/usage/codex-native-usage-collector.js.map +1 -1
  547. package/dist/web-server/usage/disk-cache.js +2 -2
  548. package/dist/web-server/usage/disk-cache.js.map +1 -1
  549. package/package.json +1 -1
  550. package/dist/commands/cliproxy/resolve-lifecycle-port.d.ts +0 -9
  551. package/dist/commands/cliproxy/resolve-lifecycle-port.d.ts.map +0 -1
  552. package/dist/commands/cliproxy/resolve-lifecycle-port.js +0 -14
  553. package/dist/commands/cliproxy/resolve-lifecycle-port.js.map +0 -1
  554. package/dist/ui/assets/cliproxy-CdqYwRJH.js +0 -3
@@ -0,0 +1,76 @@
1
+ /**
2
+ * io-locks.ts
3
+ *
4
+ * Path constants, lockfile management, and config I/O helpers extracted from
5
+ * unified-config-loader.ts (Phase 1 split — issue #1164).
6
+ *
7
+ * Forward-reference note: loadUnifiedConfigWithLockHeld and
8
+ * writeUnifiedConfigWithLockHeld depend on mergeWithDefaults,
9
+ * validateCompositeVariants, generateYamlHeader, and generateYamlWithComments
10
+ * which still live in unified-config-loader.ts (extracted in later phases).
11
+ * Those are passed as callbacks to avoid a circular import. Once Phases 2–3
12
+ * land in separate modules with no dependency on this file, they can be
13
+ * imported directly.
14
+ */
15
+ import type { UnifiedConfig } from '../unified-config-types';
16
+ export declare const CONFIG_YAML = "config.yaml";
17
+ export declare const CONFIG_JSON = "config.json";
18
+ export declare const CONFIG_LOCK = "config.yaml.lock";
19
+ /** Lock is stale after this many milliseconds */
20
+ export declare const LOCK_STALE_MS = 5000;
21
+ export declare const GO_DURATION_SEGMENT: string;
22
+ export declare const GO_DURATION_PATTERN: RegExp;
23
+ /**
24
+ * Get path to unified config.yaml
25
+ */
26
+ export declare function getConfigYamlPath(): string;
27
+ /**
28
+ * Get path to legacy config.json
29
+ */
30
+ export declare function getConfigJsonPath(): string;
31
+ /**
32
+ * Acquire lockfile for config write operations.
33
+ * Returns a lock token if acquired, null if already locked by another process.
34
+ * Cleans up stale locks (older than LOCK_STALE_MS).
35
+ */
36
+ export declare function acquireLock(): string | null;
37
+ /**
38
+ * Release lockfile after config write operation.
39
+ */
40
+ export declare function releaseLock(lockToken: string): void;
41
+ /**
42
+ * Check if unified config.yaml exists
43
+ */
44
+ export declare function hasUnifiedConfig(): boolean;
45
+ /**
46
+ * Check if legacy config.json exists
47
+ */
48
+ export declare function hasLegacyConfig(): boolean;
49
+ /**
50
+ * Sync sleep helper for lock retry loops.
51
+ * Uses Atomics.wait when available to avoid CPU-intensive busy-wait.
52
+ */
53
+ export declare function sleepSync(ms: number): void;
54
+ /**
55
+ * Execute a callback while holding the config lock.
56
+ */
57
+ export declare function withConfigWriteLock<T>(callback: () => T): T;
58
+ /**
59
+ * Load unified config directly from disk while lock is already held.
60
+ * Falls back to empty config when file doesn't exist.
61
+ *
62
+ * Forward-reference: mergeWithDefaults and validateCompositeVariants are
63
+ * passed as callbacks to avoid a circular dependency. They will be imported
64
+ * directly once all phases are complete.
65
+ */
66
+ export declare function loadUnifiedConfigWithLockHeld(mergeWithDefaults: (partial: Partial<UnifiedConfig>) => UnifiedConfig, validateCompositeVariants: (config: UnifiedConfig) => void): UnifiedConfig;
67
+ /**
68
+ * Write unified config to disk while lock is already held.
69
+ * Uses atomic write (temp file + rename) to prevent corruption.
70
+ *
71
+ * Forward-reference: generateYamlHeader and generateYamlWithComments are
72
+ * passed as callbacks to avoid a circular dependency. They will be imported
73
+ * directly once all phases are complete.
74
+ */
75
+ export declare function writeUnifiedConfigWithLockHeld(config: UnifiedConfig, generateYamlHeader: () => string, generateYamlWithComments: (config: UnifiedConfig) => string): void;
76
+ //# sourceMappingURL=io-locks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io-locks.d.ts","sourceRoot":"","sources":["../../../src/config/loader/io-locks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,iDAAiD;AACjD,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,mBAAmB,QAAwD,CAAC;AACzF,eAAO,MAAM,mBAAmB,QAA0C,CAAC;AAM3E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AA0BD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAuC3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAanD;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAMD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAS1C;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAwB3D;AAMD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,aAAa,EACrE,yBAAyB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GACzD,aAAa,CAgBf;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,aAAa,EACrB,kBAAkB,EAAE,MAAM,MAAM,EAChC,wBAAwB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,MAAM,GAC1D,IAAI,CAwCN"}
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ /**
3
+ * io-locks.ts
4
+ *
5
+ * Path constants, lockfile management, and config I/O helpers extracted from
6
+ * unified-config-loader.ts (Phase 1 split — issue #1164).
7
+ *
8
+ * Forward-reference note: loadUnifiedConfigWithLockHeld and
9
+ * writeUnifiedConfigWithLockHeld depend on mergeWithDefaults,
10
+ * validateCompositeVariants, generateYamlHeader, and generateYamlWithComments
11
+ * which still live in unified-config-loader.ts (extracted in later phases).
12
+ * Those are passed as callbacks to avoid a circular import. Once Phases 2–3
13
+ * land in separate modules with no dependency on this file, they can be
14
+ * imported directly.
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.writeUnifiedConfigWithLockHeld = exports.loadUnifiedConfigWithLockHeld = exports.withConfigWriteLock = exports.sleepSync = exports.hasLegacyConfig = exports.hasUnifiedConfig = exports.releaseLock = exports.acquireLock = exports.getConfigJsonPath = exports.getConfigYamlPath = exports.GO_DURATION_PATTERN = exports.GO_DURATION_SEGMENT = exports.LOCK_STALE_MS = exports.CONFIG_LOCK = exports.CONFIG_JSON = exports.CONFIG_YAML = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const crypto = __importStar(require("crypto"));
44
+ const yaml = __importStar(require("js-yaml"));
45
+ const config_manager_1 = require("../../utils/config-manager");
46
+ const unified_config_types_1 = require("../unified-config-types");
47
+ // ---------------------------------------------------------------------------
48
+ // Path constants
49
+ // ---------------------------------------------------------------------------
50
+ exports.CONFIG_YAML = 'config.yaml';
51
+ exports.CONFIG_JSON = 'config.json';
52
+ exports.CONFIG_LOCK = 'config.yaml.lock';
53
+ /** Lock is stale after this many milliseconds */
54
+ exports.LOCK_STALE_MS = 5000;
55
+ exports.GO_DURATION_SEGMENT = String.raw `(?:\d+(?:\.\d+)?(?:ns|us|µs|μs|ms|s|m|h))`;
56
+ exports.GO_DURATION_PATTERN = new RegExp(`^${exports.GO_DURATION_SEGMENT}+$`);
57
+ // ---------------------------------------------------------------------------
58
+ // Path helpers
59
+ // ---------------------------------------------------------------------------
60
+ /**
61
+ * Get path to unified config.yaml
62
+ */
63
+ function getConfigYamlPath() {
64
+ return path.join((0, config_manager_1.getCcsDir)(), exports.CONFIG_YAML);
65
+ }
66
+ exports.getConfigYamlPath = getConfigYamlPath;
67
+ /**
68
+ * Get path to legacy config.json
69
+ */
70
+ function getConfigJsonPath() {
71
+ return path.join((0, config_manager_1.getCcsDir)(), exports.CONFIG_JSON);
72
+ }
73
+ exports.getConfigJsonPath = getConfigJsonPath;
74
+ /**
75
+ * Get path to config lockfile (internal)
76
+ */
77
+ function getLockFilePath() {
78
+ return path.join((0, config_manager_1.getCcsDir)(), exports.CONFIG_LOCK);
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Process check
82
+ // ---------------------------------------------------------------------------
83
+ function processExists(pid) {
84
+ try {
85
+ process.kill(pid, 0);
86
+ return true;
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ }
92
+ // ---------------------------------------------------------------------------
93
+ // Lockfile primitives
94
+ // ---------------------------------------------------------------------------
95
+ /**
96
+ * Acquire lockfile for config write operations.
97
+ * Returns a lock token if acquired, null if already locked by another process.
98
+ * Cleans up stale locks (older than LOCK_STALE_MS).
99
+ */
100
+ function acquireLock() {
101
+ const lockPath = getLockFilePath();
102
+ const lockDir = path.dirname(lockPath);
103
+ const lockToken = crypto.randomUUID();
104
+ const lockData = `${process.pid}\n${Date.now()}\n${lockToken}`;
105
+ try {
106
+ if (!fs.existsSync(lockDir)) {
107
+ fs.mkdirSync(lockDir, { recursive: true, mode: 0o700 });
108
+ }
109
+ // Check if lock exists
110
+ if (fs.existsSync(lockPath)) {
111
+ const content = fs.readFileSync(lockPath, 'utf8');
112
+ const [pidStr, timestampStr] = content.trim().split('\n');
113
+ const pid = Number.parseInt(pidStr, 10);
114
+ const timestamp = Number.parseInt(timestampStr, 10);
115
+ const hasLiveOwner = Number.isInteger(pid) && pid > 0 && processExists(pid);
116
+ const isStale = !Number.isFinite(timestamp) || Date.now() - timestamp > exports.LOCK_STALE_MS;
117
+ if (hasLiveOwner) {
118
+ return null;
119
+ }
120
+ if (isStale || !hasLiveOwner) {
121
+ fs.unlinkSync(lockPath);
122
+ }
123
+ }
124
+ // Acquire lock
125
+ fs.writeFileSync(lockPath, lockData, { flag: 'wx', mode: 0o600 });
126
+ return lockToken;
127
+ }
128
+ catch (error) {
129
+ // EEXIST means another process acquired the lock between our check and write
130
+ if (error.code === 'EEXIST') {
131
+ return null;
132
+ }
133
+ return null;
134
+ }
135
+ }
136
+ exports.acquireLock = acquireLock;
137
+ /**
138
+ * Release lockfile after config write operation.
139
+ */
140
+ function releaseLock(lockToken) {
141
+ const lockPath = getLockFilePath();
142
+ try {
143
+ if (fs.existsSync(lockPath)) {
144
+ const content = fs.readFileSync(lockPath, 'utf8');
145
+ const fileToken = content.trim().split('\n')[2];
146
+ if (fileToken === lockToken) {
147
+ fs.unlinkSync(lockPath);
148
+ }
149
+ }
150
+ }
151
+ catch {
152
+ // Ignore cleanup errors
153
+ }
154
+ }
155
+ exports.releaseLock = releaseLock;
156
+ // ---------------------------------------------------------------------------
157
+ // Config format detection
158
+ // ---------------------------------------------------------------------------
159
+ /**
160
+ * Check if unified config.yaml exists
161
+ */
162
+ function hasUnifiedConfig() {
163
+ return fs.existsSync(getConfigYamlPath());
164
+ }
165
+ exports.hasUnifiedConfig = hasUnifiedConfig;
166
+ /**
167
+ * Check if legacy config.json exists
168
+ */
169
+ function hasLegacyConfig() {
170
+ return fs.existsSync(getConfigJsonPath());
171
+ }
172
+ exports.hasLegacyConfig = hasLegacyConfig;
173
+ // ---------------------------------------------------------------------------
174
+ // Sync sleep
175
+ // ---------------------------------------------------------------------------
176
+ /**
177
+ * Sync sleep helper for lock retry loops.
178
+ * Uses Atomics.wait when available to avoid CPU-intensive busy-wait.
179
+ */
180
+ function sleepSync(ms) {
181
+ try {
182
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
183
+ }
184
+ catch {
185
+ const end = Date.now() + ms;
186
+ while (Date.now() < end) {
187
+ /* busy-wait */
188
+ }
189
+ }
190
+ }
191
+ exports.sleepSync = sleepSync;
192
+ // ---------------------------------------------------------------------------
193
+ // Lock-aware execution wrapper
194
+ // ---------------------------------------------------------------------------
195
+ /**
196
+ * Execute a callback while holding the config lock.
197
+ */
198
+ function withConfigWriteLock(callback) {
199
+ // Acquire lock (retry for up to 1 second)
200
+ const maxRetries = 10;
201
+ const retryDelayMs = 100;
202
+ let lockToken = null;
203
+ for (let i = 0; i < maxRetries; i++) {
204
+ const acquiredToken = acquireLock();
205
+ if (acquiredToken) {
206
+ lockToken = acquiredToken;
207
+ break;
208
+ }
209
+ sleepSync(retryDelayMs);
210
+ }
211
+ if (!lockToken) {
212
+ throw new Error('Config file is locked by another process. Wait a moment and try again.');
213
+ }
214
+ try {
215
+ return callback();
216
+ }
217
+ finally {
218
+ // Always release lock
219
+ releaseLock(lockToken);
220
+ }
221
+ }
222
+ exports.withConfigWriteLock = withConfigWriteLock;
223
+ // ---------------------------------------------------------------------------
224
+ // Lock-held read/write helpers
225
+ // ---------------------------------------------------------------------------
226
+ /**
227
+ * Load unified config directly from disk while lock is already held.
228
+ * Falls back to empty config when file doesn't exist.
229
+ *
230
+ * Forward-reference: mergeWithDefaults and validateCompositeVariants are
231
+ * passed as callbacks to avoid a circular dependency. They will be imported
232
+ * directly once all phases are complete.
233
+ */
234
+ function loadUnifiedConfigWithLockHeld(mergeWithDefaults, validateCompositeVariants) {
235
+ const yamlPath = getConfigYamlPath();
236
+ if (!fs.existsSync(yamlPath)) {
237
+ return (0, unified_config_types_1.createEmptyUnifiedConfig)();
238
+ }
239
+ const content = fs.readFileSync(yamlPath, 'utf8');
240
+ const parsed = yaml.load(content);
241
+ if (!(0, unified_config_types_1.isUnifiedConfig)(parsed)) {
242
+ throw new Error(`Invalid config format in ${yamlPath}`);
243
+ }
244
+ const merged = mergeWithDefaults(parsed);
245
+ validateCompositeVariants(merged);
246
+ return merged;
247
+ }
248
+ exports.loadUnifiedConfigWithLockHeld = loadUnifiedConfigWithLockHeld;
249
+ /**
250
+ * Write unified config to disk while lock is already held.
251
+ * Uses atomic write (temp file + rename) to prevent corruption.
252
+ *
253
+ * Forward-reference: generateYamlHeader and generateYamlWithComments are
254
+ * passed as callbacks to avoid a circular dependency. They will be imported
255
+ * directly once all phases are complete.
256
+ */
257
+ function writeUnifiedConfigWithLockHeld(config, generateYamlHeader, generateYamlWithComments) {
258
+ const yamlPath = getConfigYamlPath();
259
+ const dir = path.dirname(yamlPath);
260
+ // Ensure directory exists
261
+ if (!fs.existsSync(dir)) {
262
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
263
+ }
264
+ // Ensure version is set
265
+ config.version = unified_config_types_1.UNIFIED_CONFIG_VERSION;
266
+ // Generate YAML with section comments
267
+ const yamlContent = generateYamlWithComments(config);
268
+ const content = generateYamlHeader() + yamlContent;
269
+ // Atomic write: write to temp file, then rename
270
+ const tempPath = `${yamlPath}.tmp.${process.pid}`;
271
+ try {
272
+ fs.writeFileSync(tempPath, content, { mode: 0o600 });
273
+ fs.renameSync(tempPath, yamlPath);
274
+ }
275
+ catch (error) {
276
+ // Clean up temp file on error
277
+ if (fs.existsSync(tempPath)) {
278
+ try {
279
+ fs.unlinkSync(tempPath);
280
+ }
281
+ catch {
282
+ // Ignore cleanup errors
283
+ }
284
+ }
285
+ // Classify filesystem errors
286
+ const err = error;
287
+ if (err.code === 'ENOSPC') {
288
+ throw new Error('Disk full - cannot save config. Free up space and try again.');
289
+ }
290
+ else if (err.code === 'EROFS' || err.code === 'EACCES') {
291
+ throw new Error(`Cannot write config - check file permissions: ${err.message}`);
292
+ }
293
+ throw error;
294
+ }
295
+ }
296
+ exports.writeUnifiedConfigWithLockHeld = writeUnifiedConfigWithLockHeld;
297
+ //# sourceMappingURL=io-locks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io-locks.js","sourceRoot":"","sources":["../../../src/config/loader/io-locks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * normalizers.ts
3
+ *
4
+ * Input normalization and validation helpers extracted from
5
+ * unified-config-loader.ts (Phase 2 split — issue #1164).
6
+ *
7
+ * Contains: browser config normalizers, session affinity TTL normalizer,
8
+ * composite variant validator, continuity config normalizer, and official
9
+ * channels config normalizer.
10
+ */
11
+ import type { UnifiedConfig, BrowserConfig, BrowserEvalMode, BrowserToolPolicy, OfficialChannelsConfig, ContinuityConfig } from '../unified-config-types';
12
+ export declare function normalizeBrowserDevtoolsPort(value: number | undefined): number;
13
+ export declare function normalizeBrowserPolicy(value: string | undefined): BrowserToolPolicy;
14
+ export declare function normalizeBrowserEvalMode(value: string | undefined): BrowserEvalMode;
15
+ export declare function canonicalizeBrowserConfig(config?: BrowserConfig, fallback?: BrowserConfig): BrowserConfig;
16
+ export declare function normalizeSessionAffinityTtl(value: unknown, fallback: string): string;
17
+ export declare function hasPositiveDuration(value: string): boolean;
18
+ /**
19
+ * Validate composite variant provider strings.
20
+ * Warns about invalid providers in composite variant configurations.
21
+ */
22
+ export declare function validateCompositeVariants(config: UnifiedConfig): void;
23
+ /**
24
+ * Normalize continuity inheritance mapping payload.
25
+ * Keeps only non-empty string keys and values.
26
+ */
27
+ export declare function normalizeContinuityInheritanceMap(value: unknown): Record<string, string> | undefined;
28
+ /**
29
+ * Normalize continuity section.
30
+ * Supports legacy root key: continuity_inherit_from_account.
31
+ */
32
+ export declare function normalizeContinuityConfig(partial: Partial<UnifiedConfig>): ContinuityConfig | undefined;
33
+ export interface LegacyDiscordChannelsConfig {
34
+ enabled?: boolean;
35
+ unattended?: boolean;
36
+ }
37
+ export declare function normalizeOfficialChannelsConfig(partial: Partial<UnifiedConfig> & {
38
+ discord_channels?: LegacyDiscordChannelsConfig;
39
+ }): OfficialChannelsConfig;
40
+ //# sourceMappingURL=normalizers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizers.d.ts","sourceRoot":"","sources":["../../../src/config/loader/normalizers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EAEtB,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAcjC,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAW9E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAEnF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAMnF;AAED,wBAAgB,yBAAyB,CACvC,MAAM,CAAC,EAAE,aAAa,EACtB,QAAQ,GAAE,aAAsC,GAC/C,aAAa,CAsBf;AAMD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWpF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAU1D;AAMD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAerE;AAMD;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAkBpC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,gBAAgB,GAAG,SAAS,CAiB9B;AAMD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;IAAE,gBAAgB,CAAC,EAAE,2BAA2B,CAAA;CAAE,GACnF,sBAAsB,CAqBxB"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * normalizers.ts
4
+ *
5
+ * Input normalization and validation helpers extracted from
6
+ * unified-config-loader.ts (Phase 2 split — issue #1164).
7
+ *
8
+ * Contains: browser config normalizers, session affinity TTL normalizer,
9
+ * composite variant validator, continuity config normalizer, and official
10
+ * channels config normalizer.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.normalizeOfficialChannelsConfig = exports.normalizeContinuityConfig = exports.normalizeContinuityInheritanceMap = exports.validateCompositeVariants = exports.hasPositiveDuration = exports.normalizeSessionAffinityTtl = exports.canonicalizeBrowserConfig = exports.normalizeBrowserEvalMode = exports.normalizeBrowserPolicy = exports.normalizeBrowserDevtoolsPort = void 0;
14
+ const unified_config_types_1 = require("../unified-config-types");
15
+ const composite_validator_1 = require("../../cliproxy/config/composite-validator");
16
+ const official_channels_ids_1 = require("../../channels/official-channels-ids");
17
+ const browser_settings_1 = require("../../utils/browser/browser-settings");
18
+ const io_locks_1 = require("./io-locks");
19
+ // ---------------------------------------------------------------------------
20
+ // Browser normalizers
21
+ // ---------------------------------------------------------------------------
22
+ function normalizeBrowserDevtoolsPort(value) {
23
+ if (!Number.isFinite(value)) {
24
+ return unified_config_types_1.DEFAULT_BROWSER_CONFIG.claude.devtools_port;
25
+ }
26
+ const port = Math.floor(value);
27
+ if (port < 1 || port > 65535) {
28
+ return unified_config_types_1.DEFAULT_BROWSER_CONFIG.claude.devtools_port;
29
+ }
30
+ return port;
31
+ }
32
+ exports.normalizeBrowserDevtoolsPort = normalizeBrowserDevtoolsPort;
33
+ function normalizeBrowserPolicy(value) {
34
+ return value === 'auto' || value === 'manual' ? value : unified_config_types_1.DEFAULT_BROWSER_CONFIG.claude.policy;
35
+ }
36
+ exports.normalizeBrowserPolicy = normalizeBrowserPolicy;
37
+ function normalizeBrowserEvalMode(value) {
38
+ if (value === 'disabled' || value === 'readonly' || value === 'readwrite') {
39
+ return value;
40
+ }
41
+ return unified_config_types_1.DEFAULT_BROWSER_CONFIG.claude.eval_mode ?? 'readonly';
42
+ }
43
+ exports.normalizeBrowserEvalMode = normalizeBrowserEvalMode;
44
+ function canonicalizeBrowserConfig(config, fallback = unified_config_types_1.DEFAULT_BROWSER_CONFIG) {
45
+ const claudeUserDataDir = config?.claude?.user_data_dir === undefined
46
+ ? fallback.claude.user_data_dir || (0, browser_settings_1.getRecommendedBrowserUserDataDir)()
47
+ : config.claude.user_data_dir.trim() || (0, browser_settings_1.getRecommendedBrowserUserDataDir)();
48
+ return {
49
+ claude: {
50
+ enabled: config?.claude?.enabled ?? fallback.claude.enabled,
51
+ policy: normalizeBrowserPolicy(config?.claude?.policy ?? fallback.claude.policy),
52
+ user_data_dir: claudeUserDataDir,
53
+ devtools_port: normalizeBrowserDevtoolsPort(config?.claude?.devtools_port ?? fallback.claude.devtools_port),
54
+ eval_mode: normalizeBrowserEvalMode(config?.claude?.eval_mode ?? fallback.claude.eval_mode),
55
+ },
56
+ codex: {
57
+ enabled: config?.codex?.enabled ?? fallback.codex.enabled,
58
+ policy: normalizeBrowserPolicy(config?.codex?.policy ?? fallback.codex.policy),
59
+ eval_mode: normalizeBrowserEvalMode(config?.codex?.eval_mode ?? fallback.codex.eval_mode),
60
+ },
61
+ };
62
+ }
63
+ exports.canonicalizeBrowserConfig = canonicalizeBrowserConfig;
64
+ // ---------------------------------------------------------------------------
65
+ // Session affinity TTL normalizer
66
+ // ---------------------------------------------------------------------------
67
+ function normalizeSessionAffinityTtl(value, fallback) {
68
+ if (typeof value !== 'string') {
69
+ return fallback;
70
+ }
71
+ const trimmed = value.trim();
72
+ if (!trimmed || !io_locks_1.GO_DURATION_PATTERN.test(trimmed) || !hasPositiveDuration(trimmed)) {
73
+ return fallback;
74
+ }
75
+ return trimmed;
76
+ }
77
+ exports.normalizeSessionAffinityTtl = normalizeSessionAffinityTtl;
78
+ function hasPositiveDuration(value) {
79
+ const segments = value.match(new RegExp(io_locks_1.GO_DURATION_SEGMENT, 'g'));
80
+ if (!segments) {
81
+ return false;
82
+ }
83
+ return segments.some((segment) => {
84
+ const numeric = parseFloat(segment);
85
+ return Number.isFinite(numeric) && numeric > 0;
86
+ });
87
+ }
88
+ exports.hasPositiveDuration = hasPositiveDuration;
89
+ // ---------------------------------------------------------------------------
90
+ // Composite variant validator
91
+ // ---------------------------------------------------------------------------
92
+ /**
93
+ * Validate composite variant provider strings.
94
+ * Warns about invalid providers in composite variant configurations.
95
+ */
96
+ function validateCompositeVariants(config) {
97
+ const variants = config.cliproxy?.variants;
98
+ if (!variants)
99
+ return;
100
+ for (const [name, variant] of Object.entries(variants)) {
101
+ if ('type' in variant && variant.type === 'composite') {
102
+ const error = (0, composite_validator_1.validateCompositeTiers)(variant.tiers, {
103
+ defaultTier: variant.default_tier,
104
+ requireAllTiers: true,
105
+ });
106
+ if (error) {
107
+ console.warn(`[!] Variant '${name}': invalid composite config (${error})`);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ exports.validateCompositeVariants = validateCompositeVariants;
113
+ // ---------------------------------------------------------------------------
114
+ // Continuity config normalizer
115
+ // ---------------------------------------------------------------------------
116
+ /**
117
+ * Normalize continuity inheritance mapping payload.
118
+ * Keeps only non-empty string keys and values.
119
+ */
120
+ function normalizeContinuityInheritanceMap(value) {
121
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
122
+ return undefined;
123
+ }
124
+ const normalized = {};
125
+ for (const [profileName, accountName] of Object.entries(value)) {
126
+ const normalizedProfile = profileName.trim();
127
+ const normalizedAccount = typeof accountName === 'string' ? accountName.trim() : '';
128
+ if (!normalizedProfile || !normalizedAccount) {
129
+ continue;
130
+ }
131
+ normalized[normalizedProfile] = normalizedAccount;
132
+ }
133
+ return Object.keys(normalized).length > 0 ? normalized : undefined;
134
+ }
135
+ exports.normalizeContinuityInheritanceMap = normalizeContinuityInheritanceMap;
136
+ /**
137
+ * Normalize continuity section.
138
+ * Supports legacy root key: continuity_inherit_from_account.
139
+ */
140
+ function normalizeContinuityConfig(partial) {
141
+ const legacyMap = normalizeContinuityInheritanceMap(partial
142
+ .continuity_inherit_from_account);
143
+ const continuityMap = normalizeContinuityInheritanceMap(partial.continuity?.inherit_from_account);
144
+ if (!legacyMap && !continuityMap) {
145
+ return undefined;
146
+ }
147
+ return {
148
+ inherit_from_account: {
149
+ ...(legacyMap ?? {}),
150
+ ...(continuityMap ?? {}),
151
+ },
152
+ };
153
+ }
154
+ exports.normalizeContinuityConfig = normalizeContinuityConfig;
155
+ function normalizeOfficialChannelsConfig(partial) {
156
+ const hasCanonicalChannelsSection = partial.channels !== undefined;
157
+ const hasExplicitSelectedField = hasCanonicalChannelsSection &&
158
+ Object.prototype.hasOwnProperty.call(partial.channels, 'selected');
159
+ const rawSelected = hasExplicitSelectedField && Array.isArray(partial.channels?.selected)
160
+ ? partial.channels.selected.filter((value) => (0, official_channels_ids_1.isOfficialChannelId)(value))
161
+ : [];
162
+ return {
163
+ selected: hasCanonicalChannelsSection
164
+ ? (0, official_channels_ids_1.normalizeOfficialChannelIds)(rawSelected)
165
+ : (0, official_channels_ids_1.resolveLegacyDiscordSelection)(partial.discord_channels?.enabled),
166
+ unattended: partial.channels?.unattended ??
167
+ partial.discord_channels?.unattended ??
168
+ unified_config_types_1.DEFAULT_OFFICIAL_CHANNELS_CONFIG.unattended,
169
+ };
170
+ }
171
+ exports.normalizeOfficialChannelsConfig = normalizeOfficialChannelsConfig;
172
+ //# sourceMappingURL=normalizers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizers.js","sourceRoot":"","sources":["../../../src/config/loader/normalizers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * yaml-serializer.ts
3
+ *
4
+ * YAML generation helpers extracted from unified-config-loader.ts
5
+ * (Phase 3 split — issue #1164).
6
+ *
7
+ * Contains: generateYamlHeader, generateYamlWithComments.
8
+ * These produce the commented YAML written to config.yaml on every save.
9
+ */
10
+ import type { UnifiedConfig } from '../unified-config-types';
11
+ /**
12
+ * Generate YAML header with helpful comments.
13
+ */
14
+ export declare function generateYamlHeader(): string;
15
+ /**
16
+ * Generate YAML content with section comments for better readability.
17
+ */
18
+ export declare function generateYamlWithComments(config: UnifiedConfig): string;
19
+ //# sourceMappingURL=yaml-serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-serializer.d.ts","sourceRoot":"","sources":["../../../src/config/loader/yaml-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAsUtE"}