orizu 0.5.22 → 0.5.24

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.
Files changed (144) hide show
  1. package/README.md +57 -21
  2. package/dist/child-output-tee.d.ts +48 -0
  3. package/dist/child-output-tee.d.ts.map +1 -0
  4. package/dist/child-output-tee.js +512 -0
  5. package/dist/cleanup.d.ts +6 -0
  6. package/dist/cleanup.d.ts.map +1 -0
  7. package/dist/cleanup.js +27 -0
  8. package/dist/cli-auth-browser-page.d.ts +2 -0
  9. package/dist/cli-auth-browser-page.d.ts.map +1 -0
  10. package/dist/cli-auth-browser-page.js +107 -0
  11. package/dist/github-setup.js +8 -8
  12. package/dist/headless-login.d.ts +17 -0
  13. package/dist/headless-login.d.ts.map +1 -0
  14. package/dist/headless-login.js +105 -0
  15. package/dist/help.d.ts.map +1 -1
  16. package/dist/help.js +32 -24
  17. package/dist/hosted-boot.js +3 -3
  18. package/dist/hosted-bootstrap.js +2 -2
  19. package/dist/hosted-commands.d.ts +15 -0
  20. package/dist/hosted-commands.d.ts.map +1 -0
  21. package/dist/hosted-commands.js +21 -0
  22. package/dist/hosted-environment.d.ts +3 -0
  23. package/dist/hosted-environment.d.ts.map +1 -0
  24. package/dist/hosted-environment.js +2 -0
  25. package/dist/hosted-gepa-cli.d.ts +14 -0
  26. package/dist/hosted-gepa-cli.d.ts.map +1 -0
  27. package/dist/hosted-gepa-cli.js +197 -0
  28. package/dist/hosted-gepa-numeric-values.d.ts +3 -0
  29. package/dist/hosted-gepa-numeric-values.d.ts.map +1 -0
  30. package/dist/hosted-gepa-numeric-values.js +49 -0
  31. package/dist/hosted-loop.d.ts +1 -1
  32. package/dist/hosted-loop.d.ts.map +1 -1
  33. package/dist/hosted-loop.js +2 -1
  34. package/dist/hosted-optimization-cli.d.ts +7 -0
  35. package/dist/hosted-optimization-cli.d.ts.map +1 -0
  36. package/dist/hosted-optimization-cli.js +218 -0
  37. package/dist/hosted-optimization-refusals.d.ts +88 -0
  38. package/dist/hosted-optimization-refusals.d.ts.map +1 -0
  39. package/dist/hosted-optimization-refusals.js +86 -0
  40. package/dist/hosted-optimization.d.ts +6 -0
  41. package/dist/hosted-optimization.d.ts.map +1 -0
  42. package/dist/hosted-optimization.js +436 -0
  43. package/dist/hosted-provider-settings.d.ts +6 -0
  44. package/dist/hosted-provider-settings.d.ts.map +1 -0
  45. package/dist/hosted-provider-settings.js +78 -0
  46. package/dist/hosted-session-cli.d.ts.map +1 -1
  47. package/dist/hosted-session-cli.js +11 -1
  48. package/dist/hosted-skill-staging.d.ts +9 -9
  49. package/dist/hosted-skill-staging.d.ts.map +1 -1
  50. package/dist/hosted-skill-staging.js +13 -10
  51. package/dist/http.d.ts +1 -0
  52. package/dist/http.d.ts.map +1 -1
  53. package/dist/http.js +7 -0
  54. package/dist/index.d.ts +4 -4
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +387 -384
  57. package/dist/optimizations-promote-cli.d.ts +3 -0
  58. package/dist/optimizations-promote-cli.d.ts.map +1 -1
  59. package/dist/optimizations-promote-cli.js +75 -7
  60. package/dist/report-comments-cli.d.ts +1 -0
  61. package/dist/report-comments-cli.d.ts.map +1 -1
  62. package/dist/report-comments-cli.js +70 -4
  63. package/dist/runner-dir-verify.d.ts +5 -0
  64. package/dist/runner-dir-verify.d.ts.map +1 -1
  65. package/dist/runner-dir-verify.js +44 -15
  66. package/dist/runner-version-materialization.d.ts +6 -0
  67. package/dist/runner-version-materialization.d.ts.map +1 -0
  68. package/dist/runner-version-materialization.js +64 -0
  69. package/dist/setup-onboarding.d.ts +16 -0
  70. package/dist/setup-onboarding.d.ts.map +1 -0
  71. package/dist/setup-onboarding.js +59 -0
  72. package/dist/skill-installer.d.ts +3 -3
  73. package/dist/skill-installer.d.ts.map +1 -1
  74. package/dist/skill-installer.js +39 -3
  75. package/dist/skilled-proposer-bake-report.d.ts +2 -0
  76. package/dist/skilled-proposer-bake-report.d.ts.map +1 -0
  77. package/dist/skilled-proposer-bake-report.js +1 -0
  78. package/dist/skilled-proposer-launch.d.ts +27 -1
  79. package/dist/skilled-proposer-launch.d.ts.map +1 -1
  80. package/dist/skilled-proposer-launch.js +66 -11
  81. package/dist/skilled-proposer-wire.d.ts +2 -0
  82. package/dist/skilled-proposer-wire.d.ts.map +1 -0
  83. package/dist/skilled-proposer-wire.js +25 -0
  84. package/dist/workspace.d.ts +14 -0
  85. package/dist/workspace.d.ts.map +1 -1
  86. package/dist/workspace.js +63 -4
  87. package/package.json +1 -1
  88. package/scripts/vendor-gepa-python.mjs +81 -12
  89. package/scripts/vendor-orizu-skill.mjs +3 -3
  90. package/src/child-output-tee.ts +587 -0
  91. package/src/cleanup.ts +37 -0
  92. package/src/cli-auth-browser-page.ts +108 -0
  93. package/src/github-setup.ts +8 -8
  94. package/src/headless-login.ts +178 -0
  95. package/src/help.ts +32 -24
  96. package/src/hosted-boot.ts +3 -3
  97. package/src/hosted-bootstrap.ts +2 -2
  98. package/src/hosted-commands.ts +20 -0
  99. package/src/hosted-environment.ts +2 -0
  100. package/src/hosted-gepa-cli.ts +215 -0
  101. package/src/hosted-gepa-numeric-values.ts +60 -0
  102. package/src/hosted-loop.ts +2 -1
  103. package/src/hosted-optimization-cli.ts +215 -0
  104. package/src/hosted-optimization-refusals.ts +101 -0
  105. package/src/hosted-optimization.ts +483 -0
  106. package/src/hosted-provider-settings.ts +81 -0
  107. package/src/hosted-session-cli.ts +9 -1
  108. package/src/hosted-skill-staging.ts +17 -14
  109. package/src/http.ts +8 -0
  110. package/src/index.ts +370 -301
  111. package/src/optimizations-promote-cli.ts +85 -7
  112. package/src/report-comments-cli.ts +83 -5
  113. package/src/runner-dir-verify.ts +85 -15
  114. package/src/runner-version-materialization.ts +56 -0
  115. package/src/setup-onboarding.ts +64 -0
  116. package/src/skill-installer.ts +39 -3
  117. package/src/skilled-proposer-bake-report.ts +1 -0
  118. package/src/skilled-proposer-launch.ts +74 -12
  119. package/src/skilled-proposer-venv-manager.mjs +44 -27
  120. package/src/skilled-proposer-wire.ts +22 -0
  121. package/src/workspace.ts +65 -4
  122. package/vendor/orizu-gepa/src/orizu_gepa_connector/runtime.py +63 -23
  123. package/vendor/orizu-gepa-python/src/orizu_gepa/cli.py +1 -0
  124. package/vendor/orizu-gepa-python/src/orizu_gepa/client.py +91 -13
  125. package/vendor/orizu-gepa-python/src/orizu_gepa/optimizer.py +16 -2
  126. package/vendor/skills/orizu/SKILL.md +138 -0
  127. package/vendor/skills/orizu/agents/openai.yaml +4 -0
  128. package/vendor/skills/orizu/references/assess-and-plan.md +107 -0
  129. package/vendor/skills/{orizu-cli → orizu}/references/building-apps.md +1 -1
  130. package/vendor/skills/orizu/references/building-judges.md +498 -0
  131. package/vendor/skills/{orizu-cli → orizu}/references/cli-reference.md +24 -23
  132. package/vendor/skills/orizu/references/dataset-design.md +100 -0
  133. package/vendor/skills/orizu/references/eval-strategy.md +64 -0
  134. package/vendor/skills/{orizu-cli → orizu}/references/instructions-after-prompts.md +12 -17
  135. package/vendor/skills/{orizu-cli → orizu}/references/migrate-existing-gepa-setup.md +79 -71
  136. package/vendor/skills/orizu/references/optimization-reports.md +266 -0
  137. package/vendor/skills/{orizu-cli → orizu}/references/optimization-with-gepa.md +56 -23
  138. package/vendor/skills/{orizu-cli → orizu}/references/primer.md +25 -16
  139. package/vendor/skills/{orizu-cli → orizu}/references/prompt-control-plane.md +94 -73
  140. package/vendor/skills/orizu-cli/SKILL.md +0 -242
  141. package/vendor/skills/orizu-cli/agents/openai.yaml +0 -4
  142. package/vendor/skills/orizu-cli/references/building-judges.md +0 -236
  143. package/vendor/skills/orizu-cli/references/optimization-reports.md +0 -179
  144. /package/vendor/skills/{orizu-cli → orizu}/scripts/test-app.mjs +0 -0
