@redonvn/cli 0.1.0 → 0.1.1
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 +12 -1
- package/dist/auth/store.d.ts +3 -0
- package/dist/auth/store.js.map +1 -1
- package/dist/cli/commands/login.d.ts +3 -0
- package/dist/cli/commands/login.js +18 -4
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/status.js +1 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/index.js +7 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config.d.ts +37 -3
- package/dist/config.js +54 -7
- package/dist/config.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -21,10 +21,21 @@ Yêu cầu Node.js ≥ 18.17.
|
|
|
21
21
|
Tạo API key trên dashboard RedAI với permission `cli:connect`, sau đó:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
redai login
|
|
24
|
+
redai login # mặc định DEV (https://v2.redai.vn)
|
|
25
|
+
redai login --env prod # PROD (https://app.redai.vn + wss://socket.redai.vn)
|
|
25
26
|
# Paste API key khi prompt
|
|
26
27
|
```
|
|
27
28
|
|
|
29
|
+
#### Môi trường
|
|
30
|
+
|
|
31
|
+
| Env | API base | WebSocket |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `dev` (default) | `https://v2.redai.vn` | `wss://v2.redai.vn` |
|
|
34
|
+
| `prod` | `https://app.redai.vn` | `wss://socket.redai.vn` |
|
|
35
|
+
|
|
36
|
+
Override ENV: `REDAI_ENV=prod redai login`
|
|
37
|
+
Override URL: `redai login --api-url http://localhost:3000 --ws-url ws://localhost:3000`
|
|
38
|
+
|
|
28
39
|
### 2. (Tuỳ chọn) Đăng nhập OAuth provider để dùng quota của bạn
|
|
29
40
|
|
|
30
41
|
```bash
|
package/dist/auth/store.d.ts
CHANGED
package/dist/auth/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":";;;;;AAyBA,gCAQC;AAED,gCAMC;AAED,kCAIC;AA/CD,4CAAoB;AACpB,sCAA0E;AAkB1E,SAAS,SAAS;IAChB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,yBAAgB,CAAC,EAAE,CAAC;QACrC,YAAE,CAAC,SAAS,CAAC,yBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,0BAAiB,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,0BAAiB,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,GAAmB;IAC5C,SAAS,EAAE,CAAC;IACZ,YAAE,CAAC,aAAa,CAAC,0BAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAChE,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,WAAW;IACzB,IAAI,YAAE,CAAC,UAAU,CAAC,0BAAiB,CAAC,EAAE,CAAC;QACrC,YAAE,CAAC,UAAU,CAAC,0BAAiB,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
|
|
@@ -13,13 +13,15 @@ const client_id_1 = require("../../auth/client-id");
|
|
|
13
13
|
const store_1 = require("../../auth/store");
|
|
14
14
|
const detect_1 = require("../../cli-router/detect");
|
|
15
15
|
async function loginCommand(options = {}) {
|
|
16
|
-
const
|
|
16
|
+
const env = (0, config_1.resolveEnv)(options.env);
|
|
17
|
+
const apiBaseUrl = (0, config_1.resolveApiBaseUrl)({ env, apiUrlOverride: options.apiUrl }).replace(/\/+$/, '');
|
|
18
|
+
const wsFallbackBase = (0, config_1.resolveWsBaseUrl)({ env, wsUrlOverride: options.wsUrl });
|
|
17
19
|
let apiKey = options.apiKey;
|
|
18
20
|
if (!apiKey) {
|
|
19
21
|
const response = await (0, prompts_1.default)({
|
|
20
22
|
type: 'password',
|
|
21
23
|
name: 'apiKey',
|
|
22
|
-
message:
|
|
24
|
+
message: `Paste your RedAI API key for ${chalk_1.default.cyan(env.toUpperCase())} (permission "cli:connect"):`,
|
|
23
25
|
validate: (v) => typeof v === 'string' && v.trim().length >= 8 ? true : 'API key looks too short',
|
|
24
26
|
});
|
|
25
27
|
apiKey = response.apiKey?.trim();
|
|
@@ -30,7 +32,7 @@ async function loginCommand(options = {}) {
|
|
|
30
32
|
}
|
|
31
33
|
const clientId = (0, client_id_1.loadOrCreateClientId)();
|
|
32
34
|
const { capabilities, cliDetected } = (0, detect_1.detectCapabilities)();
|
|
33
|
-
console.log(chalk_1.default.cyan(
|
|
35
|
+
console.log(chalk_1.default.cyan(`→ Verifying API key against ${env.toUpperCase()}:`), apiBaseUrl);
|
|
34
36
|
let result;
|
|
35
37
|
try {
|
|
36
38
|
const res = await axios_1.default.post(`${apiBaseUrl}/cli/auth/verify`, {
|
|
@@ -57,10 +59,15 @@ async function loginCommand(options = {}) {
|
|
|
57
59
|
process.exit(1);
|
|
58
60
|
return;
|
|
59
61
|
}
|
|
62
|
+
// BE thường trả wsUrl đầy đủ. Nếu thiếu (BE version cũ), CLI tự build từ preset.
|
|
63
|
+
const wsUrl = result.wsUrl && result.wsUrl.trim()
|
|
64
|
+
? result.wsUrl
|
|
65
|
+
: `${wsFallbackBase}/redai-cli`;
|
|
60
66
|
(0, store_1.saveConfig)({
|
|
67
|
+
env,
|
|
61
68
|
cliToken: result.cliToken,
|
|
62
69
|
clientId: result.clientId,
|
|
63
|
-
wsUrl
|
|
70
|
+
wsUrl,
|
|
64
71
|
apiBaseUrl,
|
|
65
72
|
userId: result.user.id,
|
|
66
73
|
userEmail: result.user.email,
|
|
@@ -71,6 +78,9 @@ async function loginCommand(options = {}) {
|
|
|
71
78
|
});
|
|
72
79
|
console.log();
|
|
73
80
|
console.log(chalk_1.default.green('✓ Logged in.'));
|
|
81
|
+
console.log(` ${chalk_1.default.gray('Env :')} ${env.toUpperCase()}`);
|
|
82
|
+
console.log(` ${chalk_1.default.gray('API :')} ${apiBaseUrl}`);
|
|
83
|
+
console.log(` ${chalk_1.default.gray('WS :')} ${wsUrl}`);
|
|
74
84
|
console.log(` ${chalk_1.default.gray('User :')} ${result.user.name ?? result.user.email ?? result.user.id}`);
|
|
75
85
|
console.log(` ${chalk_1.default.gray('Client ID :')} ${result.clientId}`);
|
|
76
86
|
console.log(` ${chalk_1.default.gray('Schema :')} ${result.projectSchemaId}`);
|
|
@@ -78,5 +88,9 @@ async function loginCommand(options = {}) {
|
|
|
78
88
|
console.log(` ${chalk_1.default.gray('Expires :')} ${new Date(result.expiresAt).toISOString()}`);
|
|
79
89
|
console.log();
|
|
80
90
|
console.log(chalk_1.default.dim('Next: run `redai start` to keep this machine connected.'));
|
|
91
|
+
// Hint nếu user chọn dev/prod khác mặc định
|
|
92
|
+
if (env === 'prod') {
|
|
93
|
+
console.log(chalk_1.default.dim(`Tip: PROD preset = ${config_1.REDAI_ENV_PRESETS.prod.apiBaseUrl} + ${config_1.REDAI_ENV_PRESETS.prod.wsBaseUrl}`));
|
|
94
|
+
}
|
|
81
95
|
}
|
|
82
96
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":";;;;;AAiCA,oCAgGC;AAjID,kDAA0B;AAC1B,kDAA0B;AAC1B,4CAAoB;AACpB,sDAA8B;AAC9B,yCAMsB;AACtB,oDAA4D;AAC5D,4CAA8C;AAC9C,oDAA6D;AAoBtD,KAAK,UAAU,YAAY,CAAC,UAAwB,EAAE;IAC3D,MAAM,GAAG,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,IAAA,0BAAiB,EAAC,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,IAAA,yBAAgB,EAAC,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE/E,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC7B,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gCAAgC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,8BAA8B;YACpG,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB;SACnF,CAAC,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,gCAAoB,GAAE,CAAC;IACxC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAA,2BAAkB,GAAE,CAAC;IAE3D,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,EAC/D,UAAU,CACX,CAAC;IAEF,IAAI,MAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAC1B,GAAG,UAAU,kBAAkB,EAC/B;YACE,MAAM;YACN,QAAQ;YACR,QAAQ,EAAE,YAAE,CAAC,QAAQ,EAAE;YACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,oBAAW;YACvB,YAAY;YACZ,WAAW;SACZ,EACD;YACE,OAAO,EAAE,KAAM;YACf,OAAO,EAAE,EAAE,YAAY,EAAE,aAAa,oBAAW,EAAE,EAAE;SACtD,CACF,CAAC;QACF,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,eAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,iFAAiF;IACjF,MAAM,KAAK,GACT,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QACjC,CAAC,CAAC,MAAM,CAAC,KAAK;QACd,CAAC,CAAC,GAAG,cAAc,YAAY,CAAC;IAEpC,IAAA,kBAAU,EAAC;QACT,GAAG;QACH,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK;QACL,UAAU;QACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;QAC5B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;QAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;IAElF,4CAA4C;IAC5C,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,0BAAiB,CAAC,IAAI,CAAC,UAAU,MAAM,0BAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1H,CAAC;AACH,CAAC"}
|
|
@@ -18,6 +18,7 @@ async function statusCommand() {
|
|
|
18
18
|
}
|
|
19
19
|
console.log(chalk_1.default.cyan('RedAI CLI'), chalk_1.default.dim(`v${config_1.CLI_VERSION}`));
|
|
20
20
|
console.log();
|
|
21
|
+
console.log(` ${chalk_1.default.gray('Env :')} ${(cfg.env ?? 'dev').toUpperCase()}`);
|
|
21
22
|
console.log(` ${chalk_1.default.gray('User :')} ${cfg.userName ?? cfg.userEmail ?? cfg.userId}`);
|
|
22
23
|
console.log(` ${chalk_1.default.gray('Client ID :')} ${cfg.clientId}`);
|
|
23
24
|
console.log(` ${chalk_1.default.gray('API :')} ${cfg.apiBaseUrl}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":";;;;;AAMA,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -36,12 +36,16 @@ function printHelp() {
|
|
|
36
36
|
console.log(`${chalk_1.default.cyan('redai')} ${chalk_1.default.dim(`v${config_1.CLI_VERSION}`)}`);
|
|
37
37
|
console.log();
|
|
38
38
|
console.log('Usage:');
|
|
39
|
-
console.log(' redai login [--api-key <
|
|
39
|
+
console.log(' redai login [--env dev|prod] [--api-key <k>] [--api-url <url>] Login RedAI');
|
|
40
40
|
console.log(' redai status Show current login + capabilities');
|
|
41
41
|
console.log(' redai start Connect WS, keep tools online');
|
|
42
42
|
console.log(' redai serve [--port 8317] [--api-key <k>] HTTP server expose /v1/messages /v1/chat/completions /v1beta');
|
|
43
43
|
console.log(' redai logout Remove local RedAI token');
|
|
44
44
|
console.log();
|
|
45
|
+
console.log('Environments (preset via --env or REDAI_ENV):');
|
|
46
|
+
console.log(' dev → https://v2.redai.vn + wss://v2.redai.vn (default)');
|
|
47
|
+
console.log(' prod → https://app.redai.vn + wss://socket.redai.vn');
|
|
48
|
+
console.log();
|
|
45
49
|
console.log('LLM proxy (OAuth providers):');
|
|
46
50
|
console.log(' redai oauth claude [--account <name>] Login Claude Code (PKCE)');
|
|
47
51
|
console.log(' redai oauth codex [--account <name>] Sign in with ChatGPT');
|
|
@@ -62,8 +66,10 @@ async function main() {
|
|
|
62
66
|
switch (command) {
|
|
63
67
|
case 'login':
|
|
64
68
|
await (0, login_1.loginCommand)({
|
|
69
|
+
env: typeof flags['env'] === 'string' ? flags['env'] : undefined,
|
|
65
70
|
apiKey: typeof flags['api-key'] === 'string' ? flags['api-key'] : undefined,
|
|
66
71
|
apiUrl: typeof flags['api-url'] === 'string' ? flags['api-url'] : undefined,
|
|
72
|
+
wsUrl: typeof flags['ws-url'] === 'string' ? flags['ws-url'] : undefined,
|
|
67
73
|
});
|
|
68
74
|
return;
|
|
69
75
|
case 'logout':
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAC1B,sCAAwC;AACxC,4CAAgD;AAChD,8CAAkD;AAClD,4CAI0B;AAC1B,4CAAgD;AAChD,4CAAgD;AAChD,8CAAkD;AAOlD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAClC,MAAM,KAAK,GAAqC,EAAE,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAClB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,IAAI,oBAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -4,9 +4,43 @@ export declare const REDAI_CONFIG_DIR: string;
|
|
|
4
4
|
export declare const REDAI_CONFIG_FILE: string;
|
|
5
5
|
export declare const REDAI_CLIENT_ID_FILE: string;
|
|
6
6
|
export declare const REDAI_LOG_FILE: string;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Environment presets — chọn bằng `--env` flag hoặc `REDAI_ENV`.
|
|
9
|
+
* PROD có WS host tách riêng socket.redai.vn (khác API host).
|
|
10
|
+
*/
|
|
11
|
+
export type RedaiEnv = 'dev' | 'prod';
|
|
12
|
+
export interface RedaiEnvConfig {
|
|
13
|
+
apiBaseUrl: string;
|
|
14
|
+
wsBaseUrl: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const REDAI_ENV_PRESETS: Record<RedaiEnv, RedaiEnvConfig>;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve môi trường theo độ ưu tiên:
|
|
19
|
+
* 1. arg flag `--env dev|prod` (caller truyền vào)
|
|
20
|
+
* 2. ENV var REDAI_ENV
|
|
21
|
+
* 3. Default = 'dev' (an toàn cho dev đầu tiên)
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveEnv(envFlag?: string): RedaiEnv;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve API base URL theo độ ưu tiên:
|
|
26
|
+
* 1. `--api-url` flag (caller truyền)
|
|
27
|
+
* 2. ENV `REDAI_API_URL`
|
|
28
|
+
* 3. Preset theo env (dev/prod)
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveApiBaseUrl(opts: {
|
|
31
|
+
env: RedaiEnv;
|
|
32
|
+
apiUrlOverride?: string;
|
|
33
|
+
}): string;
|
|
34
|
+
/**
|
|
35
|
+
* Resolve WebSocket base URL — backend trả về sau khi verify, đây chỉ là fallback.
|
|
36
|
+
* 1. `--ws-url` flag
|
|
37
|
+
* 2. ENV `REDAI_WS_URL`
|
|
38
|
+
* 3. Preset theo env (dev/prod)
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveWsBaseUrl(opts: {
|
|
41
|
+
env: RedaiEnv;
|
|
42
|
+
wsUrlOverride?: string;
|
|
43
|
+
}): string;
|
|
10
44
|
export declare const HEARTBEAT_INTERVAL_MS = 25000;
|
|
11
45
|
export declare const RECONNECT_BASE_DELAY_MS = 2000;
|
|
12
46
|
export declare const RECONNECT_MAX_DELAY_MS = 30000;
|
package/dist/config.js
CHANGED
|
@@ -3,7 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.RECONNECT_MAX_DELAY_MS = exports.RECONNECT_BASE_DELAY_MS = exports.HEARTBEAT_INTERVAL_MS = exports.
|
|
6
|
+
exports.RECONNECT_MAX_DELAY_MS = exports.RECONNECT_BASE_DELAY_MS = exports.HEARTBEAT_INTERVAL_MS = exports.REDAI_ENV_PRESETS = exports.REDAI_LOG_FILE = exports.REDAI_CLIENT_ID_FILE = exports.REDAI_CONFIG_FILE = exports.REDAI_CONFIG_DIR = exports.CLI_VERSION = exports.CLI_PACKAGE_NAME = void 0;
|
|
7
|
+
exports.resolveEnv = resolveEnv;
|
|
8
|
+
exports.resolveApiBaseUrl = resolveApiBaseUrl;
|
|
9
|
+
exports.resolveWsBaseUrl = resolveWsBaseUrl;
|
|
7
10
|
const os_1 = __importDefault(require("os"));
|
|
8
11
|
const path_1 = __importDefault(require("path"));
|
|
9
12
|
exports.CLI_PACKAGE_NAME = '@redonvn/cli';
|
|
@@ -12,12 +15,56 @@ exports.REDAI_CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.redai')
|
|
|
12
15
|
exports.REDAI_CONFIG_FILE = path_1.default.join(exports.REDAI_CONFIG_DIR, 'config.json');
|
|
13
16
|
exports.REDAI_CLIENT_ID_FILE = path_1.default.join(exports.REDAI_CONFIG_DIR, 'client.id');
|
|
14
17
|
exports.REDAI_LOG_FILE = path_1.default.join(exports.REDAI_CONFIG_DIR, 'daemon.log');
|
|
15
|
-
exports.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
exports.REDAI_ENV_PRESETS = {
|
|
19
|
+
dev: {
|
|
20
|
+
apiBaseUrl: 'https://v2.redai.vn',
|
|
21
|
+
wsBaseUrl: 'wss://v2.redai.vn',
|
|
22
|
+
},
|
|
23
|
+
prod: {
|
|
24
|
+
apiBaseUrl: 'https://app.redai.vn',
|
|
25
|
+
wsBaseUrl: 'wss://socket.redai.vn',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Resolve môi trường theo độ ưu tiên:
|
|
30
|
+
* 1. arg flag `--env dev|prod` (caller truyền vào)
|
|
31
|
+
* 2. ENV var REDAI_ENV
|
|
32
|
+
* 3. Default = 'dev' (an toàn cho dev đầu tiên)
|
|
33
|
+
*/
|
|
34
|
+
function resolveEnv(envFlag) {
|
|
35
|
+
const v = (envFlag || process.env.REDAI_ENV || '').toLowerCase().trim();
|
|
36
|
+
if (v === 'prod' || v === 'production')
|
|
37
|
+
return 'prod';
|
|
38
|
+
if (v === 'dev' || v === 'development')
|
|
39
|
+
return 'dev';
|
|
40
|
+
return 'dev';
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve API base URL theo độ ưu tiên:
|
|
44
|
+
* 1. `--api-url` flag (caller truyền)
|
|
45
|
+
* 2. ENV `REDAI_API_URL`
|
|
46
|
+
* 3. Preset theo env (dev/prod)
|
|
47
|
+
*/
|
|
48
|
+
function resolveApiBaseUrl(opts) {
|
|
49
|
+
if (opts.apiUrlOverride && opts.apiUrlOverride.trim())
|
|
50
|
+
return opts.apiUrlOverride.trim();
|
|
51
|
+
if (process.env.REDAI_API_URL)
|
|
52
|
+
return process.env.REDAI_API_URL;
|
|
53
|
+
return exports.REDAI_ENV_PRESETS[opts.env].apiBaseUrl;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve WebSocket base URL — backend trả về sau khi verify, đây chỉ là fallback.
|
|
57
|
+
* 1. `--ws-url` flag
|
|
58
|
+
* 2. ENV `REDAI_WS_URL`
|
|
59
|
+
* 3. Preset theo env (dev/prod)
|
|
60
|
+
*/
|
|
61
|
+
function resolveWsBaseUrl(opts) {
|
|
62
|
+
if (opts.wsUrlOverride && opts.wsUrlOverride.trim())
|
|
63
|
+
return opts.wsUrlOverride.trim();
|
|
64
|
+
if (process.env.REDAI_WS_URL)
|
|
65
|
+
return process.env.REDAI_WS_URL;
|
|
66
|
+
return exports.REDAI_ENV_PRESETS[opts.env].wsBaseUrl;
|
|
67
|
+
}
|
|
21
68
|
exports.HEARTBEAT_INTERVAL_MS = 25000;
|
|
22
69
|
exports.RECONNECT_BASE_DELAY_MS = 2000;
|
|
23
70
|
exports.RECONNECT_MAX_DELAY_MS = 30000;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAuCA,gCAKC;AAQD,8CAIC;AAQD,4CAIC;AApED,4CAAoB;AACpB,gDAAwB;AAEX,QAAA,gBAAgB,GAAG,cAAc,CAAC;AAClC,QAAA,WAAW,GAAG,OAAO,CAAC;AAEtB,QAAA,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACrD,QAAA,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,wBAAgB,EAAE,aAAa,CAAC,CAAC;AAC/D,QAAA,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,wBAAgB,EAAE,WAAW,CAAC,CAAC;AAChE,QAAA,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,wBAAgB,EAAE,YAAY,CAAC,CAAC;AAa3D,QAAA,iBAAiB,GAAqC;IACjE,GAAG,EAAE;QACH,UAAU,EAAE,qBAAqB;QACjC,SAAS,EAAE,mBAAmB;KAC/B;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,sBAAsB;QAClC,SAAS,EAAE,uBAAuB;KACnC;CACF,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,OAAgB;IACzC,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC;IACtD,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,IAAgD;IAChF,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACzF,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAChE,OAAO,yBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,IAA+C;IAC9E,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACtF,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9D,OAAO,yBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAEY,QAAA,qBAAqB,GAAG,KAAM,CAAC;AAC/B,QAAA,uBAAuB,GAAG,IAAK,CAAC;AAChC,QAAA,sBAAsB,GAAG,KAAM,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redonvn/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "RedAI CLI — kết nối máy bạn với RedAI agent runtime. AI cloud agent có thể run tools (Read/Write/Edit/Bash/Grep/Glob/WebFetch), spawn code-CLI (Claude/Codex/Gemini), và proxy LLM request qua OAuth của bạn (Claude Code / ChatGPT / Gemini / Antigravity / Qwen / Kimi / iFlow / xAI).",
|
|
5
5
|
"bin": {
|
|
6
6
|
"redai": "./bin/redai.js"
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"homepage": "https://github.com/redonvn/redai-cli#readme",
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@redonvn/cli-protocol": "^0.1.
|
|
47
|
+
"@redonvn/cli-protocol": "^0.1.1",
|
|
48
48
|
"@vscode/ripgrep": "^1.15.9",
|
|
49
49
|
"axios": "^1.7.7",
|
|
50
50
|
"chalk": "^4.1.2",
|
|
@@ -64,4 +64,4 @@
|
|
|
64
64
|
"publishConfig": {
|
|
65
65
|
"access": "public"
|
|
66
66
|
}
|
|
67
|
-
}
|
|
67
|
+
}
|