@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.
Files changed (83) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/config/brand.json +1 -1
  3. package/payload/platform/neo4j/schema.cypher +42 -67
  4. package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
  5. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.d.ts.map +1 -1
  6. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.js +14 -8
  7. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.js.map +1 -1
  8. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.d.ts +1 -1
  9. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.d.ts.map +1 -1
  10. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.js +10 -7
  11. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.js.map +1 -1
  12. package/payload/platform/plugins/docs/references/internals.md +1 -1
  13. package/payload/platform/plugins/docs/references/neo4j.md +3 -3
  14. package/payload/platform/plugins/docs/references/plugins-guide.md +1 -0
  15. package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
  16. package/payload/platform/plugins/email/PLUGIN.md +3 -7
  17. package/payload/platform/plugins/email/mcp/dist/index.js +7 -46
  18. package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
  19. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
  20. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +4 -15
  21. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
  22. package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts +51 -43
  23. package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts.map +1 -1
  24. package/payload/platform/plugins/email/mcp/dist/lib/graph.js +223 -229
  25. package/payload/platform/plugins/email/mcp/dist/lib/graph.js.map +1 -1
  26. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +7 -4
  27. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
  28. package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts +14 -4
  29. package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts.map +1 -1
  30. package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js +69 -84
  31. package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js.map +1 -1
  32. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts.map +1 -1
  33. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js +49 -64
  34. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js.map +1 -1
  35. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts.map +1 -1
  36. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js +1 -2
  37. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js.map +1 -1
  38. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.d.ts +1 -0
  39. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.d.ts.map +1 -1
  40. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.js +3 -0
  41. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.js.map +1 -1
  42. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.d.ts +1 -1
  43. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.d.ts.map +1 -1
  44. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +1 -0
  45. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js.map +1 -1
  46. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.d.ts +3 -0
  47. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.d.ts.map +1 -0
  48. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.js +101 -0
  49. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.js.map +1 -0
  50. package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.d.ts.map +1 -1
  51. package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js +7 -4
  52. package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js.map +1 -1
  53. package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts +59 -1
  54. package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts.map +1 -1
  55. package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +322 -0
  56. package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
  57. package/payload/platform/plugins/memory/references/schema-base.md +4 -4
  58. package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +2 -1
  59. package/payload/platform/plugins/memory/skills/document-ingest/SKILL.md +1 -0
  60. package/payload/platform/plugins/notion-import/skills/notion-import/SKILL.md +13 -9
  61. package/payload/platform/plugins/notion-import/skills/notion-import/references/databases.md +11 -9
  62. package/payload/platform/plugins/notion-import/skills/notion-import/references/page-tree.md +12 -12
  63. package/payload/platform/plugins/scheduling/PLUGIN.md +18 -0
  64. package/payload/platform/plugins/scheduling/mcp/dist/index.js +93 -0
  65. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  66. package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.d.ts +80 -0
  67. package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.d.ts.map +1 -0
  68. package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.js +395 -0
  69. package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.js.map +1 -0
  70. package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.d.ts +16 -0
  71. package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.d.ts.map +1 -1
  72. package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.js +111 -2
  73. package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.js.map +1 -1
  74. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-archive-ics.d.ts +20 -0
  75. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-archive-ics.d.ts.map +1 -0
  76. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-archive-ics.js +63 -0
  77. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-archive-ics.js.map +1 -0
  78. package/payload/platform/plugins/x-import/.claude-plugin/plugin.json +8 -0
  79. package/payload/platform/plugins/x-import/PLUGIN.md +33 -0
  80. package/payload/platform/plugins/x-import/references/archive-shape.md +124 -0
  81. package/payload/platform/plugins/x-import/references/transcript-shape.md +121 -0
  82. package/payload/platform/plugins/x-import/skills/x-import/SKILL.md +123 -0
  83. 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":"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"}
@@ -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.