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
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=router-types.js.map
@@ -638,6 +638,13 @@ export function postProcessRouterOutput(text, output, inputContext) {
638
638
  const selectedToolBundles = isConceptualEducationRequest(text, next)
639
639
  ? []
640
640
  : selectToolBundles(next);
641
+ if (isExplicitMacroDataRequest(text) && !selectedToolBundles.includes("macro")) {
642
+ selectedToolBundles.push("macro");
643
+ diagnostics.push({
644
+ code: "macro_tool_bundle_recovered",
645
+ message: "explicit macro data request retained the macro tool bundle",
646
+ });
647
+ }
641
648
  if (selectedToolBundles.length === 0 && isConceptualEducationRequest(text, next)) {
642
649
  diagnostics.push({
643
650
  code: "conceptual_education_no_tools",
@@ -659,7 +666,7 @@ export function postProcessRouterOutput(text, output, inputContext) {
659
666
  });
660
667
  }
661
668
  function isExplicitMacroDataRequest(text) {
662
- return /\b(?:get_economic_data|fred|cpi|inflation|fed\s+funds?|unemployment|gdp|macro)\b/i.test(text);
669
+ return /\b(?:get_economic_data|fred|cpi|inflation|fed\s+funds?|unemployment|gdp|macro|fear\s*(?:&|and)\s*greed)\b/i.test(text);
663
670
  }
664
671
  function isConceptualEducationRequest(text, output) {
665
672
  if (output.routeKind !== "agent_task")
@@ -915,7 +922,7 @@ function canonicalizeAssetScopeVocabulary(output) {
915
922
  }
916
923
  function symbolsSlotClaimsPriorTurnUserProvenance(slots, text, priorTurns) {
917
924
  const slot = slots.symbols;
918
- if (!slot || slot.source !== "user" || !Array.isArray(slot.value))
925
+ if (slot?.source !== "user" || !Array.isArray(slot.value))
919
926
  return false;
920
927
  if (!priorTurns || priorTurns.length === 0)
921
928
  return false;
@@ -1091,4 +1098,3 @@ function minimalFallback(text) {
1091
1098
  reasoning: "router validation failed; emitted minimal fallback",
1092
1099
  };
1093
1100
  }
1094
- //# sourceMappingURL=router.js.map
@@ -155,4 +155,3 @@ export function resolveOptionsScreenerSlots(entities, preferences = {}) {
155
155
  missingRequired,
156
156
  };
157
157
  }
158
- //# sourceMappingURL=slot-resolver.js.map
@@ -49,4 +49,3 @@ function hasLocalTickerPhrase(token, rawInput) {
49
49
  function escapeRegExp(value) {
50
50
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
51
51
  }
52
- //# sourceMappingURL=symbol-disambiguator.js.map
@@ -42,4 +42,3 @@ function memoryEntryToProvenance(entry) {
42
42
  confidence: entry.confidence,
43
43
  };
44
44
  }
45
- //# sourceMappingURL=turn-context.js.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=types.js.map
@@ -450,4 +450,3 @@ function structuredResult(checkId, passed, failureReason) {
450
450
  failureReason,
451
451
  };
452
452
  }
453
- //# sourceMappingURL=answer-contracts.js.map
@@ -54,4 +54,3 @@ export function validateArtifactContractRegistry() {
54
54
  }
55
55
  return errors;
56
56
  }
57
- //# sourceMappingURL=artifact-contracts.js.map
@@ -19,6 +19,7 @@ export interface ProviderResultOk<T> {
19
19
  status: "ok";
20
20
  data: T;
21
21
  timestamp: string;
22
+ provider?: string;
22
23
  cached?: boolean;
23
24
  stale?: boolean;
24
25
  }
@@ -11,7 +11,7 @@ export function toEvidenceRecord(label, result, providerId) {
11
11
  provenance: {
12
12
  source: result.stale ? "stale_cache" : "fetched",
13
13
  timestamp: result.timestamp,
14
- provider: providerId,
14
+ provider: providerId ?? result.provider,
15
15
  confidence: result.stale ? 0.5 : undefined,
16
16
  },
17
17
  };
