mooncat-browser 0.1.0 → 0.2.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/dist/cli.js CHANGED
@@ -1,39 +1,60 @@
1
+ #!/usr/bin/env node
1
2
  // -*- coding: utf-8 -*-
2
3
  // cli.ts — mooncat-browser 命令行入口。
3
4
  //
4
- // 命令:
5
- // mooncat-browser start [--port 17322] [--profile D:\p] [--chrome path] [--health-port 17440]
6
- // mooncat-browser health [--port 17322]
7
- // mooncat-browser stop [--port 17322]
8
- // mooncat-browser open --url <url> [--port 17322]
9
- // mooncat-browser install-extension
10
- // mooncat-browser skills [--skill <name>] [--target <dir>] [--list]
5
+ // mooncat-browser 是独立包:不写全局 appData,不假设 mooncat space 目录。
6
+ // 所有运行数据由项目配置(config/browser.json mooncat-browser.config.json)显式声明。
11
7
  //
12
- // --port 语义 = browserd RPC 端口(client 连这里,默认 17322)。
13
- // start 还会顺带起一个 wrapper health 端口(--health-port,默认 17440),供 stop/监控用。
8
+ // 命令:
9
+ // mooncat-browser init [name] 初始化项目配置 + 数据目录
10
+ // mooncat-browser start <name> 启动实例(wrapper + browserd + Chrome)
11
+ // mooncat-browser start <name> --temp 临时实例(系统 temp,退出清理)
12
+ // mooncat-browser stop <name> graceful 停止实例
13
+ // mooncat-browser status <name> 查实例运行状态
14
+ // mooncat-browser health <name> 探测 browserd 是否就绪
15
+ // mooncat-browser open <name> --url <url> 打开/复用浏览器并导航
16
+ // mooncat-browser list 列出配置里的实例 + 运行状态
17
+ // mooncat-browser install-extension 打印 WebPlater 扩展路径
18
+ // mooncat-browser skills [--skill <name>] 安装内置 skills
19
+ //
20
+ // <name> 是 config 里 instances 的 key(默认实例叫 default)。
21
+ // --rpc-port / --health-port / --profile 等作为高级覆盖(覆盖配置文件值)。
14
22
  import { Command } from "commander";
15
23
  import { createRequire } from "node:module";
16
- import { resolveConfig } from "./config.js";
17
24
  import { BrowserClient } from "./client.js";
18
25
  import { startService, readServiceState, serviceStatePath, browserdScriptPath } from "./server.js";
26
+ import { defaultInstanceEntry, findProjectConfig, InstanceNotFoundError, listInstanceNames, loadInstance, NotInitializedError, tempInstance, } from "./instance.js";
27
+ import { prepareExtension, verifyInstanceExtension } from "./prepare-extension.js";
19
28
  import { fileURLToPath } from "node:url";
20
- import { homedir } from "node:os";
21
29
  import { join } from "node:path";
