stitchkit 0.90.3 → 0.90.5

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 (61) hide show
  1. package/CHANGELOG.md +142 -0
  2. package/dist/agent-runtime-coding-tools.js +4 -4
  3. package/dist/agent-runtime-harness.js +6 -6
  4. package/dist/agent-runtime-sandbox.js +4 -4
  5. package/dist/agent-runtime.js +9 -9
  6. package/dist/cli.d.ts +14 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +402 -11
  9. package/dist/{index-2hrfpw2c.js → index-1bnkzq95.js} +2 -2
  10. package/dist/{index-j7q0xj6d.js → index-3yqgj323.js} +3 -3
  11. package/dist/{index-gbqjt8jz.js → index-83fafqw8.js} +3 -3
  12. package/dist/{index-44ht2790.js → index-8pjqv3zh.js} +6 -6
  13. package/dist/{index-kc6h6hg0.js → index-8z9we758.js} +1 -1
  14. package/dist/{index-r159gjwy.js → index-fenaekmk.js} +94 -8
  15. package/dist/{index-1923shw9.js → index-fqg5mfk7.js} +339 -19
  16. package/dist/{index-f475yj00.js → index-s208wab5.js} +1 -1
  17. package/dist/{index-79hb1wyh.js → index-tgh3ksfh.js} +5 -5
  18. package/dist/{index-wb15909q.js → index-zsdgd1tz.js} +3 -3
  19. package/dist/index.js +7 -7
  20. package/dist/node.js +2 -2
  21. package/dist/observability/index.js +1 -1
  22. package/dist/remote.js +1 -1
  23. package/dist/server/index.js +6 -6
  24. package/dist/testing.js +3 -3
  25. package/dist/tool-invoker.js +6 -6
  26. package/dist/tools/cli-args.d.ts +30 -6
  27. package/dist/tools/cli-args.d.ts.map +1 -1
  28. package/dist/tools/cli-installer.d.ts +34 -0
  29. package/dist/tools/cli-installer.d.ts.map +1 -0
  30. package/dist/tools/cli-manifest.d.ts +83 -0
  31. package/dist/tools/cli-manifest.d.ts.map +1 -0
  32. package/dist/tools/cli-profile.d.ts +40 -0
  33. package/dist/tools/cli-profile.d.ts.map +1 -0
  34. package/dist/tools/cli-update.d.ts +64 -0
  35. package/dist/tools/cli-update.d.ts.map +1 -0
  36. package/dist/tools/cli-view.d.ts +12 -0
  37. package/dist/tools/cli-view.d.ts.map +1 -0
  38. package/dist/tools/cli.d.ts.map +1 -1
  39. package/dist/tools/connections/index.d.ts +2 -1
  40. package/dist/tools/connections/index.d.ts.map +1 -1
  41. package/dist/tools/connections/index.js +74 -14
  42. package/dist/tools/connections/mcp-envelope.d.ts +44 -0
  43. package/dist/tools/connections/mcp-envelope.d.ts.map +1 -0
  44. package/dist/tools/connections/mcp.d.ts +2 -1
  45. package/dist/tools/connections/mcp.d.ts.map +1 -1
  46. package/dist/tools/connections/mount.d.ts.map +1 -1
  47. package/dist/tools/connections/openapi.d.ts +2 -1
  48. package/dist/tools/connections/openapi.d.ts.map +1 -1
  49. package/dist/tools/connections/runtime.d.ts +17 -0
  50. package/dist/tools/connections/runtime.d.ts.map +1 -1
  51. package/dist/tools/connections/types.d.ts +18 -1
  52. package/dist/tools/connections/types.d.ts.map +1 -1
  53. package/dist/tools/json-schema-dialect.d.ts +17 -0
  54. package/dist/tools/json-schema-dialect.d.ts.map +1 -0
  55. package/dist/tools/presentation.d.ts +8 -1
  56. package/dist/tools/presentation.d.ts.map +1 -1
  57. package/dist/tools.js +13 -13
  58. package/dist/tracking.js +1 -1
  59. package/llms-full.txt +273 -3
  60. package/package.json +1 -1
  61. package/dist/{index-db51n3xr.js → index-ra6txecz.js} +3 -3
package/CHANGELOG.md CHANGED
@@ -15,6 +15,148 @@ additive**; the first breaking change landed in 0.10.0. Grep the file for
15
15
 
16
16
  ## [Unreleased]
17
17
 
