@kaitranntt/ccs 5.12.1 → 5.13.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 (80) hide show
  1. package/README.md +23 -0
  2. package/VERSION +1 -1
  3. package/dist/cliproxy/account-manager.d.ts +20 -1
  4. package/dist/cliproxy/account-manager.d.ts.map +1 -1
  5. package/dist/cliproxy/account-manager.js +58 -3
  6. package/dist/cliproxy/account-manager.js.map +1 -1
  7. package/dist/cliproxy/auth-handler.d.ts +2 -0
  8. package/dist/cliproxy/auth-handler.d.ts.map +1 -1
  9. package/dist/cliproxy/auth-handler.js +68 -10
  10. package/dist/cliproxy/auth-handler.js.map +1 -1
  11. package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
  12. package/dist/cliproxy/cliproxy-executor.js +57 -2
  13. package/dist/cliproxy/cliproxy-executor.js.map +1 -1
  14. package/dist/commands/cliproxy-command.d.ts.map +1 -1
  15. package/dist/commands/cliproxy-command.js +121 -5
  16. package/dist/commands/cliproxy-command.js.map +1 -1
  17. package/dist/commands/help-command.d.ts.map +1 -1
  18. package/dist/commands/help-command.js +3 -0
  19. package/dist/commands/help-command.js.map +1 -1
  20. package/dist/management/doctor.d.ts +10 -0
  21. package/dist/management/doctor.d.ts.map +1 -1
  22. package/dist/management/doctor.js +104 -4
  23. package/dist/management/doctor.js.map +1 -1
  24. package/dist/management/environment-diagnostics.d.ts +69 -0
  25. package/dist/management/environment-diagnostics.d.ts.map +1 -0
  26. package/dist/management/environment-diagnostics.js +229 -0
  27. package/dist/management/environment-diagnostics.js.map +1 -0
  28. package/dist/management/oauth-port-diagnostics.d.ts +85 -0
  29. package/dist/management/oauth-port-diagnostics.d.ts.map +1 -0
  30. package/dist/management/oauth-port-diagnostics.js +189 -0
  31. package/dist/management/oauth-port-diagnostics.js.map +1 -0
  32. package/dist/ui/assets/{accounts-B9xp2MbI.js → accounts-BqgbKJ_T.js} +1 -1
  33. package/dist/ui/assets/analytics-kvupQ2oO.js +64 -0
  34. package/dist/ui/assets/{api-DYr0Tx6Z.js → api-BDi9b5BG.js} +1 -1
  35. package/dist/ui/assets/cliproxy-jQ6copQ7.js +1 -0
  36. package/dist/ui/assets/{dropdown-menu-iwA6PgQW.js → dropdown-menu-DpmTYmUM.js} +1 -1
  37. package/dist/ui/assets/form-utils-DKkU3nz7.js +20 -0
  38. package/dist/ui/assets/{health-ChYme1jV.js → health-CWKKFk6T.js} +1 -1
  39. package/dist/ui/assets/icons-Pr4HmEFP.js +1 -0
  40. package/dist/ui/assets/index-BnrVxA3p.css +1 -0
  41. package/dist/ui/assets/index-JNyH4mtq.js +10 -0
  42. package/dist/ui/assets/{settings-B2OdR7RO.js → settings-D7tDThbI.js} +1 -1
  43. package/dist/ui/assets/{shared-ZSfv4HA6.js → shared-BsRfvJUd.js} +1 -1
  44. package/dist/ui/assets/{table-OTpVLgy9.js → table-DHr1Oba_.js} +1 -1
  45. package/dist/ui/index.html +4 -4
  46. package/dist/web-server/data-aggregator.d.ts +45 -0
  47. package/dist/web-server/data-aggregator.d.ts.map +1 -0
  48. package/dist/web-server/data-aggregator.js +305 -0
  49. package/dist/web-server/data-aggregator.js.map +1 -0
  50. package/dist/web-server/health-service.d.ts +1 -1
  51. package/dist/web-server/health-service.d.ts.map +1 -1
  52. package/dist/web-server/health-service.js +68 -5
  53. package/dist/web-server/health-service.js.map +1 -1
  54. package/dist/web-server/jsonl-parser.d.ts +68 -0
  55. package/dist/web-server/jsonl-parser.d.ts.map +1 -0
  56. package/dist/web-server/jsonl-parser.js +212 -0
  57. package/dist/web-server/jsonl-parser.js.map +1 -0
  58. package/dist/web-server/model-pricing.d.ts +42 -0
  59. package/dist/web-server/model-pricing.d.ts.map +1 -0
  60. package/dist/web-server/model-pricing.js +642 -0
  61. package/dist/web-server/model-pricing.js.map +1 -0
  62. package/dist/web-server/usage-disk-cache.d.ts +1 -2
  63. package/dist/web-server/usage-disk-cache.d.ts.map +1 -1
  64. package/dist/web-server/usage-disk-cache.js +2 -1
  65. package/dist/web-server/usage-disk-cache.js.map +1 -1
  66. package/dist/web-server/usage-routes.d.ts +1 -1
  67. package/dist/web-server/usage-routes.d.ts.map +1 -1
  68. package/dist/web-server/usage-routes.js +194 -11
  69. package/dist/web-server/usage-routes.js.map +1 -1
  70. package/dist/web-server/usage-types.d.ts +57 -0
  71. package/dist/web-server/usage-types.d.ts.map +1 -0
  72. package/dist/web-server/usage-types.js +9 -0
  73. package/dist/web-server/usage-types.js.map +1 -0
  74. package/package.json +3 -3
  75. package/dist/ui/assets/analytics-BfjSH3d-.js +0 -64
  76. package/dist/ui/assets/cliproxy-BuB-MuAt.js +0 -1
  77. package/dist/ui/assets/form-utils-CSa50xnO.js +0 -20
  78. package/dist/ui/assets/icons-ByUiVGTN.js +0 -1
  79. package/dist/ui/assets/index-ChihF1Y9.css +0 -1
  80. package/dist/ui/assets/index-P2CKOdyd.js +0 -10
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * OAuth Port Diagnostics Module
4
+ *
5
+ * Pre-flight checks for OAuth callback ports to detect conflicts
6
+ * before users attempt authentication.
7
+ *
8
+ * OAuth flows require specific localhost ports for callbacks:
9
+ * - Gemini: 8085
10
+ * - Codex: 1455
11
+ * - Agy: 51121
12
+ * - Qwen: Device Code Flow (no port needed)
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.preflightOAuthCheck = exports.formatOAuthPortDiagnostics = exports.getPortConflicts = exports.checkAuthCodePorts = exports.checkAllOAuthPorts = exports.checkOAuthPort = exports.OAUTH_FLOW_TYPES = exports.OAUTH_CALLBACK_PORTS = void 0;
16
+ const port_utils_1 = require("../utils/port-utils");
17
+ /**
18
+ * OAuth callback ports for each provider
19
+ * Extracted from CLIProxyAPI source
20
+ */
21
+ exports.OAUTH_CALLBACK_PORTS = {
22
+ gemini: 8085,
23
+ codex: 1455,
24
+ agy: 51121,
25
+ qwen: null, // Device Code Flow - no callback port
26
+ iflow: null, // Device Code Flow - no callback port
27
+ };
28
+ /**
29
+ * OAuth flow type per provider
30
+ */
31
+ exports.OAUTH_FLOW_TYPES = {
32
+ gemini: 'authorization_code',
33
+ codex: 'authorization_code',
34
+ agy: 'authorization_code',
35
+ qwen: 'device_code',
36
+ iflow: 'device_code',
37
+ };
38
+ /**
39
+ * Check OAuth port availability for a single provider
40
+ */
41
+ async function checkOAuthPort(provider) {
42
+ const port = exports.OAUTH_CALLBACK_PORTS[provider];
43
+ const flowType = exports.OAUTH_FLOW_TYPES[provider];
44
+ // Device code flow doesn't need callback port
45
+ if (port === null) {
46
+ return {
47
+ provider,
48
+ flowType,
49
+ port: null,
50
+ status: 'not_applicable',
51
+ process: null,
52
+ message: 'Uses Device Code Flow (no callback port needed)',
53
+ recommendation: null,
54
+ };
55
+ }
56
+ // Check if port is in use
57
+ const portProcess = await (0, port_utils_1.getPortProcess)(port);
58
+ if (!portProcess) {
59
+ return {
60
+ provider,
61
+ flowType,
62
+ port,
63
+ status: 'free',
64
+ process: null,
65
+ message: `Port ${port} is available`,
66
+ recommendation: null,
67
+ };
68
+ }
69
+ // Check if it's CLIProxy (expected if proxy is running)
70
+ if ((0, port_utils_1.isCLIProxyProcess)(portProcess)) {
71
+ return {
72
+ provider,
73
+ flowType,
74
+ port,
75
+ status: 'cliproxy',
76
+ process: portProcess,
77
+ message: `Port ${port} in use by CLIProxy (expected)`,
78
+ recommendation: null,
79
+ };
80
+ }
81
+ // Port is occupied by another process
82
+ return {
83
+ provider,
84
+ flowType,
85
+ port,
86
+ status: 'occupied',
87
+ process: portProcess,
88
+ message: `Port ${port} occupied by ${portProcess.processName}`,
89
+ recommendation: `Kill process: kill ${portProcess.pid} (or close ${portProcess.processName})`,
90
+ };
91
+ }
92
+ exports.checkOAuthPort = checkOAuthPort;
93
+ /**
94
+ * Check OAuth ports for all providers
95
+ */
96
+ async function checkAllOAuthPorts() {
97
+ const providers = ['gemini', 'codex', 'agy', 'qwen', 'iflow'];
98
+ const results = [];
99
+ for (const provider of providers) {
100
+ const diagnostic = await checkOAuthPort(provider);
101
+ results.push(diagnostic);
102
+ }
103
+ return results;
104
+ }
105
+ exports.checkAllOAuthPorts = checkAllOAuthPorts;
106
+ /**
107
+ * Check OAuth ports for providers that use Authorization Code flow only
108
+ */
109
+ async function checkAuthCodePorts() {
110
+ const providers = ['gemini', 'codex', 'agy'];
111
+ const results = [];
112
+ for (const provider of providers) {
113
+ const diagnostic = await checkOAuthPort(provider);
114
+ results.push(diagnostic);
115
+ }
116
+ return results;
117
+ }
118
+ exports.checkAuthCodePorts = checkAuthCodePorts;
119
+ /**
120
+ * Get providers with port conflicts
121
+ */
122
+ async function getPortConflicts() {
123
+ const allPorts = await checkAllOAuthPorts();
124
+ return allPorts.filter((d) => d.status === 'occupied');
125
+ }
126
+ exports.getPortConflicts = getPortConflicts;
127
+ /**
128
+ * Format OAuth port diagnostics for display
129
+ */
130
+ function formatOAuthPortDiagnostics(diagnostics) {
131
+ const lines = [];
132
+ for (const diag of diagnostics) {
133
+ const providerName = diag.provider.charAt(0).toUpperCase() + diag.provider.slice(1);
134
+ const portStr = diag.port !== null ? `(${diag.port})` : '';
135
+ let statusIcon;
136
+ switch (diag.status) {
137
+ case 'free':
138
+ statusIcon = '[OK]';
139
+ break;
140
+ case 'cliproxy':
141
+ statusIcon = '[OK]';
142
+ break;
143
+ case 'occupied':
144
+ statusIcon = '[!]';
145
+ break;
146
+ case 'not_applicable':
147
+ statusIcon = '[i]';
148
+ break;
149
+ default:
150
+ statusIcon = '[?]';
151
+ }
152
+ const label = `${providerName} ${portStr}`.padEnd(20);
153
+ lines.push(`${statusIcon} ${label} ${diag.message}`);
154
+ if (diag.recommendation) {
155
+ lines.push(` → ${diag.recommendation}`);
156
+ }
157
+ }
158
+ return lines;
159
+ }
160
+ exports.formatOAuthPortDiagnostics = formatOAuthPortDiagnostics;
161
+ /**
162
+ * Pre-flight check before OAuth - returns issues or empty array if OK
163
+ */
164
+ async function preflightOAuthCheck(provider) {
165
+ const diagnostic = await checkOAuthPort(provider);
166
+ const issues = [];
167
+ if (diagnostic.status === 'occupied' && diagnostic.process) {
168
+ issues.push(`OAuth callback port ${diagnostic.port} is blocked by ${diagnostic.process.processName} (PID ${diagnostic.process.pid})`);
169
+ if (diagnostic.recommendation) {
170
+ issues.push(`Fix: ${diagnostic.recommendation}`);
171
+ }
172
+ }
173
+ return {
174
+ ready: issues.length === 0,
175
+ issues,
176
+ };
177
+ }
178
+ exports.preflightOAuthCheck = preflightOAuthCheck;
179
+ exports.default = {
180
+ OAUTH_CALLBACK_PORTS: exports.OAUTH_CALLBACK_PORTS,
181
+ OAUTH_FLOW_TYPES: exports.OAUTH_FLOW_TYPES,
182
+ checkOAuthPort,
183
+ checkAllOAuthPorts,
184
+ checkAuthCodePorts,
185
+ getPortConflicts,
186
+ formatOAuthPortDiagnostics,
187
+ preflightOAuthCheck,
188
+ };
189
+ //# sourceMappingURL=oauth-port-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-port-diagnostics.js","sourceRoot":"","sources":["../../src/management/oauth-port-diagnostics.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,oDAAqF;AAGrF;;;GAGG;AACU,QAAA,oBAAoB,GAA4C;IAC3E,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,IAAI,EAAE,sCAAsC;IAClD,KAAK,EAAE,IAAI,EAAE,sCAAsC;CACpD,CAAC;AAOF;;GAEG;AACU,QAAA,gBAAgB,GAA4C;IACvE,MAAM,EAAE,oBAAoB;IAC5B,KAAK,EAAE,oBAAoB;IAC3B,GAAG,EAAE,oBAAoB;IACzB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,aAAa;CACrB,CAAC;AAsBF;;GAEG;AACI,KAAK,UAAU,cAAc,CAAC,QAA0B;IAC7D,MAAM,IAAI,GAAG,4BAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,wBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE5C,8CAA8C;IAC9C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,QAAQ;YACR,QAAQ;YACR,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,iDAAiD;YAC1D,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAc,EAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,QAAQ;YACR,QAAQ;YACR,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,QAAQ,IAAI,eAAe;YACpC,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,IAAI,IAAA,8BAAiB,EAAC,WAAW,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,QAAQ;YACR,QAAQ;YACR,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,QAAQ,IAAI,gCAAgC;YACrD,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,IAAI;QACJ,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,QAAQ,IAAI,gBAAgB,WAAW,CAAC,WAAW,EAAE;QAC9D,cAAc,EAAE,sBAAsB,WAAW,CAAC,GAAG,cAAc,WAAW,CAAC,WAAW,GAAG;KAC9F,CAAC;AACJ,CAAC;AAvDD,wCAuDC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB;IACtC,MAAM,SAAS,GAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClF,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAVD,gDAUC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB;IACtC,MAAM,SAAS,GAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAVD,gDAUC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB;IACpC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC5C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;AACzD,CAAC;AAHD,4CAGC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CAAC,WAAkC;IAC3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,IAAI,UAAkB,CAAC;QACvB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM;gBACT,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;YACR,KAAK,UAAU;gBACb,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;YACR,KAAK,UAAU;gBACb,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;YACR,KAAK,gBAAgB;gBACnB,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;YACR;gBACE,UAAU,GAAG,KAAK,CAAC;QACvB,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,YAAY,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAlCD,gEAkCC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CAAC,QAA0B;IAIlE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CACT,uBAAuB,UAAU,CAAC,IAAI,kBAAkB,UAAU,CAAC,OAAO,CAAC,WAAW,SAAS,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,CACzH,CAAC;QACF,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,QAAQ,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AApBD,kDAoBC;AAED,kBAAe;IACb,oBAAoB,EAApB,4BAAoB;IACpB,gBAAgB,EAAhB,wBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,0BAA0B;IAC1B,mBAAmB;CACpB,CAAC"}
@@ -1 +1 @@
1
- import{j as e}from"./radix-ui-DAH8Vq_G.js";import{a as m,u as x,b as p,d as f,f as o,g as h}from"./tanstack-DAI1tKxf.js";import{T as g,a as j,b as l,c as y,d as b,e as N}from"./table-OTpVLgy9.js";import{z as d,t as i,B as w}from"./index-P2CKOdyd.js";import{h as C}from"./icons-ByUiVGTN.js";import"./react-vendor-CjrBBxxX.js";import"./form-utils-CSa50xnO.js";function v(){return m({queryKey:["accounts"],queryFn:()=>d.accounts.list()})}function D(){const n=x();return p({mutationFn:a=>d.accounts.setDefault(a),onSuccess:(a,c)=>{n.invalidateQueries({queryKey:["accounts"]}),i.success(`Default account set to "${c}"`)},onError:a=>{i.error(a.message)}})}function T({data:n,defaultAccount:a}){const c=D(),r=f({data:n,columns:[{accessorKey:"name",header:"Name",size:200,cell:({row:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:s.original.name}),s.original.name===a&&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:s})=>e.jsx("span",{className:"capitalize text-muted-foreground",children:s.original.type||"oauth"})},{accessorKey:"created",header:"Created",size:150,cell:({row:s})=>{const t=new Date(s.original.created);return e.jsx("span",{className:"text-muted-foreground",children:t.toLocaleDateString()})}},{accessorKey:"last_used",header:"Last Used",size:150,cell:({row:s})=>{if(!s.original.last_used)return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});const t=new Date(s.original.last_used);return e.jsx("span",{className:"text-muted-foreground",children:t.toLocaleDateString()})}},{id:"actions",header:"Actions",size:100,cell:({row:s})=>{const t=s.original.name===a;return e.jsxs(w,{variant:t?"secondary":"default",size:"sm",className:"h-8 px-2 w-full",disabled:t||c.isPending,onClick:()=>c.mutate(s.original.name),children:[e.jsx(C,{className:`w-3 h-3 mr-1.5 ${t?"opacity-50":""}`}),t?"Active":"Set Default"]})}}],getCoreRowModel:h()});return n.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 login"})," to add accounts."]}):e.jsx("div",{className:"border rounded-md",children:e.jsxs(g,{children:[e.jsx(j,{children:r.getHeaderGroups().map(s=>e.jsx(l,{children:s.headers.map(t=>{const u={name:"w-[200px]",type:"w-[100px]",created:"w-[150px]",last_used:"w-[150px]",actions:"w-[100px]"}[t.id]||"w-auto";return e.jsx(y,{className:u,children:t.isPlaceholder?null:o(t.column.columnDef.header,t.getContext())},t.id)})},s.id))}),e.jsx(b,{children:r.getRowModel().rows.map(s=>e.jsx(l,{children:s.getVisibleCells().map(t=>e.jsx(N,{children:o(t.column.columnDef.cell,t.getContext())},t.id))},s.id))})]})})}function q(){const{data:n,isLoading:a}=v();return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-8",children:[e.jsx("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)"})]})}),a?e.jsx("div",{className:"text-muted-foreground",children:"Loading accounts..."}):e.jsx(T,{data:n?.accounts||[],defaultAccount:n?.default??null}),e.jsx("div",{className:"text-sm text-muted-foreground border-t pt-4 mt-4",children:e.jsxs("p",{children:["Accounts are isolated Claude instances with separate sessions.",e.jsx("br",{}),"Use ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"ccs auth create <name>"})," to add new accounts via CLI."]})})]})}export{q as AccountsPage};
1
+ import{j as e}from"./radix-ui-DAH8Vq_G.js";import{a as m,u as x,b as p,d as f,f as o,g as h}from"./tanstack-DAI1tKxf.js";import{T as g,a as j,b as l,c as y,d as b,e as N}from"./table-DHr1Oba_.js";import{r as d,t as i,B as w}from"./index-JNyH4mtq.js";import{h as C}from"./icons-Pr4HmEFP.js";import"./react-vendor-CjrBBxxX.js";import"./form-utils-DKkU3nz7.js";function v(){return m({queryKey:["accounts"],queryFn:()=>d.accounts.list()})}function D(){const n=x();return p({mutationFn:a=>d.accounts.setDefault(a),onSuccess:(a,c)=>{n.invalidateQueries({queryKey:["accounts"]}),i.success(`Default account set to "${c}"`)},onError:a=>{i.error(a.message)}})}function T({data:n,defaultAccount:a}){const c=D(),r=f({data:n,columns:[{accessorKey:"name",header:"Name",size:200,cell:({row:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:s.original.name}),s.original.name===a&&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:s})=>e.jsx("span",{className:"capitalize text-muted-foreground",children:s.original.type||"oauth"})},{accessorKey:"created",header:"Created",size:150,cell:({row:s})=>{const t=new Date(s.original.created);return e.jsx("span",{className:"text-muted-foreground",children:t.toLocaleDateString()})}},{accessorKey:"last_used",header:"Last Used",size:150,cell:({row:s})=>{if(!s.original.last_used)return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});const t=new Date(s.original.last_used);return e.jsx("span",{className:"text-muted-foreground",children:t.toLocaleDateString()})}},{id:"actions",header:"Actions",size:100,cell:({row:s})=>{const t=s.original.name===a;return e.jsxs(w,{variant:t?"secondary":"default",size:"sm",className:"h-8 px-2 w-full",disabled:t||c.isPending,onClick:()=>c.mutate(s.original.name),children:[e.jsx(C,{className:`w-3 h-3 mr-1.5 ${t?"opacity-50":""}`}),t?"Active":"Set Default"]})}}],getCoreRowModel:h()});return n.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 login"})," to add accounts."]}):e.jsx("div",{className:"border rounded-md",children:e.jsxs(g,{children:[e.jsx(j,{children:r.getHeaderGroups().map(s=>e.jsx(l,{children:s.headers.map(t=>{const u={name:"w-[200px]",type:"w-[100px]",created:"w-[150px]",last_used:"w-[150px]",actions:"w-[100px]"}[t.id]||"w-auto";return e.jsx(y,{className:u,children:t.isPlaceholder?null:o(t.column.columnDef.header,t.getContext())},t.id)})},s.id))}),e.jsx(b,{children:r.getRowModel().rows.map(s=>e.jsx(l,{children:s.getVisibleCells().map(t=>e.jsx(N,{children:o(t.column.columnDef.cell,t.getContext())},t.id))},s.id))})]})})}function q(){const{data:n,isLoading:a}=v();return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-8",children:[e.jsx("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)"})]})}),a?e.jsx("div",{className:"text-muted-foreground",children:"Loading accounts..."}):e.jsx(T,{data:n?.accounts||[],defaultAccount:n?.default??null}),e.jsx("div",{className:"text-sm text-muted-foreground border-t pt-4 mt-4",children:e.jsxs("p",{children:["Accounts are isolated Claude instances with separate sessions.",e.jsx("br",{}),"Use ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"ccs auth create <name>"})," to add new accounts via CLI."]})})]})}export{q as AccountsPage};