gloomberb 0.10.5 → 0.11.1

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 (660) hide show
  1. package/README.md +58 -9
  2. package/README.zh-CN.md +6 -6
  3. package/package.json +12 -3
  4. package/src/api-client/auth.ts +48 -10
  5. package/src/api-client/data.ts +72 -0
  6. package/src/api-client/index.test.ts +158 -0
  7. package/src/api-client/index.ts +115 -4
  8. package/src/api-client/paths.ts +73 -0
  9. package/src/api-client/request.test.ts +30 -0
  10. package/src/api-client/request.ts +58 -21
  11. package/src/api-client/socket-health.test.ts +80 -0
  12. package/src/api-client/socket.ts +110 -6
  13. package/src/api-client/types.ts +267 -0
  14. package/src/app/global-shortcuts.test.tsx +144 -9
  15. package/src/app/global-shortcuts.ts +33 -11
  16. package/src/app/runtime/broker-import.ts +39 -5
  17. package/src/app/runtime/startup.ts +7 -1
  18. package/src/app/runtime/update.ts +32 -5
  19. package/src/app.tsx +48 -24
  20. package/src/architecture/import-boundaries.test.ts +5 -1
  21. package/src/brokers/broker-ticker-sync.ts +3 -8
  22. package/src/brokers/sync-broker-instance.test.ts +59 -0
  23. package/src/brokers/sync-broker-instance.ts +37 -13
  24. package/src/capabilities/chart-series.ts +318 -0
  25. package/src/capabilities/factories.ts +50 -0
  26. package/src/capabilities/index.ts +1 -0
  27. package/src/capabilities/registry.test.ts +135 -0
  28. package/src/capabilities/registry.ts +31 -4
  29. package/src/capabilities/types.ts +52 -0
  30. package/src/cli/commands/overview.ts +2 -2
  31. package/src/cli/desktop-pane-shot.ts +2 -0
  32. package/src/cli/index.ts +10 -4
  33. package/src/cli/pane-functions/catalog.ts +4 -0
  34. package/src/cli/pane-functions/data.ts +6 -1
  35. package/src/cli/pane-functions/discovery.ts +76 -10
  36. package/src/cli/pane-functions/report.test.ts +76 -0
  37. package/src/cli/pane-functions/report.ts +7 -1
  38. package/src/cli/pane-functions/resolver.ts +4 -1
  39. package/src/cli/pane-functions/screenshot.test.ts +56 -3
  40. package/src/cli/pane-functions/screenshot.ts +68 -5
  41. package/src/cli/registry.ts +1 -1
  42. package/src/components/chart/composite/composite-chart.test.tsx +54 -0
  43. package/src/components/chart/composite/composite-chart.tsx +96 -18
  44. package/src/components/chart/composite/downsample.test.ts +136 -0
  45. package/src/components/chart/composite/downsample.ts +208 -0
  46. package/src/components/chart/composite/format.test.ts +34 -0
  47. package/src/components/chart/composite/format.ts +33 -10
  48. package/src/components/chart/composite/panel-series.test.ts +66 -0
  49. package/src/components/chart/composite/panel-series.ts +101 -0
  50. package/src/components/chart/core/axis-format.ts +13 -3
  51. package/src/components/chart/core/index.test.ts +7 -0
  52. package/src/components/chart/core/renderer.ts +3 -4
  53. package/src/components/chart/multi-line/renderer.ts +1 -0
  54. package/src/components/chart/native/kitty/index.test.ts +25 -3
  55. package/src/components/chart/native/kitty/support.ts +37 -3
  56. package/src/components/chart/native/use-chart-text-fallback.ts +19 -0
  57. package/src/components/chart/static/chart/surface.tsx +43 -12
  58. package/src/components/chart/static/multi-line-chart-surface.tsx +41 -5
  59. package/src/components/command-bar/commands/direct/index.ts +18 -0
  60. package/src/components/command-bar/commands/registry.ts +14 -0
  61. package/src/components/command-bar/routes/root/article-results.test.ts +83 -0
  62. package/src/components/command-bar/routes/root/article-results.ts +55 -0
  63. package/src/components/command-bar/routes/root/command-items.ts +3 -0
  64. package/src/components/command-bar/routes/root/results.ts +38 -11
  65. package/src/components/command-bar/routes/root/runtime.ts +6 -2
  66. package/src/components/command-bar/routes/ticker-search/actions.ts +1 -1
  67. package/src/components/command-bar/surface/assist.test.tsx +13 -6
  68. package/src/components/command-bar/surface/index.tsx +39 -1
  69. package/src/components/command-bar/view-model.test.ts +19 -0
  70. package/src/components/command-bar/view-model.ts +39 -3
  71. package/src/components/command-bar/workflow/collection-actions.test.ts +94 -0
  72. package/src/components/command-bar/workflow/collection-actions.ts +14 -3
  73. package/src/components/command-bar/workflow/ops.test.ts +136 -0
  74. package/src/components/command-bar/workflow/ops.ts +71 -1
  75. package/src/components/company-logo.test.ts +19 -0
  76. package/src/components/company-logo.tsx +60 -0
  77. package/src/components/feed-data-table/stack-view.tsx +7 -1
  78. package/src/components/index.ts +2 -1
  79. package/src/components/layout/detached-pane-shell.tsx +11 -5
  80. package/src/components/layout/header.test.tsx +35 -0
  81. package/src/components/layout/header.tsx +106 -14
  82. package/src/components/layout/pane/cycle-order.test.ts +0 -1
  83. package/src/components/layout/pane/footer/index.test.tsx +19 -19
  84. package/src/components/layout/pane/header.tsx +2 -13
  85. package/src/components/layout/shell/index.tsx +5 -0
  86. package/src/components/layout/status-bar.test.tsx +36 -1
  87. package/src/components/layout/status-bar.tsx +48 -2
  88. package/src/components/onboarding/account-step/chooser-panel.tsx +27 -50
  89. package/src/components/onboarding/account-step/form-panel.tsx +88 -30
  90. package/src/components/onboarding/account-step/index.tsx +11 -2
  91. package/src/components/onboarding/account-step/qr-panel.tsx +68 -0
  92. package/src/components/onboarding/account-step/signed-in-panel.tsx +5 -8
  93. package/src/components/onboarding/onboarding-frame.tsx +517 -0
  94. package/src/components/onboarding/onboarding-steps.tsx +0 -264
  95. package/src/components/onboarding/onboarding-wizard.test.tsx +665 -196
  96. package/src/components/onboarding/onboarding-wizard.tsx +857 -267
  97. package/src/components/onboarding/portfolio-step/broker-fields-panel.tsx +81 -51
  98. package/src/components/onboarding/portfolio-step/broker-setup-panel.tsx +14 -20
  99. package/src/components/onboarding/portfolio-step/broker-sync-panel.tsx +8 -11
  100. package/src/components/onboarding/portfolio-step/choose-panel.tsx +18 -22
  101. package/src/components/onboarding/portfolio-step/index.tsx +3 -0
  102. package/src/components/onboarding/portfolio-step/types.ts +3 -0
  103. package/src/components/onboarding/wizard-account.ts +41 -25
  104. package/src/components/onboarding/wizard-broker-sync.ts +45 -67
  105. package/src/components/onboarding/wizard-model.ts +18 -2
  106. package/src/components/table-view-shared.test.ts +11 -0
  107. package/src/components/table-view-shared.tsx +26 -0
  108. package/src/components/ui/data-table/index.tsx +19 -1
  109. package/src/components/ui/data-table/opentui/index.tsx +29 -9
  110. package/src/components/ui/data-table/types.ts +2 -0
  111. package/src/components/ui/external-link.tsx +4 -2
  112. package/src/components/ui/fields.tsx +5 -1
  113. package/src/components/ui/loading.tsx +1 -1
  114. package/src/components/ui/status.tsx +76 -4
  115. package/src/components/ui/table-layout.test.ts +24 -0
  116. package/src/components/ui/table-layout.ts +90 -23
  117. package/src/components/ui/tabs.tsx +86 -4
  118. package/src/core/app-services.ts +14 -3
  119. package/src/core/connection-health.test.ts +143 -0
  120. package/src/core/connection-health.ts +295 -0
  121. package/src/core/state/app/layout-reducer.ts +34 -0
  122. package/src/core/state/app/layout.ts +21 -0
  123. package/src/core/state/app/state.ts +10 -0
  124. package/src/core/state/app/types.ts +7 -1
  125. package/src/data/config/chart-settings.ts +11 -2
  126. package/src/data/config/store/index.test.ts +83 -9
  127. package/src/data/config/store/migrations.ts +16 -0
  128. package/src/data/config/store/normalize.ts +59 -1
  129. package/src/data/fred-series.ts +8 -2
  130. package/src/i18n/es.ts +135 -0
  131. package/src/i18n/ja.ts +135 -0
  132. package/src/i18n/ko.ts +135 -0
  133. package/src/i18n/zh-cn.ts +135 -0
  134. package/src/i18n/zh-tw.ts +135 -0
  135. package/src/market-data/coordinator/chart.ts +3 -2
  136. package/src/market-data/coordinator/index.test.ts +2 -2
  137. package/src/market-data/coordinator/index.ts +1 -1
  138. package/src/market-data/hooks.tsx +3 -2
  139. package/src/market-data/market/format.test.ts +7 -0
  140. package/src/market-data/market/freshness.ts +5 -2
  141. package/src/market-data/market/status.test.ts +12 -0
  142. package/src/market-data/market/status.ts +34 -17
  143. package/src/market-data/quotes/freshness.test.ts +16 -0
  144. package/src/news/aggregator.test.ts +131 -3
  145. package/src/news/aggregator.ts +163 -27
  146. package/src/news/hooks.test.tsx +2 -0
  147. package/src/news/hooks.ts +31 -1
  148. package/src/news/news-model.ts +5 -2
  149. package/src/news/types.ts +7 -0
  150. package/src/notifications/app-notifier.test.ts +28 -6
  151. package/src/notifications/app-notifier.ts +24 -5
  152. package/src/plugins/broker-sync/broker-sync.test.ts +159 -0
  153. package/src/plugins/broker-sync/native-loader.ts +10 -0
  154. package/src/plugins/broker-sync/normalize.ts +301 -0
  155. package/src/plugins/broker-sync/public.ts +122 -0
  156. package/src/plugins/broker-sync/robinhood-native.ts +367 -0
  157. package/src/plugins/broker-sync/robinhood.ts +114 -0
  158. package/src/plugins/broker-sync/simplefin-native.ts +201 -0
  159. package/src/plugins/broker-sync/simplefin.ts +70 -0
  160. package/src/plugins/builtin/account-management/footer.ts +8 -19
  161. package/src/plugins/builtin/account-management/pane.tsx +18 -13
  162. package/src/plugins/builtin/ai/pi/host.ts +6 -5
  163. package/src/plugins/builtin/ai/providers.ts +1 -1
  164. package/src/plugins/builtin/ai/screener/footer.ts +0 -7
  165. package/src/plugins/builtin/ai/screener/pane.test.tsx +2 -1
  166. package/src/plugins/builtin/ai/screener/pane.tsx +3 -1
  167. package/src/plugins/builtin/ai/screener/results-view.tsx +8 -0
  168. package/src/plugins/builtin/ai/screener/runner.ts +7 -3
  169. package/src/plugins/builtin/ai/workspace/pane.tsx +13 -2
  170. package/src/plugins/builtin/alerts/alert-engine.test.ts +38 -1
  171. package/src/plugins/builtin/alerts/alert-engine.ts +43 -1
  172. package/src/plugins/builtin/alerts/constants.ts +2 -1
  173. package/src/plugins/builtin/alerts/index.test.tsx +49 -6
  174. package/src/plugins/builtin/alerts/index.tsx +68 -36
  175. package/src/plugins/builtin/alerts/pane.tsx +64 -64
  176. package/src/plugins/builtin/alerts/quotes.ts +11 -3
  177. package/src/plugins/builtin/alerts/types.ts +1 -0
  178. package/src/plugins/builtin/analytics/index.tsx +32 -12
  179. package/src/plugins/builtin/analytics/pane-model.ts +54 -18
  180. package/src/plugins/builtin/analytics/portfolio-selection.ts +19 -0
  181. package/src/plugins/builtin/analytics/view.tsx +5 -3
  182. package/src/plugins/builtin/broker-manager/detail.tsx +7 -2
  183. package/src/plugins/builtin/broker-manager/footer.ts +4 -9
  184. package/src/plugins/builtin/broker-manager/index.tsx +1 -6
  185. package/src/plugins/builtin/buildout/detail/ui.tsx +15 -4
  186. package/src/plugins/builtin/buildout/model/index.ts +1 -1
  187. package/src/plugins/builtin/buildout/pane/header.tsx +1 -0
  188. package/src/plugins/builtin/buildout/pane/index.tsx +17 -18
  189. package/src/plugins/builtin/changelog/index.tsx +60 -45
  190. package/src/plugins/builtin/chart-composer/catalog-inventory.test.ts +97 -0
  191. package/src/plugins/builtin/chart-composer/catalog-inventory.ts +366 -0
  192. package/src/plugins/builtin/chart-composer/chart-spec.ts +21 -1
  193. package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +307 -0
  194. package/src/plugins/builtin/chart-composer/editor/controller.ts +1 -1
  195. package/src/plugins/builtin/chart-composer/index.tsx +45 -5
  196. package/src/plugins/builtin/chart-composer/pane.tsx +29 -89
  197. package/src/plugins/builtin/chart-composer/presets.test.ts +48 -0
  198. package/src/plugins/builtin/chart-composer/presets.ts +69 -3
  199. package/src/plugins/builtin/chart-composer/quick-add.tsx +8 -5
  200. package/src/plugins/builtin/chart-composer/semantic.ts +18 -14
  201. package/src/plugins/builtin/chart-composer/series-catalog.test.ts +39 -0
  202. package/src/plugins/builtin/chart-composer/series-catalog.ts +104 -3
  203. package/src/plugins/builtin/chart-composer/shortcuts.test.ts +10 -10
  204. package/src/plugins/builtin/chart-composer/shortcuts.ts +4 -12
  205. package/src/plugins/builtin/chart-composer/use-series-catalog.ts +230 -23
  206. package/src/plugins/builtin/chat/chat.test.tsx +22 -0
  207. package/src/plugins/builtin/chat/content/composer.tsx +6 -4
  208. package/src/plugins/builtin/chat/content/index.tsx +7 -0
  209. package/src/plugins/builtin/chat/content/snapshot.ts +9 -2
  210. package/src/plugins/builtin/chat/content/transcript.tsx +10 -0
  211. package/src/plugins/builtin/chat/controller/channel-actions.ts +11 -1
  212. package/src/plugins/builtin/chat/controller/channels.ts +20 -4
  213. package/src/plugins/builtin/chat/controller/index.ts +67 -15
  214. package/src/plugins/builtin/chat/controller/lifecycle.ts +3 -0
  215. package/src/plugins/builtin/chat/controller/message-loading.ts +5 -1
  216. package/src/plugins/builtin/chat/controller/messages.ts +3 -1
  217. package/src/plugins/builtin/chat/controller/notifications.ts +32 -11
  218. package/src/plugins/builtin/chat/controller/persistence.ts +0 -3
  219. package/src/plugins/builtin/chat/controller/realtime.ts +3 -3
  220. package/src/plugins/builtin/chat/controller/send.ts +1 -3
  221. package/src/plugins/builtin/chat/controller/session-runtime.ts +4 -9
  222. package/src/plugins/builtin/chat/controller/state.ts +8 -3
  223. package/src/plugins/builtin/chat/controller/storage.ts +0 -2
  224. package/src/plugins/builtin/chat/controller/view.ts +3 -2
  225. package/src/plugins/builtin/chat/controller.test.ts +195 -28
  226. package/src/plugins/builtin/chat/profile-popover.ts +1 -1
  227. package/src/plugins/builtin/cloud/auth-actions.tsx +14 -7
  228. package/src/plugins/builtin/cloud/auth-commands.ts +38 -46
  229. package/src/plugins/builtin/cloud/auth-dialog.tsx +296 -0
  230. package/src/{components/onboarding/account-step/model.test.ts → plugins/builtin/cloud/auth-model.test.ts} +1 -1
  231. package/src/{components/onboarding/account-step/model.ts → plugins/builtin/cloud/auth-model.ts} +37 -6
  232. package/src/plugins/builtin/cloud/browser.tsx +9 -0
  233. package/src/plugins/builtin/cloud/buildout-module.tsx +23 -0
  234. package/src/plugins/builtin/cloud/device-signin-dialog.tsx +243 -0
  235. package/src/plugins/builtin/cloud/device-signin.test.ts +217 -0
  236. package/src/plugins/builtin/cloud/device-signin.ts +234 -0
  237. package/src/plugins/builtin/cloud/index.tsx +2 -0
  238. package/src/plugins/builtin/cloud/plugin.tsx +10 -24
  239. package/src/plugins/builtin/cloud/upgrade-command.ts +13 -6
  240. package/src/plugins/builtin/cloud-tweets/registration.ts +6 -1
  241. package/src/plugins/builtin/cloud-tweets/table.tsx +57 -10
  242. package/src/plugins/builtin/composite-plugins.ts +39 -5
  243. package/src/plugins/builtin/congress-trades/detail.tsx +45 -5
  244. package/src/plugins/builtin/congress-trades/footer.ts +7 -16
  245. package/src/plugins/builtin/congress-trades/model.test.ts +85 -0
  246. package/src/plugins/builtin/congress-trades/model.ts +69 -1
  247. package/src/plugins/builtin/congress-trades/pane.tsx +63 -22
  248. package/src/plugins/builtin/connections/index.ts +53 -0
  249. package/src/plugins/builtin/connections/pane.test.tsx +79 -0
  250. package/src/plugins/builtin/connections/pane.tsx +258 -0
  251. package/src/plugins/builtin/correlation/index.test.tsx +2 -1
  252. package/src/plugins/builtin/correlation/index.tsx +58 -19
  253. package/src/plugins/builtin/correlation/matrix/model.ts +18 -7
  254. package/src/plugins/builtin/correlation/relationship/pane.tsx +43 -19
  255. package/src/plugins/builtin/correlation/settings.ts +1 -1
  256. package/src/plugins/builtin/credit-conditions/client.test.ts +80 -0
  257. package/src/plugins/builtin/credit-conditions/client.ts +105 -0
  258. package/src/plugins/builtin/credit-conditions/index.test.tsx +111 -0
  259. package/src/plugins/builtin/credit-conditions/index.tsx +227 -0
  260. package/src/plugins/builtin/credit-conditions/model.test.ts +43 -0
  261. package/src/plugins/builtin/credit-conditions/model.ts +64 -0
  262. package/src/plugins/builtin/debug/index.tsx +11 -6
  263. package/src/plugins/builtin/dividend-yield/client.test.ts +58 -0
  264. package/src/plugins/builtin/dividend-yield/client.ts +270 -0
  265. package/src/plugins/builtin/dividend-yield/index.tsx +61 -0
  266. package/src/plugins/builtin/dividend-yield/model.ts +83 -0
  267. package/src/plugins/builtin/dividend-yield/pane.tsx +306 -0
  268. package/src/plugins/builtin/dividend-yield/types.ts +22 -0
  269. package/src/plugins/builtin/earnings/data/cache.test.ts +10 -7
  270. package/src/plugins/builtin/earnings/data/cache.ts +23 -9
  271. package/src/plugins/builtin/earnings/index.tsx +59 -6
  272. package/src/plugins/builtin/earnings/model.test.ts +19 -1
  273. package/src/plugins/builtin/earnings/model.ts +17 -15
  274. package/src/plugins/builtin/econ/calendar-model.test.ts +37 -3
  275. package/src/plugins/builtin/econ/calendar-model.ts +32 -26
  276. package/src/plugins/builtin/econ/fred-series-map.ts +18 -0
  277. package/src/plugins/builtin/econ/index.test.tsx +110 -0
  278. package/src/plugins/builtin/econ/index.tsx +95 -52
  279. package/src/plugins/builtin/fear-greed/cache.test.ts +18 -3
  280. package/src/plugins/builtin/fear-greed/cache.ts +18 -6
  281. package/src/plugins/builtin/fear-greed/charts.tsx +9 -2
  282. package/src/plugins/builtin/fear-greed/format.ts +0 -9
  283. package/src/plugins/builtin/fear-greed/pane.tsx +21 -21
  284. package/src/plugins/builtin/futures/contracts.ts +100 -0
  285. package/src/plugins/builtin/futures/index.tsx +298 -0
  286. package/src/plugins/builtin/futures/model.test.ts +129 -0
  287. package/src/plugins/builtin/futures/model.ts +136 -0
  288. package/src/plugins/builtin/futures/pane.test.tsx +239 -0
  289. package/src/plugins/builtin/futures/table.test.ts +155 -0
  290. package/src/plugins/builtin/futures/table.tsx +241 -0
  291. package/src/plugins/builtin/fx-matrix/index.tsx +160 -134
  292. package/src/plugins/builtin/fx-matrix/pairs.ts +12 -1
  293. package/src/plugins/builtin/fx-matrix/pane.test.tsx +109 -0
  294. package/src/plugins/builtin/help/components.tsx +1 -30
  295. package/src/plugins/builtin/help/index.tsx +4 -24
  296. package/src/plugins/builtin/holders/pane.tsx +17 -12
  297. package/src/plugins/builtin/holders/thirteenf-match.ts +1 -2
  298. package/src/plugins/builtin/holders/treemap.tsx +4 -2
  299. package/src/plugins/builtin/insider/index.tsx +40 -14
  300. package/src/plugins/builtin/ipo-calendar/cache.ts +101 -0
  301. package/src/plugins/builtin/ipo-calendar/client.test.ts +31 -0
  302. package/src/plugins/builtin/ipo-calendar/client.ts +296 -0
  303. package/src/plugins/builtin/ipo-calendar/index.tsx +65 -0
  304. package/src/plugins/builtin/ipo-calendar/model.ts +145 -0
  305. package/src/plugins/builtin/ipo-calendar/pane.tsx +328 -0
  306. package/src/plugins/builtin/ipo-calendar/types.ts +19 -0
  307. package/src/plugins/builtin/kelly-sizer/index.test.tsx +3 -3
  308. package/src/plugins/builtin/kelly-sizer/model.ts +8 -1
  309. package/src/plugins/builtin/kelly-sizer/pane.tsx +33 -15
  310. package/src/plugins/builtin/kelly-sizer/view.tsx +12 -5
  311. package/src/plugins/builtin/market-halts/client.ts +114 -0
  312. package/src/plugins/builtin/market-halts/index.tsx +29 -0
  313. package/src/plugins/builtin/market-halts/model.test.ts +187 -0
  314. package/src/plugins/builtin/market-halts/model.ts +291 -0
  315. package/src/plugins/builtin/market-halts/pane.tsx +256 -0
  316. package/src/plugins/builtin/market-heatmap/data.test.ts +1 -0
  317. package/src/plugins/builtin/market-heatmap/data.ts +12 -3
  318. package/src/plugins/builtin/market-heatmap/index.tsx +131 -46
  319. package/src/plugins/builtin/market-movers/index.tsx +145 -63
  320. package/src/plugins/builtin/market-movers/model.ts +19 -3
  321. package/src/plugins/builtin/market-movers/screener.test.ts +108 -0
  322. package/src/plugins/builtin/market-movers/screener.ts +168 -10
  323. package/src/plugins/builtin/news/index.tsx +87 -104
  324. package/src/plugins/builtin/news/wire/article-search.test.ts +72 -0
  325. package/src/plugins/builtin/news/wire/article-search.ts +140 -0
  326. package/src/plugins/builtin/news/wire/breaking/notifications.test.ts +2 -0
  327. package/src/plugins/builtin/news/wire/breaking/pane.test.tsx +2 -0
  328. package/src/plugins/builtin/news/wire/breaking/pane.tsx +22 -9
  329. package/src/plugins/builtin/news/wire/categories.ts +35 -0
  330. package/src/plugins/builtin/news/wire/default-feeds.ts +47 -1
  331. package/src/plugins/builtin/news/wire/feed-config.test.ts +10 -5
  332. package/src/plugins/builtin/news/wire/index.tsx +42 -5
  333. package/src/plugins/builtin/news/wire/industry-pane.tsx +44 -20
  334. package/src/plugins/builtin/news/wire/news/detail-view.tsx +10 -5
  335. package/src/plugins/builtin/news/wire/news/footer.ts +35 -1
  336. package/src/plugins/builtin/news/wire/news/preset-pane.tsx +19 -7
  337. package/src/plugins/builtin/news/wire/news/query-presets.ts +16 -2
  338. package/src/plugins/builtin/news/wire/news/table.test.tsx +54 -0
  339. package/src/plugins/builtin/news/wire/news/table.tsx +119 -19
  340. package/src/plugins/builtin/news/wire/rss/source.test.ts +12 -0
  341. package/src/plugins/builtin/news/wire/rss/source.ts +1 -1
  342. package/src/plugins/builtin/notes/files.test.ts +18 -0
  343. package/src/plugins/builtin/notes/files.ts +90 -4
  344. package/src/plugins/builtin/notes/index.tsx +7 -1
  345. package/src/plugins/builtin/notes/quick-notes-pane.test.tsx +182 -0
  346. package/src/plugins/builtin/notes/quick-notes-pane.tsx +74 -31
  347. package/src/plugins/builtin/notes/sync.test.ts +49 -0
  348. package/src/plugins/builtin/notes/sync.ts +98 -0
  349. package/src/plugins/builtin/notes/ticker-notes-tab.test.tsx +380 -0
  350. package/src/plugins/builtin/notes/ticker-notes-tab.tsx +97 -40
  351. package/src/plugins/builtin/options/calc-seed.test.ts +118 -0
  352. package/src/plugins/builtin/options/calc-seed.ts +52 -0
  353. package/src/plugins/builtin/options/footer.ts +4 -1
  354. package/src/plugins/builtin/options/index.tsx +22 -1
  355. package/src/plugins/builtin/options/live-quotes.ts +8 -0
  356. package/src/plugins/builtin/options/table.ts +3 -1
  357. package/src/plugins/builtin/options/view.test.tsx +5 -1
  358. package/src/plugins/builtin/options/view.tsx +112 -17
  359. package/src/plugins/builtin/options-calculator/index.tsx +35 -0
  360. package/src/plugins/builtin/options-calculator/model.test.ts +172 -0
  361. package/src/plugins/builtin/options-calculator/model.ts +273 -0
  362. package/src/plugins/builtin/options-calculator/pane.test.tsx +138 -0
  363. package/src/plugins/builtin/options-calculator/pane.tsx +218 -0
  364. package/src/plugins/builtin/plugin-module.test.ts +16 -2
  365. package/src/plugins/builtin/plugin-module.ts +5 -1
  366. package/src/plugins/builtin/polls/client.ts +57 -0
  367. package/src/plugins/builtin/polls/hooks.ts +20 -0
  368. package/src/plugins/builtin/polls/index.tsx +35 -0
  369. package/src/plugins/builtin/polls/normalize.test.ts +230 -0
  370. package/src/plugins/builtin/polls/normalize.ts +319 -0
  371. package/src/plugins/builtin/polls/pane.tsx +722 -0
  372. package/src/plugins/builtin/polls/types.ts +77 -0
  373. package/src/plugins/builtin/portfolio-list/account-metrics.test.ts +20 -0
  374. package/src/plugins/builtin/portfolio-list/account-metrics.ts +11 -6
  375. package/src/plugins/builtin/portfolio-list/header.tsx +15 -4
  376. package/src/plugins/builtin/portfolio-list/pane/index.test.tsx +1 -0
  377. package/src/plugins/builtin/portfolio-list/pane/index.tsx +7 -3
  378. package/src/plugins/builtin/portfolio-list/pane/streaming.ts +6 -1
  379. package/src/plugins/builtin/portfolio-list/pane/supplemental.ts +1 -1
  380. package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +2 -0
  381. package/src/plugins/builtin/portfolio-list/summary/index.tsx +16 -6
  382. package/src/plugins/builtin/research/analyst-pane.tsx +40 -67
  383. package/src/plugins/builtin/research/corporate-actions-pane.tsx +30 -31
  384. package/src/plugins/builtin/research/equity-diagnostic-pane.test.tsx +303 -0
  385. package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +485 -0
  386. package/src/plugins/builtin/research/index.test.ts +20 -25
  387. package/src/plugins/builtin/research/index.tsx +36 -5
  388. package/src/plugins/builtin/research/relative-valuation-pane.tsx +86 -26
  389. package/src/plugins/builtin/scanner/denied.tsx +31 -0
  390. package/src/plugins/builtin/scanner/feed.ts +94 -0
  391. package/src/plugins/builtin/scanner/flow-model.test.ts +85 -0
  392. package/src/plugins/builtin/scanner/flow-model.ts +133 -0
  393. package/src/plugins/builtin/scanner/flow-pane.tsx +197 -0
  394. package/src/plugins/builtin/scanner/hilo-bars.tsx +121 -0
  395. package/src/plugins/builtin/scanner/hilo-model.test.ts +44 -0
  396. package/src/plugins/builtin/scanner/hilo-model.ts +75 -0
  397. package/src/plugins/builtin/scanner/hilo-pane.tsx +165 -0
  398. package/src/plugins/builtin/scanner/index.ts +109 -0
  399. package/src/plugins/builtin/scanner/waiting.tsx +11 -0
  400. package/src/plugins/builtin/sec/index.tsx +33 -14
  401. package/src/plugins/builtin/sectors/index.tsx +119 -81
  402. package/src/plugins/builtin/sectors/move-bar.tsx +43 -0
  403. package/src/plugins/builtin/sectors/sector-data.ts +18 -0
  404. package/src/plugins/builtin/sectors/sector-model.ts +13 -15
  405. package/src/plugins/builtin/shared/auto-refresh.ts +51 -0
  406. package/src/plugins/builtin/shared/cloud-upgrade.ts +37 -6
  407. package/src/plugins/builtin/shared/pane-footer.ts +16 -3
  408. package/src/plugins/builtin/shared/public-share.ts +23 -0
  409. package/src/plugins/builtin/shared/screener-live-quotes.test.ts +91 -0
  410. package/src/plugins/builtin/shared/screener-live-quotes.ts +134 -0
  411. package/src/plugins/builtin/shared/table-pane.ts +1 -5
  412. package/src/plugins/builtin/shared/use-quote-board.test.tsx +211 -0
  413. package/src/plugins/builtin/shared/use-quote-board.ts +195 -0
  414. package/src/plugins/builtin/short-interest/client.ts +124 -0
  415. package/src/plugins/builtin/short-interest/index.tsx +62 -0
  416. package/src/plugins/builtin/short-interest/model.ts +113 -0
  417. package/src/plugins/builtin/short-interest/pane.tsx +252 -0
  418. package/src/plugins/builtin/short-interest/types.ts +9 -0
  419. package/src/plugins/builtin/substack/api/cache.ts +7 -3
  420. package/src/plugins/builtin/substack/api/loaders.ts +36 -12
  421. package/src/plugins/builtin/substack/api/types.ts +2 -0
  422. package/src/plugins/builtin/substack/article-detail.tsx +15 -1
  423. package/src/plugins/builtin/substack/pane-footer.ts +3 -22
  424. package/src/plugins/builtin/substack/pane-state.ts +1 -1
  425. package/src/plugins/builtin/substack/pane.tsx +56 -14
  426. package/src/plugins/builtin/thirteenf/api.test.ts +1 -1
  427. package/src/plugins/builtin/thirteenf/api.ts +44 -19
  428. package/src/plugins/builtin/thirteenf/data.ts +15 -7
  429. package/src/plugins/builtin/thirteenf/model.ts +2 -0
  430. package/src/plugins/builtin/thirteenf/pane.tsx +51 -12
  431. package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +10 -4
  432. package/src/plugins/builtin/ticker-detail/data-panes/provider-search.tsx +67 -11
  433. package/src/plugins/builtin/ticker-detail/financials/tab.tsx +15 -8
  434. package/src/plugins/builtin/ticker-detail/index.tsx +5 -21
  435. package/src/plugins/builtin/ticker-detail/overview/components.tsx +72 -32
  436. package/src/plugins/builtin/ticker-detail/overview-tab.tsx +12 -14
  437. package/src/plugins/builtin/ticker-detail/pane.tsx +4 -1
  438. package/src/plugins/builtin/ticker-detail/quote-monitor/card.test.tsx +70 -0
  439. package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +42 -28
  440. package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +96 -49
  441. package/src/plugins/builtin/ticker-detail/research-tabs.ts +32 -0
  442. package/src/plugins/builtin/ticker-detail/settings.ts +12 -0
  443. package/src/plugins/builtin/ticker-research-backend-plugin.ts +2 -9
  444. package/src/plugins/builtin/ticker-research-plugin.ts +6 -0
  445. package/src/plugins/builtin/treasury-auctions/cache.test.ts +173 -0
  446. package/src/plugins/builtin/treasury-auctions/cache.ts +104 -0
  447. package/src/plugins/builtin/treasury-auctions/client.test.ts +181 -0
  448. package/src/plugins/builtin/treasury-auctions/client.ts +151 -0
  449. package/src/plugins/builtin/treasury-auctions/index.tsx +90 -0
  450. package/src/plugins/builtin/treasury-auctions/model.test.ts +147 -0
  451. package/src/plugins/builtin/treasury-auctions/model.ts +188 -0
  452. package/src/plugins/builtin/treasury-auctions/pane.test.tsx +170 -0
  453. package/src/plugins/builtin/treasury-auctions/pane.tsx +417 -0
  454. package/src/plugins/builtin/treasury-auctions/types.ts +59 -0
  455. package/src/plugins/builtin/tv/pane.tsx +67 -7
  456. package/src/plugins/builtin/tv/youtube-embed.test.ts +84 -0
  457. package/src/plugins/builtin/tv/youtube-embed.ts +173 -0
  458. package/src/plugins/builtin/tv/youtube-stream.ts +27 -2
  459. package/src/plugins/builtin/volatility/client.ts +87 -0
  460. package/src/plugins/builtin/volatility/index.test.tsx +107 -0
  461. package/src/plugins/builtin/volatility/index.tsx +193 -0
  462. package/src/plugins/builtin/volatility/model.test.ts +66 -0
  463. package/src/plugins/builtin/volatility/model.ts +113 -0
  464. package/src/plugins/builtin/world-indices/footer.ts +43 -23
  465. package/src/plugins/builtin/world-indices/index.tsx +44 -93
  466. package/src/plugins/builtin/world-indices/indices.ts +11 -2
  467. package/src/plugins/builtin/world-indices/model.ts +17 -24
  468. package/src/plugins/builtin/world-indices/pane.test.tsx +116 -0
  469. package/src/plugins/builtin/world-indices/table.tsx +82 -37
  470. package/src/plugins/builtin/yield-curve/index.tsx +16 -7
  471. package/src/plugins/builtin/yield-curve/treasury-data.test.ts +25 -0
  472. package/src/plugins/builtin/yield-curve/treasury-data.ts +16 -0
  473. package/src/plugins/catalog-backend.ts +8 -0
  474. package/src/plugins/catalog-browser.test.ts +68 -0
  475. package/src/plugins/catalog-browser.ts +134 -0
  476. package/src/plugins/catalog-ui.ts +8 -0
  477. package/src/plugins/event-bus.ts +1 -0
  478. package/src/plugins/ibkr/flex/index.test.ts +19 -0
  479. package/src/plugins/ibkr/flex/index.ts +1 -1
  480. package/src/plugins/ibkr/trade/tab/footer.ts +9 -23
  481. package/src/plugins/ibkr/trade/tab/index.tsx +1 -5
  482. package/src/plugins/ibkr/trading/pane-view.tsx +149 -87
  483. package/src/plugins/ibkr/trading/pane.tsx +2 -2
  484. package/src/plugins/ownership.ts +3 -0
  485. package/src/plugins/pane-manager/floating.ts +8 -2
  486. package/src/plugins/pane-manager.test.ts +13 -0
  487. package/src/plugins/prediction-markets/backend-plugin.ts +2 -0
  488. package/src/plugins/prediction-markets/capability.test.ts +281 -0
  489. package/src/plugins/prediction-markets/capability.ts +171 -0
  490. package/src/plugins/prediction-markets/chart.tsx +18 -26
  491. package/src/plugins/prediction-markets/columns.ts +3 -2
  492. package/src/plugins/prediction-markets/controller/catalog.ts +92 -14
  493. package/src/plugins/prediction-markets/controller/data.ts +7 -1
  494. package/src/plugins/prediction-markets/controller/detail.ts +4 -0
  495. package/src/plugins/prediction-markets/controller/index.ts +4 -16
  496. package/src/plugins/prediction-markets/detail/book.tsx +3 -23
  497. package/src/plugins/prediction-markets/detail/overview.tsx +0 -18
  498. package/src/plugins/prediction-markets/detail/pane.tsx +36 -12
  499. package/src/plugins/prediction-markets/detail.test.tsx +1 -1
  500. package/src/plugins/prediction-markets/index.tsx +2 -0
  501. package/src/plugins/prediction-markets/metrics.ts +28 -18
  502. package/src/plugins/prediction-markets/navigation.ts +1 -0
  503. package/src/plugins/prediction-markets/pane.test.tsx +1 -1
  504. package/src/plugins/prediction-markets/pane.tsx +8 -1
  505. package/src/plugins/prediction-markets/services/fetch.ts +3 -2
  506. package/src/plugins/prediction-markets/services/kalshi/adapter.ts +128 -29
  507. package/src/plugins/prediction-markets/services/kalshi/normalize.ts +3 -1
  508. package/src/plugins/prediction-markets/services/kalshi/types.ts +14 -0
  509. package/src/plugins/prediction-markets/services/polymarket/adapter.ts +57 -14
  510. package/src/plugins/prediction-markets/services/polymarket/detail.ts +67 -18
  511. package/src/plugins/prediction-markets/test-helpers.tsx +0 -1
  512. package/src/plugins/prediction-markets/types.ts +3 -9
  513. package/src/plugins/registry/context.ts +6 -1
  514. package/src/plugins/registry/index.test.ts +2 -0
  515. package/src/plugins/registry/index.ts +53 -3
  516. package/src/plugins/runtime/context.tsx +4 -2
  517. package/src/plugins/runtime/index.tsx +9 -0
  518. package/src/remote/controller.test.ts +17 -4
  519. package/src/renderers/browser/app-services.ts +61 -0
  520. package/src/renderers/browser/cloud-transport.test.ts +32 -0
  521. package/src/renderers/browser/cloud-transport.ts +29 -0
  522. package/src/renderers/browser/config-host.ts +62 -0
  523. package/src/renderers/browser/error-boundary.tsx +23 -0
  524. package/src/renderers/browser/main.tsx +61 -0
  525. package/src/renderers/browser/persistence.ts +74 -0
  526. package/src/renderers/browser/storage.test.ts +66 -0
  527. package/src/renderers/browser/storage.ts +50 -0
  528. package/src/renderers/browser/ticker-repository.ts +59 -0
  529. package/src/renderers/browser/ui-host.tsx +40 -0
  530. package/src/renderers/cloudflare/worker.test.ts +133 -0
  531. package/src/renderers/cloudflare/worker.ts +115 -0
  532. package/src/renderers/electrobun/bun/core-capabilities.ts +2 -2
  533. package/src/renderers/electrobun/bun/desktop/capability-bridge.test.ts +64 -0
  534. package/src/renderers/electrobun/bun/desktop/capability-bridge.ts +41 -7
  535. package/src/renderers/electrobun/bun/desktop/host-requests.ts +5 -2
  536. package/src/renderers/electrobun/bun/desktop/http-fetch.test.ts +33 -0
  537. package/src/renderers/electrobun/bun/desktop/http-fetch.ts +53 -6
  538. package/src/renderers/electrobun/bun/desktop/initialization.test.ts +27 -0
  539. package/src/renderers/electrobun/bun/desktop/initialization.ts +6 -1
  540. package/src/renderers/electrobun/bun/index.ts +1 -0
  541. package/src/renderers/electrobun/shared/protocol.ts +2 -0
  542. package/src/renderers/electrobun/view/app-services.ts +39 -5
  543. package/src/renderers/electrobun/view/build-assets.ts +17 -10
  544. package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +186 -65
  545. package/src/renderers/electrobun/view/cli-pane-shot-health.test.ts +25 -0
  546. package/src/renderers/electrobun/view/cli-pane-shot-health.ts +31 -0
  547. package/src/renderers/electrobun/view/data-table/index.tsx +19 -11
  548. package/src/renderers/electrobun/view/data-table/row.tsx +2 -0
  549. package/src/renderers/electrobun/view/desktop/controls.test.tsx +68 -0
  550. package/src/renderers/electrobun/view/desktop/controls.tsx +27 -1
  551. package/src/renderers/electrobun/view/dom-ui-host.tsx +143 -0
  552. package/src/renderers/electrobun/view/host/box.test.tsx +113 -0
  553. package/src/renderers/electrobun/view/host/box.tsx +11 -6
  554. package/src/renderers/electrobun/view/host/chart-surface.tsx +7 -1
  555. package/src/renderers/electrobun/view/host/input.tsx +11 -7
  556. package/src/renderers/electrobun/view/host/media-surface.tsx +70 -3
  557. package/src/renderers/electrobun/view/host/tabs.tsx +97 -5
  558. package/src/renderers/electrobun/view/host/text.tsx +5 -2
  559. package/src/renderers/electrobun/view/input-host.test.tsx +140 -0
  560. package/src/renderers/electrobun/view/input-host.tsx +4 -2
  561. package/src/renderers/electrobun/view/main.tsx +2 -0
  562. package/src/renderers/electrobun/view/native-stubs/backend-rpc.ts +19 -1
  563. package/src/renderers/electrobun/view/native-stubs/broker-sync-native-loader.ts +7 -0
  564. package/src/renderers/electrobun/view/native-stubs/chart/kitty-support.ts +10 -0
  565. package/src/renderers/electrobun/view/remote/capability-invoker.test.ts +46 -0
  566. package/src/renderers/electrobun/view/remote/capability-invoker.ts +34 -13
  567. package/src/renderers/electrobun/view/remote/connection-health-backend.ts +19 -0
  568. package/src/renderers/electrobun/view/remote/connection-health.test.ts +44 -0
  569. package/src/renderers/electrobun/view/remote/connection-health.ts +49 -0
  570. package/src/renderers/electrobun/view/styles.css +5 -0
  571. package/src/renderers/electrobun/view/ui-host.tsx +3 -137
  572. package/src/renderers/opentui/host.tsx +15 -1
  573. package/src/renderers/opentui/start.tsx +2 -0
  574. package/src/renderers/opentui/terminal-media.test.ts +102 -0
  575. package/src/renderers/opentui/terminal-media.ts +142 -0
  576. package/src/renderers/share/main.tsx +54 -0
  577. package/src/renderers/share/styles.css +19 -0
  578. package/src/renderers/share/view.test.tsx +22 -0
  579. package/src/renderers/share/view.tsx +79 -0
  580. package/src/shares/api.test.ts +56 -0
  581. package/src/shares/api.ts +103 -0
  582. package/src/shares/chart-snapshot.test.ts +34 -0
  583. package/src/shares/chart-snapshot.ts +28 -0
  584. package/src/shares/payload.ts +104 -0
  585. package/src/sources/gloomberb-cloud/index.test.ts +61 -1
  586. package/src/sources/gloomberb-cloud/index.ts +86 -14
  587. package/src/sources/gloomberb-cloud/normalizers.test.ts +34 -0
  588. package/src/sources/gloomberb-cloud/normalizers.ts +5 -5
  589. package/src/sources/provider-router/connection-health.test.ts +28 -0
  590. package/src/sources/provider-router/connection-health.ts +47 -0
  591. package/src/sources/provider-router/history.test.ts +55 -6
  592. package/src/sources/provider-router/history.ts +119 -14
  593. package/src/sources/provider-router/index.ts +12 -1
  594. package/src/sources/provider-router/news.test.ts +34 -0
  595. package/src/sources/provider-router/news.ts +15 -1
  596. package/src/sources/sec-edgar.test.ts +59 -0
  597. package/src/sources/sec-edgar.ts +63 -23
  598. package/src/sources/yahoo-finance/history.ts +2 -9
  599. package/src/sources/yahoo-finance/http.ts +1 -1
  600. package/src/sources/yahoo-finance/mappers.ts +3 -0
  601. package/src/sources/yahoo-finance/snapshots.ts +10 -2
  602. package/src/sources/yahoo-finance/symbols.test.ts +10 -0
  603. package/src/sources/yahoo-finance/symbols.ts +14 -9
  604. package/src/sources/yahoo-finance/types.ts +19 -0
  605. package/src/sources/yahoo-finance.test.ts +1 -1
  606. package/src/sources/yahoo-finance.ts +6 -2
  607. package/src/state/app/context/index.test.tsx +101 -0
  608. package/src/state/app/context/index.tsx +10 -0
  609. package/src/state/config-save-scheduler.ts +1 -6
  610. package/src/state/persist-scheduler.test.ts +31 -0
  611. package/src/state/persist-scheduler.ts +21 -8
  612. package/src/sync/auth-transition.test.ts +36 -0
  613. package/src/sync/auth-transition.ts +22 -0
  614. package/src/sync/baseline.ts +32 -0
  615. package/src/sync/controller.test.ts +67 -0
  616. package/src/sync/controller.ts +32 -1
  617. package/src/sync/core-contributors.test.ts +102 -1
  618. package/src/sync/core-contributors.ts +98 -12
  619. package/src/sync/react.ts +18 -2
  620. package/src/sync/types.ts +12 -0
  621. package/src/test-support/plugin-runtime.ts +3 -0
  622. package/src/theme/font-scale.test.ts +14 -0
  623. package/src/theme/font-scale.ts +69 -0
  624. package/src/tickers/search/index.test.ts +27 -0
  625. package/src/tickers/search/upsert.ts +10 -0
  626. package/src/time-series/alignment.ts +15 -11
  627. package/src/time-series/field-catalog.ts +10 -0
  628. package/src/time-series/fundamentals.ts +19 -11
  629. package/src/time-series/hooks.ts +8 -2
  630. package/src/time-series/parsed-history-cache.ts +35 -0
  631. package/src/time-series/resolution.ts +10 -0
  632. package/src/time-series/resolve.test.ts +332 -3
  633. package/src/time-series/resolve.ts +225 -25
  634. package/src/time-series/spec-studies.test.ts +23 -0
  635. package/src/time-series/spec.ts +21 -2
  636. package/src/time-series/transforms.test.ts +76 -1
  637. package/src/time-series/transforms.ts +39 -8
  638. package/src/time-series/types.ts +9 -2
  639. package/src/time-series/use-chart-resolution.test.tsx +105 -1
  640. package/src/time-series/use-chart-resolution.ts +67 -13
  641. package/src/types/capability-route-source.ts +2 -1
  642. package/src/types/config.ts +30 -27
  643. package/src/types/media.ts +2 -0
  644. package/src/types/plugin.ts +8 -1
  645. package/src/ui/host.tsx +8 -0
  646. package/src/ui/pointer-drag.ts +12 -0
  647. package/src/ui/qr.test.ts +79 -0
  648. package/src/ui/qr.ts +82 -0
  649. package/src/updater.test.ts +117 -16
  650. package/src/updater.ts +32 -5
  651. package/src/utils/exchanges.ts +1 -0
  652. package/src/utils/external-url.test.ts +32 -0
  653. package/src/utils/external-url.ts +23 -0
  654. package/src/utils/price-history.ts +11 -10
  655. package/src/utils/sec.test.ts +6 -0
  656. package/src/utils/sec.ts +1 -1
  657. package/src/utils/sort-values.ts +31 -0
  658. package/src/utils/zoned-date-time.ts +67 -0
  659. package/src/components/onboarding/wizard-keyboard.ts +0 -306
  660. package/src/plugins/builtin/chart-composer/date-window-dialog.tsx +0 -120
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- <img src="https://gloomberb.com/gloomberb-logo-grayscale.svg" alt="Gloomberb logo" width="76" />
3
+ <img src="https://gloom.sh/gloomberb-logo-grayscale.svg" alt="Gloomberb logo" width="76" />
4
4
 
