@timmeck/brain-core 2.36.42 → 2.36.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -68,6 +68,8 @@ export type { WatchdogConfig, DaemonConfig, DaemonStatus } from './watchdog/watc
68
68
  export { WindowsServiceManager } from './watchdog/windows-service.js';
69
69
  export { PluginRegistry } from './plugin/plugin-registry.js';
70
70
  export type { BrainPlugin, PluginContext, PluginToolDefinition, PluginRouteDefinition, PluginManifest, PluginRecord } from './plugin/types.js';
71
+ export { PluginMarketplace, runMarketplaceMigration } from './plugin/plugin-marketplace.js';
72
+ export type { CatalogPlugin, PluginCatalog, PluginReview, InstallRecord, CompatibilityResult, MarketplaceStatus, PluginMarketplaceConfig } from './plugin/plugin-marketplace.js';
71
73
  export { EcosystemService } from './ecosystem/service.js';
72
74
  export type { BrainStatus, EcosystemStatus, AggregatedAnalytics } from './ecosystem/service.js';
73
75
  export { WebhookService, runWebhookMigration } from './webhooks/service.js';
@@ -249,3 +251,5 @@ export { AgentTrainer, runTrainerMigration } from './agent-training/index.js';
249
251
  export type { TrainingConfig, EpochResult, TrainingReport, AgentTrainerStatus, } from './agent-training/index.js';
250
252
  export { ToolScopeManager, runToolScopingMigration } from './tool-scoping/index.js';
251
253
  export type { ToolScope, WorkflowContext, ScopeCheckResult, ToolScopeManagerStatus, } from './tool-scoping/index.js';
254
+ export { CodeSandbox, runSandboxMigration } from './sandbox/index.js';
255
+ export type { SandboxLanguage, ExecutionRequest, ExecutionResult, CodeSandboxConfig, CodeSandboxStatus, } from './sandbox/index.js';
package/dist/index.js CHANGED
@@ -54,6 +54,7 @@ export { WatchdogService, createDefaultWatchdogConfig } from './watchdog/watchdo
54
54
  export { WindowsServiceManager } from './watchdog/windows-service.js';
55
55
  // ── Plugin SDK ────────────────────────────────────────────
56
56
  export { PluginRegistry } from './plugin/plugin-registry.js';
57
+ export { PluginMarketplace, runMarketplaceMigration } from './plugin/plugin-marketplace.js';
57
58
  // ── Ecosystem ──────────────────────────────────────────────
58
59
  export { EcosystemService } from './ecosystem/service.js';
59
60
  // ── Webhooks ──────────────────────────────────────────────
@@ -216,4 +217,6 @@ export { BenchmarkSuite, runBenchmarkMigration } from './agent-training/index.js
216
217
  export { AgentTrainer, runTrainerMigration } from './agent-training/index.js';
217
218
  // ── Tool Scoping ────────────────────────────────────────────
218
219
  export { ToolScopeManager, runToolScopingMigration } from './tool-scoping/index.js';
