bernard-agent 0.4.0 → 0.5.0
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 +69 -14
- package/THIRD-PARTY-NOTICES +212 -0
- package/dist/agent.d.ts +32 -3
- package/dist/agent.js +59 -11
- package/dist/agent.js.map +1 -1
- package/dist/config.d.ts +67 -0
- package/dist/config.js +82 -20
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +7 -0
- package/dist/context.js +4 -0
- package/dist/context.js.map +1 -1
- package/dist/cron/cli.d.ts +6 -0
- package/dist/cron/cli.js +8 -0
- package/dist/cron/cli.js.map +1 -1
- package/dist/cron/client.d.ts +9 -0
- package/dist/cron/client.js +9 -0
- package/dist/cron/client.js.map +1 -1
- package/dist/cron/daemon.js +8 -0
- package/dist/cron/daemon.js.map +1 -1
- package/dist/cron/log-store.d.ts +18 -0
- package/dist/cron/log-store.js +22 -7
- package/dist/cron/log-store.js.map +1 -1
- package/dist/cron/notify.d.ts +7 -0
- package/dist/cron/notify.js +16 -0
- package/dist/cron/notify.js.map +1 -1
- package/dist/cron/runner.d.ts +11 -0
- package/dist/cron/runner.js +63 -13
- package/dist/cron/runner.js.map +1 -1
- package/dist/cron/scheduler.d.ts +16 -0
- package/dist/cron/scheduler.js +16 -0
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/cron/store.d.ts +32 -0
- package/dist/cron/store.js +51 -24
- package/dist/cron/store.js.map +1 -1
- package/dist/cron/types.d.ts +19 -0
- package/dist/domains.d.ts +15 -0
- package/dist/domains.js +19 -0
- package/dist/domains.js.map +1 -1
- package/dist/embeddings.d.ts +7 -1
- package/dist/embeddings.js +43 -1
- package/dist/embeddings.js.map +1 -1
- package/dist/facts-cli.d.ts +14 -0
- package/dist/facts-cli.js +51 -0
- package/dist/facts-cli.js.map +1 -1
- package/dist/history.d.ts +8 -0
- package/dist/history.js +14 -9
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +6 -0
- package/dist/logger.js +6 -0
- package/dist/logger.js.map +1 -1
- package/dist/mcp.d.ts +87 -0
- package/dist/mcp.js +106 -25
- package/dist/mcp.js.map +1 -1
- package/dist/memory-context.d.ts +4 -0
- package/dist/memory-context.js +4 -2
- package/dist/memory-context.js.map +1 -1
- package/dist/memory.d.ts +17 -0
- package/dist/memory.js +23 -7
- package/dist/memory.js.map +1 -1
- package/dist/migrate.d.ts +13 -0
- package/dist/migrate.js +209 -0
- package/dist/migrate.js.map +1 -0
- package/dist/output.d.ts +45 -0
- package/dist/output.js +61 -0
- package/dist/output.js.map +1 -1
- package/dist/paths.d.ts +23 -0
- package/dist/paths.js +82 -0
- package/dist/paths.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.js +7 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/types.d.ts +4 -0
- package/dist/rag-query.d.ts +20 -0
- package/dist/rag-query.js +69 -3
- package/dist/rag-query.js.map +1 -1
- package/dist/rag-worker.js.map +1 -1
- package/dist/rag.d.ts +27 -0
- package/dist/rag.js +29 -19
- package/dist/rag.js.map +1 -1
- package/dist/repl.d.ts +6 -0
- package/dist/repl.js +147 -9
- package/dist/repl.js.map +1 -1
- package/dist/routines.d.ts +49 -0
- package/dist/routines.js +172 -0
- package/dist/routines.js.map +1 -0
- package/dist/setup.d.ts +5 -0
- package/dist/setup.js +7 -1
- package/dist/setup.js.map +1 -1
- package/dist/theme.d.ts +41 -0
- package/dist/theme.js +25 -0
- package/dist/theme.js.map +1 -1
- package/dist/tools/cron-logs.d.ts +6 -0
- package/dist/tools/cron-logs.js +6 -0
- package/dist/tools/cron-logs.js.map +1 -1
- package/dist/tools/cron.d.ts +7 -0
- package/dist/tools/cron.js +7 -0
- package/dist/tools/cron.js.map +1 -1
- package/dist/tools/datetime.d.ts +1 -0
- package/dist/tools/datetime.js +1 -0
- package/dist/tools/datetime.js.map +1 -1
- package/dist/tools/index.d.ts +10 -336
- package/dist/tools/index.js +11 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp-url.d.ts +6 -0
- package/dist/tools/mcp-url.js +6 -0
- package/dist/tools/mcp-url.js.map +1 -1
- package/dist/tools/mcp.d.ts +6 -0
- package/dist/tools/mcp.js +6 -0
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/memory.d.ts +14 -0
- package/dist/tools/memory.js +16 -1
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/routine.d.ts +35 -0
- package/dist/tools/routine.js +93 -0
- package/dist/tools/routine.js.map +1 -0
- package/dist/tools/shell.d.ts +15 -1
- package/dist/tools/shell.js +15 -1
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/subagent.d.ts +18 -1
- package/dist/tools/subagent.js +18 -1
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/time.d.ts +19 -0
- package/dist/tools/time.js +19 -0
- package/dist/tools/time.js.map +1 -1
- package/dist/tools/types.d.ts +6 -0
- package/dist/tools/wait.d.ts +3 -0
- package/dist/tools/wait.js +3 -0
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/web.d.ts +6 -0
- package/dist/tools/web.js +11 -1
- package/dist/tools/web.js.map +1 -1
- package/dist/update.d.ts +5 -0
- package/dist/update.js +4 -5
- package/dist/update.js.map +1 -1
- package/package.json +2 -1
package/dist/cron/store.d.ts
CHANGED
|
@@ -1,20 +1,52 @@
|
|
|
1
1
|
import type { CronJob, CronAlert } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Disk-backed store for cron jobs and alerts.
|
|
4
|
+
*
|
|
5
|
+
* Jobs are persisted as a single `jobs.json` array; alerts are individual
|
|
6
|
+
* JSON files inside `alerts/`. All writes use atomic rename to prevent
|
|
7
|
+
* partial-read corruption when the daemon `fs.watch`es for changes.
|
|
8
|
+
*/
|
|
2
9
|
export declare class CronStore {
|
|
10
|
+
/** Ensures the cron and alerts directories and `jobs.json` exist on disk. */
|
|
3
11
|
constructor();
|
|
12
|
+
/** Absolute path to the cron data directory. */
|
|
4
13
|
static get cronDir(): string;
|
|
14
|
+
/** Absolute path to the cron jobs file. */
|
|
5
15
|
static get jobsFile(): string;
|
|
16
|
+
/** Absolute path to the cron alerts directory. */
|
|
6
17
|
static get alertsDir(): string;
|
|
18
|
+
/** Absolute path to the daemon PID file. */
|
|
7
19
|
static get pidFile(): string;
|
|
20
|
+
/** Absolute path to the daemon log file. */
|
|
8
21
|
static get logFile(): string;
|
|
22
|
+
/** Reads and parses all jobs from `jobs.json`, returning an empty array on missing or corrupt file. */
|
|
9
23
|
loadJobs(): CronJob[];
|
|
24
|
+
/** Atomically writes the full jobs array to `jobs.json`. */
|
|
10
25
|
saveJobs(jobs: CronJob[]): void;
|
|
26
|
+
/** Returns a single job by ID, or `undefined` if not found. */
|
|
11
27
|
getJob(id: string): CronJob | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new cron job and persists it.
|
|
30
|
+
*
|
|
31
|
+
* @throws {Error} If the maximum number of jobs ({@link MAX_JOBS}) has been reached.
|
|
32
|
+
*/
|
|
12
33
|
createJob(name: string, schedule: string, prompt: string): CronJob;
|
|
34
|
+
/**
|
|
35
|
+
* Applies partial updates to an existing job and persists the result.
|
|
36
|
+
*
|
|
37
|
+
* @returns The updated job, or `undefined` if the ID was not found.
|
|
38
|
+
*/
|
|
13
39
|
updateJob(id: string, updates: Partial<Pick<CronJob, 'name' | 'schedule' | 'prompt' | 'enabled' | 'lastRun' | 'lastRunStatus' | 'lastResult'>>): CronJob | undefined;
|
|
40
|
+
/** Removes a job by ID. Returns `true` if the job existed and was deleted. */
|
|
14
41
|
deleteJob(id: string): boolean;
|
|
42
|
+
/** Creates a new alert file in the alerts directory with auto-generated ID and timestamp. */
|
|
15
43
|
createAlert(alert: Omit<CronAlert, 'id' | 'timestamp' | 'acknowledged'>): CronAlert;
|
|
44
|
+
/** Returns a single alert by ID, or `undefined` if not found or corrupt. */
|
|
16
45
|
getAlert(id: string): CronAlert | undefined;
|
|
46
|
+
/** Returns all alerts sorted newest-first, skipping any corrupt files. */
|
|
17
47
|
listAlerts(): CronAlert[];
|
|
48
|
+
/** Marks an alert as acknowledged. Returns `false` if the alert was not found. */
|
|
18
49
|
acknowledgeAlert(id: string): boolean;
|
|
50
|
+
/** Writes data to a `.tmp` file then renames it into place for crash-safe persistence. */
|
|
19
51
|
private atomicWrite;
|
|
20
52
|
}
|
package/dist/cron/store.js
CHANGED
|
@@ -36,44 +36,53 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.CronStore = void 0;
|
|
37
37
|
const fs = __importStar(require("node:fs"));
|
|
38
38
|
const path = __importStar(require("node:path"));
|
|
39
|
-
const os = __importStar(require("node:os"));
|
|
40
39
|
const crypto = __importStar(require("node:crypto"));
|
|
41
|
-
const
|
|
42
|
-
const JOBS_FILE = path.join(CRON_DIR, 'jobs.json');
|
|
43
|
-
const ALERTS_DIR = path.join(CRON_DIR, 'alerts');
|
|
44
|
-
const PID_FILE = path.join(CRON_DIR, 'daemon.pid');
|
|
45
|
-
const LOG_FILE = path.join(CRON_DIR, 'daemon.log');
|
|
40
|
+
const paths_js_1 = require("../paths.js");
|
|
46
41
|
const MAX_JOBS = 50;
|
|
42
|
+
/**
|
|
43
|
+
* Disk-backed store for cron jobs and alerts.
|
|
44
|
+
*
|
|
45
|
+
* Jobs are persisted as a single `jobs.json` array; alerts are individual
|
|
46
|
+
* JSON files inside `alerts/`. All writes use atomic rename to prevent
|
|
47
|
+
* partial-read corruption when the daemon `fs.watch`es for changes.
|
|
48
|
+
*/
|
|
47
49
|
class CronStore {
|
|
50
|
+
/** Ensures the cron and alerts directories and `jobs.json` exist on disk. */
|
|
48
51
|
constructor() {
|
|
49
|
-
fs.mkdirSync(CRON_DIR, { recursive: true });
|
|
50
|
-
fs.mkdirSync(
|
|
52
|
+
fs.mkdirSync(paths_js_1.CRON_DIR, { recursive: true });
|
|
53
|
+
fs.mkdirSync(paths_js_1.CRON_ALERTS_DIR, { recursive: true });
|
|
51
54
|
// Ensure jobs.json exists so daemon can fs.watch it
|
|
52
|
-
if (!fs.existsSync(
|
|
53
|
-
this.atomicWrite(
|
|
55
|
+
if (!fs.existsSync(paths_js_1.CRON_JOBS_FILE)) {
|
|
56
|
+
this.atomicWrite(paths_js_1.CRON_JOBS_FILE, '[]');
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
// --- Paths ---
|
|
60
|
+
/** Absolute path to the cron data directory. */
|
|
57
61
|
static get cronDir() {
|
|
58
|
-
return CRON_DIR;
|
|
62
|
+
return paths_js_1.CRON_DIR;
|
|
59
63
|
}
|
|
64
|
+
/** Absolute path to the cron jobs file. */
|
|
60
65
|
static get jobsFile() {
|
|
61
|
-
return
|
|
66
|
+
return paths_js_1.CRON_JOBS_FILE;
|
|
62
67
|
}
|
|
68
|
+
/** Absolute path to the cron alerts directory. */
|
|
63
69
|
static get alertsDir() {
|
|
64
|
-
return
|
|
70
|
+
return paths_js_1.CRON_ALERTS_DIR;
|
|
65
71
|
}
|
|
72
|
+
/** Absolute path to the daemon PID file. */
|
|
66
73
|
static get pidFile() {
|
|
67
|
-
return
|
|
74
|
+
return paths_js_1.CRON_PID_FILE;
|
|
68
75
|
}
|
|
76
|
+
/** Absolute path to the daemon log file. */
|
|
69
77
|
static get logFile() {
|
|
70
|
-
return
|
|
78
|
+
return paths_js_1.CRON_LOG_FILE;
|
|
71
79
|
}
|
|
72
80
|
// --- Jobs ---
|
|
81
|
+
/** Reads and parses all jobs from `jobs.json`, returning an empty array on missing or corrupt file. */
|
|
73
82
|
loadJobs() {
|
|
74
|
-
if (!fs.existsSync(
|
|
83
|
+
if (!fs.existsSync(paths_js_1.CRON_JOBS_FILE))
|
|
75
84
|
return [];
|
|
76
|
-
const raw = fs.readFileSync(
|
|
85
|
+
const raw = fs.readFileSync(paths_js_1.CRON_JOBS_FILE, 'utf-8');
|
|
77
86
|
try {
|
|
78
87
|
return JSON.parse(raw);
|
|
79
88
|
}
|
|
@@ -81,12 +90,19 @@ class CronStore {
|
|
|
81
90
|
return [];
|
|
82
91
|
}
|
|
83
92
|
}
|
|
93
|
+
/** Atomically writes the full jobs array to `jobs.json`. */
|
|
84
94
|
saveJobs(jobs) {
|
|
85
|
-
this.atomicWrite(
|
|
95
|
+
this.atomicWrite(paths_js_1.CRON_JOBS_FILE, JSON.stringify(jobs, null, 2));
|
|
86
96
|
}
|
|
97
|
+
/** Returns a single job by ID, or `undefined` if not found. */
|
|
87
98
|
getJob(id) {
|
|
88
99
|
return this.loadJobs().find((j) => j.id === id);
|
|
89
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Creates a new cron job and persists it.
|
|
103
|
+
*
|
|
104
|
+
* @throws {Error} If the maximum number of jobs ({@link MAX_JOBS}) has been reached.
|
|
105
|
+
*/
|
|
90
106
|
createJob(name, schedule, prompt) {
|
|
91
107
|
const jobs = this.loadJobs();
|
|
92
108
|
if (jobs.length >= MAX_JOBS) {
|
|
@@ -104,6 +120,11 @@ class CronStore {
|
|
|
104
120
|
this.saveJobs(jobs);
|
|
105
121
|
return job;
|
|
106
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Applies partial updates to an existing job and persists the result.
|
|
125
|
+
*
|
|
126
|
+
* @returns The updated job, or `undefined` if the ID was not found.
|
|
127
|
+
*/
|
|
107
128
|
updateJob(id, updates) {
|
|
108
129
|
const jobs = this.loadJobs();
|
|
109
130
|
const idx = jobs.findIndex((j) => j.id === id);
|
|
@@ -113,6 +134,7 @@ class CronStore {
|
|
|
113
134
|
this.saveJobs(jobs);
|
|
114
135
|
return jobs[idx];
|
|
115
136
|
}
|
|
137
|
+
/** Removes a job by ID. Returns `true` if the job existed and was deleted. */
|
|
116
138
|
deleteJob(id) {
|
|
117
139
|
const jobs = this.loadJobs();
|
|
118
140
|
const filtered = jobs.filter((j) => j.id !== id);
|
|
@@ -122,6 +144,7 @@ class CronStore {
|
|
|
122
144
|
return true;
|
|
123
145
|
}
|
|
124
146
|
// --- Alerts ---
|
|
147
|
+
/** Creates a new alert file in the alerts directory with auto-generated ID and timestamp. */
|
|
125
148
|
createAlert(alert) {
|
|
126
149
|
const full = {
|
|
127
150
|
...alert,
|
|
@@ -129,12 +152,13 @@ class CronStore {
|
|
|
129
152
|
timestamp: new Date().toISOString(),
|
|
130
153
|
acknowledged: false,
|
|
131
154
|
};
|
|
132
|
-
const filePath = path.join(
|
|
155
|
+
const filePath = path.join(paths_js_1.CRON_ALERTS_DIR, `${full.id}.json`);
|
|
133
156
|
this.atomicWrite(filePath, JSON.stringify(full, null, 2));
|
|
134
157
|
return full;
|
|
135
158
|
}
|
|
159
|
+
/** Returns a single alert by ID, or `undefined` if not found or corrupt. */
|
|
136
160
|
getAlert(id) {
|
|
137
|
-
const filePath = path.join(
|
|
161
|
+
const filePath = path.join(paths_js_1.CRON_ALERTS_DIR, `${id}.json`);
|
|
138
162
|
if (!fs.existsSync(filePath))
|
|
139
163
|
return undefined;
|
|
140
164
|
try {
|
|
@@ -144,14 +168,15 @@ class CronStore {
|
|
|
144
168
|
return undefined;
|
|
145
169
|
}
|
|
146
170
|
}
|
|
171
|
+
/** Returns all alerts sorted newest-first, skipping any corrupt files. */
|
|
147
172
|
listAlerts() {
|
|
148
|
-
if (!fs.existsSync(
|
|
173
|
+
if (!fs.existsSync(paths_js_1.CRON_ALERTS_DIR))
|
|
149
174
|
return [];
|
|
150
|
-
const files = fs.readdirSync(
|
|
175
|
+
const files = fs.readdirSync(paths_js_1.CRON_ALERTS_DIR).filter((f) => f.endsWith('.json'));
|
|
151
176
|
const alerts = [];
|
|
152
177
|
for (const file of files) {
|
|
153
178
|
try {
|
|
154
|
-
const raw = fs.readFileSync(path.join(
|
|
179
|
+
const raw = fs.readFileSync(path.join(paths_js_1.CRON_ALERTS_DIR, file), 'utf-8');
|
|
155
180
|
alerts.push(JSON.parse(raw));
|
|
156
181
|
}
|
|
157
182
|
catch {
|
|
@@ -160,16 +185,18 @@ class CronStore {
|
|
|
160
185
|
}
|
|
161
186
|
return alerts.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
|
|
162
187
|
}
|
|
188
|
+
/** Marks an alert as acknowledged. Returns `false` if the alert was not found. */
|
|
163
189
|
acknowledgeAlert(id) {
|
|
164
190
|
const alert = this.getAlert(id);
|
|
165
191
|
if (!alert)
|
|
166
192
|
return false;
|
|
167
193
|
alert.acknowledged = true;
|
|
168
|
-
const filePath = path.join(
|
|
194
|
+
const filePath = path.join(paths_js_1.CRON_ALERTS_DIR, `${id}.json`);
|
|
169
195
|
this.atomicWrite(filePath, JSON.stringify(alert, null, 2));
|
|
170
196
|
return true;
|
|
171
197
|
}
|
|
172
198
|
// --- Utility ---
|
|
199
|
+
/** Writes data to a `.tmp` file then renames it into place for crash-safe persistence. */
|
|
173
200
|
atomicWrite(filePath, data) {
|
|
174
201
|
const tmp = filePath + '.tmp';
|
|
175
202
|
fs.writeFileSync(tmp, data, 'utf-8');
|
package/dist/cron/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cron/store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cron/store.ts"],"names":[],"mappings":"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"}
|
package/dist/cron/types.d.ts
CHANGED
|
@@ -1,21 +1,40 @@
|
|
|
1
|
+
/** A recurring task that Bernard executes on a cron schedule. */
|
|
1
2
|
export interface CronJob {
|
|
3
|
+
/** Unique identifier (UUID). */
|
|
2
4
|
id: string;
|
|
5
|
+
/** Human-readable label for the job. */
|
|
3
6
|
name: string;
|
|
7
|
+
/** Cron expression (e.g. "0 * * * *") defining when the job runs. */
|
|
4
8
|
schedule: string;
|
|
9
|
+
/** The prompt sent to the agent when the job fires. */
|
|
5
10
|
prompt: string;
|
|
11
|
+
/** Whether the job is active; disabled jobs are skipped by the scheduler. */
|
|
6
12
|
enabled: boolean;
|
|
13
|
+
/** ISO-8601 timestamp of when the job was created. */
|
|
7
14
|
createdAt: string;
|
|
15
|
+
/** ISO-8601 timestamp of the most recent execution, if any. */
|
|
8
16
|
lastRun?: string;
|
|
17
|
+
/** Outcome of the most recent execution. */
|
|
9
18
|
lastRunStatus?: 'success' | 'error' | 'running';
|
|
19
|
+
/** Truncated agent response from the most recent execution. */
|
|
10
20
|
lastResult?: string;
|
|
11
21
|
}
|
|
22
|
+
/** A notification generated when a cron job completes and produces output. */
|
|
12
23
|
export interface CronAlert {
|
|
24
|
+
/** Unique identifier (UUID). */
|
|
13
25
|
id: string;
|
|
26
|
+
/** ID of the {@link CronJob} that triggered this alert. */
|
|
14
27
|
jobId: string;
|
|
28
|
+
/** Snapshot of the job's name at the time the alert was created. */
|
|
15
29
|
jobName: string;
|
|
30
|
+
/** Short summary of what happened. */
|
|
16
31
|
message: string;
|
|
32
|
+
/** ISO-8601 timestamp of when the alert was created. */
|
|
17
33
|
timestamp: string;
|
|
34
|
+
/** The prompt that was executed. */
|
|
18
35
|
prompt: string;
|
|
36
|
+
/** Full agent response text. */
|
|
19
37
|
response: string;
|
|
38
|
+
/** Whether the user has dismissed this alert. */
|
|
20
39
|
acknowledged: boolean;
|
|
21
40
|
}
|
package/dist/domains.d.ts
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Describes a RAG memory domain — a category of facts with its own extraction prompt.
|
|
3
|
+
*/
|
|
1
4
|
export interface MemoryDomain {
|
|
5
|
+
/** Unique identifier used as the storage key (e.g. `"tool-usage"`). */
|
|
2
6
|
id: string;
|
|
7
|
+
/** Human-readable display name shown in `/rag` and `/facts` output. */
|
|
3
8
|
name: string;
|
|
9
|
+
/** Short summary of what facts this domain captures. */
|
|
4
10
|
description: string;
|
|
11
|
+
/** Full LLM system prompt used to extract facts for this domain from a conversation. */
|
|
5
12
|
extractionPrompt: string;
|
|
6
13
|
}
|
|
14
|
+
/** Domain ID used as the fallback when a requested domain is not found in the registry. */
|
|
7
15
|
export declare const DEFAULT_DOMAIN = "general";
|
|
16
|
+
/** Registry of all known memory domains, keyed by domain ID. */
|
|
8
17
|
export declare const DOMAIN_REGISTRY: Record<string, MemoryDomain>;
|
|
18
|
+
/** Return the IDs of all registered memory domains. */
|
|
9
19
|
export declare function getDomainIds(): string[];
|
|
20
|
+
/**
|
|
21
|
+
* Look up a memory domain by ID, falling back to `DEFAULT_DOMAIN` if not found.
|
|
22
|
+
* @param id - Domain identifier to look up.
|
|
23
|
+
* @returns The matching {@link MemoryDomain}, or the `general` domain if `id` is unknown.
|
|
24
|
+
*/
|
|
10
25
|
export declare function getDomain(id: string): MemoryDomain;
|
package/dist/domains.js
CHANGED
|
@@ -3,13 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DOMAIN_REGISTRY = exports.DEFAULT_DOMAIN = void 0;
|
|
4
4
|
exports.getDomainIds = getDomainIds;
|
|
5
5
|
exports.getDomain = getDomain;
|
|
6
|
+
/** Domain ID used as the fallback when a requested domain is not found in the registry. */
|
|
6
7
|
exports.DEFAULT_DOMAIN = 'general';
|
|
8
|
+
/** Shared preamble describing the serialized tool interaction formats found in conversations. */
|
|
9
|
+
const TOOL_FORMAT_PREAMBLE = `
|
|
10
|
+
The conversation may contain serialized tool interactions in these formats:
|
|
11
|
+
- "Assistant [tool call]: toolName(args)" — an AI assistant invoking a tool
|
|
12
|
+
- "Tool [name]: result" — the tool's response/output`;
|
|
13
|
+
/** Registry of all known memory domains, keyed by domain ID. */
|
|
7
14
|
exports.DOMAIN_REGISTRY = {
|
|
8
15
|
'tool-usage': {
|
|
9
16
|
id: 'tool-usage',
|
|
10
17
|
name: 'Tool Usage Patterns',
|
|
11
18
|
description: 'Command sequences, tool interaction patterns, error resolutions, build/deploy workflows',
|
|
12
19
|
extractionPrompt: `You are a tool-usage pattern extractor. Extract durable, reusable facts about how tools, commands, and workflows are used in the conversation below. Focus on lessons learned and patterns that would be useful in future sessions.
|
|
20
|
+
${TOOL_FORMAT_PREAMBLE}
|
|
21
|
+
Use tool call/result pairs as primary evidence for command sequences, error resolutions, and workflow patterns.
|
|
13
22
|
|
|
14
23
|
Extract:
|
|
15
24
|
- Shell command sequences and pipelines that accomplished a task
|
|
@@ -45,6 +54,8 @@ Return a JSON array of strings. Each string should be a self-contained fact (und
|
|
|
45
54
|
name: 'User Preferences',
|
|
46
55
|
description: 'Communication style, workflow conventions, repeated instructions, naming preferences',
|
|
47
56
|
extractionPrompt: `You are a user preference extractor. Extract durable, long-term facts about the user's preferences, habits, and conventions from the conversation below. Only extract preferences that would apply across multiple sessions and tasks.
|
|
57
|
+
${TOOL_FORMAT_PREAMBLE}
|
|
58
|
+
Tool outputs may reveal user preferences such as preferred editors, package managers, shell configurations, and workflow habits.
|
|
48
59
|
|
|
49
60
|
Extract:
|
|
50
61
|
- Communication style preferences (verbosity, tone, format)
|
|
@@ -78,6 +89,8 @@ Return a JSON array of strings. Each string should be a self-contained fact (und
|
|
|
78
89
|
name: 'General Knowledge',
|
|
79
90
|
description: 'Project structure, architecture decisions, environment info, team context',
|
|
80
91
|
extractionPrompt: `You are a general knowledge extractor. Extract durable, long-term facts about the project, environment, people, and context from the conversation below. Focus on knowledge that remains true across sessions — not ephemeral task state.
|
|
92
|
+
${TOOL_FORMAT_PREAMBLE}
|
|
93
|
+
Tool results may contain project structure, environment details, configuration values, and other durable facts worth extracting.
|
|
81
94
|
|
|
82
95
|
Extract:
|
|
83
96
|
- Project structure, architecture, and design decisions
|
|
@@ -109,9 +122,15 @@ Examples:
|
|
|
109
122
|
Return a JSON array of strings. Each string should be a self-contained fact (understandable without the original conversation). Maximum 500 characters per fact. If there are no notable facts, return an empty array [].`,
|
|
110
123
|
},
|
|
111
124
|
};
|
|
125
|
+
/** Return the IDs of all registered memory domains. */
|
|
112
126
|
function getDomainIds() {
|
|
113
127
|
return Object.keys(exports.DOMAIN_REGISTRY);
|
|
114
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Look up a memory domain by ID, falling back to `DEFAULT_DOMAIN` if not found.
|
|
131
|
+
* @param id - Domain identifier to look up.
|
|
132
|
+
* @returns The matching {@link MemoryDomain}, or the `general` domain if `id` is unknown.
|
|
133
|
+
*/
|
|
115
134
|
function getDomain(id) {
|
|
116
135
|
return exports.DOMAIN_REGISTRY[id] ?? exports.DOMAIN_REGISTRY[exports.DEFAULT_DOMAIN];
|
|
117
136
|
}
|
package/dist/domains.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../src/domains.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../src/domains.ts"],"names":[],"mappings":";;;AA6IA,oCAEC;AAOD,8BAEC;AA1ID,2FAA2F;AAC9E,QAAA,cAAc,GAAG,SAAS,CAAC;AAExC,iGAAiG;AACjG,MAAM,oBAAoB,GAAG;;;qDAGwB,CAAC;AAEtD,gEAAgE;AACnD,QAAA,eAAe,GAAiC;IAC3D,YAAY,EAAE;QACZ,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,yFAAyF;QAC3F,gBAAgB,EAAE;EACpB,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0NA8BoM;KACvN;IAED,kBAAkB,EAAE;QAClB,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,sFAAsF;QACxF,gBAAgB,EAAE;EACpB,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;0NA4BoM;KACvN;IAED,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,2EAA2E;QACxF,gBAAgB,EAAE;EACpB,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0NA8BoM;KACvN;CACF,CAAC;AAEF,uDAAuD;AACvD,SAAgB,YAAY;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,uBAAe,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CAAC,EAAU;IAClC,OAAO,uBAAe,CAAC,EAAE,CAAC,IAAI,uBAAe,CAAC,sBAAc,CAAC,CAAC;AAChE,CAAC"}
|
package/dist/embeddings.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
/** Abstraction over a text embedding model used by the RAG subsystem. */
|
|
1
2
|
export interface EmbeddingProvider {
|
|
3
|
+
/** Compute embedding vectors for one or more text strings. */
|
|
2
4
|
embed(texts: string[]): Promise<number[][]>;
|
|
5
|
+
/** Return the dimensionality of the embedding vectors produced by this provider. */
|
|
3
6
|
dimensions(): number;
|
|
4
7
|
}
|
|
5
8
|
/**
|
|
@@ -10,5 +13,8 @@ export interface EmbeddingProvider {
|
|
|
10
13
|
export declare function getEmbeddingProvider(): Promise<EmbeddingProvider | null>;
|
|
11
14
|
/** Cosine similarity between two vectors. Returns 0 for zero-length vectors. */
|
|
12
15
|
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
13
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Reset cached provider — for testing only.
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
14
20
|
export declare function _resetEmbeddingProvider(): void;
|
package/dist/embeddings.js
CHANGED
|
@@ -1,9 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.getEmbeddingProvider = getEmbeddingProvider;
|
|
4
37
|
exports.cosineSimilarity = cosineSimilarity;
|
|
5
38
|
exports._resetEmbeddingProvider = _resetEmbeddingProvider;
|
|
39
|
+
const fs = __importStar(require("node:fs"));
|
|
6
40
|
const logger_js_1 = require("./logger.js");
|
|
41
|
+
const paths_js_1 = require("./paths.js");
|
|
7
42
|
let cachedProvider;
|
|
8
43
|
/**
|
|
9
44
|
* Lazily load fastembed and return an EmbeddingProvider.
|
|
@@ -15,8 +50,12 @@ async function getEmbeddingProvider() {
|
|
|
15
50
|
return cachedProvider;
|
|
16
51
|
try {
|
|
17
52
|
const { EmbeddingModel, FlagEmbedding } = await import('fastembed');
|
|
53
|
+
fs.mkdirSync(paths_js_1.MODELS_DIR, { recursive: true });
|
|
54
|
+
(0, logger_js_1.debugLog)('embeddings:init', 'Loading embedding model (may download on first run)...');
|
|
18
55
|
const model = await FlagEmbedding.init({
|
|
19
56
|
model: EmbeddingModel.AllMiniLML6V2,
|
|
57
|
+
cacheDir: paths_js_1.MODELS_DIR,
|
|
58
|
+
showDownloadProgress: false,
|
|
20
59
|
});
|
|
21
60
|
cachedProvider = {
|
|
22
61
|
async embed(texts) {
|
|
@@ -54,7 +93,10 @@ function cosineSimilarity(a, b) {
|
|
|
54
93
|
return 0;
|
|
55
94
|
return dot / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
56
95
|
}
|
|
57
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Reset cached provider — for testing only.
|
|
98
|
+
* @internal
|
|
99
|
+
*/
|
|
58
100
|
function _resetEmbeddingProvider() {
|
|
59
101
|
cachedProvider = undefined;
|
|
60
102
|
}
|
package/dist/embeddings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,oDAmCC;AAGD,4CAeC;AAMD,0DAEC;AAhFD,4CAA8B;AAC9B,2CAAuC;AACvC,yCAAwC;AAUxC,IAAI,cAAoD,CAAC;AAEzD;;;;GAIG;AACI,KAAK,UAAU,oBAAoB;IACxC,IAAI,cAAc,KAAK,SAAS;QAAE,OAAO,cAAc,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACpE,EAAE,CAAC,SAAS,CAAC,qBAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAA,oBAAQ,EAAC,iBAAiB,EAAE,wDAAwD,CAAC,CAAC;QACtF,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;YACrC,KAAK,EAAE,cAAc,CAAC,aAAa;YACnC,QAAQ,EAAE,qBAAU;YACpB,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAC;QAEH,cAAc,GAAG;YACf,KAAK,CAAC,KAAK,CAAC,KAAe;gBACzB,MAAM,OAAO,GAAe,EAAE,CAAC;gBAC/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBACzB,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,UAAU;gBACR,OAAO,GAAG,CAAC;YACb,CAAC;SACF,CAAC;QAEF,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAA,oBAAQ,EACN,iBAAiB,EACjB,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAChF,CAAC;QACF,cAAc,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAgB,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB;IACrC,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC"}
|
package/dist/facts-cli.d.ts
CHANGED
|
@@ -3,5 +3,19 @@
|
|
|
3
3
|
* Returns sorted deduplicated 1-based indices, or null if invalid.
|
|
4
4
|
*/
|
|
5
5
|
export declare function parseSelection(input: string, max: number): number[] | null;
|
|
6
|
+
/**
|
|
7
|
+
* List all stored RAG facts grouped by domain and optionally delete selected entries.
|
|
8
|
+
* Used by the `bernard facts` CLI command (no query argument).
|
|
9
|
+
*/
|
|
6
10
|
export declare function factsList(): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Permanently delete all RAG facts after interactive confirmation.
|
|
13
|
+
* Requires the user to type an exact confirmation phrase.
|
|
14
|
+
*/
|
|
15
|
+
export declare function clearFacts(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Search RAG facts by semantic similarity and optionally delete selected results.
|
|
18
|
+
* If `query` is a path to an existing file, its contents are used as the search text.
|
|
19
|
+
* @param query - Free-text search string or path to a file whose contents serve as the query.
|
|
20
|
+
*/
|
|
7
21
|
export declare function factsSearch(query: string): Promise<void>;
|
package/dist/facts-cli.js
CHANGED
|
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.parseSelection = parseSelection;
|
|
37
37
|
exports.factsList = factsList;
|
|
38
|
+
exports.clearFacts = clearFacts;
|
|
38
39
|
exports.factsSearch = factsSearch;
|
|
39
40
|
const fs = __importStar(require("node:fs"));
|
|
40
41
|
const readline = __importStar(require("node:readline"));
|
|
@@ -42,6 +43,7 @@ const rag_js_1 = require("./rag.js");
|
|
|
42
43
|
const domains_js_1 = require("./domains.js");
|
|
43
44
|
const config_js_1 = require("./config.js");
|
|
44
45
|
const output_js_1 = require("./output.js");
|
|
46
|
+
const paths_js_1 = require("./paths.js");
|
|
45
47
|
const MAX_FILE_QUERY_LENGTH = 10000;
|
|
46
48
|
function confirm(prompt) {
|
|
47
49
|
return new Promise((resolve) => {
|
|
@@ -152,6 +154,10 @@ async function promptDelete(results, ragStore) {
|
|
|
152
154
|
const deleted = ragStore.deleteByIds(ids);
|
|
153
155
|
(0, output_js_1.printInfo)(`Deleted ${deleted} fact(s).`);
|
|
154
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* List all stored RAG facts grouped by domain and optionally delete selected entries.
|
|
159
|
+
* Used by the `bernard facts` CLI command (no query argument).
|
|
160
|
+
*/
|
|
155
161
|
async function factsList() {
|
|
156
162
|
const config = (0, config_js_1.loadConfig)();
|
|
157
163
|
if (!config.ragEnabled) {
|
|
@@ -167,6 +173,51 @@ async function factsList() {
|
|
|
167
173
|
displayResults(results, false);
|
|
168
174
|
await promptDelete(results, ragStore);
|
|
169
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Permanently delete all RAG facts after interactive confirmation.
|
|
178
|
+
* Requires the user to type an exact confirmation phrase.
|
|
179
|
+
*/
|
|
180
|
+
async function clearFacts() {
|
|
181
|
+
const config = (0, config_js_1.loadConfig)();
|
|
182
|
+
if (!config.ragEnabled) {
|
|
183
|
+
(0, output_js_1.printInfo)('RAG is disabled. Set BERNARD_RAG_ENABLED=true to enable.');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const ragStore = new rag_js_1.RAGStore();
|
|
187
|
+
const total = ragStore.count();
|
|
188
|
+
if (total === 0) {
|
|
189
|
+
(0, output_js_1.printInfo)('No facts stored. Nothing to clear.');
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const counts = ragStore.countByDomain();
|
|
193
|
+
(0, output_js_1.printInfo)('');
|
|
194
|
+
(0, output_js_1.printInfo)('\u26a0\ufe0f This will permanently delete ALL learned RAG facts.');
|
|
195
|
+
(0, output_js_1.printInfo)('');
|
|
196
|
+
const entries = Object.entries(counts);
|
|
197
|
+
const maxLen = Math.max(...entries.map(([d]) => d.length), 'Total:'.length);
|
|
198
|
+
(0, output_js_1.printInfo)(' Current facts:');
|
|
199
|
+
for (const [domain, count] of entries) {
|
|
200
|
+
(0, output_js_1.printInfo)(` ${domain.padEnd(maxLen)} ${String(count).padStart(6)} facts`);
|
|
201
|
+
}
|
|
202
|
+
(0, output_js_1.printInfo)(` ${'Total:'.padEnd(maxLen)} ${String(total).padStart(6)} facts`);
|
|
203
|
+
(0, output_js_1.printInfo)('');
|
|
204
|
+
(0, output_js_1.printInfo)(` Storage: ${paths_js_1.MEMORIES_FILE}`);
|
|
205
|
+
(0, output_js_1.printInfo)('');
|
|
206
|
+
const answer = await promptLine(' Type "yes, delete all facts" to confirm: ');
|
|
207
|
+
if (answer !== 'yes, delete all facts') {
|
|
208
|
+
(0, output_js_1.printInfo)('Cancelled.');
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
ragStore.clear();
|
|
212
|
+
(0, output_js_1.printInfo)('');
|
|
213
|
+
const parts = Object.entries(counts).map(([d, c]) => `${c} ${d}`);
|
|
214
|
+
(0, output_js_1.printInfo)(`\u2713 Deleted ${total} facts (${parts.join(', ')}). RAG memory is now empty.`);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Search RAG facts by semantic similarity and optionally delete selected results.
|
|
218
|
+
* If `query` is a path to an existing file, its contents are used as the search text.
|
|
219
|
+
* @param query - Free-text search string or path to a file whose contents serve as the query.
|
|
220
|
+
*/
|
|
170
221
|
async function factsSearch(query) {
|
|
171
222
|
const config = (0, config_js_1.loadConfig)();
|
|
172
223
|
if (!config.ragEnabled) {
|
package/dist/facts-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facts-cli.js","sourceRoot":"","sources":["../src/facts-cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"facts-cli.js","sourceRoot":"","sources":["../src/facts-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/history.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { CoreMessage } from 'ai';
|
|
2
|
+
/**
|
|
3
|
+
* Manages persistence of conversation history.
|
|
4
|
+
*
|
|
5
|
+
* Uses atomic writes (write-to-temp then rename) to prevent corruption on unexpected exit.
|
|
6
|
+
*/
|
|
2
7
|
export declare class HistoryStore {
|
|
8
|
+
/** Loads and validates saved conversation history, returning an empty array if the file is missing or malformed. */
|
|
3
9
|
load(): CoreMessage[];
|
|
10
|
+
/** Atomically writes the conversation history to disk. */
|
|
4
11
|
save(messages: CoreMessage[]): void;
|
|
12
|
+
/** Deletes the saved history file. Silently succeeds if the file does not exist. */
|
|
5
13
|
clear(): void;
|
|
6
14
|
}
|