@rubytech/create-maxy-code 0.1.132 → 0.1.140
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/dist/__tests__/installer-specialist-registration.test.js +5 -40
- package/dist/index.js +24 -28
- package/dist/specialist-registration.js +0 -15
- package/package.json +1 -1
- package/payload/platform/config/brand.json +1 -1
- package/payload/platform/lib/graph-search/dist/boosts.d.ts +39 -0
- package/payload/platform/lib/graph-search/dist/boosts.d.ts.map +1 -0
- package/payload/platform/lib/graph-search/dist/boosts.js +57 -0
- package/payload/platform/lib/graph-search/dist/boosts.js.map +1 -0
- package/payload/platform/lib/graph-search/dist/dedup.d.ts +29 -0
- package/payload/platform/lib/graph-search/dist/dedup.d.ts.map +1 -0
- package/payload/platform/lib/graph-search/dist/dedup.js +97 -0
- package/payload/platform/lib/graph-search/dist/dedup.js.map +1 -0
- package/payload/platform/lib/graph-search/dist/index.d.ts +70 -8
- package/payload/platform/lib/graph-search/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-search/dist/index.js +323 -62
- package/payload/platform/lib/graph-search/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-search/dist/query-expansion.d.ts +37 -0
- package/payload/platform/lib/graph-search/dist/query-expansion.d.ts.map +1 -0
- package/payload/platform/lib/graph-search/dist/query-expansion.js +101 -0
- package/payload/platform/lib/graph-search/dist/query-expansion.js.map +1 -0
- package/payload/platform/lib/graph-search/dist/route.d.ts +29 -0
- package/payload/platform/lib/graph-search/dist/route.d.ts.map +1 -0
- package/payload/platform/lib/graph-search/dist/route.js +53 -0
- package/payload/platform/lib/graph-search/dist/route.js.map +1 -0
- package/payload/platform/lib/graph-search/dist/rrf-fusion.d.ts +31 -0
- package/payload/platform/lib/graph-search/dist/rrf-fusion.d.ts.map +1 -0
- package/payload/platform/lib/graph-search/dist/rrf-fusion.js +57 -0
- package/payload/platform/lib/graph-search/dist/rrf-fusion.js.map +1 -0
- package/payload/platform/lib/graph-search/src/__tests__/boosts.test.ts +59 -0
- package/payload/platform/lib/graph-search/src/__tests__/dedup.test.ts +83 -0
- package/payload/platform/lib/graph-search/src/__tests__/query-expansion.test.ts +96 -0
- package/payload/platform/lib/graph-search/src/__tests__/route.test.ts +62 -0
- package/payload/platform/lib/graph-search/src/__tests__/rrf-fusion.test.ts +39 -0
- package/payload/platform/lib/graph-search/src/boosts.ts +61 -0
- package/payload/platform/lib/graph-search/src/dedup.ts +108 -0
- package/payload/platform/lib/graph-search/src/index.ts +407 -65
- package/payload/platform/lib/graph-search/src/query-expansion.ts +129 -0
- package/payload/platform/lib/graph-search/src/route.ts +70 -0
- package/payload/platform/lib/graph-search/src/rrf-fusion.ts +62 -0
- package/payload/platform/lib/obsidian-parser/dist/index.d.ts +98 -0
- package/payload/platform/lib/obsidian-parser/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/obsidian-parser/dist/index.js +480 -0
- package/payload/platform/lib/obsidian-parser/dist/index.js.map +1 -0
- package/payload/platform/lib/obsidian-parser/src/index.ts +572 -0
- package/payload/platform/lib/obsidian-parser/tsconfig.json +8 -0
- package/payload/platform/neo4j/schema.cypher +86 -1
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/.claude-plugin/marketplace.json +10 -0
- package/payload/platform/plugins/admin/hooks/session-end-retrospective.sh +4 -2
- package/payload/platform/plugins/admin/mcp/dist/index.js +6 -4
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/docs/references/internals.md +36 -10
- package/payload/platform/plugins/docs/references/neo4j.md +63 -0
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -0
- package/payload/platform/plugins/docs/references/session-retrospective.md +11 -4
- package/payload/platform/plugins/graph-viewer/mcp/dist/tools/graph-render.js +2 -2
- package/payload/platform/plugins/graph-viewer/mcp/dist/tools/graph-render.js.map +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +3 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js +203 -7
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-gate-property.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-gate-property.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-gate-property.test.js +25 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-gate-property.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/timeline-extractor.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/timeline-extractor.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/timeline-extractor.test.js +70 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/timeline-extractor.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js +50 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.d.ts +33 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.js +99 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +21 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +24 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/timeline-extractor.d.ts +13 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/timeline-extractor.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/timeline-extractor.js +151 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/timeline-extractor.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.d.ts +55 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.js +290 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.d.ts +19 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js +102 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js +18 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.js +5 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.js +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts +64 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +258 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +14 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts +29 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js +22 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts +31 -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 +182 -50
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +76 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/obsidian-vault-import.d.ts +127 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/obsidian-vault-import.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/obsidian-vault-import.js +477 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/obsidian-vault-import.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.d.ts +30 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.js +129 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/scripts/backfill-typed-edges.ts +72 -0
- package/payload/platform/plugins/memory/mcp/scripts/generate-edge-docs.ts +75 -0
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +5 -0
- package/payload/platform/plugins/memory/references/schema-base.md +44 -0
- package/payload/platform/plugins/notion-import/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/notion-import/PLUGIN.md +27 -0
- package/payload/platform/plugins/notion-import/skills/notion-import/SKILL.md +110 -0
- package/payload/platform/plugins/notion-import/skills/notion-import/references/attachments.md +55 -0
- package/payload/platform/plugins/notion-import/skills/notion-import/references/databases.md +81 -0
- package/payload/platform/plugins/notion-import/skills/notion-import/references/page-tree.md +61 -0
- package/payload/platform/plugins/notion-import/skills/notion-import/references/workspace-export.md +41 -0
- package/payload/platform/plugins/obsidian-import/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/obsidian-import/PLUGIN.md +39 -0
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/SKILL.md +92 -0
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/attachments.md +80 -0
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/daily-notes.md +31 -0
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/vault-structure.md +46 -0
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/references/wikilinks.md +70 -0
- package/payload/platform/scripts/seed-neo4j.sh +49 -0
- package/payload/platform/templates/agents/admin/IDENTITY.md +4 -3
- package/payload/platform/templates/specialists/agents/database-operator.md +21 -1
- package/payload/server/{adminuser-self-heal-QAWOZ3JV.js → adminuser-self-heal-YC47O34W.js} +2 -1
- package/payload/server/{chunk-JSBRDJBE.js → chunk-HYQNUVGO.js} +9 -1
- package/payload/server/{chunk-HCYM5FLU.js → chunk-T3DJD5QR.js} +3 -1
- package/payload/server/maxy-edge.js +3 -2
- package/payload/server/public/assets/{admin-FcRHAL-3.js → admin-BM9aXUUh.js} +1 -1
- package/payload/server/public/assets/{data-Ds37mflX.js → data-Ds2ECtfP.js} +1 -1
- package/payload/server/public/assets/{graph-CmWRhaiS.js → graph-BzxObKMM.js} +1 -1
- package/payload/server/public/assets/{graph-labels-Ch2r00Gt.js → graph-labels-Dwgep_nr.js} +1 -1
- package/payload/server/public/assets/{page-BcHhJXUt.js → page-BlkBsjP2.js} +1 -1
- package/payload/server/public/assets/page-h_SA5SVQ.js +51 -0
- package/payload/server/public/data.html +3 -3
- package/payload/server/public/graph.html +3 -3
- package/payload/server/public/index.html +4 -4
- package/payload/server/server.js +803 -76
- package/payload/server/public/assets/page-BOtNny_4.js +0 -51
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed-edge auto-extraction pass.
|
|
3
|
+
*
|
|
4
|
+
* Runs once per session at the retrospective turn (admin-spawned via
|
|
5
|
+
* database-operator), or as a one-off backfill. Reads prose-bearing
|
|
6
|
+
* nodes (Message/Page/Meeting/Email/Idea/Note/Post/Report) the operator's
|
|
7
|
+
* account wrote since `sinceIso`, batches them, asks Haiku for typed-edge
|
|
8
|
+
* proposals against the `TYPED_EDGE_ALLOWLIST` schema, validates each
|
|
9
|
+
* proposal inline, and MERGEs accepted edges directly via Cypher with
|
|
10
|
+
* `createdBy` provenance.
|
|
11
|
+
*
|
|
12
|
+
* Continue-on-error: per-batch Haiku failure increments `failed`; per-edge
|
|
13
|
+
* MERGE failure increments `rejected`. A single bad batch never bricks the
|
|
14
|
+
* pass — partial results are returned to the caller.
|
|
15
|
+
*
|
|
16
|
+
* The pass does NOT route through `graph-write-gate`: that gate is a
|
|
17
|
+
* node-precondition surface (AdminUser + LocalBusiness must exist), not
|
|
18
|
+
* an edge-schema validator. Edge validation is owned here against
|
|
19
|
+
* `TYPED_EDGE_ALLOWLIST`.
|
|
20
|
+
*
|
|
21
|
+
* Auth: Haiku is called via Claude Code OAuth — never the Anthropic API key.
|
|
22
|
+
*/
|
|
23
|
+
import { callOauthLlm } from "../../../../../lib/oauth-llm/dist/index.js";
|
|
24
|
+
import { HAIKU_MODEL } from "../../../../../lib/models/dist/index.js";
|
|
25
|
+
import { TYPED_EDGE_ALLOWLIST, TYPED_EDGE_TYPES, PROSE_BEARING_LABELS, isAllowedTypedEdge, } from "./typed-edge-schema.js";
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Haiku prompt assembly — schema is rendered from TYPED_EDGE_ALLOWLIST so the
|
|
28
|
+
// prompt cannot drift from the validator.
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
function buildSystemPrompt() {
|
|
31
|
+
const allowlistLines = TYPED_EDGE_ALLOWLIST.map(({ sourceLabel, edgeType, targetLabel }) => ` (:${sourceLabel})-[:${edgeType}]->(:${targetLabel})`).join("\n");
|
|
32
|
+
return [
|
|
33
|
+
"You are a typed-edge extractor for a knowledge graph.",
|
|
34
|
+
"",
|
|
35
|
+
"You will be given a batch of prose nodes (each with an elementId and a",
|
|
36
|
+
"label). Read each node's text and propose typed edges that the text",
|
|
37
|
+
"supports. Only propose edges from this exact allowlist of",
|
|
38
|
+
"(sourceLabel)-[EDGE_TYPE]->(targetLabel) triples:",
|
|
39
|
+
"",
|
|
40
|
+
allowlistLines,
|
|
41
|
+
"",
|
|
42
|
+
"Rules:",
|
|
43
|
+
"- A proposal's sourceElementId MUST match one of the input elementIds.",
|
|
44
|
+
"- A proposal's edgeType MUST be one of the listed types: " +
|
|
45
|
+
TYPED_EDGE_TYPES.join(", ") + ".",
|
|
46
|
+
"- The (sourceLabel, edgeType, targetLabel) triple MUST appear in the",
|
|
47
|
+
" allowlist above. The sourceLabel is the label of the prose node at",
|
|
48
|
+
" sourceElementId; you do not pick it — it is fixed by the input.",
|
|
49
|
+
"- targetName is the canonical identifying property of the target node",
|
|
50
|
+
" (Person -> givenName + familyName joined with a space; Organization,",
|
|
51
|
+
" LocalBusiness, Event, Meeting, Page, Note, Report, Post -> name or title).",
|
|
52
|
+
"- Propose nothing when the text does not clearly support an edge. False",
|
|
53
|
+
" positives are worse than misses; this pass runs every session.",
|
|
54
|
+
"- Do not invent entities the text does not name.",
|
|
55
|
+
"",
|
|
56
|
+
"Return your answer through the structured tool call. No prose reply.",
|
|
57
|
+
].join("\n");
|
|
58
|
+
}
|
|
59
|
+
const ProposalTool = {
|
|
60
|
+
name: "emit_typed_edge_proposals",
|
|
61
|
+
description: "Emit one or more typed-edge proposals for the input batch of prose nodes.",
|
|
62
|
+
input_schema: {
|
|
63
|
+
type: "object",
|
|
64
|
+
properties: {
|
|
65
|
+
proposals: {
|
|
66
|
+
type: "array",
|
|
67
|
+
description: "Zero or more edge proposals.",
|
|
68
|
+
items: {
|
|
69
|
+
type: "object",
|
|
70
|
+
properties: {
|
|
71
|
+
sourceElementId: {
|
|
72
|
+
type: "string",
|
|
73
|
+
description: "elementId of the prose node the edge originates from. Must match one of the input batch.",
|
|
74
|
+
},
|
|
75
|
+
edgeType: {
|
|
76
|
+
type: "string",
|
|
77
|
+
enum: [...TYPED_EDGE_TYPES],
|
|
78
|
+
description: "Edge type from the allowlist.",
|
|
79
|
+
},
|
|
80
|
+
targetLabel: {
|
|
81
|
+
type: "string",
|
|
82
|
+
description: "Neo4j label of the target node (Person, Organization, LocalBusiness, Event, etc.).",
|
|
83
|
+
},
|
|
84
|
+
targetName: {
|
|
85
|
+
type: "string",
|
|
86
|
+
description: "Canonical identifying name of the target node.",
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
required: ["sourceElementId", "edgeType", "targetLabel", "targetName"],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
required: ["proposals"],
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Neo4j: enumerate prose-bearing nodes
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
async function enumerateProseNodes(session, accountId, sinceIso, limit) {
|
|
100
|
+
// Multi-label MATCH using ANY/labels(). Prose-bearing labels are a fixed
|
|
101
|
+
// set; we filter in-cypher to keep the query plan deterministic.
|
|
102
|
+
// text source: prefer `text`, fall back to `body` then `content` — different
|
|
103
|
+
// prose labels carry their text under different property names across the
|
|
104
|
+
// existing writers. NULL coalescing via COALESCE.
|
|
105
|
+
const cypher = sinceIso
|
|
106
|
+
? `MATCH (n)
|
|
107
|
+
WHERE n.accountId = $accountId
|
|
108
|
+
AND ANY(l IN labels(n) WHERE l IN $labels)
|
|
109
|
+
AND n.updatedAt >= $sinceIso
|
|
110
|
+
RETURN elementId(n) AS elementId,
|
|
111
|
+
[l IN labels(n) WHERE l IN $labels][0] AS label,
|
|
112
|
+
COALESCE(n.text, n.body, n.content, '') AS text
|
|
113
|
+
ORDER BY n.updatedAt ASC
|
|
114
|
+
LIMIT $limit`
|
|
115
|
+
: `MATCH (n)
|
|
116
|
+
WHERE n.accountId = $accountId
|
|
117
|
+
AND ANY(l IN labels(n) WHERE l IN $labels)
|
|
118
|
+
RETURN elementId(n) AS elementId,
|
|
119
|
+
[l IN labels(n) WHERE l IN $labels][0] AS label,
|
|
120
|
+
COALESCE(n.text, n.body, n.content, '') AS text
|
|
121
|
+
ORDER BY n.updatedAt ASC
|
|
122
|
+
LIMIT $limit`;
|
|
123
|
+
const result = await session.run(cypher, {
|
|
124
|
+
accountId,
|
|
125
|
+
labels: [...PROSE_BEARING_LABELS],
|
|
126
|
+
sinceIso,
|
|
127
|
+
limit,
|
|
128
|
+
});
|
|
129
|
+
return result.records
|
|
130
|
+
.map((r) => ({
|
|
131
|
+
elementId: String(r.get("elementId")),
|
|
132
|
+
label: String(r.get("label")),
|
|
133
|
+
text: String(r.get("text") ?? ""),
|
|
134
|
+
}))
|
|
135
|
+
.filter((n) => n.text.trim().length > 0);
|
|
136
|
+
}
|
|
137
|
+
async function callHaikuForBatch(nodes, systemPrompt) {
|
|
138
|
+
const userMessage = JSON.stringify({
|
|
139
|
+
batch: nodes.map((n) => ({
|
|
140
|
+
elementId: n.elementId,
|
|
141
|
+
label: n.label,
|
|
142
|
+
// Cap text length so very large prose nodes don't blow the context
|
|
143
|
+
// window. 4000 chars is enough for entity extraction; the typed-edge
|
|
144
|
+
// pass is not a summariser.
|
|
145
|
+
text: n.text.slice(0, 4000),
|
|
146
|
+
})),
|
|
147
|
+
}, null, 2);
|
|
148
|
+
const llmResult = await callOauthLlm({
|
|
149
|
+
model: HAIKU_MODEL,
|
|
150
|
+
system: systemPrompt,
|
|
151
|
+
userMessage,
|
|
152
|
+
maxTokens: 4096,
|
|
153
|
+
timeoutMs: 60_000,
|
|
154
|
+
tools: [ProposalTool],
|
|
155
|
+
toolChoiceName: ProposalTool.name,
|
|
156
|
+
});
|
|
157
|
+
if (llmResult.kind === "fallback") {
|
|
158
|
+
return { proposals: [], failureReason: `${llmResult.cause}: ${llmResult.reason}` };
|
|
159
|
+
}
|
|
160
|
+
if (llmResult.kind !== "ok-tool") {
|
|
161
|
+
return { proposals: [], failureReason: "no-tool-use" };
|
|
162
|
+
}
|
|
163
|
+
const rawProposals = llmResult.input.proposals;
|
|
164
|
+
if (!Array.isArray(rawProposals)) {
|
|
165
|
+
return { proposals: [], failureReason: "proposals-not-array" };
|
|
166
|
+
}
|
|
167
|
+
return { proposals: rawProposals, failureReason: null };
|
|
168
|
+
}
|
|
169
|
+
function validateProposal(raw, batchNodesByElementId) {
|
|
170
|
+
const sourceElementId = typeof raw.sourceElementId === "string" ? raw.sourceElementId : "";
|
|
171
|
+
const edgeType = typeof raw.edgeType === "string" ? raw.edgeType : "";
|
|
172
|
+
const targetLabel = typeof raw.targetLabel === "string" ? raw.targetLabel : "";
|
|
173
|
+
const targetName = typeof raw.targetName === "string" ? raw.targetName.trim() : "";
|
|
174
|
+
if (!sourceElementId || !edgeType || !targetLabel || !targetName) {
|
|
175
|
+
return { proposal: null, reason: "missing-field" };
|
|
176
|
+
}
|
|
177
|
+
const sourceNode = batchNodesByElementId.get(sourceElementId);
|
|
178
|
+
if (!sourceNode) {
|
|
179
|
+
return { proposal: null, reason: "unknown-source-node" };
|
|
180
|
+
}
|
|
181
|
+
if (!isAllowedTypedEdge(sourceNode.label, edgeType, targetLabel)) {
|
|
182
|
+
return { proposal: null, reason: "not-in-allowlist" };
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
proposal: { sourceElementId, edgeType, targetLabel, targetName },
|
|
186
|
+
reason: null,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
// MERGE one accepted proposal as a typed edge with createdBy provenance
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
async function mergeEdge(session, accountId, proposal, sourceLabel, conversationId) {
|
|
193
|
+
// The edge type is interpolated into Cypher because parameterised
|
|
194
|
+
// relationship types are not supported. We have already validated the
|
|
195
|
+
// edgeType against the closed-enum allowlist, so the interpolation is
|
|
196
|
+
// safe — no operator string reaches this point.
|
|
197
|
+
// The target is MERGEd on (accountId, name) so re-runs are idempotent.
|
|
198
|
+
// The edge is MERGEd on its endpoint pair with provenance attached at
|
|
199
|
+
// ON CREATE, leaving existing edges untouched.
|
|
200
|
+
const cypher = `
|
|
201
|
+
MATCH (s:${sourceLabel} {accountId: $accountId})
|
|
202
|
+
WHERE elementId(s) = $sourceElementId
|
|
203
|
+
MERGE (t:${proposal.targetLabel} {accountId: $accountId, name: $targetName})
|
|
204
|
+
ON CREATE SET t.createdAt = $nowIso, t.updatedAt = $nowIso
|
|
205
|
+
ON MATCH SET t.updatedAt = $nowIso
|
|
206
|
+
MERGE (s)-[r:${proposal.edgeType}]->(t)
|
|
207
|
+
ON CREATE SET r.createdAt = $nowIso,
|
|
208
|
+
r.createdByAgent = 'typed-edge-pass',
|
|
209
|
+
r.createdByTool = 'memory-typed-edge-pass',
|
|
210
|
+
r.createdByConversation = $conversationId,
|
|
211
|
+
r.createdByModel = $modelId
|
|
212
|
+
RETURN elementId(r) AS edgeId
|
|
213
|
+
`;
|
|
214
|
+
try {
|
|
215
|
+
const result = await session.run(cypher, {
|
|
216
|
+
accountId,
|
|
217
|
+
sourceElementId: proposal.sourceElementId,
|
|
218
|
+
targetName: proposal.targetName,
|
|
219
|
+
conversationId,
|
|
220
|
+
modelId: HAIKU_MODEL,
|
|
221
|
+
nowIso: new Date().toISOString(),
|
|
222
|
+
});
|
|
223
|
+
if (result.records.length === 0) {
|
|
224
|
+
// Source node missing (defensive — should not happen because the
|
|
225
|
+
// enumeration just listed it).
|
|
226
|
+
return { ok: false, reason: "source-not-found" };
|
|
227
|
+
}
|
|
228
|
+
return { ok: true };
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
return {
|
|
232
|
+
ok: false,
|
|
233
|
+
reason: `merge-error:${err instanceof Error ? err.message : String(err)}`,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
// Orchestration
|
|
239
|
+
// ---------------------------------------------------------------------------
|
|
240
|
+
export async function runTypedEdgePass(args) {
|
|
241
|
+
const { session, accountId, sinceIso, batchSize = 8, conversationId = null, maxNodes = 500, } = args;
|
|
242
|
+
const start = Date.now();
|
|
243
|
+
const accountShort = accountId.slice(0, 8);
|
|
244
|
+
const nodes = await enumerateProseNodes(session, accountId, sinceIso, maxNodes);
|
|
245
|
+
if (nodes.length === 0) {
|
|
246
|
+
const ms = Date.now() - start;
|
|
247
|
+
console.log(`[typed-edge-pass] accountId=${accountShort}… nodes=0 proposed=0 accepted=0 rejected=0 failed=0 ms=${ms}`);
|
|
248
|
+
return { nodes: 0, proposed: 0, accepted: 0, rejected: 0, failed: 0, ms };
|
|
249
|
+
}
|
|
250
|
+
const systemPrompt = buildSystemPrompt();
|
|
251
|
+
let proposed = 0;
|
|
252
|
+
let accepted = 0;
|
|
253
|
+
let rejected = 0;
|
|
254
|
+
let failed = 0;
|
|
255
|
+
for (let i = 0; i < nodes.length; i += batchSize) {
|
|
256
|
+
const batch = nodes.slice(i, i + batchSize);
|
|
257
|
+
const batchIndex = batch.reduce((m, n) => {
|
|
258
|
+
m.set(n.elementId, n);
|
|
259
|
+
return m;
|
|
260
|
+
}, new Map());
|
|
261
|
+
const { proposals: rawProposals, failureReason } = await callHaikuForBatch(batch, systemPrompt);
|
|
262
|
+
if (failureReason) {
|
|
263
|
+
failed += 1;
|
|
264
|
+
console.log(`[typed-edge-pass] accountId=${accountShort}… batch=${Math.floor(i / batchSize)} reason=${failureReason}`);
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
for (const raw of rawProposals) {
|
|
268
|
+
proposed += 1;
|
|
269
|
+
const { proposal, reason } = validateProposal(raw, batchIndex);
|
|
270
|
+
if (!proposal) {
|
|
271
|
+
rejected += 1;
|
|
272
|
+
console.log(`[typed-edge-pass] accountId=${accountShort}… reject reason=${reason ?? "unknown"} raw=${JSON.stringify(raw)}`);
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
const sourceLabel = batchIndex.get(proposal.sourceElementId).label;
|
|
276
|
+
const mergeResult = await mergeEdge(session, accountId, proposal, sourceLabel, conversationId);
|
|
277
|
+
if (mergeResult.ok) {
|
|
278
|
+
accepted += 1;
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
rejected += 1;
|
|
282
|
+
console.log(`[typed-edge-pass] accountId=${accountShort}… reject reason=${mergeResult.reason}`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const ms = Date.now() - start;
|
|
287
|
+
console.log(`[typed-edge-pass] accountId=${accountShort}… nodes=${nodes.length} proposed=${proposed} accepted=${accepted} rejected=${rejected} failed=${failed} ms=${ms}`);
|
|
288
|
+
return { nodes: nodes.length, proposed, accepted, rejected, failed, ms };
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=typed-edge-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-edge-pass.js","sourceRoot":"","sources":["../../src/lib/typed-edge-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,YAAY,EAAqB,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AA0DhC,8EAA8E;AAC9E,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,SAAS,iBAAiB;IACxB,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAC7C,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CACzC,OAAO,WAAW,OAAO,QAAQ,QAAQ,WAAW,GAAG,CAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,uDAAuD;QACvD,EAAE;QACF,wEAAwE;QACxE,qEAAqE;QACrE,2DAA2D;QAC3D,mDAAmD;QACnD,EAAE;QACF,cAAc;QACd,EAAE;QACF,QAAQ;QACR,wEAAwE;QACxE,2DAA2D;YACzD,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;QACnC,sEAAsE;QACtE,sEAAsE;QACtE,mEAAmE;QACnE,uEAAuE;QACvE,wEAAwE;QACxE,8EAA8E;QAC9E,yEAAyE;QACzE,kEAAkE;QAClE,kDAAkD;QAClD,EAAE;QACF,sEAAsE;KACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,YAAY,GAAiB;IACjC,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,2EAA2E;IACxF,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,8BAA8B;gBAC3C,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,eAAe,EAAE;4BACf,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,0FAA0F;yBACxG;wBACD,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC;4BAC3B,WAAW,EAAE,+BAA+B;yBAC7C;wBACD,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,oFAAoF;yBAClG;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,gDAAgD;yBAC9D;qBACF;oBACD,QAAQ,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,CAAC;iBACvE;aACF;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;CACF,CAAC;AAEF,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,KAAK,UAAU,mBAAmB,CAChC,OAAgB,EAChB,SAAiB,EACjB,QAAuB,EACvB,KAAa;IAEb,yEAAyE;IACzE,iEAAiE;IACjE,6EAA6E;IAC7E,0EAA0E;IAC1E,kDAAkD;IAClD,MAAM,MAAM,GAAG,QAAQ;QACrB,CAAC,CAAC;;;;;;;;oBAQc;QAChB,CAAC,CAAC;;;;;;;oBAOc,CAAC;IAEnB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QACvC,SAAS;QACT,MAAM,EAAE,CAAC,GAAG,oBAAoB,CAAC;QACjC,QAAQ;QACR,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,OAAO;SAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KAClC,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC;AAYD,KAAK,UAAU,iBAAiB,CAC9B,KAAkB,EAClB,YAAoB;IAEpB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAChC;QACE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,mEAAmE;YACnE,qEAAqE;YACrE,4BAA4B;YAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SAC5B,CAAC,CAAC;KACJ,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC;QACnC,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;QACpB,WAAW;QACX,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,CAAC,YAAY,CAAC;QACrB,cAAc,EAAE,YAAY,CAAC,IAAI;KAClC,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;IACrF,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACjE,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,YAA6B,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC3E,CAAC;AAWD,SAAS,gBAAgB,CACvB,GAAgB,EAChB,qBAA6C;IAE7C,MAAM,eAAe,GAAG,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnF,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;QACjE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IACxD,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;QAChE,MAAM,EAAE,IAAI;KACb,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E,KAAK,UAAU,SAAS,CACtB,OAAgB,EAChB,SAAiB,EACjB,QAAkB,EAClB,WAAmB,EACnB,cAA6B;IAE7B,kEAAkE;IAClE,sEAAsE;IACtE,sEAAsE;IACtE,gDAAgD;IAChD,uEAAuE;IACvE,sEAAsE;IACtE,+CAA+C;IAC/C,MAAM,MAAM,GAAG;eACF,WAAW;;eAEX,QAAQ,CAAC,WAAW;;;mBAGhB,QAAQ,CAAC,QAAQ;;;;;;;GAOjC,CAAC;IACF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;YACvC,SAAS;YACT,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,cAAc;YACd,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACjC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,iEAAiE;YACjE,+BAA+B;YAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,eAAe,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA0B;IAC/D,MAAM,EACJ,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,GAAG,CAAC,EACb,cAAc,GAAG,IAAI,EACrB,QAAQ,GAAG,GAAG,GACf,GAAG,IAAI,CAAC;IACT,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3C,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC9B,OAAO,CAAC,GAAG,CACT,+BAA+B,YAAY,0DAA0D,EAAE,EAAE,CAC1G,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC;IACzC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/D,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACtB,OAAO,CAAC,CAAC;QACX,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAEd,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,iBAAiB,CACxE,KAAK,EACL,YAAY,CACb,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,CAAC;YACZ,OAAO,CAAC,GAAG,CACT,+BAA+B,YAAY,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,WAAW,aAAa,EAAE,CAC1G,CAAC;YACF,SAAS;QACX,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,QAAQ,IAAI,CAAC,CAAC;YACd,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,IAAI,CAAC,CAAC;gBACd,OAAO,CAAC,GAAG,CACT,+BAA+B,YAAY,mBAAmB,MAAM,IAAI,SAAS,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAC/G,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAE,CAAC,KAAK,CAAC;YACpE,MAAM,WAAW,GAAG,MAAM,SAAS,CACjC,OAAO,EACP,SAAS,EACT,QAAQ,EACR,WAAW,EACX,cAAc,CACf,CAAC;YACF,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;gBACnB,QAAQ,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,CAAC,CAAC;gBACd,OAAO,CAAC,GAAG,CACT,+BAA+B,YAAY,mBAAmB,WAAW,CAAC,MAAM,EAAE,CACnF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAC9B,OAAO,CAAC,GAAG,CACT,+BAA+B,YAAY,WAAW,KAAK,CAAC,MAAM,aAAa,QAAQ,aAAa,QAAQ,aAAa,QAAQ,WAAW,MAAM,OAAO,EAAE,EAAE,CAC9J,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface TypedEdgePair {
|
|
2
|
+
readonly sourceLabel: string;
|
|
3
|
+
readonly edgeType: string;
|
|
4
|
+
readonly targetLabel: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The nine edge types ported from gbrain's auto-link layer, with the
|
|
8
|
+
* legal source/target label pairs for each.
|
|
9
|
+
*
|
|
10
|
+
* Order is stable so the prompt and docs render deterministically.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TYPED_EDGE_ALLOWLIST: ReadonlyArray<TypedEdgePair>;
|
|
13
|
+
/** Returns true when this triple is allowed by the typed-edge pass. */
|
|
14
|
+
export declare function isAllowedTypedEdge(sourceLabel: string, edgeType: string, targetLabel: string): boolean;
|
|
15
|
+
/** Edge types the pass may propose, deduplicated and sorted. */
|
|
16
|
+
export declare const TYPED_EDGE_TYPES: ReadonlyArray<string>;
|
|
17
|
+
/** Prose-bearing node labels the pass enumerates. Fixed set; non-prose labels are out of scope. */
|
|
18
|
+
export declare const PROSE_BEARING_LABELS: ReadonlyArray<string>;
|
|
19
|
+
//# sourceMappingURL=typed-edge-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-edge-schema.d.ts","sourceRoot":"","sources":["../../src/lib/typed-edge-schema.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,aAAa,CA6D7D,CAAC;AAUF,uEAAuE;AACvE,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAET;AAED,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAE3C,CAAC;AAET,mGAAmG;AACnG,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAStD,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// Typed-edge allowlist — the single source of truth for which
|
|
2
|
+
// (sourceLabel, EDGE_TYPE, targetLabel) triples the typed-edge pass may
|
|
3
|
+
// MERGE into the graph. The Cypher schema file declares indexes and
|
|
4
|
+
// constraints only; edge-type semantics live here.
|
|
5
|
+
//
|
|
6
|
+
// Used in three places:
|
|
7
|
+
// 1. The Haiku system prompt for the typed-edge pass — the model is
|
|
8
|
+
// told to propose only edges from this list.
|
|
9
|
+
// 2. Inline validation inside `runTypedEdgePass` — any proposal whose
|
|
10
|
+
// (source, edge, target) is not in this list is rejected and logged
|
|
11
|
+
// with reason "not-in-allowlist".
|
|
12
|
+
// 3. The doc generator that emits the edge-types table into
|
|
13
|
+
// `.docs/neo4j.md` and the bundled `platform/plugins/docs/references/neo4j.md`.
|
|
14
|
+
//
|
|
15
|
+
// Adding a new edge type or label pair: edit this file, run the doc
|
|
16
|
+
// generator, ship in one PR. Schema.cypher carries a comment header
|
|
17
|
+
// pointing here.
|
|
18
|
+
//
|
|
19
|
+
// Scope: this constant only governs the typed-edge pass. Edges written
|
|
20
|
+
// directly by `database-operator` or by document-ingest follow the
|
|
21
|
+
// broader schema-base.md / vertical-schema rules and are out of scope
|
|
22
|
+
// for this allowlist.
|
|
23
|
+
/**
|
|
24
|
+
* The nine edge types ported from gbrain's auto-link layer, with the
|
|
25
|
+
* legal source/target label pairs for each.
|
|
26
|
+
*
|
|
27
|
+
* Order is stable so the prompt and docs render deterministically.
|
|
28
|
+
*/
|
|
29
|
+
export const TYPED_EDGE_ALLOWLIST = [
|
|
30
|
+
// ATTENDED — person attended an event.
|
|
31
|
+
{ sourceLabel: "Person", edgeType: "ATTENDED", targetLabel: "Event" },
|
|
32
|
+
{ sourceLabel: "Person", edgeType: "ATTENDED", targetLabel: "Meeting" },
|
|
33
|
+
// WORKS_AT — person currently works at an organisation.
|
|
34
|
+
{ sourceLabel: "Person", edgeType: "WORKS_AT", targetLabel: "Organization" },
|
|
35
|
+
{ sourceLabel: "Person", edgeType: "WORKS_AT", targetLabel: "LocalBusiness" },
|
|
36
|
+
// INVESTED_IN — person or organisation invested in an organisation.
|
|
37
|
+
{ sourceLabel: "Person", edgeType: "INVESTED_IN", targetLabel: "Organization" },
|
|
38
|
+
{ sourceLabel: "Person", edgeType: "INVESTED_IN", targetLabel: "LocalBusiness" },
|
|
39
|
+
{ sourceLabel: "Organization", edgeType: "INVESTED_IN", targetLabel: "Organization" },
|
|
40
|
+
{ sourceLabel: "Organization", edgeType: "INVESTED_IN", targetLabel: "LocalBusiness" },
|
|
41
|
+
// FOUNDED — person founded an organisation.
|
|
42
|
+
{ sourceLabel: "Person", edgeType: "FOUNDED", targetLabel: "Organization" },
|
|
43
|
+
{ sourceLabel: "Person", edgeType: "FOUNDED", targetLabel: "LocalBusiness" },
|
|
44
|
+
// ADVISES — person advises an organisation or another person.
|
|
45
|
+
{ sourceLabel: "Person", edgeType: "ADVISES", targetLabel: "Organization" },
|
|
46
|
+
{ sourceLabel: "Person", edgeType: "ADVISES", targetLabel: "LocalBusiness" },
|
|
47
|
+
{ sourceLabel: "Person", edgeType: "ADVISES", targetLabel: "Person" },
|
|
48
|
+
// MENTIONS — prose-bearing node mentions any entity.
|
|
49
|
+
{ sourceLabel: "Message", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
50
|
+
{ sourceLabel: "Message", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
51
|
+
{ sourceLabel: "Message", edgeType: "MENTIONS", targetLabel: "LocalBusiness" },
|
|
52
|
+
{ sourceLabel: "Message", edgeType: "MENTIONS", targetLabel: "Event" },
|
|
53
|
+
{ sourceLabel: "Page", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
54
|
+
{ sourceLabel: "Page", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
55
|
+
{ sourceLabel: "Page", edgeType: "MENTIONS", targetLabel: "LocalBusiness" },
|
|
56
|
+
{ sourceLabel: "Page", edgeType: "MENTIONS", targetLabel: "Event" },
|
|
57
|
+
{ sourceLabel: "Meeting", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
58
|
+
{ sourceLabel: "Meeting", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
59
|
+
{ sourceLabel: "Email", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
60
|
+
{ sourceLabel: "Email", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
61
|
+
{ sourceLabel: "Note", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
62
|
+
{ sourceLabel: "Note", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
63
|
+
{ sourceLabel: "Idea", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
64
|
+
{ sourceLabel: "Idea", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
65
|
+
{ sourceLabel: "Post", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
66
|
+
{ sourceLabel: "Post", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
67
|
+
{ sourceLabel: "Report", edgeType: "MENTIONS", targetLabel: "Person" },
|
|
68
|
+
{ sourceLabel: "Report", edgeType: "MENTIONS", targetLabel: "Organization" },
|
|
69
|
+
// AUTHORED — person authored a prose-bearing artefact.
|
|
70
|
+
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "Post" },
|
|
71
|
+
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "Report" },
|
|
72
|
+
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "Page" },
|
|
73
|
+
{ sourceLabel: "Person", edgeType: "AUTHORED", targetLabel: "Note" },
|
|
74
|
+
// ATTACHED_TO — document or media attached to a higher-level entity.
|
|
75
|
+
{ sourceLabel: "Email", edgeType: "ATTACHED_TO", targetLabel: "Meeting" },
|
|
76
|
+
{ sourceLabel: "Page", edgeType: "ATTACHED_TO", targetLabel: "Project" },
|
|
77
|
+
{ sourceLabel: "Note", edgeType: "ATTACHED_TO", targetLabel: "Project" },
|
|
78
|
+
// REFERENCES — one prose-bearing node references another.
|
|
79
|
+
{ sourceLabel: "Page", edgeType: "REFERENCES", targetLabel: "Page" },
|
|
80
|
+
{ sourceLabel: "Report", edgeType: "REFERENCES", targetLabel: "Report" },
|
|
81
|
+
{ sourceLabel: "Report", edgeType: "REFERENCES", targetLabel: "Page" },
|
|
82
|
+
];
|
|
83
|
+
/** Set form for O(1) lookup during validation. */
|
|
84
|
+
const ALLOWLIST_SET = new Set(TYPED_EDGE_ALLOWLIST.map(({ sourceLabel, edgeType, targetLabel }) => `${sourceLabel}|${edgeType}|${targetLabel}`));
|
|
85
|
+
/** Returns true when this triple is allowed by the typed-edge pass. */
|
|
86
|
+
export function isAllowedTypedEdge(sourceLabel, edgeType, targetLabel) {
|
|
87
|
+
return ALLOWLIST_SET.has(`${sourceLabel}|${edgeType}|${targetLabel}`);
|
|
88
|
+
}
|
|
89
|
+
/** Edge types the pass may propose, deduplicated and sorted. */
|
|
90
|
+
export const TYPED_EDGE_TYPES = Array.from(new Set(TYPED_EDGE_ALLOWLIST.map((p) => p.edgeType))).sort();
|
|
91
|
+
/** Prose-bearing node labels the pass enumerates. Fixed set; non-prose labels are out of scope. */
|
|
92
|
+
export const PROSE_BEARING_LABELS = [
|
|
93
|
+
"Message",
|
|
94
|
+
"Page",
|
|
95
|
+
"Meeting",
|
|
96
|
+
"Email",
|
|
97
|
+
"Idea",
|
|
98
|
+
"Note",
|
|
99
|
+
"Post",
|
|
100
|
+
"Report",
|
|
101
|
+
];
|
|
102
|
+
//# sourceMappingURL=typed-edge-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-edge-schema.js","sourceRoot":"","sources":["../../src/lib/typed-edge-schema.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js
CHANGED
|
@@ -47,7 +47,24 @@ const baseParams = {
|
|
|
47
47
|
describe("memorySearch — fields projection (Task 138)", () => {
|
|
48
48
|
beforeEach(() => {
|
|
49
49
|
hybridMock.mockReset();
|
|
50
|
-
hybridMock.mockResolvedValue({
|
|
50
|
+
hybridMock.mockResolvedValue({
|
|
51
|
+
mode: "hybrid",
|
|
52
|
+
results: [makeResult()],
|
|
53
|
+
expandMs: 0,
|
|
54
|
+
rawMerged: 1,
|
|
55
|
+
suppressed: 0,
|
|
56
|
+
bm25Bypass: 0,
|
|
57
|
+
threshold: null,
|
|
58
|
+
stageCounts: {
|
|
59
|
+
expansions: 1,
|
|
60
|
+
vector: 1,
|
|
61
|
+
bm25: 0,
|
|
62
|
+
fused: 1,
|
|
63
|
+
boosted: 1,
|
|
64
|
+
deduped: 1,
|
|
65
|
+
final: 1,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
51
68
|
});
|
|
52
69
|
it("fields undefined → response identical to today (all properties present, related untouched)", async () => {
|
|
53
70
|
const res = await memorySearch({ ...baseParams });
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-search-fields.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-search-fields.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,yEAAyE;AACzE,8DAA8D;AAC9D,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACjB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;KAC7B,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CACpC,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3B,EAAE,CAAC,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CACpD,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,SAAS,UAAU;IACjB,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,OAAO;gBACrB,SAAS,EAAE,UAAU;gBACrB,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAClB,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE;aAC7C;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,qBAAqB;SACjC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,OAAO;CACnB,CAAC;AAEF,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,UAAU,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-search-fields.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-search-fields.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,yEAAyE;AACzE,8DAA8D;AAC9D,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACjB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;KAC7B,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CACpC,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3B,EAAE,CAAC,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CACpD,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,SAAS,UAAU;IACjB,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,OAAO;gBACrB,SAAS,EAAE,UAAU;gBACrB,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAClB,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE;aAC7C;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,qBAAqB;SACjC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,OAAO;CACnB,CAAC;AAEF,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,UAAU,CAAC,iBAAiB,CAAC;YAC3B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC;YACvB,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,IAAI;YACf,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,CAAC;aACT;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,qBAAqB;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAA0B,EAAE,EAAE;YACrD,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC,CAAgC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAE9E,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAClB,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3C,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -10,6 +10,11 @@ vi.mock("../../lib/embeddings.js", () => ({
|
|
|
10
10
|
}));
|
|
11
11
|
vi.mock("../../lib/graph-write-gate.js", () => ({
|
|
12
12
|
checkGraphWriteGate: vi.fn().mockResolvedValue({ ok: true }),
|
|
13
|
+
checkPropertyWriteGate: vi.fn().mockReturnValue({ ok: true }),
|
|
14
|
+
COMPILED_TRUTH_MAX_CHARS: 2000,
|
|
15
|
+
}));
|
|
16
|
+
vi.mock("../../lib/compiled-truth-rewriter.js", () => ({
|
|
17
|
+
rewriteCompiledTruth: vi.fn().mockResolvedValue({ kind: "refused", reason: "no-events" }),
|
|
13
18
|
}));
|
|
14
19
|
vi.mock("./memory-write.js", () => ({
|
|
15
20
|
buildTextRepresentation: () => "stub-text",
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-update-emit.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-update-emit.test.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE/E,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;AAEtC,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW;CAC9B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CAClD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-update-emit.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-update-emit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ vi.mock("../../lib/schema-validator.js", () => ({
|
|
|
13
13
|
}));
|
|
14
14
|
vi.mock("../../lib/graph-write-gate.js", () => ({
|
|
15
15
|
checkGraphWriteGate: vi.fn().mockResolvedValue({ ok: true }),
|
|
16
|
+
checkPropertyWriteGate: vi.fn().mockReturnValue({ ok: true }),
|
|
17
|
+
COMPILED_TRUTH_MAX_CHARS: 2000,
|
|
16
18
|
}));
|
|
17
19
|
vi.mock("../../../../../../lib/graph-write/dist/index.js", () => ({
|
|
18
20
|
writeNodeWithEdges: vi.fn(),
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-write-emit.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-write-emit.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE/E,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;AAEtC,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW;CAC9B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CAClD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;CACvB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-write-emit.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-write-emit.test.ts"],"names":[],"mappings":"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"}
|