agent-recall-core 3.3.10 → 3.3.11
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/README.md +2 -2
- package/dist/helpers/alignment-patterns.d.ts +19 -0
- package/dist/helpers/alignment-patterns.d.ts.map +1 -0
- package/dist/helpers/alignment-patterns.js +47 -0
- package/dist/helpers/alignment-patterns.js.map +1 -0
- package/dist/helpers/auto-name.d.ts +42 -0
- package/dist/helpers/auto-name.d.ts.map +1 -0
- package/dist/helpers/auto-name.js +210 -0
- package/dist/helpers/auto-name.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/palace/awareness.d.ts +4 -0
- package/dist/palace/awareness.d.ts.map +1 -1
- package/dist/palace/awareness.js +102 -17
- package/dist/palace/awareness.js.map +1 -1
- package/dist/palace/fan-out.d.ts.map +1 -1
- package/dist/palace/fan-out.js +30 -1
- package/dist/palace/fan-out.js.map +1 -1
- package/dist/tools-logic/check.d.ts +33 -0
- package/dist/tools-logic/check.d.ts.map +1 -0
- package/dist/tools-logic/check.js +85 -0
- package/dist/tools-logic/check.js.map +1 -0
- package/dist/tools-logic/journal-capture.d.ts +1 -0
- package/dist/tools-logic/journal-capture.d.ts.map +1 -1
- package/dist/tools-logic/journal-capture.js +11 -1
- package/dist/tools-logic/journal-capture.js.map +1 -1
- package/dist/tools-logic/knowledge-write.d.ts.map +1 -1
- package/dist/tools-logic/knowledge-write.js +7 -1
- package/dist/tools-logic/knowledge-write.js.map +1 -1
- package/dist/tools-logic/palace-write.d.ts +2 -0
- package/dist/tools-logic/palace-write.d.ts.map +1 -1
- package/dist/tools-logic/palace-write.js +13 -1
- package/dist/tools-logic/palace-write.js.map +1 -1
- package/dist/tools-logic/session-end.d.ts +26 -0
- package/dist/tools-logic/session-end.d.ts.map +1 -0
- package/dist/tools-logic/session-end.js +68 -0
- package/dist/tools-logic/session-end.js.map +1 -0
- package/dist/tools-logic/session-start.d.ts +38 -0
- package/dist/tools-logic/session-start.d.ts.map +1 -0
- package/dist/tools-logic/session-start.js +91 -0
- package/dist/tools-logic/session-start.js.map +1 -0
- package/dist/tools-logic/smart-recall.d.ts +35 -0
- package/dist/tools-logic/smart-recall.d.ts.map +1 -0
- package/dist/tools-logic/smart-recall.js +199 -0
- package/dist/tools-logic/smart-recall.js.map +1 -0
- package/dist/tools-logic/smart-remember.d.ts +20 -0
- package/dist/tools-logic/smart-remember.d.ts.map +1 -0
- package/dist/tools-logic/smart-remember.js +136 -0
- package/dist/tools-logic/smart-remember.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session_end — combined session save in one call.
|
|
3
|
+
*
|
|
4
|
+
* Replaces: awareness_update + journal_write + palace consolidation
|
|
5
|
+
*/
|
|
6
|
+
export interface SessionEndInput {
|
|
7
|
+
summary: string;
|
|
8
|
+
insights?: Array<{
|
|
9
|
+
title: string;
|
|
10
|
+
evidence: string;
|
|
11
|
+
applies_when: string[];
|
|
12
|
+
source?: string;
|
|
13
|
+
severity?: "critical" | "important" | "minor";
|
|
14
|
+
}>;
|
|
15
|
+
trajectory?: string;
|
|
16
|
+
project?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SessionEndResult {
|
|
19
|
+
success: boolean;
|
|
20
|
+
journal_written: boolean;
|
|
21
|
+
insights_processed: number;
|
|
22
|
+
awareness_updated: boolean;
|
|
23
|
+
palace_consolidated: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function sessionEnd(input: SessionEndInput): Promise<SessionEndResult>;
|
|
26
|
+
//# sourceMappingURL=session-end.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../src/tools-logic/session-end.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;KAC/C,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0DlF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session_end — combined session save in one call.
|
|
3
|
+
*
|
|
4
|
+
* Replaces: awareness_update + journal_write + palace consolidation
|
|
5
|
+
*/
|
|
6
|
+
import { journalWrite } from "./journal-write.js";
|
|
7
|
+
import { awarenessUpdate } from "./awareness-update.js";
|
|
8
|
+
import { consolidateJournalToPalace } from "../palace/consolidate.js";
|
|
9
|
+
import { resolveProject } from "../storage/project.js";
|
|
10
|
+
import { ensurePalaceInitialized } from "../palace/rooms.js";
|
|
11
|
+
export async function sessionEnd(input) {
|
|
12
|
+
const slug = await resolveProject(input.project);
|
|
13
|
+
let journalWritten = false;
|
|
14
|
+
let insightsProcessed = 0;
|
|
15
|
+
let awarenessUpdated = false;
|
|
16
|
+
let palaceConsolidated = false;
|
|
17
|
+
// 1. Write journal summary
|
|
18
|
+
try {
|
|
19
|
+
const journalContent = [
|
|
20
|
+
"## Brief",
|
|
21
|
+
input.summary,
|
|
22
|
+
"",
|
|
23
|
+
input.trajectory ? `## Next\n${input.trajectory}` : "",
|
|
24
|
+
].filter(Boolean).join("\n");
|
|
25
|
+
await journalWrite({ content: journalContent, project: slug });
|
|
26
|
+
journalWritten = true;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Journal write is best-effort
|
|
30
|
+
}
|
|
31
|
+
// 2. Update awareness with insights
|
|
32
|
+
if (input.insights && input.insights.length > 0) {
|
|
33
|
+
try {
|
|
34
|
+
const result = await awarenessUpdate({
|
|
35
|
+
insights: input.insights.map((i) => ({
|
|
36
|
+
title: i.title,
|
|
37
|
+
evidence: i.evidence,
|
|
38
|
+
applies_when: i.applies_when,
|
|
39
|
+
source: i.source ?? `session_end ${new Date().toISOString().slice(0, 10)}`,
|
|
40
|
+
severity: i.severity,
|
|
41
|
+
})),
|
|
42
|
+
trajectory: input.trajectory,
|
|
43
|
+
});
|
|
44
|
+
insightsProcessed = result.insights_processed?.length ?? input.insights.length;
|
|
45
|
+
awarenessUpdated = true;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Awareness update is best-effort
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// 3. Consolidate journal to palace
|
|
52
|
+
try {
|
|
53
|
+
ensurePalaceInitialized(slug);
|
|
54
|
+
consolidateJournalToPalace(slug);
|
|
55
|
+
palaceConsolidated = true;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Consolidation is best-effort
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
success: journalWritten || awarenessUpdated,
|
|
62
|
+
journal_written: journalWritten,
|
|
63
|
+
insights_processed: insightsProcessed,
|
|
64
|
+
awareness_updated: awarenessUpdated,
|
|
65
|
+
palace_consolidated: palaceConsolidated,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=session-end.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../src/tools-logic/session-end.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAuB7D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAsB;IACrD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,cAAc,GAAG;YACrB,UAAU;YACV,KAAK,CAAC,OAAO;YACb,EAAE;YACF,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;SACvD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,oCAAoC;IACpC,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnC,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;oBAC1E,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC;gBACH,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC;YACH,iBAAiB,GAAG,MAAM,CAAC,kBAAkB,EAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/E,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC;QACH,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC9B,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACjC,kBAAkB,GAAG,IAAI,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,cAAc,IAAI,gBAAgB;QAC3C,eAAe,EAAE,cAAc;QAC/B,kBAAkB,EAAE,iBAAiB;QACrC,iBAAiB,EAAE,gBAAgB;QACnC,mBAAmB,EAAE,kBAAkB;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session_start — combined cold-start in one call.
|
|
3
|
+
*
|
|
4
|
+
* Replaces: journal_cold_start + palace_walk + recall_insight
|
|
5
|
+
* Target: <400 tokens output. No awareness duplication.
|
|
6
|
+
*/
|
|
7
|
+
import { type WatchForPattern } from "../helpers/alignment-patterns.js";
|
|
8
|
+
export interface SessionStartInput {
|
|
9
|
+
project?: string;
|
|
10
|
+
context?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SessionStartResult {
|
|
13
|
+
project: string;
|
|
14
|
+
identity: string;
|
|
15
|
+
insights: Array<{
|
|
16
|
+
title: string;
|
|
17
|
+
confirmed: number;
|
|
18
|
+
severity: string;
|
|
19
|
+
}>;
|
|
20
|
+
active_rooms: Array<{
|
|
21
|
+
name: string;
|
|
22
|
+
salience: number;
|
|
23
|
+
one_liner: string;
|
|
24
|
+
}>;
|
|
25
|
+
cross_project: Array<{
|
|
26
|
+
title: string;
|
|
27
|
+
from_project: string;
|
|
28
|
+
relevance: number;
|
|
29
|
+
}>;
|
|
30
|
+
recent: {
|
|
31
|
+
today: string | null;
|
|
32
|
+
yesterday: string | null;
|
|
33
|
+
older_count: number;
|
|
34
|
+
};
|
|
35
|
+
watch_for: WatchForPattern[];
|
|
36
|
+
}
|
|
37
|
+
export declare function sessionStart(input: SessionStartInput): Promise<SessionStartResult>;
|
|
38
|
+
//# sourceMappingURL=session-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../src/tools-logic/session-start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIhH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,aAAa,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6ExF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session_start — combined cold-start in one call.
|
|
3
|
+
*
|
|
4
|
+
* Replaces: journal_cold_start + palace_walk + recall_insight
|
|
5
|
+
* Target: <400 tokens output. No awareness duplication.
|
|
6
|
+
*/
|
|
7
|
+
import { resolveProject } from "../storage/project.js";
|
|
8
|
+
import { ensurePalaceInitialized, listRooms } from "../palace/rooms.js";
|
|
9
|
+
import { readIdentity } from "../palace/identity.js";
|
|
10
|
+
import { readAwarenessState } from "../palace/awareness.js";
|
|
11
|
+
import { recallInsights } from "../palace/insights-index.js";
|
|
12
|
+
import { journalDirs } from "../storage/paths.js";
|
|
13
|
+
import { extractSection } from "../helpers/sections.js";
|
|
14
|
+
import { todayISO } from "../storage/fs-utils.js";
|
|
15
|
+
import { readAlignmentLog, extractWatchPatterns } from "../helpers/alignment-patterns.js";
|
|
16
|
+
import * as fs from "node:fs";
|
|
17
|
+
import * as path from "node:path";
|
|
18
|
+
export async function sessionStart(input) {
|
|
19
|
+
const slug = await resolveProject(input.project);
|
|
20
|
+
ensurePalaceInitialized(slug);
|
|
21
|
+
// 1. Identity — first 2 lines only
|
|
22
|
+
const rawIdentity = readIdentity(slug);
|
|
23
|
+
const identityLines = rawIdentity.split("\n").filter((l) => l.trim() && !l.startsWith("---") && !l.startsWith(">"));
|
|
24
|
+
const identity = identityLines.slice(0, 2).join(" ").trim() || slug;
|
|
25
|
+
// 2. Top insights from awareness state (compact, no full markdown dump)
|
|
26
|
+
const state = readAwarenessState();
|
|
27
|
+
const insights = (state?.topInsights ?? []).slice(0, 5).map((i) => ({
|
|
28
|
+
title: i.title.slice(0, 80),
|
|
29
|
+
confirmed: i.confirmations ?? 1,
|
|
30
|
+
severity: "important",
|
|
31
|
+
}));
|
|
32
|
+
// 3. Active rooms — top 3 by salience
|
|
33
|
+
const rooms = listRooms(slug).slice(0, 3);
|
|
34
|
+
const active_rooms = rooms.map((r) => ({
|
|
35
|
+
name: r.name,
|
|
36
|
+
salience: r.salience,
|
|
37
|
+
one_liner: r.description.slice(0, 80),
|
|
38
|
+
}));
|
|
39
|
+
// 4. Cross-project insights matching current context
|
|
40
|
+
const context = input.context ?? slug;
|
|
41
|
+
const matched = recallInsights(context, 3);
|
|
42
|
+
const cross_project = matched.map((i) => ({
|
|
43
|
+
title: i.title.slice(0, 80),
|
|
44
|
+
from_project: (i.source ?? "unknown").slice(0, 30),
|
|
45
|
+
relevance: Math.round((i.relevance ?? 0) * 100) / 100,
|
|
46
|
+
}));
|
|
47
|
+
// 5. Recent journal briefs — today + yesterday only
|
|
48
|
+
const dirs = journalDirs(slug);
|
|
49
|
+
const today = todayISO();
|
|
50
|
+
const yesterday = new Date(Date.now() - 86400000).toISOString().slice(0, 10);
|
|
51
|
+
let todayBrief = null;
|
|
52
|
+
let yesterdayBrief = null;
|
|
53
|
+
let olderCount = 0;
|
|
54
|
+
for (const dir of dirs) {
|
|
55
|
+
if (!fs.existsSync(dir))
|
|
56
|
+
continue;
|
|
57
|
+
const files = fs.readdirSync(dir).filter((f) => f.endsWith(".md")).sort().reverse();
|
|
58
|
+
for (const file of files) {
|
|
59
|
+
const dateMatch = file.match(/^(\d{4}-\d{2}-\d{2})/);
|
|
60
|
+
if (!dateMatch)
|
|
61
|
+
continue;
|
|
62
|
+
const d = dateMatch[1];
|
|
63
|
+
if (d === today && !todayBrief) {
|
|
64
|
+
const content = fs.readFileSync(path.join(dir, file), "utf-8");
|
|
65
|
+
const brief = extractSection(content, "brief");
|
|
66
|
+
todayBrief = brief ? brief.slice(0, 200) : content.split("\n").slice(0, 3).join(" ").slice(0, 200);
|
|
67
|
+
}
|
|
68
|
+
else if (d === yesterday && !yesterdayBrief) {
|
|
69
|
+
const content = fs.readFileSync(path.join(dir, file), "utf-8");
|
|
70
|
+
const brief = extractSection(content, "brief");
|
|
71
|
+
yesterdayBrief = brief ? brief.slice(0, 200) : content.split("\n").slice(0, 3).join(" ").slice(0, 200);
|
|
72
|
+
}
|
|
73
|
+
else if (d < yesterday) {
|
|
74
|
+
olderCount++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// 6. Watch for — predictive warnings from past corrections
|
|
79
|
+
const alignLog = readAlignmentLog(slug);
|
|
80
|
+
const watch_for = extractWatchPatterns(alignLog, 2);
|
|
81
|
+
return {
|
|
82
|
+
project: slug,
|
|
83
|
+
identity,
|
|
84
|
+
insights,
|
|
85
|
+
active_rooms,
|
|
86
|
+
cross_project,
|
|
87
|
+
recent: { today: todayBrief, yesterday: yesterdayBrief, older_count: olderCount },
|
|
88
|
+
watch_for,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=session-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/tools-logic/session-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* smart_recall — unified cross-store search.
|
|
3
|
+
*
|
|
4
|
+
* Searches palace, journal, and insights in one call.
|
|
5
|
+
* Returns ranked results with source attribution.
|
|
6
|
+
*/
|
|
7
|
+
export interface RecallFeedback {
|
|
8
|
+
id?: string;
|
|
9
|
+
title?: string;
|
|
10
|
+
useful: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface SmartRecallInput {
|
|
13
|
+
query: string;
|
|
14
|
+
project?: string;
|
|
15
|
+
limit?: number;
|
|
16
|
+
feedback?: RecallFeedback[];
|
|
17
|
+
}
|
|
18
|
+
export interface SmartRecallResultItem {
|
|
19
|
+
id: string;
|
|
20
|
+
source: "palace" | "journal" | "insight";
|
|
21
|
+
title: string;
|
|
22
|
+
excerpt: string;
|
|
23
|
+
score: number;
|
|
24
|
+
room?: string;
|
|
25
|
+
date?: string;
|
|
26
|
+
severity?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface SmartRecallResult {
|
|
29
|
+
query: string;
|
|
30
|
+
results: SmartRecallResultItem[];
|
|
31
|
+
total_searched: number;
|
|
32
|
+
sources_queried: string[];
|
|
33
|
+
}
|
|
34
|
+
export declare function smartRecall(input: SmartRecallInput): Promise<SmartRecallResult>;
|
|
35
|
+
//# sourceMappingURL=smart-recall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-recall.d.ts","sourceRoot":"","sources":["../../src/tools-logic/smart-recall.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAoDD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+IrF"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* smart_recall — unified cross-store search.
|
|
3
|
+
*
|
|
4
|
+
* Searches palace, journal, and insights in one call.
|
|
5
|
+
* Returns ranked results with source attribution.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from "node:fs";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { palaceSearch } from "./palace-search.js";
|
|
10
|
+
import { journalSearch } from "./journal-search.js";
|
|
11
|
+
import { recallInsight } from "./recall-insight.js";
|
|
12
|
+
import { getRoot } from "../types.js";
|
|
13
|
+
import { ensureDir } from "../storage/fs-utils.js";
|
|
14
|
+
/** Simple stable hash for feedback matching. */
|
|
15
|
+
function stableId(source, title) {
|
|
16
|
+
let hash = 0;
|
|
17
|
+
const str = `${source}:${title}`;
|
|
18
|
+
for (let i = 0; i < str.length; i++) {
|
|
19
|
+
const char = str.charCodeAt(i);
|
|
20
|
+
hash = ((hash << 5) - hash) + char;
|
|
21
|
+
hash |= 0;
|
|
22
|
+
}
|
|
23
|
+
return Math.abs(hash).toString(36).slice(0, 8);
|
|
24
|
+
}
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Helpers
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
/** Calculate keyword overlap between query and text. */
|
|
29
|
+
function keywordExactness(query, text) {
|
|
30
|
+
const queryWords = query.toLowerCase().split(/\s+/).filter((w) => w.length > 2);
|
|
31
|
+
if (queryWords.length === 0)
|
|
32
|
+
return 0;
|
|
33
|
+
const textLower = text.toLowerCase();
|
|
34
|
+
const matches = queryWords.filter((w) => textLower.includes(w));
|
|
35
|
+
return matches.length / queryWords.length;
|
|
36
|
+
}
|
|
37
|
+
/** Days between a date string and now. */
|
|
38
|
+
function daysSince(dateStr) {
|
|
39
|
+
const d = new Date(dateStr);
|
|
40
|
+
if (isNaN(d.getTime()))
|
|
41
|
+
return 365; // fallback: old
|
|
42
|
+
return Math.max(0, (Date.now() - d.getTime()) / (1000 * 60 * 60 * 24));
|
|
43
|
+
}
|
|
44
|
+
function feedbackLogPath() {
|
|
45
|
+
return path.join(getRoot(), "feedback-log.json");
|
|
46
|
+
}
|
|
47
|
+
function readFeedbackLog() {
|
|
48
|
+
const p = feedbackLogPath();
|
|
49
|
+
if (!fs.existsSync(p))
|
|
50
|
+
return [];
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse(fs.readFileSync(p, "utf-8"));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Process relevance feedback — store and adjust salience signals. */
|
|
59
|
+
function processFeedback(feedback, query) {
|
|
60
|
+
ensureDir(path.dirname(feedbackLogPath()));
|
|
61
|
+
const log = readFeedbackLog();
|
|
62
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
63
|
+
for (const f of feedback) {
|
|
64
|
+
log.push({ query, id: f.id, title: f.title ?? "", useful: f.useful, date });
|
|
65
|
+
}
|
|
66
|
+
// Keep last 200 entries
|
|
67
|
+
fs.writeFileSync(feedbackLogPath(), JSON.stringify(log.slice(-200), null, 2), "utf-8");
|
|
68
|
+
}
|
|
69
|
+
export async function smartRecall(input) {
|
|
70
|
+
// Process relevance feedback if provided
|
|
71
|
+
if (input.feedback && input.feedback.length > 0) {
|
|
72
|
+
processFeedback(input.feedback, input.query);
|
|
73
|
+
}
|
|
74
|
+
const limit = input.limit ?? 10;
|
|
75
|
+
const allResults = [];
|
|
76
|
+
let totalSearched = 0;
|
|
77
|
+
const sourcesQueried = [];
|
|
78
|
+
// 1. Palace search
|
|
79
|
+
try {
|
|
80
|
+
const palaceResults = await palaceSearch({ query: input.query, project: input.project });
|
|
81
|
+
sourcesQueried.push("palace");
|
|
82
|
+
totalSearched += palaceResults.total_matches;
|
|
83
|
+
for (const r of palaceResults.results) {
|
|
84
|
+
const title = `${r.room}/${r.file}`;
|
|
85
|
+
allResults.push({
|
|
86
|
+
id: stableId("palace", title),
|
|
87
|
+
source: "palace",
|
|
88
|
+
title,
|
|
89
|
+
excerpt: r.excerpt,
|
|
90
|
+
score: 0, // computed below
|
|
91
|
+
room: r.room,
|
|
92
|
+
});
|
|
93
|
+
// Compute score: salience as relevance, keyword match, recency unknown (use salience as proxy)
|
|
94
|
+
const relevance = r.salience;
|
|
95
|
+
const exactness = keywordExactness(input.query, r.excerpt);
|
|
96
|
+
const recency = r.salience; // palace salience already incorporates recency
|
|
97
|
+
allResults[allResults.length - 1].score =
|
|
98
|
+
relevance * 0.50 + exactness * 0.30 + recency * 0.20;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Palace may not be initialized
|
|
103
|
+
}
|
|
104
|
+
// 2. Journal search
|
|
105
|
+
try {
|
|
106
|
+
const journalResults = await journalSearch({
|
|
107
|
+
query: input.query,
|
|
108
|
+
project: input.project,
|
|
109
|
+
include_palace: false,
|
|
110
|
+
});
|
|
111
|
+
sourcesQueried.push("journal");
|
|
112
|
+
totalSearched += journalResults.results.length;
|
|
113
|
+
for (const r of journalResults.results) {
|
|
114
|
+
const days = daysSince(r.date);
|
|
115
|
+
const recency = Math.pow(0.95, days);
|
|
116
|
+
const exactness = keywordExactness(input.query, r.excerpt);
|
|
117
|
+
const title = `${r.date} / ${r.section}`;
|
|
118
|
+
allResults.push({
|
|
119
|
+
id: stableId("journal", title),
|
|
120
|
+
source: "journal",
|
|
121
|
+
title,
|
|
122
|
+
excerpt: r.excerpt,
|
|
123
|
+
score: recency * 0.50 + exactness * 0.30 + recency * 0.20,
|
|
124
|
+
date: r.date,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Journal may not exist
|
|
130
|
+
}
|
|
131
|
+
// 3. Insight recall
|
|
132
|
+
try {
|
|
133
|
+
const insightResults = await recallInsight({
|
|
134
|
+
context: input.query,
|
|
135
|
+
limit: limit,
|
|
136
|
+
include_awareness: false,
|
|
137
|
+
});
|
|
138
|
+
sourcesQueried.push("insight");
|
|
139
|
+
totalSearched += insightResults.total_in_index;
|
|
140
|
+
// Normalize relevance scores
|
|
141
|
+
const maxRelevance = Math.max(1, ...insightResults.matching_insights.map((i) => i.relevance));
|
|
142
|
+
for (const i of insightResults.matching_insights) {
|
|
143
|
+
const relevance = i.relevance / maxRelevance;
|
|
144
|
+
const exactness = keywordExactness(input.query, i.title);
|
|
145
|
+
// Insights don't have dates, use confirmation count as a recency proxy
|
|
146
|
+
const recency = Math.min(1.0, Math.log2(i.confirmed + 1) / 3);
|
|
147
|
+
allResults.push({
|
|
148
|
+
id: stableId("insight", i.title),
|
|
149
|
+
source: "insight",
|
|
150
|
+
title: i.title,
|
|
151
|
+
excerpt: `[${i.severity}] ${i.applies_when.join(", ")}`,
|
|
152
|
+
score: relevance * 0.50 + exactness * 0.30 + recency * 0.20,
|
|
153
|
+
severity: i.severity,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Insights may be empty
|
|
159
|
+
}
|
|
160
|
+
// 4.5 Apply feedback adjustments — query-aware, ID-first matching
|
|
161
|
+
const feedbackLog = readFeedbackLog();
|
|
162
|
+
if (feedbackLog.length > 0) {
|
|
163
|
+
// Pre-filter: only feedback from similar queries
|
|
164
|
+
const queryWords = input.query.toLowerCase().split(/\s+/).filter((w) => w.length > 2);
|
|
165
|
+
const relevantFeedback = feedbackLog.filter((f) => {
|
|
166
|
+
if (!f.query)
|
|
167
|
+
return true; // legacy entries without query always apply
|
|
168
|
+
const fWords = f.query.toLowerCase().split(/\s+/).filter((w) => w.length > 2);
|
|
169
|
+
const overlap = queryWords.filter((w) => fWords.includes(w)).length;
|
|
170
|
+
return overlap > 0;
|
|
171
|
+
});
|
|
172
|
+
for (const r of allResults) {
|
|
173
|
+
const match = (f) => (f.id && f.id === r.id) || (f.title && f.title === r.title);
|
|
174
|
+
const positives = relevantFeedback.filter((f) => match(f) && f.useful).length;
|
|
175
|
+
const negatives = relevantFeedback.filter((f) => match(f) && !f.useful).length;
|
|
176
|
+
r.score += (positives * 0.03) - (negatives * 0.05);
|
|
177
|
+
r.score = Math.max(0, Math.min(1, r.score));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// 5. Deduplicate: if same excerpt appears in palace and journal, keep palace
|
|
181
|
+
const seen = new Set();
|
|
182
|
+
const deduped = [];
|
|
183
|
+
for (const r of allResults) {
|
|
184
|
+
const key = r.excerpt.toLowerCase().replace(/\s+/g, " ").trim();
|
|
185
|
+
if (seen.has(key))
|
|
186
|
+
continue;
|
|
187
|
+
seen.add(key);
|
|
188
|
+
deduped.push(r);
|
|
189
|
+
}
|
|
190
|
+
// 5. Sort by score descending, return top N
|
|
191
|
+
deduped.sort((a, b) => b.score - a.score);
|
|
192
|
+
return {
|
|
193
|
+
query: input.query,
|
|
194
|
+
results: deduped.slice(0, limit),
|
|
195
|
+
total_searched: totalSearched,
|
|
196
|
+
sources_queried: sourcesQueried,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=smart-recall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-recall.js","sourceRoot":"","sources":["../../src/tools-logic/smart-recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* smart_remember — classify content and route to the right memory store.
|
|
3
|
+
*
|
|
4
|
+
* Agents call one tool; the system figures out where it belongs.
|
|
5
|
+
* Pure keyword scoring, no LLM calls.
|
|
6
|
+
*/
|
|
7
|
+
export interface SmartRememberInput {
|
|
8
|
+
content: string;
|
|
9
|
+
context?: string;
|
|
10
|
+
project?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SmartRememberResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
routed_to: string;
|
|
15
|
+
classification: string;
|
|
16
|
+
auto_name: string;
|
|
17
|
+
result: unknown;
|
|
18
|
+
}
|
|
19
|
+
export declare function smartRemember(input: SmartRememberInput): Promise<SmartRememberResult>;
|
|
20
|
+
//# sourceMappingURL=smart-remember.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-remember.d.ts","sourceRoot":"","sources":["../../src/tools-logic/smart-remember.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAwED,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiE3F"}
|