@rubytech/create-maxy-code 0.1.163 → 0.1.165
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/neo4j/edge-annotations.json +4 -0
- package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +1 -6
- package/payload/platform/plugins/admin/hooks/lib/admin-graph-pass-common.sh +12 -15
- package/payload/platform/plugins/admin/mcp/dist/index.js +0 -41
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/docs/references/platform.md +1 -1
- package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/email/PLUGIN.md +8 -12
- package/payload/platform/plugins/email/mcp/dist/index.js +8 -34
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/attachment-archive.d.ts +39 -0
- package/payload/platform/plugins/email/mcp/dist/lib/attachment-archive.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/attachment-archive.js +0 -0
- package/payload/platform/plugins/email/mcp/dist/lib/attachment-archive.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-dispatch.d.ts +23 -1
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-dispatch.js +131 -3
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-dispatch.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-lookup.d.ts +19 -0
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-lookup.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-lookup.js +51 -0
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-lookup.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts +0 -18
- package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/graph.js +0 -12
- package/payload/platform/plugins/email/mcp/dist/lib/graph.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +91 -40
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js +204 -169
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.js +6 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts +7 -15
- 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 +206 -86
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.js +104 -4
- package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.js +22 -13
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.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 +5 -4
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.js +17 -13
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +8 -8
- package/payload/platform/plugins/memory/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +2 -2
- package/payload/platform/plugins/memory/mcp/dist/index.js +4 -3
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/label-origin-gate.test.js +1 -13
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/label-origin-gate.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/kd-classify-gate.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/kd-classify-gate.js +3 -5
- package/payload/platform/plugins/memory/mcp/dist/lib/kd-classify-gate.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/label-origin-gate.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/label-origin-gate.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/label-origin-gate.js +10 -4
- package/payload/platform/plugins/memory/mcp/dist/lib/label-origin-gate.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.js +5 -6
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +21 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +6 -8
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-base.md +3 -2
- package/payload/platform/plugins/memory/references/schema-estate-agent.md +1 -1
- package/payload/platform/plugins/memory/references/transcript-formats/circleback.md +49 -0
- package/payload/platform/plugins/memory/references/transcript-formats/granola.md +50 -0
- package/payload/platform/plugins/memory/references/transcript-formats/otter.md +50 -0
- package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +1 -0
- package/payload/platform/plugins/memory/skills/conversation-archive-mcp/SKILL.md +170 -0
- package/payload/platform/scripts/seed-neo4j.sh +1 -3
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +9 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +74 -38
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +16 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +16 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +21 -7
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts +7 -0
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.js +10 -0
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.d.ts +52 -10
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.js +73 -13
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
- package/payload/platform/templates/specialists/agents/librarian.md +1 -0
- package/payload/platform/plugins/admin/hooks/__tests__/per-turn-graph-pass-gate.test.sh +0 -387
- package/payload/platform/plugins/admin/hooks/__tests__/pre-turn-graph-pass.test.sh +0 -441
- package/payload/platform/plugins/admin/hooks/per-turn-graph-pass-gate.sh +0 -111
- package/payload/platform/plugins/admin/hooks/pre-turn-graph-pass.sh +0 -171
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: email
|
|
3
|
-
description: "Email — dedicated email account. Retrieval: email-graph-query for stored email-thread history as :
|
|
3
|
+
description: "Email — dedicated email account. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox (with best-effort per-archive section hints from the graph). Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search). Config: email-setup, email-status, email-otp-extract."
|
|
4
4
|
tools:
|
|
5
5
|
- name: email-setup
|
|
6
6
|
publicAllowlist: false
|
|
@@ -26,9 +26,6 @@ tools:
|
|
|
26
26
|
- name: email-ingest
|
|
27
27
|
publicAllowlist: false
|
|
28
28
|
adminAllowlist: false
|
|
29
|
-
- name: email-classify
|
|
30
|
-
publicAllowlist: false
|
|
31
|
-
adminAllowlist: false
|
|
32
29
|
- name: email-otp-extract
|
|
33
30
|
publicAllowlist: false
|
|
34
31
|
adminAllowlist: false
|
|
@@ -61,14 +58,13 @@ Manages the agent's own dedicated email account — IMAP for reading, SMTP for s
|
|
|
61
58
|
## Capabilities
|
|
62
59
|
|
|
63
60
|
- **Setup:** `email-setup` — collect credentials via rendered `form`, connect IMAP/SMTP. Supports alias addresses (`agentAddress`).
|
|
64
|
-
- **Read inbox:** `email-read` — metadata only (UID, sender, subject, date). Supports pagination (`before_uid`), folders (`inbox`/`sent`), filtering by sender/date/subject.
|
|
65
|
-
- **Search inbox:** `email-search` — live IMAP search by sender, subject, body keyword, date range.
|
|
61
|
+
- **Read inbox:** `email-read` — metadata only (UID, sender, subject, date), plus a best-effort `Archive`/`Archive-Section` hint when the IMAP message's `receivedAt` falls inside a stored `:ConversationArchive {source:'email'}` section, plus an `Attachments (N): filename (mime, size); …` footer when the message carries enclosures. Supports pagination (`before_uid`), folders (`inbox`/`sent`), filtering by sender/date/subject. Metadata is derived from IMAP `bodyStructure` — no bytes downloaded.
|
|
62
|
+
- **Search inbox:** `email-search` — live IMAP search by sender, subject, body keyword, date range. Same per-archive hint and attachment footer as `email-read`.
|
|
66
63
|
- **Send:** `email-send` — new outbound email.
|
|
67
|
-
- **Reply:** `email-reply` — threaded reply to an existing email by `messageId`. Supports `replyAll`.
|
|
68
|
-
- **Ingestion — fetch:** `email-fetch` — list new IMAP messages since the stored high-water mark. Metadata + body preview only. No
|
|
69
|
-
- **Ingestion — apply:** `email-ingest` — apply the operator's per-message decisions to the staged batch. Each Message-ID must carry a disposition (`ingest` or `discard`).
|
|
70
|
-
- **
|
|
71
|
-
- **Recall/history:** `email-graph-query` — search stored email threads in Neo4j by natural language, sender, date, direction. Each thread is one `:KnowledgeDocument {source:'email'}` carrying the verbatim chronological transcript with `:Person` `FROM`/`TO`/`CC` edges.
|
|
64
|
+
- **Reply:** `email-reply` — threaded reply to an existing email by `messageId`. Resolves the original envelope via IMAP `SEARCH HEADER Message-ID` (INBOX then `\Sent`), so threading works for any message still present on the server even if the graph never ingested it. Supports `replyAll`.
|
|
65
|
+
- **Ingestion — fetch:** `email-fetch` — list new IMAP messages since the stored high-water mark. Metadata + body preview only — including attachment names, mimetypes, and sizes so the operator sees what's attached before approving (Task 402). No bytes downloaded, no graph writes. Stages the batch in-memory for `email-ingest`.
|
|
66
|
+
- **Ingestion — apply:** `email-ingest` — apply the operator's per-message decisions to the staged batch. Each Message-ID must carry a disposition (`ingest` or `discard`). Approved messages land on `:ConversationArchive {source:'email'}` via the source-agnostic conversation-archive pipeline (one archive per thread, sessionised into `:Section` chunks). Attachment bytes are fetched, archived to `{accountDir}/archive/email/<uidValidity>-<uid>/<sha256>-<filename>` (0o600, 25 MB cap), and each attachment lands as a content-addressed `:DigitalDocument` keyed on `attachmentId = sha256(bytes)`; the `:HAS_ENCLOSURE` edge from the parent `:ConversationArchive` is wired by `memory-ingest` on its next pass via the `pendingArchiveEdges` queue (Task 402). Advances the inbox high-water mark only after a successful write.
|
|
67
|
+
- **Recall/history:** `email-graph-query` — search stored email archives in Neo4j by natural language, participant address, or date range. Each thread is one `:ConversationArchive {source:'email'}` with `:Section` chunks; operator participants attach via `:PARTICIPANT_IN` edges from `:Person`/`:AdminUser`. List mode surfaces a per-archive summary built from concatenated `:Section.summary` values; query mode runs vector search over the `section_embedding` index and dedups to the parent archive.
|
|
72
68
|
- **Status:** `email-status` — connection health and configuration state.
|
|
73
69
|
- **OTP:** `email-otp-extract` — poll for verification codes during service authentication.
|
|
74
70
|
|
|
@@ -79,7 +75,7 @@ Email ingestion is **operator-initiated and human-in-the-loop**. There is no bac
|
|
|
79
75
|
## Retrieval paths
|
|
80
76
|
|
|
81
77
|
- **Live inbox** (`email-read`, `email-search`) — real-time IMAP queries. Use for checking the inbox or reading recent messages.
|
|
82
|
-
- **Graph history** (`email-graph-query`) — stored email-thread `:
|
|
78
|
+
- **Graph history** (`email-graph-query`) — stored email-thread `:ConversationArchive {source:'email'}` rows (with `:Section` chunks) in Neo4j. Use for recall, semantic search, email history questions.
|
|
83
79
|
- **General knowledge** (`memory-search`) — cross-type knowledge graph. Use when the question spans all memory, not just emails.
|
|
84
80
|
|
|
85
81
|
## Skills
|
|
@@ -14,7 +14,6 @@ import { emailReply } from "./tools/email-reply.js";
|
|
|
14
14
|
import { emailGraphQuery } from "./tools/email-graph-query.js";
|
|
15
15
|
import { emailFetch } from "./tools/email-fetch.js";
|
|
16
16
|
import { emailIngest } from "./tools/email-ingest.js";
|
|
17
|
-
import { emailClassify } from "./tools/email-classify.js";
|
|
18
17
|
import { closeDriver } from "./lib/neo4j.js";
|
|
19
18
|
const server = new McpServer({
|
|
20
19
|
name: "maxy-email",
|
|
@@ -220,7 +219,7 @@ eagerTool(server, "email-status", "Check the health of the agent's email configu
|
|
|
220
219
|
// ===================================================================
|
|
221
220
|
// email-reply — reply to an existing email in-thread
|
|
222
221
|
// ===================================================================
|
|
223
|
-
eagerTool(server, "email-reply", "Reply to an email in-thread. Looks up the original message by Message-ID
|
|
222
|
+
eagerTool(server, "email-reply", "Reply to an email in-thread. Looks up the original message by Message-ID via IMAP (searching INBOX then Sent), sets In-Reply-To and References headers for correct threading, and sends via SMTP. Use this instead of email-send when responding to a received email.", {
|
|
224
223
|
messageId: z.string().min(1).describe("The Message-ID of the email being replied to (from email-read output)"),
|
|
225
224
|
body: z.string().min(1).describe("Plain text reply body"),
|
|
226
225
|
html: z.string().optional().describe("Optional HTML reply body"),
|
|
@@ -245,14 +244,13 @@ eagerTool(server, "email-reply", "Reply to an email in-thread. Looks up the orig
|
|
|
245
244
|
}
|
|
246
245
|
});
|
|
247
246
|
// ===================================================================
|
|
248
|
-
// email-graph-query — query stored email
|
|
247
|
+
// email-graph-query — query stored email :ConversationArchive rows in the graph
|
|
249
248
|
// ===================================================================
|
|
250
|
-
eagerTool(server, "email-graph-query", "Query email threads stored in the graph as :
|
|
251
|
-
query: z.string().optional().describe("Natural-language search query (e.g. 'threads about cabbages'). When omitted, lists all stored
|
|
252
|
-
sender: z.string().optional().describe("Filter by
|
|
253
|
-
dateFrom: z.string().optional().describe("ISO date — only
|
|
254
|
-
dateTo: z.string().optional().describe("ISO date — only
|
|
255
|
-
direction: z.enum(["inbound", "outbound"]).optional().describe("Filter by direction: inbound (received) or outbound (sent by the operator via email-send/email-reply)"),
|
|
249
|
+
eagerTool(server, "email-graph-query", "Query email threads stored in the graph as :ConversationArchive {source:'email'} with :Section chunks. Without a query, lists archives sorted by last-message date (filterable by participant address and date range). With a query, runs semantic search over :Section chunks and ranks parent archives. Use this for email history and recall — not for checking the live inbox (use email-read/email-search for that).", {
|
|
250
|
+
query: z.string().optional().describe("Natural-language search query (e.g. 'threads about cabbages'). When omitted, lists all stored email archives."),
|
|
251
|
+
sender: z.string().optional().describe("Filter by participant email (case-insensitive substring match against :Person/:AdminUser linked via :PARTICIPANT_IN)"),
|
|
252
|
+
dateFrom: z.string().optional().describe("ISO date — only archives with at least one :Section whose lastMessageAt is on or after this date"),
|
|
253
|
+
dateTo: z.string().optional().describe("ISO date — only archives with at least one :Section whose firstMessageAt is on or before this date"),
|
|
256
254
|
offset: z.coerce.number().int().optional().describe("Pagination offset for list mode (default: 0)"),
|
|
257
255
|
limit: z.coerce.number().int().optional().describe("Max results to return (default: 20, max: 50)"),
|
|
258
256
|
}, async (params) => {
|
|
@@ -275,30 +273,6 @@ eagerTool(server, "email-graph-query", "Query email threads stored in the graph
|
|
|
275
273
|
}
|
|
276
274
|
});
|
|
277
275
|
// ===================================================================
|
|
278
|
-
// email-classify — operator-solicited classify-into-sections for one thread KD
|
|
279
|
-
// ===================================================================
|
|
280
|
-
eagerTool(server, "email-classify", "Operator-solicited reclassify of one email-thread :KnowledgeDocument into :Section children. Takes the root Message-ID of the thread, derives the account-scoped attachmentId, and (a) returns 'no classification needed' when the thread body has grown <25% since the previous classify, or (b) stages the body to a temp file and returns a dispatch envelope the admin agent hands to the `librarian` specialist. Librarian runs the document-ingest skill against the temp file; memory-ingest replaces any prior :Section children and stamps lastClassifiedAt + lastClassifiedBodyLength on the KD. Thin wrapper over the generic kd-classify tool — use this when you only have the human-typed root Message-ID; pass the attachmentId directly to kd-classify if you already have it.", {
|
|
281
|
-
rootMessageId: z.string().describe("Root Message-ID of the thread (no angle brackets) — the same value that identifies the thread KD in the graph (attachmentId = sha256(`email:<accountId>:<rootMessageId>`)). Find it via email-graph-query."),
|
|
282
|
-
}, async ({ rootMessageId }) => {
|
|
283
|
-
if (!accountId)
|
|
284
|
-
return refuseNoAccount("email-classify");
|
|
285
|
-
try {
|
|
286
|
-
const text = await emailClassify({ accountId, rootMessageId });
|
|
287
|
-
return { content: [{ type: "text", text }] };
|
|
288
|
-
}
|
|
289
|
-
catch (err) {
|
|
290
|
-
return {
|
|
291
|
-
content: [
|
|
292
|
-
{
|
|
293
|
-
type: "text",
|
|
294
|
-
text: `email-classify failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
295
|
-
},
|
|
296
|
-
],
|
|
297
|
-
isError: true,
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
// ===================================================================
|
|
302
276
|
// email-fetch — operator-initiated inbox triage (no graph writes)
|
|
303
277
|
// ===================================================================
|
|
304
278
|
eagerTool(server, "email-fetch", "List new inbox messages since the last ingested UID, metadata + body preview only. Writes nothing to the graph. Used by the email-ingest skill: the operator reviews each message returned here and then calls email-ingest with a per-message disposition (ingest or discard).", {
|
|
@@ -328,7 +302,7 @@ eagerTool(server, "email-fetch", "List new inbox messages since the last ingeste
|
|
|
328
302
|
eagerTool(server, "email-ingest", "Apply the operator's per-message decisions to the batch returned by the most recent email-fetch. Every Message-ID from that batch must appear in decisions with a disposition of 'ingest' (write to graph) or 'discard' (skip). Advances the inbox high-water mark only after a successful write. Refuses if any pending Message-ID is missing a decision.", {
|
|
329
303
|
decisions: z.array(z.object({
|
|
330
304
|
messageId: z.string().min(1).describe("Message-ID from the email-fetch listing (angle brackets optional)."),
|
|
331
|
-
disposition: z.enum(["ingest", "discard"]).describe("'ingest' writes the message
|
|
305
|
+
disposition: z.enum(["ingest", "discard"]).describe("'ingest' writes the message into a :ConversationArchive {source:'email'} thread (per Task 426); 'discard' skips it without writing."),
|
|
332
306
|
})).min(1).describe("One entry per Message-ID returned by the preceding email-fetch call."),
|
|
333
307
|
}, async (params) => {
|
|
334
308
|
if (!accountId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitise a raw email filename for filesystem safety:
|
|
3
|
+
* - replace path separators and null bytes with "_"
|
|
4
|
+
* - strip leading "." and ".." segments
|
|
5
|
+
* - drop ASCII control characters
|
|
6
|
+
* - truncate to FILENAME_MAX_CHARS (the sha256 prefix carries uniqueness;
|
|
7
|
+
* the filename is for human readability only)
|
|
8
|
+
*
|
|
9
|
+
* Returns "unnamed" if the result is empty after sanitisation.
|
|
10
|
+
*/
|
|
11
|
+
export declare function sanitiseFilename(raw: string): string;
|
|
12
|
+
export interface ArchiveResult {
|
|
13
|
+
sha256: string;
|
|
14
|
+
archivePath: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Write attachment bytes to {accountDir}/archive/email/<uidValidity>-<uid>/<sha256>-<filename>
|
|
18
|
+
* at 0o600 perms. Returns the sha256 and archive path on success, null on
|
|
19
|
+
* filesystem failure (which logs a warning and lets the caller proceed with
|
|
20
|
+
* archivePath=null).
|
|
21
|
+
*
|
|
22
|
+
* Idempotent: re-running with the same bytes at the same target path is a
|
|
23
|
+
* no-op (write is skipped if the file already exists).
|
|
24
|
+
*/
|
|
25
|
+
export declare function archiveAttachment(accountDir: string, uidValidity: number, uid: number, rawFilename: string, bytes: Buffer): ArchiveResult | null;
|
|
26
|
+
/**
|
|
27
|
+
* Compute the sha256 of bytes without writing to disk. Used for the
|
|
28
|
+
* synthetic-id path when bytes are present but archive failed, so the
|
|
29
|
+
* :DigitalDocument node can still carry a content-addressed attachmentId.
|
|
30
|
+
*/
|
|
31
|
+
export declare function sha256OfBytes(bytes: Buffer): string;
|
|
32
|
+
/**
|
|
33
|
+
* Compute a synthetic attachmentId for an attachment whose bytes were not
|
|
34
|
+
* downloaded (oversize or fetch-error). The id is content-free but stable
|
|
35
|
+
* for the same (uidValidity, uid, partKey, filename, size) tuple, so
|
|
36
|
+
* re-runs MERGE onto the same :DigitalDocument node.
|
|
37
|
+
*/
|
|
38
|
+
export declare function syntheticAttachmentId(uidValidity: number, uid: number, partKey: string, filename: string, sizeBytes: number): string;
|
|
39
|
+
//# sourceMappingURL=attachment-archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-archive.d.ts","sourceRoot":"","sources":["../../src/lib/attachment-archive.ts"],"names":[],"mappings":"AAeA;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBpD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,aAAa,GAAG,IAAI,CAqBtB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAIR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-archive.js","sourceRoot":"","sources":["../../src/lib/attachment-archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,28 @@ export interface DispatchResult {
|
|
|
3
3
|
threadsDispatched: number;
|
|
4
4
|
threadsSkipped: number;
|
|
5
5
|
unresolvedAddresses: string[];
|
|
6
|
+
attachmentsAttached: number;
|
|
7
|
+
attachmentsFailed: number;
|
|
6
8
|
}
|
|
7
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Per-message attachment record produced by email-ingest after it fetched
|
|
11
|
+
* bytes from IMAP and archived them to disk. The dispatcher uses these to
|
|
12
|
+
* MERGE :DigitalDocument nodes and tag them with the thread's pending
|
|
13
|
+
* conversation identity so memory-ingest can wire :HAS_ENCLOSURE edges
|
|
14
|
+
* when it later writes the parent :ConversationArchive.
|
|
15
|
+
*/
|
|
16
|
+
export interface AttachmentArchiveRecord {
|
|
17
|
+
uid: number;
|
|
18
|
+
partKey: string;
|
|
19
|
+
filename: string;
|
|
20
|
+
mimeType: string;
|
|
21
|
+
sizeBytes: number;
|
|
22
|
+
/** sha256(bytes) when bytes were fetched; synthetic id when not. */
|
|
23
|
+
attachmentId: string;
|
|
24
|
+
/** Absolute on-disk path of archived bytes, or null when not archived. */
|
|
25
|
+
archivePath: string | null;
|
|
26
|
+
/** True iff bytes were fetched and written to disk. */
|
|
27
|
+
archived: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare function dispatchEmailMessagesToConversationArchive(messages: EmailData[], attachmentRecords?: AttachmentArchiveRecord[]): Promise<DispatchResult>;
|
|
8
30
|
//# sourceMappingURL=conversation-archive-dispatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-archive-dispatch.d.ts","sourceRoot":"","sources":["../../src/lib/conversation-archive-dispatch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AA+BhE,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-archive-dispatch.d.ts","sourceRoot":"","sources":["../../src/lib/conversation-archive-dispatch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AA+BhE,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,0CAA0C,CAC9D,QAAQ,EAAE,SAAS,EAAE,EACrB,iBAAiB,GAAE,uBAAuB,EAAO,GAChD,OAAO,CAAC,cAAc,CAAC,CA0GzB"}
|
|
@@ -24,12 +24,19 @@ function ingestBashPath() {
|
|
|
24
24
|
const platformRoot = process.env.PLATFORM_ROOT ?? resolve(import.meta.dirname, "../../../..");
|
|
25
25
|
return resolve(platformRoot, "plugins/memory/bin/conversation-archive-ingest.sh");
|
|
26
26
|
}
|
|
27
|
-
export async function dispatchEmailMessagesToConversationArchive(messages) {
|
|
27
|
+
export async function dispatchEmailMessagesToConversationArchive(messages, attachmentRecords = []) {
|
|
28
28
|
if (messages.length === 0) {
|
|
29
|
-
return {
|
|
29
|
+
return {
|
|
30
|
+
threadsDispatched: 0,
|
|
31
|
+
threadsSkipped: 0,
|
|
32
|
+
unresolvedAddresses: [],
|
|
33
|
+
attachmentsAttached: 0,
|
|
34
|
+
attachmentsFailed: 0,
|
|
35
|
+
};
|
|
30
36
|
}
|
|
31
37
|
const accountId = messages[0].accountId;
|
|
32
38
|
const threads = groupByThread(messages);
|
|
39
|
+
const attachmentsByUid = groupAttachmentsByUid(attachmentRecords);
|
|
33
40
|
const distinctAddresses = new Set();
|
|
34
41
|
for (const t of threads)
|
|
35
42
|
for (const a of t.addresses)
|
|
@@ -37,6 +44,8 @@ export async function dispatchEmailMessagesToConversationArchive(messages) {
|
|
|
37
44
|
const addressToElementId = await resolveAddresses([...distinctAddresses], accountId);
|
|
38
45
|
let threadsDispatched = 0;
|
|
39
46
|
let threadsSkipped = 0;
|
|
47
|
+
let attachmentsAttached = 0;
|
|
48
|
+
let attachmentsFailed = 0;
|
|
40
49
|
const unresolved = new Set();
|
|
41
50
|
for (const thread of threads) {
|
|
42
51
|
const ids = [];
|
|
@@ -69,9 +78,25 @@ export async function dispatchEmailMessagesToConversationArchive(messages) {
|
|
|
69
78
|
"admin",
|
|
70
79
|
"--session-id",
|
|
71
80
|
`email-${randomUUID()}`,
|
|
72
|
-
], { stdio: "inherit" });
|
|
81
|
+
], { stdio: ["ignore", "pipe", "inherit"] });
|
|
73
82
|
if (exit.status === 0) {
|
|
74
83
|
threadsDispatched += 1;
|
|
84
|
+
const conversationIdentity = parseConversationIdentity(exit.stdout);
|
|
85
|
+
if (!conversationIdentity) {
|
|
86
|
+
console.error(`[email-attach] WARN: no conversationIdentity in dispatch stdout root=${thread.rootMessageId} — attachments will be archived but not pending-edge tagged`);
|
|
87
|
+
}
|
|
88
|
+
// Collect every attachment for messages in this thread and write
|
|
89
|
+
// a :DigitalDocument per unique attachmentId, tagging with the
|
|
90
|
+
// thread's pending conversation identity for later edge attach.
|
|
91
|
+
const threadAttachments = [];
|
|
92
|
+
for (const m of thread.messages) {
|
|
93
|
+
const recs = attachmentsByUid.get(m.uid);
|
|
94
|
+
if (recs)
|
|
95
|
+
threadAttachments.push(...recs);
|
|
96
|
+
}
|
|
97
|
+
const { attached, failed } = await writeDigitalDocuments(accountId, conversationIdentity, threadAttachments);
|
|
98
|
+
attachmentsAttached += attached;
|
|
99
|
+
attachmentsFailed += failed;
|
|
75
100
|
}
|
|
76
101
|
else {
|
|
77
102
|
threadsSkipped += 1;
|
|
@@ -86,9 +111,112 @@ export async function dispatchEmailMessagesToConversationArchive(messages) {
|
|
|
86
111
|
threadsDispatched,
|
|
87
112
|
threadsSkipped,
|
|
88
113
|
unresolvedAddresses: [...unresolved].sort(),
|
|
114
|
+
attachmentsAttached,
|
|
115
|
+
attachmentsFailed,
|
|
89
116
|
};
|
|
90
117
|
}
|
|
91
118
|
// ---------------------------------------------------------------------------
|
|
119
|
+
// Stdout parsing — Task 402.
|
|
120
|
+
//
|
|
121
|
+
// conversation-archive-ingest.mjs (Task 435) writes exactly one JSON line to
|
|
122
|
+
// stdout on success. That JSON already carries conversationIdentity — we
|
|
123
|
+
// just capture and parse it.
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
function parseConversationIdentity(stdoutBuf) {
|
|
126
|
+
if (!stdoutBuf)
|
|
127
|
+
return null;
|
|
128
|
+
const text = typeof stdoutBuf === "string" ? stdoutBuf : stdoutBuf.toString("utf-8");
|
|
129
|
+
// Find the last non-empty line; the .mjs may emit progress lines on stderr
|
|
130
|
+
// (we route stderr to inherit) but its stdout is the single JSON line.
|
|
131
|
+
const lines = text.split(/\r?\n/).map((l) => l.trim()).filter((l) => l.length > 0);
|
|
132
|
+
if (lines.length === 0)
|
|
133
|
+
return null;
|
|
134
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
135
|
+
try {
|
|
136
|
+
const parsed = JSON.parse(lines[i]);
|
|
137
|
+
if (typeof parsed.conversationIdentity === "string" && parsed.conversationIdentity.length > 0) {
|
|
138
|
+
return parsed.conversationIdentity;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// try the next line up
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
function groupAttachmentsByUid(records) {
|
|
148
|
+
const map = new Map();
|
|
149
|
+
for (const r of records) {
|
|
150
|
+
const list = map.get(r.uid);
|
|
151
|
+
if (list)
|
|
152
|
+
list.push(r);
|
|
153
|
+
else
|
|
154
|
+
map.set(r.uid, [r]);
|
|
155
|
+
}
|
|
156
|
+
return map;
|
|
157
|
+
}
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
159
|
+
// :DigitalDocument write — Task 402.
|
|
160
|
+
//
|
|
161
|
+
// Each attachment becomes one content-addressed :DigitalDocument node keyed
|
|
162
|
+
// on (accountId, attachmentId). pendingArchiveEdges carries the parent
|
|
163
|
+
// thread's conversationIdentity; memory-ingest's later :ConversationArchive
|
|
164
|
+
// MERGE wires :HAS_ENCLOSURE and drains the entry. Same bytes from two
|
|
165
|
+
// threads → one node, two distinct pending-edge entries, two edges later.
|
|
166
|
+
// ---------------------------------------------------------------------------
|
|
167
|
+
async function writeDigitalDocuments(accountId, conversationIdentity, records) {
|
|
168
|
+
if (records.length === 0)
|
|
169
|
+
return { attached: 0, failed: 0 };
|
|
170
|
+
let attached = 0;
|
|
171
|
+
let failed = 0;
|
|
172
|
+
const session = getSession();
|
|
173
|
+
try {
|
|
174
|
+
for (const r of records) {
|
|
175
|
+
try {
|
|
176
|
+
await session.run(`MERGE (d:DigitalDocument { accountId: $accountId, attachmentId: $attachmentId })
|
|
177
|
+
ON CREATE SET d.name = $filename,
|
|
178
|
+
d.encodingFormat = $mimeType,
|
|
179
|
+
d.contentSize = $sizeBytes,
|
|
180
|
+
d.sha256 = $sha256,
|
|
181
|
+
d.archivePath = $archivePath,
|
|
182
|
+
d.archived = $archived,
|
|
183
|
+
d.dateCreated = $now,
|
|
184
|
+
d.source = 'email',
|
|
185
|
+
d.pendingArchiveEdges = $pendingForCreate
|
|
186
|
+
SET d.pendingArchiveEdges = CASE
|
|
187
|
+
WHEN $pendingOnMatch IS NULL THEN d.pendingArchiveEdges
|
|
188
|
+
WHEN d.pendingArchiveEdges IS NULL THEN [$pendingOnMatch]
|
|
189
|
+
WHEN $pendingOnMatch IN d.pendingArchiveEdges THEN d.pendingArchiveEdges
|
|
190
|
+
ELSE d.pendingArchiveEdges + $pendingOnMatch
|
|
191
|
+
END
|
|
192
|
+
RETURN elementId(d) AS nodeId`, {
|
|
193
|
+
accountId,
|
|
194
|
+
attachmentId: r.attachmentId,
|
|
195
|
+
filename: r.filename,
|
|
196
|
+
mimeType: r.mimeType,
|
|
197
|
+
sizeBytes: r.sizeBytes,
|
|
198
|
+
sha256: r.archived ? r.attachmentId : null,
|
|
199
|
+
archivePath: r.archivePath,
|
|
200
|
+
archived: r.archived,
|
|
201
|
+
now: new Date().toISOString(),
|
|
202
|
+
pendingForCreate: conversationIdentity ? [conversationIdentity] : [],
|
|
203
|
+
pendingOnMatch: conversationIdentity,
|
|
204
|
+
});
|
|
205
|
+
attached += 1;
|
|
206
|
+
console.error(`[email-attach] attached uid=${r.uid} part=${r.partKey} attachmentId=${r.attachmentId.slice(0, 12)} archived=${r.archived} pendingFor=${conversationIdentity?.slice(0, 12) ?? "none"}`);
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
failed += 1;
|
|
210
|
+
console.error(`[email-attach] WARN: DigitalDocument MERGE failed uid=${r.uid} part=${r.partKey} reason=${err instanceof Error ? err.message : String(err)}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
finally {
|
|
215
|
+
await session.close();
|
|
216
|
+
}
|
|
217
|
+
return { attached, failed };
|
|
218
|
+
}
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
92
220
|
// Thread grouping
|
|
93
221
|
// ---------------------------------------------------------------------------
|
|
94
222
|
function groupByThread(messages) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-archive-dispatch.js","sourceRoot":"","sources":["../../src/lib/conversation-archive-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAkB,MAAM,YAAY,CAAC;AAEhE,8EAA8E;AAC9E,4CAA4C;AAC5C,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,0DAA0D;AAC1D,EAAE;AACF,qEAAqE;AACrE,0EAA0E;AAC1E,qEAAqE;AACrE,oEAAoE;AACpE,0EAA0E;AAC1E,sEAAsE;AACtE,6CAA6C;AAC7C,8EAA8E;AAE9E,SAAS,cAAc;IACrB,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,YAAY,EAAE,mDAAmD,CAAC,CAAC;AACpF,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-archive-dispatch.js","sourceRoot":"","sources":["../../src/lib/conversation-archive-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface MessageArchiveHint {
|
|
2
|
+
/** Stable title of the matched `:ConversationArchive`. */
|
|
3
|
+
archiveTitle: string;
|
|
4
|
+
/** Zero-based position of the matched `:Section` within the archive. */
|
|
5
|
+
sectionIndex: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Look up per-archive enrichment hints for a batch of IMAP messages.
|
|
9
|
+
*
|
|
10
|
+
* Given each message's RFC 5322 date, find an account-scoped
|
|
11
|
+
* `:ConversationArchive {source:'email'}` whose `:Section` covers the
|
|
12
|
+
* date. Returns at most one hint per message (the earliest matching
|
|
13
|
+
* section by `firstMessageAt`).
|
|
14
|
+
*/
|
|
15
|
+
export declare function getMessageArchiveHints(messages: Array<{
|
|
16
|
+
messageId: string | null;
|
|
17
|
+
receivedAt: string;
|
|
18
|
+
}>, accountId: string): Promise<Map<string, MessageArchiveHint>>;
|
|
19
|
+
//# sourceMappingURL=conversation-archive-lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-archive-lookup.d.ts","sourceRoot":"","sources":["../../src/lib/conversation-archive-lookup.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,EACjE,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CA8C1C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getSession } from "./neo4j.js";
|
|
2
|
+
/**
|
|
3
|
+
* Look up per-archive enrichment hints for a batch of IMAP messages.
|
|
4
|
+
*
|
|
5
|
+
* Given each message's RFC 5322 date, find an account-scoped
|
|
6
|
+
* `:ConversationArchive {source:'email'}` whose `:Section` covers the
|
|
7
|
+
* date. Returns at most one hint per message (the earliest matching
|
|
8
|
+
* section by `firstMessageAt`).
|
|
9
|
+
*/
|
|
10
|
+
export async function getMessageArchiveHints(messages, accountId) {
|
|
11
|
+
const out = new Map();
|
|
12
|
+
const candidates = messages.filter((m) => !!m.messageId && !!m.receivedAt && !Number.isNaN(Date.parse(m.receivedAt)));
|
|
13
|
+
if (candidates.length === 0)
|
|
14
|
+
return out;
|
|
15
|
+
const session = getSession();
|
|
16
|
+
try {
|
|
17
|
+
const result = await session.run(`UNWIND $msgs AS msg
|
|
18
|
+
MATCH (a:ConversationArchive { accountId: $accountId, source: 'email' })
|
|
19
|
+
-[:HAS_SECTION]->(s:Section)
|
|
20
|
+
WHERE s.firstMessageAt IS NOT NULL
|
|
21
|
+
AND s.lastMessageAt IS NOT NULL
|
|
22
|
+
AND s.firstMessageAt <= msg.receivedAt
|
|
23
|
+
AND s.lastMessageAt >= msg.receivedAt
|
|
24
|
+
WITH msg, a, s
|
|
25
|
+
ORDER BY s.firstMessageAt ASC, coalesce(s.position, 0) ASC
|
|
26
|
+
WITH msg.messageId AS messageId,
|
|
27
|
+
collect({ archiveTitle: coalesce(a.title, ''),
|
|
28
|
+
sectionIndex: coalesce(s.position, 0) })[0] AS hint
|
|
29
|
+
RETURN messageId, hint`, { msgs: candidates, accountId });
|
|
30
|
+
for (const rec of result.records) {
|
|
31
|
+
const messageId = rec.get("messageId");
|
|
32
|
+
const hint = rec.get("hint");
|
|
33
|
+
if (!hint)
|
|
34
|
+
continue;
|
|
35
|
+
const idxRaw = hint.sectionIndex;
|
|
36
|
+
const sectionIndex = typeof idxRaw === "number"
|
|
37
|
+
? idxRaw
|
|
38
|
+
: typeof idxRaw?.toNumber === "function"
|
|
39
|
+
? idxRaw.toNumber()
|
|
40
|
+
: Number(idxRaw ?? 0);
|
|
41
|
+
if (!hint.archiveTitle)
|
|
42
|
+
continue;
|
|
43
|
+
out.set(messageId, { archiveTitle: hint.archiveTitle, sectionIndex });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
await session.close();
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=conversation-archive-lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-archive-lookup.js","sourceRoot":"","sources":["../../src/lib/conversation-archive-lookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAyBxC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAiE,EACjE,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAC;IAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,CAAC,EAAkD,EAAE,CACpD,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAC7E,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAExC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B;;;;;;;;;;;;8BAYwB,EACxB,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAChC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;YACjD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAA2D,CAAC;YACvF,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,MAAM,YAAY,GAChB,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,OAAQ,MAAsC,EAAE,QAAQ,KAAK,UAAU;oBACvE,CAAC,CAAE,MAAqC,CAAC,QAAQ,EAAE;oBACnD,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,SAAS;YACjC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -24,24 +24,6 @@ export interface EmailData {
|
|
|
24
24
|
* "<abc@host>" → "abc@host". Already-clean values pass through unchanged.
|
|
25
25
|
*/
|
|
26
26
|
export declare function stripAngleBrackets(value: string | null): string | null;
|
|
27
|
-
export interface ThreadMessage {
|
|
28
|
-
messageId: string;
|
|
29
|
-
fromAddress: string;
|
|
30
|
-
fromName: string | null;
|
|
31
|
-
toAddresses: string[];
|
|
32
|
-
ccAddresses: string[];
|
|
33
|
-
subject: string;
|
|
34
|
-
receivedAt: string;
|
|
35
|
-
uid: number;
|
|
36
|
-
mailbox: string;
|
|
37
|
-
}
|
|
38
|
-
export declare function getMessageEnvelope(_messageId: string, _accountId: string): Promise<ThreadMessage | null>;
|
|
39
|
-
export interface ThreadInfo {
|
|
40
|
-
messageId: string;
|
|
41
|
-
threadDepth: number;
|
|
42
|
-
threadId: string;
|
|
43
|
-
}
|
|
44
|
-
export declare function getThreadInfo(_messageIds: string[], _accountId: string): Promise<Map<string, ThreadInfo>>;
|
|
45
27
|
export { neo4j };
|
|
46
28
|
export { getSession };
|
|
47
29
|
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/lib/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/lib/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,MAAM,cAAc,CAAC;AAmBjC,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;IAChE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAOtE;AAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,CAAC"}
|