@tickernelz/paperclip-pro-shared 2026.1017.2 → 2026.1021.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/.paperclip-build-complete +1 -1
- package/dist/app-definitions/local-browser.json +32 -0
- package/dist/app-definitions-url.test.js +6 -3
- package/dist/app-definitions-url.test.js.map +1 -1
- package/dist/app-definitions.d.ts.map +1 -1
- package/dist/app-definitions.generated.d.ts.map +1 -1
- package/dist/app-definitions.generated.js +3 -2
- package/dist/app-definitions.generated.js.map +1 -1
- package/dist/app-definitions.js +1 -0
- package/dist/app-definitions.js.map +1 -1
- package/dist/app-definitions.test.js +22 -1
- package/dist/app-definitions.test.js.map +1 -1
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/local-browser.d.ts +497 -0
- package/dist/local-browser.d.ts.map +1 -0
- package/dist/local-browser.js +615 -0
- package/dist/local-browser.js.map +1 -0
- package/dist/types/attention.d.ts +36 -0
- package/dist/types/attention.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/instance.d.ts +2 -0
- package/dist/types/instance.d.ts.map +1 -1
- package/dist/types/instance.js +2 -0
- package/dist/types/instance.js.map +1 -1
- package/dist/validators/instance.d.ts +6 -0
- package/dist/validators/instance.d.ts.map +1 -1
- package/dist/validators/instance.js +15 -1
- package/dist/validators/instance.js.map +1 -1
- package/dist/validators/instance.test.js +20 -3
- package/dist/validators/instance.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const LOCAL_BROWSER_PROTOCOL_VERSION = 1;
|
|
3
|
+
export const LOCAL_BROWSER_CONNECTOR_KEY = "local-browser";
|
|
4
|
+
export const LOCAL_BROWSER_SKILL_NAME = "local-browser";
|
|
5
|
+
export const LOCAL_BROWSER_PAIRING_TTL_MS = 10 * 60 * 1000;
|
|
6
|
+
export const LOCAL_BROWSER_CALL_TIMEOUT_MS = 30_000;
|
|
7
|
+
export const LOCAL_BROWSER_SNAPSHOT_DEFAULT_NODES = 120;
|
|
8
|
+
export const LOCAL_BROWSER_SNAPSHOT_MAX_NODES = 400;
|
|
9
|
+
export const LOCAL_BROWSER_TEXT_DEFAULT_CHARS = 8_000;
|
|
10
|
+
export const LOCAL_BROWSER_TEXT_MAX_CHARS = 40_000;
|
|
11
|
+
export const LOCAL_BROWSER_SCREENSHOT_MAX_BYTES = 2 * 1024 * 1024;
|
|
12
|
+
export const LOCAL_BROWSER_VIEWER_FRAME_INTERVAL_MS = 1_000;
|
|
13
|
+
/** Viewer frame and input coordinates are CSS pixels of the page viewport, never device pixels. */
|
|
14
|
+
export const LOCAL_BROWSER_VIEWER_COORDINATE_SPACE = "css-pixels";
|
|
15
|
+
export const LOCAL_BROWSER_TIERS = ["refine", "full"];
|
|
16
|
+
export const localBrowserTierSchema = z.enum(LOCAL_BROWSER_TIERS);
|
|
17
|
+
export const LOCAL_BROWSER_CLIENTS = ["chromium", "firefox"];
|
|
18
|
+
export const localBrowserClientSchema = z.enum(LOCAL_BROWSER_CLIENTS);
|
|
19
|
+
export const LOCAL_BROWSER_ERROR_CODES = [
|
|
20
|
+
"local_browser_not_paired",
|
|
21
|
+
"local_browser_extension_unavailable",
|
|
22
|
+
"local_browser_origin_denied",
|
|
23
|
+
"local_browser_tier_denied",
|
|
24
|
+
"local_browser_tab_missing",
|
|
25
|
+
"local_browser_ref_stale",
|
|
26
|
+
"local_browser_element_missing",
|
|
27
|
+
"local_browser_timeout",
|
|
28
|
+
"local_browser_navigation_blocked",
|
|
29
|
+
"local_browser_protocol_error",
|
|
30
|
+
"local_browser_result_too_large",
|
|
31
|
+
"local_browser_unsupported",
|
|
32
|
+
];
|
|
33
|
+
export const localBrowserToolErrorSchema = z
|
|
34
|
+
.object({
|
|
35
|
+
code: z.enum(LOCAL_BROWSER_ERROR_CODES),
|
|
36
|
+
message: z.string().min(1),
|
|
37
|
+
hint: z.string().min(1).optional(),
|
|
38
|
+
retryable: z.boolean().optional(),
|
|
39
|
+
})
|
|
40
|
+
.strict();
|
|
41
|
+
export const LOCAL_BROWSER_CURSOR_PATTERN = /^\d+$/;
|
|
42
|
+
export const localBrowserCursorSchema = z
|
|
43
|
+
.string()
|
|
44
|
+
.regex(LOCAL_BROWSER_CURSOR_PATTERN, "Cursors are the decimal node offset returned by the previous snapshot");
|
|
45
|
+
export const localBrowserRefSchema = z
|
|
46
|
+
.string()
|
|
47
|
+
.regex(/^e\d+$/, "Element refs look like e12; take a fresh snapshot when a ref is rejected");
|
|
48
|
+
export const localBrowserTabSchema = z
|
|
49
|
+
.object({
|
|
50
|
+
tabId: z.number().int().nonnegative(),
|
|
51
|
+
windowId: z.number().int().nonnegative().optional(),
|
|
52
|
+
title: z.string(),
|
|
53
|
+
url: z.string(),
|
|
54
|
+
active: z.boolean(),
|
|
55
|
+
status: z.string().optional(),
|
|
56
|
+
})
|
|
57
|
+
.strict();
|
|
58
|
+
export const localBrowserSessionSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
sessionId: z.string().uuid(),
|
|
61
|
+
connectionId: z.string().uuid(),
|
|
62
|
+
client: localBrowserClientSchema,
|
|
63
|
+
clientVersion: z.string(),
|
|
64
|
+
label: z.string(),
|
|
65
|
+
profileName: z.string().nullable(),
|
|
66
|
+
ownerUserId: z.string().nullable().optional(),
|
|
67
|
+
tier: localBrowserTierSchema,
|
|
68
|
+
connectedAt: z.string(),
|
|
69
|
+
lastSeenAt: z.string(),
|
|
70
|
+
tabs: z.array(localBrowserTabSchema),
|
|
71
|
+
controlledByViewer: z.boolean(),
|
|
72
|
+
})
|
|
73
|
+
.strict();
|
|
74
|
+
export const localBrowserTargetSchema = z
|
|
75
|
+
.object({
|
|
76
|
+
sessionId: z.string().uuid().optional(),
|
|
77
|
+
tabId: z.number().int().nonnegative().optional(),
|
|
78
|
+
})
|
|
79
|
+
.strict();
|
|
80
|
+
export const localBrowserOpenInputSchema = localBrowserTargetSchema
|
|
81
|
+
.extend({
|
|
82
|
+
url: z.string().url().optional(),
|
|
83
|
+
newTab: z.boolean().optional(),
|
|
84
|
+
active: z.boolean().optional(),
|
|
85
|
+
})
|
|
86
|
+
.strict();
|
|
87
|
+
export const localBrowserNavigateInputSchema = localBrowserTargetSchema
|
|
88
|
+
.extend({
|
|
89
|
+
url: z.string().url().optional(),
|
|
90
|
+
back: z.boolean().optional(),
|
|
91
|
+
forward: z.boolean().optional(),
|
|
92
|
+
reload: z.boolean().optional(),
|
|
93
|
+
waitUntil: z.enum(["load", "domcontentloaded", "networkidle"]).optional(),
|
|
94
|
+
timeoutMs: z.number().int().min(100).max(120_000).optional(),
|
|
95
|
+
})
|
|
96
|
+
.strict();
|
|
97
|
+
export const localBrowserSnapshotInputSchema = localBrowserTargetSchema
|
|
98
|
+
.extend({
|
|
99
|
+
selector: z.string().min(1).optional(),
|
|
100
|
+
maxNodes: z.number().int().min(10).max(LOCAL_BROWSER_SNAPSHOT_MAX_NODES).optional(),
|
|
101
|
+
includeText: z.boolean().optional(),
|
|
102
|
+
includeHidden: z.boolean().optional(),
|
|
103
|
+
cursor: z.string().min(1).optional(),
|
|
104
|
+
})
|
|
105
|
+
.strict();
|
|
106
|
+
export const LOCAL_BROWSER_ACTIONS = [
|
|
107
|
+
"click",
|
|
108
|
+
"dblclick",
|
|
109
|
+
"type",
|
|
110
|
+
"press",
|
|
111
|
+
"hover",
|
|
112
|
+
"focus",
|
|
113
|
+
"check",
|
|
114
|
+
"uncheck",
|
|
115
|
+
"select",
|
|
116
|
+
"scroll",
|
|
117
|
+
"scroll_into_view",
|
|
118
|
+
];
|
|
119
|
+
export const localBrowserActInputSchema = localBrowserTargetSchema
|
|
120
|
+
.extend({
|
|
121
|
+
action: z.enum(LOCAL_BROWSER_ACTIONS),
|
|
122
|
+
ref: localBrowserRefSchema.optional(),
|
|
123
|
+
selector: z.string().min(1).optional(),
|
|
124
|
+
text: z.string().optional(),
|
|
125
|
+
key: z.string().min(1).optional(),
|
|
126
|
+
value: z.string().optional(),
|
|
127
|
+
values: z.array(z.string()).max(50).optional(),
|
|
128
|
+
deltaY: z.number().optional(),
|
|
129
|
+
deltaX: z.number().optional(),
|
|
130
|
+
submit: z.boolean().optional(),
|
|
131
|
+
timeoutMs: z.number().int().min(100).max(60_000).optional(),
|
|
132
|
+
})
|
|
133
|
+
.strict()
|
|
134
|
+
.superRefine((value, ctx) => {
|
|
135
|
+
if (!value.ref && !value.selector) {
|
|
136
|
+
ctx.addIssue({ code: "custom", message: "Pass ref from the latest snapshot, or a CSS selector", path: ["ref"] });
|
|
137
|
+
}
|
|
138
|
+
if (value.action === "type" && value.text === undefined) {
|
|
139
|
+
ctx.addIssue({ code: "custom", message: "type needs text", path: ["text"] });
|
|
140
|
+
}
|
|
141
|
+
if (value.action === "press" && !value.key) {
|
|
142
|
+
ctx.addIssue({ code: "custom", message: "press needs key, for example Enter", path: ["key"] });
|
|
143
|
+
}
|
|
144
|
+
if (value.action === "select" && !value.value && !value.values?.length) {
|
|
145
|
+
ctx.addIssue({ code: "custom", message: "select needs value or values", path: ["value"] });
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
export const localBrowserReadInputSchema = localBrowserTargetSchema
|
|
149
|
+
.extend({
|
|
150
|
+
selector: z.string().min(1).optional(),
|
|
151
|
+
format: z.enum(["text", "markdown", "html"]).optional(),
|
|
152
|
+
maxChars: z.number().int().min(200).max(LOCAL_BROWSER_TEXT_MAX_CHARS).optional(),
|
|
153
|
+
})
|
|
154
|
+
.strict();
|
|
155
|
+
export const localBrowserScreenshotInputSchema = localBrowserTargetSchema
|
|
156
|
+
.extend({
|
|
157
|
+
selector: z.string().min(1).optional(),
|
|
158
|
+
fullPage: z.boolean().optional(),
|
|
159
|
+
})
|
|
160
|
+
.strict();
|
|
161
|
+
export const localBrowserWaitInputSchema = localBrowserTargetSchema
|
|
162
|
+
.extend({
|
|
163
|
+
selector: z.string().min(1).optional(),
|
|
164
|
+
text: z.string().min(1).optional(),
|
|
165
|
+
urlIncludes: z.string().min(1).optional(),
|
|
166
|
+
idle: z.boolean().optional(),
|
|
167
|
+
timeoutMs: z.number().int().min(100).max(120_000).optional(),
|
|
168
|
+
})
|
|
169
|
+
.strict();
|
|
170
|
+
export const localBrowserEvaluateInputSchema = localBrowserTargetSchema
|
|
171
|
+
.extend({
|
|
172
|
+
expression: z.string().min(1),
|
|
173
|
+
world: z.enum(["main", "isolated"]).optional(),
|
|
174
|
+
awaitPromise: z.boolean().optional(),
|
|
175
|
+
timeoutMs: z.number().int().min(100).max(60_000).optional(),
|
|
176
|
+
})
|
|
177
|
+
.strict();
|
|
178
|
+
export const localBrowserStorageInputSchema = localBrowserTargetSchema
|
|
179
|
+
.extend({
|
|
180
|
+
kind: z.enum(["cookies", "local", "session"]),
|
|
181
|
+
op: z.enum(["get", "set", "clear"]),
|
|
182
|
+
url: z.string().url().optional(),
|
|
183
|
+
name: z.string().min(1).optional(),
|
|
184
|
+
entries: z.array(z.object({ name: z.string().min(1), value: z.string() }).strict()).max(200).optional(),
|
|
185
|
+
})
|
|
186
|
+
.strict();
|
|
187
|
+
export const localBrowserNetworkInputSchema = localBrowserTargetSchema
|
|
188
|
+
.extend({
|
|
189
|
+
op: z.enum(["list", "clear"]),
|
|
190
|
+
limit: z.number().int().min(1).max(200).optional(),
|
|
191
|
+
includeBodies: z.boolean().optional(),
|
|
192
|
+
urlIncludes: z.string().min(1).optional(),
|
|
193
|
+
method: z.string().min(1).optional(),
|
|
194
|
+
})
|
|
195
|
+
.strict();
|
|
196
|
+
export const localBrowserUploadInputSchema = localBrowserTargetSchema
|
|
197
|
+
.extend({
|
|
198
|
+
ref: localBrowserRefSchema.optional(),
|
|
199
|
+
selector: z.string().min(1).optional(),
|
|
200
|
+
attachmentIds: z.array(z.string().uuid()).min(1).max(20),
|
|
201
|
+
})
|
|
202
|
+
.strict();
|
|
203
|
+
export const localBrowserDownloadInputSchema = localBrowserTargetSchema
|
|
204
|
+
.extend({
|
|
205
|
+
op: z.enum(["list", "save"]),
|
|
206
|
+
downloadId: z.number().int().optional(),
|
|
207
|
+
})
|
|
208
|
+
.strict();
|
|
209
|
+
export const localBrowserCloseInputSchema = localBrowserTargetSchema
|
|
210
|
+
.extend({ closeSession: z.boolean().optional() })
|
|
211
|
+
.strict();
|
|
212
|
+
const targetHint = "Omit sessionId when exactly one browser is paired; omit tabId to use the active tab.";
|
|
213
|
+
export const LOCAL_BROWSER_TOOLS = [
|
|
214
|
+
{
|
|
215
|
+
name: "local_browser_sessions",
|
|
216
|
+
description: `List the paired browsers and their open tabs. ${targetHint} Start here when you do not know the current tab.`,
|
|
217
|
+
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
218
|
+
tier: "refine",
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
name: "local_browser_open",
|
|
222
|
+
description: "Open a URL in the user's real browser, in the active tab or a new tab. Returns the tab and a snapshot ref set for the new page.",
|
|
223
|
+
inputSchema: {
|
|
224
|
+
type: "object",
|
|
225
|
+
properties: {
|
|
226
|
+
sessionId: { type: "string", description: "Paired browser session id" },
|
|
227
|
+
tabId: { type: "integer", description: "Reuse this tab instead of the active one" },
|
|
228
|
+
url: { type: "string", description: "Absolute http(s) URL" },
|
|
229
|
+
newTab: { type: "boolean", description: "Open in a new tab" },
|
|
230
|
+
active: { type: "boolean", description: "Focus the tab when opening it" },
|
|
231
|
+
},
|
|
232
|
+
additionalProperties: false,
|
|
233
|
+
},
|
|
234
|
+
tier: "refine",
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
name: "local_browser_navigate",
|
|
238
|
+
description: "Navigate the current tab: pass url, or one of back, forward, reload. Prefer this over local_browser_open when the tab is already on the site you need.",
|
|
239
|
+
inputSchema: {
|
|
240
|
+
type: "object",
|
|
241
|
+
properties: {
|
|
242
|
+
sessionId: { type: "string" },
|
|
243
|
+
tabId: { type: "integer" },
|
|
244
|
+
url: { type: "string" },
|
|
245
|
+
back: { type: "boolean" },
|
|
246
|
+
forward: { type: "boolean" },
|
|
247
|
+
reload: { type: "boolean" },
|
|
248
|
+
waitUntil: { type: "string", enum: ["load", "domcontentloaded", "networkidle"] },
|
|
249
|
+
timeoutMs: { type: "integer", description: "Default 15000, max 120000" },
|
|
250
|
+
},
|
|
251
|
+
additionalProperties: false,
|
|
252
|
+
},
|
|
253
|
+
tier: "refine",
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: "local_browser_snapshot",
|
|
257
|
+
description: "Read the page as a compact accessibility tree where every interactive element has a ref like e12. This is the primary way to see a page: call it after every navigation or click, then pass those refs to local_browser_act. Output is capped; pass cursor from the previous result to continue.",
|
|
258
|
+
inputSchema: {
|
|
259
|
+
type: "object",
|
|
260
|
+
properties: {
|
|
261
|
+
sessionId: { type: "string" },
|
|
262
|
+
tabId: { type: "integer" },
|
|
263
|
+
selector: { type: "string", description: "Scope the snapshot to a subtree" },
|
|
264
|
+
maxNodes: { type: "integer", description: "Default 120, max 400" },
|
|
265
|
+
includeText: { type: "boolean", description: "Include short text content per node" },
|
|
266
|
+
includeHidden: { type: "boolean" },
|
|
267
|
+
cursor: { type: "string", description: "Continue after the previous page" },
|
|
268
|
+
},
|
|
269
|
+
additionalProperties: false,
|
|
270
|
+
},
|
|
271
|
+
tier: "refine",
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: "local_browser_act",
|
|
275
|
+
description: "Do one thing on the page: click, dblclick, type, press, hover, focus, check, uncheck, select, scroll, scroll_into_view. Target an element with ref from the latest snapshot, or a CSS selector. After a click or press that changes the page, take a new snapshot because old refs go stale.",
|
|
276
|
+
inputSchema: {
|
|
277
|
+
type: "object",
|
|
278
|
+
properties: {
|
|
279
|
+
sessionId: { type: "string" },
|
|
280
|
+
tabId: { type: "integer" },
|
|
281
|
+
action: {
|
|
282
|
+
type: "string",
|
|
283
|
+
enum: ["click", "dblclick", "type", "press", "hover", "focus", "check", "uncheck", "select", "scroll", "scroll_into_view"],
|
|
284
|
+
},
|
|
285
|
+
ref: { type: "string", description: "Element ref from the latest snapshot, for example e12" },
|
|
286
|
+
selector: { type: "string", description: "CSS selector when you have no ref" },
|
|
287
|
+
text: { type: "string", description: "Text for type; replaces the field value unless submit is set" },
|
|
288
|
+
key: { type: "string", description: "Key for press, for example Enter" },
|
|
289
|
+
value: { type: "string", description: "Option value for select" },
|
|
290
|
+
values: { type: "array", items: { type: "string" }, description: "Multiple option values for select" },
|
|
291
|
+
deltaY: { type: "number", description: "Scroll distance; positive is down" },
|
|
292
|
+
deltaX: { type: "number" },
|
|
293
|
+
submit: { type: "boolean", description: "Press Enter after typing" },
|
|
294
|
+
timeoutMs: { type: "integer" },
|
|
295
|
+
},
|
|
296
|
+
additionalProperties: false,
|
|
297
|
+
},
|
|
298
|
+
tier: "refine",
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
name: "local_browser_read",
|
|
302
|
+
description: "Extract text, markdown or html from the page or one element. Use this instead of a snapshot when you need the content itself rather than the controls. Output is capped at maxChars; the result says when it was truncated.",
|
|
303
|
+
inputSchema: {
|
|
304
|
+
type: "object",
|
|
305
|
+
properties: {
|
|
306
|
+
sessionId: { type: "string" },
|
|
307
|
+
tabId: { type: "integer" },
|
|
308
|
+
selector: { type: "string" },
|
|
309
|
+
format: { type: "string", enum: ["text", "markdown", "html"] },
|
|
310
|
+
maxChars: { type: "integer", description: "Default 8000, max 40000" },
|
|
311
|
+
},
|
|
312
|
+
additionalProperties: false,
|
|
313
|
+
},
|
|
314
|
+
tier: "refine",
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: "local_browser_screenshot",
|
|
318
|
+
description: "Capture the visible tab, or one element, as an image attachment for the human. Use it for visual checks, layout problems and canvas or image content that a snapshot cannot describe.",
|
|
319
|
+
inputSchema: {
|
|
320
|
+
type: "object",
|
|
321
|
+
properties: {
|
|
322
|
+
sessionId: { type: "string" },
|
|
323
|
+
tabId: { type: "integer" },
|
|
324
|
+
selector: { type: "string" },
|
|
325
|
+
fullPage: { type: "boolean" },
|
|
326
|
+
},
|
|
327
|
+
additionalProperties: false,
|
|
328
|
+
},
|
|
329
|
+
tier: "refine",
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
name: "local_browser_wait",
|
|
333
|
+
description: "Wait for a condition before acting: a selector appears, text appears, the URL contains a string, or the page is idle. Prefer this over repeating snapshots in a loop.",
|
|
334
|
+
inputSchema: {
|
|
335
|
+
type: "object",
|
|
336
|
+
properties: {
|
|
337
|
+
sessionId: { type: "string" },
|
|
338
|
+
tabId: { type: "integer" },
|
|
339
|
+
selector: { type: "string" },
|
|
340
|
+
text: { type: "string" },
|
|
341
|
+
urlIncludes: { type: "string" },
|
|
342
|
+
idle: { type: "boolean" },
|
|
343
|
+
timeoutMs: { type: "integer", description: "Default 10000, max 120000" },
|
|
344
|
+
},
|
|
345
|
+
additionalProperties: false,
|
|
346
|
+
},
|
|
347
|
+
tier: "refine",
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
name: "local_browser_evaluate",
|
|
351
|
+
description: "Run JavaScript in the page and return its value as JSON. Full-power tier only. The page is the user's real browser: read what you need, do not exfiltrate credentials, and prefer snapshot and act for ordinary interaction.",
|
|
352
|
+
inputSchema: {
|
|
353
|
+
type: "object",
|
|
354
|
+
properties: {
|
|
355
|
+
sessionId: { type: "string" },
|
|
356
|
+
tabId: { type: "integer" },
|
|
357
|
+
expression: { type: "string", description: "An expression or a function body; return a JSON-serializable value" },
|
|
358
|
+
world: { type: "string", enum: ["main", "isolated"] },
|
|
359
|
+
awaitPromise: { type: "boolean" },
|
|
360
|
+
timeoutMs: { type: "integer" },
|
|
361
|
+
},
|
|
362
|
+
required: ["expression"],
|
|
363
|
+
additionalProperties: false,
|
|
364
|
+
},
|
|
365
|
+
tier: "full",
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
name: "local_browser_storage",
|
|
369
|
+
description: "Read or write cookies, localStorage or sessionStorage for the page. Full-power tier only. Never print secret values into the task; report only what the task needs.",
|
|
370
|
+
inputSchema: {
|
|
371
|
+
type: "object",
|
|
372
|
+
properties: {
|
|
373
|
+
sessionId: { type: "string" },
|
|
374
|
+
tabId: { type: "integer" },
|
|
375
|
+
kind: { type: "string", enum: ["cookies", "local", "session"] },
|
|
376
|
+
op: { type: "string", enum: ["get", "set", "clear"] },
|
|
377
|
+
url: { type: "string" },
|
|
378
|
+
name: { type: "string" },
|
|
379
|
+
entries: { type: "array", items: { type: "object", properties: { name: { type: "string" }, value: { type: "string" } }, required: ["name", "value"], additionalProperties: false } },
|
|
380
|
+
},
|
|
381
|
+
required: ["kind", "op"],
|
|
382
|
+
additionalProperties: false,
|
|
383
|
+
},
|
|
384
|
+
tier: "full",
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
name: "local_browser_network",
|
|
388
|
+
description: "List recent network requests of the tab, optionally with response bodies. Full-power tier only. Use it to diagnose a failing call instead of guessing from the page.",
|
|
389
|
+
inputSchema: {
|
|
390
|
+
type: "object",
|
|
391
|
+
properties: {
|
|
392
|
+
sessionId: { type: "string" },
|
|
393
|
+
tabId: { type: "integer" },
|
|
394
|
+
op: { type: "string", enum: ["list", "clear"] },
|
|
395
|
+
limit: { type: "integer", description: "Default 50, max 200" },
|
|
396
|
+
includeBodies: { type: "boolean" },
|
|
397
|
+
urlIncludes: { type: "string" },
|
|
398
|
+
method: { type: "string" },
|
|
399
|
+
},
|
|
400
|
+
required: ["op"],
|
|
401
|
+
additionalProperties: false,
|
|
402
|
+
},
|
|
403
|
+
tier: "full",
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
name: "local_browser_upload",
|
|
407
|
+
description: "Attach files from the task to a file input on the page. Full-power tier only. Pass attachmentIds from the task's attachments.",
|
|
408
|
+
inputSchema: {
|
|
409
|
+
type: "object",
|
|
410
|
+
properties: {
|
|
411
|
+
sessionId: { type: "string" },
|
|
412
|
+
tabId: { type: "integer" },
|
|
413
|
+
ref: { type: "string" },
|
|
414
|
+
selector: { type: "string" },
|
|
415
|
+
attachmentIds: { type: "array", items: { type: "string" } },
|
|
416
|
+
},
|
|
417
|
+
required: ["attachmentIds"],
|
|
418
|
+
additionalProperties: false,
|
|
419
|
+
},
|
|
420
|
+
tier: "full",
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
name: "local_browser_download",
|
|
424
|
+
description: "List the tab's downloads, or save one into the task as an attachment. Full-power tier only.",
|
|
425
|
+
inputSchema: {
|
|
426
|
+
type: "object",
|
|
427
|
+
properties: {
|
|
428
|
+
sessionId: { type: "string" },
|
|
429
|
+
tabId: { type: "integer" },
|
|
430
|
+
op: { type: "string", enum: ["list", "save"] },
|
|
431
|
+
downloadId: { type: "integer" },
|
|
432
|
+
},
|
|
433
|
+
required: ["op"],
|
|
434
|
+
additionalProperties: false,
|
|
435
|
+
},
|
|
436
|
+
tier: "full",
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
name: "local_browser_close",
|
|
440
|
+
description: "Close a tab, or the whole paired browser session, when you are done. Closing a session does not sign the user out; it disconnects Paperclip from that browser.",
|
|
441
|
+
inputSchema: {
|
|
442
|
+
type: "object",
|
|
443
|
+
properties: {
|
|
444
|
+
sessionId: { type: "string" },
|
|
445
|
+
tabId: { type: "integer" },
|
|
446
|
+
closeSession: { type: "boolean" },
|
|
447
|
+
},
|
|
448
|
+
additionalProperties: false,
|
|
449
|
+
},
|
|
450
|
+
tier: "refine",
|
|
451
|
+
},
|
|
452
|
+
];
|
|
453
|
+
export const LOCAL_BROWSER_TOOL_NAMES = LOCAL_BROWSER_TOOLS.map((tool) => tool.name);
|
|
454
|
+
export const LOCAL_BROWSER_FULL_TIER_TOOL_NAMES = LOCAL_BROWSER_TOOLS.filter((tool) => tool.tier === "full").map((tool) => tool.name);
|
|
455
|
+
export function localBrowserToolRequiresFullTier(name) {
|
|
456
|
+
return LOCAL_BROWSER_FULL_TIER_TOOL_NAMES.includes(name);
|
|
457
|
+
}
|
|
458
|
+
export const localBrowserSettingsSchema = z
|
|
459
|
+
.object({
|
|
460
|
+
tier: localBrowserTierSchema.default("refine"),
|
|
461
|
+
allowedOrigins: z.array(z.string().min(1)).max(200).default([]),
|
|
462
|
+
})
|
|
463
|
+
.strict();
|
|
464
|
+
export function localBrowserOriginOf(rawUrl) {
|
|
465
|
+
try {
|
|
466
|
+
const parsed = new URL(rawUrl);
|
|
467
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:")
|
|
468
|
+
return null;
|
|
469
|
+
return parsed.origin;
|
|
470
|
+
}
|
|
471
|
+
catch {
|
|
472
|
+
return null;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
export function localBrowserOriginAllowed(settings, rawUrl) {
|
|
476
|
+
if (settings.tier === "full")
|
|
477
|
+
return true;
|
|
478
|
+
const origin = localBrowserOriginOf(rawUrl);
|
|
479
|
+
if (!origin)
|
|
480
|
+
return false;
|
|
481
|
+
return settings.allowedOrigins.some((entry) => {
|
|
482
|
+
const rule = entry.trim().toLowerCase();
|
|
483
|
+
if (!rule)
|
|
484
|
+
return false;
|
|
485
|
+
if (rule === "*")
|
|
486
|
+
return true;
|
|
487
|
+
if (rule.startsWith("*.")) {
|
|
488
|
+
const suffix = rule.slice(1);
|
|
489
|
+
const host = new URL(origin).host.toLowerCase();
|
|
490
|
+
return host.endsWith(suffix) || host === suffix.slice(1);
|
|
491
|
+
}
|
|
492
|
+
const normalized = localBrowserOriginOf(rule) ?? rule;
|
|
493
|
+
return normalized.toLowerCase() === origin.toLowerCase();
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
export const LOCAL_BROWSER_MOUSE_ACTIONS = ["move", "down", "up"];
|
|
497
|
+
export const LOCAL_BROWSER_KEY_ACTIONS = ["down", "up"];
|
|
498
|
+
export const localBrowserInputSchema = z.discriminatedUnion("kind", [
|
|
499
|
+
z
|
|
500
|
+
.object({
|
|
501
|
+
kind: z.literal("mouse"),
|
|
502
|
+
action: z.enum(LOCAL_BROWSER_MOUSE_ACTIONS),
|
|
503
|
+
x: z.number().int().min(0),
|
|
504
|
+
y: z.number().int().min(0),
|
|
505
|
+
button: z.enum(["left", "middle", "right"]).optional(),
|
|
506
|
+
clickCount: z.number().int().min(1).max(3).optional(),
|
|
507
|
+
})
|
|
508
|
+
.strict(),
|
|
509
|
+
z
|
|
510
|
+
.object({
|
|
511
|
+
kind: z.literal("wheel"),
|
|
512
|
+
deltaX: z.number(),
|
|
513
|
+
deltaY: z.number(),
|
|
514
|
+
x: z.number().int().min(0),
|
|
515
|
+
y: z.number().int().min(0),
|
|
516
|
+
})
|
|
517
|
+
.strict(),
|
|
518
|
+
z
|
|
519
|
+
.object({
|
|
520
|
+
kind: z.literal("key"),
|
|
521
|
+
action: z.enum(LOCAL_BROWSER_KEY_ACTIONS),
|
|
522
|
+
key: z.string().min(1).max(64),
|
|
523
|
+
code: z.string().min(1).max(64).optional(),
|
|
524
|
+
text: z.string().max(4000).optional(),
|
|
525
|
+
alt: z.boolean().optional(),
|
|
526
|
+
ctrl: z.boolean().optional(),
|
|
527
|
+
meta: z.boolean().optional(),
|
|
528
|
+
shift: z.boolean().optional(),
|
|
529
|
+
})
|
|
530
|
+
.strict(),
|
|
531
|
+
]);
|
|
532
|
+
export const localBrowserViewerFrameEventSchema = z
|
|
533
|
+
.object({
|
|
534
|
+
type: z.literal("frame"),
|
|
535
|
+
dataUrl: z.string().startsWith("data:image/"),
|
|
536
|
+
width: z.number().int().positive(),
|
|
537
|
+
height: z.number().int().positive(),
|
|
538
|
+
tabId: z.number().int().nonnegative().optional(),
|
|
539
|
+
})
|
|
540
|
+
.strict();
|
|
541
|
+
export const localBrowserViewerStateEventSchema = z
|
|
542
|
+
.object({
|
|
543
|
+
type: z.literal("state"),
|
|
544
|
+
state: z.enum(["connected", "viewer_unavailable", "agent_streaming", "agent_idle", "disconnected"]),
|
|
545
|
+
tabId: z.number().int().nonnegative().optional(),
|
|
546
|
+
message: z.string().max(400).optional(),
|
|
547
|
+
})
|
|
548
|
+
.strict();
|
|
549
|
+
export const localBrowserViewerEventSchema = z.discriminatedUnion("type", [
|
|
550
|
+
localBrowserViewerFrameEventSchema,
|
|
551
|
+
localBrowserViewerStateEventSchema,
|
|
552
|
+
]);
|
|
553
|
+
export const localBrowserTabsEventSchema = z
|
|
554
|
+
.object({
|
|
555
|
+
type: z.literal("event"),
|
|
556
|
+
event: z.literal("tabs"),
|
|
557
|
+
data: z.object({ tabs: z.array(localBrowserTabSchema) }).strict(),
|
|
558
|
+
})
|
|
559
|
+
.strict();
|
|
560
|
+
export const localBrowserFrameEventSchema = z
|
|
561
|
+
.object({
|
|
562
|
+
type: z.literal("event"),
|
|
563
|
+
event: z.literal("frame"),
|
|
564
|
+
data: z
|
|
565
|
+
.object({
|
|
566
|
+
dataUrl: z.string().startsWith("data:image/"),
|
|
567
|
+
width: z.number().int().positive(),
|
|
568
|
+
height: z.number().int().positive(),
|
|
569
|
+
tabId: z.number().int().nonnegative().optional(),
|
|
570
|
+
})
|
|
571
|
+
.strict(),
|
|
572
|
+
})
|
|
573
|
+
.strict();
|
|
574
|
+
export const localBrowserStateEventSchema = z
|
|
575
|
+
.object({
|
|
576
|
+
type: z.literal("event"),
|
|
577
|
+
event: z.literal("state"),
|
|
578
|
+
data: z
|
|
579
|
+
.object({
|
|
580
|
+
state: z.enum(["connected", "viewer_unavailable", "agent_streaming", "agent_idle", "disconnected"]),
|
|
581
|
+
tabId: z.number().int().nonnegative().optional(),
|
|
582
|
+
message: z.string().max(400).optional(),
|
|
583
|
+
})
|
|
584
|
+
.strict(),
|
|
585
|
+
})
|
|
586
|
+
.strict();
|
|
587
|
+
export const localBrowserExtensionEventFrameSchema = z.discriminatedUnion("event", [
|
|
588
|
+
localBrowserTabsEventSchema,
|
|
589
|
+
localBrowserFrameEventSchema,
|
|
590
|
+
localBrowserStateEventSchema,
|
|
591
|
+
]);
|
|
592
|
+
export const LOCAL_BROWSER_PAIRING_CODE_LENGTH = 8;
|
|
593
|
+
export const localBrowserPairingStartSchema = z
|
|
594
|
+
.object({
|
|
595
|
+
client: localBrowserClientSchema.optional(),
|
|
596
|
+
label: z.string().min(1).max(80).optional(),
|
|
597
|
+
})
|
|
598
|
+
.strict();
|
|
599
|
+
export const localBrowserPairingStartResultSchema = z
|
|
600
|
+
.object({
|
|
601
|
+
code: z.string().length(LOCAL_BROWSER_PAIRING_CODE_LENGTH),
|
|
602
|
+
expiresAt: z.string(),
|
|
603
|
+
connectUrls: z.array(z.string()),
|
|
604
|
+
})
|
|
605
|
+
.strict();
|
|
606
|
+
export const localBrowserBridgeFrameSchema = z.discriminatedUnion("type", [
|
|
607
|
+
z.object({ type: z.literal("hello"), protocol: z.number().int(), client: localBrowserClientSchema, clientVersion: z.string(), label: z.string(), profileName: z.string().nullable(), tabs: z.array(localBrowserTabSchema) }).strict(),
|
|
608
|
+
z.object({ type: z.literal("hello_ack"), sessionId: z.string().uuid(), sessionToken: z.string(), tier: localBrowserTierSchema, allowedOrigins: z.array(z.string()) }).strict(),
|
|
609
|
+
z.object({ type: z.literal("call"), id: z.string(), tool: z.string(), args: z.unknown() }).strict(),
|
|
610
|
+
z.object({ type: z.literal("result"), id: z.string(), ok: z.boolean(), result: z.unknown().optional(), error: localBrowserToolErrorSchema.optional() }).strict(),
|
|
611
|
+
z.object({ type: z.literal("event"), event: z.string(), data: z.unknown() }).strict(),
|
|
612
|
+
z.object({ type: z.literal("ping"), at: z.string() }).strict(),
|
|
613
|
+
z.object({ type: z.literal("pong"), at: z.string() }).strict(),
|
|
614
|
+
]);
|
|
615
|
+
//# sourceMappingURL=local-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-browser.js","sourceRoot":"","sources":["../src/local-browser.ts"],"names":[],"mappings":"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"}
|