mooncat-browser 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +213 -0
- package/browser-op/backend/browserd.cjs +1004 -0
- package/browser-op/backend/rpc-client.cjs +64 -0
- package/browser-op/backend/state.cjs +51 -0
- package/browser-op/cdp/capture-inject.js +426 -0
- package/browser-op/cdp/capture-inject.ts +426 -0
- package/browser-op/cdp/capture-service.cjs +172 -0
- package/browser-op/cdp/chrome-launcher.cjs +370 -0
- package/browser-op/cdp/chrome-path.cjs +57 -0
- package/browser-op/cdp/state.cjs +89 -0
- package/browser-op/extension/extension-detect.cjs +228 -0
- package/browser-op/extension/server.cjs +197 -0
- package/browser-op/extension/service.cjs +228 -0
- package/browser-op/extension/state.cjs +78 -0
- package/browser-op/index.cjs +389 -0
- package/browser-op/package.json +17 -0
- package/browser-op/py/behavior.py +138 -0
- package/browser-op/py/browser.py +340 -0
- package/browser-op/py/captcha.py +115 -0
- package/browser-op/py/crawler.py +125 -0
- package/browser-op/py/examples/01_open_and_probe.py +48 -0
- package/browser-op/py/examples/02_reuse_and_probe.py +66 -0
- package/browser-op/py/examples/03_interact.py +66 -0
- package/browser-op/py/find.py +150 -0
- package/browser-op/py/honeypot.py +73 -0
- package/browser-op/py/humanize.py +392 -0
- package/browser-op/py/image.py +186 -0
- package/browser-op/py/interact.py +193 -0
- package/browser-op/py/markdown.py +38 -0
- package/browser-op/py/pyproject.toml +32 -0
- package/browser-op/py/ready.py +208 -0
- package/browser-op/py/scroll.py +180 -0
- package/browser-op/py/upload.py +103 -0
- package/browser-op/py/visual_target.py +47 -0
- package/browser-op/py/visualize.py +91 -0
- package/browser-op/state.cjs +63 -0
- package/browser-op/web/behavior.js +153 -0
- package/browser-op/web/browser.js +231 -0
- package/browser-op/web/captcha.js +85 -0
- package/browser-op/web/crawler.js +109 -0
- package/browser-op/web/find.js +147 -0
- package/browser-op/web/honeypot.js +68 -0
- package/browser-op/web/humanize.js +522 -0
- package/browser-op/web/image.js +177 -0
- package/browser-op/web/interact.js +169 -0
- package/browser-op/web/markdown.js +80 -0
- package/browser-op/web/ready.js +295 -0
- package/browser-op/web/scroll.js +167 -0
- package/browser-op/web/upload.js +116 -0
- package/browser-op/web/visual-runtime.inject.cjs +6 -0
- package/browser-op/webplater/.env.example +7 -0
- package/browser-op/webplater/ARCHITECTURE.md +102 -0
- package/browser-op/webplater/dist/chrome-mv3/assets/popup-BUZEUmsx.css +1 -0
- package/browser-op/webplater/dist/chrome-mv3/background.js +2 -0
- package/browser-op/webplater/dist/chrome-mv3/capture.js +310 -0
- package/browser-op/webplater/dist/chrome-mv3/chunks/_virtual_wxt-html-plugins-DPbbfBKe.js +1 -0
- package/browser-op/webplater/dist/chrome-mv3/chunks/offscreen-CFXYw9Mo.js +1 -0
- package/browser-op/webplater/dist/chrome-mv3/chunks/popup-C-lpxZZO.js +1 -0
- package/browser-op/webplater/dist/chrome-mv3/content-scripts/content.js +7 -0
- package/browser-op/webplater/dist/chrome-mv3/manifest.json +1 -0
- package/browser-op/webplater/dist/chrome-mv3/offscreen.html +16 -0
- package/browser-op/webplater/dist/chrome-mv3/popup.html +31 -0
- package/browser-op/webplater/entrypoints/background.ts +938 -0
- package/browser-op/webplater/entrypoints/content.ts +1150 -0
- package/browser-op/webplater/entrypoints/offscreen/index.html +15 -0
- package/browser-op/webplater/entrypoints/offscreen/main.ts +161 -0
- package/browser-op/webplater/entrypoints/popup/index.html +29 -0
- package/browser-op/webplater/entrypoints/popup/main.ts +61 -0
- package/browser-op/webplater/entrypoints/popup/style.css +100 -0
- package/browser-op/webplater/lib/snapshot.ts +352 -0
- package/browser-op/webplater/package.json +29 -0
- package/browser-op/webplater/pnpm-lock.yaml +3411 -0
- package/browser-op/webplater/public/capture.js +310 -0
- package/browser-op/webplater/scripts/publish-extension.mjs +176 -0
- package/browser-op/webplater/tsconfig.json +19 -0
- package/browser-op/webplater/wxt.config.ts +34 -0
- package/dist/actions.md +102 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +278 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +94 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +277 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +61 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +119 -0
- package/dist/config.js.map +1 -0
- package/dist/protocol.d.ts +195 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +11 -0
- package/dist/protocol.js.map +1 -0
- package/dist/server.d.ts +66 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +259 -0
- package/dist/server.js.map +1 -0
- package/package.json +78 -0
- package/schemas/browser.clearCookies.schema.json +13 -0
- package/schemas/browser.close.schema.json +9 -0
- package/schemas/browser.getCookies.schema.json +13 -0
- package/schemas/browser.getDownload.schema.json +15 -0
- package/schemas/browser.health.schema.json +9 -0
- package/schemas/browser.listDownloads.schema.json +16 -0
- package/schemas/browser.listTabs.schema.json +9 -0
- package/schemas/browser.newTab.schema.json +15 -0
- package/schemas/browser.open.schema.json +15 -0
- package/schemas/browser.operate.schema.json +15 -0
- package/schemas/browser.reuseTab.schema.json +15 -0
- package/schemas/browser.setCookies.schema.json +15 -0
- package/schemas/browser.waitFor.schema.json +15 -0
- package/schemas/browser.waitForDownload.schema.json +15 -0
- package/skills/browser/SKILL.md +110 -0
- package/skills/browser/references/collect.md +163 -0
- package/skills/browser/references/high-risk.md +161 -0
- package/skills/browser/references/operate-actions.md +92 -0
- package/skills/browser/references/probing.md +302 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
// -*- coding: utf-8 -*-
|
|
2
|
+
// cli.ts — mooncat-browser 命令行入口。
|
|
3
|
+
//
|
|
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]
|
|
11
|
+
//
|
|
12
|
+
// --port 语义 = browserd RPC 端口(client 连这里,默认 17322)。
|
|
13
|
+
// start 还会顺带起一个 wrapper health 端口(--health-port,默认 17440),供 stop/监控用。
|
|
14
|
+
import { Command } from "commander";
|
|
15
|
+
import { createRequire } from "node:module";
|
|
16
|
+
import { resolveConfig } from "./config.js";
|
|
17
|
+
import { BrowserClient } from "./client.js";
|
|
18
|
+
import { startService, readServiceState, serviceStatePath, browserdScriptPath } from "./server.js";
|
|
19
|
+
import { fileURLToPath } from "node:url";
|
|
20
|
+
import { homedir } from "node:os";
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import { cpSync, existsSync, mkdirSync, readdirSync, rmSync } from "node:fs";
|
|
23
|
+
const require = createRequire(import.meta.url);
|
|
24
|
+
const __dirname = fileURLToPath(new URL(".", import.meta.url));
|
|
25
|
+
/** webplater 扩展已构建产物目录(install-extension 指向这里)。 */
|
|
26
|
+
function extensionDistDir() {
|
|
27
|
+
return process.env.MOONCAT_BROWSER_EXTENSION || join(__dirname, "..", "browser-op", "webplater", "dist", "chrome-mv3");
|
|
28
|
+
}
|
|
29
|
+
function printHeader(title) {
|
|
30
|
+
console.log(`\n[mooncat-browser] ${title}`);
|
|
31
|
+
}
|
|
32
|
+
/** 构造 client(按 --port / env / default)。 */
|
|
33
|
+
function makeClient(port) {
|
|
34
|
+
return new BrowserClient({ port });
|
|
35
|
+
}
|
|
36
|
+
/** 轮询 rpcPort,直到连不上(browserd 已退)或超时。返回 true 表示已退出。 */
|
|
37
|
+
async function waitForExit(rpcPort, timeoutMs) {
|
|
38
|
+
const deadline = Date.now() + timeoutMs;
|
|
39
|
+
while (Date.now() < deadline) {
|
|
40
|
+
try {
|
|
41
|
+
await fetch(`http://127.0.0.1:${rpcPort}/health`, {
|
|
42
|
+
signal: AbortSignal.timeout(1000),
|
|
43
|
+
});
|
|
44
|
+
// 还活着,继续等
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return true; // 连不上 = 已退
|
|
48
|
+
}
|
|
49
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
async function run() {
|
|
54
|
+
const program = new Command();
|
|
55
|
+
program
|
|
56
|
+
.name("mooncat-browser")
|
|
57
|
+
.description("浏览器自动化工具包:可独立启动的本地服务 + JS/TS client")
|
|
58
|
+
.version(getVersion());
|
|
59
|
+
// ─── start ──────────────────────────────────────────────────────────────
|
|
60
|
+
program
|
|
61
|
+
.command("start")
|
|
62
|
+
.description("启动 browser 服务(wrapper + browserd 常驻)")
|
|
63
|
+
.option("-p, --port <port>", "browserd RPC 端口(client 连这里,默认 17322)", (v) => Number(v))
|
|
64
|
+
.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()}`);
|
|
82
|
+
try {
|
|
83
|
+
await startService(cfg);
|
|
84
|
+
console.log(`\n service running. Ctrl+C to stop, or: mooncat-browser stop --port ${cfg.rpcPort}`);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
console.error(`\n [ERROR] failed to start: ${e.message}`);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// ─── health ─────────────────────────────────────────────────────────────
|
|
92
|
+
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);
|
|
98
|
+
const h = await client.health();
|
|
99
|
+
if (!h) {
|
|
100
|
+
console.error(`\n[mooncat-browser] browserd not reachable at ${client.baseUrl}`);
|
|
101
|
+
console.error(` hint: run \`mooncat-browser start\` first`);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
printHeader(`health @ ${client.baseUrl}`);
|
|
105
|
+
console.log(JSON.stringify(h, null, 2));
|
|
106
|
+
});
|
|
107
|
+
// ─── stop ───────────────────────────────────────────────────────────────
|
|
108
|
+
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);
|
|
115
|
+
const healthPort = state?.healthPort ?? cfg.healthPort;
|
|
116
|
+
printHeader(`stopping service (rpc :${cfg.rpcPort})`);
|
|
117
|
+
// 1) 优先走 wrapper /shutdown(wrapper 协调 graceful 关闭 + 不重启)
|
|
118
|
+
// healthPort 从 start 时持久化的状态文件读,避免 CLI 覆盖不一致。
|
|
119
|
+
let viaWrapper = false;
|
|
120
|
+
try {
|
|
121
|
+
const resp = await fetch(`http://127.0.0.1:${healthPort}/shutdown`, { method: "POST" });
|
|
122
|
+
if (resp.ok) {
|
|
123
|
+
viaWrapper = true;
|
|
124
|
+
console.log(` shutdown sent to wrapper (pid=${state?.pid ?? "?"}, health :${healthPort})`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
/* wrapper 不在,回落到直接关 browserd */
|
|
129
|
+
}
|
|
130
|
+
// 2) wrapper 不在 → 直接发 close 给 browserd
|
|
131
|
+
if (!viaWrapper) {
|
|
132
|
+
try {
|
|
133
|
+
const client = new BrowserClient({ port: cfg.rpcPort });
|
|
134
|
+
await client.close();
|
|
135
|
+
console.log(` close sent directly to browserd (wrapper not running)`);
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
console.error(` [WARN] direct close failed: ${e.message}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// 3) 等 browserd 退出(最多 ~12s)
|
|
142
|
+
const gone = await waitForExit(cfg.rpcPort, 12000);
|
|
143
|
+
console.log(` browserd ${gone ? "stopped" : "still alive (may be restarting or stuck)"}`);
|
|
144
|
+
// 4) 清理可能残留的状态文件
|
|
145
|
+
try {
|
|
146
|
+
if (existsSync(serviceStatePath(cfg.rpcPort))) {
|
|
147
|
+
const { unlinkSync } = await import("node:fs");
|
|
148
|
+
unlinkSync(serviceStatePath(cfg.rpcPort));
|
|
149
|
+
console.log(` removed stale state file`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
/* ignore */
|
|
154
|
+
}
|
|
155
|
+
console.log(` done. (Chrome closed gracefully, login state preserved)`);
|
|
156
|
+
});
|
|
157
|
+
// ─── open ───────────────────────────────────────────────────────────────
|
|
158
|
+
program
|
|
159
|
+
.command("open")
|
|
160
|
+
.description("连接已运行的服务,打开/复用浏览器并导航到 URL")
|
|
161
|
+
.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);
|
|
166
|
+
const h = await client.health();
|
|
167
|
+
if (!h) {
|
|
168
|
+
console.error(`\n[mooncat-browser] browserd not reachable at ${client.baseUrl}`);
|
|
169
|
+
console.error(` hint: run \`mooncat-browser start\` first`);
|
|
170
|
+
process.exit(1);
|
|
171
|
+
}
|
|
172
|
+
if (!h.open && !h.browserOpen) {
|
|
173
|
+
await client.open({ headless: !!opts.headless });
|
|
174
|
+
console.log(` browser opened`);
|
|
175
|
+
}
|
|
176
|
+
const tab = await client.newTab({ url: opts.url });
|
|
177
|
+
printHeader(`opened`);
|
|
178
|
+
console.log(` url : ${opts.url}`);
|
|
179
|
+
console.log(` pageHandle : ${JSON.stringify(tab.pageHandle)}`);
|
|
180
|
+
console.log(` reused : ${tab.reused ?? false}`);
|
|
181
|
+
});
|
|
182
|
+
// ─── install-extension ──────────────────────────────────────────────────
|
|
183
|
+
program
|
|
184
|
+
.command("install-extension")
|
|
185
|
+
.description("打印 WebPlater 扩展路径 + Load unpacked 指引")
|
|
186
|
+
.action(() => {
|
|
187
|
+
const dir = extensionDistDir();
|
|
188
|
+
printHeader(`install WebPlater extension`);
|
|
189
|
+
if (!existsSync(dir)) {
|
|
190
|
+
console.error(` extension not built at: ${dir}`);
|
|
191
|
+
console.error(` rebuild with: \`npm run build:extension\` (requires pnpm + network)`);
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
console.log(` extension dir : ${dir}`);
|
|
195
|
+
console.log(`\n Chrome -> chrome://extensions`);
|
|
196
|
+
console.log(` 1. enable "Developer mode" (top right)`);
|
|
197
|
+
console.log(` 2. click "Load unpacked"`);
|
|
198
|
+
console.log(` 3. select the directory above`);
|
|
199
|
+
console.log(`\n 装扩展后,重启浏览器(close + open)才会切到 extension 路由。`);
|
|
200
|
+
});
|
|
201
|
+
// ─── skills ─────────────────────────────────────────────────────────────
|
|
202
|
+
program
|
|
203
|
+
.command("skills")
|
|
204
|
+
.description("安装/更新内置 skills 到 ~/.agents/skills(覆盖同名,幂等可重复执行)")
|
|
205
|
+
.option("-s, --skill <name>", "只安装指定 skill(默认全部)")
|
|
206
|
+
.option("-t, --target <dir>", "自定义目标目录(默认 ~/.agents/skills)")
|
|
207
|
+
.option("--list", "只列出包内的 skills,不拷贝")
|
|
208
|
+
.action((opts) => {
|
|
209
|
+
const srcRoot = skillsSourceDir();
|
|
210
|
+
if (!existsSync(srcRoot)) {
|
|
211
|
+
console.error(`\n[mooncat-browser] skills 源不存在: ${srcRoot}`);
|
|
212
|
+
console.error(` hint: 包发布时可能漏了 skills/ 目录`);
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
// 列出源里的 skill 子目录(每个含 SKILL.md)
|
|
216
|
+
const names = readdirSync(srcRoot, { withFileTypes: true })
|
|
217
|
+
.filter((d) => d.isDirectory())
|
|
218
|
+
.filter((d) => existsSync(join(srcRoot, d.name, "SKILL.md")))
|
|
219
|
+
.map((d) => d.name);
|
|
220
|
+
if (opts.list) {
|
|
221
|
+
printHeader(`available skills (${srcRoot})`);
|
|
222
|
+
for (const n of names)
|
|
223
|
+
console.log(` ${n}`);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const requested = opts.skill ? [opts.skill] : names;
|
|
227
|
+
const missing = requested.filter((n) => !names.includes(n));
|
|
228
|
+
if (missing.length) {
|
|
229
|
+
console.error(`\n[mooncat-browser] skill 不存在: ${missing.join(", ")}`);
|
|
230
|
+
console.error(` 可用: ${names.join(", ") || "(无)"}`);
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
const destRoot = opts.target || defaultSkillsTarget();
|
|
234
|
+
mkdirSync(destRoot, { recursive: true });
|
|
235
|
+
printHeader(`install skills -> ${destRoot}`);
|
|
236
|
+
for (const n of requested) {
|
|
237
|
+
const src = join(srcRoot, n);
|
|
238
|
+
const dest = join(destRoot, n);
|
|
239
|
+
// 先清空目标 skill 目录再拷贝,保证与源完全一致(删除源里已移除的旧文件,如重命名后的残留)
|
|
240
|
+
rmSync(dest, { recursive: true, force: true });
|
|
241
|
+
cpSync(src, dest, { recursive: true, force: true });
|
|
242
|
+
console.log(` [ok] ${n} -> ${dest}`);
|
|
243
|
+
}
|
|
244
|
+
console.log(`\n ${requested.length} skill(s) installed. 重启 agent 后生效。`);
|
|
245
|
+
});
|
|
246
|
+
await program.parseAsync(process.argv);
|
|
247
|
+
}
|
|
248
|
+
/** 包内 skills 源目录:dist/cli.js -> ../skills;源码运行 -> ../../skills。 */
|
|
249
|
+
function skillsSourceDir() {
|
|
250
|
+
return process.env.MOONCAT_BROWSER_SKILLS_SRC || join(__dirname, "..", "skills");
|
|
251
|
+
}
|
|
252
|
+
/** skills 安装默认目标:~/.agents/skills(跨平台 homedir())。 */
|
|
253
|
+
function defaultSkillsTarget() {
|
|
254
|
+
return join(homedir(), ".agents", "skills");
|
|
255
|
+
}
|
|
256
|
+
function getVersion() {
|
|
257
|
+
// 编译后 dist/cli.js 读 ../package.json;源码运行时读 ../../package.json
|
|
258
|
+
// 统一用相对包根查找(容忍 dist/ 与 src/ 两种位置)
|
|
259
|
+
const candidates = [
|
|
260
|
+
join(__dirname, "..", "package.json"),
|
|
261
|
+
join(__dirname, "..", "..", "package.json"),
|
|
262
|
+
];
|
|
263
|
+
for (const p of candidates) {
|
|
264
|
+
try {
|
|
265
|
+
if (existsSync(p))
|
|
266
|
+
return require(p).version || "0.0.0";
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
/* ignore */
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return "0.0.0";
|
|
273
|
+
}
|
|
274
|
+
run().catch((e) => {
|
|
275
|
+
console.error(`[mooncat-browser] fatal: ${e.message}`);
|
|
276
|
+
process.exit(1);
|
|
277
|
+
});
|
|
278
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { BrowserHandle, BrowserNewTabOptions, BrowserOpenOptions, BrowserOperateParams, CookieFilter, CookieSet, DownloadSummary, ReuseTabOptions, TabInfo, WaitForDownloadOptions, WaitForOptions, WaitForResult } from "./protocol.js";
|
|
2
|
+
/** BrowserClient 构造选项。 */
|
|
3
|
+
export interface BrowserClientOptions {
|
|
4
|
+
/**
|
|
5
|
+
* browserd 的 baseUrl,如 "http://127.0.0.1:17322"。
|
|
6
|
+
* 与 port 二选一;baseUrl 优先。
|
|
7
|
+
*/
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
/** browserd RPC 端口(仅 host=127.0.0.1)。与 baseUrl 二选一。 */
|
|
10
|
+
port?: number;
|
|
11
|
+
/** 自定义 host(默认 127.0.0.1)。一般不改。 */
|
|
12
|
+
host?: string;
|
|
13
|
+
/** 默认 RPC 超时(毫秒)。默认 60000。单个方法可覆盖。 */
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 浏览器自动化 client。
|
|
18
|
+
*
|
|
19
|
+
* 通过 HTTP JSON-RPC 连接 browserd,控制宿主 Chrome。
|
|
20
|
+
* 不依赖 workspace / mooncat 发行体 / PM2 —— 只是一个 HTTP client。
|
|
21
|
+
*/
|
|
22
|
+
export declare class BrowserClient {
|
|
23
|
+
private readonly host;
|
|
24
|
+
private readonly port;
|
|
25
|
+
private readonly defaultTimeoutMs;
|
|
26
|
+
private reqId;
|
|
27
|
+
constructor(opts?: BrowserClientOptions);
|
|
28
|
+
/** 当前连接的 baseUrl(用于日志/诊断)。 */
|
|
29
|
+
get baseUrl(): string;
|
|
30
|
+
/** 连接探测:browserd 是否活着 + 是否已 open。返回 /health 响应,或 null。 */
|
|
31
|
+
health(timeoutMs?: number): Promise<Record<string, unknown> | null>;
|
|
32
|
+
/** 发一个 JSON-RPC 请求,返回 result 或 throw。 */
|
|
33
|
+
private rpc;
|
|
34
|
+
/** 打开浏览器(宿主 Chrome,双路由自动选择 extension/cdp)。 */
|
|
35
|
+
open(options?: BrowserOpenOptions): Promise<BrowserHandle>;
|
|
36
|
+
/** 新建标签页。默认同 host 复用已有 tab(导航+激活),force:true 强制开新 tab。 */
|
|
37
|
+
newTab(options?: BrowserNewTabOptions): Promise<TabInfo>;
|
|
38
|
+
/** 列出所有标签页(每项 pageHandle 必有 pageId)。 */
|
|
39
|
+
listTabs(): Promise<TabInfo[]>;
|
|
40
|
+
/** 在页面上执行动作(click/fill/goto/snapshot/evaluate/...,40+ 个 action)。 */
|
|
41
|
+
operate(params: BrowserOperateParams): Promise<unknown>;
|
|
42
|
+
/** 获取 cookies。 */
|
|
43
|
+
getCookies(filter?: CookieFilter): Promise<{
|
|
44
|
+
cookies: CookieSet[];
|
|
45
|
+
}>;
|
|
46
|
+
/** 设置 cookies。 */
|
|
47
|
+
setCookies(cookies: CookieSet[]): Promise<{
|
|
48
|
+
ok: boolean;
|
|
49
|
+
count: number;
|
|
50
|
+
}>;
|
|
51
|
+
/** 清除 cookies。 */
|
|
52
|
+
clearCookies(filter?: CookieFilter): Promise<unknown>;
|
|
53
|
+
/** 关闭浏览器(graceful,保留登录态)。 */
|
|
54
|
+
close(): Promise<{
|
|
55
|
+
ok: boolean;
|
|
56
|
+
closed: boolean;
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* 复用 tab:按 urlMatch 找已开的 tab,有则切过去复用,无则 newTab(url)。
|
|
60
|
+
* 高危平台频繁重开页面触发风控,已开的 tab 应复用。
|
|
61
|
+
*/
|
|
62
|
+
reuseTab(options: ReuseTabOptions): Promise<TabInfo & {
|
|
63
|
+
reused: boolean;
|
|
64
|
+
}>;
|
|
65
|
+
/** 列出最近下载(chrome.downloads.search 实时查,默认最近 20 条;仅 extension 模式)。 */
|
|
66
|
+
listDownloads(limit?: number): Promise<{
|
|
67
|
+
downloads: DownloadSummary[];
|
|
68
|
+
}>;
|
|
69
|
+
/** 查单个下载状态(by id;仅 extension 模式)。 */
|
|
70
|
+
getDownload(id: number): Promise<{
|
|
71
|
+
download: DownloadSummary | null;
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* 轮询等下载完成(基于 chrome.downloads 原生状态,不轮询目录)。
|
|
75
|
+
* 点了下载按钮后调用,按 filenameRegex + sinceMs 匹配,等 state=complete。
|
|
76
|
+
* 返回 { download, reason }:reason=complete 成功,timeout 超时。
|
|
77
|
+
*/
|
|
78
|
+
waitForDownload(options: WaitForDownloadOptions): Promise<{
|
|
79
|
+
download: DownloadSummary | null;
|
|
80
|
+
reason: string;
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* 通用等待:DOM 节点(selector)或文本(text)出现。
|
|
84
|
+
* 延迟重试(轮询)+ 刷新重试(检测不到刷新页面重来)+ 连续 maxRefresh 次仍未出现则返回 ok:false。
|
|
85
|
+
* 适用于 SPA 异步加载的元素,比 sleep 固定等待更稳。frameId 指定时在对应 iframe 内检测/刷新。
|
|
86
|
+
*/
|
|
87
|
+
waitFor(options: WaitForOptions): Promise<WaitForResult>;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 默认导出的便捷工厂:等价于 `new BrowserClient(opts)`。
|
|
91
|
+
* 便于 `import { browser } from "@mooncat/browser"` 后直接用。
|
|
92
|
+
*/
|
|
93
|
+
export declare function createBrowser(opts?: BrowserClientOptions): BrowserClient;
|
|
94
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,SAAS,EACT,eAAe,EACf,eAAe,EAEf,OAAO,EACP,sBAAsB,EACtB,cAAc,EACd,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,0BAA0B;AAC1B,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,KAAK,CAAK;gBAEN,IAAI,GAAE,oBAAyB;IAY3C,8BAA8B;IAC9B,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,0DAA0D;IAC1D,MAAM,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IA6BjE,yCAAyC;IACzC,OAAO,CAAC,GAAG;IA6CX,8CAA8C;IACxC,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpE,0DAA0D;IACpD,MAAM,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE,wCAAwC;IAClC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAmBpC,oEAAoE;IAC9D,OAAO,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7D,kBAAkB;IACZ,UAAU,CAAC,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;IAI9E,kBAAkB;IACZ,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAI/E,kBAAkB;IACZ,YAAY,CAAC,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/D,6BAA6B;IACvB,KAAK,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAIxD;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAOhF,oEAAoE;IAC9D,aAAa,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAI1E,qCAAqC;IAC/B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,CAAC;IAI5E;;;;OAIG;IACG,eAAe,CACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC;QAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAQhE;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAsF/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAExE"}
|