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.
- package/dist/helpers/activity-feed.d.ts +27 -0
- package/dist/helpers/activity-feed.d.ts.map +1 -0
- package/dist/helpers/activity-feed.js +276 -0
- package/dist/helpers/activity-feed.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/palace/compress.d.ts +55 -0
- package/dist/palace/compress.d.ts.map +1 -0
- package/dist/palace/compress.js +210 -0
- package/dist/palace/compress.js.map +1 -0
- package/dist/palace/consolidate.d.ts.map +1 -1
- package/dist/palace/consolidate.js +12 -0
- package/dist/palace/consolidate.js.map +1 -1
- package/dist/palace/fan-out.d.ts.map +1 -1
- package/dist/palace/fan-out.js +1 -0
- package/dist/palace/fan-out.js.map +1 -1
- package/dist/palace/keystone.d.ts +49 -0
- package/dist/palace/keystone.d.ts.map +1 -0
- package/dist/palace/keystone.js +168 -0
- package/dist/palace/keystone.js.map +1 -0
- package/dist/palace/rooms.d.ts.map +1 -1
- package/dist/palace/rooms.js +12 -2
- package/dist/palace/rooms.js.map +1 -1
- package/dist/palace/salience.d.ts +16 -0
- package/dist/palace/salience.d.ts.map +1 -1
- package/dist/palace/salience.js +13 -2
- package/dist/palace/salience.js.map +1 -1
- package/dist/storage/corrections.d.ts.map +1 -1
- package/dist/storage/corrections.js +6 -2
- package/dist/storage/corrections.js.map +1 -1
- package/dist/storage/paths.d.ts.map +1 -1
- package/dist/storage/paths.js +7 -0
- package/dist/storage/paths.js.map +1 -1
- package/dist/tools-logic/dashboard-export.d.ts +49 -0
- package/dist/tools-logic/dashboard-export.d.ts.map +1 -1
- package/dist/tools-logic/dashboard-export.js +214 -15
- package/dist/tools-logic/dashboard-export.js.map +1 -1
- package/dist/tools-logic/journal-capture.d.ts.map +1 -1
- package/dist/tools-logic/journal-capture.js +3 -1
- package/dist/tools-logic/journal-capture.js.map +1 -1
- package/dist/tools-logic/journal-write.d.ts.map +1 -1
- package/dist/tools-logic/journal-write.js +4 -1
- package/dist/tools-logic/journal-write.js.map +1 -1
- package/dist/tools-logic/palace-write.d.ts.map +1 -1
- package/dist/tools-logic/palace-write.js +13 -6
- package/dist/tools-logic/palace-write.js.map +1 -1
- package/dist/tools-logic/session-end.d.ts.map +1 -1
- package/dist/tools-logic/session-end.js +8 -1
- package/dist/tools-logic/session-end.js.map +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- 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;
|
|
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":"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;
|
|
1
|
+
{"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/palace/consolidate.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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"}
|
package/dist/palace/fan-out.js
CHANGED
|
@@ -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":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,MAAM,cAAc,GAAG,CAAC,CAAC;AAOzB,MAAM,UAAU,MAAM,CACpB,OAAe,EACf,UAAkB,EAClB,WAAmB,EACnB,OAAe,EACf,sBAAgC,EAAE,EAClC,aAAyB,QAAQ;IAEjC,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAiB,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAE/D,6DAA6D;IAC7D,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,WAAW,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAE7E,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,iDAAiD;QACjD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,UAAU,KAAK,UAAU;YAAE,SAAS,CAAC,uBAAuB;QAEhE,gDAAgD;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,gBAAgB,CAAC,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YACzE,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;gBAC9B,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBACjD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,OAAO,CAAC,EAAE,EAAE,GAAG,UAAU,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,wCAAwC;QACxC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE;gBAClC,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;aACrD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,wFAAwF;IACxF,mFAAmF;IACnF,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,cAAc;gBAAE,MAAM;YACvE,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS,CAAC,8BAA8B;YAEvE,8EAA8E;YAC9E,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAE7E,0EAA0E;YAC1E,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;yBACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,YAAY,CAAC;yBACzE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACf,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACtB,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBACnF,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;wBAC/C,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAE9B,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3C,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAC5D,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,EAAE,EAAE,GAAG,UAAU,IAAI,WAAW,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;gBAC5E,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClB,aAAa,EAAE,CAAC;gBAEhB,mCAAmC;gBACnC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/D,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;wBACjC,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;qBACrD,CAAC,CAAC;oBACH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACpD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACjD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,UAAU,KAAK,UAAU;gBAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE;YAClC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,eAAe,CAAC;YAClC,UAAU;YACV,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,eAAe,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"fan-out.js","sourceRoot":"","sources":["../../src/palace/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,MAAM,cAAc,GAAG,CAAC,CAAC;AAOzB,MAAM,UAAU,MAAM,CACpB,OAAe,EACf,UAAkB,EAClB,WAAmB,EACnB,OAAe,EACf,sBAAgC,EAAE,EAClC,aAAyB,QAAQ;IAEjC,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAiB,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAE/D,6DAA6D;IAC7D,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,WAAW,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAE7E,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,iDAAiD;QACjD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,UAAU,KAAK,UAAU;YAAE,SAAS,CAAC,uBAAuB;QAEhE,gDAAgD;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,gBAAgB,CAAC,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YACzE,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;gBAC9B,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBACjD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,OAAO,CAAC,EAAE,EAAE,GAAG,UAAU,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,wCAAwC;QACxC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE;gBAClC,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;aACrD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,wFAAwF;IACxF,mFAAmF;IACnF,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,cAAc;gBAAE,MAAM;YACvE,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS,CAAC,8BAA8B;YAEvE,8EAA8E;YAC9E,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAE7E,0EAA0E;YAC1E,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;yBACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,YAAY,CAAC;yBACzE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACf,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACtB,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBACnF,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;wBAC/C,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAE9B,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3C,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAC5D,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,EAAE,EAAE,GAAG,UAAU,IAAI,WAAW,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;gBAC5E,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClB,aAAa,EAAE,CAAC;gBAEhB,mCAAmC;gBACnC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/D,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;wBACjC,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;qBACrD,CAAC,CAAC;oBACH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACpD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACjD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,UAAU,KAAK,UAAU;gBAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE;YAClC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,eAAe,CAAC;YAClC,UAAU;YACV,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,eAAe,EAAE,SAAS;YAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QAEH,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -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,
|
|
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"}
|
package/dist/palace/rooms.js
CHANGED
|
@@ -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,
|