opencandle 0.5.0 → 0.7.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 (574) hide show
  1. package/README.md +170 -186
  2. package/dist/analysts/contracts.d.ts +1 -3
  3. package/dist/analysts/contracts.js +1 -11
  4. package/dist/analysts/contracts.js.map +1 -1
  5. package/dist/analysts/orchestrator.d.ts +1 -3
  6. package/dist/analysts/orchestrator.js +1 -26
  7. package/dist/analysts/orchestrator.js.map +1 -1
  8. package/dist/cli.js +66 -7
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts +13 -3
  11. package/dist/config.js +25 -5
  12. package/dist/config.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/infra/cache.d.ts +8 -11
  17. package/dist/infra/cache.js +17 -15
  18. package/dist/infra/cache.js.map +1 -1
  19. package/dist/infra/http-client.d.ts +4 -1
  20. package/dist/infra/http-client.js +59 -6
  21. package/dist/infra/http-client.js.map +1 -1
  22. package/dist/infra/index.d.ts +2 -3
  23. package/dist/infra/index.js +2 -3
  24. package/dist/infra/index.js.map +1 -1
  25. package/dist/infra/native-dependencies.js +2 -2
  26. package/dist/infra/native-dependencies.js.map +1 -1
  27. package/dist/infra/node-version.js.map +1 -1
  28. package/dist/infra/opencandle-paths.d.ts +0 -3
  29. package/dist/infra/opencandle-paths.js +4 -11
  30. package/dist/infra/opencandle-paths.js.map +1 -1
  31. package/dist/infra/rate-limiter.js +12 -9
  32. package/dist/infra/rate-limiter.js.map +1 -1
  33. package/dist/market-state/alert-conditions.d.ts +34 -0
  34. package/dist/market-state/alert-conditions.js +23 -0
  35. package/dist/market-state/alert-conditions.js.map +1 -0
  36. package/dist/market-state/alert-runner.d.ts +55 -0
  37. package/dist/market-state/alert-runner.js +634 -0
  38. package/dist/market-state/alert-runner.js.map +1 -0
  39. package/dist/market-state/daily-report.d.ts +26 -0
  40. package/dist/market-state/daily-report.js +179 -0
  41. package/dist/market-state/daily-report.js.map +1 -0
  42. package/dist/market-state/local-automation-service.d.ts +25 -0
  43. package/dist/market-state/local-automation-service.js +119 -0
  44. package/dist/market-state/local-automation-service.js.map +1 -0
  45. package/dist/market-state/notification-delivery.d.ts +14 -0
  46. package/dist/market-state/notification-delivery.js +139 -0
  47. package/dist/market-state/notification-delivery.js.map +1 -0
  48. package/dist/market-state/resolve-for-mutation.d.ts +10 -0
  49. package/dist/market-state/resolve-for-mutation.js +15 -0
  50. package/dist/market-state/resolve-for-mutation.js.map +1 -0
  51. package/dist/market-state/resolve.d.ts +14 -0
  52. package/dist/market-state/resolve.js +89 -0
  53. package/dist/market-state/resolve.js.map +1 -0
  54. package/dist/market-state/service.d.ts +527 -0
  55. package/dist/market-state/service.js +1099 -0
  56. package/dist/market-state/service.js.map +1 -0
  57. package/dist/memory/index.d.ts +7 -7
  58. package/dist/memory/index.js +6 -6
  59. package/dist/memory/index.js.map +1 -1
  60. package/dist/memory/manager.js +11 -11
  61. package/dist/memory/manager.js.map +1 -1
  62. package/dist/memory/retrieval.js +7 -4
  63. package/dist/memory/retrieval.js.map +1 -1
  64. package/dist/memory/sqlite.js +385 -3
  65. package/dist/memory/sqlite.js.map +1 -1
  66. package/dist/memory/storage.js +1 -2
  67. package/dist/memory/storage.js.map +1 -1
  68. package/dist/memory/tool-defaults.js +64 -28
  69. package/dist/memory/tool-defaults.js.map +1 -1
  70. package/dist/memory/types.js.map +1 -1
  71. package/dist/monitor.d.ts +2 -0
  72. package/dist/monitor.js +104 -0
  73. package/dist/monitor.js.map +1 -0
  74. package/dist/onboarding/connect.d.ts +2 -2
  75. package/dist/onboarding/connect.js +13 -8
  76. package/dist/onboarding/connect.js.map +1 -1
  77. package/dist/onboarding/credential-interceptor.js +1 -1
  78. package/dist/onboarding/credential-interceptor.js.map +1 -1
  79. package/dist/onboarding/degradation-accumulator.js +1 -3
  80. package/dist/onboarding/degradation-accumulator.js.map +1 -1
  81. package/dist/onboarding/provider-status.d.ts +48 -0
  82. package/dist/onboarding/provider-status.js +285 -0
  83. package/dist/onboarding/provider-status.js.map +1 -0
  84. package/dist/onboarding/providers.d.ts +85 -8
  85. package/dist/onboarding/providers.js +83 -18
  86. package/dist/onboarding/providers.js.map +1 -1
  87. package/dist/onboarding/state.d.ts +1 -0
  88. package/dist/onboarding/state.js +5 -0
  89. package/dist/onboarding/state.js.map +1 -1
  90. package/dist/onboarding/tool-helpers.js +1 -1
  91. package/dist/onboarding/tool-helpers.js.map +1 -1
  92. package/dist/onboarding/tool-tags.d.ts +12 -1
  93. package/dist/onboarding/tool-tags.js +37 -5
  94. package/dist/onboarding/tool-tags.js.map +1 -1
  95. package/dist/onboarding/validation.d.ts +2 -2
  96. package/dist/onboarding/validation.js +1 -1
  97. package/dist/onboarding/validation.js.map +1 -1
  98. package/dist/pi/opencandle-extension.d.ts +8 -0
  99. package/dist/pi/opencandle-extension.js +502 -42
  100. package/dist/pi/opencandle-extension.js.map +1 -1
  101. package/dist/pi/session.d.ts +1 -1
  102. package/dist/pi/session.js +3 -1
  103. package/dist/pi/session.js.map +1 -1
  104. package/dist/pi/setup.js +8 -3
  105. package/dist/pi/setup.js.map +1 -1
  106. package/dist/pi/tool-adapter.d.ts +4 -1
  107. package/dist/pi/tool-adapter.js +10 -6
  108. package/dist/pi/tool-adapter.js.map +1 -1
  109. package/dist/prompts/context-builder.d.ts +1 -1
  110. package/dist/prompts/context-builder.js +20 -7
  111. package/dist/prompts/context-builder.js.map +1 -1
  112. package/dist/prompts/policy-cards.d.ts +1 -1
  113. package/dist/prompts/policy-cards.js +2 -2
  114. package/dist/prompts/policy-cards.js.map +1 -1
  115. package/dist/prompts/sections.d.ts +1 -1
  116. package/dist/prompts/symbol-preflight.d.ts +20 -0
  117. package/dist/prompts/symbol-preflight.js +49 -0
  118. package/dist/prompts/symbol-preflight.js.map +1 -0
  119. package/dist/prompts/workflow-prompts.d.ts +1 -1
  120. package/dist/prompts/workflow-prompts.js +54 -16
  121. package/dist/prompts/workflow-prompts.js.map +1 -1
  122. package/dist/providers/alpha-vantage.d.ts +1 -1
  123. package/dist/providers/alpha-vantage.js +26 -7
  124. package/dist/providers/alpha-vantage.js.map +1 -1
  125. package/dist/providers/coingecko.js +1 -1
  126. package/dist/providers/coingecko.js.map +1 -1
  127. package/dist/providers/errors.d.ts +5 -0
  128. package/dist/providers/errors.js +11 -0
  129. package/dist/providers/errors.js.map +1 -0
  130. package/dist/providers/exa-search.d.ts +2 -2
  131. package/dist/providers/exa-search.js +19 -11
  132. package/dist/providers/exa-search.js.map +1 -1
  133. package/dist/providers/external-tool-error.d.ts +10 -0
  134. package/dist/providers/external-tool-error.js +21 -0
  135. package/dist/providers/external-tool-error.js.map +1 -0
  136. package/dist/providers/fear-greed.js +1 -1
  137. package/dist/providers/fear-greed.js.map +1 -1
  138. package/dist/providers/finnhub.js +3 -5
  139. package/dist/providers/finnhub.js.map +1 -1
  140. package/dist/providers/fred.js +2 -2
  141. package/dist/providers/fred.js.map +1 -1
  142. package/dist/providers/index.d.ts +7 -6
  143. package/dist/providers/index.js +6 -5
  144. package/dist/providers/index.js.map +1 -1
  145. package/dist/providers/reddit-cli.d.ts +36 -0
  146. package/dist/providers/reddit-cli.js +201 -0
  147. package/dist/providers/reddit-cli.js.map +1 -0
  148. package/dist/providers/reddit.d.ts +1 -1
  149. package/dist/providers/reddit.js +9 -37
  150. package/dist/providers/reddit.js.map +1 -1
  151. package/dist/providers/sec-edgar.d.ts +1 -0
  152. package/dist/providers/sec-edgar.js +12 -4
  153. package/dist/providers/sec-edgar.js.map +1 -1
  154. package/dist/providers/tradingview.d.ts +47 -0
  155. package/dist/providers/tradingview.js +275 -0
  156. package/dist/providers/tradingview.js.map +1 -0
  157. package/dist/providers/twitter-cli.d.ts +40 -0
  158. package/dist/providers/twitter-cli.js +153 -0
  159. package/dist/providers/twitter-cli.js.map +1 -0
  160. package/dist/providers/twitter.d.ts +0 -8
  161. package/dist/providers/twitter.js +8 -60
  162. package/dist/providers/twitter.js.map +1 -1
  163. package/dist/providers/web-search.js +26 -12
  164. package/dist/providers/web-search.js.map +1 -1
  165. package/dist/providers/with-fallback.js +4 -2
  166. package/dist/providers/with-fallback.js.map +1 -1
  167. package/dist/providers/wrap-provider.d.ts +2 -3
  168. package/dist/providers/wrap-provider.js +44 -8
  169. package/dist/providers/wrap-provider.js.map +1 -1
  170. package/dist/providers/yahoo-finance.d.ts +1 -1
  171. package/dist/providers/yahoo-finance.js +153 -48
  172. package/dist/providers/yahoo-finance.js.map +1 -1
  173. package/dist/routing/classify-intent.d.ts +6 -0
  174. package/dist/routing/classify-intent.js +78 -7
  175. package/dist/routing/classify-intent.js.map +1 -1
  176. package/dist/routing/defaults.d.ts +1 -1
  177. package/dist/routing/entity-extractor.d.ts +1 -0
  178. package/dist/routing/entity-extractor.js +234 -29
  179. package/dist/routing/entity-extractor.js.map +1 -1
  180. package/dist/routing/fund-symbols.d.ts +2 -0
  181. package/dist/routing/fund-symbols.js +55 -0
  182. package/dist/routing/fund-symbols.js.map +1 -0
  183. package/dist/routing/horizon.d.ts +1 -0
  184. package/dist/routing/horizon.js +10 -0
  185. package/dist/routing/horizon.js.map +1 -0
  186. package/dist/routing/index.d.ts +10 -10
  187. package/dist/routing/index.js +6 -6
  188. package/dist/routing/index.js.map +1 -1
  189. package/dist/routing/planning.d.ts +2 -2
  190. package/dist/routing/planning.js +65 -34
  191. package/dist/routing/planning.js.map +1 -1
  192. package/dist/routing/route-manifest.d.ts +2 -2
  193. package/dist/routing/route-manifest.js +25 -4
  194. package/dist/routing/route-manifest.js.map +1 -1
  195. package/dist/routing/router-llm-client.js.map +1 -1
  196. package/dist/routing/router-prompt.js +7 -9
  197. package/dist/routing/router-prompt.js.map +1 -1
  198. package/dist/routing/router-types.d.ts +1 -0
  199. package/dist/routing/router.js +137 -22
  200. package/dist/routing/router.js.map +1 -1
  201. package/dist/routing/slot-resolver.d.ts +1 -1
  202. package/dist/routing/slot-resolver.js +2 -4
  203. package/dist/routing/slot-resolver.js.map +1 -1
  204. package/dist/routing/symbol-disambiguator.d.ts +11 -0
  205. package/dist/routing/symbol-disambiguator.js +52 -0
  206. package/dist/routing/symbol-disambiguator.js.map +1 -0
  207. package/dist/routing/turn-context.d.ts +1 -1
  208. package/dist/routing/turn-context.js +1 -1
  209. package/dist/routing/turn-context.js.map +1 -1
  210. package/dist/routing/types.d.ts +2 -0
  211. package/dist/runtime/answer-contracts.d.ts +1 -1
  212. package/dist/runtime/answer-contracts.js +48 -9
  213. package/dist/runtime/answer-contracts.js.map +1 -1
  214. package/dist/runtime/artifact-contracts.js.map +1 -1
  215. package/dist/runtime/planning-evidence.js +47 -26
  216. package/dist/runtime/planning-evidence.js.map +1 -1
  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 +13 -5
  224. package/dist/runtime/session-coordinator.js +160 -20
  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 +7 -5
  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 +10 -11
  243. package/dist/sentiment/index.js +10 -20
  244. package/dist/sentiment/index.js.map +1 -1
  245. package/dist/sentiment/insights.d.ts +17 -0
  246. package/dist/sentiment/insights.js +206 -0
  247. package/dist/sentiment/insights.js.map +1 -0
  248. package/dist/sentiment/keywords.js +26 -4
  249. package/dist/sentiment/keywords.js.map +1 -1
  250. package/dist/sentiment/pipeline.d.ts +2 -2
  251. package/dist/sentiment/pipeline.js +14 -2
  252. package/dist/sentiment/pipeline.js.map +1 -1
  253. package/dist/sentiment/scorer.d.ts +2 -0
  254. package/dist/sentiment/scorer.js +11 -2
  255. package/dist/sentiment/scorer.js.map +1 -1
  256. package/dist/sentiment/store.d.ts +1 -1
  257. package/dist/sentiment/store.js +1 -1
  258. package/dist/sentiment/store.js.map +1 -1
  259. package/dist/sentiment/trends.d.ts +1 -1
  260. package/dist/sentiment/trends.js.map +1 -1
  261. package/dist/sentiment/types.d.ts +2 -0
  262. package/dist/sentiment/types.js.map +1 -1
  263. package/dist/system-prompt.js +6 -9
  264. package/dist/system-prompt.js.map +1 -1
  265. package/dist/tool-kit.d.ts +7 -7
  266. package/dist/tool-kit.js +4 -4
  267. package/dist/tool-kit.js.map +1 -1
  268. package/dist/tools/fundamentals/company-overview.js +11 -6
  269. package/dist/tools/fundamentals/company-overview.js.map +1 -1
  270. package/dist/tools/fundamentals/comps.js +18 -9
  271. package/dist/tools/fundamentals/comps.js.map +1 -1
  272. package/dist/tools/fundamentals/dcf.js +23 -11
  273. package/dist/tools/fundamentals/dcf.js.map +1 -1
  274. package/dist/tools/fundamentals/earnings.js +8 -3
  275. package/dist/tools/fundamentals/earnings.js.map +1 -1
  276. package/dist/tools/fundamentals/financials.js +8 -3
  277. package/dist/tools/fundamentals/financials.js.map +1 -1
  278. package/dist/tools/fundamentals/sec-filings.js +21 -6
  279. package/dist/tools/fundamentals/sec-filings.js.map +1 -1
  280. package/dist/tools/index.d.ts +27 -20
  281. package/dist/tools/index.js +55 -43
  282. package/dist/tools/index.js.map +1 -1
  283. package/dist/tools/interaction/ask-user.js +15 -3
  284. package/dist/tools/interaction/ask-user.js.map +1 -1
  285. package/dist/tools/macro/fear-greed.js.map +1 -1
  286. package/dist/tools/macro/fred-data.d.ts +1 -1
  287. package/dist/tools/macro/fred-data.js +17 -6
  288. package/dist/tools/macro/fred-data.js.map +1 -1
  289. package/dist/tools/market/crypto-history.js +3 -1
  290. package/dist/tools/market/crypto-history.js.map +1 -1
  291. package/dist/tools/market/crypto-price.js +3 -1
  292. package/dist/tools/market/crypto-price.js.map +1 -1
  293. package/dist/tools/market/screen-stocks.d.ts +18 -0
  294. package/dist/tools/market/screen-stocks.js +252 -0
  295. package/dist/tools/market/screen-stocks.js.map +1 -0
  296. package/dist/tools/market/search-ticker.js +160 -8
  297. package/dist/tools/market/search-ticker.js.map +1 -1
  298. package/dist/tools/market/stock-history.d.ts +2 -2
  299. package/dist/tools/market/stock-history.js +26 -7
  300. package/dist/tools/market/stock-history.js.map +1 -1
  301. package/dist/tools/market/stock-quote.js +5 -3
  302. package/dist/tools/market/stock-quote.js.map +1 -1
  303. package/dist/tools/options/greeks.js +1 -1
  304. package/dist/tools/options/greeks.js.map +1 -1
  305. package/dist/tools/options/option-chain.js +19 -6
  306. package/dist/tools/options/option-chain.js.map +1 -1
  307. package/dist/tools/portfolio/alerts.d.ts +15 -0
  308. package/dist/tools/portfolio/alerts.js +357 -0
  309. package/dist/tools/portfolio/alerts.js.map +1 -0
  310. package/dist/tools/portfolio/correlation.d.ts +1 -1
  311. package/dist/tools/portfolio/correlation.js +33 -13
  312. package/dist/tools/portfolio/correlation.js.map +1 -1
  313. package/dist/tools/portfolio/daily-report.d.ts +8 -0
  314. package/dist/tools/portfolio/daily-report.js +83 -0
  315. package/dist/tools/portfolio/daily-report.js.map +1 -0
  316. package/dist/tools/portfolio/holdings-overlap.js +10 -3
  317. package/dist/tools/portfolio/holdings-overlap.js.map +1 -1
  318. package/dist/tools/portfolio/notifications.d.ts +7 -0
  319. package/dist/tools/portfolio/notifications.js +43 -0
  320. package/dist/tools/portfolio/notifications.js.map +1 -0
  321. package/dist/tools/portfolio/predictions.d.ts +12 -6
  322. package/dist/tools/portfolio/predictions.js +337 -87
  323. package/dist/tools/portfolio/predictions.js.map +1 -1
  324. package/dist/tools/portfolio/risk-analysis.d.ts +1 -1
  325. package/dist/tools/portfolio/risk-analysis.js +45 -6
  326. package/dist/tools/portfolio/risk-analysis.js.map +1 -1
  327. package/dist/tools/portfolio/tracker.d.ts +4 -3
  328. package/dist/tools/portfolio/tracker.js +246 -101
  329. package/dist/tools/portfolio/tracker.js.map +1 -1
  330. package/dist/tools/portfolio/watchlist.d.ts +6 -4
  331. package/dist/tools/portfolio/watchlist.js +208 -108
  332. package/dist/tools/portfolio/watchlist.js.map +1 -1
  333. package/dist/tools/sentiment/insight-format.d.ts +2 -0
  334. package/dist/tools/sentiment/insight-format.js +36 -0
  335. package/dist/tools/sentiment/insight-format.js.map +1 -0
  336. package/dist/tools/sentiment/query-match.d.ts +3 -0
  337. package/dist/tools/sentiment/query-match.js +113 -0
  338. package/dist/tools/sentiment/query-match.js.map +1 -0
  339. package/dist/tools/sentiment/reddit-sentiment.d.ts +12 -1
  340. package/dist/tools/sentiment/reddit-sentiment.js +266 -107
  341. package/dist/tools/sentiment/reddit-sentiment.js.map +1 -1
  342. package/dist/tools/sentiment/sentiment-summary.d.ts +9 -1
  343. package/dist/tools/sentiment/sentiment-summary.js +223 -205
  344. package/dist/tools/sentiment/sentiment-summary.js.map +1 -1
  345. package/dist/tools/sentiment/sentiment-trend.d.ts +1 -1
  346. package/dist/tools/sentiment/sentiment-trend.js +12 -2
  347. package/dist/tools/sentiment/sentiment-trend.js.map +1 -1
  348. package/dist/tools/sentiment/twitter-sentiment.d.ts +11 -1
  349. package/dist/tools/sentiment/twitter-sentiment.js +188 -58
  350. package/dist/tools/sentiment/twitter-sentiment.js.map +1 -1
  351. package/dist/tools/sentiment/untrusted-text.d.ts +2 -0
  352. package/dist/tools/sentiment/untrusted-text.js +17 -0
  353. package/dist/tools/sentiment/untrusted-text.js.map +1 -0
  354. package/dist/tools/sentiment/web-search.js +9 -13
  355. package/dist/tools/sentiment/web-search.js.map +1 -1
  356. package/dist/tools/sentiment/web-sentiment.js +19 -3
  357. package/dist/tools/sentiment/web-sentiment.js.map +1 -1
  358. package/dist/tools/technical/backtest.d.ts +1 -1
  359. package/dist/tools/technical/backtest.js +27 -20
  360. package/dist/tools/technical/backtest.js.map +1 -1
  361. package/dist/tools/technical/indicators.js +23 -5
  362. package/dist/tools/technical/indicators.js.map +1 -1
  363. package/dist/types/index.d.ts +3 -3
  364. package/dist/types/index.js.map +1 -1
  365. package/dist/types/market.d.ts +1 -0
  366. package/dist/types/portfolio.d.ts +14 -4
  367. package/dist/types/sentiment.d.ts +52 -0
  368. package/dist/workflows/compare-assets.d.ts +0 -3
  369. package/dist/workflows/compare-assets.js +20 -11
  370. package/dist/workflows/compare-assets.js.map +1 -1
  371. package/dist/workflows/index.d.ts +3 -4
  372. package/dist/workflows/index.js +3 -3
  373. package/dist/workflows/index.js.map +1 -1
  374. package/dist/workflows/options-screener.d.ts +0 -3
  375. package/dist/workflows/options-screener.js +4 -11
  376. package/dist/workflows/options-screener.js.map +1 -1
  377. package/dist/workflows/portfolio-builder.d.ts +0 -3
  378. package/dist/workflows/portfolio-builder.js +0 -8
  379. package/dist/workflows/portfolio-builder.js.map +1 -1
  380. package/gui/server/ask-user-bridge.ts +1 -1
  381. package/gui/server/automation-heartbeat.ts +97 -0
  382. package/gui/server/background-quotes.ts +97 -1
  383. package/gui/server/chat-event-adapter.ts +32 -10
  384. package/gui/server/chat-run-session.ts +16 -0
  385. package/gui/server/invoke-tool.ts +160 -3
  386. package/gui/server/live-chat-event-adapter.ts +21 -6
  387. package/gui/server/market-state-api.ts +315 -0
  388. package/gui/server/model-setup.ts +156 -2
  389. package/gui/server/private-api-access.ts +62 -0
  390. package/gui/server/projector.ts +18 -9
  391. package/gui/server/prompt-observation.ts +4 -7
  392. package/gui/server/quote-snapshot-store.ts +50 -0
  393. package/gui/server/server.ts +218 -451
  394. package/gui/server/session-actions.ts +186 -1
  395. package/gui/server/shutdown.ts +47 -0
  396. package/gui/server/tool-invoke-ack.ts +49 -0
  397. package/gui/server/tool-metadata.ts +101 -24
  398. package/gui/server/websocket.ts +13 -3
  399. package/gui/server/writer-lock.ts +6 -2
  400. package/gui/server/ws-hub.ts +311 -0
  401. package/gui/shared/chat-events.ts +16 -1
  402. package/gui/shared/event-reducer.ts +24 -6
  403. package/gui/web/dist/assets/CatalogOverlay-CgeY5Pkp.js +1 -0
  404. package/gui/web/dist/assets/index-C6W_2eAn.js +69 -0
  405. package/gui/web/dist/assets/index-hwbx24a5.css +1 -0
  406. package/gui/web/dist/index.html +2 -2
  407. package/package.json +9 -6
  408. package/src/analysts/contracts.ts +10 -23
  409. package/src/analysts/orchestrator.ts +8 -43
  410. package/src/cli.ts +76 -12
  411. package/src/config.ts +44 -9
  412. package/src/index.ts +1 -1
  413. package/src/infra/cache.ts +41 -30
  414. package/src/infra/http-client.ts +72 -6
  415. package/src/infra/index.ts +6 -10
  416. package/src/infra/native-dependencies.ts +8 -3
  417. package/src/infra/node-version.ts +3 -1
  418. package/src/infra/opencandle-paths.ts +3 -14
  419. package/src/infra/rate-limiter.ts +22 -19
  420. package/src/market-state/alert-conditions.ts +82 -0
  421. package/src/market-state/alert-runner.ts +863 -0
  422. package/src/market-state/daily-report.ts +247 -0
  423. package/src/market-state/local-automation-service.ts +162 -0
  424. package/src/market-state/notification-delivery.ts +158 -0
  425. package/src/market-state/resolve-for-mutation.ts +24 -0
  426. package/src/market-state/resolve.ts +112 -0
  427. package/src/market-state/service.ts +2344 -0
  428. package/src/memory/index.ts +7 -7
  429. package/src/memory/manager.ts +14 -16
  430. package/src/memory/retrieval.ts +8 -7
  431. package/src/memory/sqlite.ts +407 -6
  432. package/src/memory/storage.ts +5 -15
  433. package/src/memory/tool-defaults.ts +60 -39
  434. package/src/memory/types.ts +3 -3
  435. package/src/monitor.ts +121 -0
  436. package/src/onboarding/connect.ts +24 -31
  437. package/src/onboarding/credential-interceptor.ts +3 -15
  438. package/src/onboarding/degradation-accumulator.ts +1 -3
  439. package/src/onboarding/provider-status.ts +410 -0
  440. package/src/onboarding/providers.ts +144 -45
  441. package/src/onboarding/state.ts +13 -15
  442. package/src/onboarding/tool-helpers.ts +2 -9
  443. package/src/onboarding/tool-tags.ts +51 -8
  444. package/src/onboarding/validation.ts +16 -22
  445. package/src/pi/opencandle-extension.ts +643 -101
  446. package/src/pi/session.ts +7 -5
  447. package/src/pi/setup.ts +61 -43
  448. package/src/pi/tool-adapter.ts +19 -6
  449. package/src/prompts/context-builder.ts +24 -13
  450. package/src/prompts/policy-cards.ts +3 -3
  451. package/src/prompts/sections.ts +1 -1
  452. package/src/prompts/symbol-preflight.ts +80 -0
  453. package/src/prompts/workflow-prompts.ts +77 -28
  454. package/src/providers/alpha-vantage.ts +58 -39
  455. package/src/providers/coingecko.ts +2 -5
  456. package/src/providers/errors.ts +9 -0
  457. package/src/providers/exa-search.ts +24 -22
  458. package/src/providers/external-tool-error.ts +20 -0
  459. package/src/providers/fear-greed.ts +1 -1
  460. package/src/providers/finnhub.ts +7 -6
  461. package/src/providers/fred.ts +3 -3
  462. package/src/providers/index.ts +14 -6
  463. package/src/providers/reddit-cli.ts +317 -0
  464. package/src/providers/reddit.ts +14 -59
  465. package/src/providers/sec-edgar.ts +20 -6
  466. package/src/providers/tradingview.ts +399 -0
  467. package/src/providers/twitter-cli.ts +233 -0
  468. package/src/providers/twitter.ts +8 -79
  469. package/src/providers/web-search.ts +30 -20
  470. package/src/providers/with-fallback.ts +8 -7
  471. package/src/providers/wrap-provider.ts +49 -10
  472. package/src/providers/yahoo-finance.ts +204 -66
  473. package/src/routing/classify-intent.ts +101 -10
  474. package/src/routing/defaults.ts +1 -1
  475. package/src/routing/entity-extractor.ts +287 -38
  476. package/src/routing/fund-symbols.ts +58 -0
  477. package/src/routing/horizon.ts +7 -0
  478. package/src/routing/index.ts +48 -48
  479. package/src/routing/planning.ts +145 -53
  480. package/src/routing/route-manifest.ts +37 -15
  481. package/src/routing/router-llm-client.ts +4 -4
  482. package/src/routing/router-prompt.ts +15 -19
  483. package/src/routing/router-types.ts +2 -5
  484. package/src/routing/router.ts +251 -53
  485. package/src/routing/slot-resolver.ts +34 -11
  486. package/src/routing/symbol-disambiguator.ts +72 -0
  487. package/src/routing/turn-context.ts +6 -9
  488. package/src/routing/types.ts +2 -0
  489. package/src/runtime/answer-contracts.ts +105 -45
  490. package/src/runtime/artifact-contracts.ts +2 -1
  491. package/src/runtime/planning-evidence.ts +157 -66
  492. package/src/runtime/prompt-step.ts +1 -16
  493. package/src/runtime/run-context.ts +12 -2
  494. package/src/runtime/session-coordinator.ts +238 -63
  495. package/src/runtime/session-title.ts +60 -0
  496. package/src/runtime/tool-defaults-wrapper.ts +13 -5
  497. package/src/runtime/validation.ts +1 -4
  498. package/src/runtime/workflow-events.ts +7 -7
  499. package/src/runtime/workflow-runner.ts +5 -11
  500. package/src/sentiment/adapters/finnhub.ts +7 -2
  501. package/src/sentiment/adapters/reddit.ts +2 -2
  502. package/src/sentiment/adapters/twitter.ts +1 -1
  503. package/src/sentiment/adapters/web.ts +1 -1
  504. package/src/sentiment/index.ts +17 -26
  505. package/src/sentiment/insights.ts +269 -0
  506. package/src/sentiment/keywords.ts +26 -4
  507. package/src/sentiment/pipeline.ts +28 -5
  508. package/src/sentiment/scorer.ts +13 -2
  509. package/src/sentiment/store.ts +2 -2
  510. package/src/sentiment/trends.ts +9 -3
  511. package/src/sentiment/types.ts +8 -4
  512. package/src/system-prompt.ts +6 -9
  513. package/src/tool-kit.ts +10 -9
  514. package/src/tools/fundamentals/company-overview.ts +19 -9
  515. package/src/tools/fundamentals/comps.ts +68 -55
  516. package/src/tools/fundamentals/dcf.ts +145 -95
  517. package/src/tools/fundamentals/earnings.ts +16 -6
  518. package/src/tools/fundamentals/financials.ts +16 -7
  519. package/src/tools/fundamentals/sec-filings.ts +37 -16
  520. package/src/tools/index.ts +56 -43
  521. package/src/tools/interaction/ask-user.ts +22 -10
  522. package/src/tools/macro/fear-greed.ts +1 -1
  523. package/src/tools/macro/fred-data.ts +58 -46
  524. package/src/tools/market/crypto-history.ts +8 -3
  525. package/src/tools/market/crypto-price.ts +6 -6
  526. package/src/tools/market/screen-stocks.ts +279 -0
  527. package/src/tools/market/search-ticker.ts +218 -17
  528. package/src/tools/market/stock-history.ts +37 -12
  529. package/src/tools/market/stock-quote.ts +10 -7
  530. package/src/tools/options/greeks.ts +5 -5
  531. package/src/tools/options/option-chain.ts +41 -17
  532. package/src/tools/portfolio/alerts.ts +457 -0
  533. package/src/tools/portfolio/correlation.ts +47 -20
  534. package/src/tools/portfolio/daily-report.ts +101 -0
  535. package/src/tools/portfolio/holdings-overlap.ts +31 -15
  536. package/src/tools/portfolio/notifications.ts +45 -0
  537. package/src/tools/portfolio/predictions.ts +406 -106
  538. package/src/tools/portfolio/risk-analysis.ts +46 -7
  539. package/src/tools/portfolio/tracker.ts +270 -109
  540. package/src/tools/portfolio/watchlist.ts +250 -121
  541. package/src/tools/sentiment/insight-format.ts +50 -0
  542. package/src/tools/sentiment/query-match.ts +117 -0
  543. package/src/tools/sentiment/reddit-sentiment.ts +360 -121
  544. package/src/tools/sentiment/sentiment-summary.ts +302 -235
  545. package/src/tools/sentiment/sentiment-trend.ts +24 -7
  546. package/src/tools/sentiment/twitter-sentiment.ts +264 -73
  547. package/src/tools/sentiment/untrusted-text.ts +21 -0
  548. package/src/tools/sentiment/web-search.ts +21 -18
  549. package/src/tools/sentiment/web-sentiment.ts +30 -10
  550. package/src/tools/technical/backtest.ts +32 -22
  551. package/src/tools/technical/indicators.ts +39 -14
  552. package/src/types/index.ts +8 -3
  553. package/src/types/market.ts +1 -0
  554. package/src/types/portfolio.ts +14 -4
  555. package/src/types/sentiment.ts +61 -2
  556. package/src/workflows/compare-assets.ts +33 -21
  557. package/src/workflows/index.ts +3 -4
  558. package/src/workflows/options-screener.ts +27 -29
  559. package/src/workflows/portfolio-builder.ts +34 -27
  560. package/dist/infra/browser.d.ts +0 -35
  561. package/dist/infra/browser.js +0 -103
  562. package/dist/infra/browser.js.map +0 -1
  563. package/dist/tools/interaction/twitter-login.d.ts +0 -8
  564. package/dist/tools/interaction/twitter-login.js +0 -77
  565. package/dist/tools/interaction/twitter-login.js.map +0 -1
  566. package/dist/workflows/types.d.ts +0 -4
  567. package/dist/workflows/types.js +0 -2
  568. package/dist/workflows/types.js.map +0 -1
  569. package/gui/web/dist/assets/CatalogOverlay-Bmp6Knu7.js +0 -1
  570. package/gui/web/dist/assets/index-Bxt9QpLX.css +0 -1
  571. package/gui/web/dist/assets/index-CZ9DHZYy.js +0 -67
  572. package/src/infra/browser.ts +0 -111
  573. package/src/tools/interaction/twitter-login.ts +0 -93
  574. package/src/workflows/types.ts +0 -4
