@pi-unipi/subagents 2.4.0 → 2.4.1

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 (66) hide show
  1. package/README.md +3 -1
  2. package/dist/agent-manager.d.ts +81 -0
  3. package/dist/agent-manager.d.ts.map +1 -0
  4. package/dist/agent-manager.js +292 -0
  5. package/dist/agent-manager.js.map +1 -0
  6. package/dist/agent-runner.d.ts +51 -0
  7. package/dist/agent-runner.d.ts.map +1 -0
  8. package/dist/agent-runner.js +262 -0
  9. package/dist/agent-runner.js.map +1 -0
  10. package/dist/config.d.ts +24 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +132 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/conversation-viewer.d.ts +40 -0
  15. package/dist/conversation-viewer.d.ts.map +1 -0
  16. package/dist/conversation-viewer.js +276 -0
  17. package/dist/conversation-viewer.js.map +1 -0
  18. package/dist/core-compat.d.ts +14 -0
  19. package/dist/core-compat.d.ts.map +1 -0
  20. package/dist/core-compat.js +24 -0
  21. package/dist/core-compat.js.map +1 -0
  22. package/dist/custom-agents.d.ts +14 -0
  23. package/dist/custom-agents.d.ts.map +1 -0
  24. package/dist/custom-agents.js +106 -0
  25. package/dist/custom-agents.js.map +1 -0
  26. package/dist/file-lock.d.ts +42 -0
  27. package/dist/file-lock.d.ts.map +1 -0
  28. package/dist/file-lock.js +91 -0
  29. package/dist/file-lock.js.map +1 -0
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +751 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/model-resolver.d.ts +19 -0
  35. package/dist/model-resolver.d.ts.map +1 -0
  36. package/dist/model-resolver.js +61 -0
  37. package/dist/model-resolver.js.map +1 -0
  38. package/dist/types.d.ts +96 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +47 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/widget.d.ts +56 -0
  43. package/dist/widget.d.ts.map +1 -0
  44. package/dist/widget.js +396 -0
  45. package/dist/widget.js.map +1 -0
  46. package/package.json +10 -6
  47. package/src/__tests__/badge-generation.test.ts +0 -315
  48. package/src/__tests__/config.test.ts +0 -240
  49. package/src/__tests__/esc-propagation.test.ts +0 -162
  50. package/src/__tests__/file-lock.test.ts +0 -244
  51. package/src/__tests__/shutdown-stale-ctx.test.ts +0 -185
  52. package/src/__tests__/workflow-integration.test.ts +0 -334
  53. package/src/agent-manager.ts +0 -334
  54. package/src/agent-runner.ts +0 -329
  55. package/src/config.ts +0 -147
  56. package/src/conversation-viewer.ts +0 -299
  57. package/src/custom-agents.ts +0 -118
  58. package/src/file-lock.ts +0 -102
  59. package/src/index.ts +0 -862
  60. package/src/model-resolver.ts +0 -79
  61. package/src/prompts.ts +0 -39
  62. package/src/skills/explore/SKILL.md +0 -32
  63. package/src/skills/work/SKILL.md +0 -40
  64. package/src/types.ts +0 -146
  65. package/src/widget.ts +0 -454
  66. package/tsconfig.json +0 -19
package/README.md CHANGED
@@ -99,7 +99,9 @@ Create markdown files defining agent behavior:
99
99
  |---------|---------|--------------|
100
100
  | `enabled` | true | Enable/disable subagents |
101
101
  | `maxConcurrent` | 3 | Max agents running at once |
102
- | `types.{name}.enabled` | true | Toggle agent types |
102
+ | `types.{name}.enabled` | true | Disable built-in or custom agent types. Disabled types are omitted from tool guidance and rejected before queueing. |
103
+
104
+ For custom agents, JSON configuration and Markdown frontmatter are both enforced: the type can run only when neither source sets `enabled: false`. Configuration is loaded when the extension starts, so reload the session after changing enablement.
103
105
 
104
106
  ## License
