@timmeck/brain 3.36.82 → 3.36.84

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 (42) hide show
  1. package/README.md +1 -0
  2. package/dist/brain.d.ts +2 -0
  3. package/dist/brain.js +12 -3
  4. package/dist/brain.js.map +1 -1
  5. package/dist/cli/commands/experiment-ledger.d.ts +2 -0
  6. package/dist/cli/commands/experiment-ledger.js +113 -0
  7. package/dist/cli/commands/experiment-ledger.js.map +1 -0
  8. package/dist/cli/commands/retention.d.ts +2 -0
  9. package/dist/cli/commands/retention.js +127 -0
  10. package/dist/cli/commands/retention.js.map +1 -0
  11. package/dist/db/migrations/015_insight_lifecycle.d.ts +2 -0
  12. package/dist/db/migrations/015_insight_lifecycle.js +18 -0
  13. package/dist/db/migrations/015_insight_lifecycle.js.map +1 -0
  14. package/dist/db/migrations/016_retrieval_metadata.d.ts +11 -0
  15. package/dist/db/migrations/016_retrieval_metadata.js +32 -0
  16. package/dist/db/migrations/016_retrieval_metadata.js.map +1 -0
  17. package/dist/db/migrations/017_dream_facts.d.ts +8 -0
  18. package/dist/db/migrations/017_dream_facts.js +15 -0
  19. package/dist/db/migrations/017_dream_facts.js.map +1 -0
  20. package/dist/db/migrations/index.js +6 -0
  21. package/dist/db/migrations/index.js.map +1 -1
  22. package/dist/hooks/prompt-submit.js +136 -15
  23. package/dist/hooks/prompt-submit.js.map +1 -1
  24. package/dist/index.js +4 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/init/engine-factory.d.ts +4 -1
  27. package/dist/init/engine-factory.js +13 -1
  28. package/dist/init/engine-factory.js.map +1 -1
  29. package/dist/init/lifecycle.d.ts +3 -1
  30. package/dist/init/lifecycle.js +62 -7
  31. package/dist/init/lifecycle.js.map +1 -1
  32. package/dist/ipc/router.d.ts +3 -0
  33. package/dist/ipc/router.js +35 -0
  34. package/dist/ipc/router.js.map +1 -1
  35. package/dist/mcp/experiment-ledger-tools.d.ts +5 -0
  36. package/dist/mcp/experiment-ledger-tools.js +35 -0
  37. package/dist/mcp/experiment-ledger-tools.js.map +1 -0
  38. package/dist/mcp/http-server.js +2 -0
  39. package/dist/mcp/http-server.js.map +1 -1
  40. package/dist/mcp/server.js +2 -0
  41. package/dist/mcp/server.js.map +1 -1
  42. package/package.json +2 -2
