@rubytech/create-maxy-code 0.1.230 → 0.1.233
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__/rss-sampler-installer.test.js +27 -0
- package/dist/index.js +61 -0
- package/package.json +1 -1
- package/payload/platform/neo4j/schema.cypher +20 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +39 -1
- package/payload/platform/plugins/docs/references/graph.md +12 -0
- package/payload/platform/plugins/docs/references/memory-guide.md +26 -0
- package/payload/platform/plugins/docs/superpowers/plans/2026-06-01-memory-edge.md +589 -0
- package/payload/platform/plugins/memory/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +12 -2
- package/payload/platform/plugins/memory/mcp/dist/index.js +64 -7
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js +16 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-backlinks.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-backlinks.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-backlinks.test.js +24 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-backlinks.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-tag-normalisation.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-tag-normalisation.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-tag-normalisation.test.js +51 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-tag-normalisation.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.d.ts +31 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.d.ts +7 -7
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.js +7 -7
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-backlinks.d.ts +15 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-backlinks.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-backlinks.js +37 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-backlinks.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-tag-normalisation.d.ts +25 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-tag-normalisation.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-tag-normalisation.js +90 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-tag-normalisation.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js +117 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.js +72 -26
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edge.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edge.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edge.test.js +164 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edge.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-inline-rewrite.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-inline-rewrite.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-inline-rewrite.test.js +66 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-inline-rewrite.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-timeline-learned-at.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-timeline-learned-at.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-timeline-learned-at.test.js +30 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-timeline-learned-at.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +25 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +26 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts +17 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js +33 -13
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.d.ts +6 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.js +32 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edge.d.ts +21 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edge.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edge.js +51 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edge.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +37 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +72 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.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 +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/skills/challenge/SKILL.md +52 -0
- package/payload/platform/plugins/memory/skills/connect/SKILL.md +56 -0
- package/payload/platform/plugins/memory/skills/emerge/SKILL.md +87 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/scripts/rss-sampler.sh +58 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +4 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +30 -4
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +23 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +14 -2
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +27 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +6 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +2 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/templates/specialists/agents/archive-ingest-operator.md +1 -1
- package/payload/platform/templates/specialists/agents/database-operator.md +1 -1
- package/payload/platform/templates/specialists/agents/librarian.md +1 -1
- package/payload/server/{chunk-EXIPYITB.js → chunk-63M3ILJ6.js} +1 -0
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/admin-DfeXRW1m.js +1 -0
- package/payload/server/public/index.html +1 -1
- package/payload/server/server.js +1 -1
- package/payload/server/public/assets/admin-BKawc0eQ.js +0 -1
|
@@ -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
|
package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-compiled-truth-history.d.ts","sourceRoot":"","sources":["../../src/tools/memory-compiled-truth-history.ts"],"names":[],"mappings":"
|
|
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
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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
|
|
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 =
|
|
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
|
|
1
|
+
{"version":3,"file":"memory-compiled-truth-history.js","sourceRoot":"","sources":["../../src/tools/memory-compiled-truth-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,9 +19,12 @@
|
|
|
19
19
|
* than running unbounded LLM calls on every invocation.
|
|
20
20
|
*
|
|
21
21
|
* Phase 5 (Task 391) prunes `:CompiledTruthRevision` rows down to the
|
|
22
|
-
* newest 20 per entity. Phase 6 (
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* newest 20 per entity. Phase 6 (Task 596) materialises persistent
|
|
23
|
+
* `:BACKLINKS` edges from `:MENTIONS`/`:REFERENCES`. Phase 7 (Task 596)
|
|
24
|
+
* normalises `tags[]` arrays on `:KnowledgeDocument` nodes and merges
|
|
25
|
+
* `:DefinedTerm {category:'obsidian-tag'}` variants. The `phases` schema
|
|
26
|
+
* accepts 1..7; values outside that range are rejected by zod at the MCP
|
|
27
|
+
* boundary.
|
|
25
28
|
*/
|
|
26
29
|
import type { PhaseResult, PhaseError } from "../lib/dream-cycle/index.js";
|
|
27
30
|
export interface MemoryDreamRunParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-dream-run.d.ts","sourceRoot":"","sources":["../../src/tools/memory-dream-run.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"memory-dream-run.d.ts","sourceRoot":"","sources":["../../src/tools/memory-dream-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAUH,OAAO,KAAK,EAAgB,WAAW,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzF,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,oCAAoC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAkBD,wBAAsB,cAAc,CAClC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAoH/B"}
|
|
@@ -19,9 +19,12 @@
|
|
|
19
19
|
* than running unbounded LLM calls on every invocation.
|
|
20
20
|
*
|
|
21
21
|
* Phase 5 (Task 391) prunes `:CompiledTruthRevision` rows down to the
|
|
22
|
-
* newest 20 per entity. Phase 6 (
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* newest 20 per entity. Phase 6 (Task 596) materialises persistent
|
|
23
|
+
* `:BACKLINKS` edges from `:MENTIONS`/`:REFERENCES`. Phase 7 (Task 596)
|
|
24
|
+
* normalises `tags[]` arrays on `:KnowledgeDocument` nodes and merges
|
|
25
|
+
* `:DefinedTerm {category:'obsidian-tag'}` variants. The `phases` schema
|
|
26
|
+
* accepts 1..7; values outside that range are rejected by zod at the MCP
|
|
27
|
+
* boundary.
|
|
25
28
|
*/
|
|
26
29
|
import { getSession } from "../lib/neo4j.js";
|
|
27
30
|
import { phaseOrphans } from "../lib/dream-cycle/phase-orphans.js";
|
|
@@ -29,14 +32,18 @@ import { phaseStaleTruth } from "../lib/dream-cycle/phase-stale-truth.js";
|
|
|
29
32
|
import { phaseDeadEdges } from "../lib/dream-cycle/phase-dead-edges.js";
|
|
30
33
|
import { phaseCitationAudit } from "../lib/dream-cycle/phase-citation-audit.js";
|
|
31
34
|
import { phasePruneRevisions } from "../lib/dream-cycle/phase-prune-revisions.js";
|
|
35
|
+
import { phaseBacklinks } from "../lib/dream-cycle/phase-backlinks.js";
|
|
36
|
+
import { phaseTagNormalisation } from "../lib/dream-cycle/phase-tag-normalisation.js";
|
|
32
37
|
import { memoryReportWrite } from "./memory-report-write.js";
|
|
33
|
-
const ALL_PHASES = [1, 2, 3, 4, 5];
|
|
38
|
+
const ALL_PHASES = [1, 2, 3, 4, 5, 6, 7];
|
|
34
39
|
const PHASE_DISPATCH = {
|
|
35
40
|
1: { name: "orphans", run: phaseOrphans },
|
|
36
41
|
2: { name: "stale-truth", run: phaseStaleTruth },
|
|
37
42
|
3: { name: "dead-edges", run: phaseDeadEdges },
|
|
38
43
|
4: { name: "citation-audit", run: phaseCitationAudit },
|
|
39
44
|
5: { name: "prune-revisions", run: phasePruneRevisions },
|
|
45
|
+
6: { name: "backlinks", run: phaseBacklinks },
|
|
46
|
+
7: { name: "tag-normalisation", run: phaseTagNormalisation },
|
|
40
47
|
};
|
|
41
48
|
export async function memoryDreamRun(params) {
|
|
42
49
|
const start = Date.now();
|
|
@@ -118,13 +125,17 @@ export async function memoryDreamRun(params) {
|
|
|
118
125
|
SET r.lastEventCursor = $cursor,
|
|
119
126
|
r.partial = $partial,
|
|
120
127
|
r.operatorId = $operatorId,
|
|
121
|
-
r.phasesRun = $phasesRun
|
|
128
|
+
r.phasesRun = $phasesRun,
|
|
129
|
+
r.phase6Count = $phase6Count,
|
|
130
|
+
r.phase7Count = $phase7Count`, {
|
|
122
131
|
reportId,
|
|
123
132
|
accountId,
|
|
124
133
|
cursor: newCursor,
|
|
125
134
|
partial,
|
|
126
135
|
operatorId: operatorId ?? null,
|
|
127
136
|
phasesRun,
|
|
137
|
+
phase6Count: phaseResults.find((r) => r.phase === 6)?.applied ?? null,
|
|
138
|
+
phase7Count: phaseResults.find((r) => r.phase === 7)?.applied ?? null,
|
|
128
139
|
});
|
|
129
140
|
}
|
|
130
141
|
finally {
|
|
@@ -165,6 +176,22 @@ function buildReportBody(input) {
|
|
|
165
176
|
lines.push(`- Resume cursor stored on this report; next run continues after this point.`);
|
|
166
177
|
}
|
|
167
178
|
}
|
|
179
|
+
if (input.phasesRun.includes(6)) {
|
|
180
|
+
const phase6 = input.phaseResults.find((r) => r.phase === 6);
|
|
181
|
+
lines.push(``);
|
|
182
|
+
lines.push(`## Backlinks (phase 6)`);
|
|
183
|
+
lines.push(phase6
|
|
184
|
+
? `- proposed=${phase6.proposed} applied=${phase6.applied}`
|
|
185
|
+
: `- not run`);
|
|
186
|
+
}
|
|
187
|
+
if (input.phasesRun.includes(7)) {
|
|
188
|
+
const phase7 = input.phaseResults.find((r) => r.phase === 7);
|
|
189
|
+
lines.push(``);
|
|
190
|
+
lines.push(`## Tag normalisation (phase 7)`);
|
|
191
|
+
lines.push(phase7
|
|
192
|
+
? `- merged=${phase7.applied}`
|
|
193
|
+
: `- not run`);
|
|
194
|
+
}
|
|
168
195
|
return lines.join("\n");
|
|
169
196
|
}
|
|
170
197
|
//# sourceMappingURL=memory-dream-run.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-dream-run.js","sourceRoot":"","sources":["../../src/tools/memory-dream-run.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"memory-dream-run.js","sourceRoot":"","sources":["../../src/tools/memory-dream-run.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,5 +1,6 @@
|
|
|
1
1
|
import type { ClassifiedSection, ClassifierOutput, OrphanCandidate } from "../lib/section-types.js";
|
|
2
2
|
import { type ConversationSource } from "../lib/conversation-normalisers/types.js";
|
|
3
|
+
import type { InlineRewriteCandidate, InlineRewriteDeferred } from "../lib/compiled-truth-revision.js";
|
|
3
4
|
export declare function deriveSectionBodies(sections: ReadonlyArray<Pick<ClassifiedSection, "sourceStart" | "sourceEnd" | "body">>, cachedText: string, sourceKey?: string): string[];
|
|
4
5
|
export declare const RESERVED_SECTION_PROPERTY_KEYS: ReadonlySet<string>;
|
|
5
6
|
/**
|
|
@@ -119,6 +120,27 @@ export interface IngestParams {
|
|
|
119
120
|
* counter strings that used to lock `summary` to "Session 1/N: …" are
|
|
120
121
|
* gone. Ignored on the document path. */
|
|
121
122
|
archiveTitle?: string;
|
|
123
|
+
/**
|
|
124
|
+
* When true, after writing sections and edges, run the inline
|
|
125
|
+
* compiled-truth reconciliation gate: count MENTIONS/REFERENCES edges
|
|
126
|
+
* from the new document (KD and its sections) to existing entities
|
|
127
|
+
* that have `compiledTruth`. Entities above `inlineRewriteThreshold`
|
|
128
|
+
* and outside the 7-day cooldown are returned as `inlineRewriteCandidates`
|
|
129
|
+
* in the result. Disabled by default.
|
|
130
|
+
*/
|
|
131
|
+
inlineRewrite?: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* When `inlineRewrite` is true, bypass the 7-day per-entity cooldown on
|
|
134
|
+
* `compiledTruthUpdatedAt`. All entities above threshold are returned as
|
|
135
|
+
* candidates regardless of when their truth was last rewritten.
|
|
136
|
+
*/
|
|
137
|
+
forceRewrite?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Minimum count of MENTIONS or REFERENCES edges from the new source
|
|
140
|
+
* (KnowledgeDocument + its sections) to an existing entity for that
|
|
141
|
+
* entity to qualify as an inline-rewrite candidate. Default: 2.
|
|
142
|
+
*/
|
|
143
|
+
inlineRewriteThreshold?: number;
|
|
122
144
|
}
|
|
123
145
|
/** Per-kind count breakdown the writer returns to the skill. */
|
|
124
146
|
export interface KindBreakdown {
|
|
@@ -152,6 +174,21 @@ export interface IngestResult {
|
|
|
152
174
|
* heartbeat WARN line so a destructive `--rebuild` is operator-visible
|
|
153
175
|
* (defence-in-depth — `--rebuild` is the only legitimate trigger). */
|
|
154
176
|
cleanedPriorChunks?: number;
|
|
177
|
+
/**
|
|
178
|
+
* Entities above the MENTIONS/REFERENCES threshold that qualify for
|
|
179
|
+
* inline compiled-truth rewrite. Populated only when `inlineRewrite=true`.
|
|
180
|
+
* Dispatch the `compiled-truth-rewriter` specialist for each entity
|
|
181
|
+
* before the calling skill returns — pass `nodeId` and optionally
|
|
182
|
+
* an `operatorHint` if the document suggests a correction.
|
|
183
|
+
*/
|
|
184
|
+
inlineRewriteCandidates?: InlineRewriteCandidate[];
|
|
185
|
+
/**
|
|
186
|
+
* Entities above threshold that were skipped because their
|
|
187
|
+
* `compiledTruthUpdatedAt` is within the 7-day cooldown and
|
|
188
|
+
* `forceRewrite` was not set. These remain candidates for the next
|
|
189
|
+
* dream-cycle run.
|
|
190
|
+
*/
|
|
191
|
+
inlineRewriteDeferred?: InlineRewriteDeferred[];
|
|
155
192
|
}
|
|
156
193
|
export declare function memoryIngest(params: IngestParams): Promise<IngestResult>;
|
|
157
194
|
//# sourceMappingURL=memory-ingest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-ingest.d.ts","sourceRoot":"","sources":["../../src/tools/memory-ingest.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EAEjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-ingest.d.ts","sourceRoot":"","sources":["../../src/tools/memory-ingest.ts"],"names":[],"mappings":"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"}
|
|
@@ -588,6 +588,53 @@ async function memoryIngestImpl(params) {
|
|
|
588
588
|
for (const orphan of orphanCandidates) {
|
|
589
589
|
console.error(`[document-ingest] orphan-candidate node=${orphan.kind} label=${JSON.stringify(orphan.label)} reason=${JSON.stringify(orphan.reason)}`);
|
|
590
590
|
}
|
|
591
|
+
// Inline compiled-truth reconciliation gate (opt-in — Task 595).
|
|
592
|
+
// Only runs on the document path; conversation-archive path has no
|
|
593
|
+
// MENTIONS edges at ingest time (those come from the enrich phase).
|
|
594
|
+
let inlineRewriteCandidates;
|
|
595
|
+
let inlineRewriteDeferred;
|
|
596
|
+
if (params.inlineRewrite) {
|
|
597
|
+
const threshold = params.inlineRewriteThreshold ?? 2;
|
|
598
|
+
const rows = await queryInlineRewriteCandidates(dbSession, documentNodeId, accountId, threshold);
|
|
599
|
+
inlineRewriteCandidates = [];
|
|
600
|
+
inlineRewriteDeferred = [];
|
|
601
|
+
const cooldownMs = 7 * 24 * 60 * 60 * 1000;
|
|
602
|
+
const cutoffIso = new Date(Date.now() - cooldownMs).toISOString();
|
|
603
|
+
for (const row of rows) {
|
|
604
|
+
const inCooldown = !params.forceRewrite &&
|
|
605
|
+
row.compiledTruthUpdatedAt !== null &&
|
|
606
|
+
row.compiledTruthUpdatedAt > cutoffIso;
|
|
607
|
+
if (inCooldown) {
|
|
608
|
+
inlineRewriteDeferred.push({
|
|
609
|
+
elementId: row.elementId,
|
|
610
|
+
label: row.label,
|
|
611
|
+
name: row.name,
|
|
612
|
+
edgeCount: row.edgeCount,
|
|
613
|
+
reason: "cooldown",
|
|
614
|
+
compiledTruthUpdatedAt: row.compiledTruthUpdatedAt,
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
inlineRewriteCandidates.push({
|
|
619
|
+
elementId: row.elementId,
|
|
620
|
+
label: row.label,
|
|
621
|
+
name: row.name,
|
|
622
|
+
edgeCount: row.edgeCount,
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
const logReason = rows.length === 0
|
|
627
|
+
? "threshold-not-met"
|
|
628
|
+
: inlineRewriteCandidates.length === 0
|
|
629
|
+
? "cooldown"
|
|
630
|
+
: params.forceRewrite
|
|
631
|
+
? "force"
|
|
632
|
+
: "";
|
|
633
|
+
console.error(`[memory-ingest] op=compiled-truth-inline accountId=${accountId} kdId=${documentNodeId} ` +
|
|
634
|
+
`entitiesChecked=${rows.length} entitiesRecompiled=${inlineRewriteCandidates.length} ` +
|
|
635
|
+
`entitiesDeferred=${inlineRewriteDeferred.length}` +
|
|
636
|
+
(logReason ? ` reason=${logReason}` : ""));
|
|
637
|
+
}
|
|
591
638
|
return {
|
|
592
639
|
documentNodeId,
|
|
593
640
|
sectionCount: sections.length,
|
|
@@ -598,6 +645,8 @@ async function memoryIngestImpl(params) {
|
|
|
598
645
|
orphanCandidates,
|
|
599
646
|
documentSummary,
|
|
600
647
|
keywords,
|
|
648
|
+
...(inlineRewriteCandidates !== undefined ? { inlineRewriteCandidates } : {}),
|
|
649
|
+
...(inlineRewriteDeferred !== undefined ? { inlineRewriteDeferred } : {}),
|
|
601
650
|
};
|
|
602
651
|
}
|
|
603
652
|
finally {
|
|
@@ -831,6 +880,29 @@ async function writeRelatedNode(opts) {
|
|
|
831
880
|
});
|
|
832
881
|
return result.records[0].get("nodeId");
|
|
833
882
|
}
|
|
883
|
+
async function queryInlineRewriteCandidates(session, docNodeId, accountId, threshold) {
|
|
884
|
+
const result = await session.run(`MATCH (doc) WHERE elementId(doc) = $docId
|
|
885
|
+
MATCH (doc)-[:HAS_SECTION*0..1]->(intermediary)
|
|
886
|
+
MATCH (intermediary)-[r:MENTIONS|REFERENCES]->(target)
|
|
887
|
+
WHERE target.accountId = $accountId
|
|
888
|
+
AND NOT target:Trashed
|
|
889
|
+
AND target.compiledTruth IS NOT NULL
|
|
890
|
+
WITH elementId(target) AS eid, target, count(r) AS edgeCount
|
|
891
|
+
WHERE edgeCount >= $threshold
|
|
892
|
+
RETURN eid AS elementId,
|
|
893
|
+
[l IN labels(target) WHERE l IN ['Person', 'Organization', 'Concept', 'Project', 'LocalBusiness']][0] AS label,
|
|
894
|
+
coalesce(target.name, target.title, '<unnamed>') AS name,
|
|
895
|
+
toString(target.compiledTruthUpdatedAt) AS compiledTruthUpdatedAt,
|
|
896
|
+
edgeCount
|
|
897
|
+
ORDER BY edgeCount DESC`, { docId: docNodeId, accountId, threshold });
|
|
898
|
+
return result.records.map((rec) => ({
|
|
899
|
+
elementId: String(rec.get("elementId")),
|
|
900
|
+
label: String(rec.get("label") ?? "Unknown"),
|
|
901
|
+
name: String(rec.get("name")),
|
|
902
|
+
compiledTruthUpdatedAt: rec.get("compiledTruthUpdatedAt"),
|
|
903
|
+
edgeCount: Number(rec.get("edgeCount")),
|
|
904
|
+
}));
|
|
905
|
+
}
|
|
834
906
|
// ---------------------------------------------------------------------------
|
|
835
907
|
// Conversation-archive ingest — chat-mode branch (Task 397).
|
|
836
908
|
//
|