opencandle 0.11.1 → 0.13.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 (678) hide show
  1. package/README.md +50 -186
  2. package/dist/analysts/contracts.js +0 -1
  3. package/dist/analysts/orchestrator.js +0 -1
  4. package/dist/cli-main.js +22 -15
  5. package/dist/cli-options.d.ts +4 -0
  6. package/dist/cli-options.js +33 -0
  7. package/dist/cli.js +8 -3
  8. package/dist/config.d.ts +4 -0
  9. package/dist/config.js +1 -1
  10. package/dist/doctor/cli-command.js +9 -5
  11. package/dist/doctor/render.js +0 -1
  12. package/dist/doctor/report.js +53 -11
  13. package/dist/gui/server/ask-user-bridge.d.ts +19 -0
  14. package/dist/gui/server/ask-user-bridge.js +55 -0
  15. package/dist/gui/server/automation-heartbeat.d.ts +25 -0
  16. package/dist/gui/server/automation-heartbeat.js +61 -0
  17. package/dist/gui/server/background-quotes.d.ts +39 -0
  18. package/dist/gui/server/background-quotes.js +71 -0
  19. package/dist/gui/server/chat-event-adapter.d.ts +16 -0
  20. package/dist/gui/server/chat-event-adapter.js +388 -0
  21. package/dist/gui/server/gui-session-manager.d.ts +2 -0
  22. package/dist/gui/server/gui-session-manager.js +4 -0
  23. package/dist/gui/server/history-snapshot-store.d.ts +8 -0
  24. package/dist/gui/server/history-snapshot-store.js +43 -0
  25. package/dist/gui/server/http-routes.d.ts +71 -0
  26. package/dist/gui/server/http-routes.js +1033 -0
  27. package/dist/gui/server/invoke-tool.d.ts +47 -0
  28. package/dist/gui/server/invoke-tool.js +373 -0
  29. package/dist/gui/server/live-chat-event-adapter.d.ts +21 -0
  30. package/dist/gui/server/live-chat-event-adapter.js +224 -0
  31. package/dist/gui/server/local-session-coordinator.d.ts +26 -0
  32. package/dist/gui/server/local-session-coordinator.js +53 -0
  33. package/dist/gui/server/market-indices-api.d.ts +21 -0
  34. package/dist/gui/server/market-indices-api.js +26 -0
  35. package/dist/gui/server/market-indices-snapshot-store.d.ts +12 -0
  36. package/dist/gui/server/market-indices-snapshot-store.js +56 -0
  37. package/dist/gui/server/market-state-api.d.ts +250 -0
  38. package/dist/gui/server/market-state-api.js +597 -0
  39. package/dist/gui/server/model-setup.d.ts +55 -0
  40. package/dist/gui/server/model-setup.js +154 -0
  41. package/dist/gui/server/private-api-access.d.ts +6 -0
  42. package/dist/gui/server/private-api-access.js +53 -0
  43. package/dist/gui/server/projector.d.ts +49 -0
  44. package/dist/gui/server/projector.js +296 -0
  45. package/dist/gui/server/prompt-observation.d.ts +8 -0
  46. package/dist/gui/server/prompt-observation.js +43 -0
  47. package/dist/gui/server/quote-snapshot-store.d.ts +14 -0
  48. package/dist/gui/server/quote-snapshot-store.js +49 -0
  49. package/dist/gui/server/server.d.ts +1 -0
  50. package/dist/gui/server/server.js +262 -0
  51. package/dist/gui/server/session-actions.d.ts +60 -0
  52. package/dist/gui/server/session-actions.js +218 -0
  53. package/dist/gui/server/session-entry-wait.d.ts +27 -0
  54. package/dist/gui/server/session-entry-wait.js +129 -0
  55. package/dist/gui/server/session-list.d.ts +2 -0
  56. package/dist/gui/server/session-list.js +11 -0
  57. package/dist/gui/server/shutdown.d.ts +10 -0
  58. package/dist/gui/server/shutdown.js +29 -0
  59. package/dist/gui/server/tool-invoke-ack.d.ts +17 -0
  60. package/dist/gui/server/tool-invoke-ack.js +26 -0
  61. package/dist/gui/server/tool-metadata.d.ts +93 -0
  62. package/dist/gui/server/tool-metadata.js +148 -0
  63. package/dist/gui/server/websocket.d.ts +9 -0
  64. package/dist/gui/server/websocket.js +124 -0
  65. package/dist/gui/server/writer-lock.d.ts +1 -0
  66. package/dist/gui/server/writer-lock.js +1 -0
  67. package/dist/gui/server/ws-hub.d.ts +50 -0
  68. package/dist/gui/server/ws-hub.js +284 -0
  69. package/dist/gui/shared/chat-events.d.ts +174 -0
  70. package/dist/gui/shared/chat-events.js +13 -0
  71. package/dist/gui/shared/event-reducer.d.ts +3 -0
  72. package/dist/gui/shared/event-reducer.js +187 -0
  73. package/dist/index.js +0 -1
  74. package/dist/infra/cache.d.ts +4 -0
  75. package/dist/infra/cache.js +4 -1
  76. package/dist/infra/freshness.js +0 -1
  77. package/dist/infra/http-client.js +1 -2
  78. package/dist/infra/index.js +0 -1
  79. package/dist/infra/lse-byte-budget.d.ts +10 -0
  80. package/dist/infra/lse-byte-budget.js +47 -0
  81. package/dist/infra/market-calendar.js +0 -1
  82. package/dist/infra/native-dependencies.js +0 -1
  83. package/dist/infra/node-version.js +0 -1
  84. package/dist/infra/open-url.js +0 -1
  85. package/dist/infra/opencandle-paths.js +0 -1
  86. package/dist/infra/rate-limiter.js +1 -1
  87. package/dist/market-state/alert-conditions.js +0 -1
  88. package/dist/market-state/alert-runner.d.ts +1 -0
  89. package/dist/market-state/alert-runner.js +5 -4
  90. package/dist/market-state/daily-report.js +0 -1
  91. package/dist/market-state/local-automation-service.js +0 -1
  92. package/dist/market-state/notification-delivery.js +0 -1
  93. package/dist/market-state/resolve-for-mutation.js +0 -1
  94. package/dist/market-state/resolve.js +0 -1
  95. package/dist/market-state/service.d.ts +26 -21
  96. package/dist/market-state/service.js +175 -36
  97. package/dist/market-state/summaries.js +1 -13
  98. package/dist/memory/index.js +0 -1
  99. package/dist/memory/manager.js +0 -1
  100. package/dist/memory/preference-extractor.js +0 -1
  101. package/dist/memory/retrieval.js +0 -1
  102. package/dist/memory/sqlite.js +60 -11
  103. package/dist/memory/storage.js +0 -1
  104. package/dist/memory/tool-defaults.js +0 -1
  105. package/dist/memory/types.js +0 -1
  106. package/dist/monitor.js +0 -1
  107. package/dist/onboarding/connect.js +0 -1
  108. package/dist/onboarding/credential-interceptor.js +0 -1
  109. package/dist/onboarding/degradation-accumulator.js +0 -1
  110. package/dist/onboarding/prompt-user.d.ts +1 -1
  111. package/dist/onboarding/prompt-user.js +0 -1
  112. package/dist/onboarding/provider-status.js +0 -1
  113. package/dist/onboarding/providers.d.ts +16 -1
  114. package/dist/onboarding/providers.js +20 -1
  115. package/dist/onboarding/state.js +0 -1
  116. package/dist/onboarding/tool-helpers.js +0 -1
  117. package/dist/onboarding/tool-tags.js +0 -1
  118. package/dist/onboarding/validate-model-key.d.ts +17 -0
  119. package/dist/onboarding/validate-model-key.js +86 -0
  120. package/dist/onboarding/validation.js +8 -1
  121. package/dist/pi/opencandle-extension.d.ts +2 -1
  122. package/dist/pi/opencandle-extension.js +4 -4
  123. package/dist/pi/session-action-dedupe.js +0 -1
  124. package/dist/pi/session-storage.js +0 -1
  125. package/dist/pi/session-writer-lock.js +0 -1
  126. package/dist/pi/session.d.ts +2 -3
  127. package/dist/pi/session.js +7 -6
  128. package/dist/pi/setup.d.ts +4 -2
  129. package/dist/pi/setup.js +60 -61
  130. package/dist/pi/tool-adapter.js +0 -1
  131. package/dist/pi/tui-session-coordinator.js +0 -1
  132. package/dist/prompts/context-builder.js +1 -2
  133. package/dist/prompts/disclaimer.js +0 -1
  134. package/dist/prompts/policy-cards.js +0 -1
  135. package/dist/prompts/sections.js +0 -1
  136. package/dist/prompts/symbol-preflight.js +0 -1
  137. package/dist/prompts/workflow-prompts.js +16 -15
  138. package/dist/providers/alpha-vantage.js +2 -3
  139. package/dist/providers/coingecko.js +0 -1
  140. package/dist/providers/errors.js +0 -1
  141. package/dist/providers/exa-search.js +11 -10
  142. package/dist/providers/external-tool-command.js +0 -1
  143. package/dist/providers/external-tool-error.js +0 -1
  144. package/dist/providers/fear-greed.js +0 -1
  145. package/dist/providers/finnhub.js +0 -1
  146. package/dist/providers/fred.js +0 -1
  147. package/dist/providers/index.d.ts +1 -0
  148. package/dist/providers/index.js +1 -1
  149. package/dist/providers/lse.d.ts +35 -0
  150. package/dist/providers/lse.js +284 -0
  151. package/dist/providers/polymarket.js +22 -6
  152. package/dist/providers/provider-credential-error.js +0 -1
  153. package/dist/providers/reddit-cli.js +0 -1
  154. package/dist/providers/reddit.js +0 -1
  155. package/dist/providers/sec-edgar.js +0 -1
  156. package/dist/providers/tradingview.js +1 -2
  157. package/dist/providers/twitter-cli.js +0 -1
  158. package/dist/providers/twitter.js +0 -1
  159. package/dist/providers/web-search.js +15 -12
  160. package/dist/providers/with-fallback.js +0 -1
  161. package/dist/providers/wrap-provider.js +1 -1
  162. package/dist/providers/yahoo-finance.js +68 -4
  163. package/dist/routing/classify-intent.js +0 -1
  164. package/dist/routing/defaults.js +0 -1
  165. package/dist/routing/entity-extractor.js +2 -3
  166. package/dist/routing/fund-symbols.js +0 -1
  167. package/dist/routing/horizon.js +0 -1
  168. package/dist/routing/index.js +0 -1
  169. package/dist/routing/legacy-rule-router.js +0 -1
  170. package/dist/routing/planning.js +0 -1
  171. package/dist/routing/route-manifest.js +1 -1
  172. package/dist/routing/router-llm-client.d.ts +2 -2
  173. package/dist/routing/router-llm-client.js +0 -1
  174. package/dist/routing/router-prompt.js +0 -1
  175. package/dist/routing/router-types.js +0 -1
  176. package/dist/routing/router.js +9 -3
  177. package/dist/routing/slot-resolver.js +0 -1
  178. package/dist/routing/symbol-disambiguator.js +0 -1
  179. package/dist/routing/turn-context.js +0 -1
  180. package/dist/routing/types.js +0 -1
  181. package/dist/runtime/answer-contracts.js +0 -1
  182. package/dist/runtime/artifact-contracts.js +0 -1
  183. package/dist/runtime/evidence.d.ts +1 -0
  184. package/dist/runtime/evidence.js +1 -2
  185. package/dist/runtime/numeric-claims.js +0 -1
  186. package/dist/runtime/planning-evidence.js +0 -1
  187. package/dist/runtime/prompt-step.js +0 -1
  188. package/dist/runtime/provider-tracker.js +0 -1
  189. package/dist/runtime/run-context.js +0 -1
  190. package/dist/runtime/session-coordinator.d.ts +2 -2
  191. package/dist/runtime/session-coordinator.js +2 -3
  192. package/dist/runtime/session-title.js +0 -1
  193. package/dist/runtime/tool-defaults-wrapper.js +0 -1
  194. package/dist/runtime/validation.js +0 -1
  195. package/dist/runtime/workflow-events.js +0 -1
  196. package/dist/runtime/workflow-runner.d.ts +1 -0
  197. package/dist/runtime/workflow-runner.js +8 -3
  198. package/dist/runtime/workflow-types.js +0 -1
  199. package/dist/sentiment/adapters/finnhub.js +0 -1
  200. package/dist/sentiment/adapters/reddit.js +0 -1
  201. package/dist/sentiment/adapters/twitter.js +0 -1
  202. package/dist/sentiment/adapters/web.js +0 -1
  203. package/dist/sentiment/index.js +4 -2
  204. package/dist/sentiment/insights.js +0 -1
  205. package/dist/sentiment/keywords.js +0 -1
  206. package/dist/sentiment/pipeline.js +0 -1
  207. package/dist/sentiment/scorer.js +0 -1
  208. package/dist/sentiment/store.js +0 -1
  209. package/dist/sentiment/trends.js +0 -1
  210. package/dist/sentiment/types.js +0 -1
  211. package/dist/system-prompt.js +0 -1
  212. package/dist/tool-kit.js +0 -1
  213. package/dist/tools/fundamentals/company-overview.d.ts +1 -1
  214. package/dist/tools/fundamentals/company-overview.js +2 -1
  215. package/dist/tools/fundamentals/comps.js +6 -4
  216. package/dist/tools/fundamentals/dcf.js +37 -9
  217. package/dist/tools/fundamentals/earnings.d.ts +1 -1
  218. package/dist/tools/fundamentals/earnings.js +2 -1
  219. package/dist/tools/fundamentals/financials.js +88 -9
  220. package/dist/tools/fundamentals/sec-filings.js +0 -1
  221. package/dist/tools/index.d.ts +121 -2
  222. package/dist/tools/index.js +3 -1
  223. package/dist/tools/interaction/ask-user.js +11 -1
  224. package/dist/tools/macro/event-probabilities.js +0 -1
  225. package/dist/tools/macro/fear-greed.d.ts +1 -1
  226. package/dist/tools/macro/fear-greed.js +0 -1
  227. package/dist/tools/macro/fred-data.d.ts +1 -1
  228. package/dist/tools/macro/fred-data.js +2 -1
  229. package/dist/tools/market/crypto-history.js +0 -1
  230. package/dist/tools/market/crypto-price.d.ts +2 -2
  231. package/dist/tools/market/crypto-price.js +0 -1
  232. package/dist/tools/market/price-comparison.d.ts +30 -0
  233. package/dist/tools/market/price-comparison.js +202 -0
  234. package/dist/tools/market/screen-stocks.js +0 -1
  235. package/dist/tools/market/search-ticker.js +1 -2
  236. package/dist/tools/market/stock-history.d.ts +18 -3
  237. package/dist/tools/market/stock-history.js +132 -18
  238. package/dist/tools/market/stock-quote.d.ts +2 -2
  239. package/dist/tools/market/stock-quote.js +0 -1
  240. package/dist/tools/options/greeks.js +0 -1
  241. package/dist/tools/options/option-chain.d.ts +2 -2
  242. package/dist/tools/options/option-chain.js +0 -1
  243. package/dist/tools/portfolio/alerts.d.ts +2 -1
  244. package/dist/tools/portfolio/alerts.js +228 -2
  245. package/dist/tools/portfolio/correlation.d.ts +1 -1
  246. package/dist/tools/portfolio/correlation.js +23 -5
  247. package/dist/tools/portfolio/daily-report.js +0 -1
  248. package/dist/tools/portfolio/holdings-overlap.js +0 -1
  249. package/dist/tools/portfolio/notifications.js +0 -1
  250. package/dist/tools/portfolio/risk-analysis.d.ts +2 -2
  251. package/dist/tools/portfolio/risk-analysis.js +0 -1
  252. package/dist/tools/portfolio/tracker.d.ts +3 -1
  253. package/dist/tools/portfolio/tracker.js +57 -10
  254. package/dist/tools/portfolio/watchlist.d.ts +3 -6
  255. package/dist/tools/portfolio/watchlist.js +101 -110
  256. package/dist/tools/sentiment/insight-format.js +0 -1
  257. package/dist/tools/sentiment/query-match.js +0 -1
  258. package/dist/tools/sentiment/reddit-sentiment.js +0 -1
  259. package/dist/tools/sentiment/sentiment-summary.js +8 -4
  260. package/dist/tools/sentiment/sentiment-trend.d.ts +5 -1
  261. package/dist/tools/sentiment/sentiment-trend.js +6 -2
  262. package/dist/tools/sentiment/twitter-sentiment.js +0 -1
  263. package/dist/tools/sentiment/untrusted-text.js +0 -1
  264. package/dist/tools/sentiment/web-search.d.ts +1 -1
  265. package/dist/tools/sentiment/web-search.js +0 -1
  266. package/dist/tools/sentiment/web-sentiment.js +0 -1
  267. package/dist/tools/technical/backtest.js +0 -1
  268. package/dist/tools/technical/indicators.js +0 -1
  269. package/dist/types/fundamentals.js +0 -1
  270. package/dist/types/index.js +0 -1
  271. package/dist/types/macro.js +0 -1
  272. package/dist/types/market.d.ts +8 -0
  273. package/dist/types/market.js +0 -1
  274. package/dist/types/options.js +0 -1
  275. package/dist/types/portfolio.js +0 -1
  276. package/dist/types/prediction-markets.js +0 -1
  277. package/dist/types/sentiment.js +0 -1
  278. package/dist/workflows/compare-assets.js +0 -1
  279. package/dist/workflows/index.js +0 -1
  280. package/dist/workflows/options-screener.js +0 -1
  281. package/dist/workflows/portfolio-builder.js +0 -1
  282. package/gui/web/dist/assets/CatalogOverlay-Cy8Fq0fn.js +1 -0
  283. package/gui/web/dist/assets/allocation-donut-DgBRIKCk.js +52 -0
  284. package/gui/web/dist/assets/index-DIlFyIOO.js +66 -0
  285. package/gui/web/dist/assets/index-DS4jESOB.css +2 -0
  286. package/gui/web/dist/assets/market-chart-DammaCjH.js +1 -0
  287. package/gui/web/dist/assets/utils-CnADgYgh.js +1 -0
  288. package/gui/web/dist/index.html +3 -2
  289. package/package.json +23 -26
  290. package/dist/analysts/contracts.js.map +0 -1
  291. package/dist/analysts/orchestrator.js.map +0 -1
  292. package/dist/cli-main.js.map +0 -1
  293. package/dist/cli.js.map +0 -1
  294. package/dist/config.js.map +0 -1
  295. package/dist/doctor/cli-command.js.map +0 -1
  296. package/dist/doctor/render.js.map +0 -1
  297. package/dist/doctor/report.js.map +0 -1
  298. package/dist/index.js.map +0 -1
  299. package/dist/infra/cache.js.map +0 -1
  300. package/dist/infra/freshness.js.map +0 -1
  301. package/dist/infra/http-client.js.map +0 -1
  302. package/dist/infra/index.js.map +0 -1
  303. package/dist/infra/market-calendar.js.map +0 -1
  304. package/dist/infra/native-dependencies.js.map +0 -1
  305. package/dist/infra/node-version.js.map +0 -1
  306. package/dist/infra/open-url.js.map +0 -1
  307. package/dist/infra/opencandle-paths.js.map +0 -1
  308. package/dist/infra/rate-limiter.js.map +0 -1
  309. package/dist/market-state/alert-conditions.js.map +0 -1
  310. package/dist/market-state/alert-runner.js.map +0 -1
  311. package/dist/market-state/daily-report.js.map +0 -1
  312. package/dist/market-state/local-automation-service.js.map +0 -1
  313. package/dist/market-state/notification-delivery.js.map +0 -1
  314. package/dist/market-state/resolve-for-mutation.js.map +0 -1
  315. package/dist/market-state/resolve.js.map +0 -1
  316. package/dist/market-state/service.js.map +0 -1
  317. package/dist/market-state/summaries.js.map +0 -1
  318. package/dist/memory/index.js.map +0 -1
  319. package/dist/memory/manager.js.map +0 -1
  320. package/dist/memory/preference-extractor.js.map +0 -1
  321. package/dist/memory/retrieval.js.map +0 -1
  322. package/dist/memory/sqlite.js.map +0 -1
  323. package/dist/memory/storage.js.map +0 -1
  324. package/dist/memory/tool-defaults.js.map +0 -1
  325. package/dist/memory/types.js.map +0 -1
  326. package/dist/monitor.js.map +0 -1
  327. package/dist/onboarding/connect.js.map +0 -1
  328. package/dist/onboarding/credential-interceptor.js.map +0 -1
  329. package/dist/onboarding/degradation-accumulator.js.map +0 -1
  330. package/dist/onboarding/prompt-user.js.map +0 -1
  331. package/dist/onboarding/provider-status.js.map +0 -1
  332. package/dist/onboarding/providers.js.map +0 -1
  333. package/dist/onboarding/state.js.map +0 -1
  334. package/dist/onboarding/tool-helpers.js.map +0 -1
  335. package/dist/onboarding/tool-tags.js.map +0 -1
  336. package/dist/onboarding/validation.js.map +0 -1
  337. package/dist/pi/opencandle-extension.js.map +0 -1
  338. package/dist/pi/session-action-dedupe.js.map +0 -1
  339. package/dist/pi/session-storage.js.map +0 -1
  340. package/dist/pi/session-writer-lock.js.map +0 -1
  341. package/dist/pi/session.js.map +0 -1
  342. package/dist/pi/setup.js.map +0 -1
  343. package/dist/pi/tool-adapter.js.map +0 -1
  344. package/dist/pi/tui-session-coordinator.js.map +0 -1
  345. package/dist/prompts/context-builder.js.map +0 -1
  346. package/dist/prompts/disclaimer.js.map +0 -1
  347. package/dist/prompts/policy-cards.js.map +0 -1
  348. package/dist/prompts/sections.js.map +0 -1
  349. package/dist/prompts/symbol-preflight.js.map +0 -1
  350. package/dist/prompts/workflow-prompts.js.map +0 -1
  351. package/dist/providers/alpha-vantage.js.map +0 -1
  352. package/dist/providers/coingecko.js.map +0 -1
  353. package/dist/providers/errors.js.map +0 -1
  354. package/dist/providers/exa-search.js.map +0 -1
  355. package/dist/providers/external-tool-command.js.map +0 -1
  356. package/dist/providers/external-tool-error.js.map +0 -1
  357. package/dist/providers/fear-greed.js.map +0 -1
  358. package/dist/providers/finnhub.js.map +0 -1
  359. package/dist/providers/fred.js.map +0 -1
  360. package/dist/providers/index.js.map +0 -1
  361. package/dist/providers/polymarket.js.map +0 -1
  362. package/dist/providers/provider-credential-error.js.map +0 -1
  363. package/dist/providers/reddit-cli.js.map +0 -1
  364. package/dist/providers/reddit.js.map +0 -1
  365. package/dist/providers/sec-edgar.js.map +0 -1
  366. package/dist/providers/tradingview.js.map +0 -1
  367. package/dist/providers/twitter-cli.js.map +0 -1
  368. package/dist/providers/twitter.js.map +0 -1
  369. package/dist/providers/web-search.js.map +0 -1
  370. package/dist/providers/with-fallback.js.map +0 -1
  371. package/dist/providers/wrap-provider.js.map +0 -1
  372. package/dist/providers/yahoo-finance.js.map +0 -1
  373. package/dist/routing/classify-intent.js.map +0 -1
  374. package/dist/routing/defaults.js.map +0 -1
  375. package/dist/routing/entity-extractor.js.map +0 -1
  376. package/dist/routing/fund-symbols.js.map +0 -1
  377. package/dist/routing/horizon.js.map +0 -1
  378. package/dist/routing/index.js.map +0 -1
  379. package/dist/routing/legacy-rule-router.js.map +0 -1
  380. package/dist/routing/planning.js.map +0 -1
  381. package/dist/routing/route-manifest.js.map +0 -1
  382. package/dist/routing/router-llm-client.js.map +0 -1
  383. package/dist/routing/router-prompt.js.map +0 -1
  384. package/dist/routing/router-types.js.map +0 -1
  385. package/dist/routing/router.js.map +0 -1
  386. package/dist/routing/slot-resolver.js.map +0 -1
  387. package/dist/routing/symbol-disambiguator.js.map +0 -1
  388. package/dist/routing/turn-context.js.map +0 -1
  389. package/dist/routing/types.js.map +0 -1
  390. package/dist/runtime/answer-contracts.js.map +0 -1
  391. package/dist/runtime/artifact-contracts.js.map +0 -1
  392. package/dist/runtime/evidence.js.map +0 -1
  393. package/dist/runtime/numeric-claims.js.map +0 -1
  394. package/dist/runtime/planning-evidence.js.map +0 -1
  395. package/dist/runtime/prompt-step.js.map +0 -1
  396. package/dist/runtime/provider-tracker.js.map +0 -1
  397. package/dist/runtime/run-context.js.map +0 -1
  398. package/dist/runtime/session-coordinator.js.map +0 -1
  399. package/dist/runtime/session-title.js.map +0 -1
  400. package/dist/runtime/tool-defaults-wrapper.js.map +0 -1
  401. package/dist/runtime/validation.js.map +0 -1
  402. package/dist/runtime/workflow-events.js.map +0 -1
  403. package/dist/runtime/workflow-runner.js.map +0 -1
  404. package/dist/runtime/workflow-types.js.map +0 -1
  405. package/dist/sentiment/adapters/finnhub.js.map +0 -1
  406. package/dist/sentiment/adapters/reddit.js.map +0 -1
  407. package/dist/sentiment/adapters/twitter.js.map +0 -1
  408. package/dist/sentiment/adapters/web.js.map +0 -1
  409. package/dist/sentiment/index.js.map +0 -1
  410. package/dist/sentiment/insights.js.map +0 -1
  411. package/dist/sentiment/keywords.js.map +0 -1
  412. package/dist/sentiment/pipeline.js.map +0 -1
  413. package/dist/sentiment/scorer.js.map +0 -1
  414. package/dist/sentiment/store.js.map +0 -1
  415. package/dist/sentiment/trends.js.map +0 -1
  416. package/dist/sentiment/types.js.map +0 -1
  417. package/dist/system-prompt.js.map +0 -1
  418. package/dist/tool-kit.js.map +0 -1
  419. package/dist/tools/fundamentals/company-overview.js.map +0 -1
  420. package/dist/tools/fundamentals/comps.js.map +0 -1
  421. package/dist/tools/fundamentals/dcf.js.map +0 -1
  422. package/dist/tools/fundamentals/earnings.js.map +0 -1
  423. package/dist/tools/fundamentals/financials.js.map +0 -1
  424. package/dist/tools/fundamentals/sec-filings.js.map +0 -1
  425. package/dist/tools/index.js.map +0 -1
  426. package/dist/tools/interaction/ask-user.js.map +0 -1
  427. package/dist/tools/macro/event-probabilities.js.map +0 -1
  428. package/dist/tools/macro/fear-greed.js.map +0 -1
  429. package/dist/tools/macro/fred-data.js.map +0 -1
  430. package/dist/tools/market/crypto-history.js.map +0 -1
  431. package/dist/tools/market/crypto-price.js.map +0 -1
  432. package/dist/tools/market/screen-stocks.js.map +0 -1
  433. package/dist/tools/market/search-ticker.js.map +0 -1
  434. package/dist/tools/market/stock-history.js.map +0 -1
  435. package/dist/tools/market/stock-quote.js.map +0 -1
  436. package/dist/tools/options/greeks.js.map +0 -1
  437. package/dist/tools/options/option-chain.js.map +0 -1
  438. package/dist/tools/portfolio/alerts.js.map +0 -1
  439. package/dist/tools/portfolio/correlation.js.map +0 -1
  440. package/dist/tools/portfolio/daily-report.js.map +0 -1
  441. package/dist/tools/portfolio/holdings-overlap.js.map +0 -1
  442. package/dist/tools/portfolio/notifications.js.map +0 -1
  443. package/dist/tools/portfolio/risk-analysis.js.map +0 -1
  444. package/dist/tools/portfolio/tracker.js.map +0 -1
  445. package/dist/tools/portfolio/watchlist.js.map +0 -1
  446. package/dist/tools/sentiment/insight-format.js.map +0 -1
  447. package/dist/tools/sentiment/query-match.js.map +0 -1
  448. package/dist/tools/sentiment/reddit-sentiment.js.map +0 -1
  449. package/dist/tools/sentiment/sentiment-summary.js.map +0 -1
  450. package/dist/tools/sentiment/sentiment-trend.js.map +0 -1
  451. package/dist/tools/sentiment/twitter-sentiment.js.map +0 -1
  452. package/dist/tools/sentiment/untrusted-text.js.map +0 -1
  453. package/dist/tools/sentiment/web-search.js.map +0 -1
  454. package/dist/tools/sentiment/web-sentiment.js.map +0 -1
  455. package/dist/tools/technical/backtest.js.map +0 -1
  456. package/dist/tools/technical/indicators.js.map +0 -1
  457. package/dist/types/fundamentals.js.map +0 -1
  458. package/dist/types/index.js.map +0 -1
  459. package/dist/types/macro.js.map +0 -1
  460. package/dist/types/market.js.map +0 -1
  461. package/dist/types/options.js.map +0 -1
  462. package/dist/types/portfolio.js.map +0 -1
  463. package/dist/types/prediction-markets.js.map +0 -1
  464. package/dist/types/sentiment.js.map +0 -1
  465. package/dist/workflows/compare-assets.js.map +0 -1
  466. package/dist/workflows/index.js.map +0 -1
  467. package/dist/workflows/options-screener.js.map +0 -1
  468. package/dist/workflows/portfolio-builder.js.map +0 -1
  469. package/gui/server/ask-user-bridge.ts +0 -89
  470. package/gui/server/automation-heartbeat.ts +0 -97
  471. package/gui/server/background-quotes.ts +0 -127
  472. package/gui/server/chat-event-adapter.ts +0 -294
  473. package/gui/server/gui-session-manager.ts +0 -5
  474. package/gui/server/http-routes.ts +0 -1201
  475. package/gui/server/invoke-tool.ts +0 -490
  476. package/gui/server/live-chat-event-adapter.ts +0 -243
  477. package/gui/server/local-session-coordinator.ts +0 -97
  478. package/gui/server/market-state-api.ts +0 -331
  479. package/gui/server/model-setup.ts +0 -254
  480. package/gui/server/package.json +0 -5
  481. package/gui/server/private-api-access.ts +0 -62
  482. package/gui/server/projector.ts +0 -392
  483. package/gui/server/prompt-observation.ts +0 -58
  484. package/gui/server/quote-snapshot-store.ts +0 -50
  485. package/gui/server/server.ts +0 -289
  486. package/gui/server/session-actions.ts +0 -323
  487. package/gui/server/session-entry-wait.ts +0 -179
  488. package/gui/server/shutdown.ts +0 -47
  489. package/gui/server/tool-invoke-ack.ts +0 -49
  490. package/gui/server/tool-metadata.ts +0 -167
  491. package/gui/server/websocket.ts +0 -138
  492. package/gui/server/writer-lock.ts +0 -1
  493. package/gui/server/ws-hub.ts +0 -403
  494. package/gui/shared/chat-events.ts +0 -165
  495. package/gui/shared/event-reducer.ts +0 -220
  496. package/gui/web/dist/assets/CatalogOverlay-DZ1niyQm.js +0 -1
  497. package/gui/web/dist/assets/index-D4F9AJnn.css +0 -2
  498. package/gui/web/dist/assets/index-DtqMMBTr.js +0 -65
  499. package/src/analysts/contracts.ts +0 -176
  500. package/src/analysts/orchestrator.ts +0 -244
  501. package/src/cli-main.ts +0 -510
  502. package/src/cli.ts +0 -17
  503. package/src/config.ts +0 -272
  504. package/src/doctor/cli-command.ts +0 -83
  505. package/src/doctor/render.ts +0 -37
  506. package/src/doctor/report.ts +0 -638
  507. package/src/index.ts +0 -5
  508. package/src/infra/cache.ts +0 -127
  509. package/src/infra/freshness.ts +0 -165
  510. package/src/infra/http-client.ts +0 -134
  511. package/src/infra/index.ts +0 -14
  512. package/src/infra/market-calendar.ts +0 -193
  513. package/src/infra/native-dependencies.ts +0 -84
  514. package/src/infra/node-version.ts +0 -23
  515. package/src/infra/open-url.ts +0 -28
  516. package/src/infra/opencandle-paths.ts +0 -53
  517. package/src/infra/rate-limiter.ts +0 -77
  518. package/src/market-state/alert-conditions.ts +0 -82
  519. package/src/market-state/alert-runner.ts +0 -863
  520. package/src/market-state/daily-report.ts +0 -237
  521. package/src/market-state/local-automation-service.ts +0 -162
  522. package/src/market-state/notification-delivery.ts +0 -158
  523. package/src/market-state/resolve-for-mutation.ts +0 -24
  524. package/src/market-state/resolve.ts +0 -112
  525. package/src/market-state/service.ts +0 -2208
  526. package/src/market-state/summaries.ts +0 -75
  527. package/src/memory/index.ts +0 -10
  528. package/src/memory/manager.ts +0 -190
  529. package/src/memory/preference-extractor.ts +0 -106
  530. package/src/memory/retrieval.ts +0 -71
  531. package/src/memory/sqlite.ts +0 -577
  532. package/src/memory/storage.ts +0 -195
  533. package/src/memory/tool-defaults.ts +0 -108
  534. package/src/memory/types.ts +0 -71
  535. package/src/monitor.ts +0 -123
  536. package/src/onboarding/connect.ts +0 -177
  537. package/src/onboarding/credential-interceptor.ts +0 -122
  538. package/src/onboarding/degradation-accumulator.ts +0 -77
  539. package/src/onboarding/prompt-user.ts +0 -85
  540. package/src/onboarding/provider-status.ts +0 -382
  541. package/src/onboarding/providers.ts +0 -442
  542. package/src/onboarding/state.ts +0 -216
  543. package/src/onboarding/tool-helpers.ts +0 -104
  544. package/src/onboarding/tool-tags.ts +0 -244
  545. package/src/onboarding/validation.ts +0 -152
  546. package/src/pi/opencandle-extension.ts +0 -1294
  547. package/src/pi/session-action-dedupe.ts +0 -155
  548. package/src/pi/session-storage.ts +0 -5
  549. package/src/pi/session-writer-lock.ts +0 -426
  550. package/src/pi/session.ts +0 -84
  551. package/src/pi/setup.ts +0 -399
  552. package/src/pi/tool-adapter.ts +0 -49
  553. package/src/pi/tui-session-coordinator.ts +0 -351
  554. package/src/prompts/context-builder.ts +0 -326
  555. package/src/prompts/disclaimer.ts +0 -9
  556. package/src/prompts/policy-cards.ts +0 -228
  557. package/src/prompts/sections.ts +0 -46
  558. package/src/prompts/symbol-preflight.ts +0 -80
  559. package/src/prompts/workflow-prompts.ts +0 -504
  560. package/src/providers/alpha-vantage.ts +0 -340
  561. package/src/providers/coingecko.ts +0 -95
  562. package/src/providers/errors.ts +0 -9
  563. package/src/providers/exa-search.ts +0 -375
  564. package/src/providers/external-tool-command.ts +0 -164
  565. package/src/providers/external-tool-error.ts +0 -20
  566. package/src/providers/fear-greed.ts +0 -45
  567. package/src/providers/finnhub.ts +0 -125
  568. package/src/providers/fred.ts +0 -83
  569. package/src/providers/index.ts +0 -17
  570. package/src/providers/polymarket.ts +0 -214
  571. package/src/providers/provider-credential-error.ts +0 -23
  572. package/src/providers/reddit-cli.ts +0 -286
  573. package/src/providers/reddit.ts +0 -106
  574. package/src/providers/sec-edgar.ts +0 -326
  575. package/src/providers/tradingview.ts +0 -399
  576. package/src/providers/twitter-cli.ts +0 -202
  577. package/src/providers/twitter.ts +0 -102
  578. package/src/providers/web-search.ts +0 -303
  579. package/src/providers/with-fallback.ts +0 -42
  580. package/src/providers/wrap-provider.ts +0 -105
  581. package/src/providers/yahoo-finance.ts +0 -984
  582. package/src/routing/classify-intent.ts +0 -380
  583. package/src/routing/defaults.ts +0 -29
  584. package/src/routing/entity-extractor.ts +0 -557
  585. package/src/routing/fund-symbols.ts +0 -58
  586. package/src/routing/horizon.ts +0 -7
  587. package/src/routing/index.ts +0 -70
  588. package/src/routing/legacy-rule-router.ts +0 -13
  589. package/src/routing/planning.ts +0 -829
  590. package/src/routing/route-manifest.ts +0 -308
  591. package/src/routing/router-llm-client.ts +0 -64
  592. package/src/routing/router-prompt.ts +0 -159
  593. package/src/routing/router-types.ts +0 -84
  594. package/src/routing/router.ts +0 -1332
  595. package/src/routing/slot-resolver.ts +0 -213
  596. package/src/routing/symbol-disambiguator.ts +0 -72
  597. package/src/routing/turn-context.ts +0 -108
  598. package/src/routing/types.ts +0 -77
  599. package/src/runtime/answer-contracts.ts +0 -693
  600. package/src/runtime/artifact-contracts.ts +0 -77
  601. package/src/runtime/evidence.ts +0 -78
  602. package/src/runtime/numeric-claims.ts +0 -108
  603. package/src/runtime/planning-evidence.ts +0 -597
  604. package/src/runtime/prompt-step.ts +0 -185
  605. package/src/runtime/provider-tracker.ts +0 -40
  606. package/src/runtime/run-context.ts +0 -32
  607. package/src/runtime/session-coordinator.ts +0 -1037
  608. package/src/runtime/session-title.ts +0 -60
  609. package/src/runtime/tool-defaults-wrapper.ts +0 -43
  610. package/src/runtime/validation.ts +0 -211
  611. package/src/runtime/workflow-events.ts +0 -77
  612. package/src/runtime/workflow-runner.ts +0 -182
  613. package/src/runtime/workflow-types.ts +0 -105
  614. package/src/sentiment/adapters/finnhub.ts +0 -49
  615. package/src/sentiment/adapters/reddit.ts +0 -65
  616. package/src/sentiment/adapters/twitter.ts +0 -36
  617. package/src/sentiment/adapters/web.ts +0 -44
  618. package/src/sentiment/index.ts +0 -49
  619. package/src/sentiment/insights.ts +0 -269
  620. package/src/sentiment/keywords.ts +0 -31
  621. package/src/sentiment/pipeline.ts +0 -91
  622. package/src/sentiment/scorer.ts +0 -89
  623. package/src/sentiment/store.ts +0 -260
  624. package/src/sentiment/trends.ts +0 -96
  625. package/src/sentiment/types.ts +0 -112
  626. package/src/system-prompt.ts +0 -115
  627. package/src/tool-kit.ts +0 -69
  628. package/src/tools/AGENTS.md +0 -36
  629. package/src/tools/fundamentals/company-overview.ts +0 -64
  630. package/src/tools/fundamentals/comps.ts +0 -180
  631. package/src/tools/fundamentals/dcf.ts +0 -447
  632. package/src/tools/fundamentals/earnings.ts +0 -57
  633. package/src/tools/fundamentals/financials.ts +0 -63
  634. package/src/tools/fundamentals/sec-filings.ts +0 -105
  635. package/src/tools/index.ts +0 -104
  636. package/src/tools/interaction/ask-user.ts +0 -93
  637. package/src/tools/macro/event-probabilities.ts +0 -141
  638. package/src/tools/macro/fear-greed.ts +0 -41
  639. package/src/tools/macro/fred-data.ts +0 -92
  640. package/src/tools/market/crypto-history.ts +0 -72
  641. package/src/tools/market/crypto-price.ts +0 -65
  642. package/src/tools/market/screen-stocks.ts +0 -290
  643. package/src/tools/market/search-ticker.ts +0 -254
  644. package/src/tools/market/stock-history.ts +0 -104
  645. package/src/tools/market/stock-quote.ts +0 -73
  646. package/src/tools/options/greeks.ts +0 -81
  647. package/src/tools/options/option-chain.ts +0 -134
  648. package/src/tools/portfolio/alerts.ts +0 -457
  649. package/src/tools/portfolio/correlation.ts +0 -189
  650. package/src/tools/portfolio/daily-report.ts +0 -107
  651. package/src/tools/portfolio/holdings-overlap.ts +0 -139
  652. package/src/tools/portfolio/notifications.ts +0 -45
  653. package/src/tools/portfolio/risk-analysis.ts +0 -173
  654. package/src/tools/portfolio/tracker.ts +0 -308
  655. package/src/tools/portfolio/watchlist.ts +0 -288
  656. package/src/tools/sentiment/insight-format.ts +0 -50
  657. package/src/tools/sentiment/query-match.ts +0 -117
  658. package/src/tools/sentiment/reddit-sentiment.ts +0 -403
  659. package/src/tools/sentiment/sentiment-summary.ts +0 -383
  660. package/src/tools/sentiment/sentiment-trend.ts +0 -75
  661. package/src/tools/sentiment/twitter-sentiment.ts +0 -287
  662. package/src/tools/sentiment/untrusted-text.ts +0 -21
  663. package/src/tools/sentiment/web-search.ts +0 -186
  664. package/src/tools/sentiment/web-sentiment.ts +0 -96
  665. package/src/tools/technical/backtest.ts +0 -336
  666. package/src/tools/technical/indicators.ts +0 -281
  667. package/src/types/fundamentals.ts +0 -47
  668. package/src/types/index.ts +0 -26
  669. package/src/types/macro.ts +0 -27
  670. package/src/types/market.ts +0 -46
  671. package/src/types/options.ts +0 -53
  672. package/src/types/portfolio.ts +0 -83
  673. package/src/types/prediction-markets.ts +0 -13
  674. package/src/types/sentiment.ts +0 -129
  675. package/src/workflows/compare-assets.ts +0 -89
  676. package/src/workflows/index.ts +0 -3
  677. package/src/workflows/options-screener.ts +0 -125
  678. package/src/workflows/portfolio-builder.ts +0 -63
