@rubytech/create-realagent 1.0.832 → 1.0.834

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 (97) hide show
  1. package/dist/index.js +131 -9
  2. package/package.json +1 -1
  3. package/payload/platform/lib/admins-write/dist/index.d.ts +87 -0
  4. package/payload/platform/lib/admins-write/dist/index.d.ts.map +1 -0
  5. package/payload/platform/lib/admins-write/dist/index.js +248 -0
  6. package/payload/platform/lib/admins-write/dist/index.js.map +1 -0
  7. package/payload/platform/lib/admins-write/src/index.ts +311 -0
  8. package/payload/platform/lib/admins-write/tsconfig.json +8 -0
  9. package/payload/platform/neo4j/migrations/009-conversation-archive-title.ts +197 -0
  10. package/payload/platform/neo4j/schema.cypher +1 -1
  11. package/payload/platform/package.json +2 -2
  12. package/payload/platform/plugins/admin/PLUGIN.md +1 -1
  13. package/payload/platform/plugins/admin/mcp/dist/index.js +37 -44
  14. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  15. package/payload/platform/plugins/docs/references/internals.md +4 -3
  16. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +215 -43
  17. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +7 -2
  18. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +75 -0
  19. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
  20. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +16 -10
  21. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
  22. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +155 -100
  23. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
  24. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +13 -5
  25. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts.map +1 -1
  26. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +53 -59
  27. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -1
  28. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +9 -0
  29. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -1
  30. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +24 -7
  31. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
  32. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +47 -11
  33. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
  34. package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +45 -8
  35. package/payload/platform/scripts/lib/resolve-account-dir.sh +3 -1
  36. package/payload/platform/scripts/migrate-import.sh +3 -1
  37. package/payload/platform/scripts/seed-neo4j.sh +13 -3
  38. package/payload/server/chunk-CRAIGEXY.js +654 -0
  39. package/payload/server/chunk-GK4WHM3H.js +9961 -0
  40. package/payload/server/chunk-I2NOLBQA.js +2123 -0
  41. package/payload/server/chunk-IVTESKFR.js +9961 -0
  42. package/payload/server/chunk-KD3XP4IK.js +1116 -0
  43. package/payload/server/chunk-KKGGT5RH.js +654 -0
  44. package/payload/server/chunk-MRJGG6CS.js +2124 -0
  45. package/payload/server/chunk-OJZPS4BL.js +367 -0
  46. package/payload/server/chunk-ZVW5XKPU.js +1116 -0
  47. package/payload/server/client-pool-FM3YJWV5.js +32 -0
  48. package/payload/server/client-pool-J5BCVVI2.js +32 -0
  49. package/payload/server/cloudflare-task-tracker-FSPEJOTH.js +19 -0
  50. package/payload/server/cloudflare-task-tracker-XCUO4N74.js +19 -0
  51. package/payload/server/maxy-edge.js +6 -5
  52. package/payload/server/neo4j-migrations-5AN2U3YO.js +664 -0
  53. package/payload/server/neo4j-migrations-XP7XDVPX.js +664 -0
  54. package/payload/server/public/assets/{Checkbox-CTGhpDKq.js → Checkbox-Bq6ORjz2.js} +1 -1
  55. package/payload/server/public/assets/admin-CstEkw-G.js +352 -0
  56. package/payload/server/public/assets/data-DwZZ7qbH.js +1 -0
  57. package/payload/server/public/assets/graph-DceEv42K.js +1 -0
  58. package/payload/server/public/assets/{jsx-runtime-D4WovFYk.css → jsx-runtime-DidQeNoZ.css} +1 -1
  59. package/payload/server/public/assets/page-Bpi_jPw6.js +50 -0
  60. package/payload/server/public/assets/{page-DkBfWy4C.js → page-CFWoVkgV.js} +1 -1
  61. package/payload/server/public/assets/{public-BdVIVpv8.js → public-BWMwq5Jj.js} +1 -1
  62. package/payload/server/public/assets/{useAdminFetch-DmHu0oCx.js → useAdminFetch-B93ig7ef.js} +1 -1
  63. package/payload/server/public/assets/{useVoiceRecorder-CSc_hxjV.js → useVoiceRecorder-Cb0nAtOo.js} +1 -1
  64. package/payload/server/public/data.html +5 -5
  65. package/payload/server/public/graph.html +6 -6
  66. package/payload/server/public/index.html +8 -8
  67. package/payload/server/public/public.html +5 -5
  68. package/payload/server/server.js +376 -167
  69. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.d.ts +0 -31
  70. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.d.ts.map +0 -1
  71. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.js +0 -666
  72. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.js.map +0 -1
  73. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts +0 -61
  74. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts.map +0 -1
  75. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js +0 -266
  76. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js.map +0 -1
  77. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.d.ts +0 -27
  78. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.d.ts.map +0 -1
  79. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.js +0 -477
  80. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.js.map +0 -1
  81. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.d.ts +0 -27
  82. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.d.ts.map +0 -1
  83. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.js +0 -160
  84. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.js.map +0 -1
  85. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.d.ts +0 -10
  86. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.d.ts.map +0 -1
  87. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.js +0 -29
  88. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.js.map +0 -1
  89. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.d.ts +0 -28
  90. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.d.ts.map +0 -1
  91. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.js +0 -34
  92. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.js.map +0 -1
  93. package/payload/server/public/assets/admin-BNwPsMhJ.js +0 -352
  94. package/payload/server/public/assets/data-Y77FLKjs.js +0 -1
  95. package/payload/server/public/assets/graph-N_Bw-8oT.js +0 -1
  96. package/payload/server/public/assets/page-BKLGP-th.js +0 -50
  97. /package/payload/server/public/assets/{jsx-runtime-DkaAusaX.js → jsx-runtime-DH5S-MwB.js} +0 -0
