cloakbrowser-mcp 1.0.2 → 1.2.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 CHANGED
@@ -5,6 +5,7 @@
5
5
  </p>
6
6
 
7
7
  [![CI](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/ci.yml)
8
+ [![codecov](https://codecov.io/gh/swimmwatch/cloakbrowser-mcp/branch/main/graph/badge.svg)](https://codecov.io/gh/swimmwatch/cloakbrowser-mcp)
8
9
  [![Actionlint](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/actionlint.yml/badge.svg)](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/actionlint.yml)
9
10
  [![CodeQL](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/codeql.yml/badge.svg)](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/codeql.yml)
10
11
  [![Dependency Review](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/dependency-review.yml/badge.svg)](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/dependency-review.yml)
@@ -13,13 +14,14 @@
13
14
  [![NPM Release](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/npm-release.yml/badge.svg)](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/npm-release.yml)
14
15
  [![Docker Release](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/docker-release.yml/badge.svg)](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/docker-release.yml)
15
16
  [![Docs Release](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/docs-release.yml/badge.svg)](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/docs-release.yml)
17
+ [![MCP Registry Release](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/mcp-registry-release.yml/badge.svg)](https://github.com/swimmwatch/cloakbrowser-mcp/actions/workflows/mcp-registry-release.yml)
16
18
  [![npm](https://img.shields.io/npm/v/cloakbrowser-mcp.svg?logo=npm)](https://www.npmjs.com/package/cloakbrowser-mcp)
17
19
  [![Node.js >=20](https://img.shields.io/badge/Node.js-%3E%3D20-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
18
20
  [![MCP Server](https://img.shields.io/badge/MCP-server-000000)](https://modelcontextprotocol.io/)
19
21
  [![Docker](https://img.shields.io/badge/Docker-ready-2496ED?logo=docker&logoColor=white)](docs/docker.md)
20
22
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
21
23
 
22
- `cloakbrowser-mcp` is a stdio [Model Context Protocol](https://modelcontextprotocol.io/) browser automation server that runs upstream [`@playwright/mcp`](https://github.com/microsoft/playwright-mcp) with the [CloakBrowser](https://github.com/CloakHQ/CloakBrowser) Chromium binary. It provides Playwright MCP-compatible tools through a thin CloakBrowser bridge for npm and Docker users.
24
+ `cloakbrowser-mcp` is a [Model Context Protocol](https://modelcontextprotocol.io/) browser automation server that runs upstream [`@playwright/mcp`](https://github.com/microsoft/playwright-mcp) with the [CloakBrowser](https://github.com/CloakHQ/CloakBrowser) Chromium binary. It provides Playwright MCP-compatible tools through a thin CloakBrowser bridge for npm and Docker users over stdio or Streamable HTTP.
23
25
 
24
26
  Documentation: [swimmwatch.github.io/cloakbrowser-mcp](https://swimmwatch.github.io/cloakbrowser-mcp/)
25
27
 
@@ -34,6 +36,8 @@ The server is intentionally thin:
34
36
 
35
37
  | cloakbrowser-mcp | @playwright/mcp | Playwright MCP Docker base | CloakBrowser | Node.js | Transport | Platform | Parity |
36
38
  | --- | --- | --- | --- | --- | --- | --- | --- |
39
+ | `1.2.0` | `^0.0.75` | `mcr.microsoft.com/playwright/mcp:v0.0.75` | `^0.3.30` | `>=20` | stdio, Streamable HTTP | `linux/amd64` Docker, Node.js local | Upstream default tools compared in CI. |
40
+ | `1.1.0` | `^0.0.75` | `mcr.microsoft.com/playwright/mcp:v0.0.75` | `^0.3.30` | `>=20` | stdio, Streamable HTTP | `linux/amd64` Docker, Node.js local | Upstream default tools compared in CI. |
37
41
  | `1.0.2` | `^0.0.75` | `mcr.microsoft.com/playwright/mcp:v0.0.75` | `^0.3.30` | `>=20` | stdio | `linux/amd64` Docker, Node.js local | Upstream default tools compared in CI. |
38
42
  | `1.0.1` | `^0.0.75` | `mcr.microsoft.com/playwright/mcp:v0.0.75` | `^0.3.30` | `>=20` | stdio | `linux/amd64` Docker, Node.js local | Upstream default tools compared in CI. |
39
43
  | `1.0.0` | `^0.0.75` | `mcr.microsoft.com/playwright/mcp:v0.0.75` | `^0.3.30` | `>=20` | stdio | `linux/amd64` Docker, Node.js local | Upstream default tools compared in CI. |
@@ -45,9 +49,12 @@ See [Version Compatibility](docs/version-compatibility.md) for the maintained co
45
49
  ```bash
46
50
  npx -y cloakbrowser-mcp@latest --help
47
51
  npx -y cloakbrowser-mcp@latest
52
+ npx -y cloakbrowser-mcp@latest --transport streamable-http --http-port 3000
48
53
  ```
49
54
 
50
55
  Requires Node.js 20 or newer. The first real browser action may download the CloakBrowser binary unless it is already cached.
56
+ The default transport is stdio. Streamable HTTP binds to `127.0.0.1` by default and serves MCP at `/mcp`.
57
+ For the complete generated CLI flag reference, see the published [CLI Reference](https://swimmwatch.github.io/cloakbrowser-mcp/generated/cli/).
51
58
 
52
59
  ## Run from Docker
53
60
 
@@ -56,6 +63,11 @@ docker pull ghcr.io/swimmwatch/cloakbrowser-mcp:latest
56
63
  docker run --rm --init -i \
57
64
  -v "$PWD/artifacts:/data" \
58
65
  ghcr.io/swimmwatch/cloakbrowser-mcp:latest
66
+
67
+ docker run --rm --init -p 127.0.0.1:3000:3000 \
68
+ -v "$PWD/artifacts:/data" \
69
+ ghcr.io/swimmwatch/cloakbrowser-mcp:latest \
70
+ --transport streamable-http --http-host 0.0.0.0 --http-port 3000
59
71
  ```
60
72
 
61
73
  The Docker image is based on the pinned official Playwright MCP image, installs the bridge under `/opt/cloakbrowser-mcp`, and writes artifacts to `/data` by default.
@@ -103,11 +115,20 @@ The Docker image is based on the pinned official Playwright MCP image, installs
103
115
  ## Configuration
104
116
 
105
117
  Use upstream `PLAYWRIGHT_MCP_*` variables for browser, artifact, timeout, network, and tool capability settings. Cloak-specific bridge toggles use `CLOAK_PLAYWRIGHT_MCP_*`.
118
+ CLI flags are documented in the generated [CLI Reference](https://swimmwatch.github.io/cloakbrowser-mcp/generated/cli/).
106
119
 
107
120
  Common variables:
108
121
 
109
122
  | Variable | Default | Description |
110
123
  | --- | --- | --- |
124
+ | `CLOAK_PLAYWRIGHT_MCP_TRANSPORT` | `stdio` | MCP transport exposed by the bridge: `stdio` or `streamable-http`. |
125
+ | `CLOAK_PLAYWRIGHT_MCP_HTTP_HOST` | `127.0.0.1` | Streamable HTTP bind host. |
126
+ | `CLOAK_PLAYWRIGHT_MCP_HTTP_PORT` | `3000` | Streamable HTTP bind port. |
127
+ | `CLOAK_PLAYWRIGHT_MCP_HTTP_ENDPOINT` | `/mcp` | Streamable HTTP endpoint path. |
128
+ | `CLOAK_PLAYWRIGHT_MCP_HTTP_AUTH_TOKEN` | unset | Optional Bearer token for Streamable HTTP. |
129
+ | `CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_BACKEND` | `memory` | Session metadata backend. Only `memory` is implemented in this release. |
130
+ | `CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_IDLE_TTL_MS` | `3600000` | Idle TTL for Streamable HTTP sessions. |
131
+ | `CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_MAX` | `32` | Maximum active Streamable HTTP sessions in one process. |
111
132
  | `PLAYWRIGHT_MCP_BROWSER_ENGINE` | `cloak` | `cloak` uses CloakBrowser. `playwright` uses the upstream Playwright MCP browser runtime. |
112
133
  | `PLAYWRIGHT_MCP_HEADLESS` | `true` | Runs Chromium headless. |
113
134
  | `PLAYWRIGHT_MCP_OUTPUT_DIR` | `.playwright-mcp` | Artifact directory for npm usage. Docker defaults to `/data`. |
@@ -15,10 +15,12 @@ export interface PrepareBridgeRuntimeOptions {
15
15
  env?: EnvReader;
16
16
  tempRoot?: string;
17
17
  ensureCloakBinary?: () => Promise<string>;
18
+ browserIsolated?: boolean;
18
19
  }
19
20
  export interface PlaywrightMcpBridgeConfig {
20
21
  browser?: {
21
22
  browserName?: 'chromium';
23
+ isolated?: boolean;
22
24
  launchOptions?: {
23
25
  executablePath?: string;
24
26
  headless?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/bridge/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAuC,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAyD,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAIjG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,yBAAyB,CAAC;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,UAAU,CAAC;QACzB,aAAa,CAAC,EAAE;YACd,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;YAChB,eAAe,CAAC,EAAE,OAAO,CAAC;YAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;SAC9B,CAAC;QACF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACH;AAID,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,aAAa,CAAC,CAuDxB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,EAAE,CAQzD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxF;AAED,wBAAgB,yBAAyB,IAAI,UAAU,CAAC,OAAO,UAAU,CAAC,CAEzE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/bridge/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAuC,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAyD,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAIjG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,yBAAyB,CAAC;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,UAAU,CAAC;QACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,aAAa,CAAC,EAAE;YACd,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;YAChB,eAAe,CAAC,EAAE,OAAO,CAAC;YAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;SAC9B,CAAC;QACF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACH;AAID,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,aAAa,CAAC,CA4DxB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,EAAE,CAQzD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxF;AAED,wBAAgB,yBAAyB,IAAI,UAAU,CAAC,OAAO,UAAU,CAAC,CAEzE"}
@@ -26,6 +26,10 @@ export async function prepareBridgeRuntime(options = {}) {
26
26
  launchOptions,
27
27
  },
28
28
  };
29
+ if (options.browserIsolated === true) {
30
+ config.browser.isolated = true;
31
+ childEnv.PLAYWRIGHT_MCP_ISOLATED = 'true';
32
+ }
29
33
  let cloakBinaryPath;
30
34
  if (useCloak) {
31
35
  cloakBinaryPath = await suppressStdout(options.ensureCloakBinary ?? ensureBinary);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/bridge/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/bridge/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Command } from 'commander';
2
+ import { type BridgeTransportMode, type CliOptions, type HttpSessionBackend } from '../http/options.js';
3
+ export declare const cliDescription = "Playwright MCP bridge backed by CloakBrowser.";
4
+ interface CommanderCliOptions {
5
+ transport: BridgeTransportMode;
6
+ httpHost: string;
7
+ httpPort: number;
8
+ httpEndpoint: string;
9
+ httpAuthToken?: string;
10
+ httpSessionBackend: HttpSessionBackend;
11
+ httpSessionIdleTtlMs: number;
12
+ httpSessionMax: number;
13
+ }
14
+ type CliOptionValue = string | number;
15
+ interface CliOptionDefinition {
16
+ name: keyof CommanderCliOptions;
17
+ flags: string;
18
+ description: string;
19
+ env: string;
20
+ group: string;
21
+ defaultValue?: CliOptionValue;
22
+ choices?: readonly string[];
23
+ parser?: (value: string) => CliOptionValue;
24
+ }
25
+ export declare const cliOptionDefinitions: readonly CliOptionDefinition[];
26
+ export declare function createCliCommand(version: string): Command;
27
+ export declare function parseCliOptions(args: readonly string[]): CliOptions;
28
+ export declare function readCliOptions(command: Command): CliOptions;
29
+ export declare function renderCliReferenceMarkdown(version: string): string;
30
+ export {};
31
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgC,MAAM,WAAW,CAAC;AAClE,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc,kDAAkD,CAAC;AAE9E,UAAU,mBAAmB;IAC3B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtC,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,mBAAmB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,cAAc,CAAC;CAC5C;AAED,eAAO,MAAM,oBAAoB,EAAE,SAAS,mBAAmB,EAwE9D,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAczD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CASnE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAE3D;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBlE"}
@@ -0,0 +1,228 @@
1
+ import { Command, InvalidArgumentError, Option } from 'commander';
2
+ import { bridgeTransportModes, defaultStreamableHttpOptions, httpSessionBackends, } from '../http/options.js';
3
+ export const cliDescription = 'Playwright MCP bridge backed by CloakBrowser.';
4
+ export const cliOptionDefinitions = [
5
+ {
6
+ name: 'transport',
7
+ flags: '--transport <mode>',
8
+ description: 'MCP transport exposed by the bridge.',
9
+ env: 'CLOAK_PLAYWRIGHT_MCP_TRANSPORT',
10
+ group: 'Transport',
11
+ defaultValue: 'stdio',
12
+ choices: bridgeTransportModes,
13
+ },
14
+ {
15
+ name: 'httpHost',
16
+ flags: '--http-host <host>',
17
+ description: 'Streamable HTTP bind host.',
18
+ env: 'CLOAK_PLAYWRIGHT_MCP_HTTP_HOST',
19
+ group: 'Streamable HTTP',
20
+ defaultValue: defaultStreamableHttpOptions.host,
21
+ parser: parseNonEmptyString('HTTP host must not be empty'),
22
+ },
23
+ {
24
+ name: 'httpPort',
25
+ flags: '--http-port <port>',
26
+ description: 'Streamable HTTP bind port. Use 0 for an ephemeral port in tests.',
27
+ env: 'CLOAK_PLAYWRIGHT_MCP_HTTP_PORT',
28
+ group: 'Streamable HTTP',
29
+ defaultValue: defaultStreamableHttpOptions.port,
30
+ parser: parseIntegerInRange('HTTP port', 0, 65_535),
31
+ },
32
+ {
33
+ name: 'httpEndpoint',
34
+ flags: '--http-endpoint <path>',
35
+ description: 'Streamable HTTP endpoint path.',
36
+ env: 'CLOAK_PLAYWRIGHT_MCP_HTTP_ENDPOINT',
37
+ group: 'Streamable HTTP',
38
+ defaultValue: defaultStreamableHttpOptions.endpoint,
39
+ parser: parseHttpEndpoint,
40
+ },
41
+ {
42
+ name: 'httpAuthToken',
43
+ flags: '--http-auth-token <token>',
44
+ description: 'Optional Bearer token required on Streamable HTTP requests.',
45
+ env: 'CLOAK_PLAYWRIGHT_MCP_HTTP_AUTH_TOKEN',
46
+ group: 'Streamable HTTP',
47
+ parser: parseNonEmptyString('HTTP auth token must not be empty'),
48
+ },
49
+ {
50
+ name: 'httpSessionBackend',
51
+ flags: '--http-session-backend <backend>',
52
+ description: 'Session metadata backend. Only memory is implemented in this release.',
53
+ env: 'CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_BACKEND',
54
+ group: 'Streamable HTTP',
55
+ defaultValue: defaultStreamableHttpOptions.sessionBackend,
56
+ choices: httpSessionBackends,
57
+ },
58
+ {
59
+ name: 'httpSessionIdleTtlMs',
60
+ flags: '--http-session-idle-ttl-ms <ms>',
61
+ description: 'Idle TTL for Streamable HTTP sessions.',
62
+ env: 'CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_IDLE_TTL_MS',
63
+ group: 'Streamable HTTP',
64
+ defaultValue: defaultStreamableHttpOptions.sessionIdleTtlMs,
65
+ parser: parsePositiveInteger('HTTP session idle TTL'),
66
+ },
67
+ {
68
+ name: 'httpSessionMax',
69
+ flags: '--http-session-max <count>',
70
+ description: 'Maximum active Streamable HTTP sessions in one process.',
71
+ env: 'CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_MAX',
72
+ group: 'Streamable HTTP',
73
+ defaultValue: defaultStreamableHttpOptions.sessionMax,
74
+ parser: parsePositiveInteger('HTTP session max'),
75
+ },
76
+ ];
77
+ export function createCliCommand(version) {
78
+ const command = new Command()
79
+ .name('cloakbrowser-mcp')
80
+ .description(cliDescription)
81
+ .version(version)
82
+ .showHelpAfterError()
83
+ .showSuggestionAfterError()
84
+ .allowExcessArguments(false);
85
+ for (const definition of cliOptionDefinitions) {
86
+ command.addOption(createCommanderOption(definition));
87
+ }
88
+ return command;
89
+ }
90
+ export function parseCliOptions(args) {
91
+ const command = createCliCommand('0.0.0');
92
+ command.exitOverride();
93
+ command.configureOutput({
94
+ writeOut: () => undefined,
95
+ writeErr: () => undefined,
96
+ });
97
+ command.parse(args, { from: 'user' });
98
+ return readCliOptions(command);
99
+ }
100
+ export function readCliOptions(command) {
101
+ return toCliOptions(command.opts());
102
+ }
103
+ export function renderCliReferenceMarkdown(version) {
104
+ const command = createCliCommand(version);
105
+ return `${renderCliReferenceFrontMatter()}# CLI Reference
106
+
107
+ This page is generated from the Commander.js CLI definition during MkDocs builds. Update the CLI definition in source code instead of editing this page by hand.
108
+
109
+ ## Usage
110
+
111
+ \`\`\`text
112
+ ${command.helpInformation().trimEnd()}
113
+ \`\`\`
114
+
115
+ ## Options
116
+
117
+ ${renderOptionsTable()}
118
+ `;
119
+ }
120
+ function createCommanderOption(definition) {
121
+ const option = new Option(definition.flags, definition.description)
122
+ .env(definition.env)
123
+ .helpGroup(definition.group);
124
+ const parser = definition.parser;
125
+ if (parser) {
126
+ option.argParser((value) => parser(value));
127
+ }
128
+ if (definition.choices) {
129
+ option.choices(definition.choices);
130
+ }
131
+ if (definition.defaultValue !== undefined) {
132
+ option.default(definition.defaultValue, String(definition.defaultValue));
133
+ }
134
+ return option;
135
+ }
136
+ function toCliOptions(options) {
137
+ return {
138
+ transport: options.transport,
139
+ http: {
140
+ host: options.httpHost,
141
+ port: options.httpPort,
142
+ endpoint: options.httpEndpoint,
143
+ authToken: optionalString(options.httpAuthToken),
144
+ sessionBackend: options.httpSessionBackend,
145
+ sessionIdleTtlMs: options.httpSessionIdleTtlMs,
146
+ sessionMax: options.httpSessionMax,
147
+ bodyLimitBytes: defaultStreamableHttpOptions.bodyLimitBytes,
148
+ },
149
+ };
150
+ }
151
+ function renderCliReferenceFrontMatter() {
152
+ return `---
153
+ description: Generated CLI reference for cloakbrowser-mcp.
154
+ icon: material/console-line
155
+ tags:
156
+ - Configuration
157
+ - User Guide
158
+ ---
159
+
160
+ `;
161
+ }
162
+ function renderOptionsTable() {
163
+ const rows = cliOptionDefinitions.map((definition) => [
164
+ code(definition.flags),
165
+ code(definition.env),
166
+ definition.defaultValue === undefined ? 'unset' : code(String(definition.defaultValue)),
167
+ definition.choices ? definition.choices.map((choice) => code(choice)).join(', ') : '',
168
+ definition.description,
169
+ ].join(' | '));
170
+ return [
171
+ ['Option', 'Environment', 'Default', 'Values', 'Description'].join(' | '),
172
+ ['---', '---', '---', '---', '---'].join(' | '),
173
+ ...rows,
174
+ ]
175
+ .map((line) => `| ${line} |`)
176
+ .join('\n');
177
+ }
178
+ function parseIntegerInRange(label, min, max) {
179
+ return (value) => {
180
+ const parsed = parseInteger(label, value);
181
+ if (parsed < min || parsed > max) {
182
+ throw new InvalidArgumentError(`${label} must be an integer between ${min} and ${max}`);
183
+ }
184
+ return parsed;
185
+ };
186
+ }
187
+ function parsePositiveInteger(label) {
188
+ return (value) => {
189
+ const parsed = parseInteger(label, value);
190
+ if (parsed <= 0) {
191
+ throw new InvalidArgumentError(`${label} must be greater than 0`);
192
+ }
193
+ return parsed;
194
+ };
195
+ }
196
+ function parseInteger(label, value) {
197
+ if (!/^-?\d+$/.test(value)) {
198
+ throw new InvalidArgumentError(`${label} must be an integer`);
199
+ }
200
+ const parsed = Number(value);
201
+ if (!Number.isSafeInteger(parsed)) {
202
+ throw new InvalidArgumentError(`${label} must be a safe integer`);
203
+ }
204
+ return parsed;
205
+ }
206
+ function parseHttpEndpoint(value) {
207
+ if (!value.startsWith('/') || value.includes('?') || value.includes('#')) {
208
+ throw new InvalidArgumentError('HTTP endpoint must be an absolute path such as "/mcp"');
209
+ }
210
+ if (value.length > 1 && value.endsWith('/')) {
211
+ throw new InvalidArgumentError('HTTP endpoint must not end with "/"');
212
+ }
213
+ return value;
214
+ }
215
+ function parseNonEmptyString(message) {
216
+ return (value) => {
217
+ if (!value.trim())
218
+ throw new InvalidArgumentError(message);
219
+ return value;
220
+ };
221
+ }
222
+ function optionalString(value) {
223
+ return value === undefined || value === '' ? undefined : value;
224
+ }
225
+ function code(value) {
226
+ return `\`${value.replaceAll('`', '\\`')}\``;
227
+ }
228
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,58 +1,39 @@
1
1
  #!/usr/bin/env node
2
2
  import { readFileSync } from 'node:fs';
3
3
  import process from 'node:process';
4
+ import { createCliCommand, readCliOptions } from './cli/options.js';
5
+ import { startStreamableHttpBridge } from './http/server.js';
4
6
  import { PROJECT_METADATA } from './project/metadata.js';
5
7
  import { startBridge } from './server.js';
6
8
  const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
7
- const help = `cloakbrowser-mcp ${pkg.version}
8
-
9
- Playwright MCP bridge backed by CloakBrowser.
10
-
11
- Usage:
12
- cloakbrowser-mcp
13
- cloakbrowser-mcp --help
14
- cloakbrowser-mcp --version
15
-
16
- Primary configuration is provided with PLAYWRIGHT_MCP_* environment variables.
17
- Cloak-specific toggles use CLOAK_PLAYWRIGHT_MCP_*.
18
-
19
- Common environment variables:
20
- PLAYWRIGHT_MCP_BROWSER_ENGINE cloak | playwright (default: cloak)
21
- PLAYWRIGHT_MCP_HEADLESS true | false (default: true)
22
- PLAYWRIGHT_MCP_OUTPUT_DIR artifact directory (default: .playwright-mcp)
23
- PLAYWRIGHT_MCP_OUTPUT_MODE stdout | file (default: stdout)
24
- PLAYWRIGHT_MCP_VIEWPORT_SIZE WIDTHxHEIGHT
25
- PLAYWRIGHT_MCP_TIMEOUT_ACTION action timeout ms (default: 5000)
26
- PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION navigation timeout ms (default: 60000)
27
- CLOAK_PLAYWRIGHT_MCP_CONSOLE_FALLBACK true | false (default: true)
28
- CLOAK_PLAYWRIGHT_MCP_STEALTH_ARGS true | false (default: true)
29
- CLOAK_PLAYWRIGHT_MCP_EXTRA_ARGS comma-separated or JSON array Chromium args
30
- `;
31
9
  async function main() {
32
- const args = process.argv.slice(2);
33
- if (args.includes('--help') || args.includes('-h')) {
34
- process.stdout.write(help);
35
- return;
36
- }
37
- if (args.includes('--version') || args.includes('-V')) {
38
- process.stdout.write(`${pkg.version}\n`);
39
- return;
40
- }
41
- const bridge = await startBridge({
42
- serverInfo: {
10
+ const command = createCliCommand(pkg.version);
11
+ command.action(async () => {
12
+ const options = readCliOptions(command);
13
+ const serverInfo = {
43
14
  name: PROJECT_METADATA.mcpName,
44
15
  title: PROJECT_METADATA.title,
45
16
  version: pkg.version,
46
17
  description: PROJECT_METADATA.description,
47
18
  websiteUrl: PROJECT_METADATA.websiteUrl,
48
19
  icons: PROJECT_METADATA.icons,
49
- },
20
+ };
21
+ const running = options.transport === 'streamable-http'
22
+ ? await startStreamableHttpBridge({ ...options.http, serverInfo })
23
+ : await startStdioBridge(serverInfo);
24
+ for (const signal of ['SIGINT', 'SIGTERM']) {
25
+ process.once(signal, () => {
26
+ void running.close().finally(() => process.exit(0));
27
+ });
28
+ }
50
29
  });
51
- for (const signal of ['SIGINT', 'SIGTERM']) {
52
- process.once(signal, () => {
53
- void bridge.dispose().finally(() => process.exit(0));
54
- });
55
- }
30
+ await command.parseAsync(process.argv);
31
+ }
32
+ async function startStdioBridge(serverInfo) {
33
+ const bridge = await startBridge({ serverInfo });
34
+ return {
35
+ close: () => bridge.dispose(),
36
+ };
56
37
  }
57
38
  void main().catch((error) => {
58
39
  process.stderr.write(`fatal: ${error.message}\n`);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAEvF,CAAC;AAEF,MAAM,IAAI,GAAG,oBAAoB,GAAG,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuB3C,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;QAC/B,UAAU,EAAE;YACV,IAAI,EAAE,gBAAgB,CAAC,OAAO;YAC9B,KAAK,EAAE,gBAAgB,CAAC,KAAK;YAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,gBAAgB,CAAC,WAAW;YACzC,UAAU,EAAE,gBAAgB,CAAC,UAAU;YACvC,KAAK,EAAE,gBAAgB,CAAC,KAAK;SAC9B;KACF,CAAC,CAAC;IAEH,KAAK,MAAM,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YACxB,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAEvF,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,gBAAgB,CAAC,OAAO;YAC9B,KAAK,EAAE,gBAAgB,CAAC,KAAK;YAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,gBAAgB,CAAC,WAAW;YACzC,UAAU,EAAE,gBAAgB,CAAC,UAAU;YACvC,KAAK,EAAE,gBAAgB,CAAC,KAAK;SAC9B,CAAC;QAEF,MAAM,OAAO,GACX,OAAO,CAAC,SAAS,KAAK,iBAAiB;YACrC,CAAC,CAAC,MAAM,yBAAyB,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;YAClE,CAAC,CAAC,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEzC,KAAK,MAAM,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBACxB,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAAmC;IACjE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACjD,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export type BridgeTransportMode = 'stdio' | 'streamable-http';
2
+ export type HttpSessionBackend = 'memory';
3
+ export declare const bridgeTransportModes: readonly ["stdio", "streamable-http"];
4
+ export declare const httpSessionBackends: readonly ["memory"];
5
+ export interface StreamableHttpOptions {
6
+ host: string;
7
+ port: number;
8
+ endpoint: string;
9
+ authToken?: string;
10
+ sessionBackend: HttpSessionBackend;
11
+ sessionIdleTtlMs: number;
12
+ sessionMax: number;
13
+ bodyLimitBytes: number;
14
+ }
15
+ export interface CliOptions {
16
+ transport: BridgeTransportMode;
17
+ http: StreamableHttpOptions;
18
+ }
19
+ export declare const defaultStreamableHttpOptions: StreamableHttpOptions;
20
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/http/options.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,iBAAiB,CAAC;AAC9D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE1C,eAAO,MAAM,oBAAoB,uCAGkB,CAAC;AACpD,eAAO,MAAM,mBAAmB,qBAA8D,CAAC;AAE/F,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,kBAAkB,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,eAAO,MAAM,4BAA4B,EAAE,qBAQ1C,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const bridgeTransportModes = [
2
+ 'stdio',
3
+ 'streamable-http',
4
+ ];
5
+ export const httpSessionBackends = ['memory'];
6
+ export const defaultStreamableHttpOptions = {
7
+ host: '127.0.0.1',
8
+ port: 3000,
9
+ endpoint: '/mcp',
10
+ sessionBackend: 'memory',
11
+ sessionIdleTtlMs: 3_600_000,
12
+ sessionMax: 32,
13
+ bodyLimitBytes: 1_048_576,
14
+ };
15
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/http/options.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO;IACP,iBAAiB;CACgC,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAQ,CAAkD,CAAC;AAkB/F,MAAM,CAAC,MAAM,4BAA4B,GAA0B;IACjE,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM;IAChB,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,SAAS;IAC3B,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,SAAS;CAC1B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type IncomingMessage } from 'node:http';
2
+ import type { AddressInfo } from 'node:net';
3
+ import { type Implementation } from '@modelcontextprotocol/sdk/types.js';
4
+ import { type SessionStore } from './sessionStore.js';
5
+ import type { HttpSessionBackend, StreamableHttpOptions } from './options.js';
6
+ export interface StartStreamableHttpBridgeOptions extends StreamableHttpOptions {
7
+ serverInfo?: Partial<Implementation>;
8
+ sessionStore?: SessionStore;
9
+ }
10
+ export interface StreamableHttpBridgeServer {
11
+ url: string;
12
+ address: AddressInfo;
13
+ close(): Promise<void>;
14
+ }
15
+ export declare function startStreamableHttpBridge(options: StartStreamableHttpBridgeOptions): Promise<StreamableHttpBridgeServer>;
16
+ export declare function isAuthorizedRequest(req: IncomingMessage, authToken: string | undefined): boolean;
17
+ export declare function isEndpointRequest(req: IncomingMessage, endpoint: string, fallbackHost: string): boolean;
18
+ export type { HttpSessionBackend };
19
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,eAAe,EAAoC,MAAM,WAAW,CAAC;AACjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAE9F,OAAO,EAA8C,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAO9E,MAAM,WAAW,gCAAiC,SAAQ,qBAAqB;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAQD,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,0BAA0B,CAAC,CAGrC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUhG;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAIvG;AA+WD,YAAY,EAAE,kBAAkB,EAAE,CAAC"}