@poe-platform/safe-bash 0.1.680 → 0.1.681
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 +1 -1
- package/dist/safe-bash/commands/playwright/index.d.ts.map +1 -1
- package/dist/safe-bash/commands/playwright/index.js +77 -4
- package/dist/safe-bash/commands/playwright/index.js.map +1 -1
- package/dist/safe-bash/playwright/abilities.d.ts +24 -5
- package/dist/safe-bash/playwright/abilities.d.ts.map +1 -1
- package/dist/safe-bash/playwright/abilities.js +9 -4
- package/dist/safe-bash/playwright/abilities.js.map +1 -1
- package/dist/safe-bash/playwright/ability-execution.d.ts +6 -1
- package/dist/safe-bash/playwright/ability-execution.d.ts.map +1 -1
- package/dist/safe-bash/playwright/ability-execution.js +77 -5
- package/dist/safe-bash/playwright/ability-execution.js.map +1 -1
- package/dist/safe-bash/playwright/adapter.d.ts +467 -11
- package/dist/safe-bash/playwright/adapter.d.ts.map +1 -1
- package/dist/safe-bash/playwright/adapter.js +213 -4
- package/dist/safe-bash/playwright/adapter.js.map +1 -1
- package/dist/safe-bash/playwright/builtins.d.ts +44 -4
- package/dist/safe-bash/playwright/builtins.d.ts.map +1 -1
- package/dist/safe-bash/playwright/builtins.js +14 -9
- package/dist/safe-bash/playwright/builtins.js.map +1 -1
- package/dist/safe-bash/playwright/canonical-locator-parser.d.ts +5 -0
- package/dist/safe-bash/playwright/canonical-locator-parser.d.ts.map +1 -0
- package/dist/safe-bash/playwright/canonical-locator-parser.js +146 -0
- package/dist/safe-bash/playwright/canonical-locator-parser.js.map +1 -0
- package/dist/safe-bash/playwright/capability-events.d.ts +15 -0
- package/dist/safe-bash/playwright/capability-events.d.ts.map +1 -0
- package/dist/safe-bash/playwright/capability-events.js +265 -0
- package/dist/safe-bash/playwright/capability-events.js.map +1 -0
- package/dist/safe-bash/playwright/capability-result.d.ts +33 -0
- package/dist/safe-bash/playwright/capability-result.d.ts.map +1 -0
- package/dist/safe-bash/playwright/capability-result.js +72 -0
- package/dist/safe-bash/playwright/capability-result.js.map +1 -0
- package/dist/safe-bash/playwright/config-ini.d.ts +3 -0
- package/dist/safe-bash/playwright/config-ini.d.ts.map +1 -0
- package/dist/safe-bash/playwright/config-ini.js +161 -0
- package/dist/safe-bash/playwright/config-ini.js.map +1 -0
- package/dist/safe-bash/playwright/controller.d.ts +39 -1
- package/dist/safe-bash/playwright/controller.d.ts.map +1 -1
- package/dist/safe-bash/playwright/controller.js +913 -77
- package/dist/safe-bash/playwright/controller.js.map +1 -1
- package/dist/safe-bash/playwright/devices.d.ts +229 -0
- package/dist/safe-bash/playwright/devices.d.ts.map +1 -0
- package/dist/safe-bash/playwright/devices.js +2740 -0
- package/dist/safe-bash/playwright/devices.js.map +1 -0
- package/dist/safe-bash/playwright/download-capabilities.d.ts +15 -0
- package/dist/safe-bash/playwright/download-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/download-capabilities.js +161 -0
- package/dist/safe-bash/playwright/download-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/drop-capability.d.ts +3 -0
- package/dist/safe-bash/playwright/drop-capability.d.ts.map +1 -0
- package/dist/safe-bash/playwright/drop-capability.js +50 -0
- package/dist/safe-bash/playwright/drop-capability.js.map +1 -0
- package/dist/safe-bash/playwright/find.d.ts +8 -0
- package/dist/safe-bash/playwright/find.d.ts.map +1 -0
- package/dist/safe-bash/playwright/find.js +68 -0
- package/dist/safe-bash/playwright/find.js.map +1 -0
- package/dist/safe-bash/playwright/generated-locator.d.ts +4 -0
- package/dist/safe-bash/playwright/generated-locator.d.ts.map +1 -0
- package/dist/safe-bash/playwright/generated-locator.js +22 -0
- package/dist/safe-bash/playwright/generated-locator.js.map +1 -0
- package/dist/safe-bash/playwright/help.d.ts +4 -3
- package/dist/safe-bash/playwright/help.d.ts.map +1 -1
- package/dist/safe-bash/playwright/help.js +7 -52
- package/dist/safe-bash/playwright/help.js.map +1 -1
- package/dist/safe-bash/playwright/highlight.d.ts +8 -0
- package/dist/safe-bash/playwright/highlight.d.ts.map +1 -0
- package/dist/safe-bash/playwright/highlight.js +82 -0
- package/dist/safe-bash/playwright/highlight.js.map +1 -0
- package/dist/safe-bash/playwright/index.d.ts +5 -0
- package/dist/safe-bash/playwright/index.d.ts.map +1 -1
- package/dist/safe-bash/playwright/index.js +4 -0
- package/dist/safe-bash/playwright/index.js.map +1 -1
- package/dist/safe-bash/playwright/invocation.d.ts +24 -0
- package/dist/safe-bash/playwright/invocation.d.ts.map +1 -1
- package/dist/safe-bash/playwright/invocation.js +42 -10
- package/dist/safe-bash/playwright/invocation.js.map +1 -1
- package/dist/safe-bash/playwright/locator-selector.d.ts +5 -0
- package/dist/safe-bash/playwright/locator-selector.d.ts.map +1 -0
- package/dist/safe-bash/playwright/locator-selector.js +70 -0
- package/dist/safe-bash/playwright/locator-selector.js.map +1 -0
- package/dist/safe-bash/playwright/modal-capabilities.d.ts +20 -0
- package/dist/safe-bash/playwright/modal-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/modal-capabilities.js +137 -0
- package/dist/safe-bash/playwright/modal-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/native-json-snapshot.d.ts +17 -0
- package/dist/safe-bash/playwright/native-json-snapshot.d.ts.map +1 -0
- package/dist/safe-bash/playwright/native-json-snapshot.js +94 -0
- package/dist/safe-bash/playwright/native-json-snapshot.js.map +1 -0
- package/dist/safe-bash/playwright/native-snapshot.d.ts +17 -0
- package/dist/safe-bash/playwright/native-snapshot.d.ts.map +1 -0
- package/dist/safe-bash/playwright/native-snapshot.js +164 -0
- package/dist/safe-bash/playwright/native-snapshot.js.map +1 -0
- package/dist/safe-bash/playwright/network-policy.d.ts +2 -0
- package/dist/safe-bash/playwright/network-policy.d.ts.map +1 -1
- package/dist/safe-bash/playwright/network-policy.js +1 -1
- package/dist/safe-bash/playwright/network-policy.js.map +1 -1
- package/dist/safe-bash/playwright/open-options.d.ts +14 -0
- package/dist/safe-bash/playwright/open-options.d.ts.map +1 -0
- package/dist/safe-bash/playwright/open-options.js +279 -0
- package/dist/safe-bash/playwright/open-options.js.map +1 -0
- package/dist/safe-bash/playwright/recording-capabilities.d.ts +6 -0
- package/dist/safe-bash/playwright/recording-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/recording-capabilities.js +83 -0
- package/dist/safe-bash/playwright/recording-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/resource-limit.d.ts +6 -0
- package/dist/safe-bash/playwright/resource-limit.d.ts.map +1 -0
- package/dist/safe-bash/playwright/resource-limit.js +8 -0
- package/dist/safe-bash/playwright/resource-limit.js.map +1 -0
- package/dist/safe-bash/playwright/response.d.ts +22 -0
- package/dist/safe-bash/playwright/response.d.ts.map +1 -0
- package/dist/safe-bash/playwright/response.js +43 -0
- package/dist/safe-bash/playwright/response.js.map +1 -0
- package/dist/safe-bash/playwright/route-capabilities.d.ts +25 -0
- package/dist/safe-bash/playwright/route-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/route-capabilities.js +138 -0
- package/dist/safe-bash/playwright/route-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/screenshot.d.ts +3 -1
- package/dist/safe-bash/playwright/screenshot.d.ts.map +1 -1
- package/dist/safe-bash/playwright/screenshot.js +15 -12
- package/dist/safe-bash/playwright/screenshot.js.map +1 -1
- package/dist/safe-bash/playwright/session-configuration.d.ts +35 -0
- package/dist/safe-bash/playwright/session-configuration.d.ts.map +1 -0
- package/dist/safe-bash/playwright/session-configuration.js +50 -0
- package/dist/safe-bash/playwright/session-configuration.js.map +1 -0
- package/dist/safe-bash/playwright/session-runtime.d.ts +8 -0
- package/dist/safe-bash/playwright/session-runtime.d.ts.map +1 -0
- package/dist/safe-bash/playwright/session-runtime.js +96 -0
- package/dist/safe-bash/playwright/session-runtime.js.map +1 -0
- package/dist/safe-bash/playwright/snapshot.d.ts +15 -2
- package/dist/safe-bash/playwright/snapshot.d.ts.map +1 -1
- package/dist/safe-bash/playwright/snapshot.js +66 -7
- package/dist/safe-bash/playwright/snapshot.js.map +1 -1
- package/dist/safe-bash/playwright/standard-capabilities.d.ts +4 -0
- package/dist/safe-bash/playwright/standard-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/standard-capabilities.js +248 -0
- package/dist/safe-bash/playwright/standard-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/storage-capabilities.d.ts +4 -0
- package/dist/safe-bash/playwright/storage-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/storage-capabilities.js +120 -0
- package/dist/safe-bash/playwright/storage-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/storage-state.d.ts +8 -0
- package/dist/safe-bash/playwright/storage-state.d.ts.map +1 -0
- package/dist/safe-bash/playwright/storage-state.js +122 -0
- package/dist/safe-bash/playwright/storage-state.js.map +1 -0
- package/dist/safe-bash/playwright/target-screenshot.d.ts +9 -0
- package/dist/safe-bash/playwright/target-screenshot.d.ts.map +1 -0
- package/dist/safe-bash/playwright/target-screenshot.js +28 -0
- package/dist/safe-bash/playwright/target-screenshot.js.map +1 -0
- package/dist/safe-bash/playwright/targets.d.ts +12 -0
- package/dist/safe-bash/playwright/targets.d.ts.map +1 -0
- package/dist/safe-bash/playwright/targets.js +36 -0
- package/dist/safe-bash/playwright/targets.js.map +1 -0
- package/dist/safe-bash/playwright/tracing-capabilities.d.ts +12 -0
- package/dist/safe-bash/playwright/tracing-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/tracing-capabilities.js +100 -0
- package/dist/safe-bash/playwright/tracing-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/webmcp-capabilities.d.ts +6 -0
- package/dist/safe-bash/playwright/webmcp-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/webmcp-capabilities.js +122 -0
- package/dist/safe-bash/playwright/webmcp-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/workspace-assets.d.ts +5 -0
- package/dist/safe-bash/playwright/workspace-assets.d.ts.map +1 -0
- package/dist/safe-bash/playwright/workspace-assets.js +17 -0
- package/dist/safe-bash/playwright/workspace-assets.js.map +1 -0
- package/dist/safe-bash/playwright/workspace.d.ts +3 -0
- package/dist/safe-bash/playwright/workspace.d.ts.map +1 -0
- package/dist/safe-bash/playwright/workspace.js +48 -0
- package/dist/safe-bash/playwright/workspace.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -86,7 +86,7 @@ These plugins are separate from `agentCommands()`; pass them to `shell.use(...)`
|
|
|
86
86
|
| `curl` | `networkCommands({ authorize, transport?, limits?, replace? })`: required authorization on every request, redirect, and retry. Node uses the native HTTP transport; Workers can inject `createFetchTransport()`. `createOriginAuthorizer([...])` provides exact origin/hostname policy; its omitted allowlist is deliberately `*` (allow all). [Options and limits](src/commands/network/types.ts). |
|
|
87
87
|
| `node` | `nodeCommands({ runtime, limits?, replace? })`: runs JavaScript with an injected SafeJS runtime, virtual files, and shell streams. [Usage and supported subset](src/commands/node/README.md). |
|
|
88
88
|
| `llm` | `llmCommands({ providers, defaultModel?, replace? })`: opt-in model routing, sandbox attachments and streamed text/binary output. Includes injected-transport OpenAI and ElevenLabs reference providers. [Configuration and provider contract](src/commands/llm/README.md). |
|
|
89
|
-
| `playwright-cli` | Standard browser commands through a host-owned adapter. `installPlaywrightNetworkPolicy` from `/playwright` supports browser-native redirects with per-hop bounded host HTTP fetch and independent direct HTTP/WebSocket denial. Cloudflare guardrails do not establish WebRTC/UDP denial or all-protocol accounting; hosts requiring those guarantees must refuse this integration. [Network policy and lifecycle](src/contracts/playwright-network-policy.md). |
|
|
89
|
+
| `playwright-cli` | Standard browser commands, storage state, native snapshots, recordings, and traces through a host-owned adapter. [Sessions and host capabilities](src/contracts/playwright-sessions.md). `installPlaywrightNetworkPolicy` from `/playwright` supports browser-native redirects with per-hop bounded host HTTP fetch and independent direct HTTP/WebSocket denial. Cloudflare guardrails do not establish WebRTC/UDP denial or all-protocol accounting; hosts requiring those guarantees must refuse this integration. [Network policy and lifecycle](src/contracts/playwright-network-policy.md). |
|
|
90
90
|
|
|
91
91
|
Storage can be in memory, a rooted host directory, S3-compatible storage, or WebDAV,
|
|
92
92
|
with read-only wrappers, mounts, and overlays. Choose and configure it explicitly;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/playwright/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACzG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,MAAM,MAAM,oBAAoB,GAAG,2BAA2B,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/playwright/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACzG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,MAAM,MAAM,oBAAoB,GAAG,2BAA2B,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAiBhG,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB;;;;;EAoFrE;AAED,cAAc,2BAA2B,CAAC"}
|
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import { createPlaywrightController } from '../../playwright/index.js';
|
|
2
|
-
import { resolvePath } from '../../contracts/path.js';
|
|
2
|
+
import { dirname, resolvePath } from '../../contracts/path.js';
|
|
3
3
|
import { writeBytes } from '../../contracts/io.js';
|
|
4
|
+
function errorMessage(error) {
|
|
5
|
+
const messages = [];
|
|
6
|
+
const seen = new Set();
|
|
7
|
+
const pending = [error];
|
|
8
|
+
while (pending.length && seen.size < 32) {
|
|
9
|
+
const item = pending.shift();
|
|
10
|
+
if (seen.has(item))
|
|
11
|
+
continue;
|
|
12
|
+
seen.add(item);
|
|
13
|
+
const message = item instanceof Error ? item.message : String(item);
|
|
14
|
+
if (!messages.includes(message))
|
|
15
|
+
messages.push(message);
|
|
16
|
+
if (item instanceof AggregateError)
|
|
17
|
+
pending.unshift(...item.errors.slice(0, 32 - seen.size));
|
|
18
|
+
}
|
|
19
|
+
return messages.join(': ');
|
|
20
|
+
}
|
|
4
21
|
/** Host-owned qualified agent subset; never installed by agentCommands. */
|
|
5
22
|
export function createPlaywrightCli(options = {}) {
|
|
6
23
|
if (options?.replace !== undefined && typeof options.replace !== 'boolean')
|
|
@@ -20,6 +37,54 @@ export function createPlaywrightCli(options = {}) {
|
|
|
20
37
|
env: context.env,
|
|
21
38
|
signal: context.signal,
|
|
22
39
|
registerCleanup: context.registerCleanup,
|
|
40
|
+
workspace: {
|
|
41
|
+
cwd: context.cwd,
|
|
42
|
+
...(context.env.HOME ? { home: context.env.HOME } : {}),
|
|
43
|
+
async mkdir(filename) { await context.fs.mkdir(resolvePath(context.cwd, filename), { recursive: true, signal: context.signal }); },
|
|
44
|
+
async exists(filename) {
|
|
45
|
+
try {
|
|
46
|
+
await context.fs.stat(resolvePath(context.cwd, filename), { signal: context.signal });
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error && typeof error === 'object' && Reflect.get(error, 'code') === 'ENOENT')
|
|
51
|
+
return false;
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
async listFiles(directory, maxEntries) {
|
|
56
|
+
const pending = [resolvePath(context.cwd, directory)];
|
|
57
|
+
const files = [];
|
|
58
|
+
let visited = 0;
|
|
59
|
+
while (pending.length) {
|
|
60
|
+
const path = pending.pop();
|
|
61
|
+
let entries;
|
|
62
|
+
try {
|
|
63
|
+
entries = await context.fs.readdir(path, { signal: context.signal, maxEntries: maxEntries - visited });
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error && typeof error === 'object' && Reflect.get(error, 'code') === 'ENOENT')
|
|
67
|
+
continue;
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
visited += entries.length;
|
|
71
|
+
if (visited > maxEntries)
|
|
72
|
+
throw new Error('Playwright output directory entry limit exceeded');
|
|
73
|
+
for (const entry of entries) {
|
|
74
|
+
const filename = resolvePath(path, entry.name);
|
|
75
|
+
if (entry.type === 'directory')
|
|
76
|
+
pending.push(filename);
|
|
77
|
+
else if (entry.type === 'file') {
|
|
78
|
+
const stat = await context.fs.stat(filename, { signal: context.signal });
|
|
79
|
+
if (stat.type === 'file')
|
|
80
|
+
files.push({ filename, size: stat.size, mtimeMs: stat.mtimeMs });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return files;
|
|
85
|
+
},
|
|
86
|
+
async removeFile(filename) { await context.fs.rm(filename, { signal: context.signal }); },
|
|
87
|
+
},
|
|
23
88
|
readArtifact: async (filename, maxBytes) => {
|
|
24
89
|
context.signal.throwIfAborted();
|
|
25
90
|
const path = resolvePath(context.cwd, filename);
|
|
@@ -32,8 +97,11 @@ export function createPlaywrightCli(options = {}) {
|
|
|
32
97
|
context.signal.throwIfAborted();
|
|
33
98
|
if (filename === undefined)
|
|
34
99
|
await writeBytes(context.stdout, bytes, context.signal);
|
|
35
|
-
else
|
|
36
|
-
|
|
100
|
+
else {
|
|
101
|
+
const path = resolvePath(context.cwd, filename);
|
|
102
|
+
await context.fs.mkdir(dirname(path), { recursive: true, signal: context.signal });
|
|
103
|
+
await context.fs.writeFile(path, bytes, { signal: context.signal });
|
|
104
|
+
}
|
|
37
105
|
},
|
|
38
106
|
write: text => writeBytes(context.stdout, new TextEncoder().encode(text), context.signal),
|
|
39
107
|
});
|
|
@@ -41,7 +109,12 @@ export function createPlaywrightCli(options = {}) {
|
|
|
41
109
|
}
|
|
42
110
|
catch (error) {
|
|
43
111
|
context.signal.throwIfAborted();
|
|
44
|
-
|
|
112
|
+
const end = context.args.indexOf('--');
|
|
113
|
+
if (context.args.slice(0, end === -1 ? undefined : end).includes('--json')) {
|
|
114
|
+
await writeBytes(context.stdout, new TextEncoder().encode(JSON.stringify({ isError: true, error: errorMessage(error) }, null, 2) + '\n'), context.signal);
|
|
115
|
+
return { exitCode: 1 };
|
|
116
|
+
}
|
|
117
|
+
await writeBytes(context.stderr, new TextEncoder().encode(`playwright-cli: ${errorMessage(error)}\n`), context.signal);
|
|
45
118
|
return { exitCode: 1 };
|
|
46
119
|
}
|
|
47
120
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/playwright/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAoC,MAAM,2BAA2B,CAAC;AAEzG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/playwright/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,36 @@
|
|
|
1
|
-
import type { PlaywrightContext, PlaywrightElementHandle, PlaywrightPage } from './adapter.js';
|
|
1
|
+
import type { PlaywrightContext, PlaywrightElementHandle, PlaywrightPage, PlaywrightStorageState, PlaywrightArtifactCapture, PlaywrightCodeExecutor, PlaywrightTraceCapture, PlaywrightActionCodeGenerator } from './adapter.js';
|
|
2
|
+
import type { PlaywrightCommandResult } from './response.js';
|
|
3
|
+
import type { PlaywrightSessionConfiguration } from './session-configuration.js';
|
|
2
4
|
import { type PlaywrightCommand, type PlaywrightCommandDefinition } from './catalog.js';
|
|
3
|
-
import { type PlaywrightBuiltinCommand } from './builtins.js';
|
|
4
5
|
export interface PlaywrightAbilityRequest {
|
|
5
6
|
readonly command: PlaywrightCommand;
|
|
6
7
|
readonly session: string;
|
|
7
8
|
readonly args: readonly string[];
|
|
8
9
|
readonly options: Readonly<Record<string, string | boolean | readonly string[]>>;
|
|
9
10
|
readonly signal: AbortSignal;
|
|
11
|
+
readonly limits?: {
|
|
12
|
+
readonly maxCommandBytes: number;
|
|
13
|
+
readonly maxArtifactBytes: number;
|
|
14
|
+
readonly actionTimeoutMs?: number;
|
|
15
|
+
readonly codeExecutionTimeoutMs?: number;
|
|
16
|
+
readonly navigationTimeoutMs?: number;
|
|
17
|
+
readonly maxPages?: number;
|
|
18
|
+
};
|
|
10
19
|
readonly browserSession?: {
|
|
20
|
+
readonly configuration?: PlaywrightSessionConfiguration;
|
|
11
21
|
readonly context: PlaywrightContext;
|
|
12
22
|
readonly page: PlaywrightPage | undefined;
|
|
13
23
|
resolveTarget(ref: string): Promise<PlaywrightElementHandle>;
|
|
24
|
+
targetLocator?(target: string): string;
|
|
14
25
|
selectPage(page: PlaywrightPage): Promise<void>;
|
|
26
|
+
replaceContext?(state: PlaywrightStorageState): Promise<void>;
|
|
27
|
+
invalidateTargets?(): Promise<void>;
|
|
28
|
+
runAction?(action: () => Promise<void>): Promise<void>;
|
|
29
|
+
readonly captureArtifact?: PlaywrightArtifactCapture;
|
|
30
|
+
readonly captureTrace?: PlaywrightTraceCapture;
|
|
31
|
+
readonly executeCode?: PlaywrightCodeExecutor;
|
|
32
|
+
readonly generateActionCode?: PlaywrightActionCodeGenerator;
|
|
33
|
+
readonly prepareFileBytes?: (bytes: Uint8Array) => Uint8Array;
|
|
15
34
|
registerCleanup(cleanup: () => Promise<void>): void;
|
|
16
35
|
};
|
|
17
36
|
write(text: string): Promise<void>;
|
|
@@ -23,13 +42,13 @@ export interface PlaywrightAbility {
|
|
|
23
42
|
readonly options?: readonly string[] | 'all';
|
|
24
43
|
readonly scope?: 'client' | 'session';
|
|
25
44
|
readonly limitations?: string;
|
|
26
|
-
execute(request: PlaywrightAbilityRequest): Promise<void>;
|
|
45
|
+
execute(request: PlaywrightAbilityRequest): Promise<void | PlaywrightCommandResult>;
|
|
27
46
|
}
|
|
28
47
|
export type PlaywrightAbilities = {
|
|
29
|
-
readonly [Command in PlaywrightCommand]?: PlaywrightAbility |
|
|
48
|
+
readonly [Command in PlaywrightCommand]?: PlaywrightAbility | true;
|
|
30
49
|
};
|
|
31
50
|
export interface RegisteredPlaywrightAbility {
|
|
32
|
-
readonly execute?: (request: PlaywrightAbilityRequest) => Promise<void>;
|
|
51
|
+
readonly execute?: (request: PlaywrightAbilityRequest) => Promise<void | PlaywrightCommandResult>;
|
|
33
52
|
readonly scope: 'client' | 'session';
|
|
34
53
|
readonly arity: readonly [number, number];
|
|
35
54
|
readonly options: PlaywrightCommandDefinition['options'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abilities.d.ts","sourceRoot":"","sources":["../../src/playwright/abilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"abilities.d.ts","sourceRoot":"","sources":["../../src/playwright/abilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
|
+
import { playwrightStandardAbilities } from './standard-capabilities.js';
|
|
1
2
|
import { playwrightCommandCatalog } from './catalog.js';
|
|
2
3
|
import { playwrightBuiltinCommands, limitedForms } from './builtins.js';
|
|
3
4
|
const builtinOptions = {
|
|
4
|
-
|
|
5
|
+
attach: ['cdp', 'endpoint', 'extension', 'config', 'idle-timeout'],
|
|
6
|
+
install: ['skills', 'global'], 'install-browser': ['with-deps', 'dry-run', 'list', 'force', 'only-shell', 'no-shell'],
|
|
7
|
+
open: ['browser', 'headed', 'headless', 'config', 'device', 'mobile', 'idle-timeout', 'persistent', 'profile'], snapshot: ['filename', 'depth', 'boxes'], screenshot: ['filename', 'full-page', 'type', 'hires'],
|
|
8
|
+
click: ['modifiers'], fill: ['submit'], list: ['all'], find: ['regex'], highlight: ['hide', 'style'],
|
|
5
9
|
};
|
|
6
10
|
export function registerPlaywrightAbilities(abilities, hasAdapter) {
|
|
7
11
|
if (abilities !== undefined && (!abilities || typeof abilities !== 'object' || Array.isArray(abilities)))
|
|
8
12
|
throw new TypeError('Invalid Playwright abilities');
|
|
9
13
|
const entries = abilities === undefined
|
|
10
|
-
? Object.keys(playwrightBuiltinCommands).filter(command => hasAdapter || ['list', 'close', 'close-all'].includes(command)).map(command => [command, true])
|
|
14
|
+
? [...Object.keys(playwrightBuiltinCommands), ...(hasAdapter ? Object.keys(playwrightStandardAbilities) : [])].filter(command => hasAdapter || ['list', 'close', 'close-all', 'kill-all', 'install'].includes(command)).map(command => [command, true])
|
|
11
15
|
: Object.entries(abilities);
|
|
12
16
|
const registered = new Map();
|
|
13
|
-
for (const [name,
|
|
17
|
+
for (const [name, supplied] of entries) {
|
|
14
18
|
if (!Object.hasOwn(playwrightCommandCatalog, name))
|
|
15
19
|
throw new TypeError(`Unknown Playwright ability: ${name}`);
|
|
16
20
|
const command = name;
|
|
17
21
|
const definition = playwrightCommandCatalog[command];
|
|
22
|
+
const ability = supplied === true && playwrightStandardAbilities[command] ? playwrightStandardAbilities[command] : supplied;
|
|
18
23
|
if (ability === true) {
|
|
19
24
|
if (!Object.hasOwn(playwrightBuiltinCommands, name))
|
|
20
25
|
throw new TypeError(`No built-in Playwright ability: ${name}`);
|
|
21
|
-
if (!hasAdapter && !['list', 'close', 'close-all'].includes(name))
|
|
26
|
+
if (!hasAdapter && !['list', 'close', 'close-all', 'kill-all', 'install'].includes(name))
|
|
22
27
|
throw new TypeError(`An injected Playwright adapter is required for ${name}`);
|
|
23
28
|
const builtin = name;
|
|
24
29
|
const metadata = playwrightBuiltinCommands[builtin];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abilities.js","sourceRoot":"","sources":["../../src/playwright/abilities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"abilities.js","sourceRoot":"","sources":["../../src/playwright/abilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import type { PlaywrightAbilityRequest, RegisteredPlaywrightAbility } from './abilities.js';
|
|
2
2
|
import type { ParsedInvocation, PlaywrightInvocation } from './invocation.js';
|
|
3
|
+
import type { PlaywrightCommandResult } from './response.js';
|
|
3
4
|
export declare function executePlaywrightAbility(ability: RegisteredPlaywrightAbility, parsed: ParsedInvocation, invocation: PlaywrightInvocation, context: {
|
|
4
5
|
readonly signal: AbortSignal;
|
|
5
6
|
readonly maxCommandBytes: number;
|
|
6
7
|
readonly maxArtifactBytes: number;
|
|
8
|
+
readonly actionTimeoutMs?: number;
|
|
9
|
+
readonly codeExecutionTimeoutMs?: number;
|
|
10
|
+
readonly navigationTimeoutMs?: number;
|
|
11
|
+
readonly maxPages?: number;
|
|
7
12
|
readonly browserSession?: PlaywrightAbilityRequest['browserSession'];
|
|
8
13
|
check(): void;
|
|
9
|
-
}): Promise<void>;
|
|
14
|
+
}): Promise<void | PlaywrightCommandResult>;
|
|
10
15
|
//# sourceMappingURL=ability-execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ability-execution.d.ts","sourceRoot":"","sources":["../../src/playwright/ability-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ability-execution.d.ts","sourceRoot":"","sources":["../../src/playwright/ability-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAU7D,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,oBAAoB,EAAE,OAAO,EAAE;IACxJ,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IACrE,KAAK,IAAI,IAAI,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,GAAG,uBAAuB,CAAC,CA2J1C"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
function freezeConfiguration(value) {
|
|
2
|
+
if (value && typeof value === 'object') {
|
|
3
|
+
for (const child of Object.values(value))
|
|
4
|
+
freezeConfiguration(child);
|
|
5
|
+
Object.freeze(value);
|
|
6
|
+
}
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
1
9
|
export async function executePlaywrightAbility(ability, parsed, invocation, context) {
|
|
2
10
|
let accepting = true;
|
|
3
11
|
let bytesUsed = 0;
|
|
@@ -10,7 +18,7 @@ export async function executePlaywrightAbility(ability, parsed, invocation, cont
|
|
|
10
18
|
};
|
|
11
19
|
const admitBytes = (bytes) => {
|
|
12
20
|
if (bytes > context.maxCommandBytes - bytesUsed)
|
|
13
|
-
throw new
|
|
21
|
+
throw new PlaywrightResourceLimitError('Playwright command byte limit exceeded');
|
|
14
22
|
bytesUsed += bytes;
|
|
15
23
|
};
|
|
16
24
|
const track = (action) => {
|
|
@@ -26,9 +34,39 @@ export async function executePlaywrightAbility(ability, parsed, invocation, cont
|
|
|
26
34
|
const browserSession = context.browserSession;
|
|
27
35
|
const request = Object.freeze({
|
|
28
36
|
command: parsed.command, session: parsed.session, args: parsed.args, options: parsed.options, signal: context.signal,
|
|
37
|
+
limits: Object.freeze({ maxCommandBytes: context.maxCommandBytes, maxArtifactBytes: context.maxArtifactBytes, actionTimeoutMs: context.actionTimeoutMs ?? 5000, codeExecutionTimeoutMs: context.codeExecutionTimeoutMs ?? 30000, navigationTimeoutMs: context.navigationTimeoutMs ?? 60000, maxPages: context.maxPages ?? 16 }),
|
|
29
38
|
...(browserSession ? { browserSession: Object.freeze({
|
|
30
39
|
context: browserSession.context,
|
|
31
40
|
page: browserSession.page,
|
|
41
|
+
...(browserSession.configuration ? { configuration: freezeConfiguration(structuredClone(browserSession.configuration)) } : {}),
|
|
42
|
+
...(browserSession.generateActionCode ? { generateActionCode: ((options) => {
|
|
43
|
+
check();
|
|
44
|
+
const code = browserSession.generateActionCode(structuredClone(options));
|
|
45
|
+
check();
|
|
46
|
+
if (typeof code !== 'string')
|
|
47
|
+
throw new TypeError('Native Playwright generated code must be text');
|
|
48
|
+
admitBytes(new TextEncoder().encode(code).byteLength);
|
|
49
|
+
return code;
|
|
50
|
+
}) } : {}),
|
|
51
|
+
...(browserSession.targetLocator ? { targetLocator(target) {
|
|
52
|
+
check();
|
|
53
|
+
return browserSession.targetLocator(target);
|
|
54
|
+
} } : {}),
|
|
55
|
+
...(browserSession.captureTrace ? { captureTrace: ((traceContext, options) => {
|
|
56
|
+
check();
|
|
57
|
+
return track(() => browserSession.captureTrace(traceContext, { signal: AbortSignal.any([context.signal, options.signal]), maxBytes: Math.min(options.maxBytes, context.maxArtifactBytes, context.maxCommandBytes) }));
|
|
58
|
+
}) } : {}),
|
|
59
|
+
...(browserSession.executeCode ? { executeCode: ((options) => {
|
|
60
|
+
check();
|
|
61
|
+
// The lease and runAction own suspended execution across modal commands.
|
|
62
|
+
// Invocation tracking here would wait on the dialog it must first return.
|
|
63
|
+
return browserSession.executeCode({ ...options,
|
|
64
|
+
signal: AbortSignal.any([context.signal, options.signal]),
|
|
65
|
+
timeoutMs: Math.min(options.timeoutMs, context.codeExecutionTimeoutMs ?? 30000),
|
|
66
|
+
maxOutputBytes: Math.min(options.maxOutputBytes, context.maxCommandBytes - bytesUsed),
|
|
67
|
+
maxPages: Math.min(options.maxPages, context.maxPages ?? 16),
|
|
68
|
+
});
|
|
69
|
+
}) } : {}),
|
|
32
70
|
resolveTarget(ref) {
|
|
33
71
|
check();
|
|
34
72
|
return track(async () => {
|
|
@@ -42,6 +80,37 @@ export async function executePlaywrightAbility(ability, parsed, invocation, cont
|
|
|
42
80
|
check();
|
|
43
81
|
return track(async () => { context.check(); await browserSession.selectPage(page); context.check(); });
|
|
44
82
|
},
|
|
83
|
+
...(browserSession.replaceContext ? { replaceContext(state) {
|
|
84
|
+
check();
|
|
85
|
+
return track(async () => { context.check(); await browserSession.replaceContext(state); context.check(); });
|
|
86
|
+
} } : {}),
|
|
87
|
+
...(browserSession.invalidateTargets ? { invalidateTargets() {
|
|
88
|
+
check();
|
|
89
|
+
return track(async () => { context.check(); await browserSession.invalidateTargets(); context.check(); });
|
|
90
|
+
} } : {}),
|
|
91
|
+
...(browserSession.runAction ? { runAction(action) {
|
|
92
|
+
check();
|
|
93
|
+
return track(async () => { context.check(); await browserSession.runAction(action); context.check(); });
|
|
94
|
+
} } : {}),
|
|
95
|
+
...(browserSession.prepareFileBytes ? { prepareFileBytes(bytes) {
|
|
96
|
+
check();
|
|
97
|
+
if (!(bytes instanceof Uint8Array) || bytes.byteLength > context.maxArtifactBytes || bytes.byteLength > context.maxCommandBytes)
|
|
98
|
+
throw new PlaywrightResourceLimitError('Artifact byte limit exceeded');
|
|
99
|
+
return browserSession.prepareFileBytes(bytes);
|
|
100
|
+
} } : {}),
|
|
101
|
+
...(browserSession.captureArtifact ? { captureArtifact: ((produce, options) => {
|
|
102
|
+
check();
|
|
103
|
+
const signal = AbortSignal.any([context.signal, options.signal]);
|
|
104
|
+
const maxBytes = Math.min(options.maxBytes, context.maxArtifactBytes, context.maxCommandBytes - bytesUsed);
|
|
105
|
+
return track(async () => {
|
|
106
|
+
context.check();
|
|
107
|
+
const bytes = await browserSession.captureArtifact(produce, { ...options, signal, maxBytes });
|
|
108
|
+
context.check();
|
|
109
|
+
if (!(bytes instanceof Uint8Array) || bytes.byteLength > maxBytes)
|
|
110
|
+
throw new PlaywrightResourceLimitError('Artifact byte limit exceeded');
|
|
111
|
+
return bytes;
|
|
112
|
+
});
|
|
113
|
+
}) } : {}),
|
|
45
114
|
registerCleanup(cleanup) {
|
|
46
115
|
check();
|
|
47
116
|
if (typeof cleanup !== 'function')
|
|
@@ -54,7 +123,7 @@ export async function executePlaywrightAbility(ability, parsed, invocation, cont
|
|
|
54
123
|
if (typeof text !== 'string')
|
|
55
124
|
throw new TypeError('Playwright output must be text');
|
|
56
125
|
if (text.length > context.maxCommandBytes - bytesUsed)
|
|
57
|
-
throw new
|
|
126
|
+
throw new PlaywrightResourceLimitError('Playwright command byte limit exceeded');
|
|
58
127
|
admitBytes(new TextEncoder().encode(text).byteLength);
|
|
59
128
|
return track(async () => { context.check(); await invocation.write(text); context.check(); });
|
|
60
129
|
},
|
|
@@ -69,7 +138,7 @@ export async function executePlaywrightAbility(ability, parsed, invocation, cont
|
|
|
69
138
|
if (!(bytes instanceof Uint8Array))
|
|
70
139
|
throw new TypeError('Artifact input must return bytes');
|
|
71
140
|
if (bytes.byteLength > context.maxArtifactBytes)
|
|
72
|
-
throw new
|
|
141
|
+
throw new PlaywrightResourceLimitError('Artifact byte limit exceeded');
|
|
73
142
|
admitBytes(bytes.byteLength);
|
|
74
143
|
context.check();
|
|
75
144
|
return new Uint8Array(bytes);
|
|
@@ -80,7 +149,7 @@ export async function executePlaywrightAbility(ability, parsed, invocation, cont
|
|
|
80
149
|
if (!(bytes instanceof Uint8Array))
|
|
81
150
|
throw new TypeError('Artifact output must be bytes');
|
|
82
151
|
if (bytes.byteLength > context.maxArtifactBytes)
|
|
83
|
-
throw new
|
|
152
|
+
throw new PlaywrightResourceLimitError('Artifact byte limit exceeded');
|
|
84
153
|
if (filename !== undefined)
|
|
85
154
|
filenameCheck(filename);
|
|
86
155
|
if (!invocation.writeArtifact)
|
|
@@ -97,9 +166,10 @@ export async function executePlaywrightAbility(ability, parsed, invocation, cont
|
|
|
97
166
|
},
|
|
98
167
|
});
|
|
99
168
|
const failures = [];
|
|
169
|
+
let result = undefined;
|
|
100
170
|
try {
|
|
101
171
|
context.check();
|
|
102
|
-
await ability.execute(request);
|
|
172
|
+
result = await ability.execute(request);
|
|
103
173
|
context.check();
|
|
104
174
|
}
|
|
105
175
|
catch (error) {
|
|
@@ -122,5 +192,7 @@ export async function executePlaywrightAbility(ability, parsed, invocation, cont
|
|
|
122
192
|
throw failures[0];
|
|
123
193
|
if (failures.length)
|
|
124
194
|
throw new AggregateError(failures, 'Playwright ability execution and cleanup failed');
|
|
195
|
+
return result;
|
|
125
196
|
}
|
|
197
|
+
import { PlaywrightResourceLimitError } from './resource-limit.js';
|
|
126
198
|
//# sourceMappingURL=ability-execution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ability-execution.js","sourceRoot":"","sources":["../../src/playwright/ability-execution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ability-execution.js","sourceRoot":"","sources":["../../src/playwright/ability-execution.ts"],"names":[],"mappings":"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"}
|