@@ -32,7 +32,7 @@ export function logCrash(config, type, err) {
32
32
  /** Track last VACUUM time to avoid running too often */
33
33
  let lastVacuumTime = 0;
34
34
  const VACUUM_INTERVAL_MS = 7 * 24 * 60 * 60 * 1000; // 1 week
35
- export function runRetentionCleanup(db, config) {
35
+ export function runRetentionCleanup(db, config, retentionEngine) {
36
36
  const logger = getLogger();
37
37
  try {
38
38
  const now = Date.now();
@@ -40,21 +40,35 @@ export function runRetentionCleanup(db, config) {
40
40
  const insightCutoff = new Date(now - config.retention.insightDays * 2 * 86_400_000).toISOString();
41
41
  // Delete resolved errors older than retention period
42
42
  const errResult = db.prepare("DELETE FROM errors WHERE status = 'resolved' AND created_at < ?").run(errorCutoff);
43
- // Delete inactive insights older than 2× insightDays
44
- const insResult = db.prepare("DELETE FROM insights WHERE status = 'inactive' AND created_at < ?").run(insightCutoff);
43
+ // Delete archived insights older than 2× insightDays (use lifecycle column, fallback to active)
44
+ let insResult;
45
+ try {
46
+ insResult = db.prepare("DELETE FROM insights WHERE lifecycle = 'archived' AND created_at < ?").run(insightCutoff);
47
+ }
48
+ catch {
49
+ // Fallback if lifecycle column doesn't exist yet
50
+ insResult = db.prepare("DELETE FROM insights WHERE active = 0 AND created_at < ?").run(insightCutoff);
51
+ }
45
52
  if (Number(errResult.changes) > 0 || Number(insResult.changes) > 0) {
46
53
  logger.info(`[retention] Cleaned up ${errResult.changes} old errors, ${insResult.changes} old insights`);
47
54
  }
55
+ // Insight Lifecycle Transitions
56
+ try {
57
+ runInsightLifecycle(db, logger);
58
+ }
59
+ catch (err) {
60
+ logger.debug(`[retention] Insight lifecycle skipped: ${err.message}`);
61
+ }
48
62
  // Cap active insights to prevent unbounded growth
49
63
  const MAX_ACTIVE_INSIGHTS = 5000;
50
64
  try {
51
- const activeCount = db.prepare("SELECT COUNT(*) as cnt FROM insights WHERE status = 'active'").get().cnt;
65
+ const activeCount = db.prepare("SELECT COUNT(*) as cnt FROM insights WHERE active = 1").get().cnt;
52
66
  if (activeCount > MAX_ACTIVE_INSIGHTS) {
53
67
  const excess = activeCount - MAX_ACTIVE_INSIGHTS;
54
68
  const deactivated = db.prepare(`
55
- UPDATE insights SET status = 'inactive' WHERE id IN (
56
- SELECT id FROM insights WHERE status = 'active'
57
- ORDER BY priority ASC, confidence ASC LIMIT ?
69
+ UPDATE insights SET active = 0, lifecycle = 'archived' WHERE id IN (
70
+ SELECT id FROM insights WHERE active = 1
71
+ ORDER BY priority ASC LIMIT ?
58
72
  )
59
73
  `).run(excess);
60
74
  logger.info(`[retention] Capped active insights: deactivated ${deactivated.changes} (was ${activeCount}, cap ${MAX_ACTIVE_INSIGHTS})`);
@@ -72,12 +86,53 @@ export function runRetentionCleanup(db, config) {
72
86
  lastVacuumTime = now;
73
87
  logger.info('[retention] DB vacuumed');
74
88
  }
89
+ // RetentionPolicyEngine — intelligent multi-table cleanup
90
+ if (retentionEngine) {
91
+ try {
92
+ retentionEngine.run(false); // live execution
93
+ }
94
+ catch (err) {
95
+ logger.debug(`[retention] RetentionPolicyEngine skipped: ${err.message}`);
96
+ }
97
+ }
75
98
  logger.debug('[retention] DB optimized');
76
99
  }
77
100
  catch (err) {
78
101
  logger.warn(`[retention] Cleanup failed (non-critical): ${err.message}`);
79
102
  }
80
103
  }
104
+ /**
105
+ * Insight Lifecycle Transitions:
106
+ * provisional (< 7 days, not referenced) → confirmed (referenced or priority ≥ 7)
107
+ * confirmed → archived (> 30 days, not rated, priority < 5)
108
+ * archived > 90 days → deleted
109
+ */
110
+ function runInsightLifecycle(db, logger) {
111
+ // 1. Promote provisional → confirmed: insights older than 7 days with priority ≥ 7 or rated
112
+ const promoted = db.prepare(`
113
+ UPDATE insights SET lifecycle = 'confirmed'
114
+ WHERE lifecycle = 'provisional'
115
+ AND (priority >= 7 OR rating IS NOT NULL)
116
+ AND created_at < datetime('now', '-7 days')
117
+ `).run();
118
+ // 2. Archive confirmed → archived: insights older than 30 days, not rated, low priority
119
+ const archived = db.prepare(`
120
+ UPDATE insights SET lifecycle = 'archived', active = 0
121
+ WHERE lifecycle = 'confirmed'
122
+ AND priority < 5
123
+ AND rating IS NULL
124
+ AND created_at < datetime('now', '-30 days')
125
+ `).run();
126
+ // 3. Delete archived → deleted: insights archived for > 90 days
127
+ const deleted = db.prepare(`
128
+ DELETE FROM insights
129
+ WHERE lifecycle = 'archived'
130
+ AND created_at < datetime('now', '-90 days')
131
+ `).run();
132
+ if (Number(promoted.changes) > 0 || Number(archived.changes) > 0 || Number(deleted.changes) > 0) {
133
+ logger.info(`[lifecycle] Insights: ${promoted.changes} promoted, ${archived.changes} archived, ${deleted.changes} deleted`);
134
+ }
135
+ }
81
136
  export function cleanup(refs) {
82
137
  if (refs.cleanupTimer) {
83
138
  clearInterval(refs.cleanupTimer);
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/init/lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/init/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -172,9 +172,12 @@ export interface Services {
172
172
  tokenBudgetTracker?: import('@timmeck/brain-core').EngineTokenBudgetTracker;
173
173
  cycleOutcomeTracker?: import('@timmeck/brain-core').CycleOutcomeTracker;
174
174
  conversationMemory?: import('@timmeck/brain-core').ConversationMemory;
175
+ retrievalMaintenance?: import('@timmeck/brain-core').RetrievalMaintenanceEngine;
175
176
  browserAgent?: import('@timmeck/brain-core').BrowserAgent;
176
177
  brainBot?: import('@timmeck/brain-core').BrainBot;
177
178
  autonomousResearchLoop?: import('@timmeck/brain-core').AutonomousResearchLoop;
179
+ experimentLedger?: import('@timmeck/brain-core').ExperimentLedger;
180
+ retentionEngine?: import('@timmeck/brain-core').RetentionPolicyEngine;
178
181
  }
179
182
  type MethodHandler = (params: unknown) => unknown | Promise<unknown>;
180
183
  export declare class IpcRouter {
@@ -786,6 +786,13 @@ export class IpcRouter {
786
786
  throw new Error('Dream engine not available'); return s.dreamEngine.getRetrospective(p(params)?.limit); }],
787
787
  ['dream.pruning_efficiency', () => { if (!s.dreamEngine)
788
788
  throw new Error('Dream engine not available'); return s.dreamEngine.getPruningEfficiency(); }],
789
+ // ─── Retrieval Maintenance ───────────────────────────────────
790
+ ['retrieval.status', () => { if (!s.retrievalMaintenance)
791
+ throw new Error('RetrievalMaintenance not available'); return s.retrievalMaintenance.getStatus(); }],
792
+ ['retrieval.refresh', () => { if (!s.retrievalMaintenance)
793
+ throw new Error('RetrievalMaintenance not available'); return s.retrievalMaintenance.runMaintenance(); }],
794
+ ['retrieval.candidates', (params) => { if (!s.retrievalMaintenance)
795
+ throw new Error('RetrievalMaintenance not available'); return s.retrievalMaintenance.getCandidateSet(p(params).type ?? 'intent', p(params).key); }],
789
796
  // ─── Cross-Brain Dialogue ──────────────────────────────────
790
797
  ['dialogue.ask', (params) => { if (!s.transferEngine)
791
798
  throw new Error('TransferEngine not available'); return s.transferEngine.formulateQuestion(p(params).topic); }],
@@ -1563,6 +1570,27 @@ export class IpcRouter {
1563
1570
  throw new Error('ConversationMemory not available'); return s.conversationMemory.getStatus(); }],
1564
1571
  ['convo.maintenance', () => { if (!s.conversationMemory)
1565
1572
  throw new Error('ConversationMemory not available'); return s.conversationMemory.maintenance(); }],
1573
+ ['convo.ensure_session', (params) => { if (!s.conversationMemory)
1574
+ throw new Error('ConversationMemory not available'); return s.conversationMemory.ensureSession(p(params).sessionId); }],
1575
+ ['convo.last_processed', (params) => { if (!s.conversationMemory)
1576
+ throw new Error('ConversationMemory not available'); return s.conversationMemory.getLastProcessedAt(p(params).sessionId); }],
1577
+ ['convo.save_processed', (params) => { if (!s.conversationMemory)
1578
+ throw new Error('ConversationMemory not available'); s.conversationMemory.saveLastProcessedAt(p(params).sessionId, p(params).timestamp); return { ok: true }; }],
1579
+ // ─── Experiment Ledger ─────────────────────────────────
1580
+ ['ledger.start', (params) => { if (!s.experimentLedger)
1581
+ throw new Error('ExperimentLedger not available'); return s.experimentLedger.startExperiment(p(params)); }],
1582
+ ['ledger.status', () => { if (!s.experimentLedger)
1583
+ throw new Error('ExperimentLedger not available'); return s.experimentLedger.getStatus(); }],
1584
+ ['ledger.record', (params) => { if (!s.experimentLedger)
1585
+ throw new Error('ExperimentLedger not available'); return s.experimentLedger.recordCycleMetrics(p(params)); }],
1586
+ ['ledger.evaluate', (params) => { if (!s.experimentLedger)
1587
+ throw new Error('ExperimentLedger not available'); return s.experimentLedger.evaluate(p(params).id); }],
1588
+ ['ledger.decide', (params) => { if (!s.experimentLedger)
1589
+ throw new Error('ExperimentLedger not available'); s.experimentLedger.decide(p(params).id, p(params).decision, p(params).reason); return { ok: true }; }],
1590
+ ['ledger.cancel', (params) => { if (!s.experimentLedger)
1591
+ throw new Error('ExperimentLedger not available'); s.experimentLedger.cancel(p(params).id, p(params).reason); return { ok: true }; }],
1592
+ ['ledger.history', (params) => { if (!s.experimentLedger)
1593
+ throw new Error('ExperimentLedger not available'); return s.experimentLedger.list(p(params)?.limit); }],
1566
1594
  // ─── Browser Agent ───────────────────────────────────
1567
1595
  ['browser.execute', async (params) => { if (!s.browserAgent)
1568
1596
  throw new Error('BrowserAgent not available'); return s.browserAgent.executeTask(p(params).taskId, p(params).actions); }],
@@ -1592,6 +1620,13 @@ export class IpcRouter {
1592
1620
  throw new Error('AutonomousResearchLoop not available'); return s.autonomousResearchLoop.cycle(); }],
1593
1621
  ['research.autonomous.update', (params) => { if (!s.autonomousResearchLoop)
1594
1622
  throw new Error('AutonomousResearchLoop not available'); s.autonomousResearchLoop.updateConfig(p(params)); return s.autonomousResearchLoop.getConfig(); }],
1623
+ // ─── Retention Policy ───────────────────────────────────
1624
+ ['retention.status', () => { if (!s.retentionEngine)
1625
+ throw new Error('RetentionPolicyEngine not available'); return s.retentionEngine.getStatus(); }],
1626
+ ['retention.run', (params) => { if (!s.retentionEngine)
1627
+ throw new Error('RetentionPolicyEngine not available'); return s.retentionEngine.run(p(params)?.dryRun ?? true); }],
1628
+ ['retention.sizes', () => { if (!s.retentionEngine)
1629
+ throw new Error('RetentionPolicyEngine not available'); return s.retentionEngine.getTableSizes(); }],
1595
1630
  // System
1596
1631
  ['system.memory', () => s.memoryWatchdog?.getStats() ?? { currentMB: Math.round(process.memoryUsage().heapUsed / 1048576), peakMB: 0, trend: 'stable', leakSuspected: false, samples: 0 }],
1597
1632
  // Status (cross-brain)