package/README.md CHANGED
@@ -1,125 +1,89 @@
1
1
  # OpenCandle
2
2
 
3
- OpenCandle is an open source financial investigator built with TypeScript and Pi. Pi is the bundled local agent runtime that provides the terminal UI, model auth, session storage, slash commands, and extension hooks. OpenCandle adds finance research on top: it understands what kind of financial question you asked, gathers market, macro, options, fundamentals, filings, sentiment, and portfolio evidence from real sources, then turns that evidence into a risk-aware answer.
3
+ ```bash
4
+ npx opencandle
5
+ # or
6
+ npx opencandle gui
7
+ ```
4
8
 
5
- This repository is useful in three ways:
9
+ OpenCandle is an open source financial investigator: a terminal agent and local browser workbench for market research that starts from real provider data, shows source gaps, and keeps risk visible.
6
10
 
7
- - Run `opencandle` as an interactive CLI for market research
8
- - Open the local GUI for chat, tool discovery, provider status, and session history
9
- - Extend OpenCandle with new tools, providers, or Pi-compatible add-on packages
11
+ [Docs](./docs/index.md) | [First run](./docs/first-run.md) | [GUI quickstart](./docs/gui-quickstart.md) | [Data sources](./docs/data-sources.md) | [Build a tool](./docs/build-a-tool.md)
10
12
 
