openclaw-cortex-memory 0.1.0-Alpha.8 → 0.1.0

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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -299
  3. package/SIGNATURE.md +7 -0
  4. package/SKILL.md +96 -350
  5. package/dist/index.d.ts +93 -23
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1234 -1318
  8. package/dist/index.js.map +1 -1
  9. package/dist/openclaw.plugin.json +377 -18
  10. package/dist/src/dedup/three_stage_deduplicator.d.ts.map +1 -1
  11. package/dist/src/dedup/three_stage_deduplicator.js +13 -3
  12. package/dist/src/dedup/three_stage_deduplicator.js.map +1 -1
  13. package/dist/src/engine/memory_engine.d.ts +6 -1
  14. package/dist/src/engine/memory_engine.d.ts.map +1 -1
  15. package/dist/src/engine/ts_engine.d.ts +208 -0
  16. package/dist/src/engine/ts_engine.d.ts.map +1 -1
  17. package/dist/src/engine/ts_engine.js +1353 -84
  18. package/dist/src/engine/ts_engine.js.map +1 -1
  19. package/dist/src/engine/types.d.ts +27 -0
  20. package/dist/src/engine/types.d.ts.map +1 -1
  21. package/dist/src/graph/ontology.d.ts +87 -15
  22. package/dist/src/graph/ontology.d.ts.map +1 -1
  23. package/dist/src/graph/ontology.js +999 -12
  24. package/dist/src/graph/ontology.js.map +1 -1
  25. package/dist/src/net/http_post.d.ts +17 -0
  26. package/dist/src/net/http_post.d.ts.map +1 -0
  27. package/dist/src/net/http_post.js +56 -0
  28. package/dist/src/net/http_post.js.map +1 -0
  29. package/dist/src/quality/llm_output_validator.d.ts +65 -0
  30. package/dist/src/quality/llm_output_validator.d.ts.map +1 -0
  31. package/dist/src/quality/llm_output_validator.js +635 -0
  32. package/dist/src/quality/llm_output_validator.js.map +1 -0
  33. package/dist/src/reflect/reflector.d.ts.map +1 -1
  34. package/dist/src/reflect/reflector.js +296 -26
  35. package/dist/src/reflect/reflector.js.map +1 -1
  36. package/dist/src/rules/rule_store.d.ts.map +1 -1
  37. package/dist/src/rules/rule_store.js +75 -16
  38. package/dist/src/rules/rule_store.js.map +1 -1
  39. package/dist/src/session/session_end.d.ts +20 -42
  40. package/dist/src/session/session_end.d.ts.map +1 -1
  41. package/dist/src/session/session_end.js +31 -214
  42. package/dist/src/session/session_end.js.map +1 -1
  43. package/dist/src/store/archive_store.d.ts +52 -7
  44. package/dist/src/store/archive_store.d.ts.map +1 -1
  45. package/dist/src/store/archive_store.js +526 -96
  46. package/dist/src/store/archive_store.js.map +1 -1
  47. package/dist/src/store/embedding_utils.d.ts +32 -0
  48. package/dist/src/store/embedding_utils.d.ts.map +1 -0
  49. package/dist/src/store/embedding_utils.js +173 -0
  50. package/dist/src/store/embedding_utils.js.map +1 -0
  51. package/dist/src/store/graph_memory_store.d.ts +115 -0
  52. package/dist/src/store/graph_memory_store.d.ts.map +1 -0
  53. package/dist/src/store/graph_memory_store.js +1061 -0
  54. package/dist/src/store/graph_memory_store.js.map +1 -0
  55. package/dist/src/store/read_store.d.ts +95 -0
  56. package/dist/src/store/read_store.d.ts.map +1 -1
  57. package/dist/src/store/read_store.js +2108 -268
  58. package/dist/src/store/read_store.js.map +1 -1
  59. package/dist/src/store/vector_store.d.ts +15 -0
  60. package/dist/src/store/vector_store.d.ts.map +1 -1
  61. package/dist/src/store/vector_store.js +75 -1
  62. package/dist/src/store/vector_store.js.map +1 -1
  63. package/dist/src/store/write_store.d.ts +46 -0
  64. package/dist/src/store/write_store.d.ts.map +1 -1
  65. package/dist/src/store/write_store.js +399 -50
  66. package/dist/src/store/write_store.js.map +1 -1
  67. package/dist/src/sync/session_sync.d.ts +115 -2
  68. package/dist/src/sync/session_sync.d.ts.map +1 -1
  69. package/dist/src/sync/session_sync.js +2497 -44
  70. package/dist/src/sync/session_sync.js.map +1 -1
  71. package/dist/src/utils/runtime_env.d.ts +4 -0
  72. package/dist/src/utils/runtime_env.d.ts.map +1 -0
  73. package/dist/src/utils/runtime_env.js +51 -0
  74. package/dist/src/utils/runtime_env.js.map +1 -0
  75. package/dist/src/wiki/wiki_linter.d.ts +26 -0
  76. package/dist/src/wiki/wiki_linter.d.ts.map +1 -0
  77. package/dist/src/wiki/wiki_linter.js +339 -0
  78. package/dist/src/wiki/wiki_linter.js.map +1 -0
  79. package/dist/src/wiki/wiki_logger.d.ts +10 -0
  80. package/dist/src/wiki/wiki_logger.d.ts.map +1 -0
  81. package/dist/src/wiki/wiki_logger.js +78 -0
  82. package/dist/src/wiki/wiki_logger.js.map +1 -0
  83. package/dist/src/wiki/wiki_maintainer.d.ts +39 -0
  84. package/dist/src/wiki/wiki_maintainer.d.ts.map +1 -0
  85. package/dist/src/wiki/wiki_maintainer.js +38 -0
  86. package/dist/src/wiki/wiki_maintainer.js.map +1 -0
  87. package/dist/src/wiki/wiki_projector.d.ts +35 -0
  88. package/dist/src/wiki/wiki_projector.d.ts.map +1 -0
  89. package/dist/src/wiki/wiki_projector.js +1151 -0
  90. package/dist/src/wiki/wiki_projector.js.map +1 -0
  91. package/dist/src/wiki/wiki_queue.d.ts +29 -0
  92. package/dist/src/wiki/wiki_queue.d.ts.map +1 -0
  93. package/dist/src/wiki/wiki_queue.js +137 -0
  94. package/dist/src/wiki/wiki_queue.js.map +1 -0
  95. package/openclaw.plugin.json +377 -18
  96. package/package.json +52 -5
  97. package/schema/graph.schema.yaml +330 -0
  98. package/scripts/cli.js +80 -26
  99. package/scripts/repair-memory.js +321 -0
  100. package/scripts/uninstall.js +7 -1
  101. package/skills/cortex-memory/SKILL.md +83 -0
  102. package/skills/cortex-memory/references/agent-manual.md +127 -0
  103. package/skills/cortex-memory/references/configuration.md +109 -0
  104. package/skills/cortex-memory/references/publish-checklist.md +45 -0
  105. package/skills/cortex-memory/references/system-prompt-template.md +27 -0
  106. package/skills/cortex-memory/references/tools.md +191 -0
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.lintMemoryWiki = lintMemoryWiki;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ function readJsonl(filePath) {
40
+ if (!fs.existsSync(filePath))
41
+ return [];
42
+ const lines = fs.readFileSync(filePath, "utf-8").split(/\r?\n/).filter(Boolean);
43
+ const output = [];
44
+ for (const line of lines) {
45
+ try {
46
+ output.push(JSON.parse(line));
47
+ }
48
+ catch {
49
+ // Ignore malformed lines.
50
+ }
51
+ }
52
+ return output;
53
+ }
54
+ function slugify(value) {
55
+ const normalized = (value || "").trim().toLowerCase();
56
+ if (!normalized)
57
+ return "unknown";
58
+ return normalized.replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "") || "unknown";
59
+ }
60
+ function readJson(filePath) {
61
+ if (!fs.existsSync(filePath))
62
+ return null;
63
+ try {
64
+ const text = fs.readFileSync(filePath, "utf-8");
65
+ return JSON.parse(text);
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ function listMarkdownFiles(dirPath) {
72
+ if (!fs.existsSync(dirPath))
73
+ return [];
74
+ try {
75
+ return fs.readdirSync(dirPath).filter(file => file.toLowerCase().endsWith(".md"));
76
+ }
77
+ catch {
78
+ return [];
79
+ }
80
+ }
81
+ function hasRequiredTimelineSections(markdown) {
82
+ return markdown.includes("## Summary")
83
+ && markdown.includes("## Timeline")
84
+ && markdown.includes("## Latest Status");
85
+ }
86
+ function missingRequiredSections(markdown, sections) {
87
+ return sections.filter(section => !markdown.includes(section));
88
+ }
89
+ function extractSection(markdown, title) {
90
+ const marker = `## ${title}`;
91
+ const start = markdown.indexOf(marker);
92
+ if (start < 0)
93
+ return "";
94
+ const rest = markdown.slice(start + marker.length);
95
+ const next = rest.search(/\n##\s+/);
96
+ return (next >= 0 ? rest.slice(0, next) : rest).trim();
97
+ }
98
+ function sectionHasUsefulContent(markdown, title) {
99
+ const body = extractSection(markdown, title);
100
+ if (!body)
101
+ return false;
102
+ return !/^\s*- \(none\)\s*$/m.test(body) || body.split(/\r?\n/).filter(line => line.trim()).length > 1;
103
+ }
104
+ function hasLegacyGenericSummary(markdown) {
105
+ return /has \d+ related facts in graph projection\.\s*$/m.test(markdown)
106
+ || /has \d+ relations\. Latest status is [a-z_]+\.\s*$/m.test(markdown)
107
+ || /timeline has \d+ entries\. Latest status is [a-z_]+\.\s*$/m.test(markdown);
108
+ }
109
+ function lintMemoryWiki(args) {
110
+ const now = new Date().toISOString();
111
+ const issues = [];
112
+ const categories = [
113
+ "pending_conflicts",
114
+ "projection_lag",
115
+ "orphan_pages",
116
+ "stale_claims",
117
+ "missing_pages",
118
+ "evidence_gaps",
119
+ "projection_consistency",
120
+ "markdown_structure",
121
+ "knowledge_quality",
122
+ ];
123
+ const conflictPath = path.join(args.memoryRoot, "graph", "conflict_queue.jsonl");
124
+ const pendingConflicts = readJsonl(conflictPath).filter(item => item.status === "pending");
125
+ if (pendingConflicts.length > 0) {
126
+ issues.push({
127
+ id: "lint_pending_conflicts",
128
+ category: "pending_conflicts",
129
+ severity: "warn",
130
+ summary: `${pendingConflicts.length} pending conflicts need confirmation.`,
131
+ next_action: "Run resolve_graph_conflict to accept/reject pending items.",
132
+ metadata: { pending_count: pendingConflicts.length },
133
+ });
134
+ }
135
+ const graphPath = path.join(args.memoryRoot, "graph", "memory.jsonl");
136
+ const projectionIndexPath = path.join(args.memoryRoot, "wiki", ".projection_index.json");
137
+ const graphMtime = fs.existsSync(graphPath) ? fs.statSync(graphPath).mtimeMs : 0;
138
+ const projectionMtime = fs.existsSync(projectionIndexPath) ? fs.statSync(projectionIndexPath).mtimeMs : 0;
139
+ const lagSeconds = graphMtime > projectionMtime ? Math.floor((graphMtime - projectionMtime) / 1000) : 0;
140
+ if (lagSeconds > 0) {
141
+ issues.push({
142
+ id: "lint_projection_lag",
143
+ category: "projection_lag",
144
+ severity: lagSeconds > 30 ? "warn" : "info",
145
+ summary: `Wiki projection is behind graph updates by ${lagSeconds}s.`,
146
+ next_action: "Trigger wiki projection maintenance to catch up queue events.",
147
+ metadata: { lag_seconds: lagSeconds },
148
+ });
149
+ }
150
+ const entitiesDir = path.join(args.memoryRoot, "wiki", "entities");
151
+ const entityFiles = fs.existsSync(entitiesDir)
152
+ ? fs.readdirSync(entitiesDir).filter(file => file.toLowerCase().endsWith(".md"))
153
+ : [];
154
+ const graphEntitySlugs = new Set(args.graphView.nodes.map(node => slugify(node.id)));
155
+ const orphanPages = entityFiles.filter(file => !graphEntitySlugs.has(slugify(file.replace(/\.md$/i, ""))));
156
+ if (orphanPages.length > 0) {
157
+ issues.push({
158
+ id: "lint_orphan_pages",
159
+ category: "orphan_pages",
160
+ severity: "warn",
161
+ summary: `${orphanPages.length} entity pages have no corresponding graph node.`,
162
+ next_action: "Rebuild projection or remove stale orphan pages.",
163
+ metadata: { orphan_pages: orphanPages },
164
+ });
165
+ }
166
+ const missingPages = args.graphView.nodes
167
+ .map(node => `${slugify(node.id)}.md`)
168
+ .filter(file => !entityFiles.includes(file));
169
+ if (missingPages.length > 0) {
170
+ issues.push({
171
+ id: "lint_missing_pages",
172
+ category: "missing_pages",
173
+ severity: "error",
174
+ summary: `${missingPages.length} graph entities are missing wiki pages.`,
175
+ next_action: "Run projection rebuild to generate missing entity pages.",
176
+ metadata: { missing_pages: missingPages },
177
+ });
178
+ }
179
+ const wikiRoot = path.join(args.memoryRoot, "wiki");
180
+ const topicsDir = path.join(wikiRoot, "topics");
181
+ const timelinesDir = path.join(wikiRoot, "timelines");
182
+ const topicFiles = listMarkdownFiles(topicsDir);
183
+ const timelineFiles = listMarkdownFiles(timelinesDir);
184
+ const structuralMissing = [];
185
+ for (const required of ["index.md", "log.md"]) {
186
+ if (!fs.existsSync(path.join(wikiRoot, required))) {
187
+ structuralMissing.push(required);
188
+ }
189
+ }
190
+ if (!fs.existsSync(timelinesDir)) {
191
+ structuralMissing.push("timelines/");
192
+ }
193
+ const sectionMissing = [];
194
+ for (const file of [...topicFiles.map(name => path.join(topicsDir, name)), ...timelineFiles.map(name => path.join(timelinesDir, name))]) {
195
+ const markdown = fs.readFileSync(file, "utf-8");
196
+ if (!hasRequiredTimelineSections(markdown)) {
197
+ sectionMissing.push(path.relative(wikiRoot, file).replace(/\\/g, "/"));
198
+ }
199
+ }
200
+ if (structuralMissing.length > 0 || sectionMissing.length > 0) {
201
+ issues.push({
202
+ id: "lint_wiki_markdown_structure",
203
+ category: "markdown_structure",
204
+ severity: structuralMissing.length > 0 ? "error" : "warn",
205
+ summary: `Wiki markdown structure check failed (missing=${structuralMissing.length}, invalid_sections=${sectionMissing.length}).`,
206
+ next_action: "Regenerate wiki projection so required files and Summary/Timeline/Latest Status sections are restored.",
207
+ metadata: {
208
+ error_code: "wiki_markdown_check_failed",
209
+ missing: structuralMissing,
210
+ invalid_sections: sectionMissing,
211
+ },
212
+ });
213
+ }
214
+ const knowledgeQualityProblems = [];
215
+ const collectQualityProblems = (dirPath, fileNames, requiredSections, kind) => {
216
+ for (const file of fileNames) {
217
+ const filePath = path.join(dirPath, file);
218
+ const markdown = fs.readFileSync(filePath, "utf-8");
219
+ const relPath = path.relative(wikiRoot, filePath).replace(/\\/g, "/");
220
+ const missing = missingRequiredSections(markdown, requiredSections);
221
+ if (missing.length > 0) {
222
+ knowledgeQualityProblems.push(`${relPath}:missing_sections=${missing.map(item => item.replace(/^##\s*/, "")).join(",")}`);
223
+ }
224
+ if (hasLegacyGenericSummary(markdown)) {
225
+ knowledgeQualityProblems.push(`${relPath}:legacy_generic_summary`);
226
+ }
227
+ if ((kind === "entity" || kind === "topic" || kind === "timeline") && !sectionHasUsefulContent(markdown, "Evidence Excerpts")) {
228
+ knowledgeQualityProblems.push(`${relPath}:empty_evidence_excerpts`);
229
+ }
230
+ }
231
+ };
232
+ collectQualityProblems(entitiesDir, entityFiles, [
233
+ "## Current Conclusion",
234
+ "## Recent Changes",
235
+ "## High Confidence Facts",
236
+ "## Evidence Excerpts",
237
+ ], "entity");
238
+ collectQualityProblems(topicsDir, topicFiles, [
239
+ "## Current Conclusion",
240
+ "## Status Groups",
241
+ "## Evidence Excerpts",
242
+ ], "topic");
243
+ collectQualityProblems(timelinesDir, timelineFiles, [
244
+ "## Current Conclusion",
245
+ "## Event Flow",
246
+ "## Evidence Excerpts",
247
+ ], "timeline");
248
+ if (knowledgeQualityProblems.length > 0) {
249
+ issues.push({
250
+ id: "lint_wiki_knowledge_quality",
251
+ category: "knowledge_quality",
252
+ severity: "warn",
253
+ summary: `${knowledgeQualityProblems.length} wiki page quality checks failed.`,
254
+ next_action: "Regenerate wiki projection so pages include conclusions, recent changes, status groups, event flow, and evidence excerpts.",
255
+ metadata: {
256
+ error_code: "wiki_knowledge_quality_check_failed",
257
+ problems: knowledgeQualityProblems.slice(0, 50),
258
+ },
259
+ });
260
+ }
261
+ const projectionIndex = readJson(projectionIndexPath);
262
+ const projectionMissing = [];
263
+ for (const listKey of ["entities", "topics", "timelines"]) {
264
+ const rows = Array.isArray(projectionIndex?.[listKey]) ? projectionIndex?.[listKey] : [];
265
+ for (const row of rows) {
266
+ const relPath = typeof row.path === "string" ? row.path.trim() : "";
267
+ if (!relPath)
268
+ continue;
269
+ const absPath = path.join(wikiRoot, relPath);
270
+ if (!fs.existsSync(absPath)) {
271
+ projectionMissing.push(relPath);
272
+ }
273
+ }
274
+ }
275
+ if (projectionMissing.length > 0) {
276
+ issues.push({
277
+ id: "lint_projection_consistency",
278
+ category: "projection_consistency",
279
+ severity: "warn",
280
+ summary: `${projectionMissing.length} projection index entries point to missing wiki files.`,
281
+ next_action: "Rebuild wiki projection index after regenerating entities/topics/timelines pages.",
282
+ metadata: {
283
+ error_code: "wiki_projection_inconsistent_check_failed",
284
+ missing_projection_paths: projectionMissing,
285
+ },
286
+ });
287
+ }
288
+ const staleClaims = [];
289
+ for (const file of entityFiles) {
290
+ const filePath = path.join(entitiesDir, file);
291
+ const text = fs.readFileSync(filePath, "utf-8");
292
+ const currentSection = text.split("## Current Facts")[1]?.split("##")[0] || "";
293
+ if (currentSection.includes("/superseded") || currentSection.includes("/rejected")) {
294
+ staleClaims.push(file);
295
+ }
296
+ }
297
+ if (staleClaims.length > 0) {
298
+ issues.push({
299
+ id: "lint_stale_claims",
300
+ category: "stale_claims",
301
+ severity: "warn",
302
+ summary: `${staleClaims.length} entity pages show stale superseded/rejected claims as current.`,
303
+ next_action: "Rebuild affected entity pages from latest graph view.",
304
+ metadata: { stale_pages: staleClaims },
305
+ });
306
+ }
307
+ const evidenceGapEdges = args.graphView.edges.filter(edge => !edge.evidence_span || typeof edge.confidence !== "number");
308
+ if (evidenceGapEdges.length > 0) {
309
+ issues.push({
310
+ id: "lint_evidence_gaps",
311
+ category: "evidence_gaps",
312
+ severity: "error",
313
+ summary: `${evidenceGapEdges.length} relations are missing evidence_span/confidence.`,
314
+ next_action: "Backfill evidence metadata or reject low-quality relations.",
315
+ metadata: {
316
+ sample: evidenceGapEdges.slice(0, 10).map(edge => ({
317
+ source: edge.source,
318
+ type: edge.type,
319
+ target: edge.target,
320
+ status: edge.status,
321
+ })),
322
+ },
323
+ });
324
+ }
325
+ const byCategory = {};
326
+ for (const category of categories) {
327
+ byCategory[category] = issues.filter(issue => issue.category === category).length;
328
+ }
329
+ return {
330
+ generated_at: now,
331
+ summary: {
332
+ total_issues: issues.length,
333
+ by_category: byCategory,
334
+ },
335
+ categories,
336
+ issues,
337
+ };
338
+ }
339
+ //# sourceMappingURL=wiki_linter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_linter.js","sourceRoot":"","sources":["../../../src/wiki/wiki_linter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface WikiLogEntry {
2
+ memoryRoot: string;
3
+ type: "graph_append" | "conflict_pending" | "conflict_accepted" | "conflict_rejected";
4
+ source_event_id?: string;
5
+ conflict_id?: string;
6
+ message: string;
7
+ }
8
+ export declare function appendWikiLog(entry: WikiLogEntry): void;
9
+ export {};
10
+ //# sourceMappingURL=wiki_logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_logger.d.ts","sourceRoot":"","sources":["../../../src/wiki/wiki_logger.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AA0BD,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAiBvD"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.appendWikiLog = appendWikiLog;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ function logPath(memoryRoot) {
40
+ return path.join(memoryRoot, "wiki", "log.md");
41
+ }
42
+ function ensureParent(filePath) {
43
+ const dirPath = path.dirname(filePath);
44
+ if (!fs.existsSync(dirPath)) {
45
+ fs.mkdirSync(dirPath, { recursive: true });
46
+ }
47
+ }
48
+ function ensureLogHeader(filePath) {
49
+ if (fs.existsSync(filePath) && fs.statSync(filePath).size > 0) {
50
+ return;
51
+ }
52
+ const header = [
53
+ "# Memory Wiki Log",
54
+ "",
55
+ "Auto-generated maintenance log for graph->wiki projection events.",
56
+ "",
57
+ ].join("\n");
58
+ fs.writeFileSync(filePath, `${header}\n`, "utf-8");
59
+ }
60
+ function appendWikiLog(entry) {
61
+ const filePath = logPath(entry.memoryRoot);
62
+ ensureParent(filePath);
63
+ ensureLogHeader(filePath);
64
+ const now = new Date().toISOString();
65
+ const parts = [
66
+ `- [${now}]`,
67
+ entry.type,
68
+ entry.message,
69
+ ];
70
+ if (entry.source_event_id) {
71
+ parts.push(`source_event_id=${entry.source_event_id}`);
72
+ }
73
+ if (entry.conflict_id) {
74
+ parts.push(`conflict_id=${entry.conflict_id}`);
75
+ }
76
+ fs.appendFileSync(filePath, `${parts.join(" | ")}\n`, "utf-8");
77
+ }
78
+ //# sourceMappingURL=wiki_logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_logger.js","sourceRoot":"","sources":["../../../src/wiki/wiki_logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,sCAiBC;AApDD,uCAAyB;AACzB,2CAA6B;AAU7B,SAAS,OAAO,CAAC,UAAkB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG;QACb,mBAAmB;QACnB,EAAE;QACF,mEAAmE;QACnE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,aAAa,CAAC,KAAmB;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG;QACZ,MAAM,GAAG,GAAG;QACZ,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,OAAO;KACd,CAAC;IACF,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { GraphViewData } from "../store/graph_memory_store";
2
+ interface LoggerLike {
3
+ info: (message: string, ...args: unknown[]) => void;
4
+ warn: (message: string, ...args: unknown[]) => void;
5
+ }
6
+ interface MaintainWikiProjectionArgs {
7
+ memoryRoot: string;
8
+ graphView: GraphViewData;
9
+ maxBatch?: number;
10
+ logger?: LoggerLike;
11
+ force?: boolean;
12
+ }
13
+ interface MaintainWikiProjectionResult {
14
+ processed: number;
15
+ remaining: number;
16
+ snapshot: {
17
+ view_path: string;
18
+ timeline_path: string;
19
+ snapshot_id: string;
20
+ mermaid_path: string;
21
+ network_markdown_path: string;
22
+ } | null;
23
+ projected: {
24
+ updated_at: string;
25
+ entities_count: number;
26
+ topics_count: number;
27
+ timelines_count: number;
28
+ files: {
29
+ index: string;
30
+ projection_index: string;
31
+ entities_dir: string;
32
+ topics_dir: string;
33
+ timelines_dir: string;
34
+ };
35
+ } | null;
36
+ }
37
+ export declare function maintainWikiProjection(args: MaintainWikiProjectionArgs): MaintainWikiProjectionResult;
38
+ export type { MaintainWikiProjectionResult };
39
+ //# sourceMappingURL=wiki_maintainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_maintainer.d.ts","sourceRoot":"","sources":["../../../src/wiki/wiki_maintainer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,UAAU,UAAU;IAClB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrD;AAED,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,4BAA4B;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,qBAAqB,EAAE,MAAM,CAAC;KAC/B,GAAG,IAAI,CAAC;IACT,SAAS,EACL;QACA,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,KAAK,EAAE;YACL,KAAK,EAAE,MAAM,CAAC;YACd,gBAAgB,EAAE,MAAM,CAAC;YACzB,YAAY,EAAE,MAAM,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC;YACnB,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC;KACH,GACC,IAAI,CAAC;CACV;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,GAAG,4BAA4B,CAiCrG;AAED,YAAY,EAAE,4BAA4B,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.maintainWikiProjection = maintainWikiProjection;
4
+ const wiki_queue_1 = require("./wiki_queue");
5
+ const wiki_projector_1 = require("./wiki_projector");
6
+ function maintainWikiProjection(args) {
7
+ const drain = (0, wiki_queue_1.drainWikiRebuildQueue)({
8
+ memoryRoot: args.memoryRoot,
9
+ maxBatch: args.maxBatch,
10
+ });
11
+ if (drain.drained.length === 0 && args.force !== true) {
12
+ return {
13
+ processed: 0,
14
+ remaining: 0,
15
+ snapshot: null,
16
+ projected: null,
17
+ };
18
+ }
19
+ const snapshot = (0, wiki_projector_1.writeGraphViewProjection)({
20
+ memoryRoot: args.memoryRoot,
21
+ view: args.graphView,
22
+ });
23
+ const projected = (0, wiki_projector_1.projectWikiKnowledge)({
24
+ memoryRoot: args.memoryRoot,
25
+ graphView: args.graphView,
26
+ queueEvents: drain.drained,
27
+ });
28
+ if (args.logger) {
29
+ args.logger.info(`wiki_projection_maintained processed=${drain.drained.length} remaining=${drain.remaining} entities=${projected.entities_count} topics=${projected.topics_count} timelines=${projected.timelines_count}`);
30
+ }
31
+ return {
32
+ processed: drain.drained.length,
33
+ remaining: drain.remaining,
34
+ snapshot,
35
+ projected,
36
+ };
37
+ }
38
+ //# sourceMappingURL=wiki_maintainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_maintainer.js","sourceRoot":"","sources":["../../../src/wiki/wiki_maintainer.ts"],"names":[],"mappings":";;AA4CA,wDAiCC;AA7ED,6CAAqD;AACrD,qDAAkF;AA2ClF,SAAgB,sBAAsB,CAAC,IAAgC;IACrE,MAAM,KAAK,GAAG,IAAA,kCAAqB,EAAC;QAClC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO;YACL,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,IAAA,yCAAwB,EAAC;QACxC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI,EAAE,IAAI,CAAC,SAAS;KACrB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAA,qCAAoB,EAAC;QACrC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,WAAW,EAAE,KAAK,CAAC,OAAO;KAC3B,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,wCAAwC,KAAK,CAAC,OAAO,CAAC,MAAM,cAAc,KAAK,CAAC,SAAS,aAAa,SAAS,CAAC,cAAc,WAAW,SAAS,CAAC,YAAY,cAAc,SAAS,CAAC,eAAe,EAAE,CACzM,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;QAC/B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { GraphViewData } from "../store/graph_memory_store";
2
+ import type { WikiRebuildEvent } from "./wiki_queue";
3
+ interface WriteGraphViewProjectionArgs {
4
+ memoryRoot: string;
5
+ view: GraphViewData;
6
+ }
7
+ interface WriteGraphViewProjectionResult {
8
+ view_path: string;
9
+ timeline_path: string;
10
+ snapshot_id: string;
11
+ mermaid_path: string;
12
+ network_markdown_path: string;
13
+ }
14
+ interface ProjectWikiKnowledgeArgs {
15
+ memoryRoot: string;
16
+ graphView: GraphViewData;
17
+ queueEvents: WikiRebuildEvent[];
18
+ }
19
+ interface ProjectWikiKnowledgeResult {
20
+ updated_at: string;
21
+ entities_count: number;
22
+ topics_count: number;
23
+ timelines_count: number;
24
+ files: {
25
+ index: string;
26
+ projection_index: string;
27
+ entities_dir: string;
28
+ topics_dir: string;
29
+ timelines_dir: string;
30
+ };
31
+ }
32
+ export declare function writeGraphViewProjection(args: WriteGraphViewProjectionArgs): WriteGraphViewProjectionResult;
33
+ export declare function projectWikiKnowledge(args: ProjectWikiKnowledgeArgs): ProjectWikiKnowledgeResult;
34
+ export type { WriteGraphViewProjectionResult, ProjectWikiKnowledgeResult };
35
+ //# sourceMappingURL=wiki_projector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki_projector.d.ts","sourceRoot":"","sources":["../../../src/wiki/wiki_projector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,UAAU,4BAA4B;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,UAAU,8BAA8B;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,UAAU,wBAAwB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAqVD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,GAAG,8BAA8B,CAiD3G;AAioBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,0BAA0B,CAoS/F;AAED,YAAY,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,CAAC"}