5
5
  # Gloomberb
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  Desktop app for macOS and Windows. Terminal UI for macOS, Linux, and Windows.
10
10
 
11
- <a href="https://gloomberb.com/download/desktop"><strong>Download desktop</strong></a>
11
+ <a href="https://gloom.sh/download/desktop"><strong>Download desktop</strong></a>
12
12
  &nbsp;&middot;&nbsp;
13
13
  <a href="#install"><strong>Install the TUI</strong></a>
14
14
  &nbsp;&middot;&nbsp;
@@ -17,7 +17,7 @@ Desktop app for macOS and Windows. Terminal UI for macOS, Linux, and Windows.
17
17
  <br />
18
18
  <br />
19
19
 
20
- <img src="https://gloomberb.com/landing-terminal.png" alt="Gloomberb terminal showing portfolio, watchlists, market data, and chart panels." width="720" />
20
+ <img src="https://gloom.sh/landing-terminal.png" alt="Gloomberb terminal showing portfolio, watchlists, market data, and chart panels." width="720" />
21
21
 
22
22
  </div>
23
23
 
@@ -29,8 +29,24 @@ Gloomberb has two ways in:
29
29
  |---------|----------|-------------|
30
30
  | Desktop app | A polished app window, pop-out panes, OS shortcuts, and built-in updates | Published for macOS and Windows. It also installs a `gloomberb` terminal command for the TUI. |
