@timmeck/trading-brain 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/README.md +306 -0
  2. package/dist/api/server.d.ts +21 -0
  3. package/dist/api/server.js +157 -0
  4. package/dist/api/server.js.map +1 -0
  5. package/dist/cli/colors.d.ts +46 -0
  6. package/dist/cli/colors.js +70 -0
  7. package/dist/cli/colors.js.map +1 -0
  8. package/dist/cli/commands/config.d.ts +2 -0
  9. package/dist/cli/commands/config.js +70 -0
  10. package/dist/cli/commands/config.js.map +1 -0
  11. package/dist/cli/commands/doctor.d.ts +2 -0
  12. package/dist/cli/commands/doctor.js +61 -0
  13. package/dist/cli/commands/doctor.js.map +1 -0
  14. package/dist/cli/commands/export.d.ts +2 -0
  15. package/dist/cli/commands/export.js +23 -0
  16. package/dist/cli/commands/export.js.map +1 -0
  17. package/dist/cli/commands/import.d.ts +2 -0
  18. package/dist/cli/commands/import.js +42 -0
  19. package/dist/cli/commands/import.js.map +1 -0
  20. package/dist/cli/commands/insights.d.ts +2 -0
  21. package/dist/cli/commands/insights.js +29 -0
  22. package/dist/cli/commands/insights.js.map +1 -0
  23. package/dist/cli/commands/network.d.ts +2 -0
  24. package/dist/cli/commands/network.js +43 -0
  25. package/dist/cli/commands/network.js.map +1 -0
  26. package/dist/cli/commands/query.d.ts +2 -0
  27. package/dist/cli/commands/query.js +27 -0
  28. package/dist/cli/commands/query.js.map +1 -0
  29. package/dist/cli/commands/rules.d.ts +2 -0
  30. package/dist/cli/commands/rules.js +26 -0
  31. package/dist/cli/commands/rules.js.map +1 -0
  32. package/dist/cli/commands/start.d.ts +2 -0
  33. package/dist/cli/commands/start.js +86 -0
  34. package/dist/cli/commands/start.js.map +1 -0
  35. package/dist/cli/commands/status.d.ts +2 -0
  36. package/dist/cli/commands/status.js +58 -0
  37. package/dist/cli/commands/status.js.map +1 -0
  38. package/dist/cli/commands/stop.d.ts +2 -0
  39. package/dist/cli/commands/stop.js +34 -0
  40. package/dist/cli/commands/stop.js.map +1 -0
  41. package/dist/cli/ipc-helper.d.ts +2 -0
  42. package/dist/cli/ipc-helper.js +26 -0
  43. package/dist/cli/ipc-helper.js.map +1 -0
  44. package/dist/config.d.ts +2 -0
  45. package/dist/config.js +107 -0
  46. package/dist/config.js.map +1 -0
  47. package/dist/db/connection.d.ts +2 -0
  48. package/dist/db/connection.js +19 -0
  49. package/dist/db/connection.js.map +1 -0
  50. package/dist/db/migrations/001_core.d.ts +2 -0
  51. package/dist/db/migrations/001_core.js +42 -0
  52. package/dist/db/migrations/001_core.js.map +1 -0
  53. package/dist/db/migrations/002_synapses.d.ts +2 -0
  54. package/dist/db/migrations/002_synapses.js +43 -0
  55. package/dist/db/migrations/002_synapses.js.map +1 -0
  56. package/dist/db/migrations/003_learning.d.ts +2 -0
  57. package/dist/db/migrations/003_learning.js +48 -0
  58. package/dist/db/migrations/003_learning.js.map +1 -0
  59. package/dist/db/migrations/004_research.d.ts +2 -0
  60. package/dist/db/migrations/004_research.js +29 -0
  61. package/dist/db/migrations/004_research.js.map +1 -0
  62. package/dist/db/migrations/index.d.ts +2 -0
  63. package/dist/db/migrations/index.js +45 -0
  64. package/dist/db/migrations/index.js.map +1 -0
  65. package/dist/db/repositories/calibration.repository.d.ts +25 -0
  66. package/dist/db/repositories/calibration.repository.js +66 -0
  67. package/dist/db/repositories/calibration.repository.js.map +1 -0
  68. package/dist/db/repositories/chain.repository.d.ts +28 -0
  69. package/dist/db/repositories/chain.repository.js +52 -0
  70. package/dist/db/repositories/chain.repository.js.map +1 -0
  71. package/dist/db/repositories/graph.repository.d.ts +33 -0
  72. package/dist/db/repositories/graph.repository.js +73 -0
  73. package/dist/db/repositories/graph.repository.js.map +1 -0
  74. package/dist/db/repositories/insight.repository.d.ts +30 -0
  75. package/dist/db/repositories/insight.repository.js +60 -0
  76. package/dist/db/repositories/insight.repository.js.map +1 -0
  77. package/dist/db/repositories/rule.repository.d.ts +35 -0
  78. package/dist/db/repositories/rule.repository.js +48 -0
  79. package/dist/db/repositories/rule.repository.js.map +1 -0
  80. package/dist/db/repositories/signal.repository.d.ts +17 -0
  81. package/dist/db/repositories/signal.repository.js +35 -0
  82. package/dist/db/repositories/signal.repository.js.map +1 -0
  83. package/dist/db/repositories/synapse.repository.d.ts +25 -0
  84. package/dist/db/repositories/synapse.repository.js +50 -0
  85. package/dist/db/repositories/synapse.repository.js.map +1 -0
  86. package/dist/db/repositories/trade.repository.d.ts +36 -0
  87. package/dist/db/repositories/trade.repository.js +64 -0
  88. package/dist/db/repositories/trade.repository.js.map +1 -0
  89. package/dist/graph/weighted-graph.d.ts +58 -0
  90. package/dist/graph/weighted-graph.js +149 -0
  91. package/dist/graph/weighted-graph.js.map +1 -0
  92. package/dist/index.d.ts +2 -0
  93. package/dist/index.js +49 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/ipc/client.d.ts +16 -0
  96. package/dist/ipc/client.js +95 -0
  97. package/dist/ipc/client.js.map +1 -0
  98. package/dist/ipc/protocol.d.ts +8 -0
  99. package/dist/ipc/protocol.js +29 -0
  100. package/dist/ipc/protocol.js.map +1 -0
  101. package/dist/ipc/router.d.ts +32 -0
  102. package/dist/ipc/router.js +70 -0
  103. package/dist/ipc/router.js.map +1 -0
  104. package/dist/ipc/server.d.ts +18 -0
  105. package/dist/ipc/server.js +142 -0
  106. package/dist/ipc/server.js.map +1 -0
  107. package/dist/learning/calibrator.d.ts +6 -0
  108. package/dist/learning/calibrator.js +57 -0
  109. package/dist/learning/calibrator.js.map +1 -0
  110. package/dist/learning/chain-detector.d.ts +17 -0
  111. package/dist/learning/chain-detector.js +29 -0
  112. package/dist/learning/chain-detector.js.map +1 -0
  113. package/dist/learning/learning-engine.d.ts +31 -0
  114. package/dist/learning/learning-engine.js +85 -0
  115. package/dist/learning/learning-engine.js.map +1 -0
  116. package/dist/learning/pattern-extractor.d.ts +14 -0
  117. package/dist/learning/pattern-extractor.js +40 -0
  118. package/dist/learning/pattern-extractor.js.map +1 -0
  119. package/dist/mcp/http-server.d.ts +14 -0
  120. package/dist/mcp/http-server.js +117 -0
  121. package/dist/mcp/http-server.js.map +1 -0
  122. package/dist/mcp/server.d.ts +1 -0
  123. package/dist/mcp/server.js +67 -0
  124. package/dist/mcp/server.js.map +1 -0
  125. package/dist/mcp/tools.d.ts +7 -0
  126. package/dist/mcp/tools.js +158 -0
  127. package/dist/mcp/tools.js.map +1 -0
  128. package/dist/research/research-engine.d.ts +21 -0
  129. package/dist/research/research-engine.js +204 -0
  130. package/dist/research/research-engine.js.map +1 -0
  131. package/dist/services/analytics.service.d.ts +16 -0
  132. package/dist/services/analytics.service.js +64 -0
  133. package/dist/services/analytics.service.js.map +1 -0
  134. package/dist/services/insight.service.d.ts +11 -0
  135. package/dist/services/insight.service.js +25 -0
  136. package/dist/services/insight.service.js.map +1 -0
  137. package/dist/services/signal.service.d.ts +22 -0
  138. package/dist/services/signal.service.js +96 -0
  139. package/dist/services/signal.service.js.map +1 -0
  140. package/dist/services/strategy.service.d.ts +29 -0
  141. package/dist/services/strategy.service.js +115 -0
  142. package/dist/services/strategy.service.js.map +1 -0
  143. package/dist/services/synapse.service.d.ts +20 -0
  144. package/dist/services/synapse.service.js +48 -0
  145. package/dist/services/synapse.service.js.map +1 -0
  146. package/dist/services/trade.service.d.ts +37 -0
  147. package/dist/services/trade.service.js +114 -0
  148. package/dist/services/trade.service.js.map +1 -0
  149. package/dist/signals/fingerprint.d.ts +29 -0
  150. package/dist/signals/fingerprint.js +98 -0
  151. package/dist/signals/fingerprint.js.map +1 -0
  152. package/dist/signals/wilson-score.d.ts +10 -0
  153. package/dist/signals/wilson-score.js +19 -0
  154. package/dist/signals/wilson-score.js.map +1 -0
  155. package/dist/synapses/decay.d.ts +6 -0
  156. package/dist/synapses/decay.js +17 -0
  157. package/dist/synapses/decay.js.map +1 -0
  158. package/dist/synapses/hebbian.d.ts +11 -0
  159. package/dist/synapses/hebbian.js +21 -0
  160. package/dist/synapses/hebbian.js.map +1 -0
  161. package/dist/synapses/synapse-manager.d.ts +22 -0
  162. package/dist/synapses/synapse-manager.js +99 -0
  163. package/dist/synapses/synapse-manager.js.map +1 -0
  164. package/dist/trading-core.d.ts +17 -0
  165. package/dist/trading-core.js +235 -0
  166. package/dist/trading-core.js.map +1 -0
  167. package/dist/types/config.types.d.ts +52 -0
  168. package/dist/types/config.types.js +2 -0
  169. package/dist/types/config.types.js.map +1 -0
  170. package/dist/types/ipc.types.d.ts +11 -0
  171. package/dist/types/ipc.types.js +2 -0
  172. package/dist/types/ipc.types.js.map +1 -0
  173. package/dist/utils/events.d.ts +48 -0
  174. package/dist/utils/events.js +23 -0
  175. package/dist/utils/events.js.map +1 -0
  176. package/dist/utils/hash.d.ts +1 -0
  177. package/dist/utils/hash.js +5 -0
  178. package/dist/utils/hash.js.map +1 -0
  179. package/dist/utils/logger.d.ts +8 -0
  180. package/dist/utils/logger.js +39 -0
  181. package/dist/utils/logger.js.map +1 -0
  182. package/dist/utils/paths.d.ts +3 -0
  183. package/dist/utils/paths.js +18 -0
  184. package/dist/utils/paths.js.map +1 -0
  185. package/package.json +47 -0
  186. package/src/api/server.ts +160 -0
  187. package/src/cli/colors.ts +80 -0
  188. package/src/cli/commands/config.ts +76 -0
  189. package/src/cli/commands/doctor.ts +62 -0
  190. package/src/cli/commands/export.ts +24 -0
  191. package/src/cli/commands/import.ts +44 -0
  192. package/src/cli/commands/insights.ts +30 -0
  193. package/src/cli/commands/network.ts +43 -0
  194. package/src/cli/commands/query.ts +28 -0
  195. package/src/cli/commands/rules.ts +27 -0
  196. package/src/cli/commands/start.ts +93 -0
  197. package/src/cli/commands/status.ts +64 -0
  198. package/src/cli/commands/stop.ts +33 -0
  199. package/src/cli/ipc-helper.ts +22 -0
  200. package/src/config.ts +103 -0
  201. package/src/db/connection.ts +22 -0
  202. package/src/db/migrations/001_core.ts +43 -0
  203. package/src/db/migrations/002_synapses.ts +44 -0
  204. package/src/db/migrations/003_learning.ts +49 -0
  205. package/src/db/migrations/004_research.ts +30 -0
  206. package/src/db/migrations/index.ts +60 -0
  207. package/src/db/repositories/calibration.repository.ts +86 -0
  208. package/src/db/repositories/chain.repository.ts +70 -0
  209. package/src/db/repositories/graph.repository.ts +103 -0
  210. package/src/db/repositories/insight.repository.ts +80 -0
  211. package/src/db/repositories/rule.repository.ts +67 -0
  212. package/src/db/repositories/signal.repository.ts +48 -0
  213. package/src/db/repositories/synapse.repository.ts +71 -0
  214. package/src/db/repositories/trade.repository.ts +97 -0
  215. package/src/graph/weighted-graph.ts +194 -0
  216. package/src/index.ts +55 -0
  217. package/src/ipc/client.ts +112 -0
  218. package/src/ipc/protocol.ts +35 -0
  219. package/src/ipc/router.ts +113 -0
  220. package/src/ipc/server.ts +150 -0
  221. package/src/learning/calibrator.ts +57 -0
  222. package/src/learning/chain-detector.ts +43 -0
  223. package/src/learning/learning-engine.ts +94 -0
  224. package/src/learning/pattern-extractor.ts +53 -0
  225. package/src/mcp/http-server.ts +118 -0
  226. package/src/mcp/server.ts +72 -0
  227. package/src/mcp/tools.ts +256 -0
  228. package/src/research/research-engine.ts +223 -0
  229. package/src/services/analytics.service.ts +68 -0
  230. package/src/services/insight.service.ts +29 -0
  231. package/src/services/signal.service.ts +109 -0
  232. package/src/services/strategy.service.ts +130 -0
  233. package/src/services/synapse.service.ts +58 -0
  234. package/src/services/trade.service.ts +139 -0
  235. package/src/signals/fingerprint.ts +93 -0
  236. package/src/signals/wilson-score.ts +17 -0
  237. package/src/synapses/decay.ts +19 -0
  238. package/src/synapses/hebbian.ts +23 -0
  239. package/src/synapses/synapse-manager.ts +112 -0
  240. package/src/trading-core.ts +285 -0
  241. package/src/types/config.types.ts +60 -0
  242. package/src/types/ipc.types.ts +8 -0
  243. package/src/utils/events.ts +42 -0
  244. package/src/utils/hash.ts +5 -0
  245. package/src/utils/logger.ts +48 -0
  246. package/src/utils/paths.ts +19 -0
  247. package/tsconfig.json +18 -0
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Wilson Score lower bound — statistically sound confidence interval for win rates.
3
+ * Penalizes small sample sizes (wide confidence intervals).
4
+ *
5
+ * @param wins - Number of wins
6
+ * @param total - Total number of trades
7
+ * @param z - Z-score (1.64=90%, 1.80, 1.96=95%, 2.33=99%)
8
+ * @returns Lower bound of confidence interval (0-1)
9
+ */
10
+ export declare function wilsonScore(wins: number, total: number, z?: number): number;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Wilson Score lower bound — statistically sound confidence interval for win rates.
3
+ * Penalizes small sample sizes (wide confidence intervals).
4
+ *
5
+ * @param wins - Number of wins
6
+ * @param total - Total number of trades
7
+ * @param z - Z-score (1.64=90%, 1.80, 1.96=95%, 2.33=99%)
8
+ * @returns Lower bound of confidence interval (0-1)
9
+ */
10
+ export function wilsonScore(wins, total, z = 1.96) {
11
+ if (total === 0)
12
+ return 0;
13
+ const p = wins / total;
14
+ const denominator = 1 + (z * z) / total;
15
+ const centre = p + (z * z) / (2 * total);
16
+ const spread = z * Math.sqrt((p * (1 - p) + (z * z) / (4 * total)) / total);
17
+ return Math.max(0, (centre - spread) / denominator);
18
+ }
19
+ //# sourceMappingURL=wilson-score.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wilson-score.js","sourceRoot":"","sources":["../../src/signals/wilson-score.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,IAAI;IACvE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;IACvB,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACxC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SynapseRecord } from '../db/repositories/synapse.repository.js';
2
+ /**
3
+ * Apply temporal decay to a synapse.
4
+ * Formula: new_weight = max(0.01, weight * 0.5^(age/halfLifeMs))
5
+ */
6
+ export declare function decaySynapse(synapse: Omit<SynapseRecord, 'created_at'>, halfLifeMs: number): boolean;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Apply temporal decay to a synapse.
3
+ * Formula: new_weight = max(0.01, weight * 0.5^(age/halfLifeMs))
4
+ */
5
+ export function decaySynapse(synapse, halfLifeMs) {
6
+ const now = Date.now();
7
+ const lastActivated = new Date(synapse.last_activated).getTime();
8
+ const age = now - lastActivated;
9
+ if (age > halfLifeMs) {
10
+ const periods = age / halfLifeMs;
11
+ const oldWeight = synapse.weight;
12
+ synapse.weight = Math.max(0.01, synapse.weight * Math.pow(0.5, periods));
13
+ return synapse.weight !== oldWeight;
14
+ }
15
+ return false;
16
+ }
17
+ //# sourceMappingURL=decay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decay.js","sourceRoot":"","sources":["../../src/synapses/decay.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAA0C,EAAE,UAAkB;IACzF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC;IACjE,MAAM,GAAG,GAAG,GAAG,GAAG,aAAa,CAAC;IAEhC,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,GAAG,GAAG,UAAU,CAAC;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACzE,OAAO,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { SynapseRecord } from '../db/repositories/synapse.repository.js';
2
+ /**
3
+ * Hebbian strengthen — "neurons that fire together wire together"
4
+ * Asymptotic approach to 1.0: weight += (1 - weight) * learningRate
5
+ */
6
+ export declare function strengthen(synapse: Omit<SynapseRecord, 'created_at'>, learningRate: number): void;
7
+ /**
8
+ * Hebbian weaken — multiplicative decay on loss
9
+ * weight *= weakenPenalty (e.g. 0.7)
10
+ */
11
+ export declare function weaken(synapse: Omit<SynapseRecord, 'created_at'>, weakenPenalty: number): void;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Hebbian strengthen — "neurons that fire together wire together"
3
+ * Asymptotic approach to 1.0: weight += (1 - weight) * learningRate
4
+ */
5
+ export function strengthen(synapse, learningRate) {
6
+ synapse.wins++;
7
+ synapse.activations++;
8
+ synapse.weight += (1.0 - synapse.weight) * learningRate;
9
+ synapse.last_activated = new Date().toISOString();
10
+ }
11
+ /**
12
+ * Hebbian weaken — multiplicative decay on loss
13
+ * weight *= weakenPenalty (e.g. 0.7)
14
+ */
15
+ export function weaken(synapse, weakenPenalty) {
16
+ synapse.losses++;
17
+ synapse.activations++;
18
+ synapse.weight *= weakenPenalty;
19
+ synapse.last_activated = new Date().toISOString();
20
+ }
21
+ //# sourceMappingURL=hebbian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hebbian.js","sourceRoot":"","sources":["../../src/synapses/hebbian.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAA0C,EAAE,YAAoB;IACzF,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;IACxD,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,OAA0C,EAAE,aAAqB;IACtF,OAAO,CAAC,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAChC,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpD,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { SynapseRepository, SynapseRecord } from '../db/repositories/synapse.repository.js';
2
+ import type { CalibrationConfig } from '../types/config.types.js';
3
+ export declare class SynapseManager {
4
+ private repo;
5
+ private cal;
6
+ private cache;
7
+ private logger;
8
+ constructor(repo: SynapseRepository, cal: CalibrationConfig);
9
+ private loadCache;
10
+ updateCalibration(cal: CalibrationConfig): void;
11
+ getOrCreate(fingerprint: string): Omit<SynapseRecord, 'created_at'>;
12
+ get(id: string): Omit<SynapseRecord, 'created_at'> | undefined;
13
+ getByFingerprint(fingerprint: string): Omit<SynapseRecord, 'created_at'> | undefined;
14
+ recordWin(fingerprint: string, profitPct: number): Omit<SynapseRecord, 'created_at'>;
15
+ recordLoss(fingerprint: string, profitPct: number): Omit<SynapseRecord, 'created_at'>;
16
+ runDecay(): number;
17
+ getAll(): Omit<SynapseRecord, 'created_at'>[];
18
+ count(): number;
19
+ getStrongest(limit?: number): Omit<SynapseRecord, 'created_at'>[];
20
+ getAvgWeight(): number;
21
+ clear(): void;
22
+ }
@@ -0,0 +1,99 @@
1
+ import { strengthen, weaken } from './hebbian.js';
2
+ import { decaySynapse } from './decay.js';
3
+ import { getLogger } from '../utils/logger.js';
4
+ export class SynapseManager {
5
+ repo;
6
+ cal;
7
+ cache = new Map();
8
+ logger = getLogger();
9
+ constructor(repo, cal) {
10
+ this.repo = repo;
11
+ this.cal = cal;
12
+ this.loadCache();
13
+ }
14
+ loadCache() {
15
+ const all = this.repo.getAll();
16
+ for (const syn of all) {
17
+ this.cache.set(syn.id, syn);
18
+ }
19
+ this.logger.info(`Synapse cache loaded: ${this.cache.size} synapses`);
20
+ }
21
+ updateCalibration(cal) {
22
+ this.cal = cal;
23
+ }
24
+ getOrCreate(fingerprint) {
25
+ const id = `syn_${fingerprint}`;
26
+ let synapse = this.cache.get(id);
27
+ if (!synapse) {
28
+ synapse = {
29
+ id,
30
+ fingerprint,
31
+ weight: 0.5,
32
+ wins: 0,
33
+ losses: 0,
34
+ activations: 0,
35
+ total_profit: 0,
36
+ last_activated: new Date().toISOString(),
37
+ };
38
+ this.cache.set(id, synapse);
39
+ }
40
+ return synapse;
41
+ }
42
+ get(id) {
43
+ return this.cache.get(id);
44
+ }
45
+ getByFingerprint(fingerprint) {
46
+ return this.cache.get(`syn_${fingerprint}`);
47
+ }
48
+ recordWin(fingerprint, profitPct) {
49
+ const synapse = this.getOrCreate(fingerprint);
50
+ synapse.total_profit += profitPct;
51
+ strengthen(synapse, this.cal.learningRate);
52
+ this.repo.upsert(synapse);
53
+ return synapse;
54
+ }
55
+ recordLoss(fingerprint, profitPct) {
56
+ const synapse = this.getOrCreate(fingerprint);
57
+ synapse.total_profit += profitPct;
58
+ weaken(synapse, this.cal.weakenPenalty);
59
+ this.repo.upsert(synapse);
60
+ return synapse;
61
+ }
62
+ runDecay() {
63
+ const halfLifeMs = this.cal.decayHalfLifeDays * 86400000;
64
+ let decayed = 0;
65
+ for (const synapse of this.cache.values()) {
66
+ if (decaySynapse(synapse, halfLifeMs)) {
67
+ this.repo.upsert(synapse);
68
+ decayed++;
69
+ }
70
+ }
71
+ if (decayed > 0) {
72
+ this.logger.info(`Decayed ${decayed} synapses`);
73
+ }
74
+ return decayed;
75
+ }
76
+ getAll() {
77
+ return Array.from(this.cache.values());
78
+ }
79
+ count() {
80
+ return this.cache.size;
81
+ }
82
+ getStrongest(limit = 20) {
83
+ return Array.from(this.cache.values())
84
+ .sort((a, b) => b.weight - a.weight)
85
+ .slice(0, limit);
86
+ }
87
+ getAvgWeight() {
88
+ if (this.cache.size === 0)
89
+ return 0;
90
+ let sum = 0;
91
+ for (const syn of this.cache.values())
92
+ sum += syn.weight;
93
+ return sum / this.cache.size;
94
+ }
95
+ clear() {
96
+ this.cache.clear();
97
+ }
98
+ }
99
+ //# sourceMappingURL=synapse-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synapse-manager.js","sourceRoot":"","sources":["../../src/synapses/synapse-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,OAAO,cAAc;IAKf;IACA;IALF,KAAK,GAAmD,IAAI,GAAG,EAAE,CAAC;IAClE,MAAM,GAAG,SAAS,EAAE,CAAC;IAE7B,YACU,IAAuB,EACvB,GAAsB;QADtB,SAAI,GAAJ,IAAI,CAAmB;QACvB,QAAG,GAAH,GAAG,CAAmB;QAE9B,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEO,SAAS;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,iBAAiB,CAAC,GAAsB;QACtC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,WAAmB;QAC7B,MAAM,EAAE,GAAG,OAAO,WAAW,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG;gBACR,EAAE;gBACF,WAAW;gBACX,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;gBACT,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACzC,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,gBAAgB,CAAC,WAAmB;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,WAAmB,EAAE,SAAiB;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;QAClC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU,CAAC,WAAmB,EAAE,SAAiB;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;QAClC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,QAAQ;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QACzD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;aACnC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;QACzD,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ export declare class TradingCore {
2
+ private db;
3
+ private ipcServer;
4
+ private apiServer;
5
+ private mcpHttpServer;
6
+ private learningEngine;
7
+ private researchEngine;
8
+ private config;
9
+ private configPath?;
10
+ private restarting;
11
+ start(configPath?: string): void;
12
+ private logCrash;
13
+ private cleanup;
14
+ restart(): void;
15
+ stop(): void;
16
+ private setupEventListeners;
17
+ }
@@ -0,0 +1,235 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import { loadConfig } from './config.js';
4
+ import { createLogger, getLogger } from './utils/logger.js';
5
+ import { getEventBus } from './utils/events.js';
6
+ import { createConnection } from './db/connection.js';
7
+ import { runMigrations } from './db/migrations/index.js';
8
+ // Repositories
9
+ import { TradeRepository } from './db/repositories/trade.repository.js';
10
+ import { SignalRepository } from './db/repositories/signal.repository.js';
11
+ import { SynapseRepository } from './db/repositories/synapse.repository.js';
12
+ import { GraphRepository } from './db/repositories/graph.repository.js';
13
+ import { RuleRepository } from './db/repositories/rule.repository.js';
14
+ import { ChainRepository } from './db/repositories/chain.repository.js';
15
+ import { InsightRepository } from './db/repositories/insight.repository.js';
16
+ import { CalibrationRepository } from './db/repositories/calibration.repository.js';
17
+ // Graph
18
+ import { WeightedGraph } from './graph/weighted-graph.js';
19
+ // Synapses
20
+ import { SynapseManager } from './synapses/synapse-manager.js';
21
+ // Services
22
+ import { TradeService } from './services/trade.service.js';
23
+ import { SignalService } from './services/signal.service.js';
24
+ import { StrategyService } from './services/strategy.service.js';
25
+ import { SynapseService } from './services/synapse.service.js';
26
+ import { AnalyticsService } from './services/analytics.service.js';
27
+ import { InsightService } from './services/insight.service.js';
28
+ // Engines
29
+ import { LearningEngine } from './learning/learning-engine.js';
30
+ import { ResearchEngine } from './research/research-engine.js';
31
+ // IPC
32
+ import { IpcRouter } from './ipc/router.js';
33
+ import { IpcServer } from './ipc/server.js';
34
+ // API & MCP HTTP
35
+ import { ApiServer } from './api/server.js';
36
+ import { McpHttpServer } from './mcp/http-server.js';
37
+ export class TradingCore {
38
+ db = null;
39
+ ipcServer = null;
40
+ apiServer = null;
41
+ mcpHttpServer = null;
42
+ learningEngine = null;
43
+ researchEngine = null;
44
+ config = null;
45
+ configPath;
46
+ restarting = false;
47
+ start(configPath) {
48
+ this.configPath = configPath;
49
+ // 1. Config
50
+ this.config = loadConfig(configPath);
51
+ const config = this.config;
52
+ // 2. Ensure data dir
53
+ fs.mkdirSync(path.dirname(config.dbPath), { recursive: true });
54
+ // 3. Logger
55
+ createLogger({
56
+ level: config.log.level,
57
+ file: config.log.file,
58
+ maxSize: config.log.maxSize,
59
+ maxFiles: config.log.maxFiles,
60
+ });
61
+ const logger = getLogger();
62
+ // 4. Database
63
+ this.db = createConnection(config.dbPath);
64
+ runMigrations(this.db);
65
+ logger.info(`Database initialized: ${config.dbPath}`);
66
+ // 5. Repositories
67
+ const tradeRepo = new TradeRepository(this.db);
68
+ const signalRepo = new SignalRepository(this.db);
69
+ const synapseRepo = new SynapseRepository(this.db);
70
+ const graphRepo = new GraphRepository(this.db);
71
+ const ruleRepo = new RuleRepository(this.db);
72
+ const chainRepo = new ChainRepository(this.db);
73
+ const insightRepo = new InsightRepository(this.db);
74
+ const calibrationRepo = new CalibrationRepository(this.db);
75
+ // 6. Synapse Manager
76
+ const synapseManager = new SynapseManager(synapseRepo, config.calibration);
77
+ // 7. Weighted Graph (load from DB)
78
+ const graph = new WeightedGraph();
79
+ const graphNodes = graphRepo.getAllNodes();
80
+ for (const node of graphNodes) {
81
+ graph.addNode(node.id, node.type, node.label);
82
+ }
83
+ const graphEdges = graphRepo.getAllEdges();
84
+ for (const edge of graphEdges) {
85
+ graph.addEdge(edge.source, edge.target, edge.weight);
86
+ }
87
+ logger.info(`Graph loaded: ${graphNodes.length} nodes, ${graphEdges.length} edges`);
88
+ // 8. Calibration (load current or use defaults)
89
+ const cal = calibrationRepo.get() ?? config.calibration;
90
+ const tradeCount = () => tradeRepo.count();
91
+ // 9. Services
92
+ const services = {
93
+ trade: new TradeService(tradeRepo, signalRepo, chainRepo, synapseManager, graph, cal, config.learning),
94
+ signal: new SignalService(synapseManager, graph, cal, tradeCount),
95
+ strategy: new StrategyService(synapseManager, graph, cal, tradeCount),
96
+ synapse: new SynapseService(synapseManager, graph),
97
+ analytics: new AnalyticsService(tradeRepo, ruleRepo, chainRepo, insightRepo, synapseManager, graph),
98
+ insight: new InsightService(insightRepo),
99
+ ruleRepo,
100
+ chainRepo,
101
+ calRepo: calibrationRepo,
102
+ };
103
+ // 10. Learning Engine
104
+ this.learningEngine = new LearningEngine(config.learning, cal, tradeRepo, ruleRepo, chainRepo, calibrationRepo, synapseManager, graph);
105
+ this.learningEngine.start();
106
+ logger.info(`Learning engine started (interval: ${config.learning.intervalMs}ms)`);
107
+ // 11. Research Engine
108
+ this.researchEngine = new ResearchEngine(config.research, tradeRepo, insightRepo);
109
+ this.researchEngine.start();
110
+ logger.info(`Research engine started (interval: ${config.research.intervalMs}ms)`);
111
+ // Expose engines to IPC
112
+ services.learning = this.learningEngine;
113
+ services.research = this.researchEngine;
114
+ // 12. IPC Server
115
+ const router = new IpcRouter(services);
116
+ this.ipcServer = new IpcServer(router, config.ipc.pipeName);
117
+ this.ipcServer.start();
118
+ // 13. REST API Server
119
+ if (config.api.enabled) {
120
+ this.apiServer = new ApiServer({
121
+ port: config.api.port,
122
+ router,
123
+ apiKey: config.api.apiKey,
124
+ });
125
+ this.apiServer.start();
126
+ logger.info(`REST API enabled on port ${config.api.port}`);
127
+ }
128
+ // 14. MCP HTTP Server (SSE transport for Cursor, Windsurf, Cline, Continue)
129
+ if (config.mcpHttp.enabled) {
130
+ this.mcpHttpServer = new McpHttpServer(config.mcpHttp.port, router);
131
+ this.mcpHttpServer.start();
132
+ logger.info(`MCP HTTP (SSE) enabled on port ${config.mcpHttp.port}`);
133
+ }
134
+ // 15. Event listeners (synapse wiring)
135
+ this.setupEventListeners(synapseManager);
136
+ // 16. PID file
137
+ const pidPath = path.join(path.dirname(config.dbPath), 'trading-brain.pid');
138
+ fs.writeFileSync(pidPath, String(process.pid));
139
+ // 17. Graceful shutdown
140
+ process.on('SIGINT', () => this.stop());
141
+ process.on('SIGTERM', () => this.stop());
142
+ // 18. Crash recovery
143
+ process.on('uncaughtException', (err) => {
144
+ logger.error('Uncaught exception — restarting', { error: err.message, stack: err.stack });
145
+ this.logCrash('uncaughtException', err);
146
+ this.restart();
147
+ });
148
+ process.on('unhandledRejection', (reason) => {
149
+ logger.error('Unhandled rejection — restarting', { reason: String(reason) });
150
+ this.logCrash('unhandledRejection', reason instanceof Error ? reason : new Error(String(reason)));
151
+ this.restart();
152
+ });
153
+ logger.info(`Trading Brain daemon started (PID: ${process.pid})`);
154
+ }
155
+ logCrash(type, err) {
156
+ if (!this.config)
157
+ return;
158
+ const crashLog = path.join(path.dirname(this.config.dbPath), 'crashes.log');
159
+ const entry = `[${new Date().toISOString()}] ${type}: ${err.message}\n${err.stack ?? ''}\n\n`;
160
+ try {
161
+ fs.appendFileSync(crashLog, entry);
162
+ }
163
+ catch { /* best effort */ }
164
+ }
165
+ cleanup() {
166
+ this.researchEngine?.stop();
167
+ this.learningEngine?.stop();
168
+ this.mcpHttpServer?.stop();
169
+ this.apiServer?.stop();
170
+ this.ipcServer?.stop();
171
+ this.db?.close();
172
+ this.db = null;
173
+ this.ipcServer = null;
174
+ this.apiServer = null;
175
+ this.mcpHttpServer = null;
176
+ this.learningEngine = null;
177
+ this.researchEngine = null;
178
+ }
179
+ restart() {
180
+ if (this.restarting)
181
+ return;
182
+ this.restarting = true;
183
+ const logger = getLogger();
184
+ logger.info('Restarting Trading Brain daemon...');
185
+ try {
186
+ this.cleanup();
187
+ }
188
+ catch { /* best effort cleanup */ }
189
+ this.restarting = false;
190
+ this.start(this.configPath);
191
+ }
192
+ stop() {
193
+ const logger = getLogger();
194
+ logger.info('Shutting down...');
195
+ this.cleanup();
196
+ // Remove PID file
197
+ if (this.config) {
198
+ const pidPath = path.join(path.dirname(this.config.dbPath), 'trading-brain.pid');
199
+ try {
200
+ fs.unlinkSync(pidPath);
201
+ }
202
+ catch { /* ignore */ }
203
+ }
204
+ logger.info('Trading Brain daemon stopped');
205
+ process.exit(0);
206
+ }
207
+ setupEventListeners(_synapseManager) {
208
+ const bus = getEventBus();
209
+ // Trade recorded → log
210
+ bus.on('trade:recorded', ({ tradeId, fingerprint, win }) => {
211
+ getLogger().info(`Trade #${tradeId} recorded: ${fingerprint} (${win ? 'WIN' : 'LOSS'})`);
212
+ });
213
+ // Synapse updated → log at debug level
214
+ bus.on('synapse:updated', ({ synapseId }) => {
215
+ getLogger().debug(`Synapse updated: ${synapseId}`);
216
+ });
217
+ // Rule learned → log
218
+ bus.on('rule:learned', ({ ruleId, pattern }) => {
219
+ getLogger().info(`New rule #${ruleId} learned: ${pattern}`);
220
+ });
221
+ // Chain detected → log
222
+ bus.on('chain:detected', ({ pair, type, length }) => {
223
+ getLogger().info(`Chain: ${pair} ${type} streak (${length})`);
224
+ });
225
+ // Insight created → log
226
+ bus.on('insight:created', ({ insightId, type }) => {
227
+ getLogger().info(`New insight #${insightId} (${type})`);
228
+ });
229
+ // Calibration updated → log
230
+ bus.on('calibration:updated', ({ outcomeCount }) => {
231
+ getLogger().info(`Calibration updated (${outcomeCount} outcomes)`);
232
+ });
233
+ }
234
+ }
235
+ //# sourceMappingURL=trading-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trading-core.js","sourceRoot":"","sources":["../src/trading-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ export interface TradingBrainConfig {
2
+ dataDir: string;
3
+ dbPath: string;
4
+ ipc: {
5
+ pipeName: string;
6
+ timeout: number;
7
+ };
8
+ api: {
9
+ port: number;
10
+ enabled: boolean;
11
+ apiKey?: string;
12
+ };
13
+ mcpHttp: {
14
+ port: number;
15
+ enabled: boolean;
16
+ };
17
+ calibration: CalibrationConfig;
18
+ learning: LearningConfig;
19
+ research: ResearchConfig;
20
+ log: {
21
+ level: string;
22
+ file: string;
23
+ maxSize: number;
24
+ maxFiles: number;
25
+ };
26
+ }
27
+ export interface CalibrationConfig {
28
+ learningRate: number;
29
+ weakenPenalty: number;
30
+ decayHalfLifeDays: number;
31
+ patternExtractionInterval: number;
32
+ patternMinSamples: number;
33
+ patternWilsonThreshold: number;
34
+ wilsonZ: number;
35
+ spreadingActivationDecay: number;
36
+ spreadingActivationThreshold: number;
37
+ minActivationsForWeight: number;
38
+ minOutcomesForWeights: number;
39
+ }
40
+ export interface LearningConfig {
41
+ intervalMs: number;
42
+ fingerprintSimilarityThreshold: number;
43
+ chainMinLength: number;
44
+ maxChains: number;
45
+ }
46
+ export interface ResearchConfig {
47
+ intervalMs: number;
48
+ initialDelayMs: number;
49
+ trendWindowDays: number;
50
+ minTrades: number;
51
+ maxInsights: number;
52
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../src/types/config.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export interface IpcMessage {
2
+ id: string;
3
+ type: 'request' | 'response' | 'notification';
4
+ method?: string;
5
+ params?: unknown;
6
+ result?: unknown;
7
+ error?: {
8
+ code: number;
9
+ message: string;
10
+ };
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ipc.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc.types.js","sourceRoot":"","sources":["../../src/types/ipc.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export interface TradingBrainEvents {
3
+ 'trade:recorded': {
4
+ tradeId: number;
5
+ fingerprint: string;
6
+ win: boolean;
7
+ };
8
+ 'synapse:updated': {
9
+ synapseId: string;
10
+ weight: number;
11
+ };
12
+ 'rule:learned': {
13
+ ruleId: number;
14
+ pattern: string;
15
+ confidence: number;
16
+ };
17
+ 'chain:detected': {
18
+ pair: string;
19
+ type: string;
20
+ length: number;
21
+ };
22
+ 'insight:created': {
23
+ insightId: number;
24
+ type: string;
25
+ };
26
+ 'calibration:updated': {
27
+ outcomeCount: number;
28
+ learningRate: number;
29
+ };
30
+ 'decay:applied': {
31
+ synapseCount: number;
32
+ edgeCount: number;
33
+ };
34
+ 'patterns:extracted': {
35
+ ruleCount: number;
36
+ };
37
+ 'research:completed': {
38
+ insightCount: number;
39
+ };
40
+ }
41
+ export type TradingBrainEventName = keyof TradingBrainEvents;
42
+ export declare class TypedEventBus extends EventEmitter {
43
+ emit<K extends TradingBrainEventName>(event: K, data: TradingBrainEvents[K]): boolean;
44
+ on<K extends TradingBrainEventName>(event: K, listener: (data: TradingBrainEvents[K]) => void): this;
45
+ once<K extends TradingBrainEventName>(event: K, listener: (data: TradingBrainEvents[K]) => void): this;
46
+ off<K extends TradingBrainEventName>(event: K, listener: (data: TradingBrainEvents[K]) => void): this;
47
+ }
48
+ export declare function getEventBus(): TypedEventBus;
@@ -0,0 +1,23 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export class TypedEventBus extends EventEmitter {
3
+ emit(event, data) {
4
+ return super.emit(event, data);
5
+ }
6
+ on(event, listener) {
7
+ return super.on(event, listener);
8
+ }
9
+ once(event, listener) {
10
+ return super.once(event, listener);
11
+ }
12
+ off(event, listener) {
13
+ return super.off(event, listener);
14
+ }
15
+ }
16
+ let busInstance = null;
17
+ export function getEventBus() {
18
+ if (!busInstance) {
19
+ busInstance = new TypedEventBus();
20
+ }
21
+ return busInstance;
22
+ }
23
+ //# sourceMappingURL=events.js.map