@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.
- package/README.md +23 -0
- package/VERSION +1 -1
- package/dist/cliproxy/account-manager.d.ts +20 -1
- package/dist/cliproxy/account-manager.d.ts.map +1 -1
- package/dist/cliproxy/account-manager.js +58 -3
- package/dist/cliproxy/account-manager.js.map +1 -1
- package/dist/cliproxy/auth-handler.d.ts +2 -0
- package/dist/cliproxy/auth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth-handler.js +68 -10
- package/dist/cliproxy/auth-handler.js.map +1 -1
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
- package/dist/cliproxy/cliproxy-executor.js +57 -2
- package/dist/cliproxy/cliproxy-executor.js.map +1 -1
- package/dist/commands/cliproxy-command.d.ts.map +1 -1
- package/dist/commands/cliproxy-command.js +121 -5
- package/dist/commands/cliproxy-command.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +3 -0
- package/dist/commands/help-command.js.map +1 -1
- package/dist/management/doctor.d.ts +10 -0
- package/dist/management/doctor.d.ts.map +1 -1
- package/dist/management/doctor.js +104 -4
- package/dist/management/doctor.js.map +1 -1
- package/dist/management/environment-diagnostics.d.ts +69 -0
- package/dist/management/environment-diagnostics.d.ts.map +1 -0
- package/dist/management/environment-diagnostics.js +229 -0
- package/dist/management/environment-diagnostics.js.map +1 -0
- package/dist/management/oauth-port-diagnostics.d.ts +85 -0
- package/dist/management/oauth-port-diagnostics.d.ts.map +1 -0
- package/dist/management/oauth-port-diagnostics.js +189 -0
- package/dist/management/oauth-port-diagnostics.js.map +1 -0
- package/dist/ui/assets/{accounts-B9xp2MbI.js → accounts-BqgbKJ_T.js} +1 -1
- package/dist/ui/assets/analytics-kvupQ2oO.js +64 -0
- package/dist/ui/assets/{api-DYr0Tx6Z.js → api-BDi9b5BG.js} +1 -1
- package/dist/ui/assets/cliproxy-jQ6copQ7.js +1 -0
- package/dist/ui/assets/{dropdown-menu-iwA6PgQW.js → dropdown-menu-DpmTYmUM.js} +1 -1
- package/dist/ui/assets/form-utils-DKkU3nz7.js +20 -0
- package/dist/ui/assets/{health-ChYme1jV.js → health-CWKKFk6T.js} +1 -1
- package/dist/ui/assets/icons-Pr4HmEFP.js +1 -0
- package/dist/ui/assets/index-BnrVxA3p.css +1 -0
- package/dist/ui/assets/index-JNyH4mtq.js +10 -0
- package/dist/ui/assets/{settings-B2OdR7RO.js → settings-D7tDThbI.js} +1 -1
- package/dist/ui/assets/{shared-ZSfv4HA6.js → shared-BsRfvJUd.js} +1 -1
- package/dist/ui/assets/{table-OTpVLgy9.js → table-DHr1Oba_.js} +1 -1
- package/dist/ui/index.html +4 -4
- package/dist/web-server/data-aggregator.d.ts +45 -0
- package/dist/web-server/data-aggregator.d.ts.map +1 -0
- package/dist/web-server/data-aggregator.js +305 -0
- package/dist/web-server/data-aggregator.js.map +1 -0
- package/dist/web-server/health-service.d.ts +1 -1
- package/dist/web-server/health-service.d.ts.map +1 -1
- package/dist/web-server/health-service.js +68 -5
- package/dist/web-server/health-service.js.map +1 -1
- package/dist/web-server/jsonl-parser.d.ts +68 -0
- package/dist/web-server/jsonl-parser.d.ts.map +1 -0
- package/dist/web-server/jsonl-parser.js +212 -0
- package/dist/web-server/jsonl-parser.js.map +1 -0
- package/dist/web-server/model-pricing.d.ts +42 -0
- package/dist/web-server/model-pricing.d.ts.map +1 -0
- package/dist/web-server/model-pricing.js +642 -0
- package/dist/web-server/model-pricing.js.map +1 -0
- package/dist/web-server/usage-disk-cache.d.ts +1 -2
- package/dist/web-server/usage-disk-cache.d.ts.map +1 -1
- package/dist/web-server/usage-disk-cache.js +2 -1
- package/dist/web-server/usage-disk-cache.js.map +1 -1
- package/dist/web-server/usage-routes.d.ts +1 -1
- package/dist/web-server/usage-routes.d.ts.map +1 -1
- package/dist/web-server/usage-routes.js +194 -11
- package/dist/web-server/usage-routes.js.map +1 -1
- package/dist/web-server/usage-types.d.ts +57 -0
- package/dist/web-server/usage-types.d.ts.map +1 -0
- package/dist/web-server/usage-types.js +9 -0
- package/dist/web-server/usage-types.js.map +1 -0
- package/package.json +3 -3
- package/dist/ui/assets/analytics-BfjSH3d-.js +0 -64
- package/dist/ui/assets/cliproxy-BuB-MuAt.js +0 -1
- package/dist/ui/assets/form-utils-CSa50xnO.js +0 -20
- package/dist/ui/assets/icons-ByUiVGTN.js +0 -1
- package/dist/ui/assets/index-ChihF1Y9.css +0 -1
- 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":"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"}
|
|
@@ -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-
|
|
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};
|