surface-cli 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,12 @@
1
1
  import { execFile } from "node:child_process";
2
+ import { createHash } from "node:crypto";
2
3
  import { promisify } from "node:util";
3
4
  const execFileAsync = promisify(execFile);
4
5
  const OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions";
6
+ const OPENCLAW_BATCH_MAX_THREADS = 3;
7
+ const OPENCLAW_BATCH_MAX_INPUT_BYTES = 64 * 1024;
8
+ const OPENCLAW_SUMMARY_THINKING = "low";
9
+ const SUMMARY_PROMPT_VERSION = "2026-04-21-me-scoped-v1";
5
10
  function clipUtf8(input, maxBytes) {
6
11
  if (Buffer.byteLength(input, "utf8") <= maxBytes) {
7
12
  return input;
@@ -12,7 +17,17 @@ function clipUtf8(input, maxBytes) {
12
17
  }
13
18
  return clipped;
14
19
  }
15
- function buildThreadPayload(thread, maxBytes) {
20
+ function buildSummaryAccountOwner(identity) {
21
+ return {
22
+ primary_email: identity.primary_email,
23
+ display_name: identity.display_name,
24
+ email_aliases: identity.email_aliases,
25
+ name_aliases: identity.name_aliases,
26
+ primary_email_source: identity.primary_email_source,
27
+ display_name_source: identity.display_name_source,
28
+ };
29
+ }
30
+ function buildThreadPayload(thread, maxBytes, accountOwner) {
16
31
  let remainingBytes = maxBytes;
17
32
  const messages = [];
18
33
  for (const message of thread.messages) {
@@ -27,7 +42,6 @@ function buildThreadPayload(thread, maxBytes) {
27
42
  cc: message.envelope.cc,
28
43
  sent_at: message.envelope.sent_at,
29
44
  received_at: message.envelope.received_at,
30
- unread: message.envelope.unread,
31
45
  snippet: message.snippet,
32
46
  body: bodyText,
33
47
  invite: message.invite ?? null,
@@ -40,23 +54,68 @@ function buildThreadPayload(thread, maxBytes) {
40
54
  });
41
55
  }
42
56
  return {
57
+ summary_prompt_version: SUMMARY_PROMPT_VERSION,
58
+ account_owner: accountOwner,
43
59
  thread_ref: thread.thread_ref,
44
60
  source: thread.source,
45
- envelope: thread.envelope,
61
+ subject: thread.envelope.subject,
62
+ participants: thread.envelope.participants,
46
63
  messages,
47
64
  };
48
65
  }
49
- function buildPrompt(thread, config) {
66
+ function buildSinglePrompt(payload) {
50
67
  return JSON.stringify({
51
68
  instructions: [
52
69
  "Summarize this email thread for an automation agent.",
53
70
  "Return JSON only.",
54
71
  "Use exactly this shape: {\"brief\": string, \"needs_action\": boolean, \"importance\": \"low\" | \"medium\" | \"high\"}.",
55
- "Keep brief to one or two sentences.",
72
+ "The account_owner object defines ME for this account. Judge needs_action only from ME's perspective.",
73
+ "Set needs_action=true only if the latest state indicates ME must reply, decide, RSVP, send information, pay, approve, complete a task, or otherwise act now.",
74
+ "Set needs_action=false if ME already replied and the next move is with someone else, if the thread is informational, or if the action is merely optional or marketing.",
75
+ "Use account_owner primary_email and email_aliases for envelope matching; use display_name and name_aliases for body-text references to ME. Do not guess that a person is ME if the identity does not match.",
76
+ "For threads with more than one message, include the causal chain: what changed over the thread, who did what, and what the latest state implies.",
77
+ "Keep brief to one sentence for one-message threads and two to four sentences for multi-message threads.",
78
+ "Messages are provided latest-first. Reconstruct the causal chain from older messages to newest, but base action status on the latest state.",
79
+ "Do not infer named programs, teams, organizations, or context that are not explicitly present in the thread.",
80
+ "When details are ambiguous, prefer generic wording over guessed specifics.",
56
81
  ],
57
- thread: buildThreadPayload(thread, config.summaryInputMaxBytes),
82
+ thread: payload,
58
83
  }, null, 2);
59
84
  }
85
+ function buildBatchPrompt(batch) {
86
+ return JSON.stringify({
87
+ instructions: [
88
+ "Summarize each email thread for an automation agent.",
89
+ "Return JSON only.",
90
+ "Use exactly this shape: {\"summaries\": [{\"thread_ref\": string, \"brief\": string, \"needs_action\": boolean, \"importance\": \"low\" | \"medium\" | \"high\"}]}",
91
+ "Return exactly one summary object per input thread.",
92
+ "Do not omit threads, add extra threads, or merge two threads into one summary.",
93
+ "Each thread includes the same account_owner object defining ME for this account. Judge needs_action only from ME's perspective.",
94
+ "Set needs_action=true only if the latest state indicates ME must reply, decide, RSVP, send information, pay, approve, complete a task, or otherwise act now.",
95
+ "Set needs_action=false if ME already replied and the next move is with someone else, if the thread is informational, or if the action is merely optional or marketing.",
96
+ "Use account_owner primary_email and email_aliases for envelope matching; use display_name and name_aliases for body-text references to ME. Do not guess that a person is ME if the identity does not match.",
97
+ "For threads with more than one message, include the causal chain: what changed over the thread, who did what, and what the latest state implies.",
98
+ "Keep each brief to one sentence for one-message threads and two to four sentences for multi-message threads.",
99
+ "Messages are provided latest-first. Reconstruct the causal chain from older messages to newest, but base action status on the latest state.",
100
+ "Summarize each thread independently. Never carry named programs, teams, organizations, or context from one thread into another.",
101
+ "Do not infer named programs, teams, organizations, or context that are not explicitly present in that thread.",
102
+ "When details are ambiguous, prefer generic wording over guessed specifics.",
103
+ ],
104
+ threads: batch.map((entry) => entry.payload),
105
+ }, null, 2);
106
+ }
107
+ function makeFingerprint(payload) {
108
+ return createHash("sha256").update(JSON.stringify(payload)).digest("hex");
109
+ }
110
+ function prepareThread(thread, config, accountOwner) {
111
+ const payload = buildThreadPayload(thread, config.summaryInputMaxBytes, accountOwner);
112
+ return {
113
+ thread,
114
+ payload,
115
+ fingerprint: makeFingerprint(payload),
116
+ inputBytes: Buffer.byteLength(JSON.stringify(payload), "utf8"),
117
+ };
118
+ }
60
119
  function stripMarkdownFences(rawText) {
61
120
  const fencedMatch = rawText.trim().match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);
62
121
  return fencedMatch?.[1]?.trim() ?? rawText.trim();
@@ -80,7 +139,56 @@ function tryParseSummaryObject(rawText) {
80
139
  importance,
81
140
  };
82
141
  }
83
- async function summarizeWithOpenRouter(thread, config) {
142
+ function tryParseBatchSummaryObject(rawText, expectedThreadRefs) {
143
+ const parsed = JSON.parse(stripMarkdownFences(rawText));
144
+ const items = Array.isArray(parsed.summaries) ? parsed.summaries : [];
145
+ const summaries = new Map();
146
+ for (const item of items) {
147
+ if (!item || typeof item !== "object") {
148
+ continue;
149
+ }
150
+ const record = item;
151
+ const threadRef = typeof record.thread_ref === "string" ? record.thread_ref : "";
152
+ if (!threadRef || summaries.has(threadRef)) {
153
+ continue;
154
+ }
155
+ const parsedSummary = tryParseSummaryObject(JSON.stringify(record));
156
+ summaries.set(threadRef, parsedSummary);
157
+ }
158
+ if (expectedThreadRefs.some((threadRef) => !summaries.has(threadRef))) {
159
+ throw new Error("Batch summary response omitted one or more threads.");
160
+ }
161
+ return summaries;
162
+ }
163
+ function extractJsonFromMixedOutput(rawOutput) {
164
+ const trimmed = rawOutput.trim();
165
+ const start = trimmed.indexOf("{");
166
+ const end = trimmed.lastIndexOf("}");
167
+ if (start >= 0 && end > start) {
168
+ return trimmed.slice(start, end + 1);
169
+ }
170
+ return trimmed;
171
+ }
172
+ function extractTextFromOpenClawEnvelope(rawOutput) {
173
+ const parsed = JSON.parse(extractJsonFromMixedOutput(rawOutput));
174
+ const payloads = Array.isArray(parsed.payloads)
175
+ ? parsed.payloads
176
+ : parsed.result && typeof parsed.result === "object" && Array.isArray(parsed.result.payloads)
177
+ ? parsed.result.payloads
178
+ : Array.isArray(parsed.outputs)
179
+ ? parsed.outputs
180
+ : [];
181
+ for (const payload of payloads) {
182
+ if (payload && typeof payload === "object" && typeof payload.text === "string") {
183
+ return payload.text;
184
+ }
185
+ }
186
+ if (typeof parsed.summary === "string") {
187
+ return parsed.summary;
188
+ }
189
+ return rawOutput;
190
+ }
191
+ async function summarizeWithOpenRouter(payload, config) {
84
192
  const apiKey = process.env.OPENROUTER_API_KEY;
85
193
  if (!apiKey) {
86
194
  throw new Error("OPENROUTER_API_KEY is required when summarizer_backend = openrouter.");
@@ -102,7 +210,7 @@ async function summarizeWithOpenRouter(thread, config) {
102
210
  },
103
211
  {
104
212
  role: "user",
105
- content: buildPrompt(thread, config),
213
+ content: buildSinglePrompt(payload),
106
214
  },
107
215
  ],
108
216
  }),
@@ -111,8 +219,8 @@ async function summarizeWithOpenRouter(thread, config) {
111
219
  if (!response.ok) {
112
220
  throw new Error(`OpenRouter request failed with HTTP ${response.status}: ${await response.text()}`);
113
221
  }
114
- const payload = await response.json();
115
- const content = payload.choices?.[0]?.message?.content;
222
+ const responsePayload = await response.json();
223
+ const content = responsePayload.choices?.[0]?.message?.content;
116
224
  const rawText = typeof content === "string"
117
225
  ? content
118
226
  : Array.isArray(content)
@@ -121,57 +229,9 @@ async function summarizeWithOpenRouter(thread, config) {
121
229
  .map((item) => item.text)
122
230
  .join("")
123
231
  : "";
124
- const parsed = tryParseSummaryObject(rawText);
125
- return {
126
- backend: "openrouter",
127
- model: config.summarizerModel,
128
- brief: parsed.brief,
129
- needs_action: parsed.needs_action,
130
- importance: parsed.importance,
131
- };
132
- }
133
- function extractJsonFromMixedOutput(rawOutput) {
134
- const trimmed = rawOutput.trim();
135
- const start = trimmed.indexOf("{");
136
- const end = trimmed.lastIndexOf("}");
137
- if (start >= 0 && end > start) {
138
- return trimmed.slice(start, end + 1);
139
- }
140
- return trimmed;
232
+ return tryParseSummaryObject(rawText);
141
233
  }
142
- function extractTextFromOpenClawEnvelope(rawOutput) {
143
- const parsed = JSON.parse(extractJsonFromMixedOutput(rawOutput));
144
- const payloads = Array.isArray(parsed.payloads)
145
- ? parsed.payloads
146
- : parsed.result && typeof parsed.result === "object" && Array.isArray(parsed.result.payloads)
147
- ? parsed.result.payloads
148
- : [];
149
- for (const payload of payloads) {
150
- if (payload && typeof payload === "object" && typeof payload.text === "string") {
151
- return payload.text;
152
- }
153
- }
154
- if (typeof parsed.summary === "string") {
155
- return parsed.summary;
156
- }
157
- return rawOutput;
158
- }
159
- async function resolveOpenClawModel(agentId) {
160
- try {
161
- const { stdout } = await execFileAsync("openclaw", ["agents", "list", "--json"], {
162
- timeout: 10_000,
163
- maxBuffer: 1024 * 1024,
164
- });
165
- const payload = JSON.parse(stdout);
166
- const matched = payload.find((agent) => agent.id === agentId)
167
- ?? payload.find((agent) => agent.isDefault);
168
- return matched?.model ?? "openclaw/local-agent";
169
- }
170
- catch {
171
- return "openclaw/local-agent";
172
- }
173
- }
174
- async function summarizeWithOpenClaw(thread, config) {
234
+ async function runOpenClawPrompt(prompt, config) {
175
235
  const agentId = process.env.SURFACE_OPENCLAW_AGENT ?? "main";
176
236
  const { stdout } = await execFileAsync("openclaw", [
177
237
  "--no-color",
@@ -182,36 +242,159 @@ async function summarizeWithOpenClaw(thread, config) {
182
242
  agentId,
183
243
  "--json",
184
244
  "--thinking",
185
- "medium",
245
+ OPENCLAW_SUMMARY_THINKING,
186
246
  "--timeout",
187
247
  String(Math.max(10, Math.ceil(config.summarizerTimeoutMs / 1000))),
188
248
  "--message",
189
- buildPrompt(thread, config),
249
+ prompt,
190
250
  ], {
191
251
  timeout: config.summarizerTimeoutMs,
192
- maxBuffer: 1024 * 1024,
252
+ maxBuffer: 2 * 1024 * 1024,
193
253
  });
194
- const parsed = tryParseSummaryObject(extractTextFromOpenClawEnvelope(stdout));
254
+ return extractTextFromOpenClawEnvelope(stdout);
255
+ }
256
+ async function summarizeOpenClawSingle(thread, config) {
257
+ return tryParseSummaryObject(await runOpenClawPrompt(buildSinglePrompt(thread.payload), config));
258
+ }
259
+ function buildOpenClawBatches(threads) {
260
+ const batches = [];
261
+ let currentBatch = [];
262
+ let currentBytes = 0;
263
+ for (const thread of threads) {
264
+ const nextBytes = currentBytes + thread.inputBytes;
265
+ if (currentBatch.length > 0
266
+ && (currentBatch.length >= OPENCLAW_BATCH_MAX_THREADS || nextBytes > OPENCLAW_BATCH_MAX_INPUT_BYTES)) {
267
+ batches.push(currentBatch);
268
+ currentBatch = [];
269
+ currentBytes = 0;
270
+ }
271
+ currentBatch.push(thread);
272
+ currentBytes += thread.inputBytes;
273
+ }
274
+ if (currentBatch.length > 0) {
275
+ batches.push(currentBatch);
276
+ }
277
+ return batches;
278
+ }
279
+ async function summarizeOpenClawBatch(batch, config) {
280
+ if (batch.length === 1) {
281
+ return new Map([[batch[0].thread.thread_ref, await summarizeOpenClawSingle(batch[0], config)]]);
282
+ }
283
+ try {
284
+ const parsed = tryParseBatchSummaryObject(await runOpenClawPrompt(buildBatchPrompt(batch), config), batch.map((thread) => thread.thread.thread_ref));
285
+ return parsed;
286
+ }
287
+ catch (error) {
288
+ if (batch.length === 1) {
289
+ throw error;
290
+ }
291
+ const midpoint = Math.ceil(batch.length / 2);
292
+ const left = await summarizeOpenClawBatch(batch.slice(0, midpoint), config);
293
+ const right = await summarizeOpenClawBatch(batch.slice(midpoint), config);
294
+ return new Map([...left, ...right]);
295
+ }
296
+ }
297
+ async function summarizeWithOpenClaw(threads, config) {
298
+ const summaries = new Map();
299
+ for (const batch of buildOpenClawBatches(threads)) {
300
+ try {
301
+ const parsed = await summarizeOpenClawBatch(batch, config);
302
+ for (const thread of batch) {
303
+ summaries.set(thread.thread.thread_ref, parsed.get(thread.thread.thread_ref) ?? null);
304
+ }
305
+ }
306
+ catch {
307
+ for (const thread of batch) {
308
+ summaries.set(thread.thread.thread_ref, null);
309
+ }
310
+ }
311
+ }
312
+ return summaries;
313
+ }
314
+ async function resolveSummaryTarget(config) {
315
+ if (config.summarizerBackend === "openrouter") {
316
+ return {
317
+ backend: "openrouter",
318
+ model: config.summarizerModel,
319
+ };
320
+ }
321
+ const agentId = process.env.SURFACE_OPENCLAW_AGENT ?? "main";
195
322
  return {
196
323
  backend: "openclaw",
197
- model: await resolveOpenClawModel(agentId),
198
- brief: parsed.brief,
199
- needs_action: parsed.needs_action,
200
- importance: parsed.importance,
324
+ model: `openclaw/agent:${agentId}`,
201
325
  };
202
326
  }
203
- export async function summarizeThread(thread, config) {
327
+ export async function summarizeAndPersistThreads(threads, config, db, accountIdentity) {
204
328
  if (config.summarizerBackend === "none") {
205
- return null;
329
+ return threads;
206
330
  }
207
- try {
208
- if (config.summarizerBackend === "openrouter") {
209
- return await summarizeWithOpenRouter(thread, config);
331
+ const target = await resolveSummaryTarget(config);
332
+ const accountOwner = buildSummaryAccountOwner(accountIdentity);
333
+ const preparedThreads = threads.map((thread) => prepareThread(thread, config, accountOwner));
334
+ const summaries = new Map();
335
+ const pending = [];
336
+ for (const prepared of preparedThreads) {
337
+ const stored = db.findStoredSummary(prepared.thread.thread_ref);
338
+ if (stored
339
+ && stored.backend === target.backend
340
+ && stored.model === target.model
341
+ && stored.fingerprint === prepared.fingerprint) {
342
+ summaries.set(prepared.thread.thread_ref, {
343
+ backend: stored.backend,
344
+ model: stored.model,
345
+ brief: stored.brief,
346
+ needs_action: Boolean(stored.needs_action),
347
+ importance: stored.importance,
348
+ });
349
+ continue;
210
350
  }
211
- return await summarizeWithOpenClaw(thread, config);
351
+ pending.push(prepared);
212
352
  }
213
- catch {
214
- return null;
353
+ if (pending.length > 0) {
354
+ if (target.backend === "openrouter") {
355
+ for (const prepared of pending) {
356
+ try {
357
+ const parsed = await summarizeWithOpenRouter(prepared.payload, config);
358
+ const summary = {
359
+ backend: target.backend,
360
+ model: target.model,
361
+ brief: parsed.brief,
362
+ needs_action: parsed.needs_action,
363
+ importance: parsed.importance,
364
+ };
365
+ db.upsertSummary(prepared.thread.thread_ref, summary, prepared.fingerprint);
366
+ summaries.set(prepared.thread.thread_ref, summary);
367
+ }
368
+ catch {
369
+ db.clearSummary(prepared.thread.thread_ref);
370
+ summaries.set(prepared.thread.thread_ref, null);
371
+ }
372
+ }
373
+ }
374
+ else {
375
+ const parsed = await summarizeWithOpenClaw(pending, config);
376
+ for (const prepared of pending) {
377
+ const summaryShape = parsed.get(prepared.thread.thread_ref) ?? null;
378
+ if (summaryShape) {
379
+ const summary = {
380
+ backend: target.backend,
381
+ model: target.model,
382
+ brief: summaryShape.brief,
383
+ needs_action: summaryShape.needs_action,
384
+ importance: summaryShape.importance,
385
+ };
386
+ db.upsertSummary(prepared.thread.thread_ref, summary, prepared.fingerprint);
387
+ summaries.set(prepared.thread.thread_ref, summary);
388
+ continue;
389
+ }
390
+ db.clearSummary(prepared.thread.thread_ref);
391
+ summaries.set(prepared.thread.thread_ref, null);
392
+ }
393
+ }
215
394
  }
395
+ return threads.map((thread) => ({
396
+ ...thread,
397
+ summary: summaries.get(thread.thread_ref) ?? null,
398
+ }));
216
399
  }
217
400
  //# sourceMappingURL=summarizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../src/summarizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../src/summarizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAOtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,kBAAkB,GAAG,+CAA+C,CAAC;AAC3E,MAAM,0BAA0B,GAAG,CAAC,CAAC;AACrC,MAAM,8BAA8B,GAAG,EAAE,GAAG,IAAI,CAAC;AACjD,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAsDzD,SAAS,QAAQ,CAAC,KAAa,EAAE,QAAgB;IAC/C,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QAChE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAyB;IACzD,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,MAA8B,EAC9B,QAAgB,EAChB,YAAiC;IAEjC,IAAI,cAAc,GAAG,QAAQ,CAAC;IAC9B,MAAM,QAAQ,GAAqC,EAAE,CAAC;IAEtD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC7D,cAAc,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEtD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;YAC3B,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;YACvB,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;YACvB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO;YACjC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW;YACzC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBACpD,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,sBAAsB,EAAE,sBAAsB;QAC9C,aAAa,EAAE,YAAY;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;QAChC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY;QAC1C,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA6B;IACtD,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,YAAY,EAAE;YACZ,sDAAsD;YACtD,mBAAmB;YACnB,0HAA0H;YAC1H,sGAAsG;YACtG,8JAA8J;YAC9J,wKAAwK;YACxK,6MAA6M;YAC7M,kJAAkJ;YAClJ,yGAAyG;YACzG,6IAA6I;YAC7I,8GAA8G;YAC9G,4EAA4E;SAC7E;QACD,MAAM,EAAE,OAAO;KAChB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA8B;IACtD,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,YAAY,EAAE;YACZ,sDAAsD;YACtD,mBAAmB;YACnB,oKAAoK;YACpK,qDAAqD;YACrD,gFAAgF;YAChF,iIAAiI;YACjI,8JAA8J;YAC9J,wKAAwK;YACxK,6MAA6M;YAC7M,kJAAkJ;YAClJ,8GAA8G;YAC9G,6IAA6I;YAC7I,iIAAiI;YACjI,+GAA+G;YAC/G,4EAA4E;SAC7E;QACD,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;KAC7C,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAA6B;IACpD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CACpB,MAA8B,EAC9B,MAAqB,EACrB,YAAiC;IAEjC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IACtF,OAAO;QACL,MAAM;QACN,OAAO;QACP,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;QACrC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC/E,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAA4B,CAAC;IACnF,MAAM,SAAS,GACb,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAClD,CAAC,CAAC,MAAM,CAAC,OAAkC;QAC3C,CAAC,CAAC,MAAM,CAAC;IAEb,MAAM,KAAK,GAAG,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;IACjG,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,KAAK,KAAK,IAAI,SAAS,CAAC,UAAU,KAAK,QAAQ,IAAI,SAAS,CAAC,UAAU,KAAK,MAAM;QACvH,CAAC,CAAC,SAAS,CAAC,UAAU;QACtB,CAAC,CAAC,QAAQ,CAAC;IAEb,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO;QACL,KAAK;QACL,YAAY,EAAE,WAAW;QACzB,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAe,EAAE,kBAA4B;IAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAA4B,CAAC;IACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAElD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAA+B,CAAC;QAC/C,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,SAAS;QACX,CAAC;QAED,MAAM,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAiB;IACnD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,+BAA+B,CAAC,SAAiB;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAA4B,CAAC;IAE5F,MAAM,QAAQ,GACZ,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC5B,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,MAAM,CAAC,MAAkC,CAAC,QAAQ,CAAC;YACxH,CAAC,CAAE,MAAM,CAAC,MAAkC,CAAC,QAAqB;YAClE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC7B,CAAC,CAAC,MAAM,CAAC,OAAO;gBAChB,CAAC,CAAC,EAAE,CAAC;IAEb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAQ,OAAmC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5G,OAAQ,OAAmC,CAAC,IAAc,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,OAA6B,EAAE,MAAqB;IACzF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,EAAE;QAC/C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,eAAe;YAC7B,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EACL,kGAAkG;iBACrG;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;iBACpC;aACF;SACF,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC;KACxD,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,MAAM,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,IAAI,EAE1C,CAAC;IACF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ;QACzC,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACtB,CAAC,CAAC,OAAO;iBACN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;iBACxE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;iBACxB,IAAI,CAAC,EAAE,CAAC;YACX,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAAqB;IACpE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC;IAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CACpC,UAAU,EACV;QACE,YAAY;QACZ,aAAa;QACb,QAAQ;QACR,OAAO;QACP,SAAS;QACT,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,yBAAyB;QACzB,WAAW;QACX,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC,CAAC;QAClE,WAAW;QACX,MAAM;KACP,EACD;QACE,OAAO,EAAE,MAAM,CAAC,mBAAmB;QACnC,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC3B,CACF,CAAC;IAEF,OAAO,+BAA+B,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,MAA6B,EAAE,MAAqB;IACzF,OAAO,qBAAqB,CAAC,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgC;IAC5D,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,IAAI,YAAY,GAA4B,EAAE,CAAC;IAC/C,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC;QACnD,IACE,YAAY,CAAC,MAAM,GAAG,CAAC;eACpB,CAAC,YAAY,CAAC,MAAM,IAAI,0BAA0B,IAAI,SAAS,GAAG,8BAA8B,CAAC,EACpG,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,YAAY,GAAG,EAAE,CAAC;YAClB,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,KAA8B,EAC9B,MAAqB;IAErB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,0BAA0B,CACvC,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,EACxD,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAChD,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1E,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAgC,EAChC,MAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEzD,KAAK,MAAM,KAAK,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3D,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC3B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC3B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,MAAqB;IACvD,IAAI,MAAM,CAAC,iBAAiB,KAAK,YAAY,EAAE,CAAC;QAC9C,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,MAAM,CAAC,eAAe;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC;IAC7D,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,kBAAkB,OAAO,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAiC,EACjC,MAAqB,EACrB,EAAmB,EACnB,eAAgC;IAEhC,IAAI,MAAM,CAAC,iBAAiB,KAAK,MAAM,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7F,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC1D,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChE,IACE,MAAM;eACH,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;eACjC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;eAC7B,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAC9C,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE;gBACxC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC1C,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YACpC,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACvE,MAAM,OAAO,GAAkB;wBAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC9B,CAAC;oBACF,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;oBAC5E,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACrD,CAAC;gBAAC,MAAM,CAAC;oBACP,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC5C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5D,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;gBACpE,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,OAAO,GAAkB;wBAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,KAAK,EAAE,YAAY,CAAC,KAAK;wBACzB,YAAY,EAAE,YAAY,CAAC,YAAY;wBACvC,UAAU,EAAE,YAAY,CAAC,UAAU;qBACpC,CAAC;oBACF,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;oBAC5E,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBACnD,SAAS;gBACX,CAAC;gBAED,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC5C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,GAAG,MAAM;QACT,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI;KAClD,CAAC,CAAC,CAAC;AACN,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "surface-cli",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "A lean, local-first mail CLI for Gmail and Outlook with a JSON-first contract for automation.",
5
5
  "homepage": "https://github.com/VishalJ99/surface-cli",
6
6
  "repository": {