opencandle 0.4.0 → 0.6.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 (564) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +186 -117
  3. package/dist/analysts/contracts.d.ts +1 -3
  4. package/dist/analysts/contracts.js +1 -11
  5. package/dist/analysts/contracts.js.map +1 -1
  6. package/dist/analysts/orchestrator.d.ts +1 -3
  7. package/dist/analysts/orchestrator.js +1 -26
  8. package/dist/analysts/orchestrator.js.map +1 -1
  9. package/dist/cli.js +32 -8
  10. package/dist/cli.js.map +1 -1
  11. package/dist/config.d.ts +19 -3
  12. package/dist/config.js +69 -3
  13. package/dist/config.js.map +1 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/infra/browser.d.ts +1 -3
  18. package/dist/infra/browser.js +4 -2
  19. package/dist/infra/browser.js.map +1 -1
  20. package/dist/infra/cache.d.ts +8 -11
  21. package/dist/infra/cache.js +17 -15
  22. package/dist/infra/cache.js.map +1 -1
  23. package/dist/infra/http-client.d.ts +4 -1
  24. package/dist/infra/http-client.js +59 -6
  25. package/dist/infra/http-client.js.map +1 -1
  26. package/dist/infra/index.d.ts +3 -3
  27. package/dist/infra/index.js +3 -3
  28. package/dist/infra/index.js.map +1 -1
  29. package/dist/infra/native-dependencies.js +2 -2
  30. package/dist/infra/native-dependencies.js.map +1 -1
  31. package/dist/infra/node-version.js.map +1 -1
  32. package/dist/infra/opencandle-paths.d.ts +0 -3
  33. package/dist/infra/opencandle-paths.js +4 -11
  34. package/dist/infra/opencandle-paths.js.map +1 -1
  35. package/dist/infra/rate-limiter.d.ts +4 -0
  36. package/dist/infra/rate-limiter.js +17 -10
  37. package/dist/infra/rate-limiter.js.map +1 -1
  38. package/dist/market-state/alert-conditions.d.ts +34 -0
  39. package/dist/market-state/alert-conditions.js +23 -0
  40. package/dist/market-state/alert-conditions.js.map +1 -0
  41. package/dist/market-state/alert-runner.d.ts +55 -0
  42. package/dist/market-state/alert-runner.js +634 -0
  43. package/dist/market-state/alert-runner.js.map +1 -0
  44. package/dist/market-state/daily-report.d.ts +26 -0
  45. package/dist/market-state/daily-report.js +179 -0
  46. package/dist/market-state/daily-report.js.map +1 -0
  47. package/dist/market-state/local-automation-service.d.ts +25 -0
  48. package/dist/market-state/local-automation-service.js +119 -0
  49. package/dist/market-state/local-automation-service.js.map +1 -0
  50. package/dist/market-state/notification-delivery.d.ts +14 -0
  51. package/dist/market-state/notification-delivery.js +139 -0
  52. package/dist/market-state/notification-delivery.js.map +1 -0
  53. package/dist/market-state/resolve-for-mutation.d.ts +10 -0
  54. package/dist/market-state/resolve-for-mutation.js +15 -0
  55. package/dist/market-state/resolve-for-mutation.js.map +1 -0
  56. package/dist/market-state/resolve.d.ts +14 -0
  57. package/dist/market-state/resolve.js +89 -0
  58. package/dist/market-state/resolve.js.map +1 -0
  59. package/dist/market-state/service.d.ts +527 -0
  60. package/dist/market-state/service.js +1099 -0
  61. package/dist/market-state/service.js.map +1 -0
  62. package/dist/memory/index.d.ts +7 -7
  63. package/dist/memory/index.js +6 -6
  64. package/dist/memory/index.js.map +1 -1
  65. package/dist/memory/manager.d.ts +9 -0
  66. package/dist/memory/manager.js +39 -22
  67. package/dist/memory/manager.js.map +1 -1
  68. package/dist/memory/retrieval.js +7 -4
  69. package/dist/memory/retrieval.js.map +1 -1
  70. package/dist/memory/sqlite.js +385 -3
  71. package/dist/memory/sqlite.js.map +1 -1
  72. package/dist/memory/storage.d.ts +3 -2
  73. package/dist/memory/storage.js +1 -2
  74. package/dist/memory/storage.js.map +1 -1
  75. package/dist/memory/tool-defaults.js +64 -28
  76. package/dist/memory/tool-defaults.js.map +1 -1
  77. package/dist/memory/types.js +4 -0
  78. package/dist/memory/types.js.map +1 -1
  79. package/dist/monitor.d.ts +2 -0
  80. package/dist/monitor.js +104 -0
  81. package/dist/monitor.js.map +1 -0
  82. package/dist/onboarding/connect.js +4 -6
  83. package/dist/onboarding/connect.js.map +1 -1
  84. package/dist/onboarding/credential-interceptor.js +1 -1
  85. package/dist/onboarding/credential-interceptor.js.map +1 -1
  86. package/dist/onboarding/degradation-accumulator.js +1 -3
  87. package/dist/onboarding/degradation-accumulator.js.map +1 -1
  88. package/dist/onboarding/providers.js +3 -16
  89. package/dist/onboarding/providers.js.map +1 -1
  90. package/dist/onboarding/state.js.map +1 -1
  91. package/dist/onboarding/tool-helpers.js +1 -1
  92. package/dist/onboarding/tool-helpers.js.map +1 -1
  93. package/dist/onboarding/tool-tags.js +6 -4
  94. package/dist/onboarding/tool-tags.js.map +1 -1
  95. package/dist/onboarding/validation.js +1 -1
  96. package/dist/onboarding/validation.js.map +1 -1
  97. package/dist/pi/opencandle-extension.d.ts +8 -0
  98. package/dist/pi/opencandle-extension.js +637 -59
  99. package/dist/pi/opencandle-extension.js.map +1 -1
  100. package/dist/pi/session.d.ts +1 -1
  101. package/dist/pi/session.js +3 -1
  102. package/dist/pi/session.js.map +1 -1
  103. package/dist/pi/setup.js +17 -2
  104. package/dist/pi/setup.js.map +1 -1
  105. package/dist/pi/tool-adapter.js +5 -2
  106. package/dist/pi/tool-adapter.js.map +1 -1
  107. package/dist/prompts/context-builder.d.ts +18 -3
  108. package/dist/prompts/context-builder.js +117 -18
  109. package/dist/prompts/context-builder.js.map +1 -1
  110. package/dist/prompts/disclaimer.js +1 -1
  111. package/dist/prompts/disclaimer.js.map +1 -1
  112. package/dist/prompts/policy-cards.d.ts +13 -0
  113. package/dist/prompts/policy-cards.js +197 -0
  114. package/dist/prompts/policy-cards.js.map +1 -0
  115. package/dist/prompts/sections.d.ts +1 -1
  116. package/dist/prompts/sections.js +3 -3
  117. package/dist/prompts/sections.js.map +1 -1
  118. package/dist/prompts/symbol-preflight.d.ts +20 -0
  119. package/dist/prompts/symbol-preflight.js +49 -0
  120. package/dist/prompts/symbol-preflight.js.map +1 -0
  121. package/dist/prompts/workflow-prompts.d.ts +1 -1
  122. package/dist/prompts/workflow-prompts.js +209 -19
  123. package/dist/prompts/workflow-prompts.js.map +1 -1
  124. package/dist/providers/alpha-vantage.d.ts +1 -1
  125. package/dist/providers/alpha-vantage.js +49 -8
  126. package/dist/providers/alpha-vantage.js.map +1 -1
  127. package/dist/providers/coingecko.js +1 -1
  128. package/dist/providers/coingecko.js.map +1 -1
  129. package/dist/providers/errors.d.ts +5 -0
  130. package/dist/providers/errors.js +11 -0
  131. package/dist/providers/errors.js.map +1 -0
  132. package/dist/providers/exa-search.d.ts +2 -2
  133. package/dist/providers/exa-search.js +19 -11
  134. package/dist/providers/exa-search.js.map +1 -1
  135. package/dist/providers/fear-greed.js +1 -1
  136. package/dist/providers/fear-greed.js.map +1 -1
  137. package/dist/providers/finnhub.js +3 -5
  138. package/dist/providers/finnhub.js.map +1 -1
  139. package/dist/providers/fred.js +2 -2
  140. package/dist/providers/fred.js.map +1 -1
  141. package/dist/providers/index.d.ts +7 -6
  142. package/dist/providers/index.js +6 -5
  143. package/dist/providers/index.js.map +1 -1
  144. package/dist/providers/reddit.js +2 -2
  145. package/dist/providers/reddit.js.map +1 -1
  146. package/dist/providers/sec-edgar.d.ts +9 -1
  147. package/dist/providers/sec-edgar.js +181 -6
  148. package/dist/providers/sec-edgar.js.map +1 -1
  149. package/dist/providers/tradingview.d.ts +47 -0
  150. package/dist/providers/tradingview.js +275 -0
  151. package/dist/providers/tradingview.js.map +1 -0
  152. package/dist/providers/twitter.js +6 -8
  153. package/dist/providers/twitter.js.map +1 -1
  154. package/dist/providers/web-search.js +26 -12
  155. package/dist/providers/web-search.js.map +1 -1
  156. package/dist/providers/with-fallback.js +4 -2
  157. package/dist/providers/with-fallback.js.map +1 -1
  158. package/dist/providers/wrap-provider.d.ts +2 -3
  159. package/dist/providers/wrap-provider.js +14 -8
  160. package/dist/providers/wrap-provider.js.map +1 -1
  161. package/dist/providers/yahoo-finance.d.ts +3 -1
  162. package/dist/providers/yahoo-finance.js +226 -11
  163. package/dist/providers/yahoo-finance.js.map +1 -1
  164. package/dist/routing/classify-intent.d.ts +9 -0
  165. package/dist/routing/classify-intent.js +153 -3
  166. package/dist/routing/classify-intent.js.map +1 -1
  167. package/dist/routing/defaults.d.ts +1 -1
  168. package/dist/routing/defaults.js +3 -3
  169. package/dist/routing/defaults.js.map +1 -1
  170. package/dist/routing/entity-extractor.d.ts +2 -0
  171. package/dist/routing/entity-extractor.js +377 -26
  172. package/dist/routing/entity-extractor.js.map +1 -1
  173. package/dist/routing/fund-symbols.d.ts +2 -0
  174. package/dist/routing/fund-symbols.js +55 -0
  175. package/dist/routing/fund-symbols.js.map +1 -0
  176. package/dist/routing/horizon.d.ts +1 -0
  177. package/dist/routing/horizon.js +10 -0
  178. package/dist/routing/horizon.js.map +1 -0
  179. package/dist/routing/index.d.ts +12 -6
  180. package/dist/routing/index.js +8 -4
  181. package/dist/routing/index.js.map +1 -1
  182. package/dist/routing/legacy-rule-router.d.ts +9 -0
  183. package/dist/routing/legacy-rule-router.js +12 -0
  184. package/dist/routing/legacy-rule-router.js.map +1 -0
  185. package/dist/routing/planning.d.ts +54 -0
  186. package/dist/routing/planning.js +562 -0
  187. package/dist/routing/planning.js.map +1 -0
  188. package/dist/routing/route-manifest.d.ts +35 -0
  189. package/dist/routing/route-manifest.js +242 -0
  190. package/dist/routing/route-manifest.js.map +1 -0
  191. package/dist/routing/router-llm-client.js.map +1 -1
  192. package/dist/routing/router-prompt.js +46 -45
  193. package/dist/routing/router-prompt.js.map +1 -1
  194. package/dist/routing/router-types.d.ts +10 -0
  195. package/dist/routing/router.d.ts +1 -0
  196. package/dist/routing/router.js +572 -13
  197. package/dist/routing/router.js.map +1 -1
  198. package/dist/routing/slot-resolver.d.ts +1 -1
  199. package/dist/routing/slot-resolver.js +45 -7
  200. package/dist/routing/slot-resolver.js.map +1 -1
  201. package/dist/routing/symbol-disambiguator.d.ts +11 -0
  202. package/dist/routing/symbol-disambiguator.js +52 -0
  203. package/dist/routing/symbol-disambiguator.js.map +1 -0
  204. package/dist/routing/turn-context.d.ts +44 -0
  205. package/dist/routing/turn-context.js +45 -0
  206. package/dist/routing/turn-context.js.map +1 -0
  207. package/dist/routing/types.d.ts +15 -1
  208. package/dist/runtime/answer-contracts.d.ts +82 -0
  209. package/dist/runtime/answer-contracts.js +442 -0
  210. package/dist/runtime/answer-contracts.js.map +1 -0
  211. package/dist/runtime/artifact-contracts.d.ts +14 -0
  212. package/dist/runtime/artifact-contracts.js +57 -0
  213. package/dist/runtime/artifact-contracts.js.map +1 -0
  214. package/dist/runtime/planning-evidence.d.ts +99 -0
  215. package/dist/runtime/planning-evidence.js +466 -0
  216. package/dist/runtime/planning-evidence.js.map +1 -0
  217. package/dist/runtime/prompt-step.d.ts +1 -9
  218. package/dist/runtime/prompt-step.js +0 -10
  219. package/dist/runtime/prompt-step.js.map +1 -1
  220. package/dist/runtime/run-context.d.ts +5 -2
  221. package/dist/runtime/run-context.js +8 -1
  222. package/dist/runtime/run-context.js.map +1 -1
  223. package/dist/runtime/session-coordinator.d.ts +29 -3
  224. package/dist/runtime/session-coordinator.js +204 -31
  225. package/dist/runtime/session-coordinator.js.map +1 -1
  226. package/dist/runtime/session-title.d.ts +14 -0
  227. package/dist/runtime/session-title.js +50 -0
  228. package/dist/runtime/session-title.js.map +1 -0
  229. package/dist/runtime/tool-defaults-wrapper.js +1 -3
  230. package/dist/runtime/tool-defaults-wrapper.js.map +1 -1
  231. package/dist/runtime/validation.js.map +1 -1
  232. package/dist/runtime/workflow-events.js.map +1 -1
  233. package/dist/runtime/workflow-runner.d.ts +3 -3
  234. package/dist/runtime/workflow-runner.js +1 -1
  235. package/dist/runtime/workflow-runner.js.map +1 -1
  236. package/dist/sentiment/adapters/finnhub.d.ts +1 -1
  237. package/dist/sentiment/adapters/finnhub.js +6 -1
  238. package/dist/sentiment/adapters/finnhub.js.map +1 -1
  239. package/dist/sentiment/adapters/reddit.d.ts +2 -2
  240. package/dist/sentiment/adapters/twitter.d.ts +1 -1
  241. package/dist/sentiment/adapters/web.d.ts +1 -1
  242. package/dist/sentiment/index.d.ts +9 -11
  243. package/dist/sentiment/index.js +9 -20
  244. package/dist/sentiment/index.js.map +1 -1
  245. package/dist/sentiment/keywords.js +26 -4
  246. package/dist/sentiment/keywords.js.map +1 -1
  247. package/dist/sentiment/pipeline.d.ts +2 -2
  248. package/dist/sentiment/pipeline.js +1 -1
  249. package/dist/sentiment/pipeline.js.map +1 -1
  250. package/dist/sentiment/scorer.js +1 -1
  251. package/dist/sentiment/store.d.ts +1 -1
  252. package/dist/sentiment/store.js +1 -1
  253. package/dist/sentiment/store.js.map +1 -1
  254. package/dist/sentiment/trends.d.ts +1 -1
  255. package/dist/sentiment/trends.js.map +1 -1
  256. package/dist/sentiment/types.js.map +1 -1
  257. package/dist/system-prompt.js +7 -3
  258. package/dist/system-prompt.js.map +1 -1
  259. package/dist/tool-kit.d.ts +7 -7
  260. package/dist/tool-kit.js +4 -4
  261. package/dist/tool-kit.js.map +1 -1
  262. package/dist/tools/fundamentals/company-overview.js +12 -7
  263. package/dist/tools/fundamentals/company-overview.js.map +1 -1
  264. package/dist/tools/fundamentals/comps.js +19 -10
  265. package/dist/tools/fundamentals/comps.js.map +1 -1
  266. package/dist/tools/fundamentals/dcf.js +24 -12
  267. package/dist/tools/fundamentals/dcf.js.map +1 -1
  268. package/dist/tools/fundamentals/earnings.js +9 -4
  269. package/dist/tools/fundamentals/earnings.js.map +1 -1
  270. package/dist/tools/fundamentals/financials.js +9 -4
  271. package/dist/tools/fundamentals/financials.js.map +1 -1
  272. package/dist/tools/fundamentals/sec-filings.d.ts +1 -0
  273. package/dist/tools/fundamentals/sec-filings.js +36 -4
  274. package/dist/tools/fundamentals/sec-filings.js.map +1 -1
  275. package/dist/tools/index.d.ts +23 -18
  276. package/dist/tools/index.js +53 -38
  277. package/dist/tools/index.js.map +1 -1
  278. package/dist/tools/interaction/ask-user.js +15 -3
  279. package/dist/tools/interaction/ask-user.js.map +1 -1
  280. package/dist/tools/interaction/twitter-login.js +13 -3
  281. package/dist/tools/interaction/twitter-login.js.map +1 -1
  282. package/dist/tools/macro/fear-greed.js +1 -1
  283. package/dist/tools/macro/fear-greed.js.map +1 -1
  284. package/dist/tools/macro/fred-data.d.ts +1 -1
  285. package/dist/tools/macro/fred-data.js +44 -9
  286. package/dist/tools/macro/fred-data.js.map +1 -1
  287. package/dist/tools/market/crypto-history.js +21 -3
  288. package/dist/tools/market/crypto-history.js.map +1 -1
  289. package/dist/tools/market/crypto-price.js +4 -2
  290. package/dist/tools/market/crypto-price.js.map +1 -1
  291. package/dist/tools/market/screen-stocks.d.ts +18 -0
  292. package/dist/tools/market/screen-stocks.js +252 -0
  293. package/dist/tools/market/screen-stocks.js.map +1 -0
  294. package/dist/tools/market/search-ticker.js +161 -9
  295. package/dist/tools/market/search-ticker.js.map +1 -1
  296. package/dist/tools/market/stock-history.d.ts +2 -2
  297. package/dist/tools/market/stock-history.js +27 -8
  298. package/dist/tools/market/stock-history.js.map +1 -1
  299. package/dist/tools/market/stock-quote.js +6 -4
  300. package/dist/tools/market/stock-quote.js.map +1 -1
  301. package/dist/tools/options/greeks.js +1 -2
  302. package/dist/tools/options/greeks.js.map +1 -1
  303. package/dist/tools/options/option-chain.js +27 -9
  304. package/dist/tools/options/option-chain.js.map +1 -1
  305. package/dist/tools/portfolio/alerts.d.ts +15 -0
  306. package/dist/tools/portfolio/alerts.js +357 -0
  307. package/dist/tools/portfolio/alerts.js.map +1 -0
  308. package/dist/tools/portfolio/correlation.d.ts +1 -1
  309. package/dist/tools/portfolio/correlation.js +34 -14
  310. package/dist/tools/portfolio/correlation.js.map +1 -1
  311. package/dist/tools/portfolio/daily-report.d.ts +8 -0
  312. package/dist/tools/portfolio/daily-report.js +83 -0
  313. package/dist/tools/portfolio/daily-report.js.map +1 -0
  314. package/dist/tools/portfolio/holdings-overlap.d.ts +8 -0
  315. package/dist/tools/portfolio/holdings-overlap.js +112 -0
  316. package/dist/tools/portfolio/holdings-overlap.js.map +1 -0
  317. package/dist/tools/portfolio/notifications.d.ts +7 -0
  318. package/dist/tools/portfolio/notifications.js +43 -0
  319. package/dist/tools/portfolio/notifications.js.map +1 -0
  320. package/dist/tools/portfolio/predictions.d.ts +12 -6
  321. package/dist/tools/portfolio/predictions.js +338 -88
  322. package/dist/tools/portfolio/predictions.js.map +1 -1
  323. package/dist/tools/portfolio/risk-analysis.d.ts +1 -1
  324. package/dist/tools/portfolio/risk-analysis.js +46 -7
  325. package/dist/tools/portfolio/risk-analysis.js.map +1 -1
  326. package/dist/tools/portfolio/tracker.d.ts +4 -3
  327. package/dist/tools/portfolio/tracker.js +247 -102
  328. package/dist/tools/portfolio/tracker.js.map +1 -1
  329. package/dist/tools/portfolio/watchlist.d.ts +6 -4
  330. package/dist/tools/portfolio/watchlist.js +209 -101
  331. package/dist/tools/portfolio/watchlist.js.map +1 -1
  332. package/dist/tools/sentiment/reddit-sentiment.js +24 -11
  333. package/dist/tools/sentiment/reddit-sentiment.js.map +1 -1
  334. package/dist/tools/sentiment/sentiment-summary.js +71 -14
  335. package/dist/tools/sentiment/sentiment-summary.js.map +1 -1
  336. package/dist/tools/sentiment/sentiment-trend.d.ts +1 -1
  337. package/dist/tools/sentiment/sentiment-trend.js +12 -2
  338. package/dist/tools/sentiment/sentiment-trend.js.map +1 -1
  339. package/dist/tools/sentiment/twitter-sentiment.js +13 -6
  340. package/dist/tools/sentiment/twitter-sentiment.js.map +1 -1
  341. package/dist/tools/sentiment/untrusted-text.d.ts +2 -0
  342. package/dist/tools/sentiment/untrusted-text.js +17 -0
  343. package/dist/tools/sentiment/untrusted-text.js.map +1 -0
  344. package/dist/tools/sentiment/web-search.js +37 -12
  345. package/dist/tools/sentiment/web-search.js.map +1 -1
  346. package/dist/tools/sentiment/web-sentiment.js +16 -4
  347. package/dist/tools/sentiment/web-sentiment.js.map +1 -1
  348. package/dist/tools/technical/backtest.d.ts +3 -3
  349. package/dist/tools/technical/backtest.js +65 -44
  350. package/dist/tools/technical/backtest.js.map +1 -1
  351. package/dist/tools/technical/indicators.js +24 -8
  352. package/dist/tools/technical/indicators.js.map +1 -1
  353. package/dist/types/index.d.ts +3 -3
  354. package/dist/types/index.js.map +1 -1
  355. package/dist/types/market.d.ts +1 -0
  356. package/dist/types/options.d.ts +10 -0
  357. package/dist/types/portfolio.d.ts +41 -4
  358. package/dist/workflows/compare-assets.d.ts +0 -3
  359. package/dist/workflows/compare-assets.js +55 -10
  360. package/dist/workflows/compare-assets.js.map +1 -1
  361. package/dist/workflows/index.d.ts +3 -4
  362. package/dist/workflows/index.js +3 -3
  363. package/dist/workflows/index.js.map +1 -1
  364. package/dist/workflows/options-screener.d.ts +0 -3
  365. package/dist/workflows/options-screener.js +88 -14
  366. package/dist/workflows/options-screener.js.map +1 -1
  367. package/dist/workflows/portfolio-builder.d.ts +0 -3
  368. package/dist/workflows/portfolio-builder.js +7 -11
  369. package/dist/workflows/portfolio-builder.js.map +1 -1
  370. package/gui/server/ask-user-bridge.ts +82 -0
  371. package/gui/server/automation-heartbeat.ts +97 -0
  372. package/gui/server/background-quotes.ts +97 -1
  373. package/gui/server/chat-event-adapter.ts +32 -10
  374. package/gui/server/chat-run-session.ts +16 -0
  375. package/gui/server/gui-session-manager.ts +5 -0
  376. package/gui/server/invoke-tool.ts +144 -1
  377. package/gui/server/live-chat-event-adapter.ts +21 -6
  378. package/gui/server/market-state-api.ts +315 -0
  379. package/gui/server/model-setup.ts +149 -2
  380. package/gui/server/private-api-access.ts +62 -0
  381. package/gui/server/projector.ts +58 -11
  382. package/gui/server/prompt-observation.ts +58 -0
  383. package/gui/server/quote-snapshot-store.ts +50 -0
  384. package/gui/server/server.ts +236 -376
  385. package/gui/server/session-actions.ts +186 -1
  386. package/gui/server/session-entry-wait.ts +81 -0
  387. package/gui/server/shutdown.ts +47 -0
  388. package/gui/server/tool-invoke-ack.ts +49 -0
  389. package/gui/server/tool-metadata.ts +23 -10
  390. package/gui/server/websocket.ts +13 -3
  391. package/gui/server/writer-lock.ts +6 -2
  392. package/gui/server/ws-hub.ts +292 -0
  393. package/gui/shared/chat-events.ts +16 -1
  394. package/gui/shared/event-reducer.ts +24 -6
  395. package/gui/web/dist/assets/CatalogOverlay-eJ2cBk33.js +1 -0
  396. package/gui/web/dist/assets/index-2KZtKBmu.css +1 -0
  397. package/gui/web/dist/assets/index-CveNgtDg.js +69 -0
  398. package/gui/web/dist/index.html +2 -2
  399. package/package.json +22 -12
  400. package/src/analysts/contracts.ts +10 -23
  401. package/src/analysts/orchestrator.ts +8 -43
  402. package/src/cli.ts +37 -13
  403. package/src/config.ts +99 -7
  404. package/src/index.ts +1 -1
  405. package/src/infra/browser.ts +4 -2
  406. package/src/infra/cache.ts +41 -30
  407. package/src/infra/http-client.ts +72 -6
  408. package/src/infra/index.ts +7 -10
  409. package/src/infra/native-dependencies.ts +8 -3
  410. package/src/infra/node-version.ts +3 -1
  411. package/src/infra/opencandle-paths.ts +3 -14
  412. package/src/infra/rate-limiter.ts +32 -20
  413. package/src/market-state/alert-conditions.ts +82 -0
  414. package/src/market-state/alert-runner.ts +863 -0
  415. package/src/market-state/daily-report.ts +247 -0
  416. package/src/market-state/local-automation-service.ts +162 -0
  417. package/src/market-state/notification-delivery.ts +158 -0
  418. package/src/market-state/resolve-for-mutation.ts +24 -0
  419. package/src/market-state/resolve.ts +112 -0
  420. package/src/market-state/service.ts +2344 -0
  421. package/src/memory/index.ts +7 -7
  422. package/src/memory/manager.ts +57 -26
  423. package/src/memory/retrieval.ts +8 -7
  424. package/src/memory/sqlite.ts +407 -6
  425. package/src/memory/storage.ts +8 -17
  426. package/src/memory/tool-defaults.ts +60 -39
  427. package/src/memory/types.ts +7 -3
  428. package/src/monitor.ts +121 -0
  429. package/src/onboarding/connect.ts +10 -33
  430. package/src/onboarding/credential-interceptor.ts +3 -15
  431. package/src/onboarding/degradation-accumulator.ts +1 -3
  432. package/src/onboarding/providers.ts +9 -40
  433. package/src/onboarding/state.ts +4 -15
  434. package/src/onboarding/tool-helpers.ts +2 -9
  435. package/src/onboarding/tool-tags.ts +6 -6
  436. package/src/onboarding/validation.ts +14 -20
  437. package/src/pi/opencandle-extension.ts +795 -120
  438. package/src/pi/session.ts +7 -5
  439. package/src/pi/setup.ts +61 -33
  440. package/src/pi/tool-adapter.ts +5 -2
  441. package/src/prompts/context-builder.ts +143 -21
  442. package/src/prompts/disclaimer.ts +1 -1
  443. package/src/prompts/policy-cards.ts +220 -0
  444. package/src/prompts/sections.ts +4 -4
  445. package/src/prompts/symbol-preflight.ts +80 -0
  446. package/src/prompts/workflow-prompts.ts +231 -28
  447. package/src/providers/alpha-vantage.ts +82 -40
  448. package/src/providers/coingecko.ts +2 -5
  449. package/src/providers/errors.ts +9 -0
  450. package/src/providers/exa-search.ts +24 -22
  451. package/src/providers/fear-greed.ts +1 -1
  452. package/src/providers/finnhub.ts +7 -6
  453. package/src/providers/fred.ts +3 -3
  454. package/src/providers/index.ts +14 -6
  455. package/src/providers/reddit.ts +17 -6
  456. package/src/providers/sec-edgar.ts +235 -5
  457. package/src/providers/tradingview.ts +399 -0
  458. package/src/providers/twitter.ts +6 -8
  459. package/src/providers/web-search.ts +30 -20
  460. package/src/providers/with-fallback.ts +8 -7
  461. package/src/providers/wrap-provider.ts +15 -10
  462. package/src/providers/yahoo-finance.ts +292 -20
  463. package/src/routing/classify-intent.ts +186 -4
  464. package/src/routing/defaults.ts +4 -4
  465. package/src/routing/entity-extractor.ts +428 -28
  466. package/src/routing/fund-symbols.ts +58 -0
  467. package/src/routing/horizon.ts +7 -0
  468. package/src/routing/index.ts +60 -16
  469. package/src/routing/legacy-rule-router.ts +13 -0
  470. package/src/routing/planning.ts +823 -0
  471. package/src/routing/route-manifest.ts +309 -0
  472. package/src/routing/router-llm-client.ts +4 -4
  473. package/src/routing/router-prompt.ts +52 -52
  474. package/src/routing/router-types.ts +18 -0
  475. package/src/routing/router.ts +717 -20
  476. package/src/routing/slot-resolver.ts +75 -14
  477. package/src/routing/symbol-disambiguator.ts +72 -0
  478. package/src/routing/turn-context.ts +108 -0
  479. package/src/routing/types.ts +15 -1
  480. package/src/runtime/answer-contracts.ts +672 -0
  481. package/src/runtime/artifact-contracts.ts +77 -0
  482. package/src/runtime/planning-evidence.ts +682 -0
  483. package/src/runtime/prompt-step.ts +1 -16
  484. package/src/runtime/run-context.ts +12 -2
  485. package/src/runtime/session-coordinator.ts +297 -56
  486. package/src/runtime/session-title.ts +60 -0
  487. package/src/runtime/tool-defaults-wrapper.ts +1 -3
  488. package/src/runtime/validation.ts +1 -4
  489. package/src/runtime/workflow-events.ts +7 -7
  490. package/src/runtime/workflow-runner.ts +5 -11
  491. package/src/sentiment/adapters/finnhub.ts +7 -2
  492. package/src/sentiment/adapters/reddit.ts +2 -2
  493. package/src/sentiment/adapters/twitter.ts +1 -1
  494. package/src/sentiment/adapters/web.ts +1 -1
  495. package/src/sentiment/index.ts +16 -26
  496. package/src/sentiment/keywords.ts +26 -4
  497. package/src/sentiment/pipeline.ts +15 -4
  498. package/src/sentiment/scorer.ts +1 -1
  499. package/src/sentiment/store.ts +2 -2
  500. package/src/sentiment/trends.ts +9 -3
  501. package/src/sentiment/types.ts +5 -4
  502. package/src/system-prompt.ts +7 -3
  503. package/src/tool-kit.ts +10 -9
  504. package/src/tools/fundamentals/company-overview.ts +20 -10
  505. package/src/tools/fundamentals/comps.ts +69 -56
  506. package/src/tools/fundamentals/dcf.ts +146 -96
  507. package/src/tools/fundamentals/earnings.ts +17 -7
  508. package/src/tools/fundamentals/financials.ts +17 -8
  509. package/src/tools/fundamentals/sec-filings.ts +52 -8
  510. package/src/tools/index.ts +53 -38
  511. package/src/tools/interaction/ask-user.ts +22 -10
  512. package/src/tools/interaction/twitter-login.ts +17 -5
  513. package/src/tools/macro/fear-greed.ts +2 -2
  514. package/src/tools/macro/fred-data.ts +80 -42
  515. package/src/tools/market/crypto-history.ts +25 -4
  516. package/src/tools/market/crypto-price.ts +7 -7
  517. package/src/tools/market/screen-stocks.ts +279 -0
  518. package/src/tools/market/search-ticker.ts +219 -18
  519. package/src/tools/market/stock-history.ts +38 -13
  520. package/src/tools/market/stock-quote.ts +11 -8
  521. package/src/tools/options/greeks.ts +5 -6
  522. package/src/tools/options/option-chain.ts +47 -18
  523. package/src/tools/portfolio/alerts.ts +457 -0
  524. package/src/tools/portfolio/correlation.ts +48 -21
  525. package/src/tools/portfolio/daily-report.ts +101 -0
  526. package/src/tools/portfolio/holdings-overlap.ts +139 -0
  527. package/src/tools/portfolio/notifications.ts +45 -0
  528. package/src/tools/portfolio/predictions.ts +407 -107
  529. package/src/tools/portfolio/risk-analysis.ts +47 -8
  530. package/src/tools/portfolio/tracker.ts +271 -110
  531. package/src/tools/portfolio/watchlist.ts +251 -116
  532. package/src/tools/sentiment/reddit-sentiment.ts +51 -25
  533. package/src/tools/sentiment/sentiment-summary.ts +116 -35
  534. package/src/tools/sentiment/sentiment-trend.ts +24 -7
  535. package/src/tools/sentiment/twitter-sentiment.ts +23 -16
  536. package/src/tools/sentiment/untrusted-text.ts +21 -0
  537. package/src/tools/sentiment/web-search.ts +52 -16
  538. package/src/tools/sentiment/web-sentiment.ts +27 -11
  539. package/src/tools/technical/backtest.ts +78 -47
  540. package/src/tools/technical/indicators.ts +40 -17
  541. package/src/types/index.ts +8 -3
  542. package/src/types/market.ts +1 -0
  543. package/src/types/options.ts +17 -0
  544. package/src/types/portfolio.ts +46 -4
  545. package/src/types/sentiment.ts +2 -2
  546. package/src/workflows/compare-assets.ts +67 -19
  547. package/src/workflows/index.ts +3 -4
  548. package/src/workflows/options-screener.ts +98 -22
  549. package/src/workflows/portfolio-builder.ts +40 -29
  550. package/dist/runtime/index.d.ts +0 -16
  551. package/dist/runtime/index.js +0 -10
  552. package/dist/runtime/index.js.map +0 -1
  553. package/dist/runtime/provider-ids.d.ts +0 -14
  554. package/dist/runtime/provider-ids.js +0 -14
  555. package/dist/runtime/provider-ids.js.map +0 -1
  556. package/dist/workflows/types.d.ts +0 -4
  557. package/dist/workflows/types.js +0 -2
  558. package/dist/workflows/types.js.map +0 -1
  559. package/gui/web/dist/assets/CatalogOverlay-D1ImSJTe.js +0 -1
  560. package/gui/web/dist/assets/index-DBrWq43L.css +0 -1
  561. package/gui/web/dist/assets/index-RflHaj0y.js +0 -67
  562. package/src/runtime/index.ts +0 -55
  563. package/src/runtime/provider-ids.ts +0 -15
  564. package/src/workflows/types.ts +0 -4
