opencandle 0.11.1 → 0.12.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 (653) hide show
  1. package/README.md +20 -24
  2. package/dist/analysts/contracts.js +0 -1
  3. package/dist/analysts/orchestrator.js +0 -1
  4. package/dist/cli-main.js +13 -7
  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.js +0 -1
  9. package/dist/doctor/cli-command.js +2 -1
  10. package/dist/doctor/render.js +0 -1
  11. package/dist/doctor/report.js +40 -11
  12. package/dist/gui/server/ask-user-bridge.d.ts +19 -0
  13. package/dist/gui/server/ask-user-bridge.js +55 -0
  14. package/dist/gui/server/automation-heartbeat.d.ts +25 -0
  15. package/dist/gui/server/automation-heartbeat.js +61 -0
  16. package/dist/gui/server/background-quotes.d.ts +39 -0
  17. package/dist/gui/server/background-quotes.js +71 -0
  18. package/dist/gui/server/chat-event-adapter.d.ts +16 -0
  19. package/dist/gui/server/chat-event-adapter.js +263 -0
  20. package/dist/gui/server/gui-session-manager.d.ts +2 -0
  21. package/dist/gui/server/gui-session-manager.js +4 -0
  22. package/dist/gui/server/http-routes.d.ts +69 -0
  23. package/dist/gui/server/http-routes.js +1008 -0
  24. package/dist/gui/server/invoke-tool.d.ts +47 -0
  25. package/dist/gui/server/invoke-tool.js +373 -0
  26. package/dist/gui/server/live-chat-event-adapter.d.ts +19 -0
  27. package/dist/gui/server/live-chat-event-adapter.js +206 -0
  28. package/dist/gui/server/local-session-coordinator.d.ts +26 -0
  29. package/dist/gui/server/local-session-coordinator.js +53 -0
  30. package/dist/gui/server/market-state-api.d.ts +138 -0
  31. package/dist/gui/server/market-state-api.js +355 -0
  32. package/dist/gui/server/model-setup.d.ts +64 -0
  33. package/dist/gui/server/model-setup.js +150 -0
  34. package/dist/gui/server/private-api-access.d.ts +6 -0
  35. package/dist/gui/server/private-api-access.js +53 -0
  36. package/dist/gui/server/projector.d.ts +49 -0
  37. package/dist/gui/server/projector.js +296 -0
  38. package/dist/gui/server/prompt-observation.d.ts +8 -0
  39. package/dist/gui/server/prompt-observation.js +43 -0
  40. package/dist/gui/server/quote-snapshot-store.d.ts +14 -0
  41. package/dist/gui/server/quote-snapshot-store.js +49 -0
  42. package/dist/gui/server/server.d.ts +1 -0
  43. package/dist/gui/server/server.js +259 -0
  44. package/dist/gui/server/session-actions.d.ts +60 -0
  45. package/dist/gui/server/session-actions.js +218 -0
  46. package/dist/gui/server/session-entry-wait.d.ts +27 -0
  47. package/dist/gui/server/session-entry-wait.js +129 -0
  48. package/dist/gui/server/session-list.d.ts +2 -0
  49. package/dist/gui/server/session-list.js +11 -0
  50. package/dist/gui/server/shutdown.d.ts +10 -0
  51. package/dist/gui/server/shutdown.js +29 -0
  52. package/dist/gui/server/tool-invoke-ack.d.ts +17 -0
  53. package/dist/gui/server/tool-invoke-ack.js +26 -0
  54. package/dist/gui/server/tool-metadata.d.ts +93 -0
  55. package/dist/gui/server/tool-metadata.js +148 -0
  56. package/dist/gui/server/websocket.d.ts +9 -0
  57. package/dist/gui/server/websocket.js +124 -0
  58. package/dist/gui/server/writer-lock.d.ts +1 -0
  59. package/dist/gui/server/writer-lock.js +1 -0
  60. package/dist/gui/server/ws-hub.d.ts +50 -0
  61. package/dist/gui/server/ws-hub.js +284 -0
  62. package/dist/gui/shared/chat-events.d.ts +174 -0
  63. package/dist/gui/shared/chat-events.js +13 -0
  64. package/dist/gui/shared/event-reducer.d.ts +3 -0
  65. package/dist/gui/shared/event-reducer.js +187 -0
  66. package/dist/index.js +0 -1
  67. package/dist/infra/cache.js +0 -1
  68. package/dist/infra/freshness.js +0 -1
  69. package/dist/infra/http-client.js +1 -2
  70. package/dist/infra/index.js +0 -1
  71. package/dist/infra/market-calendar.js +0 -1
  72. package/dist/infra/native-dependencies.js +0 -1
  73. package/dist/infra/node-version.js +0 -1
  74. package/dist/infra/open-url.js +0 -1
  75. package/dist/infra/opencandle-paths.js +0 -1
  76. package/dist/infra/rate-limiter.js +0 -1
  77. package/dist/market-state/alert-conditions.js +0 -1
  78. package/dist/market-state/alert-runner.d.ts +1 -0
  79. package/dist/market-state/alert-runner.js +5 -4
  80. package/dist/market-state/daily-report.js +0 -1
  81. package/dist/market-state/local-automation-service.js +0 -1
  82. package/dist/market-state/notification-delivery.js +0 -1
  83. package/dist/market-state/resolve-for-mutation.js +0 -1
  84. package/dist/market-state/resolve.js +0 -1
  85. package/dist/market-state/service.d.ts +26 -21
  86. package/dist/market-state/service.js +175 -36
  87. package/dist/market-state/summaries.js +1 -13
  88. package/dist/memory/index.js +0 -1
  89. package/dist/memory/manager.js +0 -1
  90. package/dist/memory/preference-extractor.js +0 -1
  91. package/dist/memory/retrieval.js +0 -1
  92. package/dist/memory/sqlite.js +60 -11
  93. package/dist/memory/storage.js +0 -1
  94. package/dist/memory/tool-defaults.js +0 -1
  95. package/dist/memory/types.js +0 -1
  96. package/dist/monitor.js +0 -1
  97. package/dist/onboarding/connect.js +0 -1
  98. package/dist/onboarding/credential-interceptor.js +0 -1
  99. package/dist/onboarding/degradation-accumulator.js +0 -1
  100. package/dist/onboarding/prompt-user.d.ts +1 -1
  101. package/dist/onboarding/prompt-user.js +0 -1
  102. package/dist/onboarding/provider-status.js +0 -1
  103. package/dist/onboarding/providers.js +0 -1
  104. package/dist/onboarding/state.js +0 -1
  105. package/dist/onboarding/tool-helpers.js +0 -1
  106. package/dist/onboarding/tool-tags.js +0 -1
  107. package/dist/onboarding/validate-model-key.d.ts +17 -0
  108. package/dist/onboarding/validate-model-key.js +54 -0
  109. package/dist/onboarding/validation.js +0 -1
  110. package/dist/pi/opencandle-extension.js +2 -2
  111. package/dist/pi/session-action-dedupe.js +0 -1
  112. package/dist/pi/session-storage.js +0 -1
  113. package/dist/pi/session-writer-lock.js +0 -1
  114. package/dist/pi/session.js +0 -1
  115. package/dist/pi/setup.d.ts +2 -0
  116. package/dist/pi/setup.js +10 -3
  117. package/dist/pi/tool-adapter.js +0 -1
  118. package/dist/pi/tui-session-coordinator.js +0 -1
  119. package/dist/prompts/context-builder.js +1 -2
  120. package/dist/prompts/disclaimer.js +0 -1
  121. package/dist/prompts/policy-cards.js +0 -1
  122. package/dist/prompts/sections.js +0 -1
  123. package/dist/prompts/symbol-preflight.js +0 -1
  124. package/dist/prompts/workflow-prompts.js +0 -1
  125. package/dist/providers/alpha-vantage.js +2 -3
  126. package/dist/providers/coingecko.js +0 -1
  127. package/dist/providers/errors.js +0 -1
  128. package/dist/providers/exa-search.js +11 -10
  129. package/dist/providers/external-tool-command.js +0 -1
  130. package/dist/providers/external-tool-error.js +0 -1
  131. package/dist/providers/fear-greed.js +0 -1
  132. package/dist/providers/finnhub.js +0 -1
  133. package/dist/providers/fred.js +0 -1
  134. package/dist/providers/index.js +0 -1
  135. package/dist/providers/polymarket.js +0 -1
  136. package/dist/providers/provider-credential-error.js +0 -1
  137. package/dist/providers/reddit-cli.js +0 -1
  138. package/dist/providers/reddit.js +0 -1
  139. package/dist/providers/sec-edgar.js +0 -1
  140. package/dist/providers/tradingview.js +1 -2
  141. package/dist/providers/twitter-cli.js +0 -1
  142. package/dist/providers/twitter.js +0 -1
  143. package/dist/providers/web-search.js +15 -12
  144. package/dist/providers/with-fallback.js +0 -1
  145. package/dist/providers/wrap-provider.js +0 -1
  146. package/dist/providers/yahoo-finance.js +67 -4
  147. package/dist/routing/classify-intent.js +0 -1
  148. package/dist/routing/defaults.js +0 -1
  149. package/dist/routing/entity-extractor.js +2 -3
  150. package/dist/routing/fund-symbols.js +0 -1
  151. package/dist/routing/horizon.js +0 -1
  152. package/dist/routing/index.js +0 -1
  153. package/dist/routing/legacy-rule-router.js +0 -1
  154. package/dist/routing/planning.js +0 -1
  155. package/dist/routing/route-manifest.js +0 -1
  156. package/dist/routing/router-llm-client.d.ts +2 -2
  157. package/dist/routing/router-llm-client.js +0 -1
  158. package/dist/routing/router-prompt.js +0 -1
  159. package/dist/routing/router-types.js +0 -1
  160. package/dist/routing/router.js +1 -2
  161. package/dist/routing/slot-resolver.js +0 -1
  162. package/dist/routing/symbol-disambiguator.js +0 -1
  163. package/dist/routing/turn-context.js +0 -1
  164. package/dist/routing/types.js +0 -1
  165. package/dist/runtime/answer-contracts.js +0 -1
  166. package/dist/runtime/artifact-contracts.js +0 -1
  167. package/dist/runtime/evidence.js +0 -1
  168. package/dist/runtime/numeric-claims.js +0 -1
  169. package/dist/runtime/planning-evidence.js +0 -1
  170. package/dist/runtime/prompt-step.js +0 -1
  171. package/dist/runtime/provider-tracker.js +0 -1
  172. package/dist/runtime/run-context.js +0 -1
  173. package/dist/runtime/session-coordinator.js +0 -1
  174. package/dist/runtime/session-title.js +0 -1
  175. package/dist/runtime/tool-defaults-wrapper.js +0 -1
  176. package/dist/runtime/validation.js +0 -1
  177. package/dist/runtime/workflow-events.js +0 -1
  178. package/dist/runtime/workflow-runner.d.ts +1 -0
  179. package/dist/runtime/workflow-runner.js +8 -3
  180. package/dist/runtime/workflow-types.js +0 -1
  181. package/dist/sentiment/adapters/finnhub.js +0 -1
  182. package/dist/sentiment/adapters/reddit.js +0 -1
  183. package/dist/sentiment/adapters/twitter.js +0 -1
  184. package/dist/sentiment/adapters/web.js +0 -1
  185. package/dist/sentiment/index.js +4 -2
  186. package/dist/sentiment/insights.js +0 -1
  187. package/dist/sentiment/keywords.js +0 -1
  188. package/dist/sentiment/pipeline.js +0 -1
  189. package/dist/sentiment/scorer.js +0 -1
  190. package/dist/sentiment/store.js +0 -1
  191. package/dist/sentiment/trends.js +0 -1
  192. package/dist/sentiment/types.js +0 -1
  193. package/dist/system-prompt.js +0 -1
  194. package/dist/tool-kit.js +0 -1
  195. package/dist/tools/fundamentals/company-overview.d.ts +1 -1
  196. package/dist/tools/fundamentals/company-overview.js +2 -1
  197. package/dist/tools/fundamentals/comps.js +6 -4
  198. package/dist/tools/fundamentals/dcf.js +0 -1
  199. package/dist/tools/fundamentals/earnings.d.ts +1 -1
  200. package/dist/tools/fundamentals/earnings.js +2 -1
  201. package/dist/tools/fundamentals/financials.js +2 -1
  202. package/dist/tools/fundamentals/sec-filings.js +0 -1
  203. package/dist/tools/index.d.ts +116 -2
  204. package/dist/tools/index.js +0 -1
  205. package/dist/tools/interaction/ask-user.js +11 -1
  206. package/dist/tools/macro/event-probabilities.js +0 -1
  207. package/dist/tools/macro/fear-greed.d.ts +1 -1
  208. package/dist/tools/macro/fear-greed.js +0 -1
  209. package/dist/tools/macro/fred-data.d.ts +1 -1
  210. package/dist/tools/macro/fred-data.js +2 -1
  211. package/dist/tools/market/crypto-history.js +0 -1
  212. package/dist/tools/market/crypto-price.d.ts +2 -2
  213. package/dist/tools/market/crypto-price.js +0 -1
  214. package/dist/tools/market/screen-stocks.js +0 -1
  215. package/dist/tools/market/search-ticker.js +1 -2
  216. package/dist/tools/market/stock-history.js +0 -1
  217. package/dist/tools/market/stock-quote.d.ts +2 -2
  218. package/dist/tools/market/stock-quote.js +0 -1
  219. package/dist/tools/options/greeks.js +0 -1
  220. package/dist/tools/options/option-chain.d.ts +2 -2
  221. package/dist/tools/options/option-chain.js +0 -1
  222. package/dist/tools/portfolio/alerts.d.ts +2 -1
  223. package/dist/tools/portfolio/alerts.js +228 -2
  224. package/dist/tools/portfolio/correlation.js +23 -5
  225. package/dist/tools/portfolio/daily-report.js +0 -1
  226. package/dist/tools/portfolio/holdings-overlap.js +0 -1
  227. package/dist/tools/portfolio/notifications.js +0 -1
  228. package/dist/tools/portfolio/risk-analysis.d.ts +1 -1
  229. package/dist/tools/portfolio/risk-analysis.js +0 -1
  230. package/dist/tools/portfolio/tracker.d.ts +3 -1
  231. package/dist/tools/portfolio/tracker.js +57 -10
  232. package/dist/tools/portfolio/watchlist.d.ts +3 -6
  233. package/dist/tools/portfolio/watchlist.js +101 -110
  234. package/dist/tools/sentiment/insight-format.js +0 -1
  235. package/dist/tools/sentiment/query-match.js +0 -1
  236. package/dist/tools/sentiment/reddit-sentiment.js +0 -1
  237. package/dist/tools/sentiment/sentiment-summary.js +8 -4
  238. package/dist/tools/sentiment/sentiment-trend.d.ts +5 -1
  239. package/dist/tools/sentiment/sentiment-trend.js +6 -2
  240. package/dist/tools/sentiment/twitter-sentiment.js +0 -1
  241. package/dist/tools/sentiment/untrusted-text.js +0 -1
  242. package/dist/tools/sentiment/web-search.d.ts +1 -1
  243. package/dist/tools/sentiment/web-search.js +0 -1
  244. package/dist/tools/sentiment/web-sentiment.js +0 -1
  245. package/dist/tools/technical/backtest.js +0 -1
  246. package/dist/tools/technical/indicators.js +0 -1
  247. package/dist/types/fundamentals.js +0 -1
  248. package/dist/types/index.js +0 -1
  249. package/dist/types/macro.js +0 -1
  250. package/dist/types/market.d.ts +6 -0
  251. package/dist/types/market.js +0 -1
  252. package/dist/types/options.js +0 -1
  253. package/dist/types/portfolio.js +0 -1
  254. package/dist/types/prediction-markets.js +0 -1
  255. package/dist/types/sentiment.js +0 -1
  256. package/dist/workflows/compare-assets.js +0 -1
  257. package/dist/workflows/index.js +0 -1
  258. package/dist/workflows/options-screener.js +0 -1
  259. package/dist/workflows/portfolio-builder.js +0 -1
  260. package/gui/web/dist/assets/CatalogOverlay-CAc7e3Pf.js +1 -0
  261. package/gui/web/dist/assets/index-BOEKd9wT.css +2 -0
  262. package/gui/web/dist/assets/index-C-H05cQ2.js +65 -0
  263. package/gui/web/dist/index.html +2 -2
  264. package/package.json +11 -12
  265. package/dist/analysts/contracts.js.map +0 -1
  266. package/dist/analysts/orchestrator.js.map +0 -1
  267. package/dist/cli-main.js.map +0 -1
  268. package/dist/cli.js.map +0 -1
  269. package/dist/config.js.map +0 -1
  270. package/dist/doctor/cli-command.js.map +0 -1
  271. package/dist/doctor/render.js.map +0 -1
  272. package/dist/doctor/report.js.map +0 -1
  273. package/dist/index.js.map +0 -1
  274. package/dist/infra/cache.js.map +0 -1
  275. package/dist/infra/freshness.js.map +0 -1
  276. package/dist/infra/http-client.js.map +0 -1
  277. package/dist/infra/index.js.map +0 -1
  278. package/dist/infra/market-calendar.js.map +0 -1
  279. package/dist/infra/native-dependencies.js.map +0 -1
  280. package/dist/infra/node-version.js.map +0 -1
  281. package/dist/infra/open-url.js.map +0 -1
  282. package/dist/infra/opencandle-paths.js.map +0 -1
  283. package/dist/infra/rate-limiter.js.map +0 -1
  284. package/dist/market-state/alert-conditions.js.map +0 -1
  285. package/dist/market-state/alert-runner.js.map +0 -1
  286. package/dist/market-state/daily-report.js.map +0 -1
  287. package/dist/market-state/local-automation-service.js.map +0 -1
  288. package/dist/market-state/notification-delivery.js.map +0 -1
  289. package/dist/market-state/resolve-for-mutation.js.map +0 -1
  290. package/dist/market-state/resolve.js.map +0 -1
  291. package/dist/market-state/service.js.map +0 -1
  292. package/dist/market-state/summaries.js.map +0 -1
  293. package/dist/memory/index.js.map +0 -1
  294. package/dist/memory/manager.js.map +0 -1
  295. package/dist/memory/preference-extractor.js.map +0 -1
  296. package/dist/memory/retrieval.js.map +0 -1
  297. package/dist/memory/sqlite.js.map +0 -1
  298. package/dist/memory/storage.js.map +0 -1
  299. package/dist/memory/tool-defaults.js.map +0 -1
  300. package/dist/memory/types.js.map +0 -1
  301. package/dist/monitor.js.map +0 -1
  302. package/dist/onboarding/connect.js.map +0 -1
  303. package/dist/onboarding/credential-interceptor.js.map +0 -1
  304. package/dist/onboarding/degradation-accumulator.js.map +0 -1
  305. package/dist/onboarding/prompt-user.js.map +0 -1
  306. package/dist/onboarding/provider-status.js.map +0 -1
  307. package/dist/onboarding/providers.js.map +0 -1
  308. package/dist/onboarding/state.js.map +0 -1
  309. package/dist/onboarding/tool-helpers.js.map +0 -1
  310. package/dist/onboarding/tool-tags.js.map +0 -1
  311. package/dist/onboarding/validation.js.map +0 -1
  312. package/dist/pi/opencandle-extension.js.map +0 -1
  313. package/dist/pi/session-action-dedupe.js.map +0 -1
  314. package/dist/pi/session-storage.js.map +0 -1
  315. package/dist/pi/session-writer-lock.js.map +0 -1
  316. package/dist/pi/session.js.map +0 -1
  317. package/dist/pi/setup.js.map +0 -1
  318. package/dist/pi/tool-adapter.js.map +0 -1
  319. package/dist/pi/tui-session-coordinator.js.map +0 -1
  320. package/dist/prompts/context-builder.js.map +0 -1
  321. package/dist/prompts/disclaimer.js.map +0 -1
  322. package/dist/prompts/policy-cards.js.map +0 -1
  323. package/dist/prompts/sections.js.map +0 -1
  324. package/dist/prompts/symbol-preflight.js.map +0 -1
  325. package/dist/prompts/workflow-prompts.js.map +0 -1
  326. package/dist/providers/alpha-vantage.js.map +0 -1
  327. package/dist/providers/coingecko.js.map +0 -1
  328. package/dist/providers/errors.js.map +0 -1
  329. package/dist/providers/exa-search.js.map +0 -1
  330. package/dist/providers/external-tool-command.js.map +0 -1
  331. package/dist/providers/external-tool-error.js.map +0 -1
  332. package/dist/providers/fear-greed.js.map +0 -1
  333. package/dist/providers/finnhub.js.map +0 -1
  334. package/dist/providers/fred.js.map +0 -1
  335. package/dist/providers/index.js.map +0 -1
  336. package/dist/providers/polymarket.js.map +0 -1
  337. package/dist/providers/provider-credential-error.js.map +0 -1
  338. package/dist/providers/reddit-cli.js.map +0 -1
  339. package/dist/providers/reddit.js.map +0 -1
  340. package/dist/providers/sec-edgar.js.map +0 -1
  341. package/dist/providers/tradingview.js.map +0 -1
  342. package/dist/providers/twitter-cli.js.map +0 -1
  343. package/dist/providers/twitter.js.map +0 -1
  344. package/dist/providers/web-search.js.map +0 -1
  345. package/dist/providers/with-fallback.js.map +0 -1
  346. package/dist/providers/wrap-provider.js.map +0 -1
  347. package/dist/providers/yahoo-finance.js.map +0 -1
  348. package/dist/routing/classify-intent.js.map +0 -1
  349. package/dist/routing/defaults.js.map +0 -1
  350. package/dist/routing/entity-extractor.js.map +0 -1
  351. package/dist/routing/fund-symbols.js.map +0 -1
  352. package/dist/routing/horizon.js.map +0 -1
  353. package/dist/routing/index.js.map +0 -1
  354. package/dist/routing/legacy-rule-router.js.map +0 -1
  355. package/dist/routing/planning.js.map +0 -1
  356. package/dist/routing/route-manifest.js.map +0 -1
  357. package/dist/routing/router-llm-client.js.map +0 -1
  358. package/dist/routing/router-prompt.js.map +0 -1
  359. package/dist/routing/router-types.js.map +0 -1
  360. package/dist/routing/router.js.map +0 -1
  361. package/dist/routing/slot-resolver.js.map +0 -1
  362. package/dist/routing/symbol-disambiguator.js.map +0 -1
  363. package/dist/routing/turn-context.js.map +0 -1
  364. package/dist/routing/types.js.map +0 -1
  365. package/dist/runtime/answer-contracts.js.map +0 -1
  366. package/dist/runtime/artifact-contracts.js.map +0 -1
  367. package/dist/runtime/evidence.js.map +0 -1
  368. package/dist/runtime/numeric-claims.js.map +0 -1
  369. package/dist/runtime/planning-evidence.js.map +0 -1
  370. package/dist/runtime/prompt-step.js.map +0 -1
  371. package/dist/runtime/provider-tracker.js.map +0 -1
  372. package/dist/runtime/run-context.js.map +0 -1
  373. package/dist/runtime/session-coordinator.js.map +0 -1
  374. package/dist/runtime/session-title.js.map +0 -1
  375. package/dist/runtime/tool-defaults-wrapper.js.map +0 -1
  376. package/dist/runtime/validation.js.map +0 -1
  377. package/dist/runtime/workflow-events.js.map +0 -1
  378. package/dist/runtime/workflow-runner.js.map +0 -1
  379. package/dist/runtime/workflow-types.js.map +0 -1
  380. package/dist/sentiment/adapters/finnhub.js.map +0 -1
  381. package/dist/sentiment/adapters/reddit.js.map +0 -1
  382. package/dist/sentiment/adapters/twitter.js.map +0 -1
  383. package/dist/sentiment/adapters/web.js.map +0 -1
  384. package/dist/sentiment/index.js.map +0 -1
  385. package/dist/sentiment/insights.js.map +0 -1
  386. package/dist/sentiment/keywords.js.map +0 -1
  387. package/dist/sentiment/pipeline.js.map +0 -1
  388. package/dist/sentiment/scorer.js.map +0 -1
  389. package/dist/sentiment/store.js.map +0 -1
  390. package/dist/sentiment/trends.js.map +0 -1
  391. package/dist/sentiment/types.js.map +0 -1
  392. package/dist/system-prompt.js.map +0 -1
  393. package/dist/tool-kit.js.map +0 -1
  394. package/dist/tools/fundamentals/company-overview.js.map +0 -1
  395. package/dist/tools/fundamentals/comps.js.map +0 -1
  396. package/dist/tools/fundamentals/dcf.js.map +0 -1
  397. package/dist/tools/fundamentals/earnings.js.map +0 -1
  398. package/dist/tools/fundamentals/financials.js.map +0 -1
  399. package/dist/tools/fundamentals/sec-filings.js.map +0 -1
  400. package/dist/tools/index.js.map +0 -1
  401. package/dist/tools/interaction/ask-user.js.map +0 -1
  402. package/dist/tools/macro/event-probabilities.js.map +0 -1
  403. package/dist/tools/macro/fear-greed.js.map +0 -1
  404. package/dist/tools/macro/fred-data.js.map +0 -1
  405. package/dist/tools/market/crypto-history.js.map +0 -1
  406. package/dist/tools/market/crypto-price.js.map +0 -1
  407. package/dist/tools/market/screen-stocks.js.map +0 -1
  408. package/dist/tools/market/search-ticker.js.map +0 -1
  409. package/dist/tools/market/stock-history.js.map +0 -1
  410. package/dist/tools/market/stock-quote.js.map +0 -1
  411. package/dist/tools/options/greeks.js.map +0 -1
  412. package/dist/tools/options/option-chain.js.map +0 -1
  413. package/dist/tools/portfolio/alerts.js.map +0 -1
  414. package/dist/tools/portfolio/correlation.js.map +0 -1
  415. package/dist/tools/portfolio/daily-report.js.map +0 -1
  416. package/dist/tools/portfolio/holdings-overlap.js.map +0 -1
  417. package/dist/tools/portfolio/notifications.js.map +0 -1
  418. package/dist/tools/portfolio/risk-analysis.js.map +0 -1
  419. package/dist/tools/portfolio/tracker.js.map +0 -1
  420. package/dist/tools/portfolio/watchlist.js.map +0 -1
  421. package/dist/tools/sentiment/insight-format.js.map +0 -1
  422. package/dist/tools/sentiment/query-match.js.map +0 -1
  423. package/dist/tools/sentiment/reddit-sentiment.js.map +0 -1
  424. package/dist/tools/sentiment/sentiment-summary.js.map +0 -1
  425. package/dist/tools/sentiment/sentiment-trend.js.map +0 -1
  426. package/dist/tools/sentiment/twitter-sentiment.js.map +0 -1
  427. package/dist/tools/sentiment/untrusted-text.js.map +0 -1
  428. package/dist/tools/sentiment/web-search.js.map +0 -1
  429. package/dist/tools/sentiment/web-sentiment.js.map +0 -1
  430. package/dist/tools/technical/backtest.js.map +0 -1
  431. package/dist/tools/technical/indicators.js.map +0 -1
  432. package/dist/types/fundamentals.js.map +0 -1
  433. package/dist/types/index.js.map +0 -1
  434. package/dist/types/macro.js.map +0 -1
  435. package/dist/types/market.js.map +0 -1
  436. package/dist/types/options.js.map +0 -1
  437. package/dist/types/portfolio.js.map +0 -1
  438. package/dist/types/prediction-markets.js.map +0 -1
  439. package/dist/types/sentiment.js.map +0 -1
  440. package/dist/workflows/compare-assets.js.map +0 -1
  441. package/dist/workflows/index.js.map +0 -1
  442. package/dist/workflows/options-screener.js.map +0 -1
  443. package/dist/workflows/portfolio-builder.js.map +0 -1
  444. package/gui/server/ask-user-bridge.ts +0 -89
  445. package/gui/server/automation-heartbeat.ts +0 -97
  446. package/gui/server/background-quotes.ts +0 -127
  447. package/gui/server/chat-event-adapter.ts +0 -294
  448. package/gui/server/gui-session-manager.ts +0 -5
  449. package/gui/server/http-routes.ts +0 -1201
  450. package/gui/server/invoke-tool.ts +0 -490
  451. package/gui/server/live-chat-event-adapter.ts +0 -243
  452. package/gui/server/local-session-coordinator.ts +0 -97
  453. package/gui/server/market-state-api.ts +0 -331
  454. package/gui/server/model-setup.ts +0 -254
  455. package/gui/server/package.json +0 -5
  456. package/gui/server/private-api-access.ts +0 -62
  457. package/gui/server/projector.ts +0 -392
  458. package/gui/server/prompt-observation.ts +0 -58
  459. package/gui/server/quote-snapshot-store.ts +0 -50
  460. package/gui/server/server.ts +0 -289
  461. package/gui/server/session-actions.ts +0 -323
  462. package/gui/server/session-entry-wait.ts +0 -179
  463. package/gui/server/shutdown.ts +0 -47
  464. package/gui/server/tool-invoke-ack.ts +0 -49
  465. package/gui/server/tool-metadata.ts +0 -167
  466. package/gui/server/websocket.ts +0 -138
  467. package/gui/server/writer-lock.ts +0 -1
  468. package/gui/server/ws-hub.ts +0 -403
  469. package/gui/shared/chat-events.ts +0 -165
  470. package/gui/shared/event-reducer.ts +0 -220
  471. package/gui/web/dist/assets/CatalogOverlay-DZ1niyQm.js +0 -1
  472. package/gui/web/dist/assets/index-D4F9AJnn.css +0 -2
  473. package/gui/web/dist/assets/index-DtqMMBTr.js +0 -65
  474. package/src/analysts/contracts.ts +0 -176
  475. package/src/analysts/orchestrator.ts +0 -244
  476. package/src/cli-main.ts +0 -510
  477. package/src/cli.ts +0 -17
  478. package/src/config.ts +0 -272
  479. package/src/doctor/cli-command.ts +0 -83
  480. package/src/doctor/render.ts +0 -37
  481. package/src/doctor/report.ts +0 -638
  482. package/src/index.ts +0 -5
  483. package/src/infra/cache.ts +0 -127
  484. package/src/infra/freshness.ts +0 -165
  485. package/src/infra/http-client.ts +0 -134
  486. package/src/infra/index.ts +0 -14
  487. package/src/infra/market-calendar.ts +0 -193
  488. package/src/infra/native-dependencies.ts +0 -84
  489. package/src/infra/node-version.ts +0 -23
  490. package/src/infra/open-url.ts +0 -28
  491. package/src/infra/opencandle-paths.ts +0 -53
  492. package/src/infra/rate-limiter.ts +0 -77
  493. package/src/market-state/alert-conditions.ts +0 -82
  494. package/src/market-state/alert-runner.ts +0 -863
  495. package/src/market-state/daily-report.ts +0 -237
  496. package/src/market-state/local-automation-service.ts +0 -162
  497. package/src/market-state/notification-delivery.ts +0 -158
  498. package/src/market-state/resolve-for-mutation.ts +0 -24
  499. package/src/market-state/resolve.ts +0 -112
  500. package/src/market-state/service.ts +0 -2208
  501. package/src/market-state/summaries.ts +0 -75
  502. package/src/memory/index.ts +0 -10
  503. package/src/memory/manager.ts +0 -190
  504. package/src/memory/preference-extractor.ts +0 -106
  505. package/src/memory/retrieval.ts +0 -71
  506. package/src/memory/sqlite.ts +0 -577
  507. package/src/memory/storage.ts +0 -195
  508. package/src/memory/tool-defaults.ts +0 -108
  509. package/src/memory/types.ts +0 -71
  510. package/src/monitor.ts +0 -123
  511. package/src/onboarding/connect.ts +0 -177
  512. package/src/onboarding/credential-interceptor.ts +0 -122
  513. package/src/onboarding/degradation-accumulator.ts +0 -77
  514. package/src/onboarding/prompt-user.ts +0 -85
  515. package/src/onboarding/provider-status.ts +0 -382
  516. package/src/onboarding/providers.ts +0 -442
  517. package/src/onboarding/state.ts +0 -216
  518. package/src/onboarding/tool-helpers.ts +0 -104
  519. package/src/onboarding/tool-tags.ts +0 -244
  520. package/src/onboarding/validation.ts +0 -152
  521. package/src/pi/opencandle-extension.ts +0 -1294
  522. package/src/pi/session-action-dedupe.ts +0 -155
  523. package/src/pi/session-storage.ts +0 -5
  524. package/src/pi/session-writer-lock.ts +0 -426
  525. package/src/pi/session.ts +0 -84
  526. package/src/pi/setup.ts +0 -399
  527. package/src/pi/tool-adapter.ts +0 -49
  528. package/src/pi/tui-session-coordinator.ts +0 -351
  529. package/src/prompts/context-builder.ts +0 -326
  530. package/src/prompts/disclaimer.ts +0 -9
  531. package/src/prompts/policy-cards.ts +0 -228
  532. package/src/prompts/sections.ts +0 -46
  533. package/src/prompts/symbol-preflight.ts +0 -80
  534. package/src/prompts/workflow-prompts.ts +0 -504
  535. package/src/providers/alpha-vantage.ts +0 -340
  536. package/src/providers/coingecko.ts +0 -95
  537. package/src/providers/errors.ts +0 -9
  538. package/src/providers/exa-search.ts +0 -375
  539. package/src/providers/external-tool-command.ts +0 -164
  540. package/src/providers/external-tool-error.ts +0 -20
  541. package/src/providers/fear-greed.ts +0 -45
  542. package/src/providers/finnhub.ts +0 -125
  543. package/src/providers/fred.ts +0 -83
  544. package/src/providers/index.ts +0 -17
  545. package/src/providers/polymarket.ts +0 -214
  546. package/src/providers/provider-credential-error.ts +0 -23
  547. package/src/providers/reddit-cli.ts +0 -286
  548. package/src/providers/reddit.ts +0 -106
  549. package/src/providers/sec-edgar.ts +0 -326
  550. package/src/providers/tradingview.ts +0 -399
  551. package/src/providers/twitter-cli.ts +0 -202
  552. package/src/providers/twitter.ts +0 -102
  553. package/src/providers/web-search.ts +0 -303
  554. package/src/providers/with-fallback.ts +0 -42
  555. package/src/providers/wrap-provider.ts +0 -105
  556. package/src/providers/yahoo-finance.ts +0 -984
  557. package/src/routing/classify-intent.ts +0 -380
  558. package/src/routing/defaults.ts +0 -29
  559. package/src/routing/entity-extractor.ts +0 -557
  560. package/src/routing/fund-symbols.ts +0 -58
  561. package/src/routing/horizon.ts +0 -7
  562. package/src/routing/index.ts +0 -70
  563. package/src/routing/legacy-rule-router.ts +0 -13
  564. package/src/routing/planning.ts +0 -829
  565. package/src/routing/route-manifest.ts +0 -308
  566. package/src/routing/router-llm-client.ts +0 -64
  567. package/src/routing/router-prompt.ts +0 -159
  568. package/src/routing/router-types.ts +0 -84
  569. package/src/routing/router.ts +0 -1332
  570. package/src/routing/slot-resolver.ts +0 -213
  571. package/src/routing/symbol-disambiguator.ts +0 -72
  572. package/src/routing/turn-context.ts +0 -108
  573. package/src/routing/types.ts +0 -77
  574. package/src/runtime/answer-contracts.ts +0 -693
  575. package/src/runtime/artifact-contracts.ts +0 -77
  576. package/src/runtime/evidence.ts +0 -78
  577. package/src/runtime/numeric-claims.ts +0 -108
  578. package/src/runtime/planning-evidence.ts +0 -597
  579. package/src/runtime/prompt-step.ts +0 -185
  580. package/src/runtime/provider-tracker.ts +0 -40
  581. package/src/runtime/run-context.ts +0 -32
  582. package/src/runtime/session-coordinator.ts +0 -1037
  583. package/src/runtime/session-title.ts +0 -60
  584. package/src/runtime/tool-defaults-wrapper.ts +0 -43
  585. package/src/runtime/validation.ts +0 -211
  586. package/src/runtime/workflow-events.ts +0 -77
  587. package/src/runtime/workflow-runner.ts +0 -182
  588. package/src/runtime/workflow-types.ts +0 -105
  589. package/src/sentiment/adapters/finnhub.ts +0 -49
  590. package/src/sentiment/adapters/reddit.ts +0 -65
  591. package/src/sentiment/adapters/twitter.ts +0 -36
  592. package/src/sentiment/adapters/web.ts +0 -44
  593. package/src/sentiment/index.ts +0 -49
  594. package/src/sentiment/insights.ts +0 -269
  595. package/src/sentiment/keywords.ts +0 -31
  596. package/src/sentiment/pipeline.ts +0 -91
  597. package/src/sentiment/scorer.ts +0 -89
  598. package/src/sentiment/store.ts +0 -260
  599. package/src/sentiment/trends.ts +0 -96
  600. package/src/sentiment/types.ts +0 -112
  601. package/src/system-prompt.ts +0 -115
  602. package/src/tool-kit.ts +0 -69
  603. package/src/tools/AGENTS.md +0 -36
  604. package/src/tools/fundamentals/company-overview.ts +0 -64
  605. package/src/tools/fundamentals/comps.ts +0 -180
  606. package/src/tools/fundamentals/dcf.ts +0 -447
  607. package/src/tools/fundamentals/earnings.ts +0 -57
  608. package/src/tools/fundamentals/financials.ts +0 -63
  609. package/src/tools/fundamentals/sec-filings.ts +0 -105
  610. package/src/tools/index.ts +0 -104
  611. package/src/tools/interaction/ask-user.ts +0 -93
  612. package/src/tools/macro/event-probabilities.ts +0 -141
  613. package/src/tools/macro/fear-greed.ts +0 -41
  614. package/src/tools/macro/fred-data.ts +0 -92
  615. package/src/tools/market/crypto-history.ts +0 -72
  616. package/src/tools/market/crypto-price.ts +0 -65
  617. package/src/tools/market/screen-stocks.ts +0 -290
  618. package/src/tools/market/search-ticker.ts +0 -254
  619. package/src/tools/market/stock-history.ts +0 -104
  620. package/src/tools/market/stock-quote.ts +0 -73
  621. package/src/tools/options/greeks.ts +0 -81
  622. package/src/tools/options/option-chain.ts +0 -134
  623. package/src/tools/portfolio/alerts.ts +0 -457
  624. package/src/tools/portfolio/correlation.ts +0 -189
  625. package/src/tools/portfolio/daily-report.ts +0 -107
  626. package/src/tools/portfolio/holdings-overlap.ts +0 -139
  627. package/src/tools/portfolio/notifications.ts +0 -45
  628. package/src/tools/portfolio/risk-analysis.ts +0 -173
  629. package/src/tools/portfolio/tracker.ts +0 -308
  630. package/src/tools/portfolio/watchlist.ts +0 -288
  631. package/src/tools/sentiment/insight-format.ts +0 -50
  632. package/src/tools/sentiment/query-match.ts +0 -117
  633. package/src/tools/sentiment/reddit-sentiment.ts +0 -403
  634. package/src/tools/sentiment/sentiment-summary.ts +0 -383
  635. package/src/tools/sentiment/sentiment-trend.ts +0 -75
  636. package/src/tools/sentiment/twitter-sentiment.ts +0 -287
  637. package/src/tools/sentiment/untrusted-text.ts +0 -21
  638. package/src/tools/sentiment/web-search.ts +0 -186
  639. package/src/tools/sentiment/web-sentiment.ts +0 -96
  640. package/src/tools/technical/backtest.ts +0 -336
  641. package/src/tools/technical/indicators.ts +0 -281
  642. package/src/types/fundamentals.ts +0 -47
  643. package/src/types/index.ts +0 -26
  644. package/src/types/macro.ts +0 -27
  645. package/src/types/market.ts +0 -46
  646. package/src/types/options.ts +0 -53
  647. package/src/types/portfolio.ts +0 -83
  648. package/src/types/prediction-markets.ts +0 -13
  649. package/src/types/sentiment.ts +0 -129
  650. package/src/workflows/compare-assets.ts +0 -89
  651. package/src/workflows/index.ts +0 -3
  652. package/src/workflows/options-screener.ts +0 -125
  653. package/src/workflows/portfolio-builder.ts +0 -63
