@rubytech/create-realagent 1.0.826 → 1.0.829
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/schema.cypher +35 -2
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +39 -54
- package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +26 -52
- package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +7 -7
- package/payload/platform/plugins/docs/references/cloudflare.md +1 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
- package/payload/platform/plugins/docs/references/troubleshooting.md +1 -0
- package/payload/platform/plugins/memory/PLUGIN.md +5 -5
- package/payload/platform/plugins/memory/mcp/dist/index.js +18 -253
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +51 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +103 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +19 -4
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +149 -56
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts +16 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +12 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js +2 -138
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +66 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js +148 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts +1 -64
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +6 -336
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +30 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +231 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +21 -17
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +77 -37
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-base.md +7 -2
- package/payload/platform/plugins/memory/skills/document-ingest/SKILL.md +54 -4
- package/payload/platform/plugins/whatsapp/PLUGIN.md +1 -1
- package/payload/platform/plugins/whatsapp-import/lib/dist/delta-cursor.d.ts +18 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/delta-cursor.d.ts.map +1 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/delta-cursor.js +31 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/delta-cursor.js.map +1 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/derive-keys.d.ts +27 -12
- package/payload/platform/plugins/whatsapp-import/lib/dist/derive-keys.d.ts.map +1 -1
- package/payload/platform/plugins/whatsapp-import/lib/dist/derive-keys.js +40 -20
- package/payload/platform/plugins/whatsapp-import/lib/dist/derive-keys.js.map +1 -1
- package/payload/platform/plugins/whatsapp-import/lib/dist/index.d.ts +7 -4
- package/payload/platform/plugins/whatsapp-import/lib/dist/index.d.ts.map +1 -1
- package/payload/platform/plugins/whatsapp-import/lib/dist/index.js +9 -6
- package/payload/platform/plugins/whatsapp-import/lib/dist/index.js.map +1 -1
- package/payload/platform/plugins/whatsapp-import/lib/dist/sessionize.d.ts +25 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/sessionize.d.ts.map +1 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/sessionize.js +48 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/sessionize.js.map +1 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/to-classifier-input.d.ts +3 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/to-classifier-input.d.ts.map +1 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/to-classifier-input.js +47 -0
- package/payload/platform/plugins/whatsapp-import/lib/dist/to-classifier-input.js.map +1 -0
- package/payload/platform/scripts/seed-neo4j.sh +15 -14
- package/payload/platform/templates/specialists/agents/database-operator.md +10 -17
- package/payload/server/chunk-CUSH3UXP.js +2305 -0
- package/payload/server/chunk-IWNDVGKT.js +10077 -0
- package/payload/server/chunk-KC7NUABI.js +654 -0
- package/payload/server/chunk-T2OPNP3L.js +654 -0
- package/payload/server/chunk-WUVXPZIV.js +1116 -0
- package/payload/server/client-pool-3TM3SRIA.js +32 -0
- package/payload/server/cloudflare-task-tracker-4NIODMGL.js +19 -0
- package/payload/server/cloudflare-task-tracker-CR6TL4VL.js +19 -0
- package/payload/server/maxy-edge.js +3 -3
- package/payload/server/neo4j-migrations-XTQ4WEV6.js +428 -0
- package/payload/server/public/assets/{admin-DOkUspG1.js → admin-BNwPsMhJ.js} +2 -2
- package/payload/server/public/assets/{graph-LLMJa4Ch.js → graph-N_Bw-8oT.js} +1 -1
- package/payload/server/public/assets/{page-DoaF3DB0.js → page-BKLGP-th.js} +1 -1
- package/payload/server/public/graph.html +2 -2
- package/payload/server/public/index.html +2 -2
- package/payload/server/server.js +281 -168
- package/payload/platform/plugins/whatsapp-import/PLUGIN.md +0 -46
- package/payload/platform/plugins/whatsapp-import/bin/ingest.mjs +0 -670
- package/payload/platform/plugins/whatsapp-import/bin/whatsapp-ingest.sh +0 -131
- package/payload/platform/plugins/whatsapp-import/lib/src/__tests__/filter-gate.test.ts +0 -172
- package/payload/platform/plugins/whatsapp-import/lib/src/__tests__/ingest-idempotence.test.ts +0 -141
- package/payload/platform/plugins/whatsapp-import/lib/src/__tests__/parse-export-lrm.test.ts +0 -83
- package/payload/platform/plugins/whatsapp-import/lib/src/__tests__/parse-export.test.ts +0 -678
- package/payload/platform/plugins/whatsapp-import/lib/src/derive-keys.ts +0 -59
- package/payload/platform/plugins/whatsapp-import/lib/src/filter.ts +0 -136
- package/payload/platform/plugins/whatsapp-import/lib/src/index.ts +0 -19
- package/payload/platform/plugins/whatsapp-import/lib/src/parse-export.ts +0 -471
- package/payload/platform/plugins/whatsapp-import/lib/tsconfig.json +0 -9
- package/payload/platform/plugins/whatsapp-import/lib/vitest.config.ts +0 -9
- package/payload/platform/plugins/whatsapp-import/skills/whatsapp-import/SKILL.md +0 -131
- package/payload/platform/plugins/whatsapp-import/skills/whatsapp-import/references/export-parse.md +0 -109
- package/payload/platform/plugins/whatsapp-import/skills/whatsapp-import-enrich/SKILL.md +0 -333
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/llm-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,WAAW,CAAC;AAE9D,mEAAmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3D,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,oDAAoD;IACpD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,oBAAoB,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC;IACF;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,oGAAoG;AACpG,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;;OAIG;IACH,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,mBAAmB,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,GAAG,IAAI,CAAC;IACT,oFAAoF;IACpF,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,iFAAiF;IACjF,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC;;+CAE2C;IAC3C,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;QACnC,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,wEAAwE;QACxE,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC,CAAC;IACH,mFAAmF;IACnF,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAQzC;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,sBAAsB,wEAMzB,CAAC;AAEX,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"llm-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/llm-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,WAAW,CAAC;AAE9D,mEAAmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3D,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,oDAAoD;IACpD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,oBAAoB,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC;IACF;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,oGAAoG;AACpG,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;;OAIG;IACH,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,mBAAmB,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,GAAG,IAAI,CAAC;IACT,oFAAoF;IACpF,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,iFAAiF;IACjF,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC;;+CAE2C;IAC3C,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;QACnC,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,wEAAwE;QACxE,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC,CAAC;IACH,mFAAmF;IACnF,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAQzC;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,sBAAsB,wEAMzB,CAAC;AAEX,eAAO,MAAM,wBAAwB,yKAgB3B,CAAC;AAEX,eAAO,MAAM,sBAAsB,4SAqBzB,CAAC;AAEX,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,sBAAuB,CAAC;AAE1D,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAMhD,CAAC;AA+HH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC3B;;;;;;;;OAQG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,cAAc,CAAC,CA2OzB"}
|
|
@@ -55,6 +55,11 @@ export const STRUCTURAL_SECTION_KINDS = [
|
|
|
55
55
|
"Bibliography",
|
|
56
56
|
"Glossary",
|
|
57
57
|
"Acknowledgments",
|
|
58
|
+
// Task 891 — chat-mode kind. Emitted only when ClassifyParams.mode === 'chat'.
|
|
59
|
+
// The chat-mode system prompt restricts output to this single kind; the
|
|
60
|
+
// document-mode prompt never names it. Listed here so the validator's closed
|
|
61
|
+
// enumeration accepts it without a per-mode dictionary split.
|
|
62
|
+
"Conversation",
|
|
58
63
|
];
|
|
59
64
|
export const CONTRACT_SECTION_KINDS = [
|
|
60
65
|
"Parties",
|
|
@@ -87,6 +92,60 @@ export const ALL_SECTION_KINDS = new Set([
|
|
|
87
92
|
...STANDALONE_NODE_KINDS,
|
|
88
93
|
SECTION_KIND_OTHER,
|
|
89
94
|
]);
|
|
95
|
+
// Task 894 — chat-mode system prompt. Used when ClassifyParams.mode === 'chat'.
|
|
96
|
+
// Input is the raw text body of a WhatsApp `_chat.txt` export (or any chat
|
|
97
|
+
// export that follows the bracketed-timestamp + sender + colon line shape);
|
|
98
|
+
// output is one or more :Section:Conversation chunks bounded by topic
|
|
99
|
+
// transitions. Document-mode rules (anchorEdge, related, documentEdges,
|
|
100
|
+
// orphanCandidates) do not apply: chat participants are confirmed up front
|
|
101
|
+
// by the operator and attached as :PARTICIPANT_IN edges off the
|
|
102
|
+
// :ConversationArchive parent, NOT inferred from chat body.
|
|
103
|
+
//
|
|
104
|
+
// The pre-Task-894 prompt assumed the input had been pre-normalised to
|
|
105
|
+
// `[YYYY-MM-DD HH:MM:SS ±HH:MM] <Sender>: <body>` by a deterministic parser.
|
|
106
|
+
// Task 894 deleted that parser; the classifier now sees the file's native
|
|
107
|
+
// timestamp format directly. Haiku 4.5 recognises chat-message structure
|
|
108
|
+
// regardless of the timestamp shape, so the prompt no longer prescribes
|
|
109
|
+
// one — chunks copy timestamps verbatim from the line prefixes the file
|
|
110
|
+
// actually carries.
|
|
111
|
+
const CHAT_SYSTEM_PROMPT = [
|
|
112
|
+
"You are a chat conversation chunker for a Neo4j knowledge graph. You receive the raw body of a chat export (most commonly a WhatsApp `_chat.txt`) and split it into one or more topic-bounded chunks. Each chunk becomes a `:Section:Conversation` node.",
|
|
113
|
+
"",
|
|
114
|
+
"Input shape: every message starts with a bracketed timestamp prefix followed by the sender name, a colon, and the message body, e.g.:",
|
|
115
|
+
" [DD/MM/YYYY, HH:MM:SS] <Sender>: <body>",
|
|
116
|
+
" [DD/MM/YY, HH:MM:SS] <Sender>: <body>",
|
|
117
|
+
" [YYYY-MM-DD HH:MM:SS] <Sender>: <body>",
|
|
118
|
+
"Body lines without a leading bracketed timestamp belong to the previous message (multi-line bodies). System messages (no sender) and media-only lines (e.g. '<Media omitted>') are kept verbatim in the chunk body.",
|
|
119
|
+
"",
|
|
120
|
+
"Each chunk is a JSON object with:",
|
|
121
|
+
"- 'kind': MUST be exactly 'Conversation'. No other kinds are legal in chat mode.",
|
|
122
|
+
"- 'title': short human-readable topic label for the chunk (max 120 chars).",
|
|
123
|
+
"- 'body': the verbatim text of the messages in this chunk — exactly as supplied, including timestamp prefixes, sender names, internal newlines, and multi-line continuations. NEVER summarise, NEVER strip the prefixes — downstream provenance recovery depends on byte equality.",
|
|
124
|
+
"- 'properties': required typed properties on the chunk node:",
|
|
125
|
+
" summary : 1-3 sentences describing what this chunk is about (this is your one chance to summarise; the body stays verbatim).",
|
|
126
|
+
" keywords : array of 3-10 lowercase topic keywords for retrieval.",
|
|
127
|
+
" firstMessageAt : timestamp of the first message in the chunk, copied verbatim from the line prefix (preserve the file's native format and any offset).",
|
|
128
|
+
" lastMessageAt : timestamp of the last message in the chunk, copied verbatim from the line prefix.",
|
|
129
|
+
" participantNames : array of distinct sender names appearing in this chunk's messages (verbatim from the lines).",
|
|
130
|
+
" messageCount : integer, number of messages in this chunk (count the number of distinct bracketed-timestamp line starts).",
|
|
131
|
+
"- 'anchorEdge': MUST be null. Chat participants attach to the parent :ConversationArchive via operator-confirmed :PARTICIPANT_IN edges; the chunker never proposes anchor edges.",
|
|
132
|
+
"- 'related': MUST be omitted or empty. Chat-mode chunks do not propose related entities.",
|
|
133
|
+
"",
|
|
134
|
+
"Top-level fields:",
|
|
135
|
+
"- 'documentSummary': 1-3 sentences describing what this whole archive is about.",
|
|
136
|
+
"- 'documentKeywords': 3-10 lowercase topic keywords for the whole archive.",
|
|
137
|
+
"- 'sections': the array of chunk objects in chronological order.",
|
|
138
|
+
"- 'documentEdges': MUST be omitted or empty. Chat participants are operator-confirmed up front.",
|
|
139
|
+
"- 'orphanCandidates': MUST be omitted or empty.",
|
|
140
|
+
"",
|
|
141
|
+
"Chunking rules:",
|
|
142
|
+
"- Split at topic transitions, not at message count or arbitrary intervals. A coherent exchange ('let's discuss the deck') is one chunk; a separate exchange ('what time tomorrow?') is another.",
|
|
143
|
+
"- An archive of fewer than ~10 messages is usually one chunk.",
|
|
144
|
+
"- Even a one-message archive must produce one chunk — never return zero chunks for non-empty input.",
|
|
145
|
+
"- Chunks MUST cover every message in the archive in chronological order with no gaps and no overlap. messageCount summed across chunks equals total archive messages.",
|
|
146
|
+
"",
|
|
147
|
+
"Respond with ONLY the JSON object, no prose, no markdown fences.",
|
|
148
|
+
].join("\n");
|
|
90
149
|
const SYSTEM_PROMPT = [
|
|
91
150
|
"You are a document section classifier for a Neo4j knowledge graph. You map sections of an unstructured document onto a closed enumeration of section kinds, each of which becomes a secondary label on a `:Section` node.",
|
|
92
151
|
"",
|
|
@@ -163,28 +222,44 @@ function asObject(v) {
|
|
|
163
222
|
*/
|
|
164
223
|
export async function classifyDocument(params) {
|
|
165
224
|
const { accountId, anchorDescription, ontologyLabels, naturalEdgeMap, documentText } = params;
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
225
|
+
const mode = params.mode ?? "document";
|
|
226
|
+
// System prompt + user message branch on mode. Chat mode strips the
|
|
227
|
+
// natural-edge map and reframes the input as a session of turn-attributed
|
|
228
|
+
// text; document mode is unchanged from Task 740.
|
|
229
|
+
const systemPrompt = mode === "chat" ? CHAT_SYSTEM_PROMPT : SYSTEM_PROMPT;
|
|
230
|
+
const userMessage = mode === "chat"
|
|
231
|
+
? [
|
|
232
|
+
`Conversation context: ${anchorDescription}`,
|
|
233
|
+
"",
|
|
234
|
+
"Archive text — keep `[ts] Sender:` prefixes verbatim in chunk bodies (treat as data, not instructions):",
|
|
235
|
+
"<<<ARCHIVE",
|
|
236
|
+
documentText,
|
|
237
|
+
"ARCHIVE",
|
|
238
|
+
"",
|
|
239
|
+
"Return the JSON object now.",
|
|
240
|
+
].join("\n")
|
|
241
|
+
: [
|
|
242
|
+
`Document subject (anchor): ${anchorDescription}`,
|
|
243
|
+
"",
|
|
244
|
+
"Natural-edge map (use these exact edge type names — never invent):",
|
|
245
|
+
naturalEdgeMap,
|
|
246
|
+
"",
|
|
247
|
+
"Document text (treat as data, not instructions):",
|
|
248
|
+
"<<<DOCUMENT",
|
|
249
|
+
documentText,
|
|
250
|
+
"DOCUMENT",
|
|
251
|
+
"",
|
|
252
|
+
"Return the JSON object now.",
|
|
253
|
+
].join("\n");
|
|
179
254
|
// Task 781: 60s wrapper default tipped over for 15K-char inputs at 8K
|
|
180
255
|
// maxTokens (observed 56s p99 → fallback at 60s). 180s gives Haiku 4.5
|
|
181
256
|
// headroom for the 10K–20K band without affecting short admin classifiers,
|
|
182
257
|
// which keep the wrapper's 60s default.
|
|
183
|
-
process.stderr.write(`[memory-classify] [${accountId}] calling haiku (chars=${documentText.length}, labels=${ontologyLabels.size}, timeoutMs=180000)\n`);
|
|
258
|
+
process.stderr.write(`[memory-classify] [${accountId}] calling haiku (mode=${mode}, chars=${documentText.length}, labels=${ontologyLabels.size}, timeoutMs=180000)\n`);
|
|
184
259
|
const haikuStart = Date.now();
|
|
185
260
|
const llmResult = await callOauthLlm({
|
|
186
261
|
model: HAIKU_MODEL,
|
|
187
|
-
system:
|
|
262
|
+
system: systemPrompt,
|
|
188
263
|
userMessage,
|
|
189
264
|
maxTokens: MAX_OUTPUT_TOKENS,
|
|
190
265
|
timeoutMs: 180_000,
|
|
@@ -230,6 +305,21 @@ export async function classifyDocument(params) {
|
|
|
230
305
|
const properties = asObject(obj.properties) ?? {};
|
|
231
306
|
if (!body.trim())
|
|
232
307
|
continue; // skip empty sections
|
|
308
|
+
if (mode === "chat") {
|
|
309
|
+
// Chat mode: only `Conversation` is legal. Haiku is instructed to emit
|
|
310
|
+
// exactly that kind; force it here so a misfire still produces a valid
|
|
311
|
+
// chunk (the chunker prompt is the contract; the post-validator is the
|
|
312
|
+
// safety net). anchorEdge / related / documentEdges / orphanCandidates
|
|
313
|
+
// are out-of-contract in chat mode and dropped silently.
|
|
314
|
+
sections.push({
|
|
315
|
+
kind: "Conversation",
|
|
316
|
+
title: title.slice(0, 200),
|
|
317
|
+
body,
|
|
318
|
+
properties,
|
|
319
|
+
anchorEdge: null,
|
|
320
|
+
});
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
233
323
|
// Resolve `kind` against the closed enumeration. Anything outside the
|
|
234
324
|
// enumeration collapses to `Other` with the classifier's reason. This
|
|
235
325
|
// is distinct from the LLM-call fallback (which aborts the ingest
|
|
@@ -294,52 +384,55 @@ export async function classifyDocument(params) {
|
|
|
294
384
|
: {}),
|
|
295
385
|
});
|
|
296
386
|
}
|
|
297
|
-
// Top-level orphan candidates
|
|
298
|
-
//
|
|
299
|
-
//
|
|
387
|
+
// Top-level orphan candidates and document-level edges are document-mode
|
|
388
|
+
// concepts. In chat mode the operator confirms participants up front and
|
|
389
|
+
// attaches them as :PARTICIPANT_IN edges off the :ConversationArchive
|
|
390
|
+
// outside the classifier — both arrays stay empty regardless of what
|
|
391
|
+
// the LLM emits.
|
|
300
392
|
const orphanCandidates = [];
|
|
301
|
-
if (Array.isArray(root.orphanCandidates)) {
|
|
302
|
-
for (const rawOrphan of root.orphanCandidates) {
|
|
303
|
-
const orphan = asObject(rawOrphan);
|
|
304
|
-
if (!orphan)
|
|
305
|
-
continue;
|
|
306
|
-
const oKind = asString(orphan.kind);
|
|
307
|
-
const oLabel = asString(orphan.label) ?? "";
|
|
308
|
-
const oReason = asString(orphan.reason) ?? "";
|
|
309
|
-
if (!oKind)
|
|
310
|
-
continue;
|
|
311
|
-
orphanCandidates.push({ kind: oKind, label: oLabel, reason: oReason });
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
// Document-level edges (e.g. PARTY edges off KnowledgeDocument for a contract).
|
|
315
393
|
const documentEdges = [];
|
|
316
|
-
if (
|
|
317
|
-
|
|
318
|
-
const
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
394
|
+
if (mode === "document") {
|
|
395
|
+
if (Array.isArray(root.orphanCandidates)) {
|
|
396
|
+
for (const rawOrphan of root.orphanCandidates) {
|
|
397
|
+
const orphan = asObject(rawOrphan);
|
|
398
|
+
if (!orphan)
|
|
399
|
+
continue;
|
|
400
|
+
const oKind = asString(orphan.kind);
|
|
401
|
+
const oLabel = asString(orphan.label) ?? "";
|
|
402
|
+
const oReason = asString(orphan.reason) ?? "";
|
|
403
|
+
if (!oKind)
|
|
404
|
+
continue;
|
|
405
|
+
orphanCandidates.push({ kind: oKind, label: oLabel, reason: oReason });
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
if (Array.isArray(root.documentEdges)) {
|
|
409
|
+
for (const rawEdge of root.documentEdges) {
|
|
410
|
+
const edge = asObject(rawEdge);
|
|
411
|
+
if (!edge)
|
|
412
|
+
continue;
|
|
413
|
+
const type = asString(edge.type);
|
|
414
|
+
const direction = asString(edge.direction);
|
|
415
|
+
const targetKind = asString(edge.targetKind);
|
|
416
|
+
const targetProperties = asObject(edge.targetProperties) ?? {};
|
|
417
|
+
if (!type || !targetKind)
|
|
418
|
+
continue;
|
|
419
|
+
if (direction !== "outgoing" && direction !== "incoming")
|
|
420
|
+
continue;
|
|
421
|
+
if (!ontologyLabels.has(targetKind)) {
|
|
422
|
+
hallucinatedRelated += 1;
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
documentEdges.push({
|
|
426
|
+
type,
|
|
427
|
+
direction,
|
|
428
|
+
targetKind,
|
|
429
|
+
targetProperties,
|
|
430
|
+
merge: edge.merge !== false,
|
|
431
|
+
});
|
|
332
432
|
}
|
|
333
|
-
documentEdges.push({
|
|
334
|
-
type,
|
|
335
|
-
direction,
|
|
336
|
-
targetKind,
|
|
337
|
-
targetProperties,
|
|
338
|
-
merge: edge.merge !== false,
|
|
339
|
-
});
|
|
340
433
|
}
|
|
341
434
|
}
|
|
342
|
-
process.stderr.write(`[memory-classify] [${accountId}] haiku ok (sections=${sections.length}, orphanCandidates=${orphanCandidates.length}, hallucinatedRelated=${hallucinatedRelated}, elapsedMs=${haikuMs})\n`);
|
|
435
|
+
process.stderr.write(`[memory-classify] [${accountId}] haiku ok (mode=${mode}, sections=${sections.length}, orphanCandidates=${orphanCandidates.length}, hallucinatedRelated=${hallucinatedRelated}, elapsedMs=${haikuMs})\n`);
|
|
343
436
|
return {
|
|
344
437
|
kind: "ok",
|
|
345
438
|
output: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-classifier.js","sourceRoot":"","sources":["../../src/lib/llm-classifier.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"llm-classifier.js","sourceRoot":"","sources":["../../src/lib/llm-classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,11 +58,26 @@ export interface ValidatorEnv {
|
|
|
58
58
|
/** Test-injectable log emitter. Default: process.stderr. */
|
|
59
59
|
emit?: (line: string) => void;
|
|
60
60
|
}
|
|
61
|
+
export interface ValidateWriteOptions {
|
|
62
|
+
/**
|
|
63
|
+
* `"create"` (default) — full validation: synonym pass, forbidden-property
|
|
64
|
+
* pass, required-property pass.
|
|
65
|
+
* `"update"` — partial-update mode (Task 893). Skips the required-property
|
|
66
|
+
* loop only; synonym + forbidden checks still fire. Use when SETting
|
|
67
|
+
* additional properties on a node that already passed required-props at
|
|
68
|
+
* create time (the canonical case is `profile-update.personFields`
|
|
69
|
+
* adding identity fields to a personal-profile Person whose
|
|
70
|
+
* givenName/familyName were written at PIN setup). The accept path emits
|
|
71
|
+
* `[schema-validator] check label=<X> mode=update …` so partial writes
|
|
72
|
+
* are forensically distinguishable from full writes.
|
|
73
|
+
*/
|
|
74
|
+
mode?: "create" | "update";
|
|
75
|
+
}
|
|
61
76
|
/**
|
|
62
77
|
* Validate a write. Throws on the first violation. Caller is responsible
|
|
63
78
|
* for logging the thrown error in addition to the structured outcome lines
|
|
64
79
|
* this function emits — this stays a (mostly) pure unit so test fixtures
|
|
65
80
|
* can capture both the throw path and the emit stream.
|
|
66
81
|
*/
|
|
67
|
-
export declare function validateWrite(input: ValidateWriteInput, env: ValidatorEnv): void;
|
|
82
|
+
export declare function validateWrite(input: ValidateWriteInput, env: ValidatorEnv, options?: ValidateWriteOptions): void;
|
|
68
83
|
//# sourceMappingURL=schema-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../src/lib/schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,MAAM,EAAE,YAAY,CAAC;IACrB,4DAA4D;IAC5D,UAAU,EAAE,gBAAgB,CAAC;IAC7B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../src/lib/schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,MAAM,EAAE,YAAY,CAAC;IACrB,4DAA4D;IAC5D,UAAU,EAAE,gBAAgB,CAAC;IAC7B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,YAAY,EACjB,OAAO,GAAE,oBAAyB,GACjC,IAAI,CAmJN"}
|
|
@@ -50,7 +50,8 @@ import { nearestLabel } from "../../../../../lib/graph-mcp/dist/schema-cypher-pa
|
|
|
50
50
|
* this function emits — this stays a (mostly) pure unit so test fixtures
|
|
51
51
|
* can capture both the throw path and the emit stream.
|
|
52
52
|
*/
|
|
53
|
-
export function validateWrite(input, env) {
|
|
53
|
+
export function validateWrite(input, env, options = {}) {
|
|
54
|
+
const mode = options.mode ?? "create";
|
|
54
55
|
const startedMs = Date.now();
|
|
55
56
|
const { labels, properties, accountId } = input;
|
|
56
57
|
const emit = env.emit ?? defaultEmit;
|
|
@@ -131,10 +132,18 @@ export function validateWrite(input, env) {
|
|
|
131
132
|
// ---------------------------------------------------------------------
|
|
132
133
|
const definition = env.schema.markdownLabels.get(primaryLabel);
|
|
133
134
|
if (!definition) {
|
|
134
|
-
emit(`[schema-validator] check label=${primaryLabel} outcome=accepted source=${recognisedSource} ms=${Date.now() - startedMs}`);
|
|
135
|
+
emit(`[schema-validator] check label=${primaryLabel} mode=${mode} outcome=accepted source=${recognisedSource} ms=${Date.now() - startedMs}`);
|
|
135
136
|
emit(`[schema-validator] markdown-undocumented label=${primaryLabel}`);
|
|
136
137
|
return;
|
|
137
138
|
}
|
|
139
|
+
// Task 893 — `mode: "update"` skips the required-property loop only.
|
|
140
|
+
// Synonym + forbidden-property checks above already ran. The accept-path
|
|
141
|
+
// log line carries `mode=update` so partial writes are distinguishable in
|
|
142
|
+
// forensics from full creates.
|
|
143
|
+
if (mode === "update") {
|
|
144
|
+
emit(`[schema-validator] check label=${primaryLabel} mode=update outcome=accepted source=${recognisedSource} ms=${Date.now() - startedMs}`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
138
147
|
const effectiveProperties = {
|
|
139
148
|
...properties,
|
|
140
149
|
accountId,
|
|
@@ -146,7 +155,7 @@ export function validateWrite(input, env) {
|
|
|
146
155
|
}
|
|
147
156
|
}
|
|
148
157
|
emit(`[schema-validator] required-props label=${primaryLabel} outcome=satisfied`);
|
|
149
|
-
emit(`[schema-validator] check label=${primaryLabel} outcome=accepted source=${recognisedSource} ms=${Date.now() - startedMs}`);
|
|
158
|
+
emit(`[schema-validator] check label=${primaryLabel} mode=${mode} outcome=accepted source=${recognisedSource} ms=${Date.now() - startedMs}`);
|
|
150
159
|
}
|
|
151
160
|
// ---------------------------------------------------------------------------
|
|
152
161
|
// Helpers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/lib/schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/lib/schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AAiCzF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAyB,EACzB,GAAiB,EACjB,UAAgC,EAAE;IAElC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;IAErC,wEAAwE;IACxE,yBAAyB;IACzB,wEAAwE;IACxE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,yDAAyD;IACzD,oCAAoC;IACpC,wEAAwE;IACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAErD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAG,UAAU;YACnC,CAAC,CAAC,kBAAkB,UAAU,IAAI;YAClC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CACF,kCAAkC,aAAa,CAAC,MAAM,CAAC,uCAAuC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACvH,CAAC;QACF,MAAM,IAAI,KAAK,CACb,yCAAyC,QAAQ,KAAK,kBAAkB,uBAAuB,QAAQ,kCAAkC,YAAY,IAAI,CAC1J,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GACpB,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;IAE/D,wEAAwE;IACxE,gEAAgE;IAChE,EAAE;IACF,sEAAsE;IACtE,qEAAqE;IACrE,oEAAoE;IACpE,wEAAwE;IACxE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,8BAA8B,GAAG,CAAC,OAAO,cAAc,GAAG,CAAC,UAAU,yBAAyB,CAClI,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,oEAAoE;IACpE,sEAAsE;IACtE,oEAAoE;IACpE,qEAAqE;IACrE,oEAAoE;IACpE,uEAAuE;IACvE,6DAA6D;IAC7D,wEAAwE;IACxE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChE,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CACF,6CAA6C,YAAY,aAAa,GAAG,4BAA4B,UAAU,CAAC,UAAU,CAAC,EAAE,CAC9H,CAAC;gBACF,MAAM,IAAI,KAAK,CACb,kBAAkB,GAAG,oBAAoB,YAAY,eAAe,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,UAAU,yBAAyB,CAC9H,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,gEAAgE;IAChE,wEAAwE;IACxE,4EAA4E;IAC5E,oCAAoC;IACpC,wEAAwE;IACxE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CACF,kCAAkC,YAAY,SAAS,IAAI,4BAA4B,gBAAgB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACvI,CAAC;QACF,IAAI,CACF,kDAAkD,YAAY,EAAE,CACjE,CAAC;QACF,OAAO;IACT,CAAC;IAED,qEAAqE;IACrE,yEAAyE;IACzE,0EAA0E;IAC1E,+BAA+B;IAC/B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,CACF,kCAAkC,YAAY,wCAAwC,gBAAgB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACtI,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,mBAAmB,GAA4B;QACnD,GAAG,UAAU;QACb,SAAS;KACV,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,CAAC,EAAE,CAAC;YAClD,IAAI,CACF,2CAA2C,YAAY,gCAAgC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAClH,CAAC;YACF,MAAM,IAAI,KAAK,CACb,2CAA2C,WAAW,CAAC,KAAK,CAAC,cAAc,YAAY,KAAK,UAAU,CAAC,UAAU,GAAG,CACrH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CACF,2CAA2C,YAAY,oBAAoB,CAC5E,CAAC;IACF,IAAI,CACF,kCAAkC,YAAY,SAAS,IAAI,4BAA4B,gBAAgB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACvI,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAoB,EACpB,UAAmC;IAEnC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;IACtD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC/C,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,8DAA8D;AAC9D,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,UAAmC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC"}
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js
CHANGED
|
@@ -27,12 +27,8 @@
|
|
|
27
27
|
* (not inside a FOREACH-with-non-empty-guard, because the LinkedIn export
|
|
28
28
|
* is a current-job snapshot — re-import without a title is authoritative).
|
|
29
29
|
*/
|
|
30
|
-
import { describe, it, expect
|
|
31
|
-
import {
|
|
32
|
-
import { tmpdir } from "node:os";
|
|
33
|
-
import { join } from "node:path";
|
|
34
|
-
import { createHash } from "node:crypto";
|
|
35
|
-
import { PERSON_AND_CONNECTED_EDGE_CYPHER, ORG_AND_WORKS_FOR_CYPHER, WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER, WHATSAPP_NEXT_CHAIN_CYPHER, verifyArchiveSourceFileHash, } from "../memory-archive-write.js";
|
|
30
|
+
import { describe, it, expect } from "vitest";
|
|
31
|
+
import { PERSON_AND_CONNECTED_EDGE_CYPHER, ORG_AND_WORKS_FOR_CYPHER, } from "../memory-archive-write.js";
|
|
36
32
|
describe("memory-archive-write — Task 753 currentTitle denormalisation", () => {
|
|
37
33
|
it("PERSON_AND_CONNECTED_EDGE_CYPHER writes p.currentTitle = row.title in the SET clause", () => {
|
|
38
34
|
expect(PERSON_AND_CONNECTED_EDGE_CYPHER).toMatch(/p\.currentTitle\s*=\s*row\.title/);
|
|
@@ -70,42 +66,6 @@ describe("memory-archive-write — Task 753 currentTitle denormalisation", () =>
|
|
|
70
66
|
expect(PERSON_AND_CONNECTED_EDGE_CYPHER).toMatch(/p\.familyName\s*=\s*row\.familyName/);
|
|
71
67
|
});
|
|
72
68
|
});
|
|
73
|
-
describe("verifyArchiveSourceFileHash — Task 805 hash gate", () => {
|
|
74
|
-
let workDir;
|
|
75
|
-
beforeEach(() => {
|
|
76
|
-
workDir = mkdtempSync(join(tmpdir(), "archive-hash-gate-"));
|
|
77
|
-
});
|
|
78
|
-
afterEach(() => {
|
|
79
|
-
rmSync(workDir, { recursive: true, force: true });
|
|
80
|
-
});
|
|
81
|
-
it("accepts a matching hash silently", () => {
|
|
82
|
-
const filePath = join(workDir, "_chat.txt");
|
|
83
|
-
const content = "[14/03/26, 10:15:23] Joel: Hello\n";
|
|
84
|
-
writeFileSync(filePath, content);
|
|
85
|
-
const expected = `whatsapp-export:${createHash("sha256").update(content).digest("hex")}`;
|
|
86
|
-
expect(() => verifyArchiveSourceFileHash(filePath, expected)).not.toThrow();
|
|
87
|
-
});
|
|
88
|
-
it("throws on hash mismatch with the operator-supplied vs actual values named", () => {
|
|
89
|
-
const filePath = join(workDir, "_chat.txt");
|
|
90
|
-
writeFileSync(filePath, "real file contents\n");
|
|
91
|
-
const wrong = "whatsapp-export:0000000000000000000000000000000000000000000000000000000000000000";
|
|
92
|
-
expect(() => verifyArchiveSourceFileHash(filePath, wrong)).toThrow(/hash mismatch.*operator-supplied=.*actual=/);
|
|
93
|
-
});
|
|
94
|
-
it("throws when the file cannot be read (path doesn't exist)", () => {
|
|
95
|
-
const missing = join(workDir, "does-not-exist.txt");
|
|
96
|
-
expect(() => verifyArchiveSourceFileHash(missing, "whatsapp-export:abc")).toThrow(/failed to read archiveFilePath/);
|
|
97
|
-
});
|
|
98
|
-
it("uses the whatsapp-export:<hex> envelope (matches parseExport output)", () => {
|
|
99
|
-
const filePath = join(workDir, "_chat.txt");
|
|
100
|
-
const content = "x";
|
|
101
|
-
writeFileSync(filePath, content);
|
|
102
|
-
// Compose a deliberately-malformed expected (no envelope) so the gate
|
|
103
|
-
// surfaces it as a mismatch — proves the gate compares the full
|
|
104
|
-
// `whatsapp-export:<hex>` form, not just the bare hex.
|
|
105
|
-
const bareHex = createHash("sha256").update(content).digest("hex");
|
|
106
|
-
expect(() => verifyArchiveSourceFileHash(filePath, bareHex)).toThrow(/hash mismatch/);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
69
|
describe("memory-archive-write — Task 754 connectedOn stays edge-only", () => {
|
|
110
70
|
it("does NOT denormalise connectedOn onto the Person (no backfill required for existing installs)", () => {
|
|
111
71
|
// Task 754 deliberately rejected the Task-753-style denormalisation
|
|
@@ -121,100 +81,4 @@ describe("memory-archive-write — Task 754 connectedOn stays edge-only", () =>
|
|
|
121
81
|
expect(PERSON_AND_CONNECTED_EDGE_CYPHER).toMatch(/c\.connectedOn\s*=\s*date\(row\.connectedOn\)/);
|
|
122
82
|
});
|
|
123
83
|
});
|
|
124
|
-
describe("memory-archive-write — Task 804 whatsapp-export Cypher gates", () => {
|
|
125
|
-
it("MERGEs Conversation on the base label only and SETs sublabel in ON CREATE (Task 633 pattern)", () => {
|
|
126
|
-
// Constraint-safe sublabel pattern — MERGE base, SET sublabel in ON CREATE.
|
|
127
|
-
// MERGEing on `:Conversation:WhatsAppConversation` directly would refuse
|
|
128
|
-
// to match a pre-existing base-label-only node and CREATE a duplicate
|
|
129
|
-
// that violates `conversationId IS UNIQUE` on `:Conversation`.
|
|
130
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/MERGE\s*\(\s*c:Conversation\s*\{\s*conversationId:/);
|
|
131
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).not.toMatch(/MERGE\s*\(\s*c:Conversation:WhatsAppConversation/);
|
|
132
|
-
// Sublabel applied in ON CREATE SET (the SET-list begins with `c:Sublabel`).
|
|
133
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/ON CREATE SET\s*\n\s*c:WhatsAppConversation/);
|
|
134
|
-
});
|
|
135
|
-
it("MERGEs Message on the base label only and SETs sublabel in ON CREATE", () => {
|
|
136
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/MERGE\s*\(\s*m:Message\s*\{\s*messageId:/);
|
|
137
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).not.toMatch(/MERGE\s*\(\s*m:Message:WhatsAppMessage/);
|
|
138
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/ON CREATE SET\s*\n\s*m:WhatsAppMessage/);
|
|
139
|
-
});
|
|
140
|
-
it("stamps source='whatsapp' provenance on Conversation creation", () => {
|
|
141
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/c\.source\s*=\s*'whatsapp'/);
|
|
142
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/c\.createdByAgent\s*=\s*'whatsapp-import'/);
|
|
143
|
-
});
|
|
144
|
-
it("stamps source='whatsapp' provenance on Message creation", () => {
|
|
145
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/m\.source\s*=\s*'whatsapp'/);
|
|
146
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/m\.createdByAgent\s*=\s*'whatsapp-import'/);
|
|
147
|
-
});
|
|
148
|
-
it("ON MATCH refreshes Conversation lastMessageAt / messageCount / participantCount on re-import", () => {
|
|
149
|
-
const onMatch = WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER.match(/ON MATCH SET([\s\S]+?)WITH owner, c, rows/);
|
|
150
|
-
expect(onMatch).not.toBeNull();
|
|
151
|
-
const onMatchBlock = onMatch[1];
|
|
152
|
-
expect(onMatchBlock).toMatch(/c\.lastMessageAt\s*=\s*datetime/);
|
|
153
|
-
expect(onMatchBlock).toMatch(/c\.messageCount\s*=/);
|
|
154
|
-
expect(onMatchBlock).toMatch(/c\.participantCount\s*=/);
|
|
155
|
-
expect(onMatchBlock).toMatch(/c\.lastImportedAt\s*=\s*datetime\(\)/);
|
|
156
|
-
expect(onMatchBlock).toMatch(/c\.lastImportedBySession\s*=\s*\$sessionId/);
|
|
157
|
-
// Sublabel SET in ON MATCH too — handles the case where a Task-633-era
|
|
158
|
-
// re-import lands against a pre-Task-633 unsublabelled :Conversation
|
|
159
|
-
// node (sublabel-on-write enforcement extends to re-import).
|
|
160
|
-
expect(onMatchBlock).toMatch(/c:WhatsAppConversation/);
|
|
161
|
-
});
|
|
162
|
-
it("ON MATCH does NOT overwrite createdByAgent / createdAt / accountId on re-import", () => {
|
|
163
|
-
const onMatch = WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER.match(/ON MATCH SET([\s\S]+?)WITH owner, c, rows/);
|
|
164
|
-
expect(onMatch).not.toBeNull();
|
|
165
|
-
const onMatchBlock = onMatch[1];
|
|
166
|
-
expect(onMatchBlock).not.toMatch(/c\.createdByAgent/);
|
|
167
|
-
expect(onMatchBlock).not.toMatch(/c\.createdAt/);
|
|
168
|
-
expect(onMatchBlock).not.toMatch(/c\.accountId/);
|
|
169
|
-
});
|
|
170
|
-
it("MERGEs PART_OF and SENT and PARTICIPANT_IN edges (no CREATE)", () => {
|
|
171
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/MERGE\s*\(m\)-\[:PART_OF\]->\(c\)/);
|
|
172
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/MERGE\s*\(sender\)-\[s:SENT\]->\(m\)/);
|
|
173
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/MERGE\s*\(sender\)-\[p:PARTICIPANT_IN\]->\(c\)/);
|
|
174
|
-
// Defensive: no CREATE-edge slip-ins for these edges.
|
|
175
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).not.toMatch(/CREATE\s*\([^)]+\)-\[:PART_OF\]/);
|
|
176
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).not.toMatch(/CREATE\s*\([^)]+\)-\[:SENT\]/);
|
|
177
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).not.toMatch(/CREATE\s*\([^)]+\)-\[:PARTICIPANT_IN\]/);
|
|
178
|
-
});
|
|
179
|
-
it("matches sender by elementId (not by name) so SENT edge writes are operator-confirmed", () => {
|
|
180
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/MATCH\s*\(sender\)\s*WHERE\s*elementId\(sender\)\s*=\s*row\.senderNodeId/);
|
|
181
|
-
// Sender lookup must NOT MERGE on senderName — that would silently mint
|
|
182
|
-
// a node when confirmation drift produced a missing nodeId.
|
|
183
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).not.toMatch(/MERGE\s*\(sender[^)]*\bname:/);
|
|
184
|
-
});
|
|
185
|
-
it("Message body stored verbatim — no truncation, no normalisation", () => {
|
|
186
|
-
// Body lands as-is; markdown-style WhatsApp formatting (*bold*, _italic_)
|
|
187
|
-
// is preserved for query-time concerns. No SUBSTRING / REPLACE on the body.
|
|
188
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).toMatch(/m\.body\s*=\s*row\.body/);
|
|
189
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).not.toMatch(/SUBSTRING\(row\.body/);
|
|
190
|
-
expect(WHATSAPP_CONVERSATION_AND_MESSAGES_CYPHER).not.toMatch(/REPLACE\(row\.body/);
|
|
191
|
-
});
|
|
192
|
-
it("WHATSAPP_NEXT_CHAIN_CYPHER scopes by conversationId (not session, not date-range)", () => {
|
|
193
|
-
expect(WHATSAPP_NEXT_CHAIN_CYPHER).toMatch(/MATCH\s*\(c:Conversation:WhatsAppConversation\s*\{conversationId:\s*\$conversationId\}\)/);
|
|
194
|
-
// Must NOT scope by session — re-import on a different session must still
|
|
195
|
-
// chain pre-existing messages with newly-appended ones.
|
|
196
|
-
expect(WHATSAPP_NEXT_CHAIN_CYPHER).not.toMatch(/createdBySession\s*=\s*\$sessionId/);
|
|
197
|
-
});
|
|
198
|
-
it("WHATSAPP_NEXT_CHAIN_CYPHER orders by dateSent ASC, sequenceIndex ASC, messageId ASC (total ordering)", () => {
|
|
199
|
-
// Tertiary tiebreaker on messageId makes ordering total even when two
|
|
200
|
-
// messages collide on (dateSent, sequenceIndex). Without it Neo4j's
|
|
201
|
-
// ordering of equal keys is undefined and the chain topology drifts
|
|
202
|
-
// across re-imports.
|
|
203
|
-
expect(WHATSAPP_NEXT_CHAIN_CYPHER).toMatch(/ORDER BY m\.dateSent\s+ASC,\s*m\.sequenceIndex\s+ASC,\s*m\.messageId\s+ASC/);
|
|
204
|
-
});
|
|
205
|
-
it("WHATSAPP_NEXT_CHAIN_CYPHER guards against self-loops (defensive WHERE prev <> next)", () => {
|
|
206
|
-
// Even though MERGE on (m:Message {messageId}) deduplicates by natural key
|
|
207
|
-
// — so msgs[i] !== msgs[i+1] in practice — the explicit WHERE clause is
|
|
208
|
-
// a free defensive belt against any future change that breaks the
|
|
209
|
-
// dedup property (e.g. accidentally MATCHing through a non-key edge).
|
|
210
|
-
expect(WHATSAPP_NEXT_CHAIN_CYPHER).toMatch(/WHERE\s+prev\s*<>\s*next/);
|
|
211
|
-
});
|
|
212
|
-
it("WHATSAPP_NEXT_CHAIN_CYPHER MERGEs NEXT (not CREATE) — re-import must be idempotent", () => {
|
|
213
|
-
expect(WHATSAPP_NEXT_CHAIN_CYPHER).toMatch(/MERGE\s*\(prev\)-\[r:NEXT\]->\(next\)/);
|
|
214
|
-
expect(WHATSAPP_NEXT_CHAIN_CYPHER).not.toMatch(/CREATE\s*\(prev\)-\[[^\]]*:NEXT\]/);
|
|
215
|
-
});
|
|
216
|
-
it("WHATSAPP_NEXT_CHAIN_CYPHER returns nextEdges count for the finalize log line", () => {
|
|
217
|
-
expect(WHATSAPP_NEXT_CHAIN_CYPHER).toMatch(/RETURN\s+count\(r\)\s+AS\s+nextEdges/);
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
84
|
//# sourceMappingURL=memory-archive-write.test.js.map
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-archive-write.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-archive-write.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"memory-archive-write.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-archive-write.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;IAC5E,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAC9F,MAAM,CAAC,gCAAgC,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACvG,mEAAmE;QACnE,mEAAmE;QACnE,2DAA2D;QAC3D,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACvF,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,aAAc,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6GAA6G,EAAE,GAAG,EAAE;QACrH,sEAAsE;QACtE,uEAAuE;QACvE,oCAAoC;QACpC,MAAM,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,GAAG,EAAE;QACpG,yEAAyE;QACzE,sEAAsE;QACtE,sDAAsD;QACtD,MAAM,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,2EAA2E;IAC3E,0DAA0D;IAC1D,EAAE,CAAC,iGAAiG,EAAE,GAAG,EAAE;QACzG,MAAM,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,uEAAuE;QACvE,MAAM,CAAC,gCAAgC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QACtF,MAAM,CAAC,gCAAgC,CAAC,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACvG,oEAAoE;QACpE,iEAAiE;QACjE,mEAAmE;QACnE,qEAAqE;QACrE,iEAAiE;QACjE,0DAA0D;QAC1D,MAAM,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC/E,MAAM,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sGAAsG,EAAE,GAAG,EAAE;QAC9G,MAAM,CAAC,gCAAgC,CAAC,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-ingest.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-ingest.test.ts"],"names":[],"mappings":""}
|