@felan-ai/ext-browser 0.3.0 → 0.5.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/NOTICE +4 -4
- package/README.md +26 -7
- package/dist/attachment.d.ts +49 -0
- package/dist/attachment.d.ts.map +1 -0
- package/dist/attachment.js +416 -0
- package/dist/attachment.js.map +1 -0
- package/dist/authorization.d.ts +29 -0
- package/dist/authorization.d.ts.map +1 -0
- package/dist/authorization.js +2 -0
- package/dist/authorization.js.map +1 -0
- package/dist/boundary.js +1 -1
- package/dist/boundary.js.map +1 -1
- package/dist/cli.d.ts +5 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +85 -101
- package/dist/cli.js.map +1 -1
- package/dist/command-policy.d.ts +8 -0
- package/dist/command-policy.d.ts.map +1 -0
- package/dist/command-policy.js +335 -0
- package/dist/command-policy.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +231 -115
- package/dist/index.js.map +1 -1
- package/dist/installer.d.ts +8 -8
- package/dist/installer.js +9 -9
- package/package.json +2 -2
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
const BLOCKED_COMMANDS = new Set([
|
|
2
|
+
'install', 'upgrade', 'doctor', 'mcp', 'chat', 'dashboard', 'stream', 'plugin',
|
|
3
|
+
'plugins', 'batch', 'confirm', 'deny', 'webmcp', 'auth', 'state', 'profile',
|
|
4
|
+
'profiles', 'restore', 'session', 'config', 'addinitscript',
|
|
5
|
+
'removeinitscript',
|
|
6
|
+
]);
|
|
7
|
+
const CONNECTION_OPTIONS = new Set(['--auto-connect', '--autoconnect', '--cdp']);
|
|
8
|
+
const OWNED_OPTIONS = new Set([
|
|
9
|
+
'--session', '--namespace', '--idle-timeout', '--json', '--content-boundaries',
|
|
10
|
+
'--max-output', '--config', '--allowed-domains', '--action-policy',
|
|
11
|
+
'--confirm-actions', '--confirm-interactive', '--allow-file-access',
|
|
12
|
+
'--profile', '--state', '--session-name', '--pin-tab', '--no-pin-tab',
|
|
13
|
+
'--no-auto-dialog', '--no-webmcp', '--executable-path', '--extension',
|
|
14
|
+
'--init-script', '--enable', '--args', '--provider', '-p', '--engine',
|
|
15
|
+
'--plugins', '--plugin',
|
|
16
|
+
]);
|
|
17
|
+
const GLOBAL_VALUE_OPTIONS = new Set([
|
|
18
|
+
'--headers', '--proxy', '--proxy-bypass', '--user-agent', '--device',
|
|
19
|
+
'--color-scheme', '--download-path', '--screenshot-dir', '--screenshot-quality',
|
|
20
|
+
'--screenshot-format', '--ca-cert', '--model',
|
|
21
|
+
]);
|
|
22
|
+
const SCREENSHOT_OPTIONS = {
|
|
23
|
+
'--full': 'switch', '-f': 'switch', '--annotate': 'boolean',
|
|
24
|
+
'--screenshot-format': 'value', '--screenshot-quality': 'value',
|
|
25
|
+
};
|
|
26
|
+
const SELECTOR_OPTIONS = { '--selector': 'value', '-s': 'value' };
|
|
27
|
+
const ATTACHED_OPTIONS = {
|
|
28
|
+
screenshot: SCREENSHOT_OPTIONS,
|
|
29
|
+
snapshot: {
|
|
30
|
+
'-i': 'switch', '--interactive': 'switch', '-c': 'switch', '--compact': 'switch',
|
|
31
|
+
'-C': 'switch', '--cursor': 'switch', '-u': 'switch', '--urls': 'switch',
|
|
32
|
+
'-d': 'value', '--depth': 'value', ...SELECTOR_OPTIONS,
|
|
33
|
+
},
|
|
34
|
+
scroll: SELECTOR_OPTIONS,
|
|
35
|
+
type: { '--clear': 'switch', '--delay': 'value' },
|
|
36
|
+
wait: {
|
|
37
|
+
'--url': 'value', '-u': 'value', '--load': 'value', '-l': 'value',
|
|
38
|
+
'--text': 'value', '-t': 'value', '--timeout': 'value',
|
|
39
|
+
},
|
|
40
|
+
read: { '--raw': 'switch', '--outline': 'switch', '--filter': 'value', '--timeout': 'value' },
|
|
41
|
+
a11y: { '--tags': 'value', ...SELECTOR_OPTIONS },
|
|
42
|
+
};
|
|
43
|
+
const ONE_ARGUMENT_COMMANDS = new Set([
|
|
44
|
+
'click', 'dblclick', 'hover', 'focus', 'check', 'uncheck', 'press', 'key',
|
|
45
|
+
'keydown', 'keyup', 'scrollintoview', 'scrollinto', 'highlight',
|
|
46
|
+
]);
|
|
47
|
+
const NO_ARGUMENT_COMMANDS = new Set(['back', 'forward', 'reload', 'close', 'quit', 'exit']);
|
|
48
|
+
const FIND_LOCATORS = new Set(['role', 'text', 'label', 'placeholder', 'alt', 'title', 'testid', 'first', 'last', 'nth']);
|
|
49
|
+
const FIND_ACTIONS = new Set(['click', 'fill', 'check', 'hover', 'text']);
|
|
50
|
+
const EXACT_LOCATORS = new Set(['role', 'text', 'label', 'placeholder', 'alt', 'title']);
|
|
51
|
+
export function findBrowserCommand(args) {
|
|
52
|
+
const first = args[0];
|
|
53
|
+
return first && /^[a-z][a-z0-9-]*$/u.test(first) ? first : undefined;
|
|
54
|
+
}
|
|
55
|
+
export function validateBrowserCommand(args) {
|
|
56
|
+
const command = findBrowserCommand(args);
|
|
57
|
+
if (!command) {
|
|
58
|
+
throw new Error('browser run args must start with an exact lowercase agent-browser command, without whitespace; place global options after the command.');
|
|
59
|
+
}
|
|
60
|
+
if (args.some(arg => arg.includes('\0')))
|
|
61
|
+
throw new Error('browser args cannot contain NUL bytes');
|
|
62
|
+
if (BLOCKED_COMMANDS.has(command)) {
|
|
63
|
+
throw new Error(`The browser tool does not run ${command}; use Felan's explicit dependency onboarding or host controls.`);
|
|
64
|
+
}
|
|
65
|
+
if (command === 'connect' || command === 'autoconnect') {
|
|
66
|
+
throw new Error('Existing-browser attachment requires browser_authorize; do not pass connection commands to browser.');
|
|
67
|
+
}
|
|
68
|
+
if (command === 'skills') {
|
|
69
|
+
throw new Error('Use browser operation "skill" to retrieve version-matched agent-browser instructions.');
|
|
70
|
+
}
|
|
71
|
+
// Native global flags are recognized even inside selector and text positions.
|
|
72
|
+
for (let index = 1; index < args.length; index++) {
|
|
73
|
+
const arg = args[index];
|
|
74
|
+
const option = arg.split('=', 1)[0];
|
|
75
|
+
if (option === '--') {
|
|
76
|
+
throw new Error('The browser tool does not accept the -- option terminator because Felan enforces trailing session and output policy.');
|
|
77
|
+
}
|
|
78
|
+
if (CONNECTION_OPTIONS.has(option)) {
|
|
79
|
+
throw new Error('Existing-browser attachment requires browser_authorize; do not pass CDP or auto-connect options to browser.');
|
|
80
|
+
}
|
|
81
|
+
if (OWNED_OPTIONS.has(option) || option === '--restore' || option.startsWith('--restore-')) {
|
|
82
|
+
throw new Error(`The browser tool owns ${option}; omit it from args.`);
|
|
83
|
+
}
|
|
84
|
+
if (['close', 'quit', 'exit'].includes(command) && ['--all', '-a'].includes(option)) {
|
|
85
|
+
throw new Error('The browser tool closes only its own Felan session; omit --all.');
|
|
86
|
+
}
|
|
87
|
+
if (GLOBAL_VALUE_OPTIONS.has(option)) {
|
|
88
|
+
if (arg !== option)
|
|
89
|
+
throw new Error(`Use separate tokens for ${option} and its value; the reviewed CLI does not support this equals form.`);
|
|
90
|
+
// A missing native global value would consume Felan's appended --session.
|
|
91
|
+
const value = args[index + 1];
|
|
92
|
+
if (value === undefined || value === '' || value.startsWith('-')) {
|
|
93
|
+
throw new Error(`Browser option ${option} requires a non-option value.`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return command;
|
|
98
|
+
}
|
|
99
|
+
export function validateAttachedBrowserCommand(args, origin) {
|
|
100
|
+
const command = validateBrowserCommand(args);
|
|
101
|
+
let rules = ATTACHED_OPTIONS[command] ?? {};
|
|
102
|
+
if (command === 'find') {
|
|
103
|
+
rules = {
|
|
104
|
+
...(args[1] === 'role' ? { '--name': 'value' } : {}),
|
|
105
|
+
...(EXACT_LOCATORS.has(args[1] ?? '') ? { '--exact': 'switch' } : {}),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const { positional, options, firstOption } = parseOptions(args.slice(1), rules);
|
|
109
|
+
const count = (minimum, maximum = minimum) => requireCount(command, positional, minimum, maximum);
|
|
110
|
+
if (ONE_ARGUMENT_COMMANDS.has(command)) {
|
|
111
|
+
count(1);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (NO_ARGUMENT_COMMANDS.has(command)) {
|
|
115
|
+
count(0);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
switch (command) {
|
|
119
|
+
case 'open':
|
|
120
|
+
case 'goto':
|
|
121
|
+
case 'navigate':
|
|
122
|
+
count(1);
|
|
123
|
+
validateNavigation(positional[0], origin);
|
|
124
|
+
return;
|
|
125
|
+
case 'fill':
|
|
126
|
+
case 'type':
|
|
127
|
+
count(2, Infinity);
|
|
128
|
+
if (firstOption === 0)
|
|
129
|
+
throw new Error('Place type options after the selector.');
|
|
130
|
+
validateIntegerOptions(options, ['--delay'], 0, 300_000);
|
|
131
|
+
return;
|
|
132
|
+
case 'select':
|
|
133
|
+
count(2, Infinity);
|
|
134
|
+
return;
|
|
135
|
+
case 'drag':
|
|
136
|
+
count(2);
|
|
137
|
+
return;
|
|
138
|
+
case 'keyboard':
|
|
139
|
+
count(2, Infinity);
|
|
140
|
+
if (!['type', 'inserttext', 'insertText'].includes(positional[0]))
|
|
141
|
+
unsupported(command);
|
|
142
|
+
return;
|
|
143
|
+
case 'scroll':
|
|
144
|
+
count(0, 2);
|
|
145
|
+
if (positional[0] !== undefined && !['up', 'down', 'left', 'right'].includes(positional[0]))
|
|
146
|
+
unsupported(command);
|
|
147
|
+
if (positional[1] !== undefined)
|
|
148
|
+
requireInteger(positional[1], 0, 2_147_483_647);
|
|
149
|
+
return;
|
|
150
|
+
case 'snapshot':
|
|
151
|
+
count(0);
|
|
152
|
+
validateIntegerOptions(options, ['--depth', '-d'], 0, 2_147_483_647);
|
|
153
|
+
return;
|
|
154
|
+
case 'screenshot':
|
|
155
|
+
count(0, 1);
|
|
156
|
+
validateScreenshotOptions(options);
|
|
157
|
+
if (positional[0] !== undefined && isScreenshotPath(positional[0])) {
|
|
158
|
+
throw new Error('Authorized browser screenshots use Felan-generated paths; omit the output path.');
|
|
159
|
+
}
|
|
160
|
+
return;
|
|
161
|
+
case 'get': {
|
|
162
|
+
const subcommand = positional[0];
|
|
163
|
+
if (subcommand === 'title' || subcommand === 'url')
|
|
164
|
+
count(1);
|
|
165
|
+
else if (subcommand === 'attr')
|
|
166
|
+
count(3);
|
|
167
|
+
else if (['text', 'html', 'value', 'count', 'box', 'styles'].includes(subcommand ?? ''))
|
|
168
|
+
count(2);
|
|
169
|
+
else
|
|
170
|
+
unsupported(command);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
case 'is':
|
|
174
|
+
count(2);
|
|
175
|
+
if (!['visible', 'enabled', 'checked'].includes(positional[0]))
|
|
176
|
+
unsupported(command);
|
|
177
|
+
return;
|
|
178
|
+
case 'find': {
|
|
179
|
+
const locator = positional[0] ?? '';
|
|
180
|
+
if (!FIND_LOCATORS.has(locator))
|
|
181
|
+
unsupported(command);
|
|
182
|
+
const actionIndex = locator === 'nth' ? 3 : 2;
|
|
183
|
+
count(actionIndex, Infinity);
|
|
184
|
+
if (locator === 'nth')
|
|
185
|
+
requireInteger(positional[1], -2_147_483_648, 2_147_483_647);
|
|
186
|
+
const action = positional[actionIndex] ?? 'click';
|
|
187
|
+
if (!FIND_ACTIONS.has(action))
|
|
188
|
+
unsupported('find action');
|
|
189
|
+
count(action === 'fill' ? actionIndex + 2 : actionIndex, action === 'fill' ? Infinity : actionIndex + 1);
|
|
190
|
+
if (firstOption !== undefined && firstOption <= actionIndex) {
|
|
191
|
+
throw new Error('Place find options after an explicit supported action.');
|
|
192
|
+
}
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
case 'mouse': {
|
|
196
|
+
const action = positional[0];
|
|
197
|
+
if (action === 'move')
|
|
198
|
+
count(3);
|
|
199
|
+
else if (action === 'wheel')
|
|
200
|
+
count(1, 3);
|
|
201
|
+
else if (action === 'down' || action === 'up') {
|
|
202
|
+
count(1, 2);
|
|
203
|
+
if (positional[1] !== undefined && !['left', 'right', 'middle'].includes(positional[1]))
|
|
204
|
+
unsupported(command);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
else
|
|
208
|
+
unsupported(command);
|
|
209
|
+
for (const value of positional.slice(1))
|
|
210
|
+
requireInteger(value, -2_147_483_648, 2_147_483_647);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
case 'dialog':
|
|
214
|
+
if (positional[0] === 'status')
|
|
215
|
+
count(1);
|
|
216
|
+
else if (positional[0] === 'accept' || positional[0] === 'dismiss')
|
|
217
|
+
count(1, 2);
|
|
218
|
+
else
|
|
219
|
+
unsupported(command);
|
|
220
|
+
return;
|
|
221
|
+
case 'wait': {
|
|
222
|
+
const modes = [...options.keys()].filter(option => option !== '--timeout');
|
|
223
|
+
count(modes.length === 0 ? 1 : 0);
|
|
224
|
+
if (modes.length > 1)
|
|
225
|
+
throw new Error('Use one supported wait condition at a time.');
|
|
226
|
+
for (const option of ['--load', '-l']) {
|
|
227
|
+
const state = options.get(option);
|
|
228
|
+
if (state !== undefined && !['load', 'domcontentloaded', 'networkidle'].includes(state))
|
|
229
|
+
unsupported('wait load state');
|
|
230
|
+
}
|
|
231
|
+
validateIntegerOptions(options, ['--timeout'], 1, 300_000);
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
case 'read':
|
|
235
|
+
count(0);
|
|
236
|
+
validateIntegerOptions(options, ['--timeout'], 1, 300_000);
|
|
237
|
+
return;
|
|
238
|
+
case 'a11y':
|
|
239
|
+
count(0);
|
|
240
|
+
return;
|
|
241
|
+
default: unsupported(command);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
export function inspectScreenshotArguments(args) {
|
|
245
|
+
const { positional, options } = parseOptions(args.slice(1), {
|
|
246
|
+
...SCREENSHOT_OPTIONS,
|
|
247
|
+
'--screenshot-dir': 'value', '--headed': 'boolean', '--debug': 'boolean',
|
|
248
|
+
'--hide-scrollbars': 'boolean', '--ignore-https-errors': 'boolean',
|
|
249
|
+
'--proxy': 'value', '--proxy-bypass': 'value', '--user-agent': 'value',
|
|
250
|
+
'--color-scheme': 'value', '--download-path': 'value', '--ca-cert': 'value',
|
|
251
|
+
'--no-ca-cert': 'boolean', '--webgpu': 'boolean', '--headers': 'value',
|
|
252
|
+
});
|
|
253
|
+
requireCount('screenshot', positional, 0, 2);
|
|
254
|
+
validateScreenshotOptions(options);
|
|
255
|
+
const path = positional[1] ?? (positional[0] !== undefined && isScreenshotPath(positional[0]) ? positional[0] : undefined);
|
|
256
|
+
return { ...(path === undefined ? {} : { path }), format: options.get('--screenshot-format') ?? 'png' };
|
|
257
|
+
}
|
|
258
|
+
function parseOptions(args, rules) {
|
|
259
|
+
const positional = [];
|
|
260
|
+
const options = new Map();
|
|
261
|
+
let firstOption;
|
|
262
|
+
for (let index = 0; index < args.length; index++) {
|
|
263
|
+
const token = args[index];
|
|
264
|
+
if (!token.startsWith('-') || /^-\d+$/u.test(token)) {
|
|
265
|
+
positional.push(token);
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
const name = token.split('=', 1)[0];
|
|
269
|
+
if (!Object.hasOwn(rules, name))
|
|
270
|
+
throw new Error(`Unsupported browser option ${name} for this command.`);
|
|
271
|
+
if (token !== name)
|
|
272
|
+
throw new Error(`Use separate tokens for ${name} and its value; the reviewed CLI does not support this equals form.`);
|
|
273
|
+
if (options.has(name))
|
|
274
|
+
throw new Error(`Duplicate browser option ${name}.`);
|
|
275
|
+
firstOption ??= positional.length;
|
|
276
|
+
const kind = rules[name];
|
|
277
|
+
const next = args[index + 1];
|
|
278
|
+
if (kind === 'value') {
|
|
279
|
+
if (next === undefined || next === '' || next.startsWith('-'))
|
|
280
|
+
throw new Error(`Browser option ${name} requires a non-option value.`);
|
|
281
|
+
options.set(name, next);
|
|
282
|
+
index++;
|
|
283
|
+
}
|
|
284
|
+
else if (kind === 'boolean' && (next === 'true' || next === 'false')) {
|
|
285
|
+
options.set(name, next);
|
|
286
|
+
index++;
|
|
287
|
+
}
|
|
288
|
+
else
|
|
289
|
+
options.set(name, 'true');
|
|
290
|
+
}
|
|
291
|
+
return { positional, options, ...(firstOption === undefined ? {} : { firstOption }) };
|
|
292
|
+
}
|
|
293
|
+
function validateNavigation(target, _origin) {
|
|
294
|
+
let url;
|
|
295
|
+
try {
|
|
296
|
+
url = new URL(target);
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
throw new Error('Authorized browser navigation requires an absolute HTTP(S) URL.');
|
|
300
|
+
}
|
|
301
|
+
if (!/^https?:\/\//iu.test(target) || /[\s\\]/u.test(target) || url.username || url.password) {
|
|
302
|
+
throw new Error('Authorized browser navigation requires an unambiguous HTTP(S) URL without credentials.');
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function isScreenshotPath(value) {
|
|
306
|
+
const relative = value.startsWith('./') || value.startsWith('../');
|
|
307
|
+
const selector = !relative && /^[.#@]/u.test(value);
|
|
308
|
+
return !selector && (relative || value.includes('/') || /\.(?:png|jpg|jpeg|webp)$/u.test(value));
|
|
309
|
+
}
|
|
310
|
+
function validateScreenshotOptions(options) {
|
|
311
|
+
const format = options.get('--screenshot-format');
|
|
312
|
+
if (format !== undefined && format !== 'png' && format !== 'jpeg')
|
|
313
|
+
throw new Error('Screenshot format must be png or jpeg.');
|
|
314
|
+
validateIntegerOptions(options, ['--screenshot-quality'], 0, 100);
|
|
315
|
+
}
|
|
316
|
+
function validateIntegerOptions(options, names, minimum, maximum) {
|
|
317
|
+
for (const name of names) {
|
|
318
|
+
const value = options.get(name);
|
|
319
|
+
if (value !== undefined)
|
|
320
|
+
requireInteger(value, minimum, maximum);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
function requireInteger(value, minimum, maximum) {
|
|
324
|
+
if (!/^-?\d+$/u.test(value) || !Number.isSafeInteger(Number(value)) || Number(value) < minimum || Number(value) > maximum) {
|
|
325
|
+
throw new Error(`Browser command requires an integer between ${minimum} and ${maximum}.`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
function requireCount(command, args, minimum, maximum) {
|
|
329
|
+
if (args.length < minimum || args.length > maximum)
|
|
330
|
+
throw new Error(`Unsupported arguments for browser ${command}.`);
|
|
331
|
+
}
|
|
332
|
+
function unsupported(command) {
|
|
333
|
+
throw new Error(`The ${command} command or subcommand is unavailable on an authorized existing browser session.`);
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=command-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-policy.js","sourceRoot":"","sources":["../src/command-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const BROWSER_AUTHORIZATION_POLICIES: readonly ["ask", "always-allow"];
|
|
2
|
+
export type BrowserAuthorizationPolicy = (typeof BROWSER_AUTHORIZATION_POLICIES)[number];
|
|
3
|
+
export declare const BROWSER_CONFIG: import("@felan-ai/agent-core").ExtensionConfigDefinition<{
|
|
4
|
+
readonly authorizationPolicy: import("@felan-ai/agent-core").ExtensionConfigField<"ask" | "always-allow">;
|
|
5
|
+
}>;
|
|
6
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,8BAA8B,kCAAmC,CAAC;AAC/E,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzF,eAAO,MAAM,cAAc;;EAUzB,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { configField, defineExtensionConfig } from '@felan-ai/agent-core';
|
|
2
|
+
export const BROWSER_AUTHORIZATION_POLICIES = ['ask', 'always-allow'];
|
|
3
|
+
export const BROWSER_CONFIG = defineExtensionConfig({
|
|
4
|
+
id: 'browser',
|
|
5
|
+
title: 'Browser',
|
|
6
|
+
fields: {
|
|
7
|
+
authorizationPolicy: configField.enum(BROWSER_AUTHORIZATION_POLICIES, {
|
|
8
|
+
default: 'ask',
|
|
9
|
+
label: 'Existing-browser authorization',
|
|
10
|
+
description: 'Whether Felan asks before reusing an existing Chrome session',
|
|
11
|
+
}),
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,KAAK,EAAE,cAAc,CAAU,CAAC;AAG/E,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;IAClD,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE;QACN,mBAAmB,EAAE,WAAW,CAAC,IAAI,CAAC,8BAA8B,EAAE;YACpE,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,gCAAgC;YACvC,WAAW,EAAE,8DAA8D;SAC5E,CAAC;KACH;CACF,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import type { FelanExtension } from '@felan-ai/agent-core';
|
|
2
|
+
import type { BrowserAuthorizationHost } from './authorization.js';
|
|
2
3
|
export declare const BROWSER_TOOL_NAME = "browser";
|
|
4
|
+
export declare const BROWSER_AUTHORIZATION_TOOL_NAME = "browser_authorize";
|
|
5
|
+
export interface BrowserExtensionOptions {
|
|
6
|
+
readonly authorizationHost?: BrowserAuthorizationHost;
|
|
7
|
+
}
|
|
8
|
+
export declare function createBrowserExtension(options?: BrowserExtensionOptions): FelanExtension;
|
|
3
9
|
declare const browserExtension: FelanExtension;
|
|
4
10
|
export default browserExtension;
|
|
11
|
+
export type { BrowserAuthorizationHost, BrowserAuthorizationOutcome, BrowserAuthorizationAttachment, BrowserAuthorizationConnection, BrowserAuthorizationRequest, BrowserAuthorizationLease, } from './authorization.js';
|
|
12
|
+
export { BROWSER_CONFIG, BROWSER_AUTHORIZATION_POLICIES } from './config.js';
|
|
13
|
+
export type { BrowserAuthorizationPolicy } from './config.js';
|
|
5
14
|
export { createBrowserSessionScope, findBrowserCommand, prepareBrowserCommand, runBrowserCli, runBrowserSkill, } from './cli.js';
|
|
6
15
|
export type { BrowserCliResult, BrowserSessionScope, PreparedBrowserCommand } from './cli.js';
|
|
7
16
|
export { inspectAgentBrowserRuntime, invalidateAgentBrowserRuntimeCache, installManagedAgentBrowser, managedAgentBrowserDirectory, managedAgentBrowserExecutable, MANAGED_AGENT_BROWSER_VERSION, resolveReviewedAgentBrowserAsset, } from './installer.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,cAAc,EAAS,MAAM,sBAAsB,CAAC;AAoBhF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AA6BnE,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,+BAA+B,sBAAsB,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CACvD;AAsBD,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,uBAA4B,GAAG,cAAc,CA+N5F;AAED,QAAA,MAAM,gBAAgB,gBAA2B,CAAC;AAgDlD,eAAe,gBAAgB,CAAC;AAEhC,YAAY,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EAClC,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,YAAY,CAAC"}
|