agent-recall-core 3.4.21 → 3.4.23
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/handoff.d.ts +26 -0
- package/dist/helpers/handoff.d.ts.map +1 -0
- package/dist/helpers/handoff.js +225 -0
- package/dist/helpers/handoff.js.map +1 -0
- package/dist/helpers/journal-files.d.ts +23 -0
- package/dist/helpers/journal-files.d.ts.map +1 -1
- package/dist/helpers/journal-files.js +99 -0
- package/dist/helpers/journal-files.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/palace/index-manager.d.ts.map +1 -1
- package/dist/palace/index-manager.js +33 -28
- package/dist/palace/index-manager.js.map +1 -1
- package/dist/palace/insights-index.d.ts +31 -1
- package/dist/palace/insights-index.d.ts.map +1 -1
- package/dist/palace/insights-index.js +100 -30
- package/dist/palace/insights-index.js.map +1 -1
- package/dist/palace/rooms.d.ts +21 -3
- package/dist/palace/rooms.d.ts.map +1 -1
- package/dist/palace/rooms.js +74 -10
- package/dist/palace/rooms.js.map +1 -1
- package/dist/storage/corrections.d.ts +51 -1
- package/dist/storage/corrections.d.ts.map +1 -1
- package/dist/storage/corrections.js +111 -0
- package/dist/storage/corrections.js.map +1 -1
- package/dist/tools-logic/check.d.ts +6 -0
- package/dist/tools-logic/check.d.ts.map +1 -1
- package/dist/tools-logic/check.js +10 -1
- package/dist/tools-logic/check.js.map +1 -1
- package/dist/tools-logic/dashboard-export.d.ts +6 -0
- package/dist/tools-logic/dashboard-export.d.ts.map +1 -1
- package/dist/tools-logic/dashboard-export.js +3 -0
- package/dist/tools-logic/dashboard-export.js.map +1 -1
- package/dist/tools-logic/palace-write.d.ts.map +1 -1
- package/dist/tools-logic/palace-write.js +9 -2
- package/dist/tools-logic/palace-write.js.map +1 -1
- package/dist/tools-logic/project-status.d.ts.map +1 -1
- package/dist/tools-logic/project-status.js +30 -0
- package/dist/tools-logic/project-status.js.map +1 -1
- package/dist/tools-logic/recall-backend.d.ts +7 -2
- package/dist/tools-logic/recall-backend.d.ts.map +1 -1
- package/dist/tools-logic/recall-backend.js +36 -2
- package/dist/tools-logic/recall-backend.js.map +1 -1
- package/dist/tools-logic/session-end.d.ts +6 -0
- package/dist/tools-logic/session-end.d.ts.map +1 -1
- package/dist/tools-logic/session-end.js +88 -2
- package/dist/tools-logic/session-end.js.map +1 -1
- package/dist/tools-logic/session-start.d.ts +21 -0
- package/dist/tools-logic/session-start.d.ts.map +1 -1
- package/dist/tools-logic/session-start.js +151 -15
- package/dist/tools-logic/session-start.js.map +1 -1
- package/dist/tools-logic/smart-recall.d.ts +6 -0
- package/dist/tools-logic/smart-recall.d.ts.map +1 -1
- package/dist/tools-logic/smart-recall.js +51 -10
- package/dist/tools-logic/smart-recall.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/vector/embedding.d.ts +1 -1
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +5 -2
- package/dist/vector/embedding.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAoB;AACpB,OAAO,EACL,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,OAAO,EACP,SAAS,EACT,OAAO,EACP,aAAa,GACd,MAAM,YAAY,CAAC;AAiBpB,iBAAiB;AACjB,OAAO,EACL,UAAU,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACT,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,SAAS,EACT,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-manager.d.ts","sourceRoot":"","sources":["../../src/palace/index-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index-manager.d.ts","sourceRoot":"","sources":["../../src/palace/index-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAuC9D"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Palace index management — maintains palace-index.json.
|
|
3
3
|
*/
|
|
4
|
-
import * as fs from "node:fs";
|
|
5
4
|
import * as path from "node:path";
|
|
6
5
|
import { VERSION } from "../types.js";
|
|
7
6
|
import { palaceDir } from "../storage/paths.js";
|
|
8
7
|
import { readJsonSafe, writeJsonAtomic } from "../storage/fs-utils.js";
|
|
9
|
-
import { listRooms } from "./rooms.js";
|
|
8
|
+
import { listRooms, countRoomEntries } from "./rooms.js";
|
|
9
|
+
import { withLock } from "../storage/filelock.js";
|
|
10
10
|
function indexPath(project) {
|
|
11
11
|
return path.join(palaceDir(project), "palace-index.json");
|
|
12
12
|
}
|
|
@@ -14,33 +14,38 @@ export function readPalaceIndex(project) {
|
|
|
14
14
|
return readJsonSafe(indexPath(project));
|
|
15
15
|
}
|
|
16
16
|
export function updatePalaceIndex(project) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
// Lock the read-compute-write so two concurrent palace writes to the same
|
|
18
|
+
// project can't lose each other's memory_count update (last-writer-wins on
|
|
19
|
+
// the index cache). The room .md files are the source of truth and are
|
|
20
|
+
// written separately; this only protects the derived index from drift.
|
|
21
|
+
return withLock(`palace-index-${project}`, () => {
|
|
22
|
+
const rooms = listRooms(project);
|
|
23
|
+
const existing = readPalaceIndex(project);
|
|
24
|
+
const roomsMap = {};
|
|
25
|
+
for (const room of rooms) {
|
|
26
|
+
// Count real memory entries (### blocks across all .md files, including the
|
|
27
|
+
// README.md "## Memories" section where default writes land). The old logic
|
|
28
|
+
// counted non-README .md files, so README-only writes reported 0.
|
|
29
|
+
const memoryCount = countRoomEntries(project, room.slug);
|
|
30
|
+
roomsMap[room.slug] = {
|
|
31
|
+
// Empty rooms get a salience floor of 0 so the index never claims an
|
|
32
|
+
// empty room is more salient than a content room (0.5 on an empty room
|
|
33
|
+
// is a lie). recordAccess keeps room.salience in sync; this is a guard.
|
|
34
|
+
salience: memoryCount === 0 ? 0 : room.salience,
|
|
35
|
+
memory_count: memoryCount,
|
|
36
|
+
last_updated: room.updated,
|
|
37
|
+
};
|
|
28
38
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
const index = {
|
|
40
|
+
version: VERSION,
|
|
41
|
+
project,
|
|
42
|
+
created: existing?.created ?? new Date().toISOString(),
|
|
43
|
+
rooms: roomsMap,
|
|
44
|
+
identity_hash: existing?.identity_hash ?? "",
|
|
45
|
+
last_lint: existing?.last_lint ?? "",
|
|
33
46
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
project,
|
|
38
|
-
created: existing?.created ?? new Date().toISOString(),
|
|
39
|
-
rooms: roomsMap,
|
|
40
|
-
identity_hash: existing?.identity_hash ?? "",
|
|
41
|
-
last_lint: existing?.last_lint ?? "",
|
|
42
|
-
};
|
|
43
|
-
writeJsonAtomic(indexPath(project), index);
|
|
44
|
-
return index;
|
|
47
|
+
writeJsonAtomic(indexPath(project), index);
|
|
48
|
+
return index;
|
|
49
|
+
});
|
|
45
50
|
}
|
|
46
51
|
//# sourceMappingURL=index-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-manager.js","sourceRoot":"","sources":["../../src/palace/index-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index-manager.js","sourceRoot":"","sources":["../../src/palace/index-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,YAAY,CAAc,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,0EAA0E;IAC1E,2EAA2E;IAC3E,uEAAuE;IACvE,uEAAuE;IACvE,OAAO,QAAQ,CAAC,gBAAgB,OAAO,EAAE,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAyB,EAAE,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,4EAA4E;YAC5E,4EAA4E;YAC5E,kEAAkE;YAClE,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACpB,qEAAqE;gBACrE,uEAAuE;gBACvE,wEAAwE;gBACxE,QAAQ,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;gBAC/C,YAAY,EAAE,WAAW;gBACzB,YAAY,EAAE,IAAI,CAAC,OAAO;aAC3B,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAgB;YACzB,OAAO,EAAE,OAAO;YAChB,OAAO;YACP,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtD,KAAK,EAAE,QAAQ;YACf,aAAa,EAAE,QAAQ,EAAE,aAAa,IAAI,EAAE;YAC5C,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE;SACrC,CAAC;QAEF,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -7,6 +7,29 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Global scope: ~/.agent-recall/insights-index.json
|
|
9
9
|
*/
|
|
10
|
+
/**
|
|
11
|
+
* Normalize a title for similarity comparison:
|
|
12
|
+
* - lowercase
|
|
13
|
+
* - strip punctuation
|
|
14
|
+
* - split into words
|
|
15
|
+
* - drop stopwords and words shorter than 3 characters
|
|
16
|
+
*
|
|
17
|
+
* Returns a Set of normalized tokens.
|
|
18
|
+
*/
|
|
19
|
+
export declare function normalizeTitle(title: string): Set<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Containment-based overlap between two token sets:
|
|
22
|
+
* overlap = |intersection| / |smaller set|
|
|
23
|
+
*
|
|
24
|
+
* This is robust to length differences — a short title that is a
|
|
25
|
+
* semantic subset of a longer one still scores high.
|
|
26
|
+
*/
|
|
27
|
+
export declare function tokenOverlap(a: Set<string>, b: Set<string>): number;
|
|
28
|
+
/**
|
|
29
|
+
* Find the most similar existing insight by title.
|
|
30
|
+
* Returns the insight if containment-based overlap >= 0.6, else null.
|
|
31
|
+
*/
|
|
32
|
+
export declare function findSimilarInsight(title: string, insights: IndexedInsight[]): IndexedInsight | null;
|
|
10
33
|
export interface IndexedInsight {
|
|
11
34
|
id: string;
|
|
12
35
|
title: string;
|
|
@@ -28,8 +51,15 @@ export declare function readInsightsIndex(): InsightsIndex;
|
|
|
28
51
|
export declare function writeInsightsIndex(index: InsightsIndex): void;
|
|
29
52
|
/**
|
|
30
53
|
* Add or update an insight in the index.
|
|
54
|
+
*
|
|
55
|
+
* Confirm-first: if a similar insight already exists (containment overlap >= 0.6),
|
|
56
|
+
* strengthen it instead of creating a new entry. This is the primary mechanism
|
|
57
|
+
* that drives the confirmation rate above 1%.
|
|
58
|
+
*
|
|
59
|
+
* Returns the insight that was confirmed or added.
|
|
60
|
+
* Returns null only when the cap is full of count>=2 entries (no room for count-1).
|
|
31
61
|
*/
|
|
32
|
-
export declare function addIndexedInsight(insight: Omit<IndexedInsight, "id" | "confirmed_count" | "last_confirmed">): IndexedInsight;
|
|
62
|
+
export declare function addIndexedInsight(insight: Omit<IndexedInsight, "id" | "confirmed_count" | "last_confirmed">): IndexedInsight | null;
|
|
33
63
|
/**
|
|
34
64
|
* Recall insights relevant to a given context.
|
|
35
65
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insights-index.d.ts","sourceRoot":"","sources":["../../src/palace/insights-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"insights-index.d.ts","sourceRoot":"","sources":["../../src/palace/insights-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsBH;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAOzD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAOnE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EAAE,GACzB,cAAc,GAAG,IAAI,CAiBvB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAMD,wBAAgB,iBAAiB,IAAI,aAAa,CAUjD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAO7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,iBAAiB,GAAG,gBAAgB,CAAC,GAAG,cAAc,GAAG,IAAI,CAkEnI;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAU,EACjB,cAAc,CAAC,EAAE,MAAM,GACtB,KAAK,CAAC,cAAc,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAwD/C"}
|
|
@@ -13,6 +13,72 @@ import { getRoot } from "../types.js";
|
|
|
13
13
|
import { ensureDir } from "../storage/fs-utils.js";
|
|
14
14
|
import { syncToSupabase } from "../supabase/sync.js";
|
|
15
15
|
import { withLock } from "../storage/filelock.js";
|
|
16
|
+
// ── Stopwords for title normalization ────────────────────────────────────────
|
|
17
|
+
const STOPWORDS = new Set([
|
|
18
|
+
"a", "an", "the", "and", "or", "but", "in", "on", "at", "to", "for",
|
|
19
|
+
"of", "with", "by", "from", "is", "are", "was", "were", "be", "been",
|
|
20
|
+
"being", "have", "has", "had", "do", "does", "did", "will", "would",
|
|
21
|
+
"could", "should", "may", "might", "shall", "can", "this", "that",
|
|
22
|
+
"these", "those", "it", "its", "not", "no", "nor", "so", "yet", "both",
|
|
23
|
+
"either", "neither", "each", "any", "all", "more", "most", "other",
|
|
24
|
+
"than", "then", "when", "where", "which", "who", "how", "why", "what",
|
|
25
|
+
"as", "if", "up", "out", "about", "into", "through", "during", "before",
|
|
26
|
+
"after", "above", "below", "between", "just", "also", "only", "even",
|
|
27
|
+
]);
|
|
28
|
+
/**
|
|
29
|
+
* Normalize a title for similarity comparison:
|
|
30
|
+
* - lowercase
|
|
31
|
+
* - strip punctuation
|
|
32
|
+
* - split into words
|
|
33
|
+
* - drop stopwords and words shorter than 3 characters
|
|
34
|
+
*
|
|
35
|
+
* Returns a Set of normalized tokens.
|
|
36
|
+
*/
|
|
37
|
+
export function normalizeTitle(title) {
|
|
38
|
+
const words = title
|
|
39
|
+
.toLowerCase()
|
|
40
|
+
.replace(/[^a-z0-9\s]/g, " ")
|
|
41
|
+
.split(/\s+/)
|
|
42
|
+
.filter((w) => w.length >= 3 && !STOPWORDS.has(w));
|
|
43
|
+
return new Set(words);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Containment-based overlap between two token sets:
|
|
47
|
+
* overlap = |intersection| / |smaller set|
|
|
48
|
+
*
|
|
49
|
+
* This is robust to length differences — a short title that is a
|
|
50
|
+
* semantic subset of a longer one still scores high.
|
|
51
|
+
*/
|
|
52
|
+
export function tokenOverlap(a, b) {
|
|
53
|
+
if (a.size === 0 || b.size === 0)
|
|
54
|
+
return 0;
|
|
55
|
+
let intersect = 0;
|
|
56
|
+
for (const token of a) {
|
|
57
|
+
if (b.has(token))
|
|
58
|
+
intersect++;
|
|
59
|
+
}
|
|
60
|
+
return intersect / Math.min(a.size, b.size);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Find the most similar existing insight by title.
|
|
64
|
+
* Returns the insight if containment-based overlap >= 0.6, else null.
|
|
65
|
+
*/
|
|
66
|
+
export function findSimilarInsight(title, insights) {
|
|
67
|
+
const incoming = normalizeTitle(title);
|
|
68
|
+
if (incoming.size === 0)
|
|
69
|
+
return null;
|
|
70
|
+
let bestInsight = null;
|
|
71
|
+
let bestScore = 0;
|
|
72
|
+
for (const insight of insights) {
|
|
73
|
+
const existing = normalizeTitle(insight.title);
|
|
74
|
+
const score = tokenOverlap(incoming, existing);
|
|
75
|
+
if (score >= 0.6 && score > bestScore) {
|
|
76
|
+
bestScore = score;
|
|
77
|
+
bestInsight = insight;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return bestInsight;
|
|
81
|
+
}
|
|
16
82
|
function indexPath() {
|
|
17
83
|
return path.join(getRoot(), "insights-index.json");
|
|
18
84
|
}
|
|
@@ -38,24 +104,26 @@ export function writeInsightsIndex(index) {
|
|
|
38
104
|
}
|
|
39
105
|
/**
|
|
40
106
|
* Add or update an insight in the index.
|
|
107
|
+
*
|
|
108
|
+
* Confirm-first: if a similar insight already exists (containment overlap >= 0.6),
|
|
109
|
+
* strengthen it instead of creating a new entry. This is the primary mechanism
|
|
110
|
+
* that drives the confirmation rate above 1%.
|
|
111
|
+
*
|
|
112
|
+
* Returns the insight that was confirmed or added.
|
|
113
|
+
* Returns null only when the cap is full of count>=2 entries (no room for count-1).
|
|
41
114
|
*/
|
|
42
115
|
export function addIndexedInsight(insight) {
|
|
43
116
|
return withLock("insights-index", () => {
|
|
44
117
|
const index = readInsightsIndex();
|
|
45
118
|
const now = new Date().toISOString();
|
|
46
|
-
//
|
|
47
|
-
const existing = index.insights
|
|
48
|
-
const existingWords = i.title.toLowerCase().split(/\s+/);
|
|
49
|
-
const newWords = insight.title.toLowerCase().split(/\s+/);
|
|
50
|
-
const overlap = newWords.filter((w) => existingWords.includes(w) && w.length > 3).length;
|
|
51
|
-
return overlap / Math.max(existingWords.length, newWords.length) > 0.5;
|
|
52
|
-
});
|
|
119
|
+
// Confirm-first: use containment-based overlap at 0.6 threshold
|
|
120
|
+
const existing = findSimilarInsight(insight.title, index.insights);
|
|
53
121
|
if (existing) {
|
|
54
122
|
existing.confirmed_count++;
|
|
55
123
|
existing.last_confirmed = now;
|
|
56
|
-
// Merge applies_when
|
|
124
|
+
// Merge applies_when (union, cap at 10 keywords)
|
|
57
125
|
for (const aw of insight.applies_when) {
|
|
58
|
-
if (!existing.applies_when.includes(aw)) {
|
|
126
|
+
if (!existing.applies_when.includes(aw) && existing.applies_when.length < 10) {
|
|
59
127
|
existing.applies_when.push(aw);
|
|
60
128
|
}
|
|
61
129
|
}
|
|
@@ -69,6 +137,29 @@ export function addIndexedInsight(insight) {
|
|
|
69
137
|
writeInsightsIndex(index);
|
|
70
138
|
return existing;
|
|
71
139
|
}
|
|
140
|
+
// New insight — check cap before admitting
|
|
141
|
+
if (index.insights.length >= 200) {
|
|
142
|
+
// Eviction: evict the OLDEST entry with confirmed_count == 1.
|
|
143
|
+
// NEVER evict an entry with confirmed_count >= 2 to admit a count-1 entry.
|
|
144
|
+
let oldestCount1Idx = -1;
|
|
145
|
+
let oldestTime = Infinity;
|
|
146
|
+
for (let i = 0; i < index.insights.length; i++) {
|
|
147
|
+
if (index.insights[i].confirmed_count === 1) {
|
|
148
|
+
const t = new Date(index.insights[i].last_confirmed).getTime();
|
|
149
|
+
if (t < oldestTime) {
|
|
150
|
+
oldestTime = t;
|
|
151
|
+
oldestCount1Idx = i;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (oldestCount1Idx === -1) {
|
|
156
|
+
// All entries are count >= 2 — refuse to admit a new count-1 entry.
|
|
157
|
+
// This prevents degradation of a fully-compounded index.
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
// Evict the oldest count-1 entry
|
|
161
|
+
index.insights.splice(oldestCount1Idx, 1);
|
|
162
|
+
}
|
|
72
163
|
const newInsight = {
|
|
73
164
|
id: `idx-${Date.now()}`,
|
|
74
165
|
...insight,
|
|
@@ -76,27 +167,6 @@ export function addIndexedInsight(insight) {
|
|
|
76
167
|
last_confirmed: now,
|
|
77
168
|
};
|
|
78
169
|
index.insights.push(newInsight);
|
|
79
|
-
// Prune: if over 200 entries, remove least-confirmed old entries
|
|
80
|
-
if (index.insights.length > 200) {
|
|
81
|
-
const now = Date.now();
|
|
82
|
-
const ninetyDaysMs = 90 * 24 * 60 * 60 * 1000;
|
|
83
|
-
// Remove single-confirmation entries older than 90 days
|
|
84
|
-
index.insights = index.insights.filter((i) => {
|
|
85
|
-
if (i.confirmed_count > 1)
|
|
86
|
-
return true;
|
|
87
|
-
const age = now - new Date(i.last_confirmed).getTime();
|
|
88
|
-
return age < ninetyDaysMs;
|
|
89
|
-
});
|
|
90
|
-
// If still over 200 after age pruning, keep top 200 by score
|
|
91
|
-
if (index.insights.length > 200) {
|
|
92
|
-
index.insights.sort((a, b) => {
|
|
93
|
-
const scoreA = a.confirmed_count * (a.severity === "critical" ? 3 : a.severity === "important" ? 2 : 1);
|
|
94
|
-
const scoreB = b.confirmed_count * (b.severity === "critical" ? 3 : b.severity === "important" ? 2 : 1);
|
|
95
|
-
return scoreB - scoreA;
|
|
96
|
-
});
|
|
97
|
-
index.insights = index.insights.slice(0, 200);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
170
|
writeInsightsIndex(index);
|
|
101
171
|
return newInsight;
|
|
102
172
|
}); // end withLock
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insights-index.js","sourceRoot":"","sources":["../../src/palace/insights-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"insights-index.js","sourceRoot":"","sources":["../../src/palace/insights-index.ts"],"names":[],"mappings":"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"}
|
package/dist/palace/rooms.d.ts
CHANGED
|
@@ -1,16 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Palace room management — create, list, read, update rooms.
|
|
3
3
|
*/
|
|
4
|
-
import type { RoomMeta } from "../types.js";
|
|
4
|
+
import type { RoomMeta, Importance } from "../types.js";
|
|
5
5
|
export declare function createRoom(project: string, slug: string, name: string, description: string, tags?: string[], connections?: string[]): RoomMeta;
|
|
6
6
|
export declare function getRoomMeta(project: string, roomSlug: string): RoomMeta | null;
|
|
7
|
+
/**
|
|
8
|
+
* Count the real memory entries written to a room.
|
|
9
|
+
*
|
|
10
|
+
* Truth = the number of `### YYYY-MM-DD — importance` entry blocks across all
|
|
11
|
+
* `.md` files in the room (both README.md's "## Memories" section and any
|
|
12
|
+
* topic files). This is what palaceWrite actually appends, so it is the
|
|
13
|
+
* authoritative content count — NOT the file count (README.md is a scaffold
|
|
14
|
+
* that contains entries) and NOT access_count.
|
|
15
|
+
*
|
|
16
|
+
* Returns 0 for a missing/unreadable room dir or any read error — never throws.
|
|
17
|
+
*/
|
|
18
|
+
export declare function countRoomEntries(project: string, roomSlug: string): number;
|
|
7
19
|
export declare function updateRoomMeta(project: string, roomSlug: string, updates: Partial<RoomMeta>): RoomMeta | null;
|
|
8
20
|
export declare function listRooms(project: string): RoomMeta[];
|
|
9
21
|
export declare function roomExists(project: string, roomSlug: string): boolean;
|
|
10
22
|
/** Initialize default palace rooms if palace doesn't exist yet. */
|
|
11
23
|
export declare function ensurePalaceInitialized(project: string): void;
|
|
12
|
-
/**
|
|
13
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Record an access (bump access_count, last_accessed, and recompute salience).
|
|
26
|
+
*
|
|
27
|
+
* `importance` lets a write path propagate the actual importance of the memory
|
|
28
|
+
* just written (e.g. --importance high) into the salience formula instead of
|
|
29
|
+
* always assuming "medium". Defaults to "medium" for plain reads/walks.
|
|
30
|
+
*/
|
|
31
|
+
export declare function recordAccess(project: string, roomSlug: string, importance?: Importance): void;
|
|
14
32
|
/** Touch the room's updated timestamp. Call after writing any markdown file in the room. */
|
|
15
33
|
export declare function touchRoom(project: string, roomSlug: string): void;
|
|
16
34
|
/** Returns true if the room has not been updated in the last `daysThreshold` days. */
|
|
@@ -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,MAAM,aAAa,CAAC;
|
|
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"}
|
package/dist/palace/rooms.js
CHANGED
|
@@ -45,6 +45,45 @@ export function getRoomMeta(project, roomSlug) {
|
|
|
45
45
|
const pd = palaceDir(project);
|
|
46
46
|
return readJsonSafe(roomMetaPath(pd, roomSlug));
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Count the real memory entries written to a room.
|
|
50
|
+
*
|
|
51
|
+
* Truth = the number of `### YYYY-MM-DD — importance` entry blocks across all
|
|
52
|
+
* `.md` files in the room (both README.md's "## Memories" section and any
|
|
53
|
+
* topic files). This is what palaceWrite actually appends, so it is the
|
|
54
|
+
* authoritative content count — NOT the file count (README.md is a scaffold
|
|
55
|
+
* that contains entries) and NOT access_count.
|
|
56
|
+
*
|
|
57
|
+
* Returns 0 for a missing/unreadable room dir or any read error — never throws.
|
|
58
|
+
*/
|
|
59
|
+
export function countRoomEntries(project, roomSlug) {
|
|
60
|
+
try {
|
|
61
|
+
const pd = palaceDir(project);
|
|
62
|
+
const safe = sanitizeSlug(roomSlug);
|
|
63
|
+
const roomPath = path.join(pd, "rooms", safe);
|
|
64
|
+
if (!fs.existsSync(roomPath))
|
|
65
|
+
return 0;
|
|
66
|
+
let count = 0;
|
|
67
|
+
const files = fs.readdirSync(roomPath).filter((f) => f.endsWith(".md"));
|
|
68
|
+
for (const file of files) {
|
|
69
|
+
let text;
|
|
70
|
+
try {
|
|
71
|
+
text = fs.readFileSync(path.join(roomPath, file), "utf-8");
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
continue; // unreadable file — skip, do not throw
|
|
75
|
+
}
|
|
76
|
+
// Count entry headers: lines beginning with "### " (the per-write blocks).
|
|
77
|
+
const matches = text.match(/^### .+$/gm);
|
|
78
|
+
if (matches)
|
|
79
|
+
count += matches.length;
|
|
80
|
+
}
|
|
81
|
+
return count;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return 0; // missing/unreadable room dir — treat as empty, never throw
|
|
85
|
+
}
|
|
86
|
+
}
|
|
48
87
|
export function updateRoomMeta(project, roomSlug, updates) {
|
|
49
88
|
return withLock(`room-${project}-${roomSlug}`, () => {
|
|
50
89
|
const pd = palaceDir(project);
|
|
@@ -70,8 +109,24 @@ export function listRooms(project) {
|
|
|
70
109
|
if (meta)
|
|
71
110
|
rooms.push(meta);
|
|
72
111
|
}
|
|
73
|
-
//
|
|
74
|
-
|
|
112
|
+
// HARD INVARIANT: a room with real content NEVER ranks below an empty room.
|
|
113
|
+
// Emptiness is determined by disk truth (entry count), not the stale salience
|
|
114
|
+
// field — a default room can sit at salience 0.5 while holding zero entries.
|
|
115
|
+
// Compute emptiness once per room to avoid re-reading files inside the sort.
|
|
116
|
+
const emptyBySlug = new Map();
|
|
117
|
+
for (const room of rooms) {
|
|
118
|
+
emptyBySlug.set(room.slug, countRoomEntries(project, room.slug) === 0);
|
|
119
|
+
}
|
|
120
|
+
rooms.sort((a, b) => {
|
|
121
|
+
const aEmpty = emptyBySlug.get(a.slug) ?? true;
|
|
122
|
+
const bEmpty = emptyBySlug.get(b.slug) ?? true;
|
|
123
|
+
// Empty-vs-content check short-circuits BEFORE the salience comparison:
|
|
124
|
+
// non-empty rooms always sort first.
|
|
125
|
+
if (aEmpty !== bEmpty)
|
|
126
|
+
return aEmpty ? 1 : -1;
|
|
127
|
+
// Within the same emptiness class, sort by salience descending.
|
|
128
|
+
return b.salience - a.salience;
|
|
129
|
+
});
|
|
75
130
|
return rooms;
|
|
76
131
|
}
|
|
77
132
|
export function roomExists(project, roomSlug) {
|
|
@@ -125,19 +180,28 @@ export function ensurePalaceInitialized(project) {
|
|
|
125
180
|
// Create graph.json
|
|
126
181
|
writeJsonAtomic(path.join(pd, "graph.json"), { edges: [] });
|
|
127
182
|
}
|
|
128
|
-
/**
|
|
129
|
-
|
|
183
|
+
/**
|
|
184
|
+
* Record an access (bump access_count, last_accessed, and recompute salience).
|
|
185
|
+
*
|
|
186
|
+
* `importance` lets a write path propagate the actual importance of the memory
|
|
187
|
+
* just written (e.g. --importance high) into the salience formula instead of
|
|
188
|
+
* always assuming "medium". Defaults to "medium" for plain reads/walks.
|
|
189
|
+
*/
|
|
190
|
+
export function recordAccess(project, roomSlug, importance = "medium") {
|
|
130
191
|
const meta = getRoomMeta(project, roomSlug);
|
|
131
192
|
if (!meta)
|
|
132
193
|
return;
|
|
133
194
|
const pd = palaceDir(project);
|
|
134
195
|
const connCount = getConnectionCount(pd, roomSlug);
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
196
|
+
const empty = countRoomEntries(project, roomSlug) === 0;
|
|
197
|
+
const newSalience = empty
|
|
198
|
+
? 0 // empty rooms get a structural salience floor of 0 — 0.5 on an empty room is a lie
|
|
199
|
+
: computeSalience({
|
|
200
|
+
importance,
|
|
201
|
+
lastUpdated: meta.updated,
|
|
202
|
+
accessCount: meta.access_count + 1,
|
|
203
|
+
connectionCount: connCount,
|
|
204
|
+
});
|
|
141
205
|
updateRoomMeta(project, roomSlug, {
|
|
142
206
|
access_count: meta.access_count + 1,
|
|
143
207
|
last_accessed: new Date().toISOString(),
|
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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"}
|