@amaster.ai/pi-computer-use 0.1.2-beta.8 → 0.1.2-beta.80
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 +80 -85
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/generated/cua-driver-tools.d.ts +4814 -0
- package/dist/generated/cua-driver-tools.d.ts.map +1 -0
- package/dist/generated/cua-driver-tools.js +6988 -0
- package/dist/generated/cua-driver-tools.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +445 -425
- package/dist/index.js.map +1 -1
- package/dist/mcp-client.d.ts +55 -14
- package/dist/mcp-client.d.ts.map +1 -1
- package/dist/mcp-client.js +566 -62
- package/dist/mcp-client.js.map +1 -1
- package/dist/tool-groups.d.ts +16 -0
- package/dist/tool-groups.d.ts.map +1 -0
- package/dist/tool-groups.js +96 -0
- package/dist/tool-groups.js.map +1 -0
- package/dist/tool-result.d.ts +26 -0
- package/dist/tool-result.d.ts.map +1 -0
- package/dist/tool-result.js +103 -0
- package/dist/tool-result.js.map +1 -0
- package/dist/vision.d.ts +1 -1
- package/dist/vision.d.ts.map +1 -1
- package/dist/vision.js +24 -3
- package/dist/vision.js.map +1 -1
- package/package.json +18 -12
- package/preview.png +0 -0
- package/bin/darwin-arm64/.version +0 -2
- package/bin/darwin-arm64/CuaDriver.app/Contents/CodeResources +0 -0
- package/bin/darwin-arm64/CuaDriver.app/Contents/Info.plist +0 -32
- package/bin/darwin-arm64/CuaDriver.app/Contents/MacOS/cua-driver +0 -0
- package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/README.md +0 -140
- package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/RECORDING.md +0 -113
- package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/SKILL.md +0 -887
- package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/TESTS.md +0 -232
- package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/WEB_APPS.md +0 -471
- package/bin/darwin-arm64/CuaDriver.app/Contents/_CodeSignature/CodeResources +0 -172
- package/bin/darwin-x64/.version +0 -2
- package/bin/darwin-x64/CuaDriver.app/Contents/CodeResources +0 -0
- package/bin/darwin-x64/CuaDriver.app/Contents/Info.plist +0 -32
- package/bin/darwin-x64/CuaDriver.app/Contents/MacOS/cua-driver +0 -0
- package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/README.md +0 -140
- package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/RECORDING.md +0 -113
- package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/SKILL.md +0 -887
- package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/TESTS.md +0 -232
- package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/WEB_APPS.md +0 -471
- package/bin/darwin-x64/CuaDriver.app/Contents/_CodeSignature/CodeResources +0 -172
- package/bin/linux-x64/.version +0 -2
- package/bin/linux-x64/cua-driver +0 -0
- package/bin/win32-arm64/.version +0 -2
- package/bin/win32-arm64/cua-driver-uia.exe +0 -0
- package/bin/win32-arm64/cua-driver.exe +0 -0
- package/bin/win32-x64/.version +0 -2
- package/bin/win32-x64/cua-driver-uia.exe +0 -0
- package/bin/win32-x64/cua-driver.exe +0 -0
- package/scripts/postinstall.js +0 -29
package/README.md
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
# @amaster.ai/pi-computer-use
|
|
2
2
|
|
|
3
|
-
pi-
|
|
3
|
+