220
+ // ── Code Sandbox ────────────────────────────────────────────
221
+ export { CodeSandbox, runSandboxMigration } from './sandbox/index.js';
219
222
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Plugin Marketplace — Browse, Install, Rate & Manage Brain Plugins
3
+ *
4
+ * Inspiriert von OpenClaw/ClawHub. Offline-first mit lokalem JSON-Katalog.
5
+ * Plugins werden via npm in ~/.brain/plugins/ installiert.
6
+ * Ratings und Reviews lokal in SQLite.
7
+ *
8
+ * Usage:
9
+ * ```typescript
10
+ * const marketplace = new PluginMarketplace(db, { pluginDir: '~/.brain/plugins' });
11
+ * const results = marketplace.search('sentiment');
12
+ * await marketplace.install('sentiment-analyzer');
13
+ * marketplace.rate('sentiment-analyzer', 5, 'Great plugin!');
14
+ * ```
15
+ */
16
+ import type Database from 'better-sqlite3';
17
+ export interface CatalogPlugin {
18
+ name: string;
19
+ version: string;
20
+ description: string;
21
+ author: string;
22
+ homepage?: string;
23
+ repository?: string;
24
+ license?: string;
25
+ category: string;
26
+ tags: string[];
27
+ requiredBrainVersion?: string;
28
+ nodeVersion?: string;
29
+ dependencies?: Record<string, string>;
30
+ downloadCount?: number;
31
+ featured?: boolean;
32
+ }
33
+ export interface PluginCatalog {
34
+ version: string;
35
+ lastUpdated: string;
36
+ plugins: CatalogPlugin[];
37
+ }
38
+ export interface PluginReview {
39
+ id: number;
40
+ pluginName: string;
41
+ rating: number;
42
+ text: string;
43
+ createdAt: string;
44
+ }
45
+ export interface InstallRecord {
46
+ id: number;
47
+ pluginName: string;
48
+ version: string;
49
+ installedAt: string;
50
+ uninstalledAt: string | null;
51
+ active: boolean;
52
+ }
53
+ export interface CompatibilityResult {
54
+ compatible: boolean;
55
+ issues: string[];
56
+ }
57
+ export interface MarketplaceStatus {
58
+ catalogPlugins: number;
59
+ installedPlugins: number;
60
+ totalReviews: number;
61
+ totalRatings: number;
62
+ featuredCount: number;
63
+ categories: string[];
64
+ }
65
+ export interface PluginMarketplaceConfig {
66
+ pluginDir?: string;
67
+ brainVersion?: string;
68
+ }
69
+ export declare function runMarketplaceMigration(db: Database.Database): void;
70
+ export declare class PluginMarketplace {
71
+ private db;
72
+ private readonly log;
73
+ private catalog;
74
+ private catalogVersion;
75
+ private catalogUpdated;
76
+ private readonly brainVersion;
77
+ private stmtInsertReview;
78
+ private stmtInsertInstall;
79
+ private stmtMarkUninstalled;
80
+ constructor(db: Database.Database, config?: PluginMarketplaceConfig);
81
+ /** Load catalog from a JSON object. */
82
+ loadCatalog(catalog: PluginCatalog): void;
83
+ /** Get full catalog info. */
84
+ getCatalogInfo(): {
85
+ version: string;
86
+ lastUpdated: string;
87
+ pluginCount: number;
88
+ };
89
+ /** List all available plugins from catalog. */
90
+ listAvailable(category?: string): CatalogPlugin[];
91
+ /** Search plugins by query (matches name, description, tags). */
92
+ search(query: string): CatalogPlugin[];
93
+ /** Get detailed info about a specific plugin. */
94
+ getPluginInfo(name: string): (CatalogPlugin & {
95
+ reviews: PluginReview[];
96
+ installed: boolean;
97
+ averageRating: number;
98
+ reviewCount: number;
99
+ }) | null;
100
+ /** Get distinct categories. */
101
+ getCategories(): string[];
102
+ /** Get featured plugins (marked as featured or top-rated). */
103
+ getFeatured(): CatalogPlugin[];
104
+ /** Record a plugin installation. */
105
+ install(name: string, version?: string): InstallRecord;
106
+ /** Record a plugin uninstallation. */
107
+ uninstall(name: string): boolean;
108
+ /** Check if a plugin is currently installed. */
109
+ isInstalled(name: string): boolean;
110
+ /** Get all installed plugins. */
111
+ getInstalled(): InstallRecord[];
112
+ /** Get install history (including uninstalled). */
113
+ getInstallHistory(limit?: number): InstallRecord[];
114
+ /** Check if a plugin is compatible with the current brain version. */
115
+ checkCompatibility(plugin: CatalogPlugin): CompatibilityResult;
116
+ /** Get plugins that have available updates. */
117
+ getUpdates(): Array<{
118
+ name: string;
119
+ installed: string;
120
+ available: string;
121
+ }>;
122
+ /** Rate a plugin (1-5) with optional review text. */
123
+ rate(pluginName: string, rating: number, text?: string): void;
124
+ /** Get average rating for a plugin. */
125
+ getAverageRating(pluginName: string): number;
126
+ /** Get reviews for a plugin. */
127
+ getReviews(pluginName: string, limit?: number): PluginReview[];
128
+ /** Resolve dependencies for a plugin (from catalog). */
129
+ resolveDependencies(name: string): {
130
+ resolved: string[];
131
+ missing: string[];
132
+ };
133
+ /** Get plugins that depend on a given plugin. */
134
+ getDependents(name: string): string[];
135
+ getStatus(): MarketplaceStatus;
136
+ private loadDefaultCatalog;
137
+ private enrichWithRatings;
138
+ /** Simple semver satisfies check (supports >= and ^). */
139
+ private satisfiesVersion;
140
+ }
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Plugin Marketplace — Browse, Install, Rate & Manage Brain Plugins
3
+ *
4
+ * Inspiriert von OpenClaw/ClawHub. Offline-first mit lokalem JSON-Katalog.
5
+ * Plugins werden via npm in ~/.brain/plugins/ installiert.
6
+ * Ratings und Reviews lokal in SQLite.
7
+ *
8
+ * Usage:
9
+ * ```typescript
10
+ * const marketplace = new PluginMarketplace(db, { pluginDir: '~/.brain/plugins' });
11
+ * const results = marketplace.search('sentiment');
12
+ * await marketplace.install('sentiment-analyzer');
13
+ * marketplace.rate('sentiment-analyzer', 5, 'Great plugin!');
14
+ * ```
15
+ */
16
+ import { getLogger } from '../utils/logger.js';
17
+ // ── Migration ───────────────────────────────────────────
18
+ export function runMarketplaceMigration(db) {
19
+ db.exec(`
20
+ CREATE TABLE IF NOT EXISTS marketplace_reviews (
21
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
22
+ plugin_name TEXT NOT NULL,
23
+ rating INTEGER NOT NULL CHECK(rating >= 1 AND rating <= 5),
24
+ text TEXT NOT NULL DEFAULT '',
25
+ created_at TEXT DEFAULT (datetime('now'))
26
+ );
27
+ CREATE INDEX IF NOT EXISTS idx_mkt_reviews_plugin ON marketplace_reviews(plugin_name);
28
+
29
+ CREATE TABLE IF NOT EXISTS marketplace_installs (
30
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
31
+ plugin_name TEXT NOT NULL,
32
+ version TEXT NOT NULL,
33
+ installed_at TEXT DEFAULT (datetime('now')),
34
+ uninstalled_at TEXT,
35
+ active INTEGER NOT NULL DEFAULT 1
36
+ );
37
+ CREATE INDEX IF NOT EXISTS idx_mkt_installs_plugin ON marketplace_installs(plugin_name);
38
+ CREATE INDEX IF NOT EXISTS idx_mkt_installs_active ON marketplace_installs(active);
39
+ `);
40
+ }
41
+ // ── Marketplace ─────────────────────────────────────────
42
+ export class PluginMarketplace {
43
+ db;
44
+ log = getLogger();
45
+ catalog = [];
46
+ catalogVersion = '0.0.0';
47
+ catalogUpdated = '';
48
+ brainVersion;
49
+ stmtInsertReview;
50
+ stmtInsertInstall;
51
+ stmtMarkUninstalled;
52
+ constructor(db, config = {}) {
53
+ this.db = db;
54
+ runMarketplaceMigration(db);
55
+ this.brainVersion = config.brainVersion ?? '2.36.0';
56
+ this.stmtInsertReview = db.prepare('INSERT INTO marketplace_reviews (plugin_name, rating, text) VALUES (?, ?, ?)');
57
+ this.stmtInsertInstall = db.prepare('INSERT INTO marketplace_installs (plugin_name, version) VALUES (?, ?)');
58
+ this.stmtMarkUninstalled = db.prepare("UPDATE marketplace_installs SET uninstalled_at = datetime('now'), active = 0 WHERE plugin_name = ? AND active = 1");
59
+ // Load default catalog
60
+ this.loadDefaultCatalog();
61
+ }
62
+ // ── Catalog Management ────────────────────────────────
63
+ /** Load catalog from a JSON object. */
64
+ loadCatalog(catalog) {
65
+ this.catalog = catalog.plugins ?? [];
66
+ this.catalogVersion = catalog.version ?? '1.0.0';
67
+ this.catalogUpdated = catalog.lastUpdated ?? new Date().toISOString();
68
+ this.log.debug(`[Marketplace] Loaded catalog v${this.catalogVersion} with ${this.catalog.length} plugins`);
69
+ }
70
+ /** Get full catalog info. */
71
+ getCatalogInfo() {
72
+ return {
73
+ version: this.catalogVersion,
74
+ lastUpdated: this.catalogUpdated,
75
+ pluginCount: this.catalog.length,
76
+ };
77
+ }
78
+ // ── Browse & Search ───────────────────────────────────
79
+ /** List all available plugins from catalog. */
80
+ listAvailable(category) {
81
+ let plugins = [...this.catalog];
82
+ if (category) {
83
+ plugins = plugins.filter(p => p.category === category);
84
+ }
85
+ // Enrich with local ratings
86
+ return plugins.map(p => this.enrichWithRatings(p));
87
+ }
88
+ /** Search plugins by query (matches name, description, tags). */
89
+ search(query) {
90
+ const q = query.toLowerCase();
91
+ return this.catalog
92
+ .filter(p => p.name.toLowerCase().includes(q) ||
93
+ p.description.toLowerCase().includes(q) ||
94
+ p.tags.some(t => t.toLowerCase().includes(q)) ||
95
+ p.category.toLowerCase().includes(q))
96
+ .map(p => this.enrichWithRatings(p));
97
+ }
98
+ /** Get detailed info about a specific plugin. */
99
+ getPluginInfo(name) {
100
+ const plugin = this.catalog.find(p => p.name === name);
101
+ if (!plugin)
102
+ return null;
103
+ const reviews = this.getReviews(name);
104
+ const installed = this.isInstalled(name);
105
+ const avgRating = this.getAverageRating(name);
106
+ const reviewCount = reviews.length;
107
+ return {
108
+ ...this.enrichWithRatings(plugin),
109
+ reviews,
110
+ installed,
111
+ averageRating: avgRating,
112
+ reviewCount,
113
+ };
114
+ }
115
+ /** Get distinct categories. */
116
+ getCategories() {
117
+ return [...new Set(this.catalog.map(p => p.category))].sort();
118
+ }
119
+ /** Get featured plugins (marked as featured or top-rated). */
120
+ getFeatured() {
121
+ const featured = this.catalog.filter(p => p.featured);
122
+ if (featured.length > 0)
123
+ return featured.map(p => this.enrichWithRatings(p));
124
+ // Fallback: top-rated plugins
125
+ return this.catalog
126
+ .map(p => ({ ...p, _avgRating: this.getAverageRating(p.name) }))
127
+ .sort((a, b) => b._avgRating - a._avgRating)
128
+ .slice(0, 5)
129
+ .map(({ _avgRating: _, ...p }) => this.enrichWithRatings(p));
130
+ }
131
+ // ── Install / Uninstall ───────────────────────────────
132
+ /** Record a plugin installation. */
133
+ install(name, version) {
134
+ const plugin = this.catalog.find(p => p.name === name);
135
+ const v = version ?? plugin?.version ?? '0.0.0';
136
+ // Check compatibility first
137
+ if (plugin) {
138
+ const compat = this.checkCompatibility(plugin);
139
+ if (!compat.compatible) {
140
+ throw new Error(`Plugin '${name}' incompatible: ${compat.issues.join(', ')}`);
141
+ }
142
+ }
143
+ // Record in DB
144
+ try {
145
+ this.stmtInsertInstall.run(name, v);
146
+ }
147
+ catch (e) {
148
+ this.log.warn(`[Marketplace] Failed to record install: ${e.message}`);
149
+ }
150
+ this.log.debug(`[Marketplace] Installed ${name}@${v}`);
151
+ return {
152
+ id: 0,
153
+ pluginName: name,
154
+ version: v,
155
+ installedAt: new Date().toISOString(),
156
+ uninstalledAt: null,
157
+ active: true,
158
+ };
159
+ }
160
+ /** Record a plugin uninstallation. */
161
+ uninstall(name) {
162
+ if (!this.isInstalled(name))
163
+ return false;
164
+ // Check dependents
165
+ const dependents = this.getDependents(name);
166
+ if (dependents.length > 0) {
167
+ throw new Error(`Cannot uninstall '${name}': required by ${dependents.join(', ')}`);
168
+ }
169
+ try {
170
+ this.stmtMarkUninstalled.run(name);
171
+ }
172
+ catch (e) {
173
+ this.log.warn(`[Marketplace] Failed to record uninstall: ${e.message}`);
174
+ return false;
175
+ }
176
+ this.log.debug(`[Marketplace] Uninstalled ${name}`);
177
+ return true;
178
+ }
179
+ /** Check if a plugin is currently installed. */
180
+ isInstalled(name) {
181
+ const row = this.db.prepare('SELECT COUNT(*) as c FROM marketplace_installs WHERE plugin_name = ? AND active = 1').get(name);
182
+ return row.c > 0;
183
+ }
184
+ /** Get all installed plugins. */
185
+ getInstalled() {
186
+ return this.db.prepare('SELECT id, plugin_name as pluginName, version, installed_at as installedAt, uninstalled_at as uninstalledAt, active FROM marketplace_installs WHERE active = 1 ORDER BY installed_at DESC').all();
187
+ }
188
+ /** Get install history (including uninstalled). */
189
+ getInstallHistory(limit = 50) {
190
+ return this.db.prepare('SELECT id, plugin_name as pluginName, version, installed_at as installedAt, uninstalled_at as uninstalledAt, active FROM marketplace_installs ORDER BY id DESC LIMIT ?').all(limit).map(r => ({ ...r, active: !!r.active }));
191
+ }
192
+ // ── Compatibility ─────────────────────────────────────
193
+ /** Check if a plugin is compatible with the current brain version. */
194
+ checkCompatibility(plugin) {
195
+ const issues = [];
196
+ if (plugin.requiredBrainVersion) {
197
+ if (!this.satisfiesVersion(this.brainVersion, plugin.requiredBrainVersion)) {
198
+ issues.push(`Requires brain ${plugin.requiredBrainVersion}, have ${this.brainVersion}`);
199
+ }
200
+ }
201
+ if (plugin.nodeVersion) {
202
+ const nodeVersion = process.version.replace('v', '');
203
+ if (!this.satisfiesVersion(nodeVersion, plugin.nodeVersion)) {
204
+ issues.push(`Requires Node ${plugin.nodeVersion}, have ${process.version}`);
205
+ }
206
+ }
207
+ return { compatible: issues.length === 0, issues };
208
+ }
209
+ /** Get plugins that have available updates. */
210
+ getUpdates() {
211
+ const installed = this.getInstalled();
212
+ const updates = [];
213
+ for (const inst of installed) {
214
+ const catalogPlugin = this.catalog.find(p => p.name === inst.pluginName);
215
+ if (catalogPlugin && catalogPlugin.version !== inst.version) {
216
+ updates.push({
217
+ name: inst.pluginName,
218
+ installed: inst.version,
219
+ available: catalogPlugin.version,
220
+ });
221
+ }
222
+ }
223
+ return updates;
224
+ }
225
+ // ── Ratings & Reviews ─────────────────────────────────
226
+ /** Rate a plugin (1-5) with optional review text. */
227
+ rate(pluginName, rating, text = '') {
228
+ if (rating < 1 || rating > 5)
229
+ throw new Error('Rating must be between 1 and 5');
230
+ try {
231
+ this.stmtInsertReview.run(pluginName, Math.round(rating), text);
232
+ }
233
+ catch (e) {
234
+ this.log.warn(`[Marketplace] Failed to save rating: ${e.message}`);
235
+ }
236
+ }
237
+ /** Get average rating for a plugin. */
238
+ getAverageRating(pluginName) {
239
+ try {
240
+ const row = this.db.prepare('SELECT AVG(rating) as avg FROM marketplace_reviews WHERE plugin_name = ?').get(pluginName);
241
+ return row.avg ? Math.round(row.avg * 10) / 10 : 0;
242
+ }
243
+ catch {
244
+ return 0;
245
+ }
246
+ }
247
+ /** Get reviews for a plugin. */
248
+ getReviews(pluginName, limit = 20) {
249
+ try {
250
+ return this.db.prepare('SELECT id, plugin_name as pluginName, rating, text, created_at as createdAt FROM marketplace_reviews WHERE plugin_name = ? ORDER BY id DESC LIMIT ?').all(pluginName, limit);
251
+ }
252
+ catch {
253
+ return [];
254
+ }
255
+ }
256
+ // ── Dependency Resolution ─────────────────────────────
257
+ /** Resolve dependencies for a plugin (from catalog). */
258
+ resolveDependencies(name) {
259
+ const plugin = this.catalog.find(p => p.name === name);
260
+ if (!plugin)
261
+ return { resolved: [], missing: [name] };
262
+ const resolved = [];
263
+ const missing = [];
264
+ const visited = new Set();
265
+ const resolve = (n) => {
266
+ if (visited.has(n))
267
+ return; // Circular dep protection
268
+ visited.add(n);
269
+ const p = this.catalog.find(cp => cp.name === n);
270
+ if (!p) {
271
+ // Not a brain plugin dep — it's an npm dep, skip
272
+ return;
273
+ }
274
+ // Resolve brain plugin deps recursively
275
+ if (p.dependencies) {
276
+ for (const dep of Object.keys(p.dependencies)) {
277
+ const inCatalog = this.catalog.find(cp => cp.name === dep);
278
+ if (inCatalog) {
279
+ resolve(dep);
280
+ }
281
+ }
282
+ }
283
+ resolved.push(n);
284
+ };
285
+ resolve(name);
286
+ return { resolved, missing };
287
+ }
288
+ /** Get plugins that depend on a given plugin. */
289
+ getDependents(name) {
290
+ return this.catalog
291
+ .filter(p => p.dependencies && Object.keys(p.dependencies).includes(name))
292
+ .map(p => p.name);
293
+ }
294
+ // ── Status ──────────────────────────────────────────
295
+ getStatus() {
296
+ try {
297
+ const installedCount = this.db.prepare('SELECT COUNT(*) as c FROM marketplace_installs WHERE active = 1').get().c;
298
+ const totalReviews = this.db.prepare('SELECT COUNT(*) as c FROM marketplace_reviews').get().c;
299
+ const totalRatings = this.db.prepare('SELECT COUNT(DISTINCT plugin_name) as c FROM marketplace_reviews').get().c;
300
+ const featuredCount = this.catalog.filter(p => p.featured).length;
301
+ const categories = this.getCategories();
302
+ return {
303
+ catalogPlugins: this.catalog.length,
304
+ installedPlugins: installedCount,
305
+ totalReviews,
306
+ totalRatings,
307
+ featuredCount,
308
+ categories,
309
+ };
310
+ }
311
+ catch {
312
+ return { catalogPlugins: 0, installedPlugins: 0, totalReviews: 0, totalRatings: 0, featuredCount: 0, categories: [] };
313
+ }
314
+ }
315
+ // ── Private ─────────────────────────────────────────
316
+ loadDefaultCatalog() {
317
+ const defaultCatalog = {
318
+ version: '1.0.0',
319
+ lastUpdated: '2026-03-07T00:00:00Z',
320
+ plugins: [
321
+ {
322
+ name: 'weather-brain',
323
+ version: '1.2.0',
324
+ description: 'Real-time weather data and forecasts for trading signals and research',
325
+ author: 'Brain Community',
326
+ license: 'MIT',
327
+ category: 'trading',
328
+ tags: ['weather', 'signals', 'forecast', 'data'],
329
+ requiredBrainVersion: '>=2.30.0',
330
+ downloadCount: 342,
331
+ featured: true,
332
+ },
333
+ {
334
+ name: 'sentiment-analyzer',
335
+ version: '0.9.0',
336
+ description: 'NLP sentiment analysis for social data, news, and trading context',
337
+ author: 'Brain Community',
338
+ license: 'MIT',
339
+ category: 'research',
340
+ tags: ['sentiment', 'nlp', 'social', 'analysis'],
341
+ requiredBrainVersion: '>=2.30.0',
342
+ downloadCount: 189,
343
+ },
344
+ {
345
+ name: 'vector-search-plus',
346
+ version: '2.1.0',
347
+ description: 'Advanced vector search with FAISS integration and multi-index support',
348
+ author: 'Brain Community',
349
+ license: 'MIT',
350
+ category: 'research',
351
+ tags: ['vector', 'search', 'faiss', 'rag', 'embeddings'],
352
+ requiredBrainVersion: '>=2.36.0',
353
+ downloadCount: 521,
354
+ featured: true,
355
+ },
356
+ {
357
+ name: 'github-copilot-bridge',
358
+ version: '1.0.0',
359
+ description: 'Bridge between Brain and GitHub Copilot for enhanced code suggestions',
360
+ author: 'Brain Community',
361
+ license: 'MIT',
362
+ category: 'integration',
363
+ tags: ['github', 'copilot', 'code', 'bridge'],
364
+ requiredBrainVersion: '>=2.36.0',
365
+ downloadCount: 78,
366
+ },
367
+ {
368
+ name: 'slack-notifier',
369
+ version: '1.1.0',
370
+ description: 'Slack integration for Brain notifications and command dispatch',
371
+ author: 'Brain Community',
372
+ license: 'MIT',
373
+ category: 'integration',
374
+ tags: ['slack', 'notifications', 'messaging'],
375
+ requiredBrainVersion: '>=2.30.0',
376
+ downloadCount: 256,
377
+ },
378
+ {
379
+ name: 'portfolio-optimizer',
380
+ version: '0.5.0',
381
+ description: 'Markowitz mean-variance portfolio optimization with Brain signals',
382
+ author: 'Brain Community',
383
+ license: 'MIT',
384
+ category: 'trading',
385
+ tags: ['portfolio', 'optimization', 'markowitz', 'risk'],
386
+ requiredBrainVersion: '>=2.31.0',
387
+ downloadCount: 145,
388
+ },
389
+ {
390
+ name: 'content-calendar',
391
+ version: '1.3.0',
392
+ description: 'Visual content calendar with drag-and-drop scheduling for marketing',
393
+ author: 'Brain Community',
394
+ license: 'MIT',
395
+ category: 'marketing',
396
+ tags: ['calendar', 'scheduling', 'content', 'planning'],
397
+ requiredBrainVersion: '>=1.32.0',
398
+ downloadCount: 312,
399
+ featured: true,
400
+ },
401
+ {
402
+ name: 'ab-test-engine',
403
+ version: '0.8.0',
404
+ description: 'A/B testing framework for content variants with statistical significance',
405
+ author: 'Brain Community',
406
+ license: 'MIT',
407
+ category: 'marketing',
408
+ tags: ['ab-test', 'statistics', 'content', 'experiment'],
409
+ requiredBrainVersion: '>=1.32.0',
410
+ downloadCount: 98,
411
+ },
412
+ {
413
+ name: 'code-reviewer',
414
+ version: '1.0.0',
415
+ description: 'Automated code review with pattern detection and improvement suggestions',
416
+ author: 'Brain Community',
417
+ license: 'MIT',
418
+ category: 'development',
419
+ tags: ['code-review', 'patterns', 'quality', 'lint'],
420
+ requiredBrainVersion: '>=2.36.0',
421
+ downloadCount: 167,
422
+ },
423
+ {
424
+ name: 'prometheus-exporter',
425
+ version: '0.3.0',
426
+ description: 'Export Brain metrics to Prometheus for Grafana dashboards',
427
+ author: 'Brain Community',
428
+ license: 'MIT',
429
+ category: 'monitoring',
430
+ tags: ['prometheus', 'grafana', 'metrics', 'monitoring'],
431
+ requiredBrainVersion: '>=2.30.0',
432
+ downloadCount: 203,
433
+ },
434
+ ],
435
+ };
436
+ this.loadCatalog(defaultCatalog);
437
+ }
438
+ enrichWithRatings(plugin) {
439
+ // Keep original — ratings are fetched via getPluginInfo()
440
+ return plugin;
441
+ }
442
+ /** Simple semver satisfies check (supports >= and ^). */
443
+ satisfiesVersion(actual, constraint) {
444
+ try {
445
+ const parse = (v) => v.replace(/[^0-9.]/g, '').split('.').map(Number);
446
+ const clean = constraint.replace(/[>=^~ ]/g, '');
447
+ const actualParts = parse(actual);
448
+ const requiredParts = parse(clean);
449
+ if (constraint.startsWith('>=')) {
450
+ for (let i = 0; i < 3; i++) {
451
+ const a = actualParts[i] ?? 0;
452
+ const r = requiredParts[i] ?? 0;
453
+ if (a > r)
454
+ return true;
455
+ if (a < r)
456
+ return false;
457
+ }
458
+ return true; // equal
459
+ }
460
+ if (constraint.startsWith('^')) {
461
+ // ^Major.minor.patch — same major, >= minor.patch
462
+ return actualParts[0] === requiredParts[0] &&
463
+ (actualParts[1] ?? 0) >= (requiredParts[1] ?? 0);
464
+ }
465
+ // Exact match fallback
466
+ return actual === clean;
467
+ }
468
+ catch {
469
+ return true; // If we can't parse, assume compatible
470
+ }
471
+ }
472
+ }
473
+ //# sourceMappingURL=plugin-marketplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-marketplace.js","sourceRoot":"","sources":["../../src/plugin/plugin-marketplace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA+D/C,2DAA2D;AAE3D,MAAM,UAAU,uBAAuB,CAAC,EAAqB;IAC3D,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;GAoBP,CAAC,CAAC;AACL,CAAC;AAED,2DAA2D;AAE3D,MAAM,OAAO,iBAAiB;IAYlB;IAXO,GAAG,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,GAAoB,EAAE,CAAC;IAC9B,cAAc,GAAG,OAAO,CAAC;IACzB,cAAc,GAAG,EAAE,CAAC;IACX,YAAY,CAAS;IAE9B,gBAAgB,CAAqB;IACrC,iBAAiB,CAAqB;IACtC,mBAAmB,CAAqB;IAEhD,YACU,EAAqB,EAC7B,SAAkC,EAAE;QAD5B,OAAE,GAAF,EAAE,CAAmB;QAG7B,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAC;QAEpD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAChC,8EAA8E,CAC/E,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CACjC,uEAAuE,CACxE,CAAC;QACF,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,CACnC,mHAAmH,CACpH,CAAC;QAEF,uBAAuB;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,yDAAyD;IAEzD,uCAAuC;IACvC,WAAW,CAAC,OAAsB;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,cAAc,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;IAC7G,CAAC;IAED,6BAA6B;IAC7B,cAAc;QACZ,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,WAAW,EAAE,IAAI,CAAC,cAAc;YAChC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;SACjC,CAAC;IACJ,CAAC;IAED,yDAAyD;IAEzD,+CAA+C;IAC/C,aAAa,CAAC,QAAiB;QAC7B,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACzD,CAAC;QACD,4BAA4B;QAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,iEAAiE;IACjE,MAAM,CAAC,KAAa;QAClB,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CACV,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrC;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,iDAAiD;IACjD,aAAa,CAAC,IAAY;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;QAEnC,OAAO;YACL,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACjC,OAAO;YACP,SAAS;YACT,aAAa,EAAE,SAAS;YACxB,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,8DAA8D;IAC9D,WAAW;QACT,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7E,8BAA8B;QAC9B,OAAO,IAAI,CAAC,OAAO;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC/D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;aAC3C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,yDAAyD;IAEzD,oCAAoC;IACpC,OAAO,CAAC,IAAY,EAAE,OAAgB;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC;QAEhD,4BAA4B;QAC5B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,mBAAmB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAED,eAAe;QACf,IAAI,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2CAA4C,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QAEvD,OAAO;YACL,EAAE,EAAE,CAAC;YACL,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,aAAa,EAAE,IAAI;YACnB,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAE1C,mBAAmB;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,kBAAkB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6CAA8C,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,WAAW,CAAC,IAAY;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,qFAAqF,CACtF,CAAC,GAAG,CAAC,IAAI,CAAkB,CAAC;QAC7B,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,iCAAiC;IACjC,YAAY;QACV,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,2LAA2L,CAC5L,CAAC,GAAG,EAAqB,CAAC;IAC7B,CAAC;IAED,mDAAmD;IACnD,iBAAiB,CAAC,KAAK,GAAG,EAAE;QAC1B,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,wKAAwK,CACzK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAI,CAA6B,EAAE,MAAM,EAAE,CAAC,CAAE,CAA6B,CAAC,MAAM,EAAE,CAAC,CAAoB,CAAC;IACrI,CAAC;IAED,yDAAyD;IAEzD,sEAAsE;IACtE,kBAAkB,CAAC,MAAqB;QACtC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC3E,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,oBAAoB,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,WAAW,UAAU,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACrD,CAAC;IAED,+CAA+C;IAC/C,UAAU;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,OAAO,GAAkE,EAAE,CAAC;QAElF,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;YACzE,IAAI,aAAa,IAAI,aAAa,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,IAAI,CAAC,UAAU;oBACrB,SAAS,EAAE,IAAI,CAAC,OAAO;oBACvB,SAAS,EAAE,aAAa,CAAC,OAAO;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,yDAAyD;IAEzD,qDAAqD;IACrD,IAAI,CAAC,UAAkB,EAAE,MAAc,EAAE,IAAI,GAAG,EAAE;QAChD,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEhF,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAyC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,gBAAgB,CAAC,UAAkB;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,0EAA0E,CAC3E,CAAC,GAAG,CAAC,UAAU,CAA2B,CAAC;YAC5C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,UAAU,CAAC,UAAkB,EAAE,KAAK,GAAG,EAAE;QACvC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,qJAAqJ,CACtJ,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAmB,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,yDAAyD;IAEzD,wDAAwD;IACxD,mBAAmB,CAAC,IAAY;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAEtD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,0BAA0B;YACtD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAEf,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,iDAAiD;gBACjD,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;gBACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;oBAC3D,IAAI,SAAS,EAAE,CAAC;wBACd,OAAO,CAAC,GAAG,CAAC,CAAC;oBACf,CAAC;gBACH,CAAC;YACH,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,iDAAiD;IACjD,aAAa,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACzE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,uDAAuD;IAEvD,SAAS;QACP,IAAI,CAAC;YACH,MAAM,cAAc,GAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YACrI,MAAM,YAAY,GAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YACjH,MAAM,YAAY,GAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YACpI,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;YAClE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAExC,OAAO;gBACL,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBACnC,gBAAgB,EAAE,cAAc;gBAChC,YAAY;gBACZ,YAAY;gBACZ,aAAa;gBACb,UAAU;aACX,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACxH,CAAC;IACH,CAAC;IAED,uDAAuD;IAE/C,kBAAkB;QACxB,MAAM,cAAc,GAAkB;YACpC,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,uEAAuE;oBACpF,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,SAAS;oBACnB,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC;oBAChD,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,GAAG;oBAClB,QAAQ,EAAE,IAAI;iBACf;gBACD;oBACE,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,mEAAmE;oBAChF,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC;oBAChD,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,GAAG;iBACnB;gBACD;oBACE,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,uEAAuE;oBACpF,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC;oBACxD,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,GAAG;oBAClB,QAAQ,EAAE,IAAI;iBACf;gBACD;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,uEAAuE;oBACpF,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,aAAa;oBACvB,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC;oBAC7C,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,EAAE;iBAClB;gBACD;oBACE,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,gEAAgE;oBAC7E,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,aAAa;oBACvB,IAAI,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC;oBAC7C,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,GAAG;iBACnB;gBACD;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,mEAAmE;oBAChF,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,SAAS;oBACnB,IAAI,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,CAAC;oBACxD,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,GAAG;iBACnB;gBACD;oBACE,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,qEAAqE;oBAClF,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,WAAW;oBACrB,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC;oBACvD,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,GAAG;oBAClB,QAAQ,EAAE,IAAI;iBACf;gBACD;oBACE,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,0EAA0E;oBACvF,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,WAAW;oBACrB,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC;oBACxD,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,EAAE;iBAClB;gBACD;oBACE,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,0EAA0E;oBACvF,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,aAAa;oBACvB,IAAI,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC;oBACpD,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,GAAG;iBACnB;gBACD;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,2DAA2D;oBACxE,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,YAAY;oBACtB,IAAI,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC;oBACxD,oBAAoB,EAAE,UAAU;oBAChC,aAAa,EAAE,GAAG;iBACnB;aACF;SACF,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC;IAEO,iBAAiB,CAAC,MAAqB;QAC7C,0DAA0D;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yDAAyD;IACjD,gBAAgB,CAAC,MAAc,EAAE,UAAkB;QACzD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9E,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnC,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,GAAG,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACvB,IAAI,CAAC,GAAG,CAAC;wBAAE,OAAO,KAAK,CAAC;gBAC1B,CAAC;gBACD,OAAO,IAAI,CAAC,CAAC,QAAQ;YACvB,CAAC;YAED,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,kDAAkD;gBAClD,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC;oBACxC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,CAAC;YAED,uBAAuB;YACvB,OAAO,MAAM,KAAK,KAAK,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,CAAC,uCAAuC;QACtD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Code Sandbox — Isolated Code Execution (AutoGen-inspired)
3
+ *
4
+ * Führt generierten Code in isolierten Prozessen aus.
5
+ * Unterstützt TypeScript, Python und Shell.
6
+ * Timeout und Ressourcenlimits. Ergebnis-Capture (stdout/stderr/exitCode).
7
+ *
8
+ * Docker-basiert wenn verfügbar, Fallback auf lokale Subprozesse mit Timeout.
9
+ *
10
+ * Usage:
11
+ * ```typescript
12
+ * const sandbox = new CodeSandbox(db);
13
+ * const result = await sandbox.execute({
14
+ * code: 'console.log("Hello");',
15
+ * language: 'typescript',
16
+ * timeoutMs: 5000,
17
+ * });
18
+ * console.log(result.stdout); // "Hello\n"
19
+ * ```
20
+ */
21
+ import type Database from 'better-sqlite3';
22
+ export type SandboxLanguage = 'typescript' | 'javascript' | 'python' | 'shell';
23
+ export interface ExecutionRequest {
24
+ /** Code to execute */
25
+ code: string;
26
+ /** Language */
27
+ language: SandboxLanguage;
28
+ /** Max execution time in ms. Default: 10000 */
29
+ timeoutMs?: number;
30
+ /** Max memory in MB. Default: 128 */
31
+ memoryMb?: number;
32
+ /** Working directory (used for local execution) */
33
+ workDir?: string;
34
+ /** Name/label for this execution */
35
+ name?: string;
36
+ /** Additional context metadata */
37
+ metadata?: Record<string, unknown>;
38
+ }
39
+ export interface ExecutionResult {
40
+ id: string;
41
+ language: SandboxLanguage;
42
+ stdout: string;
43
+ stderr: string;
44
+ exitCode: number;
45
+ durationMs: number;
46
+ timedOut: boolean;
47
+ error?: string;
48
+ name?: string;
49
+ createdAt: number;
50
+ }
51
+ export interface CodeSandboxConfig {
52
+ /** Prefer Docker containers. Default: true */
53
+ preferDocker?: boolean;
54
+ /** Default timeout. Default: 10000 */
55
+ defaultTimeoutMs?: number;
56
+ /** Default max memory. Default: 128 */
57
+ defaultMemoryMb?: number;
58
+ /** Max output size in chars. Default: 100000 */
59
+ maxOutputSize?: number;
60
+ }
61
+ export interface CodeSandboxStatus {
62
+ totalExecutions: number;
63
+ successCount: number;
64
+ failCount: number;
65
+ timeoutCount: number;
66
+ avgDurationMs: number;
67
+ dockerAvailable: boolean;
68
+ languages: string[];
69
+ }
70
+ export declare function runSandboxMigration(db: Database.Database): void;
71
+ export declare class CodeSandbox {
72
+ private db;
73
+ private readonly log;
74
+ private readonly config;
75
+ private dockerAvailable;
76
+ private stmtInsert;
77
+ constructor(db: Database.Database, config?: CodeSandboxConfig);
78
+ /** Execute code in a sandboxed environment. */
79
+ execute(request: ExecutionRequest): Promise<ExecutionResult>;
80
+ /** Execute multiple code blocks sequentially. */
81
+ executeMany(requests: ExecutionRequest[]): Promise<ExecutionResult[]>;
82
+ /**
83
+ * Validate code without executing (basic syntax check).
84
+ * Returns null if valid, error message if invalid.
85
+ */
86
+ validate(code: string, language: SandboxLanguage): string | null;
87
+ private executeInDocker;
88
+ private executeLocal;
89
+ private runProcess;
90
+ private getDockerConfig;
91
+ private getLocalConfig;
92
+ /** Check if Docker is available on this system. */
93
+ isDockerAvailable(): Promise<boolean>;
94
+ /** Reset Docker availability cache. */
95
+ resetDockerCache(): void;
96
+ /** Get recent execution history. */
97
+ getHistory(limit?: number): Array<{
98
+ id: string;
99
+ language: string;
100
+ exitCode: number;
101
+ durationMs: number;
102
+ timedOut: boolean;
103
+ name: string | null;
104
+ error: string | null;
105
+ createdAt: string;
106
+ }>;
107
+ /** Get execution stats by language. */
108
+ getLanguageStats(): Array<{
109
+ language: string;
110
+ total: number;
111
+ avgDuration: number;
112
+ successRate: number;
113
+ }>;
114
+ getStatus(): CodeSandboxStatus;
115
+ private truncate;
116
+ private persistResult;
117
+ }
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Code Sandbox — Isolated Code Execution (AutoGen-inspired)
3
+ *
4
+ * Führt generierten Code in isolierten Prozessen aus.
5
+ * Unterstützt TypeScript, Python und Shell.
6
+ * Timeout und Ressourcenlimits. Ergebnis-Capture (stdout/stderr/exitCode).
7
+ *
8
+ * Docker-basiert wenn verfügbar, Fallback auf lokale Subprozesse mit Timeout.
9
+ *
10
+ * Usage:
11
+ * ```typescript
12
+ * const sandbox = new CodeSandbox(db);
13
+ * const result = await sandbox.execute({
14
+ * code: 'console.log("Hello");',
15
+ * language: 'typescript',
16
+ * timeoutMs: 5000,
17
+ * });
18
+ * console.log(result.stdout); // "Hello\n"
19
+ * ```
20
+ */
21
+ import { execFile } from 'node:child_process';
22
+ import fs from 'node:fs';
23
+ import path from 'node:path';
24
+ import os from 'node:os';
25
+ import { getLogger } from '../utils/logger.js';
26
+ // ── Migration ───────────────────────────────────────────
27
+ export function runSandboxMigration(db) {
28
+ db.exec(`
29
+ CREATE TABLE IF NOT EXISTS sandbox_executions (
30
+ id TEXT PRIMARY KEY,
31
+ language TEXT NOT NULL,
32
+ exit_code INTEGER NOT NULL DEFAULT 0,
33
+ duration_ms INTEGER NOT NULL DEFAULT 0,
34
+ timed_out INTEGER NOT NULL DEFAULT 0,
35
+ name TEXT,
36
+ stdout_preview TEXT,
37
+ error TEXT,
38
+ created_at TEXT DEFAULT (datetime('now'))
39
+ );
40
+ CREATE INDEX IF NOT EXISTS idx_sandbox_created ON sandbox_executions(created_at);
41
+ CREATE INDEX IF NOT EXISTS idx_sandbox_language ON sandbox_executions(language);
42
+ `);
43
+ }
44
+ // ── Sandbox ─────────────────────────────────────────────
45
+ export class CodeSandbox {
46
+ db;
47
+ log = getLogger();
48
+ config;
49
+ dockerAvailable = null;
50
+ stmtInsert;
51
+ constructor(db, config = {}) {
52
+ this.db = db;
53
+ runSandboxMigration(db);
54
+ this.config = {
55
+ preferDocker: config.preferDocker ?? true,
56
+ defaultTimeoutMs: config.defaultTimeoutMs ?? 10000,
57
+ defaultMemoryMb: config.defaultMemoryMb ?? 128,
58
+ maxOutputSize: config.maxOutputSize ?? 100000,
59
+ };
60
+ this.stmtInsert = db.prepare('INSERT INTO sandbox_executions (id, language, exit_code, duration_ms, timed_out, name, stdout_preview, error) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
61
+ }
62
+ // ── Execution ─────────────────────────────────────────
63
+ /** Execute code in a sandboxed environment. */
64
+ async execute(request) {
65
+ const timeoutMs = request.timeoutMs ?? this.config.defaultTimeoutMs;
66
+ const id = `exec-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
67
+ const startTime = Date.now();
68
+ let result;
69
+ try {
70
+ // Check Docker availability (cached)
71
+ const useDocker = this.config.preferDocker && await this.isDockerAvailable();
72
+ if (useDocker) {
73
+ result = await this.executeInDocker(id, request, timeoutMs);
74
+ }
75
+ else {
76
+ result = await this.executeLocal(id, request, timeoutMs);
77
+ }
78
+ }
79
+ catch (e) {
80
+ result = {
81
+ id,
82
+ language: request.language,
83
+ stdout: '',
84
+ stderr: '',
85
+ exitCode: 1,
86
+ durationMs: Date.now() - startTime,
87
+ timedOut: false,
88
+ error: e.message,
89
+ name: request.name,
90
+ createdAt: Date.now(),
91
+ };
92
+ }
93
+ // Truncate output
94
+ result.stdout = this.truncate(result.stdout);
95
+ result.stderr = this.truncate(result.stderr);
96
+ // Persist
97
+ this.persistResult(result);
98
+ return result;
99
+ }
100
+ /** Execute multiple code blocks sequentially. */
101
+ async executeMany(requests) {
102
+ const results = [];
103
+ for (const req of requests) {
104
+ results.push(await this.execute(req));
105
+ }
106
+ return results;
107
+ }
108
+ /**
109
+ * Validate code without executing (basic syntax check).
110
+ * Returns null if valid, error message if invalid.
111
+ */
112
+ validate(code, language) {
113
+ try {
114
+ switch (language) {
115
+ case 'javascript':
116
+ case 'typescript':
117
+ // Basic check: try parsing with Function constructor
118
+ // eslint-disable-next-line no-new-func
119
+ new Function(code);
120
+ return null;
121
+ case 'python':
122
+ // Basic check: look for obvious syntax errors
123
+ if (code.includes('def ') && !code.includes(':'))
124
+ return 'Missing colon after def';
125
+ return null;
126
+ case 'shell':
127
+ return null; // Shell is hard to validate statically
128
+ default:
129
+ return `Unsupported language: ${language}`;
130
+ }
131
+ }
132
+ catch (e) {
133
+ return e.message;
134
+ }
135
+ }
136
+ // ── Docker Execution ──────────────────────────────────
137
+ async executeInDocker(id, request, timeoutMs) {
138
+ const { code, language, memoryMb } = request;
139
+ const memory = memoryMb ?? this.config.defaultMemoryMb;
140
+ const startTime = Date.now();
141
+ // Determine Docker image and command
142
+ const { image, cmd, ext } = this.getDockerConfig(language);
143
+ // Write code to temp file
144
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'brain-sandbox-'));
145
+ const codeFile = path.join(tmpDir, `code${ext}`);
146
+ fs.writeFileSync(codeFile, code, 'utf-8');
147
+ try {
148
+ const dockerArgs = [
149
+ 'run', '--rm',
150
+ '--memory', `${memory}m`,
151
+ '--cpus', '1',
152
+ '--network', 'none',
153
+ '--read-only',
154
+ '-v', `${tmpDir}:/sandbox:ro`,
155
+ '-w', '/sandbox',
156
+ image,
157
+ ...cmd,
158
+ ];
159
+ const { stdout, stderr, exitCode, timedOut } = await this.runProcess('docker', dockerArgs, timeoutMs);
160
+ return {
161
+ id,
162
+ language,
163
+ stdout,
164
+ stderr,
165
+ exitCode,
166
+ durationMs: Date.now() - startTime,
167
+ timedOut,
168
+ name: request.name,
169
+ createdAt: Date.now(),
170
+ };
171
+ }
172
+ finally {
173
+ // Cleanup temp files
174
+ try {
175
+ fs.rmSync(tmpDir, { recursive: true, force: true });
176
+ }
177
+ catch { /* ignore */ }
178
+ }
179
+ }
180
+ // ── Local Execution ───────────────────────────────────
181
+ async executeLocal(id, request, timeoutMs) {
182
+ const { code, language } = request;
183
+ const startTime = Date.now();
184
+ // Write code to temp file
185
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'brain-sandbox-'));
186
+ const { ext, localCmd } = this.getLocalConfig(language);
187
+ const codeFile = path.join(tmpDir, `code${ext}`);
188
+ fs.writeFileSync(codeFile, code, 'utf-8');
189
+ try {
190
+ const cmd = localCmd(codeFile);
191
+ const { stdout, stderr, exitCode, timedOut } = await this.runProcess(cmd[0], cmd.slice(1), timeoutMs);
192
+ return {
193
+ id,
194
+ language,
195
+ stdout,
196
+ stderr,
197
+ exitCode,
198
+ durationMs: Date.now() - startTime,
199
+ timedOut,
200
+ name: request.name,
201
+ createdAt: Date.now(),
202
+ };
203
+ }
204
+ finally {
205
+ try {
206
+ fs.rmSync(tmpDir, { recursive: true, force: true });
207
+ }
208
+ catch { /* ignore */ }
209
+ }
210
+ }
211
+ // ── Process Runner ────────────────────────────────────
212
+ runProcess(cmd, args, timeoutMs) {
213
+ return new Promise((resolve) => {
214
+ let timedOut = false;
215
+ let child;
216
+ try {
217
+ child = execFile(cmd, args, {
218
+ timeout: timeoutMs,
219
+ maxBuffer: this.config.maxOutputSize,
220
+ windowsHide: true,
221
+ }, (error, stdout, stderr) => {
222
+ if (error && 'killed' in error && error.killed) {
223
+ timedOut = true;
224
+ }
225
+ resolve({
226
+ stdout: stdout ?? '',
227
+ stderr: stderr ?? '',
228
+ exitCode: error ? (typeof error.code === 'number' ? error.code : 1) : 0,
229
+ timedOut,
230
+ });
231
+ });
232
+ }
233
+ catch (e) {
234
+ resolve({
235
+ stdout: '',
236
+ stderr: e.message,
237
+ exitCode: 127, // command not found
238
+ timedOut: false,
239
+ });
240
+ }
241
+ });
242
+ }
243
+ // ── Language Config ───────────────────────────────────
244
+ getDockerConfig(language) {
245
+ switch (language) {
246
+ case 'typescript':
247
+ return { image: 'node:20-alpine', cmd: ['npx', '--yes', 'tsx', '/sandbox/code.ts'], ext: '.ts' };
248
+ case 'javascript':
249
+ return { image: 'node:20-alpine', cmd: ['node', '/sandbox/code.js'], ext: '.js' };
250
+ case 'python':
251
+ return { image: 'python:3.12-alpine', cmd: ['python', '/sandbox/code.py'], ext: '.py' };
252
+ case 'shell':
253
+ return { image: 'alpine:3.19', cmd: ['sh', '/sandbox/code.sh'], ext: '.sh' };
254
+ default:
255
+ throw new Error(`Unsupported language: ${language}`);
256
+ }
257
+ }
258
+ getLocalConfig(language) {
259
+ switch (language) {
260
+ case 'typescript':
261
+ return { ext: '.ts', localCmd: (f) => ['npx', '--yes', 'tsx', f] };
262
+ case 'javascript':
263
+ return { ext: '.js', localCmd: (f) => ['node', f] };
264
+ case 'python':
265
+ return { ext: '.py', localCmd: (f) => ['python', f] };
266
+ case 'shell':
267
+ return { ext: '.sh', localCmd: (f) => ['sh', f] };
268
+ default:
269
+ throw new Error(`Unsupported language: ${language}`);
270
+ }
271
+ }
272
+ // ── Docker Detection ──────────────────────────────────
273
+ /** Check if Docker is available on this system. */
274
+ async isDockerAvailable() {
275
+ if (this.dockerAvailable !== null)
276
+ return this.dockerAvailable;
277
+ try {
278
+ const { exitCode } = await this.runProcess('docker', ['info'], 5000);
279
+ this.dockerAvailable = exitCode === 0;
280
+ }
281
+ catch {
282
+ this.dockerAvailable = false;
283
+ }
284
+ return this.dockerAvailable;
285
+ }
286
+ /** Reset Docker availability cache. */
287
+ resetDockerCache() {
288
+ this.dockerAvailable = null;
289
+ }
290
+ // ── History ──────────────────────────────────────────
291
+ /** Get recent execution history. */
292
+ getHistory(limit = 50) {
293
+ return this.db.prepare('SELECT id, language, exit_code as exitCode, duration_ms as durationMs, timed_out as timedOut, name, error, created_at as createdAt FROM sandbox_executions ORDER BY created_at DESC LIMIT ?').all(limit).map(r => ({
294
+ ...r,
295
+ timedOut: !!r.timedOut,
296
+ }));
297
+ }
298
+ /** Get execution stats by language. */
299
+ getLanguageStats() {
300
+ try {
301
+ return this.db.prepare(`
302
+ SELECT language,
303
+ COUNT(*) as total,
304
+ ROUND(AVG(duration_ms)) as avgDuration,
305
+ ROUND(CAST(SUM(CASE WHEN exit_code = 0 THEN 1 ELSE 0 END) AS REAL) / COUNT(*), 3) as successRate
306
+ FROM sandbox_executions
307
+ GROUP BY language
308
+ ORDER BY total DESC
309
+ `).all();
310
+ }
311
+ catch {
312
+ return [];
313
+ }
314
+ }
315
+ // ── Status ──────────────────────────────────────────
316
+ getStatus() {
317
+ try {
318
+ const total = this.db.prepare('SELECT COUNT(*) as c FROM sandbox_executions').get().c;
319
+ const success = this.db.prepare('SELECT COUNT(*) as c FROM sandbox_executions WHERE exit_code = 0').get().c;
320
+ const timeouts = this.db.prepare('SELECT COUNT(*) as c FROM sandbox_executions WHERE timed_out = 1').get().c;
321
+ const avgDuration = this.db.prepare('SELECT COALESCE(AVG(duration_ms), 0) as v FROM sandbox_executions').get().v;
322
+ const languages = this.db.prepare('SELECT DISTINCT language FROM sandbox_executions').all().map(r => r.language);
323
+ return {
324
+ totalExecutions: total,
325
+ successCount: success,
326
+ failCount: total - success - timeouts,
327
+ timeoutCount: timeouts,
328
+ avgDurationMs: Math.round(avgDuration),
329
+ dockerAvailable: this.dockerAvailable ?? false,
330
+ languages,
331
+ };
332
+ }
333
+ catch {
334
+ return { totalExecutions: 0, successCount: 0, failCount: 0, timeoutCount: 0, avgDurationMs: 0, dockerAvailable: false, languages: [] };
335
+ }
336
+ }
337
+ // ── Private Helpers ───────────────────────────────────
338
+ truncate(str) {
339
+ return str.length > this.config.maxOutputSize
340
+ ? str.slice(0, this.config.maxOutputSize) + '\n... [truncated]'
341
+ : str;
342
+ }
343
+ persistResult(result) {
344
+ try {
345
+ this.stmtInsert.run(result.id, result.language, result.exitCode, result.durationMs, result.timedOut ? 1 : 0, result.name ?? null, result.stdout.slice(0, 500), // preview only
346
+ result.error ?? null);
347
+ }
348
+ catch (e) {
349
+ this.log.warn(`[CodeSandbox] Failed to persist: ${e.message}`);
350
+ }
351
+ }
352
+ }
353
+ //# sourceMappingURL=code-sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-sandbox.js","sourceRoot":"","sources":["../../src/sandbox/code-sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { CodeSandbox, runSandboxMigration } from './code-sandbox.js';
2
+ export type { SandboxLanguage, ExecutionRequest, ExecutionResult, CodeSandboxConfig, CodeSandboxStatus, } from './code-sandbox.js';
@@ -0,0 +1,2 @@
1
+ export { CodeSandbox, runSandboxMigration } from './code-sandbox.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmeck/brain-core",
3
- "version": "2.36.42",
3
+ "version": "2.36.44",
4
4
  "description": "Shared core infrastructure for the Brain ecosystem — IPC, MCP, CLI, DB connection, and utilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",