package/README.md CHANGED
@@ -28,24 +28,52 @@ By default, the CLI talks to `https://orizu.ai`.
28
28
  ## Updating bundled GEPA
29
29
 
30
30
  The CLI ships a verified, source-only copy of official GEPA so optimization
31
- users never need `pip` or a network connection. To upgrade it, make a PR that
32
- updates the version, release commit, and SHA-256 pin in
33
- `scripts/vendor-gepa-python.mjs`, then re-runs the refresh command with the
34
- matching downloaded wheel:
31
+ users never need `pip` or a network connection. From the repository root,
32
+ derive both mandatory pins independently from the downloaded wheel:
35
33
 
36
34
  ```bash
37
- node scripts/vendor-gepa-python.mjs --refresh --archive /path/to/gepa-<version>-py3-none-any.whl
35
+ python3 - /path/to/gepa-<version>-py3-none-any.whl <version> <<'PY'
36
+ import hashlib, json, sys, zipfile
37
+ from pathlib import Path
38
+
39
+ wheel, version = Path(sys.argv[1]), sys.argv[2]
40
+ license_member = f'gepa-{version}.dist-info/licenses/LICENSE'
41
+ files = {}
42
+ with zipfile.ZipFile(wheel) as archive:
43
+ for member in archive.infolist():
44
+ if member.is_dir():
45
+ continue
46
+ if member.filename.startswith('gepa/'):
47
+ path = f'src/{member.filename}'
48
+ elif member.filename == license_member:
49
+ path = 'LICENSE'
50
+ else:
51
+ continue
52
+ files[path] = hashlib.sha256(archive.read(member)).hexdigest()
53
+ entries = sorted(files.items())
54
+ print('GEPA_WHEEL_SHA256=' + hashlib.sha256(wheel.read_bytes()).hexdigest())
55
+ print('GEPA_TREE_SHA256=' + hashlib.sha256(json.dumps(entries, separators=(',', ':')).encode()).hexdigest())
56
+ PY
38
57
  ```