|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Cross-platform computer-use tools for Pi desktop automation. The extension exposes a native MCP tool surface with a `computer_use_` prefix. The bundled runtime comes from the official [Cua Driver Rust 0.28.2 release](https://github.com/trycua/cua/releases/tag/cua-driver-rs-v0.28.2).
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
7
|
+
## What it provides
|
|
8
|
+
|
|
9
|
+
- One Rust 0.28.2 driver line across macOS, Linux, and Windows
|
|
10
|
+
- 56 version-pinned upstream tools, including sessions, element tokens, accessibility + screenshot state, native input, browser tools, diagnostics, recording, and permission policy support
|
|
11
|
+
- Deferred tool activation: only the core toolset is active by default; extra groups are activated on demand via `computer_use_tools` or `/computer-use-tools`
|
|
12
|
+
- Full MCP text, image, and `structuredContent` forwarding
|
|
13
|
+
- Owned daemon + MCP proxy lifecycle with session-owned reconnect and per-call cancellation
|
|
14
|
+
- A non-prompting Linux/Windows permission probe on session start
|
|
15
|
+
- Once-per-session app-launch approval and confirmation for high-risk operations
|
|
16
|
+
- Bounded text and structured results before they enter Pi's context
|
|
17
|
+
- Optional secondary vision analysis through a configured Pi model
|
|
18
|
+
|
|
19
|
+
`get_window_state` is the primary perception tool. Cua Driver 0.28 returns the accessibility tree, structured elements with `element_token`, and a screenshot in one response. The standalone `screenshot` tool no longer exists.
|
|
14
20
|
|
|
15
21
|
## Install
|
|
16
22
|
|
|
@@ -18,34 +24,56 @@ pi-coding-agent extension that wraps [cua-driver-rs](https://github.com/trycua/c
|
|
|
18
24
|
bun add @amaster.ai/pi-computer-use
|
|
19
25
|
```
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
The package selects one signed/precompiled platform runtime through npm `optionalDependencies`. Installation does not download from GitHub, and no separate Cua Driver installation is required. Offline mirrors must include `@amaster.ai/pi-computer-use` and the matching `@amaster.ai/pi-computer-use-cua-driver-*` package.
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
Upgrading from Cua Driver 0.9 is a deliberate public-tool migration: upstream removed `set_agent_cursor_style` and replaced it with `set_agent_cursor_theme`. The new tool selects an installed `theme_id`; the old custom color/image parameters have no 0.28 equivalent.
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
## Configuration
|
|
26
32
|
|
|
27
|
-
Configure
|
|
33
|
+
Configure `.pi/settings.json` or `~/.pi/agent/settings.json`:
|
|
34
|
+
|
|
35
|
+
Project settings are loaded only after project trust is accepted. `${ENV_VAR}` interpolation is supported in user and agent settings, but not in project settings.
|
|
28
36
|
|
|
29
37
|
```json
|
|
30
38
|
{
|
|
31
39
|
"pi-computer-use": {
|
|
32
|
-
"mode": "bundled"
|
|
40
|
+
"mode": "bundled",
|
|
41
|
+
"confirmAppLaunch": true,
|
|
42
|
+
"confirmDangerousActions": true,
|
|
43
|
+
"toolProfile": "core"
|
|
33
44
|
}
|
|
34
45
|
}
|
|
35
46
|
```
|
|
36
47
|
|
|
37
|
-
## Configuration
|
|
38
|
-
|
|
39
48
|
| Option | Type | Default | Description |
|
|
40
|
-
|
|
41
|
-
| `mode` | `
|
|
42
|
-
| `binaryPath` | `string` | — | Custom
|
|
43
|
-
| `extraArgs` | `string[]` | — |
|
|
44
|
-
| `
|
|
49
|
+
| --- | --- | --- | --- |
|
|
50
|
+
| `mode` | `"bundled" \| "path"` | `"bundled"` | Use the packaged 0.28.2 driver or a compatible custom binary |
|
|
51
|
+
| `binaryPath` | `string` | — | Custom driver path when `mode` is `"path"` |
|
|
52
|
+
| `extraArgs` | `string[]` | — | Additional arguments appended to `cua-driver mcp` |
|
|
53
|
+
| `confirmAppLaunch` | `boolean` | `true` | Ask once per app target before `launch_app` |
|
|
54
|
+
| `confirmDangerousActions` | `boolean` | `true` | Confirm high-risk tools such as `kill_app` and `replay_trajectory`; recording always requires confirmation |
|
|
55
|
+
| `toolProfile` | `"core" \| "full"` | `"core"` | `"core"` activates only the everyday toolset at session start; `"full"` activates all 56 driver tools |
|
|
56
|
+
| `visionModel` | `{ provider, model }` | — | Register `computer_use_analyze_screenshot` |
|
|
57
|
+
|
|
58
|
+
In non-interactive modes, confirmation-required tools return an error unless the corresponding confirmation setting is explicitly disabled.
|
|
59
|
+
|
|
60
|
+
### Tool groups
|
|
61
|
+
|
|
62
|
+
With the default `core` profile, only everyday tools are visible to the model (`list_apps`, `launch_app`, `get_window_state`, `verify_state`, the click/type/scroll family, and `zoom`). The remaining driver tools stay registered but inactive, so they cost no prompt context. The model activates a group itself by calling `computer_use_tools` (without arguments it lists the groups); users can do the same with `/computer-use-tools <group>`:
|
|
45
63
|
|
|
46
|
-
|
|
64
|
+
| Group | Tools |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| `browser` | CDP browser automation: `browser_prepare`, `browser_navigate`, `browser_click`, `browser_type`, `browser_dialog`, `browser_set_input_files`, `browser_download`, `browser_pointer`, `get_browser_state`, `page` |
|
|
67
|
+
| `recording` | `start_recording`, `stop_recording`, `get_recording_state`, `replay_trajectory`, `install_ffmpeg` |
|
|
68
|
+
| `session` | `start_session`, `escalate_session`, `get_session`, `get_session_state`, `list_sessions`, `end_session` |
|
|
69
|
+
| `cursor` | `move_cursor`, `set_agent_cursor_enabled`, `set_agent_cursor_motion`, `set_agent_cursor_theme`, `get_agent_cursor_state` |
|
|
70
|
+
| `window` | `list_windows`, `bring_to_front`, `set_window_frame`, `invoke_menu`, `kill_app` |
|
|
71
|
+
| `clipboard` | `clipboard_read`, `clipboard_write` |
|
|
72
|
+
| `diagnostics` | `check_permissions`, `health_report`, `get_config`, `set_config`, `check_for_update`, `get_desktop_state`, `get_screen_size`, `get_cursor_position`, `get_accessibility_tree` |
|
|
47
73
|
|
|
48
|
-
|
|
74
|
+
Activated groups stay active for the rest of the session; each new session starts from the configured profile again.
|
|
75
|
+
|
|
76
|
+
### Optional vision model
|
|
49
77
|
|
|
50
78
|
```json
|
|
51
79
|
{
|
|
@@ -58,77 +86,44 @@ Enable `computer_use_analyze_screenshot` by referencing a model already configur
|
|
|
58
86
|
}
|
|
59
87
|
```
|
|
60
88
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
## Exposed Tools (17 + 1 vision)
|
|
64
|
-
|
|
65
|
-
### Input
|
|
66
|
-
|
|
67
|
-
| Tool | Description |
|
|
68
|
-
|------|-------------|
|
|
69
|
-
| `computer_use_click` | Left-click via element_index or x/y coordinates |
|
|
70
|
-
| `computer_use_double_click` | Double-click at x/y or on an AX element |
|
|
71
|
-
| `computer_use_right_click` | Right-click (context menu) |
|
|
72
|
-
| `computer_use_type_text` | Insert text via AX or CGEvent fallback |
|
|
73
|
-
| `computer_use_press_key` | Press and release a single key |
|
|
74
|
-
| `computer_use_hotkey` | Press a key combination (e.g. Cmd+C) |
|
|
75
|
-
| `computer_use_scroll` | Scroll by line or page in a direction |
|
|
76
|
-
| `computer_use_drag` | Press-drag-release gesture between two points |
|
|
77
|
-
| `computer_use_set_value` | Set value on UI elements (popups, sliders, steppers) |
|
|
78
|
-
|
|
79
|
-
### Query
|
|
80
|
-
|
|
81
|
-
| Tool | Description |
|
|
82
|
-
|------|-------------|
|
|
83
|
-
| `computer_use_get_screen_size` | Get display dimensions and scale factor |
|
|
84
|
-
| `computer_use_get_cursor_position` | Get current mouse cursor position |
|
|
85
|
-
| `computer_use_get_accessibility_tree` | Lightweight desktop snapshot (apps, windows, bounds) |
|
|
86
|
-
| `computer_use_get_window_state` | Full AX tree of a window with actionable element indices |
|
|
87
|
-
| `computer_use_list_windows` | List all top-level windows with bounds and z-order |
|
|
88
|
-
| `computer_use_list_apps` | List running and installed apps with state flags |
|
|
89
|
-
|
|
90
|
-
### App Lifecycle
|
|
91
|
-
|
|
92
|
-
| Tool | Description |
|
|
93
|
-
|------|-------------|
|
|
94
|
-
| `computer_use_launch_app` | Launch an app in the background without focus steal |
|
|
95
|
-
| `computer_use_kill_app` | Force-terminate a process by pid |
|
|
96
|
-
|
|
97
|
-
### Vision (requires `visionModel` config)
|
|
89
|
+
`computer_use_analyze_screenshot` requires both `pid` and `window_id`. It calls `get_window_state`, reuses the returned image, and invokes the configured model. Use it only when the primary model cannot resolve visual ambiguity.
|
|
98
90
|
|
|
99
|
-
|
|
100
|
-
|------|-------------|
|
|
101
|
-
| `computer_use_analyze_screenshot` | Take a screenshot and analyze it with a vision model |
|
|
91
|
+
## Runtime and permissions
|
|
102
92
|
|
|
103
|
-
|
|
93
|
+
On macOS, `session_start` registers the generated 0.28.2 manifest without starting the driver. The signed app and MCP proxy start lazily on the first computer-use tool call, which requests any missing permissions through `check_permissions({ prompt: true })`. Existing grants do not raise another system dialog. The requested tool still runs and reports its own capability or permission error. Linux and Windows keep eager startup: they discover the exact live `tools/list` surface and call `check_permissions({ prompt: false })`. If discovery fails, the extension registers `computer_use_connect` (and `/computer-use-connect`) so a later retry can install the exact live platform contract without advertising another OS's schemas.
|
|
104
94
|
|
|
105
|
-
|
|
95
|
+
Driver startup, reconnect, and the first macOS permission probe are session-owned. Cancelling a tool stops only that caller's wait or MCP request; session shutdown aborts the shared work. macOS and Linux also use a transient pipe-backed lease to stop the owned daemon after an abrupt host exit; no persistent service or system scheduler is installed.
|
|
106
96
|
|
|
107
|
-
|
|
97
|
+
- **Bundled macOS:** launches the signed `CuaDriver.app` through LaunchServices,
|
|
98
|
+
so Accessibility and Screen Recording grants belong to `com.trycua.driver`.
|
|
99
|
+
- **Custom macOS binary:** uses Cua Driver embedded mode and inherits the host
|
|
100
|
+
application's TCC responsibility chain.
|
|
101
|
+
- **Linux/Windows:** starts an extension-owned daemon in the interactive user
|
|
102
|
+
session and tears it down on session shutdown.
|
|
108
103
|
|
|
109
|
-
|
|
104
|
+
## Supported targets
|
|
110
105
|
|
|
111
|
-
| Platform |
|
|
112
|
-
|
|
113
|
-
| macOS
|
|
114
|
-
|
|
|
115
|
-
| Linux |
|
|
106
|
+
| Platform | Runtime package |
|
|
107
|
+
| --- | --- |
|
|
108
|
+
| macOS ARM64 / x64 | `@amaster.ai/pi-computer-use-cua-driver-darwin-universal` |
|
|
109
|
+
| Linux x64 | `@amaster.ai/pi-computer-use-cua-driver-linux-x64` |
|
|
110
|
+
| Linux ARM64 | `@amaster.ai/pi-computer-use-cua-driver-linux-arm64` |
|
|
111
|
+
| Windows x64 | `@amaster.ai/pi-computer-use-cua-driver-win32-x64` |
|
|
112
|
+
| Windows ARM64 | `@amaster.ai/pi-computer-use-cua-driver-win32-arm64` |
|
|
116
113
|
|
|
117
|
-
|
|
118
|
-
1. User is notified with a platform-appropriate warning
|
|
119
|
-
2. Tools are still registered using a built-in fallback schema
|
|
120
|
-
3. On each tool call, lazy reconnect is attempted; if it still fails, a friendly error with permission instructions is returned
|
|
114
|
+
## Canonical workflow
|
|
121
115
|
|
|
122
|
-
|
|
116
|
+
1. `computer_use_launch_app` or `computer_use_list_apps`
|
|
117
|
+
2. `computer_use_get_window_state`
|
|
118
|
+
3. Act using `element_token`/`element_index`, falling back to pixels for
|
|
119
|
+
custom-drawn surfaces
|
|
120
|
+
4. Re-run `computer_use_get_window_state` and verify the change
|
|
121
|
+
5. When the task needs more than the core toolset (browser automation,
|
|
122
|
+
recording, escalated sessions, ...), call `computer_use_tools` with the
|
|
123
|
+
matching group first
|
|
123
124
|
|
|
124
|
-
|
|
125
|
-
|----------|--------|
|
|
126
|
-
| macOS ARM64 | `bin/darwin-arm64/cua-driver` |
|
|
127
|
-
| macOS x64 | `bin/darwin-x64/cua-driver` |
|
|
128
|
-
| Linux x64 | `bin/linux-x64/cua-driver` |
|
|
129
|
-
| Windows x64 | `bin/win32-x64/cua-driver.exe` |
|
|
130
|
-
| Windows ARM64 | `bin/win32-arm64/cua-driver.exe` |
|
|
125
|
+
Linux and Windows tool descriptions and schemas come from the exact live driver. macOS uses the generated manifest for the bundled driver release.
|
|
131
126
|
|
|
132
127
|
## License
|
|
133
128
|
|
|
134
|
-
Apache-2.0
|
|
129
|
+
Apache-2.0 for this extension package. Bundled Cua Driver assets retain the upstream MIT license and release metadata in each platform package.
|
package/dist/config.d.ts
CHANGED
|
@@ -12,6 +12,16 @@ export interface ComputerUseConfig {
|
|
|
12
12
|
extraArgs?: string[];
|
|
13
13
|
/** Vision model for screenshot analysis */
|
|
14
14
|
visionModel?: VisionModelConfig;
|
|
15
|
+
/** Ask once per app target before launch_app. Default: true */
|
|
16
|
+
confirmAppLaunch?: boolean;
|
|
17
|
+
/** Confirm high-risk tools such as kill_app and replay_trajectory. Default: true */
|
|
18
|
+
confirmDangerousActions?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Which driver tools are active at session start: 'core' activates only the
|
|
21
|
+
* everyday toolset (extra groups via the computer_use_tools tool or the
|
|
22
|
+
* /computer-use-tools command), 'full' activates every tool. Default: 'core'
|
|
23
|
+
*/
|
|
24
|
+
toolProfile?: 'core' | 'full';
|
|
15
25
|
}
|
|
16
26
|
export declare function resolveConfig(config?: ComputerUseConfig): ComputerUseConfig;
|
|
17
27
|
export declare function loadConfigFromFile(options?: PiSettingsOptions): ComputerUseConfig;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oFAAoF;IACpF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AASD,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAE3E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAIjF"}
|
package/dist/config.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { loadPiSettings } from '@amaster.ai/pi-shared/settings';
|
|
2
|
-
import { getAgentDir } from '@earendil-works/pi-coding-agent';
|
|
3
2
|
const DEFAULTS = {
|
|
4
3
|
mode: 'bundled',
|
|
4
|
+
confirmAppLaunch: true,
|
|
5
|
+
confirmDangerousActions: true,
|
|
6
|
+
toolProfile: 'core',
|
|
5
7
|
};
|
|
6
8
|
export function resolveConfig(config) {
|
|
7
9
|
return { ...DEFAULTS, ...config };
|
|
8
10
|
}
|
|
9
11
|
export function loadConfigFromFile(options) {
|
|
10
12
|
return loadPiSettings('pi-computer-use', {
|
|
11
|
-
agentDir: getAgentDir(),
|
|
12
13
|
...options,
|
|
13
14
|
});
|
|
14
15
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA0B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA0B,MAAM,gCAAgC,CAAC;AA4BxF,MAAM,QAAQ,GAA+B;IAC3C,IAAI,EAAE,SAAS;IACf,gBAAgB,EAAE,IAAI;IACtB,uBAAuB,EAAE,IAAI;IAC7B,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,MAA0B;IACtD,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA2B;IAC5D,OAAO,cAAc,CAAoB,iBAAiB,EAAE;QAC1D,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC"}
|