@elizaos/plugin-browser 2.0.0-alpha.9 → 2.0.11-beta.7
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/LICENSE +21 -0
- package/README.md +98 -83
- package/auto-enable.ts +24 -0
- package/dist/actions/browser-autofill-login.d.ts +43 -0
- package/dist/actions/browser-autofill-login.d.ts.map +1 -0
- package/dist/actions/browser-autofill-login.js +278 -0
- package/dist/actions/browser-autofill-login.js.map +1 -0
- package/dist/actions/browser.d.ts +11 -0
- package/dist/actions/browser.d.ts.map +1 -0
- package/dist/actions/browser.js +412 -0
- package/dist/actions/browser.js.map +1 -0
- package/dist/actions/manage-browser-bridge.d.ts +34 -0
- package/dist/actions/manage-browser-bridge.d.ts.map +1 -0
- package/dist/actions/manage-browser-bridge.js +572 -0
- package/dist/actions/manage-browser-bridge.js.map +1 -0
- package/dist/bridge-policy.d.ts +10 -0
- package/dist/bridge-policy.d.ts.map +1 -0
- package/dist/bridge-policy.js +37 -0
- package/dist/bridge-policy.js.map +1 -0
- package/dist/bridge-readiness.d.ts +16 -0
- package/dist/bridge-readiness.d.ts.map +1 -0
- package/dist/bridge-readiness.js +82 -0
- package/dist/bridge-readiness.js.map +1 -0
- package/dist/bridge-records.d.ts +9 -0
- package/dist/bridge-records.d.ts.map +1 -0
- package/dist/bridge-records.js +37 -0
- package/dist/bridge-records.js.map +1 -0
- package/dist/browser-capture-hooks.d.ts +9 -0
- package/dist/browser-capture-hooks.d.ts.map +1 -0
- package/dist/browser-capture-hooks.js +15 -0
- package/dist/browser-capture-hooks.js.map +1 -0
- package/dist/browser-service.d.ts +103 -0
- package/dist/browser-service.d.ts.map +1 -0
- package/dist/browser-service.js +186 -0
- package/dist/browser-service.js.map +1 -0
- package/dist/browser-workspace-hooks.d.ts +14 -0
- package/dist/browser-workspace-hooks.d.ts.map +1 -0
- package/dist/browser-workspace-hooks.js +15 -0
- package/dist/browser-workspace-hooks.js.map +1 -0
- package/dist/companion-auth.d.ts +34 -0
- package/dist/companion-auth.d.ts.map +1 -0
- package/dist/companion-auth.js +98 -0
- package/dist/companion-auth.js.map +1 -0
- package/dist/contracts.d.ts +284 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +56 -0
- package/dist/contracts.js.map +1 -0
- package/dist/index.d.ts +30 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +76 -90
- package/dist/index.js.map +1 -1
- package/dist/lifeops-session-contracts.d.ts +46 -0
- package/dist/lifeops-session-contracts.d.ts.map +1 -0
- package/dist/lifeops-session-contracts.js +1 -0
- package/dist/lifeops-session-contracts.js.map +1 -0
- package/dist/message-adapter.d.ts +9 -0
- package/dist/message-adapter.d.ts.map +1 -0
- package/dist/message-adapter.js +104 -0
- package/dist/message-adapter.js.map +1 -0
- package/dist/packaging.d.ts +27 -0
- package/dist/packaging.d.ts.map +1 -0
- package/dist/packaging.js +571 -0
- package/dist/packaging.js.map +1 -0
- package/dist/password-manager-bridge.d.ts +50 -0
- package/dist/password-manager-bridge.d.ts.map +1 -0
- package/dist/password-manager-bridge.js +437 -0
- package/dist/password-manager-bridge.js.map +1 -0
- package/dist/plugin.d.ts +10 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +168 -0
- package/dist/plugin.js.map +1 -0
- package/dist/providers/workspace.d.ts +13 -0
- package/dist/providers/workspace.d.ts.map +1 -0
- package/dist/providers/workspace.js +64 -0
- package/dist/providers/workspace.js.map +1 -0
- package/dist/routes/bridge.d.ts +37 -0
- package/dist/routes/bridge.d.ts.map +1 -0
- package/dist/routes/bridge.js +844 -0
- package/dist/routes/bridge.js.map +1 -0
- package/dist/routes/workspace-account-gate.d.ts +29 -0
- package/dist/routes/workspace-account-gate.d.ts.map +1 -0
- package/dist/routes/workspace-account-gate.js +147 -0
- package/dist/routes/workspace-account-gate.js.map +1 -0
- package/dist/routes/workspace-setup.d.ts +10 -0
- package/dist/routes/workspace-setup.d.ts.map +1 -0
- package/dist/routes/workspace-setup.js +65 -0
- package/dist/routes/workspace-setup.js.map +1 -0
- package/dist/routes/workspace.d.ts +20 -0
- package/dist/routes/workspace.d.ts.map +1 -0
- package/dist/routes/workspace.js +276 -0
- package/dist/routes/workspace.js.map +1 -0
- package/dist/schema.d.ts +2326 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +133 -0
- package/dist/schema.js.map +1 -0
- package/dist/service.d.ts +30 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +5 -0
- package/dist/service.js.map +1 -0
- package/dist/targets/bridge-target.d.ts +31 -0
- package/dist/targets/bridge-target.d.ts.map +1 -0
- package/dist/targets/bridge-target.js +98 -0
- package/dist/targets/bridge-target.js.map +1 -0
- package/dist/targets/stagehand-target.d.ts +3 -0
- package/dist/targets/stagehand-target.d.ts.map +1 -0
- package/dist/targets/stagehand-target.js +187 -0
- package/dist/targets/stagehand-target.js.map +1 -0
- package/dist/workspace/browser-capture.d.ts +41 -0
- package/dist/workspace/browser-capture.d.ts.map +1 -0
- package/dist/workspace/browser-capture.js +159 -0
- package/dist/workspace/browser-capture.js.map +1 -0
- package/dist/workspace/browser-workspace-desktop.d.ts +19 -0
- package/dist/workspace/browser-workspace-desktop.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-desktop.js +1578 -0
- package/dist/workspace/browser-workspace-desktop.js.map +1 -0
- package/dist/workspace/browser-workspace-elements.d.ts +42 -0
- package/dist/workspace/browser-workspace-elements.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-elements.js +547 -0
- package/dist/workspace/browser-workspace-elements.js.map +1 -0
- package/dist/workspace/browser-workspace-forms.d.ts +19 -0
- package/dist/workspace/browser-workspace-forms.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-forms.js +277 -0
- package/dist/workspace/browser-workspace-forms.js.map +1 -0
- package/dist/workspace/browser-workspace-helpers.d.ts +32 -0
- package/dist/workspace/browser-workspace-helpers.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-helpers.js +232 -0
- package/dist/workspace/browser-workspace-helpers.js.map +1 -0
- package/dist/workspace/browser-workspace-jsdom.d.ts +16 -0
- package/dist/workspace/browser-workspace-jsdom.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-jsdom.js +233 -0
- package/dist/workspace/browser-workspace-jsdom.js.map +1 -0
- package/dist/workspace/browser-workspace-network.d.ts +7 -0
- package/dist/workspace/browser-workspace-network.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-network.js +145 -0
- package/dist/workspace/browser-workspace-network.js.map +1 -0
- package/dist/workspace/browser-workspace-snapshots.d.ts +14 -0
- package/dist/workspace/browser-workspace-snapshots.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-snapshots.js +144 -0
- package/dist/workspace/browser-workspace-snapshots.js.map +1 -0
- package/dist/workspace/browser-workspace-state.d.ts +24 -0
- package/dist/workspace/browser-workspace-state.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-state.js +155 -0
- package/dist/workspace/browser-workspace-state.js.map +1 -0
- package/dist/workspace/browser-workspace-types.d.ts +345 -0
- package/dist/workspace/browser-workspace-types.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-types.js +11 -0
- package/dist/workspace/browser-workspace-types.js.map +1 -0
- package/dist/workspace/browser-workspace-web.d.ts +8 -0
- package/dist/workspace/browser-workspace-web.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-web.js +1342 -0
- package/dist/workspace/browser-workspace-web.js.map +1 -0
- package/dist/workspace/browser-workspace.d.ts +39 -0
- package/dist/workspace/browser-workspace.d.ts.map +1 -0
- package/dist/workspace/browser-workspace.js +958 -0
- package/dist/workspace/browser-workspace.js.map +1 -0
- package/dist/workspace/index.d.ts +26 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +3 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace.d.ts +2 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +2 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +71 -110
- package/dist/actions/click.d.ts +0 -3
- package/dist/actions/click.d.ts.map +0 -1
- package/dist/actions/click.js +0 -158
- package/dist/actions/click.js.map +0 -1
- package/dist/actions/extract.d.ts +0 -3
- package/dist/actions/extract.d.ts.map +0 -1
- package/dist/actions/extract.js +0 -168
- package/dist/actions/extract.js.map +0 -1
- package/dist/actions/index.d.ts +0 -7
- package/dist/actions/index.d.ts.map +0 -1
- package/dist/actions/index.js +0 -7
- package/dist/actions/index.js.map +0 -1
- package/dist/actions/navigate.d.ts +0 -3
- package/dist/actions/navigate.d.ts.map +0 -1
- package/dist/actions/navigate.js +0 -187
- package/dist/actions/navigate.js.map +0 -1
- package/dist/actions/screenshot.d.ts +0 -3
- package/dist/actions/screenshot.d.ts.map +0 -1
- package/dist/actions/screenshot.js +0 -167
- package/dist/actions/screenshot.js.map +0 -1
- package/dist/actions/select.d.ts +0 -3
- package/dist/actions/select.d.ts.map +0 -1
- package/dist/actions/select.js +0 -167
- package/dist/actions/select.js.map +0 -1
- package/dist/actions/type.d.ts +0 -3
- package/dist/actions/type.d.ts.map +0 -1
- package/dist/actions/type.js +0 -167
- package/dist/actions/type.js.map +0 -1
- package/dist/cli/index.d.ts +0 -8
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -13
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/register.d.ts +0 -20
- package/dist/cli/register.d.ts.map +0 -1
- package/dist/cli/register.js +0 -403
- package/dist/cli/register.js.map +0 -1
- package/dist/providerRelevance.d.ts +0 -4
- package/dist/providerRelevance.d.ts.map +0 -1
- package/dist/providerRelevance.js +0 -33
- package/dist/providerRelevance.js.map +0 -1
- package/dist/providers/browser-state.d.ts +0 -3
- package/dist/providers/browser-state.d.ts.map +0 -1
- package/dist/providers/browser-state.js +0 -72
- package/dist/providers/browser-state.js.map +0 -1
- package/dist/providers/index.d.ts +0 -2
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -2
- package/dist/providers/index.js.map +0 -1
- package/dist/services/browser-service.d.ts +0 -32
- package/dist/services/browser-service.d.ts.map +0 -1
- package/dist/services/browser-service.js +0 -213
- package/dist/services/browser-service.js.map +0 -1
- package/dist/services/index.d.ts +0 -4
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -4
- package/dist/services/index.js.map +0 -1
- package/dist/services/process-manager.d.ts +0 -24
- package/dist/services/process-manager.d.ts.map +0 -1
- package/dist/services/process-manager.js +0 -270
- package/dist/services/process-manager.js.map +0 -1
- package/dist/services/websocket-client.d.ts +0 -35
- package/dist/services/websocket-client.d.ts.map +0 -1
- package/dist/services/websocket-client.js +0 -221
- package/dist/services/websocket-client.js.map +0 -1
- package/dist/types.d.ts +0 -101
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils/captcha.d.ts +0 -33
- package/dist/utils/captcha.d.ts.map +0 -1
- package/dist/utils/captcha.js +0 -219
- package/dist/utils/captcha.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -37
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -81
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -5
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -26
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js +0 -55
- package/dist/utils/retry.js.map +0 -1
- package/dist/utils/security.d.ts +0 -27
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/utils/security.js +0 -139
- package/dist/utils/security.js.map +0 -1
- package/dist/utils/url.d.ts +0 -12
- package/dist/utils/url.d.ts.map +0 -1
- package/dist/utils/url.js +0 -39
- package/dist/utils/url.js.map +0 -1
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { TLSSocket } from "node:tls";
|
|
2
|
+
import {
|
|
3
|
+
readJsonBody as httpReadJsonBody,
|
|
4
|
+
sendJson as httpSendJson,
|
|
5
|
+
sendJsonError as httpSendJsonError,
|
|
6
|
+
promoteSubactionsToActions,
|
|
7
|
+
resolveCanonicalOwnerId
|
|
8
|
+
} from "@elizaos/core";
|
|
9
|
+
import { browserAction } from "./actions/browser.js";
|
|
10
|
+
import { manageBrowserBridgeAction } from "./actions/manage-browser-bridge.js";
|
|
11
|
+
import { BrowserService } from "./browser-service.js";
|
|
12
|
+
import { browserWorkspaceProvider } from "./providers/workspace.js";
|
|
13
|
+
import {
|
|
14
|
+
handleBrowserBridgeRoutes
|
|
15
|
+
} from "./routes/bridge.js";
|
|
16
|
+
import { browserWorkspaceRoutes } from "./routes/workspace-setup.js";
|
|
17
|
+
import { browserBridgeSchema } from "./schema.js";
|
|
18
|
+
function json(res, data, status = 200) {
|
|
19
|
+
httpSendJson(res, data, status);
|
|
20
|
+
}
|
|
21
|
+
function error(res, message, status = 400) {
|
|
22
|
+
httpSendJsonError(res, message, status);
|
|
23
|
+
}
|
|
24
|
+
function httpDecodePathComponent(raw, res, fieldName) {
|
|
25
|
+
try {
|
|
26
|
+
return decodeURIComponent(raw);
|
|
27
|
+
} catch {
|
|
28
|
+
httpSendJsonError(res, `Invalid ${fieldName}: malformed URL encoding`, 400);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function firstHeaderValue(value) {
|
|
33
|
+
if (Array.isArray(value)) {
|
|
34
|
+
return firstHeaderValue(value[0]);
|
|
35
|
+
}
|
|
36
|
+
if (typeof value !== "string") {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const normalized = value.split(",")[0]?.trim();
|
|
40
|
+
return normalized ? normalized : null;
|
|
41
|
+
}
|
|
42
|
+
function requestBaseUrl(req) {
|
|
43
|
+
const headers = req.headers ?? {};
|
|
44
|
+
const protocol = firstHeaderValue(headers["x-forwarded-proto"]) ?? (req.socket instanceof TLSSocket && req.socket.encrypted ? "https" : "http");
|
|
45
|
+
const host = firstHeaderValue(headers["x-forwarded-host"]) ?? firstHeaderValue(headers.host) ?? "localhost";
|
|
46
|
+
return `${protocol}://${host}`;
|
|
47
|
+
}
|
|
48
|
+
function routeOwnerEntityId(runtime) {
|
|
49
|
+
const ownerId = runtime ? resolveCanonicalOwnerId(runtime) : null;
|
|
50
|
+
return typeof ownerId === "string" ? ownerId : null;
|
|
51
|
+
}
|
|
52
|
+
function buildRouteContext(req, res, runtime) {
|
|
53
|
+
const method = (req.method ?? "GET").toUpperCase();
|
|
54
|
+
const url = new URL(req.url ?? "/", requestBaseUrl(req));
|
|
55
|
+
return {
|
|
56
|
+
req,
|
|
57
|
+
res,
|
|
58
|
+
method,
|
|
59
|
+
pathname: url.pathname,
|
|
60
|
+
url,
|
|
61
|
+
state: {
|
|
62
|
+
runtime,
|
|
63
|
+
adminEntityId: routeOwnerEntityId(runtime)
|
|
64
|
+
},
|
|
65
|
+
json,
|
|
66
|
+
error,
|
|
67
|
+
readJsonBody: httpReadJsonBody,
|
|
68
|
+
decodePathComponent: httpDecodePathComponent
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const STATIC_ROUTES = [
|
|
72
|
+
{ type: "GET", path: "/api/browser-bridge/sessions" },
|
|
73
|
+
{ type: "GET", path: "/api/browser-bridge/settings" },
|
|
74
|
+
{ type: "POST", path: "/api/browser-bridge/settings" },
|
|
75
|
+
{ type: "POST", path: "/api/browser-bridge/companions/pair" },
|
|
76
|
+
{ type: "POST", path: "/api/browser-bridge/companions/auto-pair" },
|
|
77
|
+
{ type: "GET", path: "/api/browser-bridge/companions" },
|
|
78
|
+
{ type: "POST", path: "/api/browser-bridge/companions/revoke", public: true },
|
|
79
|
+
{ type: "GET", path: "/api/browser-bridge/packages" },
|
|
80
|
+
{ type: "POST", path: "/api/browser-bridge/packages/open-path" },
|
|
81
|
+
{ type: "POST", path: "/api/browser-bridge/companions/sync", public: true },
|
|
82
|
+
{ type: "GET", path: "/api/browser-bridge/tabs" },
|
|
83
|
+
{ type: "GET", path: "/api/browser-bridge/current-page" },
|
|
84
|
+
{ type: "POST", path: "/api/browser-bridge/sync" },
|
|
85
|
+
{ type: "POST", path: "/api/browser-bridge/sessions" }
|
|
86
|
+
];
|
|
87
|
+
const DYNAMIC_ROUTES = [
|
|
88
|
+
{ type: "GET", path: "/api/browser-bridge/sessions/:id" },
|
|
89
|
+
{ type: "POST", path: "/api/browser-bridge/sessions/:id/confirm" },
|
|
90
|
+
{ type: "POST", path: "/api/browser-bridge/sessions/:id/progress" },
|
|
91
|
+
{ type: "POST", path: "/api/browser-bridge/sessions/:id/complete" },
|
|
92
|
+
{ type: "POST", path: "/api/browser-bridge/companions/:id/revoke" },
|
|
93
|
+
{
|
|
94
|
+
type: "POST",
|
|
95
|
+
path: "/api/browser-bridge/companions/sessions/:id/progress",
|
|
96
|
+
public: true
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
type: "POST",
|
|
100
|
+
path: "/api/browser-bridge/companions/sessions/:id/complete",
|
|
101
|
+
public: true
|
|
102
|
+
},
|
|
103
|
+
{ type: "POST", path: "/api/browser-bridge/packages/:browser/build" },
|
|
104
|
+
{
|
|
105
|
+
type: "POST",
|
|
106
|
+
path: "/api/browser-bridge/packages/:browser/open-manager"
|
|
107
|
+
},
|
|
108
|
+
{ type: "GET", path: "/api/browser-bridge/packages/:browser/download" }
|
|
109
|
+
];
|
|
110
|
+
function routeHandler() {
|
|
111
|
+
return async (req, res, runtime) => {
|
|
112
|
+
const httpReq = req;
|
|
113
|
+
const httpRes = res;
|
|
114
|
+
const ctx = buildRouteContext(
|
|
115
|
+
httpReq,
|
|
116
|
+
httpRes,
|
|
117
|
+
runtime ?? null
|
|
118
|
+
);
|
|
119
|
+
await handleBrowserBridgeRoutes(ctx);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const browserBridgePluginRoutes = [
|
|
123
|
+
...STATIC_ROUTES.map(
|
|
124
|
+
(r) => ({
|
|
125
|
+
type: r.type,
|
|
126
|
+
path: r.path,
|
|
127
|
+
rawPath: true,
|
|
128
|
+
...r.public ? { public: true } : {},
|
|
129
|
+
handler: routeHandler()
|
|
130
|
+
})
|
|
131
|
+
),
|
|
132
|
+
...DYNAMIC_ROUTES.map(
|
|
133
|
+
(r) => ({
|
|
134
|
+
type: r.type,
|
|
135
|
+
path: r.path,
|
|
136
|
+
rawPath: true,
|
|
137
|
+
...r.public ? { public: true } : {},
|
|
138
|
+
handler: routeHandler()
|
|
139
|
+
})
|
|
140
|
+
)
|
|
141
|
+
];
|
|
142
|
+
const browserPlugin = {
|
|
143
|
+
name: "@elizaos/plugin-browser",
|
|
144
|
+
description: "Browser plugin: BROWSER (including action=autofill_login) + MANAGE_BROWSER_BRIDGE; workspace browser command router (electrobun-embedded BrowserView + JSDOM fallback) and Chrome/Safari companion bridge (settings, pairing, tab + page-context sync, packaging artifacts).",
|
|
145
|
+
schema: browserBridgeSchema,
|
|
146
|
+
routes: [...browserBridgePluginRoutes, ...browserWorkspaceRoutes],
|
|
147
|
+
services: [BrowserService],
|
|
148
|
+
providers: [browserWorkspaceProvider],
|
|
149
|
+
actions: [
|
|
150
|
+
...promoteSubactionsToActions(browserAction),
|
|
151
|
+
...promoteSubactionsToActions(manageBrowserBridgeAction)
|
|
152
|
+
],
|
|
153
|
+
// Self-declared auto-enable: activate when features.browser is enabled.
|
|
154
|
+
autoEnable: {
|
|
155
|
+
shouldEnable: (_env, config) => {
|
|
156
|
+
const f = config?.features?.browser;
|
|
157
|
+
return f === true || typeof f === "object" && f !== null && f.enabled !== false;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
async dispose(runtime) {
|
|
161
|
+
const svc = runtime.getService(BrowserService.serviceType);
|
|
162
|
+
await svc?.stop();
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
export {
|
|
166
|
+
browserPlugin
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["/**\n * @elizaos/plugin-browser plugin export.\n *\n * plugin-collector discovers `routes` and `schema` at runtime. Eliza loads\n * this as a core plugin so the Browser Workspace UI and browser companion\n * extension share one route surface.\n */\n\nimport type http from \"node:http\";\nimport { TLSSocket } from \"node:tls\";\nimport type {\n AgentRuntime,\n LegacyRouteHandler,\n Plugin,\n Route,\n ServiceClass,\n UUID,\n} from \"@elizaos/core\";\nimport {\n readJsonBody as httpReadJsonBody,\n sendJson as httpSendJson,\n sendJsonError as httpSendJsonError,\n promoteSubactionsToActions,\n resolveCanonicalOwnerId,\n} from \"@elizaos/core\";\nimport { browserAction } from \"./actions/browser.js\";\nimport { manageBrowserBridgeAction } from \"./actions/manage-browser-bridge.js\";\nimport { BrowserService } from \"./browser-service.js\";\nimport { browserWorkspaceProvider } from \"./providers/workspace.js\";\nimport {\n type BrowserBridgeRouteContext,\n handleBrowserBridgeRoutes,\n} from \"./routes/bridge.js\";\nimport { browserWorkspaceRoutes } from \"./routes/workspace-setup.js\";\nimport { browserBridgeSchema } from \"./schema.js\";\n\nfunction json(res: http.ServerResponse, data: unknown, status = 200): void {\n httpSendJson(res, data, status);\n}\n\nfunction error(res: http.ServerResponse, message: string, status = 400): void {\n httpSendJsonError(res, message, status);\n}\n\nfunction httpDecodePathComponent(\n raw: string,\n res: http.ServerResponse,\n fieldName: string,\n): string | null {\n try {\n return decodeURIComponent(raw);\n } catch {\n httpSendJsonError(res, `Invalid ${fieldName}: malformed URL encoding`, 400);\n return null;\n }\n}\n\nfunction firstHeaderValue(value: string | string[] | undefined): string | null {\n if (Array.isArray(value)) {\n return firstHeaderValue(value[0]);\n }\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.split(\",\")[0]?.trim();\n return normalized ? normalized : null;\n}\n\nfunction requestBaseUrl(req: http.IncomingMessage): string {\n const headers = req.headers ?? {};\n const protocol =\n firstHeaderValue(headers[\"x-forwarded-proto\"]) ??\n (req.socket instanceof TLSSocket && req.socket.encrypted\n ? \"https\"\n : \"http\");\n const host =\n firstHeaderValue(headers[\"x-forwarded-host\"]) ??\n firstHeaderValue(headers.host) ??\n \"localhost\";\n return `${protocol}://${host}`;\n}\n\nfunction routeOwnerEntityId(runtime: AgentRuntime | null): UUID | null {\n const ownerId = runtime ? resolveCanonicalOwnerId(runtime) : null;\n return typeof ownerId === \"string\" ? (ownerId as UUID) : null;\n}\n\nfunction buildRouteContext(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n runtime: AgentRuntime | null,\n): BrowserBridgeRouteContext {\n const method = (req.method ?? \"GET\").toUpperCase();\n const url = new URL(req.url ?? \"/\", requestBaseUrl(req));\n return {\n req,\n res,\n method,\n pathname: url.pathname,\n url,\n state: {\n runtime,\n adminEntityId: routeOwnerEntityId(runtime),\n },\n json,\n error,\n readJsonBody: httpReadJsonBody,\n decodePathComponent: httpDecodePathComponent,\n };\n}\n\nconst STATIC_ROUTES: Array<{ type: string; path: string; public?: boolean }> = [\n { type: \"GET\", path: \"/api/browser-bridge/sessions\" },\n { type: \"GET\", path: \"/api/browser-bridge/settings\" },\n { type: \"POST\", path: \"/api/browser-bridge/settings\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/pair\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/auto-pair\" },\n { type: \"GET\", path: \"/api/browser-bridge/companions\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/revoke\", public: true },\n { type: \"GET\", path: \"/api/browser-bridge/packages\" },\n { type: \"POST\", path: \"/api/browser-bridge/packages/open-path\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/sync\", public: true },\n { type: \"GET\", path: \"/api/browser-bridge/tabs\" },\n { type: \"GET\", path: \"/api/browser-bridge/current-page\" },\n { type: \"POST\", path: \"/api/browser-bridge/sync\" },\n { type: \"POST\", path: \"/api/browser-bridge/sessions\" },\n];\n\nconst DYNAMIC_ROUTES: Array<{ type: string; path: string; public?: boolean }> =\n [\n { type: \"GET\", path: \"/api/browser-bridge/sessions/:id\" },\n { type: \"POST\", path: \"/api/browser-bridge/sessions/:id/confirm\" },\n { type: \"POST\", path: \"/api/browser-bridge/sessions/:id/progress\" },\n { type: \"POST\", path: \"/api/browser-bridge/sessions/:id/complete\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/:id/revoke\" },\n {\n type: \"POST\",\n path: \"/api/browser-bridge/companions/sessions/:id/progress\",\n public: true,\n },\n {\n type: \"POST\",\n path: \"/api/browser-bridge/companions/sessions/:id/complete\",\n public: true,\n },\n { type: \"POST\", path: \"/api/browser-bridge/packages/:browser/build\" },\n {\n type: \"POST\",\n path: \"/api/browser-bridge/packages/:browser/open-manager\",\n },\n { type: \"GET\", path: \"/api/browser-bridge/packages/:browser/download\" },\n ];\n\nfunction routeHandler(): LegacyRouteHandler {\n return async (\n req: unknown,\n res: unknown,\n runtime: unknown,\n ): Promise<void> => {\n const httpReq = req as http.IncomingMessage;\n const httpRes = res as http.ServerResponse;\n const ctx = buildRouteContext(\n httpReq,\n httpRes,\n (runtime as AgentRuntime) ?? null,\n );\n await handleBrowserBridgeRoutes(ctx);\n };\n}\n\nconst browserBridgePluginRoutes: Route[] = [\n ...STATIC_ROUTES.map(\n (r) =>\n ({\n type: r.type as Route[\"type\"],\n path: r.path,\n rawPath: true as const,\n ...(r.public ? ({ public: true } as const) : {}),\n handler: routeHandler(),\n }) as Route,\n ),\n ...DYNAMIC_ROUTES.map(\n (r) =>\n ({\n type: r.type as Route[\"type\"],\n path: r.path,\n rawPath: true as const,\n ...(r.public ? ({ public: true } as const) : {}),\n handler: routeHandler(),\n }) as Route,\n ),\n];\n\nexport const browserPlugin: Plugin = {\n name: \"@elizaos/plugin-browser\",\n description:\n \"Browser plugin: BROWSER (including action=autofill_login) + MANAGE_BROWSER_BRIDGE; workspace browser command router (electrobun-embedded BrowserView + JSDOM fallback) and Chrome/Safari companion bridge (settings, pairing, tab + page-context sync, packaging artifacts).\",\n schema: browserBridgeSchema,\n routes: [...browserBridgePluginRoutes, ...browserWorkspaceRoutes],\n services: [BrowserService as ServiceClass],\n providers: [browserWorkspaceProvider],\n actions: [\n ...promoteSubactionsToActions(browserAction),\n ...promoteSubactionsToActions(manageBrowserBridgeAction),\n ],\n // Self-declared auto-enable: activate when features.browser is enabled.\n autoEnable: {\n shouldEnable: (_env, config) => {\n const f = (config?.features as Record<string, unknown> | undefined)\n ?.browser;\n return (\n f === true ||\n (typeof f === \"object\" &&\n f !== null &&\n (f as { enabled?: unknown }).enabled !== false)\n );\n },\n },\n async dispose(runtime) {\n const svc = runtime.getService<BrowserService>(BrowserService.serviceType);\n await svc?.stop();\n },\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser workspace provider — surfaces the live browser-workspace tab list
|
|
3
|
+
* and current dispatch mode (`desktop` / `web`) into agent context whenever
|
|
4
|
+
* a `browser` or `web` context is selected.
|
|
5
|
+
*
|
|
6
|
+
* Does not include Steward wallet state — that lived in this provider while
|
|
7
|
+
* `@elizaos/app-browser` owned both surfaces. After consolidation, Steward
|
|
8
|
+
* exposes its own provider from `@elizaos/plugin-steward-app`; an agent that needs
|
|
9
|
+
* both contexts gets both providers, not a coupled one.
|
|
10
|
+
*/
|
|
11
|
+
import type { Provider } from "@elizaos/core";
|
|
12
|
+
export declare const browserWorkspaceProvider: Provider;
|
|
13
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/providers/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAS9C,eAAO,MAAM,wBAAwB,EAAE,QAsDtC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getBrowserWorkspaceMode,
|
|
3
|
+
listBrowserWorkspaceTabs
|
|
4
|
+
} from "../workspace/browser-workspace.js";
|
|
5
|
+
const PROVIDER_NAME = "browser_workspace";
|
|
6
|
+
const MAX_TABS_IN_SUMMARY = 8;
|
|
7
|
+
const browserWorkspaceProvider = {
|
|
8
|
+
name: PROVIDER_NAME,
|
|
9
|
+
description: "Live summary of the Eliza browser workspace \u2014 current dispatch mode and the open tab list, capped to the first 8 tabs.",
|
|
10
|
+
descriptionCompressed: "Browser workspace mode + open tab list.",
|
|
11
|
+
contexts: ["browser", "web"],
|
|
12
|
+
contextGate: { anyOf: ["browser", "web"] },
|
|
13
|
+
cacheStable: false,
|
|
14
|
+
cacheScope: "turn",
|
|
15
|
+
get: async () => {
|
|
16
|
+
try {
|
|
17
|
+
const mode = getBrowserWorkspaceMode();
|
|
18
|
+
const tabs = await listBrowserWorkspaceTabs();
|
|
19
|
+
const text = JSON.stringify(
|
|
20
|
+
{
|
|
21
|
+
[PROVIDER_NAME]: {
|
|
22
|
+
mode,
|
|
23
|
+
tabCount: tabs.length,
|
|
24
|
+
tabs: tabs.slice(0, MAX_TABS_IN_SUMMARY).map((tab) => ({
|
|
25
|
+
id: tab.id,
|
|
26
|
+
visible: tab.visible,
|
|
27
|
+
url: tab.url,
|
|
28
|
+
title: tab.title
|
|
29
|
+
}))
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
null,
|
|
33
|
+
2
|
|
34
|
+
);
|
|
35
|
+
return {
|
|
36
|
+
text,
|
|
37
|
+
data: {
|
|
38
|
+
available: true,
|
|
39
|
+
mode,
|
|
40
|
+
tabs
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
} catch (error) {
|
|
44
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
45
|
+
return {
|
|
46
|
+
text: JSON.stringify(
|
|
47
|
+
{
|
|
48
|
+
[PROVIDER_NAME]: {
|
|
49
|
+
available: false,
|
|
50
|
+
error: message
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
null,
|
|
54
|
+
2
|
|
55
|
+
),
|
|
56
|
+
data: { available: false, error: message }
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
export {
|
|
62
|
+
browserWorkspaceProvider
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/providers/workspace.ts"],"sourcesContent":["/**\n * Browser workspace provider — surfaces the live browser-workspace tab list\n * and current dispatch mode (`desktop` / `web`) into agent context whenever\n * a `browser` or `web` context is selected.\n *\n * Does not include Steward wallet state — that lived in this provider while\n * `@elizaos/app-browser` owned both surfaces. After consolidation, Steward\n * exposes its own provider from `@elizaos/plugin-steward-app`; an agent that needs\n * both contexts gets both providers, not a coupled one.\n */\n\nimport type { Provider } from \"@elizaos/core\";\nimport {\n getBrowserWorkspaceMode,\n listBrowserWorkspaceTabs,\n} from \"../workspace/browser-workspace.js\";\n\nconst PROVIDER_NAME = \"browser_workspace\";\nconst MAX_TABS_IN_SUMMARY = 8;\n\nexport const browserWorkspaceProvider: Provider = {\n name: PROVIDER_NAME,\n description:\n \"Live summary of the Eliza browser workspace — current dispatch mode and the open tab list, capped to the first 8 tabs.\",\n descriptionCompressed: \"Browser workspace mode + open tab list.\",\n contexts: [\"browser\", \"web\"],\n contextGate: { anyOf: [\"browser\", \"web\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n get: async () => {\n try {\n const mode = getBrowserWorkspaceMode();\n const tabs = await listBrowserWorkspaceTabs();\n const text = JSON.stringify(\n {\n [PROVIDER_NAME]: {\n mode,\n tabCount: tabs.length,\n tabs: tabs.slice(0, MAX_TABS_IN_SUMMARY).map((tab) => ({\n id: tab.id,\n visible: tab.visible,\n url: tab.url,\n title: tab.title,\n })),\n },\n },\n null,\n 2,\n );\n return {\n text,\n data: {\n available: true,\n mode,\n tabs,\n },\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n text: JSON.stringify(\n {\n [PROVIDER_NAME]: {\n available: false,\n error: message,\n },\n },\n null,\n 2,\n ),\n data: { available: false, error: message },\n };\n }\n },\n};\n"],"mappings":"AAYA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,MAAM,gBAAgB;AACtB,MAAM,sBAAsB;AAErB,MAAM,2BAAqC;AAAA,EAChD,MAAM;AAAA,EACN,aACE;AAAA,EACF,uBAAuB;AAAA,EACvB,UAAU,CAAC,WAAW,KAAK;AAAA,EAC3B,aAAa,EAAE,OAAO,CAAC,WAAW,KAAK,EAAE;AAAA,EACzC,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,KAAK,YAAY;AACf,QAAI;AACF,YAAM,OAAO,wBAAwB;AACrC,YAAM,OAAO,MAAM,yBAAyB;AAC5C,YAAM,OAAO,KAAK;AAAA,QAChB;AAAA,UACE,CAAC,aAAa,GAAG;AAAA,YACf;AAAA,YACA,UAAU,KAAK;AAAA,YACf,MAAM,KAAK,MAAM,GAAG,mBAAmB,EAAE,IAAI,CAAC,SAAS;AAAA,cACrD,IAAI,IAAI;AAAA,cACR,SAAS,IAAI;AAAA,cACb,KAAK,IAAI;AAAA,cACT,OAAO,IAAI;AAAA,YACb,EAAE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,aAAO;AAAA,QACL;AAAA,QACA,MAAM;AAAA,UACJ,WAAW;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,aAAO;AAAA,QACL,MAAM,KAAK;AAAA,UACT;AAAA,YACE,CAAC,aAAa,GAAG;AAAA,cACf,WAAW;AAAA,cACX,OAAO;AAAA,YACT;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM,EAAE,WAAW,OAAO,OAAO,QAAQ;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Browser Bridge HTTP routes.
|
|
3
|
+
*
|
|
4
|
+
* Mounted under `/api/browser-bridge/*` by the plugin-collector. Pair +
|
|
5
|
+
* settings + companion-sync + tabs + current-page + packaging endpoints
|
|
6
|
+
* are fully generic. Session endpoints (confirm/progress/complete) still
|
|
7
|
+
* operate on the LifeOps-owned `life_browser_sessions` table and therefore
|
|
8
|
+
* call into the LifeOps route service because that app owns workflow-scoped
|
|
9
|
+
* browser sessions.
|
|
10
|
+
*
|
|
11
|
+
* Companion/auto-pair/sync authentication uses the
|
|
12
|
+
* `X-Browser-Bridge-Companion-Id` header paired with a bearer pairing
|
|
13
|
+
* token. The old `X-LifeOps-Browser-Companion-Id` and legacy
|
|
14
|
+
* `x-eliza-browser-companion-id` aliases were deliberately removed.
|
|
15
|
+
*/
|
|
16
|
+
import type http from "node:http";
|
|
17
|
+
import type { ReadJsonBodyOptions } from "@elizaos/core";
|
|
18
|
+
import { type AgentRuntime, type UUID } from "@elizaos/core";
|
|
19
|
+
export interface BrowserBridgeRouteContext {
|
|
20
|
+
req: http.IncomingMessage;
|
|
21
|
+
res: http.ServerResponse;
|
|
22
|
+
method: string;
|
|
23
|
+
pathname: string;
|
|
24
|
+
url: URL;
|
|
25
|
+
state: {
|
|
26
|
+
runtime: AgentRuntime | null;
|
|
27
|
+
adminEntityId: UUID | null;
|
|
28
|
+
};
|
|
29
|
+
json: (res: http.ServerResponse, data: unknown, status?: number) => void;
|
|
30
|
+
error: (res: http.ServerResponse, message: string, status?: number) => void;
|
|
31
|
+
readJsonBody: <T extends object>(req: http.IncomingMessage, res: http.ServerResponse, options?: ReadJsonBodyOptions) => Promise<T | null>;
|
|
32
|
+
decodePathComponent: (raw: string, res: http.ServerResponse, label: string) => string | null;
|
|
33
|
+
}
|
|
34
|
+
declare function rateLimitRequest(ctx: BrowserBridgeRouteContext, operation: string): boolean;
|
|
35
|
+
export declare function handleBrowserBridgeRoutes(ctx: BrowserBridgeRouteContext): Promise<boolean>;
|
|
36
|
+
export { rateLimitRequest };
|
|
37
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/routes/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAU,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AA2BrE,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC;IAC1B,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE;QACL,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5E,YAAY,EAAE,CAAC,CAAC,SAAS,MAAM,EAC7B,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,CAAC,EAAE,mBAAmB,KAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,mBAAmB,EAAE,CACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,MAAM,KACV,MAAM,GAAG,IAAI,CAAC;CACpB;AA2ID,iBAAS,gBAAgB,CACvB,GAAG,EAAE,yBAAyB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAqBT;AA8QD,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,yBAAyB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAmjBlB;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|