@rubytech/create-maxy-code 0.1.140 → 0.1.142
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/package.json +1 -1
- package/payload/platform/config/brand.json +1 -1
- package/payload/platform/neo4j/schema.cypher +42 -67
- package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.d.ts.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.js +14 -8
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.js.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.d.ts +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.d.ts.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.js +10 -7
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.js.map +1 -1
- package/payload/platform/plugins/docs/references/internals.md +1 -1
- package/payload/platform/plugins/docs/references/neo4j.md +3 -3
- package/payload/platform/plugins/docs/references/plugins-guide.md +1 -0
- package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/email/PLUGIN.md +3 -7
- package/payload/platform/plugins/email/mcp/dist/index.js +7 -46
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +4 -15
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts +51 -43
- package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/graph.js +223 -229
- package/payload/platform/plugins/email/mcp/dist/lib/graph.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +7 -4
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts +14 -4
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js +69 -84
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js +49 -64
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js +1 -2
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.d.ts +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.js +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.js +101 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js +7 -4
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts +59 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +322 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-base.md +4 -4
- package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +2 -1
- package/payload/platform/plugins/memory/skills/document-ingest/SKILL.md +1 -0
- package/payload/platform/plugins/notion-import/skills/notion-import/SKILL.md +13 -9
- package/payload/platform/plugins/notion-import/skills/notion-import/references/databases.md +11 -9
- package/payload/platform/plugins/notion-import/skills/notion-import/references/page-tree.md +12 -12
- package/payload/platform/plugins/scheduling/PLUGIN.md +18 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +93 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.d.ts +80 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.js +395 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.d.ts +16 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.js +111 -2
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-archive-ics.d.ts +20 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-archive-ics.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-archive-ics.js +63 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-archive-ics.js.map +1 -0
- package/payload/platform/plugins/x-import/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/x-import/PLUGIN.md +33 -0
- package/payload/platform/plugins/x-import/references/archive-shape.md +124 -0
- package/payload/platform/plugins/x-import/references/transcript-shape.md +121 -0
- package/payload/platform/plugins/x-import/skills/x-import/SKILL.md +123 -0
- package/payload/platform/templates/specialists/agents/database-operator.md +6 -2
|
@@ -275,6 +275,13 @@ export function parseICS(content) {
|
|
|
275
275
|
let inVEvent = false;
|
|
276
276
|
let nestedDepth = 0; // tracks BEGIN:VALARM, BEGIN:VTIMEZONE etc. inside VEVENT
|
|
277
277
|
let currentProps = new Map();
|
|
278
|
+
// ATTENDEE may repeat per VEVENT (Map.set would overwrite). Keep raw lines
|
|
279
|
+
// and parse at END:VEVENT.
|
|
280
|
+
let attendeeLines = [];
|
|
281
|
+
let organizerLine = null;
|
|
282
|
+
// VALUE=DATE on DTSTART signals an all-day event (RFC 5545 §3.3.4).
|
|
283
|
+
// The Map-based prop store strips parameters, so we detect this inline.
|
|
284
|
+
let dtStartIsDate = false;
|
|
278
285
|
let eventIndex = 0;
|
|
279
286
|
for (const line of rawLines) {
|
|
280
287
|
const trimmed = line.trim();
|
|
@@ -282,6 +289,9 @@ export function parseICS(content) {
|
|
|
282
289
|
inVEvent = true;
|
|
283
290
|
nestedDepth = 0;
|
|
284
291
|
currentProps = new Map();
|
|
292
|
+
attendeeLines = [];
|
|
293
|
+
organizerLine = null;
|
|
294
|
+
dtStartIsDate = false;
|
|
285
295
|
eventIndex++;
|
|
286
296
|
continue;
|
|
287
297
|
}
|
|
@@ -306,9 +316,22 @@ export function parseICS(content) {
|
|
|
306
316
|
parseErrors.push(`VEVENT #${eventIndex}: missing required DTSTART property`);
|
|
307
317
|
continue;
|
|
308
318
|
}
|
|
319
|
+
const attendees = [];
|
|
320
|
+
if (organizerLine) {
|
|
321
|
+
const a = parseAttendeeLine(organizerLine, "organizer");
|
|
322
|
+
if (a)
|
|
323
|
+
attendees.push(a);
|
|
324
|
+
}
|
|
325
|
+
for (const al of attendeeLines) {
|
|
326
|
+
const a = parseAttendeeLine(al, null);
|
|
327
|
+
if (a)
|
|
328
|
+
attendees.push(a);
|
|
329
|
+
}
|
|
309
330
|
const parsed = {
|
|
310
331
|
summary: summary ? unescapeText(summary) : "(untitled)",
|
|
311
332
|
dtstart: fromICSDateTime(extractDateValue(dtstart)),
|
|
333
|
+
isAllDay: dtStartIsDate,
|
|
334
|
+
attendees,
|
|
312
335
|
};
|
|
313
336
|
const dtend = currentProps.get("DTEND");
|
|
314
337
|
if (dtend)
|
|
@@ -334,9 +357,23 @@ export function parseICS(content) {
|
|
|
334
357
|
if (colonIdx === -1)
|
|
335
358
|
continue;
|
|
336
359
|
const propFull = line.substring(0, colonIdx);
|
|
337
|
-
const value = line.substring(colonIdx + 1);
|
|
338
|
-
// Strip parameters (e.g., DTSTART;TZID=Europe/London:20260413...)
|
|
339
360
|
const propName = propFull.split(";")[0].trim().toUpperCase();
|
|
361
|
+
// ATTENDEE may repeat; ORGANIZER appears at most once. Route both away
|
|
362
|
+
// from the single-value currentProps Map so re-occurrences aren't lost.
|
|
363
|
+
if (propName === "ATTENDEE") {
|
|
364
|
+
attendeeLines.push(line);
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
if (propName === "ORGANIZER") {
|
|
368
|
+
organizerLine = line;
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
// DTSTART;VALUE=DATE:20260413 → all-day event. Detect before stripping
|
|
372
|
+
// parameters.
|
|
373
|
+
if (propName === "DTSTART" && /;VALUE=DATE(?:[;:]|$)/i.test(propFull)) {
|
|
374
|
+
dtStartIsDate = true;
|
|
375
|
+
}
|
|
376
|
+
const value = line.substring(colonIdx + 1);
|
|
340
377
|
currentProps.set(propName, value);
|
|
341
378
|
}
|
|
342
379
|
}
|
|
@@ -359,4 +396,76 @@ export function parseICS(content) {
|
|
|
359
396
|
function extractDateValue(value) {
|
|
360
397
|
return value.trim();
|
|
361
398
|
}
|
|
399
|
+
// ---------------------------------------------------------------------------
|
|
400
|
+
// ATTENDEE / ORGANIZER parsing (RFC 5545 §3.8.4)
|
|
401
|
+
// ---------------------------------------------------------------------------
|
|
402
|
+
const ROLE_NORMALISE = {
|
|
403
|
+
CHAIR: "chair",
|
|
404
|
+
"REQ-PARTICIPANT": "req-participant",
|
|
405
|
+
"OPT-PARTICIPANT": "opt-participant",
|
|
406
|
+
"NON-PARTICIPANT": "non-participant",
|
|
407
|
+
};
|
|
408
|
+
/**
|
|
409
|
+
* Parse one raw `ATTENDEE` or `ORGANIZER` line.
|
|
410
|
+
*
|
|
411
|
+
* `forcedRole` is `"organizer"` when parsing the ORGANIZER property (the role
|
|
412
|
+
* isn't carried in the line itself — it's the property name). For ATTENDEE
|
|
413
|
+
* lines pass `null` and the ROLE parameter (or its absence) decides.
|
|
414
|
+
*
|
|
415
|
+
* Returns null only if the line has no colon at all (malformed).
|
|
416
|
+
*/
|
|
417
|
+
function parseAttendeeLine(line, forcedRole) {
|
|
418
|
+
const colonIdx = line.indexOf(":");
|
|
419
|
+
if (colonIdx === -1)
|
|
420
|
+
return null;
|
|
421
|
+
const propFull = line.substring(0, colonIdx);
|
|
422
|
+
const value = line.substring(colonIdx + 1).trim();
|
|
423
|
+
// Params live between the property name and the first colon, semicolon-
|
|
424
|
+
// separated. e.g. `ATTENDEE;CN="Alice";ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED`
|
|
425
|
+
const paramSegments = propFull.split(";").slice(1);
|
|
426
|
+
const params = new Map();
|
|
427
|
+
for (const seg of paramSegments) {
|
|
428
|
+
const eq = seg.indexOf("=");
|
|
429
|
+
if (eq === -1)
|
|
430
|
+
continue;
|
|
431
|
+
const k = seg.substring(0, eq).trim().toUpperCase();
|
|
432
|
+
let v = seg.substring(eq + 1).trim();
|
|
433
|
+
// Strip surrounding double quotes from quoted-string param values.
|
|
434
|
+
if (v.startsWith('"') && v.endsWith('"') && v.length >= 2)
|
|
435
|
+
v = v.slice(1, -1);
|
|
436
|
+
params.set(k, v);
|
|
437
|
+
}
|
|
438
|
+
// Address resolution. Only `mailto:` URIs become graph identities; other
|
|
439
|
+
// schemes (urn:uuid:..., resource://room/...) are recorded with null and
|
|
440
|
+
// surfaced in the dry-run preview rather than dropped.
|
|
441
|
+
let address = null;
|
|
442
|
+
const mailtoMatch = value.match(/^mailto:(.+)$/i);
|
|
443
|
+
if (mailtoMatch) {
|
|
444
|
+
address = mailtoMatch[1].trim().toLowerCase();
|
|
445
|
+
if (!address)
|
|
446
|
+
address = null;
|
|
447
|
+
}
|
|
448
|
+
// Role: ORGANIZER is fixed; ATTENDEE uses ROLE param (default REQ-PARTICIPANT
|
|
449
|
+
// per RFC 5545 §3.2.18).
|
|
450
|
+
let role;
|
|
451
|
+
if (forcedRole) {
|
|
452
|
+
role = forcedRole;
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
const roleParam = params.get("ROLE")?.toUpperCase() ?? "REQ-PARTICIPANT";
|
|
456
|
+
role = ROLE_NORMALISE[roleParam] ?? "req-participant";
|
|
457
|
+
}
|
|
458
|
+
const attendee = {
|
|
459
|
+
address,
|
|
460
|
+
role,
|
|
461
|
+
rawValue: value,
|
|
462
|
+
};
|
|
463
|
+
const cn = params.get("CN");
|
|
464
|
+
if (cn)
|
|
465
|
+
attendee.displayName = unescapeText(cn);
|
|
466
|
+
const partstat = params.get("PARTSTAT");
|
|
467
|
+
if (partstat)
|
|
468
|
+
attendee.partstat = partstat.toLowerCase();
|
|
469
|
+
return attendee;
|
|
470
|
+
}
|
|
362
471
|
//# sourceMappingURL=ics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ics.js","sourceRoot":"","sources":["../../src/lib/ics.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ics.js","sourceRoot":"","sources":["../../src/lib/ics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;AAuDvC,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,IAAI,GAAG,MAAM,CAAC;AACpB,MAAM,MAAM,GAAG,yBAAyB,CAAC;AACzC,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,WAAW,GAA2B;IAC1C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI;CACvE,CAAC;AAEF,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,6DAA6D;IAC7D,mEAAmE;IACnE,OAAO,KAAK;SACT,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAE,yBAAyB;SACvD,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;SACtB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAG,sBAAsB;AACzD,CAAC;AAED,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,GAAG,CAAC,MAAM,IAAI,eAAe;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,OAAO,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3B,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;QAC/D,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAElD,0EAA0E;QAC1E,+DAA+D;QAC/D,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACtE,GAAG,EAAE,CAAC;QACR,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC;QACb,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,CACL,GAAG,CAAC,CAAC,cAAc,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG;QACzE,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAC7E,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,iDAAiD;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC7E,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;QACvC,0EAA0E;QAC1E,6EAA6E;QAC7E,iEAAiE;QACjE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC;IAED,uCAAuC;IACvC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACvD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;QAC/B,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACzC,CAAC;IAED,OAAO,GAAG,CAAC,CAAC,gDAAgD;AAC9D,CAAC;AAWD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,+CAA+C;IAC/C,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,2CAA2C;IAElE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,8BAA8B,KAAK,CAAC,MAAM,SAAS,EAAE,CAAC;IACtF,CAAC;IAED,MAAM,CAAC,EAAE,AAAD,EAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAElC,6BAA6B;IAC7B,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACjC,CAAC;IAED,gFAAgF;IAChF,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gCAAgC;QACzE,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,mCAAmC,GAAG,EAAE,EAAE,CAAC;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,GAAG,EAAE,EAAE,CAAC;QACnF,OAAO,EAAE,KAAK,EAAE,qBAAqB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC3D,CAAC;IAED,mDAAmD;IACnD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;YAChC,OAAO,EAAE,KAAK,EAAE,2BAA2B,MAAM,EAAE,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,IAAI,gCAAgC,EAAE,CAAC;AACxF,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC5C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC,CAAC,+CAA+C;YAC9D,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG;oBAAE,OAAO,IAAI,CAAC;gBACtD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAWD,MAAM,UAAU,WAAW,CAAC,MAAkB,EAAE,OAAyB;IACvE,MAAM,WAAW,GAAG,OAAO,EAAE,mBAAmB,IAAI,EAAE,CAAC;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,sCAAsC;gBACtC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,iDAAiD;gBACjD,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE5B,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,KAAe,EAAE,KAAe,EAAE,KAAc;IAClE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,WAAW,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,WAAW,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAe,EACf,KAAe,EACf,KAAa,EACb,MAAe;IAEf,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,UAAW,EAAE;YAC9C,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACtC,EAAE,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;SAC5B,CAAC,CAAC;QAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAEjC,0DAA0D;YAC1D,IAAI,GAAuB,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;gBACzF,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YACrE,CAAC;YAED,MAAM,IAAI,GAAG;gBACX,KAAK,CAAC,WAAW,IAAI,EAAE;gBACvB,eAAe,KAAK,CAAC,UAAU,EAAE;gBACjC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;aAC5B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,WAAW,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,WAAW,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,kEAAkE;QAClE,MAAM,IAAI,GAAG;YACX,KAAK,CAAC,WAAW,IAAI,EAAE;YACvB,eAAe,KAAK,CAAC,UAAU,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;SAC1G,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,UAAU,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,wEAAwE;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAEpD,yBAAyB;IACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEzC,8BAA8B;IAC9B,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,iBAAiB,CAAC,CAAC;IAC1E,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,WAAW,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACzE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,0EAA0E;IAC1E,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,0DAA0D;IAC/E,IAAI,YAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;IAClD,2EAA2E;IAC3E,2BAA2B;IAC3B,IAAI,aAAa,GAAa,EAAE,CAAC;IACjC,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,oEAAoE;IACpE,wEAAwE;IACxE,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,QAAQ,GAAG,IAAI,CAAC;YAChB,WAAW,GAAG,CAAC,CAAC;YAChB,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;YACzB,aAAa,GAAG,EAAE,CAAC;YACnB,aAAa,GAAG,IAAI,CAAC;YACrB,aAAa,GAAG,KAAK,CAAC;YACtB,UAAU,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,uDAAuD;QACvD,IAAI,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC3E,WAAW,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,KAAK,YAAY,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1F,WAAW,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QAED,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,QAAQ,GAAG,KAAK,CAAC;YACjB,WAAW,GAAG,CAAC,CAAC;YAEhB,0BAA0B;YAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,WAAW,CAAC,IAAI,CAAC,WAAW,UAAU,qCAAqC,CAAC,CAAC;gBAC7E,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAqB,EAAE,CAAC;YACvC,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,CAAC,GAAG,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;gBACxD,IAAI,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YAED,MAAM,MAAM,GAAgB;gBAC1B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY;gBACvD,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACnD,QAAQ,EAAE,aAAa;gBACvB,SAAS;aACV,CAAC;YAEF,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;YAEnE,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,QAAQ;gBAAE,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEvD,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACpD,IAAI,WAAW;gBAAE,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;YAEhE,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YAE1B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;YAErC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YAClC,kDAAkD;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;gBAAE,SAAS;YAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAE7D,uEAAuE;YACvE,wEAAwE;YACxE,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC5B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAC7B,aAAa,GAAG,IAAI,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,uEAAuE;YACvE,cAAc;YACd,IAAI,QAAQ,KAAK,SAAS,IAAI,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC3C,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,QAAQ,EAAE,CAAC;QACb,WAAW,CAAC,IAAI,CAAC,WAAW,UAAU,8CAA8C,CAAC,CAAC;IACxF,CAAC;IAED,0BAA0B;IAC1B,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,eAAe,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,WAAW,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E,MAAM,cAAc,GAAiC;IACnD,KAAK,EAAE,OAAO;IACd,iBAAiB,EAAE,iBAAiB;IACpC,iBAAiB,EAAE,iBAAiB;IACpC,iBAAiB,EAAE,iBAAiB;CACrC,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CACxB,IAAY,EACZ,UAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,wEAAwE;IACxE,+EAA+E;IAC/E,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,SAAS;QACxB,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,mEAAmE;QACnE,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,uDAAuD;IACvD,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAClD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,8EAA8E;IAC9E,yBAAyB;IACzB,IAAI,IAAkB,CAAC;IACvB,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,GAAG,UAAU,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,iBAAiB,CAAC;QACzE,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC;IACxD,CAAC;IAED,MAAM,QAAQ,GAAmB;QAC/B,OAAO;QACP,IAAI;QACJ,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,EAAE;QAAE,QAAQ,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,QAAQ;QAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEzD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type IcsIngestResult } from "../lib/ics-graph-ingest.js";
|
|
2
|
+
export interface ScheduleArchiveIcsParams {
|
|
3
|
+
filePath: string;
|
|
4
|
+
mode: "dry-run" | "commit";
|
|
5
|
+
accountId: string;
|
|
6
|
+
userId: string;
|
|
7
|
+
sessionId?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Read an .ics file from inside the account directory, parse it, and either
|
|
11
|
+
* preview (dry-run) or write (commit) the graph state described by the file.
|
|
12
|
+
*
|
|
13
|
+
* path-contain + size gate ──▶ parseICS ──▶ ingestIcs(mode)
|
|
14
|
+
*
|
|
15
|
+
* Path containment matches the existing `schedule-import-ics` behaviour:
|
|
16
|
+
* the file must resolve inside `data/accounts/<accountId>/` so an operator
|
|
17
|
+
* can't point the tool at arbitrary disk.
|
|
18
|
+
*/
|
|
19
|
+
export declare function scheduleArchiveIcs(params: ScheduleArchiveIcsParams): Promise<IcsIngestResult>;
|
|
20
|
+
//# sourceMappingURL=schedule-archive-ics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-archive-ics.d.ts","sourceRoot":"","sources":["../../src/tools/schedule-archive-ics.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAuD1B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { resolve, basename } from "node:path";
|
|
2
|
+
import { readFile, stat } from "node:fs/promises";
|
|
3
|
+
import { realpathSync } from "node:fs";
|
|
4
|
+
import { getSession } from "../lib/neo4j.js";
|
|
5
|
+
import { ingestIcs, } from "../lib/ics-graph-ingest.js";
|
|
6
|
+
const MAX_FILE_SIZE_BYTES = 20 * 1024 * 1024; // 20 MB
|
|
7
|
+
/**
|
|
8
|
+
* Read an .ics file from inside the account directory, parse it, and either
|
|
9
|
+
* preview (dry-run) or write (commit) the graph state described by the file.
|
|
10
|
+
*
|
|
11
|
+
* path-contain + size gate ──▶ parseICS ──▶ ingestIcs(mode)
|
|
12
|
+
*
|
|
13
|
+
* Path containment matches the existing `schedule-import-ics` behaviour:
|
|
14
|
+
* the file must resolve inside `data/accounts/<accountId>/` so an operator
|
|
15
|
+
* can't point the tool at arbitrary disk.
|
|
16
|
+
*/
|
|
17
|
+
export async function scheduleArchiveIcs(params) {
|
|
18
|
+
const { filePath, mode, accountId, userId, sessionId } = params;
|
|
19
|
+
const platformRoot = process.env.PLATFORM_ROOT;
|
|
20
|
+
if (!platformRoot) {
|
|
21
|
+
throw new Error("PLATFORM_ROOT environment variable is required");
|
|
22
|
+
}
|
|
23
|
+
// Path containment — same recipe as schedule-import-ics.
|
|
24
|
+
const accountDir = resolve(platformRoot, "..", "data/accounts", accountId);
|
|
25
|
+
let resolvedPath;
|
|
26
|
+
try {
|
|
27
|
+
resolvedPath = realpathSync(filePath);
|
|
28
|
+
const accountResolved = realpathSync(accountDir);
|
|
29
|
+
if (!resolvedPath.startsWith(accountResolved + "/")) {
|
|
30
|
+
process.stderr.write(`[schedule-archive-ics] path validation failed: outside account directory\n`);
|
|
31
|
+
throw new Error("Access denied: file is outside the account directory");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err.code === "ENOENT") {
|
|
36
|
+
process.stderr.write(`[schedule-archive-ics] path validation failed: file not found\n`);
|
|
37
|
+
throw new Error(`File not found: ${filePath}`);
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
const fileStat = await stat(resolvedPath);
|
|
42
|
+
if (fileStat.size > MAX_FILE_SIZE_BYTES) {
|
|
43
|
+
process.stderr.write(`[schedule-archive-ics] path validation failed: file too large (${fileStat.size} bytes)\n`);
|
|
44
|
+
throw new Error(`File too large: ${fileStat.size} bytes (max ${MAX_FILE_SIZE_BYTES})`);
|
|
45
|
+
}
|
|
46
|
+
const fileContent = await readFile(resolvedPath, "utf-8");
|
|
47
|
+
const session = getSession();
|
|
48
|
+
try {
|
|
49
|
+
return await ingestIcs({
|
|
50
|
+
fileContent,
|
|
51
|
+
filename: basename(resolvedPath),
|
|
52
|
+
mode,
|
|
53
|
+
accountId,
|
|
54
|
+
userId,
|
|
55
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
56
|
+
session,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
await session.close();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=schedule-archive-ics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-archive-ics.js","sourceRoot":"","sources":["../../src/tools/schedule-archive-ics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,SAAS,GAEV,MAAM,4BAA4B,CAAC;AAEpC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;AAUtD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAgC;IAEhC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAEhE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,yDAAyD;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAC3E,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,eAAe,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4EAA4E,CAC7E,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iEAAiE,CAClE,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,IAAI,QAAQ,CAAC,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kEAAkE,QAAQ,CAAC,IAAI,WAAW,CAC3F,CAAC;QACF,MAAM,IAAI,KAAK,CACb,mBAAmB,QAAQ,CAAC,IAAI,eAAe,mBAAmB,GAAG,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC;YACrB,WAAW;YACX,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC;YAChC,IAAI;YACJ,SAAS;YACT,MAAM;YACN,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO;SACR,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "x-import",
|
|
3
|
+
"description": "Import an X (Twitter) archive into the Maxy Neo4j graph. Skill-only plugin owned by the database-operator specialist. Opt-in per brand — not enabled by default.",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Rubytech LLC"
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: x-import
|
|
3
|
+
description: "Import an X (Twitter) archive into the Maxy Neo4j graph. Skill-only plugin owned by the database-operator specialist. Opt-in per brand — not enabled by default."
|
|
4
|
+
tools: []
|
|
5
|
+
always: false
|
|
6
|
+
embed: false
|
|
7
|
+
specialist: database-operator
|
|
8
|
+
metadata: {"platform":{"optional":true,"pluginKey":"x-import"}}
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# X Import
|
|
12
|
+
|
|
13
|
+
Ingests an X (formerly Twitter) Basic Data Export (extracted ZIP — a directory of `.js` shims plus media subdirectories) into the Maxy Neo4j graph. Skill-only plugin — no MCP server, no admin tools added. The skill runs under the `specialists:database-operator` specialist, which owns bulk external-archive ingestion.
|
|
14
|
+
|
|
15
|
+
## When this applies
|
|
16
|
+
|
|
17
|
+
The admin agent delegates to `specialists:database-operator` when the operator drops an extracted X archive directory (or a `twitter-<handle>-archive.zip` reference) into chat. The specialist runs the skill's owner + participant confirmation flow before any `.js` shim is read, then dispatches the two existing ingestion surfaces:
|
|
18
|
+
|
|
19
|
+
- **Tweet stream** → `document-ingest` produces one `:KnowledgeDocument` with `source='x'` whose body is the verbatim chronological transcript of the operator's own tweets, replies, and quote-tweet authorship. `:Section` chunking is owned by `memory-classify` (document mode).
|
|
20
|
+
- **Direct messages** → `conversation-archive-ingest.sh --source x-dm` once per distinct `dmConversation`, producing one `:ConversationArchive` per participant set. Senders confirm to existing `:AdminUser` / `:Person` nodes — never auto-created.
|
|
21
|
+
|
|
22
|
+
## What this plugin is not
|
|
23
|
+
|
|
24
|
+
- **Not a new graph writer.** Every write routes through the existing `memory-ingest` (KnowledgeDocument) and `conversation-archive-ingest.sh` (ConversationArchive) surfaces. No bespoke `:Post`, `:DirectMessage`, `:DMThread`, `:Attachment`, or `:Thread` label is introduced; per-thread KD granularity is explicitly rejected.
|
|
25
|
+
- **Not a live X API client.** Archive-only — the X API is rate-limited and paid.
|
|
26
|
+
- **Not a retweet importer.** Retweets-without-comment are not persisted reliably in X archives; the skill drops them.
|
|
27
|
+
|
|
28
|
+
## Relationship to other plugins
|
|
29
|
+
|
|
30
|
+
- **memory** — the underlying graph-write surface used by the skill (`mcp__plugin_memory_memory__memory-write` etc.). The skill passes `source='x'` / `source='x-dm'` and `createdByAgent='x-import'` for provenance on every write.
|
|
31
|
+
- **document-ingest** (memory skill) — owns the tweet-stream KnowledgeDocument writes. `:Section` classification is its responsibility, not this plugin's.
|
|
32
|
+
- **conversation-archive** (memory skill) — owns the DM `:ConversationArchive` writes. The `x-dm` enum entry on `CONVERSATION_SOURCES` and the sibling normaliser in `platform/plugins/memory/mcp/src/lib/conversation-normalisers/x-dm.ts` are the only new code outside this plugin.
|
|
33
|
+
- **database-operator specialist** — owns execution. See [platform/templates/specialists/agents/database-operator.md](../../templates/specialists/agents/database-operator.md) external-archive ingestion clause.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# X archive shape
|
|
2
|
+
|
|
3
|
+
The X (Twitter) Basic Data Export is a ZIP whose extracted layout looks like:
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
Archive of <handle>/
|
|
7
|
+
├── Your archive.html (UI entrypoint — ignored)
|
|
8
|
+
├── data/
|
|
9
|
+
│ ├── account.js (owner identity: accountId, username, displayName)
|
|
10
|
+
│ ├── tweets.js (operator-authored tweets, replies, quote-tweet authorship)
|
|
11
|
+
│ ├── tweet-headers.js (tweet metadata including deletions)
|
|
12
|
+
│ ├── direct-messages.js (1:1 DMs)
|
|
13
|
+
│ ├── direct-messages-group.js (group DMs; absent if none)
|
|
14
|
+
│ ├── profile.js (operator profile metadata — bio, location)
|
|
15
|
+
│ ├── tweet_media/ (images, videos, GIFs attached to tweets)
|
|
16
|
+
│ ├── direct_messages_media/ (images, videos attached to DMs)
|
|
17
|
+
│ └── ... (many other .js files — ignored unless this skill adopts them)
|
|
18
|
+
└── assets/ (frontend bundle — ignored)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## `.js` wrapper grammar
|
|
22
|
+
|
|
23
|
+
Every data file ships as a JSONP-style shim — a single assignment to a global, then a JSON value:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
window.YTD.<feed>.part<N> = <json>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Where:
|
|
30
|
+
|
|
31
|
+
- `<feed>` is a stable token per file (`account`, `tweet`, `tweet_headers`, `direct_messages`, `direct_messages_group`, `profile`, …).
|
|
32
|
+
- `<N>` is the partition index — single-part archives use `0`; very large archives may split into `part0`, `part1`, …
|
|
33
|
+
- `<json>` is the post-assignment payload — always an array at the top level for the files this skill reads (`tweet`, `tweet_headers`, `direct_messages`, `direct_messages_group`); an array containing one entry for the single-record files (`account`, `profile`).
|
|
34
|
+
|
|
35
|
+
The wrapper is fixed and verifiable. The skill MUST verify it before stripping:
|
|
36
|
+
|
|
37
|
+
```js
|
|
38
|
+
const WRAPPER_RE = /^\s*window\.YTD\.([a-z_]+)\.part(\d+)\s*=\s*/;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
A file whose first non-whitespace bytes do not match `window.YTD.<feed>.part<N> = ` is a defective input. The parser MUST loud-fail with `phase=parse reason="missing window.YTD wrapper on <filename>"` rather than attempt JSON.parse on the raw bytes — the failure mode the task spec calls out is silent zero-tweet imports on unwrapped-JSON input.
|
|
42
|
+
|
|
43
|
+
## Top-level shapes (read by this skill)
|
|
44
|
+
|
|
45
|
+
### `data/account.js`
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
[
|
|
49
|
+
{ "account": {
|
|
50
|
+
"accountId": "1234567890",
|
|
51
|
+
"username": "joelsmalley",
|
|
52
|
+
"displayName": "Joel Smalley",
|
|
53
|
+
"createdAt": "2009-...",
|
|
54
|
+
"email": "..."
|
|
55
|
+
} }
|
|
56
|
+
]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The skill reads `account.accountId` (the X numeric id of the operator), `account.username` (the handle without the `@`), and `account.displayName`. `email` is ignored.
|
|
60
|
+
|
|
61
|
+
### `data/tweets.js`
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
[
|
|
65
|
+
{ "tweet": {
|
|
66
|
+
"id_str": "1700000000000000000",
|
|
67
|
+
"full_text": "<verbatim tweet text>",
|
|
68
|
+
"created_at": "Wed Jul 03 14:23:01 +0000 2024",
|
|
69
|
+
"in_reply_to_status_id_str": "169...",
|
|
70
|
+
"in_reply_to_screen_name": "adamlangley",
|
|
71
|
+
"entities": {
|
|
72
|
+
"user_mentions": [ { "screen_name": "adamlangley", "name": "...", "id_str": "..." } ],
|
|
73
|
+
"urls": [ { "expanded_url": "https://...", "display_url": "..." } ],
|
|
74
|
+
"media": [ { "media_url_https": "...", "type": "photo|video|animated_gif", "id_str": "..." } ]
|
|
75
|
+
},
|
|
76
|
+
"quoted_status_id_str": "169..."
|
|
77
|
+
} }
|
|
78
|
+
]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The skill reads the documented fields and ignores everything else. `created_at` is a Twitter-flavoured RFC 2822 string; convert to ISO 8601 with UTC offset before rendering.
|
|
82
|
+
|
|
83
|
+
### `data/tweet-headers.js`
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
[
|
|
87
|
+
{ "tweet": {
|
|
88
|
+
"tweet_id": "1700000000000000000",
|
|
89
|
+
"user_id": "1234567890",
|
|
90
|
+
"created_at": "Wed Jul 03 14:23:01 +0000 2024"
|
|
91
|
+
} }
|
|
92
|
+
]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Used for deletion detection: any `tweet.tweet_id` in `tweet-headers.js` with no matching entry in `tweets.js` is a deleted tweet — render it in the transcript as `[deleted on <iso>]`.
|
|
96
|
+
|
|
97
|
+
### `data/direct-messages.js` and `data/direct-messages-group.js`
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
[
|
|
101
|
+
{ "dmConversation": {
|
|
102
|
+
"conversationId": "1234567890-9876543210",
|
|
103
|
+
"messages": [
|
|
104
|
+
{ "messageCreate": {
|
|
105
|
+
"id": "170...",
|
|
106
|
+
"senderId": "1234567890",
|
|
107
|
+
"recipientId": "9876543210",
|
|
108
|
+
"text": "Hello",
|
|
109
|
+
"createdAt": "2024-09-12T14:32:01.000Z",
|
|
110
|
+
"mediaUrls": []
|
|
111
|
+
} },
|
|
112
|
+
{ "reactionCreate": { ... } }
|
|
113
|
+
]
|
|
114
|
+
} }
|
|
115
|
+
]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
For 1:1 DMs the `conversationId` is `<id1>-<id2>` (numeric senderIds joined with `-`, lexicographic order). For group DMs the conversationId is opaque. Only `messageCreate` envelopes are message turns; `reactionCreate`, `joinConversation`, `leaveConversation` are skipped at the normaliser (counted under `systemSkipped`).
|
|
119
|
+
|
|
120
|
+
## What this skill ignores
|
|
121
|
+
|
|
122
|
+
- `profile.js` (bio, location) — outside scope; the operator profile is already captured in `:AdminUser`.
|
|
123
|
+
- `following.js`, `followers.js`, `mute.js`, `block.js` — relationship graphs flatten cleanly into `:Person` natural-key MERGEs; out of scope for this task.
|
|
124
|
+
- All other `.js` files (`like.js`, `bookmark.js`, etc.) — out of scope until a future task adopts them.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Tweet-stream transcript rendering
|
|
2
|
+
|
|
3
|
+
The X tweet stream becomes one `:KnowledgeDocument` whose body is a verbatim chronological transcript of every operator-authored tweet, reply, and quote-tweet. The classifier (`memory-classify`, document mode) splits this body into `:Section` children — threading and topic boundaries live as section boundaries inside the body, never as separate graph nodes.
|
|
4
|
+
|
|
5
|
+
The transcript is plain UTF-8 markdown, oldest tweet first, designed so the classifier reads sections as topic-bounded runs of related tweets.
|
|
6
|
+
|
|
7
|
+
## Separator and header
|
|
8
|
+
|
|
9
|
+
Each tweet entry starts with a separator line, then a header line, then a blank line, then the body, then a blank line:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
---
|
|
13
|
+
@<handle> | <iso-8601 instant>
|
|
14
|
+
|
|
15
|
+
<tweet body verbatim>
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- `<handle>` is the operator's `username` (the archive owner) for every entry — the tweet stream is operator-authored content only.
|
|
20
|
+
- `<iso-8601 instant>` is the parsed `created_at` rendered as `YYYY-MM-DDTHH:MM:SS+00:00`. Always UTC offset (the archive's `created_at` is UTC-fixed).
|
|
21
|
+
- `<tweet body verbatim>` is the `full_text` field verbatim — no entity expansion, no URL shortening, no truncation. Entity references (mentions, URLs) appear inline as they did in the original tweet.
|
|
22
|
+
|
|
23
|
+
## Reply context
|
|
24
|
+
|
|
25
|
+
When `in_reply_to_status_id_str` is set, the header gets a suffix:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
---
|
|
29
|
+
@<handle> | <iso> | replying to @<in_reply_to_screen_name>
|
|
30
|
+
|
|
31
|
+
<tweet body verbatim>
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The skill does not attempt to render the parent tweet body — operator replies that quote the parent verbatim do so naturally inside `full_text`.
|
|
36
|
+
|
|
37
|
+
## Quote-tweet context
|
|
38
|
+
|
|
39
|
+
When `quoted_status_id_str` is set, the quoted tweet's text is rendered inline beneath the operator's text, indented as a markdown blockquote prefixed by author and timestamp. The quoted tweet's body comes from the archive when present (`data/tweets.js` may contain quoted tweets the operator authored themselves) or from the entity-expansion URL when not.
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
---
|
|
43
|
+
@<handle> | <iso>
|
|
44
|
+
|
|
45
|
+
<operator's tweet body verbatim>
|
|
46
|
+
|
|
47
|
+
> @<quoted-author> | <quoted iso>: <quoted body>
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
When the quoted tweet text is not available in the archive (third-party quoted tweet), render:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
> @<quoted-author>: <quoted-status-url>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Deletion markers
|
|
58
|
+
|
|
59
|
+
Any tweet referenced in `data/tweet-headers.js` with no matching body in `data/tweets.js` is a deleted tweet. Render in the chronological slot:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
---
|
|
63
|
+
@<handle> | <iso>
|
|
64
|
+
|
|
65
|
+
[deleted on <iso>]
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Deletion bodies preserve chronological context for the classifier (a topic-bounded section may include a "deleted" marker between two surviving tweets without the section boundary being broken).
|
|
70
|
+
|
|
71
|
+
## Media references
|
|
72
|
+
|
|
73
|
+
Embedded media gets one inline reference per attachment, immediately after the tweet body and before the trailing blank line:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
---
|
|
77
|
+
@<handle> | <iso>
|
|
78
|
+
|
|
79
|
+
<tweet body verbatim>
|
|
80
|
+
|
|
81
|
+
[media: photo — <sha256>-<filename>]
|
|
82
|
+
[media: video — <sha256>-<filename>]
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
The actual bytes are staged under `{accountDir}/archive/x/<importId>/media/`; the reference token names the file the classifier can read if needed. Binary-only media (video) is referenced but not ingested as a child KD. Document-shaped media (OCR-able images, archived PDFs) recurses through `document-ingest` to land a child KD, attached via `HAS_ENCLOSURE` from the tweet-stream KD.
|
|
87
|
+
|
|
88
|
+
## Ordering and stability
|
|
89
|
+
|
|
90
|
+
- Tweets sort by `created_at` ascending — chronological, oldest first.
|
|
91
|
+
- Two tweets with identical `created_at` sort by `id_str` ascending (X tweet IDs are time-ordered snowflakes; lexicographic order on the string form is equivalent to numeric order within a millisecond).
|
|
92
|
+
- Re-rendering the same archive bytes produces byte-identical output — the `attachmentId = sha256(transcript-bytes)` idempotency contract depends on this.
|
|
93
|
+
|
|
94
|
+
## Worked example
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
---
|
|
98
|
+
@joelsmalley | 2024-07-03T14:23:01+00:00
|
|
99
|
+
|
|
100
|
+
Just published a piece on retail flows. Curious what @adamlangley thinks.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
@joelsmalley | 2024-07-03T14:31:22+00:00 | replying to @adamlangley
|
|
104
|
+
|
|
105
|
+
Fair pushback. The chart on page 4 covers exactly that case.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
@joelsmalley | 2024-07-03T18:02:00+00:00
|
|
109
|
+
|
|
110
|
+
QT: this matches my intuition.
|
|
111
|
+
|
|
112
|
+
> @danmcleod | 2024-07-03T17:45:11+00:00: New data on the Q3 inflow pattern — see thread.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
@joelsmalley | 2024-07-04T09:00:00+00:00
|
|
116
|
+
|
|
117
|
+
[deleted on 2024-07-04T09:00:00+00:00]
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The classifier sees four chronological entries with stable boundaries — a retail-flows topic, a reply continuation, a QT response, then a deletion gap. Whether those become one section or several is the classifier's decision, not this plugin's.
|