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.
Files changed (138) hide show
  1. package/README.md +69 -14
  2. package/THIRD-PARTY-NOTICES +212 -0
  3. package/dist/agent.d.ts +32 -3
  4. package/dist/agent.js +59 -11
  5. package/dist/agent.js.map +1 -1
  6. package/dist/config.d.ts +67 -0
  7. package/dist/config.js +82 -20
  8. package/dist/config.js.map +1 -1
  9. package/dist/context.d.ts +7 -0
  10. package/dist/context.js +4 -0
  11. package/dist/context.js.map +1 -1
  12. package/dist/cron/cli.d.ts +6 -0
  13. package/dist/cron/cli.js +8 -0
  14. package/dist/cron/cli.js.map +1 -1
  15. package/dist/cron/client.d.ts +9 -0
  16. package/dist/cron/client.js +9 -0
  17. package/dist/cron/client.js.map +1 -1
  18. package/dist/cron/daemon.js +8 -0
  19. package/dist/cron/daemon.js.map +1 -1
  20. package/dist/cron/log-store.d.ts +18 -0
  21. package/dist/cron/log-store.js +22 -7
  22. package/dist/cron/log-store.js.map +1 -1
  23. package/dist/cron/notify.d.ts +7 -0
  24. package/dist/cron/notify.js +16 -0
  25. package/dist/cron/notify.js.map +1 -1
  26. package/dist/cron/runner.d.ts +11 -0
  27. package/dist/cron/runner.js +63 -13
  28. package/dist/cron/runner.js.map +1 -1
  29. package/dist/cron/scheduler.d.ts +16 -0
  30. package/dist/cron/scheduler.js +16 -0
  31. package/dist/cron/scheduler.js.map +1 -1
  32. package/dist/cron/store.d.ts +32 -0
  33. package/dist/cron/store.js +51 -24
  34. package/dist/cron/store.js.map +1 -1
  35. package/dist/cron/types.d.ts +19 -0
  36. package/dist/domains.d.ts +15 -0
  37. package/dist/domains.js +19 -0
  38. package/dist/domains.js.map +1 -1
  39. package/dist/embeddings.d.ts +7 -1
  40. package/dist/embeddings.js +43 -1
  41. package/dist/embeddings.js.map +1 -1
  42. package/dist/facts-cli.d.ts +14 -0
  43. package/dist/facts-cli.js +51 -0
  44. package/dist/facts-cli.js.map +1 -1
  45. package/dist/history.d.ts +8 -0
  46. package/dist/history.js +14 -9
  47. package/dist/history.js.map +1 -1
  48. package/dist/index.d.ts +5 -0
  49. package/dist/index.js +22 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/logger.d.ts +6 -0
  52. package/dist/logger.js +6 -0
  53. package/dist/logger.js.map +1 -1
  54. package/dist/mcp.d.ts +87 -0
  55. package/dist/mcp.js +106 -25
  56. package/dist/mcp.js.map +1 -1
  57. package/dist/memory-context.d.ts +4 -0
  58. package/dist/memory-context.js +4 -2
  59. package/dist/memory-context.js.map +1 -1
  60. package/dist/memory.d.ts +17 -0
  61. package/dist/memory.js +23 -7
  62. package/dist/memory.js.map +1 -1
  63. package/dist/migrate.d.ts +13 -0
  64. package/dist/migrate.js +209 -0
  65. package/dist/migrate.js.map +1 -0
  66. package/dist/output.d.ts +45 -0
  67. package/dist/output.js +61 -0
  68. package/dist/output.js.map +1 -1
  69. package/dist/paths.d.ts +23 -0
  70. package/dist/paths.js +82 -0
  71. package/dist/paths.js.map +1 -0
  72. package/dist/providers/index.d.ts +7 -0
  73. package/dist/providers/index.js +7 -0
  74. package/dist/providers/index.js.map +1 -1
  75. package/dist/providers/types.d.ts +4 -0
  76. package/dist/rag-query.d.ts +20 -0
  77. package/dist/rag-query.js +69 -3
  78. package/dist/rag-query.js.map +1 -1
  79. package/dist/rag-worker.js.map +1 -1
  80. package/dist/rag.d.ts +27 -0
  81. package/dist/rag.js +29 -19
  82. package/dist/rag.js.map +1 -1
  83. package/dist/repl.d.ts +6 -0
  84. package/dist/repl.js +147 -9
  85. package/dist/repl.js.map +1 -1
  86. package/dist/routines.d.ts +49 -0
  87. package/dist/routines.js +172 -0
  88. package/dist/routines.js.map +1 -0
  89. package/dist/setup.d.ts +5 -0
  90. package/dist/setup.js +7 -1
  91. package/dist/setup.js.map +1 -1
  92. package/dist/theme.d.ts +41 -0
  93. package/dist/theme.js +25 -0
  94. package/dist/theme.js.map +1 -1
  95. package/dist/tools/cron-logs.d.ts +6 -0
  96. package/dist/tools/cron-logs.js +6 -0
  97. package/dist/tools/cron-logs.js.map +1 -1
  98. package/dist/tools/cron.d.ts +7 -0
  99. package/dist/tools/cron.js +7 -0
  100. package/dist/tools/cron.js.map +1 -1
  101. package/dist/tools/datetime.d.ts +1 -0
  102. package/dist/tools/datetime.js +1 -0
  103. package/dist/tools/datetime.js.map +1 -1
  104. package/dist/tools/index.d.ts +10 -336
  105. package/dist/tools/index.js +11 -1
  106. package/dist/tools/index.js.map +1 -1
  107. package/dist/tools/mcp-url.d.ts +6 -0
  108. package/dist/tools/mcp-url.js +6 -0
  109. package/dist/tools/mcp-url.js.map +1 -1
  110. package/dist/tools/mcp.d.ts +6 -0
  111. package/dist/tools/mcp.js +6 -0
  112. package/dist/tools/mcp.js.map +1 -1
  113. package/dist/tools/memory.d.ts +14 -0
  114. package/dist/tools/memory.js +16 -1
  115. package/dist/tools/memory.js.map +1 -1
  116. package/dist/tools/routine.d.ts +35 -0
  117. package/dist/tools/routine.js +93 -0
  118. package/dist/tools/routine.js.map +1 -0
  119. package/dist/tools/shell.d.ts +15 -1
  120. package/dist/tools/shell.js +15 -1
  121. package/dist/tools/shell.js.map +1 -1
  122. package/dist/tools/subagent.d.ts +18 -1
  123. package/dist/tools/subagent.js +18 -1
  124. package/dist/tools/subagent.js.map +1 -1
  125. package/dist/tools/time.d.ts +19 -0
  126. package/dist/tools/time.js +19 -0
  127. package/dist/tools/time.js.map +1 -1
  128. package/dist/tools/types.d.ts +6 -0
  129. package/dist/tools/wait.d.ts +3 -0
  130. package/dist/tools/wait.js +3 -0
  131. package/dist/tools/wait.js.map +1 -1
  132. package/dist/tools/web.d.ts +6 -0
  133. package/dist/tools/web.js +11 -1
  134. package/dist/tools/web.js.map +1 -1
  135. package/dist/update.d.ts +5 -0
  136. package/dist/update.js +4 -5
  137. package/dist/update.js.map +1 -1
  138. package/package.json +2 -1
