@kaitranntt/ccs 7.45.0 → 7.46.0-dev.2

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 (204) hide show
  1. package/README.md +12 -0
  2. package/config/base-kimi.settings.json +8 -9
  3. package/config/base-km.settings.json +10 -0
  4. package/dist/api/services/provider-presets.js +2 -2
  5. package/dist/api/services/provider-presets.js.map +1 -1
  6. package/dist/auth/profile-detector.d.ts +4 -1
  7. package/dist/auth/profile-detector.d.ts.map +1 -1
  8. package/dist/auth/profile-detector.js +4 -1
  9. package/dist/auth/profile-detector.js.map +1 -1
  10. package/dist/ccs.js +235 -63
  11. package/dist/ccs.js.map +1 -1
  12. package/dist/cliproxy/auth/auth-types.d.ts +2 -1
  13. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  14. package/dist/cliproxy/auth/auth-types.js +20 -50
  15. package/dist/cliproxy/auth/auth-types.js.map +1 -1
  16. package/dist/cliproxy/auth/gemini-token-refresh.d.ts +5 -3
  17. package/dist/cliproxy/auth/gemini-token-refresh.d.ts.map +1 -1
  18. package/dist/cliproxy/auth/gemini-token-refresh.js +51 -35
  19. package/dist/cliproxy/auth/gemini-token-refresh.js.map +1 -1
  20. package/dist/cliproxy/auth/provider-refreshers/index.d.ts +3 -3
  21. package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -1
  22. package/dist/cliproxy/auth/provider-refreshers/index.js +35 -33
  23. package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -1
  24. package/dist/cliproxy/codex-reasoning-proxy.d.ts.map +1 -1
  25. package/dist/cliproxy/codex-reasoning-proxy.js +23 -9
  26. package/dist/cliproxy/codex-reasoning-proxy.js.map +1 -1
  27. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  28. package/dist/cliproxy/config/env-builder.js +37 -0
  29. package/dist/cliproxy/config/env-builder.js.map +1 -1
  30. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  31. package/dist/cliproxy/config/generator.js +2 -16
  32. package/dist/cliproxy/config/generator.js.map +1 -1
  33. package/dist/cliproxy/management-api-client.d.ts.map +1 -1
  34. package/dist/cliproxy/management-api-client.js +16 -4
  35. package/dist/cliproxy/management-api-client.js.map +1 -1
  36. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  37. package/dist/cliproxy/model-catalog.js +36 -0
  38. package/dist/cliproxy/model-catalog.js.map +1 -1
  39. package/dist/cliproxy/provider-capabilities.d.ts +21 -0
  40. package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
  41. package/dist/cliproxy/provider-capabilities.js +122 -13
  42. package/dist/cliproxy/provider-capabilities.js.map +1 -1
  43. package/dist/cliproxy/quota-fetcher-codex.d.ts +8 -2
  44. package/dist/cliproxy/quota-fetcher-codex.d.ts.map +1 -1
  45. package/dist/cliproxy/quota-fetcher-codex.js +101 -1
  46. package/dist/cliproxy/quota-fetcher-codex.js.map +1 -1
  47. package/dist/cliproxy/quota-types.d.ts +20 -0
  48. package/dist/cliproxy/quota-types.d.ts.map +1 -1
  49. package/dist/cliproxy/session-tracker.d.ts +6 -1
  50. package/dist/cliproxy/session-tracker.d.ts.map +1 -1
  51. package/dist/cliproxy/session-tracker.js +97 -36
  52. package/dist/cliproxy/session-tracker.js.map +1 -1
  53. package/dist/cliproxy/types.d.ts +2 -1
  54. package/dist/cliproxy/types.d.ts.map +1 -1
  55. package/dist/cliproxy/types.js.map +1 -1
  56. package/dist/commands/cliproxy/help-subcommand.js +1 -1
  57. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  58. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  59. package/dist/commands/cliproxy/quota-subcommand.js +73 -4
  60. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  61. package/dist/commands/help-command.d.ts.map +1 -1
  62. package/dist/commands/help-command.js +18 -4
  63. package/dist/commands/help-command.js.map +1 -1
  64. package/dist/commands/setup-command.d.ts.map +1 -1
  65. package/dist/commands/setup-command.js +4 -3
  66. package/dist/commands/setup-command.js.map +1 -1
  67. package/dist/config/migration-manager.d.ts.map +1 -1
  68. package/dist/config/migration-manager.js +2 -1
  69. package/dist/config/migration-manager.js.map +1 -1
  70. package/dist/config/unified-config-types.d.ts +14 -6
  71. package/dist/config/unified-config-types.d.ts.map +1 -1
  72. package/dist/config/unified-config-types.js +5 -12
  73. package/dist/config/unified-config-types.js.map +1 -1
  74. package/dist/cursor/cursor-auth.d.ts.map +1 -1
  75. package/dist/cursor/cursor-auth.js +11 -1
  76. package/dist/cursor/cursor-auth.js.map +1 -1
  77. package/dist/cursor/cursor-client-policy.d.ts +16 -0
  78. package/dist/cursor/cursor-client-policy.d.ts.map +1 -0
  79. package/dist/cursor/cursor-client-policy.js +137 -0
  80. package/dist/cursor/cursor-client-policy.js.map +1 -0
  81. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  82. package/dist/cursor/cursor-daemon-entry.js +59 -19
  83. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  84. package/dist/cursor/cursor-default-models.d.ts +21 -0
  85. package/dist/cursor/cursor-default-models.d.ts.map +1 -0
  86. package/dist/cursor/cursor-default-models.js +173 -0
  87. package/dist/cursor/cursor-default-models.js.map +1 -0
  88. package/dist/cursor/cursor-executor.d.ts +4 -6
  89. package/dist/cursor/cursor-executor.d.ts.map +1 -1
  90. package/dist/cursor/cursor-executor.js +57 -76
  91. package/dist/cursor/cursor-executor.js.map +1 -1
  92. package/dist/cursor/cursor-models.d.ts +14 -17
  93. package/dist/cursor/cursor-models.d.ts.map +1 -1
  94. package/dist/cursor/cursor-models.js +174 -185
  95. package/dist/cursor/cursor-models.js.map +1 -1
  96. package/dist/cursor/cursor-protobuf-decoder.d.ts.map +1 -1
  97. package/dist/cursor/cursor-protobuf-decoder.js +4 -1
  98. package/dist/cursor/cursor-protobuf-decoder.js.map +1 -1
  99. package/dist/cursor/cursor-protobuf-schema.d.ts +1 -1
  100. package/dist/cursor/cursor-protobuf-schema.d.ts.map +1 -1
  101. package/dist/cursor/index.d.ts +1 -1
  102. package/dist/cursor/index.d.ts.map +1 -1
  103. package/dist/cursor/index.js +4 -1
  104. package/dist/cursor/index.js.map +1 -1
  105. package/dist/targets/claude-adapter.d.ts +29 -0
  106. package/dist/targets/claude-adapter.d.ts.map +1 -0
  107. package/dist/targets/claude-adapter.js +130 -0
  108. package/dist/targets/claude-adapter.js.map +1 -0
  109. package/dist/targets/droid-adapter.d.ts +34 -0
  110. package/dist/targets/droid-adapter.d.ts.map +1 -0
  111. package/dist/targets/droid-adapter.js +174 -0
  112. package/dist/targets/droid-adapter.js.map +1 -0
  113. package/dist/targets/droid-config-manager.d.ts +33 -0
  114. package/dist/targets/droid-config-manager.d.ts.map +1 -0
  115. package/dist/targets/droid-config-manager.js +387 -0
  116. package/dist/targets/droid-config-manager.js.map +1 -0
  117. package/dist/targets/droid-detector.d.ts +25 -0
  118. package/dist/targets/droid-detector.d.ts.map +1 -0
  119. package/dist/targets/droid-detector.js +140 -0
  120. package/dist/targets/droid-detector.js.map +1 -0
  121. package/dist/targets/index.d.ts +14 -0
  122. package/dist/targets/index.d.ts.map +1 -0
  123. package/dist/targets/index.js +31 -0
  124. package/dist/targets/index.js.map +1 -0
  125. package/dist/targets/target-adapter.d.ts +83 -0
  126. package/dist/targets/target-adapter.d.ts.map +1 -0
  127. package/dist/targets/target-adapter.js +9 -0
  128. package/dist/targets/target-adapter.js.map +1 -0
  129. package/dist/targets/target-registry.d.ts +30 -0
  130. package/dist/targets/target-registry.d.ts.map +1 -0
  131. package/dist/targets/target-registry.js +53 -0
  132. package/dist/targets/target-registry.js.map +1 -0
  133. package/dist/targets/target-resolver.d.ts +26 -0
  134. package/dist/targets/target-resolver.d.ts.map +1 -0
  135. package/dist/targets/target-resolver.js +146 -0
  136. package/dist/targets/target-resolver.js.map +1 -0
  137. package/dist/types/config.d.ts +2 -1
  138. package/dist/types/config.d.ts.map +1 -1
  139. package/dist/types/config.js.map +1 -1
  140. package/dist/types/index.d.ts +1 -0
  141. package/dist/types/index.d.ts.map +1 -1
  142. package/dist/types/profile.d.ts +5 -0
  143. package/dist/types/profile.d.ts.map +1 -0
  144. package/dist/types/profile.js +3 -0
  145. package/dist/types/profile.js.map +1 -0
  146. package/dist/ui/assets/{accounts-B8J62kJ6.js → accounts-CJHXisjx.js} +1 -1
  147. package/dist/ui/assets/{alert-dialog-B5t_5_UL.js → alert-dialog-DvRUIk2A.js} +1 -1
  148. package/dist/ui/assets/{api-DuZyDFf7.js → api-BFsWwFfJ.js} +1 -1
  149. package/dist/ui/assets/{auth-section-Dnaxf97q.js → auth-section-BUqJUH8k.js} +1 -1
  150. package/dist/ui/assets/{backups-section-DUIq9Rxi.js → backups-section-B0Dk_ghY.js} +1 -1
  151. package/dist/ui/assets/cliproxy-DPjyDY8C.js +3 -0
  152. package/dist/ui/assets/cliproxy-control-panel-iy3uvshV.js +1 -0
  153. package/dist/ui/assets/{confirm-dialog-D7hNt3ez.js → confirm-dialog-BUoEw-06.js} +1 -1
  154. package/dist/ui/assets/copilot-xPWvOKWZ.js +3 -0
  155. package/dist/ui/assets/cursor-BhPxJvIp.js +1 -0
  156. package/dist/ui/assets/default-ports-1QQSffYX.js +1 -0
  157. package/dist/ui/assets/{globalenv-section-DuUcheRN.js → globalenv-section-CppHO-5c.js} +1 -1
  158. package/dist/ui/assets/{health-Ddkl8zIJ.js → health-C9qhmoTa.js} +1 -1
  159. package/dist/ui/assets/index-BBNL3emu.css +1 -0
  160. package/dist/ui/assets/index-BGbgkw9t.js +1 -0
  161. package/dist/ui/assets/index-BqElo-QK.js +1 -0
  162. package/dist/ui/assets/{index-D0I8OsQ3.js → index-CTXrydZe.js} +1 -1
  163. package/dist/ui/assets/{index-BRCdKMse.js → index-Cg8gb5M3.js} +1 -1
  164. package/dist/ui/assets/index-wjh3KdFc.js +47 -0
  165. package/dist/ui/assets/providers/kimi.svg +1 -0
  166. package/dist/ui/assets/{proxy-status-widget-DKYj4dWI.js → proxy-status-widget-BLmbEbsS.js} +1 -1
  167. package/dist/ui/assets/{separator-DrDw3JjB.js → separator-08pRfpz8.js} +1 -1
  168. package/dist/ui/assets/{shared-psG1uSqB.js → shared-CBRj6Qfm.js} +1 -1
  169. package/dist/ui/assets/{switch-C0ri2ChT.js → switch-D60SH-YX.js} +1 -1
  170. package/dist/ui/index.html +2 -2
  171. package/dist/utils/shell-executor.d.ts.map +1 -1
  172. package/dist/utils/shell-executor.js +32 -10
  173. package/dist/utils/shell-executor.js.map +1 -1
  174. package/dist/utils/signal-forwarder.d.ts +23 -0
  175. package/dist/utils/signal-forwarder.d.ts.map +1 -0
  176. package/dist/utils/signal-forwarder.js +70 -0
  177. package/dist/utils/signal-forwarder.js.map +1 -0
  178. package/dist/web-server/jsonl-parser.d.ts +1 -0
  179. package/dist/web-server/jsonl-parser.d.ts.map +1 -1
  180. package/dist/web-server/jsonl-parser.js +3 -0
  181. package/dist/web-server/jsonl-parser.js.map +1 -1
  182. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  183. package/dist/web-server/routes/cliproxy-stats-routes.js +2 -1
  184. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  185. package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
  186. package/dist/web-server/routes/proxy-routes.js +2 -1
  187. package/dist/web-server/routes/proxy-routes.js.map +1 -1
  188. package/dist/web-server/usage/data-aggregator.d.ts.map +1 -1
  189. package/dist/web-server/usage/data-aggregator.js +7 -1
  190. package/dist/web-server/usage/data-aggregator.js.map +1 -1
  191. package/dist/web-server/usage/handlers.d.ts.map +1 -1
  192. package/dist/web-server/usage/handlers.js +1 -0
  193. package/dist/web-server/usage/handlers.js.map +1 -1
  194. package/dist/web-server/usage/types.d.ts +2 -0
  195. package/dist/web-server/usage/types.d.ts.map +1 -1
  196. package/package.json +5 -2
  197. package/dist/ui/assets/cliproxy-aK19VC4f.js +0 -3
  198. package/dist/ui/assets/cliproxy-control-panel-9OS_kdTh.js +0 -1
  199. package/dist/ui/assets/copilot-B5dVoOMQ.js +0 -3
  200. package/dist/ui/assets/cursor-4zDGbBRA.js +0 -1
  201. package/dist/ui/assets/index-BRxqvMyp.js +0 -1
  202. package/dist/ui/assets/index-C6u1zYVL.css +0 -1
  203. package/dist/ui/assets/index-DOxNxHpI.js +0 -1
  204. package/dist/ui/assets/index-Dv5jtphl.js +0 -47
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Target Adapter Interface
3
+ *
4
+ * Abstraction layer for different CLI targets (Claude, Droid, etc.).
5
+ * Profile resolution is target-agnostic — only the "last mile" execution differs.
6
+ */
7
+ /// <reference types="node" />
8
+ /**
9
+ * Supported CLI target types.
10
+ * 'claude' is the default; additional targets register via target-registry.
11
+ */
12
+ import type { ProfileType } from '../types/profile';
13
+ export type TargetType = 'claude' | 'droid';
14
+ /**
15
+ * Credentials resolved by CCS profile system, ready for delivery to target CLI.
16
+ */
17
+ export interface TargetCredentials {
18
+ /** CCS profile name (e.g., 'gemini', 'codex', 'glm') */
19
+ profile: string;
20
+ baseUrl: string;
21
+ apiKey: string;
22
+ model?: string;
23
+ provider?: 'anthropic' | 'openai' | 'generic-chat-completion-api';
24
+ /** Additional env vars from profile resolution (websearch, hooks, etc.) */
25
+ envVars?: NodeJS.ProcessEnv;
26
+ }
27
+ /**
28
+ * Result of detecting a target CLI binary on the system.
29
+ */
30
+ export interface TargetBinaryInfo {
31
+ path: string;
32
+ needsShell: boolean;
33
+ }
34
+ /**
35
+ * Target adapter contract.
36
+ *
37
+ * Each target CLI implements this interface to handle:
38
+ * - Binary detection (is the CLI installed?)
39
+ * - Credential delivery (env vars vs config file writes)
40
+ * - Argument building (target-specific flags)
41
+ * - Process spawning (cross-platform execution)
42
+ */
43
+ export interface TargetAdapter {
44
+ readonly type: TargetType;
45
+ readonly displayName: string;
46
+ /**
47
+ * Resolve the target CLI executable on the current machine.
48
+ * Return `null` when the binary is unavailable.
49
+ */
50
+ detectBinary(): TargetBinaryInfo | null;
51
+ /**
52
+ * Prepare credential delivery for the target.
53
+ * Targets may write config files, mutate process state, or no-op.
54
+ *
55
+ * @throws Error when required credentials are missing or invalid.
56
+ */
57
+ prepareCredentials(creds: TargetCredentials): Promise<void>;
58
+ /**
59
+ * Build target-specific argument vector.
60
+ * `userArgs` are the arguments after CCS profile/flag parsing.
61
+ */
62
+ buildArgs(profile: string, userArgs: string[]): string[];
63
+ /**
64
+ * Build environment variables for process spawn.
65
+ * `profileType` allows targets to vary env behavior by CCS profile mode.
66
+ */
67
+ buildEnv(creds: TargetCredentials, profileType: ProfileType): NodeJS.ProcessEnv;
68
+ /**
69
+ * Spawn and hand over execution to the target CLI process.
70
+ * Implementations are responsible for signal forwarding and exit propagation.
71
+ *
72
+ * @throws Error for unrecoverable launch failures (if not exiting directly).
73
+ */
74
+ exec(args: string[], env: NodeJS.ProcessEnv, options?: {
75
+ cwd?: string;
76
+ binaryInfo?: TargetBinaryInfo;
77
+ }): void;
78
+ /**
79
+ * Report whether this target can run a given CCS profile type.
80
+ */
81
+ supportsProfileType(profileType: ProfileType): boolean;
82
+ }
83
+ //# sourceMappingURL=target-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-adapter.d.ts","sourceRoot":"","sources":["../../src/targets/target-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAEH;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,6BAA6B,CAAC;IAClE,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,YAAY,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAExC;;;;;OAKG;IACH,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAEzD;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAEhF;;;;;OAKG;IACH,IAAI,CACF,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;KAAE,GACxD,IAAI,CAAC;IAER;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC;CACxD"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Target Adapter Interface
4
+ *
5
+ * Abstraction layer for different CLI targets (Claude, Droid, etc.).
6
+ * Profile resolution is target-agnostic — only the "last mile" execution differs.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=target-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-adapter.js","sourceRoot":"","sources":["../../src/targets/target-adapter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Target Registry
3
+ *
4
+ * Map-based registry for target adapters.
5
+ * Adapters self-register at startup; lookup is O(1).
6
+ */
7
+ import { TargetAdapter, TargetType } from './target-adapter';
8
+ /**
9
+ * Register a target adapter. Overwrites if already registered.
10
+ */
11
+ export declare function registerTarget(adapter: TargetAdapter): void;
12
+ /**
13
+ * Get a registered target adapter by type.
14
+ * @throws Error if target type is not registered
15
+ */
16
+ export declare function getTarget(type: TargetType): TargetAdapter;
17
+ /**
18
+ * Get the default target adapter ('claude').
19
+ * @throws Error if claude adapter is not registered
20
+ */
21
+ export declare function getDefaultTarget(): TargetAdapter;
22
+ /**
23
+ * Check if a target type is registered.
24
+ */
25
+ export declare function hasTarget(type: TargetType): boolean;
26
+ /**
27
+ * Get all registered target types.
28
+ */
29
+ export declare function getRegisteredTargets(): TargetType[];
30
+ //# sourceMappingURL=target-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-registry.d.ts","sourceRoot":"","sources":["../../src/targets/target-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI7D;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAE3D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CAOzD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,EAAE,CAEnD"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Target Registry
4
+ *
5
+ * Map-based registry for target adapters.
6
+ * Adapters self-register at startup; lookup is O(1).
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getRegisteredTargets = exports.hasTarget = exports.getDefaultTarget = exports.getTarget = exports.registerTarget = void 0;
10
+ const adapters = new Map();
11
+ /**
12
+ * Register a target adapter. Overwrites if already registered.
13
+ */
14
+ function registerTarget(adapter) {
15
+ adapters.set(adapter.type, adapter);
16
+ }
17
+ exports.registerTarget = registerTarget;
18
+ /**
19
+ * Get a registered target adapter by type.
20
+ * @throws Error if target type is not registered
21
+ */
22
+ function getTarget(type) {
23
+ const adapter = adapters.get(type);
24
+ if (!adapter) {
25
+ const available = Array.from(adapters.keys()).join(', ');
26
+ throw new Error(`Unknown target "${type}". Available: ${available}`);
27
+ }
28
+ return adapter;
29
+ }
30
+ exports.getTarget = getTarget;
31
+ /**
32
+ * Get the default target adapter ('claude').
33
+ * @throws Error if claude adapter is not registered
34
+ */
35
+ function getDefaultTarget() {
36
+ return getTarget('claude');
37
+ }
38
+ exports.getDefaultTarget = getDefaultTarget;
39
+ /**
40
+ * Check if a target type is registered.
41
+ */
42
+ function hasTarget(type) {
43
+ return adapters.has(type);
44
+ }
45
+ exports.hasTarget = hasTarget;
46
+ /**
47
+ * Get all registered target types.
48
+ */
49
+ function getRegisteredTargets() {
50
+ return Array.from(adapters.keys());
51
+ }
52
+ exports.getRegisteredTargets = getRegisteredTargets;
53
+ //# sourceMappingURL=target-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-registry.js","sourceRoot":"","sources":["../../src/targets/target-registry.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEtD;;GAEG;AACH,SAAgB,cAAc,CAAC,OAAsB;IACnD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,wCAEC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,IAAgB;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAPD,8BAOC;AAED;;;GAGG;AACH,SAAgB,gBAAgB;IAC9B,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAFD,4CAEC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,IAAgB;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAFD,8BAEC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAFD,oDAEC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Target Resolver
3
+ *
4
+ * Resolves which CLI target to use based on:
5
+ * 1. --target flag (highest priority)
6
+ * 2. Per-profile config
7
+ * 3. argv[0] detection (busybox/symlink pattern)
8
+ * 4. Default: 'claude'
9
+ */
10
+ import { TargetType } from './target-adapter';
11
+ /**
12
+ * Resolve target type from multiple sources with priority ordering.
13
+ *
14
+ * @param args - CLI arguments (may contain --target flag)
15
+ * @param profileConfig - Per-profile config with optional target field
16
+ * @returns Resolved target type
17
+ */
18
+ export declare function resolveTargetType(args: string[], profileConfig?: {
19
+ target?: TargetType;
20
+ }): TargetType;
21
+ /**
22
+ * Strip --target flag and its value from args array.
23
+ * Returns new array without the flag (so it's not passed to target CLI).
24
+ */
25
+ export declare function stripTargetFlag(args: string[]): string[];
26
+ //# sourceMappingURL=target-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-resolver.d.ts","sourceRoot":"","sources":["../../src/targets/target-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA4F9C;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,aAAa,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,GACtC,UAAU,CAyBZ;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAExD"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Target Resolver
4
+ *
5
+ * Resolves which CLI target to use based on:
6
+ * 1. --target flag (highest priority)
7
+ * 2. Per-profile config
8
+ * 3. argv[0] detection (busybox/symlink pattern)
9
+ * 4. Default: 'claude'
10
+ */
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
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.stripTargetFlag = exports.resolveTargetType = void 0;
36
+ const path = __importStar(require("path"));
37
+ /**
38
+ * Map of binary names to target types (busybox pattern).
39
+ * When CCS is invoked as `ccsd`, it auto-selects the droid target.
40
+ */
41
+ const ARGV0_TARGET_MAP = {
42
+ ccsd: 'droid',
43
+ };
44
+ const ALIAS_NAME_REGEX = /^[a-z0-9._-]+$/;
45
+ function buildArgv0TargetMap() {
46
+ const map = { ...ARGV0_TARGET_MAP };
47
+ const envAliases = process.env['CCS_DROID_ALIASES'];
48
+ if (!envAliases) {
49
+ return map;
50
+ }
51
+ for (const rawAlias of envAliases.split(',')) {
52
+ const alias = rawAlias.trim().toLowerCase();
53
+ if (!alias || !ALIAS_NAME_REGEX.test(alias)) {
54
+ continue;
55
+ }
56
+ map[alias] = 'droid';
57
+ }
58
+ return map;
59
+ }
60
+ /**
61
+ * Valid target types for --target flag validation.
62
+ */
63
+ const VALID_TARGETS = new Set(['claude', 'droid']);
64
+ function normalizeTargetValue(value) {
65
+ const normalized = value.toLowerCase();
66
+ if (VALID_TARGETS.has(normalized)) {
67
+ return normalized;
68
+ }
69
+ const available = Array.from(VALID_TARGETS).join(', ');
70
+ throw new Error(`Unknown target "${value}". Available: ${available}`);
71
+ }
72
+ /**
73
+ * Parse and strip all --target flags from args.
74
+ * Supports both "--target value" and "--target=value" forms.
75
+ * For repeated flags, last one wins (common CLI precedence behavior).
76
+ */
77
+ function parseTargetFlags(args) {
78
+ const cleanedArgs = [];
79
+ let targetOverride;
80
+ for (let i = 0; i < args.length; i++) {
81
+ const arg = args[i];
82
+ // POSIX option terminator: everything after `--` is positional.
83
+ if (arg === '--') {
84
+ cleanedArgs.push(...args.slice(i));
85
+ break;
86
+ }
87
+ if (arg === '--target') {
88
+ const value = args[i + 1];
89
+ if (!value || value.startsWith('-')) {
90
+ throw new Error('--target requires a value (claude or droid)');
91
+ }
92
+ targetOverride = normalizeTargetValue(value);
93
+ i += 1; // Skip value
94
+ continue;
95
+ }
96
+ if (arg.startsWith('--target=')) {
97
+ const value = arg.slice('--target='.length).trim();
98
+ if (!value) {
99
+ throw new Error('--target requires a value (claude or droid)');
100
+ }
101
+ targetOverride = normalizeTargetValue(value);
102
+ continue;
103
+ }
104
+ cleanedArgs.push(arg);
105
+ }
106
+ return { targetOverride, cleanedArgs };
107
+ }
108
+ /**
109
+ * Resolve target type from multiple sources with priority ordering.
110
+ *
111
+ * @param args - CLI arguments (may contain --target flag)
112
+ * @param profileConfig - Per-profile config with optional target field
113
+ * @returns Resolved target type
114
+ */
115
+ function resolveTargetType(args, profileConfig) {
116
+ const parsed = parseTargetFlags(args);
117
+ // 1. Check --target flag (highest priority)
118
+ if (parsed.targetOverride) {
119
+ return parsed.targetOverride;
120
+ }
121
+ // 2. Check per-profile config
122
+ if (profileConfig?.target) {
123
+ return profileConfig.target;
124
+ }
125
+ // 3. Check argv[0] (busybox pattern)
126
+ // Strip common wrapper extensions for Windows shims/wrappers
127
+ const rawBin = path.basename(process.argv[1] || process.argv0 || '');
128
+ const binName = rawBin.replace(/\.(cmd|bat|ps1|exe)$/i, '').toLowerCase();
129
+ const argv0TargetMap = buildArgv0TargetMap();
130
+ const argv0Target = argv0TargetMap[binName];
131
+ if (argv0Target) {
132
+ return argv0Target;
133
+ }
134
+ // 4. Default
135
+ return 'claude';
136
+ }
137
+ exports.resolveTargetType = resolveTargetType;
138
+ /**
139
+ * Strip --target flag and its value from args array.
140
+ * Returns new array without the flag (so it's not passed to target CLI).
141
+ */
142
+ function stripTargetFlag(args) {
143
+ return parseTargetFlags(args).cleanedArgs;
144
+ }
145
+ exports.stripTargetFlag = stripTargetFlag;
146
+ //# sourceMappingURL=target-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-resolver.js","sourceRoot":"","sources":["../../src/targets/target-resolver.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * CCS Configuration Types
3
3
  * Source: ~/.ccs/config.json
