@grovina/brian 0.2.3 → 0.2.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/tools/web.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,KAAK,UAAU,0BAA0B,CAAC,IAA+B;IACvE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACrC,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEpG,MAAM,GAAG,GAAG;YACV,SAAS;YACT,QAAQ;YACR,4BAA4B;YAC5B,QAAQ;YACR,UAAU;YACV,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,mBAAmB;YACnB,gBAAgB;YAChB,mBAAmB;SACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;QAChC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC5C,IAAI,CAAC,CAAC,EAAE,YAAY,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO;YACzD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;gBAAE,OAAO;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC1C,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM;gBAAE,OAAO;YACtE,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;YACrC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,QAAQ;gBAAE,OAAO;YAE7F,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAE/C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,EAAE,YAAY,iBAAiB,EAAE,CAAC;gBACpC,KAAK,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAClG,CAAC;iBAAM,IAAI,EAAE,YAAY,gBAAgB,EAAE,CAAC;gBAC1C,KAAK;oBACH,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;wBAC7B,EAAE,CAAC,WAAW;wBACd,EAAE,CAAC,IAAI;wBACP,EAAE,CAAC,IAAI;wBACP,OAAO,CAAC;gBACV,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU;oBAAE,KAAK,IAAI,eAAe,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;YAC5F,CAAC;iBAAM,IAAI,EAAE,YAAY,iBAAiB,EAAE,CAAC;gBAC3C,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,QAAQ,CAAC;YAC/D,CAAC;iBAAM,IAAI,EAAE,YAAY,mBAAmB,EAAE,CAAC;gBAC7C,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,IAAI,UAAU,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACvF,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB;IAIlD,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAExC,MAAM,KAAK,GAAW;QACpB;YACE,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE;gBACV,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,yKAAyK;gBAC3K,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;qBACpD;oBACD,QAAQ,EAAE,CAAC,KAAK,CAAC;iBAClB;aACF;YACD,KAAK,CAAC,OAAO,CAAC,KAAK;gBACjB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAwB,CAAC;gBACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC9C,IAAI,OAAO;oBAAE,OAAO,OAAO,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC/B,OAAO,WAAW,GAAG,EAAE,CAAC;gBAC1B,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;SACF;QACD;YACE,IAAI,EAAE,cAAc;YACpB,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE;gBACV,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,mIAAmI;gBACrI,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;aAC/C;YACD,KAAK,CAAC,OAAO;gBACX,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;oBACpD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC7B,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE;gBACV,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,+DAA+D;gBAC5E,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;qBAC9D;oBACD,QAAQ,EAAE,CAAC,KAAK,CAAC;iBAClB;aACF;YACD,KAAK,CAAC,OAAO,CAAC,KAAK;gBACjB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAwB,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,aAAa;oBAAE,OAAO,qDAAqD,CAAC;gBACzF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;oBAAE,OAAO,cAAc,CAAC;gBAC5D,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAClE,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC5B,IAAI,CAAC,KAAK,CAAC;wBAAE,OAAO,sBAAsB,GAAG,2BAA2B,CAAC;oBACzE,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC7C,OAAO,CAAC,kBAAkB,EAAE,CAAC;oBAC7B,OAAO,eAAe,GAAG,GAAG,CAAC;gBAC/B,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE;gBACV,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,yEAAyE;gBACtF,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;wBAC7D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;qBACxD;oBACD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;iBAC3B;aACF;YACD,KAAK,CAAC,OAAO,CAAC,KAAK;gBACjB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAuC,CAAC;gBAC/D,IAAI,CAAC,OAAO,CAAC,aAAa;oBAAE,OAAO,qDAAqD,CAAC;gBACzF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;oBAAE,OAAO,cAAc,CAAC;gBAC5D,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAClE,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC5B,IAAI,CAAC,KAAK,CAAC;wBAAE,OAAO,sBAAsB,GAAG,2BAA2B,CAAC;oBACzE,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;oBACnD,OAAO,cAAc,GAAG,GAAG,CAAC;gBAC9B,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE;gBACV,IAAI,EAAE,WAAW;gBACjB,WAAW,EACT,kGAAkG;gBACpG,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;qBACrD;oBACD,QAAQ,EAAE,CAAC,KAAK,CAAC;iBAClB;aACF;YACD,KAAK,CAAC,OAAO,CAAC,KAAK;gBACjB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAwB,CAAC;gBACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC9C,IAAI,OAAO;oBAAE,OAAO,OAAO,CAAC;gBAC5B,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;gBACzD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE;wBAClC,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,EAAE,CAAC,MAAM;wBACjB,OAAO,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE;qBAC5C,CAAC,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;oBACpD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;oBAC5C,IAAI,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpE,IAAI,GAAG,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;wBACjC,IAAI,IAAI,qBAAqB,eAAe,SAAS,CAAC;oBACxD,CAAC;oBACD,OAAO,QAAQ,GAAG,CAAC,MAAM,OAAO,IAAI,EAAE,CAAC;gBACzC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC;wBAAS,CAAC;oBACT,YAAY,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;SACF;KACF,CAAC;IAEF,OAAO;QACL,KAAK;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+ import { log } from '../logs.js';
5
+ const require = createRequire(import.meta.url);
6
+ function tryPlaywrightInstallDeps(cli) {
7
+ if (process.platform === 'win32') {
8
+ return;
9
+ }
10
+ const args = [cli, 'install-deps', 'chromium'];
11
+ const inherit = { stdio: 'inherit', env: process.env };
12
+ const euid = typeof process.geteuid === 'function' ? process.geteuid() : undefined;
13
+ if (euid === 0) {
14
+ log('web: playwright install-deps chromium (root)');
15
+ const r = spawnSync(process.execPath, args, inherit);
16
+ if (r.status !== 0) {
17
+ log(`web: install-deps exited ${r.status} (continuing)`);
18
+ }
19
+ return;
20
+ }
21
+ log('web: playwright install-deps chromium (sudo -n)');
22
+ const r = spawnSync('sudo', ['-n', process.execPath, ...args], inherit);
23
+ if (r.status === 0) {
24
+ return;
25
+ }
26
+ log('web: install-deps skipped (not root and passwordless sudo unavailable). If Chromium fails to launch, run: sudo playwright install-deps chromium');
27
+ }
28
+ /**
29
+ * OS packages (install-deps) + browser bundle (install chromium) before web tools run.
30
+ * Managed VMs run the worker as root, so deps install here covers “Web added later” without reprovisioning.
31
+ * Self-hosted: uses sudo -n when configured; never blocks on an interactive password prompt.
32
+ */
33
+ export function ensurePlaywrightChromium() {
34
+ log('web: ensuring Playwright Chromium');
35
+ let pkgDir;
36
+ try {
37
+ pkgDir = path.dirname(require.resolve('playwright/package.json'));
38
+ }
39
+ catch {
40
+ throw new Error('Web tooling requires the playwright package');
41
+ }
42
+ const cli = path.join(pkgDir, 'cli.js');
43
+ tryPlaywrightInstallDeps(cli);
44
+ const result = spawnSync(process.execPath, [cli, 'install', 'chromium'], {
45
+ stdio: 'inherit',
46
+ env: process.env,
47
+ });
48
+ if (result.error) {
49
+ throw result.error;
50
+ }
51
+ if (result.status !== 0) {
52
+ throw new Error(`playwright install chromium exited with code ${result.status ?? 'unknown'}`);
53
+ }
54
+ }
55
+ //# sourceMappingURL=ensure-chromium.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-chromium.js","sourceRoot":"","sources":["../../src/web/ensure-chromium.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,SAAS,wBAAwB,CAAC,GAAW;IAC3C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,SAAkB,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhE,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,GAAG,CAAC,8CAA8C,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,4BAA4B,CAAC,CAAC,MAAM,eAAe,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO;IACT,CAAC;IAED,GAAG,CAAC,iDAAiD,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IACD,GAAG,CACD,iJAAiJ,CAClJ,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACzC,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAExC,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAE9B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE;QACvE,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,MAAM,CAAC,KAAK,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { chromium } from 'playwright';
2
+ const GOTO_TIMEOUT_MS = 60_000;
3
+ export class PlaywrightSession {
4
+ browser = null;
5
+ context = null;
6
+ page = null;
7
+ snapshotValid = false;
8
+ async getPage() {
9
+ if (!this.browser) {
10
+ this.browser = await chromium.launch({
11
+ headless: true,
12
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
13
+ });
14
+ }
15
+ if (!this.context) {
16
+ this.context = await this.browser.newContext({
17
+ ignoreHTTPSErrors: false,
18
+ });
19
+ }
20
+ if (!this.page) {
21
+ this.page = await this.context.newPage();
22
+ this.page.setDefaultTimeout(GOTO_TIMEOUT_MS);
23
+ }
24
+ return this.page;
25
+ }
26
+ async goto(url) {
27
+ const page = await this.getPage();
28
+ await page.goto(url, { waitUntil: 'domcontentloaded', timeout: GOTO_TIMEOUT_MS });
29
+ this.snapshotValid = false;
30
+ }
31
+ invalidateSnapshot() {
32
+ this.snapshotValid = false;
33
+ }
34
+ async close() {
35
+ try {
36
+ await this.page?.close();
37
+ }
38
+ catch {
39
+ /* ignore */
40
+ }
41
+ this.page = null;
42
+ try {
43
+ await this.context?.close();
44
+ }
45
+ catch {
46
+ /* ignore */
47
+ }
48
+ this.context = null;
49
+ try {
50
+ await this.browser?.close();
51
+ }
52
+ catch {
53
+ /* ignore */
54
+ }
55
+ this.browser = null;
56
+ this.snapshotValid = false;
57
+ }
58
+ }
59
+ //# sourceMappingURL=playwright-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-session.js","sourceRoot":"","sources":["../../src/web/playwright-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgD,MAAM,YAAY,CAAC;AAEpF,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,MAAM,OAAO,iBAAiB;IACpB,OAAO,GAAmB,IAAI,CAAC;IAC/B,OAAO,GAA0B,IAAI,CAAC;IACtC,IAAI,GAAgB,IAAI,CAAC;IACjC,aAAa,GAAG,KAAK,CAAC;IAEtB,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACnC,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,CAAC,cAAc,EAAE,0BAA0B,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC3C,iBAAiB,EAAE,KAAK;aACzB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,117 @@
1
+ function parseHostAllowlist(raw) {
2
+ return raw
3
+ .split(',')
4
+ .map((s) => s.trim().toLowerCase())
5
+ .filter(Boolean);
6
+ }
7
+ export function webPolicyFromModuleConfig(config) {
8
+ const allowRaw = typeof config.hostAllowlist === 'string' ? config.hostAllowlist : '';
9
+ const localhostRaw = typeof config.allowLocalhostHttp === 'string' ? config.allowLocalhostHttp.trim().toLowerCase() : 'false';
10
+ return {
11
+ hostAllowlist: parseHostAllowlist(allowRaw),
12
+ allowLocalhostHttp: localhostRaw === 'true' || localhostRaw === '1' || localhostRaw === 'yes',
13
+ };
14
+ }
15
+ function isPrivateIPv4(parts) {
16
+ const [a, b] = parts;
17
+ if (a === 10)
18
+ return true;
19
+ if (a === 127)
20
+ return true;
21
+ if (a === 0)
22
+ return true;
23
+ if (a === 169 && b === 254)
24
+ return true;
25
+ if (a === 172 && b >= 16 && b <= 31)
26
+ return true;
27
+ if (a === 192 && b === 168)
28
+ return true;
29
+ return false;
30
+ }
31
+ function ipv4HostBlocked(host) {
32
+ const m = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);
33
+ if (!m)
34
+ return false;
35
+ const parts = [1, 2, 3, 4].map((i) => Number(m[i]));
36
+ if (parts.some((n) => n > 255))
37
+ return true;
38
+ return isPrivateIPv4(parts);
39
+ }
40
+ function ipv6HostBlocked(host) {
41
+ const h = host.replace(/^\[|\]$/g, '').toLowerCase();
42
+ if (h === '::1')
43
+ return true;
44
+ if (h.startsWith('fc') || h.startsWith('fd'))
45
+ return true;
46
+ if (h.startsWith('fe80:'))
47
+ return true;
48
+ return false;
49
+ }
50
+ function hostMatchesAllowlist(hostname, rules) {
51
+ const h = hostname.toLowerCase();
52
+ for (const rule of rules) {
53
+ if (rule.startsWith('*.')) {
54
+ const suffix = rule.slice(2);
55
+ if (h === suffix || h.endsWith(`.${suffix}`))
56
+ return true;
57
+ }
58
+ else if (h === rule) {
59
+ return true;
60
+ }
61
+ }
62
+ return false;
63
+ }
64
+ const BLOCKED_HOSTNAMES = new Set([
65
+ 'metadata.google.internal',
66
+ 'metadata',
67
+ 'gce.internal',
68
+ ]);
69
+ /**
70
+ * Returns an error message if the URL must not be loaded, otherwise null.
71
+ */
72
+ export function assertUrlAllowed(urlString, policy) {
73
+ let url;
74
+ try {
75
+ url = new URL(urlString);
76
+ }
77
+ catch {
78
+ return 'Invalid URL.';
79
+ }
80
+ if (url.username || url.password)
81
+ return 'URLs with embedded credentials are not allowed.';
82
+ const protocol = url.protocol.toLowerCase();
83
+ const hostname = url.hostname.toLowerCase();
84
+ if (BLOCKED_HOSTNAMES.has(hostname))
85
+ return `Host "${hostname}" is blocked.`;
86
+ const loopback = hostname === 'localhost' ||
87
+ hostname === '127.0.0.1' ||
88
+ hostname === '::1' ||
89
+ hostname === '[::1]';
90
+ if (protocol === 'https:') {
91
+ // continue
92
+ }
93
+ else if (protocol === 'http:') {
94
+ if (!policy.allowLocalhostHttp || !loopback) {
95
+ return policy.allowLocalhostHttp
96
+ ? 'HTTP is only allowed for localhost / 127.0.0.1 / ::1 when enabled in the Web module.'
97
+ : 'Only HTTPS is allowed. Enable "Allow HTTP to localhost" for local HTTP.';
98
+ }
99
+ }
100
+ else {
101
+ return `Protocol "${url.protocol}" is not allowed.`;
102
+ }
103
+ const skipPrivateCheck = policy.allowLocalhostHttp && loopback;
104
+ if (!skipPrivateCheck) {
105
+ if (hostname.includes(':')) {
106
+ if (ipv6HostBlocked(hostname))
107
+ return 'IPv6 address is not allowed.';
108
+ }
109
+ else if (ipv4HostBlocked(hostname))
110
+ return 'Private or local IPv4 addresses are not allowed.';
111
+ }
112
+ if (policy.hostAllowlist.length > 0 && !hostMatchesAllowlist(hostname, policy.hostAllowlist)) {
113
+ return `Host "${hostname}" is not in the Web module allowlist.`;
114
+ }
115
+ return null;
116
+ }
117
+ //# sourceMappingURL=url-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-policy.js","sourceRoot":"","sources":["../../src/web/url-policy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grovina/brian",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Brian runtime worker for Grovina agents",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,7 +24,10 @@
24
24
  "dependencies": {
25
25
  "@anthropic-ai/sdk": "latest",
26
26
  "@google/genai": "latest",
27
- "@slack/web-api": "latest"
27
+ "@modelcontextprotocol/sdk": "^1.29.0",
28
+ "@slack/web-api": "latest",
29
+ "playwright": "^1.50.0",
30
+ "sharp": "^0.34.0"
28
31
  },
29
32
  "devDependencies": {
30
33
  "@types/node": "^22.19.1",