31
31
  | Terminal UI | Fast keyboard workflows inside your terminal, SSH/dev boxes, Linux machines, and script-friendly setups | Runs with `gloomberb` on macOS, Linux, and Windows. |
32
+ | Browser app | The shared DOM interface without an install | Open [term.gloom.sh](https://term.gloom.sh). |
32
33
 
33
- Both share the same command language, plugin system, market data surfaces, portfolios, watchlists, alerts, notes, and AI tools.
34
+ The desktop app and TUI share the full command language and plugin system. The browser app uses the same official DOM renderer and layout with a reviewed browser plugin catalog.
35
+
36
+ ## Browser App
37
+
38
+ [term.gloom.sh](https://term.gloom.sh) works anonymously with configuration, tickers, layouts, session state, and plugin state stored in the browser. Anonymous sessions receive rate-limited, 15-minute-delayed Gloom Cloud market data and read-only chat. Login remains optional and enables sync and chat posting; Pro accounts receive realtime market data. Cloud REST and WebSocket traffic uses the same-origin `/api` path, which the Worker forwards only to `https://api.gloom.sh`; it is not an arbitrary network proxy.
39
+
40
+ The browser build intentionally omits brokers and native integrations, filesystem notes, local AI, external plugins, updater/debug tools, application menus, native window controls, pop-out native windows, and native context menus. Modules that still depend on desktop-only or CORS-blocked feeds are also absent for now: RSS/Substack, prediction markets and polls, market halts/heatmap/movers, dividend/ownership/SEC panes, earnings/IPO, and TV. Public shares open under `/s/:id` in a separate slim bundle. Share creation and owner deletion use the signed-in Gloom Cloud session through the same fixed API path; public reads require no account.
41
+
42
+ Local browser development:
43
+
44
+ ```bash
45
+ bun run web:build
46
+ bunx wrangler dev
47
+ ```
48
+
49
+ Validate the public artifacts with `bun run web:audit` and `bun run cloudflare:dry-run`. `wrangler.jsonc` is intentionally generic and contains no account, route, domain, namespace, or secret. Production routing and the private Gloom Cloud API deployment are configured separately.
34
50
 
35
51
  ## Install
36
52
 
@@ -41,21 +57,21 @@ Install the desktop app and the `gloomberb` terminal command:
41
57
  ```bash
42
58
  brew install --cask vincelwt/tap/gloomberb
43
59
  # or
44
- curl -fsSL gloomberb.com/install | bash
60
+ curl -fsSL gloom.sh/install | bash
45
61
  ```
46
62
 
47
63
  Both install `Gloomberb.app` and a `gloomberb` command that runs the TUI through the app bundle, so the bundled runtime is stored once.
48
64
 
49
65
  Prefer a direct download?
50
66
 
51
- - [Download Gloomberb for Mac](https://gloomberb.com/download/desktop)
67
+ - [Download Gloomberb for Mac](https://gloom.sh/download/desktop)
52
68
 
53
69
  ### Linux
54
70
 
55
71
  Install the standalone TUI binary:
56
72
 
57
73
  ```bash
58
- curl -fsSL gloomberb.com/install | bash
74
+ curl -fsSL gloom.sh/install | bash
59
75
  ```
60
76
 
61
77
  This installs `gloomberb` to `~/.local/bin` by default. A Linux desktop package is not published yet.
@@ -106,6 +122,7 @@ Open command mode with `Ctrl+P`, then type a command. Press `` ` `` to open tick
106
122
  | `TOP` | Ranked market stories |
107
123
  | `HM` | Market heatmap |
108
124
  | `MOST` | Market movers |
125
+ | `HILO` | New highs and new lows |
109
126
  | `PF` | Portfolios and watchlists |
110
127
  | `KELLY AAPL` | Position sizing |
111
128
  | `HELP` | Full in-app shortcut list |
@@ -113,9 +130,19 @@ Open command mode with `Ctrl+P`, then type a command. Press `` ` `` to open tick
113
130
  ## What It Does
114
131
 
115
132
  - Research companies with quotes, charts, financials, filings, holders, insiders, options, analyst ratings, events, and relative valuation.
116
- - Follow markets with top stories, breaking news, sector feeds, Substack subscriptions, global indices, FX, macro events, yield curves, market movers, and fear/greed.
133
+ - Follow markets with top stories, breaking news, sector feeds, Substack subscriptions, global indices, futures, FX, macro events, yield curves, Treasury auctions, market movers, new-high/new-low and options-flow scanners, and fear/greed.
117
134
  - Track portfolios and watchlists, connect brokers, set alerts, keep notes, run AI screens, browse prediction markets, and use Gloom Cloud chat.
118
135
 
136
+ ### Broker position sync
137
+
138
+ Use **New Portfolio** or **Add Broker Account** to connect a broker. Gloomberb can import positions from Interactive Brokers, Public, Robinhood, and SimpleFIN.
139
+
140
+ - Robinhood opens a browser sign-in page. Gloomberb uses only the read-only account and equity-position tools from the Robinhood Trading MCP server.
141
+ - Public needs an API secret from Public API settings. Gloomberb creates a short-lived access token and uses only the account and portfolio endpoints.
142
+ - SimpleFIN needs a one-time setup token from SimpleFIN Bridge. Gloomberb exchanges the token and imports only accounts that contain holdings.
143
+
144
+ Gloomberb saves the connection data on the local device. It does not include this data in Gloom Cloud synchronization. A later position sync updates the managed portfolios and removes positions that the broker no longer reports.
145
+
119
146
  ## CLI
120
147
 
121
148
  Running `gloomberb` with no arguments launches the terminal UI. Normal commands run through a headless CLI path; use `gloomberb launch-ui` when a script should explicitly open the UI.
@@ -199,6 +226,7 @@ Use `HELP` inside Gloomberb for the live shortcut list. The common command-bar p
199
226
  | `DES <ticker>` / `T <ticker>` | Security details for a ticker |
200
227
  | `FA <ticker>` | Financial statement view |
201
228
  | `G <series>` | Custom chart composer |
229
+ | `CAT [query]` | Browse and search chartable series |
202
230
  | `GP <ticker>` | Price chart |
203
231
  | `GIP <ticker>` | Intraday price chart |
204
232
  | `HP <ticker>` | Historical OHLCV prices |
@@ -212,9 +240,13 @@ Use `HELP` inside Gloomberb for the live shortcut list. The common command-bar p
212
240
  | `CMP <tickers>` | Normalized price comparison |
213
241
  | `CORR <tickers>` | Ticker return correlations |
214
242
  | `ANR <ticker>` | Analyst targets and ratings |
243
+ | `DIAG <ticker>` | Equity Diagnostic with cited flags and anomalies |
215
244
  | `SEC <ticker>` | SEC filings and company disclosures |
216
245
  | `OMON <ticker>` | Options monitor |
246
+ | `OVME` | Black-Scholes option calculator with Greeks and implied volatility |
217
247
  | `HDS <ticker>` | Institutional holders |
248
+ | `DVD <ticker>` | Dividend yield and history |
249
+ | `SI <ticker>` | Short interest |
218
250
  | `13F [fund/ticker/CIK]` | 13F fund filings and holdings |
219
251
  | `INS <ticker>` | Insider activity |
220
252
  | `EVT <ticker>` | Corporate actions, earnings, and estimates |
@@ -222,7 +254,7 @@ Use `HELP` inside Gloomberb for the live shortcut list. The common command-bar p
222
254
 
223
255
  ### Chart Composer
224
256
 
225
- `G`, `GP`, `GIP`, `CMP`, `GF`, and `GE` all open the same chart composer with different starting presets. A custom expression can mix unrelated data sources on one synchronized timeline:
257
+ `G`, `GP`, `GIP`, `CMP`, `GF`, and `GE` all open the same chart composer with different starting presets. `CAT` opens a searchable catalog of those chartable series so you can graph one without typing the expression. A custom expression can mix unrelated data sources on one synchronized timeline:
226
258
 
227
259
  ```text
228
260
  G AAPL:price, MSFT:revenue, FRED:CPIAUCSL
@@ -239,6 +271,8 @@ The toolbar controls preset or exact date ranges, intervals from one minute thro
239
271
  | `TOP` | Ranked market stories |
240
272
  | `HM` | Market heatmap for large US stocks and ETFs |
241
273
  | `MOST` | Top gainers, losers, most active, and trending tickers |
274
+ | `HILO` | Session new highs and new lows with 30s/1m/5m momentum |
275
+ | `FLOW` | Unusual options activity: sweeps, blocks, and large premium |
242
276
  | `PM <query>` | Polymarket and Kalshi prediction data |
243
277
  | `N` | News feed |
244
278
  | `CN <ticker>` | Ticker news |
@@ -249,9 +283,15 @@ The toolbar controls preset or exact date ranges, intervals from one minute thro
249
283
  | `TBO` | TheBuildout infrastructure intelligence |
250
284
  | `CG` | Congress trading disclosures |
251
285
  | `WEI` | Global equity indices |
286
+ | `FUT` | Front-month futures across index, rates, energy, metals, grains, and FX |
252
287
  | `ECON` | Economic events and releases |
253
288
  | `GC` | Yield curve |
289
+ | `AUCT` | Treasury auction results: high rate, bid-to-cover, indirect share, and size |
290
+ | `VIX` | VIX 30-day/3-month implied-volatility curve |
291
+ | `CRD` | Credit spreads |
254
292
  | `ERN` | Earnings calendar |
293
+ | `IPO` | Upcoming and recent IPOs |
294
+ | `HALT` | US trading halts with reason and resumption times |
255
295
  | `TV` | Live Bloomberg, CNBC, and Yahoo Finance television |
256
296
  | `BI` / `SP` | S&P 500 sector performance |
257
297
  | `FXC` | Major FX cross rates |
@@ -284,10 +324,19 @@ The toolbar controls preset or exact date ranges, intervals from one minute thro
284
324
  | `SB` | Toggle the status bar |
285
325
  | `VF` | Toggle quote value flashing |
286
326
  | `TH <theme>` | Change color theme |
327
+ | `FONT+` / `FONT-` | Increase or decrease desktop font size |
328
+ | `CONN` | Connection health |
329
+ | `POLL` | Prediction-market polls |
330
+ | `ART` | Loaded article lookup |
331
+ | `UPGRADE` | Account upgrade |
287
332
  | `CR` | Cycle chart renderer |
288
333
  | `LANG <locale>` | Change interface language (`auto`, `en`, `es`, `zh-CN`, `zh-TW`, `ja`, or `ko`) |
289
334
  | `PL <plugin>` | Manage plugins |
290
335
 
336
+ ## Gloom Cloud sign-in
337
+
338
+ Sign in with email and password, or pick `Log In with QR Code` from the command bar and scan the code with the Gloomberb mobile companion app to sign the terminal in without typing. The onboarding wizard offers the same QR option as the recommended path, with email and password as the alternative.
339
+
291
340
  ## Localized interface
292
341
 
293
342
  Gloomberb includes English, Spanish, Simplified Chinese, Traditional Chinese, Japanese, and Korean UI support. English remains the default fallback language.
package/README.zh-CN.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- <img src="https://gloomberb.com/gloomberb-logo-grayscale.svg" alt="Gloomberb logo" width="76" />
3
+ <img src="https://gloom.sh/gloomberb-logo-grayscale.svg" alt="Gloomberb logo" width="76" />
4
4
 
5
5
  # Gloomberb
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  桌面应用支持 macOS 和 Windows。终端界面(TUI)支持 macOS、Linux 和 Windows。
10
10
 
11
- <a href="https://gloomberb.com/download/desktop"><strong>下载桌面版</strong></a>
11
+ <a href="https://gloom.sh/download/desktop"><strong>下载桌面版</strong></a>
12
12
  &nbsp;&middot;&nbsp;
13
13
  <a href="#安装">安装 TUI</a>
14
14
  &nbsp;&middot;&nbsp;
@@ -17,7 +17,7 @@
17
17
  <br />
18
18
  <br />
19
19
 
20
- <img src="https://gloomberb.com/landing-terminal.png" alt="Gloomberb 终端界面,显示投资组合、自选列表、市场数据和图表面板。" width="720" />
20
+ <img src="https://gloom.sh/landing-terminal.png" alt="Gloomberb 终端界面,显示投资组合、自选列表、市场数据和图表面板。" width="720" />
21
21
 
22
22
  </div>
23
23
 
@@ -43,21 +43,21 @@ Gloomberb 有两种使用方式:
43
43
  ```bash
44
44
  brew install --cask vincelwt/tap/gloomberb
45
45
  # 或
46
- curl -fsSL gloomberb.com/install | bash
46
+ curl -fsSL gloom.sh/install | bash
47
47
  ```
48
48
 
49
49
  两种方式都会安装 `Gloomberb.app`,以及一个通过应用内置运行时执行 TUI 的 `gloomberb` 命令,运行时只会存储一份。
50
50
 
51
51
  想直接下载?
52
52
 
53
- - [下载 Gloomberb(Mac 版)](https://gloomberb.com/download/desktop)
53
+ - [下载 Gloomberb(Mac 版)](https://gloom.sh/download/desktop)
54
54
 
55
55
  ### Linux
56
56
 
57
57
  安装独立的 TUI 可执行文件:
58
58
 
59
59
  ```bash
60
- curl -fsSL gloomberb.com/install | bash
60
+ curl -fsSL gloom.sh/install | bash
61
61
  ```
62
62
 
63
63
  默认会将 `gloomberb` 安装到 `~/.local/bin`。Linux 桌面安装包暂未发布。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gloomberb",
3
- "version": "0.10.5",
3
+ "version": "0.11.1",
4
4
  "packageManager": "bun@1.3.11",
5
5
  "description": "Market research and portfolio tracker for the terminal",
6
6
  "module": "src/index.tsx",
@@ -19,15 +19,21 @@
19
19
  "build": "bun run scripts/build.ts",
20
20
  "build:all": "bun run scripts/build.ts --all",
21
21
  "desktop:view:build": "bun run scripts/build-electrobun-view.ts",
22
+ "web:build": "bun run scripts/build-web.ts",
23
+ "web:audit": "bun run web:build && bun run scripts/audit-web-bundle.ts",
24
+ "cloudflare:typecheck": "tsc --project tsconfig.cloudflare.json",
25
+ "cloudflare:dry-run": "bun run web:build && wrangler deploy --dry-run",
22
26
  "desktop:dev": "bun run scripts/electrobun-dev.ts",
23
27
  "desktop:build": "electrobun build",
24
28
  "desktop:release": "electrobun build --env=stable",
25
29
  "desktop:release:windows": "electrobun build --env=stable --targets=win-x64",
26
30
  "i18n:audit": "bun run scripts/i18n-audit.ts",
27
- "typecheck": "bun run typecheck:opentui && bun run typecheck:electrobun-bun && bun run typecheck:electrobun-view && bun run typecheck:scripts",
31
+ "typecheck": "bun run typecheck:opentui && bun run typecheck:electrobun-bun && bun run typecheck:electrobun-view && bun run typecheck:browser && bun run typecheck:cloudflare && bun run typecheck:scripts",
28
32
  "typecheck:opentui": "tsc --project tsconfig.opentui.json",
29
33
  "typecheck:electrobun-bun": "tsc --project tsconfig.electrobun-bun.json",
30
34
  "typecheck:electrobun-view": "tsc --project tsconfig.electrobun-view.json",
35
+ "typecheck:browser": "tsc --project tsconfig.browser.json",
36
+ "typecheck:cloudflare": "tsc --project tsconfig.cloudflare.json",
31
37
  "typecheck:scripts": "tsc --project tsconfig.scripts.json",
32
38
  "test": "bun test",
33
39
  "test:global-upgrade": "bun run scripts/smoke-global-upgrade.ts",
@@ -52,7 +58,8 @@
52
58
  "electrobun": "^1.18.1",
53
59
  "happy-dom": "^20.11.1",
54
60
  "png-to-ico": "^2.1.8",
55
- "rcedit": "^4.0.1"
61
+ "rcedit": "^4.0.1",
62
+ "wrangler": "^4.0.0"
56
63
  },
57
64
  "peerDependencies": {
58
65
  "typescript": "^5.9.2"
@@ -60,12 +67,14 @@
60
67
  "dependencies": {
61
68
  "@earendil-works/pi-agent-core": "0.81.1",
62
69
  "@earendil-works/pi-ai": "0.81.1",
70
+ "@modelcontextprotocol/sdk": "^1.30.0",
63
71
  "@opentui/core": "^0.3.2",
64
72
  "@opentui/react": "^0.3.2",
65
73
  "@stoqey/ib": "^1.5.6",
66
74
  "@tanstack/react-virtual": "^3.14.2",
67
75
  "hls.js": "1.6.13",
68
76
  "jimp": "1.6.1",
77
+ "qrcode-generator": "^2.0.4",
69
78
  "react": "19.2.7",
70
79
  "react-dom": "19.2.7",
71
80
  "rxjs": "^7.8.2",
@@ -5,8 +5,11 @@ import type {
5
5
  AuthUser,
6
6
  BuildoutAccountResponse,
7
7
  BuildoutTokenResponse,
8
+ CloudBrowserHandoffResponse,
8
9
  CloudPricing,
9
10
  CloudVerificationResponse,
11
+ DeviceAuthStartResponse,
12
+ DeviceAuthTokenResponse,
10
13
  PersistedAuthUser,
11
14
  } from "./types";
12
15
 
@@ -15,6 +18,7 @@ type CloudApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;
15
18
  interface CloudAuthApiOptions {
16
19
  getCurrentUser(): AuthUser | null;
17
20
  getSessionToken(): string | null;
21
+ hasSessionCredential(): boolean;
18
22
  request: CloudApiRequest;
19
23
  requireCapturedSession(message: string): void;
20
24
  setCurrentUser(user: AuthUser | null): void;
@@ -26,7 +30,7 @@ export class CloudAuthApi {
26
30
  constructor(private readonly options: CloudAuthApiOptions) {}
27
31
 
28
32
  restoreCachedUser(user: PersistedAuthUser | null): void {
29
- if (!this.options.getSessionToken() || !user?.id) {
33
+ if (!this.options.hasSessionCredential() || !user?.id) {
30
34
  this.options.setCurrentUser(null);
31
35
  return;
32
36
  }
@@ -53,15 +57,6 @@ export class CloudAuthApi {
53
57
  });
54
58
  }
55
59
 
56
- async ensureVerifiedSession(): Promise<AuthUser | null> {
57
- if (!this.options.getSessionToken()) return null;
58
- if (!this.options.getCurrentUser()) {
59
- await this.getSession();
60
- }
61
- const user = this.options.getCurrentUser();
62
- return user?.emailVerified ? user : null;
63
- }
64
-
65
60
  async signUp(email: string, username: string, name: string, password: string): Promise<AuthUser> {
66
61
  const result = await this.options.request<{ user: AuthUser }>("/auth/sign-up/email", {
67
62
  method: "POST",
@@ -86,6 +81,26 @@ export class CloudAuthApi {
86
81
  return result.user;
87
82
  }
88
83
 
84
+ /** Starts a QR / device sign-in; the mobile app approves the returned user code. */
85
+ async startDeviceSignIn(body: { clientName?: string; clientPlatform?: string }): Promise<DeviceAuthStartResponse> {
86
+ return this.options.request<DeviceAuthStartResponse>("/auth/device/start", {
87
+ method: "POST",
88
+ body: JSON.stringify(body),
89
+ });
90
+ }
91
+
92
+ /**
93
+ * Polls a pending device sign-in. Unlike the email flow, approval hands back
94
+ * a raw session token in the body instead of a Set-Cookie header; the caller
95
+ * installs it through the same path boot restoration uses.
96
+ */
97
+ async pollDeviceSignIn(deviceCode: string): Promise<DeviceAuthTokenResponse> {
98
+ return this.options.request<DeviceAuthTokenResponse>("/auth/device/token", {
99
+ method: "POST",
100
+ body: JSON.stringify({ deviceCode }),
101
+ });
102
+ }
103
+
89
104
  async signOut(): Promise<void> {
90
105
  try {
91
106
  await this.options.request("/auth/sign-out", { method: "POST" });
@@ -111,6 +126,18 @@ export class CloudAuthApi {
111
126
  }
112
127
  }
113
128
 
129
+ /**
130
+ * Emails a password reset link. The reset itself completes on the gloom.sh
131
+ * site, so the app only ever sends the email. The server answers the same
132
+ * way whether or not the address exists.
133
+ */
134
+ async requestPasswordReset(email: string): Promise<void> {
135
+ await this.options.request("/auth/request-password-reset", {
136
+ method: "POST",
137
+ body: JSON.stringify({ email }),
138
+ });
139
+ }
140
+
114
141
  async sendVerification(): Promise<CloudVerificationResponse> {
115
142
  return this.options.request<CloudVerificationResponse>("/cloud/auth/send-verification", {
116
143
  method: "POST",
@@ -118,6 +145,17 @@ export class CloudAuthApi {
118
145
  });
119
146
  }
120
147
 
148
+ /**
149
+ * Creates a short-lived browser handoff for the captured native session.
150
+ * The server deliberately returns an opaque one-time URL, never the session cookie.
151
+ */
152
+ async createBrowserHandoff(): Promise<CloudBrowserHandoffResponse> {
153
+ return this.options.request<CloudBrowserHandoffResponse>("/cloud/auth/browser-handoff", {
154
+ method: "POST",
155
+ body: JSON.stringify({}),
156
+ });
157
+ }
158
+
121
159
  async getAccountProfile(): Promise<AccountProfile> {
122
160
  const result = await this.options.request<{ profile: AccountProfile }>("/account/profile", {
123
161
  method: "GET",
@@ -4,6 +4,10 @@ import { normalizeTweetSearchResponse } from "./normalizers";
4
4
  import {
5
5
  cloudCongressHousePath,
6
6
  cloudExchangeRatePath,
7
+ cloudSec13FPath,
8
+ cloudSecFilingContentPath,
9
+ cloudSecFilingDocumentsPath,
10
+ cloudSecFilingsPath,
7
11
  cloudFredSeriesPath,
8
12
  cloudHistoryPath,
9
13
  cloudMarketSearchPath,
@@ -17,23 +21,33 @@ import {
17
21
  type CloudFredSeriesParams,
18
22
  type CloudHistoryParams,
19
23
  type CloudNewsParams,
24
+ type CloudSecFilingParams,
25
+ type CloudSecFilingsParams,
20
26
  type CloudTickerTweetsParams,
21
27
  type CloudTweetSearchParams,
22
28
  } from "./paths";
23
29
  import type {
24
30
  CloudAnalystResearchPayload,
31
+ CloudShortInterestPayload,
25
32
  CloudCompanyProfile,
26
33
  CloudCongressHousePayload,
27
34
  CloudCorporateActionsPayload,
28
35
  CloudEconEventPayload,
36
+ CloudEquityDiagnosticMode,
37
+ CloudEquityDiagnosticResult,
29
38
  CloudFredSeriesPayload,
30
39
  CloudFundamentals,
31
40
  CloudHoldersPayload,
32
41
  CloudMarketBatchPayload,
33
42
  CloudMarketBatchTarget,
34
43
  CloudMarketResponse,
44
+ CloudMarketScreenerCategory,
45
+ CloudMarketScreenerPayload,
35
46
  CloudNewsListResponse,
36
47
  CloudNewsPayload,
48
+ CloudSecContentResponse,
49
+ CloudSecDocumentsResponse,
50
+ CloudSecFilingsResponse,
37
51
  CloudOptionsChainPayload,
38
52
  CloudPricePointPayload,
39
53
  CloudQuotePayload,
@@ -77,6 +91,22 @@ export class CloudDataApi {
77
91
  return this.postMarketBatch("/market/quotes/batch", targets, mode);
78
92
  }
79
93
 
94
+ async getCloudMarketScreener(
95
+ category: CloudMarketScreenerCategory,
96
+ count = 25,
97
+ mode: "cache-first" | "refresh" = "cache-first",
98
+ ): Promise<CloudMarketResponse<CloudMarketScreenerPayload>> {
99
+ const requestedCount = Number.isFinite(count) ? Math.round(count) : 25;
100
+ const params = new URLSearchParams({
101
+ category,
102
+ count: String(Math.max(1, Math.min(50, requestedCount))),
103
+ mode,
104
+ });
105
+ return this.request<CloudMarketResponse<CloudMarketScreenerPayload>>(
106
+ `/market/screener?${params.toString()}`,
107
+ );
108
+ }
109
+
80
110
  async getCloudOptionsChain(
81
111
  symbol: string,
82
112
  exchange?: string,
@@ -112,6 +142,12 @@ export class CloudDataApi {
112
142
  return this.requestMarketSymbol("/market/analyst", symbol, exchange);
113
143
  }
114
144
 
145
+ async getCloudShortInterest(symbol: string, years?: number): Promise<CloudMarketResponse<CloudShortInterestPayload>> {
146
+ const params = new URLSearchParams({ symbol: symbol.toUpperCase() });
147
+ if (years != null) params.set("years", String(years));
148
+ return this.request<CloudMarketResponse<CloudShortInterestPayload>>(`/market/short-interest?${params}`);
149
+ }
150
+
115
151
  async getCloudCorporateActions(symbol: string, exchange?: string): Promise<CloudMarketResponse<CloudCorporateActionsPayload>> {
116
152
  return this.requestMarketSymbol("/market/corporate-actions", symbol, exchange);
117
153
  }
@@ -138,6 +174,26 @@ export class CloudDataApi {
138
174
  return this.request<CloudMarketResponse<{ rate: number }>>(cloudExchangeRatePath(fromCurrency));
139
175
  }
140
176
 
177
+ /**
178
+ * On-demand single-company evidence review. This is a cloud product endpoint,
179
+ * not a market-data capability, so it is called directly instead of routed
180
+ * through the asset-data provider.
181
+ */
182
+ async getCloudEquityDiagnostic(
183
+ symbol: string,
184
+ exchange?: string,
185
+ mode: CloudEquityDiagnosticMode = "cache-first",
186
+ ): Promise<CloudEquityDiagnosticResult> {
187
+ return this.request<CloudEquityDiagnosticResult>("/research/equity-diagnostic", {
188
+ method: "POST",
189
+ body: JSON.stringify({
190
+ symbol: symbol.trim().toUpperCase(),
191
+ ...(exchange ? { exchange } : {}),
192
+ mode,
193
+ }),
194
+ });
195
+ }
196
+
141
197
  async getCloudEconomicCalendar(): Promise<CloudEconEventPayload[]> {
142
198
  return this.request<CloudEconEventPayload[]>("/cloud/econ/calendar");
143
199
  }
@@ -157,6 +213,22 @@ export class CloudDataApi {
157
213
  return this.request<CloudCongressHousePayload>(cloudCongressHousePath(params));
158
214
  }
159
215
 
216
+ async getCloudSecFilings(params: CloudSecFilingsParams): Promise<CloudSecFilingsResponse> {
217
+ return this.request<CloudSecFilingsResponse>(cloudSecFilingsPath(params));
218
+ }
219
+
220
+ async getCloudSecFilingDocuments(params: CloudSecFilingParams): Promise<CloudSecDocumentsResponse> {
221
+ return this.request<CloudSecDocumentsResponse>(cloudSecFilingDocumentsPath(params));
222
+ }
223
+
224
+ async getCloudSecFilingContent(params: CloudSecFilingParams): Promise<CloudSecContentResponse> {
225
+ return this.request<CloudSecContentResponse>(cloudSecFilingContentPath(params));
226
+ }
227
+
228
+ async getCloudSec13F(path: string, params: Record<string, string | number | undefined> = {}): Promise<unknown> {
229
+ return this.request<unknown>(cloudSec13FPath(path, params));
230
+ }
231
+
160
232
  async getCloudNews(params: CloudNewsParams = {}): Promise<CloudNewsListResponse> {
161
233
  return this.request<CloudNewsListResponse>(cloudNewsPath(params));
162
234
  }