@geometra/proxy 1.18.1 → 1.19.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/README.md +8 -2
- package/dist/index.js +36 -7
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @geometra/proxy
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Chromium proxy ( **`headed` / visible window by default** ) that extracts **live DOM layout** (`getBoundingClientRect`) plus a **synthetic Geometra UI tree** and streams **GEOM v1** `frame` / `patch` messages over WebSocket (JSON text). Use it with [`@geometra/mcp`](../../mcp/README.md) to drive arbitrary web apps without screenshots.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -13,9 +13,15 @@ npx playwright install chromium
|
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
15
|
npx geometra-proxy https://example.com --port 3200
|
|
16
|
-
npx geometra-proxy http://localhost:8080 --width 1440 --height 900
|
|
16
|
+
npx geometra-proxy http://localhost:8080 --width 1440 --height 900
|
|
17
|
+
npx geometra-proxy https://example.com --port 3200 --headless
|
|
18
|
+
npx geometra-proxy https://example.com --port 3200 --slow-mo 50
|
|
17
19
|
```
|
|
18
20
|
|
|
21
|
+
**Default is a visible browser** so you can watch MCP-driven clicks and typing. Use **`--headless`** (or env **`GEOMETRA_HEADLESS=1`**) for automation on servers / CI. **`--slow-mo <ms>`** (or **`GEOMETRA_SLOW_MO`**) adds Playwright `slowMo` to make actions easier to follow.
|
|
22
|
+
|
|
23
|
+
Headed vs headless usually does **not** materially change token usage, because token usage comes from MCP response payloads rather than whether Chromium is visible.
|
|
24
|
+
|
|
19
25
|
## Protocol
|
|
20
26
|
|
|
21
27
|
Matches `packages/server` GEOM v1: `frame` with `layout`, `tree`, `protocolVersion`; `patch` with `patches`; client messages `resize`, `event` (`onClick`), `key`, `composition`.
|
package/dist/index.js
CHANGED
|
@@ -2,24 +2,39 @@
|
|
|
2
2
|
import { chromium } from 'playwright';
|
|
3
3
|
import { installDomObserver, startGeometryWebSocket } from './geometry-ws.js';
|
|
4
4
|
function printUsage() {
|
|
5
|
-
console.error(`Usage: geometra-proxy <url> [--port <n>] [--width <n>] [--height <n>] [--headed]
|
|
5
|
+
console.error(`Usage: geometra-proxy <url> [--port <n>] [--width <n>] [--height <n>] [--headless] [--headed] [--slow-mo <ms>]
|
|
6
6
|
|
|
7
|
-
Open <url> in
|
|
7
|
+
Open <url> in Chromium and stream GEOM v1 frames on WebSocket (JSON text).
|
|
8
|
+
|
|
9
|
+
Default is a visible browser window (headed) so you can watch MCP-driven automation.
|
|
10
|
+
Use --headless or env GEOMETRA_HEADLESS=1 for CI / servers without a display.
|
|
8
11
|
|
|
9
12
|
Examples:
|
|
10
13
|
geometra-proxy http://localhost:8080 --port 3200
|
|
11
14
|
geometra-proxy https://example.com --port 3200 --width 1440 --height 900
|
|
12
|
-
geometra-proxy
|
|
15
|
+
geometra-proxy https://jobs.example.com/apply --slow-mo 40
|
|
16
|
+
geometra-proxy http://localhost:3000 --headless
|
|
13
17
|
|
|
14
18
|
Requires Chromium for Playwright: npx playwright install chromium
|
|
15
19
|
`);
|
|
16
20
|
}
|
|
21
|
+
function envRequestsHeadless() {
|
|
22
|
+
const v = (process.env.GEOMETRA_HEADLESS ?? '').toLowerCase();
|
|
23
|
+
return v === '1' || v === 'true' || v === 'yes';
|
|
24
|
+
}
|
|
17
25
|
function parseArgs(argv) {
|
|
18
26
|
let url = '';
|
|
19
27
|
let port = 3200;
|
|
20
28
|
let width = 1280;
|
|
21
29
|
let height = 720;
|
|
22
|
-
let headed =
|
|
30
|
+
let headed = !envRequestsHeadless();
|
|
31
|
+
let slowMo = 0;
|
|
32
|
+
const envSlow = process.env.GEOMETRA_SLOW_MO ?? process.env.GEOMETRA_SLOWMO;
|
|
33
|
+
if (envSlow !== undefined && envSlow !== '') {
|
|
34
|
+
const n = Number(envSlow);
|
|
35
|
+
if (Number.isFinite(n) && n >= 0)
|
|
36
|
+
slowMo = Math.floor(n);
|
|
37
|
+
}
|
|
23
38
|
for (let i = 0; i < argv.length; i++) {
|
|
24
39
|
const a = argv[i];
|
|
25
40
|
if (a === '--port') {
|
|
@@ -34,6 +49,14 @@ function parseArgs(argv) {
|
|
|
34
49
|
else if (a === '--headed') {
|
|
35
50
|
headed = true;
|
|
36
51
|
}
|
|
52
|
+
else if (a === '--headless') {
|
|
53
|
+
headed = false;
|
|
54
|
+
}
|
|
55
|
+
else if (a === '--slow-mo' || a === '--slowMo') {
|
|
56
|
+
const n = Number(argv[++i] ?? '');
|
|
57
|
+
if (Number.isFinite(n) && n >= 0)
|
|
58
|
+
slowMo = Math.floor(n);
|
|
59
|
+
}
|
|
37
60
|
else if (!a.startsWith('-')) {
|
|
38
61
|
url = a;
|
|
39
62
|
}
|
|
@@ -43,17 +66,23 @@ function parseArgs(argv) {
|
|
|
43
66
|
process.exit(1);
|
|
44
67
|
}
|
|
45
68
|
}
|
|
46
|
-
return { url, port, width, height, headed };
|
|
69
|
+
return { url, port, width, height, headed, slowMo };
|
|
47
70
|
}
|
|
48
71
|
async function main() {
|
|
49
|
-
const { url, port, width, height, headed } = parseArgs(process.argv.slice(2));
|
|
72
|
+
const { url, port, width, height, headed, slowMo } = parseArgs(process.argv.slice(2));
|
|
50
73
|
if (!url) {
|
|
51
74
|
printUsage();
|
|
52
75
|
process.exit(1);
|
|
53
76
|
}
|
|
54
|
-
const
|
|
77
|
+
const launchOpts = { headless: !headed };
|
|
78
|
+
if (slowMo > 0)
|
|
79
|
+
launchOpts.slowMo = slowMo;
|
|
80
|
+
const browser = await chromium.launch(launchOpts);
|
|
55
81
|
const page = await browser.newPage();
|
|
56
82
|
await page.setViewportSize({ width, height });
|
|
83
|
+
const mode = headed ? 'headed (visible window)' : 'headless';
|
|
84
|
+
const pace = slowMo > 0 ? `, slowMo ${slowMo}ms` : '';
|
|
85
|
+
console.error(`[geometra-proxy] Chromium ${mode}${pace}`);
|
|
57
86
|
console.error(`[geometra-proxy] Loading ${url} …`);
|
|
58
87
|
await page.goto(url, { waitUntil: 'domcontentloaded' });
|
|
59
88
|
const hub = startGeometryWebSocket({
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAE7E,SAAS,UAAU;IACjB,OAAO,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geometra/proxy",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.19.0",
|
|
4
|
+
"description": "Chromium proxy (headed by default) — stream live DOM geometry as Geometra WebSocket frames for MCP and clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"repository": {
|