39
58
 
40
- Commit the refreshed `gepa-python-source.zip` and run the CLI packaging test.
41
- `npm pack` verifies that archive and materializes only the shipped source tree;
42
- it never downloads GEPA.
59
+ Update `GEPA_VERSION`, `GEPA_RELEASE_COMMIT`, `GEPA_WHEEL_FILENAME`,
60
+ `GEPA_WHEEL_SHA256`, `GEPA_TREE_SHA256`, and the extractor's license member in
61
+ `packages/cli/scripts/vendor-gepa-python.mjs`. Both SHA-256 constants must
62
+ change together before running the matching refresh command:
63
+
64
+ ```bash
65
+ node packages/cli/scripts/vendor-gepa-python.mjs --refresh --archive /path/to/gepa-<version>-py3-none-any.whl
66
+ ```
67
+
68
+ Commit the refreshed `packages/cli/gepa-python-source.zip`, then run
69
+ `bun test test/cli-gepa-packaging.test.ts test/cli/provision-snapshot.test.ts`.
70
+ These gates cover both pins. `npm pack` never downloads GEPA.
43
71
 
44
72
  For a development checkout, materialize that same verified source before local
45
73
  work that imports GEPA:
46
74
 
47
75
  ```bash
48
- node scripts/vendor-gepa-python.mjs
76
+ node packages/cli/scripts/vendor-gepa-python.mjs
49
77
  ```
