@rubytech/create-maxy-code 0.1.229 → 0.1.232

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/neo4j/schema.cypher +20 -0
  3. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +39 -1
  4. package/payload/platform/plugins/docs/references/graph.md +12 -0
  5. package/payload/platform/plugins/docs/references/memory-guide.md +26 -0
  6. package/payload/platform/plugins/docs/superpowers/plans/2026-06-01-memory-edge.md +589 -0
  7. package/payload/platform/plugins/memory/.claude-plugin/plugin.json +1 -1
  8. package/payload/platform/plugins/memory/PLUGIN.md +7 -1
  9. package/payload/platform/plugins/memory/mcp/dist/index.js +41 -0
  10. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  11. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.js +72 -26
  12. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.js.map +1 -1
  13. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edge.test.d.ts +2 -0
  14. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edge.test.d.ts.map +1 -0
  15. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edge.test.js +164 -0
  16. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edge.test.js.map +1 -0
  17. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-timeline-learned-at.test.d.ts +2 -0
  18. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-timeline-learned-at.test.d.ts.map +1 -0
  19. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-timeline-learned-at.test.js +30 -0
  20. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-timeline-learned-at.test.js.map +1 -0
  21. package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts +17 -1
  22. package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts.map +1 -1
  23. package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js +33 -13
  24. package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js.map +1 -1
  25. package/payload/platform/plugins/memory/mcp/dist/tools/memory-edge.d.ts +21 -0
  26. package/payload/platform/plugins/memory/mcp/dist/tools/memory-edge.d.ts.map +1 -0
  27. package/payload/platform/plugins/memory/mcp/dist/tools/memory-edge.js +51 -0
  28. package/payload/platform/plugins/memory/mcp/dist/tools/memory-edge.js.map +1 -0
  29. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
  30. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +1 -0
  31. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  32. package/payload/platform/plugins/memory/skills/challenge/SKILL.md +52 -0
  33. package/payload/platform/plugins/memory/skills/connect/SKILL.md +56 -0
  34. package/payload/platform/plugins/memory/skills/emerge/SKILL.md +87 -0
  35. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  36. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
  37. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  39. package/payload/platform/services/claude-session-manager/dist/http-server.js +51 -4
  40. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  41. package/payload/platform/templates/specialists/agents/archive-ingest-operator.md +1 -1
  42. package/payload/platform/templates/specialists/agents/database-operator.md +1 -1
  43. package/payload/platform/templates/specialists/agents/librarian.md +1 -1
  44. package/payload/server/{chunk-EXIPYITB.js → chunk-63M3ILJ6.js} +1 -0
  45. package/payload/server/maxy-edge.js +1 -1
  46. package/payload/server/public/assets/AdminShell-D_eg2QKE.js +1 -0
  47. package/payload/server/public/assets/admin-DfeXRW1m.js +1 -0
  48. package/payload/server/public/assets/{data-V17bGzzl.js → data-JoiWCmz6.js} +1 -1
  49. package/payload/server/public/assets/{graph-CYsyxGM1.js → graph-DmOvqjTa.js} +1 -1
  50. package/payload/server/public/data.html +2 -2
  51. package/payload/server/public/graph.html +2 -2
  52. package/payload/server/public/index.html +2 -2
  53. package/payload/server/server.js +1 -1
  54. package/payload/server/public/assets/AdminShell-1-LbiDAw.js +0 -1
  55. package/payload/server/public/assets/admin-BrCMyi1e.js +0 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=memory-edge.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-edge.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-edge.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,164 @@
