@opvs-ai/mcp 0.7.4 → 2.6.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.
@@ -1,448 +0,0 @@
1
- /**
2
- * Protocol handler — OPVS federated messaging.
3
- *
4
- * Two layers, mirroring Phase C of the CLI:
5
- * 1. Server-facing tools (send, inbox, read, reply, resolve, claim,
6
- * agents, register) hit the gateway. send/reply/read mirror to the
7
- * local mailstore on success.
8
- * 2. Local-mirror tools (thread, search, unread, history, ack, working,
9
- * decline, status, awaiting, tickle) read/write ``~/.opvs/mail/``
10
- * via the shared mailstore from ``@opvs-ai/core``.
11
- */
12
- import { ok, err, WORKSPACE_PROP, resolveWorkspace, getFormat } from "./types.js";
13
- import { mailstore, saveAgentIdentity, resolveAgentIdentity, getEffectiveConfig } from "@opvs-ai/core";
14
- /**
15
- * Resolve the mail-mode agent identity for a workspace and return the
16
- * pieces every /opvs/* call needs:
17
- * - headers: pass to callApi so the OPVS service authenticates as this agent
18
- * - fromAddress: the full `name@domain` to use in wire-format headers
19
- * - fromName: the local-part for synthesizing outbound mirror entries
20
- *
21
- * If no identity is found, returns sensible defaults so the legacy gateway-
22
- * proxy behaviour (PAT-only) still works for whoever wants it. But for any
23
- * call that needs the agent's own auth (send, status mutations, inbox
24
- * reads against /opvs/inbox), the missing identity will surface as a
25
- * server-side 401 which we re-throw with a helpful message.
26
- */
27
- function resolveAgentForWorkspace(ws) {
28
- try {
29
- const cfg = getEffectiveConfig(ws);
30
- const resolved = resolveAgentIdentity(cfg.workspace_slug);
31
- if (resolved) {
32
- const local = resolved.address.includes("@")
33
- ? resolved.address.split("@", 1)[0]
34
- : resolved.address;
35
- return {
36
- headers: { "X-OPVS-API-Key": resolved.identity.api_key },
37
- fromAddress: resolved.address,
38
- fromName: local,
39
- };
40
- }
41
- }
42
- catch { /* config not loadable; fall through */ }
43
- return { headers: {}, fromAddress: null, fromName: "agent" };
44
- }
45
- export const TOOLS = [
46
- // ── server-facing (existing) ─────────────────────────────────
47
- { name: "opvs_send", description: "Send an OPVS protocol message to another agent. Recipient may carry a +suffix sub-address (Gmail-style, e.g. ``llm14+worker-frontend@opvs.run``). Mirrors locally.", inputSchema: { type: "object", properties: { to: { type: "string", description: "Recipient address (e.g. support@opvs.run or vps14+task1@opvs.run)" }, message: { type: "string", description: "Message body" }, priority: { type: "string", enum: ["low", "normal", "high", "critical"], description: "Message priority (default: normal)" }, tags: { type: "array", items: { type: "string" }, description: "Tags for categorisation" }, type: { type: "string", enum: ["query", "action", "delegate", "escalate", "inform", "handoff", "reply"], description: "Message type (default: inform)" }, ...WORKSPACE_PROP }, required: ["to", "message"] } },
48
- { name: "opvs_inbox", description: "Fetch messages from the OPVS inbox (server side). For the local mirror, prefer ``opvs_history``.", inputSchema: { type: "object", properties: { status: { type: "string", description: "Filter by status (delivered, seen, working, resolved, declined, failed, expired, or 'all')" }, limit: { type: "number", description: "Max messages to return (default 50)" }, since: { type: "string", description: "Cursor — only return messages newer than this message id" }, after: { type: "string", description: "ISO 8601 timestamp cursor" }, subaddress: { type: "string", description: "Filter by recipient +suffix sub-address" }, thread_id: { type: "string", description: "Filter to one thread" }, ...WORKSPACE_PROP } } },
49
- { name: "opvs_read", description: "Read a single OPVS message by its ID. Local first, server fallback.", inputSchema: { type: "object", properties: { message_id: { type: "string", description: "Message UUID" }, remote: { type: "boolean", description: "Skip local cache and hit the server (default: false)" }, ...WORKSPACE_PROP }, required: ["message_id"] } },
50
- { name: "opvs_reply", description: "Reply to an OPVS message. Creates a threaded reply linked to the original. Mirrors locally.", inputSchema: { type: "object", properties: { message_id: { type: "string", description: "ID of the message to reply to" }, body: { type: "string", description: "Reply body" }, ...WORKSPACE_PROP }, required: ["message_id", "body"] } },
51
- { name: "opvs_resolve", description: "Mark an OPVS message as resolved. Only the recipient can resolve.", inputSchema: { type: "object", properties: { message_id: { type: "string", description: "ID of the message to resolve" }, ...WORKSPACE_PROP }, required: ["message_id"] } },
52
- { name: "opvs_claim", description: "Claim the next message from an OPVS pool queue.", inputSchema: { type: "object", properties: { pool: { type: "string", description: "Pool name to claim from (e.g. support, sales)" }, ...WORKSPACE_PROP }, required: ["pool"] } },
53
- { name: "opvs_agents", description: "List registered OPVS agents.", inputSchema: { type: "object", properties: { framework: { type: "string", description: "Filter by agent framework" }, status: { type: "string", description: "Filter by agent status (online, offline, busy, away)" }, limit: { type: "number", description: "Max results (default 50)" }, ...WORKSPACE_PROP } } },
54
- { name: "opvs_register", description: "Register a new OPVS agent and receive an API key.", inputSchema: { type: "object", properties: { name: { type: "string", description: "Agent address (3-30 chars, lowercase alphanumeric + hyphens). Omit for auto-generated name." }, mode: { type: "string", enum: ["public", "paired_only", "hybrid"] }, domain: { type: "string", enum: ["opvs.run", "opvs.pub"] }, framework: { type: "string" }, display_name: { type: "string" }, bio: { type: "string" }, ...WORKSPACE_PROP } } },
55
- // ── local-mirror reads (NEW — Phase D) ──────────────────────
56
- { name: "opvs_thread", description: "Read full thread chronologically. Local first, server fallback.", inputSchema: { type: "object", properties: { thread_id: { type: "string", description: "Thread ID" }, ...WORKSPACE_PROP }, required: ["thread_id"] } },
57
- { name: "opvs_search", description: "Grep across all locally-stored OPVS messages (body, tags, addresses). No server round-trip.", inputSchema: { type: "object", properties: { query: { type: "string", description: "Search string (case-insensitive)" }, limit: { type: "number", description: "Max results (default 50)" }, thread_id: { type: "string", description: "Restrict to one thread" }, suffix: { type: "string", description: "Restrict to one +suffix sub-address" } }, required: ["query"] } },
58
- { name: "opvs_unread", description: "Count of unread OPVS messages in the local store.", inputSchema: { type: "object", properties: { include_summary: { type: "boolean", description: "Include the first 20 unread messages in the response (default: false)" } } } },
59
- { name: "opvs_history", description: "Read recent messages from the local store with rich filters (cheap — no server round-trip).", inputSchema: { type: "object", properties: { limit: { type: "number", description: "Max messages (default 50)" }, unread: { type: "boolean", description: "Only unread (flags.viewed unset)" }, suffix: { type: "string", description: "Filter by +suffix" }, tag: { type: "string", description: "Filter by tag" }, since: { type: "string", description: "ISO 8601 cursor" }, status: { type: "string", description: "Filter by server status" } } } },
60
- { name: "opvs_status", description: "Get full status state for a single OPVS message (local + server status, flags).", inputSchema: { type: "object", properties: { message_id: { type: "string", description: "Message UUID" } }, required: ["message_id"] } },
61
- // ── recipient-driven status mutations (NEW — Phase D) ───────
62
- { name: "opvs_ack", description: "Acknowledge receipt of a message — sets server status `seen`. Per OPVS Mail decision #1 there is NO auto-seen, so you must explicitly call this when you've read a message.", inputSchema: { type: "object", properties: { message_id: { type: "string", description: "Message UUID" }, ...WORKSPACE_PROP }, required: ["message_id"] } },
63
- { name: "opvs_working", description: "Mark a message as in-progress — sets server status `working`. Sender will see the receipt-tick on their watch stream.", inputSchema: { type: "object", properties: { message_id: { type: "string", description: "Message UUID" }, ...WORKSPACE_PROP }, required: ["message_id"] } },
64
- { name: "opvs_decline", description: "Decline a message — sets server status `declined`. Use when you cannot or will not act on a request.", inputSchema: { type: "object", properties: { message_id: { type: "string", description: "Message UUID" }, ...WORKSPACE_PROP }, required: ["message_id"] } },
65
- // ── advisory SLA helpers (NEW — Phase D) ────────────────────
66
- { name: "opvs_awaiting", description: "List OPVS messages I sent that are still pre-resolved past their advisory SLA. Per decision #2 server never enforces — this computes is_late client-side from $expected_seen_in/$expected_done_in context fields.", inputSchema: { type: "object", properties: { late_only: { type: "boolean", description: "Only include messages past their SLA" }, limit: { type: "number", description: "Max results (default 100)" } } } },
67
- { name: "opvs_tickle", description: "Send a polite follow-up ping in the same thread as <message_id>. Useful when ``opvs_awaiting`` shows a worker is late.", inputSchema: { type: "object", properties: { message_id: { type: "string", description: "Original message ID to follow up on" }, message: { type: "string", description: "Custom ping message (default: 'Just bumping this — any update?')" }, ...WORKSPACE_PROP }, required: ["message_id"] } },
68
- ];
69
- const TYPE_SYMBOLS = {
70
- query: "?", action: "!", delegate: "~", escalate: "^", inform: ".", handoff: ">", reply: "<",
71
- };
72
- const PRIORITY_SYMBOLS = {
73
- critical: "!!!", high: "!!", normal: "!", low: "",
74
- };
75
- /** Synthesize a local Message envelope from outbound send context + server message_id. */
76
- function synthesizeOutgoing(opts) {
77
- const split = (addr) => {
78
- const [local, tenant] = addr.includes("@") ? addr.split("@", 2) : [addr, null];
79
- if (local.includes("+")) {
80
- const [name, sub] = local.split("+", 2);
81
- return { name, sub: sub || null, tenant: tenant ?? null };
82
- }
83
- return { name: local, sub: null, tenant: tenant ?? null };
84
- };
85
- const toParts = split(opts.to);
86
- return {
87
- id: opts.message_id,
88
- thread_id: opts.thread_id ?? null,
89
- reply_to_id: opts.reply_to_id ?? null,
90
- from_agent: opts.fromName ?? "agent",
91
- from_subaddress: null,
92
- from_tenant: null,
93
- to_agent: toParts.name,
94
- to_subaddress: toParts.sub,
95
- to_tenant: toParts.tenant,
96
- body: opts.body,
97
- tags: opts.tags ?? [],
98
- flags: [],
99
- context: {},
100
- message_type: opts.type,
101
- priority: opts.priority === "critical" ? 0 : opts.priority === "high" ? 1 : opts.priority === "low" ? 3 : 2,
102
- status: "delivered",
103
- created_at: new Date().toISOString(),
104
- };
105
- }
106
- /** Try to mirror an outbound send/reply locally. Failures are non-fatal. */
107
- function mirrorOutbound(messageId, to, type, priority, tags, body, threadId, fromName) {
108
- if (!messageId)
109
- return;
110
- try {
111
- mailstore.appendOutgoing(synthesizeOutgoing({
112
- message_id: messageId,
113
- to,
114
- type,
115
- priority,
116
- tags,
117
- body,
118
- thread_id: threadId,
119
- fromName,
120
- }));
121
- }
122
- catch { /* non-fatal */ }
123
- }
124
- export async function handleTool(name, args, callApi, buildUrl) {
125
- const fmt = getFormat();
126
- const ws = resolveWorkspace(args);
127
- switch (name) {
128
- case "opvs_send": {
129
- const to = String(args.to);
130
- const message = String(args.message);
131
- const typeSym = TYPE_SYMBOLS[String(args.type || "inform")] || ".";
132
- const priSym = PRIORITY_SYMBOLS[String(args.priority || "normal")] || "!";
133
- const tags = args.tags || [];
134
- const tagStr = tags.map(t => `#${t}`).join(" ");
135
- // Resolve the agent identity (api_key + from_address) for this workspace.
136
- // Closes Antigravity Bug #2: without this, opvs_send landed messages with
137
- // from_agent="agent" (server default) rather than the registered address.
138
- const identity = resolveAgentForWorkspace(ws);
139
- if (!identity.fromAddress) {
140
- return err("No OPVS mail agent identity configured. Run opvs_register first, or set OPVS_AGENT_KEY env var.");
141
- }
142
- const header = `@${identity.fromName}>${to} ${typeSym} ${priSym} ${tagStr}`.trimEnd();
143
- const body = `${header}\n\n${message}`;
144
- const respText = await callApi("POST", "/api/v1/opvs/send", ws, body, {
145
- "Content-Type": "text/opvs",
146
- ...identity.headers,
147
- });
148
- // Best-effort: parse the response to grab message_id for local mirror.
149
- try {
150
- const parsed = JSON.parse(respText);
151
- mirrorOutbound(parsed.message_id, to, typeSym, String(args.priority ?? "normal"), tags, message, null, identity.fromName);
152
- }
153
- catch { /* response not JSON — skip mirror */ }
154
- return ok(respText);
155
- }
156
- case "opvs_inbox": {
157
- const params = {};
158
- if (args.status)
159
- params.status = String(args.status);
160
- if (args.limit)
161
- params.limit = String(args.limit);
162
- if (args.since)
163
- params.since = String(args.since);
164
- if (args.after)
165
- params.after = String(args.after);
166
- if (args.subaddress !== undefined)
167
- params.subaddress = String(args.subaddress);
168
- if (args.thread_id)
169
- params.thread_id = String(args.thread_id);
170
- // Inbox reads need the agent api_key — closes Antigravity Bug #4.
171
- const identity = resolveAgentForWorkspace(ws);
172
- if (!identity.fromAddress) {
173
- return err("No OPVS mail agent identity configured. Run opvs_register first, or use opvs_history for the local mirror.");
174
- }
175
- return ok(await callApi("GET", buildUrl("/api/v1/opvs/inbox", params, fmt), ws, undefined, identity.headers));
176
- }
177
- case "opvs_read": {
178
- const id = String(args.message_id);
179
- // Local first unless --remote
180
- if (!args.remote) {
181
- try {
182
- const local = mailstore.readMessage(id);
183
- if (local) {
184
- try {
185
- mailstore.setFlag(id, "viewed", true);
186
- }
187
- catch { /* ignore */ }
188
- return ok(JSON.stringify(local, null, 2));
189
- }
190
- }
191
- catch { /* fall through to server */ }
192
- }
193
- const identity = resolveAgentForWorkspace(ws);
194
- if (!identity.fromAddress) {
195
- return err("No OPVS mail agent identity configured. Run opvs_register first.");
196
- }
197
- const respText = await callApi("GET", buildUrl(`/api/v1/opvs/messages/${id}`, undefined, fmt), ws, undefined, identity.headers);
198
- try {
199
- const msg = JSON.parse(respText);
200
- if (msg && msg.id) {
201
- mailstore.appendIncoming(msg);
202
- mailstore.setFlag(id, "viewed", true);
203
- }
204
- }
205
- catch { /* response not JSON */ }
206
- return ok(respText);
207
- }
208
- case "opvs_reply": {
209
- const messageId = String(args.message_id);
210
- const body = String(args.body);
211
- const identity = resolveAgentForWorkspace(ws);
212
- if (!identity.fromAddress) {
213
- return err("No OPVS mail agent identity configured. Run opvs_register first.");
214
- }
215
- const respText = await callApi("POST", "/api/v1/opvs/reply", ws, { message_id: messageId, body }, identity.headers);
216
- try {
217
- const parsed = JSON.parse(respText);
218
- const original = mailstore.readMessage(messageId);
219
- if (parsed.message_id) {
220
- mailstore.appendOutgoing(synthesizeOutgoing({
221
- message_id: parsed.message_id,
222
- to: original?.from_agent ?? "agent",
223
- type: "<",
224
- body,
225
- thread_id: original?.thread_id ?? messageId,
226
- reply_to_id: messageId,
227
- fromName: identity.fromName,
228
- }));
229
- }
230
- }
231
- catch { /* non-fatal */ }
232
- return ok(respText);
233
- }
234
- case "opvs_resolve": {
235
- const id = String(args.message_id);
236
- const identity = resolveAgentForWorkspace(ws);
237
- if (!identity.fromAddress) {
238
- return err("No OPVS mail agent identity configured. Run opvs_register first.");
239
- }
240
- const respText = await callApi("POST", "/api/v1/opvs/resolve", ws, { message_id: id }, identity.headers);
241
- try {
242
- mailstore.setStatus(id, "resolved");
243
- }
244
- catch { /* ignore */ }
245
- return ok(respText);
246
- }
247
- case "opvs_claim": {
248
- const identity = resolveAgentForWorkspace(ws);
249
- if (!identity.fromAddress) {
250
- return err("No OPVS mail agent identity configured. Run opvs_register first.");
251
- }
252
- const respText = await callApi("POST", "/api/v1/opvs/claim", ws, { pool: String(args.pool) }, identity.headers);
253
- try {
254
- const claimed = JSON.parse(respText);
255
- if (claimed && claimed.id)
256
- mailstore.appendIncoming(claimed);
257
- }
258
- catch { /* ignore */ }
259
- return ok(respText);
260
- }
261
- case "opvs_agents": {
262
- const params = {};
263
- if (args.framework)
264
- params.framework = String(args.framework);
265
- if (args.status)
266
- params.status = String(args.status);
267
- if (args.limit)
268
- params.limit = String(args.limit);
269
- return ok(await callApi("GET", buildUrl("/api/v1/opvs/agents", params, fmt), ws));
270
- }
271
- case "opvs_register": {
272
- const body = {};
273
- if (args.name)
274
- body.name = args.name;
275
- if (args.mode)
276
- body.mode = args.mode;
277
- if (args.domain)
278
- body.domain = args.domain;
279
- if (args.framework)
280
- body.framework = args.framework;
281
- if (args.display_name)
282
- body.display_name = args.display_name;
283
- if (args.bio)
284
- body.bio = args.bio;
285
- const responseText = await callApi("POST", "/api/v1/opvs/agents/register", ws, body);
286
- // Auto-persist the api_key into ~/.opvs/config.json so subsequent
287
- // mail-mode tool calls (opvs_send, opvs_ack, …) can resolve it
288
- // without the agent context juggling secrets. Closes the "ghost key"
289
- // bug from the Antigravity debrief — see LEARNINGS.md.
290
- let saved = false;
291
- let savedAddress = null;
292
- try {
293
- const parsed = JSON.parse(responseText);
294
- const fullAddress = parsed.full_address
295
- ?? parsed.agent?.full_address
296
- ?? (parsed.agent?.address && parsed.agent?.domain
297
- ? `${parsed.agent.address}@${parsed.agent.domain}`
298
- : null);
299
- if (parsed.api_key && fullAddress) {
300
- const cfg = getEffectiveConfig(ws);
301
- saveAgentIdentity(cfg.workspace_slug, fullAddress, {
302
- api_key: parsed.api_key,
303
- domain: parsed.agent?.domain ?? String(args.domain ?? "opvs.run"),
304
- framework: parsed.agent?.framework ?? (args.framework ? String(args.framework) : undefined),
305
- // First registration in a fresh workspace becomes default automatically.
306
- });
307
- saved = true;
308
- savedAddress = fullAddress;
309
- }
310
- }
311
- catch {
312
- // Persist failure must not lose the api_key — caller still has the response body.
313
- }
314
- // Surface the saved status so the caller knows they don't need to copy/paste the key.
315
- const annotated = saved
316
- ? `${responseText}\n\n# saved_to_config: true\n# address: ${savedAddress}`
317
- : responseText;
318
- return ok(annotated);
319
- }
320
- // ── local-mirror reads ───────────────────────────────────────
321
- case "opvs_thread": {
322
- const threadId = String(args.thread_id);
323
- try {
324
- const local = mailstore.readThread(threadId);
325
- if (local && local.length > 0) {
326
- return ok(JSON.stringify({ thread_id: threadId, messages: local, source: "local" }, null, 2));
327
- }
328
- }
329
- catch { /* fall through */ }
330
- // Server fallback
331
- const identity = resolveAgentForWorkspace(ws);
332
- if (!identity.fromAddress) {
333
- return err("No OPVS mail agent identity configured. Run opvs_register first.");
334
- }
335
- const respText = await callApi("GET", buildUrl(`/api/v1/opvs/threads/${threadId}`, undefined, fmt), ws, undefined, identity.headers);
336
- try {
337
- const parsed = JSON.parse(respText);
338
- for (const m of parsed.messages ?? []) {
339
- if (m.id)
340
- mailstore.appendIncoming(m);
341
- }
342
- }
343
- catch { /* ignore */ }
344
- return ok(respText);
345
- }
346
- case "opvs_search": {
347
- const query = String(args.query);
348
- try {
349
- const hits = mailstore.searchLocal(query, {
350
- limit: args.limit ? Number(args.limit) : undefined,
351
- thread_id: args.thread_id ? String(args.thread_id) : undefined,
352
- suffix: args.suffix ? String(args.suffix) : undefined,
353
- });
354
- return ok(JSON.stringify({ query, count: hits.length, results: hits }, null, 2));
355
- }
356
- catch (e) {
357
- return err(e.message ?? String(e));
358
- }
359
- }
360
- case "opvs_unread": {
361
- try {
362
- const all = mailstore.readInbox({ limit: 10000, unread: true });
363
- const summary = args.include_summary ? all.slice(0, 20) : undefined;
364
- return ok(JSON.stringify({ count: all.length, summary }, null, 2));
365
- }
366
- catch (e) {
367
- return err(e.message ?? String(e));
368
- }
369
- }
370
- case "opvs_history": {
371
- try {
372
- const tags = args.tag ? [String(args.tag)] : undefined;
373
- const out = mailstore.readInbox({
374
- limit: args.limit ? Number(args.limit) : 50,
375
- unread: !!args.unread,
376
- suffix: args.suffix !== undefined ? String(args.suffix) : undefined,
377
- tags,
378
- since: args.since ? String(args.since) : undefined,
379
- status: args.status ? String(args.status) : undefined,
380
- });
381
- return ok(JSON.stringify({ count: out.length, messages: out }, null, 2));
382
- }
383
- catch (e) {
384
- return err(e.message ?? String(e));
385
- }
386
- }
387
- case "opvs_status": {
388
- const id = String(args.message_id);
389
- try {
390
- const local = mailstore.readMessage(id);
391
- const status = mailstore.getStatus(id);
392
- const flags = mailstore.getFlags(id);
393
- return ok(JSON.stringify({
394
- id,
395
- local_status: status?.status ?? null,
396
- updated_at: status?.updated_at ?? null,
397
- message_status: local?.status ?? null,
398
- flags,
399
- }, null, 2));
400
- }
401
- catch (e) {
402
- return err(e.message ?? String(e));
403
- }
404
- }
405
- // ── status mutations (recipient-only) ──────────────────────
406
- case "opvs_ack":
407
- case "opvs_working":
408
- case "opvs_decline": {
409
- const id = String(args.message_id);
410
- const newStatus = name === "opvs_ack" ? "seen" : name === "opvs_working" ? "working" : "declined";
411
- const identity = resolveAgentForWorkspace(ws);
412
- if (!identity.fromAddress) {
413
- return err(`No OPVS mail agent identity configured. Run opvs_register first to ${name === "opvs_ack" ? "ack" : name === "opvs_working" ? "claim" : "decline"} a message.`);
414
- }
415
- const respText = await callApi("PATCH", `/api/v1/opvs/messages/${id}/status`, ws, { status: newStatus }, identity.headers);
416
- try {
417
- mailstore.setStatus(id, newStatus);
418
- }
419
- catch { /* ignore */ }
420
- return ok(respText);
421
- }
422
- // ── advisory SLA ────────────────────────────────────────────
423
- case "opvs_awaiting": {
424
- try {
425
- const all = mailstore.listAwaiting({
426
- late_only: !!args.late_only,
427
- limit: args.limit ? Number(args.limit) : 100,
428
- });
429
- return ok(JSON.stringify({ count: all.length, awaiting: all }, null, 2));
430
- }
431
- catch (e) {
432
- return err(e.message ?? String(e));
433
- }
434
- }
435
- case "opvs_tickle": {
436
- const id = String(args.message_id);
437
- const message = String(args.message ?? "Just bumping this — any update?");
438
- const identity = resolveAgentForWorkspace(ws);
439
- if (!identity.fromAddress) {
440
- return err("No OPVS mail agent identity configured. Run opvs_register first.");
441
- }
442
- const respText = await callApi("POST", "/api/v1/opvs/reply", ws, { message_id: id, body: message }, identity.headers);
443
- return ok(respText);
444
- }
445
- default: return null;
446
- }
447
- }
448
- //# sourceMappingURL=protocol.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/handlers/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAkE,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAClJ,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGvG;;;;;;;;;;;;GAYG;AACH,SAAS,wBAAwB,CAAC,EAAW;IAK3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE;gBACxD,WAAW,EAAE,QAAQ,CAAC,OAAO;gBAC7B,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;IACnD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAc;IAC9B,gEAAgE;IAChE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,oKAAoK,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mEAAmE,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,oCAAoC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE;IACj0B,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,kGAAkG,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4FAA4F,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0DAA0D,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,EAAE;IACtuB,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,qEAAqE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sDAAsD,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;IACtW,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,6FAA6F,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE;IAC3W,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,mEAAmE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;IACrR,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,iDAAiD,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;IACtQ,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,8BAA8B,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,EAAE;IACtX,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,mDAAmD,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6FAA6F,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,EAAE;IAEhgB,+DAA+D;IAC/D,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,iEAAiE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE;IAC7P,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,6FAA6F,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE;IAC/e,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,mDAAmD,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uEAAuE,EAAE,EAAE,EAAE,EAAE;IACtQ,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,6FAA6F,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kCAAkC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE,EAAE,EAAE,EAAE;IAC5jB,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,iFAAiF,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;IAE/P,+DAA+D;IAC/D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,6KAA6K,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;IAC3W,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,uHAAuH,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;IACzT,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,sGAAsG,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;IAExS,+DAA+D;IAC/D,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,mNAAmN,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sCAAsC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE;IACtc,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,wHAAwH,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kEAAkE,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;CAC/b,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;CAC7F,CAAC;AACF,MAAM,gBAAgB,GAA2B;IAC/C,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;CAClD,CAAC;AAEF,0FAA0F;AAC1F,SAAS,kBAAkB,CAAC,IAU3B;IACC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/E,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC;IAC5D,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,UAAU;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;QACjC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO;QACpC,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,OAAO,CAAC,IAAI;QACtB,aAAa,EAAE,OAAO,CAAC,GAAG;QAC1B,SAAS,EAAE,OAAO,CAAC,MAAM;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACrB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,IAAI,CAAC,IAAI;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,SAAS,cAAc,CAAC,SAA6B,EAAE,EAAU,EAAE,IAAY,EAAE,QAA4B,EAAE,IAAc,EAAE,IAAY,EAAE,QAAwB,EAAE,QAAiB;IACtL,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,IAAI,CAAC;QACH,SAAS,CAAC,cAAc,CAAC,kBAAkB,CAAC;YAC1C,UAAU,EAAE,SAAS;YACrB,EAAE;YACF,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,IAAI;YACJ,SAAS,EAAE,QAAQ;YACnB,QAAQ;SACT,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,IAA6B,EAAE,OAAkB,EAAE,QAAoB;IACpH,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAElC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC;YACnE,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC;YAC1E,MAAM,IAAI,GAAI,IAAI,CAAC,IAA6B,IAAI,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEhD,0EAA0E;YAC1E,0EAA0E;YAC1E,0EAA0E;YAC1E,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,iGAAiG,CAAC,CAAC;YAChH,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YACtF,MAAM,IAAI,GAAG,GAAG,MAAM,OAAO,OAAO,EAAE,CAAC;YAEvC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE;gBACpE,cAAc,EAAE,WAAW;gBAC3B,GAAG,QAAQ,CAAC,OAAO;aACpB,CAAC,CAAC;YACH,uEAAuE;YACvE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAA4B,CAAC;gBAC/D,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5H,CAAC;YAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;YACjD,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;gBAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/E,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,kEAAkE;YAClE,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,4GAA4G,CAAC,CAAC;YAC3H,CAAC;YACD,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChH,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,8BAA8B;YAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oBACxC,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,CAAC;4BAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;wBACrE,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,kEAAkE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,yBAAyB,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChI,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAgB,CAAC;gBAChD,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;oBAClB,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;oBAC9B,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;YACnC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,kEAAkE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpH,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAA4B,CAAC;gBAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,SAAS,CAAC,cAAc,CAAC,kBAAkB,CAAC;wBAC1C,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,EAAE,EAAE,QAAQ,EAAE,UAAU,IAAI,OAAO;wBACnC,IAAI,EAAE,GAAG;wBACT,IAAI;wBACJ,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,SAAS;wBAC3C,WAAW,EAAE,SAAS;wBACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;qBAC5B,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,kEAAkE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzG,IAAI,CAAC;gBAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACnE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,kEAAkE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChH,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAuB,CAAC;gBAC3D,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE;oBAAE,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAA4B,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3C,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACpD,IAAI,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAC7D,IAAI,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAElC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,8BAA8B,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAErF,kEAAkE;YAClE,+DAA+D;YAC/D,qEAAqE;YACrE,uDAAuD;YACvD,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAIrC,CAAC;gBACF,MAAM,WAAW,GACf,MAAM,CAAC,YAAY;uBAChB,MAAM,CAAC,KAAK,EAAE,YAAY;uBAC1B,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM;wBAC/C,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;wBAClD,CAAC,CAAC,IAAI,CAAC,CAAC;gBACZ,IAAI,MAAM,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;oBAClC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;oBACnC,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,EAAE;wBACjD,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC;wBACjE,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBAC3F,yEAAyE;qBAC1E,CAAC,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC;oBACb,YAAY,GAAG,WAAW,CAAC;gBAC7B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kFAAkF;YACpF,CAAC;YAED,sFAAsF;YACtF,MAAM,SAAS,GAAG,KAAK;gBACrB,CAAC,CAAC,GAAG,YAAY,2CAA2C,YAAY,EAAE;gBAC1E,CAAC,CAAC,YAAY,CAAC;YACjB,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAED,gEAAgE;QAEhE,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC7C,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChG,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC9B,kBAAkB;YAClB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,kEAAkE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,wBAAwB,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACrI,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAiC,CAAC;gBACpE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACtC,IAAI,CAAC,CAAC,EAAE;wBAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE;oBACxC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;oBAClD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC9D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;iBACtD,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACnF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAE,CAAW,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpE,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAE,CAAW,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;oBAC9B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC3C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;oBACrB,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;oBACnE,IAAI;oBACJ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;oBAClD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;iBACtD,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAE,CAAW,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACrC,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;oBACvB,EAAE;oBACF,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI;oBACpC,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;oBACtC,cAAc,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI;oBACrC,KAAK;iBACN,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAE,CAAW,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,8DAA8D;QAE9D,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;YAClG,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,sEAAsE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC;YAC7K,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,OAAO,EACP,yBAAyB,EAAE,SAAS,EACpC,EAAE,EACF,EAAE,MAAM,EAAE,SAAS,EAAE,EACrB,QAAQ,CAAC,OAAO,CACjB,CAAC;YACF,IAAI,CAAC;gBAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAClE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,+DAA+D;QAE/D,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC;oBACjC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;oBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;iBAC7C,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAE,CAAW,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,iCAAiC,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,kEAAkE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtH,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Stages handler — task stages (sequential steps) + task links
3
- */
4
- import { type ToolDef, type ToolResult, type CallApiFn, type BuildUrlFn } from "./types.js";
5
- export declare const TOOLS: ToolDef[];
6
- export declare function handleTool(name: string, args: Record<string, unknown>, callApi: CallApiFn, buildUrl: BuildUrlFn): Promise<ToolResult | null>;
@@ -1,66 +0,0 @@
1
- /**
2
- * Stages handler — task stages (sequential steps) + task links
3
- */
4
- import { ok, err, WORKSPACE_PROP, resolveWorkspace, getFormat } from "./types.js";
5
- export const TOOLS = [
6
- // ── Stages ──
7
- { name: "list_stages", description: "List stages (sequential in-card steps) for a task. Stages enable multi-agent handoff workflows within a single task.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
8
- { name: "create_stage", description: "Create a stage on a task. The first stage auto-activates. Subsequent stages stay pending until the previous one is completed via handoff.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, title: { type: "string", description: "Stage title" }, description: { type: "string", description: "Stage description" }, assignee_agent_id: { type: "string", description: "Agent UUID to assign this stage to" }, agent_instructions: { type: "string", description: "Instructions for the agent handling this stage" }, position: { type: "number", description: "Position in stage order" }, ...WORKSPACE_PROP }, required: ["task_id", "title"] } },
9
- { name: "update_stage", description: "Update a stage (pending or active only). Provide only the fields you want to change.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, stage_id: { type: "string", description: "Stage UUID" }, title: { type: "string", description: "New title" }, description: { type: "string", description: "New description" }, assignee_agent_id: { type: "string", description: "New agent assignment" }, agent_instructions: { type: "string", description: "New agent instructions" }, ...WORKSPACE_PROP }, required: ["task_id", "stage_id"] } },
10
- { name: "complete_stage", description: "Complete a stage and hand off to the next one. Adds a handoff comment. If this is the last stage, the task can be completed.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, stage_id: { type: "string", description: "Stage UUID to complete" }, comment: { type: "string", description: "Handoff comment for the next stage's assignee" }, ...WORKSPACE_PROP }, required: ["task_id", "stage_id"] } },
11
- { name: "reorder_stages", description: "Reorder pending stages on a task. Active and completed stages cannot be reordered.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, order: { type: "array", items: { type: "string" }, description: "Stage UUIDs in desired order" }, ...WORKSPACE_PROP }, required: ["task_id", "order"] } },
12
- // ── Task Links ──
13
- { name: "list_task_links", description: "List all links for a task (incoming and outgoing). Link types: spawned, blocked_by, related.", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Task UUID" }, ...WORKSPACE_PROP }, required: ["task_id"] } },
14
- { name: "create_task_link", description: "Create a link between two tasks. Types: 'spawned' (this task created the target), 'blocked_by' (this task is blocked by target), 'related' (general relation).", inputSchema: { type: "object", properties: { task_id: { type: "string", description: "Source task UUID" }, target_task_id: { type: "string", description: "Target task UUID" }, link_type: { type: "string", description: "spawned, blocked_by, or related (default: related)" }, ...WORKSPACE_PROP }, required: ["task_id", "target_task_id"] } },
15
- { name: "delete_task_link", description: "Delete a task link by its ID.", inputSchema: { type: "object", properties: { link_id: { type: "string", description: "Link UUID" }, ...WORKSPACE_PROP }, required: ["link_id"] } },
16
- ];
17
- export async function handleTool(name, args, callApi, buildUrl) {
18
- const fmt = getFormat();
19
- const ws = resolveWorkspace(args);
20
- switch (name) {
21
- // ── Stages ──
22
- case "list_stages": return ok(await callApi("GET", buildUrl(`/api/v1/board/tasks/${args.task_id}/stages`, undefined, fmt), ws));
23
- case "create_stage": {
24
- const body = { title: args.title };
25
- if (args.description)
26
- body.description = args.description;
27
- if (args.assignee_agent_id)
28
- body.assignee_agent_id = args.assignee_agent_id;
29
- if (args.agent_instructions)
30
- body.agent_instructions = args.agent_instructions;
31
- if (args.position !== undefined)
32
- body.position = args.position;
33
- return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/stages`, ws, body));
34
- }
35
- case "update_stage": {
36
- const body = {};
37
- if (args.title)
38
- body.title = args.title;
39
- if (args.description)
40
- body.description = args.description;
41
- if (args.assignee_agent_id)
42
- body.assignee_agent_id = args.assignee_agent_id;
43
- if (args.agent_instructions)
44
- body.agent_instructions = args.agent_instructions;
45
- if (Object.keys(body).length === 0)
46
- return err("Nothing to update. Provide title, description, assignee_agent_id, or agent_instructions.");
47
- return ok(await callApi("PATCH", `/api/v1/board/tasks/${args.task_id}/stages/${args.stage_id}`, ws, body));
48
- }
49
- case "complete_stage": {
50
- const body = {};
51
- if (args.comment)
52
- body.comment = args.comment;
53
- return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/stages/${args.stage_id}/handoff`, ws, body));
54
- }
55
- case "reorder_stages": return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/stages/reorder`, ws, { order: args.order }));
56
- // ── Task Links ──
57
- case "list_task_links": return ok(await callApi("GET", buildUrl(`/api/v1/board/tasks/${args.task_id}/links`, undefined, fmt), ws));
58
- case "create_task_link": return ok(await callApi("POST", `/api/v1/board/tasks/${args.task_id}/links`, ws, { target_task_id: args.target_task_id, link_type: args.link_type || "related" }));
59
- case "delete_task_link": {
60
- await callApi("DELETE", `/api/v1/board/task-links/${args.link_id}`, ws);
61
- return ok(`Deleted link ${args.link_id}`);
62
- }
63
- default: return null;
64
- }
65
- }
66
- //# sourceMappingURL=stages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stages.js","sourceRoot":"","sources":["../../src/handlers/stages.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Shared types for MCP handler modules.
3
- */
4
- export type ToolResult = {
5
- content: {
6
- type: "text";
7
- text: string;
8
- }[];
9
- isError?: true;
10
- };
11
- export type ToolDef = {
12
- name: string;
13
- description: string;
14
- inputSchema: {
15
- type: "object";
16
- properties: Record<string, unknown>;
17
- required?: string[];
18
- };
19
- };
20
- export type CallApiFn = (method: "GET" | "POST" | "PATCH" | "PUT" | "DELETE", path: string, wsSlug?: string, body?: unknown, headers?: Record<string, string>) => Promise<string>;
21
- export type BuildUrlFn = typeof import("@opvs-ai/core").buildUrl;
22
- export declare function ok(text: string): ToolResult;
23
- export declare function err(msg: string): ToolResult;
24
- export declare const WORKSPACE_PROP: {
25
- workspace: {
26
- type: string;
27
- description: string;
28
- };
29
- };
30
- export declare function resolveWorkspace(args: Record<string, unknown>): string | undefined;
31
- export declare function getFormat(): string;