18
+ ## [0.90.5] — 2026-09-16
19
+
20
+ Three gaps a consuming project found on the first live surface after adopting
21
+ 0.90.4 — each one a place where the framework handed over parts of the job and
22
+ kept the composition for itself.
23
+
24
+ ### Fixed
25
+
26
+ - **A connection-mounted command on the CLI prints the answer, not the MCP
27
+ envelope.** `tools/call` returns `{ content: [...], structuredContent? }`, and
28
+ an agent mount needs exactly that — the parts are what a model is shown. The
29
+ CLI is different in kind, because the handler's value is what gets printed,
30
+ piped and aggregated. Handed the envelope, the first real command answered
31
+ `no record carries the field "status" — available: text, type`: it was
32
+ grouping the content parts. `--json` had the same defect one layer down, with
33
+ the answer a JSON *string* inside `content[0].text`, so every consumer
34
+ unwrapped before anything else worked. The CLI transport now unwraps, and only
35
+ it: `structuredContent` when the server sent one, a lone text part when it
36
+ parses as JSON, its text when it does not. Several parts, an image or audio
37
+ pass through whole — picking one of many would be inventing an answer.
38
+
39
+ - **A remote tool's refusal keeps its code and details.** `mountConnections` ended
40
+ a failed `tools/call` by throwing a one-sentence `Error` and discarding the
41
+ result. Three things went with it: the code, so `exitCodes` had nothing to map
42
+ and "not found" and "no rights" both exited `1` — the per-class exit codes the
43
+ CLI surface exists to provide could not work over a connection at all; the
44
+ message the operator needed; and the error's own class, because a plain `Error`
45
+ is an *unexpected* error to the runner, which printed a code frame of the
46
+ minified framework bundle before the JSON failure and then scrubbed the whole
47
+ thing to `INTERNAL_SERVER_ERROR`. A structured `{ error, details }` body is now
48
+ relayed as the contract error it is, on every transport — losing a code is
49
+ missing information, not a presentation choice. A refusal without one fails as
50
+ `UPSTREAM_TOOL_ERROR` carrying what the server did send; the status is 502
51
+ either way, because whatever the code says the failure happened upstream.
52
+
53
+ ### Added
54
+
55
+ - **`--sort <field>` and `--ascending` — the n largest *records*.** 0.90.4 gave
56
+ `--top` to groups and left "the five biggest, as a table" with no expression,
57
+ because `--table` took neither `--by` nor `--top`. Two readings of `--top`
58
+ would have been exactly the ambiguity that release removed from `--by`, so
59
+ ordering gets its own word: **`--by` groups, `--sort` orders**, and `--top`
60
+ keeps one meaning throughout — the n leading entries of the view that was
61
+ asked for. `--table` and `--sort` describe the same view and therefore
62
+ compose: `--top 5 --sort messages --table id,messages`. `--sort` without
63
+ `--table` returns the ordered records as JSON. A record carrying no value for
64
+ the sort field stays **last in both directions**: it is not the smallest, it
65
+ is not on the scale. `--sort` together with `--by`, `--count-by` or `--sum` is
66
+ refused rather than given a second meaning.
67
+ - **`--help <substring>` — a narrower question than "all of them".** On a
68
+ discovered surface `--help` is the only way to learn what exists, and that can
69
+ be two hundred commands and 230 lines: at that size the list stops being an
70
+ answer, scrolling past a person and costing an agent the same context an
71
+ unfiltered result would. The filter matches a command's name *or* its
72
+ description — the word someone knows is often in the sentence rather than the
73
+ name — and the heading says how many of the total matched. No match exits with
74
+ whatever `NOT_FOUND` maps to rather than succeeding over an empty list, because
75
+ `0` there reads as "there are none", a different statement from "none of
76
+ these". `-h <text>`, `help <text>` and `--help=<text>` are the same question;
77
+ bare `--help` is byte-for-byte unchanged, and `--help=false` keeps its meaning
78
+ as the reserved boolean's negation.
79
+ - **`renderCliInstaller` renders every published target in one script.** Omit
80
+ `asset` and the script selects by `uname` at run time, mapping `x86_64` →
81
+ `x64` and `aarch64` → `arm64` itself, and naming an unpublished combination
82
+ with what *is* published beside it. Passing one `asset` still pins one target.
83
+ That dispatch was the last hand-written piece of the install path, and it is
84
+ the same table every publisher writes from memory. It still parses no JSON.
85
+
86
+ ## [0.90.4] — 2026-09-16
87
+
88
+ ### Added
89
+
90
+ - **Aggregate views on the CLI: `--count-by`, `--sum`, `--top`, `--table`.** The
91
+ CLI's audience is agents and scripts, which is why output is JSON — but
92
+ answering "how many per status" by shipping the whole collection is a separate
93
+ decision, and an expensive one. Measured on a live server: a 98-record listing
94
+ is 34 750 characters of an agent's context window; `--count-by status` is about
95
+ ninety. `| jq` cannot recover that, because the bytes have already been read
96
+ into the conversation by the time the pipe sees them. `--by` names the grouping
97
+ field in every form it appears in; groups come back largest first, so `--top`
98
+ is a defined slice. A field no record carries is an argument error naming the
99
+ fields that exist, never a silent empty group, and an aggregate needs a
100
+ collection — over a scalar it is refused rather than guessed. Without a view
101
+ flag the emitted bytes are unchanged, and the flags never reach a tool
102
+ argument.
103
+ - **`createCliProfileStore` — named credential profiles that are never
104
+ substituted.** A CLI that talks to more than one deployment picks an
105
+ environment by name, and the convenient implementation of that is the unsafe
106
+ one: *the named profile does not exist, but exactly one is configured — use
107
+ it.* It is correct while a single profile exists and a wrong-environment
108
+ command the day a second appears. So a name given and not found is a refusal
109
+ that names the path and how to create it; substitution survives only where no
110
+ name was given and exactly one profile exists, and it is announced on stderr.
111
+ Files are `0600` in a `0700` directory, and a profile other users can read is
112
+ refused with the `chmod` that fixes it.
113
+ - **CLI distribution and self-update.** A build manifest schema
114
+ (`CliBuildManifestSchema`), an installer generated from it
115
+ (`renderCliInstaller`), a bounded update check (`checkCliUpdate`) and a
116
+ verified atomic replace (`applyCliUpdate`). The installer parses no JSON — a
117
+ `curl … | sh` machine has no `jq`, so the URL and digest are substituted
118
+ server-side. The digest covers the **decompressed** bytes, because those are
119
+ what will be executed. The replace is a rename inside the target's own
120
+ directory, so an interrupted download can never leave a half-written
121
+ executable on a PATH. `assertCliPublishable` refuses republishing one version
122
+ from a different commit, and the check has four answers — `skipped`,
123
+ `current`, `outdated`, `unknown` — because "could not ask" is not "up to
124
+ date". Checking never replaces anything by itself. → ADR 0186
125
+ - **`transports` on a connection — discovered tools as CLI commands.**
126
+ `mountConnections` and `createCli` already composed into a CLI whose surface is
127
+ the one the server has right now rather than the one the binary was compiled
128
+ against, except that discovered tools were filtered out of the CLI projection
129
+ with no declarative way in. Naming `transports: ['CLI']` on a connection makes
130
+ that server's tools commands; a connection without it still contributes
131
+ nothing, so exposure stays explicit.
132
+ - **`coerceJsonArgs`, `routeCliArgv`, `extractCliGlobalOptions` and
133
+ `CliArgumentError` are exported from `stitchkit/cli`.** `parseCliArgs`
134
+ deliberately leaves array and object values as strings for the pass that runs
135
+ next; a consumer that parses argv and sends the call itself needs both halves,
136
+ and reaching for the `stitchkit/tools` barrel to get one function pulls the MCP
137
+ and AI peers into a binary this entrypoint is careful to avoid.
138
+
139
+ ### Fixed
140
+
141
+ - **A stitchkit MCP surface is readable by the stitchkit MCP client again.**
142
+ `mountConnections` threw `Reference not found:
143
+ #/definitions/input/definitions/__schema0` against a server that is itself
144
+ built on stitchkit, and on one real surface of 205 tools five carried such a
145
+ reference — enough to lose the whole connection, because the mount was
146
+ all-or-nothing. Two defects underneath. The served document declared the
147
+ 2020-12 dialect (the SDK stamps it) while using draft-07's `definitions`
148
+ keyword, so any reader that registers subschemas from the keyword its dialect
149
+ names found nothing to resolve against; MCP metadata now moves to `$defs` and
150
+ carries its pointers with it. And definitions were nested one level deeper than
151
+ a reader looks, because namespacing wrapped each schema instead of prefixing
152
+ its definition names; they are hoisted to the document root now, `allOf`
153
+ merges included. The client also no longer believes a contradicted stamp, which
154
+ is how it reaches every stitchkit server published before this release. → ADR 0185
155
+ - **One unconvertible discovered tool no longer takes the connection down.**
156
+ `mountConnections` builds per tool, skips what it cannot build and names it —
157
+ through `onSkippedTool`, or a stderr line naming the connection, the tool and
158
+ the reason.
159
+
18
160
  ## [0.90.3] — 2026-09-15
