@timmeck/marketing-brain 1.1.3 → 1.3.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 (34) hide show
  1. package/dist/db/migrations/009_competitors_scheduling.d.ts +2 -0
  2. package/dist/db/migrations/009_competitors_scheduling.js +63 -0
  3. package/dist/db/migrations/009_competitors_scheduling.js.map +1 -0
  4. package/dist/db/migrations/index.js +2 -0
  5. package/dist/db/migrations/index.js.map +1 -1
  6. package/dist/db/repositories/competitor.repository.d.ts +57 -0
  7. package/dist/db/repositories/competitor.repository.js +88 -0
  8. package/dist/db/repositories/competitor.repository.js.map +1 -0
  9. package/dist/db/repositories/scheduler.repository.d.ts +45 -0
  10. package/dist/db/repositories/scheduler.repository.js +79 -0
  11. package/dist/db/repositories/scheduler.repository.js.map +1 -0
  12. package/dist/ipc/router.d.ts +8 -0
  13. package/dist/ipc/router.js +23 -1
  14. package/dist/ipc/router.js.map +1 -1
  15. package/dist/marketing-core.d.ts +1 -0
  16. package/dist/marketing-core.js +39 -7
  17. package/dist/marketing-core.js.map +1 -1
  18. package/dist/mcp/tools.js +116 -0
  19. package/dist/mcp/tools.js.map +1 -1
  20. package/dist/services/competitor.service.d.ts +54 -0
  21. package/dist/services/competitor.service.js +186 -0
  22. package/dist/services/competitor.service.js.map +1 -0
  23. package/dist/services/content-generator.service.d.ts +52 -0
  24. package/dist/services/content-generator.service.js +164 -0
  25. package/dist/services/content-generator.service.js.map +1 -0
  26. package/dist/services/platform-adapter.service.d.ts +34 -0
  27. package/dist/services/platform-adapter.service.js +220 -0
  28. package/dist/services/platform-adapter.service.js.map +1 -0
  29. package/dist/services/scheduler.service.d.ts +25 -0
  30. package/dist/services/scheduler.service.js +77 -0
  31. package/dist/services/scheduler.service.js.map +1 -0
  32. package/dist/utils/events.d.ts +10 -0
  33. package/dist/utils/events.js.map +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ import type Database from 'better-sqlite3';
2
+ export declare function up(db: Database.Database): void;
@@ -0,0 +1,63 @@
1
+ export function up(db) {
2
+ // Competitors: Track competitor accounts across platforms
3
+ db.exec(`
4
+ CREATE TABLE IF NOT EXISTS competitors (
5
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
6
+ name TEXT NOT NULL,
7
+ platform TEXT NOT NULL,
8
+ handle TEXT NOT NULL,
9
+ url TEXT,
10
+ notes TEXT,
11
+ active INTEGER NOT NULL DEFAULT 1,
12
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
13
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
14
+ );
15
+
16
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_competitors_handle
17
+ ON competitors(platform, handle);
18
+ `);
19
+ // Competitor Posts: Record competitor content and engagement
20
+ db.exec(`
21
+ CREATE TABLE IF NOT EXISTS competitor_posts (
22
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
23
+ competitor_id INTEGER NOT NULL,
24
+ platform TEXT NOT NULL,
25
+ content TEXT NOT NULL,
26
+ url TEXT,
27
+ engagement_json TEXT,
28
+ detected_at TEXT NOT NULL DEFAULT (datetime('now')),
29
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
30
+ FOREIGN KEY (competitor_id) REFERENCES competitors(id) ON DELETE CASCADE
31
+ );
32
+
33
+ CREATE INDEX IF NOT EXISTS idx_competitor_posts_competitor
34
+ ON competitor_posts(competitor_id);
35
+ CREATE INDEX IF NOT EXISTS idx_competitor_posts_platform
36
+ ON competitor_posts(platform);
37
+ CREATE INDEX IF NOT EXISTS idx_competitor_posts_detected
38
+ ON competitor_posts(detected_at);
39
+ `);
40
+ // Scheduled Posts: Queue posts for future publishing
41
+ db.exec(`
42
+ CREATE TABLE IF NOT EXISTS scheduled_posts (
43
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
44
+ post_id INTEGER,
45
+ platform TEXT NOT NULL,
46
+ content TEXT NOT NULL,
47
+ format TEXT NOT NULL DEFAULT 'text',
48
+ hashtags TEXT,
49
+ scheduled_at TEXT NOT NULL,
50
+ status TEXT NOT NULL DEFAULT 'pending',
51
+ published_at TEXT,
52
+ webhook_url TEXT,
53
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
54
+ FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE SET NULL
55
+ );
56
+
57
+ CREATE INDEX IF NOT EXISTS idx_scheduled_posts_status
58
+ ON scheduled_posts(status);
59
+ CREATE INDEX IF NOT EXISTS idx_scheduled_posts_scheduled
60
+ ON scheduled_posts(scheduled_at);
61
+ `);
62
+ }
63
+ //# sourceMappingURL=009_competitors_scheduling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"009_competitors_scheduling.js","sourceRoot":"","sources":["../../../src/db/migrations/009_competitors_scheduling.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,EAAE,CAAC,EAAqB;IACtC,0DAA0D;IAC1D,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;GAeP,CAAC,CAAC;IAEH,6DAA6D;IAC7D,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;GAmBP,CAAC,CAAC;IAEH,qDAAqD;IACrD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;GAoBP,CAAC,CAAC;AACL,CAAC"}
@@ -7,6 +7,7 @@ import { up as ftsIndexes } from './005_fts_indexes.js';
7
7
  import { up as memorySchema } from './006_memory_schema.js';
