agent-recall-core 3.4.24 → 3.4.27
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/journal-files.d.ts +1 -1
- package/dist/helpers/journal-files.d.ts.map +1 -1
- package/dist/helpers/journal-files.js +4 -3
- package/dist/helpers/journal-files.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- 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 +235 -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 +14 -1
- 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/paths.d.ts +6 -1
- package/dist/storage/paths.d.ts.map +1 -1
- package/dist/storage/paths.js +14 -1
- package/dist/storage/paths.js.map +1 -1
- package/dist/storage/project.d.ts +17 -0
- package/dist/storage/project.d.ts.map +1 -1
- package/dist/storage/project.js +73 -1
- package/dist/storage/project.js.map +1 -1
- package/dist/tools-logic/context-synthesize.d.ts.map +1 -1
- package/dist/tools-logic/context-synthesize.js +2 -1
- package/dist/tools-logic/context-synthesize.js.map +1 -1
- package/dist/tools-logic/dashboard-export.d.ts.map +1 -1
- package/dist/tools-logic/dashboard-export.js +13 -1
- 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 +6 -1
- package/dist/tools-logic/journal-capture.js.map +1 -1
- package/dist/tools-logic/journal-read.js +1 -1
- package/dist/tools-logic/journal-read.js.map +1 -1
- package/dist/tools-logic/journal-search.d.ts.map +1 -1
- package/dist/tools-logic/journal-search.js +2 -1
- package/dist/tools-logic/journal-search.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
|
@@ -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,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,
|
|
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,CAsCrD;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
|
@@ -113,7 +113,19 @@ export function listRooms(project) {
|
|
|
113
113
|
const rooms = [];
|
|
114
114
|
const entries = fs.readdirSync(roomsDir);
|
|
115
115
|
for (const entry of entries) {
|
|
116
|
-
const
|
|
116
|
+
const roomPath = path.join(roomsDir, entry);
|
|
117
|
+
// Skip non-directory entries (stray files leaked to rooms/ level)
|
|
118
|
+
try {
|
|
119
|
+
if (!fs.statSync(roomPath).isDirectory())
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
// Skip dirs without _room.json (not real rooms, e.g. remnant "unnamed/" dirs)
|
|
126
|
+
const metaPath = path.join(roomPath, "_room.json");
|
|
127
|
+
if (!fs.existsSync(metaPath))
|
|
128
|
+
continue;
|
|
117
129
|
const meta = readJsonSafe(metaPath);
|
|
118
130
|
if (meta)
|
|
119
131
|
rooms.push(meta);
|
|
@@ -210,6 +222,7 @@ export function recordAccess(project, roomSlug, importance = "medium") {
|
|
|
210
222
|
lastUpdated: meta.updated,
|
|
211
223
|
accessCount: meta.access_count + 1,
|
|
212
224
|
connectionCount: connCount,
|
|
225
|
+
keystone: meta.keystone,
|
|
213
226
|
});
|
|
214
227
|
updateRoomMeta(project, roomSlug, {
|
|
215
228
|
access_count: meta.access_count + 1,
|
package/dist/palace/rooms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rooms.js","sourceRoot":"","sources":["../../src/palace/rooms.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rooms.js","sourceRoot":"","sources":["../../src/palace/rooms.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,23 @@ export declare function computeSalience(params: {
|
|
|
37
37
|
urgency?: Urgency;
|
|
38
38
|
category?: MemoryCategory;
|
|
39
39
|
pin?: PinStatus;
|
|
40
|
+
/**
|
|
41
|
+
* Keystone memories occupy load-bearing structural positions — they are
|
|
42
|
+
* referenced from pipeline milestone "How solved" or "Synthesis" sections.
|
|
43
|
+
* When true, importance is forced to "high" and a salience floor of
|
|
44
|
+
* KEYSTONE_FLOOR is applied, independent of access or edge frequency.
|
|
45
|
+
* This prevents the rich-get-richer bias where rare but critical decisions
|
|
46
|
+
* sink below frequently-touched trivia.
|
|
47
|
+
*/
|
|
48
|
+
keystone?: boolean;
|
|
40
49
|
}): number;
|
|
50
|
+
/**
|
|
51
|
+
* Salience floor for keystone memories. Set above ARCHIVE_THRESHOLD (0.15)
|
|
52
|
+
* so keystones never become archive candidates. Below the midrange (0.5)
|
|
53
|
+
* so they don't artificially dominate — they earn top rank through
|
|
54
|
+
* structural importance, not inflated score.
|
|
55
|
+
*/
|
|
56
|
+
export declare const KEYSTONE_FLOOR = 0.3;
|
|
41
57
|
export declare const ARCHIVE_THRESHOLD = 0.15;
|
|
42
58
|
export declare const AUTO_ARCHIVE_THRESHOLD = 0.05;
|
|
43
59
|
export { CATEGORY_DECAY, URGENCY_WEIGHTS };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salience.d.ts","sourceRoot":"","sources":["../../src/palace/salience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQlF,QAAA,MAAM,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAK5C,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAQlD,CAAC;AAmBF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"salience.d.ts","sourceRoot":"","sources":["../../src/palace/salience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQlF,QAAA,MAAM,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAK5C,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAQlD,CAAC;AAmBF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,MAAM,CAiBT;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,MAAO,CAAC;AAEnC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/palace/salience.js
CHANGED
|
@@ -64,13 +64,24 @@ export function computeSalience(params) {
|
|
|
64
64
|
// Pinned items always return maximum salience
|
|
65
65
|
if (params.pin?.pinned)
|
|
66
66
|
return 1.0;
|
|
67
|
-
|
|
67
|
+
// Keystone: force high importance, ignore frequency-driven depression
|
|
68
|
+
const effectiveImportance = params.keystone ? "high" : params.importance;
|
|
69
|
+
const imp = IMPORTANCE_WEIGHTS[effectiveImportance] * 0.10;
|
|
68
70
|
const rec = recencyScore(params.lastUpdated, params.category) * 0.30;
|
|
69
71
|
const acc = accessScore(params.accessCount) * 0.25;
|
|
70
72
|
const con = connectionScore(params.connectionCount) * 0.20;
|
|
71
73
|
const urg = URGENCY_WEIGHTS[params.urgency ?? "none"] * 0.15;
|
|
72
|
-
|
|
74
|
+
const raw = Math.round((imp + rec + acc + con + urg) * 1000) / 1000;
|
|
75
|
+
// Keystone floor: never archive a keystone memory regardless of frequency
|
|
76
|
+
return params.keystone ? Math.max(raw, KEYSTONE_FLOOR) : raw;
|
|
73
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Salience floor for keystone memories. Set above ARCHIVE_THRESHOLD (0.15)
|
|
80
|
+
* so keystones never become archive candidates. Below the midrange (0.5)
|
|
81
|
+
* so they don't artificially dominate — they earn top rank through
|
|
82
|
+
* structural importance, not inflated score.
|
|
83
|
+
*/
|
|
84
|
+
export const KEYSTONE_FLOOR = 0.30;
|
|
74
85
|
export const ARCHIVE_THRESHOLD = 0.15;
|
|
75
86
|
export const AUTO_ARCHIVE_THRESHOLD = 0.05;
|
|
76
87
|
// Export category decay for testing/debugging
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salience.js","sourceRoot":"","sources":["../../src/palace/salience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,kBAAkB,GAA+B;IACrD,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;CACT,CAAC;AAEF,MAAM,eAAe,GAA4B;IAC/C,KAAK,EAAE,GAAG;IACV,WAAW,EAAE,GAAG;IAChB,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;CACV,CAAC;AAEF;;;;GAIG;AACH,MAAM,cAAc,GAAmC;IACrD,IAAI,EAAE,IAAI,EAAW,kCAAkC;IACvD,YAAY,EAAE,IAAI,EAAG,qCAAqC;IAC1D,QAAQ,EAAE,IAAI,EAAO,kCAAkC;IACvD,MAAM,EAAE,IAAI,EAAS,0BAA0B;IAC/C,WAAW,EAAE,IAAI,EAAI,sCAAsC;IAC3D,OAAO,EAAE,IAAI,EAAQ,oCAAoC;IACzD,OAAO,EAAE,IAAI,EAAQ,UAAU;CAChC,CAAC;AAEF,wCAAwC;AACxC,SAAS,YAAY,CAAC,WAAmB,EAAE,WAA2B,SAAS;IAC7E,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,yDAAyD;AACzD,SAAS,WAAW,CAAC,WAAmB;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,kDAAkD;AAClD,SAAS,eAAe,CAAC,SAAiB;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"salience.js","sourceRoot":"","sources":["../../src/palace/salience.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/paths.d.ts
CHANGED
|
@@ -20,8 +20,13 @@ export declare function sanitizeProject(project: string): string;
|
|
|
20
20
|
export declare function journalDir(project: string): string;
|
|
21
21
|
/**
|
|
22
22
|
* Find all journal directories for a project (new + legacy fallback).
|
|
23
|
+
*
|
|
24
|
+
* @param includeArchive — when true, includes journal/archive/ so recall
|
|
25
|
+
* and backlink resolution can reach rollup-archived entries (P0-2 fix).
|
|
26
|
+
* Defaults to false so counting paths (session_start, dashboard_export)
|
|
27
|
+
* don't inflate session counts with archived entries (v3.4.26 fix).
|
|
23
28
|
*/
|
|
24
|
-
export declare function journalDirs(project: string): string[];
|
|
29
|
+
export declare function journalDirs(project: string, includeArchive?: boolean): string[];
|
|
25
30
|
/**
|
|
26
31
|
* Resolve the palace directory for a project.
|
|
27
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOvD;AAaD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOvD;AAaD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,MAAM,EAAE,CAqC7E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
package/dist/storage/paths.js
CHANGED
|
@@ -47,12 +47,25 @@ export function journalDir(project) {
|
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
49
|
* Find all journal directories for a project (new + legacy fallback).
|
|
50
|
+
*
|
|
51
|
+
* @param includeArchive — when true, includes journal/archive/ so recall
|
|
52
|
+
* and backlink resolution can reach rollup-archived entries (P0-2 fix).
|
|
53
|
+
* Defaults to false so counting paths (session_start, dashboard_export)
|
|
54
|
+
* don't inflate session counts with archived entries (v3.4.26 fix).
|
|
50
55
|
*/
|
|
51
|
-
export function journalDirs(project) {
|
|
56
|
+
export function journalDirs(project, includeArchive = false) {
|
|
52
57
|
const dirs = [];
|
|
53
58
|
const primary = journalDir(project);
|
|
54
59
|
if (fs.existsSync(primary))
|
|
55
60
|
dirs.push(primary);
|
|
61
|
+
// Archive: journal/archive/ holds entries moved by journalRollup.
|
|
62
|
+
// Only included when caller explicitly requests it (recall, readJournalFile,
|
|
63
|
+
// journalSearch). Excluded by default so session counting doesn't inflate.
|
|
64
|
+
if (includeArchive) {
|
|
65
|
+
const archiveDir = path.join(primary, "archive");
|
|
66
|
+
if (fs.existsSync(archiveDir))
|
|
67
|
+
dirs.push(archiveDir);
|
|
68
|
+
}
|
|
56
69
|
// Legacy: ~/.claude/projects/*/memory/journal/
|
|
57
70
|
const legacyRoot = getLegacyRoot();
|
|
58
71
|
if (fs.existsSync(legacyRoot)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjB,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,QAAgB,EAAE,IAAY,EAAE,OAAe;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;IACrE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9D,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
* Project detection and listing.
|
|
3
3
|
*/
|
|
4
4
|
import type { ProjectInfo } from "../types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Validate whether a string is a legitimate project slug.
|
|
7
|
+
*
|
|
8
|
+
* Returns `false` for:
|
|
9
|
+
* - UUIDs (8-4-4-4-12 hex)
|
|
10
|
+
* - `.md` suffix
|
|
11
|
+
* - `_` prefix (internal / archive dirs)
|
|
12
|
+
* - Generic words on the deny-list
|
|
13
|
+
* - Path traversal artifacts (`..`, `/`, `\`)
|
|
14
|
+
* - Strings without any letter
|
|
15
|
+
*/
|
|
16
|
+
export declare function isValidProjectSlug(slug: string): boolean;
|
|
5
17
|
/**
|
|
6
18
|
* Auto-detect project slug from environment, git, or cwd.
|
|
7
19
|
* No caching — each call re-detects from the current environment.
|
|
@@ -16,6 +28,11 @@ export declare function detectProject(): Promise<string>;
|
|
|
16
28
|
* same directory route correctly without needing the explicit slug. This is
|
|
17
29
|
* the migration path for existing projects — the allowlist fills itself over
|
|
18
30
|
* normal use.
|
|
31
|
+
*
|
|
32
|
+
* Slug validation: if an explicit slug fails `isValidProjectSlug()` AND no
|
|
33
|
+
* project directory already exists for it, resolution throws — preventing
|
|
34
|
+
* garbage slugs from creating new directories. Existing (already-on-disk)
|
|
35
|
+
* invalid slugs still resolve so reads of legacy data don't break.
|
|
19
36
|
*/
|
|
20
37
|
export declare function resolveProject(project: string | undefined): Promise<string>;
|
|
21
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/storage/project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/storage/project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwB/C;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAyBxD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CA+ErD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCjF;AAaD;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,EAAE,CAuD/C"}
|
package/dist/storage/project.js
CHANGED
|
@@ -15,6 +15,52 @@ const BLOCKED_SLUGS = new Set([
|
|
|
15
15
|
"Downloads", "Projects", "default", "Documents", "Desktop",
|
|
16
16
|
"tmp", "node_modules", "dist", "src", ".aam", "phase-1",
|
|
17
17
|
]);
|
|
18
|
+
// ── Slug validation ──────────────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* Deny-list of generic words that are clearly not project names.
|
|
21
|
+
* Checked case-insensitively.
|
|
22
|
+
*/
|
|
23
|
+
const SLUG_DENY_LIST = new Set([
|
|
24
|
+
"build", "runtime", "palace", "mcp", "default",
|
|
25
|
+
"phase-1", "monitor", "test",
|
|
26
|
+
]);
|
|
27
|
+
/**
|
|
28
|
+
* Validate whether a string is a legitimate project slug.
|
|
29
|
+
*
|
|
30
|
+
* Returns `false` for:
|
|
31
|
+
* - UUIDs (8-4-4-4-12 hex)
|
|
32
|
+
* - `.md` suffix
|
|
33
|
+
* - `_` prefix (internal / archive dirs)
|
|
34
|
+
* - Generic words on the deny-list
|
|
35
|
+
* - Path traversal artifacts (`..`, `/`, `\`)
|
|
36
|
+
* - Strings without any letter
|
|
37
|
+
*/
|
|
38
|
+
export function isValidProjectSlug(slug) {
|
|
39
|
+
if (!slug)
|
|
40
|
+
return false;
|
|
41
|
+
// Reject UUIDs (8-4-4-4-12 hex pattern)
|
|
42
|
+
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(slug))
|
|
43
|
+
return false;
|
|
44
|
+
// Reject .md suffix
|
|
45
|
+
if (slug.endsWith(".md"))
|
|
46
|
+
return false;
|
|
47
|
+
// Reject _ prefix (internal/archive dirs)
|
|
48
|
+
if (slug.startsWith("_"))
|
|
49
|
+
return false;
|
|
50
|
+
// Reject . prefix (hidden dirs like .DS_Store, .aam)
|
|
51
|
+
if (slug.startsWith("."))
|
|
52
|
+
return false;
|
|
53
|
+
// Reject deny-listed generic words
|
|
54
|
+
if (SLUG_DENY_LIST.has(slug.toLowerCase()))
|
|
55
|
+
return false;
|
|
56
|
+
// Reject path traversal artifacts
|
|
57
|
+
if (slug.includes("..") || slug.includes("/") || slug.includes("\\"))
|
|
58
|
+
return false;
|
|
59
|
+
// Must contain at least one letter
|
|
60
|
+
if (!/[a-zA-Z]/.test(slug))
|
|
61
|
+
return false;
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
18
64
|
/**
|
|
19
65
|
* Auto-detect project slug from environment, git, or cwd.
|
|
20
66
|
* No caching — each call re-detects from the current environment.
|
|
@@ -110,10 +156,36 @@ export async function detectProject() {
|
|
|
110
156
|
* same directory route correctly without needing the explicit slug. This is
|
|
111
157
|
* the migration path for existing projects — the allowlist fills itself over
|
|
112
158
|
* normal use.
|
|
159
|
+
*
|
|
160
|
+
* Slug validation: if an explicit slug fails `isValidProjectSlug()` AND no
|
|
161
|
+
* project directory already exists for it, resolution throws — preventing
|
|
162
|
+
* garbage slugs from creating new directories. Existing (already-on-disk)
|
|
163
|
+
* invalid slugs still resolve so reads of legacy data don't break.
|
|
113
164
|
*/
|
|
114
165
|
export async function resolveProject(project) {
|
|
115
166
|
if (!project || project === "auto") {
|
|
116
|
-
|
|
167
|
+
const detected = await detectProject();
|
|
168
|
+
// Gate: block auto-detected slugs from creating new dirs if invalid
|
|
169
|
+
if (!isValidProjectSlug(detected)) {
|
|
170
|
+
const projectDir = path.join(getRoot(), "projects", detected);
|
|
171
|
+
if (!fs.existsSync(projectDir)) {
|
|
172
|
+
throw new Error(`Auto-detected project slug "${detected}" is invalid (UUID, system dir, or deny-listed). ` +
|
|
173
|
+
`Set AGENT_RECALL_PROJECT env var or pass project explicitly.`);
|
|
174
|
+
}
|
|
175
|
+
// Existing dir — allow read but don't register into allowlist
|
|
176
|
+
}
|
|
177
|
+
return detected;
|
|
178
|
+
}
|
|
179
|
+
// Explicit slug: validate before allowing new directory creation
|
|
180
|
+
if (!isValidProjectSlug(project)) {
|
|
181
|
+
const projectDir = path.join(getRoot(), "projects", project);
|
|
182
|
+
if (!fs.existsSync(projectDir)) {
|
|
183
|
+
throw new Error(`Invalid project slug "${project}". Slugs must contain at least one letter ` +
|
|
184
|
+
`and cannot be UUIDs, end with .md, start with _, or be a reserved word ` +
|
|
185
|
+
`(${[...SLUG_DENY_LIST].join(", ")}).`);
|
|
186
|
+
}
|
|
187
|
+
// Existing dir — allow resolution for backward compat but skip allowlist registration
|
|
188
|
+
return project;
|
|
117
189
|
}
|
|
118
190
|
try {
|
|
119
191
|
const { addCwdToAllowlist } = await import("./cwd-allowlist.js");
|