19
161
 
20
162
  ### Added
@@ -3,16 +3,16 @@ import {
3
3
  AgentCodingToolLimitsSchema,
4
4
  AgentCodingToolPathAuthorizationSchema,
5
5
  createAgentCodingTools
6
- } from "./index-j7q0xj6d.js";
6
+ } from "./index-3yqgj323.js";
7
7
  import"./index-bn2cjajt.js";
8
8
  import"./index-gte38nbm.js";
9
9
  import"./index-kazec06k.js";
10
10
  import"./index-6k1937bx.js";
11
+ import"./index-8z9we758.js";
12
+ import"./index-fenaekmk.js";
13
+ import"./index-cby4ar3v.js";
11
14
  import"./index-scs3f1eg.js";
12
15
  import"./index-kzfs85xp.js";
13
- import"./index-kc6h6hg0.js";
14
- import"./index-r159gjwy.js";
15
- import"./index-cby4ar3v.js";
16
16
  import"./index-77fekveh.js";
17
17
  export {
18
18
  createAgentCodingTools,
@@ -6,7 +6,7 @@ import {
6
6
  composeAgentPrompt,
7
7
  createAgentRuntime,
8
8
  createAgentRuntimeEventSink
9
- } from "./index-f475yj00.js";
9
+ } from "./index-s208wab5.js";
10
10
  import"./index-p13mwz16.js";
