@redonvn/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -0
- package/bin/redai.js +22 -0
- package/dist/auth/client-id.d.ts +8 -0
- package/dist/auth/client-id.js +41 -0
- package/dist/auth/client-id.js.map +1 -0
- package/dist/auth/store.d.ts +16 -0
- package/dist/auth/store.js +39 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/cli/commands/login.d.ts +6 -0
- package/dist/cli/commands/login.js +82 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +1 -0
- package/dist/cli/commands/logout.js +18 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/oauth.d.ts +11 -0
- package/dist/cli/commands/oauth.js +311 -0
- package/dist/cli/commands/oauth.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +7 -0
- package/dist/cli/commands/serve.js +24 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/start.d.ts +1 -0
- package/dist/cli/commands/start.js +26 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.js +51 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +127 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli-router/detect.d.ts +13 -0
- package/dist/cli-router/detect.js +58 -0
- package/dist/cli-router/detect.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/router.d.ts +17 -0
- package/dist/daemon/router.js +39 -0
- package/dist/daemon/router.js.map +1 -0
- package/dist/daemon/tunnel.d.ts +10 -0
- package/dist/daemon/tunnel.js +156 -0
- package/dist/daemon/tunnel.js.map +1 -0
- package/dist/llm/llm-request.d.ts +9 -0
- package/dist/llm/llm-request.js +98 -0
- package/dist/llm/llm-request.js.map +1 -0
- package/dist/llm/oauth/antigravity-oauth.d.ts +22 -0
- package/dist/llm/oauth/antigravity-oauth.js +128 -0
- package/dist/llm/oauth/antigravity-oauth.js.map +1 -0
- package/dist/llm/oauth/callback-server.d.ts +18 -0
- package/dist/llm/oauth/callback-server.js +78 -0
- package/dist/llm/oauth/callback-server.js.map +1 -0
- package/dist/llm/oauth/claude-oauth.d.ts +29 -0
- package/dist/llm/oauth/claude-oauth.js +115 -0
- package/dist/llm/oauth/claude-oauth.js.map +1 -0
- package/dist/llm/oauth/codex-oauth.d.ts +21 -0
- package/dist/llm/oauth/codex-oauth.js +137 -0
- package/dist/llm/oauth/codex-oauth.js.map +1 -0
- package/dist/llm/oauth/gemini-oauth.d.ts +26 -0
- package/dist/llm/oauth/gemini-oauth.js +132 -0
- package/dist/llm/oauth/gemini-oauth.js.map +1 -0
- package/dist/llm/oauth/iflow-oauth.d.ts +26 -0
- package/dist/llm/oauth/iflow-oauth.js +151 -0
- package/dist/llm/oauth/iflow-oauth.js.map +1 -0
- package/dist/llm/oauth/kimi-oauth.d.ts +16 -0
- package/dist/llm/oauth/kimi-oauth.js +126 -0
- package/dist/llm/oauth/kimi-oauth.js.map +1 -0
- package/dist/llm/oauth/open-browser.d.ts +5 -0
- package/dist/llm/oauth/open-browser.js +32 -0
- package/dist/llm/oauth/open-browser.js.map +1 -0
- package/dist/llm/oauth/pkce.d.ts +12 -0
- package/dist/llm/oauth/pkce.js +27 -0
- package/dist/llm/oauth/pkce.js.map +1 -0
- package/dist/llm/oauth/qwen-oauth.d.ts +27 -0
- package/dist/llm/oauth/qwen-oauth.js +138 -0
- package/dist/llm/oauth/qwen-oauth.js.map +1 -0
- package/dist/llm/oauth/store.d.ts +34 -0
- package/dist/llm/oauth/store.js +72 -0
- package/dist/llm/oauth/store.js.map +1 -0
- package/dist/llm/oauth/xai-oauth.d.ts +28 -0
- package/dist/llm/oauth/xai-oauth.js +132 -0
- package/dist/llm/oauth/xai-oauth.js.map +1 -0
- package/dist/llm/providers/antigravity.d.ts +23 -0
- package/dist/llm/providers/antigravity.js +103 -0
- package/dist/llm/providers/antigravity.js.map +1 -0
- package/dist/llm/providers/claude.d.ts +36 -0
- package/dist/llm/providers/claude.js +148 -0
- package/dist/llm/providers/claude.js.map +1 -0
- package/dist/llm/providers/codex.d.ts +23 -0
- package/dist/llm/providers/codex.js +122 -0
- package/dist/llm/providers/codex.js.map +1 -0
- package/dist/llm/providers/gemini.d.ts +23 -0
- package/dist/llm/providers/gemini.js +112 -0
- package/dist/llm/providers/gemini.js.map +1 -0
- package/dist/llm/providers/generic-client.d.ts +45 -0
- package/dist/llm/providers/generic-client.js +98 -0
- package/dist/llm/providers/generic-client.js.map +1 -0
- package/dist/llm/providers/iflow.d.ts +8 -0
- package/dist/llm/providers/iflow.js +15 -0
- package/dist/llm/providers/iflow.js.map +1 -0
- package/dist/llm/providers/kimi.d.ts +8 -0
- package/dist/llm/providers/kimi.js +16 -0
- package/dist/llm/providers/kimi.js.map +1 -0
- package/dist/llm/providers/qwen.d.ts +8 -0
- package/dist/llm/providers/qwen.js +15 -0
- package/dist/llm/providers/qwen.js.map +1 -0
- package/dist/llm/providers/xai.d.ts +8 -0
- package/dist/llm/providers/xai.js +15 -0
- package/dist/llm/providers/xai.js.map +1 -0
- package/dist/llm/selector.d.ts +14 -0
- package/dist/llm/selector.js +81 -0
- package/dist/llm/selector.js.map +1 -0
- package/dist/server/http-server.d.ts +22 -0
- package/dist/server/http-server.js +194 -0
- package/dist/server/http-server.js.map +1 -0
- package/dist/tools/bash.d.ts +7 -0
- package/dist/tools/bash.js +61 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.d.ts +4 -0
- package/dist/tools/edit.js +35 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/glob.d.ts +5 -0
- package/dist/tools/glob.js +27 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +5 -0
- package/dist/tools/grep.js +63 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/read.d.ts +6 -0
- package/dist/tools/read.js +25 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/registry.d.ts +8 -0
- package/dist/tools/registry.js +43 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/run-cli.d.ts +7 -0
- package/dist/tools/run-cli.js +83 -0
- package/dist/tools/run-cli.js.map +1 -0
- package/dist/tools/webfetch.d.ts +7 -0
- package/dist/tools/webfetch.js +26 -0
- package/dist/tools/webfetch.js.map +1 -0
- package/dist/tools/write.d.ts +5 -0
- package/dist/tools/write.js +29 -0
- package/dist/tools/write.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.oauthCommand = oauthCommand;
|
|
7
|
+
exports.oauthListCommand = oauthListCommand;
|
|
8
|
+
exports.oauthLogoutCommand = oauthLogoutCommand;
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
11
|
+
const claude_oauth_1 = require("../../llm/oauth/claude-oauth");
|
|
12
|
+
const codex_oauth_1 = require("../../llm/oauth/codex-oauth");
|
|
13
|
+
const gemini_oauth_1 = require("../../llm/oauth/gemini-oauth");
|
|
14
|
+
const antigravity_oauth_1 = require("../../llm/oauth/antigravity-oauth");
|
|
15
|
+
const qwen_oauth_1 = require("../../llm/oauth/qwen-oauth");
|
|
16
|
+
const kimi_oauth_1 = require("../../llm/oauth/kimi-oauth");
|
|
17
|
+
const iflow_oauth_1 = require("../../llm/oauth/iflow-oauth");
|
|
18
|
+
const xai_oauth_1 = require("../../llm/oauth/xai-oauth");
|
|
19
|
+
const callback_server_1 = require("../../llm/oauth/callback-server");
|
|
20
|
+
const open_browser_1 = require("../../llm/oauth/open-browser");
|
|
21
|
+
const store_1 = require("../../llm/oauth/store");
|
|
22
|
+
const SUPPORTED_PROVIDERS = [
|
|
23
|
+
'claude',
|
|
24
|
+
'codex',
|
|
25
|
+
'gemini',
|
|
26
|
+
'antigravity',
|
|
27
|
+
'qwen',
|
|
28
|
+
'kimi',
|
|
29
|
+
'iflow',
|
|
30
|
+
'xai',
|
|
31
|
+
];
|
|
32
|
+
const CLAUDE_CALLBACK_PORT = 54545;
|
|
33
|
+
const CODEX_CALLBACK_PORT = 1455;
|
|
34
|
+
const CODEX_CALLBACK_PATH = '/auth/callback';
|
|
35
|
+
async function oauthCommand(options) {
|
|
36
|
+
const provider = options.provider;
|
|
37
|
+
if (!SUPPORTED_PROVIDERS.includes(provider)) {
|
|
38
|
+
console.error(chalk_1.default.red(`Unsupported provider: ${provider}.`), `Supported: ${SUPPORTED_PROVIDERS.join(', ')}`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const account = options.account?.trim() || 'default';
|
|
42
|
+
const noBrowser = options.noBrowser ?? false;
|
|
43
|
+
switch (provider) {
|
|
44
|
+
case 'claude':
|
|
45
|
+
return loginClaude(account, noBrowser);
|
|
46
|
+
case 'codex':
|
|
47
|
+
return loginCodex(account, noBrowser);
|
|
48
|
+
case 'gemini':
|
|
49
|
+
return loginGemini(account, noBrowser);
|
|
50
|
+
case 'antigravity':
|
|
51
|
+
return loginAntigravity(account, noBrowser);
|
|
52
|
+
case 'qwen':
|
|
53
|
+
return loginQwen(account, noBrowser);
|
|
54
|
+
case 'kimi':
|
|
55
|
+
return loginKimi(account, noBrowser);
|
|
56
|
+
case 'iflow':
|
|
57
|
+
return loginIFlow(account, noBrowser, options.cookie);
|
|
58
|
+
case 'xai':
|
|
59
|
+
return loginXAI(account, noBrowser);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function loginClaude(account, noBrowser) {
|
|
63
|
+
const session = (0, claude_oauth_1.startClaudeAuth)();
|
|
64
|
+
const callback = (0, callback_server_1.waitForCallback)({
|
|
65
|
+
port: CLAUDE_CALLBACK_PORT,
|
|
66
|
+
pathname: '/callback',
|
|
67
|
+
timeoutMs: 5 * 60 * 1000,
|
|
68
|
+
});
|
|
69
|
+
showAuthUrl('Claude Code OAuth', session.authUrl, claude_oauth_1.CLAUDE_REDIRECT_URI, noBrowser);
|
|
70
|
+
const result = await waitOrExit(callback.promise);
|
|
71
|
+
if (result.state && result.state !== session.state)
|
|
72
|
+
return abortCsrf();
|
|
73
|
+
try {
|
|
74
|
+
const token = await (0, claude_oauth_1.exchangeCodeForTokens)(result.code, session.pkce, session.state, account);
|
|
75
|
+
(0, store_1.saveToken)('claude', token);
|
|
76
|
+
printLoginSummary('Claude', token);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
return handleExchangeError(err);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function loginCodex(account, noBrowser) {
|
|
83
|
+
const session = (0, codex_oauth_1.startCodexAuth)();
|
|
84
|
+
const callback = (0, callback_server_1.waitForCallback)({
|
|
85
|
+
port: CODEX_CALLBACK_PORT,
|
|
86
|
+
pathname: CODEX_CALLBACK_PATH,
|
|
87
|
+
timeoutMs: 5 * 60 * 1000,
|
|
88
|
+
});
|
|
89
|
+
showAuthUrl('Sign in with ChatGPT', session.authUrl, codex_oauth_1.CODEX_REDIRECT_URI, noBrowser);
|
|
90
|
+
const result = await waitOrExit(callback.promise);
|
|
91
|
+
if (result.state && result.state !== session.state)
|
|
92
|
+
return abortCsrf();
|
|
93
|
+
try {
|
|
94
|
+
const token = await (0, codex_oauth_1.exchangeCodexCodeForTokens)(result.code, session.pkce, account);
|
|
95
|
+
(0, store_1.saveToken)('codex', token);
|
|
96
|
+
printLoginSummary('Codex', token);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
return handleExchangeError(err);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function loginGemini(account, noBrowser) {
|
|
103
|
+
const session = (0, gemini_oauth_1.startGeminiAuth)(gemini_oauth_1.GEMINI_DEFAULT_CALLBACK_PORT);
|
|
104
|
+
const callback = (0, callback_server_1.waitForCallback)({
|
|
105
|
+
port: gemini_oauth_1.GEMINI_DEFAULT_CALLBACK_PORT,
|
|
106
|
+
pathname: '/oauth2callback',
|
|
107
|
+
timeoutMs: 5 * 60 * 1000,
|
|
108
|
+
});
|
|
109
|
+
showAuthUrl('Gemini Code Assist (Google)', session.authUrl, session.redirectUri, noBrowser);
|
|
110
|
+
const result = await waitOrExit(callback.promise);
|
|
111
|
+
if (result.state && result.state !== session.state)
|
|
112
|
+
return abortCsrf();
|
|
113
|
+
try {
|
|
114
|
+
const token = await (0, gemini_oauth_1.exchangeGeminiCodeForTokens)(result.code, session.redirectUri, account);
|
|
115
|
+
(0, store_1.saveToken)('gemini', token);
|
|
116
|
+
printLoginSummary('Gemini', token);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return handleExchangeError(err);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async function loginAntigravity(account, noBrowser) {
|
|
123
|
+
const session = (0, antigravity_oauth_1.startAntigravityAuth)(antigravity_oauth_1.ANTIGRAVITY_DEFAULT_CALLBACK_PORT);
|
|
124
|
+
const callback = (0, callback_server_1.waitForCallback)({
|
|
125
|
+
port: antigravity_oauth_1.ANTIGRAVITY_DEFAULT_CALLBACK_PORT,
|
|
126
|
+
pathname: '/oauth2callback',
|
|
127
|
+
timeoutMs: 5 * 60 * 1000,
|
|
128
|
+
});
|
|
129
|
+
showAuthUrl('Antigravity (Google)', session.authUrl, session.redirectUri, noBrowser);
|
|
130
|
+
const result = await waitOrExit(callback.promise);
|
|
131
|
+
if (result.state && result.state !== session.state)
|
|
132
|
+
return abortCsrf();
|
|
133
|
+
try {
|
|
134
|
+
const token = await (0, antigravity_oauth_1.exchangeAntigravityCodeForTokens)(result.code, session.redirectUri, account);
|
|
135
|
+
(0, store_1.saveToken)('antigravity', token);
|
|
136
|
+
printLoginSummary('Antigravity', token);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
return handleExchangeError(err);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async function loginQwen(account, noBrowser) {
|
|
143
|
+
console.log(chalk_1.default.cyan('Requesting Qwen device code...'));
|
|
144
|
+
const device = await (0, qwen_oauth_1.requestQwenDeviceCode)();
|
|
145
|
+
showDeviceCode('Qwen', device.userCode, device.verificationUriComplete ?? device.verificationUri, noBrowser);
|
|
146
|
+
try {
|
|
147
|
+
const token = await (0, qwen_oauth_1.pollQwenToken)(device, account);
|
|
148
|
+
(0, store_1.saveToken)('qwen', token);
|
|
149
|
+
printLoginSummary('Qwen', token);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
return handleExchangeError(err);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async function loginKimi(account, noBrowser) {
|
|
156
|
+
console.log(chalk_1.default.cyan('Requesting Kimi device code...'));
|
|
157
|
+
const device = await (0, kimi_oauth_1.requestKimiDeviceCode)();
|
|
158
|
+
showDeviceCode('Kimi', device.userCode, device.verificationUriComplete ?? device.verificationUri, noBrowser);
|
|
159
|
+
try {
|
|
160
|
+
const token = await (0, kimi_oauth_1.pollKimiToken)(device, account);
|
|
161
|
+
(0, store_1.saveToken)('kimi', token);
|
|
162
|
+
printLoginSummary('Kimi', token);
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
return handleExchangeError(err);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async function loginIFlow(account, noBrowser, cookieArg) {
|
|
169
|
+
let cookie = cookieArg;
|
|
170
|
+
if (!cookie) {
|
|
171
|
+
const response = await (0, prompts_1.default)({
|
|
172
|
+
type: 'select',
|
|
173
|
+
name: 'mode',
|
|
174
|
+
message: 'iFlow login mode:',
|
|
175
|
+
choices: [
|
|
176
|
+
{ title: 'OAuth (browser)', value: 'oauth' },
|
|
177
|
+
{ title: 'Paste cookie (BXAuth)', value: 'cookie' },
|
|
178
|
+
],
|
|
179
|
+
});
|
|
180
|
+
if (response.mode === 'cookie') {
|
|
181
|
+
const c = await (0, prompts_1.default)({
|
|
182
|
+
type: 'password',
|
|
183
|
+
name: 'cookie',
|
|
184
|
+
message: 'Paste your iflow.cn cookie (must contain BXAuth):',
|
|
185
|
+
});
|
|
186
|
+
cookie = c.cookie;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (cookie) {
|
|
190
|
+
try {
|
|
191
|
+
const token = await (0, iflow_oauth_1.exchangeIFlowCookieForApiKey)(cookie, account);
|
|
192
|
+
(0, store_1.saveToken)('iflow', token);
|
|
193
|
+
printLoginSummary('iFlow (cookie mode)', token);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
return handleExchangeError(err);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const session = (0, iflow_oauth_1.startIFlowAuth)(iflow_oauth_1.IFLOW_DEFAULT_CALLBACK_PORT);
|
|
201
|
+
const callback = (0, callback_server_1.waitForCallback)({
|
|
202
|
+
port: iflow_oauth_1.IFLOW_DEFAULT_CALLBACK_PORT,
|
|
203
|
+
pathname: '/callback',
|
|
204
|
+
timeoutMs: 5 * 60 * 1000,
|
|
205
|
+
});
|
|
206
|
+
showAuthUrl('iFlow OAuth', session.authUrl, session.redirectUri, noBrowser);
|
|
207
|
+
const result = await waitOrExit(callback.promise);
|
|
208
|
+
if (result.state && result.state !== session.state)
|
|
209
|
+
return abortCsrf();
|
|
210
|
+
try {
|
|
211
|
+
const token = await (0, iflow_oauth_1.exchangeIFlowCodeForTokens)(result.code, session.pkce, session.redirectUri, account);
|
|
212
|
+
(0, store_1.saveToken)('iflow', token);
|
|
213
|
+
printLoginSummary('iFlow', token);
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
return handleExchangeError(err);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async function loginXAI(account, noBrowser) {
|
|
220
|
+
console.log(chalk_1.default.cyan('Fetching xAI OIDC discovery...'));
|
|
221
|
+
const session = await (0, xai_oauth_1.startXAIAuth)(xai_oauth_1.XAI_DEFAULT_CALLBACK_PORT);
|
|
222
|
+
const callback = (0, callback_server_1.waitForCallback)({
|
|
223
|
+
port: xai_oauth_1.XAI_DEFAULT_CALLBACK_PORT,
|
|
224
|
+
pathname: xai_oauth_1.XAI_CALLBACK_PATH,
|
|
225
|
+
timeoutMs: 5 * 60 * 1000,
|
|
226
|
+
});
|
|
227
|
+
showAuthUrl('xAI Grok OAuth', session.authUrl, session.redirectUri, noBrowser);
|
|
228
|
+
const result = await waitOrExit(callback.promise);
|
|
229
|
+
if (result.state && result.state !== session.state)
|
|
230
|
+
return abortCsrf();
|
|
231
|
+
try {
|
|
232
|
+
const token = await (0, xai_oauth_1.exchangeXAICodeForTokens)(result.code, session.pkce, session.redirectUri, session.discovery.tokenEndpoint, account);
|
|
233
|
+
(0, store_1.saveToken)('xai', token);
|
|
234
|
+
printLoginSummary('xAI Grok', token);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
return handleExchangeError(err);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function showAuthUrl(label, url, callback, noBrowser) {
|
|
241
|
+
console.log();
|
|
242
|
+
console.log(chalk_1.default.cyan(`Open this URL to authorize ${label}:`));
|
|
243
|
+
console.log(` ${url}`);
|
|
244
|
+
console.log();
|
|
245
|
+
console.log(chalk_1.default.dim(`Waiting for callback on ${callback} ...`));
|
|
246
|
+
if (!noBrowser)
|
|
247
|
+
(0, open_browser_1.openBrowser)(url);
|
|
248
|
+
}
|
|
249
|
+
function showDeviceCode(label, userCode, url, noBrowser) {
|
|
250
|
+
console.log();
|
|
251
|
+
console.log(chalk_1.default.cyan(`${label} device flow:`));
|
|
252
|
+
console.log(` Open: ${chalk_1.default.bold(url)}`);
|
|
253
|
+
console.log(` Code: ${chalk_1.default.bold(userCode)}`);
|
|
254
|
+
console.log();
|
|
255
|
+
console.log(chalk_1.default.dim('Polling for token...'));
|
|
256
|
+
if (!noBrowser)
|
|
257
|
+
(0, open_browser_1.openBrowser)(url);
|
|
258
|
+
}
|
|
259
|
+
async function waitOrExit(p) {
|
|
260
|
+
try {
|
|
261
|
+
return await p;
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
console.error(chalk_1.default.red('✗ OAuth flow failed:'), err instanceof Error ? err.message : err);
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
function abortCsrf() {
|
|
269
|
+
console.error(chalk_1.default.red('✗ State mismatch — possible CSRF. Aborting.'));
|
|
270
|
+
process.exit(1);
|
|
271
|
+
}
|
|
272
|
+
function handleExchangeError(err) {
|
|
273
|
+
console.error(chalk_1.default.red('✗ Token exchange failed:'), err instanceof Error ? err.message : err);
|
|
274
|
+
process.exit(1);
|
|
275
|
+
}
|
|
276
|
+
function printLoginSummary(providerLabel, token) {
|
|
277
|
+
console.log();
|
|
278
|
+
console.log(chalk_1.default.green(`✓ ${providerLabel} logged in.`));
|
|
279
|
+
console.log(` ${chalk_1.default.gray('Account :')} ${token.account}`);
|
|
280
|
+
if (token.email)
|
|
281
|
+
console.log(` ${chalk_1.default.gray('Email :')} ${token.email}`);
|
|
282
|
+
console.log(` ${chalk_1.default.gray('Expires :')} ${new Date(token.expiresAt).toISOString()}`);
|
|
283
|
+
console.log();
|
|
284
|
+
console.log(chalk_1.default.dim('This machine can now serve LLMRequest tool calls for AI agents on RedAI cloud.'));
|
|
285
|
+
}
|
|
286
|
+
async function oauthListCommand() {
|
|
287
|
+
let any = false;
|
|
288
|
+
for (const provider of SUPPORTED_PROVIDERS) {
|
|
289
|
+
const accounts = (0, store_1.listAccounts)(provider);
|
|
290
|
+
if (!accounts.length)
|
|
291
|
+
continue;
|
|
292
|
+
any = true;
|
|
293
|
+
console.log(chalk_1.default.cyan(provider));
|
|
294
|
+
for (const account of accounts) {
|
|
295
|
+
const token = (0, store_1.loadToken)(provider, account);
|
|
296
|
+
if (!token)
|
|
297
|
+
continue;
|
|
298
|
+
const status = token.expiresAt < Date.now() ? chalk_1.default.red('EXPIRED') : chalk_1.default.green('active');
|
|
299
|
+
console.log(` ${account} ${status} ${chalk_1.default.dim(token.email ?? '')} ` +
|
|
300
|
+
chalk_1.default.dim(`exp=${new Date(token.expiresAt).toISOString()}`));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (!any) {
|
|
304
|
+
console.log(chalk_1.default.yellow('No OAuth accounts. Run `redai oauth <provider>` to login.'));
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
async function oauthLogoutCommand(provider, account = 'default') {
|
|
308
|
+
(0, store_1.deleteToken)(provider, account);
|
|
309
|
+
console.log(chalk_1.default.green(`✓ Removed ${provider}:${account}`));
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/cli/commands/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.serveCommand = serveCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const http_server_1 = require("../../server/http-server");
|
|
9
|
+
async function serveCommand(opts = {}) {
|
|
10
|
+
const port = opts.port ?? 8317;
|
|
11
|
+
const host = opts.host ?? '127.0.0.1';
|
|
12
|
+
const apiKey = opts.apiKey?.trim() || (0, http_server_1.generateApiKey)();
|
|
13
|
+
if (!opts.apiKey) {
|
|
14
|
+
console.log();
|
|
15
|
+
console.log(chalk_1.default.yellow('⚠ Generated random API key (not persisted):'));
|
|
16
|
+
console.log(` ${apiKey}`);
|
|
17
|
+
console.log(chalk_1.default.dim(' Pass --api-key <yours> to override.'));
|
|
18
|
+
console.log();
|
|
19
|
+
}
|
|
20
|
+
(0, http_server_1.startHttpServer)({ port, host, apiKey });
|
|
21
|
+
// Keep process alive
|
|
22
|
+
await new Promise(() => undefined);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":";;;;;AASA,oCAiBC;AA1BD,kDAA0B;AAC1B,0DAA2E;AAQpE,KAAK,UAAU,YAAY,CAAC,OAAqB,EAAE;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAA,4BAAc,GAAE,CAAC;IAEvD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAA,6BAAe,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAExC,qBAAqB;IACrB,MAAM,IAAI,OAAO,CAAO,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function startCommand(): Promise<void>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.startCommand = startCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const store_1 = require("../../auth/store");
|
|
9
|
+
const tunnel_1 = require("../../daemon/tunnel");
|
|
10
|
+
async function startCommand() {
|
|
11
|
+
const cfg = (0, store_1.loadConfig)();
|
|
12
|
+
if (!cfg) {
|
|
13
|
+
console.error(chalk_1.default.red('Not logged in. Run `redai login` first.'));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
if (cfg.expiresAt < Date.now()) {
|
|
17
|
+
console.error(chalk_1.default.red('cliToken expired. Run `redai login` again.'));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
console.log(chalk_1.default.cyan('Starting RedAI CLI daemon...'));
|
|
21
|
+
console.log(chalk_1.default.dim(` WS: ${cfg.wsUrl}`));
|
|
22
|
+
console.log(chalk_1.default.dim(` Client ID: ${cfg.clientId}`));
|
|
23
|
+
console.log(chalk_1.default.dim('Press Ctrl-C to stop.\n'));
|
|
24
|
+
await (0, tunnel_1.startDaemon)(cfg);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":";;;;;AAIA,oCAiBC;AArBD,kDAA0B;AAC1B,4CAA8C;AAC9C,gDAAkD;AAE3C,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,IAAA,kBAAU,GAAE,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAElD,MAAM,IAAA,oBAAW,EAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function statusCommand(): Promise<void>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.statusCommand = statusCommand;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const config_1 = require("../../config");
|
|
10
|
+
const store_1 = require("../../auth/store");
|
|
11
|
+
const detect_1 = require("../../cli-router/detect");
|
|
12
|
+
async function statusCommand() {
|
|
13
|
+
const cfg = (0, store_1.loadConfig)();
|
|
14
|
+
if (!cfg) {
|
|
15
|
+
console.log(chalk_1.default.yellow('Not logged in.'));
|
|
16
|
+
console.log(chalk_1.default.dim('Run `redai login` first.'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log(chalk_1.default.cyan('RedAI CLI'), chalk_1.default.dim(`v${config_1.CLI_VERSION}`));
|
|
20
|
+
console.log();
|
|
21
|
+
console.log(` ${chalk_1.default.gray('User :')} ${cfg.userName ?? cfg.userEmail ?? cfg.userId}`);
|
|
22
|
+
console.log(` ${chalk_1.default.gray('Client ID :')} ${cfg.clientId}`);
|
|
23
|
+
console.log(` ${chalk_1.default.gray('API :')} ${cfg.apiBaseUrl}`);
|
|
24
|
+
console.log(` ${chalk_1.default.gray('WS :')} ${cfg.wsUrl}`);
|
|
25
|
+
console.log(` ${chalk_1.default.gray('Schema :')} ${cfg.projectSchemaId}`);
|
|
26
|
+
console.log(` ${chalk_1.default.gray('Tools :')} ${cfg.registeredTools.join(', ') || '(none)'}`);
|
|
27
|
+
console.log(` ${chalk_1.default.gray('Expires :')} ${new Date(cfg.expiresAt).toISOString()} ${cfg.expiresAt < Date.now() ? chalk_1.default.red('(EXPIRED — run `redai login`)') : ''}`);
|
|
28
|
+
const { capabilities, cliDetected } = (0, detect_1.detectCapabilities)();
|
|
29
|
+
console.log(` ${chalk_1.default.gray('Caps :')} ${capabilities.join(', ')}`);
|
|
30
|
+
for (const [name, version] of Object.entries(cliDetected)) {
|
|
31
|
+
console.log(` ${chalk_1.default.gray(` ↳ ${name}`)} ${version}`);
|
|
32
|
+
}
|
|
33
|
+
console.log();
|
|
34
|
+
console.log(chalk_1.default.dim('Pinging backend...'));
|
|
35
|
+
try {
|
|
36
|
+
const res = await axios_1.default.get(`${cfg.apiBaseUrl}/cli/auth/me`, {
|
|
37
|
+
headers: { Authorization: `Bearer ${cfg.cliToken}` },
|
|
38
|
+
timeout: 8000,
|
|
39
|
+
});
|
|
40
|
+
console.log(chalk_1.default.green('✓ Token valid.'), chalk_1.default.dim(JSON.stringify(res.data)));
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (axios_1.default.isAxiosError(err) && err.response) {
|
|
44
|
+
console.log(chalk_1.default.red('✗ Token check failed:'), err.response.status, err.response.data);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.log(chalk_1.default.red('✗ Token check failed:'), err instanceof Error ? err.message : err);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const config_1 = require("../config");
|
|
9
|
+
const login_1 = require("./commands/login");
|
|
10
|
+
const logout_1 = require("./commands/logout");
|
|
11
|
+
const oauth_1 = require("./commands/oauth");
|
|
12
|
+
const serve_1 = require("./commands/serve");
|
|
13
|
+
const start_1 = require("./commands/start");
|
|
14
|
+
const status_1 = require("./commands/status");
|
|
15
|
+
function parseArgs(argv) {
|
|
16
|
+
const args = argv.slice(2);
|
|
17
|
+
const command = args[0] ?? 'help';
|
|
18
|
+
const flags = {};
|
|
19
|
+
for (let i = 1; i < args.length; i++) {
|
|
20
|
+
const token = args[i];
|
|
21
|
+
if (!token.startsWith('--'))
|
|
22
|
+
continue;
|
|
23
|
+
const key = token.slice(2);
|
|
24
|
+
const next = args[i + 1];
|
|
25
|
+
if (next && !next.startsWith('--')) {
|
|
26
|
+
flags[key] = next;
|
|
27
|
+
i++;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
flags[key] = true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { command, flags };
|
|
34
|
+
}
|
|
35
|
+
function printHelp() {
|
|
36
|
+
console.log(`${chalk_1.default.cyan('redai')} ${chalk_1.default.dim(`v${config_1.CLI_VERSION}`)}`);
|
|
37
|
+
console.log();
|
|
38
|
+
console.log('Usage:');
|
|
39
|
+
console.log(' redai login [--api-key <key>] [--api-url <url>] Login by pasting your RedAI API key');
|
|
40
|
+
console.log(' redai status Show current login + capabilities');
|
|
41
|
+
console.log(' redai start Connect WS, keep tools online');
|
|
42
|
+
console.log(' redai serve [--port 8317] [--api-key <k>] HTTP server expose /v1/messages /v1/chat/completions /v1beta');
|
|
43
|
+
console.log(' redai logout Remove local RedAI token');
|
|
44
|
+
console.log();
|
|
45
|
+
console.log('LLM proxy (OAuth providers):');
|
|
46
|
+
console.log(' redai oauth claude [--account <name>] Login Claude Code (PKCE)');
|
|
47
|
+
console.log(' redai oauth codex [--account <name>] Sign in with ChatGPT');
|
|
48
|
+
console.log(' redai oauth gemini [--account <name>] Gemini Code Assist (Google)');
|
|
49
|
+
console.log(' redai oauth antigravity [--account <name>] Antigravity (Google)');
|
|
50
|
+
console.log(' redai oauth qwen [--account <name>] Qwen (device flow)');
|
|
51
|
+
console.log(' redai oauth kimi [--account <name>] Kimi (device flow)');
|
|
52
|
+
console.log(' redai oauth iflow [--cookie <c>] iFlow (OAuth or cookie)');
|
|
53
|
+
console.log(' redai oauth xai [--account <name>] xAI Grok (PKCE + OIDC)');
|
|
54
|
+
console.log(' redai oauth list List all OAuth accounts');
|
|
55
|
+
console.log(' redai oauth logout <provider> [<account>] Remove a provider login');
|
|
56
|
+
console.log();
|
|
57
|
+
console.log(' redai help Show this help');
|
|
58
|
+
}
|
|
59
|
+
async function main() {
|
|
60
|
+
const { command, flags } = parseArgs(process.argv);
|
|
61
|
+
try {
|
|
62
|
+
switch (command) {
|
|
63
|
+
case 'login':
|
|
64
|
+
await (0, login_1.loginCommand)({
|
|
65
|
+
apiKey: typeof flags['api-key'] === 'string' ? flags['api-key'] : undefined,
|
|
66
|
+
apiUrl: typeof flags['api-url'] === 'string' ? flags['api-url'] : undefined,
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
case 'logout':
|
|
70
|
+
await (0, logout_1.logoutCommand)();
|
|
71
|
+
return;
|
|
72
|
+
case 'status':
|
|
73
|
+
await (0, status_1.statusCommand)();
|
|
74
|
+
return;
|
|
75
|
+
case 'start':
|
|
76
|
+
await (0, start_1.startCommand)();
|
|
77
|
+
return;
|
|
78
|
+
case 'serve':
|
|
79
|
+
await (0, serve_1.serveCommand)({
|
|
80
|
+
port: typeof flags['port'] === 'string' ? parseInt(flags['port'], 10) : undefined,
|
|
81
|
+
host: typeof flags['host'] === 'string' ? flags['host'] : undefined,
|
|
82
|
+
apiKey: typeof flags['api-key'] === 'string' ? flags['api-key'] : undefined,
|
|
83
|
+
});
|
|
84
|
+
return;
|
|
85
|
+
case 'oauth': {
|
|
86
|
+
const sub = process.argv[3];
|
|
87
|
+
if (!sub) {
|
|
88
|
+
console.error(chalk_1.default.red('Usage: redai oauth <provider> | list | logout <provider> [<account>]'));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
if (sub === 'list') {
|
|
92
|
+
await (0, oauth_1.oauthListCommand)();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (sub === 'logout') {
|
|
96
|
+
const prov = process.argv[4];
|
|
97
|
+
const acc = process.argv[5] ?? 'default';
|
|
98
|
+
if (!prov) {
|
|
99
|
+
console.error(chalk_1.default.red('Usage: redai oauth logout <provider> [<account>]'));
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
await (0, oauth_1.oauthLogoutCommand)(prov, acc);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
await (0, oauth_1.oauthCommand)({
|
|
106
|
+
provider: sub,
|
|
107
|
+
account: typeof flags['account'] === 'string' ? flags['account'] : undefined,
|
|
108
|
+
noBrowser: flags['no-browser'] === true,
|
|
109
|
+
cookie: typeof flags['cookie'] === 'string' ? flags['cookie'] : undefined,
|
|
110
|
+
});
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
case 'help':
|
|
114
|
+
case '--help':
|
|
115
|
+
case '-h':
|
|
116
|
+
default:
|
|
117
|
+
printHelp();
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
console.error(chalk_1.default.red('Error:'), err instanceof Error ? err.message : err);
|
|
123
|
+
process.exitCode = 1;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
void main();
|
|
127
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Capability } from '@redonvn/cli-protocol';
|
|
2
|
+
/**
|
|
3
|
+
* Detect AI-Agent CLI có sẵn trên máy. Trả:
|
|
4
|
+
* - capabilities: tổng hợp gồm 3 nhóm:
|
|
5
|
+
* 1. Tool runtime cơ bản: fs / bash / grep / glob / webfetch (luôn có)
|
|
6
|
+
* 2. Spawn CLI: claude / codex / gemini (có nếu binary cài sẵn)
|
|
7
|
+
* 3. LLM proxy: llm-claude / llm-codex / llm-gemini (có nếu user `redai oauth <provider>`)
|
|
8
|
+
* - cliDetected: { claude:'1.0.5', ... } cho dashboard hiển thị
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectCapabilities(): {
|
|
11
|
+
capabilities: Capability[];
|
|
12
|
+
cliDetected: Record<string, string>;
|
|
13
|
+
};
|