@@ -26,4 +26,3 @@ export function toEvidenceRecord(label, result, providerId) {
26
26
  },
27
27
  };
28
28
  }
29
- //# sourceMappingURL=evidence.js.map
@@ -97,4 +97,3 @@ function parseMaybeJson(raw) {
97
97
  function isPlainObject(value) {
98
98
  return typeof value === "object" && value !== null && !Array.isArray(value);
99
99
  }
100
- //# sourceMappingURL=numeric-claims.js.map
@@ -388,4 +388,3 @@ function quoteAsOfCaveat(marketStatus) {
388
388
  function isRecord(value) {
389
389
  return typeof value === "object" && value !== null && !Array.isArray(value);
390
390
  }
391
- //# sourceMappingURL=planning-evidence.js.map
@@ -143,4 +143,3 @@ function isFreshnessStamp(value) {
143
143
  typeof record.marketSession === "string" &&
144
144
  typeof record.isStaleForSession === "boolean");
145
145
  }
146
- //# sourceMappingURL=prompt-step.js.map
@@ -33,4 +33,3 @@ export class ProviderTracker {
33
33
  this.failures.clear();
34
34
  }
35
35
  }
36
- //# sourceMappingURL=provider-tracker.js.map
@@ -18,4 +18,3 @@ export function clearRunContext(token) {
18
18
  export function getProviderTracker() {
19
19
  return activeContext?.providerTracker;
20
20
  }
21
- //# sourceMappingURL=run-context.js.map
@@ -1,4 +1,4 @@
1
- import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext, SessionEntry } from "@earendil-works/pi-coding-agent";
1
+ import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext, ModelRuntime, SessionEntry } from "@earendil-works/pi-coding-agent";
2
2
  import { MemoryStorage } from "../memory/index.js";
3
3
  /**
4
4
  * Alias for the session-manager handle extensions receive via
@@ -52,7 +52,7 @@ export declare class SessionCoordinator {
52
52
  /** Run setup flow. */
53
53
  runSetup(pi: ExtensionAPI, ctx: ExtensionContext | ExtensionCommandContext, options: {
54
54
  mode: "startup" | "manual";
55
- }): Promise<"ready" | "shutdown" | "cancelled">;
55
+ }, modelRuntime?: ModelRuntime): Promise<"ready" | "shutdown" | "cancelled">;
56
56
  /** Extract and persist user preferences from natural language. */
57
57
  extractAndStorePreferences(text: string): void;
58
58
  /** Record a workflow run in storage. */
@@ -112,8 +112,8 @@ export class SessionCoordinator {
112
112
  this.sessionId = sessionId;
113
113
  }
114
114
  /** Run setup flow. */
115
- async runSetup(pi, ctx, options) {
116
- return runOpenCandleSetup(pi, ctx, options);
115
+ async runSetup(pi, ctx, options, modelRuntime) {
116
+ return runOpenCandleSetup(pi, ctx, options, modelRuntime);
117
117
  }
118
118
  /** Extract and persist user preferences from natural language. */
119
119
  extractAndStorePreferences(text) {
@@ -784,4 +784,3 @@ function shouldIncludeSavedMarketStateContext(workflowType, resolvedTurnContext,
784
784
  function isPlainObject(value) {
785
785
  return typeof value === "object" && value !== null && !Array.isArray(value);
786
786
  }
787
- //# sourceMappingURL=session-coordinator.js.map
@@ -47,4 +47,3 @@ function sanitizeTitle(raw) {
47
47
  }
48
48
  return title;
49
49
  }
50
- //# sourceMappingURL=session-title.js.map
@@ -24,4 +24,3 @@ function mergeDefaults(defaults, args) {
24
24
  function isPlainObject(value) {
25
25
  return typeof value === "object" && value !== null && !Array.isArray(value);
26
26
  }
27
- //# sourceMappingURL=tool-defaults-wrapper.js.map
@@ -154,4 +154,3 @@ export function checkNumberMatch(evidence, toolResults) {
154
154
  }
155
155
  return results;
156
156
  }
157
- //# sourceMappingURL=validation.js.map
@@ -28,4 +28,3 @@ export class WorkflowEventLogger {
28
28
  }));
