agent-recall-core 3.4.23 → 3.4.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/helpers/activity-feed.d.ts +27 -0
  2. package/dist/helpers/activity-feed.d.ts.map +1 -0
  3. package/dist/helpers/activity-feed.js +276 -0
  4. package/dist/helpers/activity-feed.js.map +1 -0
  5. package/dist/index.d.ts +6 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +7 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/palace/compress.d.ts +55 -0
  10. package/dist/palace/compress.d.ts.map +1 -0
  11. package/dist/palace/compress.js +210 -0
  12. package/dist/palace/compress.js.map +1 -0
  13. package/dist/palace/consolidate.d.ts.map +1 -1
  14. package/dist/palace/consolidate.js +12 -0
  15. package/dist/palace/consolidate.js.map +1 -1
  16. package/dist/palace/fan-out.d.ts.map +1 -1
  17. package/dist/palace/fan-out.js +1 -0
  18. package/dist/palace/fan-out.js.map +1 -1
  19. package/dist/palace/keystone.d.ts +49 -0
  20. package/dist/palace/keystone.d.ts.map +1 -0
  21. package/dist/palace/keystone.js +168 -0
  22. package/dist/palace/keystone.js.map +1 -0
  23. package/dist/palace/rooms.d.ts.map +1 -1
  24. package/dist/palace/rooms.js +12 -2
  25. package/dist/palace/rooms.js.map +1 -1
  26. package/dist/palace/salience.d.ts +16 -0
  27. package/dist/palace/salience.d.ts.map +1 -1
  28. package/dist/palace/salience.js +13 -2
  29. package/dist/palace/salience.js.map +1 -1
  30. package/dist/storage/corrections.d.ts.map +1 -1
  31. package/dist/storage/corrections.js +6 -2
  32. package/dist/storage/corrections.js.map +1 -1
  33. package/dist/storage/paths.d.ts.map +1 -1
  34. package/dist/storage/paths.js +7 -0
  35. package/dist/storage/paths.js.map +1 -1
  36. package/dist/tools-logic/dashboard-export.d.ts +49 -0
  37. package/dist/tools-logic/dashboard-export.d.ts.map +1 -1
  38. package/dist/tools-logic/dashboard-export.js +214 -15
  39. package/dist/tools-logic/dashboard-export.js.map +1 -1
  40. package/dist/tools-logic/journal-capture.d.ts.map +1 -1
  41. package/dist/tools-logic/journal-capture.js +3 -1
  42. package/dist/tools-logic/journal-capture.js.map +1 -1
  43. package/dist/tools-logic/journal-write.d.ts.map +1 -1
  44. package/dist/tools-logic/journal-write.js +4 -1
  45. package/dist/tools-logic/journal-write.js.map +1 -1
  46. package/dist/tools-logic/palace-write.d.ts.map +1 -1
  47. package/dist/tools-logic/palace-write.js +13 -6
  48. package/dist/tools-logic/palace-write.js.map +1 -1
  49. package/dist/tools-logic/session-end.d.ts.map +1 -1
  50. package/dist/tools-logic/session-end.js +8 -1
  51. package/dist/tools-logic/session-end.js.map +1 -1
  52. package/dist/types.d.ts +8 -1
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Memory compression — collapses near-duplicate palace entries.
3
+ *
4
+ * Designed to run in the background (dream cycle) or on-demand, never in
5
+ * the live write path. The mechanism is rate-distortion with an empirical
6
+ * recall gate: maximize compression subject to a fidelity constraint.
7
+ *
8
+ * Algorithm:
9
+ * 1. Scan a room's topic files for `### DATE` entry blocks
10
+ * 2. Compute pairwise keyword overlap between entries
11
+ * 3. Cluster entries with overlap ratio > CLUSTER_THRESHOLD (0.6)
12
+ * 4. For each cluster: build a canonical entry preserving the union of
13
+ * source backlinks and the most recent content
14
+ * 5. Archive originals (never destroy) and replace with the canonical
15
+ *
16
+ * Invariants (from §6 of the improvement plan):
17
+ * - No raw memory is ever destroyed (copy → archive before any unlink)
18
+ * - Every derived memory traces to ≥1 resolvable source
19
+ * - FSRS never auto-deletes (archive_candidate is the floor)
20
+ */
21
+ import * as fs from "node:fs";
22
+ import * as path from "node:path";
23
+ import { palaceDir } from "../storage/paths.js";
24
+ import { ensureDir, todayISO } from "../storage/fs-utils.js";
25
+ import { extractKeywords } from "../helpers/auto-name.js";
26
+ const CLUSTER_THRESHOLD = 0.6; // keyword overlap ratio to consider near-duplicate
27
+ /**
28
+ * Parse `### DATE` blocks from a palace topic file.
29
+ */
30
+ function parseEntries(content) {
31
+ const blocks = content.split(/(?=^### \d{4}-\d{2}-\d{2})/m);
32
+ const entries = [];
33
+ for (const block of blocks) {
34
+ const match = block.match(/^### (\d{4}-\d{2}-\d{2})\s*(.*)/);
35
+ if (!match)
36
+ continue;
37
+ const date = match[1];
38
+ const rest = match[2];
39
+ // Extract source backlink [[journal/...]]
40
+ const linkMatch = rest.match(/\[\[journal\/[^\]]+\]\]/);
41
+ const sourceRef = linkMatch ? linkMatch[0] : `[[journal/${date}]]`;
42
+ entries.push({ date, content: block.trim(), sourceRef });
43
+ }
44
+ return entries;
45
+ }
46
+ /**
47
+ * Compute keyword overlap ratio between two entries.
48
+ */
49
+ function overlapRatio(a, b) {
50
+ const kwA = extractKeywords(a.content, 8);
51
+ const kwB = extractKeywords(b.content, 8);
52
+ if (kwA.length === 0 || kwB.length === 0)
53
+ return 0;
54
+ const overlap = kwA.filter(k => kwB.some(bk => bk.includes(k) || k.includes(bk))).length;
55
+ return overlap / Math.max(kwA.length, kwB.length);
56
+ }
57
+ /**
58
+ * Find clusters of near-duplicate entries.
59
+ */
60
+ function findClusters(entries) {
61
+ const used = new Set();
62
+ const clusters = [];
63
+ for (let i = 0; i < entries.length; i++) {
64
+ if (used.has(i))
65
+ continue;
66
+ const cluster = [entries[i]];
67
+ let maxOverlap = 0;
68
+ for (let j = i + 1; j < entries.length; j++) {
69
+ if (used.has(j))
70
+ continue;
71
+ const ratio = overlapRatio(entries[i], entries[j]);
72
+ if (ratio >= CLUSTER_THRESHOLD) {
73
+ cluster.push(entries[j]);
74
+ used.add(j);
75
+ maxOverlap = Math.max(maxOverlap, ratio);
76
+ }
77
+ }
78
+ if (cluster.length > 1) {
79
+ used.add(i);
80
+ clusters.push({ entries: cluster, overlapRatio: maxOverlap });
81
+ }
82
+ }
83
+ return clusters;
84
+ }
85
+ /**
86
+ * Build a canonical entry from a cluster.
87
+ * Uses the most recent entry's content, preserves all source backlinks.
88
+ */
89
+ function buildCanonical(cluster) {
90
+ // Sort by date DESC — most recent first
91
+ const sorted = [...cluster.entries].sort((a, b) => b.date.localeCompare(a.date));
92
+ const newest = sorted[0];
93
+ const allSourceRefs = [...new Set(cluster.entries.map(e => e.sourceRef))];
94
+ const allDates = [...new Set(cluster.entries.map(e => e.date))].sort();
95
+ // Build canonical: most recent content + union of backlinks
96
+ const sourceLinks = allSourceRefs.join(" ");
97
+ const dateRange = allDates.length > 1
98
+ ? `${allDates[0]}..${allDates[allDates.length - 1]}`
99
+ : allDates[0];
100
+ // Strip the old date header from the newest entry's content
101
+ const bodyLines = newest.content.split("\n").slice(1); // skip "### DATE ..."
102
+ const body = bodyLines.join("\n").trim();
103
+ return `### ${newest.date} ${sourceLinks} (consolidated ${dateRange}, ${cluster.entries.length} entries)\n\n${body}\n`;
104
+ }
105
+ /**
106
+ * Compress near-duplicate entries in a palace room topic file.
107
+ *
108
+ * @param dryRun - If true, reports what would change without modifying files
109
+ */
110
+ export function compressTopic(project, room, topic, dryRun = true) {
111
+ const pd = palaceDir(project);
112
+ const topicPath = path.join(pd, "rooms", room, `${topic}.md`);
113
+ const result = {
114
+ project, room, topic,
115
+ entriesBefore: 0, entriesAfter: 0,
116
+ clustersFound: 0, clustersMerged: 0,
117
+ archivedEntries: 0, dryRun,
118
+ };
119
+ if (!fs.existsSync(topicPath))
120
+ return result;
121
+ const content = fs.readFileSync(topicPath, "utf-8");
122
+ const entries = parseEntries(content);
123
+ result.entriesBefore = entries.length;
124
+ if (entries.length < 2) {
125
+ result.entriesAfter = entries.length;
126
+ return result;
127
+ }
128
+ const clusters = findClusters(entries);
129
+ result.clustersFound = clusters.length;
130
+ if (clusters.length === 0) {
131
+ result.entriesAfter = entries.length;
132
+ return result;
133
+ }
134
+ if (dryRun) {
135
+ let merged = 0;
136
+ for (const c of clusters)
137
+ merged += c.entries.length - 1;
138
+ result.entriesAfter = entries.length - merged;
139
+ result.clustersMerged = clusters.length;
140
+ result.archivedEntries = merged;
141
+ return result;
142
+ }
143
+ // Build the set of entries that belong to clusters
144
+ const clusteredDates = new Set();
145
+ for (const c of clusters) {
146
+ for (const e of c.entries)
147
+ clusteredDates.add(e.date + e.content.slice(0, 50));
148
+ }
149
+ // Archive originals before modifying (invariant §6.1)
150
+ const archiveDir = path.join(pd, "rooms", room, "_archive");
151
+ ensureDir(archiveDir);
152
+ const archivePath = path.join(archiveDir, `${topic}-${todayISO()}.md`);
153
+ fs.copyFileSync(topicPath, archivePath);
154
+ // Extract the header (everything before the first ### DATE block)
155
+ const headerMatch = content.match(/^([\s\S]*?)(?=^### \d{4}-\d{2}-\d{2})/m);
156
+ const header = headerMatch ? headerMatch[1] : "";
157
+ // Build new content: header + non-clustered entries + canonical entries
158
+ const nonClustered = entries.filter(e => !clusteredDates.has(e.date + e.content.slice(0, 50)));
159
+ const canonicals = clusters.map(c => buildCanonical(c));
160
+ const newContent = [
161
+ header.trim(),
162
+ "",
163
+ ...nonClustered.map(e => e.content),
164
+ ...canonicals,
165
+ ].join("\n").trim() + "\n";
166
+ fs.writeFileSync(topicPath, newContent, "utf-8");
167
+ result.clustersMerged = clusters.length;
168
+ result.archivedEntries = entries.length - nonClustered.length - clusters.length;
169
+ result.entriesAfter = nonClustered.length + clusters.length;
170
+ return result;
171
+ }
172
+ /**
173
+ * Compress all topic files in a room.
174
+ */
175
+ export function compressRoom(project, room, dryRun = true) {
176
+ const pd = palaceDir(project);
177
+ const roomPath = path.join(pd, "rooms", room);
178
+ if (!fs.existsSync(roomPath))
179
+ return [];
180
+ const results = [];
181
+ for (const file of fs.readdirSync(roomPath)) {
182
+ if (!file.endsWith(".md"))
183
+ continue;
184
+ if (file === "README.md")
185
+ continue; // skip room description
186
+ const topic = file.replace(/\.md$/, "");
187
+ const r = compressTopic(project, room, topic, dryRun);
188
+ if (r.clustersFound > 0)
189
+ results.push(r);
190
+ }
191
+ return results;
192
+ }
193
+ /**
194
+ * Compress all rooms in a project's palace. Designed as a dream-cycle stage.
195
+ */
196
+ export function compressProject(project, dryRun = true) {
197
+ const pd = palaceDir(project);
198
+ const roomsDir = path.join(pd, "rooms");
199
+ if (!fs.existsSync(roomsDir))
200
+ return [];
201
+ const results = [];
202
+ for (const room of fs.readdirSync(roomsDir)) {
203
+ const roomPath = path.join(roomsDir, room);
204
+ if (!fs.statSync(roomPath).isDirectory())
205
+ continue;
206
+ results.push(...compressRoom(project, room, dryRun));
207
+ }
208
+ return results;
209
+ }
210
+ //# sourceMappingURL=compress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../src/palace/compress.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../src/palace/consolidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAU,GACrB,mBAAmB,CAuHrB"}
1
+ {"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../src/palace/consolidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAeH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAU,GACrB,mBAAmB,CAkIrB"}
@@ -20,6 +20,7 @@ import { fanOut } from "./fan-out.js";
20
20
  import { generateFrontmatter } from "./obsidian.js";
21
21
  import { updatePalaceIndex } from "./index-manager.js";
22
22
  import { appendToLog } from "./log.js";
23
+ import { markKeystones } from "./keystone.js";
23
24
  /**
24
25
  * Returns true if the brief contains 3 or more phase markers,
25
26
  * indicating a multi-phase technical session.
@@ -141,11 +142,22 @@ export function consolidateJournalToPalace(project, entryCount = 5) {
141
142
  result.roomsUpdated = Array.from(updatedRooms);
142
143
  // Update palace index
143
144
  updatePalaceIndex(project);
145
+ // Stamp keystone flag on rooms referenced by pipeline milestones.
146
+ // Runs here (consolidation) not on every write — milestone scan is O(rooms×milestones).
147
+ // Best-effort: failure does not break consolidation.
148
+ let keystonesMarked = 0;
149
+ try {
150
+ keystonesMarked = markKeystones(project);
151
+ }
152
+ catch {
153
+ // Keystone marking is best-effort — never breaks consolidation
154
+ }
144
155
  // Log the operation
145
156
  appendToLog(project, "consolidate", {
146
157
  entries_processed: result.entriesProcessed,
147
158
  rooms_updated: result.roomsUpdated,
148
159
  memories_created: result.memoriesCreated,
160
+ keystones_marked: keystonesMarked,
149
161
  });
150
162
  return result;
151
163
  }
@@ -1 +1 @@
1
- {"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/palace/consolidate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/palace/consolidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAc,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAQ9C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACnG,OAAO,UAAU,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;SAC/E,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;QACpC,CAAC,CAAC,gBAAgB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB;QAC/D,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,aAAqB,CAAC;IAEtB,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IAExB,MAAM,MAAM,GAAwB;QAClC,gBAAgB,EAAE,CAAC;QACnB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,CAAC;KACnB,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,aAAa,KAAK,CAAC,IAAI,IAAI,CAAC;QAE9C,sCAAsC;QACtC,MAAM,MAAM,GAA4D;YACtE,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE;YAClE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;YAC3D,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;YACnD,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE;SACtE,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9D,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAElE,qBAAqB;YACrB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1F,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;YAC1E,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YAEnC,uCAAuC;YACvC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAClC,CAAC,CAAC,mBAAmB,CAAC;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACjC,MAAM,EAAE,eAAe;oBACvB,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBACtB,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;YAEP,MAAM,WAAW,GAAG,SAAS,KAAK,CAAC,IAAI,IAAI,SAAS,OAAO,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;YAE7G,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,oEAAoE;gBACpE,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACrD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;oBAAE,SAAS;gBACrD,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBACnD,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,aAAa,CACd,SAAS,EACT,GAAG,EAAE,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,EACvD,OAAO,CACR,CAAC;gBACF,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,CAAC,eAAe,EAAE,CAAC;YAEzB,gCAAgC;YAChC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzE,CAAC;QAED,kCAAkC;QAClC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;YAChE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAEjC,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC;gBAC5C,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC;gBAC7B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,SAAS,KAAK,CAAC,IAAI,IAAI,SAAS,OAAO,cAAc,IAAI,CAAC;YAE3E,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC5C,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC9C,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC5B,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;gBAClI,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,wBAAwB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC5E,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5B,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE/C,sBAAsB;IACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE3B,kEAAkE;IAClE,wFAAwF;IACxF,qDAAqD;IACrD,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC;QACH,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,+DAA+D;IACjE,CAAC;IAED,oBAAoB;IACpB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE;QAClC,iBAAiB,EAAE,MAAM,CAAC,gBAAgB;QAC1C,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,gBAAgB,EAAE,MAAM,CAAC,eAAe;QACxC,gBAAgB,EAAE,eAAe;KAClC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../src/palace/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,mBAAmB,GAAE,MAAM,EAAO,EAClC,UAAU,GAAE,UAAqB,GAChC,YAAY,CAsHd"}
1
+ {"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../src/palace/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,mBAAmB,GAAE,MAAM,EAAO,EAClC,UAAU,GAAE,UAAqB,GAChC,YAAY,CAuHd"}
@@ -117,6 +117,7 @@ export function fanOut(project, sourceRoom, sourceTopic, content, explicitConnec
117
117
  lastUpdated: meta.updated,
118
118
  accessCount: meta.access_count,
119
119
  connectionCount: connCount,
120
+ keystone: meta.keystone,
120
121
  });
121
122
  updateRoomMeta(project, room, { salience: newSalience });
122
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fan-out.js","sourceRoot":"","sources":["../../src/palace/fan-out.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fan-out.js","sourceRoot":"","sources":["../../src/palace/fan-out.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Keystone detection — identifies memories that occupy load-bearing
3
+ * structural positions in the project's pipeline narrative.
4
+ *
5
+ * A memory is "keystone" if it is referenced from a pipeline milestone's
6
+ * "How solved" or "Synthesis" section. These sections encode how a phase's
7
+ * hard problem was actually resolved — the facts they cite are, by
8
+ * definition, the most valuable memories in the project.
9
+ *
10
+ * The keystone signal is:
11
+ * - Fully inferable by the agent at consolidation time (no human action)
12
+ * - Independent of access count and edge count (no rich-get-richer bias)
13
+ * - Structural, not frequency-based (a decision cited once in a milestone
14
+ * outranks trivia touched 20 times)
15
+ */
16
+ export interface KeystoneMatch {
17
+ /** The palace room slug */
18
+ room: string;
19
+ /** The topic file (without .md) */
20
+ topic: string;
21
+ /** Which milestone phase cited it */
22
+ cited_by_phase: string;
23
+ /** Which section: "how_solved" or "synthesis" */
24
+ cited_in: "how_solved" | "synthesis";
25
+ }
26
+ /**
27
+ * Scan pipeline milestones for references to palace rooms/topics.
28
+ * Returns a list of (room, topic) pairs that are structurally load-bearing.
29
+ *
30
+ * Detection heuristics (keyword-based, no LLM):
31
+ * 1. Explicit room/topic references: "architecture/decisions", "knowledge/auth"
32
+ * 2. Room name mentions: "architecture", "design", "goals"
33
+ * 3. Related_insights in milestone frontmatter that match palace content
34
+ */
35
+ export declare function scanKeystoneMemories(project: string): KeystoneMatch[];
36
+ /**
37
+ * Check if a specific room/topic pair is a keystone memory.
38
+ * Convenience wrapper around scanKeystoneMemories.
39
+ */
40
+ export declare function isKeystone(project: string, room: string, topic: string): boolean;
41
+ /**
42
+ * Stamp keystone flag on room meta and recompute salience.
43
+ * Designed to run during consolidation (session_end) — NOT in the
44
+ * live write path (too expensive to scan milestones on every write).
45
+ *
46
+ * Returns the number of rooms marked as keystone.
47
+ */
48
+ export declare function markKeystones(project: string): number;
49
+ //# sourceMappingURL=keystone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone.d.ts","sourceRoot":"","sources":["../../src/palace/keystone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,QAAQ,EAAE,YAAY,GAAG,WAAW,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAkGrE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGhF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA4BrD"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Keystone detection — identifies memories that occupy load-bearing
3
+ * structural positions in the project's pipeline narrative.
4
+ *
5
+ * A memory is "keystone" if it is referenced from a pipeline milestone's
6
+ * "How solved" or "Synthesis" section. These sections encode how a phase's
7
+ * hard problem was actually resolved — the facts they cite are, by
8
+ * definition, the most valuable memories in the project.
9
+ *
10
+ * The keystone signal is:
11
+ * - Fully inferable by the agent at consolidation time (no human action)
12
+ * - Independent of access count and edge count (no rich-get-richer bias)
13
+ * - Structural, not frequency-based (a decision cited once in a milestone
14
+ * outranks trivia touched 20 times)
15
+ */
16
+ import { listMilestones } from "./pipeline.js";
17
+ import { palaceDir } from "../storage/paths.js";
18
+ import { getRoomMeta, updateRoomMeta } from "./rooms.js";
19
+ import { computeSalience } from "./salience.js";
20
+ import { getConnectionCount } from "./graph.js";
21
+ import * as fs from "node:fs";
22
+ import * as path from "node:path";
23
+ /**
24
+ * Scan pipeline milestones for references to palace rooms/topics.
25
+ * Returns a list of (room, topic) pairs that are structurally load-bearing.
26
+ *
27
+ * Detection heuristics (keyword-based, no LLM):
28
+ * 1. Explicit room/topic references: "architecture/decisions", "knowledge/auth"
29
+ * 2. Room name mentions: "architecture", "design", "goals"
30
+ * 3. Related_insights in milestone frontmatter that match palace content
31
+ */
32
+ export function scanKeystoneMemories(project) {
33
+ const milestones = listMilestones(project);
34
+ if (milestones.length === 0)
35
+ return [];
36
+ // Build a set of existing room/topic pairs from the palace
37
+ const pd = palaceDir(project);
38
+ const roomsDir = path.join(pd, "rooms");
39
+ const existingTopics = new Map(); // room → topic[]
40
+ if (fs.existsSync(roomsDir)) {
41
+ try {
42
+ for (const room of fs.readdirSync(roomsDir)) {
43
+ const roomPath = path.join(roomsDir, room);
44
+ if (!fs.statSync(roomPath).isDirectory())
45
+ continue;
46
+ const topics = [];
47
+ for (const f of fs.readdirSync(roomPath)) {
48
+ if (f.endsWith(".md") && f !== "_room.json") {
49
+ topics.push(f.replace(/\.md$/, ""));
50
+ }
51
+ }
52
+ if (topics.length > 0)
53
+ existingTopics.set(room, topics);
54
+ }
55
+ }
56
+ catch {
57
+ // Palace not readable — return empty
58
+ return [];
59
+ }
60
+ }
61
+ if (existingTopics.size === 0)
62
+ return [];
63
+ const matches = [];
64
+ const seen = new Set(); // dedup by "room/topic"
65
+ for (const milestone of milestones) {
66
+ // Only scan closed milestones (they have real how_solved/synthesis content)
67
+ // and active milestones with non-placeholder content
68
+ const sections = [];
69
+ if (milestone.sections.how_solved && milestone.sections.how_solved !== "(in progress)") {
70
+ sections.push({ text: milestone.sections.how_solved, field: "how_solved" });
71
+ }
72
+ if (milestone.sections.synthesis && milestone.sections.synthesis !== "(in progress)") {
73
+ sections.push({ text: milestone.sections.synthesis, field: "synthesis" });
74
+ }
75
+ for (const { text, field } of sections) {
76
+ const lower = text.toLowerCase();
77
+ for (const [room, topics] of existingTopics) {
78
+ // Check for explicit room/topic references like "architecture/decisions"
79
+ for (const topic of topics) {
80
+ const key = `${room}/${topic}`;
81
+ if (seen.has(key))
82
+ continue;
83
+ const patterns = [
84
+ key.toLowerCase(), // "architecture/decisions"
85
+ `${room} ${topic}`.toLowerCase(), // "architecture decisions"
86
+ `${room}/${topic}`.toLowerCase(), // slash form
87
+ ];
88
+ for (const pat of patterns) {
89
+ if (lower.includes(pat)) {
90
+ matches.push({ room, topic, cited_by_phase: milestone.meta.phase, cited_in: field });
91
+ seen.add(key);
92
+ break;
93
+ }
94
+ }
95
+ }
96
+ // Check for room-level mentions (the room itself is keystone)
97
+ // Only if room has a README.md or the room name appears prominently
98
+ if (!seen.has(`${room}/README`) && lower.includes(room.toLowerCase())) {
99
+ // Room-level keystone — mark the README topic
100
+ if (existingTopics.get(room)?.includes("README")) {
101
+ matches.push({ room, topic: "README", cited_by_phase: milestone.meta.phase, cited_in: field });
102
+ seen.add(`${room}/README`);
103
+ }
104
+ }
105
+ }
106
+ }
107
+ // Also check related_insights from frontmatter
108
+ const related = milestone.meta.related_insights ?? [];
109
+ for (const insight of related) {
110
+ const lower = insight.toLowerCase();
111
+ for (const [room, topics] of existingTopics) {
112
+ for (const topic of topics) {
113
+ const key = `${room}/${topic}`;
114
+ if (seen.has(key))
115
+ continue;
116
+ if (lower.includes(room.toLowerCase()) && lower.includes(topic.toLowerCase())) {
117
+ matches.push({ room, topic, cited_by_phase: milestone.meta.phase, cited_in: "synthesis" });
118
+ seen.add(key);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+ return matches;
125
+ }
126
+ /**
127
+ * Check if a specific room/topic pair is a keystone memory.
128
+ * Convenience wrapper around scanKeystoneMemories.
129
+ */
130
+ export function isKeystone(project, room, topic) {
131
+ const keystones = scanKeystoneMemories(project);
132
+ return keystones.some(k => k.room === room && k.topic === topic);
133
+ }
134
+ /**
135
+ * Stamp keystone flag on room meta and recompute salience.
136
+ * Designed to run during consolidation (session_end) — NOT in the
137
+ * live write path (too expensive to scan milestones on every write).
138
+ *
139
+ * Returns the number of rooms marked as keystone.
140
+ */
141
+ export function markKeystones(project) {
142
+ const keystones = scanKeystoneMemories(project);
143
+ if (keystones.length === 0)
144
+ return 0;
145
+ // Collect unique rooms that have at least one keystone topic
146
+ const keystoneRooms = new Set(keystones.map(k => k.room));
147
+ let marked = 0;
148
+ for (const room of keystoneRooms) {
149
+ const meta = getRoomMeta(project, room);
150
+ if (!meta)
151
+ continue;
152
+ if (meta.keystone)
153
+ continue; // already marked
154
+ const pd = palaceDir(project);
155
+ const connCount = getConnectionCount(pd, room);
156
+ const newSalience = computeSalience({
157
+ importance: meta.slug === "architecture" || meta.slug === "decision" ? "high" : "medium",
158
+ lastUpdated: meta.updated,
159
+ accessCount: meta.access_count,
160
+ connectionCount: connCount,
161
+ keystone: true,
162
+ });
163
+ updateRoomMeta(project, room, { keystone: true, salience: newSalience });
164
+ marked++;
165
+ }
166
+ return marked;
167
+ }
168
+ //# sourceMappingURL=keystone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystone.js","sourceRoot":"","sources":["../../src/palace/keystone.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rooms.d.ts","sourceRoot":"","sources":["../../src/palace/rooms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAexD,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,MAAM,EAAO,EACnB,WAAW,GAAE,MAAM,EAAO,GACzB,QAAQ,CA6BV;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAG9E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,CAW7G;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAiCrD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrE;AAED,mEAAmE;AACnE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAuD7D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,UAAqB,GAAG,IAAI,CAmBvG;AAED,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,SAAI,GAAG,OAAO,CAItE"}
1
+ {"version":3,"file":"rooms.d.ts","sourceRoot":"","sources":["../../src/palace/rooms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAexD,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,MAAM,EAAO,EACnB,WAAW,GAAE,MAAM,EAAO,GACzB,QAAQ,CAwCV;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAG9E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,CAW7G;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAiCrD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrE;AAED,mEAAmE;AACnE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAuD7D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,UAAqB,GAAG,IAAI,CAoBvG;AAED,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,SAAI,GAAG,OAAO,CAItE"}
@@ -17,13 +17,22 @@ function roomMetaPath(projectPalaceDir, roomSlug) {
17
17
  }
18
18
  export function createRoom(project, slug, name, description, tags = [], connections = []) {
19
19
  const pd = palaceDir(project);
20
+ // Reject empty/whitespace slugs at the source. An empty slug used to slip through
21
+ // (sanitizeSlug("") => "unnamed") creating a blank room whose meta.slug stayed ""
22
+ // — desynced from its on-disk dir and crashing slug-keyed consumers (e.g. the
23
+ // Cytoscape palace graph). Guard here so all callers are covered.
24
+ if (!slug || !slug.trim()) {
25
+ throw new Error(`createRoom: room slug is empty. Provide a non-empty room slug (e.g. 'goals', 'architecture'). agent_instruction: retry with a concrete room name.`);
26
+ }
20
27
  const safeSlug = sanitizeSlug(slug);
21
28
  const roomPath = path.join(pd, "rooms", safeSlug);
22
29
  ensureDir(roomPath);
30
+ // Persist the SANITIZED slug so meta.slug always matches the on-disk directory.
31
+ const safeName = name && name.trim() ? name : safeSlug;
23
32
  const now = new Date().toISOString();
24
33
  const meta = {
25
- slug,
26
- name,
34
+ slug: safeSlug,
35
+ name: safeName,
27
36
  description,
28
37
  created: now,
29
38
  updated: now,
@@ -201,6 +210,7 @@ export function recordAccess(project, roomSlug, importance = "medium") {
201
210
  lastUpdated: meta.updated,
202
211
  accessCount: meta.access_count + 1,
203
212
  connectionCount: connCount,
213
+ keystone: meta.keystone,
204
214
  });
205
215
  updateRoomMeta(project, roomSlug, {
206
216
  access_count: meta.access_count + 1,