1
+ // @vitest-environment node
2
+ import { describe, it, expect, beforeEach, vi } from "vitest";
3
+ function makeSession(runResults) {
4
+ let i = 0;
5
+ return {
6
+ run: vi.fn().mockImplementation(async () => {
7
+ const res = runResults[i++] ?? { records: [] };
8
+ return res;
9
+ }),
10
+ close: vi.fn().mockResolvedValue(undefined),
11
+ };
12
+ }
13
+ function ownerOk(id) {
14
+ return { records: [{ get: (_) => id }] };
15
+ }
16
+ function ownerFail() {
17
+ return { records: [] };
18
+ }
19
+ function mergeResult(created) {
20
+ return {
21
+ records: [{ get: (_) => ({}) }],
22
+ summary: {
23
+ counters: {
24
+ updates: () => ({ relationshipsCreated: created, relationshipsDeleted: 0 }),
25
+ },
26
+ },
27
+ };
28
+ }
29
+ function deleteResult(deleted) {
30
+ return {
31
+ records: [],
32
+ summary: {
33
+ counters: {
34
+ updates: () => ({ relationshipsCreated: 0, relationshipsDeleted: deleted }),
35
+ },
36
+ },
37
+ };
38
+ }
39
+ const ACCOUNT_ID = "acct-1";
40
+ const FROM_ID = "4:eid:node-a";
41
+ const TO_ID = "4:eid:node-b";
42
+ let mockSession;
43
+ vi.mock("../../lib/neo4j.js", () => ({
44
+ getSession: () => mockSession,
45
+ }));
46
+ import { memoryEdge } from "../memory-edge.js";
47
+ beforeEach(() => {
48
+ vi.clearAllMocks();
49
+ vi.spyOn(process.stderr, "write").mockImplementation(() => true);
50
+ });
51
+ describe("memory-edge — create", () => {
52
+ it("creates edge on first call — returned created: true", async () => {
53
+ mockSession = makeSession([ownerOk(FROM_ID), ownerOk(TO_ID), mergeResult(1)]);
54
+ const result = await memoryEdge({
55
+ action: "create",
56
+ fromId: FROM_ID,
57
+ toId: TO_ID,
58
+ relationshipType: "RELATES_TO",
59
+ accountId: ACCOUNT_ID,
60
+ });
61
+ expect(result).toEqual({ created: true });
62
+ expect(mockSession.run).toHaveBeenCalledTimes(3);
63
+ });
64
+ it("idempotent on second call — returned created: false", async () => {
65
+ mockSession = makeSession([ownerOk(FROM_ID), ownerOk(TO_ID), mergeResult(0)]);
66
+ const result = await memoryEdge({
67
+ action: "create",
68
+ fromId: FROM_ID,
69
+ toId: TO_ID,
70
+ relationshipType: "RELATES_TO",
71
+ accountId: ACCOUNT_ID,
72
+ });
73
+ expect(result).toEqual({ created: false });
74
+ });
75
+ it("uppercases the relationship type in the Cypher query", async () => {
76
+ mockSession = makeSession([ownerOk(FROM_ID), ownerOk(TO_ID), mergeResult(1)]);
77
+ await memoryEdge({
78
+ action: "create",
79
+ fromId: FROM_ID,
80
+ toId: TO_ID,
81
+ relationshipType: "relates_to",
82
+ accountId: ACCOUNT_ID,
83
+ });
84
+ const mergeCall = mockSession.run.mock.calls[2][0];
85
+ expect(mergeCall).toContain("`RELATES_TO`");
86
+ });
87
+ });
88
+ describe("memory-edge — delete", () => {
89
+ it("deletes a present edge — returned deleted: true", async () => {
90
+ mockSession = makeSession([ownerOk(FROM_ID), ownerOk(TO_ID), deleteResult(1)]);
91
+ const result = await memoryEdge({
92
+ action: "delete",
93
+ fromId: FROM_ID,
94
+ toId: TO_ID,
95
+ relationshipType: "RELATES_TO",
96
+ accountId: ACCOUNT_ID,
97
+ });
98
+ expect(result).toEqual({ deleted: true });
99
+ });
100
+ it("absent edge is a no-op — returned deleted: false", async () => {
101
+ mockSession = makeSession([ownerOk(FROM_ID), ownerOk(TO_ID), deleteResult(0)]);
102
+ const result = await memoryEdge({
103
+ action: "delete",
104
+ fromId: FROM_ID,
105
+ toId: TO_ID,
106
+ relationshipType: "RELATES_TO",
107
+ accountId: ACCOUNT_ID,
108
+ });
109
+ expect(result).toEqual({ deleted: false });
110
+ });
111
+ });
112
+ describe("memory-edge — account ownership", () => {
113
+ it("rejects when fromId does not belong to account — foreign-node error, no mutation", async () => {
114
+ mockSession = makeSession([ownerFail()]);
115
+ const result = await memoryEdge({
116
+ action: "create",
117
+ fromId: FROM_ID,
118
+ toId: TO_ID,
119
+ relationshipType: "RELATES_TO",
120
+ accountId: ACCOUNT_ID,
121
+ });
122
+ expect(result).toEqual({ error: "foreign-node", elementId: FROM_ID });
123
+ expect(mockSession.run).toHaveBeenCalledTimes(1);
124
+ });
125
+ it("rejects when toId does not belong to account — foreign-node error, no mutation", async () => {
126
+ mockSession = makeSession([ownerOk(FROM_ID), ownerFail()]);
127
+ const result = await memoryEdge({
128
+ action: "create",
129
+ fromId: FROM_ID,
130
+ toId: TO_ID,
131
+ relationshipType: "RELATES_TO",
132
+ accountId: ACCOUNT_ID,
133
+ });
134
+ expect(result).toEqual({ error: "foreign-node", elementId: TO_ID });
135
+ expect(mockSession.run).toHaveBeenCalledTimes(2);
136
+ });
137
+ });
138
+ describe("memory-edge — reserved type guard", () => {
139
+ it("rejects underscore-prefixed type before opening a session", async () => {
140
+ mockSession = makeSession([]);
141
+ const result = await memoryEdge({
142
+ action: "create",
143
+ fromId: FROM_ID,
144
+ toId: TO_ID,
145
+ relationshipType: "_INTERNAL",
146
+ accountId: ACCOUNT_ID,
147
+ });
148
+ expect(result).toEqual({ error: "reserved-type", type: "_INTERNAL" });
149
+ expect(mockSession.run).not.toHaveBeenCalled();
150
+ });
151
+ it("uppercase-coerces before reserved check — _soft_delete is also rejected", async () => {
152
+ mockSession = makeSession([]);
153
+ const result = await memoryEdge({
154
+ action: "create",
155
+ fromId: FROM_ID,
156
+ toId: TO_ID,
157
+ relationshipType: "_soft_delete",
158
+ accountId: ACCOUNT_ID,
159
+ });
160
+ expect(result).toEqual({ error: "reserved-type", type: "_SOFT_DELETE" });
161
+ expect(mockSession.run).not.toHaveBeenCalled();
162
+ });
163
+ });
164
+ //# sourceMappingURL=memory-edge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-edge.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-edge.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=memory-write-timeline-learned-at.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-write-timeline-learned-at.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-write-timeline-learned-at.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ // Task 597 — memory-write stamps learnedAt on :TimelineEvent CREATE.
2
+ //
3
+ // Validates via source-content inspection (same pattern as
4
+ // memory-archive-write.test.ts and the registration gate tests): the Cypher
5
+ // query must contain `t.learnedAt = datetime()` inside the ON CREATE SET
6
+ // block, and it must appear within the same string as `HAS_TIMELINE_EVENT`.
7
+ import { describe, it, expect } from "vitest";
8
+ import { readFileSync } from "node:fs";
9
+ import { resolve } from "node:path";
10
+ const SRC = readFileSync(resolve(import.meta.dirname, "../memory-write.ts"), "utf-8");
11
+ describe("memory-write :TimelineEvent learnedAt stamp (Task 597)", () => {
12
+ it("sets t.learnedAt = datetime() in the HAS_TIMELINE_EVENT ON CREATE SET block", () => {
13
+ // Find the HAS_TIMELINE_EVENT query block in the source.
14
+ const idx = SRC.indexOf("HAS_TIMELINE_EVENT");
15
+ expect(idx).toBeGreaterThan(-1);
16
+ // Slice 600 chars from the MERGE line. The ON CREATE SET block is ~350 chars
17
+ // today; the 600-char window has ~250 chars of headroom for future additions.
18
+ // If the block grows past 600 chars this assertion will need to widen.
19
+ const window = SRC.slice(idx, idx + 600);
20
+ expect(window).toContain("t.learnedAt = datetime()");
21
+ });
22
+ it("does not set learnedAt on ON MATCH (only on CREATE)", () => {
23
+ const idx = SRC.indexOf("HAS_TIMELINE_EVENT");
24
+ const window = SRC.slice(idx, idx + 600);
25
+ // ON MATCH must not appear at all in this block — the node is immutable
26
+ // after creation; learnedAt is a write-once transaction-time stamp.
27
+ expect(window).not.toContain("ON MATCH SET");
28
+ });
29
+ });
30
+ //# sourceMappingURL=memory-write-timeline-learned-at.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-write-timeline-learned-at.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-write-timeline-learned-at.test.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,2DAA2D;AAC3D,4EAA4E;AAC5E,yEAAyE;AACzE,4EAA4E;AAE5E,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,GAAG,GAAG,YAAY,CACtB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAClD,OAAO,CACR,CAAC;AAEF,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACtE,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,yDAAyD;QACzD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhC,6EAA6E;QAC7E,8EAA8E;QAC9E,uEAAuE;QACvE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QAEzC,wEAAwE;QACxE,oEAAoE;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -15,11 +15,27 @@ export interface CompiledTruthRevisionRow {
15
15
  writtenAt: string;
