@agent-relay/continuity 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.
@@ -0,0 +1,616 @@
1
+ /**
2
+ * Continuity Manager
3
+ *
4
+ * Central service for managing session continuity.
5
+ * Coordinates ledger storage, handoff creation, and context injection.
6
+ */
7
+ import path from 'node:path';
8
+ import fs from 'node:fs/promises';
9
+ import crypto from 'node:crypto';
10
+ import os from 'node:os';
11
+ import { LedgerStore } from './ledger-store.js';
12
+ import { HandoffStore } from './handoff-store.js';
13
+ import { parseSaveContent, parseHandoffContent, isPlaceholderValue, filterPlaceholders, } from './parser.js';
14
+ import { formatStartupContext, formatLedger, formatHandoff, formatSearchResults, formatBriefStatus, } from './formatter.js';
15
+ /**
16
+ * ContinuityManager - Central service for session continuity
17
+ */
18
+ export class ContinuityManager {
19
+ paths;
20
+ ledgerStore;
21
+ handoffStore;
22
+ defaultCli;
23
+ initialized = false;
24
+ constructor(options = {}) {
25
+ const basePath = options.basePath ||
26
+ path.join(os.homedir(), '.agent-relay', 'continuity');
27
+ this.paths = {
28
+ base: basePath,
29
+ ledgers: path.join(basePath, 'ledgers'),
30
+ handoffs: path.join(basePath, 'handoffs'),
31
+ artifactDb: path.join(basePath, 'artifact-index.db'),
32
+ };
33
+ this.ledgerStore = new LedgerStore(this.paths.ledgers);
34
+ this.handoffStore = new HandoffStore(this.paths.handoffs);
35
+ this.defaultCli = options.defaultCli || 'unknown';
36
+ }
37
+ /**
38
+ * Initialize the continuity system (create directories)
39
+ */
40
+ async initialize() {
41
+ if (this.initialized)
42
+ return;
43
+ await fs.mkdir(this.paths.base, { recursive: true });
44
+ await this.ledgerStore.initialize();
45
+ await this.handoffStore.initialize();
46
+ this.initialized = true;
47
+ }
48
+ /**
49
+ * Generate a session ID
50
+ */
51
+ generateSessionId() {
52
+ return `sess_${crypto.randomBytes(8).toString('hex')}`;
53
+ }
54
+ /**
55
+ * Generate a unique agent ID using UUID v4
56
+ */
57
+ generateAgentId() {
58
+ // Use crypto.randomUUID() for proper UUID v4
59
+ return crypto.randomUUID();
60
+ }
61
+ // =========================================================================
62
+ // Ledger Operations
63
+ // =========================================================================
64
+ /**
65
+ * Get or create a ledger for an agent
66
+ */
67
+ async getOrCreateLedger(agentName, cli, agentId) {
68
+ await this.initialize();
69
+ let ledger = await this.ledgerStore.load(agentName);
70
+ if (!ledger) {
71
+ ledger = await this.ledgerStore.create(agentName, cli || this.defaultCli, this.generateSessionId(), agentId || this.generateAgentId());
72
+ }
73
+ return ledger;
74
+ }
75
+ /**
76
+ * Find a ledger by agent ID (for resume functionality)
77
+ */
78
+ async findLedgerByAgentId(agentId) {
79
+ await this.initialize();
80
+ return this.ledgerStore.findByAgentId(agentId);
81
+ }
82
+ /**
83
+ * Get a ledger for an agent (returns null if not exists)
84
+ */
85
+ async getLedger(agentName) {
86
+ await this.initialize();
87
+ return this.ledgerStore.load(agentName);
88
+ }
89
+ /**
90
+ * Save a ledger, optionally creating a handoff
91
+ */
92
+ async saveLedger(agentName, content, options = {}) {
93
+ await this.initialize();
94
+ // Parse content if string, otherwise filter placeholders from object input
95
+ // This ensures placeholder values like "...", "task1", etc. never get saved
96
+ let updates;
97
+ if (typeof content === 'string') {
98
+ updates = parseSaveContent(content);
99
+ }
100
+ else {
101
+ // Filter placeholders from object input (e.g., from [[SUMMARY]] blocks)
102
+ updates = this.filterUpdatesPlaceholders(content);
103
+ }
104
+ // Get or create existing ledger
105
+ let ledger = await this.ledgerStore.load(agentName);
106
+ if (ledger) {
107
+ // Merge updates into existing ledger (preserve agentId)
108
+ ledger = {
109
+ ...ledger,
110
+ ...updates,
111
+ agentName,
112
+ agentId: ledger.agentId, // Always preserve existing agentId
113
+ updatedAt: new Date(),
114
+ };
115
+ }
116
+ else {
117
+ // Create new ledger with new agentId
118
+ ledger = {
119
+ agentName,
120
+ agentId: this.generateAgentId(),
121
+ sessionId: this.generateSessionId(),
122
+ cli: this.defaultCli,
123
+ currentTask: '',
124
+ completed: [],
125
+ inProgress: [],
126
+ blocked: [],
127
+ keyDecisions: [],
128
+ uncertainItems: [],
129
+ fileContext: [],
130
+ ...updates,
131
+ updatedAt: new Date(),
132
+ };
133
+ }
134
+ await this.ledgerStore.save(agentName, ledger);
135
+ // Create handoff if requested
136
+ if (options.createHandoff) {
137
+ await this.createHandoffFromLedger(ledger, options.triggerReason || 'manual');
138
+ }
139
+ return ledger;
140
+ }
141
+ /**
142
+ * Update specific fields in a ledger
143
+ */
144
+ async updateLedger(agentName, updates) {
145
+ await this.initialize();
146
+ return this.ledgerStore.update(agentName, updates);
147
+ }
148
+ /**
149
+ * Add an uncertain item to the ledger
150
+ */
151
+ async addUncertainItem(agentName, item) {
152
+ await this.initialize();
153
+ const prefixedItem = item.startsWith('UNCONFIRMED:')
154
+ ? item
155
+ : `UNCONFIRMED: ${item}`;
156
+ return this.ledgerStore.addToList(agentName, 'uncertainItems', prefixedItem);
157
+ }
158
+ /**
159
+ * Delete a ledger
160
+ */
161
+ async deleteLedger(agentName) {
162
+ await this.initialize();
163
+ return this.ledgerStore.delete(agentName);
164
+ }
165
+ // =========================================================================
166
+ // Handoff Operations
167
+ // =========================================================================
168
+ /**
169
+ * Create a handoff from a ledger
170
+ */
171
+ async createHandoffFromLedger(ledger, triggerReason) {
172
+ const handoff = {
173
+ id: '', // Will be generated by store
174
+ agentName: ledger.agentName,
175
+ agentId: ledger.agentId,
176
+ cli: ledger.cli,
177
+ summary: '',
178
+ taskDescription: ledger.currentTask,
179
+ completedWork: [...ledger.completed],
180
+ nextSteps: [...ledger.inProgress],
181
+ fileReferences: [...ledger.fileContext],
182
+ decisions: [...ledger.keyDecisions],
183
+ relatedHandoffs: [],
184
+ createdAt: new Date(),
185
+ triggerReason,
186
+ trajectoryId: ledger.trajectoryId,
187
+ pderoPhase: ledger.pderoPhase,
188
+ };
189
+ await this.handoffStore.save(handoff);
190
+ return handoff;
191
+ }
192
+ /**
193
+ * Create a handoff from parsed content
194
+ */
195
+ async createHandoff(agentName, content, triggerReason = 'manual') {
196
+ await this.initialize();
197
+ const parsed = typeof content === 'string' ? parseHandoffContent(content) : content;
198
+ const handoff = {
199
+ id: '',
200
+ agentName,
201
+ cli: this.defaultCli,
202
+ summary: parsed.summary || '',
203
+ taskDescription: parsed.taskDescription || '',
204
+ completedWork: parsed.completedWork,
205
+ nextSteps: parsed.nextSteps,
206
+ fileReferences: parsed.fileReferences,
207
+ decisions: parsed.decisions,
208
+ relatedHandoffs: [],
209
+ createdAt: new Date(),
210
+ triggerReason,
211
+ learnings: parsed.learnings,
212
+ };
213
+ const id = await this.handoffStore.save(handoff);
214
+ handoff.id = id;
215
+ return handoff;
216
+ }
217
+ /**
218
+ * Get the latest handoff for an agent
219
+ */
220
+ async getLatestHandoff(agentName) {
221
+ await this.initialize();
222
+ return this.handoffStore.getLatest(agentName);
223
+ }
224
+ /**
225
+ * Get a handoff by ID
226
+ */
227
+ async getHandoff(handoffId) {
228
+ await this.initialize();
229
+ return this.handoffStore.loadById(handoffId);
230
+ }
231
+ /**
232
+ * List handoffs for an agent
233
+ */
234
+ async listHandoffs(agentName, limit) {
235
+ await this.initialize();
236
+ return this.handoffStore.listForAgent(agentName, limit);
237
+ }
238
+ /**
239
+ * Search handoffs (basic text search - FTS to be added)
240
+ */
241
+ async searchHandoffs(query, options = {}) {
242
+ await this.initialize();
243
+ const queryLower = query.toLowerCase();
244
+ const results = [];
245
+ // Get all agents or filter by agent
246
+ const agents = options.agentName
247
+ ? [options.agentName]
248
+ : await this.handoffStore.listAgents();
249
+ for (const agent of agents) {
250
+ const handoffs = await this.handoffStore.listForAgent(agent);
251
+ for (const handoff of handoffs) {
252
+ // Filter by date if specified
253
+ if (options.since && handoff.createdAt < options.since) {
254
+ continue;
255
+ }
256
+ // Filter by trigger reason if specified
257
+ if (options.triggerReason &&
258
+ handoff.triggerReason !== options.triggerReason) {
259
+ continue;
260
+ }
261
+ // Basic text search
262
+ const searchText = [
263
+ handoff.taskDescription,
264
+ handoff.summary,
265
+ ...handoff.completedWork,
266
+ ...handoff.nextSteps,
267
+ ...handoff.decisions.map((d) => d.decision),
268
+ ...(handoff.learnings || []),
269
+ ]
270
+ .join(' ')
271
+ .toLowerCase();
272
+ if (searchText.includes(queryLower)) {
273
+ results.push(handoff);
274
+ }
275
+ }
276
+ }
277
+ // Apply limit
278
+ if (options.limit) {
279
+ return results.slice(0, options.limit);
280
+ }
281
+ return results;
282
+ }
283
+ // =========================================================================
284
+ // Context Injection
285
+ // =========================================================================
286
+ /**
287
+ * Get startup context for an agent (for injection on spawn).
288
+ * Applies defensive filtering to remove any placeholder values.
289
+ */
290
+ async getStartupContext(agentName) {
291
+ await this.initialize();
292
+ let ledger = await this.ledgerStore.load(agentName);
293
+ const handoff = await this.handoffStore.getLatest(agentName);
294
+ if (!ledger && !handoff) {
295
+ return null;
296
+ }
297
+ // Defensive filtering: clean any placeholder values that may have slipped through
298
+ if (ledger) {
299
+ ledger = this.filterLedgerPlaceholders(ledger);
300
+ }
301
+ const context = {
302
+ ledger: ledger || undefined,
303
+ handoff: handoff ? this.filterHandoffPlaceholders(handoff) : undefined,
304
+ learnings: handoff?.learnings ? filterPlaceholders(handoff.learnings) : undefined,
305
+ formatted: '',
306
+ };
307
+ context.formatted = formatStartupContext(context);
308
+ return context;
309
+ }
310
+ /**
311
+ * Filter placeholder values from a ledger (defensive)
312
+ */
313
+ filterLedgerPlaceholders(ledger) {
314
+ return {
315
+ ...ledger,
316
+ currentTask: isPlaceholderValue(ledger.currentTask) ? '' : ledger.currentTask,
317
+ completed: filterPlaceholders(ledger.completed),
318
+ inProgress: filterPlaceholders(ledger.inProgress),
319
+ blocked: filterPlaceholders(ledger.blocked),
320
+ uncertainItems: filterPlaceholders(ledger.uncertainItems),
321
+ fileContext: ledger.fileContext.filter(f => !isPlaceholderValue(f.path)),
322
+ keyDecisions: ledger.keyDecisions.filter(d => !isPlaceholderValue(d.decision)),
323
+ };
324
+ }
325
+ /**
326
+ * Filter placeholder values from a handoff (defensive)
327
+ */
328
+ filterHandoffPlaceholders(handoff) {
329
+ return {
330
+ ...handoff,
331
+ taskDescription: isPlaceholderValue(handoff.taskDescription) ? '' : handoff.taskDescription,
332
+ summary: isPlaceholderValue(handoff.summary) ? '' : handoff.summary,
333
+ completedWork: filterPlaceholders(handoff.completedWork),
334
+ nextSteps: filterPlaceholders(handoff.nextSteps),
335
+ fileReferences: handoff.fileReferences.filter(f => !isPlaceholderValue(f.path)),
336
+ decisions: handoff.decisions.filter(d => !isPlaceholderValue(d.decision)),
337
+ learnings: handoff.learnings ? filterPlaceholders(handoff.learnings) : undefined,
338
+ };
339
+ }
340
+ /**
341
+ * Filter placeholder values from ledger updates (for object input to saveLedger).
342
+ * This ensures placeholder values like "...", "task1", etc. don't get saved.
343
+ */
344
+ filterUpdatesPlaceholders(updates) {
345
+ const filtered = { ...updates };
346
+ // Filter string fields
347
+ if (filtered.currentTask !== undefined) {
348
+ filtered.currentTask = isPlaceholderValue(filtered.currentTask) ? undefined : filtered.currentTask;
349
+ if (filtered.currentTask === undefined)
350
+ delete filtered.currentTask;
351
+ }
352
+ // Filter array fields
353
+ if (filtered.completed) {
354
+ filtered.completed = filterPlaceholders(filtered.completed);
355
+ if (filtered.completed.length === 0)
356
+ delete filtered.completed;
357
+ }
358
+ if (filtered.inProgress) {
359
+ filtered.inProgress = filterPlaceholders(filtered.inProgress);
360
+ if (filtered.inProgress.length === 0)
361
+ delete filtered.inProgress;
362
+ }
363
+ if (filtered.blocked) {
364
+ filtered.blocked = filterPlaceholders(filtered.blocked);
365
+ if (filtered.blocked.length === 0)
366
+ delete filtered.blocked;
367
+ }
368
+ if (filtered.uncertainItems) {
369
+ filtered.uncertainItems = filterPlaceholders(filtered.uncertainItems);
370
+ if (filtered.uncertainItems.length === 0)
371
+ delete filtered.uncertainItems;
372
+ }
373
+ // Filter complex array fields
374
+ if (filtered.fileContext) {
375
+ filtered.fileContext = filtered.fileContext.filter(f => !isPlaceholderValue(f.path));
376
+ if (filtered.fileContext.length === 0)
377
+ delete filtered.fileContext;
378
+ }
379
+ if (filtered.keyDecisions) {
380
+ filtered.keyDecisions = filtered.keyDecisions.filter(d => !isPlaceholderValue(d.decision));
381
+ if (filtered.keyDecisions.length === 0)
382
+ delete filtered.keyDecisions;
383
+ }
384
+ return filtered;
385
+ }
386
+ /**
387
+ * Format a ledger for display/injection
388
+ */
389
+ formatLedger(ledger, compact = false) {
390
+ return formatLedger(ledger, { compact });
391
+ }
392
+ /**
393
+ * Format a handoff for display/injection
394
+ */
395
+ formatHandoff(handoff, compact = false) {
396
+ return formatHandoff(handoff, { compact });
397
+ }
398
+ /**
399
+ * Format search results
400
+ */
401
+ formatSearchResults(handoffs, query) {
402
+ return formatSearchResults(handoffs, query);
403
+ }
404
+ /**
405
+ * Get a brief status summary
406
+ */
407
+ async getBriefStatus(agentName) {
408
+ const ledger = await this.getLedger(agentName);
409
+ const handoff = await this.getLatestHandoff(agentName);
410
+ return formatBriefStatus(ledger, handoff);
411
+ }
412
+ // =========================================================================
413
+ // Command Handling
414
+ // =========================================================================
415
+ /**
416
+ * Handle a continuity command from agent output
417
+ */
418
+ async handleCommand(agentName, command) {
419
+ switch (command.type) {
420
+ case 'save':
421
+ await this.saveLedger(agentName, command.content || '', {
422
+ createHandoff: command.createHandoff,
423
+ });
424
+ return null; // No response needed
425
+ case 'load': {
426
+ const context = await this.getStartupContext(agentName);
427
+ return context?.formatted || 'No continuity data found.';
428
+ }
429
+ case 'search': {
430
+ const results = await this.searchHandoffs(command.query || '', {
431
+ limit: 5,
432
+ });
433
+ return this.formatSearchResults(results, command.query || '');
434
+ }
435
+ case 'uncertain':
436
+ if (command.item) {
437
+ await this.addUncertainItem(agentName, command.item);
438
+ }
439
+ return null;
440
+ case 'handoff':
441
+ await this.createHandoff(agentName, command.content || '');
442
+ return null;
443
+ default:
444
+ return null;
445
+ }
446
+ }
447
+ // =========================================================================
448
+ // Auto-save (for crash/restart)
449
+ // =========================================================================
450
+ /**
451
+ * Auto-save current state (called by wrapper on agent exit)
452
+ * @param agentName - Name of the agent
453
+ * @param reason - Why the save is happening
454
+ * @param sessionEndData - Optional data from [[SESSION_END]] block to populate handoff
455
+ */
456
+ async autoSave(agentName, reason, sessionEndData) {
457
+ await this.initialize();
458
+ const triggerReason = reason === 'crash'
459
+ ? 'crash'
460
+ : reason === 'restart'
461
+ ? 'auto_restart'
462
+ : 'session_end';
463
+ // If we have SESSION_END data, use it to create handoff directly
464
+ // This fixes the issue where ledger is empty but SESSION_END has content
465
+ if (sessionEndData && (sessionEndData.summary || sessionEndData.completedTasks?.length)) {
466
+ const handoff = {
467
+ id: '',
468
+ agentName,
469
+ cli: this.defaultCli,
470
+ summary: sessionEndData.summary || '',
471
+ taskDescription: '',
472
+ completedWork: sessionEndData.completedTasks || [],
473
+ nextSteps: [],
474
+ fileReferences: [],
475
+ decisions: [],
476
+ relatedHandoffs: [],
477
+ createdAt: new Date(),
478
+ triggerReason,
479
+ };
480
+ await this.handoffStore.save(handoff);
481
+ return;
482
+ }
483
+ // Fall back to ledger-based handoff if no SESSION_END data
484
+ const ledger = await this.ledgerStore.load(agentName);
485
+ if (ledger) {
486
+ await this.createHandoffFromLedger(ledger, triggerReason);
487
+ }
488
+ }
489
+ // =========================================================================
490
+ // Cleanup
491
+ // =========================================================================
492
+ /**
493
+ * Clean placeholder data from all ledgers.
494
+ * Removes known placeholder/template values that were incorrectly saved.
495
+ * Returns the number of ledgers that were cleaned.
496
+ */
497
+ async cleanupPlaceholders() {
498
+ await this.initialize();
499
+ const agents = await this.ledgerStore.listAgents();
500
+ const cleanedAgents = [];
501
+ for (const agentName of agents) {
502
+ const ledger = await this.ledgerStore.load(agentName);
503
+ if (!ledger)
504
+ continue;
505
+ let modified = false;
506
+ // Clean currentTask
507
+ if (ledger.currentTask && isPlaceholderValue(ledger.currentTask)) {
508
+ ledger.currentTask = '';
509
+ modified = true;
510
+ }
511
+ // Clean arrays
512
+ const originalCompleted = ledger.completed.length;
513
+ ledger.completed = filterPlaceholders(ledger.completed);
514
+ if (ledger.completed.length !== originalCompleted)
515
+ modified = true;
516
+ const originalInProgress = ledger.inProgress.length;
517
+ ledger.inProgress = filterPlaceholders(ledger.inProgress);
518
+ if (ledger.inProgress.length !== originalInProgress)
519
+ modified = true;
520
+ const originalBlocked = ledger.blocked.length;
521
+ ledger.blocked = filterPlaceholders(ledger.blocked);
522
+ if (ledger.blocked.length !== originalBlocked)
523
+ modified = true;
524
+ const originalUncertain = ledger.uncertainItems.length;
525
+ ledger.uncertainItems = filterPlaceholders(ledger.uncertainItems);
526
+ if (ledger.uncertainItems.length !== originalUncertain)
527
+ modified = true;
528
+ // Clean file context
529
+ const originalFiles = ledger.fileContext.length;
530
+ ledger.fileContext = ledger.fileContext.filter(f => !isPlaceholderValue(f.path));
531
+ if (ledger.fileContext.length !== originalFiles)
532
+ modified = true;
533
+ // Clean decisions
534
+ const originalDecisions = ledger.keyDecisions.length;
535
+ ledger.keyDecisions = ledger.keyDecisions.filter(d => !isPlaceholderValue(d.decision));
536
+ if (ledger.keyDecisions.length !== originalDecisions)
537
+ modified = true;
538
+ if (modified) {
539
+ await this.ledgerStore.save(agentName, ledger);
540
+ cleanedAgents.push(agentName);
541
+ }
542
+ }
543
+ return { cleaned: cleanedAgents.length, agents: cleanedAgents };
544
+ }
545
+ /**
546
+ * Clear all continuity data for an agent
547
+ */
548
+ async clearAgent(agentName) {
549
+ await this.initialize();
550
+ await this.ledgerStore.delete(agentName);
551
+ // Note: We don't delete handoffs as they're meant to be permanent
552
+ }
553
+ /**
554
+ * List all agents with continuity data
555
+ */
556
+ async listAgents() {
557
+ await this.initialize();
558
+ const ledgerAgents = await this.ledgerStore.listAgents();
559
+ const handoffAgents = await this.handoffStore.listAgents();
560
+ // Combine and deduplicate
561
+ const allAgents = new Set([...ledgerAgents, ...handoffAgents]);
562
+ return Array.from(allAgents).sort();
563
+ }
564
+ /**
565
+ * Get continuity paths
566
+ */
567
+ getPaths() {
568
+ return { ...this.paths };
569
+ }
570
+ }
571
+ // Singleton instance with lazy initialization
572
+ let instance = null;
573
+ let instancePromise = null;
574
+ /**
575
+ * Get the singleton ContinuityManager instance (sync version)
576
+ *
577
+ * Note: This is safe for most uses since ContinuityManager methods
578
+ * call initialize() internally. The race condition only matters
579
+ * if multiple calls happen before the first completes AND they
580
+ * pass different options (which is unlikely in practice).
581
+ */
582
+ export function getContinuityManager(options) {
583
+ if (!instance) {
584
+ instance = new ContinuityManager(options);
585
+ }
586
+ return instance;
587
+ }
588
+ /**
589
+ * Get the singleton ContinuityManager instance (async version)
590
+ *
591
+ * This is the thread-safe version that ensures only one instance
592
+ * is created even with concurrent calls. Use this in async contexts
593
+ * where race conditions are possible.
594
+ */
595
+ export async function getContinuityManagerAsync(options) {
596
+ if (instance) {
597
+ return instance;
598
+ }
599
+ if (!instancePromise) {
600
+ instancePromise = (async () => {
601
+ const manager = new ContinuityManager(options);
602
+ await manager.initialize();
603
+ instance = manager;
604
+ return manager;
605
+ })();
606
+ }
607
+ return instancePromise;
608
+ }
609
+ /**
610
+ * Reset the singleton instance (for testing)
611
+ */
612
+ export function resetContinuityManager() {
613
+ instance = null;
614
+ instancePromise = null;
615
+ }
616
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}