@@ -1,160 +0,0 @@
1
- import { getSession } from "../lib/neo4j.js";
2
- import { memorySearch } from "./memory-search.js";
3
- export async function whatsappExportInsightWrite(params) {
4
- const { kind, conversationId, messageId, fromNodeId, toNodeId, name, candidateElementIds, disambiguatorOk, operatorConfirmed, evidenceMessageIds, reason, accountId, sessionId, allowedScopes, envAgentSlug, envKeywordSubscriptions, } = params;
5
- // ---- Input shape gates --------------------------------------------------
6
- if (kind === "MENTIONS" && (!messageId || !messageId.trim())) {
7
- throw new Error("whatsapp-export-insight-write: kind=MENTIONS requires messageId (the source :Message elementId).");
8
- }
9
- if (fromNodeId === toNodeId) {
10
- return rejected(kind, "self-edge", 0);
11
- }
12
- // ---- Gate 2 (first-name-only) — fast reject before any DB work ----------
13
- // A "first-name-only" mention is one whose name lacks whitespace AND lacks
14
- // a digit / phone-number shape. The disambiguatorOk flag is the operator's
15
- // explicit override for cases like "Sarah at Acme" or "Sarah Chen".
16
- const isSingleToken = !/\s/.test(name.trim());
17
- const isPhoneNumber = /\+?\d/.test(name.trim());
18
- if (kind === "MENTIONS" && isSingleToken && !isPhoneNumber && !disambiguatorOk) {
19
- process.stderr.write(`[whatsapp-export-insight-write] gate-rejected kind=MENTIONS reason=first-name-only name=${name}\n`);
20
- return rejected("MENTIONS", "first-name-only", 0);
21
- }
22
- // ---- Gate 3 (RELATED_TO) — operator confirmation required ---------------
23
- if (kind === "RELATED_TO" && !operatorConfirmed) {
24
- process.stderr.write(`[whatsapp-export-insight-write] gate-rejected kind=RELATED_TO reason=relationship-needs-confirm name=${name}\n`);
25
- return rejected("RELATED_TO", "relationship-needs-confirm", 0);
26
- }
27
- // ---- Endpoint label + accountId verification ----------------------------
28
- const session = getSession();
29
- try {
30
- const endpointRes = await session.run(`UNWIND $ids AS id
31
- MATCH (n) WHERE elementId(n) = id
32
- RETURN id AS elemId, labels(n) AS labels, n.accountId AS accountId`, { ids: [fromNodeId, toNodeId] });
33
- const seen = new Map();
34
- for (const r of endpointRes.records) {
35
- seen.set(r.get("elemId"), {
36
- labels: r.get("labels") ?? [],
37
- accountId: r.get("accountId"),
38
- });
39
- }
40
- if (!seen.has(fromNodeId) || !seen.has(toNodeId)) {
41
- process.stderr.write(`[whatsapp-export-insight-write] gate-rejected kind=${kind} reason=endpoints-not-found from=${fromNodeId} to=${toNodeId}\n`);
42
- return rejected(kind, "endpoints-not-found", 0);
43
- }
44
- for (const [, meta] of seen) {
45
- if (meta.accountId && meta.accountId !== accountId) {
46
- process.stderr.write(`[whatsapp-export-insight-write] gate-rejected kind=${kind} reason=endpoints-cross-account expected=${accountId}\n`);
47
- return rejected(kind, "endpoints-cross-account", 0);
48
- }
49
- }
50
- const fromLabels = seen.get(fromNodeId).labels;
51
- const toLabels = seen.get(toNodeId).labels;
52
- if (kind === "MENTIONS") {
53
- if (!fromLabels.includes("Message")) {
54
- return rejected("MENTIONS", "endpoints-wrong-labels", 0);
55
- }
56
- if (!toLabels.includes("Person") && !toLabels.includes("AdminUser")) {
57
- return rejected("MENTIONS", "endpoints-wrong-labels", 0);
58
- }
59
- }
60
- else {
61
- // RELATED_TO between two existing distinct Persons (per the brief).
62
- // AdminUser also accepted because the operator may map themselves to
63
- // an AdminUser during the participant confirmation step.
64
- const fromOk = fromLabels.includes("Person") || fromLabels.includes("AdminUser");
65
- const toOk = toLabels.includes("Person") || toLabels.includes("AdminUser");
66
- if (!fromOk || !toOk) {
67
- return rejected("RELATED_TO", "endpoints-wrong-labels", 0);
68
- }
69
- }
70
- // ---- Gate 1 (candidate-overlap) ---------------------------------------
71
- // Re-run memory-search server-side for `name` filtered to Person/AdminUser.
72
- // Assert at least one operator-supplied candidate appears in the live
73
- // result. The agent's claimed evidence MUST survive a fresh query.
74
- const searchResults = await memorySearch({
75
- query: name,
76
- accountId,
77
- labels: ["Person", "AdminUser"],
78
- limit: 20,
79
- allowedScopes,
80
- agentSlug: envAgentSlug,
81
- keywords: envKeywordSubscriptions,
82
- });
83
- const liveIds = new Set(searchResults.map((r) => r.nodeId));
84
- const candidatesSeen = liveIds.size;
85
- const overlap = candidateElementIds.some((id) => liveIds.has(id));
86
- if (!overlap) {
87
- process.stderr.write(`[whatsapp-export-insight-write] gate-rejected kind=${kind} reason=candidate-mismatch name=${name} live-candidates=${candidatesSeen} operator-candidates=${candidateElementIds.length}\n`);
88
- return rejected(kind, "candidate-mismatch", candidatesSeen);
89
- }
90
- // ---- Accept — author the edge with provenance ------------------------
91
- const cypher = kind === "MENTIONS"
92
- ? `
93
- MATCH (m) WHERE elementId(m) = $fromNodeId
94
- MATCH (t) WHERE elementId(t) = $toNodeId
95
- MERGE (m)-[r:MENTIONS]->(t)
96
- ON CREATE SET
97
- r.source = 'whatsapp',
98
- r.createdByAgent = 'whatsapp-import',
99
- r.createdBySession = $sessionId,
100
- r.createdAt = datetime(),
101
- r.conversationId = $conversationId,
102
- r.evidenceName = $name,
103
- r.reason = $reason
104
- RETURN elementId(r) AS edgeId
105
- `
106
- : `
107
- MATCH (a) WHERE elementId(a) = $fromNodeId
108
- MATCH (b) WHERE elementId(b) = $toNodeId
109
- MERGE (a)-[r:RELATED_TO]->(b)
110
- ON CREATE SET
111
- r.source = 'whatsapp',
112
- r.createdByAgent = 'whatsapp-import',
113
- r.createdBySession = $sessionId,
114
- r.createdAt = datetime(),
115
- r.conversationId = $conversationId,
116
- r.evidenceName = $name,
117
- r.evidenceMessageIds = $evidenceMessageIds,
118
- r.operatorConfirmed = true,
119
- r.reason = $reason
120
- RETURN elementId(r) AS edgeId
121
- `;
122
- const writeRes = await session.executeWrite(async (tx) => {
123
- const res = await tx.run(cypher, {
124
- fromNodeId,
125
- toNodeId,
126
- sessionId: sessionId ?? null,
127
- conversationId,
128
- name,
129
- reason: reason ?? null,
130
- evidenceMessageIds: evidenceMessageIds ?? [],
131
- });
132
- const stats = res.summary.counters.updates();
133
- const edgeId = res.records[0]?.get("edgeId");
134
- return {
135
- edgeId,
136
- relationshipsCreated: stats.relationshipsCreated,
137
- };
138
- });
139
- const status = writeRes.relationshipsCreated > 0 ? "written" : "merged";
140
- process.stderr.write(`[whatsapp-export-insight-write] gate-passed kind=${kind} name=${name} candidates=${candidatesSeen} status=${status}\n`);
141
- return {
142
- status,
143
- edgeKind: kind,
144
- edgeElementId: writeRes.edgeId,
145
- candidatesSeen,
146
- };
147
- }
148
- finally {
149
- await session.close();
150
- }
151
- }
152
- function rejected(kind, reason, candidatesSeen) {
153
- return {
154
- status: "rejected",
155
- rejectionReason: reason,
156
- edgeKind: kind,
157
- candidatesSeen,
158
- };
159
- }
160
- //# sourceMappingURL=whatsapp-export-insight-write.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsapp-export-insight-write.js","sourceRoot":"","sources":["../../src/tools/whatsapp-export-insight-write.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { ParseExportResult } from "../../../../whatsapp-import/lib/dist/parse-export.js";
2
- export interface WhatsappExportParseParams {
3
- filePath: string;
4
- accountId: string;
5
- timezone: string;
6
- /** Task 845: 4-digit year shapes accepted; omit for auto-detect on first line. */
7
- dateFormat?: "DD/MM/YY" | "MM/DD/YY" | "DD/MM/YYYY" | "MM/DD/YYYY";
8
- }
9
- export declare function whatsappExportParse(params: WhatsappExportParseParams): Promise<ParseExportResult>;
10
- //# sourceMappingURL=whatsapp-export-parse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsapp-export-parse.d.ts","sourceRoot":"","sources":["../../src/tools/whatsapp-export-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,sDAAsD,CAAC;AAmB9D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;CACpE;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CA+B5B"}
@@ -1,29 +0,0 @@
1
- import { parseExport } from "../../../../whatsapp-import/lib/dist/parse-export.js";
2
- export async function whatsappExportParse(params) {
3
- const startedMs = Date.now();
4
- const input = {
5
- filePath: params.filePath,
6
- accountId: params.accountId,
7
- timezone: params.timezone,
8
- dateFormat: params.dateFormat,
9
- };
10
- let result;
11
- try {
12
- result = parseExport(input);
13
- }
14
- catch (err) {
15
- // Echo the LOUD-FAIL through stderr so the operator's grep against the
16
- // log finds the parse failure even when the MCP isError block is the
17
- // primary surface visible in chat.
18
- const reason = err instanceof Error ? err.message : String(err);
19
- process.stderr.write(`[whatsapp-export-parse] parse-failed file=${params.filePath} reason=${reason}\n`);
20
- throw err;
21
- }
22
- const elapsedMs = Date.now() - startedMs;
23
- process.stderr.write(`[whatsapp-export-parse] file=${params.filePath} hash=${result.archiveSourceFile} ` +
24
- `parsed=${result.counters.parsed} media-skipped=${result.counters.mediaSkipped} ` +
25
- `system-skipped=${result.counters.systemSkipped} parse-errors=${result.counters.parseErrors} ` +
26
- `ms=${elapsedMs}\n`);
27
- return result;
28
- }
29
- //# sourceMappingURL=whatsapp-export-parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsapp-export-parse.js","sourceRoot":"","sources":["../../src/tools/whatsapp-export-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AA+BnF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiC;IAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAqB;QAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,IAAI,MAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,qEAAqE;QACrE,mCAAmC;QACnC,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6CAA6C,MAAM,CAAC,QAAQ,WAAW,MAAM,IAAI,CAClF,CAAC;QACF,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gCAAgC,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,iBAAiB,GAAG;QACjF,UAAU,MAAM,CAAC,QAAQ,CAAC,MAAM,kBAAkB,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG;QACjF,kBAAkB,MAAM,CAAC,QAAQ,CAAC,aAAa,iBAAiB,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG;QAC9F,MAAM,SAAS,IAAI,CACtB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,28 +0,0 @@
1
- export interface WhatsappExportPreviewParams {
2
- filePath: string;
3
- accountId: string;
4
- timezone: string;
5
- /** Same enum as whatsapp-export-parse — propagated through to the parser. */
6
- dateFormat?: "DD/MM/YY" | "MM/DD/YY" | "DD/MM/YYYY" | "MM/DD/YYYY";
7
- }
8
- export interface WhatsappExportPreviewSender {
9
- name: string;
10
- messageCount: number;
11
- }
12
- export interface WhatsappExportPreviewResult {
13
- /** sha256 hex of the raw file bytes — same value as `archiveSourceFile` minus the `whatsapp-export:` prefix. */
14
- conversationSha256: string;
15
- archiveSourceFile: string;
16
- archiveBytes: number;
17
- parsed: number;
18
- mediaSkipped: number;
19
- systemSkipped: number;
20
- totalMessages: number;
21
- dateRange: {
22
- first: string | null;
23
- last: string | null;
24
- };
25
- senders: WhatsappExportPreviewSender[];
26
- }
27
- export declare function whatsappExportPreview(params: WhatsappExportPreviewParams): Promise<WhatsappExportPreviewResult>;
28
- //# sourceMappingURL=whatsapp-export-preview.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsapp-export-preview.d.ts","sourceRoot":"","sources":["../../src/tools/whatsapp-export-preview.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;CACpE;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,gHAAgH;IAChH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,2BAA2B,EAAE,CAAC;CACxC;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAuCtC"}
@@ -1,34 +0,0 @@
1
- import { statSync } from "node:fs";
2
- import { parseExport } from "../../../../whatsapp-import/lib/dist/parse-export.js";
3
- export async function whatsappExportPreview(params) {
4
- const { filePath, accountId, timezone, dateFormat } = params;
5
- const archiveBytes = statSync(filePath).size;
6
- const input = { filePath, accountId, timezone, dateFormat };
7
- const result = parseExport(input);
8
- // Build sender histogram in encounter order — operator scans top-down.
9
- const counts = new Map();
10
- for (const line of result.parsedLines) {
11
- counts.set(line.senderName, (counts.get(line.senderName) ?? 0) + 1);
12
- }
13
- const senders = Array.from(counts.entries())
14
- .map(([name, messageCount]) => ({ name, messageCount }))
15
- .sort((a, b) => b.messageCount - a.messageCount);
16
- const first = result.parsedLines[0]?.dateSent ?? null;
17
- const last = result.parsedLines[result.parsedLines.length - 1]?.dateSent ?? null;
18
- // archiveSourceFile is `whatsapp-export:<sha>` — strip prefix for the
19
- // shorter scalar the operator surfaces.
20
- const conversationSha256 = result.archiveSourceFile.replace(/^whatsapp-export:/, "");
21
- process.stderr.write(`[whatsapp-ingest] preview parsed=${result.counters.parsed} senders=${senders.length} first=${first ?? "-"} last=${last ?? "-"}\n`);
22
- return {
23
- conversationSha256,
24
- archiveSourceFile: result.archiveSourceFile,
25
- archiveBytes,
26
- parsed: result.counters.parsed,
27
- mediaSkipped: result.counters.mediaSkipped,
28
- systemSkipped: result.counters.systemSkipped,
29
- totalMessages: result.parsedLines.length,
30
- dateRange: { first, last },
31
- senders,
32
- };
33
- }
34
- //# sourceMappingURL=whatsapp-export-preview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsapp-export-preview.js","sourceRoot":"","sources":["../../src/tools/whatsapp-export-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AAqDnF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAmC;IAEnC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE7D,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IAC7C,MAAM,KAAK,GAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAE9E,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAElC,uEAAuE;IACvE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,OAAO,GAAkC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SACxE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IAEjF,sEAAsE;IACtE,wCAAwC;IACxC,MAAM,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAErF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCAAoC,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY,OAAO,CAAC,MAAM,UAAU,KAAK,IAAI,GAAG,SAAS,IAAI,IAAI,GAAG,IAAI,CACnI,CAAC;IAEF,OAAO;QACL,kBAAkB;QAClB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,YAAY;QACZ,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;QAC9B,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY;QAC1C,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa;QAC5C,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;QACxC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC1B,OAAO;KACR,CAAC;AACJ,CAAC"}