@felan-ai/felan 0.24.6 → 0.24.9
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/browser/authorization-host.d.ts +13 -0
- package/dist/browser/authorization-host.d.ts.map +1 -0
- package/dist/browser/authorization-host.js +113 -0
- package/dist/browser/authorization-host.js.map +1 -0
- package/dist/browser/chrome-devtools.d.ts +26 -0
- package/dist/browser/chrome-devtools.d.ts.map +1 -0
- package/dist/browser/chrome-devtools.js +180 -0
- package/dist/browser/chrome-devtools.js.map +1 -0
- package/dist/browser/connection-lease.d.ts +7 -0
- package/dist/browser/connection-lease.d.ts.map +1 -0
- package/dist/browser/connection-lease.js +247 -0
- package/dist/browser/connection-lease.js.map +1 -0
- package/dist/dependencies.js +1 -1
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +13 -0
- package/dist/extensions.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BrowserAuthorizationHost } from '@felan-ai/ext-browser';
|
|
2
|
+
import type { AgentRuntime } from '@felan-ai/agent-core';
|
|
3
|
+
import { type ChromePreflight } from './chrome-devtools.js';
|
|
4
|
+
import { createChromeConnectionLease } from './connection-lease.js';
|
|
5
|
+
export interface LocalBrowserAuthorizationDependencies {
|
|
6
|
+
readonly runtime?: AgentRuntime;
|
|
7
|
+
readonly onAttention?: (active: boolean, label?: string) => void;
|
|
8
|
+
readonly openSetup?: (applicationPath: string, signal: AbortSignal) => Promise<void>;
|
|
9
|
+
readonly inspect?: (signal: AbortSignal) => Promise<ChromePreflight>;
|
|
10
|
+
readonly createLease?: typeof createChromeConnectionLease;
|
|
11
|
+
}
|
|
12
|
+
export declare function createLocalBrowserAuthorizationHost(dependencies?: LocalBrowserAuthorizationDependencies): BrowserAuthorizationHost;
|
|
13
|
+
//# sourceMappingURL=authorization-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization-host.d.ts","sourceRoot":"","sources":["../../src/browser/authorization-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAA+B,MAAM,uBAAuB,CAAC;AACnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAA+D,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzH,OAAO,EAAE,2BAA2B,EAA8B,MAAM,uBAAuB,CAAC;AAIhG,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,2BAA2B,CAAC;CAC3D;AAED,wBAAgB,mCAAmC,CACjD,YAAY,GAAE,qCAA0C,GACvD,wBAAwB,CAK1B"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { assertAgentBrowserEnvironment, inspectChromeRemoteDebugging } from './chrome-devtools.js';
|
|
2
|
+
import { createChromeConnectionLease } from './connection-lease.js';
|
|
3
|
+
const CHROME_REMOTE_DEBUGGING_URL = 'chrome://inspect/#remote-debugging';
|
|
4
|
+
export function createLocalBrowserAuthorizationHost(dependencies = {}) {
|
|
5
|
+
return {
|
|
6
|
+
checkExecution: () => assertAgentBrowserEnvironment(),
|
|
7
|
+
authorize: (request) => authorize(request, dependencies),
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
async function authorize(request, dependencies) {
|
|
11
|
+
const context = request.extensionContext;
|
|
12
|
+
if (!context.hasUI || context.mode !== 'tui') {
|
|
13
|
+
return {
|
|
14
|
+
status: 'unavailable',
|
|
15
|
+
message: 'Existing-browser authorization requires the local interactive TUI.',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (dependencies.runtime && dependencies.runtime.kind !== 'host') {
|
|
19
|
+
return { status: 'unavailable', message: 'Existing-Chrome authorization requires the local host runtime.' };
|
|
20
|
+
}
|
|
21
|
+
if (request.signal.aborted)
|
|
22
|
+
return { status: 'cancelled' };
|
|
23
|
+
let lease;
|
|
24
|
+
let authorized = false;
|
|
25
|
+
try {
|
|
26
|
+
dependencies.onAttention?.(true, `Authorize Chrome for ${request.origin}`);
|
|
27
|
+
const approved = await context.ui.confirm('Authorize existing Chrome?', `Allow Felan to use your current Chrome for ${request.origin}? Chrome grants browser-wide debugging authority; Felan restricts its tools to one fresh tab. Approve the single Chrome prompt when it appears.`, { signal: request.signal });
|
|
28
|
+
if (!approved || request.signal.aborted)
|
|
29
|
+
return { status: 'cancelled', message: 'Existing-browser authorization was declined.' };
|
|
30
|
+
context.ui.setStatus('browser-authorization', `… Checking Chrome for ${request.origin}`);
|
|
31
|
+
const inspect = dependencies.inspect ?? ((signal) => inspectChromeRemoteDebugging(signal, {
|
|
32
|
+
...(dependencies.runtime ? { runtime: dependencies.runtime } : {}),
|
|
33
|
+
}));
|
|
34
|
+
let preflight = await inspect(request.signal);
|
|
35
|
+
request.signal.throwIfAborted();
|
|
36
|
+
if (preflight.state === 'disabled') {
|
|
37
|
+
const processId = preflight.processId;
|
|
38
|
+
context.ui.notify('Chrome remote debugging is disabled. Enable it once in Chrome, then continue.', 'info');
|
|
39
|
+
const openSetup = dependencies.openSetup ?? ((applicationPath, signal) => (openChromeRemoteDebuggingSettings(dependencies.runtime, applicationPath, signal)));
|
|
40
|
+
await openSetup(preflight.applicationPath, request.signal);
|
|
41
|
+
request.signal.throwIfAborted();
|
|
42
|
+
const retry = await context.ui.confirm('Continue Chrome authorization?', 'Enable remote debugging if it is off. Leave an already-enabled setting unchanged. Continue when ready for one connection attempt.', { signal: request.signal });
|
|
43
|
+
if (!retry)
|
|
44
|
+
return { status: 'cancelled', message: 'Existing-browser authorization retry was cancelled.' };
|
|
45
|
+
request.signal.throwIfAborted();
|
|
46
|
+
preflight = await inspect(request.signal);
|
|
47
|
+
if (preflight.state !== 'unavailable' && preflight.processId !== processId) {
|
|
48
|
+
return { status: 'unavailable', message: 'Chrome was replaced during setup. Request authorization again.' };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
request.signal.throwIfAborted();
|
|
52
|
+
if (preflight.state !== 'ready') {
|
|
53
|
+
const message = preflight.state === 'unavailable' ? preflight.reason : 'Chrome remote debugging is still disabled.';
|
|
54
|
+
context.ui.notify(message, 'warning');
|
|
55
|
+
return { status: 'unavailable', message };
|
|
56
|
+
}
|
|
57
|
+
lease = await (dependencies.createLease ?? createChromeConnectionLease)(preflight.connection, request.signal);
|
|
58
|
+
request.signal.throwIfAborted();
|
|
59
|
+
context.ui.setStatus('browser-authorization', `… Waiting for Chrome approval for ${request.origin}`);
|
|
60
|
+
const attached = await request.attach(lease.connection, lease);
|
|
61
|
+
request.signal.throwIfAborted();
|
|
62
|
+
if (!attached.ready || !lease.connected || lease.signal.aborted) {
|
|
63
|
+
return { status: 'unavailable', message: attached.reason ?? 'Chrome rejected the connection.' };
|
|
64
|
+
}
|
|
65
|
+
authorized = true;
|
|
66
|
+
return { status: 'authorized' };
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
if (request.signal.aborted)
|
|
70
|
+
return { status: 'cancelled', message: 'Existing-browser authorization was cancelled.' };
|
|
71
|
+
return { status: 'unavailable', message: 'Chrome authorization could not be completed.' };
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
let closing;
|
|
75
|
+
let cleanupFailed = false;
|
|
76
|
+
if (!authorized && lease) {
|
|
77
|
+
try {
|
|
78
|
+
closing = lease.close();
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
cleanupFailed = true;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
context.ui.setStatus('browser-authorization', undefined);
|
|
86
|
+
}
|
|
87
|
+
catch { }
|
|
88
|
+
try {
|
|
89
|
+
dependencies.onAttention?.(false);
|
|
90
|
+
}
|
|
91
|
+
catch { }
|
|
92
|
+
try {
|
|
93
|
+
await closing;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
cleanupFailed = true;
|
|
97
|
+
}
|
|
98
|
+
if (cleanupFailed)
|
|
99
|
+
throw new Error('Chrome connection cleanup could not be confirmed.');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function openChromeRemoteDebuggingSettings(runtime, applicationPath, signal) {
|
|
103
|
+
if (!runtime || runtime.kind !== 'host')
|
|
104
|
+
throw new Error('Chrome setup requires the local host runtime.');
|
|
105
|
+
signal.throwIfAborted();
|
|
106
|
+
const result = await runtime.exec('/usr/bin/open', ['-a', applicationPath, CHROME_REMOTE_DEBUGGING_URL], {
|
|
107
|
+
signal, timeout: 5_000, maxOutputBytes: 4_096,
|
|
108
|
+
});
|
|
109
|
+
signal.throwIfAborted();
|
|
110
|
+
if (result.code !== 0 || result.killed || result.truncated)
|
|
111
|
+
throw new Error('Chrome setup could not be opened.');
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=authorization-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization-host.js","sourceRoot":"","sources":["../../src/browser/authorization-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AgentRuntime } from '@felan-ai/agent-core';
|
|
2
|
+
import type { BrowserAuthorizationConnection } from '@felan-ai/ext-browser';
|
|
3
|
+
export type ChromePreflight = {
|
|
4
|
+
readonly state: 'ready';
|
|
5
|
+
readonly processId: number;
|
|
6
|
+
readonly connection: BrowserAuthorizationConnection;
|
|
7
|
+
} | {
|
|
8
|
+
readonly state: 'disabled';
|
|
9
|
+
readonly processId: number;
|
|
10
|
+
readonly applicationPath: string;
|
|
11
|
+
} | {
|
|
12
|
+
readonly state: 'unavailable';
|
|
13
|
+
readonly reason: string;
|
|
14
|
+
};
|
|
15
|
+
export interface ChromeDevToolsDiscoveryOptions {
|
|
16
|
+
readonly runtime?: AgentRuntime;
|
|
17
|
+
readonly homeDirectory?: string;
|
|
18
|
+
readonly environment?: Readonly<Record<string, string | undefined>>;
|
|
19
|
+
readonly operatingSystem?: NodeJS.Platform;
|
|
20
|
+
readonly userId?: number;
|
|
21
|
+
readonly run?: (command: string, args: readonly string[], signal: AbortSignal) => Promise<string>;
|
|
22
|
+
}
|
|
23
|
+
export declare function assertAgentBrowserEnvironment(environment?: Readonly<Record<string, string | undefined>>): void;
|
|
24
|
+
export declare function inspectChromeRemoteDebugging(signal: AbortSignal, options?: ChromeDevToolsDiscoveryOptions): Promise<ChromePreflight>;
|
|
25
|
+
export declare function parseDevToolsActivePort(content: Uint8Array | string): BrowserAuthorizationConnection | undefined;
|
|
26
|
+
//# sourceMappingURL=chrome-devtools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-devtools.d.ts","sourceRoot":"","sources":["../../src/browser/chrome-devtools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAK5E,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,8BAA8B,CAAA;CAAE,GAC5G;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnG;AAED,wBAAgB,6BAA6B,CAAC,WAAW,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAAG,IAAI,CAI3H;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,eAAe,CAAC,CAqF1B;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,8BAA8B,GAAG,SAAS,CAWhH"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { lstat, open, realpath } from 'node:fs/promises';
|
|
3
|
+
import { homedir, platform } from 'node:os';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
const MAX_ACTIVE_PORT_BYTES = 4_096;
|
|
6
|
+
const MAX_LOCAL_STATE_BYTES = 2 * 1024 * 1024;
|
|
7
|
+
export function assertAgentBrowserEnvironment(environment = process.env) {
|
|
8
|
+
if (Object.entries(environment).some(([name, value]) => name.toUpperCase().startsWith('AGENT_BROWSER_') && value !== undefined)) {
|
|
9
|
+
throw new Error('Browser execution is unavailable with inherited agent-browser configuration. Start Felan without those overrides.');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export async function inspectChromeRemoteDebugging(signal, options = {}) {
|
|
13
|
+
signal.throwIfAborted();
|
|
14
|
+
const os = options.operatingSystem ?? platform();
|
|
15
|
+
const userId = options.userId ?? process.getuid?.();
|
|
16
|
+
if (os !== 'darwin' || userId === undefined) {
|
|
17
|
+
return unavailable('Existing-Chrome ownership verification is currently available only on macOS.');
|
|
18
|
+
}
|
|
19
|
+
const env = options.environment ?? process.env;
|
|
20
|
+
try {
|
|
21
|
+
assertAgentBrowserEnvironment(env);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return unavailable('Existing-Chrome access is unavailable with inherited agent-browser configuration. Start Felan without those overrides.');
|
|
25
|
+
}
|
|
26
|
+
const home = options.homeDirectory ?? homedir();
|
|
27
|
+
const runtime = options.runtime;
|
|
28
|
+
const run = options.run ?? (runtime?.kind === 'host'
|
|
29
|
+
? (command, args, currentSignal) => runReadOnlyCommand(runtime, command, args, currentSignal)
|
|
30
|
+
: undefined);
|
|
31
|
+
if (!run)
|
|
32
|
+
return unavailable('This host cannot verify ownership of local Chrome.');
|
|
33
|
+
try {
|
|
34
|
+
const processes = await run('/bin/ps', ['-ww', '-u', String(userId), '-o', 'pid=,uid=,comm='], signal);
|
|
35
|
+
const applications = [
|
|
36
|
+
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
|
37
|
+
join(home, 'Applications', 'Google Chrome.app', 'Contents', 'MacOS', 'Google Chrome'),
|
|
38
|
+
];
|
|
39
|
+
const ids = processes.split('\n').flatMap(line => {
|
|
40
|
+
const match = /^\s*([0-9]+)\s+([0-9]+)\s+(.+)$/u.exec(line);
|
|
41
|
+
return match && Number(match[2]) === userId && applications.includes(match[3])
|
|
42
|
+
? [{ processId: Number(match[1]), executable: match[3] }] : [];
|
|
43
|
+
});
|
|
44
|
+
if (ids.length !== 1)
|
|
45
|
+
return unavailable(ids.length ? 'More than one Chrome instance was found. Keep only the intended instance available before authorizing.' : 'Your regular Chrome is not running. Open it before requesting authorization.');
|
|
46
|
+
const { processId, executable } = ids[0];
|
|
47
|
+
const applicationPath = dirname(dirname(dirname(executable)));
|
|
48
|
+
if (!Number.isSafeInteger(processId) || processId <= 0)
|
|
49
|
+
return unavailable('Chrome process ownership could not be verified.');
|
|
50
|
+
const command = await run('/bin/ps', ['-ww', '-p', String(processId), '-o', 'command='], signal);
|
|
51
|
+
if (/(?:^|\s)--user-data-dir(?:=|\s|$)/u.test(command))
|
|
52
|
+
return unavailable('Custom Chrome user-data directories are not supported by this authorization flow.');
|
|
53
|
+
if (/(?:^|\s)--remote-debugging-(?:port|pipe)(?:=|\s|$)/u.test(command))
|
|
54
|
+
return unavailable('Use Chrome’s permission-based remote-debugging setting, not command-line debugging, for this authorization flow.');
|
|
55
|
+
const version = (await run('/usr/bin/plutil', ['-extract', 'CFBundleShortVersionString', 'raw', '-o', '-', join(dirname(dirname(executable)), 'Info.plist')], signal)).trim();
|
|
56
|
+
if (!/^\d+\.\d+\.\d+\.\d+$/u.test(version) || Number(version.split('.')[0]) < 144) {
|
|
57
|
+
return unavailable('Existing-browser authorization requires Chrome 144 or later.');
|
|
58
|
+
}
|
|
59
|
+
const root = join(await realpath(home), 'Library', 'Application Support', 'Google', 'Chrome');
|
|
60
|
+
const rootMetadata = await lstat(root);
|
|
61
|
+
if (!rootMetadata.isDirectory() || rootMetadata.isSymbolicLink() || rootMetadata.uid !== userId || await realpath(root) !== root) {
|
|
62
|
+
return unavailable('Chrome’s default data directory ownership or location could not be verified.');
|
|
63
|
+
}
|
|
64
|
+
const preferences = await readPrivateFile(join(root, 'Local State'), MAX_LOCAL_STATE_BYTES, userId);
|
|
65
|
+
if (!preferences)
|
|
66
|
+
return unavailable('Chrome debugging settings could not be verified. Check the remote-debugging page without changing an already-enabled setting.');
|
|
67
|
+
const parsed = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(preferences));
|
|
68
|
+
if (!record(parsed))
|
|
69
|
+
return unavailable('Chrome debugging settings are invalid.');
|
|
70
|
+
const devtools = record(parsed)?.devtools;
|
|
71
|
+
if (devtools !== undefined && !record(devtools))
|
|
72
|
+
return unavailable('Chrome debugging settings are invalid.');
|
|
73
|
+
const rawDebugging = record(devtools)?.remote_debugging;
|
|
74
|
+
if (rawDebugging !== undefined && !record(rawDebugging))
|
|
75
|
+
return unavailable('Chrome debugging settings are invalid.');
|
|
76
|
+
const debugging = record(record(devtools)?.remote_debugging);
|
|
77
|
+
if (debugging?.allowed === false)
|
|
78
|
+
return unavailable('Chrome remote debugging is disabled by policy.');
|
|
79
|
+
if (debugging?.allowed !== undefined && typeof debugging.allowed !== 'boolean')
|
|
80
|
+
return unavailable('Chrome debugging settings are invalid.');
|
|
81
|
+
const enabled = debugging?.['user-enabled'];
|
|
82
|
+
if (enabled !== undefined && typeof enabled !== 'boolean')
|
|
83
|
+
return unavailable('Chrome debugging settings are invalid.');
|
|
84
|
+
const listeners = await run('/usr/sbin/lsof', ['-nP', '-a', '-p', String(processId), '-iTCP', '-sTCP:LISTEN', '-Fpn'], signal);
|
|
85
|
+
let owner;
|
|
86
|
+
const ports = [...new Set(listeners.split('\n').flatMap(line => {
|
|
87
|
+
if (/^p[0-9]+$/u.test(line))
|
|
88
|
+
owner = Number(line.slice(1));
|
|
89
|
+
const match = /^n127\.0\.0\.1:([0-9]+)$/u.exec(line);
|
|
90
|
+
const port = match ? Number(match[1]) : 0;
|
|
91
|
+
return owner === processId && port > 0 && port <= 65_535 ? [port] : [];
|
|
92
|
+
}))];
|
|
93
|
+
if (enabled !== true) {
|
|
94
|
+
return ports.length ? unavailable('Chrome settings and its running listener disagree. No settings were changed; check Chrome before authorizing again.') : { state: 'disabled', processId, applicationPath };
|
|
95
|
+
}
|
|
96
|
+
if (!listeners.split('\n').includes(`p${processId}`) || ports.length === 0) {
|
|
97
|
+
return unavailable('Chrome debugging is enabled, but its loopback listener is unavailable. Leave the setting enabled; no connection was attempted.');
|
|
98
|
+
}
|
|
99
|
+
const content = await readPrivateFile(join(root, 'DevToolsActivePort'), MAX_ACTIVE_PORT_BYTES, userId);
|
|
100
|
+
const advertised = content ? parseDevToolsActivePort(content) : undefined;
|
|
101
|
+
if (advertised && ports.includes(advertised.port)) {
|
|
102
|
+
signal.throwIfAborted();
|
|
103
|
+
return { state: 'ready', processId, connection: advertised };
|
|
104
|
+
}
|
|
105
|
+
if (ports.length !== 1)
|
|
106
|
+
return unavailable('Chrome has multiple loopback listeners and the debugging endpoint cannot be identified safely.');
|
|
107
|
+
signal.throwIfAborted();
|
|
108
|
+
return { state: 'ready', processId, connection: { port: ports[0], webSocketPath: '/devtools/browser' } };
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
signal.throwIfAborted();
|
|
112
|
+
return unavailable('Chrome debugging readiness could not be verified. No connection was attempted.');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export function parseDevToolsActivePort(content) {
|
|
116
|
+
try {
|
|
117
|
+
const text = typeof content === 'string' ? content : new TextDecoder('utf-8', { fatal: true }).decode(content);
|
|
118
|
+
if (new TextEncoder().encode(text).byteLength > MAX_ACTIVE_PORT_BYTES || /[\0\u0001-\u0008\u000B\u000C\u000E-\u001F\u007F]/u.test(text))
|
|
119
|
+
return undefined;
|
|
120
|
+
const lines = text.replace(/\r\n?/gu, '\n').split('\n');
|
|
121
|
+
if (lines.at(-1) === '')
|
|
122
|
+
lines.pop();
|
|
123
|
+
if (lines.length !== 2 || !/^[1-9][0-9]{0,4}$/u.test(lines[0])
|
|
124
|
+
|| !/^\/devtools\/browser(?:\/(?!\.{1,2}$)[A-Za-z0-9._-]+)?$/u.test(lines[1]))
|
|
125
|
+
return undefined;
|
|
126
|
+
const port = Number(lines[0]);
|
|
127
|
+
return port <= 65_535 ? { port, webSocketPath: lines[1] } : undefined;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async function readPrivateFile(path, maximum, userId) {
|
|
134
|
+
let file;
|
|
135
|
+
try {
|
|
136
|
+
file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (error.code === 'ENOENT')
|
|
140
|
+
return undefined;
|
|
141
|
+
throw new Error('Chrome metadata is inaccessible.');
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const metadata = await file.stat();
|
|
145
|
+
if (!metadata.isFile() || metadata.uid !== userId || metadata.nlink !== 1 || metadata.size > maximum)
|
|
146
|
+
throw new Error('Chrome metadata is unsafe.');
|
|
147
|
+
const buffer = Buffer.alloc(maximum + 1);
|
|
148
|
+
let length = 0;
|
|
149
|
+
while (length < buffer.length) {
|
|
150
|
+
const result = await file.read(buffer, length, buffer.length - length, length);
|
|
151
|
+
if (!result.bytesRead)
|
|
152
|
+
break;
|
|
153
|
+
length += result.bytesRead;
|
|
154
|
+
}
|
|
155
|
+
if (length > maximum)
|
|
156
|
+
throw new Error('Chrome metadata exceeds its size limit.');
|
|
157
|
+
return buffer.subarray(0, length);
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
await file.close();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function runReadOnlyCommand(runtime, command, args, signal) {
|
|
164
|
+
const result = await runtime.exec(command, args, { signal, timeout: 3_000, maxOutputBytes: 65_536 });
|
|
165
|
+
signal.throwIfAborted();
|
|
166
|
+
if (result.killed || result.truncated)
|
|
167
|
+
throw new Error('Chrome process inspection was interrupted.');
|
|
168
|
+
if (result.code === 0)
|
|
169
|
+
return result.stdout;
|
|
170
|
+
if (command === '/usr/sbin/lsof' && result.code === 1 && !result.stdout)
|
|
171
|
+
return '';
|
|
172
|
+
throw new Error('Chrome process inspection failed.');
|
|
173
|
+
}
|
|
174
|
+
function unavailable(reason) {
|
|
175
|
+
return { state: 'unavailable', reason };
|
|
176
|
+
}
|
|
177
|
+
function record(value) {
|
|
178
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : undefined;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=chrome-devtools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-devtools.js","sourceRoot":"","sources":["../../src/browser/chrome-devtools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BrowserAuthorizationConnection, BrowserAuthorizationLease } from '@felan-ai/ext-browser';
|
|
2
|
+
export interface ChromeConnectionLease extends BrowserAuthorizationLease {
|
|
3
|
+
readonly connection: BrowserAuthorizationConnection;
|
|
4
|
+
readonly connected: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function createChromeConnectionLease(upstream: BrowserAuthorizationConnection, signal: AbortSignal): Promise<ChromeConnectionLease>;
|
|
7
|
+
//# sourceMappingURL=connection-lease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-lease.d.ts","sourceRoot":"","sources":["../../src/browser/connection-lease.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AASvG,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,QAAQ,CAAC,UAAU,EAAE,8BAA8B,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAOD,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,8BAA8B,EACxC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,qBAAqB,CAAC,CA2LhC"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { createHash, randomBytes } from 'node:crypto';
|
|
2
|
+
import { createServer, request } from 'node:http';
|
|
3
|
+
const WEB_SOCKET_GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
|
|
4
|
+
const TOKEN_SOURCE = "[!#$%&'*+.^_`|~0-9A-Za-z-]+";
|
|
5
|
+
const TOKEN = new RegExp(`^${TOKEN_SOURCE}$`, 'u');
|
|
6
|
+
const QUOTED_STRING = String.raw `"(?:[\t\x20-\x21\x23-\x5B\x5D-\x7E]|\\[\t\x20-\x7E])*"`;
|
|
7
|
+
const EXTENSION_SOURCE = `(${TOKEN_SOURCE})(?:[ \\t]*;[ \\t]*${TOKEN_SOURCE}(?:[ \\t]*=[ \\t]*(?:${TOKEN_SOURCE}|${QUOTED_STRING}))?)*`;
|
|
8
|
+
const EXTENSION_LIST = new RegExp(`^${EXTENSION_SOURCE}(?:[ \\t]*,[ \\t]*${EXTENSION_SOURCE})*$`, 'u');
|
|
9
|
+
export async function createChromeConnectionLease(upstream, signal) {
|
|
10
|
+
if (!upstream || !Number.isInteger(upstream.port) || upstream.port < 1 || upstream.port > 65_535
|
|
11
|
+
|| typeof upstream.webSocketPath !== 'string' || upstream.webSocketPath.length > 4_096
|
|
12
|
+
|| !/^\/devtools\/browser(?:\/(?!\.{1,2}$)[A-Za-z0-9._-]+)?$/u.test(upstream.webSocketPath)) {
|
|
13
|
+
throw new Error('Chrome connection is invalid.');
|
|
14
|
+
}
|
|
15
|
+
if (signal.aborted)
|
|
16
|
+
throw new Error('Chrome connection was cancelled.');
|
|
17
|
+
const { port, webSocketPath } = upstream;
|
|
18
|
+
const localPath = `/felan-browser/${randomBytes(32).toString('hex')}`;
|
|
19
|
+
const controller = new AbortController();
|
|
20
|
+
const sockets = new Map();
|
|
21
|
+
const server = createServer({ requestTimeout: 0, maxHeaderSize: 8_192 }, (_request, response) => {
|
|
22
|
+
response.writeHead(400, { Connection: 'close', 'Content-Length': '0' });
|
|
23
|
+
response.end();
|
|
24
|
+
});
|
|
25
|
+
let downstream;
|
|
26
|
+
let upstreamSocket;
|
|
27
|
+
let pendingRequest;
|
|
28
|
+
let requestClosed;
|
|
29
|
+
let consumed = false;
|
|
30
|
+
let connected = false;
|
|
31
|
+
let closing = false;
|
|
32
|
+
let startupFailed = false;
|
|
33
|
+
let stopped;
|
|
34
|
+
let resolveListening;
|
|
35
|
+
let resolveClosed;
|
|
36
|
+
const listening = new Promise((resolve) => { resolveListening = resolve; });
|
|
37
|
+
const closed = new Promise((resolve) => { resolveClosed = resolve; });
|
|
38
|
+
const onAbort = () => { void close(); };
|
|
39
|
+
function stopListening() {
|
|
40
|
+
stopped ??= new Promise((resolve) => {
|
|
41
|
+
const stop = () => server.close(() => resolve());
|
|
42
|
+
if (server.listening)
|
|
43
|
+
stop();
|
|
44
|
+
else
|
|
45
|
+
void listening.then(stop);
|
|
46
|
+
});
|
|
47
|
+
return stopped;
|
|
48
|
+
}
|
|
49
|
+
function close() {
|
|
50
|
+
if (closing)
|
|
51
|
+
return closed;
|
|
52
|
+
closing = true;
|
|
53
|
+
connected = false;
|
|
54
|
+
signal.removeEventListener('abort', onAbort);
|
|
55
|
+
const completions = [stopListening(), ...sockets.values()];
|
|
56
|
+
if (requestClosed)
|
|
57
|
+
completions.push(requestClosed);
|
|
58
|
+
pendingRequest?.destroy();
|
|
59
|
+
for (const socket of sockets.keys())
|
|
60
|
+
socket.destroy();
|
|
61
|
+
controller.abort(new Error('Chrome connection closed.'));
|
|
62
|
+
void Promise.all(completions).then(() => resolveClosed());
|
|
63
|
+
return closed;
|
|
64
|
+
}
|
|
65
|
+
function trackSocket(socket) {
|
|
66
|
+
if (sockets.has(socket))
|
|
67
|
+
return;
|
|
68
|
+
const isOwned = () => socket === downstream || socket === upstreamSocket;
|
|
69
|
+
sockets.set(socket, new Promise((resolve) => {
|
|
70
|
+
socket.once('close', () => {
|
|
71
|
+
sockets.delete(socket);
|
|
72
|
+
resolve();
|
|
73
|
+
if (isOwned())
|
|
74
|
+
void close();
|
|
75
|
+
});
|
|
76
|
+
}));
|
|
77
|
+
socket.on('error', () => {
|
|
78
|
+
if (isOwned())
|
|
79
|
+
void close();
|
|
80
|
+
else
|
|
81
|
+
socket.destroy();
|
|
82
|
+
});
|
|
83
|
+
socket.once('end', () => { if (isOwned())
|
|
84
|
+
void close(); });
|
|
85
|
+
if (closing || (consumed && !isOwned()))
|
|
86
|
+
socket.destroy();
|
|
87
|
+
}
|
|
88
|
+
server.on('connection', trackSocket);
|
|
89
|
+
server.on('clientError', (_error, socket) => socket.destroy());
|
|
90
|
+
server.once('listening', resolveListening);
|
|
91
|
+
server.on('error', () => {
|
|
92
|
+
startupFailed = true;
|
|
93
|
+
resolveListening();
|
|
94
|
+
void close();
|
|
95
|
+
});
|
|
96
|
+
server.on('upgrade', (incoming, socket, head) => {
|
|
97
|
+
const key = singleHeader(incoming, 'sec-websocket-key');
|
|
98
|
+
const negotiation = negotiationHeaders(incoming);
|
|
99
|
+
if (closing || consumed || incoming.method !== 'GET' || incoming.url !== localPath
|
|
100
|
+
|| !validUpgradeHeaders(incoming) || !singleHeader(incoming, 'host')
|
|
101
|
+
|| 'origin' in incoming.headers || singleHeader(incoming, 'sec-websocket-version') !== '13'
|
|
102
|
+
|| 'transfer-encoding' in incoming.headers
|
|
103
|
+
|| ('content-length' in incoming.headers && singleHeader(incoming, 'content-length') !== '0')
|
|
104
|
+
|| !key || !/^[A-Za-z0-9+/]{22}==$/u.test(key) || Buffer.from(key, 'base64').toString('base64') !== key
|
|
105
|
+
|| !negotiation) {
|
|
106
|
+
socket.destroy();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Spend the slot before any asynchronous work, including a failed or denied handshake.
|
|
110
|
+
consumed = true;
|
|
111
|
+
downstream = socket;
|
|
112
|
+
// Keep reading until approval so buffered client data cannot hide a peer's FIN.
|
|
113
|
+
const onPreApprovalData = () => { void close(); };
|
|
114
|
+
socket.once('data', onPreApprovalData);
|
|
115
|
+
socket.resume();
|
|
116
|
+
void stopListening();
|
|
117
|
+
for (const other of sockets.keys())
|
|
118
|
+
if (other !== socket)
|
|
119
|
+
other.destroy();
|
|
120
|
+
try {
|
|
121
|
+
pendingRequest = request({
|
|
122
|
+
hostname: '127.0.0.1',
|
|
123
|
+
port,
|
|
124
|
+
path: webSocketPath,
|
|
125
|
+
method: 'GET',
|
|
126
|
+
agent: false,
|
|
127
|
+
timeout: 0,
|
|
128
|
+
maxHeaderSize: 8_192,
|
|
129
|
+
headers: {
|
|
130
|
+
Connection: 'Upgrade',
|
|
131
|
+
Upgrade: 'websocket',
|
|
132
|
+
'Sec-WebSocket-Version': '13',
|
|
133
|
+
'Sec-WebSocket-Key': key,
|
|
134
|
+
...forwardNegotiation(negotiation),
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
requestClosed = new Promise((resolve) => pendingRequest.once('close', resolve));
|
|
138
|
+
pendingRequest.on('socket', (remote) => {
|
|
139
|
+
upstreamSocket = remote;
|
|
140
|
+
trackSocket(remote);
|
|
141
|
+
});
|
|
142
|
+
pendingRequest.on('error', () => { void close(); });
|
|
143
|
+
pendingRequest.on('response', (response) => {
|
|
144
|
+
response.destroy();
|
|
145
|
+
void close();
|
|
146
|
+
});
|
|
147
|
+
pendingRequest.on('upgrade', (response, remote, upstreamHead) => {
|
|
148
|
+
remote.pause();
|
|
149
|
+
const accepted = negotiationHeaders(response);
|
|
150
|
+
const accept = singleHeader(response, 'sec-websocket-accept');
|
|
151
|
+
if (closing || response.statusCode !== 101 || !validUpgradeHeaders(response)
|
|
152
|
+
|| 'content-length' in response.headers || 'transfer-encoding' in response.headers
|
|
153
|
+
|| accept !== createHash('sha1').update(key + WEB_SOCKET_GUID).digest('base64')
|
|
154
|
+
|| !accepted || !validNegotiation(negotiation, accepted)) {
|
|
155
|
+
remote.destroy();
|
|
156
|
+
void close();
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const headers = [
|
|
160
|
+
'HTTP/1.1 101 Switching Protocols',
|
|
161
|
+
'Upgrade: websocket',
|
|
162
|
+
'Connection: Upgrade',
|
|
163
|
+
`Sec-WebSocket-Accept: ${accept}`,
|
|
164
|
+
...Object.entries(forwardNegotiation(accepted)).map(([name, value]) => `${name}: ${value}`),
|
|
165
|
+
'',
|
|
166
|
+
'',
|
|
167
|
+
].join('\r\n');
|
|
168
|
+
socket.pause();
|
|
169
|
+
socket.removeListener('data', onPreApprovalData);
|
|
170
|
+
connected = true;
|
|
171
|
+
if (head.length)
|
|
172
|
+
socket.unshift(head);
|
|
173
|
+
if (upstreamHead.length)
|
|
174
|
+
remote.unshift(upstreamHead);
|
|
175
|
+
if (socket.write(headers))
|
|
176
|
+
remote.pipe(socket);
|
|
177
|
+
else
|
|
178
|
+
socket.once('drain', () => { if (!closing)
|
|
179
|
+
remote.pipe(socket); });
|
|
180
|
+
socket.pipe(remote);
|
|
181
|
+
});
|
|
182
|
+
pendingRequest.end();
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
void close();
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
189
|
+
try {
|
|
190
|
+
server.listen(0, '127.0.0.1');
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
startupFailed = true;
|
|
194
|
+
resolveListening();
|
|
195
|
+
void close();
|
|
196
|
+
}
|
|
197
|
+
await listening;
|
|
198
|
+
const address = server.address();
|
|
199
|
+
if (signal.aborted || closing || startupFailed || !address || typeof address === 'string') {
|
|
200
|
+
await close();
|
|
201
|
+
throw new Error(signal.aborted ? 'Chrome connection was cancelled.' : 'Chrome connection is unavailable.');
|
|
202
|
+
}
|
|
203
|
+
return Object.freeze({
|
|
204
|
+
connection: Object.freeze({ port: address.port, webSocketPath: localPath }),
|
|
205
|
+
signal: controller.signal,
|
|
206
|
+
get connected() { return connected; },
|
|
207
|
+
close,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
function singleHeader(message, name) {
|
|
211
|
+
const values = message.headersDistinct[name];
|
|
212
|
+
return values?.length === 1 ? values[0] : undefined;
|
|
213
|
+
}
|
|
214
|
+
function tokens(value) {
|
|
215
|
+
const values = value.split(',').map(token => token.trim());
|
|
216
|
+
return values.every(token => TOKEN.test(token)) ? values : undefined;
|
|
217
|
+
}
|
|
218
|
+
function validUpgradeHeaders(message) {
|
|
219
|
+
return message.httpVersion === '1.1' && singleHeader(message, 'upgrade')?.toLowerCase() === 'websocket'
|
|
220
|
+
&& (tokens(singleHeader(message, 'connection') ?? '')?.some(token => token.toLowerCase() === 'upgrade') ?? false);
|
|
221
|
+
}
|
|
222
|
+
function extensionNames(value) {
|
|
223
|
+
if (!EXTENSION_LIST.test(value))
|
|
224
|
+
return undefined;
|
|
225
|
+
return [...value.matchAll(new RegExp(EXTENSION_SOURCE, 'gu'))].map(match => match[1]);
|
|
226
|
+
}
|
|
227
|
+
function negotiationHeaders(message) {
|
|
228
|
+
const protocol = singleHeader(message, 'sec-websocket-protocol');
|
|
229
|
+
const extensions = singleHeader(message, 'sec-websocket-extensions');
|
|
230
|
+
if (('sec-websocket-protocol' in message.headers && (!protocol || !tokens(protocol)))
|
|
231
|
+
|| ('sec-websocket-extensions' in message.headers && (!extensions || !extensionNames(extensions))))
|
|
232
|
+
return undefined;
|
|
233
|
+
return { ...(protocol ? { protocol } : {}), ...(extensions ? { extensions } : {}) };
|
|
234
|
+
}
|
|
235
|
+
function validNegotiation(requested, accepted) {
|
|
236
|
+
if (accepted.protocol && !tokens(requested.protocol ?? '')?.includes(accepted.protocol))
|
|
237
|
+
return false;
|
|
238
|
+
const offered = extensionNames(requested.extensions ?? '') ?? [];
|
|
239
|
+
return !accepted.extensions || extensionNames(accepted.extensions).every(name => offered.includes(name));
|
|
240
|
+
}
|
|
241
|
+
function forwardNegotiation(headers) {
|
|
242
|
+
return {
|
|
243
|
+
...(headers.protocol ? { 'Sec-WebSocket-Protocol': headers.protocol } : {}),
|
|
244
|
+
...(headers.extensions ? { 'Sec-WebSocket-Extensions': headers.extensions } : {}),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=connection-lease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-lease.js","sourceRoot":"","sources":["../../src/browser/connection-lease.ts"],"names":[],"mappings":"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"}
|
package/dist/dependencies.js
CHANGED
package/dist/extensions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAE7B,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAyB,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAAiC,KAAK,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC9G,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAE7B,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAyB,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAAiC,KAAK,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC9G,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AAExC,eAAO,MAAM,uBAAuB,2BAA2B,CAAC;AAChE,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AACvD,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAClE,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AACnE,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AACnE,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAC7D,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AACxE,eAAO,MAAM,wBAAwB,2BAA2B,CAAC;AACjE,eAAO,MAAM,6BAA6B,iCAAiC,CAAC;AAC5E,eAAO,MAAM,4BAA4B,gCAAgC,CAAC;AAC1E,eAAO,MAAM,iCAAiC,qCAAqC,CAAC;AACpF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;CAwB3B,CAAC;AACX,eAAO,MAAM,sBAAsB,4nBAA0C,CAAC;AAE9E,wBAAsB,mCAAmC,CACvD,QAAQ,GAAE,SAAS,MAAM,EAA2B,EACpD,eAAe,GAAE,wBAA+C,GAC/D,OAAO,CAAC,SAAS,yBAAyB,EAAE,CAAC,CAoB/C;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AACzE,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;AAItF,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAYpF;AAED,eAAO,MAAM,oBAAoB,EAAE,wBAKlC,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,YAAY,GAAG,0BAA0B,EAC/C,YAAY,EAAE,YAAY,EAC1B,eAAe,GAAE,wBAA+C,EAChE,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAClC,aAAa,CAAC,EAAE,2BAA2B,EAC3C,WAAW,GAAE,WAAkC,EAC/C,OAAO,CAAC,EAAE,cAAc,EACxB,gBAAgB,CAAC,EAAE,MAAM,EACzB,yBAAyB,CAAC,EAAE,yBAAyB,EACrD,8BAA8B,UAAO,GACpC,wBAAwB,CA4F1B"}
|
package/dist/extensions.js
CHANGED
|
@@ -13,6 +13,8 @@ import { createBackgroundBashExtension } from '@felan-ai/ext-background-bash';
|
|
|
13
13
|
import { createSubagentsExtension, } from '@felan-ai/ext-subagents';
|
|
14
14
|
import { createPromptHistoryExtension, PROMPT_HISTORY_CONFIG } from '@felan-ai/ext-prompt-history';
|
|
15
15
|
import { createLocalMcpExtension } from './mcp/index.js';
|
|
16
|
+
import { createLocalBrowserAuthorizationHost } from './browser/authorization-host.js';
|
|
17
|
+
import { HERDR_BLOCKED_EVENT } from './herdr.js';
|
|
16
18
|
import { createLocalSavingsUsageHost, createLocalSubscriptionUsageHost } from './powerline.js';
|
|
17
19
|
import { createLocalInsightsHost } from './insights.js';
|
|
18
20
|
import { registerLocalSubagentNavigator, } from './subagents/agent-navigator.js';
|
|
@@ -130,6 +132,17 @@ export function createLocalExtensionImporter(host, modelRuntime, importExtension
|
|
|
130
132
|
if (packageName === mcpExtensionPackage) {
|
|
131
133
|
return { default: createLocalMcpExtension() };
|
|
132
134
|
}
|
|
135
|
+
if (packageName === builtinExtensionPackages.browser) {
|
|
136
|
+
const { createBrowserExtension } = await import('@felan-ai/ext-browser');
|
|
137
|
+
return {
|
|
138
|
+
default: (pi) => createBrowserExtension({
|
|
139
|
+
authorizationHost: createLocalBrowserAuthorizationHost({
|
|
140
|
+
runtime: pi.runtime,
|
|
141
|
+
onAttention: (active, label) => pi.events.emit(HERDR_BLOCKED_EVENT, { active, label }),
|
|
142
|
+
}),
|
|
143
|
+
})(pi),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
133
146
|
if (packageName === subagentsExtensionPackage) {
|
|
134
147
|
const subagents = createSubagentsExtension(host);
|
|
135
148
|
return {
|
package/dist/extensions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@felan-ai/felan",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.9",
|
|
4
4
|
"description": "Felan Code: an open-source, model-portable coding agent built for cost-efficient, verifiable software work",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -47,26 +47,26 @@
|
|
|
47
47
|
"open": "11.0.0",
|
|
48
48
|
"typebox": "1.1.38",
|
|
49
49
|
"@felan-ai/agent-core": "0.6.1",
|
|
50
|
-
"@felan-ai/ext-ask-user": "0.4.0",
|
|
51
50
|
"@felan-ai/ext-background-bash": "0.6.0",
|
|
52
|
-
"@felan-ai/ext-browser": "0.3.0",
|
|
53
51
|
"@felan-ai/ext-codebase-memory": "0.3.4",
|
|
54
52
|
"@felan-ai/ext-codex": "0.5.0",
|
|
53
|
+
"@felan-ai/ext-ask-user": "0.4.0",
|
|
54
|
+
"@felan-ai/ext-browser": "0.4.0",
|
|
55
55
|
"@felan-ai/ext-context": "0.5.0",
|
|
56
|
-
"@felan-ai/ext-context-view": "0.2.0",
|
|
57
56
|
"@felan-ai/ext-insights": "0.2.1",
|
|
58
57
|
"@felan-ai/ext-markitdown": "0.4.0",
|
|
58
|
+
"@felan-ai/ext-context-view": "0.2.0",
|
|
59
59
|
"@felan-ai/ext-felan-api": "0.3.0",
|
|
60
60
|
"@felan-ai/ext-mcp": "0.3.0",
|
|
61
|
+
"@felan-ai/ext-powerline": "0.7.0",
|
|
61
62
|
"@felan-ai/ext-memory": "0.4.1",
|
|
62
63
|
"@felan-ai/ext-output-style": "0.4.1",
|
|
63
64
|
"@felan-ai/ext-prewalk": "0.7.0",
|
|
64
65
|
"@felan-ai/ext-prompt-history": "0.2.0",
|
|
65
|
-
"@felan-ai/ext-session-title": "0.2.2",
|
|
66
66
|
"@felan-ai/ext-rtk-optimizer": "0.5.1",
|
|
67
|
-
"@felan-ai/ext-
|
|
67
|
+
"@felan-ai/ext-session-title": "0.2.2",
|
|
68
|
+
"@felan-ai/ext-session-compaction": "0.1.2",
|
|
68
69
|
"@felan-ai/ext-subagents": "0.7.1",
|
|
69
|
-
"@felan-ai/ext-session-compaction": "0.1.0",
|
|
70
70
|
"@felan-ai/ext-tasks": "0.3.0",
|
|
71
71
|
"@felan-ai/ext-web-access": "0.6.0"
|
|
72
72
|
},
|