agent-recall-core 3.3.10 → 3.3.12
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 +50 -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/helpers/journal-files.d.ts.map +1 -1
- package/dist/helpers/journal-files.js +28 -0
- package/dist/helpers/journal-files.js.map +1 -1
- 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 +107 -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/alignment-check.d.ts.map +1 -1
- package/dist/tools-logic/alignment-check.js +6 -1
- package/dist/tools-logic/alignment-check.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 +135 -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/journal-search.d.ts.map +1 -1
- package/dist/tools-logic/journal-search.js +29 -7
- package/dist/tools-logic/journal-search.js.map +1 -1
- package/dist/tools-logic/knowledge-write.d.ts.map +1 -1
- package/dist/tools-logic/knowledge-write.js +16 -3
- 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 +112 -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 +138 -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,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.60 + exactness * 0.40,
|
|
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;AA0ED,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiE3F"}
|
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
import { generateSlug, detectContentType } from "../helpers/auto-name.js";
|
|
8
|
+
import { journalCapture } from "./journal-capture.js";
|
|
9
|
+
import { palaceWrite } from "./palace-write.js";
|
|
10
|
+
import { knowledgeWrite } from "./knowledge-write.js";
|
|
11
|
+
import { awarenessUpdate } from "./awareness-update.js";
|
|
12
|
+
const ROUTE_SIGNALS = {
|
|
13
|
+
knowledge_write: [
|
|
14
|
+
/\bbug\b/i, /\bfix(ed)?\b/i, /\berror\b/i, /\broot cause\b/i, /\blesson\b/i,
|
|
15
|
+
/\bregression\b/i, /\bcrash(ed)?\b/i, /\bworkaround\b/i, /\bwhat happened\b/i,
|
|
16
|
+
/\bbroke\b/i, /\bexception\b/i, /\btraceback\b/i, /\bstacktrace\b/i,
|
|
17
|
+
/\bthrew\b/i, /\bpanic\b/i, /\bfailed\b/i, /\bnull pointer\b/i,
|
|
18
|
+
/\bundefined\b.*\berror\b/i, /\btypeerror\b/i, /\battributeerror\b/i,
|
|
19
|
+
],
|
|
20
|
+
awareness_update: [
|
|
21
|
+
/\balways\b/i, /\bnever\b/i, /\bpattern\b/i, /\bacross projects\b/i,
|
|
22
|
+
/\binsight\b/i, /\bgeneral rule\b/i, /\bapplies when\b/i, /\brealized\b/i,
|
|
23
|
+
/\bcross-project\b/i, /\bobserved that\b/i,
|
|
24
|
+
],
|
|
25
|
+
palace_write: [
|
|
26
|
+
/\barchitecture\b/i, /\bdecision\b/i, /\bdesign\b/i, /\bschema\b/i,
|
|
27
|
+
/\bapproach\b/i, /\bchose\b/i, /\bdecided\b/i, /\bwill use\b/i,
|
|
28
|
+
/\bstructure\b/i, /\bapi\b/i,
|
|
29
|
+
],
|
|
30
|
+
journal_capture: [
|
|
31
|
+
/\btoday\b/i, /\bsession\b/i, /\bcompleted\b/i, /\bworked on\b/i,
|
|
32
|
+
/\btried\b/i, /\bstatus\b/i, /\bprogress\b/i, /\bblocked\b/i,
|
|
33
|
+
/\bnext\b/i, /\bdid\b/i,
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
// Higher boost = more specific store. knowledge and awareness get slight boosts
|
|
37
|
+
// because they're more valuable when correctly classified.
|
|
38
|
+
const ROUTE_BOOSTS = {
|
|
39
|
+
knowledge_write: 1.2,
|
|
40
|
+
awareness_update: 1.3,
|
|
41
|
+
palace_write: 1.0,
|
|
42
|
+
journal_capture: 1.0,
|
|
43
|
+
};
|
|
44
|
+
function classifyRoute(content, context) {
|
|
45
|
+
const text = context ? `${context} ${content}` : content;
|
|
46
|
+
// Check context hint first (strong signal)
|
|
47
|
+
if (context) {
|
|
48
|
+
const lower = context.toLowerCase();
|
|
49
|
+
if (/bug|fix|error|regression|crash/i.test(lower))
|
|
50
|
+
return "knowledge_write";
|
|
51
|
+
if (/architecture|design|decision|schema/i.test(lower))
|
|
52
|
+
return "palace_write";
|
|
53
|
+
if (/insight|lesson|pattern|across/i.test(lower))
|
|
54
|
+
return "awareness_update";
|
|
55
|
+
if (/session|log|today|progress/i.test(lower))
|
|
56
|
+
return "journal_capture";
|
|
57
|
+
}
|
|
58
|
+
// Score each route
|
|
59
|
+
const scores = [];
|
|
60
|
+
for (const [route, patterns] of Object.entries(ROUTE_SIGNALS)) {
|
|
61
|
+
let count = 0;
|
|
62
|
+
for (const pattern of patterns) {
|
|
63
|
+
if (pattern.test(text))
|
|
64
|
+
count++;
|
|
65
|
+
}
|
|
66
|
+
scores.push({ route, score: count * ROUTE_BOOSTS[route] });
|
|
67
|
+
}
|
|
68
|
+
scores.sort((a, b) => b.score - a.score);
|
|
69
|
+
// Default to journal_capture if no clear signal
|
|
70
|
+
return scores[0].score > 0 ? scores[0].route : "journal_capture";
|
|
71
|
+
}
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Dispatch
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
export async function smartRemember(input) {
|
|
76
|
+
const route = classifyRoute(input.content, input.context);
|
|
77
|
+
const slugResult = generateSlug(input.content);
|
|
78
|
+
const autoName = slugResult.slug;
|
|
79
|
+
let result;
|
|
80
|
+
switch (route) {
|
|
81
|
+
case "journal_capture": {
|
|
82
|
+
result = await journalCapture({
|
|
83
|
+
question: "Auto-captured",
|
|
84
|
+
answer: input.content,
|
|
85
|
+
project: input.project,
|
|
86
|
+
});
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case "palace_write": {
|
|
90
|
+
// Use content type as room, auto-name generates the topic
|
|
91
|
+
const contentType = detectContentType(input.content);
|
|
92
|
+
const room = contentType === "general" ? "knowledge" : contentType;
|
|
93
|
+
result = await palaceWrite({
|
|
94
|
+
room,
|
|
95
|
+
content: input.content,
|
|
96
|
+
project: input.project,
|
|
97
|
+
auto_name: true,
|
|
98
|
+
});
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case "knowledge_write": {
|
|
102
|
+
// Extract title from first sentence or first line
|
|
103
|
+
const firstLine = input.content.split(/[.\n]/)[0]?.trim() ?? "Auto-captured lesson";
|
|
104
|
+
result = await knowledgeWrite({
|
|
105
|
+
category: slugResult.contentType,
|
|
106
|
+
title: firstLine.slice(0, 80),
|
|
107
|
+
what_happened: input.content,
|
|
108
|
+
root_cause: "See content",
|
|
109
|
+
fix: "See content",
|
|
110
|
+
project: input.project,
|
|
111
|
+
});
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case "awareness_update": {
|
|
115
|
+
// Extract title from first sentence
|
|
116
|
+
const title = input.content.split(/[.\n]/)[0]?.trim().slice(0, 80) ?? "Auto-captured insight";
|
|
117
|
+
result = await awarenessUpdate({
|
|
118
|
+
insights: [
|
|
119
|
+
{
|
|
120
|
+
title,
|
|
121
|
+
evidence: input.content,
|
|
122
|
+
applies_when: slugResult.keywords,
|
|
123
|
+
source: `smart_remember ${new Date().toISOString().slice(0, 10)}`,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
});
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
success: true,
|
|
132
|
+
routed_to: route,
|
|
133
|
+
classification: slugResult.contentType,
|
|
134
|
+
auto_name: autoName,
|
|
135
|
+
result,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=smart-remember.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-remember.js","sourceRoot":"","sources":["../../src/tools-logic/smart-remember.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared types, interfaces, and constants for agent-recall-mcp.
|
|
3
3
|
*/
|
|
4
|
-
export declare const VERSION = "3.3.
|
|
4
|
+
export declare const VERSION = "3.3.12";
|
|
5
5
|
/**
|
|
6
6
|
* Set the storage root directory. This is process-global state —
|
|
7
7
|
* only one root is active at a time. Call before any other operations.
|
package/dist/types.js
CHANGED
|
@@ -6,7 +6,7 @@ import * as os from "node:os";
|
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
7
|
// Constants
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
|
-
export const VERSION = "3.3.
|
|
9
|
+
export const VERSION = "3.3.12";
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
11
|
// Root directory (configurable at runtime for SDK usage)
|
|
12
12
|
// ---------------------------------------------------------------------------
|