@@ -206,17 +206,20 @@ export async function searchWeb(query, opts) {
206
206
  entries.push({ provider: "exa", fn: () => exaSearch(normalized, resolved) });
207
207
  break;
208
208
  case "brave":
209
- if (!config.braveApiKey) {
210
- return {
211
- status: "unavailable",
212
- reason: "BRAVE_API_KEY not configured",
209
+ {
210
+ const braveApiKey = config.braveApiKey;
211
+ if (!braveApiKey) {
212
+ return {
213
+ status: "unavailable",
214
+ reason: "BRAVE_API_KEY not configured",
215
+ provider: "brave_search",
216
+ };
217
+ }
218
+ entries.push({
213
219
  provider: "brave_search",
214
- };
220
+ fn: () => braveSearch(normalized, resolved, braveApiKey),
221
+ });
215
222
  }
216
- entries.push({
217
- provider: "brave_search",
218
- fn: () => braveSearch(normalized, resolved, config.braveApiKey),
219
- });
220
223
  break;
221
224
  case "ddg":
222
225
  entries.push({ provider: "ddg", fn: () => ddgSearch(normalized, resolved) });
@@ -226,13 +229,13 @@ export async function searchWeb(query, opts) {
226
229
  }
227
230
  // Default cascade: Exa → Brave → DDG
228
231
  entries.push({ provider: "exa", fn: () => exaSearch(normalized, resolved) });
229
- if (config.braveApiKey) {
232
+ const braveApiKey = config.braveApiKey;
233
+ if (braveApiKey) {
230
234
  entries.push({
231
235
  provider: "brave_search",
232
- fn: () => braveSearch(normalized, resolved, config.braveApiKey),
236
+ fn: () => braveSearch(normalized, resolved, braveApiKey),
233
237
  });
234
238
  }
235
239
  entries.push({ provider: "ddg", fn: () => ddgSearch(normalized, resolved) });
236
240
  return withFallback(entries);
237
241
  }
238
- //# sourceMappingURL=web-search.js.map
@@ -31,4 +31,3 @@ export async function withFallback(entries) {
31
31
  provider: entries[0]?.provider ?? "unknown",
32
32
  };
33
33
  }
34
- //# sourceMappingURL=with-fallback.js.map
@@ -93,4 +93,3 @@ function isExternalToolSetupError(error) {
93
93
  message.includes("unauthorized") ||
94
94
  message.includes("expired"));
95
95
  }
