@redonvn/cli 0.1.0 → 0.1.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 +24 -1
- package/dist/auth/store.d.ts +3 -0
- package/dist/auth/store.js.map +1 -1
- package/dist/build-info.d.ts +4 -0
- package/dist/build-info.js +10 -0
- package/dist/build-info.js.map +1 -0
- 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 +40 -3
- package/dist/config.js +57 -7
- package/dist/config.js.map +1 -1
- package/package.json +17 -4
package/README.md
CHANGED
|
@@ -21,10 +21,33 @@ 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 = env baked vào build (xem dưới)
|
|
25
|
+
redai login --env prod # Force PROD
|
|
26
|
+
redai login --env dev # Force DEV
|
|
25
27
|
# Paste API key khi prompt
|
|
26
28
|
```
|
|
27
29
|
|
|
30
|
+
#### Môi trường
|
|
31
|
+
|
|
32
|
+
| Env | API base | WebSocket |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `dev` | `https://v2.redai.vn` | `wss://v2.redai.vn` |
|
|
35
|
+
| `prod` | `https://app.redai.vn` | `wss://socket.redai.vn` |
|
|
36
|
+
|
|
37
|
+
**Mặc định khi cài:**
|
|
38
|
+
|
|
39
|
+
| Bản | Default env | Lệnh cài |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `latest` (prod release) | **prod** | `npm i -g @redonvn/cli` |
|
|
42
|
+
| `dev` tag | **dev** | `npm i -g @redonvn/cli@dev` |
|
|
43
|
+
|
|
44
|
+
→ User chỉ cần `redai login`, không cần truyền `--env`. Cần switch tạm: dùng `--env dev` hoặc `REDAI_ENV=dev`.
|
|
45
|
+
|
|
46
|
+
Override URL custom (cho dev backend local):
|
|
47
|
+
```bash
|
|
48
|
+
redai login --api-url http://localhost:3000 --ws-url ws://localhost:3000
|
|
49
|
+
```
|
|
50
|
+
|
|
28
51
|
### 2. (Tuỳ chọn) Đăng nhập OAuth provider để dùng quota của bạn
|
|
29
52
|
|
|
30
53
|
```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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// AUTO-GENERATED by scripts/write-build-info.cjs — DO NOT EDIT.
|
|
3
|
+
// Regenerated every build. Run `npm run build:prod` or `npm run build:dev` to switch.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.BUILD_TIME = exports.BUILD_ENV = void 0;
|
|
6
|
+
/** Env baked at build time. Runtime flag `--env` / `REDAI_ENV` vẫn override được. */
|
|
7
|
+
exports.BUILD_ENV = 'dev';
|
|
8
|
+
/** ISO timestamp lúc build (informational). */
|
|
9
|
+
exports.BUILD_TIME = '2026-05-18T04:35:20.866Z';
|
|
10
|
+
//# sourceMappingURL=build-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-info.js","sourceRoot":"","sources":["../src/build-info.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sFAAsF;;;AAEtF,qFAAqF;AACxE,QAAA,SAAS,GAAmB,KAAK,CAAC;AAE/C,+CAA+C;AAClC,QAAA,UAAU,GAAG,0BAA0B,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":"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"}
|
|
@@ -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
|
@@ -1,12 +1,49 @@
|
|
|
1
|
+
import { BUILD_ENV, BUILD_TIME } from './build-info';
|
|
1
2
|
export declare const CLI_PACKAGE_NAME = "@redonvn/cli";
|
|
2
3
|
export declare const CLI_VERSION = "0.1.0";
|
|
4
|
+
/** Re-export build metadata cho status command. */
|
|
5
|
+
export { BUILD_ENV, BUILD_TIME };
|
|
3
6
|
export declare const REDAI_CONFIG_DIR: string;
|
|
4
7
|
export declare const REDAI_CONFIG_FILE: string;
|
|
5
8
|
export declare const REDAI_CLIENT_ID_FILE: string;
|
|
6
9
|
export declare const REDAI_LOG_FILE: string;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Environment presets — chọn bằng `--env` flag hoặc `REDAI_ENV`.
|
|
12
|
+
* PROD có WS host tách riêng socket.redai.vn (khác API host).
|
|
13
|
+
*/
|
|
14
|
+
export type RedaiEnv = 'dev' | 'prod';
|
|
15
|
+
export interface RedaiEnvConfig {
|
|
16
|
+
apiBaseUrl: string;
|
|
17
|
+
wsBaseUrl: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const REDAI_ENV_PRESETS: Record<RedaiEnv, RedaiEnvConfig>;
|
|
20
|
+
/**
|
|
21
|
+
* Resolve môi trường theo độ ưu tiên:
|
|
22
|
+
* 1. arg flag `--env dev|prod` (caller truyền vào)
|
|
23
|
+
* 2. ENV var REDAI_ENV
|
|
24
|
+
* 3. BUILD_ENV — bake vào lúc build (`npm run build:prod` set 'prod', mặc định 'dev')
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveEnv(envFlag?: string): RedaiEnv;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve API base URL theo độ ưu tiên:
|
|
29
|
+
* 1. `--api-url` flag (caller truyền)
|
|
30
|
+
* 2. ENV `REDAI_API_URL`
|
|
31
|
+
* 3. Preset theo env (dev/prod)
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveApiBaseUrl(opts: {
|
|
34
|
+
env: RedaiEnv;
|
|
35
|
+
apiUrlOverride?: string;
|
|
36
|
+
}): string;
|
|
37
|
+
/**
|
|
38
|
+
* Resolve WebSocket base URL — backend trả về sau khi verify, đây chỉ là fallback.
|
|
39
|
+
* 1. `--ws-url` flag
|
|
40
|
+
* 2. ENV `REDAI_WS_URL`
|
|
41
|
+
* 3. Preset theo env (dev/prod)
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveWsBaseUrl(opts: {
|
|
44
|
+
env: RedaiEnv;
|
|
45
|
+
wsUrlOverride?: string;
|
|
46
|
+
}): string;
|
|
10
47
|
export declare const HEARTBEAT_INTERVAL_MS = 25000;
|
|
11
48
|
export declare const RECONNECT_BASE_DELAY_MS = 2000;
|
|
12
49
|
export declare const RECONNECT_MAX_DELAY_MS = 30000;
|
package/dist/config.js
CHANGED
|
@@ -3,21 +3,71 @@ 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.BUILD_TIME = exports.BUILD_ENV = 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"));
|
|
12
|
+
const build_info_1 = require("./build-info");
|
|
13
|
+
Object.defineProperty(exports, "BUILD_ENV", { enumerable: true, get: function () { return build_info_1.BUILD_ENV; } });
|
|
14
|
+
Object.defineProperty(exports, "BUILD_TIME", { enumerable: true, get: function () { return build_info_1.BUILD_TIME; } });
|
|
9
15
|
exports.CLI_PACKAGE_NAME = '@redonvn/cli';
|
|
10
16
|
exports.CLI_VERSION = '0.1.0';
|
|
11
17
|
exports.REDAI_CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.redai');
|
|
12
18
|
exports.REDAI_CONFIG_FILE = path_1.default.join(exports.REDAI_CONFIG_DIR, 'config.json');
|
|
13
19
|
exports.REDAI_CLIENT_ID_FILE = path_1.default.join(exports.REDAI_CONFIG_DIR, 'client.id');
|
|
14
20
|
exports.REDAI_LOG_FILE = path_1.default.join(exports.REDAI_CONFIG_DIR, 'daemon.log');
|
|
15
|
-
exports.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
exports.REDAI_ENV_PRESETS = {
|
|
22
|
+
dev: {
|
|
23
|
+
apiBaseUrl: 'https://v2.redai.vn',
|
|
24
|
+
wsBaseUrl: 'wss://v2.redai.vn',
|
|
25
|
+
},
|
|
26
|
+
prod: {
|
|
27
|
+
apiBaseUrl: 'https://app.redai.vn',
|
|
28
|
+
wsBaseUrl: 'wss://socket.redai.vn',
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Resolve môi trường theo độ ưu tiên:
|
|
33
|
+
* 1. arg flag `--env dev|prod` (caller truyền vào)
|
|
34
|
+
* 2. ENV var REDAI_ENV
|
|
35
|
+
* 3. BUILD_ENV — bake vào lúc build (`npm run build:prod` set 'prod', mặc định 'dev')
|
|
36
|
+
*/
|
|
37
|
+
function resolveEnv(envFlag) {
|
|
38
|
+
const v = (envFlag || process.env.REDAI_ENV || '').toLowerCase().trim();
|
|
39
|
+
if (v === 'prod' || v === 'production')
|
|
40
|
+
return 'prod';
|
|
41
|
+
if (v === 'dev' || v === 'development')
|
|
42
|
+
return 'dev';
|
|
43
|
+
return build_info_1.BUILD_ENV;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve API base URL theo độ ưu tiên:
|
|
47
|
+
* 1. `--api-url` flag (caller truyền)
|
|
48
|
+
* 2. ENV `REDAI_API_URL`
|
|
49
|
+
* 3. Preset theo env (dev/prod)
|
|
50
|
+
*/
|
|
51
|
+
function resolveApiBaseUrl(opts) {
|
|
52
|
+
if (opts.apiUrlOverride && opts.apiUrlOverride.trim())
|
|
53
|
+
return opts.apiUrlOverride.trim();
|
|
54
|
+
if (process.env.REDAI_API_URL)
|
|
55
|
+
return process.env.REDAI_API_URL;
|
|
56
|
+
return exports.REDAI_ENV_PRESETS[opts.env].apiBaseUrl;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Resolve WebSocket base URL — backend trả về sau khi verify, đây chỉ là fallback.
|
|
60
|
+
* 1. `--ws-url` flag
|
|
61
|
+
* 2. ENV `REDAI_WS_URL`
|
|
62
|
+
* 3. Preset theo env (dev/prod)
|
|
63
|
+
*/
|
|
64
|
+
function resolveWsBaseUrl(opts) {
|
|
65
|
+
if (opts.wsUrlOverride && opts.wsUrlOverride.trim())
|
|
66
|
+
return opts.wsUrlOverride.trim();
|
|
67
|
+
if (process.env.REDAI_WS_URL)
|
|
68
|
+
return process.env.REDAI_WS_URL;
|
|
69
|
+
return exports.REDAI_ENV_PRESETS[opts.env].wsBaseUrl;
|
|
70
|
+
}
|
|
21
71
|
exports.HEARTBEAT_INTERVAL_MS = 25000;
|
|
22
72
|
exports.RECONNECT_BASE_DELAY_MS = 2000;
|
|
23
73
|
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":";;;;;;AA2CA,gCAKC;AAQD,8CAIC;AAQD,4CAIC;AAxED,4CAAoB;AACpB,gDAAwB;AACxB,6CAAqD;AAM5C,0FANA,sBAAS,OAMA;AAAE,2FANA,uBAAU,OAMA;AAJjB,QAAA,gBAAgB,GAAG,cAAc,CAAC;AAClC,QAAA,WAAW,GAAG,OAAO,CAAC;AAKtB,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,sBAAS,CAAC;AACnB,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.2",
|
|
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"
|
|
@@ -16,11 +16,23 @@
|
|
|
16
16
|
"node": ">=18.17.0"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
|
+
"prebuild": "node scripts/write-build-info.cjs",
|
|
19
20
|
"build": "tsc -p tsconfig.json",
|
|
21
|
+
"build:dev": "cross-env BUILD_ENV=dev npm run -s clean && cross-env BUILD_ENV=dev node scripts/write-build-info.cjs && tsc -p tsconfig.json",
|
|
22
|
+
"build:prod": "cross-env BUILD_ENV=prod npm run -s clean && cross-env BUILD_ENV=prod node scripts/write-build-info.cjs && tsc -p tsconfig.json",
|
|
23
|
+
"build:watch": "tsc -p tsconfig.json --watch",
|
|
20
24
|
"dev": "ts-node --transpile-only src/cli/index.ts",
|
|
25
|
+
"dev:login": "ts-node --transpile-only src/cli/index.ts login --env dev",
|
|
26
|
+
"dev:start": "ts-node --transpile-only src/cli/index.ts start",
|
|
27
|
+
"dev:serve": "ts-node --transpile-only src/cli/index.ts serve --port 8317",
|
|
28
|
+
"prod:login": "node ./bin/redai.js login --env prod",
|
|
29
|
+
"prod:start": "node ./bin/redai.js start",
|
|
30
|
+
"prod:serve": "node ./bin/redai.js serve --port 8317",
|
|
21
31
|
"start": "node ./bin/redai.js",
|
|
22
32
|
"clean": "rimraf dist",
|
|
23
|
-
"
|
|
33
|
+
"publish:dev": "npm run build:dev && cross-env SKIP_PREPUBLISH_GUARD=1 npm publish --access public --tag dev",
|
|
34
|
+
"publish:prod": "npm run build:prod && cross-env SKIP_PREPUBLISH_GUARD=1 npm publish --access public",
|
|
35
|
+
"prepublishOnly": "node -e \"if(!process.env.SKIP_PREPUBLISH_GUARD){console.error('\\nUse `npm run publish:prod` or `npm run publish:dev` to ensure correct BUILD_ENV is baked.\\nIf you really want to publish directly, set SKIP_PREPUBLISH_GUARD=1.\\n');process.exit(1)}\""
|
|
24
36
|
},
|
|
25
37
|
"keywords": [
|
|
26
38
|
"redai",
|
|
@@ -44,7 +56,7 @@
|
|
|
44
56
|
},
|
|
45
57
|
"homepage": "https://github.com/redonvn/redai-cli#readme",
|
|
46
58
|
"dependencies": {
|
|
47
|
-
"@redonvn/cli-protocol": "^0.1.
|
|
59
|
+
"@redonvn/cli-protocol": "^0.1.2",
|
|
48
60
|
"@vscode/ripgrep": "^1.15.9",
|
|
49
61
|
"axios": "^1.7.7",
|
|
50
62
|
"chalk": "^4.1.2",
|
|
@@ -57,6 +69,7 @@
|
|
|
57
69
|
"devDependencies": {
|
|
58
70
|
"@types/node": "^20.14.0",
|
|
59
71
|
"@types/prompts": "^2.4.9",
|
|
72
|
+
"cross-env": "^7.0.3",
|
|
60
73
|
"rimraf": "^5.0.5",
|
|
61
74
|
"ts-node": "^10.9.2",
|
|
62
75
|
"typescript": "^5.5.4"
|
|
@@ -64,4 +77,4 @@
|
|
|
64
77
|
"publishConfig": {
|
|
65
78
|
"access": "public"
|
|
66
79
|
}
|
|
67
|
-
}
|
|
80
|
+
}
|