@@ -1,8 +1,8 @@
1
1
  import { mkdirSync } from "node:fs";
2
2
  import { dirname } from "node:path";
3
3
  import Database from "better-sqlite3";
4
- import { getStateDbPath } from "../infra/opencandle-paths.js";
5
- const CURRENT_SCHEMA_VERSION = 4;
4
+ import { ensureOpenCandleHomeDir, getStateDbPath } from "../infra/opencandle-paths.js";
5
+ const CURRENT_SCHEMA_VERSION = 7;
6
6
  const CURRENT_SCHEMA = `
7
7
  CREATE TABLE IF NOT EXISTS schema_version (
8
8
  version INTEGER NOT NULL
@@ -60,6 +60,294 @@ const CURRENT_SCHEMA = `
60
60
  set_at TEXT NOT NULL,
61
61
  PRIMARY KEY (tool_name, param_path)
62
62
  );
63
+
64
+ CREATE TABLE IF NOT EXISTS instruments (
65
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
66
+ symbol TEXT NOT NULL,
67
+ asset_type TEXT NOT NULL,
68
+ name TEXT,
69
+ exchange TEXT,
70
+ currency TEXT,
71
+ provider TEXT NOT NULL,
72
+ provider_metadata_json TEXT,
73
+ last_resolved_at TEXT NOT NULL,
74
+ created_at TEXT NOT NULL,
75
+ updated_at TEXT NOT NULL
76
+ );
77
+
78
+ CREATE INDEX IF NOT EXISTS idx_instruments_symbol ON instruments(symbol);
79
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_instruments_provider_identity
80
+ ON instruments(provider, symbol, asset_type, IFNULL(exchange, ''));
81
+
82
+ CREATE TABLE IF NOT EXISTS instrument_aliases (
83
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
84
+ instrument_id INTEGER NOT NULL,
85
+ source TEXT NOT NULL,
86
+ source_symbol TEXT NOT NULL,
87
+ source_exchange TEXT,
88
+ source_asset_type TEXT,
89
+ source_id TEXT,
90
+ raw_json TEXT,
91
+ created_at TEXT NOT NULL,
92
+ updated_at TEXT NOT NULL,
93
+ FOREIGN KEY (instrument_id) REFERENCES instruments(id) ON DELETE RESTRICT
94
+ );
95
+
96
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_instrument_aliases_source_id
97
+ ON instrument_aliases(source, source_id)
98
+ WHERE source_id IS NOT NULL;
99
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_instrument_aliases_source_symbol
100
+ ON instrument_aliases(source, source_symbol, IFNULL(source_exchange, ''), IFNULL(source_asset_type, ''))
101
+ WHERE source_id IS NULL;
102
+
103
+ CREATE TABLE IF NOT EXISTS watchlists (
104
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
105
+ name TEXT NOT NULL,
106
+ is_default INTEGER NOT NULL DEFAULT 0,
107
+ created_at TEXT NOT NULL,
108
+ updated_at TEXT NOT NULL
109
+ );
110
+
111
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_watchlists_one_default
112
+ ON watchlists(is_default)
113
+ WHERE is_default = 1;
114
+
115
+ CREATE TABLE IF NOT EXISTS watchlist_items (
116
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
117
+ watchlist_id INTEGER NOT NULL,
118
+ instrument_id INTEGER NOT NULL,
119
+ thesis TEXT,
120
+ notes TEXT,
121
+ tags_json TEXT,
122
+ target_price REAL,
123
+ stop_price REAL,
124
+ price_currency TEXT,
125
+ source TEXT,
126
+ source_row_id TEXT,
127
+ source_metadata_json TEXT,
128
+ created_at TEXT NOT NULL,
129
+ updated_at TEXT NOT NULL,
130
+ UNIQUE(watchlist_id, instrument_id),
131
+ FOREIGN KEY (watchlist_id) REFERENCES watchlists(id) ON DELETE CASCADE,
132
+ FOREIGN KEY (instrument_id) REFERENCES instruments(id) ON DELETE RESTRICT
133
+ );
134
+
135
+ CREATE INDEX IF NOT EXISTS idx_watchlist_items_source_row
136
+ ON watchlist_items(source, source_row_id)
137
+ WHERE source IS NOT NULL AND source_row_id IS NOT NULL;
138
+
139
+ CREATE TABLE IF NOT EXISTS portfolios (
140
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
141
+ name TEXT NOT NULL,
142
+ base_currency TEXT NOT NULL DEFAULT 'USD',
143
+ is_default INTEGER NOT NULL DEFAULT 0,
144
+ created_at TEXT NOT NULL,
145
+ updated_at TEXT NOT NULL
146
+ );
147
+
148
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_portfolios_one_default
149
+ ON portfolios(is_default)
150
+ WHERE is_default = 1;
151
+
152
+ CREATE TABLE IF NOT EXISTS portfolio_lots (
153
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
154
+ portfolio_id INTEGER NOT NULL,
155
+ instrument_id INTEGER NOT NULL,
156
+ quantity REAL NOT NULL,
157
+ avg_cost REAL NOT NULL,
158
+ currency TEXT NOT NULL,
159
+ opened_at TEXT,
160
+ notes TEXT,
161
+ source TEXT,
162
+ source_account_ref TEXT,
163
+ source_lot_id TEXT,
164
+ source_row_id TEXT,
165
+ source_metadata_json TEXT,
166
+ created_at TEXT NOT NULL,
167
+ updated_at TEXT NOT NULL,
168
+ FOREIGN KEY (portfolio_id) REFERENCES portfolios(id) ON DELETE CASCADE,
169
+ FOREIGN KEY (instrument_id) REFERENCES instruments(id) ON DELETE RESTRICT
170
+ );
171
+
172
+ CREATE INDEX IF NOT EXISTS idx_portfolio_lots_source_row
173
+ ON portfolio_lots(source, source_row_id)
174
+ WHERE source IS NOT NULL AND source_row_id IS NOT NULL;
175
+ CREATE INDEX IF NOT EXISTS idx_portfolio_lots_source_lot
176
+ ON portfolio_lots(source, source_lot_id)
177
+ WHERE source IS NOT NULL AND source_lot_id IS NOT NULL;
178
+
179
+ CREATE TABLE IF NOT EXISTS prediction_records (
180
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
181
+ instrument_id INTEGER NOT NULL,
182
+ direction TEXT NOT NULL,
183
+ conviction REAL NOT NULL,
184
+ entry_price REAL NOT NULL,
185
+ target_price REAL,
186
+ opened_at TEXT NOT NULL,
187
+ expires_at TEXT NOT NULL,
188
+ status TEXT NOT NULL,
189
+ resolved_at TEXT,
190
+ result_json TEXT,
191
+ created_at TEXT NOT NULL,
192
+ updated_at TEXT NOT NULL,
193
+ FOREIGN KEY (instrument_id) REFERENCES instruments(id) ON DELETE RESTRICT
194
+ );
195
+
196
+ CREATE TABLE IF NOT EXISTS alert_rules (
197
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
198
+ scope_type TEXT NOT NULL,
199
+ scope_id INTEGER,
200
+ instrument_id INTEGER,
201
+ condition_type TEXT NOT NULL,
202
+ condition_version INTEGER NOT NULL,
203
+ condition_json TEXT NOT NULL,
204
+ timeframe TEXT NOT NULL,
205
+ enabled INTEGER NOT NULL DEFAULT 1,
206
+ check_interval_seconds INTEGER,
207
+ next_check_at TEXT,
208
+ last_checked_at TEXT,
209
+ last_observed_json TEXT,
210
+ status TEXT NOT NULL DEFAULT 'active',
211
+ retrigger_mode TEXT NOT NULL DEFAULT 'recurring',
212
+ last_condition_state TEXT NOT NULL DEFAULT 'unknown',
213
+ rule_revision INTEGER NOT NULL DEFAULT 1,
214
+ arm_cycle_id INTEGER NOT NULL DEFAULT 1,
215
+ cooldown_seconds INTEGER,
216
+ last_triggered_at TEXT,
217
+ created_at TEXT NOT NULL,
218
+ updated_at TEXT NOT NULL,
219
+ FOREIGN KEY (instrument_id) REFERENCES instruments(id) ON DELETE RESTRICT
220
+ );
221
+
222
+ CREATE TABLE IF NOT EXISTS alert_events (
223
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
224
+ alert_rule_id INTEGER NOT NULL,
225
+ instrument_id INTEGER,
226
+ observed_value_json TEXT,
227
+ triggered_at TEXT NOT NULL,
228
+ observed_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
229
+ provider_data_at TEXT,
230
+ source_provider TEXT,
231
+ cache_status TEXT NOT NULL DEFAULT 'live',
232
+ data_delay_ms INTEGER,
233
+ trigger_source TEXT NOT NULL DEFAULT 'manual',
234
+ dedupe_key TEXT,
235
+ status TEXT NOT NULL,
236
+ message TEXT,
237
+ FOREIGN KEY (alert_rule_id) REFERENCES alert_rules(id) ON DELETE CASCADE,
238
+ FOREIGN KEY (instrument_id) REFERENCES instruments(id) ON DELETE RESTRICT
239
+ );
240
+
241
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_alert_events_dedupe
242
+ ON alert_events(dedupe_key)
243
+ WHERE dedupe_key IS NOT NULL;
244
+
245
+ CREATE TABLE IF NOT EXISTS alert_check_runs (
246
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
247
+ started_at TEXT NOT NULL,
248
+ completed_at TEXT,
249
+ status TEXT NOT NULL,
250
+ trigger_type TEXT NOT NULL,
251
+ checked_count INTEGER NOT NULL DEFAULT 0,
252
+ triggered_count INTEGER NOT NULL DEFAULT 0,
253
+ unavailable_count INTEGER NOT NULL DEFAULT 0,
254
+ owner_id TEXT,
255
+ error_json TEXT,
256
+ provider_status_json TEXT
257
+ );
258
+
259
+ CREATE TABLE IF NOT EXISTS report_templates (
260
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
261
+ name TEXT NOT NULL,
262
+ report_type TEXT NOT NULL,
263
+ cadence TEXT NOT NULL,
264
+ timezone TEXT NOT NULL,
265
+ local_time TEXT NOT NULL,
266
+ config_json TEXT NOT NULL,
267
+ enabled INTEGER NOT NULL DEFAULT 1,
268
+ last_run_at TEXT,
269
+ next_run_at TEXT,
270
+ created_at TEXT NOT NULL,
271
+ updated_at TEXT NOT NULL
272
+ );
273
+
274
+ CREATE TABLE IF NOT EXISTS report_runs (
275
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
276
+ template_id INTEGER,
277
+ started_at TEXT NOT NULL,
278
+ completed_at TEXT,
279
+ status TEXT NOT NULL,
280
+ trigger_type TEXT NOT NULL DEFAULT 'manual',
281
+ scheduled_for TEXT,
282
+ owner_id TEXT,
283
+ artifact_path TEXT,
284
+ summary_json TEXT,
285
+ errors_json TEXT,
286
+ FOREIGN KEY (template_id) REFERENCES report_templates(id) ON DELETE SET NULL
287
+ );
288
+
289
+ CREATE TABLE IF NOT EXISTS automation_runner_leases (
290
+ id INTEGER PRIMARY KEY CHECK (id = 1),
291
+ owner_id TEXT NOT NULL,
292
+ owner_kind TEXT NOT NULL,
293
+ acquired_at TEXT NOT NULL,
294
+ heartbeat_at TEXT NOT NULL,
295
+ expires_at TEXT NOT NULL
296
+ );
297
+
298
+ CREATE TABLE IF NOT EXISTS notification_events (
299
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
300
+ source_type TEXT NOT NULL,
301
+ source_id INTEGER,
302
+ severity TEXT NOT NULL,
303
+ title TEXT NOT NULL,
304
+ body TEXT NOT NULL,
305
+ payload_json TEXT,
306
+ status TEXT NOT NULL,
307
+ created_at TEXT NOT NULL,
308
+ acknowledged_at TEXT
309
+ );
310
+
311
+ CREATE TABLE IF NOT EXISTS notification_delivery_attempts (
312
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
313
+ notification_event_id INTEGER NOT NULL,
314
+ channel TEXT NOT NULL,
315
+ status TEXT NOT NULL,
316
+ attempted_at TEXT NOT NULL,
317
+ completed_at TEXT,
318
+ response_json TEXT,
319
+ error TEXT,
320
+ FOREIGN KEY (notification_event_id) REFERENCES notification_events(id) ON DELETE CASCADE
321
+ );
322
+
323
+ CREATE TABLE IF NOT EXISTS import_batches (
324
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
325
+ source TEXT NOT NULL,
326
+ source_label TEXT,
327
+ imported_at TEXT NOT NULL,
328
+ status TEXT NOT NULL,
329
+ raw_metadata_json TEXT
330
+ );
331
+
332
+ CREATE TABLE IF NOT EXISTS import_rows (
333
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
334
+ batch_id INTEGER NOT NULL,
335
+ row_type TEXT NOT NULL,
336
+ source_symbol TEXT,
337
+ source_row_id TEXT,
338
+ source_account_ref TEXT,
339
+ normalized_instrument_id INTEGER,
340
+ status TEXT NOT NULL,
341
+ error TEXT,
342
+ source_metadata_json TEXT,
343
+ raw_json TEXT,
344
+ FOREIGN KEY (batch_id) REFERENCES import_batches(id) ON DELETE CASCADE,
345
+ FOREIGN KEY (normalized_instrument_id) REFERENCES instruments(id) ON DELETE SET NULL
346
+ );
347
+
348
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_import_rows_batch_source_row
349
+ ON import_rows(batch_id, source_row_id)
350
+ WHERE source_row_id IS NOT NULL;
63
351
  `;
64
352
  export function initDatabase(path) {
65
353
  if (path !== ":memory:") {
@@ -67,11 +355,13 @@ export function initDatabase(path) {
67
355
  }
68
356
  const db = new Database(path);
69
357
  db.pragma("journal_mode = WAL");
358
+ db.pragma("busy_timeout = 5000");
70
359
  db.pragma("foreign_keys = ON");
71
360
  ensureCurrentSchema(db);
72
361
  return db;
73
362
  }
74
363
  export function initDefaultDatabase() {
364
+ ensureOpenCandleHomeDir();
75
365
  return initDatabase(getStateDbPath());
76
366
  }
77
367
  function ensureCurrentSchema(db) {
@@ -82,14 +372,35 @@ function ensureCurrentSchema(db) {
82
372
  db.exec(CURRENT_SCHEMA);
83
373
  return;
84
374
  }
375
+ if (currentVersion === 6) {
376
+ migrateV6ToV7(db);
377
+ return;
378
+ }
379
+ if (currentVersion === 5) {
380
+ migrateV5ToV6(db);
381
+ migrateV6ToV7(db);
382
+ return;
383
+ }
384
+ if (currentVersion === 4) {
385
+ migrateV4ToV5(db);
386
+ migrateV5ToV6(db);
387
+ migrateV6ToV7(db);
388
+ return;
389
+ }
85
390
  if (currentVersion === 3) {
86
391
  migrateV3ToV4(db);
392
+ migrateV4ToV5(db);
393
+ migrateV5ToV6(db);
394
+ migrateV6ToV7(db);
87
395
  return;
88
396
  }
89
- // Additive v2 → v3 → v4 migration without dropping data.
397
+ // Additive v2 → v3 → v4 → v5 → v6 migration without dropping data.
90
398
  if (currentVersion === 2) {
91
399
  migrateV2ToV3(db);
92
400
  migrateV3ToV4(db);
401
+ migrateV4ToV5(db);
402
+ migrateV5ToV6(db);
403
+ migrateV6ToV7(db);
93
404
  return;
94
405
  }
95
406
  // Any other mismatch (null first-run, or a foreign schema): reset.
@@ -106,10 +417,64 @@ function migrateV2ToV3(db) {
106
417
  db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(3);
107
418
  }
108
419
  function migrateV3ToV4(db) {
420
+ // CURRENT_SCHEMA indexes alert_events(dedupe_key); pre-v7 tables lack the column.
421
+ addColumnIfMissing(db, "alert_events", "dedupe_key", "TEXT");
422
+ db.exec(CURRENT_SCHEMA);
423
+ db.prepare("DELETE FROM schema_version").run();
424
+ db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(4);
425
+ }
426
+ function migrateV4ToV5(db) {
427
+ addColumnIfMissing(db, "alert_events", "dedupe_key", "TEXT");
428
+ db.exec(CURRENT_SCHEMA);
429
+ db.prepare("DELETE FROM schema_version").run();
430
+ db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(5);
431
+ }
432
+ function migrateV5ToV6(db) {
433
+ addColumnIfMissing(db, "import_rows", "source_row_id", "TEXT");
434
+ addColumnIfMissing(db, "import_rows", "source_account_ref", "TEXT");
435
+ addColumnIfMissing(db, "import_rows", "source_metadata_json", "TEXT");
436
+ db.prepare("DELETE FROM schema_version").run();
437
+ db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(6);
438
+ }
439
+ function migrateV6ToV7(db) {
440
+ addColumnIfMissing(db, "alert_rules", "status", "TEXT NOT NULL DEFAULT 'active'");
441
+ addColumnIfMissing(db, "alert_rules", "retrigger_mode", "TEXT NOT NULL DEFAULT 'recurring'");
442
+ addColumnIfMissing(db, "alert_rules", "last_condition_state", "TEXT NOT NULL DEFAULT 'unknown'");
443
+ addColumnIfMissing(db, "alert_rules", "rule_revision", "INTEGER NOT NULL DEFAULT 1");
444
+ addColumnIfMissing(db, "alert_rules", "arm_cycle_id", "INTEGER NOT NULL DEFAULT 1");
445
+ addColumnIfMissing(db, "alert_events", "observed_at", "TEXT");
446
+ addColumnIfMissing(db, "alert_events", "provider_data_at", "TEXT");
447
+ addColumnIfMissing(db, "alert_events", "source_provider", "TEXT");
448
+ addColumnIfMissing(db, "alert_events", "cache_status", "TEXT NOT NULL DEFAULT 'live'");
449
+ addColumnIfMissing(db, "alert_events", "data_delay_ms", "INTEGER");
450
+ addColumnIfMissing(db, "alert_events", "trigger_source", "TEXT NOT NULL DEFAULT 'manual'");
451
+ addColumnIfMissing(db, "alert_events", "dedupe_key", "TEXT");
452
+ addColumnIfMissing(db, "report_runs", "trigger_type", "TEXT NOT NULL DEFAULT 'manual'");
453
+ addColumnIfMissing(db, "report_runs", "scheduled_for", "TEXT");
454
+ addColumnIfMissing(db, "report_runs", "owner_id", "TEXT");
455
+ if (tableExists(db, "alert_events")) {
456
+ db.exec("UPDATE alert_events SET observed_at = triggered_at WHERE observed_at IS NULL");
457
+ }
109
458
  db.exec(CURRENT_SCHEMA);
110
459
  db.prepare("DELETE FROM schema_version").run();
111
460
  db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(CURRENT_SCHEMA_VERSION);
112
461
  }
462
+ function addColumnIfMissing(db, tableName, columnName, definition) {
463
+ const cols = db.pragma(`table_info(${tableName})`).map((c) => c.name);
464
+ if (cols.length === 0) {
465
+ if (!tableExists(db, tableName))
466
+ return;
467
+ }
468
+ if (!cols.includes(columnName)) {
469
+ db.exec(`ALTER TABLE ${tableName} ADD COLUMN ${columnName} ${definition}`);
470
+ }
471
+ }
472
+ function tableExists(db, tableName) {
473
+ const table = db
474
+ .prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?")
475
+ .get(tableName);
476
+ return table != null;
477
+ }
113
478
  function readSchemaVersion(db) {
114
479
  const table = db
115
480
  .prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'schema_version'")
@@ -122,6 +487,23 @@ function readSchemaVersion(db) {
122
487
  }
123
488
  function resetSchema(db) {
124
489
  db.exec(`