package/dist/pi/setup.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { LoginDialogComponent, } from "@earendil-works/pi-coding-agent";
2
+ import { validateModelKey } from "../onboarding/validate-model-key.js";
2
3
  /**
3
4
  * Registry of "fast default" models for each LLM auth provider. After a fresh
4
5
  * sign-in we try to activate the default without opening a picker, falling back
@@ -82,8 +83,8 @@ async function selectProviderForLogin(ctx) {
82
83
  return undefined;
83
84
  }
84
85
  }
85
- async function selectAdvancedOAuthProvider(ctx) {
86
- const providers = ctx.modelRegistry.authStorage.getOAuthProviders();
86
+ async function selectAdvancedOAuthProvider(ctx, modelRuntime) {
87
+ const providers = modelRuntime.getProviders().filter((provider) => provider.auth.oauth?.login);
87
88
  if (providers.length === 0) {
88
89
  ctx.ui.notify("No sign-in providers are available.", "warning");
89
90
  return undefined;
@@ -92,12 +93,9 @@ async function selectAdvancedOAuthProvider(ctx) {
92
93
  const choice = await ctx.ui.select("Choose a provider", labels);
93
94
  return providers.find((provider) => provider.name === choice)?.id;
94
95
  }
95
- async function runLoginDialog(ctx, providerId) {
96
- const provider = ctx.modelRegistry.authStorage
97
- .getOAuthProviders()
98
- .find((item) => item.id === providerId);
96
+ async function runLoginDialog(ctx, providerId, modelRuntime) {
97
+ const provider = modelRuntime.getProvider(providerId);
99
98
  const providerName = provider?.name ?? providerId;
100
- const usesCallbackServer = provider?.usesCallbackServer ?? false;
101
99
  const success = await ctx.ui.custom((tui, _theme, _keybindings, done) => {
102
100
  let finished = false;
103
101
  const finish = (value) => {
@@ -109,52 +107,34 @@ async function runLoginDialog(ctx, providerId) {
109
107
  const dialog = new LoginDialogComponent(tui, providerId, (completed) => {
110
108
  finish(completed);
111
109
  });
112
- let manualCodeResolve;
113
- let manualCodeReject;
114
- const manualCodePromise = new Promise((resolve, reject) => {
115
- manualCodeResolve = resolve;
116
- manualCodeReject = reject;
117
- });
118
- // Cast required: advanced providers return dynamic IDs outside the SDK's static union type
119
- void ctx.modelRegistry.authStorage
120
- .login(providerId, {
121
- onAuth: (info) => {
122
- dialog.showAuth(info.url, info.instructions);
123
- if (usesCallbackServer) {
124
- void dialog
125
- .showManualInput("Paste redirect URL below, or complete login in your browser:")
126
- .then((value) => {
127
- if (value && manualCodeResolve) {
128
- manualCodeResolve(value);
129
- manualCodeResolve = undefined;
130
- }
131
- })
132
- .catch(() => {
133
- if (manualCodeReject) {
134
- manualCodeReject(new Error("Login cancelled"));
135
- manualCodeReject = undefined;
136
- }
137
- });
138
- }
139
- else if (providerId === "github-copilot") {
140
- dialog.showWaiting("Waiting for browser authentication...");
141
- }
142
- },
143
- onDeviceCode: (info) => {
144
- dialog.showDeviceCode(info);
145
- dialog.showWaiting("Waiting for authentication...");
146
- },
147
- onPrompt: async (prompt) => dialog.showPrompt(prompt.message, prompt.placeholder),
148
- onProgress: (message) => dialog.showProgress(message),
149
- onSelect: async (prompt) => {
150
- const options = prompt.options
110
+ const prompt = async (request) => {
111
+ if (request.type === "select") {
112
+ const options = request.options
151
113
  .map((option, index) => `${index + 1}. ${option.label}`)
152
114
  .join("\n");
153
- const answer = await dialog.showPrompt(`${prompt.message}\n\n${options}`, "Enter a number");
115
+ const answer = await dialog.showPrompt(`${request.message}\n\n${options}`, "Enter a number");
154
116
  const selectedIndex = Number.parseInt(answer.trim(), 10) - 1;
155
- return prompt.options[selectedIndex]?.id;
156
- },
157
- onManualCodeInput: () => manualCodePromise,
117
+ return request.options[selectedIndex]?.id ?? "";
118
+ }
119
+ return dialog.showPrompt(request.message, request.placeholder);
120
+ };
121
+ const notify = (event) => {
122
+ if (event.type === "auth_url")
123
+ dialog.showAuth(event.url, event.instructions);
124
+ else if (event.type === "device_code") {
125
+ dialog.showDeviceCode({
126
+ userCode: event.userCode,
127
+ verificationUri: event.verificationUri,
128
+ });
129
+ dialog.showWaiting("Waiting for authentication...");
130
+ }
131
+ else if (event.type === "progress" || event.type === "info")
132
+ dialog.showProgress(event.message);
133
+ };
134
+ void modelRuntime
135
+ .login(providerId, "oauth", {
136
+ prompt,
137
+ notify,
158
138
  signal: dialog.signal,
159
139
  })
160
140
  .then(() => finish(true))
@@ -174,7 +154,7 @@ async function runLoginDialog(ctx, providerId) {
174
154
  }
175
155
  return false;
176
156
  }
177
- async function runApiKeySetup(ctx, provider) {
157
+ export async function runApiKeySetup(ctx, provider, modelRuntime) {
178
158
  const label = API_KEY_PROVIDER_LABELS[provider];
179
159
  ctx.ui.notify(`OpenCandle stores your ${label} API key locally. After saving it, OpenCandle will select a fast default model when one is available.`, "info");
180
160
  const key = await ctx.ui.input(`Paste your ${label} API key`, "API key");
@@ -183,9 +163,19 @@ async function runApiKeySetup(ctx, provider) {
183
163
  ctx.ui.notify("No API key entered.", "warning");
184
164
  return false;
185
165
  }
186
- ctx.modelRegistry.authStorage.set(provider, { type: "api_key", key: trimmed });
187
- ctx.modelRegistry.refresh();
188
- ctx.ui.notify(`${label} API key saved to OpenCandle.`, "info");
166
+ const validation = await validateModelKey(provider, trimmed);
167
+ if (validation.status === "invalid") {
168
+ ctx.ui.notify(`Key was rejected by ${validation.providerLabel}. Paste a different key.`, "error");
169
+ return false;
170
+ }
171
+ await modelRuntime.login(provider, "api_key", {
172
+ prompt: async () => trimmed,
173
+ notify: () => { },
174
+ });
175
+ await ctx.modelRegistry.refresh();
176
+ ctx.ui.notify(validation.status === "transient"
177
+ ? `Saved — couldn't verify (network issue). ${label} API key saved to OpenCandle.`
178
+ : `${label} API key saved to OpenCandle.`, "info");
189
179
  return true;
190
180
  }
191
181
  /**
@@ -236,7 +226,7 @@ async function selectModel(api, ctx, preferredProvider) {
236
226
  ctx.ui.notify(`Model selected: ${model.provider}/${model.id}`, "info");
237
227
  return true;
238
228
  }
239
- async function runLlmSetup(api, ctx, mode) {
229
+ async function runLlmSetup(api, ctx, mode, modelRuntime) {
240
230
  while (true) {
241
231
  const requirement = getLlmSetupRequirement(ctx);
242
232
  if (requirement === "ready") {
@@ -268,15 +258,21 @@ async function runLlmSetup(api, ctx, mode) {
268
258
  return "cancelled";
269
259
  }
270
260
  if (choice === "Sign in with browser") {
261
+ if (!modelRuntime) {
262
+ ctx.ui.notify("Model authentication is unavailable in this session.", "error");
263
+ return "cancelled";
264
+ }
271
265
  const providerChoice = await selectProviderForLogin(ctx);
272
266
  if (!providerChoice) {
273
267
  continue;
274
268
  }
275
- const providerId = providerChoice === "advanced" ? await selectAdvancedOAuthProvider(ctx) : providerChoice;
269
+ const providerId = providerChoice === "advanced"
270
+ ? await selectAdvancedOAuthProvider(ctx, modelRuntime)
271
+ : providerChoice;
276
272
  if (!providerId) {
277
273
  continue;
278
274
  }
279
- const loggedIn = await runLoginDialog(ctx, providerId);
275
+ const loggedIn = await runLoginDialog(ctx, providerId, modelRuntime);
280
276
  if (!loggedIn) {
281
277
  continue;
282
278
  }
@@ -295,7 +291,11 @@ async function runLlmSetup(api, ctx, mode) {
295
291
  if (!provider) {
296
292
  continue;
297
293
  }
298
- const saved = await runApiKeySetup(ctx, provider);
294
+ if (!modelRuntime) {
295
+ ctx.ui.notify("Model authentication is unavailable in this session.", "error");
296
+ return "cancelled";
297
+ }
298
+ const saved = await runApiKeySetup(ctx, provider, modelRuntime);
299
299
  if (!saved) {
300
300
  continue;
301
301
  }
@@ -309,11 +309,10 @@ async function runLlmSetup(api, ctx, mode) {
309
309
  }
310
310
  }
311
311
  }
312
- export async function runOpenCandleSetup(api, ctx, options = { mode: "startup" }) {
312
+ export async function runOpenCandleSetup(api, ctx, options = { mode: "startup" }, modelRuntime) {
313
313
  const initialRequirement = getLlmSetupRequirement(ctx);
314
314
  if (initialRequirement !== "ready" || options.mode === "manual") {
315
- return runLlmSetup(api, ctx, options.mode);
315
+ return runLlmSetup(api, ctx, options.mode, modelRuntime);
316
316
  }
317
317
  return "ready";
318
318
  }
319
- //# sourceMappingURL=setup.js.map
@@ -31,4 +31,3 @@ function safeGetDefaults(toolName) {
31
31
  return {};
32
32
  }
33
33
  }
34
- //# sourceMappingURL=tool-adapter.js.map
@@ -280,4 +280,3 @@ function asRecord(value) {
280
280
  ? value
281
281
  : {};
282
282
  }
283
- //# sourceMappingURL=tui-session-coordinator.js.map
@@ -33,7 +33,7 @@ export class PromptContextBuilder {
33
33
  let truncationMarkers = 0;
34
34
  for (const name of SECTION_ORDER) {
35
35
  const section = this.sections.get(name);
36
- if (!section.content)
36
+ if (!section?.content)
37
37
  continue;
38
38
  const truncated = truncateTobudget(section.content, section.characterBudget);
39
39
  const wasTruncated = truncated.includes("[...truncated]");
@@ -258,4 +258,3 @@ Every committal response MUST carry four elements:
258
258
 
259
259
  ## Assumption Disclosure
260
260
  Structured workflow prompts may include a pre-rendered "Assumptions" block with correct source attribution (user-specified, saved preference, or default). Start with that block only when the workflow instructions explicitly say to. Fallback prompts include "Assumptions Context" only for internal routing context; do not reproduce that context unless the user explicitly asks for assumptions. Do NOT independently relabel any value's source anywhere in your response. When an assumptions block is shown, it is the single authoritative provenance representation.`;
261
- //# sourceMappingURL=context-builder.js.map
@@ -6,4 +6,3 @@
6
6
  export const DISCLAIMER_TEXT = "OpenCandle is a research and analysis tool, not financial advice or a fiduciary financial advisor. " +
7
7
  "Views, targets, and allocations are informational analyst output — not personalized recommendations. " +
8
8
  "Verify independently before acting.";
9
- //# sourceMappingURL=disclaimer.js.map
@@ -198,4 +198,3 @@ function placeholder(id, taskFamily, capabilityGapIds) {
198
198
  content: "",
199
199
  };
200
200
  }
201
- //# sourceMappingURL=policy-cards.js.map
@@ -32,4 +32,3 @@ export const DEFAULT_BUDGETS = {
32
32
  "provider-status": 500,
33
33
  "output-format": 2500,
34
34
  };
35
- //# sourceMappingURL=sections.js.map
@@ -46,4 +46,3 @@ function validateSymbol(symbol, search) {
46
46
  checkedAt: Date.now(),
47
47
  }));
48
48
  }
49
- //# sourceMappingURL=symbol-preflight.js.map
@@ -322,11 +322,12 @@ export function buildCompareAssetsPrompt(resolution) {
322
322
  const isOverlapComparison = resolution.resolved.metrics?.includes("overlap") ?? false;
323
323
  const hasFundContext = isFundOrIndexAssetScope(resolution.resolved.assetScope) || areLikelyFundOrIndexSymbols(symbols);
324
324
  const shouldProbeFundOverlap = !isOverlapComparison && isLongInvestmentHorizon(timeHorizon) && hasFundContext;
325
+ const technicalEndStep = shouldProbeFundOverlap ? 7 : 6;
325
326
  const sentimentStep = includeSentiment
326
- ? `\n6. Use get_sentiment_summary for each of: ${symbolList} to compare retail/news sentiment and note source availability.`
327
+ ? `\n${technicalEndStep + 1}. Use get_sentiment_summary for each of: ${symbolList} to compare retail/news sentiment and note source availability.`
327
328
  : "";
328
329
  const interestRateStep = isInterestRateSensitive
329
- ? `\n${includeSentiment ? "7" : "6"}. Use get_economic_data for the current Fed funds backdrop. Treat this as historical/current context unless you also have explicit futures or forecast evidence.`
330
+ ? `\n${technicalEndStep + (includeSentiment ? 2 : 1)}. Use get_economic_data for the current Fed funds backdrop. Treat this as historical/current context unless you also have explicit futures or forecast evidence.`
330
331
  : "";
331
332
  const sentimentMetric = includeSentiment ? ", sentiment score/summary" : "";
332
333
  const interestRateGuidance = isInterestRateSensitive
@@ -376,23 +377,23 @@ macro hedge decision guidance:
376
377
  : `- Present a comparison table with key metrics: price, P/E, revenue growth, profit margin, RSI, Sharpe, max drawdown${sentimentMetric}.
377
378
  - Highlight which asset is stronger on each metric.`;
378
379
  const technicalRiskSteps = isOverlapComparison
379
- ? `3. Use analyze_holdings_overlap with symbols [${symbolList}] to fetch provider top holdings and compute pairwise overlap by weight.
380
- 4. Use analyze_correlation across [${symbolList}] only as supporting diversification evidence; do not substitute correlation for holdings overlap.
381
- 5. Skip momentum/risk tool calls unless the user asks about timing or trade setup; the core question is top holdings and sector overlap.`
380
+ ? `4. Use analyze_holdings_overlap with symbols [${symbolList}] to fetch provider top holdings and compute pairwise overlap by weight.
381
+ 5. Use analyze_correlation across [${symbolList}] only as supporting diversification evidence; do not substitute correlation for holdings overlap.
382
+ 6. Skip momentum/risk tool calls unless the user asks about timing or trade setup; the core question is top holdings and sector overlap.`
382
383
  : shouldProbeFundOverlap
383
- ? `3. Use analyze_holdings_overlap with symbols [${symbolList}] to fetch provider top holdings and compute pairwise overlap by weight.
384
- 4. Use analyze_correlation across [${symbolList}] as supporting diversification evidence.
385
- 5. Use analyze_risk for each to compare long-horizon risk context.
386
- 6. Use get_technical_indicators only as secondary timing context; do not let RSI or short-term momentum dominate the long-horizon fund decision.`
387
- : `3. Use get_technical_indicators for each to compare momentum and trend.
388
- 4. Use analyze_risk for each to compare risk metrics.
389
- 5. Use analyze_correlation across [${symbolList}] to check diversification.`;
384
+ ? `4. Use analyze_holdings_overlap with symbols [${symbolList}] to fetch provider top holdings and compute pairwise overlap by weight.
385
+ 5. Use analyze_correlation across [${symbolList}] as supporting diversification evidence.
386
+ 6. Use analyze_risk for each to compare long-horizon risk context.
387
+ 7. Use get_technical_indicators only as secondary timing context; do not let RSI or short-term momentum dominate the long-horizon fund decision.`
388
+ : `4. Use get_technical_indicators for each to compare momentum and trend.
389
+ 5. Use analyze_risk for each to compare risk metrics.
390
+ 6. Use analyze_correlation across [${symbolList}] to check diversification.`;
390
391
  const horizonLine = timeHorizon ? `\nTime horizon: ${timeHorizon}` : "";
391
392
  const budgetLine = budget !== undefined ? `\nBudget: ${formatBudget(budget)}` : "";
392
393
  const horizonSteps = timeHorizon
393
394
  ? `
394
- 6. Adapt the comparison to the ${timeHorizon} horizon: prioritize near-term catalysts, earnings/guidance, estimate revisions, sentiment, and forward-looking valuation evidence over long-term historical averages.
395
- 7. Use historical risk and technical metrics as context, but explain what they do and do not imply over ${timeHorizon}.`
395
+ ${technicalEndStep + (includeSentiment ? 1 : 0) + (isInterestRateSensitive ? 1 : 0) + 1}. Adapt the comparison to the ${timeHorizon} horizon: prioritize near-term catalysts, earnings/guidance, estimate revisions, sentiment, and forward-looking valuation evidence over long-term historical averages.
396
+ ${technicalEndStep + (includeSentiment ? 1 : 0) + (isInterestRateSensitive ? 1 : 0) + 2}. Use historical risk and technical metrics as context, but explain what they do and do not imply over ${timeHorizon}.`
396
397
  : "";
397
398
  const horizonResponse = timeHorizon
398
399
  ? `
@@ -427,6 +428,7 @@ Compare these assets side by side: ${symbolList}${horizonLine}${budgetLine}
427
428
  Steps:
428
429
  1. Use get_stock_quote for each of: ${symbolList}.
429
430
  2. Use compare_companies with symbols [${symbols.map((s) => `"${s}"`).join(", ")}] for peer metrics. If some fundamentals are unavailable, continue the comparison with the available symbols and mark missing metrics as unavailable.
431
+ 3. Use get_price_comparison with symbols [${symbolList}] and a range that fits the resolved time horizon; use the default comparison range when no time horizon is resolved so the answer includes an indexed price comparison.
430
432
  ${technicalRiskSteps}${sentimentStep}${interestRateStep}${horizonSteps}
431
433
  ${macroHedgeSteps}
432
434
  ${interestRateGuidance}
@@ -442,4 +444,3 @@ ${tableInstruction}
442
444
  ${actionPlanResponse}
443
445
  - Note any caveats (different sectors, concentration, market cap disparity, unavailable fundamentals, unavailable forward-looking estimates, etc.).${horizonResponse}`;
444
446
  }
445
- //# sourceMappingURL=workflow-prompts.js.map
@@ -182,7 +182,7 @@ export async function getGlobalQuote(symbol, apiKey) {
182
182
  const data = await httpGet(url);
183
183
  throwIfApiMessage(data);
184
184
  const gq = data["Global Quote"];
185
- if (!gq || !gq["05. price"]) {
185
+ if (!gq?.["05. price"]) {
186
186
  throw new Error(`Alpha Vantage: No quote data for ${symbol}`);
187
187
  }
188
188
  const price = parseFloat(gq["05. price"]) || 0;
@@ -291,6 +291,5 @@ function parseNullableNum(s) {
291
291
  if (!s || s === "None" || s === "-")
292
292
  return null;
293
293
  const n = parseFloat(s);
294
- return isNaN(n) ? null : n;
294
+ return Number.isNaN(n) ? null : n;
295
295
  }
296
- //# sourceMappingURL=alpha-vantage.js.map
@@ -67,4 +67,3 @@ export async function getCryptoHistory(id, days = 180) {
67
67
  throw error;
68
68
  }
69
69
  }
70
- //# sourceMappingURL=coingecko.js.map
@@ -8,4 +8,3 @@ export class InvalidSymbolError extends Error {
8
8
  this.name = "InvalidSymbolError";
9
9
  }
10
10
  }
11
- //# sourceMappingURL=errors.js.map
@@ -90,14 +90,16 @@ function parseMcpResultBlocks(text) {
90
90
  return results;
91
91
  }
92
92
  function mapApiResults(results) {
93
- return results
94
- .filter((r) => r.url)
95
- .map((r) => ({
96
- title: r.title ?? "",
97
- url: r.url,
98
- published: r.publishedDate ?? null,
99
- snippet: (r.highlights?.join(" ") || r.text || "").slice(0, SNIPPET_MAX_CHARS),
100
- }));
93
+ return results.flatMap((r) => {
94
+ if (!r.url)
95
+ return [];
96
+ return {
97
+ title: r.title ?? "",
98
+ url: r.url,
99
+ published: r.publishedDate ?? null,
100
+ snippet: (r.highlights?.join(" ") || r.text || "").slice(0, SNIPPET_MAX_CHARS),
101
+ };
102
+ });
101
103
  }
102
104
  // ---------------------------------------------------------------------------
103
105
  // Freshness post-filter
@@ -108,7 +110,7 @@ function filterByFreshness(results, freshness) {
108
110
  if (!r.published)
109
111
  return true; // benefit of the doubt
110
112
  const pubTime = new Date(r.published).getTime();
111
- return !isNaN(pubTime) && pubTime >= cutoff;
113
+ return !Number.isNaN(pubTime) && pubTime >= cutoff;
112
114
  });
113
115
  }
114
116
  // ---------------------------------------------------------------------------
@@ -281,4 +283,3 @@ export async function exaSearch(query, opts) {
281
283
  }
282
284
  // Exported for testing
283
285
  export { enrichQueryForMcp, extractJsonRpcPayload, filterByFreshness, mapApiResults, parseMcpResultBlocks, };
284
- //# sourceMappingURL=exa-search.js.map
@@ -111,4 +111,3 @@ function commandNames(command, platform) {
111
111
  }
112
112
  return names;
113
113
  }
114
- //# sourceMappingURL=external-tool-command.js.map
@@ -18,4 +18,3 @@ export class ExternalToolNotInstalled extends Error {
18
18
  this.name = "ExternalToolNotInstalled";
19
19
  }
20
20
  }
21
- //# sourceMappingURL=external-tool-error.js.map
@@ -31,4 +31,3 @@ export async function getFearGreedIndex() {
31
31
  throw error;
32
32
  }
33
33
  }
34
- //# sourceMappingURL=fear-greed.js.map
@@ -89,4 +89,3 @@ export async function getCompanyNews(symbol, from, to, apiKey) {
89
89
  throw error;
90
90
  }
91
91
  }
92
- //# sourceMappingURL=finnhub.js.map
@@ -54,4 +54,3 @@ export async function getSeries(seriesId, apiKey, limit = 60) {
54
54
  throw error;
55
55
  }
56
56
  }
57
- //# sourceMappingURL=fred.js.map
@@ -2,6 +2,7 @@ export { getEarnings, getFinancials, getOverview } from "./alpha-vantage.js";
2
2
  export { getCryptoHistory, getCryptoPrice } from "./coingecko.js";
3
3
  export { getFearGreedIndex } from "./fear-greed.js";
4
4
  export { getSeries } from "./fred.js";
5
+ export { getLseCandles, getLseFinancialReports, getLseFinancials, type LseCandle, type LseFinancialReportRow, LseHttpError, type LseTimeframe, toLseTimeframe, } from "./lse.js";
5
6
  export { getSubredditPosts, scoreSentiment } from "./reddit.js";
6
7
  export { type SECFiling, searchFilings } from "./sec-edgar.js";
7
8
  export { getQuotes, screenStocks } from "./tradingview.js";
@@ -2,9 +2,9 @@ export { getEarnings, getFinancials, getOverview } from "./alpha-vantage.js";
2
2
  export { getCryptoHistory, getCryptoPrice } from "./coingecko.js";
3
3
  export { getFearGreedIndex } from "./fear-greed.js";
4
4
  export { getSeries } from "./fred.js";
5
+ export { getLseCandles, getLseFinancialReports, getLseFinancials, LseHttpError, toLseTimeframe, } from "./lse.js";
5
6
  export { getSubredditPosts, scoreSentiment } from "./reddit.js";
6
7
  export { searchFilings } from "./sec-edgar.js";
7
8
  export { getQuotes, screenStocks } from "./tradingview.js";
8
9
  export { braveSearch, ddgSearch, normalizeFinancialQuery, searchWeb } from "./web-search.js";
9
10
  export { clearCrumbCache, computeTimeToExpiry, getHistory, getOptionsChain, getQuote, getYahooCrumb, } from "./yahoo-finance.js";
10
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,35 @@
1
+ import type { FinancialStatement } from "../types/fundamentals.js";
2
+ export type LseTimeframe = "1m" | "5m" | "15m" | "1h" | "1d" | "1w" | "1mo";
3
+ export interface LseCandle {
4
+ ts: string;
5
+ symbol: string;
6
+ open: number;
7
+ high: number;
8
+ low: number;
9
+ close: number;
10
+ volume: number;
11
+ }
12
+ export type LseFinancialReportRow = Record<string, unknown>;
13
+ interface LseCandleOptions {
14
+ start?: string;
15
+ end?: string;
16
+ order?: "asc" | "desc";
17
+ limit?: number;
18
+ }
19
+ interface LseFinancialReportOptions {
20
+ period?: "FY" | "Q1" | "Q2" | "Q3" | "Q4";
21
+ start?: string;
22
+ end?: string;
23
+ order?: "asc" | "desc";
24
+ limit?: number;
25
+ }
26
+ export declare class LseHttpError extends Error {
27
+ readonly status: number;
28
+ readonly detail: string;
29
+ constructor(status: number, detail: string);
30
+ }
31
+ export declare function getLseCandles(symbol: string, timeframe: LseTimeframe, opts?: LseCandleOptions): Promise<LseCandle[]>;
32
+ export declare function getLseFinancialReports(symbol: string, reportType: "income" | "balance" | "cashflow", opts?: LseFinancialReportOptions): Promise<LseFinancialReportRow[]>;
33
+ export declare function getLseFinancials(symbol: string): Promise<FinancialStatement[]>;
34
+ export declare function toLseTimeframe(interval: string): LseTimeframe | undefined;
35
+ export {};