@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.
- package/README.md +1 -0
- package/dist/brain.d.ts +2 -0
- package/dist/brain.js +12 -3
- package/dist/brain.js.map +1 -1
- package/dist/cli/commands/experiment-ledger.d.ts +2 -0
- package/dist/cli/commands/experiment-ledger.js +113 -0
- package/dist/cli/commands/experiment-ledger.js.map +1 -0
- package/dist/cli/commands/retention.d.ts +2 -0
- package/dist/cli/commands/retention.js +127 -0
- package/dist/cli/commands/retention.js.map +1 -0
- package/dist/db/migrations/015_insight_lifecycle.d.ts +2 -0
- package/dist/db/migrations/015_insight_lifecycle.js +18 -0
- package/dist/db/migrations/015_insight_lifecycle.js.map +1 -0
- package/dist/db/migrations/016_retrieval_metadata.d.ts +11 -0
- package/dist/db/migrations/016_retrieval_metadata.js +32 -0
- package/dist/db/migrations/016_retrieval_metadata.js.map +1 -0
- package/dist/db/migrations/017_dream_facts.d.ts +8 -0
- package/dist/db/migrations/017_dream_facts.js +15 -0
- package/dist/db/migrations/017_dream_facts.js.map +1 -0
- package/dist/db/migrations/index.js +6 -0
- package/dist/db/migrations/index.js.map +1 -1
- package/dist/hooks/prompt-submit.js +136 -15
- package/dist/hooks/prompt-submit.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/init/engine-factory.d.ts +4 -1
- package/dist/init/engine-factory.js +13 -1
- package/dist/init/engine-factory.js.map +1 -1
- package/dist/init/lifecycle.d.ts +3 -1
- package/dist/init/lifecycle.js +62 -7
- package/dist/init/lifecycle.js.map +1 -1
- package/dist/ipc/router.d.ts +3 -0
- package/dist/ipc/router.js +35 -0
- package/dist/ipc/router.js.map +1 -1
- package/dist/mcp/experiment-ledger-tools.d.ts +5 -0
- package/dist/mcp/experiment-ledger-tools.js +35 -0
- package/dist/mcp/experiment-ledger-tools.js.map +1 -0
- package/dist/mcp/http-server.js +2 -0
- package/dist/mcp/http-server.js.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/package.json +2 -2
package/dist/init/lifecycle.js
CHANGED
|
@@ -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
|
|
44
|
-
|
|
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
|
|
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
|
|
56
|
-
SELECT id FROM insights WHERE
|
|
57
|
-
ORDER BY priority ASC
|
|
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":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,8DAA8D;AAE9D,MAAM,UAAU,QAAQ,CAAC,MAA0B,EAAE,IAAY,EAAE,GAAU;IAC3E,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,KAAK,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,MAAM,CAAC;IAC9F,IAAI,CAAC;QACH,0DAA0D;QAC1D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACnD,IAAI,CAAC;oBAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;gBACpE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;QACxC,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAC/B,CAAC;AAED,wDAAwD;AACxD,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAE7D,MAAM,UAAU,mBAAmB,CAAC,EAAqB,EAAE,MAAmB;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/init/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/ipc/router.d.ts
CHANGED
|
@@ -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 {
|
package/dist/ipc/router.js
CHANGED
|
@@ -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)
|