agent-scratchpad 0.1.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 ADDED
@@ -0,0 +1,173 @@
1
+ # agent-scratchpad
2
+
3
+ Lightweight key-value scratchpad for agent reasoning. Zero external runtime dependencies.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install agent-scratchpad
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { createScratchpad } from 'agent-scratchpad';
15
+
16
+ const pad = createScratchpad();
17
+
18
+ pad.set('step', 'analyze');
19
+ pad.set('user', { id: 42, name: 'Alice' });
20
+
21
+ console.log(pad.get('step')); // 'analyze'
22
+ console.log(pad.has('user')); // true
23
+ ```
24
+
25
+ ## TTL
26
+
27
+ Entries can expire automatically. Use `options.now` to control time in tests.
28
+
29
+ ```typescript
30
+ const pad = createScratchpad({ defaultTtl: 60_000 }); // 1 minute default
31
+
32
+ pad.set('cache', 'value', { ttl: 5_000 }); // expires in 5s
33
+ pad.set('permanent', 'value', { ttl: null }); // never expires
34
+ ```
35
+
36
+ ### Sliding TTL
37
+
38
+ With `slidingTtl: true`, the expiry window resets each time the entry is accessed.
39
+
40
+ ```typescript
41
+ pad.set('session', token, { ttl: 30_000, slidingTtl: true });
42
+ pad.get('session'); // resets the 30s window
43
+ ```
44
+
45
+ ### Sweep interval
46
+
47
+ Use `sweepIntervalMs` to proactively remove expired entries in the background.
48
+
49
+ ```typescript
50
+ const pad = createScratchpad({ sweepIntervalMs: 10_000 }); // sweep every 10s
51
+ // Call pad.destroy() to stop the sweep timer
52
+ await pad.destroy();
53
+ ```
54
+
55
+ ## Namespaces
56
+
57
+ Namespace calls transparently prefix all keys with `name:`. Namespaces can be nested.
58
+
59
+ ```typescript
60
+ const memory = pad.namespace('memory');
61
+ memory.set('fact', 'Paris is in France');
62
+ pad.get('memory:fact'); // 'Paris is in France'
63
+
64
+ const nested = pad.namespace('a').namespace('b');
65
+ nested.set('key', 'val');
66
+ pad.get('a:b:key'); // 'val'
67
+ ```
68
+
69
+ ## Tags
70
+
71
+ Tag entries and retrieve them by tag.
72
+
73
+ ```typescript
74
+ pad.set('city', 'London', { tags: ['geo', 'important'] });
75
+ pad.set('country', 'UK', { tags: ['geo'] });
76
+
77
+ pad.findByTag('geo'); // both entries
78
+ pad.findByTag('important'); // only 'city'
79
+ ```
80
+
81
+ ## toContext()
82
+
83
+ Format scratchpad contents as a context string for LLM prompts.
84
+
85
+ ```typescript
86
+ pad.set('name', 'Alice');
87
+ pad.set('role', 'admin');
88
+
89
+ pad.toContext(); // 'name: Alice\nrole: admin'
90
+ pad.toContext({ format: 'markdown' }); // '## name\nAlice\n\n## role\nadmin'
91
+ pad.toContext({ format: 'json' }); // '{"name":"Alice","role":"admin"}'
92
+ pad.toContext({ format: 'xml' }); // '<entry key="name">Alice</entry>...'
93
+
94
+ // Filter by tags or namespace
95
+ pad.toContext({ filterTags: ['important'] });
96
+ pad.toContext({ filterNamespace: 'ctx' });
97
+
98
+ // Limit output length
99
+ pad.toContext({ maxTokens: 500, tokenCounter: (s) => s.length });
100
+
101
+ // Add a header
102
+ pad.toContext({ header: '## Agent Memory', format: 'kv' });
103
+ ```
104
+
105
+ ## Snapshot / Restore
106
+
107
+ ```typescript
108
+ const snap = pad.snapshot(); // { entries, timestamp, version: 1 }
109
+ pad.restore(snap);
110
+
111
+ // Or use fromSnapshot helper
112
+ import { fromSnapshot } from 'agent-scratchpad';
113
+ const pad2 = fromSnapshot(snap);
114
+ ```
115
+
116
+ ## Events
117
+
118
+ ```typescript
119
+ const unsub = pad.on('set', ({ key, entry, isUpdate }) => {
120
+ console.log(isUpdate ? 'updated' : 'created', key);
121
+ });
122
+
123
+ pad.on('delete', ({ key }) => console.log('deleted', key));
124
+ pad.on('expire', ({ key }) => console.log('expired', key));
125
+ pad.on('clear', ({ count }) => console.log('cleared', count, 'entries'));
126
+
127
+ unsub(); // remove listener
128
+ ```
129
+
130
+ ## Stats
131
+
132
+ ```typescript
133
+ const st = pad.stats();
134
+ // {
135
+ // size: 3, live (non-expired) entry count
136
+ // rawSize: 3, total entries including expired-not-yet-swept
137
+ // namespaceCount: 2,
138
+ // namespaces: ['ctx', 'mem'],
139
+ // entriesWithTtl: 1,
140
+ // tagCounts: { geo: 2 },
141
+ // oldestEntryAt: 1710000000000,
142
+ // newestEntryAt: 1710000001000,
143
+ // }
144
+ ```
145
+
146
+ ## Persistence
147
+
148
+ Provide a `PersistenceAdapter` to save and load snapshots.
149
+
150
+ ```typescript
151
+ import { createScratchpad, PersistenceAdapter, ScratchpadSnapshot } from 'agent-scratchpad';
152
+ import fs from 'fs/promises';
153
+
154
+ const adapter: PersistenceAdapter = {
155
+ async load() {
156
+ try {
157
+ return JSON.parse(await fs.readFile('pad.json', 'utf8')) as ScratchpadSnapshot;
158
+ } catch { return null; }
159
+ },
160
+ async save(snap) {
161
+ await fs.writeFile('pad.json', JSON.stringify(snap));
162
+ },
163
+ };
164
+
165
+ const pad = createScratchpad({ persistence: adapter });
166
+ await pad.load();
167
+ // ... use pad ...
168
+ await pad.save();
169
+ ```
170
+
171
+ ## License
172
+
173
+ MIT
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scratchpad.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratchpad.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scratchpad.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const scratchpad_js_1 = require("../scratchpad.js");
5
+ const errors_js_1 = require("../errors.js");
6
+ (0, vitest_1.describe)('basic set/get', () => {
7
+ (0, vitest_1.it)('stores and retrieves a value', () => {
8
+ const pad = (0, scratchpad_js_1.createScratchpad)();
9
+ pad.set('foo', 'bar');
10
+ (0, vitest_1.expect)(pad.get('foo')).toBe('bar');
11
+ });
12
+ (0, vitest_1.it)('returns undefined for missing key', () => {
13
+ const pad = (0, scratchpad_js_1.createScratchpad)();
14
+ (0, vitest_1.expect)(pad.get('nope')).toBeUndefined();
15
+ });
16
+ (0, vitest_1.it)('overwrites an existing key', () => {
17
+ const pad = (0, scratchpad_js_1.createScratchpad)();
18
+ pad.set('x', 1);
19
+ pad.set('x', 2);
20
+ (0, vitest_1.expect)(pad.get('x')).toBe(2);
21
+ });
22
+ (0, vitest_1.it)('has() returns true for existing key', () => {
23
+ const pad = (0, scratchpad_js_1.createScratchpad)();
24
+ pad.set('a', 1);
25
+ (0, vitest_1.expect)(pad.has('a')).toBe(true);
26
+ });
27
+ (0, vitest_1.it)('has() returns false for missing key', () => {
28
+ const pad = (0, scratchpad_js_1.createScratchpad)();
29
+ (0, vitest_1.expect)(pad.has('z')).toBe(false);
30
+ });
31
+ (0, vitest_1.it)('delete() removes key and returns true', () => {
32
+ const pad = (0, scratchpad_js_1.createScratchpad)();
33
+ pad.set('d', 9);
34
+ (0, vitest_1.expect)(pad.delete('d')).toBe(true);
35
+ (0, vitest_1.expect)(pad.has('d')).toBe(false);
36
+ });
37
+ (0, vitest_1.it)('delete() returns false for missing key', () => {
38
+ const pad = (0, scratchpad_js_1.createScratchpad)();
39
+ (0, vitest_1.expect)(pad.delete('nope')).toBe(false);
40
+ });
41
+ });
42
+ (0, vitest_1.describe)('TTL expiry', () => {
43
+ (0, vitest_1.it)('entry expires after ttl ms', () => {
44
+ let now = 0;
45
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
46
+ pad.set('k', 'v', { ttl: 100 });
47
+ (0, vitest_1.expect)(pad.get('k')).toBe('v');
48
+ now = 100; // exactly at expiry
49
+ (0, vitest_1.expect)(pad.get('k')).toBeUndefined();
50
+ });
51
+ (0, vitest_1.it)('entry is still valid before ttl', () => {
52
+ let now = 0;
53
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
54
+ pad.set('k', 'v', { ttl: 100 });
55
+ now = 99;
56
+ (0, vitest_1.expect)(pad.get('k')).toBe('v');
57
+ });
58
+ (0, vitest_1.it)('defaultTtl applied when no per-entry ttl given', () => {
59
+ let now = 0;
60
+ const pad = (0, scratchpad_js_1.createScratchpad)({ defaultTtl: 50, now: () => now });
61
+ pad.set('k', 'v');
62
+ now = 50;
63
+ (0, vitest_1.expect)(pad.get('k')).toBeUndefined();
64
+ });
65
+ (0, vitest_1.it)('null ttl means no expiry', () => {
66
+ let now = 0;
67
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
68
+ pad.set('k', 'v', { ttl: null });
69
+ now = 999999;
70
+ (0, vitest_1.expect)(pad.get('k')).toBe('v');
71
+ });
72
+ });
73
+ (0, vitest_1.describe)('sliding TTL', () => {
74
+ (0, vitest_1.it)('accessing resets expiry window', () => {
75
+ let now = 0;
76
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
77
+ pad.set('k', 'v', { ttl: 100, slidingTtl: true });
78
+ now = 80;
79
+ (0, vitest_1.expect)(pad.get('k')).toBe('v'); // accessedAt updated to 80
80
+ now = 150; // 70ms after last access, still within 100ms window
81
+ (0, vitest_1.expect)(pad.get('k')).toBe('v');
82
+ now = 251; // 101ms after last access (150), expired
83
+ (0, vitest_1.expect)(pad.get('k')).toBeUndefined();
84
+ });
85
+ (0, vitest_1.it)('without sliding TTL, expiry is based on createdAt', () => {
86
+ let now = 0;
87
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
88
+ pad.set('k', 'v', { ttl: 100, slidingTtl: false });
89
+ now = 80;
90
+ pad.get('k'); // access it
91
+ now = 100; // 100ms from createdAt=0, expired
92
+ (0, vitest_1.expect)(pad.get('k')).toBeUndefined();
93
+ });
94
+ });
95
+ (0, vitest_1.describe)('tags', () => {
96
+ (0, vitest_1.it)('findByTag returns entries with the matching tag', () => {
97
+ const pad = (0, scratchpad_js_1.createScratchpad)();
98
+ pad.set('a', 1, { tags: ['alpha', 'shared'] });
99
+ pad.set('b', 2, { tags: ['beta'] });
100
+ pad.set('c', 3, { tags: ['shared'] });
101
+ const shared = pad.findByTag('shared');
102
+ (0, vitest_1.expect)(shared.map((e) => e.key).sort()).toEqual(['a', 'c']);
103
+ });
104
+ (0, vitest_1.it)('findByTag returns empty array when no match', () => {
105
+ const pad = (0, scratchpad_js_1.createScratchpad)();
106
+ pad.set('a', 1, { tags: ['alpha'] });
107
+ (0, vitest_1.expect)(pad.findByTag('nope')).toEqual([]);
108
+ });
109
+ (0, vitest_1.it)('findByTag excludes expired entries', () => {
110
+ let now = 0;
111
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
112
+ pad.set('x', 10, { tags: ['t'], ttl: 50 });
113
+ now = 50;
114
+ (0, vitest_1.expect)(pad.findByTag('t')).toEqual([]);
115
+ });
116
+ });
117
+ (0, vitest_1.describe)('namespace', () => {
118
+ (0, vitest_1.it)('scoped set/get uses prefixed keys', () => {
119
+ const pad = (0, scratchpad_js_1.createScratchpad)();
120
+ const ns = pad.namespace('ctx');
121
+ ns.set('item', 42);
122
+ (0, vitest_1.expect)(ns.get('item')).toBe(42);
123
+ // raw key in parent
124
+ (0, vitest_1.expect)(pad.get('ctx:item')).toBe(42);
125
+ });
126
+ (0, vitest_1.it)('has() is scoped', () => {
127
+ const pad = (0, scratchpad_js_1.createScratchpad)();
128
+ const ns = pad.namespace('ns');
129
+ ns.set('x', 1);
130
+ (0, vitest_1.expect)(ns.has('x')).toBe(true);
131
+ (0, vitest_1.expect)(ns.has('y')).toBe(false);
132
+ });
133
+ (0, vitest_1.it)('delete() is scoped', () => {
134
+ const pad = (0, scratchpad_js_1.createScratchpad)();
135
+ const ns = pad.namespace('ns');
136
+ ns.set('x', 1);
137
+ ns.delete('x');
138
+ (0, vitest_1.expect)(ns.has('x')).toBe(false);
139
+ });
140
+ (0, vitest_1.it)('keys() strips namespace prefix', () => {
141
+ const pad = (0, scratchpad_js_1.createScratchpad)();
142
+ const ns = pad.namespace('ns');
143
+ ns.set('a', 1);
144
+ ns.set('b', 2);
145
+ (0, vitest_1.expect)(ns.keys().sort()).toEqual(['a', 'b']);
146
+ });
147
+ (0, vitest_1.it)('nested namespace composes prefixes', () => {
148
+ const pad = (0, scratchpad_js_1.createScratchpad)();
149
+ const ns = pad.namespace('a').namespace('b');
150
+ ns.set('key', 'val');
151
+ (0, vitest_1.expect)(pad.get('a:b:key')).toBe('val');
152
+ });
153
+ (0, vitest_1.it)('parent namespace does not leak into child namespace keys', () => {
154
+ const pad = (0, scratchpad_js_1.createScratchpad)();
155
+ pad.set('ns:x', 99);
156
+ pad.set('other:y', 88);
157
+ const ns = pad.namespace('ns');
158
+ (0, vitest_1.expect)(ns.keys()).toEqual(['x']);
159
+ });
160
+ });
161
+ (0, vitest_1.describe)('snapshot/restore roundtrip', () => {
162
+ (0, vitest_1.it)('snapshot captures current entries', () => {
163
+ const pad = (0, scratchpad_js_1.createScratchpad)();
164
+ pad.set('a', 1);
165
+ pad.set('b', 2);
166
+ const snap = pad.snapshot();
167
+ (0, vitest_1.expect)(snap.version).toBe(1);
168
+ (0, vitest_1.expect)(Object.keys(snap.entries).sort()).toEqual(['a', 'b']);
169
+ });
170
+ (0, vitest_1.it)('restore repopulates store from snapshot', () => {
171
+ const pad = (0, scratchpad_js_1.createScratchpad)();
172
+ pad.set('x', 10);
173
+ const snap = pad.snapshot();
174
+ const pad2 = (0, scratchpad_js_1.createScratchpad)();
175
+ pad2.restore(snap);
176
+ (0, vitest_1.expect)(pad2.get('x')).toBe(10);
177
+ });
178
+ (0, vitest_1.it)('fromSnapshot creates pad with entries already loaded', () => {
179
+ const pad = (0, scratchpad_js_1.createScratchpad)();
180
+ pad.set('hello', 'world');
181
+ const snap = pad.snapshot();
182
+ const pad2 = (0, scratchpad_js_1.fromSnapshot)(snap);
183
+ (0, vitest_1.expect)(pad2.get('hello')).toBe('world');
184
+ });
185
+ (0, vitest_1.it)('restore throws ScratchpadVersionError for unknown version', () => {
186
+ const pad = (0, scratchpad_js_1.createScratchpad)();
187
+ (0, vitest_1.expect)(() => pad.restore({ entries: {}, timestamp: 0, version: 99 })).toThrow(errors_js_1.ScratchpadVersionError);
188
+ });
189
+ (0, vitest_1.it)('serialize() returns same shape as snapshot()', () => {
190
+ const pad = (0, scratchpad_js_1.createScratchpad)();
191
+ pad.set('k', 'v');
192
+ const s1 = pad.snapshot();
193
+ const s2 = pad.serialize();
194
+ (0, vitest_1.expect)(Object.keys(s1.entries)).toEqual(Object.keys(s2.entries));
195
+ (0, vitest_1.expect)(s1.version).toBe(s2.version);
196
+ });
197
+ });
198
+ (0, vitest_1.describe)('toContext formats', () => {
199
+ (0, vitest_1.it)('kv format (default)', () => {
200
+ const pad = (0, scratchpad_js_1.createScratchpad)();
201
+ pad.set('name', 'Alice');
202
+ pad.set('role', 'admin');
203
+ const ctx = pad.toContext();
204
+ (0, vitest_1.expect)(ctx).toContain('name: Alice');
205
+ (0, vitest_1.expect)(ctx).toContain('role: admin');
206
+ });
207
+ (0, vitest_1.it)('json format', () => {
208
+ const pad = (0, scratchpad_js_1.createScratchpad)();
209
+ pad.set('x', 1);
210
+ const ctx = pad.toContext({ format: 'json' });
211
+ const parsed = JSON.parse(ctx);
212
+ (0, vitest_1.expect)(parsed['x']).toBe(1);
213
+ });
214
+ (0, vitest_1.it)('markdown format', () => {
215
+ const pad = (0, scratchpad_js_1.createScratchpad)();
216
+ pad.set('title', 'Hello');
217
+ const ctx = pad.toContext({ format: 'markdown' });
218
+ (0, vitest_1.expect)(ctx).toContain('## title');
219
+ (0, vitest_1.expect)(ctx).toContain('Hello');
220
+ });
221
+ (0, vitest_1.it)('xml format', () => {
222
+ const pad = (0, scratchpad_js_1.createScratchpad)();
223
+ pad.set('greeting', 'hi');
224
+ const ctx = pad.toContext({ format: 'xml' });
225
+ (0, vitest_1.expect)(ctx).toContain('<entry key="greeting">hi</entry>');
226
+ });
227
+ (0, vitest_1.it)('filterTags only includes matching entries', () => {
228
+ const pad = (0, scratchpad_js_1.createScratchpad)();
229
+ pad.set('a', 1, { tags: ['important'] });
230
+ pad.set('b', 2, { tags: ['other'] });
231
+ const ctx = pad.toContext({ format: 'kv', filterTags: ['important'] });
232
+ (0, vitest_1.expect)(ctx).toContain('a: 1');
233
+ (0, vitest_1.expect)(ctx).not.toContain('b: 2');
234
+ });
235
+ (0, vitest_1.it)('filterNamespace only includes entries with matching prefix', () => {
236
+ const pad = (0, scratchpad_js_1.createScratchpad)();
237
+ pad.set('ctx:a', 1);
238
+ pad.set('other:b', 2);
239
+ const ctx = pad.toContext({ format: 'kv', filterNamespace: 'ctx' });
240
+ (0, vitest_1.expect)(ctx).toContain('ctx:a: 1');
241
+ (0, vitest_1.expect)(ctx).not.toContain('other:b');
242
+ });
243
+ (0, vitest_1.it)('header is prepended', () => {
244
+ const pad = (0, scratchpad_js_1.createScratchpad)();
245
+ pad.set('k', 'v');
246
+ const ctx = pad.toContext({ header: '# Context' });
247
+ (0, vitest_1.expect)(ctx.startsWith('# Context')).toBe(true);
248
+ });
249
+ (0, vitest_1.it)('maxTokens truncates output', () => {
250
+ const pad = (0, scratchpad_js_1.createScratchpad)();
251
+ pad.set('long_key', 'a'.repeat(200));
252
+ const ctx = pad.toContext({ maxTokens: 10 });
253
+ (0, vitest_1.expect)(ctx.length).toBeLessThanOrEqual(10);
254
+ });
255
+ });
256
+ (0, vitest_1.describe)('events', () => {
257
+ (0, vitest_1.it)('set event fires with correct data on new key', () => {
258
+ const pad = (0, scratchpad_js_1.createScratchpad)();
259
+ const handler = vitest_1.vi.fn();
260
+ pad.on('set', handler);
261
+ pad.set('k', 'v');
262
+ (0, vitest_1.expect)(handler).toHaveBeenCalledOnce();
263
+ const data = handler.mock.calls[0][0];
264
+ (0, vitest_1.expect)(data.key).toBe('k');
265
+ (0, vitest_1.expect)(data.isUpdate).toBe(false);
266
+ (0, vitest_1.expect)(data.entry.value).toBe('v');
267
+ });
268
+ (0, vitest_1.it)('set event fires with isUpdate=true on overwrite', () => {
269
+ const pad = (0, scratchpad_js_1.createScratchpad)();
270
+ const handler = vitest_1.vi.fn();
271
+ pad.set('k', 1);
272
+ pad.on('set', handler);
273
+ pad.set('k', 2);
274
+ const data = handler.mock.calls[0][0];
275
+ (0, vitest_1.expect)(data.isUpdate).toBe(true);
276
+ });
277
+ (0, vitest_1.it)('delete event fires when key is removed', () => {
278
+ const pad = (0, scratchpad_js_1.createScratchpad)();
279
+ const handler = vitest_1.vi.fn();
280
+ pad.on('delete', handler);
281
+ pad.set('k', 'v');
282
+ pad.delete('k');
283
+ (0, vitest_1.expect)(handler).toHaveBeenCalledOnce();
284
+ (0, vitest_1.expect)(handler.mock.calls[0][0].key).toBe('k');
285
+ });
286
+ (0, vitest_1.it)('expire event fires on lazy expiry via get()', () => {
287
+ let now = 0;
288
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
289
+ const handler = vitest_1.vi.fn();
290
+ pad.on('expire', handler);
291
+ pad.set('k', 'v', { ttl: 10 });
292
+ now = 10;
293
+ pad.get('k');
294
+ (0, vitest_1.expect)(handler).toHaveBeenCalledOnce();
295
+ (0, vitest_1.expect)(handler.mock.calls[0][0].key).toBe('k');
296
+ });
297
+ (0, vitest_1.it)('unsubscribe stops future event delivery', () => {
298
+ const pad = (0, scratchpad_js_1.createScratchpad)();
299
+ const handler = vitest_1.vi.fn();
300
+ const unsub = pad.on('set', handler);
301
+ unsub();
302
+ pad.set('k', 'v');
303
+ (0, vitest_1.expect)(handler).not.toHaveBeenCalled();
304
+ });
305
+ (0, vitest_1.it)('clear event fires with correct count', () => {
306
+ const pad = (0, scratchpad_js_1.createScratchpad)();
307
+ const handler = vitest_1.vi.fn();
308
+ pad.on('clear', handler);
309
+ pad.set('a', 1);
310
+ pad.set('b', 2);
311
+ pad.clear();
312
+ (0, vitest_1.expect)(handler).toHaveBeenCalledOnce();
313
+ (0, vitest_1.expect)(handler.mock.calls[0][0].count).toBe(2);
314
+ });
315
+ });
316
+ (0, vitest_1.describe)('clear()', () => {
317
+ (0, vitest_1.it)('removes all entries', () => {
318
+ const pad = (0, scratchpad_js_1.createScratchpad)();
319
+ pad.set('a', 1);
320
+ pad.set('b', 2);
321
+ pad.clear();
322
+ (0, vitest_1.expect)(pad.keys()).toEqual([]);
323
+ });
324
+ });
325
+ (0, vitest_1.describe)('stats()', () => {
326
+ (0, vitest_1.it)('returns correct size', () => {
327
+ const pad = (0, scratchpad_js_1.createScratchpad)();
328
+ pad.set('a', 1);
329
+ pad.set('b', 2);
330
+ (0, vitest_1.expect)(pad.stats().size).toBe(2);
331
+ });
332
+ (0, vitest_1.it)('excludes expired entries from size', () => {
333
+ let now = 0;
334
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
335
+ pad.set('a', 1, { ttl: 10 });
336
+ pad.set('b', 2);
337
+ now = 10;
338
+ (0, vitest_1.expect)(pad.stats().size).toBe(1);
339
+ });
340
+ (0, vitest_1.it)('reports namespaces correctly', () => {
341
+ const pad = (0, scratchpad_js_1.createScratchpad)();
342
+ pad.set('ctx:item', 1);
343
+ pad.set('mem:item', 2);
344
+ pad.set('nonamespace', 3);
345
+ const st = pad.stats();
346
+ (0, vitest_1.expect)(st.namespaces.sort()).toEqual(['ctx', 'mem']);
347
+ (0, vitest_1.expect)(st.namespaceCount).toBe(2);
348
+ });
349
+ (0, vitest_1.it)('counts tags correctly', () => {
350
+ const pad = (0, scratchpad_js_1.createScratchpad)();
351
+ pad.set('a', 1, { tags: ['t1', 't2'] });
352
+ pad.set('b', 2, { tags: ['t1'] });
353
+ const st = pad.stats();
354
+ (0, vitest_1.expect)(st.tagCounts['t1']).toBe(2);
355
+ (0, vitest_1.expect)(st.tagCounts['t2']).toBe(1);
356
+ });
357
+ (0, vitest_1.it)('rawSize includes expired entries not yet swept', () => {
358
+ let now = 0;
359
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now });
360
+ pad.set('a', 1, { ttl: 10 });
361
+ now = 10; // expired but still in store until accessed
362
+ // size should exclude expired, rawSize includes them
363
+ (0, vitest_1.expect)(pad.stats().rawSize).toBe(1);
364
+ (0, vitest_1.expect)(pad.stats().size).toBe(0);
365
+ });
366
+ });
367
+ (0, vitest_1.describe)('sweep', () => {
368
+ (0, vitest_1.it)('active sweep removes expired entries and emits expire', async () => {
369
+ vitest_1.vi.useFakeTimers();
370
+ let now = 0;
371
+ const pad = (0, scratchpad_js_1.createScratchpad)({ now: () => now, sweepIntervalMs: 100 });
372
+ const handler = vitest_1.vi.fn();
373
+ pad.on('expire', handler);
374
+ pad.set('a', 1, { ttl: 50 });
375
+ now = 100; // entry is expired
376
+ vitest_1.vi.advanceTimersByTime(100); // trigger sweep
377
+ (0, vitest_1.expect)(handler).toHaveBeenCalledOnce();
378
+ (0, vitest_1.expect)(handler.mock.calls[0][0].key).toBe('a');
379
+ await pad.destroy();
380
+ vitest_1.vi.useRealTimers();
381
+ });
382
+ });
383
+ (0, vitest_1.describe)('persistence adapter', () => {
384
+ (0, vitest_1.it)('save() calls adapter.save with snapshot', async () => {
385
+ const saveFn = vitest_1.vi.fn().mockResolvedValue(undefined);
386
+ const loadFn = vitest_1.vi.fn().mockResolvedValue(null);
387
+ const pad = (0, scratchpad_js_1.createScratchpad)({
388
+ persistence: { save: saveFn, load: loadFn },
389
+ });
390
+ pad.set('k', 'v');
391
+ await pad.save();
392
+ (0, vitest_1.expect)(saveFn).toHaveBeenCalledOnce();
393
+ const snap = saveFn.mock.calls[0][0];
394
+ (0, vitest_1.expect)(snap.entries['k'].value).toBe('v');
395
+ });
396
+ (0, vitest_1.it)('load() calls adapter.load and restores entries', async () => {
397
+ const snap = {
398
+ entries: { loaded: { key: 'loaded', value: 42, createdAt: 0, updatedAt: 0, accessedAt: 0, ttl: null, slidingTtl: false, tags: [] } },
399
+ timestamp: 0,
400
+ version: 1,
401
+ };
402
+ const saveFn = vitest_1.vi.fn().mockResolvedValue(undefined);
403
+ const loadFn = vitest_1.vi.fn().mockResolvedValue(snap);
404
+ const pad = (0, scratchpad_js_1.createScratchpad)({
405
+ persistence: { save: saveFn, load: loadFn },
406
+ });
407
+ await pad.load();
408
+ (0, vitest_1.expect)(pad.get('loaded')).toBe(42);
409
+ });
410
+ (0, vitest_1.it)('save()/load() are no-ops without persistence adapter', async () => {
411
+ const pad = (0, scratchpad_js_1.createScratchpad)();
412
+ await (0, vitest_1.expect)(pad.save()).resolves.toBeUndefined();
413
+ await (0, vitest_1.expect)(pad.load()).resolves.toBeUndefined();
414
+ });
415
+ });
416
+ (0, vitest_1.describe)('destroy()', () => {
417
+ (0, vitest_1.it)('resolves successfully', async () => {
418
+ const pad = (0, scratchpad_js_1.createScratchpad)();
419
+ await (0, vitest_1.expect)(pad.destroy()).resolves.toBeUndefined();
420
+ });
421
+ });
422
+ //# sourceMappingURL=scratchpad.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratchpad.test.js","sourceRoot":"","sources":["../../src/__tests__/scratchpad.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ScratchpadEntry, ToContextOptions } from './types.js';
2
+ export declare function toContext(entries: ScratchpadEntry[], options?: ToContextOptions): string;
3
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAmDxF"}