gloomberb 0.15.4 → 0.15.6

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 (614) hide show
  1. package/README.md +3 -1
  2. package/package.json +4 -3
  3. package/src/api-client/askg.ts +2 -2
  4. package/src/api-client/auth.ts +28 -0
  5. package/src/api-client/cot.ts +3 -3
  6. package/src/api-client/crypto-markets.ts +1 -1
  7. package/src/api-client/data.ts +17 -0
  8. package/src/api-client/debt-maturities.ts +2 -2
  9. package/src/api-client/earnings.ts +3 -3
  10. package/src/api-client/equity-screener.ts +2 -2
  11. package/src/api-client/estimate-revisions.ts +5 -5
  12. package/src/api-client/index.ts +12 -11
  13. package/src/api-client/ipo.ts +4 -4
  14. package/src/api-client/market-movers.ts +1 -1
  15. package/src/api-client/mna.ts +2 -2
  16. package/src/api-client/normalizers.ts +1 -1
  17. package/src/api-client/paths.ts +2 -2
  18. package/src/api-client/plan-rules.ts +2 -2
  19. package/src/api-client/rates.ts +1 -1
  20. package/src/api-client/request.ts +1 -1
  21. package/src/api-client/research-activity.ts +4 -1
  22. package/src/api-client/social-mentions.ts +1 -1
  23. package/src/api-client/types.ts +40 -32
  24. package/src/api-client/yield-curves.ts +47 -0
  25. package/src/app/app-bootstrap-state.ts +0 -2
  26. package/src/app/global-shortcuts.ts +21 -0
  27. package/src/app/keybindings/actions.ts +9 -1
  28. package/src/app/keybindings/chord.ts +1 -1
  29. package/src/app/keybindings/index.ts +0 -14
  30. package/src/app/keybindings/labels.ts +1 -1
  31. package/src/app/keybindings/resolve.ts +1 -8
  32. package/src/app/pane-runtime/index.tsx +9 -14
  33. package/src/app/pane-runtime/layout-placement.ts +1 -30
  34. package/src/app/pane-runtime/plugin-bindings.ts +184 -180
  35. package/src/app/pane-runtime/ticker-inspector-runtime.ts +5 -5
  36. package/src/app/pane-runtime/ticker-open-runtime.ts +5 -5
  37. package/src/app/pane-template-dialog-wizard.tsx +13 -5
  38. package/src/app/runtime/broker-import.ts +5 -3
  39. package/src/app/runtime/desktop-deeplink.ts +4 -4
  40. package/src/app/runtime/desktop-menu.ts +4 -4
  41. package/src/app/runtime/layout-warmup.ts +1 -1
  42. package/src/app/runtime/plugin-bindings.ts +187 -188
  43. package/src/app/runtime/update.ts +1 -1
  44. package/src/app.tsx +3 -3
  45. package/src/brokers/signed-in/adapter.ts +1 -1
  46. package/src/brokers/signed-in/client.ts +1 -1
  47. package/src/brokers/signed-in/connect.ts +1 -1
  48. package/src/brokers/signed-in/sign-in.ts +1 -1
  49. package/src/cli/commands/plugins.ts +3 -3
  50. package/src/cli/desktop-pane-shot.ts +3 -3
  51. package/src/cli/errors.ts +3 -3
  52. package/src/cli/pane-functions/capabilities.ts +2 -2
  53. package/src/cli/pane-functions/dom.ts +1 -1
  54. package/src/cli/pane-functions/function-help.ts +1038 -0
  55. package/src/cli/pane-functions/headless.ts +1 -1
  56. package/src/cli/pane-functions/options.ts +1 -1
  57. package/src/cli/pane-functions/report.ts +1 -1
  58. package/src/cli/pane-functions/screenshot-evidence.ts +3 -3
  59. package/src/cli/pane-functions/screenshot.ts +5 -6
  60. package/src/cli/restore-plugins.ts +1 -1
  61. package/src/components/chart/composite/column-layout.ts +1 -1
  62. package/src/components/chart/composite/composite-chart.tsx +302 -26
  63. package/src/components/chart/composite/downsample.ts +1 -1
  64. package/src/components/chart/composite/index.ts +0 -1
  65. package/src/components/chart/composite/interactions.ts +2 -0
  66. package/src/components/chart/composite/levels.ts +154 -0
  67. package/src/components/chart/composite/rasterizer.ts +78 -10
  68. package/src/components/chart/composite/scene.ts +60 -1
  69. package/src/components/chart/composite/session-shading.ts +99 -0
  70. package/src/components/chart/composite/text-renderer.ts +5 -0
  71. package/src/components/chart/composite/time-axis.ts +1 -1
  72. package/src/components/chart/composite/tools.ts +1 -1
  73. package/src/components/chart/composite/types.ts +42 -3
  74. package/src/components/chart/composite/volume-profile-paint.ts +77 -0
  75. package/src/components/chart/curve/index.ts +2 -2
  76. package/src/components/chart/curve/model.ts +7 -4
  77. package/src/components/chart/native/kitty/support.ts +1 -1
  78. package/src/components/chart/static/index.ts +0 -2
  79. package/src/components/chart/static/series.ts +3 -0
  80. package/src/components/chart/static/trail-chart-surface.tsx +1 -1
  81. package/src/components/chart/surface3d/model.ts +4 -4
  82. package/src/components/chart/surface3d/software.ts +1 -1
  83. package/src/components/chart-table/axis.ts +20 -0
  84. package/src/components/chart-table/index.ts +4 -8
  85. package/src/components/chart-table/layout.ts +3 -3
  86. package/src/components/chart-table/selection.ts +1 -1
  87. package/src/components/command-bar/assist/model.ts +1 -1
  88. package/src/components/command-bar/commands/registry.ts +4 -1
  89. package/src/components/command-bar/keyboard-handlers.ts +1 -1
  90. package/src/components/command-bar/keyboard-shortcuts.ts +1 -1
  91. package/src/components/command-bar/layout-items/current-layout.ts +12 -2
  92. package/src/components/command-bar/layout-items/focused-pane.ts +3 -3
  93. package/src/components/command-bar/layout-items.ts +1 -1
  94. package/src/components/command-bar/list/badge.ts +1 -1
  95. package/src/components/command-bar/multi-select-picker.tsx +1 -1
  96. package/src/components/command-bar/pane-actions.ts +3 -3
  97. package/src/components/command-bar/pane-settings.ts +1 -1
  98. package/src/components/command-bar/pane-templates/workflow.ts +1 -1
  99. package/src/components/command-bar/panel/layout.ts +1 -1
  100. package/src/components/command-bar/panel/runtime.ts +1 -1
  101. package/src/components/command-bar/panel/types.ts +1 -1
  102. package/src/components/command-bar/picker-activation.ts +3 -3
  103. package/src/components/command-bar/routes/root/help-items.ts +66 -0
  104. package/src/components/command-bar/routes/root/results.ts +9 -0
  105. package/src/components/command-bar/routes/root/search-report.ts +1 -1
  106. package/src/components/command-bar/routes/root/selection.ts +7 -1
  107. package/src/components/command-bar/routes/ticker-search/results.ts +1 -1
  108. package/src/components/command-bar/surface/environment.ts +0 -4
  109. package/src/components/command-bar/surface/index.tsx +3 -4
  110. package/src/components/command-bar/workflow/collection-actions.ts +17 -9
  111. package/src/components/command-bar/workflow/fields.ts +35 -13
  112. package/src/components/command-bar/workflow/ops.ts +52 -8
  113. package/src/components/command-bar/workflow/route-actions.ts +2 -3
  114. package/src/components/command-bar/workflow/submit.ts +2 -2
  115. package/src/components/feedback-dialog.tsx +1 -1
  116. package/src/components/layout/detached-pane-shell.tsx +4 -10
  117. package/src/components/layout/pane/cycle-order.ts +1 -1
  118. package/src/components/layout/pane/footer/index.tsx +0 -3
  119. package/src/components/layout/pane/footer/registration.tsx +0 -12
  120. package/src/components/layout/pane/frame.tsx +2 -1
  121. package/src/components/layout/pane/header.tsx +1 -1
  122. package/src/components/layout/pane/sidebar.tsx +0 -1
  123. package/src/components/layout/pane/surface.ts +26 -0
  124. package/src/components/layout/pane/title.ts +21 -5
  125. package/src/components/layout/shell/active-drag.ts +1 -1
  126. package/src/components/layout/shell/chrome.ts +1 -1
  127. package/src/components/layout/shell/cursor-occlusion.ts +1 -1
  128. package/src/components/layout/shell/drag/index.ts +1 -1
  129. package/src/components/layout/shell/drag/overlays.tsx +1 -1
  130. package/src/components/layout/shell/drag/runtime.ts +1 -1
  131. package/src/components/layout/shell/fullscreen.ts +1 -1
  132. package/src/components/layout/shell/index.tsx +8 -19
  133. package/src/components/layout/shell/layout-state.ts +1 -1
  134. package/src/components/layout/shell/menu.ts +1 -1
  135. package/src/components/layout/shell/native/pointer-runtime.ts +1 -1
  136. package/src/components/layout/shell/native/surfaces.ts +1 -1
  137. package/src/components/layout/shell/native/window-state.ts +1 -1
  138. package/src/components/layout/shell/pane/actions.ts +3 -3
  139. package/src/components/layout/shell/pane/layers.tsx +1 -1
  140. package/src/components/layout/shell/pane-occlusion.ts +1 -1
  141. package/src/components/layout/shell/terminal-pointer-runtime.ts +1 -1
  142. package/src/components/layout/shell/ticker-link-menu.ts +46 -23
  143. package/src/components/layout/shell/visible-layout.ts +1 -1
  144. package/src/components/layout/shell/window-mode/index.ts +2 -9
  145. package/src/components/layout/shell/window-mode/overlays.tsx +1 -1
  146. package/src/components/layout/status-bar-groups.ts +1 -1
  147. package/src/components/layout/status-bar.tsx +10 -6
  148. package/src/components/layout/titlebar-overlay.ts +1 -1
  149. package/src/components/layout/window-edit/mode.ts +1 -1
  150. package/src/components/layout/window-edit/presentation.ts +1 -1
  151. package/src/components/layout/window-edit/status.tsx +1 -1
  152. package/src/components/layout/window-fullscreen.ts +1 -1
  153. package/src/components/onboarding/desks-step.tsx +43 -0
  154. package/src/components/onboarding/first-run-workspace.ts +2 -2
  155. package/src/components/onboarding/onboarding-wizard.tsx +151 -26
  156. package/src/components/onboarding/wizard-account.ts +43 -132
  157. package/src/components/onboarding/wizard-broker-sync.ts +1 -1
  158. package/src/components/onboarding/wizard-positions.ts +20 -7
  159. package/src/components/quote-flash.ts +2 -2
  160. package/src/components/ticker/badge/index.tsx +2 -2
  161. package/src/components/toggle-list.tsx +18 -10
  162. package/src/components/ui/data-table/stable-columns.ts +1 -1
  163. package/src/components/ui/data-table/types.ts +1 -1
  164. package/src/components/ui/external-link.tsx +6 -2
  165. package/src/components/ui/index.ts +0 -1
  166. package/src/components/ui/multi-select/dialog.tsx +18 -8
  167. package/src/components/ui/number-prompt-dialog.tsx +1 -1
  168. package/src/components/ui/split-bar.tsx +1 -1
  169. package/src/components/ui/table-layout.ts +1 -1
  170. package/src/components/ui/text-prompt-dialog.tsx +4 -1
  171. package/src/core/app-runtime.ts +8 -6
  172. package/src/core/connection-health.ts +2 -2
  173. package/src/core/state/app/layout-reducer.ts +0 -12
  174. package/src/core/state/app/layout.ts +9 -19
  175. package/src/core/state/app/state.ts +6 -13
  176. package/src/core/state/app/types.ts +10 -2
  177. package/src/core/state/session-persistence.ts +3 -5
  178. package/src/data/config/chart-settings.ts +1 -1
  179. package/src/data/config/home.ts +1 -1
  180. package/src/data/config/store/node.ts +1 -1
  181. package/src/data/config/store/normalize.ts +3 -3
  182. package/src/i18n/es.ts +37 -0
  183. package/src/i18n/index.ts +0 -2
  184. package/src/i18n/ja.ts +37 -0
  185. package/src/i18n/ko.ts +37 -0
  186. package/src/i18n/languages.ts +1 -1
  187. package/src/i18n/zh-cn.ts +37 -0
  188. package/src/i18n/zh-tw.ts +37 -0
  189. package/src/layout/desks.ts +335 -0
  190. package/src/{plugins → layout}/launch-layout.ts +0 -1
  191. package/src/layout/pane-follow.ts +47 -0
  192. package/src/{plugins/pane-manager.ts → layout/pane-manager/index.ts} +8 -9
  193. package/src/{plugins → layout}/ticker-navigation.ts +13 -0
  194. package/src/layout-marketplace/api.ts +1 -1
  195. package/src/layout-marketplace/cloud.ts +3 -3
  196. package/src/layout-marketplace/gallery.tsx +1 -1
  197. package/src/layout-marketplace/geometry.ts +1 -1
  198. package/src/layout-marketplace/linked-sync.ts +1 -1
  199. package/src/layout-marketplace/linked.ts +2 -2
  200. package/src/layout-marketplace/model.ts +2 -2
  201. package/src/layout-marketplace/use-marketplace.ts +3 -3
  202. package/src/market-data/coordinator/index.ts +0 -1
  203. package/src/market-data/coordinator/quotes.ts +3 -3
  204. package/src/market-data/frame-scheduler.ts +1 -1
  205. package/src/market-data/history-session.ts +1 -1
  206. package/src/market-data/market/format.ts +15 -9
  207. package/src/market-data/market/freshness.ts +64 -0
  208. package/src/market-data/market/trading-sessions.ts +72 -0
  209. package/src/market-data/realized-volatility.ts +2 -2
  210. package/src/market-data/snapshot-provider.ts +1 -1
  211. package/src/news/hooks.ts +1 -1
  212. package/src/news/news-model.ts +1 -1
  213. package/src/news/types.ts +1 -1
  214. package/src/plugins/auto-update.ts +2 -2
  215. package/src/plugins/builtin/account-management/calendar-tab.tsx +196 -0
  216. package/src/plugins/builtin/account-management/footer.ts +5 -2
  217. package/src/plugins/builtin/account-management/index.tsx +2 -2
  218. package/src/plugins/builtin/account-management/navigation.ts +1 -1
  219. package/src/plugins/builtin/account-management/pane.tsx +11 -1
  220. package/src/plugins/builtin/alerts/levels.ts +60 -0
  221. package/src/plugins/builtin/alerts/research-rules.ts +2 -2
  222. package/src/plugins/builtin/analytics/index.tsx +16 -10
  223. package/src/plugins/builtin/analytics/pane-model.ts +21 -12
  224. package/src/plugins/builtin/analytics/risk-client.ts +2 -2
  225. package/src/plugins/builtin/analytics/risk-evidence.ts +4 -4
  226. package/src/plugins/builtin/analytics/risk-math.ts +3 -3
  227. package/src/plugins/builtin/analytics/risk-model.ts +2 -2
  228. package/src/plugins/builtin/analytics/risk-test-data.ts +1 -0
  229. package/src/plugins/builtin/analytics/sharpe-cadence.ts +1 -1
  230. package/src/plugins/builtin/backtest/client.ts +1 -1
  231. package/src/plugins/builtin/backtest/engine.ts +1 -1
  232. package/src/plugins/builtin/backtest/index.tsx +1 -1
  233. package/src/plugins/builtin/backtest/rules.ts +5 -5
  234. package/src/plugins/builtin/bond-calculator/math.ts +3 -3
  235. package/src/plugins/builtin/buildout/detail/company.tsx +1 -1
  236. package/src/plugins/builtin/buildout/format.ts +1 -1
  237. package/src/plugins/builtin/cds/client.ts +1 -1
  238. package/src/plugins/builtin/cds/headless.ts +1 -1
  239. package/src/plugins/builtin/chart-composer/catalog-inventory.ts +2 -2
  240. package/src/plugins/builtin/chart-composer/chart-spec-edit.ts +502 -0
  241. package/src/plugins/builtin/chart-composer/editor/controller.ts +6 -7
  242. package/src/plugins/builtin/chart-composer/editor/model.ts +2 -2
  243. package/src/plugins/builtin/chart-composer/follow-binding.ts +1 -1
  244. package/src/plugins/builtin/chart-composer/headless.ts +5 -3
  245. package/src/plugins/builtin/chart-composer/index.tsx +20 -0
  246. package/src/plugins/builtin/chart-composer/pane.tsx +307 -32
  247. package/src/plugins/builtin/chart-composer/presets.ts +7 -836
  248. package/src/plugins/builtin/chart-composer/price-levels.ts +80 -0
  249. package/src/plugins/builtin/chart-composer/quick-add.tsx +4 -4
  250. package/src/plugins/builtin/chart-composer/series-catalog.ts +1 -4
  251. package/src/plugins/builtin/chart-composer/series-expression.ts +189 -0
  252. package/src/{time-series → plugins/builtin/chart-composer}/session-history.ts +14 -14
  253. package/src/plugins/builtin/chart-composer/settings.ts +35 -14
  254. package/src/plugins/builtin/chart-composer/studies.ts +242 -0
  255. package/src/plugins/builtin/chat/channel-labels.ts +1 -1
  256. package/src/plugins/builtin/chat/channels.ts +1 -1
  257. package/src/plugins/builtin/chat/content/transcript.tsx +0 -1
  258. package/src/plugins/builtin/chat/layout.ts +2 -2
  259. package/src/plugins/builtin/chat/message/profile-popover.tsx +1 -1
  260. package/src/plugins/builtin/chat/pane.tsx +0 -2
  261. package/src/plugins/builtin/chat/profile-popover.ts +1 -1
  262. package/src/plugins/builtin/chat/sidebar-store.ts +2 -2
  263. package/src/plugins/builtin/cloud/askg/executor.ts +3 -3
  264. package/src/plugins/builtin/cloud/askg/manifest.ts +3 -3
  265. package/src/plugins/builtin/cloud/askg/model.ts +5 -5
  266. package/src/plugins/builtin/cloud/askg/pane.tsx +1 -1
  267. package/src/plugins/builtin/cloud/askg/protocol.ts +14 -14
  268. package/src/plugins/builtin/cloud/auth-dialog.tsx +1 -1
  269. package/src/plugins/builtin/cloud/auth-form.tsx +31 -94
  270. package/src/plugins/builtin/cloud/auth-model.ts +1 -1
  271. package/src/plugins/builtin/cloud/device-signin-dialog.tsx +1 -1
  272. package/src/plugins/builtin/cloud/email-auth-attempt.ts +173 -0
  273. package/src/plugins/builtin/cloud/team/capability.ts +1 -1
  274. package/src/plugins/builtin/cloud/team/collections.ts +1 -1
  275. package/src/plugins/builtin/cloud/team/command.ts +2 -2
  276. package/src/plugins/builtin/cloud/team/model.ts +1 -1
  277. package/src/plugins/builtin/cloud/team/pane-sections.tsx +1 -1
  278. package/src/plugins/builtin/cloud/team/pane-ui.tsx +1 -1
  279. package/src/plugins/builtin/cloud/team/pane.tsx +1 -1
  280. package/src/plugins/builtin/cloud/team/views.ts +2 -2
  281. package/src/plugins/builtin/cloud/thesis/exposure.ts +2 -2
  282. package/src/plugins/builtin/cloud/thesis/ticker-tab.tsx +0 -1
  283. package/src/plugins/builtin/cloud/upgrade-dialog.tsx +2 -2
  284. package/src/plugins/builtin/cloud-tweets/model.ts +1 -1
  285. package/src/{utils → plugins/builtin/cloud-tweets}/tweet-text.ts +1 -1
  286. package/src/plugins/builtin/composite-plugins.ts +4 -0
  287. package/src/plugins/builtin/congress-trades/detail.tsx +1 -1
  288. package/src/plugins/builtin/congress-trades/model.ts +1 -1
  289. package/src/plugins/builtin/congress-trades/table.tsx +1 -1
  290. package/src/plugins/builtin/connections/pane.tsx +1 -1
  291. package/src/plugins/builtin/correlation/index.tsx +2 -2
  292. package/src/plugins/builtin/correlation/relationship/pane.tsx +1 -1
  293. package/src/plugins/builtin/correlation/relationship/view-model.ts +1 -1
  294. package/src/plugins/builtin/cot/client.ts +1 -1
  295. package/src/plugins/builtin/credit-boards/client.ts +2 -2
  296. package/src/plugins/builtin/credit-boards/model.ts +5 -11
  297. package/src/plugins/builtin/credit-conditions/client.ts +1 -1
  298. package/src/plugins/builtin/credit-conditions/headless.ts +2 -2
  299. package/src/plugins/builtin/crypto-board/model.ts +4 -4
  300. package/src/plugins/builtin/crypto-board/pane.tsx +1 -1
  301. package/src/plugins/builtin/custom-view/live-quotes.ts +1 -1
  302. package/src/plugins/builtin/custom-view/pane.tsx +35 -23
  303. package/src/plugins/builtin/custom-view/view-spec.ts +9 -9
  304. package/src/plugins/builtin/debt-maturities/index.tsx +1 -0
  305. package/src/plugins/builtin/debt-maturities/model.ts +2 -18
  306. package/src/plugins/builtin/debt-maturities/pane.tsx +2 -2
  307. package/src/plugins/builtin/dividend-yield/index.tsx +1 -0
  308. package/src/plugins/builtin/earnings/board-model.ts +1 -1
  309. package/src/plugins/builtin/earnings/client.ts +2 -2
  310. package/src/plugins/builtin/earnings/data/cache.ts +1 -1
  311. package/src/plugins/builtin/earnings/estimate-basis.ts +2 -7
  312. package/src/plugins/builtin/earnings/headless.ts +3 -3
  313. package/src/plugins/builtin/earnings/history-model.ts +1 -1
  314. package/src/plugins/builtin/earnings-calls/headless.ts +1 -1
  315. package/src/plugins/builtin/econ/detail-view.tsx +1 -1
  316. package/src/plugins/builtin/econ/index.tsx +1 -1
  317. package/src/plugins/builtin/econ-statistics/detail.tsx +1 -1
  318. package/src/plugins/builtin/econ-statistics/pane.tsx +1 -1
  319. package/src/plugins/builtin/econ-statistics/view.ts +3 -3
  320. package/src/plugins/builtin/estimate-revisions/index.tsx +1 -0
  321. package/src/plugins/builtin/executives/index.tsx +1 -0
  322. package/src/plugins/builtin/fear-greed/headless.ts +1 -1
  323. package/src/plugins/builtin/fear-greed/index.tsx +0 -2
  324. package/src/plugins/builtin/filing-events/index.tsx +1 -0
  325. package/src/plugins/builtin/futures/index.tsx +1 -1
  326. package/src/plugins/builtin/futures/returns.ts +1 -1
  327. package/src/plugins/builtin/futures/use-front-returns.ts +1 -1
  328. package/src/plugins/builtin/futures-curve/model.ts +2 -2
  329. package/src/plugins/builtin/help/function-card.tsx +202 -0
  330. package/src/plugins/builtin/help/function-index.ts +193 -0
  331. package/src/plugins/builtin/help/index.tsx +31 -1
  332. package/src/plugins/builtin/help/shortcut-model.ts +1 -1
  333. package/src/plugins/builtin/help/table-cells.tsx +1 -1
  334. package/src/plugins/builtin/holders/index.tsx +1 -0
  335. package/src/plugins/builtin/insider/client.ts +1 -1
  336. package/src/plugins/builtin/insider/index.tsx +1 -0
  337. package/src/plugins/builtin/insider/model.ts +1 -1
  338. package/src/plugins/builtin/ipo-calendar/headless.ts +1 -1
  339. package/src/plugins/builtin/ipo-calendar/model.ts +1 -1
  340. package/src/plugins/builtin/iv-history/charts.tsx +1 -1
  341. package/src/plugins/builtin/iv-history/client.ts +2 -2
  342. package/src/plugins/builtin/iv-history/index.tsx +1 -1
  343. package/src/plugins/builtin/iv-history/model.ts +4 -4
  344. package/src/plugins/builtin/jobs/client.ts +1 -1
  345. package/src/plugins/builtin/jobs/model.ts +3 -3
  346. package/src/plugins/builtin/jobs/pane.tsx +2 -2
  347. package/src/plugins/builtin/kelly-sizer/model.ts +1 -1
  348. package/src/plugins/builtin/kelly-sizer/test-support.tsx +1 -1
  349. package/src/plugins/builtin/kelly-sizer/types.ts +1 -1
  350. package/src/plugins/builtin/layout-manager/index.tsx +76 -2
  351. package/src/plugins/builtin/macro-resources.ts +1 -1
  352. package/src/plugins/builtin/market-halts/pane.tsx +5 -1
  353. package/src/plugins/builtin/market-heatmap/data.ts +4 -4
  354. package/src/plugins/builtin/market-movers/screener.ts +1 -1
  355. package/src/plugins/builtin/market-valuation/align.ts +1 -1
  356. package/src/plugins/builtin/market-valuation/chart-projection.ts +1 -1
  357. package/src/plugins/builtin/market-valuation/defs.ts +3 -3
  358. package/src/plugins/builtin/market-valuation/headless.ts +1 -1
  359. package/src/plugins/builtin/market-valuation/indicators.ts +4 -4
  360. package/src/plugins/builtin/market-valuation/series.ts +1 -1
  361. package/src/plugins/builtin/market-valuation/settings.ts +1 -1
  362. package/src/plugins/builtin/market-valuation/sources.ts +1 -1
  363. package/src/plugins/builtin/market-valuation/view.ts +1 -1
  364. package/src/plugins/builtin/market-valuation/zone-scale/model.ts +1 -1
  365. package/src/plugins/builtin/mna/client.ts +3 -3
  366. package/src/plugins/builtin/mna/detail.tsx +1 -1
  367. package/src/plugins/builtin/mna/model.ts +2 -7
  368. package/src/plugins/builtin/mna/pane.tsx +2 -2
  369. package/src/plugins/builtin/news/headless.ts +1 -1
  370. package/src/plugins/builtin/news/index.tsx +1 -0
  371. package/src/plugins/builtin/news/wire/breaking/filters.ts +5 -5
  372. package/src/plugins/builtin/notes/store.ts +1 -1
  373. package/src/plugins/builtin/options/enrichment.ts +1 -1
  374. package/src/plugins/builtin/options/footer.ts +2 -2
  375. package/src/plugins/builtin/options/index.tsx +1 -0
  376. package/src/plugins/builtin/options/live-quotes.ts +4 -4
  377. package/src/plugins/builtin/options/types.ts +1 -1
  378. package/src/plugins/builtin/options-positioning/client.ts +105 -0
  379. package/src/plugins/builtin/options-positioning/headless.ts +113 -0
  380. package/src/plugins/builtin/options-positioning/index.tsx +70 -0
  381. package/src/plugins/builtin/options-positioning/model.ts +158 -0
  382. package/src/plugins/builtin/options-positioning/pane.tsx +597 -0
  383. package/src/plugins/builtin/options-scenario/client.ts +78 -21
  384. package/src/plugins/builtin/options-scenario/headless.ts +14 -2
  385. package/src/plugins/builtin/options-scenario/model.ts +5 -3
  386. package/src/plugins/builtin/options-scenario/pane.tsx +14 -5
  387. package/src/plugins/builtin/plugin-marketplace/model.ts +1 -1
  388. package/src/plugins/builtin/plugin-marketplace/store.ts +1 -1
  389. package/src/plugins/builtin/portfolio-list/account-metrics.ts +1 -1
  390. package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +7 -1
  391. package/src/plugins/builtin/portfolio-list/cli/render.ts +13 -13
  392. package/src/plugins/builtin/portfolio-list/column-values.ts +1 -0
  393. package/src/plugins/builtin/portfolio-list/metrics.ts +1 -1
  394. package/src/plugins/builtin/portfolio-list/mutations.ts +71 -0
  395. package/src/plugins/builtin/portfolio-list/pane/index.tsx +26 -15
  396. package/src/plugins/builtin/portfolio-list/position-metrics.ts +1 -1
  397. package/src/plugins/builtin/portfolio-list/summary/index.tsx +18 -9
  398. package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +1 -1
  399. package/src/plugins/builtin/portfolio-list/summary/totals.ts +49 -8
  400. package/src/plugins/builtin/rate-path/model.ts +1 -1
  401. package/src/plugins/builtin/realized-vol/chart-model.ts +1 -1
  402. package/src/plugins/builtin/realized-vol/evidence.ts +1 -1
  403. package/src/plugins/builtin/realized-vol/index.tsx +1 -1
  404. package/src/plugins/builtin/realized-vol/model.ts +2 -2
  405. package/src/plugins/builtin/relative-rotation/model.ts +3 -3
  406. package/src/plugins/builtin/research/corporate-actions-pane.tsx +1 -1
  407. package/src/plugins/builtin/research/events-headless.ts +1 -1
  408. package/src/plugins/builtin/research/headless.ts +1 -1
  409. package/src/plugins/builtin/research/index.tsx +4 -0
  410. package/src/plugins/builtin/research-search/model.ts +1 -1
  411. package/src/plugins/builtin/revenue-breakdown/bars.tsx +1 -1
  412. package/src/plugins/builtin/revenue-breakdown/client.ts +1 -1
  413. package/src/plugins/builtin/revenue-breakdown/index.tsx +1 -0
  414. package/src/plugins/builtin/revenue-breakdown/model.ts +1 -1
  415. package/src/plugins/builtin/revenue-breakdown/pane.tsx +1 -1
  416. package/src/plugins/builtin/risk-factors/index.tsx +1 -0
  417. package/src/plugins/builtin/scanner/flow-model.ts +3 -3
  418. package/src/plugins/builtin/scanner/flow-pane.tsx +1 -1
  419. package/src/plugins/builtin/scanner/headless.ts +5 -5
  420. package/src/plugins/builtin/scanner/hilo-model.ts +3 -3
  421. package/src/plugins/builtin/seasonality/client.ts +41 -0
  422. package/src/plugins/builtin/seasonality/headless.ts +38 -0
  423. package/src/plugins/builtin/seasonality/index.tsx +20 -0
  424. package/src/plugins/builtin/seasonality/model.ts +124 -0
  425. package/src/plugins/builtin/seasonality/pane.tsx +156 -0
  426. package/src/plugins/builtin/sec/index.tsx +1 -0
  427. package/src/plugins/builtin/sec/model.ts +1 -1
  428. package/src/plugins/builtin/shared/cloud-upgrade.ts +2 -2
  429. package/src/plugins/builtin/shared/mine-tickers.ts +1 -1
  430. package/src/plugins/builtin/shared/series-cache.ts +2 -2
  431. package/src/plugins/builtin/shared/use-quote-board.ts +1 -1
  432. package/src/plugins/builtin/shared/volatility/options.ts +1 -1
  433. package/src/plugins/builtin/short-interest/index.tsx +2 -1
  434. package/src/plugins/builtin/short-interest/model.ts +1 -1
  435. package/src/plugins/builtin/short-volume/index.tsx +6 -1
  436. package/src/plugins/builtin/short-volume/model.ts +1 -1
  437. package/src/plugins/builtin/social-mentions/index.tsx +1 -1
  438. package/src/plugins/builtin/social-mentions/model.ts +1 -1
  439. package/src/plugins/builtin/thirteenf/model.ts +1 -1
  440. package/src/plugins/builtin/thirteenf/signals.ts +1 -1
  441. package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +1 -1
  442. package/src/plugins/builtin/ticker-detail/financials/ratios.ts +1 -1
  443. package/src/plugins/builtin/ticker-detail/financials/schema.ts +0 -1
  444. package/src/plugins/builtin/ticker-detail/index.tsx +3 -0
  445. package/src/plugins/builtin/ticker-detail/overview/components.tsx +1 -1
  446. package/src/plugins/builtin/time-sales/index.tsx +1 -1
  447. package/src/plugins/builtin/time-sales/model.ts +1 -1
  448. package/src/plugins/builtin/treasury-auctions/headless.ts +2 -2
  449. package/src/plugins/builtin/treasury-auctions/model.ts +1 -1
  450. package/src/plugins/builtin/vol-surface/client.ts +4 -4
  451. package/src/plugins/builtin/vol-surface/live.ts +1 -1
  452. package/src/plugins/builtin/vol-surface/model.ts +7 -7
  453. package/src/plugins/builtin/vol-surface/pane.tsx +1 -1
  454. package/src/plugins/builtin/vol-surface/stored.ts +1 -1
  455. package/src/plugins/builtin/volatility/client.ts +4 -4
  456. package/src/plugins/builtin/volatility/headless.ts +1 -1
  457. package/src/plugins/builtin/volatility/model.ts +5 -5
  458. package/src/plugins/builtin/world-indices/headless.ts +3 -3
  459. package/src/plugins/builtin/yield-curve/chart.ts +61 -16
  460. package/src/plugins/builtin/yield-curve/curves.ts +171 -0
  461. package/src/plugins/builtin/yield-curve/forward.ts +102 -0
  462. package/src/plugins/builtin/yield-curve/headless.ts +96 -41
  463. package/src/plugins/builtin/yield-curve/index.tsx +331 -120
  464. package/src/plugins/builtin/yield-curve/world.ts +53 -0
  465. package/src/plugins/bundle.ts +1 -1
  466. package/src/plugins/catalog-browser.ts +4 -0
  467. package/src/plugins/catalog-manifest.ts +1 -1
  468. package/src/plugins/compat.ts +7 -3
  469. package/src/plugins/dependencies.ts +26 -6
  470. package/src/plugins/external-runtime.ts +1 -1
  471. package/src/plugins/host-link.ts +20 -1
  472. package/src/plugins/host-modules.ts +4 -1
  473. package/src/plugins/host-resolver.ts +4 -1
  474. package/src/plugins/installer.ts +11 -2
  475. package/src/plugins/loader.ts +1 -1
  476. package/src/plugins/ownership.ts +1 -1
  477. package/src/plugins/plugin-names.ts +1 -1
  478. package/src/plugins/registry/host-actions.ts +237 -0
  479. package/src/plugins/registry/index.ts +79 -146
  480. package/src/plugins/registry/plugin-state.ts +1 -1
  481. package/src/plugins/runtime/context.tsx +2 -25
  482. package/src/plugins/runtime/state.ts +2 -2
  483. package/src/public/__snapshots__/public-api.test.ts.snap +1 -0
  484. package/src/public/layout.ts +2 -2
  485. package/src/public/test-support.ts +9 -1
  486. package/src/react/ticker-source.ts +1 -1
  487. package/src/remote/controller-utils.ts +2 -3
  488. package/src/remote/controller.ts +14 -14
  489. package/src/remote/resources.ts +10 -4
  490. package/src/remote/schema.ts +2 -2
  491. package/src/remote/semantic-helpers.ts +1 -1
  492. package/src/remote/types.ts +3 -3
  493. package/src/renderers/browser/bundled-plugins.ts +31 -1
  494. package/src/renderers/browser/main.tsx +4 -4
  495. package/src/renderers/browser/ui-host.tsx +1 -1
  496. package/src/renderers/{electrobun/view → dom}/build-assets.ts +3 -2
  497. package/src/renderers/{electrobun/view → dom}/data-frames.ts +2 -2
  498. package/src/renderers/{electrobun/view → dom}/data-table/dom.ts +3 -3
  499. package/src/renderers/{electrobun/view → dom}/data-table/index.tsx +9 -9
  500. package/src/renderers/{electrobun/view → dom}/data-table/row.tsx +5 -5
  501. package/src/renderers/{electrobun/view → dom}/desktop/control-styles.ts +2 -2
  502. package/src/renderers/{electrobun/view → dom}/desktop/controls.tsx +16 -16
  503. package/src/renderers/{electrobun/view → dom}/desktop/icons.tsx +1 -1
  504. package/src/renderers/{electrobun/view → dom}/desktop/list-view.tsx +5 -5
  505. package/src/renderers/{electrobun/view → dom}/desktop/menu.tsx +1 -1
  506. package/src/renderers/{electrobun/view → dom}/desktop/popover.tsx +3 -3
  507. package/src/renderers/{electrobun/view → dom}/desktop/query-bar.tsx +1 -1
  508. package/src/renderers/{electrobun/view → dom}/desktop/select-field.tsx +6 -6
  509. package/src/renderers/{electrobun/view → dom}/dialog-host.tsx +4 -4
  510. package/src/renderers/{electrobun/view → dom}/dom-host-providers.tsx +2 -2
  511. package/src/renderers/{electrobun/view → dom}/dom-ui-host.tsx +3 -3
  512. package/src/renderers/{electrobun/view → dom}/host/ascii-text.ts +2 -2
  513. package/src/renderers/{electrobun/view → dom}/host/chart-surface.tsx +1 -1
  514. package/src/renderers/{electrobun/view → dom}/host/input.tsx +3 -3
  515. package/src/renderers/{electrobun/view → dom}/host/media-surface.tsx +1 -1
  516. package/src/renderers/{electrobun/view → dom}/host/mouse.ts +2 -2
  517. package/src/renderers/{electrobun/view → dom}/host/scroll-box.tsx +2 -2
  518. package/src/renderers/{electrobun/view → dom}/host/style.ts +2 -2
  519. package/src/renderers/{electrobun/view → dom}/host/surface-3d.tsx +4 -4
  520. package/src/renderers/{electrobun/view → dom}/host/tabs.tsx +2 -2
  521. package/src/renderers/{electrobun/view → dom}/host/text.tsx +3 -3
  522. package/src/renderers/{electrobun/view → dom}/input-host.tsx +3 -3
  523. package/src/renderers/{electrobun/view → dom}/native-renderer.ts +2 -2
  524. package/src/renderers/{electrobun/view → dom}/test-utils.tsx +3 -3
  525. package/src/renderers/{electrobun/view → dom}/toast-host.tsx +2 -2
  526. package/src/renderers/electrobun/bun/application-menu/index.ts +1 -0
  527. package/src/{theme → renderers/electrobun/bun/desktop}/app-icon.ts +5 -5
  528. package/src/renderers/electrobun/bun/desktop/backend-requests.ts +45 -93
  529. package/src/renderers/electrobun/bun/desktop/backend.ts +514 -0
  530. package/src/renderers/electrobun/bun/desktop/capability-bridge.ts +1 -1
  531. package/src/renderers/electrobun/bun/desktop/detached-windows.ts +36 -54
  532. package/src/renderers/electrobun/bun/desktop/host-requests.ts +62 -53
  533. package/src/renderers/electrobun/bun/desktop/initialization.ts +25 -78
  534. package/src/renderers/electrobun/bun/desktop/macos-dock-icon.ts +1 -1
  535. package/src/renderers/electrobun/bun/desktop/state-broadcaster.ts +1 -1
  536. package/src/renderers/electrobun/bun/desktop/workspace/index.ts +2 -10
  537. package/src/renderers/electrobun/bun/desktop/workspace/requests.ts +20 -47
  538. package/src/renderers/electrobun/bun/index.ts +14 -648
  539. package/src/renderers/electrobun/bun/window/frame.ts +1 -1
  540. package/src/renderers/electrobun/shared/protocol.ts +11 -11
  541. package/src/renderers/electrobun/view/backend-rpc.ts +1 -1
  542. package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +3 -4
  543. package/src/renderers/electrobun/view/main.tsx +3 -3
  544. package/src/renderers/electrobun/view/ui-host.tsx +1 -1
  545. package/src/renderers/opentui/host.tsx +12 -6
  546. package/src/renderers/opentui/test-utils.tsx +104 -3
  547. package/src/renderers/share/layout-view.tsx +1 -1
  548. package/src/renderers/share/main.tsx +1 -1
  549. package/src/shares/pane.ts +3 -3
  550. package/src/shares/payload.ts +7 -7
  551. package/src/{layout-marketplace/payload.ts → shares/portable-layout.ts} +7 -9
  552. package/src/{data → sources/gloomberb-cloud}/fred-series.ts +4 -4
  553. package/src/sources/gloomberb-cloud/normalizers.ts +1 -1
  554. package/src/sources/history-retention.ts +2 -2
  555. package/src/sources/provider-router/financial-routes.ts +0 -1
  556. package/src/sources/yahoo-finance/mappers.ts +1 -1
  557. package/src/state/app/bootstrap.ts +1 -1
  558. package/src/state/app/context/index.tsx +1 -5
  559. package/src/state/hooks/inline-tickers.ts +1 -1
  560. package/src/state/hooks/live-ticker-financials.ts +2 -2
  561. package/src/state/hooks/quote-streaming.ts +1 -1
  562. package/src/state/hooks/session-snapshot.ts +0 -2
  563. package/src/sync/controller.ts +1 -1
  564. package/src/sync/core-contributors.ts +40 -2
  565. package/src/sync/types.ts +4 -4
  566. package/src/telemetry/crash-reports-node.ts +5 -5
  567. package/src/test-support/broker.ts +4 -3
  568. package/src/test-support/plugin-runtime.ts +2 -18
  569. package/src/theme/font-scale.ts +2 -2
  570. package/src/{plugins/builtin/correlation/colors.ts → theme/heat-colors.ts} +19 -16
  571. package/src/time-series/alignment.ts +1 -1
  572. package/src/time-series/fundamentals.ts +2 -2
  573. package/src/time-series/hooks.ts +2 -2
  574. package/src/time-series/live-bars.ts +1 -1
  575. package/src/time-series/price-comparison.ts +1 -1
  576. package/src/time-series/resolve.ts +12 -4
  577. package/src/time-series/spec.ts +5 -1
  578. package/src/time-series/studies.ts +330 -2
  579. package/src/time-series/trader-studies.ts +188 -0
  580. package/src/time-series/types.ts +18 -0
  581. package/src/types/config.ts +23 -12
  582. package/src/types/desktop-deeplink.ts +1 -0
  583. package/src/types/desktop-window.ts +2 -1
  584. package/src/types/plugin.ts +8 -0
  585. package/src/ui/context-menu.tsx +1 -1
  586. package/src/ui/host.tsx +5 -1
  587. package/src/ui/toast.tsx +2 -0
  588. package/src/utils/back-navigation.ts +1 -1
  589. package/src/utils/futures-generic.ts +23 -2
  590. package/src/utils/http-proxy-response.ts +1 -1
  591. package/src/utils/sec-eps-basis.ts +1 -1
  592. /package/src/{plugins → layout}/pane-manager/dock-tree.ts +0 -0
  593. /package/src/{plugins → layout}/pane-manager/docking.ts +0 -0
  594. /package/src/{plugins → layout}/pane-manager/floating-actions.ts +0 -0
  595. /package/src/{plugins → layout}/pane-manager/floating.ts +0 -0
  596. /package/src/{plugins → layout}/pane-manager/gridlock-inference.ts +0 -0
  597. /package/src/{plugins → layout}/pane-manager/gridlock.ts +0 -0
  598. /package/src/{plugins → layout}/pane-manager/layout-state.ts +0 -0
  599. /package/src/{plugins → layout}/pane-manager/queries.ts +0 -0
  600. /package/src/{plugins → layout}/pane-manager/types.ts +0 -0
  601. /package/src/{plugins → layout}/pane-state.ts +0 -0
  602. /package/src/plugins/{seed.ts → extracted-plugins.ts} +0 -0
  603. /package/src/renderers/{electrobun/view → dom}/data-table/frozen-column.ts +0 -0
  604. /package/src/renderers/{electrobun/view → dom}/desktop/stack-header.ts +0 -0
  605. /package/src/renderers/{electrobun/view → dom}/host/block-glyph-canvas.tsx +0 -0
  606. /package/src/renderers/{electrobun/view → dom}/host/box.tsx +0 -0
  607. /package/src/renderers/{electrobun/view → dom}/host/focus-scope.ts +0 -0
  608. /package/src/renderers/{electrobun/view → dom}/host/overflow-fade.ts +0 -0
  609. /package/src/renderers/{electrobun/view → dom}/host/top-surface.ts +0 -0
  610. /package/src/renderers/{electrobun/view → dom}/key-event.ts +0 -0
  611. /package/src/renderers/{electrobun/view → dom}/scrollbar-activity.ts +0 -0
  612. /package/src/renderers/{electrobun/view → dom}/styles.css +0 -0
  613. /package/src/renderers/electrobun/{view → shared}/rpc-codec.ts +0 -0
  614. /package/src/{utils → renderers/opentui}/terminal-input-reset.ts +0 -0