16
16
  source: "rewriter" | "operator";
17
17
  }
18
+ /** Task 597: one row per :TimelineEvent linked to the entity. */
19
+ export interface TimelineEventRow {
20
+ timelineEventId: string;
21
+ /** Valid-time: when the fact was true in the world (t.occurredAt). */
22
+ eventDate: string;
23
+ /**
24
+ * Transaction-time: when the store ingested this event (t.learnedAt).
25
+ * Null for nodes written before Task 597 that missed the backfill migration.
26
+ */
27
+ learnedAt: string | null;
28
+ kind: string;
29
+ summary: string;
30
+ }
18
31
  export interface CompiledTruthHistoryResult {
19
32
  entityNodeId: string;
20
33
  revisions: CompiledTruthRevisionRow[];
34
+ /** Task 597: timeline events sorted by eventDate DESC. */
35
+ timelineEvents: TimelineEventRow[];
21
36
  }
22
37
  declare const MAX_REVISIONS_RETURNED = 20;
38
+ declare const MAX_TIMELINE_EVENTS_RETURNED = 50;
23
39
  export declare function memoryCompiledTruthHistory(params: CompiledTruthHistoryParams): Promise<CompiledTruthHistoryResult>;
24
- export { MAX_REVISIONS_RETURNED };
40
+ export { MAX_REVISIONS_RETURNED, MAX_TIMELINE_EVENTS_RETURNED };
25
41
  //# sourceMappingURL=memory-compiled-truth-history.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-compiled-truth-history.d.ts","sourceRoot":"","sources":["../../src/tools/memory-compiled-truth-history.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,EAAE,eAAe,GAAG,qBAAqB,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,wBAAwB,EAAE,CAAC;CACvC;AAED,QAAA,MAAM,sBAAsB,KAAK,CAAC;AAElC,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,0BAA0B,CAAC,CA2CrC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"memory-compiled-truth-history.d.ts","sourceRoot":"","sources":["../../src/tools/memory-compiled-truth-history.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,EAAE,eAAe,GAAG,qBAAqB,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACjC;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,wBAAwB,EAAE,CAAC;IACtC,0DAA0D;IAC1D,cAAc,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAED,QAAA,MAAM,sBAAsB,KAAK,CAAC;AAClC,QAAA,MAAM,4BAA4B,KAAK,CAAC;AAExC,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,0BAA0B,CAAC,CAiErC;AAED,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,CAAC"}
