@opvs-ai/cli 0.5.5 → 0.5.6
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/commands/mail.d.ts +5 -0
- package/dist/commands/mail.js +289 -0
- package/dist/commands/mail.js.map +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* opvs mail — OPVS Protocol messaging commands
|
|
3
|
+
*/
|
|
4
|
+
import { getEffectiveConfig, createClient } from "@opvs-ai/core";
|
|
5
|
+
import { buildUrl, printResponse, printJson } from "../lib/format.js";
|
|
6
|
+
/** Map user-friendly type names to OPVS wire-format symbols. */
|
|
7
|
+
const TYPE_SYMBOLS = {
|
|
8
|
+
"?": "?", query: "?",
|
|
9
|
+
"!": "!", command: "!", action: "!",
|
|
10
|
+
"~": "~", delegate: "~",
|
|
11
|
+
"^": "^", escalate: "^",
|
|
12
|
+
".": ".", inform: ".",
|
|
13
|
+
">": ">", handoff: ">",
|
|
14
|
+
"<": "<", reply: "<",
|
|
15
|
+
};
|
|
16
|
+
/** Map priority names to OPVS wire-format symbols. */
|
|
17
|
+
const PRIORITY_SYMBOLS = {
|
|
18
|
+
critical: "!!!",
|
|
19
|
+
high: "!!",
|
|
20
|
+
medium: "!",
|
|
21
|
+
normal: "",
|
|
22
|
+
low: "",
|
|
23
|
+
};
|
|
24
|
+
export function registerMailCommands(program) {
|
|
25
|
+
const mail = program.command("mail").description("OPVS Protocol messaging");
|
|
26
|
+
// ── send ────────────────────────────────────────────────────
|
|
27
|
+
mail
|
|
28
|
+
.command("send <address> <message>")
|
|
29
|
+
.description("Send an OPVS protocol message")
|
|
30
|
+
.option("--priority <level>", "Priority: critical, high, medium, normal", "normal")
|
|
31
|
+
.option("--tags <tags>", "Comma-separated tags")
|
|
32
|
+
.option("--type <type>", "Message type: ? ! ~ ^ . > < (or query, command, delegate, escalate, inform, handoff, reply)", ".")
|
|
33
|
+
.option("--from <address>", "Sender address", "cli")
|
|
34
|
+
.action(async (address, message, opts) => {
|
|
35
|
+
const wsSlug = program.opts().workspace;
|
|
36
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
37
|
+
try {
|
|
38
|
+
const typeSymbol = TYPE_SYMBOLS[opts.type] || ".";
|
|
39
|
+
const priority = PRIORITY_SYMBOLS[opts.priority] || "";
|
|
40
|
+
const tagsPart = opts.tags
|
|
41
|
+
? opts.tags.split(",").map((t) => `#${t.trim()}`).join(" ")
|
|
42
|
+
: "";
|
|
43
|
+
let header = `@${opts.from}>${address} ${typeSymbol}`;
|
|
44
|
+
if (priority)
|
|
45
|
+
header += ` ${priority}`;
|
|
46
|
+
if (tagsPart)
|
|
47
|
+
header += ` ${tagsPart}`;
|
|
48
|
+
const wireFormat = `${header}\n\n${message}`;
|
|
49
|
+
// Raw fetch — the core client always JSON-stringifies, but /send needs text/opvs
|
|
50
|
+
const baseUrl = cfg.api_url.replace(/\/$/, "");
|
|
51
|
+
const url = `${baseUrl}/api/v1/opvs/send`;
|
|
52
|
+
const headers = {
|
|
53
|
+
"Content-Type": "text/opvs",
|
|
54
|
+
};
|
|
55
|
+
if (cfg.token)
|
|
56
|
+
headers["Authorization"] = `Bearer ${cfg.token}`;
|
|
57
|
+
if (cfg.brand_id)
|
|
58
|
+
headers["X-Brand-ID"] = String(cfg.brand_id);
|
|
59
|
+
const res = await fetch(url, { method: "POST", headers, body: wireFormat });
|
|
60
|
+
if (!res.ok) {
|
|
61
|
+
let detail;
|
|
62
|
+
try {
|
|
63
|
+
const err = (await res.json());
|
|
64
|
+
if (typeof err.detail === "string") {
|
|
65
|
+
detail = err.detail;
|
|
66
|
+
}
|
|
67
|
+
else if (Array.isArray(err.detail)) {
|
|
68
|
+
detail = err.detail.map((d) => d.msg || JSON.stringify(d)).join("; ");
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
detail = res.statusText;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
detail = res.statusText;
|
|
76
|
+
}
|
|
77
|
+
console.error(`Error: ${detail}`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
await printResponse(res);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const e = err;
|
|
84
|
+
console.error(`Error: ${e.detail || "Failed to send message"}`);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// ── inbox ───────────────────────────────────────────────────
|
|
89
|
+
mail
|
|
90
|
+
.command("inbox")
|
|
91
|
+
.description("Fetch inbox messages")
|
|
92
|
+
.option("--limit <n>", "Max messages", "50")
|
|
93
|
+
.option("--tags <tags>", "Filter by comma-separated tags")
|
|
94
|
+
.option("--flags <flags>", "Filter by comma-separated flags")
|
|
95
|
+
.action(async (opts) => {
|
|
96
|
+
const wsSlug = program.opts().workspace;
|
|
97
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
98
|
+
try {
|
|
99
|
+
const client = createClient(wsSlug);
|
|
100
|
+
const params = {};
|
|
101
|
+
if (opts.limit)
|
|
102
|
+
params.limit = opts.limit;
|
|
103
|
+
if (opts.tags)
|
|
104
|
+
params.tags = opts.tags;
|
|
105
|
+
if (opts.flags)
|
|
106
|
+
params.flags = opts.flags;
|
|
107
|
+
const url = buildUrl("/api/v1/opvs/inbox", params, cfg.format);
|
|
108
|
+
const res = await client.get(url);
|
|
109
|
+
await printResponse(res);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
const e = err;
|
|
113
|
+
console.error(`Error: ${e.detail || "Failed to fetch inbox"}`);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// ── read ────────────────────────────────────────────────────
|
|
118
|
+
mail
|
|
119
|
+
.command("read <id>")
|
|
120
|
+
.description("Read a single message by ID")
|
|
121
|
+
.action(async (id) => {
|
|
122
|
+
const wsSlug = program.opts().workspace;
|
|
123
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
124
|
+
try {
|
|
125
|
+
const client = createClient(wsSlug);
|
|
126
|
+
const url = buildUrl(`/api/v1/opvs/messages/${id}`, undefined, cfg.format);
|
|
127
|
+
const res = await client.get(url);
|
|
128
|
+
await printResponse(res);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const e = err;
|
|
132
|
+
console.error(`Error: ${e.detail || "Failed to read message"}`);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
// ── reply ───────────────────────────────────────────────────
|
|
137
|
+
mail
|
|
138
|
+
.command("reply <id> <message>")
|
|
139
|
+
.description("Reply to a message")
|
|
140
|
+
.action(async (id, message) => {
|
|
141
|
+
const wsSlug = program.opts().workspace;
|
|
142
|
+
try {
|
|
143
|
+
const client = createClient(wsSlug);
|
|
144
|
+
const res = await client.post("/api/v1/opvs/reply", {
|
|
145
|
+
message_id: id,
|
|
146
|
+
body: message,
|
|
147
|
+
});
|
|
148
|
+
const data = await res.json();
|
|
149
|
+
printJson(data);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
const e = err;
|
|
153
|
+
console.error(`Error: ${e.detail || "Failed to reply"}`);
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
// ── resolve ─────────────────────────────────────────────────
|
|
158
|
+
mail
|
|
159
|
+
.command("resolve <id>")
|
|
160
|
+
.description("Mark a message as resolved")
|
|
161
|
+
.action(async (id) => {
|
|
162
|
+
const wsSlug = program.opts().workspace;
|
|
163
|
+
try {
|
|
164
|
+
const client = createClient(wsSlug);
|
|
165
|
+
const res = await client.post("/api/v1/opvs/resolve", {
|
|
166
|
+
message_id: id,
|
|
167
|
+
});
|
|
168
|
+
const data = await res.json();
|
|
169
|
+
printJson(data);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
const e = err;
|
|
173
|
+
console.error(`Error: ${e.detail || "Failed to resolve message"}`);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
// ── claim ───────────────────────────────────────────────────
|
|
178
|
+
mail
|
|
179
|
+
.command("claim")
|
|
180
|
+
.description("Claim next message from a pool")
|
|
181
|
+
.requiredOption("--pool <pool>", "Pool name to claim from")
|
|
182
|
+
.option("--tags <tags>", "Filter by comma-separated tags")
|
|
183
|
+
.option("--flags <flags>", "Filter by comma-separated flags")
|
|
184
|
+
.action(async (opts) => {
|
|
185
|
+
const wsSlug = program.opts().workspace;
|
|
186
|
+
try {
|
|
187
|
+
const client = createClient(wsSlug);
|
|
188
|
+
const body = { pool: opts.pool };
|
|
189
|
+
if (opts.tags)
|
|
190
|
+
body.filter_tags = opts.tags.split(",").map((t) => t.trim());
|
|
191
|
+
if (opts.flags)
|
|
192
|
+
body.filter_flags = opts.flags.split(",").map((f) => f.trim());
|
|
193
|
+
const res = await client.post("/api/v1/opvs/claim", body);
|
|
194
|
+
const data = await res.json();
|
|
195
|
+
printJson(data);
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
const e = err;
|
|
199
|
+
console.error(`Error: ${e.detail || "Failed to claim message"}`);
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
// ── pair ────────────────────────────────────────────────────
|
|
204
|
+
mail
|
|
205
|
+
.command("pair <address>")
|
|
206
|
+
.description("Initiate pairing with another agent")
|
|
207
|
+
.option("--message <text>", "Intro message")
|
|
208
|
+
.action(async (address, opts) => {
|
|
209
|
+
const wsSlug = program.opts().workspace;
|
|
210
|
+
try {
|
|
211
|
+
const client = createClient(wsSlug);
|
|
212
|
+
const body = { target_address: address };
|
|
213
|
+
if (opts.message)
|
|
214
|
+
body.intro_message = opts.message;
|
|
215
|
+
const res = await client.post("/api/v1/opvs/pair", body);
|
|
216
|
+
const data = await res.json();
|
|
217
|
+
printJson(data);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
const e = err;
|
|
221
|
+
console.error(`Error: ${e.detail || "Failed to initiate pairing"}`);
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
// ── agents ──────────────────────────────────────────────────
|
|
226
|
+
mail
|
|
227
|
+
.command("agents")
|
|
228
|
+
.description("List registered OPVS agents")
|
|
229
|
+
.option("--framework <framework>", "Filter by framework (e.g. openclaw)")
|
|
230
|
+
.option("--status <status>", "Filter by status (online, offline, busy, away)")
|
|
231
|
+
.option("--limit <n>", "Max results", "50")
|
|
232
|
+
.action(async (opts) => {
|
|
233
|
+
const wsSlug = program.opts().workspace;
|
|
234
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
235
|
+
try {
|
|
236
|
+
const client = createClient(wsSlug);
|
|
237
|
+
const params = {};
|
|
238
|
+
if (opts.framework)
|
|
239
|
+
params.framework = opts.framework;
|
|
240
|
+
if (opts.status)
|
|
241
|
+
params.status = opts.status;
|
|
242
|
+
if (opts.limit)
|
|
243
|
+
params.limit = opts.limit;
|
|
244
|
+
const url = buildUrl("/api/v1/opvs/agents", params, cfg.format);
|
|
245
|
+
const res = await client.get(url);
|
|
246
|
+
await printResponse(res);
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
const e = err;
|
|
250
|
+
console.error(`Error: ${e.detail || "Failed to list agents"}`);
|
|
251
|
+
process.exit(1);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
// ── register ────────────────────────────────────────────────
|
|
255
|
+
mail
|
|
256
|
+
.command("register")
|
|
257
|
+
.description("Register a new OPVS agent address")
|
|
258
|
+
.option("--name <name>", "Agent address (omit for auto-generated)")
|
|
259
|
+
.option("--mode <mode>", "Agent mode: public, paired_only, hybrid", "public")
|
|
260
|
+
.option("--domain <domain>", "Domain: opvs.run or opvs.pub", "opvs.run")
|
|
261
|
+
.option("--framework <framework>", "Agent framework (e.g. claude, openclaw)")
|
|
262
|
+
.option("--capabilities <caps>", "Comma-separated capabilities")
|
|
263
|
+
.action(async (opts) => {
|
|
264
|
+
const wsSlug = program.opts().workspace;
|
|
265
|
+
try {
|
|
266
|
+
const client = createClient(wsSlug);
|
|
267
|
+
const body = {
|
|
268
|
+
mode: opts.mode,
|
|
269
|
+
domain: opts.domain,
|
|
270
|
+
};
|
|
271
|
+
if (opts.name)
|
|
272
|
+
body.name = opts.name;
|
|
273
|
+
if (opts.framework)
|
|
274
|
+
body.framework = opts.framework;
|
|
275
|
+
if (opts.capabilities) {
|
|
276
|
+
body.capabilities = opts.capabilities.split(",").map((c) => c.trim());
|
|
277
|
+
}
|
|
278
|
+
const res = await client.post("/api/v1/opvs/agents/register", body);
|
|
279
|
+
const data = await res.json();
|
|
280
|
+
printJson(data);
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
const e = err;
|
|
284
|
+
console.error(`Error: ${e.detail || "Failed to register agent"}`);
|
|
285
|
+
process.exit(1);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=mail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/commands/mail.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -33,11 +33,12 @@ import { registerMemberCommands } from "./commands/members.js";
|
|
|
33
33
|
import { registerMarkerCommands } from "./commands/markers.js";
|
|
34
34
|
import { registerBoardLinkCommands } from "./commands/board-links.js";
|
|
35
35
|
import { registerSkillCommands } from "./commands/skills.js";
|
|
36
|
+
import { registerMailCommands } from "./commands/mail.js";
|
|
36
37
|
const program = new Command();
|
|
37
38
|
program
|
|
38
39
|
.name("opvs")
|
|
39
40
|
.description("OPVS CLI — AgentBoard + AgentDocs for AI coding agents")
|
|
40
|
-
.version("0.5.
|
|
41
|
+
.version("0.5.6")
|
|
41
42
|
.option("-w, --workspace <slug>", "Workspace to use (overrides current)");
|
|
42
43
|
// Register all command groups
|
|
43
44
|
registerAuthCommands(program);
|
|
@@ -59,6 +60,7 @@ registerMemberCommands(program);
|
|
|
59
60
|
registerMarkerCommands(program);
|
|
60
61
|
registerBoardLinkCommands(program);
|
|
61
62
|
registerSkillCommands(program);
|
|
63
|
+
registerMailCommands(program);
|
|
62
64
|
registerConfigCommands(program);
|
|
63
65
|
program.parse();
|
|
64
66
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,wBAAwB,EAAE,sCAAsC,CAAC,CAAC;AAE5E,8BAA8B;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|