@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
|
@@ -8,7 +8,64 @@ export interface LinkedInConnectionRow {
|
|
|
8
8
|
/** ISO 8601 date (YYYY-MM-DD), parsed by the caller from "23 Apr 2026". */
|
|
9
9
|
connectedOn: string;
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* One Obsidian vault page, after parsing + wikilink resolution. The
|
|
13
|
+
* obsidian-vault-import tool produces these from on-disk markdown and passes
|
|
14
|
+
* them as the `rows` payload — the handler here writes them in fixed Cypher.
|
|
15
|
+
*/
|
|
16
|
+
export interface ObsidianPageRow {
|
|
17
|
+
/** Vault-relative path with forward slashes. Natural key with accountId. */
|
|
18
|
+
obsidianPath: string;
|
|
19
|
+
/** Filename without `.md`. */
|
|
20
|
+
title: string;
|
|
21
|
+
/** Aliases declared in YAML frontmatter. */
|
|
22
|
+
aliases: string[];
|
|
23
|
+
/** Tag tokens (lowercased, no `#` prefix) — frontmatter ∪ inline body. */
|
|
24
|
+
tags: string[];
|
|
25
|
+
/** Body content with frontmatter stripped. */
|
|
26
|
+
body: string;
|
|
27
|
+
/** SHA-256 of file bytes — idempotency check key. */
|
|
28
|
+
contentHash: string;
|
|
29
|
+
/** ISO 8601 date when daily-note detected, else null. */
|
|
30
|
+
noteDate: string | null;
|
|
31
|
+
/** Last-modified epoch-ms — written as `obsidianMtime`. */
|
|
32
|
+
mtimeMs: number;
|
|
33
|
+
/** Wikilinks emitted by this page, with resolution already applied. */
|
|
34
|
+
wikilinks: ResolvedWikilink[];
|
|
35
|
+
/** Embedded attachments — copied to {accountDir}/archive/obsidian/<importId>/. */
|
|
36
|
+
attachments: ResolvedAttachment[];
|
|
37
|
+
}
|
|
38
|
+
export interface ResolvedWikilink {
|
|
39
|
+
/** Display text the operator typed inside [[…]] (post-alias-strip). */
|
|
40
|
+
linkText: string;
|
|
41
|
+
/** Alias text after `|`, or null when absent. */
|
|
42
|
+
alias: string | null;
|
|
43
|
+
/** Anchor portion after `#`, or null. */
|
|
44
|
+
anchor: string | null;
|
|
45
|
+
/** What the link resolves to. */
|
|
46
|
+
target: {
|
|
47
|
+
kind: "page";
|
|
48
|
+
obsidianPath: string;
|
|
49
|
+
} | {
|
|
50
|
+
kind: "entity";
|
|
51
|
+
nodeId: string;
|
|
52
|
+
nodeLabel: string;
|
|
53
|
+
} | {
|
|
54
|
+
kind: "stub";
|
|
55
|
+
name: string;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface ResolvedAttachment {
|
|
59
|
+
/** Original path as written in the markdown. */
|
|
60
|
+
rawPath: string;
|
|
61
|
+
/** Path under {accountDir}/archive/obsidian/<importId>/ after copy. */
|
|
62
|
+
archivePath: string;
|
|
63
|
+
/** MIME-style encoding marker (image/png, application/pdf, …). */
|
|
64
|
+
encodingFormat: string;
|
|
65
|
+
/** Display alt text or null. */
|
|
66
|
+
alt: string | null;
|
|
67
|
+
}
|
|
68
|
+
export type ArchiveRow = LinkedInConnectionRow | ObsidianPageRow;
|
|
12
69
|
export interface ArchiveWriteParams {
|
|
13
70
|
archiveType: string;
|
|
14
71
|
ownerNodeId: string;
|
|
@@ -51,4 +108,10 @@ export interface ArchiveHandlerFinalizeResult {
|
|
|
51
108
|
export declare function memoryArchiveWrite(params: ArchiveWriteParams): Promise<ArchiveWriteResult>;
|
|
52
109
|
export declare const PERSON_AND_CONNECTED_EDGE_CYPHER = "\nMATCH (owner) WHERE elementId(owner) = $ownerNodeId\nWITH owner, $rows AS rows\nUNWIND rows AS row\nMERGE (p:Person {linkedinUrl: row.linkedinUrl})\n ON CREATE SET\n p.accountId = $accountId,\n p.source = 'linkedin',\n p.createdByAgent = 'linkedin-import',\n p.createdBySource = 'linkedin-import',\n p.createdBySession = $sessionId,\n p.createdAt = datetime(),\n p.scope = 'admin'\nSET\n p.givenName = row.givenName,\n p.familyName = row.familyName,\n p.currentTitle = row.title\nFOREACH (_ IN CASE WHEN row.email IS NOT NULL AND row.email <> '' THEN [1] ELSE [] END |\n SET p.email = row.email\n)\nMERGE (owner)-[c:CONNECTED_ON_LINKEDIN]->(p)\n ON CREATE SET\n c.connectedOn = date(row.connectedOn),\n c.source = 'linkedin',\n c.createdAt = datetime()\nRETURN count(*) AS processed\n";
|
|
53
110
|
export declare const ORG_AND_WORKS_FOR_CYPHER = "\nUNWIND $rows AS row\nWITH row WHERE row.company IS NOT NULL AND row.company <> ''\nMATCH (p:Person {linkedinUrl: row.linkedinUrl})\nMERGE (o:Organization {accountId: $accountId, name: row.company})\n ON CREATE SET\n o.source = 'linkedin',\n o.createdByAgent = 'linkedin-import',\n o.createdBySource = 'linkedin-import',\n o.createdBySession = $sessionId,\n o.createdAt = datetime(),\n o.scope = 'admin'\nMERGE (p)-[w:WORKS_FOR]->(o)\n ON CREATE SET\n w.title = row.title,\n w.source = 'linkedin',\n w.current = true,\n w.createdAt = datetime()\n ON MATCH SET\n w.title = coalesce(row.title, w.title)\nRETURN count(*) AS processed\n";
|
|
111
|
+
export declare const OBSIDIAN_PAGE_CYPHER = "\nMATCH (owner) WHERE elementId(owner) = $ownerNodeId\nWITH owner, $rows AS rows\nUNWIND rows AS row\nMERGE (k:KnowledgeDocument {accountId: $accountId, obsidianPath: row.obsidianPath})\n ON CREATE SET\n k.knowledgeDocId = randomUUID(),\n k.source = 'obsidian',\n k.createdByAgent = 'obsidian-import',\n k.createdBySource = 'obsidian-import',\n k.createdBySession = $sessionId,\n k.createdAt = datetime(),\n k.scope = 'admin'\nSET\n k.title = row.title,\n k.contentHash = row.contentHash,\n k.text = row.body,\n k.aliases = row.aliases,\n k.tags = row.tags,\n k.obsidianMtime = datetime({ epochMillis: toInteger(row.mtimeMs) }),\n k.updatedAt = datetime()\nFOREACH (_ IN CASE WHEN row.noteDate IS NOT NULL THEN [1] ELSE [] END |\n SET k.noteDate = date(row.noteDate)\n)\nMERGE (owner)-[h:HAS_NOTE]->(k)\n ON CREATE SET\n h.source = 'obsidian',\n h.createdAt = datetime()\nRETURN count(*) AS processed\n";
|
|
112
|
+
export declare const OBSIDIAN_TAG_CYPHER = "\nUNWIND $rows AS row\nMATCH (k:KnowledgeDocument {accountId: $accountId, obsidianPath: row.obsidianPath})\nUNWIND row.tags AS tagName\nWITH k, tagName WHERE tagName IS NOT NULL AND tagName <> ''\nMERGE (t:DefinedTerm {accountId: $accountId, category: 'obsidian-tag', name: tagName})\n ON CREATE SET\n t.source = 'obsidian',\n t.createdByAgent = 'obsidian-import',\n t.createdBySource = 'obsidian-import',\n t.createdBySession = $sessionId,\n t.createdAt = datetime(),\n t.scope = 'admin'\nMERGE (k)-[r:TAGGED_WITH]->(t)\n ON CREATE SET\n r.source = 'obsidian',\n r.createdAt = datetime()\nRETURN count(*) AS processed\n";
|
|
113
|
+
export declare const OBSIDIAN_WIKILINK_PAGE_CYPHER = "\nUNWIND $pageLinks AS wl\nMATCH (src:KnowledgeDocument {accountId: $accountId, obsidianPath: wl.fromPath})\nMATCH (dst:KnowledgeDocument {accountId: $accountId, obsidianPath: wl.toPath})\nMERGE (src)-[r:WIKILINKS_TO]->(dst)\n ON CREATE SET\n r.linkText = wl.linkText,\n r.alias = wl.alias,\n r.anchor = wl.anchor,\n r.source = 'obsidian',\n r.createdAt = datetime()\nRETURN count(*) AS processed\n";
|
|
114
|
+
export declare const OBSIDIAN_WIKILINK_ENTITY_CYPHER = "\nUNWIND $entityLinks AS wl\nMATCH (src:KnowledgeDocument {accountId: $accountId, obsidianPath: wl.fromPath})\nMATCH (dst) WHERE elementId(dst) = wl.toNodeId AND dst.accountId = $accountId\nMERGE (src)-[r:MENTIONS]->(dst)\n ON CREATE SET\n r.linkText = wl.linkText,\n r.alias = wl.alias,\n r.source = 'obsidian',\n r.createdAt = datetime()\nRETURN count(*) AS processed\n";
|
|
115
|
+
export declare const OBSIDIAN_WIKILINK_STUB_CYPHER = "\nUNWIND $stubLinks AS wl\nMATCH (src:KnowledgeDocument {accountId: $accountId, obsidianPath: wl.fromPath})\nMERGE (c:Concept {accountId: $accountId, name: wl.stubName, source: 'obsidian-stub'})\n ON CREATE SET\n c.createdByAgent = 'obsidian-import',\n c.createdBySource = 'obsidian-import',\n c.createdBySession = $sessionId,\n c.createdAt = datetime(),\n c.scope = 'admin'\nMERGE (src)-[r:MENTIONS]->(c)\n ON CREATE SET\n r.linkText = wl.linkText,\n r.alias = wl.alias,\n r.source = 'obsidian',\n r.createdAt = datetime()\nRETURN count(*) AS processed\n";
|
|
116
|
+
export declare const OBSIDIAN_ATTACHMENT_CYPHER = "\nUNWIND $rows AS row\nWITH row WHERE size(row.attachments) > 0\nMATCH (k:KnowledgeDocument {accountId: $accountId, obsidianPath: row.obsidianPath})\nUNWIND row.attachments AS att\nMERGE (d:DigitalDocument {accountId: $accountId, attachmentPath: att.archivePath})\n ON CREATE SET\n d.digitalDocumentId = randomUUID(),\n d.source = 'obsidian',\n d.encodingFormat = att.encodingFormat,\n d.alt = att.alt,\n d.createdByAgent = 'obsidian-import',\n d.createdBySource = 'obsidian-import',\n d.createdBySession = $sessionId,\n d.createdAt = datetime(),\n d.scope = 'admin'\nMERGE (d)-[e:EMBEDDED_IN]->(k)\n ON CREATE SET\n e.source = 'obsidian',\n e.createdAt = datetime()\nRETURN count(*) AS processed\n";
|
|
54
117
|
//# sourceMappingURL=memory-archive-write.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-archive-write.d.ts","sourceRoot":"","sources":["../../src/tools/memory-archive-write.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-archive-write.d.ts","sourceRoot":"","sources":["../../src/tools/memory-archive-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ import { withWriteEvent } from "../lib/log-ingest.js";
|
|
|
23
23
|
const BATCH_SIZE = 500;
|
|
24
24
|
const HANDLERS = {
|
|
25
25
|
"linkedin-connections": linkedinConnectionsHandler(),
|
|
26
|
+
"obsidian-vault": obsidianVaultHandler(),
|
|
26
27
|
};
|
|
27
28
|
// ---------------------------------------------------------------------------
|
|
28
29
|
// Entry point
|
|
@@ -215,6 +216,263 @@ function linkedinConnectionsHandler() {
|
|
|
215
216
|
},
|
|
216
217
|
};
|
|
217
218
|
}
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
// obsidian-vault handler — Obsidian vault pages, wikilinks, tags, attachments
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
//
|
|
223
|
+
// Page MERGE natural key: (accountId, obsidianPath)
|
|
224
|
+
// Tag MERGE natural key: (accountId, category='obsidian-tag', name)
|
|
225
|
+
// Attachment MERGE key: (accountId, attachmentPath)
|
|
226
|
+
//
|
|
227
|
+
// Wikilinks split into three edge writes by target kind:
|
|
228
|
+
// page → (:KnowledgeDocument)-[:WIKILINKS_TO]->(:KnowledgeDocument)
|
|
229
|
+
// entity → (:KnowledgeDocument)-[:MENTIONS]->(node by elementId)
|
|
230
|
+
// stub → (:KnowledgeDocument)-[:MENTIONS]->(:Concept) with stub creation
|
|
231
|
+
//
|
|
232
|
+
// Owner anchor: each page MERGEd gets (:owner)-[:HAS_NOTE]->(page) so the
|
|
233
|
+
// page is reachable via the canonical hierarchy chain. Owner is either an
|
|
234
|
+
// :AdminUser (operator's own vault) or a :Person (external vault ingested
|
|
235
|
+
// for reference) — same shape as linkedin-import.
|
|
236
|
+
export const OBSIDIAN_PAGE_CYPHER = `
|
|
237
|
+
MATCH (owner) WHERE elementId(owner) = $ownerNodeId
|
|
238
|
+
WITH owner, $rows AS rows
|
|
239
|
+
UNWIND rows AS row
|
|
240
|
+
MERGE (k:KnowledgeDocument {accountId: $accountId, obsidianPath: row.obsidianPath})
|
|
241
|
+
ON CREATE SET
|
|
242
|
+
k.knowledgeDocId = randomUUID(),
|
|
243
|
+
k.source = 'obsidian',
|
|
244
|
+
k.createdByAgent = 'obsidian-import',
|
|
245
|
+
k.createdBySource = 'obsidian-import',
|
|
246
|
+
k.createdBySession = $sessionId,
|
|
247
|
+
k.createdAt = datetime(),
|
|
248
|
+
k.scope = 'admin'
|
|
249
|
+
SET
|
|
250
|
+
k.title = row.title,
|
|
251
|
+
k.contentHash = row.contentHash,
|
|
252
|
+
k.text = row.body,
|
|
253
|
+
k.aliases = row.aliases,
|
|
254
|
+
k.tags = row.tags,
|
|
255
|
+
k.obsidianMtime = datetime({ epochMillis: toInteger(row.mtimeMs) }),
|
|
256
|
+
k.updatedAt = datetime()
|
|
257
|
+
FOREACH (_ IN CASE WHEN row.noteDate IS NOT NULL THEN [1] ELSE [] END |
|
|
258
|
+
SET k.noteDate = date(row.noteDate)
|
|
259
|
+
)
|
|
260
|
+
MERGE (owner)-[h:HAS_NOTE]->(k)
|
|
261
|
+
ON CREATE SET
|
|
262
|
+
h.source = 'obsidian',
|
|
263
|
+
h.createdAt = datetime()
|
|
264
|
+
RETURN count(*) AS processed
|
|
265
|
+
`;
|
|
266
|
+
export const OBSIDIAN_TAG_CYPHER = `
|
|
267
|
+
UNWIND $rows AS row
|
|
268
|
+
MATCH (k:KnowledgeDocument {accountId: $accountId, obsidianPath: row.obsidianPath})
|
|
269
|
+
UNWIND row.tags AS tagName
|
|
270
|
+
WITH k, tagName WHERE tagName IS NOT NULL AND tagName <> ''
|
|
271
|
+
MERGE (t:DefinedTerm {accountId: $accountId, category: 'obsidian-tag', name: tagName})
|
|
272
|
+
ON CREATE SET
|
|
273
|
+
t.source = 'obsidian',
|
|
274
|
+
t.createdByAgent = 'obsidian-import',
|
|
275
|
+
t.createdBySource = 'obsidian-import',
|
|
276
|
+
t.createdBySession = $sessionId,
|
|
277
|
+
t.createdAt = datetime(),
|
|
278
|
+
t.scope = 'admin'
|
|
279
|
+
MERGE (k)-[r:TAGGED_WITH]->(t)
|
|
280
|
+
ON CREATE SET
|
|
281
|
+
r.source = 'obsidian',
|
|
282
|
+
r.createdAt = datetime()
|
|
283
|
+
RETURN count(*) AS processed
|
|
284
|
+
`;
|
|
285
|
+
export const OBSIDIAN_WIKILINK_PAGE_CYPHER = `
|
|
286
|
+
UNWIND $pageLinks AS wl
|
|
287
|
+
MATCH (src:KnowledgeDocument {accountId: $accountId, obsidianPath: wl.fromPath})
|
|
288
|
+
MATCH (dst:KnowledgeDocument {accountId: $accountId, obsidianPath: wl.toPath})
|
|
289
|
+
MERGE (src)-[r:WIKILINKS_TO]->(dst)
|
|
290
|
+
ON CREATE SET
|
|
291
|
+
r.linkText = wl.linkText,
|
|
292
|
+
r.alias = wl.alias,
|
|
293
|
+
r.anchor = wl.anchor,
|
|
294
|
+
r.source = 'obsidian',
|
|
295
|
+
r.createdAt = datetime()
|
|
296
|
+
RETURN count(*) AS processed
|
|
297
|
+
`;
|
|
298
|
+
export const OBSIDIAN_WIKILINK_ENTITY_CYPHER = `
|
|
299
|
+
UNWIND $entityLinks AS wl
|
|
300
|
+
MATCH (src:KnowledgeDocument {accountId: $accountId, obsidianPath: wl.fromPath})
|
|
301
|
+
MATCH (dst) WHERE elementId(dst) = wl.toNodeId AND dst.accountId = $accountId
|
|
302
|
+
MERGE (src)-[r:MENTIONS]->(dst)
|
|
303
|
+
ON CREATE SET
|
|
304
|
+
r.linkText = wl.linkText,
|
|
305
|
+
r.alias = wl.alias,
|
|
306
|
+
r.source = 'obsidian',
|
|
307
|
+
r.createdAt = datetime()
|
|
308
|
+
RETURN count(*) AS processed
|
|
309
|
+
`;
|
|
310
|
+
export const OBSIDIAN_WIKILINK_STUB_CYPHER = `
|
|
311
|
+
UNWIND $stubLinks AS wl
|
|
312
|
+
MATCH (src:KnowledgeDocument {accountId: $accountId, obsidianPath: wl.fromPath})
|
|
313
|
+
MERGE (c:Concept {accountId: $accountId, name: wl.stubName, source: 'obsidian-stub'})
|
|
314
|
+
ON CREATE SET
|
|
315
|
+
c.createdByAgent = 'obsidian-import',
|
|
316
|
+
c.createdBySource = 'obsidian-import',
|
|
317
|
+
c.createdBySession = $sessionId,
|
|
318
|
+
c.createdAt = datetime(),
|
|
319
|
+
c.scope = 'admin'
|
|
320
|
+
MERGE (src)-[r:MENTIONS]->(c)
|
|
321
|
+
ON CREATE SET
|
|
322
|
+
r.linkText = wl.linkText,
|
|
323
|
+
r.alias = wl.alias,
|
|
324
|
+
r.source = 'obsidian',
|
|
325
|
+
r.createdAt = datetime()
|
|
326
|
+
RETURN count(*) AS processed
|
|
327
|
+
`;
|
|
328
|
+
export const OBSIDIAN_ATTACHMENT_CYPHER = `
|
|
329
|
+
UNWIND $rows AS row
|
|
330
|
+
WITH row WHERE size(row.attachments) > 0
|
|
331
|
+
MATCH (k:KnowledgeDocument {accountId: $accountId, obsidianPath: row.obsidianPath})
|
|
332
|
+
UNWIND row.attachments AS att
|
|
333
|
+
MERGE (d:DigitalDocument {accountId: $accountId, attachmentPath: att.archivePath})
|
|
334
|
+
ON CREATE SET
|
|
335
|
+
d.digitalDocumentId = randomUUID(),
|
|
336
|
+
d.source = 'obsidian',
|
|
337
|
+
d.encodingFormat = att.encodingFormat,
|
|
338
|
+
d.alt = att.alt,
|
|
339
|
+
d.createdByAgent = 'obsidian-import',
|
|
340
|
+
d.createdBySource = 'obsidian-import',
|
|
341
|
+
d.createdBySession = $sessionId,
|
|
342
|
+
d.createdAt = datetime(),
|
|
343
|
+
d.scope = 'admin'
|
|
344
|
+
MERGE (d)-[e:EMBEDDED_IN]->(k)
|
|
345
|
+
ON CREATE SET
|
|
346
|
+
e.source = 'obsidian',
|
|
347
|
+
e.createdAt = datetime()
|
|
348
|
+
RETURN count(*) AS processed
|
|
349
|
+
`;
|
|
350
|
+
function obsidianVaultHandler() {
|
|
351
|
+
return {
|
|
352
|
+
async verifyArchive(session, params) {
|
|
353
|
+
const { ownerNodeId, accountId } = params;
|
|
354
|
+
const result = await session.run(`MATCH (n) WHERE elementId(n) = $ownerNodeId
|
|
355
|
+
RETURN labels(n) AS labels, n.accountId AS accountId LIMIT 1`, { ownerNodeId });
|
|
356
|
+
if (result.records.length === 0) {
|
|
357
|
+
throw new Error(`ownerNodeId ${ownerNodeId} not found. Re-run the archive-owner confirmation flow before invoking memory-archive-write.`);
|
|
358
|
+
}
|
|
359
|
+
const labels = result.records[0].get("labels") ?? [];
|
|
360
|
+
const ownerAccountId = result.records[0].get("accountId");
|
|
361
|
+
const isAdminUser = labels.includes("AdminUser");
|
|
362
|
+
const isPerson = labels.includes("Person");
|
|
363
|
+
if (!isAdminUser && !isPerson) {
|
|
364
|
+
throw new Error(`ownerNodeId ${ownerNodeId} has labels [${labels.join(", ")}]; expected :AdminUser or :Person.`);
|
|
365
|
+
}
|
|
366
|
+
if (ownerAccountId && ownerAccountId !== accountId) {
|
|
367
|
+
throw new Error(`ownerNodeId ${ownerNodeId} belongs to account ${ownerAccountId}, not ${accountId}. Cross-account vault ingest refused.`);
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
async writeBatch(session, ctx) {
|
|
371
|
+
const { params, batchRows, sessionId } = ctx;
|
|
372
|
+
const rows = batchRows.map(normaliseObsidianRow);
|
|
373
|
+
const pageLinks = [];
|
|
374
|
+
const entityLinks = [];
|
|
375
|
+
const stubLinks = [];
|
|
376
|
+
for (const row of rows) {
|
|
377
|
+
for (const wl of row.wikilinks ?? []) {
|
|
378
|
+
if (wl.target.kind === "page") {
|
|
379
|
+
pageLinks.push({
|
|
380
|
+
fromPath: row.obsidianPath,
|
|
381
|
+
toPath: wl.target.obsidianPath,
|
|
382
|
+
linkText: wl.linkText,
|
|
383
|
+
alias: wl.alias,
|
|
384
|
+
anchor: wl.anchor,
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
else if (wl.target.kind === "entity") {
|
|
388
|
+
entityLinks.push({
|
|
389
|
+
fromPath: row.obsidianPath,
|
|
390
|
+
toNodeId: wl.target.nodeId,
|
|
391
|
+
linkText: wl.linkText,
|
|
392
|
+
alias: wl.alias,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
stubLinks.push({
|
|
397
|
+
fromPath: row.obsidianPath,
|
|
398
|
+
stubName: wl.target.name,
|
|
399
|
+
linkText: wl.linkText,
|
|
400
|
+
alias: wl.alias,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
const queryParams = {
|
|
406
|
+
ownerNodeId: params.ownerNodeId,
|
|
407
|
+
accountId: params.accountId,
|
|
408
|
+
sessionId,
|
|
409
|
+
rows,
|
|
410
|
+
pageLinks,
|
|
411
|
+
entityLinks,
|
|
412
|
+
stubLinks,
|
|
413
|
+
};
|
|
414
|
+
return await session.executeWrite(async (tx) => {
|
|
415
|
+
const pageRes = await tx.run(OBSIDIAN_PAGE_CYPHER, queryParams);
|
|
416
|
+
const pageCounters = pageRes.summary.counters.updates();
|
|
417
|
+
const tagRes = await tx.run(OBSIDIAN_TAG_CYPHER, queryParams);
|
|
418
|
+
const tagCounters = tagRes.summary.counters.updates();
|
|
419
|
+
const attRes = await tx.run(OBSIDIAN_ATTACHMENT_CYPHER, queryParams);
|
|
420
|
+
const attCounters = attRes.summary.counters.updates();
|
|
421
|
+
let wikilinkCountersCreated = 0;
|
|
422
|
+
if (pageLinks.length > 0) {
|
|
423
|
+
const r = await tx.run(OBSIDIAN_WIKILINK_PAGE_CYPHER, queryParams);
|
|
424
|
+
wikilinkCountersCreated += r.summary.counters.updates().relationshipsCreated;
|
|
425
|
+
}
|
|
426
|
+
if (entityLinks.length > 0) {
|
|
427
|
+
const r = await tx.run(OBSIDIAN_WIKILINK_ENTITY_CYPHER, queryParams);
|
|
428
|
+
wikilinkCountersCreated += r.summary.counters.updates().relationshipsCreated;
|
|
429
|
+
}
|
|
430
|
+
if (stubLinks.length > 0) {
|
|
431
|
+
const r = await tx.run(OBSIDIAN_WIKILINK_STUB_CYPHER, queryParams);
|
|
432
|
+
wikilinkCountersCreated += r.summary.counters.updates().relationshipsCreated;
|
|
433
|
+
}
|
|
434
|
+
return {
|
|
435
|
+
createdPages: pageCounters.nodesCreated,
|
|
436
|
+
mergedPages: rows.length - pageCounters.nodesCreated,
|
|
437
|
+
createdTags: tagCounters.nodesCreated,
|
|
438
|
+
createdTagEdges: tagCounters.relationshipsCreated,
|
|
439
|
+
createdAttachments: attCounters.nodesCreated,
|
|
440
|
+
createdAttachmentEdges: attCounters.relationshipsCreated,
|
|
441
|
+
createdWikilinkEdges: wikilinkCountersCreated,
|
|
442
|
+
pageLinksRequested: pageLinks.length,
|
|
443
|
+
entityLinksRequested: entityLinks.length,
|
|
444
|
+
stubLinksRequested: stubLinks.length,
|
|
445
|
+
};
|
|
446
|
+
});
|
|
447
|
+
},
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
function normaliseObsidianRow(row) {
|
|
451
|
+
if (!row.obsidianPath || !row.obsidianPath.trim()) {
|
|
452
|
+
throw new Error("obsidian-vault row missing obsidianPath (natural key).");
|
|
453
|
+
}
|
|
454
|
+
if (row.obsidianPath.split("/").includes("..")) {
|
|
455
|
+
throw new Error(`obsidian-vault row obsidianPath="${row.obsidianPath}" contains path-traversal segment.`);
|
|
456
|
+
}
|
|
457
|
+
if (!row.contentHash || !/^[0-9a-f]{64}$/i.test(row.contentHash)) {
|
|
458
|
+
throw new Error(`obsidian-vault row contentHash for ${row.obsidianPath} is not a hex SHA-256.`);
|
|
459
|
+
}
|
|
460
|
+
if (row.noteDate && !/^\d{4}-\d{2}-\d{2}$/.test(row.noteDate)) {
|
|
461
|
+
throw new Error(`obsidian-vault row noteDate="${row.noteDate}" is not ISO 8601 (YYYY-MM-DD).`);
|
|
462
|
+
}
|
|
463
|
+
return {
|
|
464
|
+
obsidianPath: row.obsidianPath.trim(),
|
|
465
|
+
title: (row.title ?? "").trim(),
|
|
466
|
+
aliases: Array.isArray(row.aliases) ? row.aliases : [],
|
|
467
|
+
tags: Array.isArray(row.tags) ? row.tags : [],
|
|
468
|
+
body: row.body ?? "",
|
|
469
|
+
contentHash: row.contentHash.toLowerCase(),
|
|
470
|
+
noteDate: row.noteDate ?? null,
|
|
471
|
+
mtimeMs: typeof row.mtimeMs === "number" ? row.mtimeMs : 0,
|
|
472
|
+
wikilinks: Array.isArray(row.wikilinks) ? row.wikilinks : [],
|
|
473
|
+
attachments: Array.isArray(row.attachments) ? row.attachments : [],
|
|
474
|
+
};
|
|
475
|
+
}
|
|
218
476
|
function normaliseLinkedinRow(row) {
|
|
219
477
|
if (!row.linkedinUrl || !row.linkedinUrl.trim()) {
|
|
220
478
|
throw new Error("linkedin-connections row missing linkedinUrl (natural key).");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-archive-write.js","sourceRoot":"","sources":["../../src/tools/memory-archive-write.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory-archive-write.js","sourceRoot":"","sources":["../../src/tools/memory-archive-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-search.d.ts","sourceRoot":"","sources":["../../src/tools/memory-search.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAmB7G,MAAM,MAAM,kBAAkB,GAC1B,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAC3B;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE1C,wBAAsB,YAAY,CAChC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,YAAY,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"memory-search.d.ts","sourceRoot":"","sources":["../../src/tools/memory-search.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAmB7G,MAAM,MAAM,kBAAkB,GAC1B,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAC3B;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE1C,wBAAsB,YAAY,CAChC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,YAAY,EAAE,CAAC,CAyEzB"}
|
|
@@ -5,8 +5,22 @@ export async function memorySearch(params) {
|
|
|
5
5
|
const session = getSession();
|
|
6
6
|
const limit = params.limit ?? 10;
|
|
7
7
|
const { fields, ...hybridParams } = params;
|
|
8
|
+
const callStart = Date.now();
|
|
8
9
|
try {
|
|
9
10
|
const res = await hybrid(session, embed, { ...hybridParams, limit });
|
|
11
|
+
const callMs = Date.now() - callStart;
|
|
12
|
+
process.stderr.write(`[graph-search:hybrid] accountId=${(params.accountId ?? "").slice(0, 8)} ` +
|
|
13
|
+
`retrievalClass=${params.retrievalClass ?? "general"} ` +
|
|
14
|
+
`expansions=${res.stageCounts.expansions} ` +
|
|
15
|
+
`vector=${res.stageCounts.vector} ` +
|
|
16
|
+
`bm25=${res.stageCounts.bm25} ` +
|
|
17
|
+
`fused=${res.stageCounts.fused} ` +
|
|
18
|
+
`boosted=${res.stageCounts.boosted} ` +
|
|
19
|
+
`deduped=${res.stageCounts.deduped} ` +
|
|
20
|
+
`final=${res.stageCounts.final} ` +
|
|
21
|
+
`mode=${res.mode} ` +
|
|
22
|
+
`ms=${callMs} ` +
|
|
23
|
+
`expand-ms=${res.expandMs}\n`);
|
|
10
24
|
try {
|
|
11
25
|
const trashCensus = await session.run(`MATCH (n:Trashed) WHERE n.accountId = $accountId RETURN count(n) AS c`, { accountId: params.accountId });
|
|
12
26
|
const skipped = trashCensus.records[0]?.get("c");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-search.js","sourceRoot":"","sources":["../../src/tools/memory-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAwC,MAAM,+CAA+C,CAAC;AAuB7G,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA0B;IAE1B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-search.js","sourceRoot":"","sources":["../../src/tools/memory-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool wrapper for the typed-edge pass.
|
|
3
|
+
*
|
|
4
|
+
* Called by `database-operator` (Task-spawned by admin at the session-end
|
|
5
|
+
* retrospective). Admin does not call this tool directly — it is not in
|
|
6
|
+
* `ADMIN_CORE_TOOLS`. Backfill invokes the underlying `runTypedEdgePass`
|
|
7
|
+
* via the CLI script, bypassing this tool.
|
|
8
|
+
*
|
|
9
|
+
* Returns the pass counters so database-operator can hand them back to
|
|
10
|
+
* admin for the `session-retrospective-mark-complete` call.
|
|
11
|
+
*/
|
|
12
|
+
import type { Session } from "neo4j-driver";
|
|
13
|
+
import { type TypedEdgePassResult } from "../lib/typed-edge-pass.js";
|
|
14
|
+
export interface MemoryTypedEdgePassArgs {
|
|
15
|
+
/**
|
|
16
|
+
* Lower bound on `node.updatedAt`. The admin agent passes the session
|
|
17
|
+
* start timestamp from the retrospective prompt. Backfill mode passes
|
|
18
|
+
* null (handled by the CLI script, not this tool).
|
|
19
|
+
*/
|
|
20
|
+
sinceIso: string;
|
|
21
|
+
/**
|
|
22
|
+
* Optional conversation id stamped onto the createdBy provenance of
|
|
23
|
+
* MERGEd edges. Admin passes its own conversation id; if absent, the
|
|
24
|
+
* env var fallback is used.
|
|
25
|
+
*/
|
|
26
|
+
conversationId?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function memoryTypedEdgePass(args: MemoryTypedEdgePassArgs, session: Session, accountId: string): Promise<TypedEdgePassResult>;
|
|
29
|
+
//# sourceMappingURL=memory-typed-edge-pass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-typed-edge-pass.d.ts","sourceRoot":"","sources":["../../src/tools/memory-typed-edge-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEvF,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,CAAC,CAQ9B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool wrapper for the typed-edge pass.
|
|
3
|
+
*
|
|
4
|
+
* Called by `database-operator` (Task-spawned by admin at the session-end
|
|
5
|
+
* retrospective). Admin does not call this tool directly — it is not in
|
|
6
|
+
* `ADMIN_CORE_TOOLS`. Backfill invokes the underlying `runTypedEdgePass`
|
|
7
|
+
* via the CLI script, bypassing this tool.
|
|
8
|
+
*
|
|
9
|
+
* Returns the pass counters so database-operator can hand them back to
|
|
10
|
+
* admin for the `session-retrospective-mark-complete` call.
|
|
11
|
+
*/
|
|
12
|
+
import { runTypedEdgePass } from "../lib/typed-edge-pass.js";
|
|
13
|
+
export async function memoryTypedEdgePass(args, session, accountId) {
|
|
14
|
+
const conversationId = args.conversationId ?? process.env.CONVERSATION_ID ?? null;
|
|
15
|
+
return runTypedEdgePass({
|
|
16
|
+
session,
|
|
17
|
+
accountId,
|
|
18
|
+
sinceIso: args.sinceIso,
|
|
19
|
+
conversationId,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=memory-typed-edge-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-typed-edge-pass.js","sourceRoot":"","sources":["../../src/tools/memory-typed-edge-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAiBvF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA6B,EAC7B,OAAgB,EAChB,SAAiB;IAEjB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC;IAClF,OAAO,gBAAgB,CAAC;QACtB,OAAO;QACP,SAAS;QACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,cAAc;KACf,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { COMPILED_TRUTH_MAX_CHARS } from "../lib/graph-write-gate.js";
|
|
1
2
|
import type { CreatedBy } from "../../../../../lib/graph-write/dist/index.js";
|
|
2
3
|
interface UpdateParams {
|
|
3
4
|
nodeId: string;
|
|
@@ -5,12 +6,41 @@ interface UpdateParams {
|
|
|
5
6
|
accountId: string;
|
|
6
7
|
/** Provenance stamp — sourced from the MCP server env vars (agent/session). */
|
|
7
8
|
createdBy: CreatedBy;
|
|
9
|
+
/**
|
|
10
|
+
* Task 306: when true, the rewriter is invoked against the node's most
|
|
11
|
+
* recent :TimelineEvent rows to recompute `compiledTruth`. Direct writes
|
|
12
|
+
* to `compiledTruth` / `compiledTruthUpdatedAt` / `compiledTruthSource`
|
|
13
|
+
* are rejected loudly — this flag is the only path.
|
|
14
|
+
*/
|
|
15
|
+
rewriteCompiledTruth?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Task 306: bypass the 7-day operator-edit cooldown. The cooldown exists
|
|
18
|
+
* so an automatic rewriter pass does not overwrite an operator-authored
|
|
19
|
+
* summary within a week of the edit. Only set this when the operator
|
|
20
|
+
* explicitly asks for a refresh.
|
|
21
|
+
*/
|
|
22
|
+
forceRewrite?: boolean;
|
|
8
23
|
}
|
|
9
24
|
interface UpdateResult {
|
|
10
25
|
nodeId: string;
|
|
11
26
|
labels: string[];
|
|
12
27
|
updated: boolean;
|
|
28
|
+
rewriter?: {
|
|
29
|
+
kind: "ok";
|
|
30
|
+
charsBefore: number;
|
|
31
|
+
charsAfter: number;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "refused";
|
|
34
|
+
reason: "no-events" | "operator-edit-cooldown";
|
|
35
|
+
daysRemaining?: number;
|
|
36
|
+
} | {
|
|
37
|
+
kind: "too-long";
|
|
38
|
+
attemptedLen: number;
|
|
39
|
+
} | {
|
|
40
|
+
kind: "llm-failure";
|
|
41
|
+
cause: string;
|
|
42
|
+
};
|
|
13
43
|
}
|
|
14
44
|
export declare function memoryUpdate(params: UpdateParams): Promise<UpdateResult>;
|
|
15
|
-
export {};
|
|
45
|
+
export { COMPILED_TRUTH_MAX_CHARS };
|
|
16
46
|
//# sourceMappingURL=memory-update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-update.d.ts","sourceRoot":"","sources":["../../src/tools/memory-update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory-update.d.ts","sourceRoot":"","sources":["../../src/tools/memory-update.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAOpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAE9E,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EACL;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GACvD;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,wBAAwB,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3F;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAC1C;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAgBD,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAO9E;AA2PD,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
|