29
29
  }
30
30
  }
31
- //# sourceMappingURL=workflow-events.js.map
@@ -33,4 +33,5 @@ export declare class WorkflowRunner {
33
33
  cancel(): void;
34
34
  private executeSteps;
35
35
  private logEvent;
36
+ private getProviderTracker;
36
37
  }
@@ -44,7 +44,7 @@ export class WorkflowRunner {
44
44
  /** Cancel the active run. */
45
45
  cancel() {
46
46
  const run = this.activeRun;
47
- if (!run || run.status !== "running")
47
+ if (run?.status !== "running")
48
48
  return;
49
49
  for (let i = run.currentStepIndex; i < run.steps.length; i++) {
50
50
  const step = run.steps[i];
@@ -79,7 +79,7 @@ export class WorkflowRunner {
79
79
  try {
80
80
  const context = {
81
81
  runId: run.runId,
82
- providerTracker: this.providerTracker,
82
+ providerTracker: this.getProviderTracker(),
83
83
  };
84
84
  const output = await executor(step, i, priorEvidence, context);
85
85
  // If run was cancelled during execution, stop without further transitions
@@ -125,5 +125,10 @@ export class WorkflowRunner {
125
125
  logEvent(runId, stepIndex, eventType, payload) {
126
126
  this.eventLogger?.log(runId, stepIndex, eventType, payload);
127
127
  }
128
+ getProviderTracker() {
129
+ if (!this.providerTracker) {
130
+ throw new Error("WorkflowRunner requires a ProviderTracker to execute workflow steps.");
131
+ }
132
+ return this.providerTracker;
133
+ }
128
134
  }
129
- //# sourceMappingURL=workflow-runner.js.map
@@ -29,4 +29,3 @@ export function createWorkflowRun(runId, workflowType, stepDefinitions) {
29
29
  createdAt: new Date().toISOString(),
30
30
  };
31
31
  }
32
- //# sourceMappingURL=workflow-types.js.map
@@ -41,4 +41,3 @@ export function extractTickersFromQuery(query) {
41
41
  const entities = extractEntities(query);
42
42
  return entities.symbols.slice(0, MAX_TICKERS);
43
43
  }
44
- //# sourceMappingURL=finnhub.js.map
@@ -51,4 +51,3 @@ export class RedditAdapter {
51
51
  throw new Error("Use pipeline.run() instead of adapter.fetch() directly");
52
52
  }
53
53
  }
54
- //# sourceMappingURL=reddit.js.map
@@ -29,4 +29,3 @@ export class TwitterAdapter {
29
29
  throw new Error("Use pipeline.run() instead of adapter.fetch() directly");
30
30
  }
31
31
  }
32
- //# sourceMappingURL=twitter.js.map
@@ -37,4 +37,3 @@ function canonicalizeUrl(url) {
37
37
  return url;
38
38
  }
39
39
  }
40
- //# sourceMappingURL=web.js.map
@@ -27,8 +27,10 @@ export function getSentimentPipeline() {
27
27
  if (!_pipeline) {
28
28
  const store = getSentimentStore();
29
29
  const config = getConfig();
30
- _pipeline = new SentimentPipeline(store, config.sentiment);
30
+ const sentimentConfig = config.sentiment;
31
+ if (!sentimentConfig)
32
+ throw new Error("Sentiment configuration is missing.");
33
+ _pipeline = new SentimentPipeline(store, sentimentConfig);
31
34
  }
32
35
  return _pipeline;
33
36
  }
34
- //# sourceMappingURL=index.js.map
@@ -203,4 +203,3 @@ function excerptFor(record) {
203
203
  function clamp01(value) {
204
204
  return Math.max(0, Math.min(1, value));
205
205
  }
206
- //# sourceMappingURL=insights.js.map
@@ -28,4 +28,3 @@ export const BEARISH_TERMS = [
28
28
  "tank",
29
29
  "rug",
30
30
  ];
31
- //# sourceMappingURL=keywords.js.map
@@ -66,4 +66,3 @@ function groupBySource(records) {
66
66
  }
67
67
  return groups;
68
68
  }
69
- //# sourceMappingURL=pipeline.js.map
@@ -70,4 +70,3 @@ export function scoreRecords(records) {
70
70
  };
71
71
  });