490
+ DROP TABLE IF EXISTS import_rows;
491
+ DROP TABLE IF EXISTS import_batches;
492
+ DROP TABLE IF EXISTS notification_delivery_attempts;
493
+ DROP TABLE IF EXISTS notification_events;
494
+ DROP TABLE IF EXISTS automation_runner_leases;
495
+ DROP TABLE IF EXISTS alert_check_runs;
496
+ DROP TABLE IF EXISTS report_runs;
497
+ DROP TABLE IF EXISTS report_templates;
498
+ DROP TABLE IF EXISTS alert_events;
499
+ DROP TABLE IF EXISTS alert_rules;
500
+ DROP TABLE IF EXISTS prediction_records;
501
+ DROP TABLE IF EXISTS portfolio_lots;
502
+ DROP TABLE IF EXISTS portfolios;
503
+ DROP TABLE IF EXISTS watchlist_items;
504
+ DROP TABLE IF EXISTS watchlists;
505
+ DROP TABLE IF EXISTS instrument_aliases;
506
+ DROP TABLE IF EXISTS instruments;
125
507
  DROP TABLE IF EXISTS recommendations;
126
508
  DROP TABLE IF EXISTS workflow_runs;
127
509
  DROP TABLE IF EXISTS user_preferences;
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEvF,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyVtB,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAExB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,uBAAuB,EAAE,CAAC;IAC1B,OAAO,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAqB;IAChD,MAAM,cAAc,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAE7C,IAAI,cAAc,KAAK,sBAAsB,EAAE,CAAC;QAC9C,8EAA8E;QAC9E,mDAAmD;QACnD,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,WAAW,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,MAAM,IAAI,GAAI,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAA6B,CAAC,GAAG,CAClF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACd,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC7F,CAAC;IAED,mEAAmE;IACnE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAExB,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/C,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7D,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAExB,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/C,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7D,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAExB,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/C,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC/D,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACpE,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAEtE,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/C,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,gCAAgC,CAAC,CAAC;IAClF,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,mCAAmC,CAAC,CAAC;IAC7F,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,sBAAsB,EAAE,iCAAiC,CAAC,CAAC;IACjG,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,4BAA4B,CAAC,CAAC;IACrF,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,4BAA4B,CAAC,CAAC;IAEpF,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAC9D,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACnE,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAClE,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,8BAA8B,CAAC,CAAC;IACvF,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IACnE,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,gCAAgC,CAAC,CAAC;IAC3F,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAE7D,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,gCAAgC,CAAC,CAAC;IACxF,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC/D,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAE1D,IAAI,WAAW,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAC1F,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAExB,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/C,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAqB,EACrB,SAAiB,EACjB,UAAkB,EAClB,UAAkB;IAElB,MAAM,IAAI,GAAI,EAAE,CAAC,MAAM,CAAC,cAAc,SAAS,GAAG,CAA6B,CAAC,GAAG,CACjF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACd,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC;YAAE,OAAO;IAC1C,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,IAAI,CAAC,eAAe,SAAS,eAAe,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAqB,EAAE,SAAiB;IAC3D,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CAAC,kEAAkE,CAAC;SAC3E,GAAG,CAAC,SAAS,CAAiC,CAAC;IAClD,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAqB;IAC9C,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CAAC,iFAAiF,CAAC;SAC1F,GAAG,EAAkC,CAAC;IACzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAE3D,CAAC;IACd,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,WAAW,CAAC,EAAqB;IACxC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;GAuBP,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxB,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,iEAAiE,CAAC;SAC1E,GAAG,EAA6B,CAAC;IACpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAqB;IACpD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAE3D,CAAC;IACd,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -25,11 +25,12 @@ interface WorkflowRunInput {
25
25
  defaultsUsedJson: string;
26
26
  outputSummary?: string;
27
27
  /**
28
- * Router route verbatim. One of `"workflow"` or `"fallback"`. Defaults to
28
+ * Router route verbatim. Legacy rows contain `"workflow"` or `"fallback"`;
29
+ * typed-router rows may contain canonical route kinds. Defaults to
29
30
  * `"workflow"` at the schema layer so legacy callers (rules-mode cascade)
30
31
  * don't need to pass anything. Router-mode callers MUST pass this explicitly.
31
32
  */
32
- turnType?: "workflow" | "fallback";
33
+ turnType?: string;
33
34
  }