@@ -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
  }
@@ -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 CRON_DIR = path.join(os.homedir(), '.bernard', 'cron');
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(ALERTS_DIR, { recursive: true });
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(JOBS_FILE)) {
53
- this.atomicWrite(JOBS_FILE, '[]');
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 JOBS_FILE;
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 ALERTS_DIR;
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 PID_FILE;
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 LOG_FILE;
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(JOBS_FILE))
83
+ if (!fs.existsSync(paths_js_1.CRON_JOBS_FILE))
75
84
  return [];
76
- const raw = fs.readFileSync(JOBS_FILE, 'utf-8');
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(JOBS_FILE, JSON.stringify(jobs, null, 2));
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(ALERTS_DIR, `${full.id}.json`);
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(ALERTS_DIR, `${id}.json`);
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(ALERTS_DIR))
173
+ if (!fs.existsSync(paths_js_1.CRON_ALERTS_DIR))
149
174
  return [];
150
- const files = fs.readdirSync(ALERTS_DIR).filter((f) => f.endsWith('.json'));
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(ALERTS_DIR, file), 'utf-8');
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(ALERTS_DIR, `${id}.json`);
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');
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cron/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cron/store.ts"],"names":[],"mappings":"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"}
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"domains.js","sourceRoot":"","sources":["../src/domains.ts"],"names":[],"mappings":";;;AAuHA,oCAEC;AAED,8BAEC;AAtHY,QAAA,cAAc,GAAG,SAAS,CAAC;AAE3B,QAAA,eAAe,GAAiC;IAC3D,YAAY,EAAE;QACZ,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,yFAAyF;QAC3F,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0NA6BoM;KACvN;IAED,kBAAkB,EAAE;QAClB,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,sFAAsF;QACxF,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;0NA2BoM;KACvN;IAED,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,2EAA2E;QACxF,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0NA6BoM;KACvN;CACF,CAAC;AAEF,SAAgB,YAAY;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,uBAAe,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,SAAS,CAAC,EAAU;IAClC,OAAO,uBAAe,CAAC,EAAE,CAAC,IAAI,uBAAe,CAAC,sBAAc,CAAC,CAAC;AAChE,CAAC"}
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"}
@@ -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
- /** Reset cached provider — for testing only. */
16
+ /**
17
+ * Reset cached provider — for testing only.
18
+ * @internal
19
+ */
14
20
  export declare function _resetEmbeddingProvider(): void;
@@ -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
- /** Reset cached provider — for testing only. */
96
+ /**
97
+ * Reset cached provider — for testing only.
98
+ * @internal
99
+ */
58
100
  function _resetEmbeddingProvider() {
59
101
  cachedProvider = undefined;
60
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":";;AAcA,oDA+BC;AAGD,4CAeC;AAGD,0DAEC;AApED,2CAAuC;AAOvC,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,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;YACrC,KAAK,EAAE,cAAc,CAAC,aAAa;SACpC,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,gDAAgD;AAChD,SAAgB,uBAAuB;IACrC,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC"}
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"}
@@ -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) {
@@ -1 +1 @@
1
- {"version":3,"file":"facts-cli.js","sourceRoot":"","sources":["../src/facts-cli.ts"],"names":[],"mappings":"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"}
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
  }