@inquir/compute-cli 0.2.2 → 0.3.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 +133 -35
- package/dist/commands/apps.d.ts +42 -5
- package/dist/commands/apps.d.ts.map +1 -1
- package/dist/commands/apps.js +878 -42
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/deploy.d.ts +38 -0
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +165 -12
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +44 -13
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/projects.d.ts +2 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +98 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/api.d.ts +45 -4
- package/dist/utils/api.d.ts.map +1 -1
- package/dist/utils/api.js +66 -5
- package/dist/utils/api.js.map +1 -1
- package/dist/utils/apps-presentation.d.ts +10 -0
- package/dist/utils/apps-presentation.d.ts.map +1 -1
- package/dist/utils/apps-presentation.js +27 -0
- package/dist/utils/apps-presentation.js.map +1 -1
- package/dist/utils/args.d.ts.map +1 -1
- package/dist/utils/args.js +8 -1
- package/dist/utils/args.js.map +1 -1
- package/dist/utils/assets.d.ts +48 -1
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/assets.js +185 -7
- package/dist/utils/assets.js.map +1 -1
- package/dist/utils/auth.d.ts +9 -2
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +51 -11
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/context.d.ts.map +1 -1
- package/dist/utils/context.js +2 -0
- package/dist/utils/context.js.map +1 -1
- package/dist/utils/deploy-follow.d.ts +4 -3
- package/dist/utils/deploy-follow.d.ts.map +1 -1
- package/dist/utils/deploy-follow.js +76 -17
- package/dist/utils/deploy-follow.js.map +1 -1
- package/dist/utils/detect.d.ts +49 -1
- package/dist/utils/detect.d.ts.map +1 -1
- package/dist/utils/detect.js +153 -12
- package/dist/utils/detect.js.map +1 -1
- package/dist/utils/ensure-auth.d.ts.map +1 -1
- package/dist/utils/ensure-auth.js +6 -2
- package/dist/utils/ensure-auth.js.map +1 -1
- package/dist/utils/package-metadata.js +1 -1
- package/dist/utils/project-context.d.ts +17 -0
- package/dist/utils/project-context.d.ts.map +1 -0
- package/dist/utils/project-context.js +94 -0
- package/dist/utils/project-context.js.map +1 -0
- package/package.json +10 -7
- package/skill/SKILL.md +7 -0
package/README.md
CHANGED
|
@@ -64,10 +64,24 @@ Other login modes:
|
|
|
64
64
|
```bash
|
|
65
65
|
inquir login --browserless # print the URL + code instead of opening a browser
|
|
66
66
|
inquir login --token <pat> # non-interactive (CI): use a PAT created in the dashboard
|
|
67
|
-
inquir login --name "my CI" # label the device/token shown in the dashboard
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
inquir login --name "my CI" # label the device/token shown in the dashboard
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Login stores the API URL together with the token. To keep credentials for another
|
|
71
|
+
API separately, use a named environment:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
inquir login --env staging --api-url https://staging.example.com --token <pat>
|
|
75
|
+
inquir whoami --env staging
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Changing a login's API or token clears its cached identity and workspace until
|
|
79
|
+
membership discovery succeeds. A previous workspace on the same API is restored
|
|
80
|
+
only if the new token can still access it. If discovery is temporarily unavailable,
|
|
81
|
+
the token remains saved and subsequent commands do not reuse the previous
|
|
82
|
+
account's stored workspace.
|
|
83
|
+
|
|
84
|
+
Create and revoke PATs from the dashboard under **API Keys → Personal Access
|
|
71
85
|
Tokens**. To sign out and remove the stored token: `inquir logout`.
|
|
72
86
|
|
|
73
87
|
> A PAT can deploy to **any workspace you belong to**. A workspace-scoped **API
|
|
@@ -92,7 +106,39 @@ inquir whoami --workspace acme-prod
|
|
|
92
106
|
```
|
|
93
107
|
|
|
94
108
|
Under the hood, user-scoped credentials send an `X-Inquir-Workspace` header; the
|
|
95
|
-
server verifies your membership before honoring it.
|
|
109
|
+
server verifies your membership before honoring it.
|
|
110
|
+
|
|
111
|
+
## Application projects
|
|
112
|
+
|
|
113
|
+
Projects group long-lived container applications inside a workspace: web services,
|
|
114
|
+
APIs, databases, and workers. Serverless functions are managed separately and cannot
|
|
115
|
+
be added to these projects. A new application creates a project named after itself
|
|
116
|
+
unless you select an existing project:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
inquir projects list
|
|
120
|
+
inquir projects create shop
|
|
121
|
+
inquir projects use shop
|
|
122
|
+
inquir apps create api --port 3000
|
|
123
|
+
inquir apps create db --template postgres --project shop
|
|
124
|
+
inquir projects add shop existing-app
|
|
125
|
+
inquir projects current
|
|
126
|
+
inquir projects use --clear
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
`projects use` saves the selection for the current directory, or the nearest
|
|
130
|
+
`inquir.config.json` root. Use `--cwd <path>` to select another directory. The
|
|
131
|
+
selection is kept locally under `~/.inquir/project-contexts` and isolated by API,
|
|
132
|
+
the actual workspace, and signed-in user (or API key). Switching workspace or
|
|
133
|
+
account therefore cannot silently reuse another context's project.
|
|
134
|
+
|
|
135
|
+
`apps create --project <id|slug>` overrides the selection for one command.
|
|
136
|
+
`projects use --clear` returns to automatic project creation. Selecting or adding
|
|
137
|
+
to a project accepts its ID or slug; adding an application accepts its ID or name.
|
|
138
|
+
All project commands support `--json`. Deploying an existing container application
|
|
139
|
+
with `apps deploy` keeps its project membership; use `projects add` to file an
|
|
140
|
+
existing application. This selection does not change the serverless `inquir deploy`
|
|
141
|
+
workflow or local source/configuration project discovery.
|
|
96
142
|
|
|
97
143
|
## Deploy a function (remote)
|
|
98
144
|
|
|
@@ -158,13 +204,13 @@ runtime adapter involved.
|
|
|
158
204
|
- `inquir apps deploy <app> [--image <ref>]` - start a release and wait until it is healthy. Without `--image` the current directory (or `--dir`) is built from its Dockerfile first; `--build <id>` releases an existing build.
|
|
159
205
|
- `inquir apps build <app> [--dir <path>] [--dockerfile <f>] [--context <dir>] [--build-arg K=V]` - build an image from source without releasing it.
|
|
160
206
|
- `inquir apps builds <app>` - build history (`--cancel <buildId>` drops a queued build).
|
|
161
|
-
- `inquir apps status <app>` - endpoints, hostnames and recent releases.
|
|
207
|
+
- `inquir apps status <app>` - endpoints (public and private), hostnames and recent releases. The `private:` lines are what another app in the workspace dials (`{slug}.apps.internal`, port per TCP service); they appear once the platform has verified the route.
|
|
162
208
|
- `inquir apps logs <app|release|build> [--tail <n>]` - stream container (or build) logs.
|
|
163
209
|
- `inquir apps promote <release>` - send production traffic to a release (needs a login, not an API key).
|
|
164
210
|
- `inquir apps rollback <app>` - return production to the previous release.
|
|
165
211
|
- `inquir apps stop <release>` - stop any release that is not serving production.
|
|
166
212
|
- `inquir apps exec <app> -- <command>` - run a command inside the container (owner/admin login only — it can read every secret).
|
|
167
|
-
- `inquir apps update <app> [--set K=V] [--port …] [--egress none|full] …` - change settings; applies to the next release.
|
|
213
|
+
- `inquir apps update <app> [--set K=V] [--port …] [--egress none|full] [--ingress private|public] …` - change settings; applies to the next release. `--ingress public` creates the generated public domain, `--ingress private` removes it (the private address is unaffected). New apps are private unless created with `--ingress public`.
|
|
168
214
|
- `inquir apps domain <app> [hostname] [--verify|--remove]` - bind a custom hostname; publish the printed TXT record and point DNS at the platform, then `--verify`.
|
|
169
215
|
- `inquir apps delete <app> --yes` - archive an application (stops every release, unbinds every hostname).
|
|
170
216
|
|
|
@@ -193,6 +239,26 @@ TCP port is reachable by anyone who can reach the host: the platform
|
|
|
193
239
|
terminates no TLS and checks no credentials on raw TCP, so the service must
|
|
194
240
|
authenticate its own clients.
|
|
195
241
|
|
|
242
|
+
**Databases**
|
|
243
|
+
|
|
244
|
+
- `inquir apps create <name> --template postgres|redis` - create a database: image, persistent volume, pinned public TCP port, generated password and its first release, in one command.
|
|
245
|
+
- `inquir apps connection-url <db>` - print the live connection URL, credentials included (it lands in your shell history).
|
|
246
|
+
- `inquir apps connect <db> <app>` - write that URL into another application's env as `DATABASE_URL` / `REDIS_URL` without it passing through your terminal; it applies on that application's next release.
|
|
247
|
+
- `inquir apps backups <app> [list|create|restore <id>|delete <id>]` - volume snapshots. `restore` **overwrites the volume** with the snapshot and stops the application while it runs, so it asks for confirmation — pass `--yes` in a script.
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
inquir apps create mydb --template postgres
|
|
251
|
+
inquir apps connect mydb web # web gets DATABASE_URL on its next release
|
|
252
|
+
inquir apps backups mydb create # snapshot every volume, wait for it to settle
|
|
253
|
+
inquir apps backups mydb restore 3f9c1a2b --yes
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
An application that declares a volume deploys by stopping its container before
|
|
257
|
+
starting the new one, so two containers never write the same data — expect a
|
|
258
|
+
short outage on every deploy. Backups are crash-consistent (the container is
|
|
259
|
+
paused while it is copied) and need an artifact store configured on the
|
|
260
|
+
deployment; without one the backup commands report that they are unavailable.
|
|
261
|
+
|
|
196
262
|
**Staying up to date**
|
|
197
263
|
|
|
198
264
|
The CLI keeps itself in step with the platform. On start it checks — at most
|
|
@@ -328,10 +394,23 @@ wins):
|
|
|
328
394
|
- `INQUIR_ENV` — pick a named environment
|
|
329
395
|
3. Selected environment in the config file
|
|
330
396
|
4. Project link — `workspace` in the local `inquir.config.json` (set by `inquir use --local`); applies to the workspace only, below flags/env
|
|
331
|
-
5. Top-level config file values
|
|
332
|
-
6. Default `apiUrl` of `https://api.inquir.org` (override with env/config for local dev)
|
|
333
|
-
|
|
334
|
-
|
|
397
|
+
5. Top-level config file values (credentials and workspace only when the named environment uses the same API)
|
|
398
|
+
6. Default `apiUrl` of `https://api.inquir.org` (override with env/config for local dev)
|
|
399
|
+
|
|
400
|
+
A named environment with its own different API does not inherit the default
|
|
401
|
+
token, API key, cached identity, or workspace. Partial profiles using the same API
|
|
402
|
+
can still inherit defaults. Explicit flags and environment variables keep the
|
|
403
|
+
precedence above. An unknown environment name fails before a remote command;
|
|
404
|
+
`inquir login --env <name>` can create it.
|
|
405
|
+
|
|
406
|
+
When login changes the default API, existing named profiles that inherited that
|
|
407
|
+
API and contain credentials, a workspace, or cached identity retain their previous
|
|
408
|
+
API binding. Their stored credentials are preserved. A profile that previously
|
|
409
|
+
inherited its credentials may need its own login after this change. Empty profiles
|
|
410
|
+
continue to inherit defaults. Changing a profile's API also removes its stored API
|
|
411
|
+
key, so logging out of the new PAT cannot reactivate a key from the previous API.
|
|
412
|
+
|
|
413
|
+
When both a `token` (PAT) and an `apiKey` are present, the PAT wins. The active
|
|
335
414
|
`workspaceId` is only applied to user-scoped credentials (PAT/session); for a
|
|
336
415
|
workspace-scoped API key it is ignored unless you pass `--workspace` explicitly.
|
|
337
416
|
|
|
@@ -376,35 +455,54 @@ failing check.
|
|
|
376
455
|
## Publishing to npm (maintainers)
|
|
377
456
|
|
|
378
457
|
The CLI (`@inquir/compute-cli`) depends on the SDK (`@inquir/compute`), so the
|
|
379
|
-
SDK must be published **first** at a version satisfying the CLI's dependency
|
|
380
|
-
range (`dependencies["@inquir/compute"]`,
|
|
458
|
+
SDK must be published **first** at a version satisfying the CLI's dependency
|
|
459
|
+
range (`dependencies["@inquir/compute"]`, `^0.3.0` for CLI 0.3.0). Set the lower
|
|
460
|
+
bound to the first SDK release containing every API the CLI imports. A workspace
|
|
461
|
+
build uses the local SDK and cannot prove that an older published SDK works.
|
|
462
|
+
|
|
463
|
+
New `inquir init` scaffolds inherit this SDK range and require Node.js 22+.
|
|
464
|
+
Existing `package.json` files are preserved; update their dependencies explicitly
|
|
465
|
+
when adopting a newer SDK.
|
|
381
466
|
|
|
382
467
|
Prerequisites:
|
|
383
468
|
|
|
384
469
|
- An npm account with publish access to the `@inquir` scope (create the org/scope on npmjs.com), then `npm login`.
|
|
385
470
|
- Both packages declare `"publishConfig": { "access": "public" }`, so scoped packages publish publicly.
|
|
386
|
-
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
#
|
|
398
|
-
|
|
399
|
-
npm
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
471
|
+
- Both packages build before packing or publishing from source. The SDK includes
|
|
472
|
+
`dist/`; the CLI includes `dist/` and its bundled `skill/`. npm also includes
|
|
473
|
+
package metadata and README files.
|
|
474
|
+
- Choose unused release versions, update the CLI's SDK dependency and the lockfile,
|
|
475
|
+
then run the SDK and CLI tests before preparing the release candidate.
|
|
476
|
+
|
|
477
|
+
Prepare the exact tarballs from the repo root:
|
|
478
|
+
|
|
479
|
+
```bash
|
|
480
|
+
# Cleans and builds the SDK first, then the CLI.
|
|
481
|
+
npm run build --workspace @inquir/compute-cli
|
|
482
|
+
# Reuse the verified build instead of rebuilding during packing.
|
|
483
|
+
npm pack --workspace @inquir/compute --ignore-scripts
|
|
484
|
+
npm pack --workspace @inquir/compute-cli --ignore-scripts
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
Install both tarballs into a temporary directory outside this repository. Check
|
|
488
|
+
`npm ls @inquir/compute`, `inquir --version`, `inquir --help`, project commands,
|
|
489
|
+
and a local TypeScript function run. Resolve packages from that installation,
|
|
490
|
+
without workspace links, so the smoke test exercises the files users receive.
|
|
491
|
+
|
|
492
|
+
Publish those tested tarballs in order (0.3.0 shown; use the chosen versions):
|
|
493
|
+
|
|
494
|
+
```bash
|
|
495
|
+
npm publish ./inquir-compute-0.3.0.tgz --access public
|
|
496
|
+
# Confirm this SDK version is available from the registry before publishing CLI.
|
|
497
|
+
npm view @inquir/compute@0.3.0 version
|
|
498
|
+
npm publish ./inquir-compute-cli-0.3.0.tgz --access public
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
After building, preview package contents without publishing with
|
|
502
|
+
`npm pack --dry-run --json --ignore-scripts --workspace @inquir/compute-cli`.
|
|
503
|
+
`--ignore-scripts` skips build hooks, so only use it after the explicit build.
|
|
504
|
+
The installed command is `inquir`, from `dist/index.js` with its Node shebang.
|
|
505
|
+
After publishing, users can install it with:
|
|
408
506
|
|
|
409
507
|
```bash
|
|
410
508
|
npm install -g @inquir/compute-cli@latest
|
package/dist/commands/apps.d.ts
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
|
-
import { type AppPortSpec, type AppRuntimeSpec, type Release } from '../utils/api.js';
|
|
1
|
+
import { type AppNetworkPolicy, type AppPortSpec, type AppRuntimeSpec, type AppScalingPolicy, type ApplicationDetail, type Release } from '../utils/api.js';
|
|
2
2
|
export declare function appsCommand(args: string[]): Promise<void>;
|
|
3
3
|
/**
|
|
4
|
-
* `--tcp name:port[:public][:hostPort]` —
|
|
5
|
-
*
|
|
4
|
+
* `--tcp name:port[:public][:hostPort]` — ordinary usage stops at `public` and
|
|
5
|
+
* lets the platform lease a stable endpoint port. The final numeric modifier
|
|
6
|
+
* remains an API/CLI compatibility escape hatch for an existing installation.
|
|
6
7
|
*/
|
|
7
8
|
export declare function parseTcpPortFlag(value: string): AppPortSpec;
|
|
8
9
|
export declare function parseSetFlags(values: string[]): Record<string, string>;
|
|
9
|
-
/**
|
|
10
|
-
export declare function
|
|
10
|
+
/** Parse a CLI duration such as `90`, `90s`, `15m`, `1h30m`, or `1.5m`. */
|
|
11
|
+
export declare function parseDurationSeconds(value: string): number;
|
|
12
|
+
/** Build the partial policy sent by `apps scale`; omitted values remain unchanged server-side. */
|
|
13
|
+
export declare function buildScalingPatchFromFlags(args: string[], positionalActivation?: string): Partial<AppScalingPolicy>;
|
|
14
|
+
type AppVolumeSpec = NonNullable<AppRuntimeSpec['volumes']>[number];
|
|
15
|
+
/** `--volume name:/absolute/container/path[:ro]`; host paths are never accepted. */
|
|
16
|
+
export declare function parseVolumeFlag(value: string): AppVolumeSpec;
|
|
17
|
+
/** Runtime flags patch the saved application runtime rather than replacing unrelated fields. */
|
|
18
|
+
export declare function buildRuntimeFromFlags(args: string[], baseRuntime?: AppRuntimeSpec): AppRuntimeSpec | undefined;
|
|
19
|
+
export declare function selectConnectionUrl(result: {
|
|
20
|
+
url?: string;
|
|
21
|
+
publicUrl?: string;
|
|
22
|
+
}, preference?: 'auto' | 'private' | 'public'): {
|
|
23
|
+
url: string;
|
|
24
|
+
visibility: 'private' | 'public';
|
|
25
|
+
};
|
|
11
26
|
/**
|
|
12
27
|
* Where a client can actually connect. Public endpoints first; a host-local
|
|
13
28
|
* port is still printed (marked as such) because on an installation with no
|
|
@@ -16,6 +31,28 @@ export declare function buildRuntimeFromFlags(args: string[]): AppRuntimeSpec |
|
|
|
16
31
|
export declare function releaseEndpointLines(release: Release, previewUrl?: string, options?: {
|
|
17
32
|
includeHostLocal?: boolean;
|
|
18
33
|
}): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Where same-workspace services reach this application. The server projects
|
|
36
|
+
* `privateDomain` only once the private route is verified end to end, so a
|
|
37
|
+
* missing domain on an installation with private networking means "still
|
|
38
|
+
* being reconciled", not "no such thing" — and that is worth a line too.
|
|
39
|
+
*/
|
|
40
|
+
export declare function privateEndpointLines(detail: Pick<ApplicationDetail, 'privateDomain' | 'privateBaseUrl'>, active: Pick<Release, 'ports'> | undefined, options?: {
|
|
41
|
+
privateNetworking?: boolean;
|
|
42
|
+
}): string[];
|
|
43
|
+
/**
|
|
44
|
+
* The networkPolicy patch for `--egress` / `--ingress`. The API requires
|
|
45
|
+
* egress inside networkPolicy, so a lone --ingress change carries the
|
|
46
|
+
* application's current egress along unchanged, and vice versa; with neither
|
|
47
|
+
* flag the policy is left alone (the server's defaults apply on create).
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildNetworkPolicyPatch(input: {
|
|
50
|
+
egress?: string;
|
|
51
|
+
ingress?: string;
|
|
52
|
+
current?: AppNetworkPolicy;
|
|
53
|
+
}): AppNetworkPolicy | undefined;
|
|
19
54
|
/** A build-sourced release is best named by its build; a pulled one by its ref. */
|
|
20
55
|
export declare function describeImage(release: Pick<Release, 'imageSource' | 'buildId' | 'imageRef' | 'imageDigest'>): string;
|
|
56
|
+
export declare function describeScalingPolicy(policy: AppScalingPolicy): string;
|
|
57
|
+
export {};
|
|
21
58
|
//# sourceMappingURL=apps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"AASA,OAAO,EAoCL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EAGtB,KAAK,OAAO,EAEb,MAAM,iBAAiB,CAAC;AAsDzB,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE/D;AA6ED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CA6B3D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUtE;AAKD,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgC1D;AAgCD,kGAAkG;AAClG,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EAAE,EACd,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAuD3B;AAED,KAAK,aAAa,GAAG,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAKpE,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CA2D5D;AAiCD,gGAAgG;AAChG,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,CAAC,EAAE,cAAc,GAC3B,cAAc,GAAG,SAAS,CAmD5B;AAubD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5C,UAAU,GAAE,MAAM,GAAG,SAAS,GAAG,QAAiB,GACjD;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,CAcnD;AA+TD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,MAAM,EAAE,CAwBV;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,gBAAgB,CAAC,EACnE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,OAAO,GAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5C,MAAM,EAAE,CAaV;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B,GAAG,gBAAgB,GAAG,SAAS,CAe/B;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,MAAM,CAGpH;AAgCD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAMtE"}
|