@mastra/code-sdk 1.8.4-alpha.6 → 1.9.0-alpha.8
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 +190 -0
- package/dist/acp/agent.d.ts +30 -17
- package/dist/acp/agent.d.ts.map +1 -1
- package/dist/acp/agent.js +294 -103
- package/dist/acp/agent.js.map +1 -1
- package/dist/acp/errors.d.ts +3 -0
- package/dist/acp/errors.d.ts.map +1 -0
- package/dist/acp/errors.js +14 -0
- package/dist/acp/errors.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +6 -1
- package/dist/acp/event-mapper.d.ts.map +1 -1
- package/dist/acp/event-mapper.js +116 -56
- package/dist/acp/event-mapper.js.map +1 -1
- package/dist/acp/index.d.ts +1 -4
- package/dist/acp/index.d.ts.map +1 -1
- package/dist/acp/index.js +6 -48
- package/dist/acp/index.js.map +1 -1
- package/dist/acp/runtime.d.ts +5 -0
- package/dist/acp/runtime.d.ts.map +1 -0
- package/dist/acp/runtime.js +80 -0
- package/dist/acp/runtime.js.map +1 -0
- package/dist/acp/server.d.ts +3 -6
- package/dist/acp/server.d.ts.map +1 -1
- package/dist/acp/server.js +22 -19
- package/dist/acp/server.js.map +1 -1
- package/dist/acp/skills.d.ts +6 -0
- package/dist/acp/skills.d.ts.map +1 -0
- package/dist/acp/skills.js +33 -0
- package/dist/acp/skills.js.map +1 -0
- package/dist/agents/model.js +1 -1
- package/dist/agents/prompts/agent-instructions.js +2 -2
- package/dist/agents/workspace.js +1 -1
- package/dist/analytics.js +2 -2
- package/dist/auth/providers/kimi-coding.js +1 -1
- package/dist/auth/storage.js +2 -2
- package/dist/clipboard/index.js +2 -2
- package/dist/headless/run-mc.d.ts.map +1 -1
- package/dist/headless/run-mc.js +14 -0
- package/dist/headless/run-mc.js.map +1 -1
- package/dist/hooks/config.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/lsp/server.js +1 -1
- package/dist/lsp/workspace.js +1 -1
- package/dist/mcp/config.js +1 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +2 -1
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/state.js +1 -1
- package/dist/mcp/types.d.ts +2 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/onboarding/settings.js +3 -3
- package/dist/plugins/dependencies.js +1 -1
- package/dist/plugins/install.js +1 -1
- package/dist/plugins/loader.js +3 -3
- package/dist/plugins/manager.js +1 -1
- package/dist/plugins/manifest.js +1 -1
- package/dist/plugins/package-link.js +1 -1
- package/dist/plugins/paths.js +1 -1
- package/dist/plugins/registry.js +1 -1
- package/dist/plugins/scaffold.js +1 -1
- package/dist/process-memory-diagnostics.js +2 -2
- package/dist/providers/amazon-bedrock-gateway.js +1 -1
- package/dist/providers/openai-codex.js +1 -1
- package/dist/schema.js +1 -1
- package/dist/tools/request-sandbox-access.js +5 -4
- package/dist/tools/request-sandbox-access.js.map +1 -1
- package/dist/utils/debug-log.js +1 -1
- package/dist/utils/project.js +3 -3
- package/dist/utils/signals-pubsub.js +1 -1
- package/dist/utils/slash-command-loader.js +1 -1
- package/dist/utils/slash-command-processor.js +1 -1
- package/dist/utils/storage-maintenance.js +1 -1
- package/dist/utils/thread-lock.js +1 -1
- package/dist/utils/update-check.js +2 -2
- package/dist/workflows/register-primitives.js +1 -1
- package/package.json +18 -14
package/README.md
CHANGED
|
@@ -58,6 +58,196 @@ The handle stays in memory and isn't restart-safe. The plugin still owns its con
|
|
|
58
58
|
|
|
59
59
|
`defaultDisposition: 'foreground'` preserves normal calls unless the caller explicitly requests `_background.disposition: 'deferred'` or `'awaited'`. Plugins without a declaration remain usable in the foreground, including older versions of `mastra_expert`.
|
|
60
60
|
|
|
61
|
+
### ACP server
|
|
62
|
+
|
|
63
|
+
See the [ACP server reference](https://mastra.ai/reference/code-sdk/acp-server) for
|
|
64
|
+
startup options, capabilities, and client behavior.
|
|
65
|
+
|
|
66
|
+
Start the installed CLI with `mastracode --acp`, or start the SDK server directly:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { acpMain } from '@mastra/code-sdk/acp/index';
|
|
70
|
+
|
|
71
|
+
await acpMain();
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The server uses newline-delimited JSON-RPC on standard input and output. Configure
|
|
75
|
+
provider authentication through Mastra Code before launching the client, or pass
|
|
76
|
+
API keys in the server's environment. ACP sessions do not load project `.env`
|
|
77
|
+
files into the shared process environment.
|
|
78
|
+
|
|
79
|
+
Each `session/new` creates its own runtime rooted at the request's absolute
|
|
80
|
+
`cwd`, including client-supplied MCP servers. Mode and model changes wait for
|
|
81
|
+
the current turn. Cancelling a session stops its active turn and cancels its
|
|
82
|
+
queued prompts.
|
|
83
|
+
|
|
84
|
+
Clients can use `configOptions` to select a model, mode, and requested reasoning
|
|
85
|
+
level. The reasoning choices follow Mastra Code's existing model policy; a
|
|
86
|
+
provider may adjust the requested level. For example:
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
await connection.setSessionConfigOption({
|
|
90
|
+
sessionId,
|
|
91
|
+
configId: 'thought_level',
|
|
92
|
+
value: 'high',
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Tool approvals and sandbox access requests go through the client's permission
|
|
97
|
+
UI. The `ask_user` tool is disabled because ACP has no free-text tool response
|
|
98
|
+
method. Internal signals, including user input and system reminders, are not
|
|
99
|
+
sent as assistant messages. Failed turns return protocol errors.
|
|
100
|
+
|
|
101
|
+
Model choices include authenticated providers and the session's saved current
|
|
102
|
+
selection. Labels retain the full provider/model ID, so an OpenRouter route such
|
|
103
|
+
as `openrouter/openai/gpt-4.1-mini` cannot be confused with a Netlify route.
|
|
104
|
+
Unauthenticated gateway catalogs are omitted; stale model choices must be refreshed.
|
|
105
|
+
|
|
106
|
+
Session loading is not supported yet. Configure authentication outside ACP;
|
|
107
|
+
the server does not advertise an interactive authentication method.
|
|
108
|
+
|
|
109
|
+
#### Skills
|
|
110
|
+
|
|
111
|
+
The server advertises workspace skills through `available_commands_update` when
|
|
112
|
+
a session starts and refreshes the list before each prompt. Clients that support
|
|
113
|
+
ACP command discovery can offer `/skill/<name>` completions. Skills marked
|
|
114
|
+
`user-invocable: false` are omitted and cannot be explicitly invoked this way.
|
|
115
|
+
Skills are resolved through Mastra Code's existing project and global skill directories.
|
|
116
|
+
Duplicate names use the first user-invokable file in the workspace's catalog order.
|
|
117
|
+
|
|
118
|
+
Send the command as an ordinary text prompt, optionally followed by arguments:
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
await connection.prompt({
|
|
122
|
+
sessionId,
|
|
123
|
+
prompt: [{ type: 'text', text: '/skill/review Check the current changes' }],
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The server loads the named skill's instructions and resource listings into the
|
|
128
|
+
turn. Missing or hidden skills return an invalid-parameters error without
|
|
129
|
+
starting inference. Each session uses its own workspace. Terminal commands such
|
|
130
|
+
as `/goal` are not advertised or implemented by this command handler.
|
|
131
|
+
|
|
132
|
+
#### Focused adapter tests
|
|
133
|
+
|
|
134
|
+
From the repository root, install dependencies and build core with its dependencies
|
|
135
|
+
before the first run:
|
|
136
|
+
|
|
137
|
+
```sh
|
|
138
|
+
pnpm turbo build --filter @mastra/core...
|
|
139
|
+
pnpm --filter @mastra/code-sdk test:acp
|
|
140
|
+
pnpm --filter @mastra/code-sdk check:acp
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
This suite runs the adapter and stdio protocol tests without building the TUI.
|
|
144
|
+
`check:acp` checks `agent.ts`, `event-mapper.ts`, `server.ts`, and `skills.ts`
|
|
145
|
+
against the repository's ES2023 library target. It does not check `runtime.ts`
|
|
146
|
+
or `index.ts`. Run `pnpm --filter @mastra/code-sdk check` for the full SDK
|
|
147
|
+
typecheck, including those entrypoints. CI runs the full check after building
|
|
148
|
+
the workspace dependencies.
|
|
149
|
+
It requires built workspace imports, including `@mastra/core/workspace`; the signal
|
|
150
|
+
factory alone is aliased to source. Runtime factory tests mock SDK startup. Use a running
|
|
151
|
+
ACP client to verify provider authentication and actual tool execution.
|
|
152
|
+
|
|
153
|
+
#### Build ACP without rebuilding the workspace
|
|
154
|
+
|
|
155
|
+
For local adapter development, bundle the SDK source against an existing
|
|
156
|
+
installation of Mastra Code's published dependencies:
|
|
157
|
+
|
|
158
|
+
```sh
|
|
159
|
+
npm install --prefix /tmp/mastracode-runtime mastracode
|
|
160
|
+
pnpm --filter @mastra/code-sdk build:acp:dev /tmp/mastracode-runtime
|
|
161
|
+
node mastracode/sdk/node_modules/.acp-dev/local-acp.mjs
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Point the ACP client's command at `node` with that generated file as its argument.
|
|
165
|
+
Rebuild after source changes. This development bundle uses absolute dependency
|
|
166
|
+
paths and is not a release artifact. It checks the local SDK against the installed
|
|
167
|
+
dependency versions; changes to other workspace packages still need their own
|
|
168
|
+
builds and tests.
|
|
169
|
+
|
|
170
|
+
#### Validate the ACP wire protocol
|
|
171
|
+
|
|
172
|
+
Mastra Code implements [Agent Client Protocol v1](https://agentclientprotocol.com/protocol/v1/overview).
|
|
173
|
+
The similarly named `@acprotocol/conformance` package tests **Agent Control
|
|
174
|
+
Protocol**, a different protocol, and cannot validate this server.
|
|
175
|
+
|
|
176
|
+
The Mastra Code CI job builds matching workspace packages, runs the SDK typecheck
|
|
177
|
+
and ACP unit tests, then tests the built SDK with the conformance gate. Reports
|
|
178
|
+
are uploaded as the `acp-conformance` artifact.
|
|
179
|
+
|
|
180
|
+
Run that same conformance gate locally against a built SDK:
|
|
181
|
+
|
|
182
|
+
```sh
|
|
183
|
+
pnpm --filter @mastra/code-sdk test:acp:conformance
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Build the SDK and its relevant workspace dependencies first. The command fails
|
|
187
|
+
if `dist/acp/index.js` is missing. It downloads the upstream v1 schema at revision
|
|
188
|
+
`367c56fb6115f391bc7550288363f87416cd0af8`, verifies its SHA-256 checksum, and installs
|
|
189
|
+
locked AJV validators with lifecycle scripts disabled. The first run needs network
|
|
190
|
+
access. Generated files stay under `node_modules/.acp-conformance`. The command
|
|
191
|
+
runs EOF, SIGINT and SIGTERM shutdown checks sequentially, with one server process
|
|
192
|
+
at a time.
|
|
193
|
+
|
|
194
|
+
To check a development bundle instead:
|
|
195
|
+
|
|
196
|
+
```sh
|
|
197
|
+
pnpm --filter @mastra/code-sdk build:acp:dev /tmp/mastracode-runtime --local-core
|
|
198
|
+
pnpm --filter @mastra/code-sdk test:acp:conformance node_modules/.acp-dev/local-acp.mjs
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
`--local-core` also bundles local `@mastra/core` source. Other workspace dependencies
|
|
202
|
+
still come from the supplied installation. This keeps local verification small;
|
|
203
|
+
it does not establish that the publishable packages build together.
|
|
204
|
+
|
|
205
|
+
The checker validates actual stdio JSON-RPC messages with AJV, independently of
|
|
206
|
+
the client's generated SDK validators. Local deterministic model and MCP fixtures
|
|
207
|
+
exercise the real runtime without model credentials or inherited user credentials.
|
|
208
|
+
|
|
209
|
+
| Supported behavior | Verification |
|
|
210
|
+
| ---------------------------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
211
|
+
| Initialization, protocol version, capabilities | Wire responses and upstream schemas |
|
|
212
|
+
| New sessions, absolute working directories, concurrent isolation | Separate runtime sessions and concurrent model requests |
|
|
213
|
+
| Text prompts, assistant streaming, usage and tool updates | Wire schemas and adapter regressions |
|
|
214
|
+
| Permissions | Approved writes execute; denied writes leave no file |
|
|
215
|
+
| Cancellation | Streaming, parked approvals, follow-up turns, and core startup regressions |
|
|
216
|
+
| MCP stdio | Real tool calls with session working directory and environment |
|
|
217
|
+
| MCP HTTP | Real tool calls with supplied headers |
|
|
218
|
+
| Modes, models and reasoning configuration | Selection validation, configuration updates and legacy mode notifications |
|
|
219
|
+
| Errors and stop reasons | Invalid requests, failed MCP setup, provider errors, token limits and refusals |
|
|
220
|
+
| Process lifecycle | Disconnect, SIGINT/SIGTERM, MCP child exit, protocol-only stdout |
|
|
221
|
+
|
|
222
|
+
Session loading/resuming, image/audio prompts, binary resources, interactive ACP
|
|
223
|
+
authentication, and free-text tool questions are outside this release profile.
|
|
224
|
+
They are not advertised as supported. Unsupported prompt attachments fail explicitly.
|
|
225
|
+
Clients supply credentials through the existing Mastra Code setup.
|
|
226
|
+
|
|
227
|
+
`node_modules/.acp-conformance/report/report.json` records the checks, errors,
|
|
228
|
+
observed message count, and SHA-256 hashes of the schema, server entry and checker.
|
|
229
|
+
The EOF report is at that path; SIGINT and SIGTERM reports are in the
|
|
230
|
+
`report/sigint` and `report/sigterm` subdirectories. Checks assert that started MCP
|
|
231
|
+
children exit after failed initialization and final shutdown.
|
|
232
|
+
|
|
233
|
+
The server hash covers the selected entry file; for the default release wrapper,
|
|
234
|
+
it does not fingerprint the entire dependency tree. Archive the package tarballs
|
|
235
|
+
and lockfile alongside the report for release provenance. Nonzero exit, malformed
|
|
236
|
+
stdout, timeout, or forced shutdown fails the gate.
|
|
237
|
+
|
|
238
|
+
Before publishing:
|
|
239
|
+
|
|
240
|
+
1. Run the focused adapter tests and affected core tests.
|
|
241
|
+
2. Build and typecheck the affected packages with matching workspace dependencies
|
|
242
|
+
in CI, then run this gate against the resulting SDK artifact.
|
|
243
|
+
3. Smoke-test the packaged `mastracode --acp` entry in an ACP client with a real
|
|
244
|
+
authenticated provider, including a reply, approved and denied tools, and cancellation.
|
|
245
|
+
4. Archive the reports with the exact package versions and checksums.
|
|
246
|
+
|
|
247
|
+
Passing this gate supports a claim of tested compatibility with the documented
|
|
248
|
+
ACP v1 profile. It is not upstream certification or proof of every optional
|
|
249
|
+
protocol feature. Live-provider authentication remains a separate integration test.
|
|
250
|
+
|
|
61
251
|
## Documentation
|
|
62
252
|
|
|
63
253
|
- [@mastra/code-sdk documentation](https://mastra.ai/reference/code-sdk/mount-agent-controller)
|
package/dist/acp/agent.d.ts
CHANGED
|
@@ -1,26 +1,39 @@
|
|
|
1
|
-
import type { Agent, AgentSideConnection, InitializeRequest, InitializeResponse, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse, CancelNotification, ContentBlock } from '@agentclientprotocol/sdk';
|
|
1
|
+
import type { Agent, AgentSideConnection, InitializeRequest, InitializeResponse, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse, CancelNotification, ContentBlock, SetSessionConfigOptionRequest, SetSessionConfigOptionResponse } from '@agentclientprotocol/sdk';
|
|
2
2
|
import type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import type { ThinkingLevelSetting } from '../thinking.js';
|
|
4
|
+
import type { AcpSkills } from './skills.js';
|
|
5
|
+
export interface AcpSessionRuntime {
|
|
6
|
+
controller: AgentController;
|
|
7
|
+
session: Session;
|
|
8
|
+
modes: AgentControllerMode[];
|
|
9
|
+
getThinkingLevel?: () => ThinkingLevelSetting;
|
|
10
|
+
getSkills?: () => Promise<AcpSkills | undefined>;
|
|
11
|
+
cleanup?: () => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export type AcpSessionFactory = (request: NewSessionRequest) => Promise<AcpSessionRuntime>;
|
|
14
|
+
/** One ACP connection, with an independent Mastra Code runtime for each conversation. */
|
|
7
15
|
export declare class MastraCodeAcpAgent implements Agent {
|
|
8
16
|
private readonly connection;
|
|
9
|
-
private readonly
|
|
10
|
-
private readonly
|
|
11
|
-
private readonly
|
|
12
|
-
private readonly
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
dispose(): void
|
|
17
|
+
private readonly createSession;
|
|
18
|
+
private readonly sessions;
|
|
19
|
+
private readonly pendingCreations;
|
|
20
|
+
private readonly startupCleanupFailures;
|
|
21
|
+
private disposed;
|
|
22
|
+
private disposal?;
|
|
23
|
+
constructor(connection: AgentSideConnection, createSession: AcpSessionFactory);
|
|
24
|
+
private getSession;
|
|
25
|
+
private enqueue;
|
|
26
|
+
dispose(): Promise<void>;
|
|
19
27
|
initialize(_request: InitializeRequest): Promise<InitializeResponse>;
|
|
20
28
|
authenticate(): Promise<void>;
|
|
21
|
-
newSession(
|
|
29
|
+
newSession(request: NewSessionRequest): Promise<NewSessionResponse>;
|
|
30
|
+
private createNewSession;
|
|
31
|
+
private refreshCommands;
|
|
32
|
+
private configOptions;
|
|
33
|
+
private thinkingLevel;
|
|
34
|
+
setSessionConfigOption(params: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse>;
|
|
22
35
|
prompt(request: PromptRequest): Promise<PromptResponse>;
|
|
23
|
-
cancel(
|
|
36
|
+
cancel(notification: CancelNotification): Promise<void>;
|
|
24
37
|
setSessionMode(params: {
|
|
25
38
|
sessionId: string;
|
|
26
39
|
modeId: string;
|
package/dist/acp/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/acp/agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/acp/agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,KAAK,EACL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EAEZ,6BAA6B,EAC7B,8BAA8B,EAE/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAEnG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAM3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,oBAAoB,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAW3F,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,KAAK;IAQ5C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IARhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAC3E,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiB;IACxD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAgB;gBAGd,UAAU,EAAE,mBAAmB,EAC/B,aAAa,EAAE,iBAAiB;IAGnD,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,OAAO;IASf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgClB,UAAU,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQpE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAUrD,gBAAgB;YAkGhB,eAAe;IAa7B,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,aAAa;IAMf,sBAAsB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA0BtG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA2DvD,MAAM,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BvD,cAAc,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5E,wBAAwB,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAiB9F;AASD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAiB3E;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GACrD,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,mBAAmB,GAAG,SAAS,CAW3E"}
|