@cat-factory/contracts 0.7.2 → 0.8.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/dist/agent-presentation.d.ts +51 -0
- package/dist/agent-presentation.d.ts.map +1 -0
- package/dist/agent-presentation.js +46 -0
- package/dist/agent-presentation.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
/** The palette section an agent groups under. Mirrors the frontend `AGENT_CATEGORIES`. */
|
|
3
|
+
export declare const agentCategorySchema: v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>;
|
|
4
|
+
export type AgentCategory = v.InferOutput<typeof agentCategorySchema>;
|
|
5
|
+
/** Display metadata for one agent kind (the wire shape sent to the SPA). */
|
|
6
|
+
export declare const agentPresentationSchema: v.ObjectSchema<{
|
|
7
|
+
/** Human label, e.g. `Security Auditor`. */
|
|
8
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 80, undefined>]>;
|
|
9
|
+
/** Icon id (e.g. an `i-lucide-*` name). */
|
|
10
|
+
readonly icon: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
11
|
+
/** Accent colour (CSS hex/keyword). */
|
|
12
|
+
readonly color: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>;
|
|
13
|
+
/** One-line description shown in the palette / inspector. */
|
|
14
|
+
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
15
|
+
/** Palette section; omitted ⇒ the kind is not a standalone palette block (e.g. a companion). */
|
|
16
|
+
readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
|
|
17
|
+
/**
|
|
18
|
+
* Id of a dedicated result-view component to open instead of the generic prose panel
|
|
19
|
+
* (e.g. `generic-structured` for a custom structured agent). Omitted ⇒ the generic
|
|
20
|
+
* step-detail panel.
|
|
21
|
+
*/
|
|
22
|
+
readonly resultView: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 80, undefined>]>, undefined>;
|
|
23
|
+
}, undefined>;
|
|
24
|
+
export type AgentPresentation = v.InferOutput<typeof agentPresentationSchema>;
|
|
25
|
+
/** A registered agent kind's id + presentation + whether it runs in a container — the
|
|
26
|
+
* snapshot entry the SPA merges into its palette catalog. */
|
|
27
|
+
export declare const customAgentKindSchema: v.ObjectSchema<{
|
|
28
|
+
readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
29
|
+
readonly presentation: v.ObjectSchema<{
|
|
30
|
+
/** Human label, e.g. `Security Auditor`. */
|
|
31
|
+
readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 80, undefined>]>;
|
|
32
|
+
/** Icon id (e.g. an `i-lucide-*` name). */
|
|
33
|
+
readonly icon: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
|
|
34
|
+
/** Accent colour (CSS hex/keyword). */
|
|
35
|
+
readonly color: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>;
|
|
36
|
+
/** One-line description shown in the palette / inspector. */
|
|
37
|
+
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
38
|
+
/** Palette section; omitted ⇒ the kind is not a standalone palette block (e.g. a companion). */
|
|
39
|
+
readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
|
|
40
|
+
/**
|
|
41
|
+
* Id of a dedicated result-view component to open instead of the generic prose panel
|
|
42
|
+
* (e.g. `generic-structured` for a custom structured agent). Omitted ⇒ the generic
|
|
43
|
+
* step-detail panel.
|
|
44
|
+
*/
|
|
45
|
+
readonly resultView: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 80, undefined>]>, undefined>;
|
|
46
|
+
}, undefined>;
|
|
47
|
+
/** Whether the kind runs in a container (vs an inline LLM call). */
|
|
48
|
+
readonly container: v.BooleanSchema<undefined>;
|
|
49
|
+
}, undefined>;
|
|
50
|
+
export type CustomAgentKind = v.InferOutput<typeof customAgentKindSchema>;
|
|
51
|
+
//# sourceMappingURL=agent-presentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-presentation.d.ts","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAW5B,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,qFAO9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAErE,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB;IAClC,4CAA4C;;IAE5C,2CAA2C;;IAE3C,uCAAuC;;IAEvC,6DAA6D;;IAE7D,gGAAgG;;IAEhG;;;;OAIG;;aAEH,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;6DAC6D;AAC7D,eAAO,MAAM,qBAAqB;;;QArBhC,4CAA4C;;QAE5C,2CAA2C;;QAE3C,uCAAuC;;QAEvC,6DAA6D;;QAE7D,gGAAgG;;QAEhG;;;;WAIG;;;IAUH,oEAAoE;;aAEpE,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { agentKindSchema } from './primitives.js';
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Presentation metadata for an agent kind — the display fields the SPA palette,
|
|
5
|
+
// timeline and result-view host render. A registered (custom) agent supplies this so
|
|
6
|
+
// it becomes a first-class palette block with the right icon/label/category instead of
|
|
7
|
+
// the generic fallback; the server serialises the registered kinds' presentation into
|
|
8
|
+
// the workspace snapshot so the frontend catalog stops being a hand-synced mirror.
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/** The palette section an agent groups under. Mirrors the frontend `AGENT_CATEGORIES`. */
|
|
11
|
+
export const agentCategorySchema = v.picklist([
|
|
12
|
+
'review',
|
|
13
|
+
'design',
|
|
14
|
+
'build',
|
|
15
|
+
'test',
|
|
16
|
+
'docs',
|
|
17
|
+
'gates',
|
|
18
|
+
]);
|
|
19
|
+
/** Display metadata for one agent kind (the wire shape sent to the SPA). */
|
|
20
|
+
export const agentPresentationSchema = v.object({
|
|
21
|
+
/** Human label, e.g. `Security Auditor`. */
|
|
22
|
+
label: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(80)),
|
|
23
|
+
/** Icon id (e.g. an `i-lucide-*` name). */
|
|
24
|
+
icon: v.pipe(v.string(), v.minLength(1), v.maxLength(120)),
|
|
25
|
+
/** Accent colour (CSS hex/keyword). */
|
|
26
|
+
color: v.pipe(v.string(), v.minLength(1), v.maxLength(40)),
|
|
27
|
+
/** One-line description shown in the palette / inspector. */
|
|
28
|
+
description: v.pipe(v.string(), v.maxLength(500)),
|
|
29
|
+
/** Palette section; omitted ⇒ the kind is not a standalone palette block (e.g. a companion). */
|
|
30
|
+
category: v.optional(agentCategorySchema),
|
|
31
|
+
/**
|
|
32
|
+
* Id of a dedicated result-view component to open instead of the generic prose panel
|
|
33
|
+
* (e.g. `generic-structured` for a custom structured agent). Omitted ⇒ the generic
|
|
34
|
+
* step-detail panel.
|
|
35
|
+
*/
|
|
36
|
+
resultView: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(80))),
|
|
37
|
+
});
|
|
38
|
+
/** A registered agent kind's id + presentation + whether it runs in a container — the
|
|
39
|
+
* snapshot entry the SPA merges into its palette catalog. */
|
|
40
|
+
export const customAgentKindSchema = v.object({
|
|
41
|
+
kind: agentKindSchema,
|
|
42
|
+
presentation: agentPresentationSchema,
|
|
43
|
+
/** Whether the kind runs in a container (vs an inline LLM call). */
|
|
44
|
+
container: v.boolean(),
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=agent-presentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-presentation.js","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,8EAA8E;AAC9E,gFAAgF;AAChF,qFAAqF;AACrF,uFAAuF;AACvF,sFAAsF;AACtF,mFAAmF;AACnF,8EAA8E;AAE9E,0FAA0F;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC5C,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC,CAAA;AAGF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,4CAA4C;IAC5C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACpE,2CAA2C;IAC3C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1D,6DAA6D;IAC7D,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjD,gGAAgG;IAChG,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACzC;;;;OAIG;IACH,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5E,CAAC,CAAA;AAGF;6DAC6D;AAC7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,eAAe;IACrB,YAAY,EAAE,uBAAuB;IACrC,oEAAoE;IACpE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;CACvB,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export * from './merge.js';
|
|
|
23
23
|
export * from './consensus.js';
|
|
24
24
|
export * from './release.js';
|
|
25
25
|
export * from './agent-config.js';
|
|
26
|
+
export * from './agent-presentation.js';
|
|
26
27
|
export * from './testing.js';
|
|
27
28
|
export * from './provisioning.js';
|
|
28
29
|
export * from './model-defaults.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,7 @@ export * from './merge.js';
|
|
|
23
23
|
export * from './consensus.js';
|
|
24
24
|
export * from './release.js';
|
|
25
25
|
export * from './agent-config.js';
|
|
26
|
+
export * from './agent-presentation.js';
|
|
26
27
|
export * from './testing.js';
|
|
27
28
|
export * from './provisioning.js';
|
|
28
29
|
export * from './model-defaults.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA"}
|