50
78
 
51
79
  ## Install
@@ -58,12 +86,15 @@ Install the CLI globally with your package manager:
58
86
  | pnpm | `pnpm add -g orizu` |
59
87
  | Bun | `bun add -g orizu` |
60
88
 
61
- Then run the guided setup — it signs you in, initializes the local workspace
62
- contract, installs global coding-agent skill symlinks, and shows the next
63
- command for repo-specific Orizu adoption:
89
+ Then run the guided setup — it signs you in, asks you to choose or create a
90
+ team and project, initializes the local workspace contract, installs the shared
91
+ `~/.agents/skills/orizu` skill plus selected native targets, and optionally
92
+ launches Claude, Codex, or Pi:
64
93
 
65
94
  ```bash
66
95
  orizu setup
96
+ # Scripts use explicit choices after `orizu login --headless`:
97
+ orizu setup --team acme --project support-agent --agent codex --non-interactive
67
98
  ```
68
99
 
69
100
  To repair or customize skill installs later, run the companion skill installer
@@ -109,9 +140,8 @@ Agents are first-class users of this CLI: **every command supports `--json`**
109
140
  (as a prefix, `orizu --json teams list`, or a trailing flag) and emits a single
110
141
  machine-readable JSON document instead of formatted text. Discover the full
111
142
  command surface, including global options, with `orizu capabilities --json`.
112
- Hosted agents may read and sync instruction sets and prepare complete manifests,
113
- but a human curator using the local CLI with a user token must run instruction
114
- create, push, shape, archive, restore, and production/default pointer mutations.
143
+ Hosted agents may read and sync instruction sets, create profile seeds, run shape add/remove with team-scoped curator authority, and prepare complete manifests. A local coding agent using the user's token runs instruction create, push, shape add/remove, archive, and restore itself after plan ratification. It gathers only read-only pointer-resolution and binding evidence; a human curator executes every production/default pointer command on every surface.
144
+ In a hosted session, a human curator using the local CLI must run create/push, archive/restore, and every pointer command; shape add/remove stays agent-runnable because it creates unpromoted heads only.
115
145
 
116
146
  ## Authentication
117
147
 
