@producible/cereworker-hippocampus 26.520.1

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 (50) hide show
  1. package/LICENSE +21 -0
  2. package/dist/conversation-extractor.d.ts +23 -0
  3. package/dist/conversation-extractor.d.ts.map +1 -0
  4. package/dist/conversation-extractor.js +85 -0
  5. package/dist/conversation-extractor.js.map +1 -0
  6. package/dist/conversation-extractor.test.d.ts +2 -0
  7. package/dist/conversation-extractor.test.d.ts.map +1 -0
  8. package/dist/conversation-extractor.test.js +105 -0
  9. package/dist/conversation-extractor.test.js.map +1 -0
  10. package/dist/curator.d.ts +31 -0
  11. package/dist/curator.d.ts.map +1 -0
  12. package/dist/curator.js +219 -0
  13. package/dist/curator.js.map +1 -0
  14. package/dist/curator.test.d.ts +2 -0
  15. package/dist/curator.test.d.ts.map +1 -0
  16. package/dist/curator.test.js +209 -0
  17. package/dist/curator.test.js.map +1 -0
  18. package/dist/finetune-archive.d.ts +47 -0
  19. package/dist/finetune-archive.d.ts.map +1 -0
  20. package/dist/finetune-archive.js +203 -0
  21. package/dist/finetune-archive.js.map +1 -0
  22. package/dist/finetune-archive.test.d.ts +2 -0
  23. package/dist/finetune-archive.test.d.ts.map +1 -0
  24. package/dist/finetune-archive.test.js +74 -0
  25. package/dist/finetune-archive.test.js.map +1 -0
  26. package/dist/index.d.ts +8 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +6 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/store.d.ts +47 -0
  31. package/dist/store.d.ts.map +1 -0
  32. package/dist/store.js +277 -0
  33. package/dist/store.js.map +1 -0
  34. package/dist/store.test.d.ts +2 -0
  35. package/dist/store.test.d.ts.map +1 -0
  36. package/dist/store.test.js +200 -0
  37. package/dist/store.test.js.map +1 -0
  38. package/dist/tools.d.ts +37 -0
  39. package/dist/tools.d.ts.map +1 -0
  40. package/dist/tools.js +59 -0
  41. package/dist/tools.js.map +1 -0
  42. package/dist/tools.test.d.ts +2 -0
  43. package/dist/tools.test.d.ts.map +1 -0
  44. package/dist/tools.test.js +85 -0
  45. package/dist/tools.test.js.map +1 -0
  46. package/dist/types.d.ts +37 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +32 -0
