aws-runtime-bridge 1.9.74 → 1.9.77
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 +4 -4
- package/dist/services/cli-commands.d.ts +10 -0
- package/dist/services/cli-commands.d.ts.map +1 -1
- package/dist/services/cli-commands.js +402 -23
- package/dist/services/startup-config-wizard.d.ts +25 -0
- package/dist/services/startup-config-wizard.d.ts.map +1 -1
- package/dist/services/startup-config-wizard.js +76 -0
- package/dist/utils/yaml-utils.js +2 -2
- package/package/aws-client-agent-mcp/dist/types.d.ts +1 -1
- package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -31,12 +31,12 @@ npm install -g .
|
|
|
31
31
|
|
|
32
32
|
```json
|
|
33
33
|
{
|
|
34
|
-
"connectionKey": "
|
|
34
|
+
"connectionKey": "awsb_xxxxxxxxxxxxxxxxxxxxxxxx",
|
|
35
35
|
"autoRegisterTargets": [
|
|
36
36
|
{
|
|
37
|
-
"serverUrl": "http://
|
|
38
|
-
"instanceName": "
|
|
39
|
-
"userKey": "
|
|
37
|
+
"serverUrl": "http://203.0.113.10:8080",
|
|
38
|
+
"instanceName": "my-instance",
|
|
39
|
+
"userKey": "aws_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
40
40
|
"registerAddr": "127.0.0.1"
|
|
41
41
|
}
|
|
42
42
|
]
|
|
@@ -14,9 +14,19 @@ export interface CliCommandOptions {
|
|
|
14
14
|
stderr?: (message: string) => void;
|
|
15
15
|
runCommand?: (command: string, args: string[]) => CommandRunResult;
|
|
16
16
|
configure?: () => Promise<StartupConfigWizardResult>;
|
|
17
|
+
/** awsb config example:打印最小配置示例并把占位符模板写入配置文件。 */
|
|
18
|
+
configureExample?: () => Promise<StartupConfigWizardResult>;
|
|
17
19
|
platform?: NodeJS.Platform;
|
|
18
20
|
serviceUnitPath?: string;
|
|
19
21
|
executablePath?: string;
|
|
22
|
+
/** Windows 服务日志文件路径(默认 ProgramData 下的 awsb-service.log),供 install 重定向与 log 读取。 */
|
|
23
|
+
windowsServiceLogPath?: string;
|
|
24
|
+
/** 检测正在运行的 bridge 进程 PID 列表(默认按平台用 pgrep / powershell)。 */
|
|
25
|
+
findRunningBridgeProcesses?: (platform: NodeJS.Platform) => number[];
|
|
26
|
+
/** 关闭指定 PID 的进程(默认按平台用 kill -9 / taskkill)。 */
|
|
27
|
+
killBridgeProcess?: (pid: number, platform: NodeJS.Platform) => void;
|
|
28
|
+
/** 交互式询问,返回用户输入(默认从 stdin 读取一行)。 */
|
|
29
|
+
prompt?: (question: string) => Promise<string>;
|
|
20
30
|
}
|
|
21
31
|
export declare function readPackageVersion(packageRoot?: string): string;
|
|
22
32
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-commands.d.ts","sourceRoot":"","sources":["../../src/services/cli-commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-commands.d.ts","sourceRoot":"","sources":["../../src/services/cli-commands.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAqB5E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,gBAAgB,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACrD,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;IACrE,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IACrE,oCAAoC;IACpC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAChD;AAYD,wBAAgB,kBAAkB,CAAC,WAAW,SAA0B,GAAG,MAAM,CAMhF;AAgCD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAsBvE;AAkuBD,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA8C3B"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { createInterface } from "node:readline/promises";
|
|
2
3
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
4
|
import path from "node:path";
|
|
4
5
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { configureStartupConfig } from "./startup-config-wizard.js";
|
|
6
|
+
import { configureStartupConfig, printConfigExampleCommand, } from "./startup-config-wizard.js";
|
|
6
7
|
const SYSTEMD_SERVICE_NAME = "awsb.service";
|
|
7
8
|
const DEFAULT_SYSTEMD_UNIT_PATH = `/etc/systemd/system/${SYSTEMD_SERVICE_NAME}`;
|
|
9
|
+
const WINDOWS_SERVICE_NAME = "awsb";
|
|
10
|
+
// Windows 服务日志:install 时用 nssm 的 AppStdout/AppStderr 把 node 输出重定向到此文件,
|
|
11
|
+
// `awsb log` 再读取它。路径放在 ProgramData 下,保证安装用户与服务运行账户(LocalSystem)都能访问。
|
|
12
|
+
const WINDOWS_SERVICE_LOG_DIR = path.join(process.env.ProgramData || "C:\\ProgramData", "aws-runtime-bridge", "logs");
|
|
13
|
+
const WINDOWS_SERVICE_LOG_PATH = path.join(WINDOWS_SERVICE_LOG_DIR, "awsb-service.log");
|
|
8
14
|
function getDefaultPackageRoot() {
|
|
9
15
|
const currentFile = fileURLToPath(import.meta.url);
|
|
10
16
|
return path.resolve(path.dirname(currentFile), "..", "..");
|
|
@@ -83,7 +89,7 @@ function ensureLinuxSystemd(platform, stderr) {
|
|
|
83
89
|
return false;
|
|
84
90
|
}
|
|
85
91
|
function printServiceUsage(stdout) {
|
|
86
|
-
stdout("Usage: awsb service <install|uninstall>");
|
|
92
|
+
stdout("Usage: awsb service <install|uninstall|start|stop|restart>");
|
|
87
93
|
}
|
|
88
94
|
/**
|
|
89
95
|
* 安装 systemd 服务,主干流程是写入 unit、重载 systemd、启用开机自启,并在未运行时启动服务。
|
|
@@ -198,6 +204,192 @@ function uninstallSystemdService(options) {
|
|
|
198
204
|
options.stdout("[runtime-bridge] awsb systemd 服务已卸载。");
|
|
199
205
|
return { handled: true, exitCode: 0 };
|
|
200
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* 重启 systemd 服务,即执行 systemctl restart awsb.service。
|
|
209
|
+
* 若 unit 尚未安装,提示先执行 install。
|
|
210
|
+
*/
|
|
211
|
+
function restartSystemdService(options) {
|
|
212
|
+
if (!ensureLinuxSystemd(options.platform, options.stderr)) {
|
|
213
|
+
return { handled: true, exitCode: 1 };
|
|
214
|
+
}
|
|
215
|
+
if (!existsSync(options.serviceUnitPath)) {
|
|
216
|
+
options.stderr("[runtime-bridge] awsb systemd 服务尚未安装,请先执行 `awsb service install`。");
|
|
217
|
+
return { handled: true, exitCode: 1 };
|
|
218
|
+
}
|
|
219
|
+
const restartResult = runSystemctl(options.runCommand, [
|
|
220
|
+
"restart",
|
|
221
|
+
SYSTEMD_SERVICE_NAME,
|
|
222
|
+
]);
|
|
223
|
+
if (!commandSucceeded(restartResult)) {
|
|
224
|
+
options.stderr(systemctlFailureMessage("重启 awsb 服务", restartResult));
|
|
225
|
+
return { handled: true, exitCode: restartResult.status ?? 1 };
|
|
226
|
+
}
|
|
227
|
+
options.stdout("[runtime-bridge] awsb systemd 服务已重启。");
|
|
228
|
+
return { handled: true, exitCode: 0 };
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* 启动 systemd 服务,即执行 systemctl start awsb.service。
|
|
232
|
+
* 若 unit 尚未安装,提示先执行 install。
|
|
233
|
+
*/
|
|
234
|
+
function startSystemdService(options) {
|
|
235
|
+
if (!ensureLinuxSystemd(options.platform, options.stderr)) {
|
|
236
|
+
return { handled: true, exitCode: 1 };
|
|
237
|
+
}
|
|
238
|
+
if (!existsSync(options.serviceUnitPath)) {
|
|
239
|
+
options.stderr("[runtime-bridge] awsb systemd 服务尚未安装,请先执行 `awsb service install`。");
|
|
240
|
+
return { handled: true, exitCode: 1 };
|
|
241
|
+
}
|
|
242
|
+
const startResult = runSystemctl(options.runCommand, [
|
|
243
|
+
"start",
|
|
244
|
+
SYSTEMD_SERVICE_NAME,
|
|
245
|
+
]);
|
|
246
|
+
if (!commandSucceeded(startResult)) {
|
|
247
|
+
options.stderr(systemctlFailureMessage("启动 awsb 服务", startResult));
|
|
248
|
+
return { handled: true, exitCode: startResult.status ?? 1 };
|
|
249
|
+
}
|
|
250
|
+
options.stdout("[runtime-bridge] awsb systemd 服务已启动。");
|
|
251
|
+
return { handled: true, exitCode: 0 };
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* 停止 systemd 服务,即执行 systemctl stop awsb.service。
|
|
255
|
+
* 若 unit 尚未安装,提示先执行 install。
|
|
256
|
+
*/
|
|
257
|
+
function stopSystemdService(options) {
|
|
258
|
+
if (!ensureLinuxSystemd(options.platform, options.stderr)) {
|
|
259
|
+
return { handled: true, exitCode: 1 };
|
|
260
|
+
}
|
|
261
|
+
if (!existsSync(options.serviceUnitPath)) {
|
|
262
|
+
options.stderr("[runtime-bridge] awsb systemd 服务尚未安装,请先执行 `awsb service install`。");
|
|
263
|
+
return { handled: true, exitCode: 1 };
|
|
264
|
+
}
|
|
265
|
+
const stopResult = runSystemctl(options.runCommand, [
|
|
266
|
+
"stop",
|
|
267
|
+
SYSTEMD_SERVICE_NAME,
|
|
268
|
+
]);
|
|
269
|
+
if (!commandSucceeded(stopResult)) {
|
|
270
|
+
options.stderr(systemctlFailureMessage("停止 awsb 服务", stopResult));
|
|
271
|
+
return { handled: true, exitCode: stopResult.status ?? 1 };
|
|
272
|
+
}
|
|
273
|
+
options.stdout("[runtime-bridge] awsb systemd 服务已停止。");
|
|
274
|
+
return { handled: true, exitCode: 0 };
|
|
275
|
+
}
|
|
276
|
+
function findNssmCommand(options) {
|
|
277
|
+
const probe = options.runCommand("nssm", ["version"]);
|
|
278
|
+
return commandSucceeded(probe) ? "nssm" : null;
|
|
279
|
+
}
|
|
280
|
+
function nssmMissingError(options) {
|
|
281
|
+
options.stderr("[runtime-bridge] 未检测到 nssm(Windows 服务包装器)。在 Windows 上把 node 程序" +
|
|
282
|
+
"注册为真正的服务必须借助 nssm 实现 SCM 协议,否则会像之前一样“启动失败”。请先安装 nssm:\n" +
|
|
283
|
+
" winget install nssm\n" +
|
|
284
|
+
" 或 choco install nssm\n" +
|
|
285
|
+
" 或访问 https://nssm.cc 下载 nssm.exe 并放入 PATH,然后重试。");
|
|
286
|
+
return { handled: true, exitCode: 1 };
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* 用 nssm 安装并启动 Windows 服务。
|
|
290
|
+
* - nssm install 把 `node <executablePath>` 注册为真正的 Windows 服务(SCM 协议由 nssm 实现);
|
|
291
|
+
* - 安装前先 remove 一次,清理可能由旧 `New-Service` 方式残留的坏服务;
|
|
292
|
+
* - AppStdout/AppStderr 把输出写入 ProgramData 下的日志文件,供 `awsb log` 读取。
|
|
293
|
+
* 日志目录创建失败不阻断安装(nssm 启动时按需创建)。
|
|
294
|
+
*/
|
|
295
|
+
function installWindowsService(options) {
|
|
296
|
+
const nssm = findNssmCommand(options);
|
|
297
|
+
if (!nssm) {
|
|
298
|
+
return nssmMissingError(options);
|
|
299
|
+
}
|
|
300
|
+
const logPath = options.windowsServiceLogPath || WINDOWS_SERVICE_LOG_PATH;
|
|
301
|
+
const execDir = path.dirname(options.executablePath);
|
|
302
|
+
try {
|
|
303
|
+
mkdirSync(WINDOWS_SERVICE_LOG_DIR, { recursive: true });
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// 日志目录创建失败不阻断安装
|
|
307
|
+
}
|
|
308
|
+
const run = (args) => options.runCommand(nssm, args);
|
|
309
|
+
// 清理可能残留的旧服务(含非 nssm 创建的),忽略失败
|
|
310
|
+
run(["remove", WINDOWS_SERVICE_NAME, "confirm"]);
|
|
311
|
+
run(["install", WINDOWS_SERVICE_NAME, process.execPath, options.executablePath]);
|
|
312
|
+
run(["set", WINDOWS_SERVICE_NAME, "AppDirectory", execDir]);
|
|
313
|
+
run(["set", WINDOWS_SERVICE_NAME, "DisplayName", "awsb runtime bridge"]);
|
|
314
|
+
run(["set", WINDOWS_SERVICE_NAME, "Start", "SERVICE_AUTO_START"]);
|
|
315
|
+
run(["set", WINDOWS_SERVICE_NAME, "AppStdout", logPath]);
|
|
316
|
+
run(["set", WINDOWS_SERVICE_NAME, "AppStderr", logPath]);
|
|
317
|
+
run(["set", WINDOWS_SERVICE_NAME, "AppRotateFiles", "1"]);
|
|
318
|
+
run(["set", WINDOWS_SERVICE_NAME, "AppRotateBytes", "1048576"]);
|
|
319
|
+
const startResult = run(["start", WINDOWS_SERVICE_NAME]);
|
|
320
|
+
if (!commandSucceeded(startResult)) {
|
|
321
|
+
options.stderr(`[runtime-bridge] 安装/启动 Windows 服务失败: ${startResult.error?.message ?? `退出码 ${startResult.status ?? "unknown"}`}`);
|
|
322
|
+
return { handled: true, exitCode: startResult.status ?? 1 };
|
|
323
|
+
}
|
|
324
|
+
options.stdout(`[runtime-bridge] awsb Windows 服务已安装并已启动(日志: ${logPath})。`);
|
|
325
|
+
return { handled: true, exitCode: 0 };
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* 卸载 Windows 服务(nssm stop + nssm remove)。
|
|
329
|
+
*/
|
|
330
|
+
function uninstallWindowsService(options) {
|
|
331
|
+
const nssm = findNssmCommand(options);
|
|
332
|
+
if (!nssm) {
|
|
333
|
+
return nssmMissingError(options);
|
|
334
|
+
}
|
|
335
|
+
const run = (args) => options.runCommand(nssm, args);
|
|
336
|
+
run(["stop", WINDOWS_SERVICE_NAME]); // 未运行则忽略
|
|
337
|
+
const removeResult = run(["remove", WINDOWS_SERVICE_NAME, "confirm"]);
|
|
338
|
+
if (!commandSucceeded(removeResult)) {
|
|
339
|
+
options.stderr(`[runtime-bridge] 卸载 Windows 服务失败: ${removeResult.error?.message ?? `退出码 ${removeResult.status ?? "unknown"}`}`);
|
|
340
|
+
return { handled: true, exitCode: removeResult.status ?? 1 };
|
|
341
|
+
}
|
|
342
|
+
options.stdout("[runtime-bridge] awsb Windows 服务已卸载。");
|
|
343
|
+
return { handled: true, exitCode: 0 };
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* 重启 Windows 服务(nssm restart,未运行会被启动)。
|
|
347
|
+
*/
|
|
348
|
+
function restartWindowsService(options) {
|
|
349
|
+
const nssm = findNssmCommand(options);
|
|
350
|
+
if (!nssm) {
|
|
351
|
+
return nssmMissingError(options);
|
|
352
|
+
}
|
|
353
|
+
const result = options.runCommand(nssm, ["restart", WINDOWS_SERVICE_NAME]);
|
|
354
|
+
if (!commandSucceeded(result)) {
|
|
355
|
+
options.stderr(`[runtime-bridge] 重启 Windows 服务失败: ${result.error?.message ?? `退出码 ${result.status ?? "unknown"}`}`);
|
|
356
|
+
return { handled: true, exitCode: result.status ?? 1 };
|
|
357
|
+
}
|
|
358
|
+
options.stdout("[runtime-bridge] awsb Windows 服务已重启。");
|
|
359
|
+
return { handled: true, exitCode: 0 };
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* 启动 Windows 服务(nssm start)。
|
|
363
|
+
*/
|
|
364
|
+
function startWindowsService(options) {
|
|
365
|
+
const nssm = findNssmCommand(options);
|
|
366
|
+
if (!nssm) {
|
|
367
|
+
return nssmMissingError(options);
|
|
368
|
+
}
|
|
369
|
+
const result = options.runCommand(nssm, ["start", WINDOWS_SERVICE_NAME]);
|
|
370
|
+
if (!commandSucceeded(result)) {
|
|
371
|
+
options.stderr(`[runtime-bridge] 启动 Windows 服务失败: ${result.error?.message ?? `退出码 ${result.status ?? "unknown"}`}`);
|
|
372
|
+
return { handled: true, exitCode: result.status ?? 1 };
|
|
373
|
+
}
|
|
374
|
+
options.stdout("[runtime-bridge] awsb Windows 服务已启动。");
|
|
375
|
+
return { handled: true, exitCode: 0 };
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* 停止 Windows 服务(nssm stop)。
|
|
379
|
+
*/
|
|
380
|
+
function stopWindowsService(options) {
|
|
381
|
+
const nssm = findNssmCommand(options);
|
|
382
|
+
if (!nssm) {
|
|
383
|
+
return nssmMissingError(options);
|
|
384
|
+
}
|
|
385
|
+
const result = options.runCommand(nssm, ["stop", WINDOWS_SERVICE_NAME]);
|
|
386
|
+
if (!commandSucceeded(result)) {
|
|
387
|
+
options.stderr(`[runtime-bridge] 停止 Windows 服务失败: ${result.error?.message ?? `退出码 ${result.status ?? "unknown"}`}`);
|
|
388
|
+
return { handled: true, exitCode: result.status ?? 1 };
|
|
389
|
+
}
|
|
390
|
+
options.stdout("[runtime-bridge] awsb Windows 服务已停止。");
|
|
391
|
+
return { handled: true, exitCode: 0 };
|
|
392
|
+
}
|
|
201
393
|
function handleServiceCommand(argv, options, stdout, stderr) {
|
|
202
394
|
const subcommand = argv[1];
|
|
203
395
|
if (!subcommand ||
|
|
@@ -215,16 +407,205 @@ function handleServiceCommand(argv, options, stdout, stderr) {
|
|
|
215
407
|
serviceUnitPath: options.serviceUnitPath || DEFAULT_SYSTEMD_UNIT_PATH,
|
|
216
408
|
executablePath: options.executablePath || getDefaultExecutablePath(),
|
|
217
409
|
};
|
|
410
|
+
// 仅 Linux systemd 与 Windows 服务支持 install/uninstall/restart
|
|
411
|
+
if (serviceOptions.platform !== "linux" &&
|
|
412
|
+
serviceOptions.platform !== "win32") {
|
|
413
|
+
stderr("[runtime-bridge] service 命令仅支持 Linux systemd 与 Windows 服务环境。");
|
|
414
|
+
return { handled: true, exitCode: 1 };
|
|
415
|
+
}
|
|
218
416
|
if (subcommand === "install") {
|
|
219
|
-
return
|
|
417
|
+
return serviceOptions.platform === "win32"
|
|
418
|
+
? installWindowsService(serviceOptions)
|
|
419
|
+
: installSystemdService(serviceOptions);
|
|
220
420
|
}
|
|
221
421
|
if (subcommand === "uninstall") {
|
|
222
|
-
return
|
|
422
|
+
return serviceOptions.platform === "win32"
|
|
423
|
+
? uninstallWindowsService(serviceOptions)
|
|
424
|
+
: uninstallSystemdService(serviceOptions);
|
|
425
|
+
}
|
|
426
|
+
if (subcommand === "restart") {
|
|
427
|
+
return serviceOptions.platform === "win32"
|
|
428
|
+
? restartWindowsService(serviceOptions)
|
|
429
|
+
: restartSystemdService(serviceOptions);
|
|
430
|
+
}
|
|
431
|
+
if (subcommand === "start") {
|
|
432
|
+
return serviceOptions.platform === "win32"
|
|
433
|
+
? startWindowsService(serviceOptions)
|
|
434
|
+
: startSystemdService(serviceOptions);
|
|
435
|
+
}
|
|
436
|
+
if (subcommand === "stop") {
|
|
437
|
+
return serviceOptions.platform === "win32"
|
|
438
|
+
? stopWindowsService(serviceOptions)
|
|
439
|
+
: stopSystemdService(serviceOptions);
|
|
223
440
|
}
|
|
224
441
|
stderr(`[runtime-bridge] 未知 service 子命令: ${subcommand}`);
|
|
225
442
|
printServiceUsage(stdout);
|
|
226
443
|
return { handled: true, exitCode: 1 };
|
|
227
444
|
}
|
|
445
|
+
function parsePids(raw) {
|
|
446
|
+
if (!raw) {
|
|
447
|
+
return [];
|
|
448
|
+
}
|
|
449
|
+
return raw
|
|
450
|
+
.split(/\r?\n/)
|
|
451
|
+
.map((line) => line.trim())
|
|
452
|
+
.filter((line) => /^\d+$/.test(line))
|
|
453
|
+
.map(Number);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* 默认进程检测:列出正在运行且与当前进程不同的 bridge 实例 PID。
|
|
457
|
+
* - Windows: 通过 PowerShell 查询命令行包含 aws-runtime-bridge 的 node.exe。
|
|
458
|
+
* - Linux/macOS: 通过 pgrep -f aws-runtime-bridge。
|
|
459
|
+
* 任何异常都返回空数组,避免更新流程被检测逻辑阻断。
|
|
460
|
+
*/
|
|
461
|
+
function defaultFindRunningBridgeProcesses(platform) {
|
|
462
|
+
try {
|
|
463
|
+
if (platform === "win32") {
|
|
464
|
+
const result = spawnSync("powershell", [
|
|
465
|
+
"-NoProfile",
|
|
466
|
+
"-Command",
|
|
467
|
+
`Get-CimInstance Win32_Process -Filter "Name='node.exe'" | ` +
|
|
468
|
+
`Where-Object { $_.CommandLine -like '*aws-runtime-bridge*' -and $_.ProcessId -ne ${process.pid} } | ` +
|
|
469
|
+
`ForEach-Object { $_.ProcessId }`,
|
|
470
|
+
], { encoding: "utf-8" });
|
|
471
|
+
return parsePids(result.stdout);
|
|
472
|
+
}
|
|
473
|
+
const result = spawnSync("pgrep", ["-f", "aws-runtime-bridge"], {
|
|
474
|
+
encoding: "utf-8",
|
|
475
|
+
});
|
|
476
|
+
return parsePids(result.stdout).filter((pid) => pid !== process.pid);
|
|
477
|
+
}
|
|
478
|
+
catch {
|
|
479
|
+
return [];
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
function defaultKillBridgeProcess(pid, platform) {
|
|
483
|
+
if (platform === "win32") {
|
|
484
|
+
// /T 结束进程树,/F 强制
|
|
485
|
+
spawnSync("taskkill", ["/PID", String(pid), "/F", "/T"], {
|
|
486
|
+
stdio: "ignore",
|
|
487
|
+
});
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
// Linux/macOS:直接 SIGKILL。注意若进程由 systemd 托管,kill 后可能被自动拉起。
|
|
491
|
+
spawnSync("kill", ["-9", String(pid)], { stdio: "ignore" });
|
|
492
|
+
}
|
|
493
|
+
function defaultPrompt(question) {
|
|
494
|
+
if (!process.stdin.isTTY) {
|
|
495
|
+
// 非交互环境(管道 / CI)不要挂起,默认不关闭进程。
|
|
496
|
+
return Promise.resolve("n");
|
|
497
|
+
}
|
|
498
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
499
|
+
return rl.question(question).finally(() => rl.close());
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* 更新 aws-runtime-bridge:
|
|
503
|
+
* 1. 检测是否有正在运行的实例;
|
|
504
|
+
* 2. 若有,询问用户是否关闭(y 关闭 / 其他 不关闭);
|
|
505
|
+
* 3. 关闭后再安装;若不关闭,则以 --force 强制安装(文件被占用可能仍有警告)。
|
|
506
|
+
*/
|
|
507
|
+
async function handleUpdateCommand(options, stdout, stderr) {
|
|
508
|
+
const runCommand = options.runCommand || defaultRunCommand;
|
|
509
|
+
const platform = options.platform || process.platform;
|
|
510
|
+
const findProcesses = options.findRunningBridgeProcesses || defaultFindRunningBridgeProcesses;
|
|
511
|
+
const prompt = options.prompt || defaultPrompt;
|
|
512
|
+
const killProcess = options.killBridgeProcess || defaultKillBridgeProcess;
|
|
513
|
+
stdout("[runtime-bridge] 正在更新 aws-runtime-bridge 到最新版本...");
|
|
514
|
+
const running = findProcesses(platform).filter((pid) => pid !== process.pid);
|
|
515
|
+
let forceInstall = false;
|
|
516
|
+
if (running.length > 0) {
|
|
517
|
+
stdout(`[runtime-bridge] 检测到 aws-runtime-bridge 正在运行 (PID: ${running.join(", ")}),` +
|
|
518
|
+
"更新时这些进程可能占用文件导致覆盖失败。");
|
|
519
|
+
const answer = (await prompt("是否关闭上述进程以继续更新? (y/N) ")).trim().toLowerCase();
|
|
520
|
+
if (answer === "y" || answer === "yes") {
|
|
521
|
+
for (const pid of running) {
|
|
522
|
+
try {
|
|
523
|
+
killProcess(pid, platform);
|
|
524
|
+
stdout(`[runtime-bridge] 已关闭进程 PID: ${pid}`);
|
|
525
|
+
}
|
|
526
|
+
catch (error) {
|
|
527
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
528
|
+
stderr(`[runtime-bridge] 关闭进程 PID ${pid} 失败: ${err.message}`);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
forceInstall = true;
|
|
534
|
+
stdout("[runtime-bridge] 已选择不关闭进程,将以 --force 方式强制安装(若文件仍被占用可能会有警告)。");
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
const args = ["install", "-g", "aws-runtime-bridge@latest", "--omit=optional"];
|
|
538
|
+
if (forceInstall) {
|
|
539
|
+
args.push("--force");
|
|
540
|
+
}
|
|
541
|
+
const result = runCommand("npm", args);
|
|
542
|
+
if (result.error) {
|
|
543
|
+
stderr(`[runtime-bridge] 更新失败: ${result.error.message}`);
|
|
544
|
+
return { handled: true, exitCode: 1 };
|
|
545
|
+
}
|
|
546
|
+
if (result.status !== 0) {
|
|
547
|
+
stderr(`[runtime-bridge] 更新失败,npm 退出码: ${result.status ?? "unknown"}`);
|
|
548
|
+
return { handled: true, exitCode: result.status ?? 1 };
|
|
549
|
+
}
|
|
550
|
+
stdout("[runtime-bridge] 更新完成。请重新运行 awsb -v 查看当前版本。");
|
|
551
|
+
return { handled: true, exitCode: 0 };
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* 查看 awsb 服务日志。
|
|
555
|
+
* - Linux systemd:journalctl -u awsb.service(支持 --follow 实时跟踪)。
|
|
556
|
+
* - Windows:读取 install 时重定向到磁盘的日志文件(支持 --follow 实时跟踪)。
|
|
557
|
+
* 非服务环境(未安装 / 不支持的平台)给出明确提示。
|
|
558
|
+
*/
|
|
559
|
+
function handleLogCommand(options, stdout, stderr) {
|
|
560
|
+
const argv = options.argv || process.argv.slice(2);
|
|
561
|
+
const follow = argv
|
|
562
|
+
.slice(1)
|
|
563
|
+
.some((arg) => arg === "--follow" || arg === "-f");
|
|
564
|
+
const platform = options.platform || process.platform;
|
|
565
|
+
const runCommand = options.runCommand || defaultRunCommand;
|
|
566
|
+
const unitPath = options.serviceUnitPath || DEFAULT_SYSTEMD_UNIT_PATH;
|
|
567
|
+
if (platform === "linux") {
|
|
568
|
+
if (!existsSync(unitPath)) {
|
|
569
|
+
stderr("[runtime-bridge] awsb 服务尚未安装(awsb service install),无日志可查看。");
|
|
570
|
+
return { handled: true, exitCode: 1 };
|
|
571
|
+
}
|
|
572
|
+
const args = ["-u", SYSTEMD_SERVICE_NAME];
|
|
573
|
+
if (follow) {
|
|
574
|
+
args.push("-f");
|
|
575
|
+
}
|
|
576
|
+
else {
|
|
577
|
+
args.push("-n", "200", "--no-pager");
|
|
578
|
+
}
|
|
579
|
+
const result = runCommand("journalctl", args);
|
|
580
|
+
if (result.error) {
|
|
581
|
+
stderr(`[runtime-bridge] 读取日志失败: ${result.error.message}`);
|
|
582
|
+
return { handled: true, exitCode: 1 };
|
|
583
|
+
}
|
|
584
|
+
return { handled: true, exitCode: result.status ?? 0 };
|
|
585
|
+
}
|
|
586
|
+
if (platform === "win32") {
|
|
587
|
+
const logPath = options.windowsServiceLogPath || WINDOWS_SERVICE_LOG_PATH;
|
|
588
|
+
if (!existsSync(logPath)) {
|
|
589
|
+
stderr(`[runtime-bridge] 尚未生成日志文件: ${logPath}。请先执行 ` +
|
|
590
|
+
"`awsb service install` 并运行服务。");
|
|
591
|
+
return { handled: true, exitCode: 1 };
|
|
592
|
+
}
|
|
593
|
+
const psCommand = `Get-Content -Encoding UTF8 -Tail 200 "${logPath}"` +
|
|
594
|
+
(follow ? " -Wait" : "");
|
|
595
|
+
const result = runCommand("powershell", [
|
|
596
|
+
"-NoProfile",
|
|
597
|
+
"-Command",
|
|
598
|
+
psCommand,
|
|
599
|
+
]);
|
|
600
|
+
if (result.error) {
|
|
601
|
+
stderr(`[runtime-bridge] 读取日志失败: ${result.error.message}`);
|
|
602
|
+
return { handled: true, exitCode: 1 };
|
|
603
|
+
}
|
|
604
|
+
return { handled: true, exitCode: result.status ?? 0 };
|
|
605
|
+
}
|
|
606
|
+
stderr("[runtime-bridge] awsb log 仅支持 Linux systemd 与 Windows 服务环境。");
|
|
607
|
+
return { handled: true, exitCode: 1 };
|
|
608
|
+
}
|
|
228
609
|
export async function handleCliCommand(options = {}) {
|
|
229
610
|
const argv = options.argv || process.argv.slice(2);
|
|
230
611
|
const command = argv[0];
|
|
@@ -235,32 +616,30 @@ export async function handleCliCommand(options = {}) {
|
|
|
235
616
|
return { handled: true, exitCode: 0 };
|
|
236
617
|
}
|
|
237
618
|
if (command === "update") {
|
|
238
|
-
|
|
239
|
-
const runCommand = options.runCommand || defaultRunCommand;
|
|
240
|
-
const result = runCommand("npm", [
|
|
241
|
-
"install",
|
|
242
|
-
"-g",
|
|
243
|
-
"aws-runtime-bridge@latest",
|
|
244
|
-
"--omit=optional",
|
|
245
|
-
]);
|
|
246
|
-
if (result.error) {
|
|
247
|
-
stderr(`[runtime-bridge] 更新失败: ${result.error.message}`);
|
|
248
|
-
return { handled: true, exitCode: 1 };
|
|
249
|
-
}
|
|
250
|
-
if (result.status !== 0) {
|
|
251
|
-
stderr(`[runtime-bridge] 更新失败,npm 退出码: ${result.status ?? "unknown"}`);
|
|
252
|
-
return { handled: true, exitCode: result.status ?? 1 };
|
|
253
|
-
}
|
|
254
|
-
stdout("[runtime-bridge] 更新完成。请重新运行 awsb -v 查看当前版本。");
|
|
255
|
-
return { handled: true, exitCode: 0 };
|
|
619
|
+
return await handleUpdateCommand(options, stdout, stderr);
|
|
256
620
|
}
|
|
257
621
|
if (command === "config") {
|
|
622
|
+
const sub = argv[1];
|
|
623
|
+
if (sub === "example" ||
|
|
624
|
+
sub === "minimal" ||
|
|
625
|
+
sub === "--minimal" ||
|
|
626
|
+
sub === "-m") {
|
|
627
|
+
const configureExample = options.configureExample || printConfigExampleCommand;
|
|
628
|
+
const result = await configureExample();
|
|
629
|
+
return { handled: true, exitCode: result === "created" ? 0 : 1 };
|
|
630
|
+
}
|
|
258
631
|
const configure = options.configure || configureStartupConfig;
|
|
259
632
|
const result = await configure();
|
|
260
|
-
return {
|
|
633
|
+
return {
|
|
634
|
+
handled: true,
|
|
635
|
+
exitCode: result === "configured" || result === "created" ? 0 : 1,
|
|
636
|
+
};
|
|
261
637
|
}
|
|
262
638
|
if (command === "service") {
|
|
263
639
|
return handleServiceCommand(argv, options, stdout, stderr);
|
|
264
640
|
}
|
|
641
|
+
if (command === "log") {
|
|
642
|
+
return handleLogCommand(options, stdout, stderr);
|
|
643
|
+
}
|
|
265
644
|
return { handled: false, exitCode: 0 };
|
|
266
645
|
}
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
interface AutoRegisterTargetConfig {
|
|
2
|
+
serverUrl: string;
|
|
3
|
+
instanceName: string;
|
|
4
|
+
userKey: string;
|
|
5
|
+
registerAddr?: string;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
interface StartupConfigFile {
|
|
9
|
+
connectionKey?: string;
|
|
10
|
+
autoRegisterTargets?: AutoRegisterTargetConfig[];
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 最小配置示例模板(占位符,不含任何真实密钥)。
|
|
15
|
+
* `awsb config example` 与向导中的「最小配置」选项都会基于它生成示例。
|
|
16
|
+
* 注意:模板内的 value 均为 <占位符>,切勿写入真实凭据——真实值应由用户手填。
|
|
17
|
+
*/
|
|
18
|
+
export declare const MINIMAL_CONFIG_TEMPLATE: StartupConfigFile;
|
|
19
|
+
/** 将最小配置模板格式化为可读的示例文本(占位符版)。 */
|
|
20
|
+
export declare function formatConfigExample(template?: object): string;
|
|
1
21
|
interface PromptIO {
|
|
2
22
|
question(prompt: string): Promise<string>;
|
|
3
23
|
close(): void;
|
|
@@ -12,5 +32,10 @@ interface EnsureStartupConfigOptions {
|
|
|
12
32
|
export type StartupConfigWizardResult = "exists" | "created" | "configured" | "skipped" | "non-interactive" | "failed";
|
|
13
33
|
export declare function ensureStartupConfig(options?: EnsureStartupConfigOptions): Promise<StartupConfigWizardResult>;
|
|
14
34
|
export declare function configureStartupConfig(options?: EnsureStartupConfigOptions): Promise<StartupConfigWizardResult>;
|
|
35
|
+
/**
|
|
36
|
+
* `awsb config example`:直接打印最小配置示例(占位符版),
|
|
37
|
+
* 并把模板写入 config.json 供用户稍后手动填值。非交互环境也能用。
|
|
38
|
+
*/
|
|
39
|
+
export declare function printConfigExampleCommand(options?: EnsureStartupConfigOptions): Promise<StartupConfigWizardResult>;
|
|
15
40
|
export {};
|
|
16
41
|
//# sourceMappingURL=startup-config-wizard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-config-wizard.d.ts","sourceRoot":"","sources":["../../src/services/startup-config-wizard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"startup-config-wizard.d.ts","sourceRoot":"","sources":["../../src/services/startup-config-wizard.ts"],"names":[],"mappings":"AASA,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,iBAAiB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACjD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,iBAYrC,CAAC;AAEF,gCAAgC;AAChC,wBAAgB,mBAAmB,CACjC,QAAQ,GAAE,MAAgC,GACzC,MAAM,CAOR;AAED,UAAU,QAAQ;IAChB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,IAAI,CAAC;CACf;AAED,UAAU,0BAA0B;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,MAAM,CAAC;CACtC;AAED,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,SAAS,GACT,iBAAiB,GACjB,QAAQ,CAAC;AAwMb,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CAiDpC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CA0CpC;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CAepC"}
|
|
@@ -6,6 +6,31 @@ import { createInterface } from "node:readline/promises";
|
|
|
6
6
|
import { atomicWriteJsonFile } from "../utils/file-utils.js";
|
|
7
7
|
import { logger } from "../utils/logger.js";
|
|
8
8
|
import { getAutoRegisterConfigFilePath } from "./auto-register.js";
|
|
9
|
+
/**
|
|
10
|
+
* 最小配置示例模板(占位符,不含任何真实密钥)。
|
|
11
|
+
* `awsb config example` 与向导中的「最小配置」选项都会基于它生成示例。
|
|
12
|
+
* 注意:模板内的 value 均为 <占位符>,切勿写入真实凭据——真实值应由用户手填。
|
|
13
|
+
*/
|
|
14
|
+
export const MINIMAL_CONFIG_TEMPLATE = {
|
|
15
|
+
autoRegisterTargets: [
|
|
16
|
+
{
|
|
17
|
+
instanceName: "<实例名称,例如 我的主机>",
|
|
18
|
+
serverUrl: "http://<调度中心IP>:<端口>",
|
|
19
|
+
userKey: "<你的 userKey>",
|
|
20
|
+
instanceId: "<实例ID,首次可留空由服务端生成>",
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
connectionKey: "<面板连接 Bridge 的密钥>",
|
|
24
|
+
panelUsername: "<面板用户名>",
|
|
25
|
+
panelPassword: "<面板密码>",
|
|
26
|
+
};
|
|
27
|
+
/** 将最小配置模板格式化为可读的示例文本(占位符版)。 */
|
|
28
|
+
export function formatConfigExample(template = MINIMAL_CONFIG_TEMPLATE) {
|
|
29
|
+
const json = JSON.stringify(template, null, 2);
|
|
30
|
+
return ("[runtime-bridge] 最小配置示例(请将 <占位符> 替换为真实值后保存):\n" +
|
|
31
|
+
`${json}\n` +
|
|
32
|
+
"[runtime-bridge] 说明:autoRegisterTargets 可包含多个目标;instanceId 首次可省略,由服务端生成;panelUsername / panelPassword 为可选面板认证。");
|
|
33
|
+
}
|
|
9
34
|
function normalizeAnswer(answer) {
|
|
10
35
|
return answer.trim().toLowerCase();
|
|
11
36
|
}
|
|
@@ -50,7 +75,9 @@ async function askOptional(prompt, label, defaultValue) {
|
|
|
50
75
|
const answer = await prompt.question(`${label}(默认使用当前值 ${defaultValue},直接回车保留): `);
|
|
51
76
|
return answer.trim() || defaultValue;
|
|
52
77
|
}
|
|
78
|
+
const ASK_REQUIRED_MAX_RETRIES = 10;
|
|
53
79
|
async function askRequired(prompt, label, currentValue) {
|
|
80
|
+
let retries = 0;
|
|
54
81
|
for (;;) {
|
|
55
82
|
const answer = (await prompt.question(currentValue
|
|
56
83
|
? `${label}(默认使用当前值 ${currentValue},直接回车保留): `
|
|
@@ -61,6 +88,10 @@ async function askRequired(prompt, label, currentValue) {
|
|
|
61
88
|
if (currentValue) {
|
|
62
89
|
return currentValue;
|
|
63
90
|
}
|
|
91
|
+
retries++;
|
|
92
|
+
if (retries >= ASK_REQUIRED_MAX_RETRIES) {
|
|
93
|
+
throw new Error(`${label} 输入超过最大重试次数(${ASK_REQUIRED_MAX_RETRIES}),退出配置引导`);
|
|
94
|
+
}
|
|
64
95
|
output.write(`${label} 不能为空,请重新输入。\n`);
|
|
65
96
|
}
|
|
66
97
|
}
|
|
@@ -76,6 +107,20 @@ async function askShouldConfigure(prompt) {
|
|
|
76
107
|
output.write("请输入 Y 继续配置,或输入 n 跳过。\n");
|
|
77
108
|
}
|
|
78
109
|
}
|
|
110
|
+
/** 无配置文件时,询问用户走「完整逐步引导」还是「最小配置示例」。 */
|
|
111
|
+
async function askConfigMode(prompt) {
|
|
112
|
+
for (;;) {
|
|
113
|
+
const answer = await prompt.question("未检测到配置文件,请选择配置方式:[1] 完整逐步引导 [2] 最小配置示例(生成占位符模板,稍后手动填写) (默认 1): ");
|
|
114
|
+
const n = normalizeAnswer(answer);
|
|
115
|
+
if (n === "" || n === "1" || n === "full" || n === "完整" || n === "引导") {
|
|
116
|
+
return "full";
|
|
117
|
+
}
|
|
118
|
+
if (n === "2" || n === "minimal" || n === "最小" || n === "示例") {
|
|
119
|
+
return "minimal";
|
|
120
|
+
}
|
|
121
|
+
output.write("请输入 1(完整引导)或 2(最小配置示例)。\n");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
79
124
|
async function collectStartupConfig(prompt, existingConfig = {}) {
|
|
80
125
|
const existingTarget = existingConfig.autoRegisterTargets?.[0] || {};
|
|
81
126
|
const defaultServerUrl = "http://127.0.0.1:8080";
|
|
@@ -164,6 +209,18 @@ export async function configureStartupConfig(options = {}) {
|
|
|
164
209
|
const { prompt, shouldClosePrompt } = await createPrompt(options);
|
|
165
210
|
try {
|
|
166
211
|
const existingConfig = readExistingConfig(configPath);
|
|
212
|
+
const noExistingConfig = !existsSync(configPath);
|
|
213
|
+
// 无配置文件时,先让用户选择「完整引导」或「最小配置示例」
|
|
214
|
+
if (noExistingConfig) {
|
|
215
|
+
const mode = await askConfigMode(prompt);
|
|
216
|
+
if (mode === "minimal") {
|
|
217
|
+
output.write(formatConfigExample());
|
|
218
|
+
await writeConfigFile(configPath, MINIMAL_CONFIG_TEMPLATE);
|
|
219
|
+
output.write(`[runtime-bridge] 已将最小配置示例模板写入: ${configPath}\n`);
|
|
220
|
+
output.write("[runtime-bridge] 请将 <占位符> 替换为真实值后保存。\n");
|
|
221
|
+
return "created";
|
|
222
|
+
}
|
|
223
|
+
}
|
|
167
224
|
const config = await collectStartupConfig(prompt, existingConfig);
|
|
168
225
|
await writeConfigFile(configPath, config);
|
|
169
226
|
logger.info(`[runtime-bridge] 已更新配置文件: ${configPath}`);
|
|
@@ -180,3 +237,22 @@ export async function configureStartupConfig(options = {}) {
|
|
|
180
237
|
}
|
|
181
238
|
}
|
|
182
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* `awsb config example`:直接打印最小配置示例(占位符版),
|
|
242
|
+
* 并把模板写入 config.json 供用户稍后手动填值。非交互环境也能用。
|
|
243
|
+
*/
|
|
244
|
+
export async function printConfigExampleCommand(options = {}) {
|
|
245
|
+
const configPath = options.configPath || getAutoRegisterConfigFilePath();
|
|
246
|
+
output.write(formatConfigExample());
|
|
247
|
+
try {
|
|
248
|
+
await writeConfigFile(configPath, MINIMAL_CONFIG_TEMPLATE);
|
|
249
|
+
output.write(`[runtime-bridge] 已将最小配置示例模板写入: ${configPath}\n`);
|
|
250
|
+
output.write("[runtime-bridge] 请将 <占位符> 替换为真实值后保存。\n");
|
|
251
|
+
return "created";
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
const err = error;
|
|
255
|
+
logger.warn(`[runtime-bridge] 写入示例模板失败: ${err.message}`);
|
|
256
|
+
return "failed";
|
|
257
|
+
}
|
|
258
|
+
}
|
package/dist/utils/yaml-utils.js
CHANGED
|
@@ -122,7 +122,7 @@ export function extractAgentConfigOrTemplate(yamlContent, targetRelativePath) {
|
|
|
122
122
|
name: '',
|
|
123
123
|
path: normalizedTarget,
|
|
124
124
|
project: projectValue || '',
|
|
125
|
-
|
|
125
|
+
describe: '',
|
|
126
126
|
prompt: '',
|
|
127
127
|
},
|
|
128
128
|
],
|
|
@@ -156,7 +156,7 @@ export function generateEmptyTemplate(_targetRelativePath) {
|
|
|
156
156
|
name: '',
|
|
157
157
|
path: normalizedTargetPath,
|
|
158
158
|
project: '',
|
|
159
|
-
|
|
159
|
+
describe: '',
|
|
160
160
|
prompt: '',
|
|
161
161
|
},
|
|
162
162
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|