@@ -1,18 +1,21 @@
1
1
  /**
2
- * memory-compiled-truth-history — Task 391.
2
+ * memory-compiled-truth-history — Task 391 / Task 597.
3
3
  *
4
- * Returns the `:CompiledTruthRevision` chain for one entity, newest
5
- * first, capped at `MAX_REVISIONS_RETURNED`. Account-scoped at both
6
- * the entity and the revision (defence in depth accountId mismatch
7
- * on either side returns an empty list).
4
+ * Returns the :CompiledTruthRevision chain for one entity (newest first,
5
+ * capped at MAX_REVISIONS_RETURNED) and the entity's :TimelineEvent rows
6
+ * (newest valid-time first, capped at MAX_TIMELINE_EVENTS_RETURNED).
8
7
  *
9
- * Read-only. The agent renders revision diffs in chat from the
10
- * returned rows there is no server-side diff helper because the
11
- * surface is PTY stdout and the LLM composes the comparison.
8
+ * Task 597 adds bi-temporal distinction: each TimelineEventRow carries
9
+ * `eventDate` (valid-time: when the fact was true) and `learnedAt`
10
+ * (transaction-time: when the store first ingested it).
11
+ *
12
+ * Read-only. Account-scoped at both the entity and child nodes (defence
13
+ * in depth — accountId mismatch on either side returns an empty list).
12
14
  */
13
15
  import { int } from "neo4j-driver";
14
16
  import { getSession } from "../lib/neo4j.js";
15
17
  const MAX_REVISIONS_RETURNED = 20;
