@timmeck/brain-core 2.36.12 → 2.36.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/cross-brain/__tests__/borg-sync-engine.test.d.ts +1 -0
  2. package/dist/cross-brain/__tests__/borg-sync-engine.test.js +240 -0
  3. package/dist/cross-brain/__tests__/borg-sync-engine.test.js.map +1 -0
  4. package/dist/cross-brain/borg-sync-engine.d.ts +62 -0
  5. package/dist/cross-brain/borg-sync-engine.js +215 -0
  6. package/dist/cross-brain/borg-sync-engine.js.map +1 -0
  7. package/dist/cross-brain/borg-types.d.ts +37 -0
  8. package/dist/cross-brain/borg-types.js +9 -0
  9. package/dist/cross-brain/borg-types.js.map +1 -0
  10. package/dist/embeddings/engine.js +2 -1
  11. package/dist/embeddings/engine.js.map +1 -1
  12. package/dist/index.d.ts +18 -1
  13. package/dist/index.js +14 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/llm/__tests__/anthropic-provider.test.d.ts +1 -0
  16. package/dist/llm/__tests__/anthropic-provider.test.js +121 -0
  17. package/dist/llm/__tests__/anthropic-provider.test.js.map +1 -0
  18. package/dist/llm/__tests__/llm-service.test.js +181 -40
  19. package/dist/llm/__tests__/llm-service.test.js.map +1 -1
  20. package/dist/llm/__tests__/ollama-embedding.test.d.ts +1 -0
  21. package/dist/llm/__tests__/ollama-embedding.test.js +128 -0
  22. package/dist/llm/__tests__/ollama-embedding.test.js.map +1 -0
  23. package/dist/llm/__tests__/ollama-provider.test.d.ts +1 -0
  24. package/dist/llm/__tests__/ollama-provider.test.js +213 -0
  25. package/dist/llm/__tests__/ollama-provider.test.js.map +1 -0
  26. package/dist/llm/__tests__/provider.test.d.ts +1 -0
  27. package/dist/llm/__tests__/provider.test.js +126 -0
  28. package/dist/llm/__tests__/provider.test.js.map +1 -0
  29. package/dist/llm/anthropic-provider.d.ts +41 -0
  30. package/dist/llm/anthropic-provider.js +86 -0
  31. package/dist/llm/anthropic-provider.js.map +1 -0
  32. package/dist/llm/index.d.ts +9 -1
  33. package/dist/llm/index.js +4 -0
  34. package/dist/llm/index.js.map +1 -1
  35. package/dist/llm/llm-service.d.ts +55 -7
  36. package/dist/llm/llm-service.js +184 -82
  37. package/dist/llm/llm-service.js.map +1 -1
  38. package/dist/llm/ollama-embedding.d.ts +46 -0
  39. package/dist/llm/ollama-embedding.js +93 -0
  40. package/dist/llm/ollama-embedding.js.map +1 -0
  41. package/dist/llm/ollama-provider.d.ts +80 -0
  42. package/dist/llm/ollama-provider.js +178 -0
  43. package/dist/llm/ollama-provider.js.map +1 -0
  44. package/dist/llm/provider.d.ts +120 -0
  45. package/dist/llm/provider.js +104 -0
  46. package/dist/llm/provider.js.map +1 -0
  47. package/dist/missions/mission-engine.d.ts +4 -0
  48. package/dist/missions/mission-engine.js +30 -8
  49. package/dist/missions/mission-engine.js.map +1 -1
  50. package/dist/notifications/__tests__/notification-service.test.d.ts +1 -0
  51. package/dist/notifications/__tests__/notification-service.test.js +176 -0
  52. package/dist/notifications/__tests__/notification-service.test.js.map +1 -0
  53. package/dist/notifications/discord-provider.d.ts +30 -0
  54. package/dist/notifications/discord-provider.js +89 -0
  55. package/dist/notifications/discord-provider.js.map +1 -0
  56. package/dist/notifications/email-provider.d.ts +41 -0
  57. package/dist/notifications/email-provider.js +101 -0
  58. package/dist/notifications/email-provider.js.map +1 -0
  59. package/dist/notifications/index.d.ts +8 -0
  60. package/dist/notifications/index.js +5 -0
  61. package/dist/notifications/index.js.map +1 -0
  62. package/dist/notifications/notification-provider.d.ts +75 -0
  63. package/dist/notifications/notification-provider.js +47 -0
  64. package/dist/notifications/notification-provider.js.map +1 -0
  65. package/dist/notifications/notification-service.d.ts +85 -0
  66. package/dist/notifications/notification-service.js +184 -0
  67. package/dist/notifications/notification-service.js.map +1 -0
  68. package/dist/notifications/telegram-provider.d.ts +30 -0
  69. package/dist/notifications/telegram-provider.js +78 -0
  70. package/dist/notifications/telegram-provider.js.map +1 -0
  71. package/dist/plugin/__tests__/plugin-registry.test.d.ts +1 -0
  72. package/dist/plugin/__tests__/plugin-registry.test.js +166 -0
  73. package/dist/plugin/__tests__/plugin-registry.test.js.map +1 -0
  74. package/dist/plugin/plugin-registry.d.ts +38 -0
  75. package/dist/plugin/plugin-registry.js +185 -0
  76. package/dist/plugin/plugin-registry.js.map +1 -0
  77. package/dist/plugin/types.d.ts +59 -0
  78. package/dist/plugin/types.js +2 -0
  79. package/dist/plugin/types.js.map +1 -0
  80. package/dist/research/adapters/__tests__/web-adapters.test.d.ts +1 -0
  81. package/dist/research/adapters/__tests__/web-adapters.test.js +106 -0
  82. package/dist/research/adapters/__tests__/web-adapters.test.js.map +1 -0
  83. package/dist/research/adapters/firecrawl-adapter.d.ts +57 -0
  84. package/dist/research/adapters/firecrawl-adapter.js +137 -0
  85. package/dist/research/adapters/firecrawl-adapter.js.map +1 -0
  86. package/dist/research/adapters/index.d.ts +3 -0
  87. package/dist/research/adapters/index.js +2 -0
  88. package/dist/research/adapters/index.js.map +1 -1
  89. package/dist/research/adapters/playwright-adapter.d.ts +54 -0
  90. package/dist/research/adapters/playwright-adapter.js +130 -0
  91. package/dist/research/adapters/playwright-adapter.js.map +1 -0
  92. package/dist/research/research-orchestrator.d.ts +3 -0
  93. package/dist/research/research-orchestrator.js +19 -1
  94. package/dist/research/research-orchestrator.js.map +1 -1
  95. package/dist/techradar/__tests__/techradar-engine.test.d.ts +1 -0
  96. package/dist/techradar/__tests__/techradar-engine.test.js +246 -0
  97. package/dist/techradar/__tests__/techradar-engine.test.js.map +1 -0
  98. package/dist/techradar/daily-digest.d.ts +18 -0
  99. package/dist/techradar/daily-digest.js +100 -0
  100. package/dist/techradar/daily-digest.js.map +1 -0
  101. package/dist/techradar/index.d.ts +5 -0
  102. package/dist/techradar/index.js +5 -0
  103. package/dist/techradar/index.js.map +1 -0
  104. package/dist/techradar/relevance-scorer.d.ts +29 -0
  105. package/dist/techradar/relevance-scorer.js +139 -0
  106. package/dist/techradar/relevance-scorer.js.map +1 -0
  107. package/dist/techradar/repo-watcher.d.ts +24 -0
  108. package/dist/techradar/repo-watcher.js +87 -0
  109. package/dist/techradar/repo-watcher.js.map +1 -0
  110. package/dist/techradar/techradar-engine.d.ts +69 -0
  111. package/dist/techradar/techradar-engine.js +382 -0
  112. package/dist/techradar/techradar-engine.js.map +1 -0
  113. package/dist/techradar/types.d.ts +87 -0
  114. package/dist/techradar/types.js +5 -0
  115. package/dist/techradar/types.js.map +1 -0
  116. package/dist/watchdog/__tests__/watchdog-service.test.d.ts +1 -0
  117. package/dist/watchdog/__tests__/watchdog-service.test.js +113 -0
  118. package/dist/watchdog/__tests__/watchdog-service.test.js.map +1 -0
  119. package/dist/watchdog/watchdog-service.d.ts +60 -0
  120. package/dist/watchdog/watchdog-service.js +275 -0
  121. package/dist/watchdog/watchdog-service.js.map +1 -0
  122. package/dist/watchdog/windows-service.d.ts +39 -0
  123. package/dist/watchdog/windows-service.js +179 -0
  124. package/dist/watchdog/windows-service.js.map +1 -0
  125. package/package.json +20 -2
