@timmeck/brain 3.36.52 → 3.36.54

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,70 @@
1
+ import { Command } from 'commander';
2
+ import { withIpc } from '../ipc-helper.js';
3
+ import { c, header, keyValue, divider } from '../colors.js';
4
+ export function contentCommand() {
5
+ const cmd = new Command('content')
6
+ .description('ContentForge — autonomous content generation & publishing');
7
+ cmd.command('generate')
8
+ .description('Generate content from a source')
9
+ .argument('<sourceType>', 'Source type: insight, mission, trend, principle')
10
+ .option('--platform <platform>', 'Target platform', 'bluesky')
11
+ .action(async (sourceType, opts) => {
12
+ await withIpc(async (client) => {
13
+ const result = await client.request('content.generate', { sourceType, insight: 'Generated via CLI', noveltyScore: 0.5, platform: opts.platform });
14
+ console.log(` ${c.green('Content generated')} — #${result.id}: ${result.title}`);
15
+ });
16
+ });
17
+ cmd.command('publish')
18
+ .description('Publish a content piece')
19
+ .argument('<id>', 'Content piece ID')
20
+ .action(async (id) => {
21
+ await withIpc(async (client) => {
22
+ const result = await client.request('content.publish', { id: parseInt(id, 10) });
23
+ if (result.success) {
24
+ console.log(` ${c.green('Published')} — post ID: ${result.postId ?? '?'}`);
25
+ }
26
+ else {
27
+ console.log(` ${c.red('Publish failed')}`);
28
+ }
29
+ });
30
+ });
31
+ cmd.command('schedule')
32
+ .description('Show scheduled content')
33
+ .action(async () => {
34
+ await withIpc(async (client) => {
35
+ const schedule = await client.request('content.list');
36
+ console.log(header(`Scheduled Content (${schedule.length})`, '📅'));
37
+ for (const p of schedule) {
38
+ console.log(` ${c.dim(`#${p.id}`)} ${p.title} → ${c.value(p.platform)} ${c.dim(p.scheduledFor ?? 'no time')}`);
39
+ }
40
+ console.log(divider());
41
+ });
42
+ });
43
+ cmd.command('best')
44
+ .description('Show best performing content')
45
+ .option('-n, --limit <n>', 'Number of entries', '10')
46
+ .action(async (opts) => {
47
+ await withIpc(async (client) => {
48
+ const best = await client.request('content.best', { limit: parseInt(opts.limit, 10) });
49
+ console.log(header(`Top Content (${best.length})`, '🏆'));
50
+ for (const p of best) {
51
+ const eng = p.engagement ? `likes=${p.engagement.likes} reposts=${p.engagement.reposts} replies=${p.engagement.replies}` : 'no data';
52
+ console.log(` ${c.dim(`#${p.id}`)} ${p.title} — ${c.value(eng)}`);
53
+ }
54
+ console.log(divider());
55
+ });
56
+ });
57
+ cmd.action(async () => {
58
+ await withIpc(async (client) => {
59
+ const status = await client.request('content.status');
60
+ console.log(header('ContentForge Status', '✍️'));
61
+ console.log(keyValue('Drafts', String(status.drafts)));
62
+ console.log(keyValue('Scheduled', String(status.scheduled)));
63
+ console.log(keyValue('Published', String(status.published)));
64
+ console.log(keyValue('Avg Engagement', status.avgEngagement.toFixed(1)));
65
+ console.log(divider());
66
+ });
67
+ });
68
+ return cmd;
69
+ }
70
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/cli/commands/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;SAC/B,WAAW,CAAC,2DAA2D,CAAC,CAAC;IAE5E,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;SACpB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,cAAc,EAAE,iDAAiD,CAAC;SAC3E,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;QACjC,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAQ,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;SACnB,WAAW,CAAC,yBAAyB,CAAC;SACtC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACnB,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAQ,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACtF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;YAC9E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;SACpB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAU,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,CAAU,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,sBAAsB,QAAQ,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACpE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;YAClH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;SAChB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,IAAI,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAU,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAU,CAAC;YACvG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1D,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,KAAK,YAAY,CAAC,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAQ,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function creativeCommand(): Command;
@@ -0,0 +1,79 @@
1
+ import { Command } from 'commander';
2
+ import { withIpc } from '../ipc-helper.js';
3
+ import { c, header, keyValue, divider } from '../colors.js';
4
+ export function creativeCommand() {
5
+ const cmd = new Command('creative')
6
+ .description('Creative Engine — cross-domain idea generation, analogies, speculative insights');
7
+ cmd.command('status')
8
+ .description('Show creative engine status')
9
+ .action(async () => {
10
+ await withIpc(async (client) => {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ const status = await client.request('creative.status');
13
+ console.log(header('Creative Engine Status', '\u{1F4A1}'));
14
+ console.log(keyValue('Total Insights', String(status.totalInsights ?? 0)));
15
+ console.log(keyValue('Pending', String(status.pendingInsights ?? status.pending ?? 0)));
16
+ console.log(keyValue('Converted', String(status.convertedInsights ?? status.converted ?? 0)));
17
+ console.log(keyValue('Avg Novelty', c.value((status.avgNovelty ?? 0).toFixed(2))));
18
+ console.log(divider());
19
+ });
20
+ });
21
+ cmd.command('insights')
22
+ .description('Show recent creative insights')
23
+ .option('-n, --limit <n>', 'Number of insights', '10')
24
+ .action(async (opts) => {
25
+ await withIpc(async (client) => {
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ const insights = await client.request('creative.insights', { limit: parseInt(opts.limit, 10) });
28
+ if (!insights?.length) {
29
+ console.log(` ${c.dim('No creative insights yet.')}`);
30
+ return;
31
+ }
32
+ console.log(header(`${insights.length} Creative Insight(s)`, '\u{2728}'));
33
+ for (const ins of insights) {
34
+ const novelty = ins.noveltyScore ?? ins.novelty ?? 0;
35
+ const plaus = ins.plausibility ?? 0;
36
+ const nColor = novelty > 0.7 ? c.green : novelty > 0.4 ? c.orange : c.dim;
37
+ console.log(` ${c.value(`#${ins.id}`)} ${ins.title ?? ins.description?.slice(0, 80) ?? '-'}`);
38
+ console.log(` ${c.dim('novelty:')} ${nColor(novelty.toFixed(2))} ${c.dim('plausibility:')} ${plaus.toFixed(2)} ${c.dim('status:')} ${ins.status ?? '-'}`);
39
+ }
40
+ console.log(divider());
41
+ });
42
+ });
43
+ cmd.command('pollinate')
44
+ .description('Trigger cross-pollination between knowledge domains')
45
+ .action(async () => {
46
+ await withIpc(async (client) => {
47
+ const result = await client.request('creative.crossPollinate');
48
+ console.log(` ${c.green('Cross-pollination complete')}`);
49
+ console.log(` ${c.dim(JSON.stringify(result, null, 2))}`);
50
+ });
51
+ });
52
+ cmd.command('analogies')
53
+ .description('Find analogies for a concept')
54
+ .argument('<concept>', 'The concept to find analogies for')
55
+ .action(async (concept) => {
56
+ await withIpc(async (client) => {
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ const analogies = await client.request('creative.analogies', { concept });
59
+ console.log(header(`Analogies for "${concept}"`, '\u{1F50D}'));
60
+ const items = Array.isArray(analogies) ? analogies : analogies?.analogies ?? [];
61
+ if (!items.length) {
62
+ console.log(` ${c.dim('No analogies found.')}`);
63
+ }
64
+ else {
65
+ for (const a of items) {
66
+ const text = typeof a === 'string' ? a : (a.description ?? a.analogy ?? JSON.stringify(a));
67
+ console.log(` ${c.cyan('\u{2022}')} ${text}`);
68
+ }
69
+ }
70
+ console.log(divider());
71
+ });
72
+ });
73
+ // Default action: status
74
+ cmd.action(async () => {
75
+ await cmd.commands.find(c => c.name() === 'status').parseAsync([], { from: 'user' });
76
+ });
77
+ return cmd;
78
+ }
79
+ //# sourceMappingURL=creative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creative.js","sourceRoot":"","sources":["../../../src/cli/commands/creative.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function guardrailCommand(): Command;
@@ -0,0 +1,70 @@
1
+ import { Command } from 'commander';
2
+ import { withIpc } from '../ipc-helper.js';
3
+ import { c, header, keyValue, divider } from '../colors.js';
4
+ export function guardrailCommand() {
5
+ const cmd = new Command('guardrail')
6
+ .description('Guardrail Engine — self-protection: parameter bounds, circuit breaker, health checks');
7
+ cmd.command('status')
8
+ .description('Show guardrail engine status')
9
+ .action(async () => {
10
+ await withIpc(async (client) => {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ const status = await client.request('guardrail.status');
13
+ console.log(header('Guardrail Status', '\u{1F6E1}\u{FE0F}'));
14
+ console.log(keyValue('Circuit Breaker', status.circuitBreakerTripped ? c.red('TRIPPED') : c.green('OK')));
15
+ if (status.circuitBreakerTripped && status.circuitBreakerReason) {
16
+ console.log(keyValue('Reason', c.red(status.circuitBreakerReason)));
17
+ }
18
+ console.log(keyValue('Protected Paths', String(status.protectedPaths ?? 0)));
19
+ console.log(keyValue('Parameter Bounds', String(status.parameterBounds ?? 0)));
20
+ console.log(keyValue('Rollback History', String(status.rollbackCount ?? 0)));
21
+ console.log(divider());
22
+ });
23
+ });
24
+ cmd.command('health')
25
+ .description('Run guardrail health check')
26
+ .action(async () => {
27
+ await withIpc(async (client) => {
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ const health = await client.request('guardrail.health');
30
+ console.log(header('Guardrail Health Report', '\u{1F3E5}'));
31
+ const score = health.score ?? health.healthScore ?? 0;
32
+ const color = score > 0.8 ? c.green : score > 0.5 ? c.orange : c.red;
33
+ console.log(keyValue('Health Score', color(`${(score * 100).toFixed(1)}%`)));
34
+ if (health.issues?.length) {
35
+ console.log(keyValue('Issues', ''));
36
+ for (const issue of health.issues) {
37
+ console.log(` ${c.red('\u{2022}')} ${issue}`);
38
+ }
39
+ }
40
+ else {
41
+ console.log(keyValue('Issues', c.green('None')));
42
+ }
43
+ console.log(divider());
44
+ });
45
+ });
46
+ cmd.command('rollback')
47
+ .description('Rollback parameter changes')
48
+ .argument('[steps]', 'Number of steps to rollback', '1')
49
+ .action(async (steps) => {
50
+ await withIpc(async (client) => {
51
+ const result = await client.request('guardrail.rollback', { steps: parseInt(steps, 10) });
52
+ console.log(` ${c.green('Rolled back')} ${steps} step(s)`);
53
+ console.log(` ${c.dim(JSON.stringify(result))}`);
54
+ });
55
+ });
56
+ cmd.command('reset')
57
+ .description('Reset the circuit breaker')
58
+ .action(async () => {
59
+ await withIpc(async (client) => {
60
+ await client.request('guardrail.resetBreaker');
61
+ console.log(` ${c.green('Circuit breaker reset')}`);
62
+ });
63
+ });
64
+ // Default action: status
65
+ cmd.action(async () => {
66
+ await cmd.commands.find(c => c.name() === 'status').parseAsync([], { from: 'user' });
67
+ });
68
+ return cmd;
69
+ }
70
+ //# sourceMappingURL=guardrail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrail.js","sourceRoot":"","sources":["../../../src/cli/commands/guardrail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function roadmapCommand(): Command;
@@ -0,0 +1,78 @@
1
+ import { Command } from 'commander';
2
+ import { withIpc } from '../ipc-helper.js';
3
+ import { c, header, keyValue, divider } from '../colors.js';
4
+ export function roadmapCommand() {
5
+ const cmd = new Command('roadmap')
6
+ .description('Research Roadmap — goal dependencies, multi-step research plans');
7
+ cmd.command('list')
8
+ .description('List all research roadmaps')
9
+ .action(async () => {
10
+ await withIpc(async (client) => {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ const roadmaps = await client.request('roadmap.list');
13
+ if (!roadmaps?.length) {
14
+ console.log(` ${c.dim('No roadmaps yet.')}`);
15
+ return;
16
+ }
17
+ console.log(header(`${roadmaps.length} Roadmap(s)`, '\u{1F5FA}\u{FE0F}'));
18
+ for (const rm of roadmaps) {
19
+ const statusColor = rm.status === 'completed' ? c.green : rm.status === 'active' ? c.cyan : c.dim;
20
+ console.log(` ${c.value(`#${rm.id}`)} ${rm.title} ${statusColor(rm.status)}`);
21
+ }
22
+ console.log(divider());
23
+ });
24
+ });
25
+ cmd.command('show')
26
+ .description('Show progress for a roadmap')
27
+ .argument('<id>', 'Roadmap ID')
28
+ .action(async (id) => {
29
+ await withIpc(async (client) => {
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ const progress = await client.request('roadmap.progress', { roadmapId: parseInt(id, 10) });
32
+ console.log(header(`Roadmap #${id} Progress`, '\u{1F4CA}'));
33
+ console.log(keyValue('Title', progress.title ?? '-'));
34
+ console.log(keyValue('Status', progress.status ?? '-'));
35
+ const pct = progress.completionPct ?? progress.completion ?? 0;
36
+ const pctColor = pct > 80 ? c.green : pct > 40 ? c.orange : c.red;
37
+ console.log(keyValue('Completion', pctColor(`${pct.toFixed(1)}%`)));
38
+ console.log(keyValue('Total Goals', String(progress.totalGoals ?? 0)));
39
+ console.log(keyValue('Achieved', String(progress.achievedGoals ?? 0)));
40
+ console.log(keyValue('Blocked', String(progress.blockedGoals ?? 0)));
41
+ console.log(divider());
42
+ });
43
+ });
44
+ cmd.command('ready')
45
+ .description('Show goals that are ready to work on (all dependencies met)')
46
+ .action(async () => {
47
+ await withIpc(async (client) => {
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ const goals = await client.request('roadmap.ready');
50
+ if (!goals?.length) {
51
+ console.log(` ${c.dim('No goals ready — all blocked or completed.')}`);
52
+ return;
53
+ }
54
+ console.log(header(`${goals.length} Ready Goal(s)`, '\u{2705}'));
55
+ for (const g of goals) {
56
+ console.log(` ${c.value(`#${g.id}`)} ${g.title ?? g.description ?? '-'}`);
57
+ }
58
+ console.log(divider());
59
+ });
60
+ });
61
+ cmd.command('create')
62
+ .description('Create a new research roadmap')
63
+ .argument('<title>', 'Roadmap title')
64
+ .argument('<goalId>', 'Final goal ID')
65
+ .action(async (title, goalId) => {
66
+ await withIpc(async (client) => {
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ const result = await client.request('roadmap.create', { title, finalGoalId: parseInt(goalId, 10) });
69
+ console.log(` ${c.green('Roadmap created')} — ID: ${c.value(String(result.id ?? result.roadmapId ?? '?'))}`);
70
+ });
71
+ });
72
+ // Default action: list
73
+ cmd.action(async () => {
74
+ await cmd.commands.find(c => c.name() === 'list').parseAsync([], { from: 'user' });
75
+ });
76
+ return cmd;
77
+ }
78
+ //# sourceMappingURL=roadmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roadmap.js","sourceRoot":"","sources":["../../../src/cli/commands/roadmap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function strategyCommand(): Command;
@@ -0,0 +1,79 @@
1
+ import { Command } from 'commander';
2
+ import { withIpc } from '../ipc-helper.js';
3
+ import { c, header, keyValue, divider } from '../colors.js';
4
+ export function strategyCommand() {
5
+ const cmd = new Command('strategy')
6
+ .description('StrategyForge — autonomous strategy creation, backtesting & execution');
7
+ cmd.command('list')
8
+ .description('Show active strategies')
9
+ .action(async () => {
10
+ await withIpc(async (client) => {
11
+ const strategies = await client.request('strategy.active');
12
+ console.log(header(`Active Strategies (${strategies.length})`, '♟️'));
13
+ for (const s of strategies) {
14
+ const winRate = s.performance?.executions > 0 ? (s.performance.successes / s.performance.executions * 100).toFixed(0) + '%' : '-';
15
+ console.log(` ${c.dim(`#${s.id}`)} ${s.name} (${s.type}) — ${s.rules?.length ?? 0} rules, win=${c.value(winRate)}`);
16
+ }
17
+ console.log(divider());
18
+ });
19
+ });
20
+ cmd.command('create')
21
+ .description('Create a strategy from learned principles')
22
+ .argument('<domain>', 'Knowledge domain (e.g. trading, marketing, research)')
23
+ .action(async (domain) => {
24
+ await withIpc(async (client) => {
25
+ const result = await client.request('strategy.create', { domain });
26
+ if (result) {
27
+ console.log(` ${c.green('Strategy created')} — #${result.id}: ${result.name} (${result.rules?.length ?? 0} rules)`);
28
+ }
29
+ else {
30
+ console.log(` ${c.dim('No principles found for domain:')} ${domain}`);
31
+ }
32
+ });
33
+ });
34
+ cmd.command('performance')
35
+ .description('Show strategy performance')
36
+ .argument('<id>', 'Strategy ID')
37
+ .action(async (id) => {
38
+ await withIpc(async (client) => {
39
+ const perf = await client.request('strategy.performance', { id: parseInt(id, 10) });
40
+ if (perf) {
41
+ console.log(header(`Strategy #${id} Performance`, '📊'));
42
+ console.log(keyValue('Executions', String(perf.executions)));
43
+ console.log(keyValue('Successes', String(perf.successes)));
44
+ console.log(keyValue('Win Rate', perf.executions > 0 ? `${(perf.successes / perf.executions * 100).toFixed(1)}%` : '-'));
45
+ console.log(keyValue('Avg Return', `${(perf.avgReturn * 100).toFixed(2)}%`));
46
+ console.log(divider());
47
+ }
48
+ else {
49
+ console.log(` ${c.red('Strategy not found')}`);
50
+ }
51
+ });
52
+ });
53
+ cmd.command('evolve')
54
+ .description('Evolve new strategy from best active strategies')
55
+ .action(async () => {
56
+ await withIpc(async (client) => {
57
+ const result = await client.request('strategy.evolve');
58
+ if (result) {
59
+ console.log(` ${c.green('Evolved strategy')} — #${result.id}: ${result.name}`);
60
+ }
61
+ else {
62
+ console.log(` ${c.dim('Need at least 2 active strategies to evolve')}`);
63
+ }
64
+ });
65
+ });
66
+ cmd.action(async () => {
67
+ await withIpc(async (client) => {
68
+ const status = await client.request('strategy.status');
69
+ console.log(header('StrategyForge Status', '♟️'));
70
+ console.log(keyValue('Active', String(status.active)));
71
+ console.log(keyValue('Total', String(status.total)));
72
+ console.log(keyValue('Avg Performance', `${(status.avgPerformance * 100).toFixed(1)}%`));
73
+ console.log(keyValue('Top Strategy', status.topStrategy ?? c.dim('none')));
74
+ console.log(divider());
75
+ });
76
+ });
77
+ return cmd;
78
+ }
79
+ //# sourceMappingURL=strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/cli/commands/strategy.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -45,6 +45,13 @@ import { borgCommand } from './cli/commands/borg.js';
45
45
  import { selfmodCommand } from './cli/commands/selfmod.js';
46
46
  import { intelligenceCommand } from './cli/commands/intelligence.js';
47
47
  import { llmCommand } from './cli/commands/llm.js';
48
+ import { guardrailCommand } from './cli/commands/guardrail.js';
49
+ import { roadmapCommand } from './cli/commands/roadmap.js';
50
+ import { creativeCommand } from './cli/commands/creative.js';
51
+ import { actionCommand } from './cli/commands/action.js';
52
+ import { contentCommand } from './cli/commands/content.js';
53
+ import { codeforgeCommand } from './cli/commands/codeforge.js';
54
+ import { strategyCommand } from './cli/commands/strategy.js';
48
55
  import { getCurrentVersion } from './cli/update-check.js';
49
56
  const program = new Command();
50
57
  program
@@ -78,6 +85,13 @@ program.addCommand(borgCommand());
78
85
  program.addCommand(selfmodCommand());
79
86
  program.addCommand(intelligenceCommand());
80
87
  program.addCommand(llmCommand());
88
+ program.addCommand(guardrailCommand());
89
+ program.addCommand(roadmapCommand());
90
+ program.addCommand(creativeCommand());
91
+ program.addCommand(actionCommand());
92
+ program.addCommand(contentCommand());
93
+ program.addCommand(codeforgeCommand());
94
+ program.addCommand(strategyCommand());
81
95
  // Hidden command: run MCP server (called by Claude Code)
82
96
  program
83
97
  .command('mcp-server')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,sDAAsD;AACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7H,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,CAAC;YAAE,SAAS;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChD,CAAC;AACH,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEhC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;AAEjC,yDAAyD;AACzD,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,qEAAqE;AACrE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,sDAAsD;AACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7H,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,CAAC;YAAE,SAAS;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChD,CAAC;AACH,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEhC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AAEtC,yDAAyD;AACzD,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,qEAAqE;AACrE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -156,6 +156,10 @@ export interface Services {
156
156
  causalPlanner?: import('@timmeck/brain-core').CausalPlanner;
157
157
  researchRoadmap?: import('@timmeck/brain-core').ResearchRoadmap;
158
158
  creativeEngine?: import('@timmeck/brain-core').CreativeEngine;
159
+ actionBridge?: import('@timmeck/brain-core').ActionBridgeEngine;
160
+ contentForge?: import('@timmeck/brain-core').ContentForge;
161
+ codeForge?: import('@timmeck/brain-core').CodeForge;
162
+ strategyForge?: import('@timmeck/brain-core').StrategyForge;
159
163
  }
160
164
  type MethodHandler = (params: unknown) => unknown | Promise<unknown>;
161
165
  export declare class IpcRouter {
@@ -1339,6 +1339,83 @@ export class IpcRouter {
1339
1339
  throw new Error('CreativeEngine not available'); return { converted: s.creativeEngine.convertTopInsights(p(params)?.minNovelty ?? 0.5) }; }],
1340
1340
  ['creative.status', () => { if (!s.creativeEngine)
1341
1341
  throw new Error('CreativeEngine not available'); return s.creativeEngine.getStatus(); }],
1342
+ // ─── Action Bridge ───────────────────────────────────
1343
+ ['action.propose', (params) => { if (!s.actionBridge)
1344
+ throw new Error('ActionBridge not available'); return { id: s.actionBridge.propose(p(params)) }; }],
1345
+ ['action.queue', (params) => { if (!s.actionBridge)
1346
+ throw new Error('ActionBridge not available'); return s.actionBridge.getQueue(p(params)?.status); }],
1347
+ ['action.history', (params) => { if (!s.actionBridge)
1348
+ throw new Error('ActionBridge not available'); return s.actionBridge.getHistory(p(params)?.limit); }],
1349
+ ['action.execute', async (params) => { if (!s.actionBridge)
1350
+ throw new Error('ActionBridge not available'); return s.actionBridge.executeAction(p(params).id); }],
1351
+ ['action.outcome', (params) => { if (!s.actionBridge)
1352
+ throw new Error('ActionBridge not available'); s.actionBridge.recordOutcome(p(params).id, p(params).outcome); return { ok: true }; }],
1353
+ ['action.rollback', (params) => { if (!s.actionBridge)
1354
+ throw new Error('ActionBridge not available'); s.actionBridge.rollback(p(params).id); return { ok: true }; }],
1355
+ ['action.stats', (params) => { if (!s.actionBridge)
1356
+ throw new Error('ActionBridge not available'); return { successRate: s.actionBridge.getSuccessRate(p(params)?.type, p(params)?.source) }; }],
1357
+ ['action.status', () => { if (!s.actionBridge)
1358
+ throw new Error('ActionBridge not available'); return s.actionBridge.getStatus(); }],
1359
+ // ─── Content Forge ──────────────────────────────────
1360
+ ['content.generate', (params) => { if (!s.contentForge)
1361
+ throw new Error('ContentForge not available'); const pp = p(params); if (pp.sourceType === 'mission')
1362
+ return s.contentForge.generateFromMission(pp); if (pp.sourceType === 'trend')
1363
+ return s.contentForge.generateFromTrend(pp); if (pp.sourceType === 'principle')
1364
+ return s.contentForge.generateFromPrinciple(pp); return s.contentForge.generateFromInsight(pp, pp.platform); }],
1365
+ ['content.schedule', (params) => { if (!s.contentForge)
1366
+ throw new Error('ContentForge not available'); s.contentForge.schedule(p(params).id, p(params).when); return { ok: true }; }],
1367
+ ['content.publish', async (params) => { if (!s.contentForge)
1368
+ throw new Error('ContentForge not available'); return s.contentForge.publishNow(p(params).id); }],
1369
+ ['content.list', () => { if (!s.contentForge)
1370
+ throw new Error('ContentForge not available'); return s.contentForge.getSchedule(); }],
1371
+ ['content.engagement', (params) => { if (!s.contentForge)
1372
+ throw new Error('ContentForge not available'); s.contentForge.recordEngagement(p(params).id, p(params).metrics); return { ok: true }; }],
1373
+ ['content.best', (params) => { if (!s.contentForge)
1374
+ throw new Error('ContentForge not available'); return s.contentForge.getBestPerforming(p(params)?.limit); }],
1375
+ ['content.optimal', (params) => { if (!s.contentForge)
1376
+ throw new Error('ContentForge not available'); return { time: s.contentForge.getOptimalTime(p(params).platform) }; }],
1377
+ ['content.status', () => { if (!s.contentForge)
1378
+ throw new Error('ContentForge not available'); return s.contentForge.getStatus(); }],
1379
+ // ─── Code Forge ─────────────────────────────────────
1380
+ ['codeforge.patterns', () => { if (!s.codeForge)
1381
+ throw new Error('CodeForge not available'); return s.codeForge.extractPatterns(); }],
1382
+ ['codeforge.generate', (params) => { if (!s.codeForge)
1383
+ throw new Error('CodeForge not available'); return s.codeForge.generateUtility(p(params)); }],
1384
+ ['codeforge.scaffold', (params) => { if (!s.codeForge)
1385
+ throw new Error('CodeForge not available'); return s.codeForge.scaffoldProject(p(params).template, p(params).config ?? {}); }],
1386
+ ['codeforge.test', (params) => { if (!s.codeForge)
1387
+ throw new Error('CodeForge not available'); return s.codeForge.generateTest(p(params).targetFile); }],
1388
+ ['codeforge.apply', (params) => { if (!s.codeForge)
1389
+ throw new Error('CodeForge not available'); return s.codeForge.applyProduct(p(params).id); }],
1390
+ ['codeforge.products', (params) => { if (!s.codeForge)
1391
+ throw new Error('CodeForge not available'); return s.codeForge.getProducts(p(params)?.status); }],
1392
+ ['codeforge.rollback', (params) => { if (!s.codeForge)
1393
+ throw new Error('CodeForge not available'); s.codeForge.rollback(p(params).id); return { ok: true }; }],
1394
+ ['codeforge.status', () => { if (!s.codeForge)
1395
+ throw new Error('CodeForge not available'); return s.codeForge.getStatus(); }],
1396
+ // ─── Strategy Forge ─────────────────────────────────
1397
+ ['strategy.create', (params) => { if (!s.strategyForge)
1398
+ throw new Error('StrategyForge not available'); return s.strategyForge.createFromPrinciples(p(params).domain); }],
1399
+ ['strategy.fromSignals', (params) => { if (!s.strategyForge)
1400
+ throw new Error('StrategyForge not available'); return s.strategyForge.createFromSignals(p(params).signals); }],
1401
+ ['strategy.backtest', (params) => { if (!s.strategyForge)
1402
+ throw new Error('StrategyForge not available'); return s.strategyForge.backtest(p(params).id, p(params).data); }],
1403
+ ['strategy.activate', (params) => { if (!s.strategyForge)
1404
+ throw new Error('StrategyForge not available'); s.strategyForge.activate(p(params).id); return { ok: true }; }],
1405
+ ['strategy.pause', (params) => { if (!s.strategyForge)
1406
+ throw new Error('StrategyForge not available'); s.strategyForge.pause(p(params).id); return { ok: true }; }],
1407
+ ['strategy.execute', (params) => { if (!s.strategyForge)
1408
+ throw new Error('StrategyForge not available'); return s.strategyForge.executeStep(p(params).id); }],
1409
+ ['strategy.evolve', (params) => { if (!s.strategyForge)
1410
+ throw new Error('StrategyForge not available'); return s.strategyForge.evolve(p(params)?.ids); }],
1411
+ ['strategy.active', () => { if (!s.strategyForge)
1412
+ throw new Error('StrategyForge not available'); return s.strategyForge.getActive(); }],
1413
+ ['strategy.performance', (params) => { if (!s.strategyForge)
1414
+ throw new Error('StrategyForge not available'); return s.strategyForge.getPerformance(p(params).id); }],
1415
+ ['strategy.retire', (params) => { if (!s.strategyForge)
1416
+ throw new Error('StrategyForge not available'); s.strategyForge.retire(p(params).id, p(params).reason); return { ok: true }; }],
1417
+ ['strategy.status', () => { if (!s.strategyForge)
1418
+ throw new Error('StrategyForge not available'); return s.strategyForge.getStatus(); }],
1342
1419
  // Status (cross-brain)
1343
1420
  ['status', () => ({
1344
1421
  name: 'brain',