72
72
  }
73
- //# sourceMappingURL=scorer.js.map
@@ -179,4 +179,3 @@ function rowToRecord(row) {
179
179
  metadata: JSON.parse(row.metadata_json),
180
180
  };
181
181
  }
182
- //# sourceMappingURL=store.js.map
@@ -70,4 +70,3 @@ export function computeDivergence(sources, threshold) {
70
70
  message: "Sources broadly aligned",
71
71
  };
72
72
  }
73
- //# sourceMappingURL=trends.js.map
@@ -51,4 +51,3 @@ export function isSentinelRecord(val) {
51
51
  return false;
52
52
  return true;
53
53
  }
54
- //# sourceMappingURL=types.js.map
@@ -112,4 +112,3 @@ If you are about to write a response that contains zero tool call results, STOP.
112
112
  ## Assumption Disclosure
113
113
  Workflow prompts include a pre-rendered "Assumptions" block with correct source attribution (user-specified, saved preference, or default). Start your response with that block exactly as written. Do NOT independently relabel any value's source anywhere in your response. The assumptions block is the single authoritative provenance representation.${memorySection}`;
114
114
  }
115
- //# sourceMappingURL=system-prompt.js.map
package/dist/tool-kit.js CHANGED
@@ -40,4 +40,3 @@ export function registerTools(pi, tools) {
40
40
  addonToolRegistry.set(tool.name, { name: tool.name, description: tool.description });
41
41
  }
42
42
  }
43
- //# sourceMappingURL=tool-kit.js.map
@@ -5,5 +5,5 @@ declare const params: import("@sinclair/typebox").TObject<{
5
5
  }>;
6
6
  export declare const companyOverviewTool: AgentTool<typeof params, CompanyOverview | {
7
7
  credentialRequired: unknown;
8
- }>;
8
+ } | null>;
9
9
  export {};