18
+ const MAX_TIMELINE_EVENTS_RETURNED = 50;
16
19
  export async function memoryCompiledTruthHistory(params) {
17
20
  const { accountId, nodeId } = params;
18
21
  if (!accountId) {
@@ -24,7 +27,7 @@ export async function memoryCompiledTruthHistory(params) {
24
27
  const session = getSession();
25
28
  const t0 = Date.now();
26
29
  try {
27
- const res = await session.run(`MATCH (e) WHERE elementId(e) = $nodeId AND e.accountId = $accountId
30
+ const revRes = await session.run(`MATCH (e) WHERE elementId(e) = $nodeId AND e.accountId = $accountId
28
31
  MATCH (e)-[:HAS_REVISION]->(r:CompiledTruthRevision)
29
32
  WHERE r.accountId = $accountId
30
33
  RETURN r.revisionId AS revisionId,
@@ -34,20 +37,37 @@ export async function memoryCompiledTruthHistory(params) {
34
37
  r.source AS source
35
38
  ORDER BY r.writtenAt DESC
36
39
  LIMIT $limit`, { nodeId, accountId, limit: int(MAX_REVISIONS_RETURNED) });
37
- const revisions = res.records.map((rec) => ({
40
+ const revisions = revRes.records.map((rec) => ({
38
41
  revisionId: String(rec.get("revisionId")),
39
42
  truth: String(rec.get("truth") ?? ""),
40
43
  twin: rec.get("twin"),
41
44
  writtenAt: String(rec.get("writtenAt")),
42
45
  source: rec.get("source"),
43
46
  }));
47
+ const teRes = await session.run(`MATCH (e) WHERE elementId(e) = $nodeId AND e.accountId = $accountId
48
+ MATCH (e)-[:HAS_TIMELINE_EVENT]->(t:TimelineEvent)
49
+ WHERE t.accountId = $accountId
50
+ RETURN t.timelineEventId AS timelineEventId,
51
+ toString(t.occurredAt) AS eventDate,
52
+ toString(t.learnedAt) AS learnedAt,
53
+ t.kind AS kind,
54
+ t.summary AS summary
55
+ ORDER BY t.occurredAt DESC
56
+ LIMIT $limit`, { nodeId, accountId, limit: int(MAX_TIMELINE_EVENTS_RETURNED) });
57
+ const timelineEvents = teRes.records.map((rec) => ({
58
+ timelineEventId: String(rec.get("timelineEventId")),
59
+ eventDate: String(rec.get("eventDate") ?? ""),
60
+ learnedAt: rec.get("learnedAt") != null ? String(rec.get("learnedAt")) : null,
61
+ kind: String(rec.get("kind") ?? ""),
62
+ summary: String(rec.get("summary") ?? ""),
63
+ }));
44
64
  const ms = Date.now() - t0;
45
- process.stderr.write(`[compiled-truth-history] nodeId=${nodeId.slice(0, 12)} ms=${ms} revisions=${revisions.length}\n`);
46
- return { entityNodeId: nodeId, revisions };
65
+ process.stderr.write(`[compiled-truth-history] nodeId=${nodeId.slice(0, 12)} ms=${ms} revisions=${revisions.length} timelineEvents=${timelineEvents.length}\n`);
66
+ return { entityNodeId: nodeId, revisions, timelineEvents };
47
67
  }
48
68
  finally {
49
69
  await session.close();
50
70
  }
51
71
  }
52
- export { MAX_REVISIONS_RETURNED };
72
+ export { MAX_REVISIONS_RETURNED, MAX_TIMELINE_EVENTS_RETURNED };
53
73
  //# sourceMappingURL=memory-compiled-truth-history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-compiled-truth-history.js","sourceRoot":"","sources":["../../src/tools/memory-compiled-truth-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA0B7C,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAkC;IAElC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3B;;;;;;;;;oBASc,EACd,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAC1D,CAAC;QAEF,MAAM,SAAS,GAA+B,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACtE,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACzC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAA4C;YAChE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAA4B;SACrD,CAAC,CAAC,CAAC;QAEJ,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,SAAS,CAAC,MAAM,IAAI,CAClG,CAAC;QAEF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"memory-compiled-truth-history.js","sourceRoot":"","sources":["../../src/tools/memory-compiled-truth-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface MemoryEdgeParams {
2
+ action: "create" | "delete";
3
+ fromId: string;
4
+ toId: string;
5
+ relationshipType: string;
6
+ properties?: Record<string, unknown>;
7
+ accountId: string;
8
+ }
9
+ export type MemoryEdgeResult = {
10
+ created: boolean;
11
+ } | {
12
+ deleted: boolean;
13
+ } | {
14
+ error: "foreign-node";
15
+ elementId: string;
16
+ } | {
17
+ error: "reserved-type";
18
+ type: string;
19
+ };
20
+ export declare function memoryEdge(params: MemoryEdgeParams): Promise<MemoryEdgeResult>;
21
+ //# sourceMappingURL=memory-edge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-edge.d.ts","sourceRoot":"","sources":["../../src/tools/memory-edge.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACpB;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACpB;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmEpF"}
@@ -0,0 +1,51 @@
1
+ import { getSession } from "../lib/neo4j.js";
2
+ export async function memoryEdge(params) {
3
+ const { action, fromId, toId, accountId } = params;
4
+ const rawType = params.relationshipType.toUpperCase().replace(/[`\n\r]/g, "");
5
+ if (rawType.startsWith("_")) {
6
+ process.stderr.write(`[memory-edge] action=${action} from=${fromId.slice(0, 8)} to=${toId.slice(0, 8)} type=${rawType} accountId=${accountId?.slice(0, 8) ?? "none"} result=rejected reason=reserved-type\n`);
7
+ return { error: "reserved-type", type: rawType };
8
+ }
9
+ const session = getSession();
10
+ try {
11
+ const fromCheck = await session.run(`MATCH (n) WHERE elementId(n) = $nodeId AND n.accountId = $accountId RETURN elementId(n) AS id`, { nodeId: fromId, accountId });
12
+ if (fromCheck.records.length === 0) {
13
+ process.stderr.write(`[memory-edge] action=${action} from=${fromId.slice(0, 8)} to=${toId.slice(0, 8)} type=${rawType} accountId=${accountId?.slice(0, 8) ?? "none"} result=rejected reason=foreign-node elementId=${fromId}\n`);
14
+ return { error: "foreign-node", elementId: fromId };
15
+ }
16
+ const toCheck = await session.run(`MATCH (n) WHERE elementId(n) = $nodeId AND n.accountId = $accountId RETURN elementId(n) AS id`, { nodeId: toId, accountId });
17
+ if (toCheck.records.length === 0) {
18
+ process.stderr.write(`[memory-edge] action=${action} from=${fromId.slice(0, 8)} to=${toId.slice(0, 8)} type=${rawType} accountId=${accountId?.slice(0, 8) ?? "none"} result=rejected reason=foreign-node elementId=${toId}\n`);
19
+ return { error: "foreign-node", elementId: toId };
20
+ }
21
+ if (action === "create") {
22
+ const props = params.properties ?? {};
23
+ const q = `
24
+ MATCH (a) WHERE elementId(a) = $fromId
25
+ MATCH (b) WHERE elementId(b) = $toId
26
+ MERGE (a)-[r:\`${rawType}\`]->(b)
27
+ ON CREATE SET r += $props, r.createdAt = datetime()
28
+ RETURN r
29
+ `;
30
+ const result = await session.run(q, { fromId, toId, props });
31
+ const created = result.summary.counters.updates().relationshipsCreated > 0;
32
+ process.stderr.write(`[memory-edge] action=create from=${fromId.slice(0, 8)} to=${toId.slice(0, 8)} type=${rawType} accountId=${accountId?.slice(0, 8) ?? "none"} result=${created ? "created" : "idempotent"}\n`);
33
+ return { created };
34
+ }
35
+ else {
36
+ const q = `
37
+ MATCH (a)-[r:\`${rawType}\`]->(b)
38
+ WHERE elementId(a) = $fromId AND elementId(b) = $toId
39
+ DELETE r
40
+ `;
41
+ const result = await session.run(q, { fromId, toId });
42
+ const deleted = result.summary.counters.updates().relationshipsDeleted > 0;
43
+ process.stderr.write(`[memory-edge] action=delete from=${fromId.slice(0, 8)} to=${toId.slice(0, 8)} type=${rawType} accountId=${accountId?.slice(0, 8) ?? "none"} result=${deleted ? "deleted" : "absent"}\n`);
44
+ return { deleted };
45
+ }
46
+ }
47
+ finally {
48
+ await session.close();
49
+ }
50
+ }
51
+ //# sourceMappingURL=memory-edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-edge.js","sourceRoot":"","sources":["../../src/tools/memory-edge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory-write.d.ts","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAW9E,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACf,MAAM,8CAA8C,CAAC;AAEtD,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6HAA6H;IAC7H,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,+EAA+E;IAC/E,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAqCD,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAS3E;AAwVD,wFAAwF;AACxF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKhD;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EAAE,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAUR"}
1
+ {"version":3,"file":"memory-write.d.ts","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAW9E,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACf,MAAM,8CAA8C,CAAC;AAEtD,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6HAA6H;IAC7H,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,+EAA+E;IAC/E,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAqCD,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAS3E;AAyVD,wFAAwF;AACxF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKhD;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EAAE,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAUR"}
@@ -249,6 +249,7 @@ async function memoryWriteImpl(params) {
249
249
  t.source = $source,
250
250
  t.matched = $matched,
251
251
  t.createdAt = datetime(),
252
+ t.learnedAt = datetime(),
252
253
  t.scope = $scope
253
254
  RETURN elementId(t) AS timelineEventNodeId`, {
254
255
  entityId: result.nodeId,
@@ -1 +1 @@
1
- {"version":3,"file":"memory-write.js","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAqB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAG7B,MAAM,8CAA8C,CAAC;AAwCtD,yGAAyG;AACzG,MAAM,uBAAuB,GAAG;IAC9B,QAAQ;IACR,cAAc;IACd,SAAS;IACT,SAAS;IACT,eAAe;CACP,CAAC;AACX,gGAAgG;AAChG,MAAM,kBAAkB,GAAG;IACzB,cAAc;IACd,SAAS;IACT,SAAS;IACT,eAAe;CACP,CAAC;AACX,6FAA6F;AAC7F,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,kCAAkC,GAAG;IACzC,eAAe;IACf,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;IACrB,8BAA8B;IAC9B,2BAA2B;CACnB,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAmB;IACnD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAC/G,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEtC,OAAO,cAAc,CACnB,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC3D,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EACtH,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CACnE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAmB;IAChD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAE/G,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IACxG,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,0EAA0E;IAC1E,KAAK,MAAM,GAAG,IAAI,kCAAkC,EAAE,CAAC;QACrD,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wCAAwC,GAAG,0CAA0C;gBACnF,mHAAmH,CACtH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,uEAAuE;QACvE,6DAA6D;QAC7D,qEAAqE;QACrE,mEAAmE;QACnE,qBAAqB;QACrB,MAAM,eAAe,GAAG,MAAM,qBAAqB,CAAC;YAClD,OAAO;YACP,SAAS;YACT,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa;SAC9C,CAAC,CAAC;QAEH,uEAAuE;QACvE,0EAA0E;QAC1E,yEAAyE;QACzE,gDAAgD;QAChD,IAAI,CAAC;YACH,aAAa,CACX,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EACjC,SAAS,EACT,EAAE,eAAe,EAAE,CACpB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,6CAA6C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,SAAS,IAAI,QAAQ,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC5J,CAAC;YACF,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,sEAAsE;QACtE,sEAAsE;QACtE,oEAAoE;QACpE,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,6DAA6D;QAC7D,wEAAwE;QACxE,qEAAqE;QACrE,oEAAoE;QACpE,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,2EAA2E;QAC3E,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,iEAAiE;QACjE,kEAAkE;QAClE,+CAA+C;QAC/C,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,CAAC,MAAM,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,SAAS,GAA4B;YACzC,GAAG,UAAU;YACb,SAAS;YACT,KAAK;YACL,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YACnD,SAAS,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QAED,wEAAwE;QACxE,oEAAoE;QACpE,iEAAiE;QACjE,kEAAkE;QAClE,qEAAqE;QACrE,0DAA0D;QAC1D,MAAM,kBAAkB,GACtB,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,QAAQ;YACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAClC,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,kBAAkB,EAAE,CAAC;YACvB,SAAS,CAAC,UAAU,GAAG,kBAAkB,CAAC;YAC1C,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6BAA6B,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG;YAC1F,cAAc,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CACtE,CAAC;QAEF,uEAAuE;QACvE,sEAAsE;QACtE,8DAA8D;QAC9D,uEAAuE;QACvE,sEAAsE;QACtE,4CAA4C;QAC5C,EAAE;QACF,oEAAoE;QACpE,mEAAmE;QACnE,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,sBAAsB,EAAE,CAAC;YAC3B,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS;gBAAE,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC;YACxE,IAAI,SAAS,CAAC,sBAAsB,KAAK,SAAS;gBAChD,SAAS,CAAC,sBAAsB,GAAG,oBAAoB,CAAC;YAC1D,IAAI,SAAS,CAAC,mBAAmB,KAAK,SAAS;gBAC7C,SAAS,CAAC,mBAAmB,GAAG,UAAU,CAAC;QAC/C,CAAC;QACD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,mBAAmB,KAAK,SAAS;gBAAE,SAAS,CAAC,mBAAmB,GAAG,EAAE,CAAC;YACpF,IAAI,SAAS,CAAC,4BAA4B,KAAK,SAAS;gBACtD,SAAS,CAAC,4BAA4B,GAAG,oBAAoB,CAAC;YAChE,IAAI,SAAS,CAAC,yBAAyB,KAAK,SAAS;gBACnD,SAAS,CAAC,yBAAyB,GAAG,UAAU,CAAC;QACrD,CAAC;QAED,uDAAuD;QACvD,oEAAoE;QACpE,kEAAkE;QAClE,qEAAqE;QACrE,oEAAoE;QACpE,IAAI,qBAAqB,GAAwB,aAAa,CAAC;QAC/D,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,qFAAqF,EACrF,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAC7B,CAAC;YACF,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,mCAAmC,gBAAgB,mCAAmC,CACvF,CAAC;YACJ,CAAC;YACD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;YACpE,IAAI,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACb,kDAAkD,aAAa,qCAAqC,SAAS,iCAAiC,CAC/I,CAAC;YACJ,CAAC;YACD,qBAAqB,GAAG;gBACtB,GAAG,aAAa;gBAChB;oBACE,IAAI,EAAE,UAAU;oBAChB,SAAS,EAAE,UAAU;oBACrB,YAAY,EAAE,gBAAgB;iBAC/B;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,kEAAkE;YAClE,2DAA2D;YAC3D,kEAAkE;YAClE,mEAAmE;YACnE,oCAAoC;YACpC,qBAAqB,GAAG,MAAM,4BAA4B,CAAC;gBACzD,OAAO;gBACP,aAAa;gBACb,SAAS,EAAE,SAAS,IAAI,EAAE;gBAC1B,WAAW,EAAE,MAAM;gBACnB,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;gBAC/C,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,OAAO;YACP,MAAM;YACN,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,qBAAqB;YACpC,SAAS;SACV,CAAC,CAAC;QAEH,qEAAqE;QACrE,6EAA6E;QAC7E,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,iEAAiE;QACjE,IAAI,sBAAsB,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/E,IAAI,CAAC;gBACH,4DAA4D;gBAC5D,0DAA0D;gBAC1D,0DAA0D;gBAC1D,yDAAyD;gBACzD,MAAM,MAAM,GACV,CAAC,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC;oBAClE,CAAC,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC;oBAClE,CAAC,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC;oBAChE,SAAS,CAAC;gBACZ,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBACzD,MAAM,UAAU,GAAG,sBAAsB,CACvC,UAAU,CAAC,IAAI,EACf,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;gBACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;wBAC3B,MAAM,OAAO,CAAC,GAAG,CACf;;;;;;;;;;0DAU4C,EAC5C;4BACE,QAAQ,EAAE,MAAM,CAAC,MAAM;4BACvB,SAAS;4BACT,EAAE,EAAE,UAAU,EAAE;4BAChB,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,CAAC,CAAC,OAAO;4BAClB,MAAM,EAAE,OAAO,UAAU,CAAC,eAAe,KAAK,QAAQ;gCACpD,CAAC,CAAC,UAAU,CAAC,eAAe;gCAC5B,CAAC,CAAC,cAAc;4BAClB,OAAO,EAAE,CAAC,CAAC,OAAO;4BAClB,KAAK;yBACN,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,GAAG,CACT,6BAA6B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;oBACxD,YAAY,UAAU,CAAC,IAAI,IAAI,GAAG,WAAW,UAAU,CAAC,MAAM,qBAAqB,UAAU,CAAC,MAAM,GAAG,CAC1G,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAI,UAAU,CAAC,IAAe,CAAC,MAAM,CAAC;gBACnD,OAAO,CAAC,KAAK,CACX,mCAAmC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;oBAC9D,YAAY,OAAO,WAAW,GAAG,GAAG,CACvC,CAAC;gBACF,2EAA2E;YAC7E,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,4EAA4E;QAC5E,6EAA6E;QAC7E,IACE,KAAK,YAAY,KAAK;YACtB,MAAM,IAAI,KAAK;YACd,KAA0B,CAAC,IAAI;gBAC9B,mDAAmD,EACrD,CAAC;YACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,KAAK,CACX,yCAAyC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACzD,CAAC,MAAM;oBACL,CAAC,CAAC,gBAAgB,MAAM,CAAC,QAAQ,QAAQ,MAAM,CAAC,SAAS,GAAG;oBAC5D,CAAC,CAAC,qCAAqC,KAAK,CAAC,OAAO,EAAE,CAAC,CAC5D,CAAC;YAEF,IAAI,CAAC;gBACH,IAAI,WAAmB,CAAC;gBACxB,IAAI,YAAqC,CAAC;gBAE1C,IAAI,MAAM,EAAE,CAAC;oBACX,0EAA0E;oBAC1E,WAAW,GAAG;uBACD,QAAQ;qDACsB,MAAM,CAAC,QAAQ;;WAEzD,CAAC;oBACF,YAAY,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC5D,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG;uBACD,QAAQ;;;;WAIpB,CAAC;oBACF,YAAY,GAAG,EAAE,SAAS,EAAE,CAAC;gBAC/B,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;gBAClE,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAW,CAAC;oBACvE,MAAM,MAAM,GAAG,MAAM;wBACnB,CAAC,CAAC,gBAAgB,MAAM,CAAC,QAAQ,QAAQ,MAAM,CAAC,SAAS,cAAc;wBACvE,CAAC,CAAC,8BAA8B,CAAC;oBACnC,OAAO,CAAC,KAAK,CACX,6CAA6C,UAAU,EAAE,CAC1D,CAAC;oBACF,MAAM,IAAI,KAAK,CACb,mCAAmC,UAAU,IAAI,MAAM,mDAAmD,CAC3G,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,oEAAoE;gBACpE,IACE,WAAW,YAAY,KAAK;oBAC5B,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,EACrD,CAAC;oBACD,MAAM,WAAW,CAAC;gBACpB,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,WAAW,CAAC,CAAC;gBAChF,0EAA0E;YAC5E,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,uBAAuB,CACrC,OAAe;IAEf,mFAAmF;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAgB,EAChB,UAAmC;IAEnC,MAAM,KAAK,GAAa,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"memory-write.js","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: challenge
3
+ description: "Stress-tests a claim against the operator's own graph. Retrieves nodes that contradict or qualify the claim and presents the strongest counter-case. Run when the operator types `/challenge <claim>` or says 'challenge my assumption that X', 'find evidence against X', 'what contradicts X in my notes'. Never fabricates a counter-case — if no adversarial nodes surface, reports that explicitly."
4
+ ---
5
+
6
+ # Challenge
7
+
8
+ This skill retrieves nodes from the operator's graph that contradict or qualify a given claim. It presents the strongest counter-case the graph can support. It reads only — it never writes.
9
+
10
+ ## When to run
11
+
12
+ Run when the operator wants to stress-test an assertion against their own stored knowledge: `/challenge <claim>`, "challenge my assumption that X", "find evidence against X in my graph", "what contradicts X". Do not run as a routine check; run only when the operator has a specific claim to examine.
13
+
14
+ ## Method
15
+
16
+ Issue `memory-search` with two query phrasings:
17
+
18
+ 1. The claim verbatim.
19
+ 2. A contra-framing: "evidence against `<claim>`", "limitations of `<claim>`", "counterexample to `<claim>`".
20
+
21
+ Parameters: `limit=10, expandHops=1`.
22
+
23
+ From the returned node set, select the nodes whose content most directly contradicts or qualifies the claim — nodes that assert the opposite, name exceptions, or add significant caveats. Rank them by how strongly they challenge the claim. Present each with its node ID and fusion score.
24
+
25
+ If no adversarial nodes surface (all returned nodes support the claim), report that explicitly: "No contradicting nodes found in your graph for this claim." Do not fabricate a counter-case.
26
+
27
+ ## Output
28
+
29
+ Present counter-nodes as a ranked list:
30
+
31
+ ```
32
+ ## Strongest counter-evidence found
33
+
34
+ 1. [Node title or excerpt] (ID: `<elementId>`, score: `<fusionScore>`)
35
+ Why it challenges the claim: [one sentence]
36
+
37
+ 2. ...
38
+ ```
39
+
40
+ If no counter-evidence exists:
41
+ ```
42
+ No nodes found in your graph that contradict or qualify this claim.
43
+ ```
44
+
45
+ ## Observability
46
+
47
+ Emit one log line on invocation:
48
+ ```
49
+ [memory-thinking] skill=challenge nodeIds=[<id1>,<id2>,...] fusionScores=[<s1>,<s2>,...] elapsedMs=<N>
50
+ ```
51
+
52
+ `nodeIds` and `fusionScores` list only the nodes presented as counter-evidence (not all retrieved nodes). If no counter-evidence was found, `nodeIds=[]` and `fusionScores=[]`.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: connect
3
+ description: "Finds the bridge between two topics or entities in the operator's graph via shared neighbors and semantic overlap. Run when the operator types `/connect <topic-A> <topic-B>` or asks 'what connects X and Y in my notes', 'find a path between X and Y', 'how are X and Y related in my graph'. Read-only."
4
+ ---
5
+
6
+ # Connect
7
+
8
+ This skill finds bridging nodes between two topics or entities in the operator's graph. It names the bridge and lists the nodes that form it. It reads only — it never writes.
9
+
10
+ ## When to run
11
+
12
+ Run when the operator wants to discover unexpected connections: `/connect <topic-A> <topic-B>`, "what connects X and Y in my notes", "find a path between X and Y", "how are X and Y related in my graph". Read-only. Does not write.
13
+
14
+ ## Method
15
+
16
+ Issue two `memory-search` calls, one per topic:
17
+
18
+ - Query A: `<topic-A>`, `limit=5, expandHops=1`
19
+ - Query B: `<topic-B>`, `limit=5, expandHops=1`
20
+
21
+ Collect the 1-hop neighborhood for each: the seed nodes and their directly connected neighbors.
22
+
23
+ Look for intersection: nodes that appear in both neighborhoods, or nodes sharing a label or property cluster (same `:Concept`, same `:Project`, same `:Person`).
24
+
25
+ **If a direct intersection exists:** name the bridge in one sentence. List the bridging node(s) with their element IDs.
26
+
27
+ **If no direct intersection exists:** identify the closest approach — the pair of nodes (one from each neighborhood) with the highest semantic overlap. Report this as a proposed bridge: "These nodes are not directly connected, but `<node-A>` and `<node-B>` are the closest approach. The bridge you could draw: [one sentence]."
28
+
29
+ ## Output
30
+
31
+ If a direct bridge exists:
32
+ ```
33
+ ## Bridge found
34
+
35
+ `<bridging node title>` (ID: `<elementId>`) connects both topics.
36
+ It links to `<topic-A>` via [relationship type] and to `<topic-B>` via [relationship type].
37
+
38
+ Bridge: [one sentence naming what the two topics share]
39
+ ```
40
+
41
+ If no direct bridge:
42
+ ```
43
+ ## No direct bridge found
44
+
45
+ Closest approach: `<node-A-title>` (topic A side, ID: `<elementId>`) and `<node-B-title>` (topic B side, ID: `<elementId>`).
46
+ Proposed bridge: [one sentence]
47
+ ```
48
+
49
+ ## Observability
50
+
51
+ Emit one log line on invocation:
52
+ ```
53
+ [memory-thinking] skill=connect seedA=<id> seedB=<id> bridgePath=[<id1>,<id2>,...] elapsedMs=<N>
54
+ ```
55
+
56
+ `seedA` and `seedB` are the top-ranked seed nodes for each topic (first result from each search). `bridgePath` lists the IDs of bridging nodes found in the neighborhood intersection, or an empty array if no direct bridge was found.