11
- ![OpenCandle terminal demo](./assets/demo.gif)
13
+ ## See It Work
12
14
 
13
- ## Why OpenCandle?
15
+ ### Terminal UI
14
16
 
15
- Financial research gets messy when evidence is scattered across quote pages, filings, macro dashboards, sentiment feeds, and ad hoc spreadsheets. OpenCandle gives the agent explicit tools, provider boundaries, and local state so research stays inspectable: gather the data first, show the gaps, then synthesize without pretending uncertainty disappeared.
17
+ [![OpenCandle terminal UI demo](./assets/opencandle-tui-poster.png)](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-tui.mp4)
16
18
 
17
- OpenCandle is strongest when the answer depends on live or inspectable financial evidence: quotes, histories, options chains, filings, macro series, sentiment, local portfolio state, and source-gap disclosure. It can also answer educational questions without forcing unnecessary data lookups. OpenCandle's job is to make financial research auditable and useful without pretending uncertainty disappeared.
19
+ [Watch the terminal UI demo](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-tui.mp4) | [Download MP4](https://github.com/Kahtaf/OpenCandle/raw/refs/heads/main/assets/opencandle-tui.mp4)
18
20
 
19
- ## What You Can Use It For
21
+ ### Local GUI
20
22
 
21
- - Quote and history lookups for stocks and crypto
22
- - Options chains with locally computed Greeks
23
- - Company fundamentals, earnings, and SEC filings
24
- - FRED macro series and the alternative.me crypto Fear & Greed index
25
- - Reddit-based sentiment and discussion lookups
26
- - Portfolio tracking, watchlists, correlation, and risk analysis
27
- - Multi-step workflows such as `/analyze NVDA`
28
- - Clarifying follow-ups when a ticker, goal, horizon, or risk profile is ambiguous
29
- - Source-gap and stale-data warnings when a provider is missing, delayed, or unavailable
23
+ [![OpenCandle local GUI demo](./assets/opencandle-gui-poster.png)](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-gui.mp4)
30
24
 
31
- OpenCandle is designed to fetch and format data. The model handles synthesis. Tool code should not invent financial conclusions or hardcode market numbers.
25
+ [Watch the local GUI demo](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-gui.mp4) | [Download MP4](https://github.com/Kahtaf/OpenCandle/raw/refs/heads/main/assets/opencandle-gui.mp4)
32
26
 
33
- OpenCandle is read-only research software. It does not place trades, route orders, or provide financial advice.
27
+ ## Why OpenCandle
34
28
 
35
- ## Install And Run
29
+ Most finance agents answer too early. OpenCandle is built around the opposite loop: understand the question, gather market evidence, disclose missing or stale data, then synthesize.
36
30
 
37
- Requires Node.js `^20.19.0`, `^22.12.0`, or `>=24.0.0 <27`.
31
+ Use it when a question needs inspectable evidence:
38
32
 
39
- ### CLI
33
+ - What is this stock or crypto trading at right now?
34
+ - How do two companies compare across price action, fundamentals, filings, and sentiment?
35
+ - What does the options chain imply, and where are the Greeks?
36
+ - How exposed is my local portfolio or watchlist?
37
+ - What macro series, filings, or sentiment sources support the answer?
40
38
 
41
- ```bash
42
- npm install -g opencandle
43
- opencandle
39
+ OpenCandle is read-only research software. It does not place trades, route orders, or provide financial advice.
44
40
 
45
- # or without installing globally
46
- npx opencandle@latest
47
- ```
41
+ ## Highlights
48
42
 
49
- ### From Source
43
+ | Capability | What it gives you |
44
+ | --- | --- |
45
+ | Terminal agent | Fast keyboard-driven research inside Pi's local TUI, with sessions, slash commands, model setup, and saved transcripts. |
46
+ | Local browser GUI | Chat, session history, provider setup, tool discovery, workflow launches, and richer financial result cards at `http://127.0.0.1:14567`. |
47
+ | Evidence-first answers | Tools fetch and format data; the model synthesizes only after evidence is gathered. |
48
+ | Finance routing | Quote lookup, comparison, portfolio review, options strategy, filing checks, macro questions, sentiment reads, and educational prompts route differently. |
49
+ | Provider transparency | Missing keys, degraded sources, stale cache, and unavailable data are surfaced instead of hidden. |
50
+ | Local state | OpenCandle user state lives under `~/.opencandle/` unless `OPENCANDLE_HOME` is set; durable market state is stored in SQLite at `state.db`. |
51
+ | Extensible tools | TypeScript tool APIs, provider boundaries, workflow builders, and package exports for add-on tools. |
52
+ | Eval harness | Unit tests, live provider checks, CLI e2e, GUI browser smoke tests, and competitive finance evals. |
50
53
 
51
- ```bash
52
- npm install
53
- cp .env.example .env
54
- npm start
55
- ```
54
+ ## Quick Start
56
55
 
57
- On Windows Command Prompt, use `copy .env.example .env` instead of `cp .env.example .env`.
58
-
59
- On first run, OpenCandle walks you through model setup. You can rerun that flow later with `/setup`.
56
+ Requires Node.js `^20.19.0`, `^22.12.0`, or `>=24.0.0 <27`.
60
57
 
61
- For a step-by-step happy path, see [docs/first-run.md](./docs/first-run.md).
58
+ ```bash
59
+ npx opencandle
60
+ ```
62
61
 
63
- ## Configuration
62
+ On first run, OpenCandle walks you through model setup. You can use Pi sign-in when available or provide a model API key. Data-provider keys are separate and optional.
64
63
 
65
- Model access comes from Pi. Market data providers are optional and additive. A `.env` file in the current working directory is loaded at startup, and env values override values from `~/.opencandle/config.json`. If the same key is both exported in your shell and present in `.env`, the `.env` value wins.
64
+ Start the GUI instead:
66
65
 
67
- | Key | Required | Used For |
68
- | --- | --- | --- |
69
- | `GEMINI_API_KEY` | No | Google models through Pi |
70
- | `OPENAI_API_KEY` | No | OpenAI models through Pi |
71
- | `ANTHROPIC_API_KEY` | No | Anthropic models through Pi |
72
- | `ALPHA_VANTAGE_API_KEY` | No | Fundamentals, earnings, financial statements |
73
- | `FRED_API_KEY` | No | Macro series such as rates, CPI, GDP, unemployment |
74
- | `BRAVE_API_KEY` | No | Brave web search fallback |
75
- | `EXA_API_KEY` | No | Exa web search |
76
- | `FINNHUB_API_KEY` | No | Finnhub company news for sentiment summaries |
77
- | `OPENCANDLE_HOME` | No | Override OpenCandle state directory |
78
- | `OPENCANDLE_ROUTER_MODE` | No | Advanced request-understanding mode; keep the default unless debugging |
79
- | `OPENCANDLE_TOOL_SCOPE_MODE` | No | `observe` by default; set `enforce` to apply route-selected active tools |
80
- | `OPENCANDLE_DEBATE` | No | Set `false` or `0` to disable bull/bear debate |
81
- | `OPENCANDLE_GUI_HOST` | No | GUI bind host, default `127.0.0.1` |
82
- | `OPENCANDLE_GUI_PORT` | No | GUI port, default `14567` |
83
-
84
- Yahoo Finance, CoinGecko, Reddit, SEC EDGAR, DuckDuckGo search, and the alternative.me crypto Fear & Greed index do not require keys.
85
-
86
- OpenCandle stores its own user state in `~/.opencandle/` by default. Pi configuration stays in `.pi/` and `~/.pi/agent/`. The CLI should not depend on repo-local `.pi/extensions/`.
87
-
88
- Provider keys can also be stored in `~/.opencandle/config.json`:
89
-
90
- ```json
91
- {
92
- "providers": {
93
- "alphaVantage": {
94
- "apiKey": "..."
95
- },
96
- "fred": {
97
- "apiKey": "..."
98
- },
99
- "brave": {
100
- "apiKey": "..."
101
- },
102
- "exa": {
103
- "apiKey": "..."
104
- },
105
- "finnhub": {
106
- "apiKey": "..."
107
- }
108
- }
109
- }
66
+ ```bash
67
+ npx opencandle gui
110
68
  ```
111
69
 
112
- Environment variables override values from `~/.opencandle/config.json`. Set `OPENCANDLE_HOME` if you want OpenCandle state somewhere other than `~/.opencandle/`.
113
-
114
- See [docs/configuration.md](./docs/configuration.md) for the full env var, file config, state file, and GUI runtime reference.
70
+ Then open `http://127.0.0.1:14567`.
115
71
 
116
- ## Basic Usage
72
+ For a five-minute path from install to a successful answer, see [docs/first-run.md](./docs/first-run.md).
117
73
 
118
- OpenCandle runs inside Pi's interactive terminal UI. The local GUI can be started with `opencandle gui` from an installed package or `npm run gui` from a checkout.
74
+ ## Example Prompts
119
75
 
120
- See [docs/tui.md](./docs/tui.md) for terminal usage, sessions, and slash-command behavior.
76
+ ```text
77
+ /analyze NVDA
78
+ What is AAPL trading at?
79
+ Compare MSFT and GOOGL using price, fundamentals, and sentiment
80
+ Show me TSLA puts with Greeks
81
+ Get the fed funds rate from FRED
82
+ Add 100 shares of NVDA at 120 to my portfolio, then show my portfolio
83
+ Run risk analysis on SPY
84
+ ```
121
85
 
122
- Useful commands:
86
+ Useful slash commands:
123
87
 
124
88
  ```text
125
89
  /setup
@@ -129,66 +93,112 @@ Useful commands:
129
93
  /analyze AAPL
130
94
  ```
131
95
 
132
- Example prompts:
96
+ Provider diagnostics run from your shell:
133
97
 
134
- ```text
135
- What is AAPL trading at?
136
- Get the options chain for TSLA expiring next month
137
- Show me MSFT puts with Greeks
138
- Get the fed funds rate from FRED
139
- Add 100 shares of NVDA at 120 to my portfolio, then show my portfolio
140
- Run risk analysis on SPY
98
+ ```bash
99
+ opencandle doctor
100
+ opencandle doctor --enable twitter
141
101
  ```
142
102
 
143
- ## Local GUI
103
+ ## Data Sources
144
104
 
145
- The GUI is a local browser workbench for chat, session history, tool discovery, provider setup, and richer financial result cards.
105
+ | Area | Examples | Source |
106
+ | --- | --- | --- |
107
+ | Market data | Quotes, history, ticker search, crypto price and history | Yahoo Finance, Alpha Vantage fallback when configured, CoinGecko |
108
+ | Options | Chains, open interest, IV, locally computed Greeks | Yahoo Finance plus local calculations |
109
+ | Fundamentals | Overview, financials, earnings, DCF, comparable companies | Alpha Vantage |
110
+ | Macro | Rates, CPI, GDP, unemployment, crypto Fear & Greed | FRED, alternative.me |
111
+ | Technical | Indicators and strategy backtests | Local calculations over market history |
112
+ | Sentiment | Reddit, Twitter/X, Finnhub news, and web sentiment | `rdt-cli` and `twitter-cli` using your normal browser sessions, Finnhub, Exa, Brave, DuckDuckGo |
113
+ | Filings | SEC filing search | SEC EDGAR |
114
+ | Portfolio | Watchlists, holdings, prediction tracking, correlation, risk | Local state plus market data |
146
115
 
147
- ```bash
148
- opencandle gui
149
- # or from a checkout
150
- npm run gui
151
- ```
116
+ Yahoo Finance, CoinGecko, SEC EDGAR, DuckDuckGo search, and the alternative.me crypto Fear & Greed index do not require OpenCandle provider keys. Reddit sentiment requires `rdt-cli` (`uv tool install rdt-cli`) plus an active Reddit session in your normal browser. Twitter/X sentiment requires `twitter-cli` (`uv tool install twitter-cli`) plus an active x.com session in your normal browser. Alpha Vantage, FRED, Brave, Exa, and Finnhub unlock deeper coverage when configured.
152
117
 
153
- Then open `http://127.0.0.1:14567`.
118
+ ## Configuration
154
119
 
155
- ![OpenCandle GUI](./website/assets/gui-screenshot.png)
120
+ Model access comes from Pi. Market data provider keys can be set in the environment, through `/connect`, through the GUI provider setup flow, or in `~/.opencandle/config.json`.
156
121
 
157
- From the GUI you can ask normal chat questions, launch workflows from the catalog, run one tool directly, answer clarification cards, inspect tool output, connect provider keys, and reopen prior sessions. Workflow catalog entries become structured chat prompts, so the result still appears in the same transcript with tool cards and source warnings.
122
+ | Key | Used For |
123
+ | --- | --- |
124
+ | `GEMINI_API_KEY` | Google models through Pi |
125
+ | `OPENAI_API_KEY` | OpenAI models through Pi |
126
+ | `ANTHROPIC_API_KEY` | Anthropic models through Pi |
127
+ | `ALPHA_VANTAGE_API_KEY` | Fundamentals, earnings, financial statements, DCF, comps |
128
+ | `FRED_API_KEY` | Macro series such as rates, CPI, GDP, unemployment |
129
+ | `BRAVE_API_KEY` | Brave web search fallback |
130
+ | `EXA_API_KEY` | Exa web search |
131
+ | `FINNHUB_API_KEY` | Finnhub company news for sentiment summaries |
132
+ | `OPENCANDLE_HOME` | Override OpenCandle state directory |
133
+ | `OPENCANDLE_GUI_HOST` | GUI bind host, default `127.0.0.1` |
134
+ | `OPENCANDLE_GUI_PORT` | GUI port, default `14567` |
135
+ | `OPENCANDLE_NOTIFICATION_WEBHOOK_URL` | Optional local webhook target for alert/report notification delivery attempts |
158
136
 
159
- The GUI reports whether it is the session `writer` or a read-only `follower` at `/health`. See [docs/gui-quickstart.md](./docs/gui-quickstart.md).
137
+ Environment variables override `~/.opencandle/config.json`. See [docs/configuration.md](./docs/configuration.md) for the full reference, including advanced routing and diagnostic switches.
160
138
 
161
- ## Data Sources And Tool Coverage
139
+ ## From Source
162
140
 
163
- | Area | Examples | Source |
164
- | --- | --- | --- |
165
- | Market data | quotes, history, ticker search, crypto price/history | Yahoo Finance, Alpha Vantage fallback when configured, CoinGecko |
166
- | Options | chains, open interest, IV, Greeks | Yahoo Finance plus local calculations |
167
- | Fundamentals | overview, financials, earnings, DCF, company comparison | Alpha Vantage |
168
- | Macro | economic series, crypto Fear & Greed | FRED, alternative.me |
169
- | Technical | indicators, strategy backtests | Local calculations over market history |
170
- | Sentiment | Reddit, Twitter/X, Finnhub news, and web sentiment with cross-source pipeline | Reddit JSON API, Twitter/X local browser session, Finnhub, Exa, Brave, DuckDuckGo |
171
- | Filings | SEC filing search | SEC EDGAR |
172
- | Portfolio | watchlist, prediction tracking, correlation, risk | Local state plus market data |
141
+ ```bash
142
+ git clone https://github.com/Kahtaf/OpenCandle.git
143
+ cd OpenCandle
144
+ npm install
145
+ cp .env.example .env
146
+ npm start
147
+ ```
148
+
149
+ On Windows Command Prompt, use `copy .env.example .env` instead of `cp .env.example .env`.
173
150
 
174
- ## Engineering Notes
151
+ Run the local GUI from a checkout:
175
152
 
176
- ### Project Shape
153
+ ```bash
154
+ npm run gui
155
+ ```
156
+
157
+ ## How It Fits Together
158
+
159
+ ```text
160
+ User prompt
161
+ -> routing and slot resolution
162
+ -> tools and workflows gather provider-backed evidence
163
+ -> provider gaps, stale data, and warnings are preserved
164
+ -> model synthesizes a risk-aware answer
165
+ -> terminal or GUI session records the trace
166
+ ```
167
+
168
+ Project shape:
177
169
 
178
170
  ```text
179
171
  src/
180
- ├── providers/ API clients
181
- ├── tools/ Tool implementations by domain
182
- ├── infra/ Cache, rate limiter, HTTP, browser, paths
183
- ├── routing/ Request understanding, entity extraction, and slot resolution
184
- ├── workflows/ Multi-step workflow builders
185
- ├── memory/ SQLite-backed state and retrieval
186
- ├── analysts/ Multi-analyst orchestration
187
- ├── pi/ Pi integration and session wiring
188
- └── index.ts Public exports
172
+ |-- providers/ API clients
173
+ |-- tools/ Tool implementations by domain
174
+ |-- infra/ Cache, rate limiter, HTTP client, paths
175
+ |-- routing/ Request understanding, entity extraction, slot resolution
176
+ |-- workflows/ WorkflowDefinition builders
177
+ |-- runtime/ Session coordinator, workflow runner, runtime context
178
+ |-- market-state/ Durable watchlists, portfolios, predictions, alerts, reports
179
+ |-- memory/ SQLite-backed state and retrieval
180
+ |-- sentiment/ Cross-source sentiment pipeline, scoring, adapters, trends
181
+ |-- analysts/ Multi-analyst orchestration
182
+ |-- pi/ Pi integration and session wiring
183
+ |-- cli.ts CLI entry point
184
+ |-- monitor.ts Local automation heartbeat command
185
+ |-- tool-kit.ts Public add-on tool helpers
186
+ `-- index.ts Public package exports
189
187
  ```
190
188
 
191
- ### Development Commands
189
+ Package exports:
190
+
191
+ - `opencandle`
192
+ - `opencandle/tool-kit`
193
+ - `opencandle/infra`
194
+ - `opencandle/types`
195
+ - `opencandle/providers`
196
+ - `opencandle/tools`
197
+ - `opencandle/workflows`
198
+
199
+ If you want to add a new first-party tool or publish an add-on package, start with [docs/build-a-tool.md](./docs/build-a-tool.md).
200
+
201
+ ## Development
192
202
 
193
203
  ```bash
194
204
  npm start
@@ -204,35 +214,23 @@ npm run test:evals:product
204
214
  npm run test:evals:competitive
205
215
  ```
206
216
 
207
- `npm test` is the required baseline check after changes.
208
-
209
- The e2e, provider, and eval commands can hit live APIs, live model providers, or local agent CLIs. Run them intentionally; see [docs/testing-and-evals.md](./docs/testing-and-evals.md).
210
-
211
- ### Repository Rules That Matter
212
-
213
- - TDD is mandatory for behavior changes
214
- - Unit tests mock `globalThis.fetch` and use JSON fixtures
215
- - Use `cache` and `rateLimiter` for external calls
216
- - Tools fetch and format data; analysts and prompts synthesize
217
- - Keep typing strict and use `.js` extensions on relative imports
218
-
219
- ### Public Package Exports
217
+ Baseline check:
220
218
 
221
- Besides the CLI, the package exposes pieces for engineers building on top of OpenCandle:
219
+ ```bash
220
+ npm test
221
+ ```
222
222
 
223
- - `opencandle`
224
- - `opencandle/tool-kit`
225
- - `opencandle/infra`
226
- - `opencandle/types`
227
- - `opencandle/providers`
228
- - `opencandle/tools`
229
- - `opencandle/workflows`
223
+ The e2e, provider, and eval commands can hit live APIs, live model providers, or local agent CLIs. Run them intentionally; see [docs/testing-and-evals.md](./docs/testing-and-evals.md).
230
224
 
231
- If you want to add a new tool or publish an add-on package, start with [docs/build-a-tool.md](./docs/build-a-tool.md).
225
+ Repository rules that matter:
232
226
 
233
- ## Testing The Agent
227
+ - Unit tests mock `globalThis.fetch` and use fixture JSON.
228
+ - External calls go through shared cache and rate-limiter infrastructure.
229
+ - Tools fetch and format; analysts and prompts synthesize.
230
+ - Relative TypeScript imports use `.js` extensions.
231
+ - Behavior changes should be test-first.
234
232
 
235
- For end-to-end agent driving with file-based IPC:
233
+ For scripted full-session driving with file-based IPC:
236
234
 
237
235
  ```bash
238
236
  npx tsx tests/harness/cli.ts run --prompt "What is AAPL trading at?" --ipc /tmp/opencandle-ipc &
@@ -240,35 +238,21 @@ npx tsx tests/harness/cli.ts wait --ipc /tmp/opencandle-ipc
240
238
  npx tsx tests/harness/cli.ts trace --ipc /tmp/opencandle-ipc
241
239
  ```
242
240
 
243
- The harness writes status and trace files into the IPC directory. See [tests/harness/README.md](./tests/harness/README.md) for the full flow.
241
+ See [tests/harness/README.md](./tests/harness/README.md) for the full flow.
244
242
 
245
- ## Project Docs
243
+ ## Documentation
246
244
 
247
- - [docs/index.md](./docs/index.md)
248
- - [docs/getting-started.md](./docs/getting-started.md)
249
- - [docs/first-run.md](./docs/first-run.md)
250
- - [docs/tui.md](./docs/tui.md)
251
- - [docs/investigation-recipes.md](./docs/investigation-recipes.md)
252
- - [docs/data-sources.md](./docs/data-sources.md)
253
- - [docs/configuration.md](./docs/configuration.md)
254
- - [docs/system-architecture.md](./docs/system-architecture.md)
255
- - [docs/gui-quickstart.md](./docs/gui-quickstart.md)
256
- - [docs/testing-and-evals.md](./docs/testing-and-evals.md)
257
- - [docs/benchmarking.md](./docs/benchmarking.md)
258
- - [CONTRIBUTING.md](./CONTRIBUTING.md)
259
- - [docs/build-a-tool.md](./docs/build-a-tool.md)
260
- - [tests/harness/README.md](./tests/harness/README.md)
261
- - [CHANGELOG.md](./CHANGELOG.md)
262
- - [SECURITY.md](./SECURITY.md)
263
- - [LICENSE](./LICENSE)
245
+ - [Getting Started](./docs/getting-started.md)
246
+ - [First Run](./docs/first-run.md)
247
+ - [TUI](./docs/tui.md)
248
+ - [GUI Quickstart](./docs/gui-quickstart.md)
249
+ - [Investigation Recipes](./docs/investigation-recipes.md)
250
+ - [Data Sources](./docs/data-sources.md)
251
+ - [Configuration](./docs/configuration.md)
252
+ - [System Architecture](./docs/system-architecture.md)
253
+ - [Testing and Evals](./docs/testing-and-evals.md)
254
+ - [Benchmarking](./docs/benchmarking.md)
264
255
 
265
- ## Website
266
-
267
- The static website lives in [website/](./website/). It builds a product landing page plus the public Markdown docs into `website/dist/`.
268
-
269
- ```bash
270
- npm run docs:site:build
271
- npm run docs:site:serve
272
- ```
256
+ ## License
273
257
 
274
- GitHub Pages can publish the generated artifact through the included Pages workflow.
258
+ MIT
@@ -1,9 +1,7 @@
1
- import type { AnalystOutput, AnalystSignal, DebateSide, DebateOutput } from "../runtime/workflow-types.js";
2
1
  import type { EvidenceRecord } from "../runtime/evidence.js";
2
+ import type { AnalystOutput, AnalystSignal, DebateOutput, DebateSide } from "../runtime/workflow-types.js";
3
3
  /** All analyst roles. */
4
4
  export type AnalystRole = "valuation" | "momentum" | "options" | "contrarian" | "risk";
5
- /** Evidence fields expected per analyst role. */
6
- export declare const ROLE_EXPECTED_EVIDENCE: Record<AnalystRole, string[]>;
7
5
  /**
8
6
  * Parse an LLM response into a structured AnalystOutput.
9
7
  * Falls back to raw text if parsing fails.
@@ -1,11 +1,3 @@
1
- /** Evidence fields expected per analyst role. */
2
- export const ROLE_EXPECTED_EVIDENCE = {
3
- valuation: ["P/E Ratio", "Forward P/E", "EPS", "Intrinsic Value", "Revenue Growth"],
4
- momentum: ["RSI", "MACD", "SMA 50", "SMA 200", "Volume Trend"],
5
- options: ["Put/Call Ratio", "IV Level", "Unusual Volume", "Max Pain"],
6
- contrarian: ["Fear & Greed Index", "Reddit Sentiment", "Sentiment Score"],
7
- risk: ["Annualized Volatility", "Sharpe Ratio", "Max Drawdown", "VaR 95%", "Position Size"],
8
- };
9
1
  /**
10
2
  * Parse an LLM response into a structured AnalystOutput.
11
3
  * Falls back to raw text if parsing fails.
@@ -65,9 +57,7 @@ export function tallyVotes(outputs) {
65
57
  const signalValue = output.signal === "BUY" ? 1 : output.signal === "SELL" ? -1 : 0;
66
58
  weightedSum += signalValue * output.conviction;
67
59
  }
68
- const weightedConviction = totalWeight > 0
69
- ? Math.round((totalWeight / outputs.length) * 10) / 10
70
- : 0;
60
+ const weightedConviction = totalWeight > 0 ? Math.round((totalWeight / outputs.length) * 10) / 10 : 0;
71
61
  let verdict;
72
62
  if (weightedSum > 0)
73
63
  verdict = "BUY";
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/analysts/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/analysts/contracts.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,YAAoB;IACnE,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAE3C,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,MAAM,IAAI,MAAM;QACxB,UAAU,EAAE,UAAU,IAAI,CAAC;QAC3B,MAAM,EAAE,MAAM,IAAI,EAAE;QACpB,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,YAAY;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACvD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAmB,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACjD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,UAAU,CAAC,OAAwB;IAOjD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,KAAK;gBACR,GAAG,EAAE,CAAC;gBACN,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,EAAE,CAAC;gBACP,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,EAAE,CAAC;gBACP,MAAM;QACV,CAAC;QACD,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,WAAW,IAAI,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IACjD,CAAC;IAED,MAAM,kBAAkB,GACtB,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,IAAI,OAAsB,CAAC;IAC3B,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,CAAC;SAChC,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,GAAG,MAAM,CAAC;;QACtC,OAAO,GAAG,MAAM,CAAC;IAEtB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAgB,EAAE,YAAoB;IACtE,0BAA0B;IAC1B,IAAI,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;YACf,mBAAmB,EAAE,CAAC;YACtB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,YAAY;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;IAErE,OAAO;QACL,IAAI;QACJ,MAAM;QACN,OAAO;QACP,WAAW;QACX,mBAAmB;QACnB,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,YAAY;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAgB,EAAE,IAAY;IACzD,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB,EAAE,IAAY;IACpD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAClF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,CAAC,CAAC;SACZ,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACnD,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC3D,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,eAAe,CAAC,OAAwB;IACtD,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { WorkflowDefinition } from "../runtime/prompt-step.js";
1
2
  export type AnalystRole = "valuation" | "momentum" | "options" | "contrarian" | "risk";
2
3
  export declare function buildBullPrompt(symbol: string): string;
3
4
  export declare function buildBearPrompt(symbol: string): string;
@@ -7,10 +8,7 @@ export declare function getInitialAnalysisPrompt(symbol: string): string;
7
8
  export interface ComprehensiveAnalysisOptions {
8
9
  debate?: boolean;
9
10
  }
10
- export declare function getComprehensiveAnalysisPrompts(symbol: string, options?: ComprehensiveAnalysisOptions): string[];
11
- import type { WorkflowDefinition } from "../runtime/prompt-step.js";
12
11
  export declare function buildComprehensiveAnalysisDefinition(symbol: string, options?: ComprehensiveAnalysisOptions): WorkflowDefinition;
13
- export declare function runComprehensiveAnalysis(enqueueFollowUp: (prompt: string) => void, symbol: string, options?: ComprehensiveAnalysisOptions): void;
14
12
  export declare function isAnalysisRequest(input: string): {
15
13
  match: boolean;
16
14
  symbol?: string;
@@ -1,3 +1,4 @@
1
+ import { promptStep } from "../runtime/prompt-step.js";
1
2
  const SYMBOL_CAPTURE = "(\\$?[A-Za-z]{1,5}(?:[./-][A-Za-z]{1,2})?)";
2
3
  const NORMALIZED_SYMBOL_PATTERN = /^[A-Z]{1,5}(?:[./-][A-Z]{1,2})?$/;
3
4
  const VOTING_INSTRUCTION = `
@@ -138,27 +139,6 @@ const VALIDATION_PROMPT_NO_DEBATE = (symbol) => `**[Validation Check]** Review y
138
139
  export function getInitialAnalysisPrompt(symbol) {
139
140
  return `Begin comprehensive analysis of ${symbol}. Start by getting the current stock quote.`;
140
141
  }
141
- export function getComprehensiveAnalysisPrompts(symbol, options) {
142
- const debate = options?.debate ?? true;
143
- const roles = ["valuation", "momentum", "options", "contrarian", "risk"];
144
- const prompts = [getInitialAnalysisPrompt(symbol)];
145
- for (const role of roles) {
146
- prompts.push(ANALYST_PROMPTS[role](symbol));
147
- }
148
- if (debate) {
149
- prompts.push(buildBullPrompt(symbol));
150
- prompts.push(buildBearPrompt(symbol));
151
- prompts.push(buildRebuttalPrompt(symbol));
152
- prompts.push(buildSynthesisPrompt(symbol));
153
- prompts.push(VALIDATION_PROMPT_DEBATE(symbol));
154
- }
155
- else {
156
- prompts.push(SYNTHESIS_PROMPT_NO_DEBATE(symbol));
157
- prompts.push(VALIDATION_PROMPT_NO_DEBATE(symbol));
158
- }
159
- return prompts;
160
- }
161
- import { promptStep } from "../runtime/prompt-step.js";
162
142
  export function buildComprehensiveAnalysisDefinition(symbol, options) {
163
143
  const debate = options?.debate ?? true;
164
144
  const roles = ["valuation", "momentum", "options", "contrarian", "risk"];
@@ -218,11 +198,6 @@ export function buildComprehensiveAnalysisDefinition(symbol, options) {
218
198
  ],
219
199
  };
220
200
  }
221
- export function runComprehensiveAnalysis(enqueueFollowUp, symbol, options) {
222
- for (const prompt of getComprehensiveAnalysisPrompts(symbol, options).slice(1)) {
223
- enqueueFollowUp(prompt);
224
- }
225
- }
226
201
  export function isAnalysisRequest(input) {
227
202
  const patterns = [
228
203
  new RegExp(`^analyze\\s+${SYMBOL_CAPTURE}\\s*$`, "i"),
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/analysts/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/analysts/orchestrator.ts"],"names":[],"mappings":"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"}