bb-browser 0.5.1 → 0.6.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.
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ import "./chunk-D4HDZEJT.js";
3
+
4
+ // packages/cli/src/openclaw-bridge.ts
5
+ import { execFileSync } from "child_process";
6
+ function runOpenClaw(args, timeout) {
7
+ return execFileSync("npx", ["openclaw", "browser", ...args], {
8
+ encoding: "utf-8",
9
+ timeout,
10
+ stdio: ["pipe", "pipe", "pipe"]
11
+ }).trim();
12
+ }
13
+ function ocGetTabs() {
14
+ const raw = runOpenClaw(["tabs", "--json"], 15e3);
15
+ const data = JSON.parse(raw);
16
+ return (data.tabs || []).filter((tab) => tab.type === "page");
17
+ }
18
+ function ocFindTabByDomain(tabs, domain) {
19
+ return tabs.find((tab) => {
20
+ try {
21
+ const hostname = new URL(tab.url).hostname;
22
+ return hostname === domain || hostname.endsWith(`.${domain}`);
23
+ } catch {
24
+ return false;
25
+ }
26
+ });
27
+ }
28
+ function ocOpenTab(url) {
29
+ const raw = runOpenClaw(["open", url, "--json"], 3e4);
30
+ const data = JSON.parse(raw);
31
+ return data.id || data.targetId;
32
+ }
33
+ function ocEvaluate(targetId, fn) {
34
+ const raw = runOpenClaw(["evaluate", "--fn", fn, "--target-id", targetId], 3e4);
35
+ return JSON.parse(raw);
36
+ }
37
+ export {
38
+ ocEvaluate,
39
+ ocFindTabByDomain,
40
+ ocGetTabs,
41
+ ocOpenTab
42
+ };
43
+ //# sourceMappingURL=openclaw-bridge-P3G4KGYM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../packages/cli/src/openclaw-bridge.ts"],"sourcesContent":["import { execFileSync } from \"node:child_process\";\n\nexport interface OCTab {\n targetId: string;\n url: string;\n title: string;\n type: string;\n}\n\nfunction runOpenClaw(args: string[], timeout: number): string {\n return execFileSync(\"npx\", [\"openclaw\", \"browser\", ...args], {\n encoding: \"utf-8\",\n timeout,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n}\n\nexport function ocGetTabs(): OCTab[] {\n const raw = runOpenClaw([\"tabs\", \"--json\"], 15000);\n const data = JSON.parse(raw);\n return (data.tabs || []).filter((tab: OCTab) => tab.type === \"page\");\n}\n\nexport function ocFindTabByDomain(tabs: OCTab[], domain: string): OCTab | undefined {\n return tabs.find((tab) => {\n try {\n const hostname = new URL(tab.url).hostname;\n return hostname === domain || hostname.endsWith(`.${domain}`);\n } catch {\n return false;\n }\n });\n}\n\nexport function ocOpenTab(url: string): string {\n const raw = runOpenClaw([\"open\", url, \"--json\"], 30000);\n const data = JSON.parse(raw);\n return data.id || data.targetId;\n}\n\nexport function ocEvaluate(targetId: string, fn: string): unknown {\n const raw = runOpenClaw([\"evaluate\", \"--fn\", fn, \"--target-id\", targetId], 30000);\n return JSON.parse(raw);\n}\n"],"mappings":";;;;AAAA,SAAS,oBAAoB;AAS7B,SAAS,YAAY,MAAgB,SAAyB;AAC5D,SAAO,aAAa,OAAO,CAAC,YAAY,WAAW,GAAG,IAAI,GAAG;AAAA,IAC3D,UAAU;AAAA,IACV;AAAA,IACA,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,EAChC,CAAC,EAAE,KAAK;AACV;AAEO,SAAS,YAAqB;AACnC,QAAM,MAAM,YAAY,CAAC,QAAQ,QAAQ,GAAG,IAAK;AACjD,QAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,UAAQ,KAAK,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAe,IAAI,SAAS,MAAM;AACrE;AAEO,SAAS,kBAAkB,MAAe,QAAmC;AAClF,SAAO,KAAK,KAAK,CAAC,QAAQ;AACxB,QAAI;AACF,YAAM,WAAW,IAAI,IAAI,IAAI,GAAG,EAAE;AAClC,aAAO,aAAa,UAAU,SAAS,SAAS,IAAI,MAAM,EAAE;AAAA,IAC9D,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEO,SAAS,UAAU,KAAqB;AAC7C,QAAM,MAAM,YAAY,CAAC,QAAQ,KAAK,QAAQ,GAAG,GAAK;AACtD,QAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,SAAO,KAAK,MAAM,KAAK;AACzB;AAEO,SAAS,WAAW,UAAkB,IAAqB;AAChE,QAAM,MAAM,YAAY,CAAC,YAAY,QAAQ,IAAI,eAAe,QAAQ,GAAG,GAAK;AAChF,SAAO,KAAK,MAAM,GAAG;AACvB;","names":[]}
@@ -2,7 +2,6 @@ const DEFAULT_DAEMON_PORT = 19824;
2
2
  const DEFAULT_DAEMON_HOST = "localhost";
3
3
  const DEFAULT_DAEMON_BASE_URL = `http://${DEFAULT_DAEMON_HOST}:${DEFAULT_DAEMON_PORT}`;
4
4
  const SSE_RECONNECT_DELAY = 3e3;
5
- const SSE_MAX_RECONNECT_ATTEMPTS = 5;
6
5
  const STORAGE_KEY = "upstreamUrl";
7
6
  async function getUpstreamUrl() {
8
7
  try {
@@ -60,7 +59,6 @@ class SSEClient {
60
59
  console.log("[SSEClient] Connection aborted");
61
60
  return;
62
61
  }
63
- console.error("[SSEClient] Connection error:", error);
64
62
  this.isConnectedFlag = false;
65
63
  this.reconnect();
66
64
  }
@@ -147,15 +145,8 @@ class SSEClient {
147
145
  * 指数退避重连
148
146
  */
149
147
  reconnect() {
150
- if (this.reconnectAttempts >= SSE_MAX_RECONNECT_ATTEMPTS) {
151
- console.error("[SSEClient] Max reconnection attempts reached");
152
- return;
153
- }
154
148
  this.reconnectAttempts++;
155
- const delay = SSE_RECONNECT_DELAY * Math.pow(2, this.reconnectAttempts - 1);
156
- console.log(
157
- `[SSEClient] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${SSE_MAX_RECONNECT_ATTEMPTS})`
158
- );
149
+ const delay = Math.min(SSE_RECONNECT_DELAY * Math.pow(2, this.reconnectAttempts - 1), 6e4);
159
150
  setTimeout(() => {
160
151
  this.disconnect();
161
152
  this.connect();