11
11
  import"./index-y64k3s0h.js";
12
12
  import {
@@ -19,21 +19,21 @@ import {
19
19
  walkContainedFiles
20
20
  } from "./index-bn2cjajt.js";
21
21
  import"./index-7rkhw9ec.js";
22
- import"./index-44ht2790.js";
22
+ import"./index-8pjqv3zh.js";
23
23
  import"./index-vsbzgd7b.js";
24
24
  import"./index-f9mb610r.js";
25
25
  import"./index-2hryh65w.js";
26
26
  import"./index-kazec06k.js";
27
27
  import"./index-6k1937bx.js";
28
- import"./index-scs3f1eg.js";
29
28
  import"./index-zcgf3gqf.js";
30
29
  import"./index-7zbps32p.js";
31
- import"./index-kzfs85xp.js";
32
30
  import {
33
31
  defineRuntimeTool
34
- } from "./index-kc6h6hg0.js";
35
- import"./index-r159gjwy.js";
32
+ } from "./index-8z9we758.js";
33
+ import"./index-fenaekmk.js";
36
34
  import"./index-cby4ar3v.js";
35
+ import"./index-scs3f1eg.js";
36
+ import"./index-kzfs85xp.js";
37
37
  import"./index-77fekveh.js";
38
38
 
39
39
  // src/agent-runtime/harness-contract.ts
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createAgentCodingTools
3
- } from "./index-j7q0xj6d.js";
3
+ } from "./index-3yqgj323.js";
4
4
  import"./index-bn2cjajt.js";
5
5
  import {
6
6
  codingRefusal,
@@ -9,11 +9,11 @@ import {
9
9
  } from "./index-gte38nbm.js";
10
10
  import"./index-kazec06k.js";
11
11
  import"./index-6k1937bx.js";
12
+ import"./index-8z9we758.js";
13
+ import"./index-fenaekmk.js";
14
+ import"./index-cby4ar3v.js";
12
15
  import"./index-scs3f1eg.js";
13
16
  import"./index-kzfs85xp.js";
14
- import"./index-kc6h6hg0.js";
15
- import"./index-r159gjwy.js";
16
- import"./index-cby4ar3v.js";
17
17
  import"./index-77fekveh.js";
18
18
 
19
19
  // src/agent-runtime/sandbox-bubblewrap.ts
@@ -31,7 +31,7 @@ import {
31
31
  renderAgentStateSlots,
32
32
  repairedSearchCall,
33
33
  selectAgentHistory
34
- } from "./index-f475yj00.js";
34
+ } from "./index-s208wab5.js";
35
35
  import"./index-p13mwz16.js";