@@ -124,6 +154,12 @@ orizu login
124
154
  This will open a browser tab for you to login with. You must either have an account on the [Orizu platform](https://orizu.ai) or it will help you create one.
125
155
  Approving the login creates a personal access token for the CLI and stores it in your local Orizu credentials file. You can revoke CLI tokens from the Personal Tokens page in Orizu.
126
156
 
157
+ In an SSH or display-less Linux session, the CLI automatically prints an approval URL and polls for completion instead of opening a local browser. Force this mode when needed with:
158
+
159
+ ```bash
160
+ orizu login --headless
161
+ ```
162
+
127
163
  **Check the signed-in user**
128
164
 
129
165
  ```bash
@@ -196,11 +232,11 @@ orizu logout
196
232
  <td><code>orizu prompts list --project ops-eval/support-qa [--status active|archived|all]</code></td>
197
233
  </tr>
198
234
  <tr>
199
- <td>Archive or restore an instruction set (human/local CLI only)</td>
235
+ <td>Archive or restore an instruction set (local agent or human; hosted human only)</td>
200
236
  <td><code>orizu instructions archive &lt;slug-or-exact-name&gt; --project ops-eval/support-qa</code><br><code>orizu instructions restore &lt;slug-or-exact-name&gt; --project ops-eval/support-qa</code></td>
201
237
  </tr>
202
238
  <tr>
203
- <td>Push an instruction-set manifest (human/local CLI only)</td>
239
+ <td>Push an instruction-set manifest (local agent or human; hosted human only)</td>
204
240
  <td><code>orizu instructions push ./orizu.instruction-set.json --project ops-eval/support-qa --set &lt;slug-or-exact-name&gt;</code></td>
205
241
  </tr>
206
242
  <tr>
@@ -211,12 +247,12 @@ orizu logout
211
247
  <td colspan="2"><strong>Report comments</strong></td>
212
248
  </tr>
213
249
  <tr>
214
- <td>List report comments</td>
215
- <td><code>orizu comments list --prompt &lt;promptIdOrName&gt; --project ops-eval/support-qa</code><br><code>orizu comments list --run &lt;runId&gt;</code><br><code>orizu comments list --task &lt;taskId&gt;</code></td>
250
+ <td>List report or README comments</td>
251
+ <td><code>orizu comments list --prompt &lt;promptIdOrName&gt; --project ops-eval/support-qa</code><br><code>orizu comments list --run &lt;runId&gt;</code><br><code>orizu comments list --task &lt;taskId&gt;</code><br><code>orizu comments list --dataset &lt;datasetIdOrName&gt; --project ops-eval/support-qa</code></td>
216
252
  </tr>
217
253
  <tr>
218
254
  <td>Add or update comments</td>
219
- <td><code>orizu comments add --run &lt;runId&gt; --body @comment.md --anchor "Summary" --lines 4:6</code><br><code>orizu comments reply &lt;commentId&gt; --body "Fixed"</code><br><code>orizu comments resolve &lt;commentId&gt;</code></td>
255
+ <td><code>orizu comments add --run &lt;runId&gt; --body @comment.md --anchor "Summary" --lines 4:6</code><br><code>orizu comments add --dataset &lt;datasetIdOrName&gt; --project ops-eval/support-qa --body "Clarify this README" --anchor "Summary" --lines 4:6</code><br><code>orizu comments reply &lt;commentId&gt; --body "Fixed"</code><br><code>orizu comments resolve &lt;commentId&gt;</code></td>
220
256
  </tr>
221
257
  <tr>
222
258
  <td colspan="2"><strong>Diff comments</strong></td>
@@ -384,4 +420,4 @@ Use `--json` on supported task and app commands when automation needs structured
384
420
  ## More Documentation
385
421
 
386
422
  - [docs/cli.md](docs/cli.md): complete CLI guide and command reference
387
- - [skills/orizu-cli/references/cli-reference.md](skills/orizu-cli/references/cli-reference.md): compact command matrix and end-to-end flows
423
+ - [skills/orizu/references/cli-reference.md](skills/orizu/references/cli-reference.md): compact command matrix and end-to-end flows
@@ -0,0 +1,48 @@
1
+ import { Readable, Writable } from 'node:stream';
2
+ declare class FileDescriptorSink extends Writable {
3
+ private readonly descriptor;
4
+ private readonly activeWriteCancellations;
5
+ private isLiveOutputAvailable;
6
+ private relay;
7
+ constructor(descriptor: number);
8
+ _write(chunk: Buffer, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
9
+ prepare(): Promise<void>;
10
+ cancelPendingWrites(): void;
11
+ private relayProcess;
12
+ }
13
+ export declare const childOutputSinks: {
14
+ stdout: FileDescriptorSink;
15
+ stderr: FileDescriptorSink;
16
+ };
17
+ export interface PipedChild {
18
+ stdout: Readable;
19
+ stderr: Readable;
20
+ exited: Promise<number | null>;
21
+ signalCode: NodeJS.Signals | null;
22
+ kill(signal?: number | NodeJS.Signals): void;
23
+ }
24
+ export declare function spawnPipedChild(command: string, args: string[], environment: NodeJS.ProcessEnv): Promise<PipedChild>;
25
+ export declare function writeChildStderr(text: string): Promise<void>;
26
+ export interface ChildOutputForwarding {
27
+ completed: Promise<void>;
28
+ failure: Promise<Error>;
29
+ failureReason(): Error | undefined;
30
+ expectSourceClose(): void;
31
+ stopLiveOutput(): void;
32
+ }
33
+ export interface ChildOutputCapture {
34
+ stdout(chunk: string): void;
35
+ stderr(chunk: string): void;
36
+ }
37
+ export declare function completePipedChild(child: PipedChild, forwarding: readonly ChildOutputForwarding[]): Promise<number | null>;
38
+ export declare function runPipedChild(command: string, args: string[], environment: NodeJS.ProcessEnv, onSpawn: () => Promise<void>, capture: ChildOutputCapture, observeChild?: (child: PipedChild) => void): Promise<{
39
+ status: number | null;
40
+ error?: Error;
41
+ }>;
42
+ /**
43
+ * Forward a child stream live while retaining a bounded caller-owned copy.
44
+ * Transient sink slowness pushes back; a stall degrades safely to capture-only.
45
+ */
46
+ export declare function teeChildOutput(source: Readable, destination: Writable, capture: (chunk: string) => void): ChildOutputForwarding;
47
+ export {};
48
+ //# sourceMappingURL=child-output-tee.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-output-tee.d.ts","sourceRoot":"","sources":["../src/child-output-tee.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAsHhD,cAAM,kBAAmB,SAAQ,QAAQ;IAK3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJvC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAwB;IACjE,OAAO,CAAC,qBAAqB,CAAO;IACpC,OAAO,CAAC,KAAK,CAA6B;gBAEb,UAAU,EAAE,MAAM;IAItC,MAAM,CACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GACvC,IAAI;IAgCD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,mBAAmB,IAAI,IAAI;IAS3B,OAAO,CAAC,YAAY;CAiCrB;AAED,eAAO,MAAM,gBAAgB;;;CAG5B,CAAA;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,QAAQ,CAAA;IAChB,MAAM,EAAE,QAAQ,CAAA;IAChB,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;IACjC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;CAC7C;AAqDD,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,EAAE,MAAM,CAAC,UAAU,GAC7B,OAAO,CAAC,UAAU,CAAC,CAiDrB;AAoCD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWlE;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACvB,aAAa,IAAI,KAAK,GAAG,SAAS,CAAA;IAClC,iBAAiB,IAAI,IAAI,CAAA;IACzB,cAAc,IAAI,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAuCD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,SAAS,qBAAqB,EAAE,GAC3C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6CxB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,EAAE,MAAM,CAAC,UAAU,EAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC5B,OAAO,EAAE,kBAAkB,EAC3B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GACzC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAqBnD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,QAAQ,EACrB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,qBAAqB,CA2DvB"}