@@ -0,0 +1,47 @@
1
+ import type { MemoryEntry, TrainingCandidate } from './types.js';
2
+ export declare class HippocampusStore {
3
+ private readonly dir;
4
+ constructor(directory?: string);
5
+ private ensureDir;
6
+ /** Seed MEMORY.md with initial content if it doesn't exist yet. */
7
+ seedMemory(content: string): boolean;
8
+ private ensureSubdir;
9
+ get directory(): string;
10
+ get projectDir(): string;
11
+ get dailyDir(): string;
12
+ get sessionDir(): string;
13
+ get trainingDir(): string;
14
+ /** Read the main MEMORY.md file. */
15
+ readMemory(): string;
16
+ /** Write/replace the main MEMORY.md file. */
17
+ writeMemory(content: string): void;
18
+ /** Append content to today's daily log (YYYY-MM-DD.md). */
19
+ appendDailyLog(content: string): void;
20
+ /** Read recent daily logs. */
21
+ readDailyLogs(days?: number): MemoryEntry[];
22
+ /** List all daily log files (date strings, sorted). */
23
+ listLogFiles(): string[];
24
+ /** List all files in the memory directory. */
25
+ listAll(): string[];
26
+ /** Read a specific file from the memory directory. */
27
+ readFile(filename: string): string | null;
28
+ /** Search across all memory files for a text pattern. */
29
+ search(query: string): MemoryEntry[];
30
+ /** Delete daily logs older than maxDays. */
31
+ pruneOldLogs(maxDays: number): number;
32
+ /** Get the finetune subdirectory path. */
33
+ get finetuneDir(): string;
34
+ readSessionMemory(sessionId: string): string;
35
+ writeSessionMemory(sessionId: string, content: string): void;
36
+ appendSessionTurn(sessionId: string, user: string, assistant: string): void;
37
+ appendTrainingCandidate(candidate: TrainingCandidate): void;
38
+ readTrainingCandidates(date?: string): TrainingCandidate[];
39
+ private todayDate;
40
+ private legacyProjectMemoryPath;
41
+ private projectMemoryPath;
42
+ private resolveProjectMemoryPathForRead;
43
+ private getSessionMemoryPath;
44
+ private sanitizeSegment;
45
+ private resolveMemoryFilePath;
46
+ }
47
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AASjE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,SAAS,CAAC,EAAE,MAAM;IAO9B,OAAO,CAAC,SAAS;IAUjB,mEAAmE;IACnE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOpC,OAAO,CAAC,YAAY;IAOpB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,oCAAoC;IACpC,UAAU,IAAI,MAAM;IAMpB,6CAA6C;IAC7C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,2DAA2D;IAC3D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOrC,8BAA8B;IAC9B,aAAa,CAAC,IAAI,GAAE,MAAU,GAAG,WAAW,EAAE;IAqB9C,uDAAuD;IACvD,YAAY,IAAI,MAAM,EAAE;IAmBxB,8CAA8C;IAC9C,OAAO,IAAI,MAAM,EAAE;IAyBnB,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOzC,yDAAyD;IACzD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;IAoBpC,4CAA4C;IAC5C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAsBrC,0CAA0C;IAC1C,IAAI,WAAW,IAAI,MAAM,CAQxB;IAED,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAM5C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5D,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAS3E,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAK3D,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAW1D,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,qBAAqB;CAyB9B"}
package/dist/store.js ADDED
@@ -0,0 +1,277 @@
1
+ import { readFileSync, writeFileSync, appendFileSync, existsSync, mkdirSync, readdirSync, unlinkSync, } from 'node:fs';
2
+ import { basename, dirname, join, resolve } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ const DEFAULT_MEMORY_DIR = join(homedir(), '.cereworker', 'memory');
5
+ const MEMORY_FILE = 'MEMORY.md';
6
+ const PROJECT_DIR = 'project';
7
+ const DAILY_DIR = 'daily';
8
+ const SESSION_DIR = 'session';
9
+ const TRAINING_DIR = 'training';
10
+ export class HippocampusStore {
11
+ dir;
12
+ constructor(directory) {
13
+ this.dir = directory
14
+ ? resolve(directory.replace(/^~/, homedir()))
15
+ : DEFAULT_MEMORY_DIR;
16
+ this.ensureDir();
17
+ }
18
+ ensureDir() {
19
+ if (!existsSync(this.dir)) {
20
+ mkdirSync(this.dir, { recursive: true });
21
+ }
22
+ this.ensureSubdir(PROJECT_DIR);
23
+ this.ensureSubdir(DAILY_DIR);
24
+ this.ensureSubdir(SESSION_DIR);
25
+ this.ensureSubdir(TRAINING_DIR);
26
+ }
27
+ /** Seed MEMORY.md with initial content if it doesn't exist yet. */
28
+ seedMemory(content) {
29
+ const primaryPath = this.projectMemoryPath();
30
+ if (existsSync(primaryPath) || existsSync(this.legacyProjectMemoryPath()))
31
+ return false;
32
+ writeFileSync(primaryPath, content, 'utf-8');
33
+ return true;
34
+ }
35
+ ensureSubdir(subdir) {
36
+ const path = join(this.dir, subdir);
37
+ if (!existsSync(path)) {
38
+ mkdirSync(path, { recursive: true });
39
+ }
40
+ }
41
+ get directory() {
42
+ return this.dir;
43
+ }
44
+ get projectDir() {
45
+ return join(this.dir, PROJECT_DIR);
46
+ }
47
+ get dailyDir() {
48
+ return join(this.dir, DAILY_DIR);
49
+ }
50
+ get sessionDir() {
51
+ return join(this.dir, SESSION_DIR);
52
+ }
53
+ get trainingDir() {
54
+ return join(this.dir, TRAINING_DIR);
55
+ }
56
+ /** Read the main MEMORY.md file. */
57
+ readMemory() {
58
+ const path = this.resolveProjectMemoryPathForRead();
59
+ if (!existsSync(path))
60
+ return '';
61
+ return readFileSync(path, 'utf-8');
62
+ }
63
+ /** Write/replace the main MEMORY.md file. */
64
+ writeMemory(content) {
65
+ writeFileSync(this.projectMemoryPath(), content, 'utf-8');
66
+ }
67
+ /** Append content to today's daily log (YYYY-MM-DD.md). */
68
+ appendDailyLog(content) {
69
+ const filename = `${this.todayDate()}.md`;
70
+ const path = join(this.dailyDir, filename);
71
+ const entry = `\n---\n_${new Date().toISOString()}_\n\n${content}\n`;
72
+ appendFileSync(path, entry, 'utf-8');
73
+ }
74
+ /** Read recent daily logs. */
75
+ readDailyLogs(days = 7) {
76
+ const files = this.listLogFiles();
77
+ const cutoff = new Date();
78
+ cutoff.setDate(cutoff.getDate() - days);
79
+ const cutoffStr = cutoff.toISOString().slice(0, 10);
80
+ return files
81
+ .filter((f) => f >= cutoffStr)
82
+ .map((f) => {
83
+ const path = this.resolveMemoryFilePath(`${f}.md`);
84
+ if (!path) {
85
+ throw new Error(`Unable to resolve daily log path for ${f}.md`);
86
+ }
87
+ return {
88
+ filename: `${f}.md`,
89
+ content: readFileSync(path, 'utf-8'),
90
+ date: f,
91
+ };
92
+ });
93
+ }
94
+ /** List all daily log files (date strings, sorted). */
95
+ listLogFiles() {
96
+ const files = new Set();
97
+ if (existsSync(this.dailyDir)) {
98
+ for (const file of readdirSync(this.dailyDir)) {
99
+ if (/^\d{4}-\d{2}-\d{2}\.md$/.test(file)) {
100
+ files.add(file.replace('.md', ''));
101
+ }
102
+ }
103
+ }
104
+ if (existsSync(this.dir)) {
105
+ for (const file of readdirSync(this.dir)) {
106
+ if (/^\d{4}-\d{2}-\d{2}\.md$/.test(file)) {
107
+ files.add(file.replace('.md', ''));
108
+ }
109
+ }
110
+ }
111
+ return Array.from(files).sort();
112
+ }
113
+ /** List all files in the memory directory. */
114
+ listAll() {
115
+ const files = new Set();
116
+ if (existsSync(this.resolveProjectMemoryPathForRead())) {
117
+ files.add(MEMORY_FILE);
118
+ }
119
+ for (const date of this.listLogFiles()) {
120
+ files.add(`${date}.md`);
121
+ }
122
+ if (existsSync(this.sessionDir)) {
123
+ for (const file of readdirSync(this.sessionDir)) {
124
+ if (file.endsWith('.md')) {
125
+ files.add(`session/${file}`);
126
+ }
127
+ }
128
+ }
129
+ if (existsSync(this.projectDir)) {
130
+ for (const file of readdirSync(this.projectDir)) {
131
+ if (file.endsWith('.md') && file !== MEMORY_FILE) {
132
+ files.add(`project/${file}`);
133
+ }
134
+ }
135
+ }
136
+ return Array.from(files).sort();
137
+ }
138
+ /** Read a specific file from the memory directory. */
139
+ readFile(filename) {
140
+ const path = this.resolveMemoryFilePath(filename);
141
+ if (!path)
142
+ return null;
143
+ if (!existsSync(path))
144
+ return null;
145
+ return readFileSync(path, 'utf-8');
146
+ }
147
+ /** Search across all memory files for a text pattern. */
148
+ search(query) {
149
+ const results = [];
150
+ const lowerQuery = query.toLowerCase();
151
+ for (const file of this.listAll()) {
152
+ const content = this.readFile(file);
153
+ if (content === null)
154
+ continue;
155
+ if (content.toLowerCase().includes(lowerQuery)) {
156
+ const dateMatch = file.match(/^(\d{4}-\d{2}-\d{2})/);
157
+ results.push({
158
+ filename: file,
159
+ content,
160
+ date: dateMatch?.[1] ?? '',
161
+ });
162
+ }
163
+ }
164
+ return results;
165
+ }
166
+ /** Delete daily logs older than maxDays. */
167
+ pruneOldLogs(maxDays) {
168
+ const cutoff = new Date();
169
+ cutoff.setDate(cutoff.getDate() - maxDays);
170
+ const cutoffStr = cutoff.toISOString().slice(0, 10);
171
+ let pruned = 0;
172
+ for (const dateStr of this.listLogFiles()) {
173
+ if (dateStr < cutoffStr) {
174
+ const layeredPath = join(this.dailyDir, `${dateStr}.md`);
175
+ const legacyPath = join(this.dir, `${dateStr}.md`);
176
+ if (existsSync(layeredPath)) {
177
+ unlinkSync(layeredPath);
178
+ }
179
+ else if (existsSync(legacyPath)) {
180
+ unlinkSync(legacyPath);
181
+ }
182
+ pruned++;
183
+ }
184
+ }
185
+ return pruned;
186
+ }
187
+ /** Get the finetune subdirectory path. */
188
+ get finetuneDir() {
189
+ const dir = basename(this.dir) === 'memory'
190
+ ? join(dirname(this.dir), 'finetune')
191
+ : join(this.dir, 'finetune');
192
+ if (!existsSync(dir)) {
193
+ mkdirSync(dir, { recursive: true });
194
+ }
195
+ return dir;
196
+ }
197
+ readSessionMemory(sessionId) {
198
+ const path = this.getSessionMemoryPath(sessionId);
199
+ if (!existsSync(path))
200
+ return '';
201
+ return readFileSync(path, 'utf-8');
202
+ }
203
+ writeSessionMemory(sessionId, content) {
204
+ writeFileSync(this.getSessionMemoryPath(sessionId), content, 'utf-8');
205
+ }
206
+ appendSessionTurn(sessionId, user, assistant) {
207
+ const path = this.getSessionMemoryPath(sessionId);
208
+ const entry = `\n## ${new Date().toISOString()}\n\n` +
209
+ `**User**\n${user.trim()}\n\n` +
210
+ `**Assistant**\n${assistant.trim()}\n`;
211
+ appendFileSync(path, entry, 'utf-8');
212
+ }
213
+ appendTrainingCandidate(candidate) {
214
+ const path = join(this.trainingDir, `${this.todayDate()}.jsonl`);
215
+ appendFileSync(path, JSON.stringify(candidate) + '\n', 'utf-8');
216
+ }
217
+ readTrainingCandidates(date) {
218
+ const target = date ? `${date}.jsonl` : `${this.todayDate()}.jsonl`;
219
+ const path = join(this.trainingDir, target);
220
+ if (!existsSync(path))
221
+ return [];
222
+ return readFileSync(path, 'utf-8')
223
+ .trim()
224
+ .split('\n')
225
+ .filter(Boolean)
226
+ .map((line) => JSON.parse(line));
227
+ }
228
+ todayDate() {
229
+ return new Date().toISOString().slice(0, 10);
230
+ }
231
+ legacyProjectMemoryPath() {
232
+ return join(this.dir, MEMORY_FILE);
233
+ }
234
+ projectMemoryPath() {
235
+ return join(this.projectDir, MEMORY_FILE);
236
+ }
237
+ resolveProjectMemoryPathForRead() {
238
+ const layered = this.projectMemoryPath();
239
+ if (existsSync(layered))
240
+ return layered;
241
+ return this.legacyProjectMemoryPath();
242
+ }
243
+ getSessionMemoryPath(sessionId) {
244
+ return join(this.sessionDir, `${this.sanitizeSegment(sessionId)}.md`);
245
+ }
246
+ sanitizeSegment(value) {
247
+ return value.replace(/[^a-zA-Z0-9._-]+/g, '-');
248
+ }
249
+ resolveMemoryFilePath(filename) {
250
+ const normalized = filename
251
+ .replace(/\\/g, '/')
252
+ .split('/')
253
+ .filter((segment) => segment && segment !== '.' && segment !== '..')
254
+ .join('/');
255
+ if (!normalized)
256
+ return null;
257
+ if (normalized === MEMORY_FILE)
258
+ return this.resolveProjectMemoryPathForRead();
259
+ if (/^\d{4}-\d{2}-\d{2}\.md$/.test(normalized)) {
260
+ const layered = join(this.dailyDir, normalized);
261
+ if (existsSync(layered))
262
+ return layered;
263
+ return join(this.dir, normalized);
264
+ }
265
+ if (normalized.startsWith('session/')) {
266
+ return join(this.sessionDir, normalized.slice('session/'.length));
267
+ }
268
+ if (normalized.startsWith('project/')) {
269
+ return join(this.projectDir, normalized.slice('project/'.length));
270
+ }
271
+ if (normalized.startsWith('daily/')) {
272
+ return join(this.dailyDir, normalized.slice('daily/'.length));
273
+ }
274
+ return join(this.dir, normalized);
275
+ }
276
+ }
277
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=store.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.test.d.ts","sourceRoot":"","sources":["../src/store.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,200 @@
1
+ import { describe, it, expect, afterEach } from 'vitest';
2
+ import { mkdtempSync, rmSync, writeFileSync, existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { tmpdir } from 'node:os';
5
+ import { HippocampusStore } from './store.js';
6
+ describe('HippocampusStore', () => {
7
+ let dir;
8
+ afterEach(() => {
9
+ rmSync(dir, { recursive: true, force: true });
10
+ });
11
+ it('creates directory on construction', () => {
12
+ dir = join(mkdtempSync(join(tmpdir(), 'cereworker-store-test-')), 'sub');
13
+ const store = new HippocampusStore(dir);
14
+ expect(existsSync(dir)).toBe(true);
15
+ });
16
+ it('exposes directory via getter', () => {
17
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
18
+ const store = new HippocampusStore(dir);
19
+ expect(store.directory).toBe(dir);
20
+ });
21
+ describe('readMemory / writeMemory', () => {
22
+ it('returns empty string when no MEMORY.md exists', () => {
23
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
24
+ const store = new HippocampusStore(dir);
25
+ expect(store.readMemory()).toBe('');
26
+ });
27
+ it('round-trips content', () => {
28
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
29
+ const store = new HippocampusStore(dir);
30
+ store.writeMemory('# Hello\nWorld');
31
+ expect(store.readMemory()).toBe('# Hello\nWorld');
32
+ expect(existsSync(join(dir, 'project', 'MEMORY.md'))).toBe(true);
33
+ });
34
+ it('overwrites existing content', () => {
35
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
36
+ const store = new HippocampusStore(dir);
37
+ store.writeMemory('old');
38
+ store.writeMemory('new');
39
+ expect(store.readMemory()).toBe('new');
40
+ });
41
+ });
42
+ describe('appendDailyLog / readDailyLogs', () => {
43
+ it('creates a date-stamped log file', () => {
44
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
45
+ const store = new HippocampusStore(dir);
46
+ store.appendDailyLog('test entry');
47
+ const today = new Date().toISOString().slice(0, 10);
48
+ expect(existsSync(join(dir, 'daily', `${today}.md`))).toBe(true);
49
+ });
50
+ it('readDailyLogs returns recent entries', () => {
51
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
52
+ const store = new HippocampusStore(dir);
53
+ store.appendDailyLog('entry');
54
+ const logs = store.readDailyLogs(7);
55
+ expect(logs.length).toBeGreaterThanOrEqual(1);
56
+ expect(logs[0].content).toContain('entry');
57
+ });
58
+ it('readDailyLogs filters by day range', () => {
59
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
60
+ const store = new HippocampusStore(dir);
61
+ // Create an old log file manually
62
+ writeFileSync(join(dir, 'daily', '2020-01-01.md'), 'old entry', 'utf-8');
63
+ store.appendDailyLog('recent entry');
64
+ const logs = store.readDailyLogs(7);
65
+ const dates = logs.map((l) => l.date);
66
+ expect(dates).not.toContain('2020-01-01');
67
+ });
68
+ });
69
+ describe('listLogFiles', () => {
70
+ it('returns empty for empty directory', () => {
71
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
72
+ const store = new HippocampusStore(dir);
73
+ expect(store.listLogFiles()).toEqual([]);
74
+ });
75
+ it('returns sorted date strings', () => {
76
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
77
+ const store = new HippocampusStore(dir);
78
+ writeFileSync(join(dir, 'daily', '2024-03-15.md'), 'a', 'utf-8');
79
+ writeFileSync(join(dir, 'daily', '2024-03-10.md'), 'b', 'utf-8');
80
+ expect(store.listLogFiles()).toEqual(['2024-03-10', '2024-03-15']);
81
+ });
82
+ it('ignores non-date files', () => {
83
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
84
+ const store = new HippocampusStore(dir);
85
+ writeFileSync(join(dir, 'project', 'MEMORY.md'), 'x', 'utf-8');
86
+ writeFileSync(join(dir, 'daily', '2024-03-15.md'), 'y', 'utf-8');
87
+ expect(store.listLogFiles()).toEqual(['2024-03-15']);
88
+ });
89
+ });
90
+ describe('listAll', () => {
91
+ it('lists all .md files', () => {
92
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
93
+ const store = new HippocampusStore(dir);
94
+ writeFileSync(join(dir, 'project', 'MEMORY.md'), '', 'utf-8');
95
+ writeFileSync(join(dir, 'daily', '2024-01-01.md'), '', 'utf-8');
96
+ writeFileSync(join(dir, 'session', 'conv-1.md'), '', 'utf-8');
97
+ writeFileSync(join(dir, 'notes.txt'), '', 'utf-8');
98
+ const files = store.listAll();
99
+ expect(files).toContain('MEMORY.md');
100
+ expect(files).toContain('2024-01-01.md');
101
+ expect(files).toContain('session/conv-1.md');
102
+ expect(files).not.toContain('notes.txt');
103
+ });
104
+ });
105
+ describe('readFile', () => {
106
+ it('reads a specific file', () => {
107
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
108
+ const store = new HippocampusStore(dir);
109
+ writeFileSync(join(dir, 'session', 'test.md'), 'content', 'utf-8');
110
+ expect(store.readFile('session/test.md')).toBe('content');
111
+ });
112
+ it('returns null for missing file', () => {
113
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
114
+ const store = new HippocampusStore(dir);
115
+ expect(store.readFile('nope.md')).toBeNull();
116
+ });
117
+ it('sanitizes path traversal', () => {
118
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
119
+ const store = new HippocampusStore(dir);
120
+ // Path traversal chars get stripped, so it looks for a local file
121
+ expect(store.readFile('../../../etc/passwd')).toBeNull();
122
+ });
123
+ });
124
+ describe('search', () => {
125
+ it('finds matching content case-insensitively', () => {
126
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
127
+ const store = new HippocampusStore(dir);
128
+ writeFileSync(join(dir, 'session', 'notes.md'), 'TypeScript is great', 'utf-8');
129
+ const results = store.search('typescript');
130
+ expect(results).toHaveLength(1);
131
+ expect(results[0].filename).toBe('session/notes.md');
132
+ });
133
+ it('returns empty for no matches', () => {
134
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
135
+ const store = new HippocampusStore(dir);
136
+ writeFileSync(join(dir, 'session', 'notes.md'), 'hello', 'utf-8');
137
+ expect(store.search('zzzzz')).toHaveLength(0);
138
+ });
139
+ });
140
+ describe('pruneOldLogs', () => {
141
+ it('deletes old logs and returns count', () => {
142
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
143
+ const store = new HippocampusStore(dir);
144
+ writeFileSync(join(dir, 'daily', '2020-01-01.md'), 'old', 'utf-8');
145
+ writeFileSync(join(dir, 'daily', '2020-01-02.md'), 'old', 'utf-8');
146
+ store.appendDailyLog('recent');
147
+ const pruned = store.pruneOldLogs(7);
148
+ expect(pruned).toBe(2);
149
+ expect(existsSync(join(dir, 'daily', '2020-01-01.md'))).toBe(false);
150
+ });
151
+ it('keeps recent logs', () => {
152
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
153
+ const store = new HippocampusStore(dir);
154
+ store.appendDailyLog('today');
155
+ const pruned = store.pruneOldLogs(7);
156
+ expect(pruned).toBe(0);
157
+ });
158
+ });
159
+ describe('finetuneDir', () => {
160
+ it('returns finetune path and creates directory', () => {
161
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
162
+ const store = new HippocampusStore(dir);
163
+ const ftDir = store.finetuneDir;
164
+ expect(ftDir).toBe(join(dir, 'finetune'));
165
+ expect(existsSync(ftDir)).toBe(true);
166
+ });
167
+ });
168
+ describe('session memory', () => {
169
+ it('stores per-session markdown history', () => {
170
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
171
+ const store = new HippocampusStore(dir);
172
+ store.appendSessionTurn('conv-1', 'Boss asked for status.', 'Reported current status.');
173
+ const content = store.readSessionMemory('conv-1');
174
+ expect(content).toContain('Boss asked for status.');
175
+ expect(content).toContain('Reported current status.');
176
+ expect(existsSync(join(dir, 'session', 'conv-1.md'))).toBe(true);
177
+ });
178
+ });
179
+ describe('training candidates', () => {
180
+ it('appends structured training candidates as JSONL', () => {
181
+ dir = mkdtempSync(join(tmpdir(), 'cereworker-store-test-'));
182
+ const store = new HippocampusStore(dir);
183
+ store.appendTrainingCandidate({
184
+ kind: 'recovery',
185
+ createdAt: Date.now(),
186
+ source: 'recovery:completion',
187
+ summary: 'Retried from the last verified state.',
188
+ conversationId: 'conv-1',
189
+ sessionId: 'turn-1',
190
+ data: { action: 'retry' },
191
+ });
192
+ const candidates = store.readTrainingCandidates();
193
+ expect(candidates).toHaveLength(1);
194
+ expect(candidates[0]?.kind).toBe('recovery');
195
+ expect(candidates[0]?.sessionId).toBe('turn-1');
196
+ expect(existsSync(join(dir, 'training', `${new Date().toISOString().slice(0, 10)}.jsonl`))).toBe(true);
197
+ });
198
+ });
199
+ });
200
+ //# sourceMappingURL=store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.test.js","sourceRoot":"","sources":["../src/store.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import { HippocampusStore } from './store.js';
3
+ export declare const memoryReadParameters: z.ZodObject<{
4
+ file: z.ZodDefault<z.ZodOptional<z.ZodString>>;
5
+ }, "strip", z.ZodTypeAny, {
6
+ file: string;
7
+ }, {
8
+ file?: string | undefined;
9
+ }>;
10
+ export declare const memoryWriteParameters: z.ZodObject<{
11
+ content: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ content: string;
14
+ }, {
15
+ content: string;
16
+ }>;
17
+ export declare const memoryLogParameters: z.ZodObject<{
18
+ content: z.ZodString;
19
+ }, "strip", z.ZodTypeAny, {
20
+ content: string;
21
+ }, {
22
+ content: string;
23
+ }>;
24
+ export declare const memorySearchParameters: z.ZodObject<{
25
+ query: z.ZodString;
26
+ }, "strip", z.ZodTypeAny, {
27
+ query: string;
28
+ }, {
29
+ query: string;
30
+ }>;
31
+ export declare function createMemoryTools(store: HippocampusStore): {
32
+ executeMemoryRead: (args: z.infer<typeof memoryReadParameters>) => Promise<string>;
33
+ executeMemoryWrite: (args: z.infer<typeof memoryWriteParameters>) => Promise<string>;
34
+ executeMemoryLog: (args: z.infer<typeof memoryLogParameters>) => Promise<string>;
35
+ executeMemorySearch: (args: z.infer<typeof memorySearchParameters>) => Promise<string>;
36
+ };
37
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,oBAAoB;;;;;;EAM/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;EAEjC,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB;8BAErB,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;+BAcrD,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;6BAKzD,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;gCAMlD,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;EAiB7F"}