synabun 2026.3.31007 → 2026.4.1
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/CHANGELOG.md +51 -52
- package/hooks/claude-code/prompt-submit.mjs +6 -6
- package/mcp-server/dist/services/neural-interface.d.ts +20 -19
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
- package/mcp-server/dist/services/neural-interface.js +52 -45
- package/mcp-server/dist/services/neural-interface.js.map +1 -1
- package/mcp-server/dist/tools/browser-advanced.d.ts +4 -0
- package/mcp-server/dist/tools/browser-advanced.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-advanced.js +7 -4
- package/mcp-server/dist/tools/browser-advanced.js.map +1 -1
- package/mcp-server/dist/tools/browser-interact.d.ts +16 -0
- package/mcp-server/dist/tools/browser-interact.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-interact.js +25 -16
- package/mcp-server/dist/tools/browser-interact.js.map +1 -1
- package/mcp-server/dist/tools/browser-navigate.d.ts +8 -0
- package/mcp-server/dist/tools/browser-navigate.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-navigate.js +13 -8
- package/mcp-server/dist/tools/browser-navigate.js.map +1 -1
- package/mcp-server/dist/tools/browser-observe.d.ts +48 -0
- package/mcp-server/dist/tools/browser-observe.d.ts.map +1 -1
- package/mcp-server/dist/tools/browser-observe.js +74 -49
- package/mcp-server/dist/tools/browser-observe.js.map +1 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +20 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.js +39 -34
- package/mcp-server/dist/tools/leonardo-browser-tools.js.map +1 -1
- package/mcp-server/src/services/neural-interface.ts +58 -46
- package/mcp-server/src/tools/browser-advanced.ts +10 -5
- package/mcp-server/src/tools/browser-interact.ts +34 -24
- package/mcp-server/src/tools/browser-navigate.ts +83 -77
- package/mcp-server/src/tools/browser-observe.ts +99 -73
- package/mcp-server/src/tools/leonardo-browser-tools.ts +47 -37
- package/neural-interface/public/shared/styles.css +49 -0
- package/neural-interface/public/shared/ui-automation-studio.js +71 -3
- package/neural-interface/public/shared/ui-claude-panel.js +29 -23
- package/neural-interface/public/shared/ui-settings.js +10 -10
- package/neural-interface/public/shared/ui-terminal.js +9 -7
- package/neural-interface/server.js +732 -386
- package/package.json +1 -1
|
@@ -3,12 +3,14 @@ export declare const browserClickSchema: {
|
|
|
3
3
|
selector: z.ZodString;
|
|
4
4
|
nthMatch: z.ZodOptional<z.ZodNumber>;
|
|
5
5
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
6
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
6
7
|
};
|
|
7
8
|
export declare const browserClickDescription: string;
|
|
8
9
|
export declare function handleBrowserClick(args: {
|
|
9
10
|
selector: string;
|
|
10
11
|
nthMatch?: number;
|
|
11
12
|
sessionId?: string;
|
|
13
|
+
tabId?: string;
|
|
12
14
|
}): Promise<{
|
|
13
15
|
content: {
|
|
14
16
|
type: "text";
|
|
@@ -20,6 +22,7 @@ export declare const browserFillSchema: {
|
|
|
20
22
|
value: z.ZodString;
|
|
21
23
|
nthMatch: z.ZodOptional<z.ZodNumber>;
|
|
22
24
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
25
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
23
26
|
};
|
|
24
27
|
export declare const browserFillDescription: string;
|
|
25
28
|
export declare function handleBrowserFill(args: {
|
|
@@ -27,6 +30,7 @@ export declare function handleBrowserFill(args: {
|
|
|
27
30
|
value: string;
|
|
28
31
|
nthMatch?: number;
|
|
29
32
|
sessionId?: string;
|
|
33
|
+
tabId?: string;
|
|
30
34
|
}): Promise<{
|
|
31
35
|
content: {
|
|
32
36
|
type: "text";
|
|
@@ -38,6 +42,7 @@ export declare const browserTypeSchema: {
|
|
|
38
42
|
text: z.ZodString;
|
|
39
43
|
nthMatch: z.ZodOptional<z.ZodNumber>;
|
|
40
44
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
45
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
41
46
|
};
|
|
42
47
|
export declare const browserTypeDescription: string;
|
|
43
48
|
export declare function handleBrowserType(args: {
|
|
@@ -45,6 +50,7 @@ export declare function handleBrowserType(args: {
|
|
|
45
50
|
text: string;
|
|
46
51
|
nthMatch?: number;
|
|
47
52
|
sessionId?: string;
|
|
53
|
+
tabId?: string;
|
|
48
54
|
}): Promise<{
|
|
49
55
|
content: {
|
|
50
56
|
type: "text";
|
|
@@ -55,12 +61,14 @@ export declare const browserHoverSchema: {
|
|
|
55
61
|
selector: z.ZodString;
|
|
56
62
|
nthMatch: z.ZodOptional<z.ZodNumber>;
|
|
57
63
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
64
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
58
65
|
};
|
|
59
66
|
export declare const browserHoverDescription = "Hover over an element. Useful for revealing dropdowns, tooltips, or hover-triggered content. Accepts Playwright selectors.";
|
|
60
67
|
export declare function handleBrowserHover(args: {
|
|
61
68
|
selector: string;
|
|
62
69
|
nthMatch?: number;
|
|
63
70
|
sessionId?: string;
|
|
71
|
+
tabId?: string;
|
|
64
72
|
}): Promise<{
|
|
65
73
|
content: {
|
|
66
74
|
type: "text";
|
|
@@ -72,6 +80,7 @@ export declare const browserSelectSchema: {
|
|
|
72
80
|
value: z.ZodString;
|
|
73
81
|
nthMatch: z.ZodOptional<z.ZodNumber>;
|
|
74
82
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
83
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
75
84
|
};
|
|
76
85
|
export declare const browserSelectDescription = "Select an option from a <select> dropdown by CSS selector and option value.";
|
|
77
86
|
export declare function handleBrowserSelect(args: {
|
|
@@ -79,6 +88,7 @@ export declare function handleBrowserSelect(args: {
|
|
|
79
88
|
value: string;
|
|
80
89
|
nthMatch?: number;
|
|
81
90
|
sessionId?: string;
|
|
91
|
+
tabId?: string;
|
|
82
92
|
}): Promise<{
|
|
83
93
|
content: {
|
|
84
94
|
type: "text";
|
|
@@ -88,11 +98,13 @@ export declare function handleBrowserSelect(args: {
|
|
|
88
98
|
export declare const browserPressSchema: {
|
|
89
99
|
key: z.ZodString;
|
|
90
100
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
101
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
91
102
|
};
|
|
92
103
|
export declare const browserPressDescription = "Press a keyboard key or key combination. Supports modifiers like Control+A, Shift+Enter, etc.";
|
|
93
104
|
export declare function handleBrowserPress(args: {
|
|
94
105
|
key: string;
|
|
95
106
|
sessionId?: string;
|
|
107
|
+
tabId?: string;
|
|
96
108
|
}): Promise<{
|
|
97
109
|
content: {
|
|
98
110
|
type: "text";
|
|
@@ -104,6 +116,7 @@ export declare const browserScrollSchema: {
|
|
|
104
116
|
distance: z.ZodOptional<z.ZodNumber>;
|
|
105
117
|
selector: z.ZodOptional<z.ZodString>;
|
|
106
118
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
119
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
107
120
|
};
|
|
108
121
|
export declare const browserScrollDescription: string;
|
|
109
122
|
export declare function handleBrowserScroll(args: {
|
|
@@ -111,6 +124,7 @@ export declare function handleBrowserScroll(args: {
|
|
|
111
124
|
distance?: number;
|
|
112
125
|
selector?: string;
|
|
113
126
|
sessionId?: string;
|
|
127
|
+
tabId?: string;
|
|
114
128
|
}): Promise<{
|
|
115
129
|
content: {
|
|
116
130
|
type: "text";
|
|
@@ -122,6 +136,7 @@ export declare const browserUploadSchema: {
|
|
|
122
136
|
filePaths: z.ZodArray<z.ZodString, "many">;
|
|
123
137
|
nthMatch: z.ZodOptional<z.ZodNumber>;
|
|
124
138
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
139
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
125
140
|
};
|
|
126
141
|
export declare const browserUploadDescription: string;
|
|
127
142
|
export declare function handleBrowserUpload(args: {
|
|
@@ -129,6 +144,7 @@ export declare function handleBrowserUpload(args: {
|
|
|
129
144
|
filePaths: string[];
|
|
130
145
|
nthMatch?: number;
|
|
131
146
|
sessionId?: string;
|
|
147
|
+
tabId?: string;
|
|
132
148
|
}): Promise<{
|
|
133
149
|
content: {
|
|
134
150
|
type: "text";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-interact.d.ts","sourceRoot":"","sources":["../../src/tools/browser-interact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-interact.d.ts","sourceRoot":"","sources":["../../src/tools/browser-interact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import * as ni from '../services/neural-interface.js';
|
|
3
3
|
import { text } from './response.js';
|
|
4
|
+
const tabIdField = z.string().optional().describe('Target a specific tab within the session. Auto-resolved from environment if omitted.');
|
|
4
5
|
function formatClickHints(result) {
|
|
5
6
|
const hints = result.hints;
|
|
6
7
|
if (!hints?.length)
|
|
@@ -18,6 +19,7 @@ export const browserClickSchema = {
|
|
|
18
19
|
selector: z.string().describe('Playwright selector for the element to click. Use CSS selectors (e.g. "button.submit", "#login"), text selectors (e.g. \'text="Sign in"\'), or Playwright extensions like \'button:has-text("Retry")\'. NEVER use :contains() — use :has-text() instead.'),
|
|
19
20
|
nthMatch: z.coerce.number().int().min(0).optional().describe('If the selector matches multiple elements, click the Nth one (0-indexed). Facebook: composer trigger appears in sidebar + main — use nthMatch: 0 to click the first match.'),
|
|
20
21
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
22
|
+
tabId: tabIdField,
|
|
21
23
|
};
|
|
22
24
|
export const browserClickDescription = 'Click an element on the page. Accepts Playwright selectors: CSS selectors, text="...", :has-text("..."), role=button[name="..."], or [data-testid="..."]. Use browser_snapshot first to identify interactive elements. ' +
|
|
23
25
|
'Twitter/X stable selectors: [data-testid="tweetButton"] (post), [data-testid="like"], [data-testid="retweet"], [data-testid="reply"], [data-testid="SideNav_NewTweet_Button"] (compose FAB). ' +
|
|
@@ -69,10 +71,10 @@ export const browserClickDescription = 'Click an element on the page. Accepts Pl
|
|
|
69
71
|
'Messaging compose: .msg-form__contenteditable — use browser_fill to type, then click .msg-form__send-button to send. ' +
|
|
70
72
|
'Nav: a[href*="/feed/"] (Home), a[href*="/mynetwork/"] (Network), a[href*="/jobs/"] (Jobs), a[href*="/messaging/"] (Messages), a[href*="/notifications/"] (Notifications).';
|
|
71
73
|
export async function handleBrowserClick(args) {
|
|
72
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
74
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
73
75
|
if ('error' in resolved)
|
|
74
76
|
return text(resolved.error);
|
|
75
|
-
const result = await ni.click(resolved.sessionId, args.selector, args.nthMatch);
|
|
77
|
+
const result = await ni.click(resolved.sessionId, args.selector, args.nthMatch, resolved.tabId);
|
|
76
78
|
if (result.error)
|
|
77
79
|
return text(`Click failed: ${result.error}${formatClickHints(result)}`);
|
|
78
80
|
return text(`Clicked "${args.selector}" — now at ${result.url} "${result.title}"`);
|
|
@@ -83,14 +85,15 @@ export const browserFillSchema = {
|
|
|
83
85
|
value: z.string().describe('The text value to fill into the element. Clears existing content first.'),
|
|
84
86
|
nthMatch: z.coerce.number().int().min(0).optional().describe('If the selector matches multiple elements, fill the Nth one (0-indexed).'),
|
|
85
87
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
88
|
+
tabId: tabIdField,
|
|
86
89
|
};
|
|
87
90
|
export const browserFillDescription = 'Clear an input field and fill it with new text. Accepts Playwright selectors: CSS, text="...", :has-text("..."), [data-testid="..."]. Twitter/X: compose box is [data-testid="tweetTextarea_0"], search is [data-testid="SearchBox_Search_Input"]. TikTok search: [data-e2e="search-user-input"]. WhatsApp search: input[aria-label="Pesquisar ou começar uma nova conversa"]. ' +
|
|
88
91
|
'Instagram: comment box is textarea[aria-label="Adicione um comentário..."] (PT) / textarea[aria-label="Add a comment…"] (EN). Use browser_fill for comment text, then press Enter to submit.';
|
|
89
92
|
export async function handleBrowserFill(args) {
|
|
90
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
93
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
91
94
|
if ('error' in resolved)
|
|
92
95
|
return text(resolved.error);
|
|
93
|
-
const result = await ni.fill(resolved.sessionId, args.selector, args.value, args.nthMatch);
|
|
96
|
+
const result = await ni.fill(resolved.sessionId, args.selector, args.value, args.nthMatch, resolved.tabId);
|
|
94
97
|
if (result.error)
|
|
95
98
|
return text(`Fill failed: ${result.error}${formatClickHints(result)}`);
|
|
96
99
|
const location = result.url ? ` — ${result.url} "${result.title}"` : '';
|
|
@@ -102,6 +105,7 @@ export const browserTypeSchema = {
|
|
|
102
105
|
text: z.string().describe('The text to type character by character (appends to existing content).'),
|
|
103
106
|
nthMatch: z.coerce.number().int().min(0).optional().describe('If the selector matches multiple elements, type into the Nth one (0-indexed). Twitter/X reply dialog has 2 tweetTextarea_0 elements — use nthMatch to disambiguate.'),
|
|
104
107
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
108
|
+
tabId: tabIdField,
|
|
105
109
|
};
|
|
106
110
|
export const browserTypeDescription = 'Type text character by character (simulates real keystrokes, appends to existing content). Provide a selector to target an element, or omit to type into whatever is currently focused. ' +
|
|
107
111
|
'Prefer browser_type over browser_fill for contenteditable editors — both Twitter/X ([data-testid="tweetTextarea_0"]) and Facebook use them. ' +
|
|
@@ -113,10 +117,10 @@ export const browserTypeDescription = 'Type text character by character (simulat
|
|
|
113
117
|
'WhatsApp status text composer: .lexical-rich-text-input div[contenteditable="true"]. ' +
|
|
114
118
|
'Instagram: Comment on post pages uses a native textarea (NOT contenteditable) — use browser_fill instead of browser_type. For DMs, navigate to instagram.com/direct/inbox/ first. Search: click svg[aria-label="Pesquisa"] in sidebar to open search panel, then type in the input that appears.';
|
|
115
119
|
export async function handleBrowserType(args) {
|
|
116
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
120
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
117
121
|
if ('error' in resolved)
|
|
118
122
|
return text(resolved.error);
|
|
119
|
-
const result = await ni.type(resolved.sessionId, args.selector ?? null, args.text, args.nthMatch);
|
|
123
|
+
const result = await ni.type(resolved.sessionId, args.selector ?? null, args.text, args.nthMatch, resolved.tabId);
|
|
120
124
|
if (result.error)
|
|
121
125
|
return text(`Type failed: ${result.error}${formatClickHints(result)}`);
|
|
122
126
|
const target = args.selector ? `"${args.selector}"` : 'focused element';
|
|
@@ -128,13 +132,14 @@ export const browserHoverSchema = {
|
|
|
128
132
|
selector: z.string().describe('Playwright selector for the element to hover over (CSS, text="...", :has-text("...")).'),
|
|
129
133
|
nthMatch: z.coerce.number().int().min(0).optional().describe('If the selector matches multiple elements, hover over the Nth one (0-indexed).'),
|
|
130
134
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
135
|
+
tabId: tabIdField,
|
|
131
136
|
};
|
|
132
137
|
export const browserHoverDescription = 'Hover over an element. Useful for revealing dropdowns, tooltips, or hover-triggered content. Accepts Playwright selectors.';
|
|
133
138
|
export async function handleBrowserHover(args) {
|
|
134
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
139
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
135
140
|
if ('error' in resolved)
|
|
136
141
|
return text(resolved.error);
|
|
137
|
-
const result = await ni.hover(resolved.sessionId, args.selector, args.nthMatch);
|
|
142
|
+
const result = await ni.hover(resolved.sessionId, args.selector, args.nthMatch, resolved.tabId);
|
|
138
143
|
if (result.error)
|
|
139
144
|
return text(`Hover failed: ${result.error}${formatClickHints(result)}`);
|
|
140
145
|
const location = result.url ? ` — ${result.url} "${result.title}"` : '';
|
|
@@ -146,13 +151,14 @@ export const browserSelectSchema = {
|
|
|
146
151
|
value: z.string().describe('The option value to select.'),
|
|
147
152
|
nthMatch: z.coerce.number().int().min(0).optional().describe('If the selector matches multiple elements, select from the Nth one (0-indexed).'),
|
|
148
153
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
154
|
+
tabId: tabIdField,
|
|
149
155
|
};
|
|
150
156
|
export const browserSelectDescription = 'Select an option from a <select> dropdown by CSS selector and option value.';
|
|
151
157
|
export async function handleBrowserSelect(args) {
|
|
152
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
158
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
153
159
|
if ('error' in resolved)
|
|
154
160
|
return text(resolved.error);
|
|
155
|
-
const result = await ni.selectOption(resolved.sessionId, args.selector, args.value, args.nthMatch);
|
|
161
|
+
const result = await ni.selectOption(resolved.sessionId, args.selector, args.value, args.nthMatch, resolved.tabId);
|
|
156
162
|
if (result.error)
|
|
157
163
|
return text(`Select failed: ${result.error}${formatClickHints(result)}`);
|
|
158
164
|
const location = result.url ? ` — ${result.url} "${result.title}"` : '';
|
|
@@ -162,13 +168,14 @@ export async function handleBrowserSelect(args) {
|
|
|
162
168
|
export const browserPressSchema = {
|
|
163
169
|
key: z.string().describe('Key or key combo to press (e.g. "Enter", "Tab", "Control+A", "Escape", "ArrowDown").'),
|
|
164
170
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
171
|
+
tabId: tabIdField,
|
|
165
172
|
};
|
|
166
173
|
export const browserPressDescription = 'Press a keyboard key or key combination. Supports modifiers like Control+A, Shift+Enter, etc.';
|
|
167
174
|
export async function handleBrowserPress(args) {
|
|
168
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
175
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
169
176
|
if ('error' in resolved)
|
|
170
177
|
return text(resolved.error);
|
|
171
|
-
const result = await ni.pressKey(resolved.sessionId, args.key);
|
|
178
|
+
const result = await ni.pressKey(resolved.sessionId, args.key, resolved.tabId);
|
|
172
179
|
if (result.error)
|
|
173
180
|
return text(`Press failed: ${result.error}`);
|
|
174
181
|
const location = result.url ? ` — ${result.url} "${result.title}"` : '';
|
|
@@ -180,15 +187,16 @@ export const browserScrollSchema = {
|
|
|
180
187
|
distance: z.coerce.number().optional().describe('Pixels to scroll (default: 500).'),
|
|
181
188
|
selector: z.string().optional().describe('Scroll within a specific element instead of the page. Twitter: [data-testid="primaryColumn"] for main feed. Facebook: [role="feed"] for group/page post feed. TikTok: [data-e2e="comment-list"] for comment panel, [data-tt="components_PostTable_Container"] for Studio content table. WhatsApp: [aria-label="Lista de conversas"] for chat list sidebar, [role="application"] or the main chat panel for message history.'),
|
|
182
189
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
190
|
+
tabId: tabIdField,
|
|
183
191
|
};
|
|
184
192
|
export const browserScrollDescription = 'Scroll the page or a specific element. Essential for infinite scroll feeds. Twitter/X: direction "down" with distance 800–1500 to load more tweets. Facebook: use selector "[role=\\"feed\\"]" to scroll within the post feed. TikTok feed: scroll "down" 800–1000px to advance to the next video. TikTok comment panel: use selector "[data-e2e=\\"comment-list\\"]". TikTok Studio table: use selector "[data-tt=\\"components_PostTable_Container\\"]". WhatsApp chat list: use selector "[aria-label=\\"Lista de conversas\\"]". WhatsApp message history: scroll "up" to load older messages. ' +
|
|
185
193
|
'Instagram: Home feed — scroll down 800–1200px to load more posts. Profile grid — scroll down to load more posts. Reels — scroll down 800px to advance to next reel. Post page comments — scroll within the comment panel to load older comments. Explore page — scroll down to load more grid posts. ' +
|
|
186
194
|
'LinkedIn: Feed — scroll down 800–1200px to load more posts. Profile — scroll down to load more sections. Notifications — scroll down for older notifications. Messaging conversations sidebar — scroll within .msg-conversations-container. Search results — scroll down for more results. My Network suggestions — scroll down for more people to follow/connect.';
|
|
187
195
|
export async function handleBrowserScroll(args) {
|
|
188
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
196
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
189
197
|
if ('error' in resolved)
|
|
190
198
|
return text(resolved.error);
|
|
191
|
-
const result = await ni.scroll(resolved.sessionId, { direction: args.direction, distance: args.distance, selector: args.selector });
|
|
199
|
+
const result = await ni.scroll(resolved.sessionId, { direction: args.direction, distance: args.distance, selector: args.selector }, resolved.tabId);
|
|
192
200
|
if (result.error)
|
|
193
201
|
return text(`Scroll failed: ${result.error}`);
|
|
194
202
|
const target = args.selector ? `"${args.selector}"` : 'page';
|
|
@@ -200,15 +208,16 @@ export const browserUploadSchema = {
|
|
|
200
208
|
filePaths: z.array(z.string()).describe('Absolute file paths to upload. Twitter supports up to 4 images or 1 video per tweet.'),
|
|
201
209
|
nthMatch: z.coerce.number().int().min(0).optional().describe('If the selector matches multiple file inputs, upload to the Nth one (0-indexed).'),
|
|
202
210
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
211
|
+
tabId: tabIdField,
|
|
203
212
|
};
|
|
204
213
|
export const browserUploadDescription = 'Upload one or more files via a file input element. For Twitter/X: click the media button first to reveal the hidden file input, then use selector \'input[data-testid="fileInput"]\'. ' +
|
|
205
214
|
'TikTok Studio: click button:has-text("Selecionar vídeo") first, then use selector \'input[type="file"]\' — supports a single video file. ' +
|
|
206
215
|
'Instagram: Click svg[aria-label="Novo post"] in sidebar to open the create dialog, then use browser_upload on the file input that appears. Supports images and videos.';
|
|
207
216
|
export async function handleBrowserUpload(args) {
|
|
208
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
217
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
209
218
|
if ('error' in resolved)
|
|
210
219
|
return text(resolved.error);
|
|
211
|
-
const result = await ni.upload(resolved.sessionId, args.selector, args.filePaths, args.nthMatch);
|
|
220
|
+
const result = await ni.upload(resolved.sessionId, args.selector, args.filePaths, args.nthMatch, resolved.tabId);
|
|
212
221
|
if (result.error)
|
|
213
222
|
return text(`Upload failed: ${result.error}${formatClickHints(result)}`);
|
|
214
223
|
return text(`Uploaded ${args.filePaths.length} file(s) via "${args.selector}" — now at ${result.url} "${result.title}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-interact.js","sourceRoot":"","sources":["../../src/tools/browser-interact.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-interact.js","sourceRoot":"","sources":["../../src/tools/browser-interact.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,13 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const browserNavigateSchema: {
|
|
3
3
|
url: z.ZodString;
|
|
4
4
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
5
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
5
6
|
};
|
|
6
7
|
export declare const browserNavigateDescription = "Navigate the browser to a URL. If no browser session exists, one is created automatically.";
|
|
7
8
|
export declare function handleBrowserNavigate(args: {
|
|
8
9
|
url: string;
|
|
9
10
|
sessionId?: string;
|
|
11
|
+
tabId?: string;
|
|
10
12
|
}): Promise<{
|
|
11
13
|
content: {
|
|
12
14
|
type: "text";
|
|
@@ -15,10 +17,12 @@ export declare function handleBrowserNavigate(args: {
|
|
|
15
17
|
}>;
|
|
16
18
|
export declare const browserGoBackSchema: {
|
|
17
19
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
20
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
18
21
|
};
|
|
19
22
|
export declare const browserGoBackDescription = "Go back to the previous page in browser history.";
|
|
20
23
|
export declare function handleBrowserGoBack(args: {
|
|
21
24
|
sessionId?: string;
|
|
25
|
+
tabId?: string;
|
|
22
26
|
}): Promise<{
|
|
23
27
|
content: {
|
|
24
28
|
type: "text";
|
|
@@ -27,10 +31,12 @@ export declare function handleBrowserGoBack(args: {
|
|
|
27
31
|
}>;
|
|
28
32
|
export declare const browserGoForwardSchema: {
|
|
29
33
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
34
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
30
35
|
};
|
|
31
36
|
export declare const browserGoForwardDescription = "Go forward to the next page in browser history.";
|
|
32
37
|
export declare function handleBrowserGoForward(args: {
|
|
33
38
|
sessionId?: string;
|
|
39
|
+
tabId?: string;
|
|
34
40
|
}): Promise<{
|
|
35
41
|
content: {
|
|
36
42
|
type: "text";
|
|
@@ -39,10 +45,12 @@ export declare function handleBrowserGoForward(args: {
|
|
|
39
45
|
}>;
|
|
40
46
|
export declare const browserReloadSchema: {
|
|
41
47
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
48
|
+
tabId: z.ZodOptional<z.ZodString>;
|
|
42
49
|
};
|
|
43
50
|
export declare const browserReloadDescription = "Reload the current page. Useful after making changes or when content is stale.";
|
|
44
51
|
export declare function handleBrowserReload(args: {
|
|
45
52
|
sessionId?: string;
|
|
53
|
+
tabId?: string;
|
|
46
54
|
}): Promise<{
|
|
47
55
|
content: {
|
|
48
56
|
type: "text";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-navigate.d.ts","sourceRoot":"","sources":["../../src/tools/browser-navigate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-navigate.d.ts","sourceRoot":"","sources":["../../src/tools/browser-navigate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,qBAAqB;;;;CAIjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,+FACuD,CAAC;AAE/F,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAQpG;AAID,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AAEF,eAAO,MAAM,wBAAwB,qDAAqD,CAAC;AAE3F,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAQrF;AAID,eAAO,MAAM,sBAAsB;;;CAGlC,CAAC;AAEF,eAAO,MAAM,2BAA2B,oDAAoD,CAAC;AAE7F,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAQxF;AAID,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AAEF,eAAO,MAAM,wBAAwB,mFAAmF,CAAC;AAEzH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAQrF"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import * as ni from '../services/neural-interface.js';
|
|
3
3
|
import { text } from './response.js';
|
|
4
|
+
const tabIdField = z.string().optional().describe('Target a specific tab within the session. Auto-resolved from environment if omitted.');
|
|
4
5
|
// ── browser_navigate ──
|
|
5
6
|
export const browserNavigateSchema = {
|
|
6
7
|
url: z.string().describe('The URL to navigate to.'),
|
|
7
8
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session or creates a new one.'),
|
|
9
|
+
tabId: tabIdField,
|
|
8
10
|
};
|
|
9
11
|
export const browserNavigateDescription = 'Navigate the browser to a URL. If no browser session exists, one is created automatically.';
|
|
10
12
|
export async function handleBrowserNavigate(args) {
|
|
11
|
-
const resolved = await ni.resolveSession(args.sessionId, { url: args.url });
|
|
13
|
+
const resolved = await ni.resolveSession(args.sessionId, { url: args.url }, args.tabId);
|
|
12
14
|
if ('error' in resolved)
|
|
13
15
|
return text(resolved.error);
|
|
14
|
-
const result = await ni.navigate(resolved.sessionId, args.url);
|
|
16
|
+
const result = await ni.navigate(resolved.sessionId, args.url, resolved.tabId);
|
|
15
17
|
if (result.error)
|
|
16
18
|
return text(`Navigation failed: ${result.error}`);
|
|
17
19
|
return text(`Navigated to ${result.url} — "${result.title}"`);
|
|
@@ -19,13 +21,14 @@ export async function handleBrowserNavigate(args) {
|
|
|
19
21
|
// ── browser_go_back ──
|
|
20
22
|
export const browserGoBackSchema = {
|
|
21
23
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
24
|
+
tabId: tabIdField,
|
|
22
25
|
};
|
|
23
26
|
export const browserGoBackDescription = 'Go back to the previous page in browser history.';
|
|
24
27
|
export async function handleBrowserGoBack(args) {
|
|
25
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
28
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
26
29
|
if ('error' in resolved)
|
|
27
30
|
return text(resolved.error);
|
|
28
|
-
const result = await ni.goBack(resolved.sessionId);
|
|
31
|
+
const result = await ni.goBack(resolved.sessionId, resolved.tabId);
|
|
29
32
|
if (result.error)
|
|
30
33
|
return text(`Go back failed: ${result.error}`);
|
|
31
34
|
return text(`Went back to ${result.url} — "${result.title}"`);
|
|
@@ -33,13 +36,14 @@ export async function handleBrowserGoBack(args) {
|
|
|
33
36
|
// ── browser_go_forward ──
|
|
34
37
|
export const browserGoForwardSchema = {
|
|
35
38
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
39
|
+
tabId: tabIdField,
|
|
36
40
|
};
|
|
37
41
|
export const browserGoForwardDescription = 'Go forward to the next page in browser history.';
|
|
38
42
|
export async function handleBrowserGoForward(args) {
|
|
39
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
43
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
40
44
|
if ('error' in resolved)
|
|
41
45
|
return text(resolved.error);
|
|
42
|
-
const result = await ni.goForward(resolved.sessionId);
|
|
46
|
+
const result = await ni.goForward(resolved.sessionId, resolved.tabId);
|
|
43
47
|
if (result.error)
|
|
44
48
|
return text(`Go forward failed: ${result.error}`);
|
|
45
49
|
return text(`Went forward to ${result.url} — "${result.title}"`);
|
|
@@ -47,13 +51,14 @@ export async function handleBrowserGoForward(args) {
|
|
|
47
51
|
// ── browser_reload ──
|
|
48
52
|
export const browserReloadSchema = {
|
|
49
53
|
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
54
|
+
tabId: tabIdField,
|
|
50
55
|
};
|
|
51
56
|
export const browserReloadDescription = 'Reload the current page. Useful after making changes or when content is stale.';
|
|
52
57
|
export async function handleBrowserReload(args) {
|
|
53
|
-
const resolved = await ni.resolveSession(args.sessionId);
|
|
58
|
+
const resolved = await ni.resolveSession(args.sessionId, undefined, args.tabId);
|
|
54
59
|
if ('error' in resolved)
|
|
55
60
|
return text(resolved.error);
|
|
56
|
-
const result = await ni.reload(resolved.sessionId);
|
|
61
|
+
const result = await ni.reload(resolved.sessionId, resolved.tabId);
|
|
57
62
|
if (result.error)
|
|
58
63
|
return text(`Reload failed: ${result.error}`);
|
|
59
64
|
return text(`Reloaded — now at ${result.url} "${result.title}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-navigate.js","sourceRoot":"","sources":["../../src/tools/browser-navigate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,yBAAyB;AAEzB,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0FAA0F,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-navigate.js","sourceRoot":"","sources":["../../src/tools/browser-navigate.ts"],"names":[],"mappings":"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"}
|