@timmeck/marketing-brain 0.4.0 → 0.5.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.
Files changed (41) hide show
  1. package/README.md +20 -5
  2. package/dist/cli/colors.d.ts +1 -0
  3. package/dist/cli/colors.js +1 -0
  4. package/dist/cli/colors.js.map +1 -1
  5. package/dist/cli/commands/status.js +9 -0
  6. package/dist/cli/commands/status.js.map +1 -1
  7. package/dist/db/migrations/006_memory_schema.d.ts +2 -0
  8. package/dist/db/migrations/006_memory_schema.js +44 -0
  9. package/dist/db/migrations/006_memory_schema.js.map +1 -0
  10. package/dist/db/migrations/007_memory_fts.d.ts +2 -0
  11. package/dist/db/migrations/007_memory_fts.js +54 -0
  12. package/dist/db/migrations/007_memory_fts.js.map +1 -0
  13. package/dist/db/migrations/index.js +4 -0
  14. package/dist/db/migrations/index.js.map +1 -1
  15. package/dist/db/repositories/memory.repository.d.ts +26 -0
  16. package/dist/db/repositories/memory.repository.js +124 -0
  17. package/dist/db/repositories/memory.repository.js.map +1 -0
  18. package/dist/db/repositories/session.repository.d.ts +18 -0
  19. package/dist/db/repositories/session.repository.js +80 -0
  20. package/dist/db/repositories/session.repository.js.map +1 -0
  21. package/dist/ipc/router.d.ts +2 -0
  22. package/dist/ipc/router.js +13 -1
  23. package/dist/ipc/router.js.map +1 -1
  24. package/dist/marketing-core.js +8 -1
  25. package/dist/marketing-core.js.map +1 -1
  26. package/dist/mcp/tools.js +55 -0
  27. package/dist/mcp/tools.js.map +1 -1
  28. package/dist/services/analytics.service.d.ts +15 -1
  29. package/dist/services/analytics.service.js +10 -1
  30. package/dist/services/analytics.service.js.map +1 -1
  31. package/dist/services/memory.service.d.ts +35 -0
  32. package/dist/services/memory.service.js +141 -0
  33. package/dist/services/memory.service.js.map +1 -0
  34. package/dist/types/memory.types.d.ts +1 -0
  35. package/dist/types/memory.types.js +2 -0
  36. package/dist/types/memory.types.js.map +1 -0
  37. package/dist/types/synapse.types.d.ts +2 -2
  38. package/dist/utils/events.d.ts +15 -0
  39. package/dist/utils/events.js.map +1 -1
  40. package/package.json +16 -5
  41. package/smithery.yaml +10 -0
package/README.md CHANGED
@@ -54,12 +54,21 @@ Without Marketing Brain, your marketing knowledge lives in your head. With it:
54
54
  - **Research Insights** — Tabbed view: Trends, Gaps, Synergies, Templates, Optimizations
55
55
  - **Real-Time Updates** — SSE-powered live stats refresh every 30 seconds
56
56
 
57
- ### MCP Tools (17 tools for Claude Code)
57
+ ### Never Forget Memory & Sessions
58
+ - **Persistent Memory** — Store preferences, decisions, context, facts, goals, and lessons learned
59
+ - **Key-Based Upsert** — Update existing memories by unique key, auto-superseding old values
60
+ - **Full-Text Search** — Natural language recall with FTS5-powered search
61
+ - **Session Tracking** — Track conversation goals, summaries, and outcomes
62
+ - **Importance Scoring** — 1–10 importance scale with category-based organization
63
+ - **Synapse-Wired** — Memories and sessions connect to the Hebbian network via 'remembers' edges
64
+
65
+ ### MCP Tools (22 tools for Claude Code)
58
66
  - **Draft Checking** — Check a post against learned rules before publishing
59
67
  - **Post Reporting** — Track published posts with one command
60
68
  - **Engagement Updates** — Feed in likes, shares, impressions as they come
61
69
  - **Strategy Memory** — Report what worked, get suggestions for what's next
62
70
  - **Template Library** — Find and reuse high-performing post structures
71
+ - **Memory & Sessions** — Store and recall memories, track session goals and outcomes
63
72
  - **Analytics** — Full dashboard data accessible from Claude Code
64
73
 
65
74
  ## Quick Start