4
4
  */
5
+ import type { CLIProxyProvider } from '../cliproxy/types';
5
6
  /**
6
7
  * Profile configuration mapping
7
8
  * Maps profile names to settings.json paths
@@ -16,7 +17,7 @@ export interface ProfilesConfig {
16
17
  */
17
18
  export interface CLIProxyVariantConfig {
18
19
  /** CLIProxy provider to use */
19
- provider: 'gemini' | 'codex' | 'agy' | 'qwen' | 'iflow' | 'kiro' | 'ghcp' | 'claude';
20
+ provider: CLIProxyProvider;
20
21
  /** Path to settings.json with custom model configuration (optional) */
21
22
  settings?: string;
22
23
  /** Account identifier for multi-account support (optional, defaults to 'default') */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrF,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,gDAAgD;IAChD,QAAQ,EAAE,cAAc,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,4CAA4C;IAC5C,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAIpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,QAAQ,CAMxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,gDAAgD;IAChD,QAAQ,EAAE,cAAc,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,4CAA4C;IAC5C,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAIpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,QAAQ,CAMxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA0FH;;GAEG;AACH,SAAgB,QAAQ,CAAC,GAAY;IACnC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,UAAU,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CACjG,CAAC;AACJ,CAAC;AAJD,4BAIC;AAED,SAAgB,UAAU,CAAC,GAAY;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB;IACpD,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,sCAAsC;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AACpE,CAAC;AAND,gCAMC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA4FH;;GAEG;AACH,SAAgB,QAAQ,CAAC,GAAY;IACnC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,UAAU,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CACjG,CAAC;AACJ,CAAC;AAJD,4BAIC;AAED,SAAgB,UAAU,CAAC,GAAY;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB;IACpD,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,sCAAsC;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AACpE,CAAC;AAND,gCAMC"}
@@ -10,4 +10,5 @@ export type { SessionMetadata, DelegationSession, DelegationSessionsRegistry, Ex
10
10
  export type { AnthropicMessage, ContentBlock, AnthropicRequest, AnthropicTool, OpenAIMessage, OpenAIToolCall, OpenAIRequest, OpenAITool, SSEEvent, DeltaChunk, TransformationContext, } from './glmt';
11
11
  export { LogLevel } from './utils';
12
12
  export type { ErrorCode, ColorName, TerminalInfo, Result } from './utils';
13
+ export type { ProfileType } from './profile';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,MAAM,EACN,cAAc,EACd,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGhD,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,SAAS,EACT,WAAW,EACX,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,UAAU,EACV,QAAQ,EACR,UAAU,EACV,qBAAqB,GACtB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,MAAM,EACN,cAAc,EACd,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGhD,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,SAAS,EACT,WAAW,EACX,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,UAAU,EACV,QAAQ,EACR,UAAU,EACV,qBAAqB,GACtB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAG1E,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Profile mode types used across routing and target adapters.
3
+ */
4
+ export type ProfileType = 'settings' | 'account' | 'cliproxy' | 'copilot' | 'default';
5
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/types/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/types/profile.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- import{j as e}from"./radix-ui-qEZD5MMp.js";import{r as p}from"./react-vendor-CNOkPC89.js";import{u as D,a as b,b as N,d as A,f as y,g as T}from"./tanstack-De4wvi8X.js";import{c as m,ae as f,b as d,a4 as k,a5 as R,a6 as S,a7 as z,a8 as P,L as C,I as q}from"./index-Dv5jtphl.js";import{A as F,a as _,b as K,c as L,d as M,e as $,f as E,g as H}from"./alert-dialog-B5t_5_UL.js";import{t as u}from"./notifications-B2HqRBj7.js";import{v as Q,j,ag as O,y as I,l as v,$ as B}from"./icons-DGASzt3M.js";import"./utils-CzKF5WmX.js";import"./form-utils-C-pVd1--.js";import"./code-highlight-BRUf_pqB.js";function U({className:t,...s}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:e.jsx("table",{"data-slot":"table",className:m("w-full caption-bottom text-sm",t),...s})})}function V({className:t,...s}){return e.jsx("thead",{"data-slot":"table-header",className:m("[&_tr]:border-b",t),...s})}function Z({className:t,...s}){return e.jsx("tbody",{"data-slot":"table-body",className:m("[&_tr:last-child]:border-0",t),...s})}function w({className:t,...s}){return e.jsx("tr",{"data-slot":"table-row",className:m("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",t),...s})}function G({className:t,...s}){return e.jsx("th",{"data-slot":"table-head",className:m("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function J({className:t,...s}){return e.jsx("td",{"data-slot":"table-cell",className:m("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function W(){return D({queryKey:["accounts"],queryFn:()=>f.accounts.list()})}function X(){const t=b();return N({mutationFn:s=>f.accounts.setDefault(s),onSuccess:(s,l)=>{t.invalidateQueries({queryKey:["accounts"]}),u.success(`Default account set to "${l}"`)},onError:s=>{u.error(s.message)}})}function Y(){const t=b();return N({mutationFn:()=>f.accounts.resetDefault(),onSuccess:()=>{t.invalidateQueries({queryKey:["accounts"]}),u.success("Default account reset to CCS")},onError:s=>{u.error(s.message)}})}function ee(){const t=b();return N({mutationFn:s=>f.accounts.delete(s),onSuccess:(s,l)=>{t.invalidateQueries({queryKey:["accounts"]}),u.success(`Account "${l}" deleted`)},onError:s=>{u.error(s.message)}})}function se({data:t,defaultAccount:s}){const l=X(),i=ee(),r=Y(),[c,o]=p.useState(null),x=A({data:t,columns:[{accessorKey:"name",header:"Name",size:200,cell:({row:a})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:a.original.name}),a.original.name===s&&e.jsx("span",{className:"text-xs bg-primary/10 text-primary px-1.5 py-0.5 rounded border border-primary/20",children:"default"})]})},{accessorKey:"type",header:"Type",size:100,cell:({row:a})=>e.jsx("span",{className:"capitalize text-muted-foreground",children:a.original.type||"oauth"})},{accessorKey:"created",header:"Created",size:150,cell:({row:a})=>{const n=new Date(a.original.created);return e.jsx("span",{className:"text-muted-foreground",children:n.toLocaleDateString()})}},{accessorKey:"last_used",header:"Last Used",size:150,cell:({row:a})=>{if(!a.original.last_used)return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});const n=new Date(a.original.last_used);return e.jsx("span",{className:"text-muted-foreground",children:n.toLocaleDateString()})}},{id:"actions",header:"Actions",size:180,cell:({row:a})=>{const n=a.original.name===s,h=l.isPending||i.isPending;return e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs(d,{variant:n?"secondary":"default",size:"sm",className:"h-8 px-2",disabled:n||h,onClick:()=>l.mutate(a.original.name),children:[e.jsx(j,{className:`w-3 h-3 mr-1 ${n?"opacity-50":""}`}),n?"Active":"Set Default"]}),e.jsx(d,{variant:"ghost",size:"sm",className:"h-8 px-2 text-destructive hover:text-destructive hover:bg-destructive/10",disabled:n||h,onClick:()=>o(a.original.name),title:n?"Cannot delete default account":"Delete account",children:e.jsx(O,{className:"w-4 h-4"})})]})}}],getCoreRowModel:T()});return t.length===0?e.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:["No accounts found. Use"," ",e.jsx("code",{className:"text-sm bg-muted px-1 rounded",children:"ccs auth create"})," to add accounts."]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"border rounded-md",children:e.jsxs(U,{children:[e.jsx(V,{children:x.getHeaderGroups().map(a=>e.jsx(w,{children:a.headers.map(n=>{const h={name:"w-[200px]",type:"w-[100px]",created:"w-[150px]",last_used:"w-[150px]",actions:"w-[180px]"}[n.id]||"w-auto";return e.jsx(G,{className:h,children:n.isPlaceholder?null:y(n.column.columnDef.header,n.getContext())},n.id)})},a.id))}),e.jsx(Z,{children:x.getRowModel().rows.map(a=>e.jsx(w,{children:a.getVisibleCells().map(n=>e.jsx(J,{children:y(n.column.columnDef.cell,n.getContext())},n.id))},a.id))})]})}),s&&e.jsx("div",{className:"flex justify-end",children:e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>r.mutate(),disabled:r.isPending,children:[e.jsx(Q,{className:"w-4 h-4 mr-2"}),"Reset to CCS Default"]})})]}),e.jsx(F,{open:!!c,onOpenChange:a=>!a&&o(null),children:e.jsxs(_,{children:[e.jsxs(K,{children:[e.jsx(L,{children:"Delete Account"}),e.jsxs(M,{children:['Are you sure you want to delete the account "',c,'"? This will remove the profile and all its session data. This action cannot be undone.']})]}),e.jsxs($,{children:[e.jsx(E,{children:"Cancel"}),e.jsx(H,{className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",onClick:()=>{c&&(i.mutate(c),o(null))},children:"Delete"})]})]})})]})}function te({open:t,onClose:s}){const[l,i]=p.useState(""),[r,c]=p.useState(!1),o=/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(l),g=l?`ccs auth create ${l}`:"ccs auth create <name>",x=async()=>{o&&(await navigator.clipboard.writeText(g),c(!0),setTimeout(()=>c(!1),2e3))},a=()=>{i(""),c(!1),s()};return e.jsx(k,{open:t,onOpenChange:n=>!n&&a(),children:e.jsxs(R,{className:"sm:max-w-md",children:[e.jsxs(S,{children:[e.jsx(z,{children:"Create New Account"}),e.jsx(P,{children:"Auth profiles require Claude CLI login. Run the command below in your terminal."})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(C,{htmlFor:"profile-name",children:"Profile Name"}),e.jsx(q,{id:"profile-name",value:l,onChange:n=>i(n.target.value),placeholder:"e.g., work, personal, client",autoComplete:"off"}),l&&!o&&e.jsx("p",{className:"text-xs text-destructive",children:"Name must start with a letter and contain only letters, numbers, dashes, or underscores."})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(C,{children:"Command"}),e.jsxs("div",{className:"flex items-center gap-2 p-3 bg-muted rounded-md font-mono text-sm",children:[e.jsx(I,{className:"w-4 h-4 text-muted-foreground shrink-0"}),e.jsx("code",{className:"flex-1 break-all",children:g}),e.jsx(d,{variant:"ghost",size:"sm",className:"shrink-0 h-8 px-2",onClick:x,disabled:!o,children:r?e.jsx(j,{className:"w-4 h-4 text-green-500"}):e.jsx(v,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"text-sm text-muted-foreground space-y-1",children:[e.jsx("p",{children:"After running the command:"}),e.jsxs("ol",{className:"list-decimal list-inside pl-2 space-y-0.5",children:[e.jsx("li",{children:"Complete the Claude login in your browser"}),e.jsx("li",{children:"Return here and refresh to see the new account"})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(d,{variant:"ghost",onClick:a,children:"Close"}),e.jsx(d,{onClick:x,disabled:!o,children:r?e.jsxs(e.Fragment,{children:[e.jsx(j,{className:"w-4 h-4 mr-2"}),"Copied!"]}):e.jsxs(e.Fragment,{children:[e.jsx(v,{className:"w-4 h-4 mr-2"}),"Copy Command"]})})]})]})]})})}function xe(){const{data:t,isLoading:s,refetch:l}=W(),[i,r]=p.useState(!1);return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-8",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Accounts"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Manage multi-account Claude sessions (profiles.json)"})]}),e.jsxs(d,{onClick:()=>r(!0),children:[e.jsx(B,{className:"w-4 h-4 mr-2"}),"Create Account"]})]}),s?e.jsx("div",{className:"text-muted-foreground",children:"Loading accounts..."}):e.jsx(se,{data:t?.accounts||[],defaultAccount:t?.default??null,onRefresh:l}),e.jsx(te,{open:i,onClose:()=>r(!1)})]})}export{xe as AccountsPage};
1
+ import{j as e}from"./radix-ui-qEZD5MMp.js";import{r as p}from"./react-vendor-CNOkPC89.js";import{u as D,a as b,b as N,d as A,f as y,g as T}from"./tanstack-De4wvi8X.js";import{c as m,ae as f,b as d,a4 as k,a5 as R,a6 as S,a7 as z,a8 as P,L as C,I as q}from"./index-wjh3KdFc.js";import{A as F,a as _,b as K,c as L,d as M,e as $,f as E,g as H}from"./alert-dialog-DvRUIk2A.js";import{t as u}from"./notifications-B2HqRBj7.js";import{v as Q,j,ag as O,y as I,l as v,$ as B}from"./icons-DGASzt3M.js";import"./utils-CzKF5WmX.js";import"./form-utils-C-pVd1--.js";import"./code-highlight-BRUf_pqB.js";function U({className:t,...s}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:e.jsx("table",{"data-slot":"table",className:m("w-full caption-bottom text-sm",t),...s})})}function V({className:t,...s}){return e.jsx("thead",{"data-slot":"table-header",className:m("[&_tr]:border-b",t),...s})}function Z({className:t,...s}){return e.jsx("tbody",{"data-slot":"table-body",className:m("[&_tr:last-child]:border-0",t),...s})}function w({className:t,...s}){return e.jsx("tr",{"data-slot":"table-row",className:m("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",t),...s})}function G({className:t,...s}){return e.jsx("th",{"data-slot":"table-head",className:m("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function J({className:t,...s}){return e.jsx("td",{"data-slot":"table-cell",className:m("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function W(){return D({queryKey:["accounts"],queryFn:()=>f.accounts.list()})}function X(){const t=b();return N({mutationFn:s=>f.accounts.setDefault(s),onSuccess:(s,l)=>{t.invalidateQueries({queryKey:["accounts"]}),u.success(`Default account set to "${l}"`)},onError:s=>{u.error(s.message)}})}function Y(){const t=b();return N({mutationFn:()=>f.accounts.resetDefault(),onSuccess:()=>{t.invalidateQueries({queryKey:["accounts"]}),u.success("Default account reset to CCS")},onError:s=>{u.error(s.message)}})}function ee(){const t=b();return N({mutationFn:s=>f.accounts.delete(s),onSuccess:(s,l)=>{t.invalidateQueries({queryKey:["accounts"]}),u.success(`Account "${l}" deleted`)},onError:s=>{u.error(s.message)}})}function se({data:t,defaultAccount:s}){const l=X(),i=ee(),r=Y(),[c,o]=p.useState(null),x=A({data:t,columns:[{accessorKey:"name",header:"Name",size:200,cell:({row:a})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:a.original.name}),a.original.name===s&&e.jsx("span",{className:"text-xs bg-primary/10 text-primary px-1.5 py-0.5 rounded border border-primary/20",children:"default"})]})},{accessorKey:"type",header:"Type",size:100,cell:({row:a})=>e.jsx("span",{className:"capitalize text-muted-foreground",children:a.original.type||"oauth"})},{accessorKey:"created",header:"Created",size:150,cell:({row:a})=>{const n=new Date(a.original.created);return e.jsx("span",{className:"text-muted-foreground",children:n.toLocaleDateString()})}},{accessorKey:"last_used",header:"Last Used",size:150,cell:({row:a})=>{if(!a.original.last_used)return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});const n=new Date(a.original.last_used);return e.jsx("span",{className:"text-muted-foreground",children:n.toLocaleDateString()})}},{id:"actions",header:"Actions",size:180,cell:({row:a})=>{const n=a.original.name===s,h=l.isPending||i.isPending;return e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs(d,{variant:n?"secondary":"default",size:"sm",className:"h-8 px-2",disabled:n||h,onClick:()=>l.mutate(a.original.name),children:[e.jsx(j,{className:`w-3 h-3 mr-1 ${n?"opacity-50":""}`}),n?"Active":"Set Default"]}),e.jsx(d,{variant:"ghost",size:"sm",className:"h-8 px-2 text-destructive hover:text-destructive hover:bg-destructive/10",disabled:n||h,onClick:()=>o(a.original.name),title:n?"Cannot delete default account":"Delete account",children:e.jsx(O,{className:"w-4 h-4"})})]})}}],getCoreRowModel:T()});return t.length===0?e.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:["No accounts found. Use"," ",e.jsx("code",{className:"text-sm bg-muted px-1 rounded",children:"ccs auth create"})," to add accounts."]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"border rounded-md",children:e.jsxs(U,{children:[e.jsx(V,{children:x.getHeaderGroups().map(a=>e.jsx(w,{children:a.headers.map(n=>{const h={name:"w-[200px]",type:"w-[100px]",created:"w-[150px]",last_used:"w-[150px]",actions:"w-[180px]"}[n.id]||"w-auto";return e.jsx(G,{className:h,children:n.isPlaceholder?null:y(n.column.columnDef.header,n.getContext())},n.id)})},a.id))}),e.jsx(Z,{children:x.getRowModel().rows.map(a=>e.jsx(w,{children:a.getVisibleCells().map(n=>e.jsx(J,{children:y(n.column.columnDef.cell,n.getContext())},n.id))},a.id))})]})}),s&&e.jsx("div",{className:"flex justify-end",children:e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>r.mutate(),disabled:r.isPending,children:[e.jsx(Q,{className:"w-4 h-4 mr-2"}),"Reset to CCS Default"]})})]}),e.jsx(F,{open:!!c,onOpenChange:a=>!a&&o(null),children:e.jsxs(_,{children:[e.jsxs(K,{children:[e.jsx(L,{children:"Delete Account"}),e.jsxs(M,{children:['Are you sure you want to delete the account "',c,'"? This will remove the profile and all its session data. This action cannot be undone.']})]}),e.jsxs($,{children:[e.jsx(E,{children:"Cancel"}),e.jsx(H,{className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",onClick:()=>{c&&(i.mutate(c),o(null))},children:"Delete"})]})]})})]})}function te({open:t,onClose:s}){const[l,i]=p.useState(""),[r,c]=p.useState(!1),o=/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(l),g=l?`ccs auth create ${l}`:"ccs auth create <name>",x=async()=>{o&&(await navigator.clipboard.writeText(g),c(!0),setTimeout(()=>c(!1),2e3))},a=()=>{i(""),c(!1),s()};return e.jsx(k,{open:t,onOpenChange:n=>!n&&a(),children:e.jsxs(R,{className:"sm:max-w-md",children:[e.jsxs(S,{children:[e.jsx(z,{children:"Create New Account"}),e.jsx(P,{children:"Auth profiles require Claude CLI login. Run the command below in your terminal."})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(C,{htmlFor:"profile-name",children:"Profile Name"}),e.jsx(q,{id:"profile-name",value:l,onChange:n=>i(n.target.value),placeholder:"e.g., work, personal, client",autoComplete:"off"}),l&&!o&&e.jsx("p",{className:"text-xs text-destructive",children:"Name must start with a letter and contain only letters, numbers, dashes, or underscores."})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(C,{children:"Command"}),e.jsxs("div",{className:"flex items-center gap-2 p-3 bg-muted rounded-md font-mono text-sm",children:[e.jsx(I,{className:"w-4 h-4 text-muted-foreground shrink-0"}),e.jsx("code",{className:"flex-1 break-all",children:g}),e.jsx(d,{variant:"ghost",size:"sm",className:"shrink-0 h-8 px-2",onClick:x,disabled:!o,children:r?e.jsx(j,{className:"w-4 h-4 text-green-500"}):e.jsx(v,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"text-sm text-muted-foreground space-y-1",children:[e.jsx("p",{children:"After running the command:"}),e.jsxs("ol",{className:"list-decimal list-inside pl-2 space-y-0.5",children:[e.jsx("li",{children:"Complete the Claude login in your browser"}),e.jsx("li",{children:"Return here and refresh to see the new account"})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(d,{variant:"ghost",onClick:a,children:"Close"}),e.jsx(d,{onClick:x,disabled:!o,children:r?e.jsxs(e.Fragment,{children:[e.jsx(j,{className:"w-4 h-4 mr-2"}),"Copied!"]}):e.jsxs(e.Fragment,{children:[e.jsx(v,{className:"w-4 h-4 mr-2"}),"Copy Command"]})})]})]})]})})}function xe(){const{data:t,isLoading:s,refetch:l}=W(),[i,r]=p.useState(!1);return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-8",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Accounts"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Manage multi-account Claude sessions (profiles.json)"})]}),e.jsxs(d,{onClick:()=>r(!0),children:[e.jsx(B,{className:"w-4 h-4 mr-2"}),"Create Account"]})]}),s?e.jsx("div",{className:"text-muted-foreground",children:"Loading accounts..."}):e.jsx(se,{data:t?.accounts||[],defaultAccount:t?.default??null,onRefresh:l}),e.jsx(te,{open:i,onClose:()=>r(!1)})]})}export{xe as AccountsPage};
@@ -1 +1 @@
1
- import{j as e,a4 as s,a5 as r,a6 as n,a7 as i,a8 as d,a9 as c,aa as u,ab as f}from"./radix-ui-qEZD5MMp.js";import"./react-vendor-CNOkPC89.js";import{c as o,b3 as l}from"./index-Dv5jtphl.js";function A({...a}){return e.jsx(s,{"data-slot":"alert-dialog",...a})}function g({...a}){return e.jsx(u,{"data-slot":"alert-dialog-portal",...a})}function m({className:a,...t}){return e.jsx(f,{"data-slot":"alert-dialog-overlay",className:o("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",a),...t})}function D({className:a,...t}){return e.jsxs(g,{children:[e.jsx(m,{}),e.jsx(r,{"data-slot":"alert-dialog-content",className:o("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",a),...t})]})}function b({className:a,...t}){return e.jsx("div",{"data-slot":"alert-dialog-header",className:o("flex flex-col gap-2 text-center sm:text-left",a),...t})}function N({className:a,...t}){return e.jsx("div",{"data-slot":"alert-dialog-footer",className:o("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",a),...t})}function v({className:a,...t}){return e.jsx(n,{"data-slot":"alert-dialog-title",className:o("text-lg font-semibold",a),...t})}function w({className:a,...t}){return e.jsx(i,{"data-slot":"alert-dialog-description",className:o("text-muted-foreground text-sm",a),...t})}function y({className:a,...t}){return e.jsx(c,{className:o(l(),a),...t})}function z({className:a,...t}){return e.jsx(d,{className:o(l({variant:"outline"}),a),...t})}export{A,D as a,b,v as c,w as d,N as e,z as f,y as g};
1
+ import{j as e,a4 as s,a5 as r,a6 as n,a7 as i,a8 as d,a9 as c,aa as u,ab as f}from"./radix-ui-qEZD5MMp.js";import"./react-vendor-CNOkPC89.js";import{c as o,b6 as l}from"./index-wjh3KdFc.js";function A({...a}){return e.jsx(s,{"data-slot":"alert-dialog",...a})}function g({...a}){return e.jsx(u,{"data-slot":"alert-dialog-portal",...a})}function m({className:a,...t}){return e.jsx(f,{"data-slot":"alert-dialog-overlay",className:o("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",a),...t})}function D({className:a,...t}){return e.jsxs(g,{children:[e.jsx(m,{}),e.jsx(r,{"data-slot":"alert-dialog-content",className:o("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",a),...t})]})}function b({className:a,...t}){return e.jsx("div",{"data-slot":"alert-dialog-header",className:o("flex flex-col gap-2 text-center sm:text-left",a),...t})}function N({className:a,...t}){return e.jsx("div",{"data-slot":"alert-dialog-footer",className:o("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",a),...t})}function v({className:a,...t}){return e.jsx(n,{"data-slot":"alert-dialog-title",className:o("text-lg font-semibold",a),...t})}function w({className:a,...t}){return e.jsx(i,{"data-slot":"alert-dialog-description",className:o("text-muted-foreground text-sm",a),...t})}function y({className:a,...t}){return e.jsx(c,{className:o(l(),a),...t})}function z({className:a,...t}){return e.jsx(d,{className:o(l({variant:"outline"}),a),...t})}export{A,D as a,b,v as c,w as d,N as e,z as f,y as g};