@@ -14,6 +14,8 @@ export const companyOverviewTool = {
14
14
  async execute(_toolCallId, args) {
15
15
  return withCredentialCheck("alpha_vantage", async () => {
16
16
  const apiKey = getConfig().alphaVantageApiKey;
17
+ if (!apiKey)
18
+ throw new Error("Alpha Vantage credential is missing.");
17
19
  const result = await wrapProvider("alphavantage", () => getOverview(args.symbol.toUpperCase(), apiKey));
18
20
  if (result.status === "unavailable") {
19
21
  return {
@@ -53,4 +55,3 @@ function formatLargeNumber(n) {
53
55
  return `${(n / 1e6).toFixed(2)}M`;
54
56
  return n.toLocaleString();
55
57
  }
56
- //# sourceMappingURL=company-overview.js.map
@@ -20,8 +20,8 @@ export function computeComps(companies) {
20
20
  values[c.symbol] = def.extract(c);
21
21
  }
22
22
  const nonNull = Object.entries(values)
23
- .filter(([, v]) => v != null)
24
- .map(([sym, v]) => ({ sym, v: v }));
23
+ .filter((entry) => entry[1] != null)
24
+ .map(([sym, v]) => ({ sym, v }));
25
25
  const sorted = [...nonNull].sort((a, b) => a.v - b.v);
26
26
  const sortedVals = sorted.map((s) => s.v);
27
27
  const median = computeMedian(sortedVals);
@@ -70,12 +70,15 @@ export const compsTool = {
70
70
  async execute(_toolCallId, args) {
71
71
  return withCredentialCheck("alpha_vantage", async () => {
72
72
  const config = getConfig();
73
+ const alphaVantageApiKey = config.alphaVantageApiKey;
74
+ if (!alphaVantageApiKey)
75
+ throw new Error("Alpha Vantage credential is missing.");
73
76
  const symbols = args.symbols.map((s) => s.toUpperCase());
74
77
  const companies = [];
75
78
  const unavailableSymbols = [];
76
79
  const unavailableReasons = {};
77
80
  for (const sym of symbols) {
78
- const alphaResult = await wrapProvider("alphavantage", () => getOverview(sym, config.alphaVantageApiKey));
81
+ const alphaResult = await wrapProvider("alphavantage", () => getOverview(sym, alphaVantageApiKey));
79
82
  if (alphaResult.status === "ok") {
80
83
  companies.push(alphaResult.data);
81
84
  continue;
@@ -135,4 +138,3 @@ export const compsTool = {
135
138
  });
136
139
  },
137
140
  };
138
- //# sourceMappingURL=comps.js.map
@@ -1,6 +1,8 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import { getConfig } from "../../config.js";
3
+ import { isOverSoftThreshold } from "../../infra/lse-byte-budget.js";
3
4
  import { getFinancials, getOverview } from "../../providers/alpha-vantage.js";
5
+ import { getLseFinancials } from "../../providers/lse.js";
4
6
  import { ProviderCredentialError } from "../../providers/provider-credential-error.js";
5
7
  import { wrapProvider } from "../../providers/wrap-provider.js";
6
8
  import { getQuote, getYahooFinancials } from "../../providers/yahoo-finance.js";
@@ -129,10 +131,33 @@ export const dcfTool = {
129
131
  const symbol = args.symbol.toUpperCase();
130
132
  const config = getConfig();
131
133
  const alphaVantageApiKey = config.alphaVantageApiKey;
132
- const [alphaVantageFinancialsResult, quoteResult] = await Promise.all([
133
- optionalAlphaVantage(alphaVantageApiKey, (apiKey) => getFinancials(symbol, apiKey)),
134
- wrapProvider("yahoo", () => getQuote(symbol)),
135
- ]);
134
+ const quotePromise = wrapProvider("yahoo", () => getQuote(symbol));
135
+ const lseEligible = !!config.lseApiKey && !isOverSoftThreshold();
136
+ let lseFinancialsResult;
137
+ if (lseEligible) {
138
+ try {
139
+ lseFinancialsResult = await wrapProvider("lse", () => getLseFinancials(symbol));
140
+ }
141
+ catch (error) {
142
+ if (error instanceof ProviderCredentialError) {
143
+ lseFinancialsResult = {
144
+ status: "unavailable",
145
+ reason: `London Strategic Edge credential ${error.reason}`,
146
+ provider: "lse",
147
+ };
148
+ }
149
+ else {
150
+ throw error;
151
+ }
152
+ }
153
+ }
154
+ const lseIsFresh = lseFinancialsResult?.status === "ok" &&
155
+ lseFinancialsResult.data.length > 0 &&
156
+ !lseFinancialsResult.stale;
157
+ const alphaVantageFinancialsResult = lseIsFresh
158
+ ? undefined
159
+ : await optionalAlphaVantage(alphaVantageApiKey, (apiKey) => getFinancials(symbol, apiKey));
160
+ const quoteResult = await quotePromise;
136
161
  const missing = [];
137
162
  if (quoteResult.status === "unavailable")
138
163
  missing.push(`stock quote (${quoteResult.reason})`);
@@ -159,17 +184,21 @@ export const dcfTool = {
159
184
  details: null,
160
185
  };
161
186
  }
162
- let financialsSource = "Alpha Vantage";
187
+ let financialsSource = lseIsFresh ? "London Strategic Edge" : "Alpha Vantage";
163
188
  let financials;
164
- if (alphaVantageFinancialsResult.status === "ok" && !alphaVantageFinancialsResult.stale) {
189
+ if (lseIsFresh && lseFinancialsResult?.status === "ok") {
190
+ financials = lseFinancialsResult.data;
191
+ }
192
+ else if (alphaVantageFinancialsResult?.status === "ok" &&
193
+ !alphaVantageFinancialsResult.stale) {
165
194
  financials = alphaVantageFinancialsResult.data;
166
195
  }
167
196
  else {
168
- const alphaVantageReason = alphaVantageFinancialsResult.status === "ok"
197
+ const alphaVantageReason = alphaVantageFinancialsResult?.status === "ok"
169
198
  ? `stale cached financial statements${alphaVantageFinancialsResult.timestamp
170
199
  ? ` from ${alphaVantageFinancialsResult.timestamp}`
171
200
  : ""}`
172
- : alphaVantageFinancialsResult.reason;
201
+ : (alphaVantageFinancialsResult?.reason ?? "Alpha Vantage unavailable");
173
202
  const yahooFinancialsResult = await wrapProvider("yahoo", () => getYahooFinancials(symbol));
174
203
  if (yahooFinancialsResult.status === "unavailable") {
175
204
  return {
@@ -325,4 +354,3 @@ function formatSensitivityTable(table) {
325
354
  });
326
355
  return [header, ...rows];
327
356
  }
328
- //# sourceMappingURL=dcf.js.map
@@ -5,5 +5,5 @@ declare const params: import("@sinclair/typebox").TObject<{
5
5
  }>;
6
6
  export declare const earningsTool: AgentTool<typeof params, EarningsData | {
7
7
  credentialRequired: unknown;
8
- }>;
8
+ } | null>;
9
9
  export {};
@@ -14,6 +14,8 @@ export const earningsTool = {
14
14
  async execute(_toolCallId, args) {
15
15
  return withCredentialCheck("alpha_vantage", async () => {
16
16
  const apiKey = getConfig().alphaVantageApiKey;
17
+ if (!apiKey)
18
+ throw new Error("Alpha Vantage credential is missing.");
17
19
  const result = await wrapProvider("alphavantage", () => getEarnings(args.symbol.toUpperCase(), apiKey));
18
20
  if (result.status === "unavailable") {
19
21
  return {
@@ -43,4 +45,3 @@ export const earningsTool = {
43
45
  });
44
46
  },
45
47
  };
46
- //# sourceMappingURL=earnings.js.map
@@ -1,7 +1,10 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import { getConfig } from "../../config.js";
3
+ import { isOverSoftThreshold } from "../../infra/lse-byte-budget.js";
3
4
  import { withCredentialCheck } from "../../onboarding/tool-helpers.js";
4
5
  import { getFinancials } from "../../providers/alpha-vantage.js";
6
+ import { getLseFinancials } from "../../providers/lse.js";
7
+ import { ProviderCredentialError } from "../../providers/provider-credential-error.js";
5
8
  import { wrapProvider } from "../../providers/wrap-provider.js";
6
9
  const params = Type.Object({
7
10
  symbol: Type.String({ description: "Stock ticker symbol (e.g. AAPL, MSFT)" }),
@@ -9,18 +12,18 @@ const params = Type.Object({
9
12
  export const financialsTool = {
10
13
  name: "get_financials",
11
14
  label: "Financial Statements",
12
- description: "Get annual income statement data: revenue, gross profit, operating income, net income, and EPS. Requires Alpha Vantage.",
15
+ description: "Get annual income statement data: revenue, gross profit, operating income, net income, and EPS. Uses London Strategic Edge or Alpha Vantage.",
13
16
  parameters: params,
14
17
  async execute(_toolCallId, args) {
15
- return withCredentialCheck("alpha_vantage", async () => {
16
- const apiKey = getConfig().alphaVantageApiKey;
17
- const result = await wrapProvider("alphavantage", () => getFinancials(args.symbol.toUpperCase(), apiKey));
18
+ const symbol = args.symbol.toUpperCase();
19
+ const config = getConfig();
20
+ const renderResult = (result, source) => {
18
21
  if (result.status === "unavailable") {
19
22
  return {
20
23
  content: [
21
24
  {
22
25
  type: "text",
23
- text: `⚠ Financial statements unavailable for ${args.symbol.toUpperCase()} (${result.reason}). Analysis will proceed without financials.`,
26
+ text: `⚠ Financial statements unavailable for ${symbol} (${result.reason}). Analysis will proceed without financials.`,
24
27
  },
25
28
  ],
26
29
  details: [],
@@ -33,10 +36,87 @@ export const financialsTool = {
33
36
  details: [],
34
37
  };
35
38
  }
36
- const header = `${args.symbol.toUpperCase()} — Annual Income Statement (${statements.length} years)`;
39
+ const header = `${symbol} — Annual Income Statement (${statements.length} years)`;
37
40
  const rows = statements.map((s) => `${s.fiscalDate} | Rev: $${fmt(s.revenue)} | GP: $${fmt(s.grossProfit)} | OpInc: $${fmt(s.operatingIncome)} | Net: $${fmt(s.netIncome)}`);
38
- const text = [header, ...rows].join("\n");
39
- return { content: [{ type: "text", text }], details: statements };
41
+ const sourceLine = source ? [`Source: ${source}`] : [];
42
+ const staleLine = result.stale
43
+ ? [`Data status: stale cache from ${result.timestamp} (provider unavailable)`]
44
+ : [];
45
+ return {
46
+ content: [
47
+ {
48
+ type: "text",
49
+ text: [header, ...sourceLine, ...staleLine, ...rows].join("\n"),
50
+ },
51
+ ],
52
+ details: statements,
53
+ };
54
+ };
55
+ const runAlphaVantageOnly = () => withCredentialCheck("alpha_vantage", async () => {
56
+ const apiKey = getConfig().alphaVantageApiKey;
57
+ if (!apiKey)
58
+ throw new Error("Alpha Vantage credential is missing.");
59
+ const result = await wrapProvider("alphavantage", () => getFinancials(symbol, apiKey));
60
+ return renderResult(result);
61
+ });
62
+ const lseEligible = !!config.lseApiKey && !isOverSoftThreshold();
63
+ if (!lseEligible)
64
+ return runAlphaVantageOnly();
65
+ const lseEntry = {
66
+ provider: "lse",
67
+ fn: async () => {
68
+ try {
69
+ const statements = await getLseFinancials(symbol);
70
+ if (statements.length === 0)
71
+ throw new Error("no financial statements returned");
72
+ return statements;
73
+ }
74
+ catch (error) {
75
+ if (error instanceof ProviderCredentialError) {
76
+ throw new Error(`London Strategic Edge credential ${error.reason}`);
77
+ }
78
+ throw error;
79
+ }
80
+ },
81
+ };
82
+ if (!config.alphaVantageApiKey) {
83
+ const result = await wrapProvider(lseEntry.provider, lseEntry.fn);
84
+ if (result.status === "ok")
85
+ return renderResult(result, "London Strategic Edge");
86
+ return runAlphaVantageOnly();
87
+ }
88
+ return withCredentialCheck("alpha_vantage", async () => {
89
+ const apiKey = config.alphaVantageApiKey;
90
+ if (!apiKey)
91
+ throw new Error("Alpha Vantage credential is missing.");
92
+ const lseResult = await wrapProvider(lseEntry.provider, lseEntry.fn);
93
+ if (lseResult.status === "ok" && !lseResult.stale) {
94
+ return renderResult(lseResult, "London Strategic Edge");
95
+ }
96
+ let alphaVantageResult;
97
+ try {
98
+ alphaVantageResult = await wrapProvider("alphavantage", () => getFinancials(symbol, apiKey));
99
+ }
100
+ catch (error) {
101
+ if (error instanceof ProviderCredentialError && lseResult.status === "ok") {
102
+ return renderResult(lseResult, "London Strategic Edge");
103
+ }
104
+ throw error;
105
+ }
106
+ if (alphaVantageResult.status === "ok" && !alphaVantageResult.stale) {
107
+ return renderResult(alphaVantageResult, "Alpha Vantage");
108
+ }
109
+ if (lseResult.status === "ok") {
110
+ return renderResult(lseResult, "London Strategic Edge");
111
+ }
112
+ if (alphaVantageResult.status === "ok") {
113
+ return renderResult(alphaVantageResult, "Alpha Vantage");
114
+ }
115
+ return renderResult({
116
+ status: "unavailable",
117
+ provider: "fallback",
118
+ reason: `lse: ${lseResult.reason}; alphavantage: ${alphaVantageResult.reason}`,
119
+ });
40
120
  });
41
121
  },
42
122
  };
@@ -47,4 +127,3 @@ function fmt(n) {
47
127
  return `${(n / 1e6).toFixed(2)}M`;
48
128
  return n.toLocaleString();
49
129
  }
50
- //# sourceMappingURL=financials.js.map
@@ -77,4 +77,3 @@ export const secFilingsTool = {
77
77
  };
78
78
  },
79
79
  };
80
- //# sourceMappingURL=sec-filings.js.map