@@ -198,6 +207,11 @@ These tools are available to Claude Code when Marketing Brain is configured:
198
207
  | `marketing_analytics_best` | Top performing posts and strategies |
199
208
  | `marketing_ecosystem_status` | Get status of all brains in the ecosystem |
200
209
  | `marketing_query_peer` | Query another brain in the ecosystem (method + params) |
210
+ | `marketing_remember` | Store a memory (preference, decision, context, fact, goal, lesson) |
211
+ | `marketing_recall` | Search memories by natural language query |
212
+ | `marketing_session_start` | Start a session with optional goals |
213
+ | `marketing_session_end` | End a session with summary and outcome |
214
+ | `marketing_session_history` | List past sessions with summaries |
201
215
  | `marketing_cross_promote` | Pull Brain insights as content ideas for cross-promotion |
202
216
  | `marketing_trading_performance` | Pull Trading Brain stats for performance-related posts |
203
217
 
@@ -292,6 +306,7 @@ rule → post (prevents / recommends)
292
306
  template → post (generated_from)
293
307
  campaign → campaign (cross_promotes)
294
308
  insight → campaign (informs)
309
+ session → memory (remembers)
295
310
  ```
296
311
 
297
312
  ## How It Learns
@@ -353,10 +368,10 @@ Marketing Brain is part of the **Brain Ecosystem** — a family of standalone MC
353
368
 
354
369
  | Brain | Purpose | Ports |
355
370
  |-------|---------|-------|
356
- | [Brain](https://github.com/timmeck/brain) | Error memory & code intelligence | 7777 / 7778 |
357
- | [Trading Brain](https://github.com/timmeck/trading-brain) | Adaptive trading intelligence | 7779 / 7780 |
358
- | **Marketing Brain** | Content strategy & engagement | **7781** / 7782 / 7783 |
359
- | [Brain Core](https://github.com/timmeck/brain-core) v1.6.0 | Shared infrastructure (IPC, MCP, REST, CLI, math, synapses) | — |
371
+ | [Brain](https://github.com/timmeck/brain) v2.2.0 | Error memory, code intelligence & persistent context | 7777 / 7778 |
372
+ | [Trading Brain](https://github.com/timmeck/trading-brain) v1.3.0 | Adaptive trading intelligence with memory & sessions | 7779 / 7780 |
373
+ | **Marketing Brain** v0.5.0 | Content strategy & engagement with memory & sessions | **7781** / 7782 / 7783 |
374
+ | [Brain Core](https://github.com/timmeck/brain-core) v1.6.0 | Shared infrastructure (IPC, MCP, REST, CLI, math, synapses, memory) | — |
360
375
  | [Brain Hub](https://timmeck.github.io/brain-hub/) | Ecosystem landing page | — |
361
376
 
362
377
  Each brain is **fully standalone** — [Brain Core](https://www.npmjs.com/package/@timmeck/brain-core) provides shared infrastructure (IPC, MCP, REST API, CLI, math, synapse algorithms) used by all brains, eliminating ~2,800 lines of duplicated code.
@@ -6,6 +6,7 @@ export declare const icons: {
6
6
  campaign: string;
7
7
  rule: string;
8
8
  template: string;
9
+ brain: string;
9
10
  check: string;
10
11
  cross: string;
11
12
  arrow: string;
@@ -7,5 +7,6 @@ export const icons = {
7
7
  campaign: '🎯',
8
8
  rule: '📏',
9
9
  template: '📋',
10
+ brain: '🧠',
10
11
  };
11
12
  //# sourceMappingURL=colors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/cli/colors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhG,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,SAAS;IACZ,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;CACf,CAAC"}
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/cli/colors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhG,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,SAAS;IACZ,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;CACZ,CAAC"}
@@ -56,6 +56,15 @@ export function statusCommand() {
56
56
  console.log();
57
57
  console.log(` ${icons.insight} ${c.orange.bold('Research')}`);
58
58
  console.log(` ${c.label('Insights:')} ${c.value(summary.insights?.active ?? 0)} active`);
59
+ console.log();
60
+ console.log(` ${icons.brain} ${c.purple.bold('Memory')}`);
61
+ console.log(` ${c.label('Memories:')} ${c.value(summary.memory?.active ?? 0)} active`);
62
+ console.log(` ${c.label('Sessions:')} ${c.value(summary.memory?.sessions ?? 0)}`);
63
+ const cats = summary.memory?.byCategory;
64
+ if (cats && Object.keys(cats).length > 0) {
65
+ const catStr = Object.entries(cats).map(([k, v]) => `${k}: ${v}`).join(', ');
66
+ console.log(` ${c.label('Categories:')} ${c.dim(catStr)}`);
67
+ }
59
68
  console.log(`\n${divider()}`);
60
69
  });
61
70
  });
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type Database from 'better-sqlite3';
2
+ export declare function up(db: Database.Database): void;
@@ -0,0 +1,44 @@
1
+ export function up(db) {
2
+ db.exec(`
3
+ -- Sessions: Conversation lifecycle tracking
4
+ CREATE TABLE IF NOT EXISTS sessions (
5
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
6
+ session_id TEXT NOT NULL UNIQUE,
7
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
8
+ ended_at TEXT,
9
+ summary TEXT,
10
+ goals TEXT,
11
+ outcome TEXT,
12
+ metadata TEXT
13
+ );
14
+
15
+ -- Memories: Universal remember-anything store
16
+ CREATE TABLE IF NOT EXISTS memories (
17
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
18
+ session_id INTEGER,
19
+ category TEXT NOT NULL,
20
+ key TEXT,
21
+ content TEXT NOT NULL,
22
+ importance INTEGER NOT NULL DEFAULT 5,
23
+ source TEXT NOT NULL DEFAULT 'explicit',
24
+ tags TEXT,
25
+ expires_at TEXT,
26
+ superseded_by INTEGER,
27
+ active INTEGER NOT NULL DEFAULT 1,
28
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
29
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
30
+ FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE SET NULL,
31
+ FOREIGN KEY (superseded_by) REFERENCES memories(id) ON DELETE SET NULL
32
+ );
33
+
34
+ -- Indexes
35
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_memories_key
36
+ ON memories(key) WHERE key IS NOT NULL AND active = 1;
37
+ CREATE INDEX IF NOT EXISTS idx_sessions_started ON sessions(started_at);
38
+ CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(category);
39
+ CREATE INDEX IF NOT EXISTS idx_memories_session ON memories(session_id);
40
+ CREATE INDEX IF NOT EXISTS idx_memories_active ON memories(active);
41
+ CREATE INDEX IF NOT EXISTS idx_memories_importance ON memories(importance DESC);
42
+ `);
43
+ }
44
+ //# sourceMappingURL=006_memory_schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"006_memory_schema.js","sourceRoot":"","sources":["../../../src/db/migrations/006_memory_schema.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,EAAE,CAAC,EAAqB;IACtC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCP,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type Database from 'better-sqlite3';
2
+ export declare function up(db: Database.Database): void;
@@ -0,0 +1,54 @@
1
+ export function up(db) {
2
+ db.exec(`
3
+ -- Full-text search for memories
4
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
5
+ category, key, content, tags,
6
+ content='memories',
7
+ content_rowid='id'
8
+ );
9
+
10
+ -- Sync triggers for memories_fts
11
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
12
+ INSERT INTO memories_fts(rowid, category, key, content, tags)
13
+ VALUES (new.id, new.category, new.key, new.content, new.tags);
14
+ END;
15
+
16
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
17
+ INSERT INTO memories_fts(memories_fts, rowid, category, key, content, tags)
18
+ VALUES ('delete', old.id, old.category, old.key, old.content, old.tags);
19
+ END;
20
+
21
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
22
+ INSERT INTO memories_fts(memories_fts, rowid, category, key, content, tags)
23
+ VALUES ('delete', old.id, old.category, old.key, old.content, old.tags);
24
+ INSERT INTO memories_fts(rowid, category, key, content, tags)
25
+ VALUES (new.id, new.category, new.key, new.content, new.tags);
26
+ END;
27
+
28
+ -- Full-text search for sessions
29
+ CREATE VIRTUAL TABLE IF NOT EXISTS sessions_fts USING fts5(
30
+ summary, goals,
31
+ content='sessions',
32
+ content_rowid='id'
33
+ );
34
+
35
+ -- Sync triggers for sessions_fts
36
+ CREATE TRIGGER IF NOT EXISTS sessions_ai AFTER INSERT ON sessions BEGIN
37
+ INSERT INTO sessions_fts(rowid, summary, goals)
38
+ VALUES (new.id, new.summary, new.goals);
39
+ END;
40
+
41
+ CREATE TRIGGER IF NOT EXISTS sessions_ad AFTER DELETE ON sessions BEGIN
42
+ INSERT INTO sessions_fts(sessions_fts, rowid, summary, goals)
43
+ VALUES ('delete', old.id, old.summary, old.goals);
44
+ END;
45
+
46
+ CREATE TRIGGER IF NOT EXISTS sessions_au AFTER UPDATE ON sessions BEGIN
47
+ INSERT INTO sessions_fts(sessions_fts, rowid, summary, goals)
48
+ VALUES ('delete', old.id, old.summary, old.goals);
49
+ INSERT INTO sessions_fts(rowid, summary, goals)
50
+ VALUES (new.id, new.summary, new.goals);
51
+ END;
52
+ `);
53
+ }
54
+ //# sourceMappingURL=007_memory_fts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"007_memory_fts.js","sourceRoot":"","sources":["../../../src/db/migrations/007_memory_fts.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,EAAE,CAAC,EAAqB;IACtC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDP,CAAC,CAAC;AACL,CAAC"}
@@ -4,12 +4,16 @@ import { up as learningSchema } from './002_learning_schema.js';
4
4
  import { up as synapseSchema } from './003_synapse_schema.js';
5
5
  import { up as insightsSchema } from './004_insights_schema.js';
6
6
  import { up as ftsIndexes } from './005_fts_indexes.js';
7
+ import { up as memorySchema } from './006_memory_schema.js';
8
+ import { up as memoryFts } from './007_memory_fts.js';
7
9
  const migrations = [
8
10
  { version: 1, name: '001_core_schema', up: coreSchema },
9
11
  { version: 2, name: '002_learning_schema', up: learningSchema },
10
12
  { version: 3, name: '003_synapse_schema', up: synapseSchema },
11
13
  { version: 4, name: '004_insights_schema', up: insightsSchema },
12
14
  { version: 5, name: '005_fts_indexes', up: ftsIndexes },
15
+ { version: 6, name: '006_memory_schema', up: memorySchema },
16
+ { version: 7, name: '007_memory_fts', up: memoryFts },
13
17
  ];
14
18
  function ensureMigrationsTable(db) {
15
19
  db.exec(`
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/migrations/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,EAAE,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,EAAE,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,EAAE,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,EAAE,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,EAAE,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQxD,MAAM,UAAU,GAAgB;IAC9B,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,EAAE;IACvD,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE,EAAE,cAAc,EAAE;IAC/D,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,aAAa,EAAE;IAC7D,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE,EAAE,cAAc,EAAE;IAC/D,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,EAAE;CACxD,CAAC;AAEF,SAAS,qBAAqB,CAAC,EAAqB;IAClD,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAqB;IAC9C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,EAA4C,CAAC;IACzH,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAE1B,MAAM,cAAc,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC;IAEnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,8BAA8B,cAAc,EAAE,CAAC,CAAC;IAErF,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QACjC,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,sBAAsB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjB,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,EAAE,CAAC;IACT,MAAM,CAAC,IAAI,CAAC,uCAAuC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7F,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/migrations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { MemoryRecord, MemoryCategory, MemoryRepoInterface } from '../../types/memory.types.js';
3
+ type CreateMemoryData = Omit<MemoryRecord, 'id' | 'created_at' | 'updated_at' | 'project_id' | 'embedding'>;
4
+ export declare class MemoryRepository implements MemoryRepoInterface {
5
+ private db;
6
+ private stmts;
7
+ constructor(db: Database.Database);
8
+ create(data: CreateMemoryData): number;
9
+ getById(id: number): MemoryRecord | undefined;
10
+ findByKey(_projectId: number | null, key: string): MemoryRecord | undefined;
11
+ findByCategory(category: MemoryCategory, _projectId?: number, limit?: number): MemoryRecord[];
12
+ findActive(_projectId?: number, limit?: number): MemoryRecord[];
13
+ search(query: string, limit?: number): MemoryRecord[];
14
+ supersede(oldId: number, newId: number): void;
15
+ deactivate(id: number): void;
16
+ expireOld(): number;
17
+ update(id: number, data: Partial<MemoryRecord>): void;
18
+ findBySession(sessionId: number): MemoryRecord[];
19
+ upsertByKey(key: string, content: string, category: MemoryCategory, importance?: number, source?: string, tags?: string[]): {
20
+ memoryId: number;
21
+ superseded?: number;
22
+ };
23
+ countActive(): number;
24
+ countByCategory(): Record<string, number>;
25
+ }
26
+ export {};
@@ -0,0 +1,124 @@
1
+ export class MemoryRepository {
2
+ db;
3
+ stmts;
4
+ constructor(db) {
5
+ this.db = db;
6
+ this.stmts = {
7
+ create: this.db.prepare(`
8
+ INSERT INTO memories (session_id, category, key, content, importance, source, tags, expires_at, superseded_by, active)
9
+ VALUES (@session_id, @category, @key, @content, @importance, @source, @tags, @expires_at, @superseded_by, @active)
10
+ `),
11
+ getById: this.db.prepare('SELECT * FROM memories WHERE id = ?'),
12
+ findByKey: this.db.prepare('SELECT * FROM memories WHERE key = ? AND active = 1'),
13
+ findByCategoryAll: this.db.prepare('SELECT * FROM memories WHERE category = ? AND active = 1 ORDER BY importance DESC LIMIT ?'),
14
+ findActiveAll: this.db.prepare('SELECT * FROM memories WHERE active = 1 ORDER BY updated_at DESC LIMIT ?'),
15
+ search: this.db.prepare(`
16
+ SELECT m.* FROM memories m
17
+ JOIN memories_fts ON m.id = memories_fts.rowid
18
+ WHERE memories_fts MATCH ? AND m.active = 1
19
+ ORDER BY rank
20
+ LIMIT ?
21
+ `),
22
+ supersede: this.db.prepare("UPDATE memories SET superseded_by = ?, active = 0, updated_at = datetime('now') WHERE id = ?"),
23
+ deactivate: this.db.prepare("UPDATE memories SET active = 0, updated_at = datetime('now') WHERE id = ?"),
24
+ expireOld: this.db.prepare("UPDATE memories SET active = 0 WHERE expires_at IS NOT NULL AND expires_at < datetime('now') AND active = 1"),
25
+ update: this.db.prepare(`
26
+ UPDATE memories
27
+ SET content = COALESCE(@content, content),
28
+ importance = COALESCE(@importance, importance),
29
+ tags = COALESCE(@tags, tags),
30
+ expires_at = COALESCE(@expires_at, expires_at),
31
+ updated_at = datetime('now')
32
+ WHERE id = @id
33
+ `),
34
+ findBySession: this.db.prepare('SELECT * FROM memories WHERE session_id = ? AND active = 1 ORDER BY created_at'),
35
+ countActive: this.db.prepare('SELECT COUNT(*) as count FROM memories WHERE active = 1'),
36
+ countByCategory: this.db.prepare('SELECT category, COUNT(*) as count FROM memories WHERE active = 1 GROUP BY category'),
37
+ };
38
+ }
39
+ create(data) {
40
+ const result = this.stmts.create.run({
41
+ session_id: data.session_id ?? null,
42
+ category: data.category,
43
+ key: data.key ?? null,
44
+ content: data.content,
45
+ importance: data.importance ?? 5,
46
+ source: data.source ?? 'explicit',
47
+ tags: data.tags ?? null,
48
+ expires_at: data.expires_at ?? null,
49
+ superseded_by: data.superseded_by ?? null,
50
+ active: data.active ?? 1,
51
+ });
52
+ return result.lastInsertRowid;
53
+ }
54
+ getById(id) {
55
+ return this.stmts.getById.get(id);
56
+ }
57
+ findByKey(_projectId, key) {
58
+ return this.stmts.findByKey.get(key);
59
+ }
60
+ findByCategory(category, _projectId, limit = 50) {
61
+ return this.stmts.findByCategoryAll.all(category, limit);
62
+ }
63
+ findActive(_projectId, limit = 50) {
64
+ return this.stmts.findActiveAll.all(limit);
65
+ }
66
+ search(query, limit = 20) {
67
+ return this.stmts.search.all(query, limit);
68
+ }
69
+ supersede(oldId, newId) {
70
+ this.stmts.supersede.run(newId, oldId);
71
+ }
72
+ deactivate(id) {
73
+ this.stmts.deactivate.run(id);
74
+ }
75
+ expireOld() {
76
+ const result = this.stmts.expireOld.run();
77
+ return result.changes;
78
+ }
79
+ update(id, data) {
80
+ this.stmts.update.run({
81
+ id,
82
+ content: data.content ?? null,
83
+ importance: data.importance ?? null,
84
+ tags: data.tags ?? null,
85
+ expires_at: data.expires_at ?? null,
86
+ });
87
+ }
88
+ findBySession(sessionId) {
89
+ return this.stmts.findBySession.all(sessionId);
90
+ }
91
+ upsertByKey(key, content, category, importance = 5, source = 'explicit', tags) {
92
+ const existing = this.findByKey(null, key);
93
+ const newId = this.create({
94
+ session_id: null,
95
+ category,
96
+ key,
97
+ content,
98
+ importance,
99
+ source: source,
100
+ tags: tags ? JSON.stringify(tags) : null,
101
+ expires_at: null,
102
+ superseded_by: null,
103
+ active: 1,
104
+ });
105
+ if (existing) {
106
+ this.supersede(existing.id, newId);
107
+ return { memoryId: newId, superseded: existing.id };
108
+ }
109
+ return { memoryId: newId };
110
+ }
111
+ countActive() {
112
+ const row = this.stmts.countActive.get();
113
+ return row.count;
114
+ }
115
+ countByCategory() {
116
+ const rows = this.stmts.countByCategory.all();
117
+ const result = {};
118
+ for (const row of rows) {
119
+ result[row.category] = row.count;
120
+ }
121
+ return result;
122
+ }
123
+ }
124
+ //# sourceMappingURL=memory.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.repository.js","sourceRoot":"","sources":["../../../src/db/repositories/memory.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { SessionRecord, SessionRepoInterface } from '../../types/memory.types.js';
3
+ type CreateSessionData = Omit<SessionRecord, 'id' | 'project_id' | 'embedding'>;
4
+ export declare class SessionRepository implements SessionRepoInterface {
5
+ private db;
6
+ private stmts;
7
+ constructor(db: Database.Database);
8
+ create(data: CreateSessionData): number;
9
+ getById(id: number): SessionRecord | undefined;
10
+ findBySessionId(sessionId: string): SessionRecord | undefined;
11
+ findByProject(_projectId: number, limit?: number): SessionRecord[];
12
+ findRecent(limit?: number): SessionRecord[];
13
+ update(id: number, data: Partial<SessionRecord>): void;
14
+ search(query: string, limit?: number): SessionRecord[];
15
+ countAll(): number;
16
+ findLast(): SessionRecord | undefined;
17
+ }
18
+ export {};
@@ -0,0 +1,80 @@
1
+ export class SessionRepository {
2
+ db;
3
+ stmts;
4
+ constructor(db) {
5
+ this.db = db;
6
+ this.stmts = {
7
+ create: this.db.prepare(`
8
+ INSERT INTO sessions (session_id, started_at, ended_at, summary, goals, outcome, metadata)
9
+ VALUES (@session_id, @started_at, @ended_at, @summary, @goals, @outcome, @metadata)
10
+ `),
11
+ getById: this.db.prepare('SELECT * FROM sessions WHERE id = ?'),
12
+ findBySessionId: this.db.prepare('SELECT * FROM sessions WHERE session_id = ?'),
13
+ findRecent: this.db.prepare('SELECT * FROM sessions ORDER BY started_at DESC LIMIT ?'),
14
+ update: this.db.prepare(`
15
+ UPDATE sessions
16
+ SET summary = COALESCE(@summary, summary),
17
+ ended_at = COALESCE(@ended_at, ended_at),
18
+ outcome = COALESCE(@outcome, outcome),
19
+ goals = COALESCE(@goals, goals),
20
+ metadata = COALESCE(@metadata, metadata)
21
+ WHERE id = @id
22
+ `),
23
+ search: this.db.prepare(`
24
+ SELECT s.* FROM sessions s
25
+ JOIN sessions_fts ON s.id = sessions_fts.rowid
26
+ WHERE sessions_fts MATCH ?
27
+ ORDER BY rank
28
+ LIMIT ?
29
+ `),
30
+ countAll: this.db.prepare('SELECT COUNT(*) as count FROM sessions'),
31
+ findLast: this.db.prepare('SELECT * FROM sessions ORDER BY started_at DESC LIMIT 1'),
32
+ };
33
+ }
34
+ create(data) {
35
+ const result = this.stmts.create.run({
36
+ session_id: data.session_id,
37
+ started_at: data.started_at ?? new Date().toISOString(),
38
+ ended_at: data.ended_at ?? null,
39
+ summary: data.summary ?? null,
40
+ goals: data.goals ?? null,
41
+ outcome: data.outcome ?? null,
42
+ metadata: data.metadata ?? null,
43
+ });
44
+ return result.lastInsertRowid;
45
+ }
46
+ getById(id) {
47
+ return this.stmts.getById.get(id);
48
+ }
49
+ findBySessionId(sessionId) {
50
+ return this.stmts.findBySessionId.get(sessionId);
51
+ }
52
+ findByProject(_projectId, limit = 20) {
53
+ // No project_id in marketing-brain — return all recent
54
+ return this.stmts.findRecent.all(limit);
55
+ }
56
+ findRecent(limit = 20) {
57
+ return this.stmts.findRecent.all(limit);
58
+ }
59
+ update(id, data) {
60
+ this.stmts.update.run({
61
+ id,
62
+ summary: data.summary ?? null,
63
+ ended_at: data.ended_at ?? null,
64
+ outcome: data.outcome ?? null,
65
+ goals: data.goals ?? null,
66
+ metadata: data.metadata ?? null,
67
+ });
68
+ }
69
+ search(query, limit = 20) {
70
+ return this.stmts.search.all(query, limit);
71
+ }
72
+ countAll() {
73
+ const row = this.stmts.countAll.get();
74
+ return row.count;
75
+ }
76
+ findLast() {
77
+ return this.stmts.findLast.get();
78
+ }
79
+ }
80
+ //# sourceMappingURL=session.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.repository.js","sourceRoot":"","sources":["../../../src/db/repositories/session.repository.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import type { AudienceService } from '../services/audience.service.js';
7
7
  import type { SynapseService } from '../services/synapse.service.js';