@@ -0,0 +1,179 @@
1
+ import { execSync } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { getLogger } from '../utils/logger.js';
5
+ /**
6
+ * WindowsServiceManager — installs/manages Brain daemons as Windows services.
7
+ * Uses NSSM (Non-Sucking Service Manager) or SC.exe for service management.
8
+ * Optional: only works on Windows, graceful no-op on other platforms.
9
+ */
10
+ export class WindowsServiceManager {
11
+ logger = getLogger();
12
+ nssmPath = null;
13
+ constructor() {
14
+ if (process.platform === 'win32') {
15
+ this.nssmPath = this.findNssm();
16
+ }
17
+ }
18
+ /** Check if we're on Windows and can manage services. */
19
+ isAvailable() {
20
+ return process.platform === 'win32';
21
+ }
22
+ /** Install a Brain daemon as a Windows service. */
23
+ install(config) {
24
+ if (!this.isAvailable()) {
25
+ this.logger.warn('Windows service management only available on Windows');
26
+ return false;
27
+ }
28
+ const serviceName = `BrainEcosystem_${config.name}`;
29
+ // Create a wrapper script that node can execute
30
+ const wrapperPath = this.createWrapperScript(config);
31
+ try {
32
+ if (this.nssmPath) {
33
+ // NSSM approach (preferred — proper service lifecycle)
34
+ execSync(`"${this.nssmPath}" install "${serviceName}" "${process.execPath}" "${wrapperPath}"`, { stdio: 'pipe' });
35
+ execSync(`"${this.nssmPath}" set "${serviceName}" DisplayName "${config.displayName}"`, { stdio: 'pipe' });
36
+ execSync(`"${this.nssmPath}" set "${serviceName}" Description "${config.description}"`, { stdio: 'pipe' });
37
+ execSync(`"${this.nssmPath}" set "${serviceName}" AppStdout "${this.getLogPath(config.name)}"`, { stdio: 'pipe' });
38
+ execSync(`"${this.nssmPath}" set "${serviceName}" AppStderr "${this.getLogPath(config.name)}"`, { stdio: 'pipe' });
39
+ execSync(`"${this.nssmPath}" set "${serviceName}" Start SERVICE_AUTO_START`, { stdio: 'pipe' });
40
+ }
41
+ else {
42
+ // SC.exe fallback
43
+ const binPath = `"${process.execPath}" "${wrapperPath}"`;
44
+ execSync(`sc create "${serviceName}" binPath= ${binPath} DisplayName= "${config.displayName}" start= auto`, { stdio: 'pipe' });
45
+ execSync(`sc description "${serviceName}" "${config.description}"`, { stdio: 'pipe' });
46
+ }
47
+ this.logger.info(`Service ${serviceName} installed`);
48
+ return true;
49
+ }
50
+ catch (err) {
51
+ this.logger.error(`Failed to install service: ${err.message}`);
52
+ return false;
53
+ }
54
+ }
55
+ /** Uninstall a Brain service. */
56
+ uninstall(name) {
57
+ if (!this.isAvailable())
58
+ return false;
59
+ const serviceName = `BrainEcosystem_${name}`;
60
+ try {
61
+ this.stopService(name);
62
+ if (this.nssmPath) {
63
+ execSync(`"${this.nssmPath}" remove "${serviceName}" confirm`, { stdio: 'pipe' });
64
+ }
65
+ else {
66
+ execSync(`sc delete "${serviceName}"`, { stdio: 'pipe' });
67
+ }
68
+ this.logger.info(`Service ${serviceName} uninstalled`);
69
+ return true;
70
+ }
71
+ catch (err) {
72
+ this.logger.error(`Failed to uninstall service: ${err.message}`);
73
+ return false;
74
+ }
75
+ }
76
+ /** Start a service. */
77
+ startService(name) {
78
+ if (!this.isAvailable())
79
+ return false;
80
+ const serviceName = `BrainEcosystem_${name}`;
81
+ try {
82
+ execSync(`sc start "${serviceName}"`, { stdio: 'pipe' });
83
+ return true;
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ }
89
+ /** Stop a service. */
90
+ stopService(name) {
91
+ if (!this.isAvailable())
92
+ return false;
93
+ const serviceName = `BrainEcosystem_${name}`;
94
+ try {
95
+ execSync(`sc stop "${serviceName}"`, { stdio: 'pipe' });
96
+ return true;
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ }
102
+ /** Query service status. */
103
+ queryStatus(name) {
104
+ const serviceName = `BrainEcosystem_${name}`;
105
+ const result = { name, installed: false, state: 'unknown' };
106
+ if (!this.isAvailable())
107
+ return result;
108
+ try {
109
+ const output = execSync(`sc query "${serviceName}"`, { stdio: 'pipe', encoding: 'utf-8' });
110
+ result.installed = true;
111
+ if (output.includes('RUNNING'))
112
+ result.state = 'running';
113
+ else if (output.includes('STOPPED'))
114
+ result.state = 'stopped';
115
+ else if (output.includes('PENDING'))
116
+ result.state = 'pending';
117
+ }
118
+ catch {
119
+ result.installed = false;
120
+ result.state = 'unknown';
121
+ }
122
+ return result;
123
+ }
124
+ /** Query status of all Brain services. */
125
+ queryAll() {
126
+ return ['brain', 'trading-brain', 'marketing-brain'].map(name => this.queryStatus(name));
127
+ }
128
+ findNssm() {
129
+ try {
130
+ execSync('nssm version', { stdio: 'pipe' });
131
+ return 'nssm';
132
+ }
133
+ catch {
134
+ // Check common install locations
135
+ const paths = [
136
+ 'C:\\nssm\\nssm.exe',
137
+ 'C:\\tools\\nssm\\nssm.exe',
138
+ path.join(process.env['PROGRAMFILES'] ?? '', 'nssm', 'nssm.exe'),
139
+ ];
140
+ for (const p of paths) {
141
+ if (fs.existsSync(p))
142
+ return p;
143
+ }
144
+ return null;
145
+ }
146
+ }
147
+ createWrapperScript(config) {
148
+ const homeDir = process.env['USERPROFILE'] ?? process.env['HOME'] ?? '';
149
+ const wrapperDir = path.join(homeDir, '.brain', 'services');
150
+ fs.mkdirSync(wrapperDir, { recursive: true });
151
+ const wrapperPath = path.join(wrapperDir, `${config.name}-service.js`);
152
+ const content = `
153
+ // Auto-generated Windows service wrapper for ${config.name}
154
+ const { spawn } = require('child_process');
155
+ const path = require('path');
156
+
157
+ const child = spawn(process.execPath, ${JSON.stringify([config.entryPoint, ...config.args])}, {
158
+ stdio: 'inherit',
159
+ cwd: path.dirname(${JSON.stringify(config.entryPoint)}),
160
+ });
161
+
162
+ child.on('exit', (code) => {
163
+ process.exit(code ?? 0);
164
+ });
165
+
166
+ process.on('SIGTERM', () => child.kill('SIGTERM'));
167
+ process.on('SIGINT', () => child.kill('SIGINT'));
168
+ `;
169
+ fs.writeFileSync(wrapperPath, content, 'utf-8');
170
+ return wrapperPath;
171
+ }
172
+ getLogPath(name) {
173
+ const homeDir = process.env['USERPROFILE'] ?? process.env['HOME'] ?? '';
174
+ const logDir = path.join(homeDir, '.brain', 'services', 'logs');
175
+ fs.mkdirSync(logDir, { recursive: true });
176
+ return path.join(logDir, `${name}-service.log`);
177
+ }
178
+ }
179
+ //# sourceMappingURL=windows-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-service.js","sourceRoot":"","sources":["../../src/watchdog/windows-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmeck/brain-core",
3
- "version": "2.36.12",
3
+ "version": "2.36.14",
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",
@@ -83,22 +83,40 @@
83
83
  "directory": "packages/brain-core"
84
84
  },
85
85
  "peerDependencies": {
86
- "@huggingface/transformers": "^3.0.0"
86
+ "@huggingface/transformers": "^3.0.0",
87
+ "discord.js": "^14.0.0",
88
+ "grammy": "^1.0.0",
89
+ "nodemailer": "^6.0.0 || ^7.0.0 || ^8.0.0",
90
+ "playwright": "^1.40.0"
87
91
  },
88
92
  "peerDependenciesMeta": {
89
93
  "@huggingface/transformers": {
90
94
  "optional": true
95
+ },
96
+ "discord.js": {
97
+ "optional": true
98
+ },
99
+ "grammy": {
100
+ "optional": true
101
+ },
102
+ "nodemailer": {
103
+ "optional": true
104
+ },
105
+ "playwright": {
106
+ "optional": true
91
107
  }
92
108
  },
93
109
  "dependencies": {
94
110
  "@modelcontextprotocol/sdk": "^1.0.0",
95
111
  "better-sqlite3": "^11.7.0",
96
112
  "chalk": "^5.6.2",
113
+ "ollama": "^0.6.3",
97
114
  "winston": "^3.17.0"
98
115
  },
99
116
  "devDependencies": {
100
117
  "@types/better-sqlite3": "^7.6.12",
101
118
  "@types/node": "^22.0.0",
119
+ "@types/nodemailer": "^7.0.11",
102
120
  "@vitest/coverage-v8": "^3.2.4",
103
121
  "eslint": "^9.39.3",
104
122
  "tsx": "^4.19.0",