@swmansion/argent 0.14.1-next.2 → 0.14.1-next.21
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 +70 -21
- package/bin/argent-android-devtools-0.1.0.apk +0 -0
- package/bin/darwin/ax-service +0 -0
- package/bin/darwin/simulator-server +0 -0
- package/bin/darwin/tvos-ax-service +0 -0
- package/bin/darwin/tvos-hid-daemon +0 -0
- package/bin/linux/simulator-server +0 -0
- package/bin/linux-arm64/simulator-server +0 -0
- package/dist/bundled-paths.d.ts +1 -0
- package/dist/bundled-paths.js +136 -5
- package/dist/bundled-paths.js.map +1 -1
- package/dist/cli-cmds.mjs +624 -156
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +9 -3
- package/dist/cli.js.map +1 -1
- package/dist/installer.mjs +3182 -1424
- package/dist/mcp-server.mjs +304 -95
- package/dist/tool-server.cjs +2669 -1225
- package/dylibs/libArgentInjectionBootstrap.dylib +0 -0
- package/dylibs/libKeyboardPatch.dylib +0 -0
- package/dylibs/libNativeDevtoolsIos.dylib +0 -0
- package/dylibs/tvos/libArgentInjectionBootstrap.dylib +0 -0
- package/dylibs/tvos/libKeyboardPatch.dylib +0 -0
- package/dylibs/tvos/libNativeDevtoolsIos.dylib +0 -0
- package/package.json +1 -1
- package/scripts/postinstall.cjs +54 -8
package/README.md
CHANGED
|
@@ -9,18 +9,32 @@
|
|
|
9
9
|
[](https://swm-delivery.com/www/delivery/ck-slug.php?zoneid=zone-gh-argent-2&n=1)
|
|
10
10
|
[](https://swm-delivery.com/www/delivery/ck-slug.php?zoneid=zone-gh-argent-3&n=1)
|
|
11
11
|
|
|
12
|
-
**[Argent](https://argent.swmansion.com)** is an **agentic toolkit** that gives your AI assistant direct access to iOS Simulators and Android
|
|
12
|
+
**[Argent](https://argent.swmansion.com)** is an **agentic toolkit** that gives your AI assistant direct access to iOS Simulators, Android emulators and physical devices, TVs (Apple TV, Android TV, Fire TV) and Electron/Chromium desktop and web apps. Ask it to tap a button, run a profiler or reproduce an issue manually - all from within your CLI, without switching context.
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
15
|
npx @swmansion/argent init
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
## Supported platforms
|
|
19
|
+
|
|
20
|
+
Argent drives a growing set of targets through a single toolkit, each with the right interaction model - touch, remote or mouse:
|
|
21
|
+
|
|
22
|
+
| Platform | Targets | Interaction |
|
|
23
|
+
| ----------------- | ----------------------------------------------------------------------- | ---------------- |
|
|
24
|
+
| **iOS** | Simulators | Touch / gesture |
|
|
25
|
+
| **Android** | Emulators (AVDs) and physical devices over adb | Touch / gesture |
|
|
26
|
+
| **TV** | Apple TV (tvOS), Android TV / Google TV, Amazon Fire TV (Vega) | D-pad / remote |
|
|
27
|
+
| **Desktop & web** | Electron and Chromium apps (incl. React Native Web / Expo web) over CDP | Mouse / keyboard |
|
|
28
|
+
|
|
18
29
|
## Capabilities
|
|
19
30
|
|
|
20
|
-
- **Autonomous
|
|
21
|
-
- **UI interaction** - Give your agent full control toolkit - tapping, swiping, pinching, typing, gestures
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
31
|
+
- **Autonomous mobile, TV and desktop development** - Allow your agent to work with iOS, Android, TV and Electron/web apps on its own - let it build, open, interact with the app and debug it. Ask for reproducing issues, testing features manually, profiling your app and much more, without ever interrupting your work.
|
|
32
|
+
- **UI interaction** - Give your agent the full control toolkit - tapping, swiping, pinching, typing, gestures and hardware buttons on mobile; the directional remote on TV; mouse, scroll and drag on desktop/web. Let it navigate your app exactly as a user would, without lifting a finger.
|
|
33
|
+
- **Record & replay flows** - Capture a sequence of interactions once and let your agent replay it deterministically, so manual repros and smoke tests become repeatable.
|
|
34
|
+
- **Visual regression** - Diff two screenshots (or a saved baseline against a live capture) with OCR- and font-aware comparison to catch unintended UI changes.
|
|
35
|
+
- **Profiling with batteries included** - Argent can perform and analyze React Native (Hermes), React DevTools and native (Xcode Instruments / Android Perfetto) profiling sessions - down to fiber renders, CPU hotspots and cross-correlated commit-vs-hang reports. Get comprehensive summaries and ask to optimise your app where you find fit.
|
|
36
|
+
- **Debugging and diagnostics** - Let your agent inspect logs, capture network traffic (JS `fetch` and native), evaluate JS in the running app, walk the native UIKit and React component trees, and reproduce failing states - so you can jump straight to the fix.
|
|
37
|
+
- **Desktop & web control** - For Electron and Chromium apps your agent can drive tabs, read and write cookies and storage, walk the DOM and inspect network over the Chrome DevTools Protocol.
|
|
24
38
|
- **React Native out of the box** - Argent works with React Native apps natively, so your agent can build, launch, and iterate on your RN project the same way it would any native app - no extra setup required.
|
|
25
39
|
|
|
26
40
|
> **Tip:** Once installed, ask your assistant _"What can Argent do?"_ - it will walk you through all capabilities available.
|
|
@@ -37,8 +51,10 @@ npx @swmansion/argent init
|
|
|
37
51
|
#### Prerequisites
|
|
38
52
|
|
|
39
53
|
- **Node.js 20.11** or later
|
|
40
|
-
- For iOS: macOS with **Xcode** installed
|
|
41
|
-
- For Android: **Android SDK Platform Tools** (`adb`) on `PATH`, and the **Android Emulator** package if you want to boot AVDs from Argent. Create AVDs via Android Studio or `avdmanager`.
|
|
54
|
+
- For iOS / tvOS: macOS with **Xcode** installed (Apple TV uses tvOS simulators — Xcode downloads the tvOS runtime on demand)
|
|
55
|
+
- For Android / Android TV: **Android SDK Platform Tools** (`adb`) on `PATH`, and the **Android Emulator** package if you want to boot AVDs from Argent. Create AVDs via Android Studio or `avdmanager`.
|
|
56
|
+
- For Fire TV (Vega): the **Vega SDK** (`vega` CLI) on `PATH`
|
|
57
|
+
- For Electron / Chromium: nothing extra to control an already-running app - just launch it with `--remote-debugging-port`, or let Argent spawn your Electron app for you
|
|
42
58
|
|
|
43
59
|
##### Linux host: extra prerequisites for Android emulators
|
|
44
60
|
|
|
@@ -98,20 +114,53 @@ npm install -g @swmansion/argent
|
|
|
98
114
|
argent init
|
|
99
115
|
```
|
|
100
116
|
|
|
117
|
+
#### Share Argent with your team (committable install)
|
|
118
|
+
|
|
119
|
+
By default Argent installs **globally**. To version Argent _with your repo_ so every
|
|
120
|
+
teammate gets the same setup on `npm install` — no per-developer global install, no
|
|
121
|
+
`argent init` — choose the local mode:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npx @swmansion/argent init --local
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
This adds `@swmansion/argent` to your project's `devDependencies` and writes MCP
|
|
128
|
+
configs that launch the project-local copy (`node node_modules/@swmansion/argent/dist/cli.js mcp`).
|
|
129
|
+
Commit `package.json` + your lockfile, the generated MCP config (`.mcp.json`,
|
|
130
|
+
`.cursor/mcp.json`, …), `.argent/install.json`, and the skills/rules/agents files.
|
|
131
|
+
Teammates then just run `npm install`.
|
|
132
|
+
|
|
133
|
+
Pass `--global` to force the default mode in scripts; `--local` and `--global` are
|
|
134
|
+
mutually exclusive. A non-interactive (`--yes`) run defaults to global unless the
|
|
135
|
+
project already opted into local mode (a committed `.argent/install.json`, or
|
|
136
|
+
`@swmansion/argent` declared in the project's own `package.json`).
|
|
137
|
+
|
|
138
|
+
> In local mode the committed MCP config runs the project-local copy, so the bare
|
|
139
|
+
> `argent` command is **not** on teammates' `PATH`. Note that `npm install` builds
|
|
140
|
+
> Argent's native deps (`tree-sitter`) on each machine — prebuilt for macOS, Linux
|
|
141
|
+
> x64, and Windows x64; other targets (Linux arm64, Windows arm) compile from source
|
|
142
|
+
> and need a C/C++ toolchain.
|
|
143
|
+
|
|
101
144
|
## CLI Reference
|
|
102
145
|
|
|
103
|
-
| Command | Description
|
|
104
|
-
| ------------------ |
|
|
105
|
-
| `argent init` | Install
|
|
106
|
-
| `argent install` | Alias for `init` command
|
|
107
|
-
| `argent update` | Pull the latest version and refresh workspace configuration
|
|
108
|
-
| `argent remove` | Unregister the MCP server and uninstall the package
|
|
109
|
-
| `argent uninstall` | Alias for `remove` command
|
|
110
|
-
| `argent mcp` | Start MCP server instance, used internally by agent
|
|
111
|
-
| `argent
|
|
112
|
-
| `argent
|
|
113
|
-
| `argent
|
|
114
|
-
| `argent
|
|
146
|
+
| Command | Description |
|
|
147
|
+
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
148
|
+
| `argent init` | Install and configure MCP in the current workspace (`--global` default, `--local` for a committable devDependency) |
|
|
149
|
+
| `argent install` | Alias for `init` command |
|
|
150
|
+
| `argent update` | Pull the latest version and refresh workspace configuration (acts on the present install — both when a global install and a project devDependency coexist; `--global`/`--local` select explicitly) |
|
|
151
|
+
| `argent remove` | Unregister the MCP server and uninstall the package (`--global`/`--local` choose which install — and its configs — is removed; non-interactive runs never remove a coexisting global install) |
|
|
152
|
+
| `argent uninstall` | Alias for `remove` command |
|
|
153
|
+
| `argent mcp` | Start MCP server instance, used internally by agent |
|
|
154
|
+
| `argent tools` | List tools exposed by the tool-server (`describe <name>` for details) |
|
|
155
|
+
| `argent run` | Invoke a tool by name |
|
|
156
|
+
| `argent server` | Manage the shared tool-server: `start` / `status` / `stop` / `logs` |
|
|
157
|
+
| `argent lens` | Open Argent Lens bound to a fresh coding-agent session — Claude by default, `--agent` selects codex/gemini/opencode/cursor (macOS; behind the `argent-lens` flag — run `argent enable argent-lens` first) |
|
|
158
|
+
| `argent link` | Route client requests to a remote tool-server |
|
|
159
|
+
| `argent unlink` | Remove the persisted remote tool-server link |
|
|
160
|
+
| `argent enable` | Enable a predefined feature flag (`--scope project` for project-local) |
|
|
161
|
+
| `argent disable` | Disable a feature flag (`--scope project` for project-local) |
|
|
162
|
+
| `argent flags` | List available feature flags and their state |
|
|
163
|
+
| `argent telemetry` | Manage telemetry: `status` / `enable` / `disable` |
|
|
115
164
|
|
|
116
165
|
## Supported Editors
|
|
117
166
|
|
|
@@ -123,7 +172,7 @@ argent init
|
|
|
123
172
|
| Cursor | `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global) |
|
|
124
173
|
| VS Code | `.vscode/mcp.json` |
|
|
125
174
|
| Windsurf | `~/.codeium/windsurf/mcp_config.json` (global) |
|
|
126
|
-
| Zed | `.zed/settings.json`
|
|
175
|
+
| Zed | `.zed/settings.json` (project) or `~/.config/zed/settings.json` (global) |
|
|
127
176
|
| Gemini CLI | `.gemini/settings.json` |
|
|
128
177
|
| Codex CLI | `.codex/config.toml` (project) or `~/.codex/config.toml` (global) |
|
|
129
178
|
| Hermes | `~/.hermes/config.yaml` (global) |
|
|
@@ -132,7 +181,7 @@ argent init
|
|
|
132
181
|
|
|
133
182
|
## Privacy
|
|
134
183
|
|
|
135
|
-
Argent collects
|
|
184
|
+
Argent collects opt-out usage and diagnostic telemetry to help us prioritise features and fix what breaks.
|
|
136
185
|
|
|
137
186
|
You can opt out at any time:
|
|
138
187
|
|
|
Binary file
|
package/bin/darwin/ax-service
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/bundled-paths.d.ts
CHANGED
package/dist/bundled-paths.js
CHANGED
|
@@ -1,9 +1,140 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
1
2
|
import * as path from "node:path";
|
|
2
|
-
//
|
|
3
|
-
//
|
|
3
|
+
// Installed package version, read from the shipped package.json. Lets the
|
|
4
|
+
// launcher detect a stale tool-server after an in-place version bump (a local
|
|
5
|
+
// devDependency update rewrites tool-server.cjs at the same path) and respawn
|
|
6
|
+
// it — without relying on the postinstall script, which is frequently disabled
|
|
7
|
+
// (--ignore-scripts, pnpm onlyBuiltDependencies, Yarn PnP, locked-down CI).
|
|
8
|
+
function readPackageVersion() {
|
|
9
|
+
try {
|
|
10
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(import.meta.dirname, "..", "package.json"), "utf8"));
|
|
11
|
+
return pkg.version;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const PACKAGE_NAME = "@swmansion/argent";
|
|
18
|
+
// The project a local install belongs to: the nearest ancestor of cwd that
|
|
19
|
+
// DECLARES the package (any dependency field, matching the installer's
|
|
20
|
+
// readManifestDeclaration) or carries a committed .argent/install.json. Can
|
|
21
|
+
// sit BELOW the physical hoist root — npm workspaces hoist a member's
|
|
22
|
+
// devDependency, but update/uninstall must act on the declaring member.
|
|
23
|
+
function findDeclaringRoot(startDir) {
|
|
24
|
+
let dir = startDir;
|
|
25
|
+
for (;;) {
|
|
26
|
+
if (fs.existsSync(path.join(dir, ".argent", "install.json")))
|
|
27
|
+
return dir;
|
|
28
|
+
try {
|
|
29
|
+
const manifest = JSON.parse(fs.readFileSync(path.join(dir, "package.json"), "utf8"));
|
|
30
|
+
if (manifest.devDependencies?.[PACKAGE_NAME] ||
|
|
31
|
+
manifest.dependencies?.[PACKAGE_NAME] ||
|
|
32
|
+
manifest.optionalDependencies?.[PACKAGE_NAME]) {
|
|
33
|
+
return dir;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// no/unreadable manifest at this level — keep walking up
|
|
38
|
+
}
|
|
39
|
+
const parent = path.dirname(dir);
|
|
40
|
+
if (parent === dir)
|
|
41
|
+
return null;
|
|
42
|
+
dir = parent;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// The version-STABLE package dir: the conventional <dir>/node_modules/<pkg>
|
|
46
|
+
// symlink closest to cwd that resolves to the running package. Unlike
|
|
47
|
+
// import.meta's realpath — pnpm's version-pinned .pnpm store dir, pruned on a
|
|
48
|
+
// bump — this symlink survives an in-place update. In a pnpm WORKSPACE the
|
|
49
|
+
// symlink sits in the DECLARING member's node_modules, a level below the root
|
|
50
|
+
// where the .pnpm store lives, so scan every level from cwd up rather than
|
|
51
|
+
// only the level where the store matched. Only ever returns a path whose
|
|
52
|
+
// realpath equals the running package, so it can never point at a different
|
|
53
|
+
// install — just a different (stable) alias of the same real dir.
|
|
54
|
+
export function findStablePackageDir(startDir, packageRoot) {
|
|
55
|
+
let dir = startDir;
|
|
56
|
+
for (;;) {
|
|
57
|
+
const candidate = path.join(dir, "node_modules", PACKAGE_NAME);
|
|
58
|
+
try {
|
|
59
|
+
if (fs.realpathSync(candidate) === packageRoot)
|
|
60
|
+
return candidate;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// no symlink at this level — keep walking up
|
|
64
|
+
}
|
|
65
|
+
const parent = path.dirname(dir);
|
|
66
|
+
if (parent === dir)
|
|
67
|
+
return undefined;
|
|
68
|
+
dir = parent;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Install topology of this running package: a project's local devDependency
|
|
72
|
+
// (package root inside a node_modules found by walking up from cwd) or the
|
|
73
|
+
// global PATH install — and, for local, WHICH project. Classified at process
|
|
74
|
+
// start, the moment cwd is trustworthy (a committed local MCP command only
|
|
75
|
+
// resolves with cwd at the project root); the launcher forwards both as
|
|
76
|
+
// ARGENT_INSTALL_KIND / ARGENT_PROJECT_ROOT so update-argent doesn't re-infer
|
|
77
|
+
// them from the detached server's editor-chosen cwd.
|
|
78
|
+
function classifyInstall() {
|
|
79
|
+
let packageRoot;
|
|
80
|
+
let dir;
|
|
81
|
+
let cwd;
|
|
82
|
+
try {
|
|
83
|
+
packageRoot = fs.realpathSync(path.join(import.meta.dirname, ".."));
|
|
84
|
+
// cwd can throw (ENOENT) when the shell's directory was deleted — and this
|
|
85
|
+
// runs at module import, before any fatal handler is installed.
|
|
86
|
+
cwd = process.cwd();
|
|
87
|
+
dir = cwd;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return { kind: "global" };
|
|
91
|
+
}
|
|
92
|
+
for (;;) {
|
|
93
|
+
try {
|
|
94
|
+
const nmReal = fs.realpathSync(path.join(dir, "node_modules"));
|
|
95
|
+
if (packageRoot === nmReal || packageRoot.startsWith(nmReal + path.sep)) {
|
|
96
|
+
// Local install. Prefer the DECLARING root over this physical hoist
|
|
97
|
+
// root: in a hoisted workspace the declaring manifest sits at cwd
|
|
98
|
+
// (the member root) or an ancestor below `dir`. The version-stable
|
|
99
|
+
// package dir (used for runtime paths that must survive a pnpm store
|
|
100
|
+
// prune) is found by its own cwd-up scan — see findStablePackageDir.
|
|
101
|
+
return {
|
|
102
|
+
kind: "local",
|
|
103
|
+
projectRoot: findDeclaringRoot(cwd) ?? dir,
|
|
104
|
+
stablePackageDir: findStablePackageDir(cwd, packageRoot),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// no node_modules at this level — keep walking up
|
|
110
|
+
}
|
|
111
|
+
const parent = path.dirname(dir);
|
|
112
|
+
if (parent === dir)
|
|
113
|
+
break;
|
|
114
|
+
dir = parent;
|
|
115
|
+
}
|
|
116
|
+
// Yarn PnP local installs have no node_modules anywhere: the package runs
|
|
117
|
+
// from the project's .yarn dir (unplugged/cache). Falling through to
|
|
118
|
+
// "global" would make the agent-triggered update target a global install
|
|
119
|
+
// the user may not even have.
|
|
120
|
+
if (packageRoot.includes(`${path.sep}.yarn${path.sep}`)) {
|
|
121
|
+
const declRoot = findDeclaringRoot(cwd);
|
|
122
|
+
if (declRoot)
|
|
123
|
+
return { kind: "local", projectRoot: declRoot };
|
|
124
|
+
}
|
|
125
|
+
return { kind: "global" };
|
|
126
|
+
}
|
|
127
|
+
const classifiedInstall = classifyInstall();
|
|
128
|
+
// __dirname in ESM (compiled from TS) will be dist/. Bundle artifacts ship
|
|
129
|
+
// next to the compiled launcher; prefer the version-stable package dir when
|
|
130
|
+
// the classification found one (see classifyInstall).
|
|
131
|
+
const packageDir = classifiedInstall.stablePackageDir ?? path.join(import.meta.dirname, "..");
|
|
4
132
|
export const BUNDLED_RUNTIME_PATHS = {
|
|
5
|
-
bundlePath: path.join(
|
|
6
|
-
simulatorServerDir: path.join(
|
|
7
|
-
nativeDevtoolsDir: path.join(
|
|
133
|
+
bundlePath: path.join(packageDir, "dist", "tool-server.cjs"),
|
|
134
|
+
simulatorServerDir: path.join(packageDir, "bin"),
|
|
135
|
+
nativeDevtoolsDir: path.join(packageDir, "dylibs"),
|
|
136
|
+
version: readPackageVersion(),
|
|
137
|
+
installKind: classifiedInstall.kind,
|
|
138
|
+
installProjectRoot: classifiedInstall.projectRoot,
|
|
8
139
|
};
|
|
9
140
|
//# sourceMappingURL=bundled-paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundled-paths.js","sourceRoot":"","sources":["../src/bundled-paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,
|
|
1
|
+
{"version":3,"file":"bundled-paths.js","sourceRoot":"","sources":["../src/bundled-paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACtD,CAAC;QAC1B,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,2EAA2E;AAC3E,uEAAuE;AACvE,4EAA4E;AAC5E,sEAAsE;AACtE,wEAAwE;AACxE,SAAS,iBAAiB,CAAC,QAAgB;IACzC,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,SAAS,CAAC;QACR,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAIlF,CAAC;YACF,IACE,QAAQ,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC;gBACxC,QAAQ,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC;gBACrC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,EAC7C,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,sEAAsE;AACtE,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,yEAAyE;AACzE,4EAA4E;AAC5E,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,WAAmB;IACxE,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,SAAS,CAAC;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,WAAW;gBAAE,OAAO,SAAS,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,SAAS,CAAC;QACrC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,wEAAwE;AACxE,8EAA8E;AAC9E,qDAAqD;AACrD,SAAS,eAAe;IAKtB,IAAI,WAAmB,CAAC;IACxB,IAAI,GAAW,CAAC;IAChB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACpE,2EAA2E;QAC3E,gEAAgE;QAChE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACpB,GAAG,GAAG,GAAG,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IACD,SAAS,CAAC;QACR,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;YAC/D,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxE,oEAAoE;gBACpE,kEAAkE;gBAClE,mEAAmE;gBACnE,qEAAqE;gBACrE,qEAAqE;gBACrE,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,GAAG;oBAC1C,gBAAgB,EAAE,oBAAoB,CAAC,GAAG,EAAE,WAAW,CAAC;iBACzD,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,0EAA0E;IAC1E,qEAAqE;IACrE,yEAAyE;IACzE,8BAA8B;IAC9B,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,iBAAiB,GAAG,eAAe,EAAE,CAAC;AAE5C,2EAA2E;AAC3E,4EAA4E;AAC5E,sDAAsD;AACtD,MAAM,UAAU,GAAG,iBAAiB,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC;IAC5D,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;IAChD,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;IAClD,OAAO,EAAE,kBAAkB,EAAE;IAC7B,WAAW,EAAE,iBAAiB,CAAC,IAAI;IACnC,kBAAkB,EAAE,iBAAiB,CAAC,WAAW;CAClD,CAAC"}
|