8
8
  import type { AnalyticsService } from '../services/analytics.service.js';
9
9
  import type { InsightService } from '../services/insight.service.js';
10
+ import type { MemoryService } from '../services/memory.service.js';
10
11
  import type { LearningEngine } from '../learning/learning-engine.js';
11
12
  import type { CrossBrainClient } from '@timmeck/brain-core';
12
13
  export interface Services {
@@ -19,6 +20,7 @@ export interface Services {
19
20
  synapse: SynapseService;
20
21
  analytics: AnalyticsService;
21
22
  insight: InsightService;
23
+ memory: MemoryService;
22
24
  learning?: LearningEngine;
23
25
  crossBrain?: CrossBrainClient;
24
26
  }
@@ -72,6 +72,18 @@ export class IpcRouter {
72
72
  ['synapse.related', (params) => s.synapse.getRelated(p(params))],
73
73
  ['synapse.stats', () => s.synapse.getNetworkStats()],
74
74
  ['synapse.strongest', (params) => s.synapse.getStrongest(p(params)?.limit)],
75
+ // Memory
76
+ ['memory.remember', (params) => s.memory.remember(p(params))],
77
+ ['memory.recall', (params) => s.memory.recall(p(params))],
78
+ ['memory.forget', (params) => s.memory.forget(p(params).memoryId ?? p(params).memory_id)],
79
+ ['memory.preferences', () => s.memory.getPreferences()],
80
+ ['memory.decisions', () => s.memory.getDecisions()],
81
+ ['memory.goals', () => s.memory.getGoals()],
82
+ ['memory.lessons', () => s.memory.getLessons()],
83
+ ['memory.stats', () => s.memory.getStats()],
84
+ ['session.start', (params) => s.memory.startSession(p(params))],
85
+ ['session.end', (params) => s.memory.endSession(p(params))],
86
+ ['session.history', (params) => s.memory.getSessionHistory(p(params).limit)],
75
87
  // Analytics
76
88
  ['analytics.summary', () => s.analytics.getSummary()],
77
89
  ['analytics.top', (params) => s.analytics.getTopPerformers(p(params)?.limit)],
@@ -107,7 +119,7 @@ export class IpcRouter {
107
119
  // Status (cross-brain)
108
120
  ['status', () => ({
109
121
  name: 'marketing-brain',
110
- version: '0.3.0',
122
+ version: '0.5.0',
111
123
  uptime: Math.floor(process.uptime()),
112
124
  pid: process.pid,
113
125
  methods: this.listMethods().length,
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/ipc/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/ipc/router.ts"],"names":[],"mappings":"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"}