34
35
  interface RecommendationInput {
35
36
  workflowRunId: number;
@@ -71,8 +71,7 @@ export class MemoryStorage {
71
71
  case "options_liquidity":
72
72
  case "liquidity_minimum":
73
73
  if (typeof raw === "string") {
74
- out.liquidityMinimum =
75
- raw === "high" ? "high_open_interest_and_tight_spread" : raw;
74
+ out.liquidityMinimum = raw === "high" ? "high_open_interest_and_tight_spread" : raw;
76
75
  }
77
76
  break;
78
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/memory/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/memory/storage.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,71 @@
1
1
  import { initDefaultDatabase } from "./sqlite.js";
2
- export function getDefaults(toolName, db = initDefaultDatabase()) {
3
- const rows = db
4
- .prepare(`SELECT param_path, value_json FROM tool_defaults WHERE tool_name = ? ORDER BY param_path`)
5
- .all(toolName);
6
- const defaults = {};
7
- for (const row of rows) {
8
- setPath(defaults, row.param_path, parseStoredValue(row.value_json));
9
- }
10
- return defaults;
2
+ export function getDefaults(toolName, db) {
3
+ const ownedDb = db == null;
4
+ const connection = db ?? initDefaultDatabase();
5
+ try {
6
+ const rows = connection
7
+ .prepare(`SELECT param_path, value_json FROM tool_defaults WHERE tool_name = ? ORDER BY param_path`)
8
+ .all(toolName);
9
+ const defaults = {};
10
+ for (const row of rows) {
11
+ setPath(defaults, row.param_path, parseStoredValue(row.value_json));
12
+ }
13
+ return defaults;
14
+ }
15
+ finally {
16
+ if (ownedDb)
17
+ connection.close();
18
+ }
11
19
  }
12
- export function getAllDefaults(db = initDefaultDatabase()) {
13
- const rows = db
14
- .prepare(`SELECT tool_name, param_path, value_json FROM tool_defaults ORDER BY tool_name, param_path`)
15
- .all();
16
- const groups = new Map();
17
- for (const row of rows) {
18
- const defaults = groups.get(row.tool_name) ?? {};
19
- setPath(defaults, row.param_path, parseStoredValue(row.value_json));
20
- groups.set(row.tool_name, defaults);
21
- }
22
- return groups;
20
+ export function getAllDefaults(db) {
21
+ const ownedDb = db == null;
22
+ const connection = db ?? initDefaultDatabase();
23
+ try {
24
+ const rows = connection
25
+ .prepare(`SELECT tool_name, param_path, value_json FROM tool_defaults ORDER BY tool_name, param_path`)
26
+ .all();
27
+ const groups = new Map();
28
+ for (const row of rows) {
29
+ const defaults = groups.get(row.tool_name) ?? {};
30
+ setPath(defaults, row.param_path, parseStoredValue(row.value_json));
31
+ groups.set(row.tool_name, defaults);
32
+ }
33
+ return groups;
34
+ }
35
+ finally {
36
+ if (ownedDb)
37
+ connection.close();
38
+ }
23
39
  }
24
- export function setDefault(toolName, paramPath, value, db = initDefaultDatabase()) {
25
- db.prepare(`INSERT INTO tool_defaults (tool_name, param_path, value_json, set_at)
26
- VALUES (?, ?, ?, ?)
27
- ON CONFLICT(tool_name, param_path) DO UPDATE SET
28
- value_json = excluded.value_json,
29
- set_at = excluded.set_at`).run(toolName, paramPath, JSON.stringify(value), new Date().toISOString());
40
+ export function setDefault(toolName, paramPath, value, db) {
41
+ const ownedDb = db == null;
42
+ const connection = db ?? initDefaultDatabase();
43
+ try {
44
+ connection
45
+ .prepare(`INSERT INTO tool_defaults (tool_name, param_path, value_json, set_at)
46
+ VALUES (?, ?, ?, ?)
47
+ ON CONFLICT(tool_name, param_path) DO UPDATE SET
48
+ value_json = excluded.value_json,
49
+ set_at = excluded.set_at`)
50
+ .run(toolName, paramPath, JSON.stringify(value), new Date().toISOString());
51
+ }
52
+ finally {
53
+ if (ownedDb)
54
+ connection.close();
55
+ }
30
56
  }
31
- export function clearDefault(toolName, paramPath, db = initDefaultDatabase()) {
32
- db.prepare(`DELETE FROM tool_defaults WHERE tool_name = ? AND param_path = ?`).run(toolName, paramPath);
57
+ export function clearDefault(toolName, paramPath, db) {
58
+ const ownedDb = db == null;
59
+ const connection = db ?? initDefaultDatabase();
60
+ try {
61
+ connection
62
+ .prepare(`DELETE FROM tool_defaults WHERE tool_name = ? AND param_path = ?`)
63
+ .run(toolName, paramPath);
64
+ }
65
+ finally {
66
+ if (ownedDb)
67
+ connection.close();
68
+ }
33
69
  }
34
70
  function parseStoredValue(valueJson) {
35
71
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-defaults.js","sourceRoot":"","sources":["../../src/memory/tool-defaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-defaults.js","sourceRoot":"","sources":["../../src/memory/tool-defaults.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,10 @@ export const WORKFLOW_RELEVANT_CATEGORIES = {
27
27
  comprehensive_analysis: ["investor_profile", "workflow_history"],
28
28
  single_asset_analysis: ["investor_profile"],
29
29
  general_finance_qa: ["investor_profile"],
30
+ workflow_dispatch: ["investor_profile", "workflow_history"],
31
+ agent_task: ["investor_profile", "workflow_history"],
32
+ clarification: ["investor_profile", "workflow_history"],
33
+ pass_through: [],
30
34
  unclassified: ["investor_profile"],
31
35
  };
32
36
  /** Check whether a memory entry is stale. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":"AAiBA,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAmC;IAClE,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAK,UAAU;IACzD,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;IAC1D,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAO,SAAS;IACzD,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAY,UAAU;CAC3D,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,eAAe,GAAmC;IAC7D,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,WAAW,EAAE,kBAAkB;IAC/B,cAAc,EAAE,kBAAkB;IAClC,uBAAuB,EAAE,kBAAkB;IAC3C,YAAY,EAAE,kBAAkB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,UAAU,EAAE,kBAAkB;IAC9B,SAAS,EAAE,kBAAkB;IAC7B,oBAAoB,EAAE,kBAAkB;IACxC,iBAAiB,EAAE,kBAAkB;CACtC,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC;IACnF,gBAAgB,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC;IAClF,cAAc,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxD,sBAAsB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChE,qBAAqB,EAAE,CAAC,kBAAkB,CAAC;IAC3C,kBAAkB,EAAE,CAAC,kBAAkB,CAAC;IACxC,YAAY,EAAE,CAAC,kBAAkB,CAAC;CACnC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,UAAU,OAAO,CAAC,KAAkB,EAAE,MAAY,IAAI,IAAI,EAAE;IAChE,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IACjE,OAAO,GAAG,GAAG,SAAS,CAAC;AACzB,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IAC7C,aAAa;IACb,cAAc;IACd,eAAe;IACf,cAAc;IACd,aAAa;IACb,WAAW;CACZ,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":"AAiBA,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAmC;IAClE,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;IACtD,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;IAC1D,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS;IACpD,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;CACjD,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,eAAe,GAAmC;IAC7D,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,WAAW,EAAE,kBAAkB;IAC/B,cAAc,EAAE,kBAAkB;IAClC,uBAAuB,EAAE,kBAAkB;IAC3C,YAAY,EAAE,kBAAkB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,UAAU,EAAE,kBAAkB;IAC9B,SAAS,EAAE,kBAAkB;IAC7B,oBAAoB,EAAE,kBAAkB;IACxC,iBAAiB,EAAE,kBAAkB;CACtC,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC;IACnF,gBAAgB,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC;IAClF,cAAc,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxD,sBAAsB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChE,qBAAqB,EAAE,CAAC,kBAAkB,CAAC;IAC3C,kBAAkB,EAAE,CAAC,kBAAkB,CAAC;IACxC,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAC3D,UAAU,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACpD,aAAa,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACvD,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC,kBAAkB,CAAC;CACnC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,UAAU,OAAO,CAAC,KAAkB,EAAE,MAAY,IAAI,IAAI,EAAE;IAChE,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IACjE,OAAO,GAAG,GAAG,SAAS,CAAC;AACzB,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IAC7C,aAAa;IACb,cAAc;IACd,eAAe;IACf,cAAc;IACd,aAAa;IACb,WAAW;CACZ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import "./infra/node-version.js";