22
- import { cpSync, existsSync, mkdirSync, readdirSync, rmSync } from "node:fs";
30
+ import { cpSync, existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from "node:fs";
23
31
  const require = createRequire(import.meta.url);
24
32
  const __dirname = fileURLToPath(new URL(".", import.meta.url));
25
- /** webplater 扩展已构建产物目录(install-extension 指向这里)。 */
33
+ /** webplater 扩展已构建产物目录(install-extension 指向这里)。 */
26
34
  function extensionDistDir() {
27
35
  return process.env.MOONCAT_BROWSER_EXTENSION || join(__dirname, "..", "browser-op", "webplater", "dist", "chrome-mv3");
28
36
  }
29
37
  function printHeader(title) {
30
38
  console.log(`\n[mooncat-browser] ${title}`);
31
39
  }
32
- /** 构造 client(按 --port / env / default)。 */
33
- function makeClient(port) {
34
- return new BrowserClient({ port });
40
+ /** commander 解析的 opts 转成 CliOverrides(只取高级覆盖字段)。 */
41
+ function optsToOverrides(opts) {
42
+ const num = (v) => (typeof v === "number" ? v : undefined);
43
+ const str = (v) => (typeof v === "string" ? v : undefined);
44
+ return {
45
+ rpcPort: num(opts.rpcPort) ?? num(opts.port),
46
+ port: num(opts.port) ?? num(opts.rpcPort),
47
+ healthPort: num(opts.healthPort),
48
+ extensionPort: num(opts.extensionPort),
49
+ profileDir: str(opts.profile),
50
+ stateDir: str(opts.stateDir),
51
+ logsDir: str(opts.logsDir),
52
+ extensionDir: str(opts.extensionDir),
53
+ chromePath: str(opts.chrome),
54
+ routeMode: str(opts.routeMode),
55
+ };
35
56
  }
36
- /** 轮询 rpcPort,直到连不上(browserd 已退)或超时。返回 true 表示已退出。 */
57
+ /** 轮询 rpcPort,直到连不上(browserd 已退)或超时。返回 true 表示已退出。 */
37
58
  async function waitForExit(rpcPort, timeoutMs) {
38
59
  const deadline = Date.now() + timeoutMs;
39
60
  while (Date.now() < deadline) {
@@ -41,7 +62,7 @@ async function waitForExit(rpcPort, timeoutMs) {
41
62
  await fetch(`http://127.0.0.1:${rpcPort}/health`, {
42
63
  signal: AbortSignal.timeout(1000),
43
64
  });
44
- // 还活着,继续等
65
+ // 还活着,继续等
45
66
  }
46
67
  catch {
47
68
  return true; // 连不上 = 已退
@@ -50,72 +71,210 @@ async function waitForExit(rpcPort, timeoutMs) {
50
71
  }
51
72
  return false;
52
73
  }
74
+ /** 友好处理 NotInitializedError / InstanceNotFoundError,其它原样抛。 */
75
+ function handleConfigError(e) {
76
+ if (e instanceof NotInitializedError || e instanceof InstanceNotFoundError) {
77
+ console.error(`\n[mooncat-browser] ${e.message}`);
78
+ process.exit(1);
79
+ }
80
+ throw e;
81
+ }
53
82
  async function run() {
54
83
  const program = new Command();
55
84
  program
56
85
  .name("mooncat-browser")
57
- .description("浏览器自动化工具包:可独立启动的本地服务 + JS/TS client")
86
+ .description("浏览器自动化工具包:可独立启动的本地服务 + JS/TS client (实例化、项目级配置)")
58
87
  .version(getVersion());
88
+ // ─── init ───────────────────────────────────────────────────────────────
89
+ program
90
+ .command("init [name]")
91
+ .description("初始化项目配置 + 数据目录(默认实例名 default)")
92
+ .option("--dir <path>", "数据根目录(默认 .browser)")
93
+ .action((name, opts) => {
94
+ const instName = name || "default";
95
+ const dataRoot = opts.dir || ".browser";
96
+ const cwd = process.cwd();
97
+ // 选 config/browser.json 作为默认配置文件(config/ 目录更直观)
98
+ const cfgDir = join(cwd, "config");
99
+ const cfgPath = join(cfgDir, "browser.json");
100
+ if (existsSync(cfgPath)) {
101
+ console.error(`\n[mooncat-browser] config already exists: ${cfgPath}`);
102
+ console.error(` to add an instance, edit it manually or remove it first`);
103
+ process.exit(1);
104
+ }
105
+ mkdirSync(cfgDir, { recursive: true });
106
+ const entry = {
107
+ ...defaultInstanceEntry(instName),
108
+ profileDir: `${dataRoot}/${instName}/profile`,
109
+ stateDir: `${dataRoot}/${instName}/state`,
110
+ logsDir: `${dataRoot}/${instName}/logs`,
111
+ extensionDir: `${dataRoot}/${instName}/extension`,
112
+ };
113
+ const file = { instances: { [instName]: entry } };
114
+ writeFileSync(cfgPath, JSON.stringify(file, null, 2) + "\n", "utf8");
115
+ // 预创建数据目录(加 .gitkeep,方便进版本库)。extension 目录不预创建——
116
+ // 它由 prepare-extension 命令显式生成(含占位符替换),不该手动建空壳。
117
+ for (const sub of ["profile", "state", "logs"]) {
118
+ const d = join(cwd, dataRoot, instName, sub);
119
+ mkdirSync(d, { recursive: true });
120
+ writeFileSync(join(d, ".gitkeep"), "", "utf8");
121
+ }
122
+ printHeader(`initialized`);
123
+ console.log(` config : ${cfgPath}`);
124
+ console.log(` instance : ${instName}`);
125
+ console.log(` data : ${dataRoot}/${instName}/{profile,state,logs}`);
126
+ console.log(`\n next:`);
127
+ console.log(` mooncat-browser start ${instName} # CDP 路直跑`);
128
+ console.log(` mooncat-browser prepare-extension ${instName} # extension 路需先生成扩展目录`);
129
+ });
130
+ // ─── prepare-extension ──────────────────────────────────────────────────
131
+ program
132
+ .command("prepare-extension <name>")
133
+ .description("为实例生成 unpacked 扩展目录(替换 WS 端口占位符;然后手动 load unpacked 到 profileDir)")
134
+ .action((name, opts) => {
135
+ let cfg;
136
+ try {
137
+ const handle = findProjectConfig(process.cwd());
138
+ cfg = loadInstance(name, handle, optsToOverrides(opts));
139
+ }
140
+ catch (e) {
141
+ handleConfigError(e);
142
+ return;
143
+ }
144
+ printHeader(`prepare extension for instance "${name}"`);
145
+ try {
146
+ const { replacedFiles, metadata, templateDir } = prepareExtension(cfg);
147
+ console.log(` template : ${templateDir}`);
148
+ console.log(` target : ${cfg.extensionDir}`);
149
+ console.log(` extensionPort : ${cfg.extensionPort}`);
150
+ console.log(` hostWsUrl : ${metadata.hostWsUrl}`);
151
+ console.log(` replaced files: ${replacedFiles}`);
152
+ console.log(` build version : ${metadata.sourceBuildVersion}`);
153
+ console.log(`\n next: 手动 load unpacked 到本实例的 Chrome profile`);
154
+ console.log(` 1. mooncat-browser start ${name} --route-mode extension`);
155
+ console.log(` 2. Chrome -> chrome://extensions -> 开发者模式 -> 加载已解压的扩展程序`);
156
+ console.log(` 3. 选择目录: ${cfg.extensionDir}`);
157
+ console.log(` 4. 重启浏览器(close + open)走 extension 路`);
158
+ }
159
+ catch (e) {
160
+ console.error(`\n [ERROR] prepare failed: ${e.message}`);
161
+ process.exit(1);
162
+ }
163
+ });
59
164
  // ─── start ──────────────────────────────────────────────────────────────
60
165
  program
61
- .command("start")
62
- .description("启动 browser 服务(wrapper + browserd 常驻)")
63
- .option("-p, --port <port>", "browserd RPC 端口(client 连这里,默认 17322)", (v) => Number(v))
166
+ .command("start <name>")
167
+ .description("启动实例(wrapper + browserd 常驻 + Chrome)")
168
+ .option("-p, --port <port>", "高级覆盖:browserd RPC 端口", (v) => Number(v))
64
169
  .option("--rpc-port <port>", "同 --port", (v) => Number(v))
65
- .option("--health-port <port>", "wrapper health 端口(默认 17440)", (v) => Number(v))
66
- .option("--profile <path>", "Chrome user-data-dir(默认 %LOCALAPPDATA%\\mooncat-browser\\profile)")
67
- .option("--chrome <path>", "Chrome 可执行文件路径(不传则自动探测)")
68
- .action(async (opts) => {
69
- const cfg = resolveConfig({
70
- port: opts.port ?? opts.rpcPort,
71
- healthPort: opts.healthPort,
72
- profile: opts.profile,
73
- chromePath: opts.chrome,
74
- });
75
- printHeader(`starting service`);
76
- console.log(` rpc port : ${cfg.rpcPort} (clients connect here)`);
77
- console.log(` health port : ${cfg.healthPort}`);
78
- console.log(` profile : ${cfg.profile}`);
79
- console.log(` chrome : ${cfg.chromePath || "(auto-detect)"}`);
80
- console.log(` logs : ${cfg.logsDir}`);
81
- console.log(` browserd : ${browserdScriptPath()}`);
170
+ .option("--health-port <port>", "高级覆盖:wrapper health 端口", (v) => Number(v))
171
+ .option("--extension-port <port>", "高级覆盖:extension WS 端口(第一版不消费)", (v) => Number(v))
172
+ .option("--profile <path>", "高级覆盖:Chrome user-data-dir")
173
+ .option("--state-dir <path>", "高级覆盖:wrapper/browserd 状态目录")
174
+ .option("--logs-dir <path>", "高级覆盖:日志目录")
175
+ .option("--chrome <path>", "高级覆盖:Chrome 可执行文件路径")
176
+ .option("--route-mode <mode>", "高级覆盖:路由模式(auto|cdp|extension)")
177
+ .option("--temp", "临时实例(系统 temp,退出清理,不读项目配置)")
178
+ .action(async (name, opts) => {
179
+ let cfg;
180
+ let cleanup = null;
181
+ try {
182
+ if (opts.temp) {
183
+ const t = tempInstance(name, optsToOverrides(opts));
184
+ cfg = t.cfg;
185
+ cleanup = t.cleanup;
186
+ }
187
+ else {
188
+ const handle = findProjectConfig(process.cwd());
189
+ cfg = loadInstance(name, handle, optsToOverrides(opts));
190
+ }
191
+ }
192
+ catch (e) {
193
+ handleConfigError(e);
194
+ return;
195
+ }
196
+ printHeader(`starting instance "${cfg.name}"`);
197
+ console.log(` rpc port : ${cfg.rpcPort} (clients connect here)`);
198
+ console.log(` health port : ${cfg.healthPort}`);
199
+ console.log(` extension port: ${cfg.extensionPort} (WS port for WebPlater extension)`);
200
+ console.log(` profile : ${cfg.profileDir}`);
201
+ console.log(` state : ${cfg.stateDir}`);
202
+ console.log(` logs : ${cfg.logsDir}`);
203
+ console.log(` extension dir : ${cfg.extensionDir}`);
204
+ console.log(` chrome : ${cfg.chromePath || "(auto-detect)"}`);
205
+ console.log(` browserd : ${browserdScriptPath()}`);
206
+ if (opts.temp)
207
+ console.log(` mode : TEMP (cleaned on exit)`);
208
+ // route=extension 前置检查:实例 extensionDir 必须先 prepare。
209
+ // route=cdp/auto 不需要(temp 也不需要)。
210
+ const wantExtension = cfg.routeMode === "extension";
211
+ if (wantExtension && !opts.temp) {
212
+ const issue = verifyInstanceExtension(cfg);
213
+ if (issue) {
214
+ console.error(`\n [ERROR] extension 目录未就绪: ${issue}`);
215
+ console.error(` run: mooncat-browser prepare-extension ${cfg.name}`);
216
+ if (cleanup)
217
+ cleanup();
218
+ process.exit(1);
219
+ }
220
+ }
82
221
  try {
83
222
  await startService(cfg);
84
- console.log(`\n service running. Ctrl+C to stop, or: mooncat-browser stop --port ${cfg.rpcPort}`);
223
+ console.log(`\n service running. Ctrl+C to stop, or: mooncat-browser stop ${cfg.name}`);
85
224
  }
86
225
  catch (e) {
226
+ if (cleanup)
227
+ cleanup();
87
228
  console.error(`\n [ERROR] failed to start: ${e.message}`);
88
229
  process.exit(1);
89
230
  }
231
+ // temp 模式:wrapper 退出时清理(SIGINT/SIGTERM 走 stop(),process.exit 前也清)
232
+ if (cleanup) {
233
+ process.on("exit", () => cleanup());
234
+ }
90
235
  });
91
236
  // ─── health ─────────────────────────────────────────────────────────────
92
237
  program
93
- .command("health")
94
- .description("探测 browserd 是否就绪 + 是否已 open")
95
- .option("-p, --port <port>", "browserd RPC 端口(默认 17322)", (v) => Number(v))
96
- .action(async (opts) => {
97
- const client = makeClient(opts.port);
238
+ .command("health <name>")
239
+ .description("探测实例的 browserd 是否就绪 + 是否已 open")
240
+ .action(async (name, opts) => {
241
+ let cfg;
242
+ try {
243
+ const handle = findProjectConfig(process.cwd());
244
+ cfg = loadInstance(name, handle, optsToOverrides(opts));
245
+ }
246
+ catch (e) {
247
+ handleConfigError(e);
248
+ return;
249
+ }
250
+ const client = new BrowserClient({ port: cfg.rpcPort });
98
251
  const h = await client.health();
99
252
  if (!h) {
100
253
  console.error(`\n[mooncat-browser] browserd not reachable at ${client.baseUrl}`);
101
- console.error(` hint: run \`mooncat-browser start\` first`);
254
+ console.error(` hint: run \`mooncat-browser start ${name}\` first`);
102
255
  process.exit(1);
103
256
  }
104
- printHeader(`health @ ${client.baseUrl}`);
257
+ printHeader(`health @ ${client.baseUrl} (instance ${name})`);
105
258
  console.log(JSON.stringify(h, null, 2));
106
259
  });
107
260
  // ─── stop ───────────────────────────────────────────────────────────────
108
261
  program
109
- .command("stop")
110
- .description("graceful 停止服务(关闭 Chrome + 退出 wrapper,不重启)")
111
- .option("-p, --port <port>", "browserd RPC 端口(默认 17322)", (v) => Number(v))
112
- .action(async (opts) => {
113
- const cfg = resolveConfig({ port: opts.port });
114
- const state = readServiceState(cfg.rpcPort);
262
+ .command("stop <name>")
263
+ .description("graceful 停止实例(关闭 Chrome + 退出 wrapper,不重启)")
264
+ .action(async (name, opts) => {
265
+ let cfg;
266
+ try {
267
+ const handle = findProjectConfig(process.cwd());
268
+ cfg = loadInstance(name, handle, optsToOverrides(opts));
269
+ }
270
+ catch (e) {
271
+ handleConfigError(e);
272
+ return;
273
+ }
274
+ const state = readServiceState(cfg);
115
275
  const healthPort = state?.healthPort ?? cfg.healthPort;
116
- printHeader(`stopping service (rpc :${cfg.rpcPort})`);
117
- // 1) 优先走 wrapper /shutdownwrapper 协调 graceful 关闭 + 不重启)
118
- // healthPort 从 start 时持久化的状态文件读,避免 CLI 覆盖不一致。
276
+ printHeader(`stopping instance "${name}" (rpc :${cfg.rpcPort})`);
277
+ // 1) 优先走 wrapper /shutdown(wrapper 协调 graceful 关闭 + 不重启)
119
278
  let viaWrapper = false;
120
279
  try {
121
280
  const resp = await fetch(`http://127.0.0.1:${healthPort}/shutdown`, { method: "POST" });
@@ -125,7 +284,7 @@ async function run() {
125
284
  }
126
285
  }
127
286
  catch {
128
- /* wrapper 不在,回落到直接关 browserd */
287
+ /* wrapper 不在,回落到直接关 browserd */
129
288
  }
130
289
  // 2) wrapper 不在 → 直接发 close 给 browserd
131
290
  if (!viaWrapper) {
@@ -138,14 +297,13 @@ async function run() {
138
297
  console.error(` [WARN] direct close failed: ${e.message}`);
139
298
  }
140
299
  }
141
- // 3) 等 browserd 退出(最多 ~12s
300
+ // 3) 等 browserd 退出(最多 ~12s)
142
301
  const gone = await waitForExit(cfg.rpcPort, 12000);
143
302
  console.log(` browserd ${gone ? "stopped" : "still alive (may be restarting or stuck)"}`);
144
303
  // 4) 清理可能残留的状态文件
145
304
  try {
146
- if (existsSync(serviceStatePath(cfg.rpcPort))) {
147
- const { unlinkSync } = await import("node:fs");
148
- unlinkSync(serviceStatePath(cfg.rpcPort));
305
+ if (existsSync(serviceStatePath(cfg))) {
306
+ unlinkSyncSafe(serviceStatePath(cfg));
149
307
  console.log(` removed stale state file`);
150
308
  }
151
309
  }
@@ -154,19 +312,60 @@ async function run() {
154
312
  }
155
313
  console.log(` done. (Chrome closed gracefully, login state preserved)`);
156
314
  });
315
+ // ─── status ─────────────────────────────────────────────────────────────
316
+ program
317
+ .command("status <name>")
318
+ .description("查实例运行状态(走 wrapper /health,含 browserd/chrome pid)")
319
+ .action(async (name, opts) => {
320
+ let cfg;
321
+ try {
322
+ const handle = findProjectConfig(process.cwd());
323
+ cfg = loadInstance(name, handle, optsToOverrides(opts));
324
+ }
325
+ catch (e) {
326
+ handleConfigError(e);
327
+ return;
328
+ }
329
+ const state = readServiceState(cfg);
330
+ const healthPort = state?.healthPort ?? cfg.healthPort;
331
+ printHeader(`status of instance "${name}"`);
332
+ try {
333
+ const resp = await fetch(`http://127.0.0.1:${healthPort}/health`, {
334
+ signal: AbortSignal.timeout(2000),
335
+ });
336
+ if (!resp.ok)
337
+ throw new Error(`HTTP ${resp.status}`);
338
+ const s = (await resp.json());
339
+ console.log(JSON.stringify(s, null, 2));
340
+ }
341
+ catch (e) {
342
+ console.log(` not running (${e.message})`);
343
+ if (state)
344
+ console.log(` (stale state file: pid=${state.pid}, started ${state.startedAt})`);
345
+ process.exit(1);
346
+ }
347
+ });
157
348
  // ─── open ───────────────────────────────────────────────────────────────
158
349
  program
159
- .command("open")
160
- .description("连接已运行的服务,打开/复用浏览器并导航到 URL")
350
+ .command("open <name>")
351
+ .description("连接已运行实例,打开/复用浏览器并导航到 URL")
161
352
  .requiredOption("-u, --url <url>", "要打开的 URL")
162
- .option("-p, --port <port>", "browserd RPC 端口(默认 17322)", (v) => Number(v))
163
- .option("--headless", "无头模式(仅 CDP 路生效)")
164
- .action(async (opts) => {
165
- const client = makeClient(opts.port);
353
+ .option("--headless", "无头模式( CDP 路生效)")
354
+ .action(async (name, opts) => {
355
+ let cfg;
356
+ try {
357
+ const handle = findProjectConfig(process.cwd());
358
+ cfg = loadInstance(name, handle, optsToOverrides(opts));
359
+ }
360
+ catch (e) {
361
+ handleConfigError(e);
362
+ return;
363
+ }
364
+ const client = new BrowserClient({ port: cfg.rpcPort });
166
365
  const h = await client.health();
167
366
  if (!h) {
168
367
  console.error(`\n[mooncat-browser] browserd not reachable at ${client.baseUrl}`);
169
- console.error(` hint: run \`mooncat-browser start\` first`);
368
+ console.error(` hint: run \`mooncat-browser start ${name}\` first`);
170
369
  process.exit(1);
171
370
  }
172
371
  if (!h.open && !h.browserOpen) {
@@ -175,9 +374,48 @@ async function run() {
175
374
  }
176
375
  const tab = await client.newTab({ url: opts.url });
177
376
  printHeader(`opened`);
178
- console.log(` url : ${opts.url}`);
179
- console.log(` pageHandle : ${JSON.stringify(tab.pageHandle)}`);
180
- console.log(` reused : ${tab.reused ?? false}`);
377
+ console.log(` instance : ${name}`);
378
+ console.log(` url : ${opts.url}`);
379
+ console.log(` pageHandle : ${JSON.stringify(tab.pageHandle)}`);
380
+ console.log(` reused : ${tab.reused ?? false}`);
381
+ });
382
+ // ─── list ───────────────────────────────────────────────────────────────
383
+ program
384
+ .command("list")
385
+ .description("列出项目配置里所有实例 + 运行状态")
386
+ .action(async () => {
387
+ let handle;
388
+ try {
389
+ handle = findProjectConfig(process.cwd());
390
+ }
391
+ catch (e) {
392
+ handleConfigError(e);
393
+ return;
394
+ }
395
+ const names = listInstanceNames(handle);
396
+ printHeader(`instances in ${handle.configPath}`);
397
+ if (!names.length) {
398
+ console.log(` (no instances defined)`);
399
+ return;
400
+ }
401
+ for (const n of names) {
402
+ const cfg = loadInstance(n, handle);
403
+ const state = readServiceState(cfg);
404
+ let running = false;
405
+ if (state) {
406
+ try {
407
+ const resp = await fetch(`http://127.0.0.1:${state.healthPort}/health`, {
408
+ signal: AbortSignal.timeout(1000),
409
+ });
410
+ running = resp.ok;
411
+ }
412
+ catch {
413
+ running = false;
414
+ }
415
+ }
416
+ const flag = running ? "running" : state ? "stale" : "stopped";
417
+ console.log(` ${n.padEnd(16)} rpc:${cfg.rpcPort} health:${cfg.healthPort} [${flag}]`);
418
+ }
181
419
  });
182
420
  // ─── install-extension ──────────────────────────────────────────────────
183
421
  program
@@ -196,15 +434,16 @@ async function run() {
196
434
  console.log(` 1. enable "Developer mode" (top right)`);
197
435
  console.log(` 2. click "Load unpacked"`);
198
436
  console.log(` 3. select the directory above`);
199
- console.log(`\n 装扩展后,重启浏览器(close + open)才会切到 extension 路由。`);
437
+ console.log(`\n 装扩展后,重启浏览器(close + open)才会切到 extension 路由。`);
438
+ console.log(` 注意:第一版 extension 路是单实例(WS 端口固定)。多实例请走 CDP 路。`);
200
439
  });
201
440
  // ─── skills ─────────────────────────────────────────────────────────────
202
441
  program
203
442
  .command("skills")
204
- .description("安装/更新内置 skills ~/.agents/skills(覆盖同名,幂等可重复执行)")
205
- .option("-s, --skill <name>", "只安装指定 skill(默认全部)")
206
- .option("-t, --target <dir>", "自定义目标目录(默认 ~/.agents/skills")
207
- .option("--list", "只列出包内的 skills,不拷贝")
443
+ .description("安装/更新内置 skills 到项目本地 .agents/skills(覆盖同名,幂等可重复执行)")
444
+ .option("-s, --skill <name>", "只安装指定 skill(默认全部)")
445
+ .option("-t, --target <dir>", "自定义目标目录(默认 .agents/skills)")
446
+ .option("--list", "只列出包内的 skills,不拷贝")
208
447
  .action((opts) => {
209
448
  const srcRoot = skillsSourceDir();
210
449
  if (!existsSync(srcRoot)) {
@@ -212,7 +451,6 @@ async function run() {
212
451
  console.error(` hint: 包发布时可能漏了 skills/ 目录`);
213
452
  process.exit(1);
214
453
  }
215
- // 列出源里的 skill 子目录(每个含 SKILL.md)
216
454
  const names = readdirSync(srcRoot, { withFileTypes: true })
217
455
  .filter((d) => d.isDirectory())
218
456
  .filter((d) => existsSync(join(srcRoot, d.name, "SKILL.md")))
@@ -236,7 +474,6 @@ async function run() {
236
474
  for (const n of requested) {
237
475
  const src = join(srcRoot, n);
238
476
  const dest = join(destRoot, n);
239
- // 先清空目标 skill 目录再拷贝,保证与源完全一致(删除源里已移除的旧文件,如重命名后的残留)
240
477
  rmSync(dest, { recursive: true, force: true });
241
478
  cpSync(src, dest, { recursive: true, force: true });
242
479
  console.log(` [ok] ${n} -> ${dest}`);
@@ -245,17 +482,25 @@ async function run() {
245
482
  });
246
483
  await program.parseAsync(process.argv);
247
484
  }
248
- /** 包内 skills 源目录:dist/cli.js -> ../skills;源码运行 -> ../../skills。 */
485
+ /** 安全 unlink(独立函数,方便 stop import 前已可用)。 */
486
+ function unlinkSyncSafe(p) {
487
+ try {
488
+ rmSync(p, { force: true });
489
+ }
490
+ catch {
491
+ /* ignore */
492
+ }
493
+ }
494
+ /** 包内 skills 源目录:dist/cli.js -> ../skills;源码运行 -> ../../skills。 */
249
495
  function skillsSourceDir() {
250
496
  return process.env.MOONCAT_BROWSER_SKILLS_SRC || join(__dirname, "..", "skills");
251
497
  }
252
- /** skills 安装默认目标:~/.agents/skills(跨平台 homedir())。 */
498
+ /** skills 安装默认目标:项目本地 .agents/skills(cwd )
499
+ * 与 mooncat-browser "项目级、不写全局" 的定位一致——skills 跟着项目走,不污染全局。 */
253
500
  function defaultSkillsTarget() {
254
- return join(homedir(), ".agents", "skills");
501
+ return join(process.cwd(), ".agents", "skills");
255
502
  }
256
503
  function getVersion() {
257
- // 编译后 dist/cli.js 读 ../package.json;源码运行时读 ../../package.json
258
- // 统一用相对包根查找(容忍 dist/ 与 src/ 两种位置)
259
504
  const candidates = [
260
505
  join(__dirname, "..", "package.json"),
261
506
  join(__dirname, "..", "..", "package.json"),
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}