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
@@ -171,7 +171,7 @@ export interface BuildoutTokenResponse {
171
171
  expiresAt: string;
172
172
  }
173
173
 
174
- export interface CloudPricingTier {
174
+ interface CloudPricingTier {
175
175
  /** Charged amount, in integer cents. */
176
176
  amount: number;
177
177
  }
@@ -193,6 +193,14 @@ export interface CloudPricing {
193
193
  yearly: CloudPricingTier;
194
194
  }
195
195
 
196
+ /** The account's private calendar feed link (`/account/calendar-feed`). */
197
+ export interface CalendarFeed {
198
+ url: string;
199
+ createdAt: string;
200
+ /** The last time a calendar app read it, to the hour. */
201
+ lastFetchedAt: string | null;
202
+ }
203
+
196
204
  /** One command-bar prefix described for `/assist/command`. */
197
205
  export interface AssistCommandDescriptor {
198
206
  prefix: string;
@@ -370,7 +378,7 @@ export interface CloudFredSeriesPayload {
370
378
  * One month of Robert Shiller's dataset. FRED carries no long-run S&P earnings,
371
379
  * so this is what every earnings-based valuation ratio is built from.
372
380
  */
373
- export interface CloudShillerObservationPayload {
381
+ interface CloudShillerObservationPayload {
374
382
  date: string;
375
383
  price: number | null;
376
384
  dividend: number | null;
@@ -444,7 +452,7 @@ export interface CloudCdsHistoryResponse {
444
452
  points: CloudCdsHistoryPointPayload[];
445
453
  }
446
454
 
447
- export interface CloudShortInterestPointPayload {
455
+ interface CloudShortInterestPointPayload {
448
456
  settlementDate: string;
449
457
  sharesShort: number;
450
458
  previousSharesShort: number | null;
@@ -585,7 +593,7 @@ export interface CloudEarningsCallPayload {
585
593
  webcastUrl?: string | null;
586
594
  }
587
595
 
588
- export interface CloudJobsSeriesPoint {
596
+ interface CloudJobsSeriesPoint {
589
597
  day: string;
590
598
  open: number;
591
599
  /** Null on the first observed day, when the whole board is seen for the first time. */
@@ -687,7 +695,7 @@ export interface CloudJobsSummaryPayload {
687
695
  recent: CloudJobsPosting[];
688
696
  }
689
697
 
690
- export interface CloudJobsPendingPayload {
698
+ interface CloudJobsPendingPayload {
691
699
  status: "pending";
692
700
  ticker: string;
693
701
  queued: boolean;
@@ -744,7 +752,7 @@ export interface CloudExecutiveRowPayload {
744
752
  total: number | null;
745
753
  }
746
754
 
747
- export interface CloudProxyStatementSummaryPayload {
755
+ interface CloudProxyStatementSummaryPayload {
748
756
  id: string;
749
757
  ticker: string;
750
758
  company: {
@@ -778,7 +786,7 @@ export interface CloudProxyStatementPayload extends CloudProxyStatementSummaryPa
778
786
  otherYears: CloudProxyStatementSummaryPayload[];
779
787
  }
780
788
 
781
- export interface CloudRiskFactorPayload {
789
+ interface CloudRiskFactorPayload {
782
790
  heading: string;
783
791
  group: string | null;
784
792
  excerpt: string;
@@ -791,7 +799,7 @@ export interface CloudRiskNotePayload {
791
799
  text: string;
792
800
  }
793
801
 
794
- export interface CloudRiskReportSummaryPayload {
802
+ interface CloudRiskReportSummaryPayload {
795
803
  id: string;
796
804
  ticker: string;
797
805
  company: {
@@ -848,7 +856,7 @@ export interface CloudRiskReportListPayload {
848
856
  reports: CloudRiskReportSummaryPayload[];
849
857
  }
850
858
 
851
- export interface CloudFilingPersonPayload {
859
+ interface CloudFilingPersonPayload {
852
860
  name: string;
853
861
  role: string;
854
862
  action: string;
@@ -904,7 +912,7 @@ export interface CloudTranscriptTurnPayload {
904
912
  startSeconds: number | null;
905
913
  }
906
914
 
907
- export interface CloudTranscriptKeyFigurePayload {
915
+ interface CloudTranscriptKeyFigurePayload {
908
916
  /** What the number is, e.g. "Q3 revenue guidance". */
909
917
  label: string;
910
918
  /** As management said it, e.g. "$108B ± 2%". */
@@ -913,7 +921,7 @@ export interface CloudTranscriptKeyFigurePayload {
913
921
  note?: string;
914
922
  }
915
923
 
916
- export interface CloudTranscriptParticipantPayload {
924
+ interface CloudTranscriptParticipantPayload {
917
925
  name: string;
918
926
  role?: string;
919
927
  company?: string;
@@ -1056,7 +1064,7 @@ export interface CloudSavedSearchInput {
1056
1064
  alertChannels?: string[];
1057
1065
  }
1058
1066
 
1059
- export interface CloudSecFilingPayload {
1067
+ interface CloudSecFilingPayload {
1060
1068
  accessionNumber: string;
1061
1069
  form: string;
1062
1070
  filingDate: string;
@@ -1072,7 +1080,7 @@ export interface CloudSecFilingPayload {
1072
1080
  primaryDocumentUrl?: string;
1073
1081
  }
1074
1082
 
1075
- export interface CloudSecDocumentPayload {
1083
+ interface CloudSecDocumentPayload {
1076
1084
  sequence?: string;
1077
1085
  type: string;
1078
1086
  description?: string;
@@ -1092,7 +1100,7 @@ export interface CloudSecDocumentsResponse {
1092
1100
  documents: CloudSecDocumentPayload[];
1093
1101
  }
1094
1102
 
1095
- export interface CloudSecForm4Payload {
1103
+ interface CloudSecForm4Payload {
1096
1104
  filingDate: string;
1097
1105
  reportedName: string;
1098
1106
  title: string;
@@ -1359,7 +1367,7 @@ export type CloudEquityDiagnosticFindingKind =
1359
1367
  "red_flag" | "green_flag" | "anomaly";
1360
1368
 
1361
1369
  /** 3 is the most severe. */
1362
- export type CloudEquityDiagnosticSeverity = 1 | 2 | 3;
1370
+ type CloudEquityDiagnosticSeverity = 1 | 2 | 3;
1363
1371
 
1364
1372
  export interface CloudEquityDiagnosticFinding {
1365
1373
  id: string;
@@ -1393,7 +1401,7 @@ export interface CloudEquityDiagnosticEvidence {
1393
1401
  url?: string;
1394
1402
  }
1395
1403
 
1396
- export interface CloudEquityDiagnosticPending {
1404
+ interface CloudEquityDiagnosticPending {
1397
1405
  status: "generating";
1398
1406
  retryAfterMs: number;
1399
1407
  }
@@ -1459,7 +1467,7 @@ export type ScannerKind = "hilo" | "flow";
1459
1467
 
1460
1468
  export type ScannerStatus = "live" | "starting" | "closed" | "degraded";
1461
1469
 
1462
- export interface ScannerWindowCounts {
1470
+ interface ScannerWindowCounts {
1463
1471
  highs: number;
1464
1472
  lows: number;
1465
1473
  }
@@ -1474,7 +1482,7 @@ export interface ScannerHiloExtreme {
1474
1482
  }
1475
1483
 
1476
1484
  /** Which entitlement tier produced the payload: free accounts get a delayed instance. */
1477
- export interface ScannerAccessInfo {
1485
+ interface ScannerAccessInfo {
1478
1486
  access: "realtime" | "delayed";
1479
1487
  /** 0 on the realtime instance, 15 on the delayed one. */
1480
1488
  delayMinutes: number;
@@ -1559,7 +1567,7 @@ export interface QuoteStreamTarget {
1559
1567
  weight?: number;
1560
1568
  }
1561
1569
 
1562
- export const TEAM_ACCENT_COLORS = [
1570
+ const TEAM_ACCENT_COLORS = [
1563
1571
  "amber",
1564
1572
  "blue",
1565
1573
  "cyan",
@@ -1667,7 +1675,7 @@ interface TeamNotificationTeam {
1667
1675
  shortName: string;
1668
1676
  }
1669
1677
 
1670
- export type TeamNotificationData =
1678
+ type TeamNotificationData =
1671
1679
  | {
1672
1680
  kind: "team-invite";
1673
1681
  team: TeamNotificationTeam;
@@ -1685,7 +1693,7 @@ export type TeamNotificationData =
1685
1693
  author: TeamActor;
1686
1694
  };
1687
1695
 
1688
- export type TeamNotificationType = TeamNotificationData["kind"];
1696
+ type TeamNotificationType = TeamNotificationData["kind"];
1689
1697
 
1690
1698
  export interface TeamNotification {
1691
1699
  id: string;
@@ -1697,10 +1705,10 @@ export interface TeamNotification {
1697
1705
 
1698
1706
  // Cloud notes
1699
1707
 
1700
- export type NoteOwnerKind = "user" | "team";
1708
+ type NoteOwnerKind = "user" | "team";
1701
1709
  export type NoteKind = "ticker" | "quick";
1702
1710
 
1703
- export interface CloudNoteOwner {
1711
+ interface CloudNoteOwner {
1704
1712
  kind: NoteOwnerKind;
1705
1713
  id: string;
1706
1714
  }
@@ -1733,14 +1741,14 @@ export type ThesisStatus = "watching" | "active" | "closed";
1733
1741
  export type ThesisHealth = "unverified" | "intact" | "weakening" | "broken";
1734
1742
  export type ThesisPillarStatus = ThesisHealth;
1735
1743
 
1736
- export interface ThesisInstrument {
1744
+ interface ThesisInstrument {
1737
1745
  symbol: string;
1738
1746
  exchange?: string;
1739
1747
  side: "long" | "short";
1740
1748
  role: "core" | "hedge";
1741
1749
  }
1742
1750
 
1743
- export interface ThesisMetricBound {
1751
+ interface ThesisMetricBound {
1744
1752
  key: string;
1745
1753
  op: ">=" | "<=";
1746
1754
  value: number;
@@ -1783,13 +1791,13 @@ export interface ThesisDocument {
1783
1791
  entry?: { date?: string; price?: number };
1784
1792
  }
1785
1793
 
1786
- export interface ThesisOutcome {
1794
+ interface ThesisOutcome {
1787
1795
  verdict: "right" | "wrong" | "lucky" | "unlucky";
1788
1796
  returnPct?: number;
1789
1797
  lesson?: string;
1790
1798
  }
1791
1799
 
1792
- export interface ThesisEditor {
1800
+ interface ThesisEditor {
1793
1801
  id: string;
1794
1802
  username: string | null;
1795
1803
  displayName: string;
@@ -1817,11 +1825,11 @@ export interface CloudThesis {
1817
1825
  closedAt: string | null;
1818
1826
  }
1819
1827
 
1820
- export type ThesisSignalTargetKind = "pillar" | "kill" | "catalyst" | "thesis";
1821
- export type ThesisSignalVerdict = "supports" | "challenges" | "breaks" | "neutral";
1822
- export type ThesisSignalStatus = "open" | "accepted" | "dismissed" | "snoozed" | "noted";
1828
+ type ThesisSignalTargetKind = "pillar" | "kill" | "catalyst" | "thesis";
1829
+ type ThesisSignalVerdict = "supports" | "challenges" | "breaks" | "neutral";
1830
+ type ThesisSignalStatus = "open" | "accepted" | "dismissed" | "snoozed" | "noted";
1823
1831
 
1824
- export interface ThesisSignalSource {
1832
+ interface ThesisSignalSource {
1825
1833
  kind: "news" | "filing" | "transcript" | "metric" | "review" | "user";
1826
1834
  id?: string;
1827
1835
  title?: string;
@@ -1893,7 +1901,7 @@ export interface TeamCollectionItem {
1893
1901
  updatedAt: string;
1894
1902
  }
1895
1903
 
1896
- export type TeamCollectionChange =
1904
+ type TeamCollectionChange =
1897
1905
  | { change: "created"; collection: TeamCollection }
1898
1906
  | { change: "updated"; collection: TeamCollection }
1899
1907
  | { change: "deleted"; collectionId: string }
@@ -0,0 +1,47 @@
1
+ /** Government bond curves stored from their official publishers, in percent. */
2
+ export type CloudCurveId = "us" | "us-real" | "us-breakeven" | "eu-aaa" | "de" | "gb" | "jp" | "ca";
3
+
4
+ export interface CloudCurvePoint {
5
+ tenor: string;
6
+ years: number;
7
+ yield: number | null;
8
+ }
9
+
10
+ interface CloudCurveHeader {
11
+ id: CloudCurveId;
12
+ label: string;
13
+ country: string;
14
+ /** par: bonds priced at par; zero: spot rates; benchmark: named benchmark bonds; spread: nominal minus real. */
15
+ basis: "par" | "zero" | "benchmark" | "spread";
16
+ couponsPerYear: number;
17
+ }
18
+
19
+ export interface CloudCurveView {
20
+ curve: CloudCurveHeader;
21
+ requestedDate: string | null;
22
+ /** The session the publisher dates the curve. */
23
+ asOf: string;
24
+ points: CloudCurvePoint[];
25
+ lookbacks: Array<{ id: "1D" | "1W" | "1M"; requestedDate: string; asOf: string | null; points: CloudCurvePoint[] | null }>;
26
+ spreads: Array<{
27
+ id: string;
28
+ short: string;
29
+ long: string;
30
+ /** Long minus short, percentage points. */
31
+ value: number | null;
32
+ change1d: number | null;
33
+ percentile1y: number | null;
34
+ observations1y: number;
35
+ }>;
36
+ checkedAt: string | null;
37
+ }
38
+
39
+ export interface CloudWorldCurves {
40
+ curves: Array<{
41
+ curve: CloudCurveHeader;
42
+ asOf: string;
43
+ points: CloudCurvePoint[];
44
+ previous: { asOf: string; points: CloudCurvePoint[] } | null;
45
+ checkedAt: string | null;
46
+ }>;
47
+ }
@@ -73,7 +73,6 @@ function createDetachedSessionSnapshotFallback(): AppSessionSnapshot {
73
73
  return {
74
74
  paneState: {},
75
75
  focusedPaneId: null,
76
- activePanel: "left",
77
76
  statusBarVisible: true,
78
77
  openPaneIds: [],
79
78
  hydrationTargets: [],
@@ -97,7 +96,6 @@ function resolveDetachedAppSessionSnapshot(
97
96
  ...baseSessionSnapshot,
98
97
  paneState: desktopSnapshot.paneState,
99
98
  focusedPaneId: desktopSnapshot.focusedPaneId,
100
- activePanel: desktopSnapshot.activePanel,
101
99
  statusBarVisible: desktopSnapshot.statusBarVisible,
102
100
  }
103
101
  : null;
@@ -6,9 +6,13 @@ import { useToastHost } from "../ui/toast";
6
6
  import type { PluginRegistry } from "../plugins/registry";
7
7
  import type { AppAction, AppState } from "../state/app/context";
8
8
  import type { TickerRecord } from "../types/ticker";
9
+ import { findPaneInstance } from "../types/config";
9
10
  import type { ReleaseInfo } from "../updater";
10
11
  import { canSelfUpdate } from "../updater";
11
12
  import { getVisiblePaneCycleOrder } from "../components/layout/pane/cycle-order";
13
+ import { requestFunctionHelp, useFunctionHelpHost } from "../plugins/builtin/help/function-card";
14
+ import { buildRegistryHelpIndex, helpFunctionForPane } from "../plugins/builtin/help/function-index";
15
+ import { recordFunctionOpen } from "../telemetry/usage-counts";
12
16
  import { isMoveDownShortcut, isMoveUpShortcut } from "../components/command-bar/keyboard-handlers";
13
17
  import {
14
18
  copyActiveSelection,
@@ -106,6 +110,11 @@ export function useAppGlobalShortcuts({
106
110
  const uiKind = useUiHost().kind;
107
111
  const toastHost = useToastHost();
108
112
  useKeybindingIssueNotice(keybindings, pluginRegistry, state.initialized);
113
+ useFunctionHelpHost({
114
+ closeCommandBar: () => {
115
+ if (state.commandBarOpen) dispatch({ type: "SET_COMMAND_BAR", open: false });
116
+ },
117
+ });
109
118
 
110
119
  useShortcut((event) => {
111
120
  if (isCopyShortcut(event) && copyActiveSelection(nativeRenderer)) {
@@ -207,6 +216,18 @@ export function useAppGlobalShortcuts({
207
216
  return;
208
217
  }
209
218
 
219
+ // A function key is never text, so the card opens from a focused field too.
220
+ if (action === "function-help") {
221
+ event.preventDefault();
222
+ event.stopPropagation();
223
+ recordFunctionOpen({ shortcut: "HELP", externalPluginId: null });
224
+ const instance = state.focusedPaneId ? findPaneInstance(state.config.layout, state.focusedPaneId) : undefined;
225
+ const fn = instance ? helpFunctionForPane(buildRegistryHelpIndex(pluginRegistry), pluginRegistry, instance) : null;
226
+ if (fn && requestFunctionHelp({ kind: "function", fn })) return;
227
+ if (!isDetachedWindow) pluginRegistry.showPane("help");
228
+ return;
229
+ }
230
+
210
231
  if (state.inputCaptured) return;
211
232
 
212
233
  if (!isDetachedWindow && action === "help") {
@@ -7,6 +7,7 @@ export type CoreKeybindingActionId =
7
7
  | "command-bar"
8
8
  | "ticker-search"
9
9
  | "help"
10
+ | "function-help"
10
11
  | "switch-layout"
11
12
  | "focus-next-pane"
12
13
  | "focus-prev-pane"
@@ -31,7 +32,7 @@ export type CoreKeybindingActionId =
31
32
  | "window-move-mode"
32
33
  | "window-resize-mode";
33
34
 
34
- export type KeybindingActionCategory = "Global Keys" | "Pane Management";
35
+ type KeybindingActionCategory = "Global Keys" | "Pane Management";
35
36
 
36
37
  export interface KeybindingActionDef {
37
38
  id: CoreKeybindingActionId;
@@ -88,6 +89,13 @@ export const KEYBINDING_ACTIONS: readonly KeybindingActionDef[] = [
88
89
  description: "Open help.",
89
90
  defaults: ["?"],
90
91
  },
92
+ {
93
+ id: "function-help",
94
+ category: "Global Keys",
95
+ description: "Open the focused pane's help card: what it shows, its keys and how fresh its data is.",
96
+ // F1 is help on every platform and nothing in the app used it.
97
+ defaults: ["F1"],
98
+ },
91
99
  {
92
100
  id: "switch-layout",
93
101
  category: "Global Keys",
@@ -113,7 +113,7 @@ const MODIFIER_ONLY_EVENT_NAMES = new Set([
113
113
  "", "shift", "ctrl", "control", "alt", "option", "meta", "super", "cmd", "command", "capslock", "fn",
114
114
  ]);
115
115
 
116
- export function isNamedKey(key: string): boolean {
116
+ function isNamedKey(key: string): boolean {
117
117
  return NAMED_KEY_BY_ALIAS.get(key)?.key === key;
118
118
  }
119
119
 
@@ -1,45 +1,32 @@
1
1
  export {
2
- KEYBINDING_ACTIONS,
3
2
  PLUGIN_ACTION_PREFIX,
4
- getKeybindingAction,
5
3
  isCoreKeybindingActionId,
6
- pluginShortcutActionId,
7
4
  type CoreKeybindingActionId,
8
- type KeybindingActionCategory,
9
- type KeybindingActionDef,
10
5
  } from "./actions";
11
6
  export {
12
7
  formatKeyChord,
13
8
  isTypingChord,
14
- keyChordDigit,
15
9
  keyChordFromEvent,
16
- keyChordsEqual,
17
10
  matchesKeyChord,
18
11
  parseKeyChord,
19
12
  serializeKeyChord,
20
13
  type KeyChord,
21
14
  type KeyChordEventLike,
22
- type PrimaryModifier,
23
15
  } from "./chord";
24
16
  export {
25
17
  describeKeybindingIssue,
26
18
  isPaneKeybindingAction,
27
19
  keyChordsOverlap,
28
- keybindingActionLabel,
29
20
  matchKeybinding,
30
21
  matchesKeybindingAction,
31
- pluginShortcutDefaultChord,
32
22
  resolveKeybindings,
33
23
  resolvePluginShortcutChords,
34
24
  type KeybindingCommand,
35
- type KeybindingIssue,
36
- type KeybindingMatch,
37
25
  type ResolvedKeybindingAction,
38
26
  type ResolvedKeybindings,
39
27
  } from "./resolve";
40
28
  export {
41
29
  advertisedChord,
42
- chordsForHost,
43
30
  formatActionChords,
44
31
  formatAdvertisedChord,
45
32
  formatChordForHost,
@@ -58,5 +45,4 @@ export {
58
45
  requestKeybindingCapture,
59
46
  subscribeKeybindingCapture,
60
47
  takeKeybindingCaptureRequest,
61
- type KeybindingCaptureRequest,
62
48
  } from "./capture-request";
@@ -34,7 +34,7 @@ export function formatChordForHost(
34
34
  * Chords worth showing on this host. A terminal cannot deliver an explicit
35
35
  * Command chord, so those rows stay out of the terminal's help.
36
36
  */
37
- export function chordsForHost(chords: readonly KeyChord[], mode: ShortcutDisplayMode): KeyChord[] {
37
+ function chordsForHost(chords: readonly KeyChord[], mode: ShortcutDisplayMode): KeyChord[] {
38
38
  return chords.filter((chord) => mode !== "terminal" || !chord.cmd);
39
39
  }
40
40
 
@@ -1,7 +1,6 @@
1
1
  import type { KeybindingsConfig } from "../../types/config";
2
2
  import type { KeyboardShortcut } from "../../types/plugin";
3
3
  import {
4
- getKeybindingAction,
5
4
  isCoreKeybindingActionId,
6
5
  KEYBINDING_ACTIONS,
7
6
  PANE_ACTION_IDS,
@@ -66,7 +65,7 @@ export interface ResolveKeybindingsOptions {
66
65
  host?: "terminal" | "desktop";
67
66
  }
68
67
 
69
- export function pluginShortcutDefaultChord(shortcut: KeyboardShortcut): KeyChord {
68
+ function pluginShortcutDefaultChord(shortcut: KeyboardShortcut): KeyChord {
70
69
  return {
71
70
  key: shortcut.key.toLowerCase(),
72
71
  ctrl: shortcut.ctrl === true,
@@ -280,9 +279,3 @@ export function describeKeybindingIssue(issue: KeybindingIssue): string {
280
279
  return `${serializeKeyChord(issue.chord)} is bound to ${issue.targets.join(" and ")}.`;
281
280
  }
282
281
  }
283
-
284
- export function keybindingActionLabel(action: ResolvedKeybindingAction): string {
285
- return action.def?.description ?? action.pluginShortcut?.description ?? action.id;
286
- }
287
-
288
- export { getKeybindingAction };
@@ -7,7 +7,7 @@ import {
7
7
  findDockLeaf,
8
8
  getDockedPaneIds,
9
9
  isPaneInLayout,
10
- } from "../../plugins/pane-manager";
10
+ } from "../../layout/pane-manager";
11
11
  import type { PluginRegistry } from "../../plugins/registry";
12
12
  import type { LoadedExternalPlugin } from "../../plugins/loader";
13
13
  import {
@@ -18,6 +18,7 @@ import {
18
18
  type AppState,
19
19
  } from "../../state/app/context";
20
20
  import { scheduleConfigSave } from "../../state/config-save-scheduler";
21
+ import { pinFollowingPane } from "../../layout/pane-follow";
21
22
  import {
22
23
  createPaneInstance,
23
24
  isTickerPaneId,
@@ -35,7 +36,6 @@ import type {
35
36
  } from "../../types/plugin";
36
37
  import type { DialogApi } from "../../ui/dialog";
37
38
  import {
38
- resolvePanelForPane,
39
39
  resolvePaneShowTarget,
40
40
  resolvePaneTarget as resolvePaneTargetInLayout,
41
41
  selectEdgeAnchor,
@@ -83,6 +83,7 @@ export function useAppPaneRuntime({
83
83
  const currentState = stateRef.current;
84
84
  const normalizedLayout = normalizePaneLayout(layout, {
85
85
  resolveOrphanSymbol: (instanceId) => resolveTickerForPane(currentState, instanceId),
86
+ pinOrphan: pinFollowingPane,
86
87
  });
87
88
  if (options?.pushHistory !== false) {
88
89
  dispatch({ type: "PUSH_LAYOUT_HISTORY" });
@@ -95,18 +96,12 @@ export function useAppPaneRuntime({
95
96
  { ...currentState.config, layout: normalizedLayout },
96
97
  currentState.paneState,
97
98
  hasFocusTarget ? (options.focusedPaneId ?? null) : currentState.focusedPaneId,
98
- currentState.activePanel,
99
99
  ));
100
100
  }, [dispatch, stateRef]);
101
101
 
102
- const activatePane = useCallback((paneId: string, layout: LayoutConfig = state.config.layout) => {
103
- dispatch({
104
- type: "SET_ACTIVE_PANEL",
105
- panel: resolvePanelForPane({ layout, paneId, pluginRegistry }),
106
- preserveFocus: true,
107
- });
102
+ const activatePane = useCallback((paneId: string) => {
108
103
  dispatch({ type: "FOCUS_PANE", paneId });
109
- }, [dispatch, pluginRegistry, state.config.layout]);
104
+ }, [dispatch]);
110
105
 
111
106
  const {
112
107
  buildPaneBinding,
@@ -163,7 +158,7 @@ export function useAppPaneRuntime({
163
158
  if (nextLayout !== state.config.layout) {
164
159
  persistLayout(nextLayout, { pushHistory: false });
165
160
  }
166
- activatePane(paneId, nextLayout);
161
+ activatePane(paneId);
167
162
  }, [activatePane, persistLayout, state.config.layout]);
168
163
 
169
164
  const placePaneInstance = useCallback((
@@ -171,7 +166,7 @@ export function useAppPaneRuntime({
171
166
  paneDef: PaneDef,
172
167
  options?: PaneTemplateInstanceConfig,
173
168
  ) => {
174
- const { width, height } = pluginRegistry.getTermSizeFn();
169
+ const { width, height } = pluginRegistry.getTermSize();
175
170
  // Templates can await ticker resolution before placing their pane, so the
176
171
  // layout from the render that started the request may be out of date.
177
172
  const { config: { layout }, focusedPaneId } = stateRef.current;
@@ -201,7 +196,7 @@ export function useAppPaneRuntime({
201
196
  }
202
197
 
203
198
  persistLayout(nextLayout);
204
- activatePane(instance.instanceId, nextLayout);
199
+ activatePane(instance.instanceId);
205
200
  }, [
206
201
  activatePane,
207
202
  persistLayout,
@@ -221,7 +216,7 @@ export function useAppPaneRuntime({
221
216
  }
222
217
 
223
218
  if (target.instance && isPaneInLayout(state.config.layout, target.instance.instanceId)) {
224
- pluginRegistry.focusPaneFn(target.instance.instanceId);
219
+ pluginRegistry.focusPane(target.instance.instanceId);
225
220
  return;
226
221
  }
227
222
 
@@ -1,8 +1,6 @@
1
- import type { PluginRegistry } from "../../plugins/registry";
2
1
  import {
3
2
  getDockLeafLayouts,
4
- getLeafRect,
5
- } from "../../plugins/pane-manager";
3
+ } from "../../layout/pane-manager";
6
4
  import {
7
5
  findPaneInstance,
8
6
  isTickerPaneId,
@@ -41,33 +39,6 @@ export function resolvePaneShowTarget(
41
39
  };
42
40
  }
43
41
 
44
- export function resolvePanelForPane({
45
- layout,
46
- paneId,
47
- pluginRegistry,
48
- }: {
49
- layout: LayoutConfig;
50
- paneId: string;
51
- pluginRegistry: PluginRegistry;
52
- }): "left" | "right" {
53
- const instanceId = resolvePaneTarget(layout, paneId);
54
- if (!instanceId) return "right";
55
- const instance = findPaneInstance(layout, instanceId);
56
- const paneDef = instance ? pluginRegistry.panes.get(instance.paneId) : pluginRegistry.panes.get(paneId);
57
- const floating = layout.floating.find((entry) => entry.instanceId === instanceId);
58
- if (floating) {
59
- return paneDef?.defaultPosition ?? "right";
60
- }
61
-
62
- const rect = getLeafRect(layout, instanceId, PANEL_RESOLUTION_BOUNDS);
63
- if (!rect) {
64
- return paneDef?.defaultPosition ?? "right";
65
- }
66
-
67
- const midpoint = PANEL_RESOLUTION_BOUNDS.width / 2;
68
- return rect.x + (rect.width / 2) <= midpoint ? "left" : "right";
69
- }
70
-
71
42
  export function selectEdgeAnchor(layout: LayoutConfig, edge: "left" | "right"): string | null {
72
43
  const leaves = getDockLeafLayouts(layout, PANEL_RESOLUTION_BOUNDS);
73
44
  if (leaves.length === 0) return null;