@spoons-and-mirrors/iam 0.1.2 → 0.1.3
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 +31 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -91
- package/dist/prompt.d.ts +12 -19
- package/dist/prompt.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,17 +5,42 @@ Lets parallel subagents talk to each other. No configuration needed — just ins
|
|
|
5
5
|
## What It Does
|
|
6
6
|
|
|
7
7
|
When you spawn multiple agents with the `task` tool, they can:
|
|
8
|
-
- **Announce** what they're working on
|
|
9
|
-
- **
|
|
10
|
-
- **Message** each other to coordinate work
|
|
8
|
+
- **Announce** what they're working on (and see all parallel agents)
|
|
9
|
+
- **Broadcast** messages to one, some, or all agents
|
|
11
10
|
- Get **notified** when new messages arrive
|
|
12
11
|
|
|
13
12
|
## How It Works
|
|
14
13
|
|
|
15
|
-
Agents get friendly names (agentA, agentB, ...) and automatically discover each other.
|
|
14
|
+
Agents get friendly names (agentA, agentB, ...) and automatically discover each other.
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
When an agent announces, the response shows all other parallel agents — whether they've announced yet or not. This gives agents instant awareness of who's working alongside them. Agents can re-announce to update their status.
|
|
17
|
+
|
|
18
|
+
Agents who haven't announced are told they MUST announce before continuing.
|
|
19
|
+
|
|
20
|
+
When an agent completes their task, they're encouraged to broadcast a completion message so others know.
|
|
21
|
+
|
|
22
|
+
## Actions
|
|
23
|
+
|
|
24
|
+
| Action | Description |
|
|
25
|
+
|--------|-------------|
|
|
26
|
+
| `announce` | Declare what you're working on. Shows all parallel agents. Can re-announce to update. |
|
|
27
|
+
| `read` | Read your inbox (marks messages as read). |
|
|
28
|
+
| `broadcast` | Send a message. Use `to` for specific agent(s), or omit for all. |
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
# Announce what you're doing (also shows parallel agents)
|
|
34
|
+
action="announce", message="Refactoring the auth module"
|
|
35
|
+
|
|
36
|
+
# Message everyone
|
|
37
|
+
action="broadcast", message="Found a bug in config.ts, heads up"
|
|
38
|
+
|
|
39
|
+
# Message specific agent(s)
|
|
40
|
+
action="broadcast", to="agentA", message="Can you check auth.ts?"
|
|
41
|
+
action="broadcast", to="agentA,agentC", message="Sync up on API changes"
|
|
42
|
+
```
|
|
18
43
|
|
|
19
44
|
## Debug Logs
|
|
20
45
|
|
|
21
|
-
For troubleshooting, check `.logs/iam.log` (clears on restart).
|
|
46
|
+
For troubleshooting, check `.logs/iam.log` (clears on restart).
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAwJjD,QAAA,MAAM,MAAM,EAAE,MAoKb,CAAA;AAED,eAAe,MAAM,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -5,86 +5,83 @@ import { tool } from "@opencode-ai/plugin";
|
|
|
5
5
|
var TOOL_DESCRIPTION = `Inter-agent messaging. Use this to communicate with other parallel agents (task tools).
|
|
6
6
|
|
|
7
7
|
Actions:
|
|
8
|
-
- "
|
|
9
|
-
- "read": Read
|
|
10
|
-
- "
|
|
11
|
-
- "announce": Announce what you're working on (requires 'message' parameter)`;
|
|
8
|
+
- "announce": Announce what you're working on (do this first!). Shows all parallel agents. You can re-announce to update your status.
|
|
9
|
+
- "read": Read your messages (marks them as read)
|
|
10
|
+
- "broadcast": Send a message (requires 'message', optional 'to')`;
|
|
12
11
|
var ARG_DESCRIPTIONS = {
|
|
13
12
|
action: "Action to perform",
|
|
14
|
-
to: "Recipient
|
|
15
|
-
message: "
|
|
13
|
+
to: "Recipient(s): 'agentA', 'agentA,agentC', or 'all' (default: all)",
|
|
14
|
+
message: "Your announcement or message content"
|
|
16
15
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Agents will appear here when:
|
|
20
|
-
- Parallel tasks are spawned by the same parent
|
|
21
|
-
- Another agent sends you a message`;
|
|
22
|
-
function sessionsResult(agents) {
|
|
23
|
-
const lines = [`Agents you can message:
|
|
24
|
-
`];
|
|
16
|
+
function formatAgentList(agents) {
|
|
17
|
+
const lines = [];
|
|
25
18
|
for (const agent of agents) {
|
|
26
19
|
if (agent.description) {
|
|
27
|
-
lines.push(
|
|
20
|
+
lines.push(`• ${agent.alias} is working on: ${agent.description}`);
|
|
28
21
|
} else {
|
|
29
|
-
lines.push(
|
|
22
|
+
lines.push(`• ${agent.alias} is running (hasn't announced yet)`);
|
|
30
23
|
}
|
|
31
24
|
}
|
|
32
|
-
lines
|
|
33
|
-
lines.push(`To send: use action="write" with to="<agent>" and message="..."`);
|
|
34
|
-
return lines.join(`
|
|
35
|
-
`);
|
|
25
|
+
return lines;
|
|
36
26
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
27
|
+
function readResult(alias, messages, unreadCount, hasAnnounced) {
|
|
28
|
+
const lines = [`You are: ${alias}`, ``];
|
|
29
|
+
if (messages.length === 0) {
|
|
30
|
+
lines.push(`No messages in your inbox.`);
|
|
31
|
+
} else {
|
|
32
|
+
lines.push(`Your inbox (${unreadCount} were unread):`, `---`);
|
|
33
|
+
for (const msg of messages) {
|
|
34
|
+
const time = new Date(msg.timestamp).toISOString();
|
|
35
|
+
const status = msg.read ? "" : " [NEW]";
|
|
36
|
+
lines.push(`[${time}] From: ${msg.from}${status}`);
|
|
37
|
+
lines.push(msg.body);
|
|
38
|
+
lines.push(`---`);
|
|
39
|
+
}
|
|
40
|
+
lines.push(``);
|
|
41
|
+
lines.push(`To reply: use action="broadcast" with to="<sender>" and message="..."`);
|
|
42
|
+
}
|
|
43
|
+
if (!hasAnnounced) {
|
|
44
|
+
lines.push(``);
|
|
45
|
+
lines.push(`IMPORTANT: You MUST use action="announce" to declare what you're working on before continuing.`);
|
|
47
46
|
}
|
|
48
|
-
lines.push(``);
|
|
49
|
-
lines.push(`To reply: use action="write" with to="<sender>" and message="..."`);
|
|
50
47
|
return lines.join(`
|
|
51
48
|
`);
|
|
52
49
|
}
|
|
53
|
-
var WRITE_MISSING_TO = `Error: 'to' parameter is required for action="write".`;
|
|
54
|
-
var WRITE_MISSING_MESSAGE = `Error: 'message' parameter is required for action="write".`;
|
|
55
|
-
var ANNOUNCE_MISSING_MESSAGE = `Error: 'message' parameter is required for action="announce". Describe what you're working on.`;
|
|
56
50
|
function announceResult(alias, parallelAgents) {
|
|
57
|
-
const lines = [
|
|
51
|
+
const lines = [
|
|
52
|
+
`Announced! Other agents will see your description when they call announce.`,
|
|
53
|
+
``,
|
|
54
|
+
`You are: ${alias}`
|
|
55
|
+
];
|
|
58
56
|
if (parallelAgents.length > 0) {
|
|
59
57
|
lines.push(``);
|
|
60
58
|
lines.push(`--- Parallel Agents ---`);
|
|
61
|
-
|
|
62
|
-
if (agent.description) {
|
|
63
|
-
lines.push(`• ${agent.alias} is working on: ${agent.description}`);
|
|
64
|
-
} else {
|
|
65
|
-
lines.push(`• ${agent.alias} is running (hasn't announced yet)`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
59
|
+
lines.push(...formatAgentList(parallelAgents));
|
|
68
60
|
lines.push(``);
|
|
69
|
-
lines.push(`Use action="
|
|
61
|
+
lines.push(`Use action="broadcast" to coordinate with them.`);
|
|
62
|
+
} else {
|
|
63
|
+
lines.push(``);
|
|
64
|
+
lines.push(`No other agents running yet.`);
|
|
70
65
|
}
|
|
71
66
|
return lines.join(`
|
|
72
67
|
`);
|
|
73
68
|
}
|
|
74
|
-
|
|
69
|
+
var BROADCAST_MISSING_MESSAGE = `Error: 'message' parameter is required for action="broadcast".`;
|
|
70
|
+
function broadcastUnknownRecipient(to, known) {
|
|
75
71
|
const list = known.length > 0 ? `Known agents: ${known.join(", ")}` : "No agents available yet.";
|
|
76
72
|
return `Error: Unknown recipient "${to}". ${list}`;
|
|
77
73
|
}
|
|
78
|
-
function
|
|
74
|
+
function broadcastResult(recipients, messageId) {
|
|
75
|
+
const recipientStr = recipients.length === 1 ? recipients[0] : recipients.join(", ");
|
|
79
76
|
return `Message sent!
|
|
80
77
|
|
|
81
|
-
To: ${
|
|
78
|
+
To: ${recipientStr}
|
|
82
79
|
Message ID: ${messageId}
|
|
83
80
|
|
|
84
|
-
|
|
81
|
+
Recipients will be notified.`;
|
|
85
82
|
}
|
|
86
83
|
function unknownAction(action) {
|
|
87
|
-
return `Unknown action: ${action}`;
|
|
84
|
+
return `Unknown action: ${action}. Valid actions: announce, read, broadcast`;
|
|
88
85
|
}
|
|
89
86
|
var SYSTEM_PROMPT = `
|
|
90
87
|
<instructions tool="iam">
|
|
@@ -94,12 +91,15 @@ You have access to an \`iam\` tool for communicating with other parallel agents.
|
|
|
94
91
|
|
|
95
92
|
Usage:
|
|
96
93
|
- action="announce", message="..." - Announce what you're working on (do this first!)
|
|
97
|
-
- action="sessions" - See other agents and what they're working on
|
|
98
94
|
- action="read" - Read your messages
|
|
99
|
-
- action="
|
|
95
|
+
- action="broadcast", message="..." - Message all agents
|
|
96
|
+
- action="broadcast", to="agentA", message="..." - Message specific agent(s)
|
|
100
97
|
|
|
101
98
|
At the start of your task, use announce to let other agents know what you're doing.
|
|
99
|
+
You can re-announce to update your status as your task evolves.
|
|
102
100
|
Check your inbox when notified about new messages.
|
|
101
|
+
|
|
102
|
+
When you complete your task, broadcast to all: "Done. Here's what I found/did: ..."
|
|
103
103
|
</instructions>
|
|
104
104
|
`;
|
|
105
105
|
function urgentNotification(unreadCount) {
|
|
@@ -170,6 +170,10 @@ function setDescription(sessionId, description) {
|
|
|
170
170
|
function getDescription(alias) {
|
|
171
171
|
return agentDescriptions.get(alias);
|
|
172
172
|
}
|
|
173
|
+
function hasAnnounced(sessionId) {
|
|
174
|
+
const alias = getAlias(sessionId);
|
|
175
|
+
return agentDescriptions.has(alias);
|
|
176
|
+
}
|
|
173
177
|
function resolveAlias(aliasOrSessionId) {
|
|
174
178
|
return aliasToSession.get(aliasOrSessionId) || (activeSessions.has(aliasOrSessionId) ? aliasOrSessionId : undefined);
|
|
175
179
|
}
|
|
@@ -218,6 +222,12 @@ function getKnownAgents(sessionId) {
|
|
|
218
222
|
}
|
|
219
223
|
return agents;
|
|
220
224
|
}
|
|
225
|
+
function getParallelAgents(sessionId) {
|
|
226
|
+
return getKnownAgents(sessionId).map((alias) => ({
|
|
227
|
+
alias,
|
|
228
|
+
description: getDescription(alias)
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
221
231
|
function registerSession(sessionId) {
|
|
222
232
|
if (!activeSessions.has(sessionId)) {
|
|
223
233
|
activeSessions.add(sessionId);
|
|
@@ -234,66 +244,62 @@ var plugin = async () => {
|
|
|
234
244
|
iam: tool({
|
|
235
245
|
description: TOOL_DESCRIPTION,
|
|
236
246
|
args: {
|
|
237
|
-
action: tool.schema.enum(["
|
|
247
|
+
action: tool.schema.enum(["read", "broadcast", "announce"]).describe(ARG_DESCRIPTIONS.action),
|
|
238
248
|
to: tool.schema.string().optional().describe(ARG_DESCRIPTIONS.to),
|
|
239
249
|
message: tool.schema.string().optional().describe(ARG_DESCRIPTIONS.message)
|
|
240
250
|
},
|
|
241
251
|
async execute(args, context) {
|
|
242
252
|
const sessionId = context.sessionID;
|
|
243
253
|
registerSession(sessionId);
|
|
244
|
-
|
|
254
|
+
const alias = getAlias(sessionId);
|
|
255
|
+
const announced = hasAnnounced(sessionId);
|
|
256
|
+
log.debug(LOG.TOOL, `iam action: ${args.action}`, { sessionId, alias, args });
|
|
245
257
|
switch (args.action) {
|
|
246
|
-
case "sessions": {
|
|
247
|
-
const agents = getKnownAgents(sessionId);
|
|
248
|
-
log.debug(LOG.TOOL, `sessions result`, { sessionId, agentCount: agents.length, agents });
|
|
249
|
-
if (agents.length === 0) {
|
|
250
|
-
return SESSIONS_EMPTY;
|
|
251
|
-
}
|
|
252
|
-
const agentsWithDesc = agents.map((alias) => ({
|
|
253
|
-
alias,
|
|
254
|
-
description: getDescription(alias)
|
|
255
|
-
}));
|
|
256
|
-
return sessionsResult(agentsWithDesc);
|
|
257
|
-
}
|
|
258
258
|
case "read": {
|
|
259
259
|
const messages = getAllMessages(sessionId);
|
|
260
260
|
const unreadCount = messages.filter((m) => !m.read).length;
|
|
261
|
-
log.debug(LOG.TOOL, `read
|
|
261
|
+
log.debug(LOG.TOOL, `read inbox`, { alias, total: messages.length, unread: unreadCount });
|
|
262
262
|
markAllRead(sessionId);
|
|
263
|
-
|
|
264
|
-
return READ_EMPTY;
|
|
265
|
-
}
|
|
266
|
-
return readResult(messages, unreadCount);
|
|
263
|
+
return readResult(alias, messages, unreadCount, announced);
|
|
267
264
|
}
|
|
268
|
-
case "
|
|
269
|
-
if (!args.to) {
|
|
270
|
-
log.warn(LOG.TOOL, `write missing 'to'`, { sessionId });
|
|
271
|
-
return WRITE_MISSING_TO;
|
|
272
|
-
}
|
|
265
|
+
case "broadcast": {
|
|
273
266
|
if (!args.message) {
|
|
274
|
-
log.warn(LOG.TOOL, `
|
|
275
|
-
return
|
|
267
|
+
log.warn(LOG.TOOL, `broadcast missing 'message'`, { alias });
|
|
268
|
+
return BROADCAST_MISSING_MESSAGE;
|
|
269
|
+
}
|
|
270
|
+
const knownAgents = getKnownAgents(sessionId);
|
|
271
|
+
let targetAliases;
|
|
272
|
+
if (!args.to || args.to.toLowerCase() === "all") {
|
|
273
|
+
targetAliases = knownAgents;
|
|
274
|
+
} else {
|
|
275
|
+
targetAliases = args.to.split(",").map((s) => s.trim()).filter(Boolean);
|
|
276
|
+
}
|
|
277
|
+
if (targetAliases.length === 0) {
|
|
278
|
+
return `No agents to broadcast to. Use action="announce" to see parallel agents.`;
|
|
279
|
+
}
|
|
280
|
+
const recipientSessions = [];
|
|
281
|
+
for (const targetAlias of targetAliases) {
|
|
282
|
+
const recipientSessionId = resolveAlias(targetAlias);
|
|
283
|
+
if (!recipientSessionId) {
|
|
284
|
+
log.warn(LOG.TOOL, `broadcast unknown recipient`, { alias, to: targetAlias });
|
|
285
|
+
return broadcastUnknownRecipient(targetAlias, knownAgents);
|
|
286
|
+
}
|
|
287
|
+
recipientSessions.push(recipientSessionId);
|
|
276
288
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
289
|
+
let messageId = "";
|
|
290
|
+
for (const recipientSessionId of recipientSessions) {
|
|
291
|
+
const msg = sendMessage(alias, recipientSessionId, args.message);
|
|
292
|
+
messageId = msg.id;
|
|
281
293
|
}
|
|
282
|
-
|
|
283
|
-
const msg = sendMessage(senderAlias, recipientSessionId, args.message);
|
|
284
|
-
return writeResult(args.to, msg.id);
|
|
294
|
+
return broadcastResult(targetAliases, messageId);
|
|
285
295
|
}
|
|
286
296
|
case "announce": {
|
|
287
297
|
if (!args.message) {
|
|
288
|
-
log.warn(LOG.TOOL, `announce missing 'message'`, {
|
|
289
|
-
return
|
|
298
|
+
log.warn(LOG.TOOL, `announce missing 'message'`, { alias });
|
|
299
|
+
return `Error: 'message' parameter is required for action="announce". Describe what you're working on.`;
|
|
290
300
|
}
|
|
291
301
|
setDescription(sessionId, args.message);
|
|
292
|
-
const
|
|
293
|
-
const parallelAgents = getKnownAgents(sessionId).map((agentAlias) => ({
|
|
294
|
-
alias: agentAlias,
|
|
295
|
-
description: getDescription(agentAlias)
|
|
296
|
-
}));
|
|
302
|
+
const parallelAgents = getParallelAgents(sessionId);
|
|
297
303
|
return announceResult(alias, parallelAgents);
|
|
298
304
|
}
|
|
299
305
|
default:
|
package/dist/prompt.d.ts
CHANGED
|
@@ -1,32 +1,25 @@
|
|
|
1
|
-
export declare const TOOL_DESCRIPTION = "Inter-agent messaging. Use this to communicate with other parallel agents (task tools).\n\nActions:\n- \"
|
|
1
|
+
export declare const TOOL_DESCRIPTION = "Inter-agent messaging. Use this to communicate with other parallel agents (task tools).\n\nActions:\n- \"announce\": Announce what you're working on (do this first!). Shows all parallel agents. You can re-announce to update your status.\n- \"read\": Read your messages (marks them as read)\n- \"broadcast\": Send a message (requires 'message', optional 'to')";
|
|
2
2
|
export declare const ARG_DESCRIPTIONS: {
|
|
3
3
|
readonly action: "Action to perform";
|
|
4
|
-
readonly to: "Recipient
|
|
5
|
-
readonly message: "
|
|
4
|
+
readonly to: "Recipient(s): 'agentA', 'agentA,agentC', or 'all' (default: all)";
|
|
5
|
+
readonly message: "Your announcement or message content";
|
|
6
6
|
};
|
|
7
|
-
export
|
|
8
|
-
export declare function sessionsResult(agents: {
|
|
7
|
+
export interface ParallelAgent {
|
|
9
8
|
alias: string;
|
|
10
9
|
description?: string;
|
|
11
|
-
}
|
|
12
|
-
export declare
|
|
13
|
-
export declare function readResult(messages: {
|
|
10
|
+
}
|
|
11
|
+
export declare function formatAgentList(agents: ParallelAgent[]): string[];
|
|
12
|
+
export declare function readResult(alias: string, messages: {
|
|
14
13
|
from: string;
|
|
15
14
|
body: string;
|
|
16
15
|
timestamp: number;
|
|
17
16
|
read: boolean;
|
|
18
|
-
}[], unreadCount: number): string;
|
|
19
|
-
export declare const WRITE_MISSING_TO = "Error: 'to' parameter is required for action=\"write\".";
|
|
20
|
-
export declare const WRITE_MISSING_MESSAGE = "Error: 'message' parameter is required for action=\"write\".";
|
|
21
|
-
export declare const ANNOUNCE_MISSING_MESSAGE = "Error: 'message' parameter is required for action=\"announce\". Describe what you're working on.";
|
|
22
|
-
export interface ParallelAgent {
|
|
23
|
-
alias: string;
|
|
24
|
-
description?: string;
|
|
25
|
-
}
|
|
17
|
+
}[], unreadCount: number, hasAnnounced: boolean): string;
|
|
26
18
|
export declare function announceResult(alias: string, parallelAgents: ParallelAgent[]): string;
|
|
27
|
-
export declare
|
|
28
|
-
export declare function
|
|
19
|
+
export declare const BROADCAST_MISSING_MESSAGE = "Error: 'message' parameter is required for action=\"broadcast\".";
|
|
20
|
+
export declare function broadcastUnknownRecipient(to: string, known: string[]): string;
|
|
21
|
+
export declare function broadcastResult(recipients: string[], messageId: string): string;
|
|
29
22
|
export declare function unknownAction(action: string): string;
|
|
30
|
-
export declare const SYSTEM_PROMPT = "\n<instructions tool=\"iam\">\n# Inter-Agent Messaging\n\nYou have access to an `iam` tool for communicating with other parallel agents.\n\nUsage:\n- action=\"announce\", message=\"...\" - Announce what you're working on (do this first!)\n- action=\"
|
|
23
|
+
export declare const SYSTEM_PROMPT = "\n<instructions tool=\"iam\">\n# Inter-Agent Messaging\n\nYou have access to an `iam` tool for communicating with other parallel agents.\n\nUsage:\n- action=\"announce\", message=\"...\" - Announce what you're working on (do this first!)\n- action=\"read\" - Read your messages\n- action=\"broadcast\", message=\"...\" - Message all agents\n- action=\"broadcast\", to=\"agentA\", message=\"...\" - Message specific agent(s)\n\nAt the start of your task, use announce to let other agents know what you're doing.\nYou can re-announce to update your status as your task evolves.\nCheck your inbox when notified about new messages.\n\nWhen you complete your task, broadcast to all: \"Done. Here's what I found/did: ...\"\n</instructions>\n";
|
|
31
24
|
export declare function urgentNotification(unreadCount: number): string;
|
|
32
25
|
//# sourceMappingURL=prompt.d.ts.map
|
package/dist/prompt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../prompt.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../prompt.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,2WAKqC,CAAC;AAEnE,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAMX,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAUjE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,EAAE,EAC5E,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,OAAO,GACpB,MAAM,CA0BR;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,MAAM,CAmBrF;AAED,eAAO,MAAM,yBAAyB,qEAAmE,CAAC;AAE1G,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAG7E;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAMD,eAAO,MAAM,aAAa,ouBAkBzB,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK9D"}
|