8
8
  import { up as memoryFts } from './007_memory_fts.js';
9
9
  import { up as abTestsSchema } from './008_ab_tests.js';
10
+ import { up as competitorsScheduling } from './009_competitors_scheduling.js';
10
11
  const migrations = [
11
12
  { version: 1, name: '001_core_schema', up: coreSchema },
12
13
  { version: 2, name: '002_learning_schema', up: learningSchema },
@@ -16,6 +17,7 @@ const migrations = [
16
17
  { version: 6, name: '006_memory_schema', up: memorySchema },
17
18
  { version: 7, name: '007_memory_fts', up: memoryFts },
18
19
  { version: 8, name: '008_ab_tests', up: abTestsSchema },
20
+ { version: 9, name: '009_competitors_scheduling', up: competitorsScheduling },
19
21
  ];
20
22
  function ensureMigrationsTable(db) {
21
23
  db.exec(`
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/migrations/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/migrations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface CompetitorRecord {
3
+ id: number;
4
+ name: string;
5
+ platform: string;
6
+ handle: string;
7
+ url: string | null;
8
+ notes: string | null;
9
+ active: number;
10
+ created_at: string;
11
+ updated_at: string;
12
+ }
13
+ export interface CompetitorPostRecord {
14
+ id: number;
15
+ competitor_id: number;
16
+ platform: string;
17
+ content: string;
18
+ url: string | null;
19
+ engagement_json: string | null;
20
+ detected_at: string;
21
+ created_at: string;
22
+ }
23
+ export declare class CompetitorRepository {
24
+ private db;
25
+ private stmts;
26
+ constructor(db: Database.Database);
27
+ create(data: {
28
+ name: string;
29
+ platform: string;
30
+ handle: string;
31
+ url?: string;
32
+ notes?: string;
33
+ }): number;
34
+ getById(id: number): CompetitorRecord | undefined;
35
+ getAll(): CompetitorRecord[];
36
+ getActive(): CompetitorRecord[];
37
+ getByHandle(platform: string, handle: string): CompetitorRecord | undefined;
38
+ update(id: number, data: Partial<{
39
+ name: string;
40
+ handle: string;
41
+ url: string;
42
+ notes: string;
43
+ active: number;
44
+ }>): void;
45
+ delete(id: number): void;
46
+ addPost(data: {
47
+ competitor_id: number;
48
+ platform: string;
49
+ content: string;
50
+ url?: string;
51
+ engagement_json?: string;
52
+ }): number;
53
+ getPosts(competitorId: number, limit?: number): CompetitorPostRecord[];
54
+ getPostsByPlatform(platform: string, limit?: number): CompetitorPostRecord[];
55
+ getRecentPosts(days?: number, limit?: number): CompetitorPostRecord[];
56
+ countPosts(competitorId: number): number;
57
+ }
@@ -0,0 +1,88 @@
1
+ export class CompetitorRepository {
2
+ db;
3
+ stmts;
4
+ constructor(db) {
5
+ this.db = db;
6
+ this.stmts = {
7
+ create: db.prepare(`
8
+ INSERT INTO competitors (name, platform, handle, url, notes)
9
+ VALUES (@name, @platform, @handle, @url, @notes)
10
+ `),
11
+ getById: db.prepare('SELECT * FROM competitors WHERE id = ?'),
12
+ getAll: db.prepare('SELECT * FROM competitors ORDER BY created_at DESC'),
13
+ getActive: db.prepare('SELECT * FROM competitors WHERE active = 1 ORDER BY created_at DESC'),
14
+ getByHandle: db.prepare('SELECT * FROM competitors WHERE platform = ? AND handle = ?'),
15
+ delete: db.prepare('DELETE FROM competitors WHERE id = ?'),
16
+ addPost: db.prepare(`
17
+ INSERT INTO competitor_posts (competitor_id, platform, content, url, engagement_json)
18
+ VALUES (@competitor_id, @platform, @content, @url, @engagement_json)
19
+ `),
20
+ getPosts: db.prepare('SELECT * FROM competitor_posts WHERE competitor_id = ? ORDER BY detected_at DESC LIMIT ?'),
21
+ getPostsByPlatform: db.prepare('SELECT * FROM competitor_posts WHERE platform = ? ORDER BY detected_at DESC LIMIT ?'),
22
+ getRecentPosts: db.prepare(`
23
+ SELECT * FROM competitor_posts
24
+ WHERE detected_at > datetime('now', '-' || ? || ' days')
25
+ ORDER BY detected_at DESC
26
+ LIMIT ?
27
+ `),
28
+ countPosts: db.prepare('SELECT COUNT(*) as count FROM competitor_posts WHERE competitor_id = ?'),
29
+ };
30
+ }
31
+ create(data) {
32
+ const result = this.stmts.create.run({
33
+ name: data.name,
34
+ platform: data.platform,
35
+ handle: data.handle,
36
+ url: data.url ?? null,
37
+ notes: data.notes ?? null,
38
+ });
39
+ return result.lastInsertRowid;
40
+ }
41
+ getById(id) {
42
+ return this.stmts.getById.get(id);
43
+ }
44
+ getAll() {
45
+ return this.stmts.getAll.all();
46
+ }
47
+ getActive() {
48
+ return this.stmts.getActive.all();
49
+ }
50
+ getByHandle(platform, handle) {
51
+ return this.stmts.getByHandle.get(platform, handle);
52
+ }
53
+ update(id, data) {
54
+ const fields = Object.keys(data).filter((key) => key !== 'id' && key !== 'created_at' && data[key] !== undefined);
55
+ if (fields.length === 0)
56
+ return;
57
+ const setClauses = fields.map((f) => `${f} = @${f}`).join(', ');
58
+ const stmt = this.db.prepare(`UPDATE competitors SET ${setClauses}, updated_at = datetime('now') WHERE id = @id`);
59
+ stmt.run({ ...data, id });
60
+ }
61
+ delete(id) {
62
+ this.stmts.delete.run(id);
63
+ }
64
+ addPost(data) {
65
+ const result = this.stmts.addPost.run({
66
+ competitor_id: data.competitor_id,
67
+ platform: data.platform,
68
+ content: data.content,
69
+ url: data.url ?? null,
70
+ engagement_json: data.engagement_json ?? null,
71
+ });
72
+ return result.lastInsertRowid;
73
+ }
74
+ getPosts(competitorId, limit = 50) {
75
+ return this.stmts.getPosts.all(competitorId, limit);
76
+ }
77
+ getPostsByPlatform(platform, limit = 50) {
78
+ return this.stmts.getPostsByPlatform.all(platform, limit);
79
+ }
80
+ getRecentPosts(days = 7, limit = 50) {
81
+ return this.stmts.getRecentPosts.all(days, limit);
82
+ }
83
+ countPosts(competitorId) {
84
+ const row = this.stmts.countPosts.get(competitorId);
85
+ return row.count;
86
+ }
87
+ }
88
+ //# sourceMappingURL=competitor.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"competitor.repository.js","sourceRoot":"","sources":["../../../src/db/repositories/competitor.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface ScheduledPostRecord {
3
+ id: number;
4
+ post_id: number | null;
5
+ platform: string;
6
+ content: string;
7
+ format: string;
8
+ hashtags: string | null;
9
+ scheduled_at: string;
10
+ status: string;
11
+ published_at: string | null;
12
+ webhook_url: string | null;
13
+ created_at: string;
14
+ }
15
+ export declare class SchedulerRepository {
16
+ private db;
17
+ private stmts;
18
+ constructor(db: Database.Database);
19
+ create(data: {
20
+ post_id?: number;
21
+ platform: string;
22
+ content: string;
23
+ format?: string;
24
+ hashtags?: string;
25
+ scheduled_at: string;
26
+ webhook_url?: string;
27
+ }): number;
28
+ getById(id: number): ScheduledPostRecord | undefined;
29
+ getAll(limit?: number): ScheduledPostRecord[];
30
+ getPending(): ScheduledPostRecord[];
31
+ getDue(): ScheduledPostRecord[];
32
+ getByStatus(status: string, limit?: number): ScheduledPostRecord[];
33
+ markPublished(id: number): void;
34
+ cancel(id: number): void;
35
+ update(id: number, data: Partial<{
36
+ platform: string;
37
+ content: string;
38
+ format: string;
39
+ hashtags: string;
40
+ scheduled_at: string;
41
+ webhook_url: string;
42
+ }>): void;
43
+ delete(id: number): void;
44
+ countPending(): number;
45
+ }
@@ -0,0 +1,79 @@
1
+ export class SchedulerRepository {
2
+ db;
3
+ stmts;
4
+ constructor(db) {
5
+ this.db = db;
6
+ this.stmts = {
7
+ create: db.prepare(`
8
+ INSERT INTO scheduled_posts (post_id, platform, content, format, hashtags, scheduled_at, webhook_url)
9
+ VALUES (@post_id, @platform, @content, @format, @hashtags, @scheduled_at, @webhook_url)
10
+ `),
11
+ getById: db.prepare('SELECT * FROM scheduled_posts WHERE id = ?'),
12
+ getAll: db.prepare('SELECT * FROM scheduled_posts ORDER BY scheduled_at DESC LIMIT ?'),
13
+ getPending: db.prepare(`
14
+ SELECT * FROM scheduled_posts WHERE status = 'pending' ORDER BY scheduled_at ASC
15
+ `),
16
+ getDue: db.prepare(`
17
+ SELECT * FROM scheduled_posts WHERE status = 'pending' AND scheduled_at <= datetime('now')
18
+ `),
19
+ getByStatus: db.prepare('SELECT * FROM scheduled_posts WHERE status = ? ORDER BY scheduled_at DESC LIMIT ?'),
20
+ markPublished: db.prepare(`
21
+ UPDATE scheduled_posts SET status = 'published', published_at = datetime('now') WHERE id = ?
22
+ `),
23
+ cancel: db.prepare(`
24
+ UPDATE scheduled_posts SET status = 'cancelled' WHERE id = ?
25
+ `),
26
+ delete: db.prepare('DELETE FROM scheduled_posts WHERE id = ?'),
27
+ countPending: db.prepare(`SELECT COUNT(*) as count FROM scheduled_posts WHERE status = 'pending'`),
28
+ };
29
+ }
30
+ create(data) {
31
+ const result = this.stmts.create.run({
32
+ post_id: data.post_id ?? null,
33
+ platform: data.platform,
34
+ content: data.content,
35
+ format: data.format ?? 'text',
36
+ hashtags: data.hashtags ?? null,
37
+ scheduled_at: data.scheduled_at,
38
+ webhook_url: data.webhook_url ?? null,
39
+ });
40
+ return result.lastInsertRowid;
41
+ }
42
+ getById(id) {
43
+ return this.stmts.getById.get(id);
44
+ }
45
+ getAll(limit = 50) {
46
+ return this.stmts.getAll.all(limit);
47
+ }
48
+ getPending() {
49
+ return this.stmts.getPending.all();
50
+ }
51
+ getDue() {
52
+ return this.stmts.getDue.all();
53
+ }
54
+ getByStatus(status, limit = 50) {
55
+ return this.stmts.getByStatus.all(status, limit);
56
+ }
57
+ markPublished(id) {
58
+ this.stmts.markPublished.run(id);
59
+ }
60
+ cancel(id) {
61
+ this.stmts.cancel.run(id);
62
+ }
63
+ update(id, data) {
64
+ const fields = Object.keys(data).filter((key) => data[key] !== undefined);
65
+ if (fields.length === 0)
66
+ return;
67
+ const setClauses = fields.map((f) => `${f} = @${f}`).join(', ');
68
+ const stmt = this.db.prepare(`UPDATE scheduled_posts SET ${setClauses} WHERE id = @id`);
69
+ stmt.run({ ...data, id });
70
+ }
71
+ delete(id) {
72
+ this.stmts.delete.run(id);
73
+ }
74
+ countPending() {
75
+ const row = this.stmts.countPending.get();
76
+ return row.count;
77
+ }
78
+ }
79
+ //# sourceMappingURL=scheduler.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.repository.js","sourceRoot":"","sources":["../../../src/db/repositories/scheduler.repository.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,10 @@ import type { LearningEngine } from '../learning/learning-engine.js';
12
12
  import type { PatternExtractor } from '../learning/pattern-extractor.js';
13
13
  import type { ABTestService } from '../services/ab-test.service.js';
14
14
  import type { CalendarService } from '../services/calendar.service.js';
15
+ import type { CompetitorService } from '../services/competitor.service.js';
16
+ import type { SchedulerService } from '../services/scheduler.service.js';
17
+ import type { ContentGeneratorService } from '../services/content-generator.service.js';
18
+ import type { PlatformAdapterService } from '../services/platform-adapter.service.js';
15
19
  import type { CrossBrainClient, CrossBrainSubscriptionManager } from '@timmeck/brain-core';
16
20
  import type { IpcServer } from '@timmeck/brain-core';
17
21
  export interface Services {
@@ -25,6 +29,10 @@ export interface Services {
25
29
  analytics: AnalyticsService;
26
30
  insight: InsightService;
27
31
  memory: MemoryService;
32
+ competitor: CompetitorService;
33
+ scheduler: SchedulerService;
34
+ contentGenerator: ContentGeneratorService;
35
+ platformAdapter: PlatformAdapterService;
28
36
  learning?: LearningEngine;
29
37
  patternExtractor?: PatternExtractor;
30
38
  abTest?: ABTestService;
@@ -166,6 +166,28 @@ export class IpcRouter {
166
166
  throw new Error('Calendar service not available');
167
167
  return s.calendar.getWeeklySchedule(p(params)?.platform);
168
168
  }],
169
+ // Competitors
170
+ ['competitor.add', (params) => s.competitor.addCompetitor(p(params))],
171
+ ['competitor.list', () => s.competitor.listCompetitors()],
172
+ ['competitor.remove', (params) => s.competitor.removeCompetitor(p(params).id)],
173
+ ['competitor.recordPost', (params) => s.competitor.recordPost(p(params))],
174
+ ['competitor.posts', (params) => s.competitor.getCompetitorPosts(p(params).competitorId, p(params).limit)],
175
+ ['competitor.analyze', (params) => s.competitor.analyzeCompetitor(p(params).competitorId ?? p(params).id)],
176
+ ['competitor.compare', (params) => s.competitor.compareWithSelf(p(params).competitorId ?? p(params).id)],
177
+ // Scheduler
178
+ ['scheduler.schedule', (params) => s.scheduler.schedulePost(p(params))],
179
+ ['scheduler.list', () => s.scheduler.listScheduled()],
180
+ ['scheduler.pending', () => s.scheduler.listPending()],
181
+ ['scheduler.cancel', (params) => s.scheduler.cancelPost(p(params).id)],
182
+ ['scheduler.checkDue', () => s.scheduler.checkDue()],
183
+ ['scheduler.reschedule', (params) => s.scheduler.reschedule(p(params).id, p(params).scheduledAt)],
184
+ // Content Generator
185
+ ['content.generate', (params) => s.contentGenerator.generateDraft(p(params).platform, p(params).topic)],
186
+ ['content.hashtags', (params) => s.contentGenerator.suggestHashtags(p(params).platform, p(params).limit)],
187
+ // Platform Adapter
188
+ ['platform.adapt', (params) => s.platformAdapter.adaptForPlatform(p(params).content, p(params).targetPlatform, p(params).sourceFormat)],
189
+ ['platform.crossAdapt', (params) => s.platformAdapter.adaptCrossPlatform(p(params).content, p(params).sourcePlatform, p(params).targetPlatforms)],
190
+ ['platform.config', (params) => s.platformAdapter.getPlatformConfig(p(params).platform)],
169
191
  // Cross-Brain Notifications
170
192
  ['cross-brain.notify', (params) => {
171
193
  const { source, event, timestamp } = p(params);
@@ -191,7 +213,7 @@ export class IpcRouter {
191
213
  // Status (cross-brain)
192
214
  ['status', () => ({
193
215
  name: 'marketing-brain',
194
- version: '0.5.0',
216
+ version: '1.3.0',
195
217
  uptime: Math.floor(process.uptime()),
196
218
  pid: process.pid,
197
219
  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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"}
@@ -9,6 +9,7 @@ export declare class MarketingCore {
9
9
  private crossBrain;
10
10
  private notifier;
11
11
  private subscriptionManager;
12
+ private correlator;
12
13
  private config;
13
14
  private configPath?;
14
15
  private restarting;
@@ -18,6 +18,8 @@ import { InsightRepository } from './db/repositories/insight.repository.js';
18
18
  import { MemoryRepository } from './db/repositories/memory.repository.js';
19
19
  import { SessionRepository } from './db/repositories/session.repository.js';
20
20
  import { ABTestRepository } from './db/repositories/ab-test.repository.js';
21
+ import { CompetitorRepository } from './db/repositories/competitor.repository.js';
22
+ import { SchedulerRepository } from './db/repositories/scheduler.repository.js';
21
23
  // Services
22
24
  import { PostService } from './services/post.service.js';
23
25
  import { CampaignService } from './services/campaign.service.js';
@@ -31,6 +33,10 @@ import { InsightService } from './services/insight.service.js';
31
33
  import { MemoryService } from './services/memory.service.js';
32
34
  import { ABTestService } from './services/ab-test.service.js';
33
35
  import { CalendarService } from './services/calendar.service.js';
36
+ import { CompetitorService } from './services/competitor.service.js';
37
+ import { SchedulerService } from './services/scheduler.service.js';
38
+ import { ContentGeneratorService } from './services/content-generator.service.js';
39
+ import { PlatformAdapterService } from './services/platform-adapter.service.js';
34
40
  // Synapses
35
41
  import { SynapseManager } from './synapses/synapse-manager.js';
36
42
  // Engines
@@ -48,7 +54,7 @@ import { McpHttpServer } from './mcp/http-server.js';
48
54
  import { createMarketingDashboardServer } from './dashboard/server.js';
49
55
  import { renderDashboard } from './dashboard/renderer.js';
50
56
  // Cross-Brain
51
- import { CrossBrainClient, CrossBrainNotifier, CrossBrainSubscriptionManager } from '@timmeck/brain-core';
57
+ import { CrossBrainClient, CrossBrainNotifier, CrossBrainSubscriptionManager, CrossBrainCorrelator } from '@timmeck/brain-core';
52
58
  export class MarketingCore {
53
59
  db = null;
54
60
  ipcServer = null;
@@ -60,6 +66,7 @@ export class MarketingCore {
60
66
  crossBrain = null;
61
67
  notifier = null;
62
68
  subscriptionManager = null;
69
+ correlator = null;
63
70
  config = null;
64
71
  configPath;
65
72
  restarting = false;
@@ -95,6 +102,8 @@ export class MarketingCore {
95
102
  const memoryRepo = new MemoryRepository(this.db);
96
103
  const sessionRepo = new SessionRepository(this.db);
97
104
  const abTestRepo = new ABTestRepository(this.db);
105
+ const competitorRepo = new CompetitorRepository(this.db);
106
+ const schedulerRepo = new SchedulerRepository(this.db);
98
107
  // 6. Synapse Manager
99
108
  const synapseManager = new SynapseManager(synapseRepo, config.synapses);
100
109
  // 7. Services
@@ -113,6 +122,10 @@ export class MarketingCore {
113
122
  analytics: new AnalyticsService(postRepo, engagementRepo, campaignRepo, strategyRepo, ruleRepo, templateRepo, insightRepo, synapseManager, memoryRepo, sessionRepo),
114
123
  insight: new InsightService(insightRepo, synapseManager),
115
124
  memory: memoryService,
125
+ competitor: new CompetitorService(competitorRepo),
126
+ scheduler: new SchedulerService(schedulerRepo, calendarService),
127
+ contentGenerator: new ContentGeneratorService(this.db, ruleRepo, templateRepo, calendarService),
128
+ platformAdapter: new PlatformAdapterService(),
116
129
  patternExtractor,
117
130
  abTest: abTestService,
118
131
  calendar: calendarService,
@@ -131,7 +144,9 @@ export class MarketingCore {
131
144
  // 10. Cross-Brain Client + Notifier
132
145
  this.crossBrain = new CrossBrainClient('marketing-brain');
133
146
  this.notifier = new CrossBrainNotifier(this.crossBrain, 'marketing-brain');
134
- // 10b. Cross-Brain Subscription Manager
147
+ // 10b. Cross-Brain Correlator
148
+ this.correlator = new CrossBrainCorrelator();
149
+ // 10c. Cross-Brain Subscription Manager
135
150
  this.subscriptionManager = new CrossBrainSubscriptionManager('marketing-brain');
136
151
  // 11. IPC Server
137
152
  const router = new IpcRouter(services);
@@ -230,6 +245,7 @@ export class MarketingCore {
230
245
  this.learningEngine = null;
231
246
  this.researchEngine = null;
232
247
  this.subscriptionManager = null;
248
+ this.correlator = null;
233
249
  }
234
250
  restart() {
235
251
  if (this.restarting)
@@ -259,13 +275,27 @@ export class MarketingCore {
259
275
  process.exit(0);
260
276
  }
261
277
  setupCrossBrainSubscriptions() {
262
- if (!this.subscriptionManager)
278
+ if (!this.subscriptionManager || !this.correlator)
263
279
  return;
264
280
  const logger = getLogger();
265
- // Subscribe to brain: error:reported events for project health context
281
+ const correlator = this.correlator;
282
+ // Subscribe to brain: error:reported events — adjust content tone based on project health
266
283
  this.subscriptionManager.subscribe('brain', ['error:reported'], (event, data) => {
267
- logger.info(`[cross-brain] Received ${event} from brain`, { data });
268
- // TODO: deeper integration — adjust content tone/urgency based on project health
284
+ logger.info(`[cross-brain] System error from brain — adjusting content context`, { data });
285
+ correlator.recordEvent('brain', event, data);
286
+ const health = correlator.getHealth();
287
+ if (health.status === 'critical') {
288
+ logger.warn(`[cross-brain] Ecosystem critical (score: ${health.score}) — pausing non-urgent content`);
289
+ }
290
+ });
291
+ // Subscribe to brain: insight:created for content opportunity detection
292
+ this.subscriptionManager.subscribe('brain', ['insight:created'], (event, data) => {
293
+ logger.info(`[cross-brain] New insight from brain — potential content opportunity`, { data });
294
+ correlator.recordEvent('brain', event, data);
295
+ });
296
+ // Subscribe to trading-brain: trade:outcome for cross-domain awareness
297
+ this.subscriptionManager.subscribe('trading-brain', ['trade:outcome'], (event, data) => {
298
+ correlator.recordEvent('trading-brain', event, data);
269
299
  });
270
300
  }
271
301
  setupEventListeners(synapseManager) {
@@ -276,10 +306,11 @@ export class MarketingCore {
276
306
  synapseManager.strengthen({ type: 'post', id: postId }, { type: 'campaign', id: campaignId }, 'belongs_to');
277
307
  }
278
308
  });
279
- // Post published → notify peers (engagement tracking)
309
+ // Post published → notify peers (engagement tracking) + feed correlator
280
310
  bus.on('post:published', ({ postId, platform }) => {
281
311
  getLogger().info(`Post #${postId} published on ${platform}`);
282
312
  notifier?.notify('post:published', { postId, platform });
313
+ this.correlator?.recordEvent('marketing-brain', 'post:published', { postId, platform });
283
314
  });
284
315
  bus.on('strategy:reported', ({ strategyId, postId }) => {
285
316
  synapseManager.strengthen({ type: 'strategy', id: strategyId }, { type: 'post', id: postId }, 'improves');
@@ -295,6 +326,7 @@ export class MarketingCore {
295
326
  bus.on('insight:created', ({ insightId, type }) => {
296
327
  getLogger().info(`New insight #${insightId} (${type})`);
297
328
  notifier?.notifyPeer('brain', 'insight:created', { insightId, type });
329
+ this.correlator?.recordEvent('marketing-brain', 'insight:created', { insightId, type });
298
330
  });
299
331
  }
300
332
  }