96
- //# sourceMappingURL=wrap-provider.js.map
@@ -84,6 +84,11 @@ export async function getQuote(symbol) {
84
84
  const open = meta.regularMarketOpen ?? indicators?.open?.[0] ?? price;
85
85
  const quote = {
86
86
  symbol: meta.symbol,
87
+ name: typeof meta.longName === "string" && meta.longName.trim() !== ""
88
+ ? meta.longName.trim()
89
+ : typeof meta.shortName === "string" && meta.shortName.trim() !== ""
90
+ ? meta.shortName.trim()
91
+ : undefined,
87
92
  price,
88
93
  change,
89
94
  changePercent,
@@ -105,8 +110,9 @@ export async function getQuote(symbol) {
105
110
  if (isZeroResultQuote(quote)) {
106
111
  throw new InvalidSymbolError(symbol.toUpperCase(), "yahoo");
107
112
  }
108
- cache.set(cacheKey, quote, TTL.QUOTE);
109
- return quote;
113
+ const enrichedQuote = await enrichQuoteWithExtendedHours(symbol, quote);
114
+ cache.set(cacheKey, enrichedQuote, TTL.QUOTE);
115
+ return enrichedQuote;
110
116
  }
111
117
  catch (error) {
112
118
  const stale = cache.getStale(cacheKey, STALE_LIMIT.QUOTE);
@@ -115,6 +121,64 @@ export async function getQuote(symbol) {
115
121
  throw error;
116
122
  }
117
123
  }
124
+ async function enrichQuoteWithExtendedHours(symbol, quote) {
125
+ try {
126
+ await rateLimiter.acquire("yahoo");
127
+ const yahooQuote = (await getYahooFinance2Client().quote(symbol));
128
+ if (!yahooQuote)
129
+ return quote;
130
+ const marketState = normalizeMarketState(yahooQuote.marketState);
131
+ if (!marketState)
132
+ return quote;
133
+ const withMarketState = { ...quote, marketState };
134
+ if (marketState !== "PRE" && marketState !== "POST")
135
+ return withMarketState;
136
+ const extended = marketState === "PRE" ? preMarketFields(yahooQuote) : postMarketFields(yahooQuote);
137
+ if (!Number.isFinite(extended.price))
138
+ return withMarketState;
139
+ return {
140
+ ...withMarketState,
141
+ extendedPrice: extended.price,
142
+ extendedChange: extended.change,
143
+ extendedChangePercent: extended.changePercent,
144
+ extendedAsOf: toIsoString(extended.time),
145
+ };
146
+ }
147
+ catch {
148
+ return quote;
149
+ }
150
+ }
151
+ function normalizeMarketState(value) {
152
+ if (value === "PRE" || value === "PREPRE")
153
+ return "PRE";
154
+ if (value === "POST" || value === "POSTPOST")
155
+ return "POST";
156
+ if (value === "REGULAR" || value === "CLOSED")
157
+ return value;
158
+ return undefined;
159
+ }
160
+ function preMarketFields(quote) {
161
+ return {
162
+ price: quote.extendedMarketPrice ?? quote.preMarketPrice,
163
+ change: quote.extendedMarketChange ?? quote.preMarketChange,
164
+ changePercent: quote.extendedMarketChangePercent ?? quote.preMarketChangePercent,
165
+ time: quote.extendedMarketTime ?? quote.preMarketTime,
166
+ };
167
+ }
168
+ function postMarketFields(quote) {
169
+ return {
170
+ price: quote.extendedMarketPrice ?? quote.postMarketPrice,
171
+ change: quote.extendedMarketChange ?? quote.postMarketChange,
172
+ changePercent: quote.extendedMarketChangePercent ?? quote.postMarketChangePercent,
173
+ time: quote.extendedMarketTime ?? quote.postMarketTime,
174
+ };
175
+ }
176
+ function toIsoString(value) {
177
+ if (value instanceof Date)
178
+ return Number.isNaN(value.getTime()) ? undefined : value.toISOString();
179
+ const timestamp = typeof value === "number" ? value : Date.parse(value ?? "");
180
+ return Number.isFinite(timestamp) ? new Date(timestamp).toISOString() : undefined;
181
+ }
118
182
  export async function getYahooFinancials(symbol) {
119
183
  const normalizedSymbol = symbol.toUpperCase();
120
184
  const cacheKey = `yahoo:financials:${normalizedSymbol}`;
@@ -326,7 +390,7 @@ async function getYahooCompanySummary(symbol) {
326
390
  try {
327
391
  return (await getYahooFinance2Client().quoteSummary(symbol, { modules: [...modules] }, { validateResult: false }));
328
392
  }
329
- catch (error) {
393
+ catch (_error) {
330
394
  const data = await getYahooQuoteSummary(symbol, modules.join(","));
331
395
  if (data.quoteSummary.error) {
332
396
  throw new Error(`Yahoo Finance: ${data.quoteSummary.error.description ?? data.quoteSummary.error.code ?? "quoteSummary error"}`);
@@ -717,4 +781,3 @@ function yahooMarketTimeToIso(value) {
717
781
  }
718
782
  return date && Number.isFinite(date.getTime()) ? date.toISOString() : undefined;
719
783
  }
720
- //# sourceMappingURL=yahoo-finance.js.map
@@ -318,4 +318,3 @@ const FINANCE_SIGNAL_PATTERN = new RegExp(`\\b(?:${FINANCE_SIGNAL_TERMS.map((ter
318
318
  export function hasFinanceSignals(input) {
319
319
  return FINANCE_SIGNAL_PATTERN.test(input);
320
320
  }
321
- //# sourceMappingURL=classify-intent.js.map
@@ -23,4 +23,3 @@ export function parseDteTarget(dteTarget) {
23
23
  }
24
24
  return null;
25
25
  }
26
- //# sourceMappingURL=defaults.js.map
@@ -357,14 +357,14 @@ function extractMaxPremium(input) {
357
357
  const under = input.match(/\b(?:under|below|less\s+than|max(?:imum)?|up\s+to)\s+\$?\s*([\d,]+(?:\.\d+)?)\s*([kK])?\b/i);
358
358
  if (under) {
359
359
  const base = parseFloat(under[1].replace(/,/g, ""));
360
- if (isNaN(base))
360
+ if (Number.isNaN(base))
361
361
  return undefined;
362
362
  return under[2] ? base * 1000 : base;
363
363
  }
364
364
  const trailing = input.match(/\$\s*([\d,]+(?:\.\d+)?)\s*([kK])?\s*(?:premium|max\s*premium)\b/i);
365
365
  if (trailing) {
366
366
  const base = parseFloat(trailing[1].replace(/,/g, ""));
367
- if (isNaN(base))
367
+ if (Number.isNaN(base))
368
368
  return undefined;
369
369
  return trailing[2] ? base * 1000 : base;
370
370
  }
@@ -494,4 +494,3 @@ function extractCompareMetrics(input) {
494
494
  metrics.push("overlap");
495
495
  return metrics.length > 0 ? metrics : undefined;
496
496
  }
497
- //# sourceMappingURL=entity-extractor.js.map
@@ -52,4 +52,3 @@ export function areLikelyFundOrIndexSymbols(symbols) {
52
52
  export function isFundOrIndexAssetScope(assetScope) {
53
53
  return assetScope !== undefined && /(?:^|[^a-z])(?:etf|fund|index)(?:$|[^a-z])/i.test(assetScope);
54
54
  }
55
- //# sourceMappingURL=fund-symbols.js.map
@@ -7,4 +7,3 @@ export function isLongInvestmentHorizon(timeHorizon) {
7
7
  const years = normalized.match(/^(\d+)_years$/);
8
8
  return years ? Number(years[1]) >= 3 : false;
9
9
  }
10
- //# sourceMappingURL=horizon.js.map
@@ -9,4 +9,3 @@ export { createPiAiRouterClient } from "./router-llm-client.js";
9
9
  export { buildRouterPrompt } from "./router-prompt.js";
10
10
  export { resolveOptionsScreenerSlots, resolvePortfolioSlots } from "./slot-resolver.js";
11
11
  export { buildMemoryQueryPlan, buildResolvedTurnContext, } from "./turn-context.js";
12
- //# sourceMappingURL=index.js.map
@@ -9,4 +9,3 @@ import { classifyIntent } from "./classify-intent.js";
9
9
  export function classifyWithLegacyRules(input) {
10
10
  return classifyIntent(input);
11
11
  }
12
- //# sourceMappingURL=legacy-rule-router.js.map
@@ -562,4 +562,3 @@ function isAllowedForOutput(entry, output) {
562
562
  return false;
563
563
  return entry.workflows.includes(output.workflow);
564
564
  }
565
- //# sourceMappingURL=planning.js.map
@@ -238,4 +238,3 @@ export function memoryScopesForRoute(routeKind, workflow) {
238
238
  return WORKFLOW_CAPABILITY_MANIFEST[workflow]?.memoryScopes ?? [];
239
239
  return ROUTE_CAPABILITY_MANIFEST[routeKind]?.memoryScopes ?? [];
240
240
  }
241
- //# sourceMappingURL=route-manifest.js.map
@@ -1,4 +1,4 @@
1
- import type { Model } from "@earendil-works/pi-ai";
1
+ import type { Api, Model } from "@earendil-works/pi-ai";
2
2
  import type { RouterLlmClient } from "./router-types.js";
3
3
  /**
4
4
  * Build a router LLM client backed by pi-ai's `completeSimple`. The client
@@ -8,4 +8,4 @@ import type { RouterLlmClient } from "./router-types.js";
8
8
  * Zero tools are passed — the router operates on text alone. Temperature
9
9
  * is pinned low for structured-output stability.
10
10
  */
11
- export declare function createPiAiRouterClient(model: Model<"anthropic-messages"> | Model<any>): RouterLlmClient;
11
+ export declare function createPiAiRouterClient(model: Model<"anthropic-messages"> | Model<Api>): RouterLlmClient;
@@ -54,4 +54,3 @@ function isUnsupportedTemperatureError(error) {
54
54
  const message = error instanceof Error ? error.message : String(error);
55
55
  return /unsupported parameter/i.test(message) && /temperature/i.test(message);
56
56
  }
57
- //# sourceMappingURL=router-llm-client.js.map
@@ -136,4 +136,3 @@ ${input.text}
136
136
 
137
137
  Respond with the JSON object. Nothing else.`;
138
138
  }
139
- //# sourceMappingURL=router-prompt.js.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=router-types.js.map
@@ -915,7 +915,7 @@ function canonicalizeAssetScopeVocabulary(output) {
915
915
  }
916
916
  function symbolsSlotClaimsPriorTurnUserProvenance(slots, text, priorTurns) {
917
917
  const slot = slots.symbols;
918
- if (!slot || slot.source !== "user" || !Array.isArray(slot.value))
918
+ if (slot?.source !== "user" || !Array.isArray(slot.value))
919
919
  return false;
920
920
  if (!priorTurns || priorTurns.length === 0)
921
921
  return false;
@@ -1091,4 +1091,3 @@ function minimalFallback(text) {
1091
1091
  reasoning: "router validation failed; emitted minimal fallback",
1092
1092
  };
1093
1093
  }
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
@@ -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
@@ -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
@@ -325,4 +325,3 @@ function formatSensitivityTable(table) {
325
325
  });
326
326
  return [header, ...rows];
327
327
  }
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
@@ -14,6 +14,8 @@ export const financialsTool = {
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", () => getFinancials(args.symbol.toUpperCase(), apiKey));
18
20
  if (result.status === "unavailable") {
19
21
  return {
@@ -47,4 +49,3 @@ function fmt(n) {
47
49
  return `${(n / 1e6).toFixed(2)}M`;
48
50
  return n.toLocaleString();
49
51
  }
50
- //# sourceMappingURL=financials.js.map
@@ -77,4 +77,3 @@ export const secFilingsTool = {
77
77
  };
78
78
  },
79
79
  };
80
- //# sourceMappingURL=sec-filings.js.map