package/README.md CHANGED
@@ -72,7 +72,9 @@ Press `Ctrl+P` to open the command bar, or press `` ` `` to search for a ticker.
72
72
  | `DES AAPL` | Company details |
73
73
  | `GP NVDA` | Price chart |
74
74
  | `OVDV AAPL` | Implied-volatility surface and options term structure |
75
+ | `OPX SPY` / `GEX SPY` | Open interest by strike and expiry, max pain and dealer gamma ([method](docs/options-positioning.md)) |
75
76
  | `HVG AAPL` / `HVT AAPL` | Realized volatility and volatility cones |
77
+ | `SEAS AAPL` | Seasonality: monthly returns by year and year overlays |
76
78
  | `COT [code or root]` | CFTC positioning and cross-market extremes |
77
79
  | `TOP` | Market stories |
78
80
  | `WIRP` / `FFIP` | US rate path and conditional FOMC probabilities |
@@ -117,7 +119,7 @@ The app also counts how often you open each function, from the command bar, a me
117
119
 
118
120
  Neither contains anything from your workspace: no tickers, arguments, portfolios, watchlists, layouts, settings or queries. Both carry a random install id stored in `~/.gloomberb/install-id` (in the browser, in local storage).
119
121
 
120
- The usage setting also covers command bar searches. When you are signed in, a search you finish in the command bar (you pause typing or run something, never each keystroke) is stored with your account to improve search: its text, the AI suggestions it got and the result you picked. Searches are kept for 12 months and deleted with your account.
122
+ The usage setting also covers command bar searches. When you are signed in, a search you finish in the command bar (you pause typing or run something, never each keystroke) is stored with your account to improve search: its text, the AI suggestions it got and the result you picked. Searches are deleted with your account.
121
123
 
122
124
  To turn either off, run `Crash Reports` or `Usage Counts` from the command bar, or:
123
125
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gloomberb",
3
- "version": "0.15.4",
3
+ "version": "0.15.6",
4
4
  "packageManager": "bun@1.3.11",
5
5
  "description": "Market research and portfolio tracker for the terminal",
6
6
  "module": "src/public/index.ts",
@@ -67,11 +67,13 @@
67
67
  "plugins:registry:check": "bun run scripts/check-registry-plugins.ts",
68
68
  "web:proxy-hosts": "bun run scripts/generate-web-proxy-hosts.ts",
69
69
  "web:proxy-hosts:check": "bun run scripts/generate-web-proxy-hosts.ts --check",
70
- "typecheck": "bun run typecheck:opentui && bun run typecheck:dom && bun run typecheck:cloudflare && bun run typecheck:scripts",
70
+ "typecheck": "bun run typecheck:opentui && bun run typecheck:dom && bun run typecheck:cloudflare && bun run typecheck:scripts && bun run typecheck:plugin-tests",
71
71
  "typecheck:opentui": "tsc --project tsconfig.opentui.json",
72
72
  "typecheck:dom": "tsc --project tsconfig.dom.json",
73
73
  "typecheck:cloudflare": "tsc --project tsconfig.cloudflare.json",
74
74
  "typecheck:scripts": "tsc --project tsconfig.scripts.json",
75
+ "typecheck:plugin-tests": "tsc --project tsconfig.plugin-tests.json",
76
+ "knip": "bunx knip@6.39.0",
75
77
  "test": "bun test",
76
78
  "benchmark:tui:navigation": "bun run scripts/benchmark-tui-navigation.ts",
77
79
  "benchmark:tui:compare": "bun run scripts/benchmark-tui-compare.ts",
@@ -108,7 +110,6 @@
108
110
  "@opentui/core": "^0.3.2",
109
111
  "@opentui/react": "^0.3.2",
110
112
  "@tanstack/react-virtual": "^3.14.2",
111
- "fast-xml-parser": "5.7.3",
112
113
  "hls.js": "1.6.13",
113
114
  "jimp": "1.6.1",
114
115
  "qrcode-generator": "^2.0.4",
@@ -83,7 +83,7 @@ export interface ASKGConversationTool {
83
83
  note?: string;
84
84
  }
85
85
 
86
- export interface ASKGConversationMessage {
86
+ interface ASKGConversationMessage {
87
87
  seq: number;
88
88
  role: "user" | "assistant";
89
89
  text: string;
@@ -224,7 +224,7 @@ function isAskgEvent(value: unknown): value is ASKGSseEvent {
224
224
  }
225
225
 
226
226
  /** Parses one frame payload, ignoring keep-alives and unknown shapes. */
227
- export function parseASKGFrame(frame: SseFrame): ASKGSseEvent | null {
227
+ function parseASKGFrame(frame: SseFrame): ASKGSseEvent | null {
228
228
  const data = frame.data.trim();
229
229
  if (!data || data === "[DONE]") return null;
230
230
  try {
@@ -6,6 +6,7 @@ import type {
6
6
  AuthUser,
7
7
  BuildoutAccountResponse,
8
8
  BuildoutTokenResponse,
9
+ CalendarFeed,
9
10
  CloudAccountPlan,
10
11
  CloudBrowserHandoffResponse,
11
12
  CloudPricing,
@@ -250,6 +251,33 @@ export class CloudAuthApi {
250
251
  );
251
252
  }
252
253
 
254
+ /** The private calendar feed link, or null until it is first created. */
255
+ async getCalendarFeed(): Promise<CalendarFeed | null> {
256
+ const result = await this.options.request<{ feed: CalendarFeed | null }>(
257
+ "/account/calendar-feed",
258
+ { method: "GET" },
259
+ );
260
+ return result.feed;
261
+ }
262
+
263
+ /** The calendar feed link, created on first use. */
264
+ async ensureCalendarFeed(): Promise<CalendarFeed> {
265
+ const result = await this.options.request<{ feed: CalendarFeed }>(
266
+ "/account/calendar-feed",
267
+ { method: "POST", body: JSON.stringify({}) },
268
+ );
269
+ return result.feed;
270
+ }
271
+
272
+ /** A new calendar feed link; the old one stops working. */
273
+ async rotateCalendarFeed(): Promise<CalendarFeed> {
274
+ const result = await this.options.request<{ feed: CalendarFeed }>(
275
+ "/account/calendar-feed/rotate",
276
+ { method: "POST", body: JSON.stringify({}) },
277
+ );
278
+ return result.feed;
279
+ }
280
+
253
281
  async updateAccountProfile(
254
282
  update: AccountProfileUpdate,
255
283
  ): Promise<AccountProfile> {
@@ -1,7 +1,7 @@
1
1
  export type CotFamily = "legacy" | "disaggregated"
2
2
  export type CotClass = "noncommercial" | "commercial" | "producer" | "swap" | "managed-money" | "other-reportable" | "nonreportable"
3
- export interface CotPosition { long: number | null; short: number | null; spreading: number | null }
4
- export interface CotPercentile {
3
+ interface CotPosition { long: number | null; short: number | null; spreading: number | null }
4
+ interface CotPercentile {
5
5
  value: number | null
6
6
  rank: number | null
7
7
  sampleCount: number
@@ -24,7 +24,7 @@ export interface CotClassSummary extends CotPosition {
24
24
  percentile1Y: CotPercentile
25
25
  percentile3Y: CotPercentile
26
26
  }
27
- export interface CotMarket {
27
+ interface CotMarket {
28
28
  contractCode: string
29
29
  marketName: string
30
30
  exchangeCode: string
@@ -1,5 +1,5 @@
1
1
  /** Completed UTC daily closes, oldest first, one slot per calendar day. */
2
- export interface CryptoDailyCloses {
2
+ interface CryptoDailyCloses {
3
3
  start: string;
4
4
  closes: Array<number | null>;
5
5
  }
@@ -6,6 +6,7 @@ import type { CryptoMarketsPayload } from "./crypto-markets";
6
6
  import type { CentralBankRatesPayload } from "./central-bank-rates";
7
7
  import type { EstimateRevisionsPayload } from "./estimate-revisions";
8
8
  import type { MoneyMarketsPayload } from "./money-markets";
9
+ import type { CloudCurveId, CloudCurveView, CloudWorldCurves } from "./yield-curves";
9
10
  import type { CdxBoardPayload, CloudCreditBoardParams, SovrBoardPayload } from "./credit-boards";
10
11
  import type { ShortVolumePayload, ShortVolumeScope } from "./short-volume";
11
12
  import type { SocialMentionDayPosts, SocialMentionsPayload, SocialMentionsRange } from "./social-mentions";
@@ -159,6 +160,11 @@ export class CloudDataApi {
159
160
  return this.request<T>(`/cloud/iv/${path}`, init);
160
161
  }
161
162
 
163
+ /** Options positioning (OPX): open interest by strike and expiry, max pain, dealer gamma. */
164
+ optionsPositioning<T>(path: string, init?: RequestInit) {
165
+ return this.request<T>(`/cloud/options/${path}`, init);
166
+ }
167
+
162
168
  async searchInstruments(
163
169
  query: string,
164
170
  limit = 10,
@@ -360,6 +366,17 @@ export class CloudDataApi {
360
366
  return this.request<CloudYieldPointPayload[]>("/cloud/econ/yield-curve");
361
367
  }
362
368
 
369
+ /** A curve's session on or before `date` (latest without one), with look-backs and spreads. */
370
+ async getCloudCurve(curve: CloudCurveId, date?: string | null): Promise<CloudCurveView> {
371
+ const query = date ? `?${new URLSearchParams({ date })}` : "";
372
+ return this.request<CloudCurveView>(`/cloud/econ/curves/${encodeURIComponent(curve)}${query}`, { signal: AbortSignal.timeout(30_000) });
373
+ }
374
+
375
+ /** Each market's latest curve and the session before, each on its own date. */
376
+ async getCloudWorldCurves(): Promise<CloudWorldCurves> {
377
+ return this.request<CloudWorldCurves>("/cloud/econ/curves", { signal: AbortSignal.timeout(30_000) });
378
+ }
379
+
363
380
  async getCloudCryptoMarkets(): Promise<CryptoMarketsPayload> {
364
381
  return this.request<CryptoMarketsPayload>("/cloud/crypto/markets", { signal: AbortSignal.timeout(45_000) });
365
382
  }
@@ -8,7 +8,7 @@ export interface DebtFact {
8
8
  filed: string;
9
9
  form: string;
10
10
  }
11
- export interface DebtBorrowingCost {
11
+ interface DebtBorrowingCost {
12
12
  value: number;
13
13
  interest: DebtFact;
14
14
  opening: DebtFact[];
@@ -16,7 +16,7 @@ export interface DebtBorrowingCost {
16
16
  periodStart: string;
17
17
  periodEnd: string;
18
18
  }
19
- export interface DebtPercentile {
19
+ interface DebtPercentile {
20
20
  value: number | null;
21
21
  rank: number | null;
22
22
  sampleCount: number;
@@ -1,7 +1,7 @@
1
1
  /** Before the open, during the session, after the close. */
2
2
  export type EarningsTiming = "bmo" | "dmh" | "amc";
3
3
 
4
- export interface EarningsImpliedMove {
4
+ interface EarningsImpliedMove {
5
5
  /** Straddle over spot, the move priced in either direction. */
6
6
  move: number;
7
7
  straddle: number;
@@ -16,7 +16,7 @@ export interface EarningsImpliedMove {
16
16
  at: string;
17
17
  }
18
18
 
19
- export interface EarningsRealizedMove {
19
+ interface EarningsRealizedMove {
20
20
  /** Signed: the close after the report over the close before it, minus one. */
21
21
  move: number;
22
22
  baseSession: string;
@@ -59,7 +59,7 @@ export interface EarningsCalendarPayload {
59
59
  reports: EarningsCalendarReport[];
60
60
  }
61
61
 
62
- export interface EarningsHistoryReport extends EarningsReport {
62
+ interface EarningsHistoryReport extends EarningsReport {
63
63
  revenueActual: number | null;
64
64
  }
65
65
 
@@ -56,7 +56,7 @@ export const CATEGORY_FIELDS = [
56
56
  "industry",
57
57
  ] as const;
58
58
  export type NumericField = (typeof NUMERIC_FIELDS)[number];
59
- export type CategoryField = (typeof CATEGORY_FIELDS)[number];
59
+ type CategoryField = (typeof CATEGORY_FIELDS)[number];
60
60
  export type ScreenField = NumericField | CategoryField;
61
61
  export type ScreenOperator =
62
62
  "gte" | "lte" | "gt" | "lt" | "eq" | "between" | "in" | "present" | "missing";
@@ -110,7 +110,7 @@ export interface ScreenRow {
110
110
  metrics: Record<NumericField, ScreenMetric>;
111
111
  warnings: string[];
112
112
  }
113
- export interface ScreenCoverage {
113
+ interface ScreenCoverage {
114
114
  covered: number;
115
115
  skipped: number;
116
116
  knownByField: Record<NumericField, number>;
@@ -1,4 +1,4 @@
1
- export interface PercentileStatistics {
1
+ interface PercentileStatistics {
2
2
  percentile: number | null;
3
3
  rank: number | null;
4
4
  samples: number;
@@ -6,8 +6,8 @@ export interface PercentileStatistics {
6
6
  max: number | null;
7
7
  mean: number | null;
8
8
  }
9
- export type EstimateStatus = "available" | "partial" | "unavailable";
10
- export interface EstimateSourceState {
9
+ type EstimateStatus = "available" | "partial" | "unavailable";
10
+ interface EstimateSourceState {
11
11
  status: EstimateStatus;
12
12
  fetchedAt: string | null;
13
13
  stale: boolean;
@@ -24,7 +24,7 @@ export interface EstimateObservation {
24
24
  relativeRange: number | null;
25
25
  source: "yahoo" | "yahoo-eps-trend";
26
26
  }
27
- export interface RevisionBreadth {
27
+ interface RevisionBreadth {
28
28
  days: 7 | 30;
29
29
  up: number | null;
30
30
  down: number | null;
@@ -76,7 +76,7 @@ export interface EstimateSurprise {
76
76
  samples: number;
77
77
  source: string;
78
78
  }
79
- export interface EstimateGuidance {
79
+ interface EstimateGuidance {
80
80
  callDate: string | null;
81
81
  fiscalYear: number;
82
82
  fiscalQuarter: number;
@@ -4,7 +4,7 @@ import {
4
4
  parseMarketplaceLayoutList,
5
5
  type LayoutMarketplaceEntry,
6
6
  type LayoutMarketplacePayload,
7
- } from "../layout-marketplace/payload";
7
+ } from "../shares/portable-layout";
8
8
  import {
9
9
  type CloudLayoutEntry,
10
10
  type LayoutRequirement,
@@ -38,18 +38,14 @@ import type {
38
38
  PersistedAuthUser
39
39
  } from "./types";
40
40
 
41
- export { ASKGTransportError } from "./askg";
42
- export type { ASKGToolResultOutcome, ASKGTransport } from "./askg";
43
41
  export { setCloudApiFetchTransport } from "./request";
44
42
  export { NoteConflictError } from "./notes";
45
43
  export { ThesisConflictError, ThesisGoalpostError } from "./theses";
46
44
  export { TeamRevisionConflictError } from "./views";
47
- export { TEAM_ACCENT_COLORS } from "./types";
48
45
  export type * from "./types";
49
46
  export type {
50
47
  CommandSearchChoice,
51
48
  CommandSearchOutcome,
52
- CommandSearchReport,
53
49
  CrashReportError,
54
50
  CrashReportKind,
55
51
  CrashReportSurface,
@@ -364,7 +360,7 @@ class GloomApiClient {
364
360
  event: import("./research-activity").ResearchActivity; eventId: string;
365
361
  surface: "web" | "desktop" | "tui" | "cli"; anonymousId?: string;
366
362
  attribution?: Record<string, string>; feature?: import("./research-activity").ResearchFeature;
367
- tab?: string;
363
+ tab?: string; desks?: readonly string[];
368
364
  }): Promise<void> {
369
365
  await this.request("/activity/research", { method: "POST", body: JSON.stringify(payload) });
370
366
  }
@@ -409,6 +405,9 @@ class GloomApiClient {
409
405
  getBuildoutAccount = this.auth.getBuildoutAccount.bind(this.auth);
410
406
  getBuildoutToken = this.auth.getBuildoutToken.bind(this.auth);
411
407
  updateAccountProfile = this.auth.updateAccountProfile.bind(this.auth);
408
+ getCalendarFeed = this.auth.getCalendarFeed.bind(this.auth);
409
+ ensureCalendarFeed = this.auth.ensureCalendarFeed.bind(this.auth);
410
+ rotateCalendarFeed = this.auth.rotateCalendarFeed.bind(this.auth);
412
411
 
413
412
  async getSyncSnapshot(): Promise<CloudSyncSnapshotResponse> {
414
413
  return this.request<CloudSyncSnapshotResponse>("/sync/snapshot", { method: "GET" });
@@ -542,8 +541,9 @@ class GloomApiClient {
542
541
  * Resolves a natural-language command-bar query into runnable command-bar
543
542
  * inputs. Requires a verified session; free accounts are included. The
544
543
  * request is bounded client-side so a stalled upstream cannot hold the
545
- * command bar in its loading state. The server keeps the query, and
546
- * answers with a `searchId`, only when asked with `log: true`.
544
+ * command bar in its loading state. The server keeps the query and answers
545
+ * with a `searchId` unless told `log: false`, so an opt-out has to be sent
546
+ * explicitly.
547
547
  */
548
548
  async assistCommand(
549
549
  query: string,
@@ -565,7 +565,7 @@ class GloomApiClient {
565
565
  body: JSON.stringify({
566
566
  query: query.trim().slice(0, ASSIST_QUERY_MAX_LENGTH),
567
567
  commands: commands.slice(0, ASSIST_COMMAND_LIMIT).map(capAssistArgOptions),
568
- ...(options?.log === true ? { log: true } : {}),
568
+ ...(options?.log !== undefined ? { log: options.log } : {}),
569
569
  }),
570
570
  signal: controller.signal,
571
571
  });
@@ -700,6 +700,7 @@ class GloomApiClient {
700
700
  getCloudMoneyMarkets = this.data.getCloudMoneyMarkets.bind(this.data);
701
701
  equityScreener = this.data.equityScreener.bind(this.data);
702
702
  impliedVolatility = this.data.impliedVolatility.bind(this.data);
703
+ optionsPositioning = this.data.optionsPositioning.bind(this.data);
703
704
  getCloudDebtMaturities = this.data.getCloudDebtMaturities.bind(this.data);
704
705
  getCloudRevenueBreakdown = this.data.getCloudRevenueBreakdown.bind(this.data);
705
706
  getCloudMnaDeals = this.data.getCloudMnaDeals.bind(this.data);
@@ -716,6 +717,8 @@ class GloomApiClient {
716
717
  getCloudCotContract = this.data.getCloudCotContract.bind(this.data);
717
718
  getCloudTape = this.data.getCloudTape.bind(this.data);
718
719
  getCloudYieldCurve = this.data.getCloudYieldCurve.bind(this.data);
720
+ getCloudCurve = this.data.getCloudCurve.bind(this.data);
721
+ getCloudWorldCurves = this.data.getCloudWorldCurves.bind(this.data);
719
722
  getCloudCds = this.data.getCloudCds.bind(this.data);
720
723
  getCloudCdsHistory = this.data.getCloudCdsHistory.bind(this.data);
721
724
  getCloudCdxBoard = this.data.getCloudCdxBoard.bind(this.data);
@@ -748,5 +751,3 @@ class GloomApiClient {
748
751
  }
749
752
 
750
753
  export const apiClient = new GloomApiClient();
751
-
752
- export type { FuturesCurveAsOfPayload, FuturesCurvePayload, FuturesContract } from "./futures-curve";
@@ -6,10 +6,10 @@
6
6
  /** Where a deal is in its life. A deal moves forward, except to postponed or withdrawn. */
7
7
  export type IpoStatus = "filed" | "upcoming" | "priced" | "listed" | "postponed" | "withdrawn";
8
8
 
9
- export type IpoListingType = "ipo" | "spac" | "direct" | "reit" | "introduction" | "dual" | "other";
9
+ type IpoListingType = "ipo" | "spac" | "direct" | "reit" | "introduction" | "dual" | "other";
10
10
 
11
11
  /** How sure the listing date is: a target, a date the venue has set, or the day it traded. */
12
- export type IpoDateKind = "expected" | "confirmed" | "actual";
12
+ type IpoDateKind = "expected" | "confirmed" | "actual";
13
13
 
14
14
  export type IpoRegion = "us" | "apac" | "europe" | "other";
15
15
 
@@ -17,9 +17,9 @@ export type IpoRegion = "us" | "apac" | "europe" | "other";
17
17
  * ISO 10383 MIC of a listing venue, such as `XNAS`, `XHKG` or `XTKS`. The
18
18
  * server adds venues over time, so any code may arrive.
19
19
  */
20
- export type IpoMic = string;
20
+ type IpoMic = string;
21
21
 
22
- export interface IpoFirstDay {
22
+ interface IpoFirstDay {
23
23
  /** The first session's venue-local date. */
24
24
  session: string;
25
25
  open: number | null;
@@ -13,7 +13,7 @@ export type CloudSessionMoversSide = "up" | "down" | "active";
13
13
  export type CloudSessionPhase = "pre" | "regular" | "post" | "closed";
14
14
 
15
15
  /** A trading halt, an 8-K, or a news story in the list's own window (see docs/quote-board-data.md). */
16
- export type CloudSessionCatalyst = "halt" | "filing" | "news";
16
+ type CloudSessionCatalyst = "halt" | "filing" | "news";
17
17
 
18
18
  export interface CloudSessionMoverItem {
19
19
  rank: number;
@@ -7,7 +7,7 @@
7
7
  /** Reported talks, a signed or launched deal, or its end. */
8
8
  export type MnaStatus = "talks" | "pending" | "completed" | "terminated";
9
9
 
10
- export type MnaConsideration = "cash" | "stock" | "mixed" | "undisclosed";
10
+ type MnaConsideration = "cash" | "stock" | "mixed" | "undisclosed";
11
11
 
12
12
  export interface MnaParty {
13
13
  name: string;
@@ -88,7 +88,7 @@ export interface MnaDealsPayload {
88
88
  asOf: string;
89
89
  }
90
90
 
91
- export type MnaEventKind =
91
+ type MnaEventKind =
92
92
  | "talks"
93
93
  | "announced"
94
94
  | "amended"
@@ -38,7 +38,7 @@ export function normalizeSavedSearchResponse(
38
38
  * join it into search text, and hand it to a badge, and a null reaches each of
39
39
  * those as an empty chip, the literal "null", or a crash.
40
40
  */
41
- export function normalizeSearchHit(hit: CloudSearchHit): CloudSearchHit {
41
+ function normalizeSearchHit(hit: CloudSearchHit): CloudSearchHit {
42
42
  return hit.ticker ? hit : { ...hit, ticker: "" };
43
43
  }
44
44
 
@@ -35,7 +35,7 @@ export type CloudCdsHistoryParams = {
35
35
  days?: number;
36
36
  };
37
37
 
38
- export type CloudCongressChamber = "all" | "house" | "senate";
38
+ type CloudCongressChamber = "all" | "house" | "senate";
39
39
 
40
40
  export type CloudCongressHouseParams = {
41
41
  /** Which feed to read; House when omitted. */
@@ -104,7 +104,7 @@ const CRYPTO_QUOTE = /[-/](USD|USDT|USDC|EUR|GBP|BTC)$/;
104
104
 
105
105
  export type CloudLogoKind = "ticker" | "crypto";
106
106
 
107
- export function normalizeCloudLogoSymbol(
107
+ function normalizeCloudLogoSymbol(
108
108
  kind: CloudLogoKind,
109
109
  symbol: string,
110
110
  ): string | null {
@@ -41,7 +41,7 @@ export function resolveTrialEndsAt(user: PlanAccessUser | null | undefined): Dat
41
41
  return Number.isNaN(endsAt.getTime()) ? null : endsAt;
42
42
  }
43
43
 
44
- export function isTrialActive(user: PlanAccessUser | null | undefined, now = Date.now()): boolean {
44
+ function isTrialActive(user: PlanAccessUser | null | undefined, now = Date.now()): boolean {
45
45
  if (user?.emailVerified !== true) return false;
46
46
  // Card-backed trials run as plan "pro" with a trialing subscription; the server
47
47
  // only sends `trialEndsAt` while the subscription is actually in its trial.
@@ -49,7 +49,7 @@ export function isTrialActive(user: PlanAccessUser | null | undefined, now = Dat
49
49
  return !!endsAt && endsAt.getTime() > now;
50
50
  }
51
51
 
52
- export function trialDaysLeft(user: PlanAccessUser | null | undefined, now = Date.now()): number {
52
+ function trialDaysLeft(user: PlanAccessUser | null | undefined, now = Date.now()): number {
53
53
  const endsAt = resolveTrialEndsAt(user);
54
54
  if (!endsAt) return 0;
55
55
  const remainingMs = endsAt.getTime() - now;
@@ -1,5 +1,5 @@
1
1
  /** Gloom Cloud rate-path contract. Rates are percentage points; probabilities are fractions. */
2
- export interface RateMetric {
2
+ interface RateMetric {
3
3
  value: number | null;
4
4
  asOf: string | null;
5
5
  percentile: number | null;
@@ -66,7 +66,7 @@ export function setCloudApiFetchTransport(
66
66
  * The fetch to use for a response that must be read while it arrives, or null
67
67
  * when the installed transport buffers whole responses.
68
68
  */
69
- export function getCloudApiStreamFetch(): CloudApiStreamFetch | null {
69
+ function getCloudApiStreamFetch(): CloudApiStreamFetch | null {
70
70
  if (cloudApiTransportInstalled) {
71
71
  if (cloudApiStreamFetch) return cloudApiStreamFetch;
72
72
  // A transport that declares streaming returns a real Response.
@@ -318,12 +318,14 @@ function attributionPayload(): Record<string, string> | undefined {
318
318
  /**
319
319
  * Counts milestones once per feature/session/account, never their content.
320
320
  * Native surfaces report anonymously only with an identifier the website
321
- * handed over; they still never mint one of their own.
321
+ * handed over; they still never mint one of their own. `desks` rides on the
322
+ * end of the first-run funnel: the desks picked at "What do you trade?".
322
323
  */
323
324
  export function recordResearchActivity(
324
325
  event: ResearchActivity,
325
326
  feature?: ResearchFeature,
326
327
  tab?: string,
328
+ desks?: readonly string[],
327
329
  ): void {
328
330
  const target = getCurrentPluginTarget();
329
331
  const user = apiClient.getCurrentUser();
@@ -342,6 +344,7 @@ export function recordResearchActivity(
342
344
  attribution: attributionPayload(),
343
345
  feature,
344
346
  tab,
347
+ desks,
345
348
  })
346
349
  .catch(() => {
347
350
  sent.delete(key);
@@ -1,6 +1,6 @@
1
1
  export type SocialMentionsRange = "1y" | "5y" | "max";
2
2
 
3
- export interface SocialMentionDay {
3
+ interface SocialMentionDay {
4
4
  /** UTC day. */
5
5
  day: string;
6
6
  mentions: number;