36
36
  import {
37
37
  AgentAdmissionEventSchema,
@@ -169,28 +169,28 @@ import {
169
169
  import {
170
170
  buildToolManifest,
171
171
  mountAgent
172
- } from "./index-gbqjt8jz.js";
172
+ } from "./index-83fafqw8.js";
173
173
  import"./index-7rkhw9ec.js";
174
- import"./index-wb15909q.js";
175
- import"./index-2hrfpw2c.js";
176
- import"./index-44ht2790.js";
174
+ import"./index-zsdgd1tz.js";
175
+ import"./index-1bnkzq95.js";
176
+ import"./index-8pjqv3zh.js";
177
177
  import"./index-vsbzgd7b.js";
178
178
  import"./index-f9mb610r.js";
179
179
  import"./index-2hryh65w.js";
180
180
  import"./index-kazec06k.js";
181
181
  import"./index-6k1937bx.js";
182
- import"./index-scs3f1eg.js";
183
182
  import {
184
183
  childSpan,
185
184
  createTraceContext
186
185
  } from "./index-zcgf3gqf.js";
187
186
  import"./index-7zbps32p.js";
188
- import"./index-kzfs85xp.js";
189
187
  import {
190
188
  defineRuntimeTool
191
- } from "./index-kc6h6hg0.js";
192
- import"./index-r159gjwy.js";
189
+ } from "./index-8z9we758.js";
190
+ import"./index-fenaekmk.js";
193
191
  import"./index-cby4ar3v.js";
192
+ import"./index-scs3f1eg.js";
193
+ import"./index-kzfs85xp.js";
194
194
  import {
195
195
  executableAgentRuntimeTools
196
196
  } from "./index-77fekveh.js";
package/dist/cli.d.ts CHANGED
@@ -17,9 +17,22 @@
17
17
  * and point your app's `package.json` `bin` at it.
18
18
  */
19
19
  export { type CliConfig, type CliSurfaceSource, createCli } from './tools/cli.js';
20
- export { type CliRunOptions, type ParsedCliArgs, parseCliArgs } from './tools/cli-args.js';
20
+ export { CliArgumentError, type CliArgvRoute, type CliGlobalOptionsParse, type CliResultView, type CliRunOptions, extractCliGlobalOptions, type ParsedCliArgs, parseCliArgs, routeCliArgv, } from './tools/cli-args.js';
21
21
  export { type CliCommandContext, type CliCommandDefinition, type CliCommandDefinitionBase, type CliCommandDefinitionWithOutput, type CliCommandDefinitionWithoutOutput, defineCliCommand, } from './tools/cli-command.js';
22
22
  export { type CliWriters, DEFAULT_EXIT_CODES, type EmitOptions, type ExitCodeMap, emitResult, } from './tools/cli-format.js';
23
+ export { type CliInstallerConfig, renderCliInstaller, } from './tools/cli-installer.js';
24
+ export { assertCliPublishable, type CliBuildAsset, CliBuildAssetSchema, type CliBuildManifest, CliBuildManifestSchema, type CliBuildStamp, CliBuildStampSchema, type CliBuildTarget, CliBuildTargetSchema, currentCliBuildTarget, formatCliBuildStamp, selectCliBuildAsset, } from './tools/cli-manifest.js';
23
25
  export type { CliPresentationPolicyConfig } from './tools/cli-policy.js';
26
+ export { CliProfileError, type CliProfileStore, type CliProfileStoreConfig, createCliProfileStore, type ResolvedCliProfile, } from './tools/cli-profile.js';
27
+ export { type AppliedCliUpdate, applyCliUpdate, type CliUpdateApplyConfig, type CliUpdateCheck, type CliUpdateCheckConfig, checkCliUpdate, compareCliVersions, } from './tools/cli-update.js';
28
+ export { type CliViewOutput, renderCliView } from './tools/cli-view.js';
24
29
  export { type CliWaitConfig, type PollParams, pollUntilDone } from './tools/cli-wait.js';
30
+ /**
31
+ * The second half of `parseCliArgs`. The parser leaves array and object values
32
+ * as strings on purpose, because `executeToolMethod` runs this pass next; a
33
+ * consumer that parses argv and then sends the call itself needs both halves,
34
+ * and reaching for the `stitchkit/tools` barrel to get one function would pull
35
+ * the MCP and AI peers into a binary this entrypoint keeps free of them.
36
+ */
37
+ export { coerceJsonArgs } from './tools/coerce.js';
25
38
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,iCAAiC,EACtC,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,UAAU,EACf,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,uBAAuB,EACvB,KAAK,aAAa,EAClB,YAAY,EACZ,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,iCAAiC,EACtC,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,UAAU,EACf,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,kBAAkB,EACvB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,cAAc,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,gBAAgB,EACrB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtF;;;;;;GAMG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}