105
107
 
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @pi-unipi/subagents — Agent manager
3
+ *
4
+ * Tracks agents, manages concurrency queue, handles spawn/resume/abort.
5
+ * Background agents subject to concurrency limit. Foreground bypass queue.
6
+ */
7
+ import type { Model } from "@earendil-works/pi-ai";
8
+ import type { AgentSession, ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
9
+ import { type ToolActivity } from "./agent-runner.js";
10
+ import { type ModelRegistry } from "./model-resolver.js";
11
+ import type { AgentRecord, AgentConfig, AgentType, ThinkingLevel, SubagentsConfig } from "./types.js";
12
+ import { FileLock } from "./file-lock.js";
13
+ export type OnAgentComplete = (record: AgentRecord) => void;
14
+ export type OnAgentStart = (record: AgentRecord) => void;
15
+ interface SpawnOptions {
16
+ description: string;
17
+ model?: Model<any>;
18
+ modelInput?: string;
19
+ modelRegistry?: ModelRegistry;
20
+ thinkingLevel?: ThinkingLevel;
21
+ maxTurns?: number;
22
+ isolated?: boolean;
23
+ inheritContext?: boolean;
24
+ isBackground?: boolean;
25
+ onToolActivity?: (activity: ToolActivity) => void;
26
+ onTextDelta?: (delta: string, fullText: string) => void;
27
+ onSessionCreated?: (session: AgentSession) => void;
28
+ onTurnEnd?: (turnCount: number) => void;
29
+ }
30
+ export declare class AgentManager {
31
+ private agents;
32
+ private cleanupInterval;
33
+ private onComplete?;
34
+ private onStart?;
35
+ private maxConcurrent;
36
+ private customAgents;
37
+ private typeSettings;
38
+ /** Per-file transparent locking for write agents. */
39
+ readonly fileLock: FileLock;
40
+ /** Queue of background agents waiting to start. */
41
+ private queue;
42
+ /** Number of currently running background agents. */
43
+ private runningBackground;
44
+ constructor(onComplete?: OnAgentComplete, maxConcurrent?: number, onStart?: OnAgentStart, typeSettings?: SubagentsConfig["types"], agentsCwd?: string);
45
+ /** Get resolved agent config for a type. */
46
+ getAgentConfig(type: AgentType): AgentConfig | undefined;
47
+ /** Public agent types known from built-ins, custom files, or JSON config. */
48
+ getKnownTypes(): string[];
49
+ /** A type is enabled only when both JSON config and agent frontmatter allow it. */
50
+ isTypeEnabled(type: AgentType): boolean;
51
+ private assertTypeEnabled;
52
+ setMaxConcurrent(n: number): void;
53
+ getMaxConcurrent(): number;
54
+ /**
55
+ * Spawn an agent. Returns ID immediately for background, waits for foreground.
56
+ */
57
+ spawn(pi: ExtensionAPI, ctx: ExtensionContext, type: AgentType, prompt: string, options: SpawnOptions): string;
58
+ /** Actually start an agent. */
59
+ private startAgent;
60
+ /** Start queued agents up to concurrency limit. */
61
+ private drainQueue;
62
+ /**
63
+ * Spawn and wait (foreground).
64
+ */
65
+ spawnAndWait(pi: ExtensionAPI, ctx: ExtensionContext, type: AgentType, prompt: string, options: Omit<SpawnOptions, "isBackground">): Promise<AgentRecord>;
66
+ getRecord(id: string): AgentRecord | undefined;
67
+ listAgents(): AgentRecord[];
68
+ abort(id: string): boolean;
69
+ /** Abort all agents (for ESC propagation). */
70
+ abortAll(): number;
71
+ /** Wait for all agents. */
72
+ waitForAll(): Promise<void>;
73
+ /** Whether any agents running or queued. */
74
+ hasRunning(): boolean;
75
+ /** Remove completed records. */
76
+ clearCompleted(): void;
77
+ private cleanup;
78
+ dispose(): void;
79
+ }
80
+ export {};
81
+ //# sourceMappingURL=agent-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.d.ts","sourceRoot":"","sources":["../src/agent-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * @pi-unipi/subagents — Agent manager
3
+ *
4
+ * Tracks agents, manages concurrency queue, handles spawn/resume/abort.
5
+ * Background agents subject to concurrency limit. Foreground bypass queue.
6
+ */
7
+ import { randomUUID } from "node:crypto";
8
+ import { runAgent } from "./agent-runner.js";
9
+ import { resolveModel } from "./model-resolver.js";
10
+ import { BUILTIN_CONFIGS } from "./types.js";
11
+ import { loadCustomAgents } from "./custom-agents.js";
12
+ import { FileLock } from "./file-lock.js";
13
+ /** Default max concurrent background agents. */
14
+ const DEFAULT_MAX_CONCURRENT = 4;
15
+ export class AgentManager {
16
+ agents = new Map();
17
+ cleanupInterval;
18
+ onComplete;
19
+ onStart;
20
+ maxConcurrent;
21
+ customAgents;
22
+ typeSettings;
23
+ /** Per-file transparent locking for write agents. */
24
+ fileLock = new FileLock();
25
+ /** Queue of background agents waiting to start. */
26
+ queue = [];
27
+ /** Number of currently running background agents. */
28
+ runningBackground = 0;
29
+ constructor(onComplete, maxConcurrent = DEFAULT_MAX_CONCURRENT, onStart, typeSettings = {}, agentsCwd = process.cwd()) {
30
+ this.onComplete = onComplete;
31
+ this.onStart = onStart;
32
+ this.maxConcurrent = maxConcurrent;
33
+ this.typeSettings = typeSettings;
34
+ this.customAgents = loadCustomAgents(agentsCwd);
35
+ this.cleanupInterval = setInterval(() => this.cleanup(), 60_000);
36
+ }
37
+ /** Get resolved agent config for a type. */
38
+ getAgentConfig(type) {
39
+ return this.customAgents.get(type) ?? BUILTIN_CONFIGS[type];
40
+ }
41
+ /** Public agent types known from built-ins, custom files, or JSON config. */
42
+ getKnownTypes() {
43
+ return [...new Set([
44
+ ...Object.keys(BUILTIN_CONFIGS).filter((type) => type !== "name-gen"),
45
+ ...this.customAgents.keys(),
46
+ ...Object.keys(this.typeSettings),
47
+ ])];
48
+ }
49
+ /** A type is enabled only when both JSON config and agent frontmatter allow it. */
50
+ isTypeEnabled(type) {
51
+ const agentConfig = this.getAgentConfig(type);
52
+ return this.typeSettings[type]?.enabled !== false && agentConfig?.enabled !== false;
53
+ }
54
+ assertTypeEnabled(type) {
55
+ if (!this.isTypeEnabled(type)) {
56
+ throw new Error(`Agent type "${type}" is disabled by configuration.`);
57
+ }
58
+ }
59
+ setMaxConcurrent(n) {
60
+ this.maxConcurrent = Math.max(1, n);
61
+ this.drainQueue();
62
+ }
63
+ getMaxConcurrent() {
64
+ return this.maxConcurrent;
65
+ }
66
+ /**
67
+ * Spawn an agent. Returns ID immediately for background, waits for foreground.
68
+ */
69
+ spawn(pi, ctx, type, prompt, options) {
70
+ // Reject before allocating a record or queue entry. This applies equally to
71
+ // foreground and background spawns and avoids ghost disabled agents.
72
+ this.assertTypeEnabled(type);
73
+ const id = randomUUID().slice(0, 17);
74
+ const abortController = new AbortController();
75
+ const record = {
76
+ id,
77
+ type,
78
+ description: options.description,
79
+ status: options.isBackground ? "queued" : "running",
80
+ toolUses: 0,
81
+ startedAt: Date.now(),
82
+ abortController,
83
+ lockedFiles: new Set(),
84
+ };
85
+ this.agents.set(id, record);
86
+ const args = { pi, ctx, type, prompt, options };
87
+ if (options.isBackground && this.runningBackground >= this.maxConcurrent) {
88
+ this.queue.push({ id, args });
89
+ return id;
90
+ }
91
+ this.startAgent(id, record, args);
92
+ return id;
93
+ }
94
+ /** Actually start an agent. */
95
+ startAgent(id, record, { pi, ctx, type, prompt, options }) {
96
+ record.status = "running";
97
+ record.startedAt = Date.now();
98
+ if (options.isBackground)
99
+ this.runningBackground++;
100
+ this.onStart?.(record);
101
+ const agentConfig = this.getAgentConfig(type);
102
+ // Resolve model: explicit input > per-agent config > parent model.
103
+ let model = options.model;
104
+ const modelInput = options.modelInput ?? agentConfig?.model;
105
+ if (!model && modelInput && options.modelRegistry) {
106
+ const resolved = resolveModel(modelInput, options.modelRegistry);
107
+ if (typeof resolved === "string") {
108
+ // Error message — return early with error
109
+ record.status = "error";
110
+ record.error = resolved;
111
+ record.completedAt = Date.now();
112
+ if (options.isBackground) {
113
+ this.runningBackground--;
114
+ this.onComplete?.(record);
115
+ }
116
+ return;
117
+ }
118
+ model = resolved;
119
+ }
120
+ const promise = runAgent(ctx, type, prompt, {
121
+ pi,
122
+ model,
123
+ agentConfig,
124
+ maxTurns: options.maxTurns ?? agentConfig?.maxTurns,
125
+ isolated: options.isolated ?? agentConfig?.isolated,
126
+ inheritContext: options.inheritContext ?? agentConfig?.inheritContext,
127
+ thinkingLevel: options.thinkingLevel ?? agentConfig?.thinking,
128
+ signal: record.abortController.signal,
129
+ onToolActivity: (activity) => {
130
+ if (activity.type === "end")
131
+ record.toolUses++;
132
+ options.onToolActivity?.(activity);
133
+ },
134
+ onTurnEnd: options.onTurnEnd,
135
+ onTextDelta: options.onTextDelta,
136
+ onSessionCreated: (session) => {
137
+ record.session = session;
138
+ options.onSessionCreated?.(session);
139
+ },
140
+ })
141
+ .then(({ responseText, session, aborted, steered }) => {
142
+ if (record.status !== "stopped") {
143
+ record.status = aborted ? "aborted" : steered ? "completed" : "completed";
144
+ }
145
+ record.result = responseText;
146
+ record.session = session;
147
+ record.completedAt ??= Date.now();
148
+ // Release any held file locks
149
+ this.fileLock.releaseAll(id);
150
+ record.lockedFiles.clear();
151
+ if (options.isBackground) {
152
+ this.runningBackground--;
153
+ this.onComplete?.(record);
154
+ this.drainQueue();
155
+ }
156
+ return responseText;
157
+ })
158
+ .catch((err) => {
159
+ if (record.status !== "stopped") {
160
+ record.status = "error";
161
+ }
162
+ record.error = err instanceof Error ? err.message : String(err);
163
+ record.completedAt ??= Date.now();
164
+ // Release any held file locks
165
+ this.fileLock.releaseAll(id);
166
+ record.lockedFiles.clear();
167
+ if (options.isBackground) {
168
+ this.runningBackground--;
169
+ this.onComplete?.(record);
170
+ this.drainQueue();
171
+ }
172
+ return "";
173
+ });
174
+ record.promise = promise;
175
+ }
176
+ /** Start queued agents up to concurrency limit. */
177
+ drainQueue() {
178
+ while (this.queue.length > 0 && this.runningBackground < this.maxConcurrent) {
179
+ const next = this.queue.shift();
180
+ const record = this.agents.get(next.id);
181
+ if (!record || record.status !== "queued")
182
+ continue;
183
+ this.startAgent(next.id, record, next.args);
184
+ }
185
+ }
186
+ /**
187
+ * Spawn and wait (foreground).
188
+ */
189
+ async spawnAndWait(pi, ctx, type, prompt, options) {
190
+ const id = this.spawn(pi, ctx, type, prompt, { ...options, isBackground: false });
191
+ const record = this.agents.get(id);
192
+ await record.promise;
193
+ return record;
194
+ }
195
+ getRecord(id) {
196
+ return this.agents.get(id);
197
+ }
198
+ listAgents() {
199
+ return [...this.agents.values()].sort((a, b) => b.startedAt - a.startedAt);
200
+ }
201
+ abort(id) {
202
+ const record = this.agents.get(id);
203
+ if (!record)
204
+ return false;
205
+ if (record.status === "queued") {
206
+ this.queue = this.queue.filter((q) => q.id !== id);
207
+ record.status = "stopped";
208
+ record.completedAt = Date.now();
209
+ return true;
210
+ }
211
+ if (record.status !== "running")
212
+ return false;
213
+ record.abortController?.abort();
214
+ record.status = "stopped";
215
+ record.completedAt = Date.now();
216
+ this.fileLock.releaseAll(id);
217
+ record.lockedFiles.clear();
218
+ return true;
219
+ }
220
+ /** Abort all agents (for ESC propagation). */
221
+ abortAll() {
222
+ let count = 0;
223
+ for (const queued of this.queue) {
224
+ const record = this.agents.get(queued.id);
225
+ if (record) {
226
+ record.status = "stopped";
227
+ record.completedAt = Date.now();
228
+ count++;
229
+ }
230
+ }
231
+ this.queue = [];
232
+ for (const record of this.agents.values()) {
233
+ if (record.status === "running") {
234
+ record.abortController?.abort();
235
+ record.status = "stopped";
236
+ record.completedAt = Date.now();
237
+ count++;
238
+ }
239
+ }
240
+ this.fileLock.clear();
241
+ return count;
242
+ }
243
+ /** Wait for all agents. */
244
+ async waitForAll() {
245
+ while (true) {
246
+ this.drainQueue();
247
+ const pending = [...this.agents.values()]
248
+ .filter((r) => r.status === "running" || r.status === "queued")
249
+ .map((r) => r.promise)
250
+ .filter(Boolean);
251
+ if (pending.length === 0)
252
+ break;
253
+ await Promise.allSettled(pending);
254
+ }
255
+ }
256
+ /** Whether any agents running or queued. */
257
+ hasRunning() {
258
+ return [...this.agents.values()].some((r) => r.status === "running" || r.status === "queued");
259
+ }
260
+ /** Remove completed records. */
261
+ clearCompleted() {
262
+ for (const [id, record] of this.agents) {
263
+ if (record.status === "running" || record.status === "queued")
264
+ continue;
265
+ record.session?.dispose?.();
266
+ record.session = undefined;
267
+ this.agents.delete(id);
268
+ }
269
+ }
270
+ cleanup() {
271
+ const cutoff = Date.now() - 10 * 60_000;
272
+ for (const [id, record] of this.agents) {
273
+ if (record.status === "running" || record.status === "queued")
274
+ continue;
275
+ if ((record.completedAt ?? 0) >= cutoff)
276
+ continue;
277
+ record.session?.dispose?.();
278
+ record.session = undefined;
279
+ this.agents.delete(id);
280
+ }
281
+ }
282
+ dispose() {
283
+ clearInterval(this.cleanupInterval);
284
+ this.queue = [];
285
+ this.abortAll();
286
+ for (const record of this.agents.values()) {
287
+ record.session?.dispose();
288
+ }
289
+ this.agents.clear();
290
+ }
291
+ }
292
+ //# sourceMappingURL=agent-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.js","sourceRoot":"","sources":["../src/agent-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @pi-unipi/subagents — Agent runner
3
+ *
4
+ * Creates sessions, runs agents, collects results.
5
+ * Forwards abort signals for ESC propagation.
6
+ */
7
+ import type { Model } from "@earendil-works/pi-ai";
8
+ import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
9
+ import { type AgentSession, type ExtensionAPI } from "@earendil-works/pi-coding-agent";
10
+ import { type AgentConfig, type AgentType, type ThinkingLevel } from "./types.js";
11
+ export declare function getDefaultMaxTurns(): number | undefined;
12
+ export declare function setDefaultMaxTurns(n: number | undefined): void;
13
+ export declare function getGraceTurns(): number;
14
+ export declare function setGraceTurns(n: number): void;
15
+ /** Tool activity info. */
16
+ export interface ToolActivity {
17
+ type: "start" | "end";
18
+ toolName: string;
19
+ }
20
+ /** Options for running an agent. */
21
+ export interface RunOptions {
22
+ pi: ExtensionAPI;
23
+ model?: Model<any>;
24
+ agentConfig?: AgentConfig;
25
+ maxTurns?: number;
26
+ signal?: AbortSignal;
27
+ isolated?: boolean;
28
+ inheritContext?: boolean;
29
+ thinkingLevel?: ThinkingLevel;
30
+ cwd?: string;
31
+ onToolActivity?: (activity: ToolActivity) => void;
32
+ onTextDelta?: (delta: string, fullText: string) => void;
33
+ onSessionCreated?: (session: AgentSession) => void;
34
+ onTurnEnd?: (turnCount: number) => void;
35
+ }
36
+ /** Result from running an agent. */
37
+ export interface RunResult {
38
+ responseText: string;
39
+ session: AgentSession;
40
+ aborted: boolean;
41
+ steered: boolean;
42
+ }
43
+ /**
44
+ * Run an agent session.
45
+ */
46
+ export declare function runAgent(ctx: ExtensionContext, type: AgentType, prompt: string, options: RunOptions): Promise<RunResult>;
47
+ /**
48
+ * Get conversation text from a session.
49
+ */
50
+ export declare function getAgentConversation(session: AgentSession): string;
51
+ //# sourceMappingURL=agent-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.d.ts","sourceRoot":"","sources":["../src/agent-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EACL,KAAK,YAAY,EAIjB,KAAK,YAAY,EAIlB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAmB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAWnG,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE9D;AAKD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,0BAA0B;AAC1B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAiED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,SAAS,CAAC,CAqIpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAuClE"}