gloomberb 0.16.2 → 0.16.4

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 (527) hide show
  1. package/package.json +4 -1
  2. package/src/api-client/askg.ts +43 -0
  3. package/src/api-client/auth.ts +15 -0
  4. package/src/api-client/beneficial-owners.ts +4 -0
  5. package/src/api-client/chat.ts +19 -0
  6. package/src/api-client/company-kpis.ts +14 -2
  7. package/src/api-client/data.ts +34 -16
  8. package/src/api-client/index.ts +12 -0
  9. package/src/api-client/normalizers.ts +27 -0
  10. package/src/api-client/paths.ts +88 -23
  11. package/src/api-client/request.ts +2 -1
  12. package/src/api-client/research-activity.ts +31 -0
  13. package/src/api-client/socket.ts +39 -8
  14. package/src/api-client/types.ts +57 -1
  15. package/src/api-client/upgrade-experiment.ts +90 -0
  16. package/src/app/global-shortcuts.ts +11 -1
  17. package/src/app/keybindings/actions.ts +10 -0
  18. package/src/app/pane-runtime/index.tsx +8 -0
  19. package/src/app/pane-runtime/pane-template-runtime.ts +5 -0
  20. package/src/app/pane-runtime/plugin-bindings.ts +65 -25
  21. package/src/app/pane-runtime/ticker-inspector-runtime.ts +12 -0
  22. package/src/app/pane-runtime/ticker-open-runtime.ts +18 -1
  23. package/src/app/runtime/desktop-deeplink.ts +5 -0
  24. package/src/app/star-prompt/model.ts +98 -0
  25. package/src/app/star-prompt/runtime.ts +41 -0
  26. package/src/app/star-prompt/status-line.tsx +190 -0
  27. package/src/app.tsx +13 -7
  28. package/src/architecture/core-builtin-allowlist.json +70 -0
  29. package/src/brokers/account-cache.ts +45 -0
  30. package/src/brokers/signed-in/adapter.ts +33 -2
  31. package/src/brokers/signed-in/client.ts +10 -0
  32. package/src/brokers/signed-in/sign-in-dialog.tsx +23 -9
  33. package/src/brokers/signed-in/sign-in.ts +62 -5
  34. package/src/capabilities/registry.ts +8 -1
  35. package/src/capabilities/types.ts +2 -0
  36. package/src/cli/command-options.ts +74 -0
  37. package/src/cli/commands/command-utils.ts +29 -0
  38. package/src/cli/commands/crypto-hints.ts +12 -4
  39. package/src/cli/commands/market.ts +524 -148
  40. package/src/cli/commands/options-chain.ts +172 -0
  41. package/src/cli/commands/options-leaps.ts +422 -0
  42. package/src/cli/commands/overview.ts +223 -42
  43. package/src/cli/commands/search.ts +29 -8
  44. package/src/cli/commands/system.ts +99 -19
  45. package/src/cli/commands/themes.ts +64 -0
  46. package/src/cli/commands/ticker.ts +200 -73
  47. package/src/cli/desktop-pane-shot.ts +100 -16
  48. package/src/cli/errors.ts +25 -2
  49. package/src/cli/freshness.ts +7 -4
  50. package/src/cli/fx-pair.ts +57 -0
  51. package/src/cli/help.ts +40 -7
  52. package/src/cli/history-rows.ts +187 -15
  53. package/src/cli/index-roots.ts +51 -0
  54. package/src/cli/index.ts +21 -13
  55. package/src/cli/listing-arg.ts +211 -3
  56. package/src/cli/not-a-ticker.ts +37 -0
  57. package/src/cli/options.ts +55 -7
  58. package/src/cli/pane-functions/capabilities.ts +13 -2
  59. package/src/cli/pane-functions/catalog.ts +13 -2
  60. package/src/cli/pane-functions/data.ts +36 -5
  61. package/src/cli/pane-functions/dom.ts +89 -28
  62. package/src/cli/pane-functions/freshness.ts +205 -26
  63. package/src/cli/pane-functions/function-help.ts +71 -24
  64. package/src/cli/pane-functions/headless.ts +168 -35
  65. package/src/cli/pane-functions/index.ts +12 -2
  66. package/src/cli/pane-functions/market-session.ts +133 -0
  67. package/src/cli/pane-functions/options.ts +15 -4
  68. package/src/cli/pane-functions/report-notices.ts +63 -0
  69. package/src/cli/pane-functions/report.ts +12 -1
  70. package/src/cli/pane-functions/resolver.ts +32 -8
  71. package/src/cli/pane-functions/screenshot-evidence.ts +2 -0
  72. package/src/cli/pane-functions/screenshot.ts +109 -23
  73. package/src/cli/registry.ts +8 -4
  74. package/src/cli/report-tables.ts +460 -0
  75. package/src/cli/result.ts +63 -16
  76. package/src/cli/row-window.ts +76 -0
  77. package/src/cli/scroll-truncation.ts +34 -0
  78. package/src/components/chart/composite/composite-chart.tsx +43 -4
  79. package/src/components/chart/composite/legend.tsx +39 -6
  80. package/src/components/chart/composite/rasterizer.ts +64 -4
  81. package/src/components/chart/composite/series-cues.ts +71 -0
  82. package/src/components/chart/composite/text-renderer.ts +16 -8
  83. package/src/components/chart/composite/types.ts +3 -0
  84. package/src/components/command-bar/commands/direct/index.ts +9 -1
  85. package/src/components/command-bar/commands/plugin/items.ts +3 -1
  86. package/src/components/command-bar/commands/registry.ts +7 -0
  87. package/src/components/command-bar/layout-items/focused-pane.ts +38 -0
  88. package/src/components/command-bar/pane-templates/workflow.ts +5 -0
  89. package/src/components/command-bar/routes/root/command-items.ts +2 -0
  90. package/src/components/command-bar/routes/root/plugin-turn-on.ts +92 -0
  91. package/src/components/command-bar/routes/root/results.ts +40 -10
  92. package/src/components/command-bar/routes/root/runtime.ts +8 -0
  93. package/src/components/command-bar/routes/root/search-providers.ts +97 -14
  94. package/src/components/command-bar/surface/index.tsx +18 -4
  95. package/src/components/command-bar/theme-picker.tsx +48 -13
  96. package/src/components/command-bar/workflow/ops.ts +5 -3
  97. package/src/components/data-table/export.ts +6 -51
  98. package/src/components/data-table/view.tsx +31 -10
  99. package/src/components/layout/floating-pane.tsx +6 -2
  100. package/src/components/layout/market-summary.ts +23 -9
  101. package/src/components/layout/pane/content.tsx +46 -29
  102. package/src/components/layout/pane/cycle-order.ts +2 -11
  103. package/src/components/layout/pane/header.tsx +2 -1
  104. package/src/components/layout/pane/title.ts +1 -1
  105. package/src/components/layout/presentation.ts +22 -0
  106. package/src/components/layout/shell/active-drag.ts +67 -35
  107. package/src/components/layout/shell/cursor-occlusion.ts +6 -5
  108. package/src/components/layout/shell/drag/index.ts +16 -7
  109. package/src/components/layout/shell/drag/live.ts +193 -0
  110. package/src/components/layout/shell/drag/overlays.tsx +179 -35
  111. package/src/components/layout/shell/drag/runtime.ts +62 -50
  112. package/src/components/layout/shell/drag/slide.ts +10 -0
  113. package/src/components/layout/shell/index.tsx +84 -57
  114. package/src/components/layout/shell/layout-state.ts +5 -11
  115. package/src/components/layout/shell/menu.ts +28 -1
  116. package/src/components/layout/shell/native/pointer-runtime.ts +13 -13
  117. package/src/components/layout/shell/native/surfaces.ts +30 -14
  118. package/src/components/layout/shell/pane/actions.ts +2 -1
  119. package/src/components/layout/shell/pane/layers.tsx +461 -180
  120. package/src/components/layout/shell/pane/management-shortcuts.ts +5 -0
  121. package/src/components/layout/shell/pane/new-layout.ts +116 -0
  122. package/src/components/layout/shell/shortcuts.ts +5 -2
  123. package/src/components/layout/shell/terminal-pointer-runtime.ts +18 -18
  124. package/src/components/layout/shell/visible-layout.ts +44 -1
  125. package/src/components/layout/shell/window-mode/overlays.tsx +12 -4
  126. package/src/components/layout/status-bar.tsx +4 -1
  127. package/src/components/markdown-text.tsx +9 -5
  128. package/src/components/metric-treemap/heat-surface.tsx +27 -8
  129. package/src/components/metric-treemap/heat-tiles.ts +48 -17
  130. package/src/components/onboarding/onboarding-frame.tsx +33 -10
  131. package/src/components/onboarding/onboarding-wizard.tsx +49 -40
  132. package/src/components/onboarding/portfolio-step/positions-panel.tsx +5 -2
  133. package/src/components/onboarding/pro-step-layout.ts +86 -0
  134. package/src/components/onboarding/use-onboarding-upgrade.ts +6 -2
  135. package/src/components/ui/button.tsx +10 -0
  136. package/src/components/ui/data-table/index.tsx +38 -0
  137. package/src/components/ui/data-table/types.ts +8 -1
  138. package/src/components/ui/data-table/visible-range.ts +2 -0
  139. package/src/components/ui/icon.tsx +11 -2
  140. package/src/components/ui/index.ts +1 -1
  141. package/src/core/connection-health.ts +1 -1
  142. package/src/core/state/app/layout-reducer.ts +89 -3
  143. package/src/core/state/app/state.ts +8 -5
  144. package/src/core/state/app/types.ts +13 -2
  145. package/src/data/config/layout.ts +55 -21
  146. package/src/data/config/store/fold-panes.ts +149 -0
  147. package/src/data/config/store/migrations.ts +7 -0
  148. package/src/data/config/store/node.ts +27 -6
  149. package/src/data/config/store/normalize.ts +37 -3
  150. package/src/data/json-persistence.ts +17 -3
  151. package/src/data/json-storage.ts +2 -0
  152. package/src/data/memory-resource-store.ts +46 -0
  153. package/src/i18n/es.ts +14 -1
  154. package/src/i18n/ja.ts +14 -1
  155. package/src/i18n/ko.ts +14 -1
  156. package/src/i18n/zh-cn.ts +14 -1
  157. package/src/i18n/zh-tw.ts +14 -1
  158. package/src/layout/desks.ts +1 -2
  159. package/src/layout/pane-layout-move.ts +264 -0
  160. package/src/layout/pane-manager/hidden-panes.ts +160 -0
  161. package/src/layout/pane-manager/index.ts +1 -0
  162. package/src/market-data/coordinator/entries.ts +7 -1
  163. package/src/market-data/coordinator/quotes.ts +2 -2
  164. package/src/market-data/market/freshness.ts +156 -11
  165. package/src/market-data/market/status.ts +40 -0
  166. package/src/market-data/options-alternatives.ts +69 -0
  167. package/src/market-data/quotes/contributions.ts +19 -2
  168. package/src/market-data/quotes/freshness.ts +5 -0
  169. package/src/market-data/quotes/metadata.ts +16 -0
  170. package/src/market-data/quotes/screener-live-quotes.ts +56 -5
  171. package/src/plugins/builtin/account-management/keyboard.ts +3 -0
  172. package/src/plugins/builtin/account-management/model.ts +1 -0
  173. package/src/plugins/builtin/account-management/navigation.ts +1 -1
  174. package/src/plugins/builtin/account-management/pane.tsx +31 -4
  175. package/src/plugins/builtin/alerts/quotes.ts +3 -0
  176. package/src/plugins/builtin/analytics/pane-model.ts +10 -6
  177. package/src/plugins/builtin/analytics/risk-headless.ts +3 -1
  178. package/src/plugins/builtin/analytics/risk-model.ts +37 -8
  179. package/src/plugins/builtin/analytics/risk-pane.tsx +8 -4
  180. package/src/plugins/builtin/attention/pane.tsx +1 -1
  181. package/src/plugins/builtin/backtest/pane.tsx +1 -1
  182. package/src/plugins/builtin/broker-manager/detail.tsx +4 -0
  183. package/src/plugins/builtin/broker-manager/index.tsx +7 -3
  184. package/src/plugins/builtin/broker-manager/model.ts +8 -0
  185. package/src/plugins/builtin/broker-manager/pane-actions.tsx +8 -2
  186. package/src/plugins/builtin/broker-manager/sign-in-end.ts +82 -0
  187. package/src/plugins/builtin/broker-manager/table.ts +5 -0
  188. package/src/plugins/builtin/builtin-plugin-meta.ts +121 -11
  189. package/src/plugins/builtin/catalysts/detail.tsx +1 -1
  190. package/src/plugins/builtin/chart-composer/pane.tsx +1 -1
  191. package/src/plugins/builtin/chat/channels.ts +34 -36
  192. package/src/plugins/builtin/chat/command-bar.ts +138 -0
  193. package/src/plugins/builtin/chat/composer-commands.ts +21 -1
  194. package/src/plugins/builtin/chat/content/composer-runtime.ts +11 -1
  195. package/src/plugins/builtin/chat/content/footer.tsx +5 -3
  196. package/src/plugins/builtin/chat/content/index.tsx +21 -1
  197. package/src/plugins/builtin/chat/content/mentions.ts +2 -1
  198. package/src/plugins/builtin/chat/content/user-map.ts +3 -1
  199. package/src/plugins/builtin/chat/controller/index.ts +48 -0
  200. package/src/plugins/builtin/chat/conversations.ts +256 -0
  201. package/src/plugins/builtin/chat/discord-command.ts +91 -0
  202. package/src/plugins/builtin/chat/edit-window.ts +12 -6
  203. package/src/plugins/builtin/chat/ghost-user.ts +14 -0
  204. package/src/plugins/builtin/chat/index.tsx +40 -2
  205. package/src/plugins/builtin/chat/layout.ts +2 -0
  206. package/src/plugins/builtin/chat/message/desktop.tsx +2 -1
  207. package/src/plugins/builtin/chat/message/header.tsx +24 -15
  208. package/src/plugins/builtin/chat/message/profile-popover.tsx +2 -1
  209. package/src/plugins/builtin/chat/message/render-state.ts +3 -0
  210. package/src/plugins/builtin/chat/pane-requests.ts +60 -0
  211. package/src/plugins/builtin/chat/pane-state.ts +32 -2
  212. package/src/plugins/builtin/chat/pane.tsx +8 -0
  213. package/src/plugins/builtin/cloud/askg/controller.ts +112 -4
  214. package/src/plugins/builtin/cloud/askg/conversation-store.ts +21 -0
  215. package/src/plugins/builtin/cloud/askg/manifest.ts +1 -0
  216. package/src/plugins/builtin/cloud/askg/model.ts +129 -70
  217. package/src/plugins/builtin/cloud/askg/pane.tsx +772 -377
  218. package/src/plugins/builtin/cloud/askg/protocol.ts +40 -2
  219. package/src/plugins/builtin/cloud/askg/tool-display.ts +437 -0
  220. package/src/plugins/builtin/cloud/askg/tool-timeline.tsx +403 -0
  221. package/src/plugins/builtin/cloud/company-picker.tsx +1 -9
  222. package/src/plugins/builtin/cloud/mcp-connect/command.ts +24 -0
  223. package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +360 -0
  224. package/src/plugins/builtin/cloud/mcp-connect/model.ts +135 -0
  225. package/src/plugins/builtin/cloud/mcp-connect/sections.ts +62 -0
  226. package/src/plugins/builtin/cloud/plugin.tsx +36 -1
  227. package/src/plugins/builtin/cloud/starter-symbols.ts +8 -0
  228. package/src/plugins/builtin/cloud/terminal-relay/acm-tab.tsx +89 -0
  229. package/src/plugins/builtin/cloud/terminal-relay/client.ts +97 -0
  230. package/src/plugins/builtin/cloud/terminal-relay/connect-section.tsx +57 -0
  231. package/src/plugins/builtin/cloud/terminal-relay/engine.ts +666 -0
  232. package/src/plugins/builtin/cloud/terminal-relay/grants.ts +137 -0
  233. package/src/plugins/builtin/cloud/terminal-relay/host.tsx +81 -0
  234. package/src/plugins/builtin/cloud/terminal-relay/indicator.tsx +82 -0
  235. package/src/plugins/builtin/cloud/terminal-relay/manifest.ts +234 -0
  236. package/src/plugins/builtin/cloud/terminal-relay/policy.ts +153 -0
  237. package/src/plugins/builtin/cloud/terminal-relay/prompts.tsx +168 -0
  238. package/src/plugins/builtin/cloud/terminal-relay/redact.ts +73 -0
  239. package/src/plugins/builtin/cloud/terminal-relay/summary.ts +62 -0
  240. package/src/plugins/builtin/cloud/upgrade-dialog.tsx +26 -2
  241. package/src/plugins/builtin/cloud/upgrade-personalization.ts +57 -0
  242. package/src/plugins/builtin/cloud/upgrade-tickers.ts +124 -0
  243. package/src/plugins/builtin/comment-letters/client.ts +1 -3
  244. package/src/plugins/builtin/company-attention/pane.tsx +1 -1
  245. package/src/plugins/builtin/company-kpis/client.ts +23 -8
  246. package/src/plugins/builtin/company-kpis/headless.ts +3 -1
  247. package/src/plugins/builtin/company-kpis/pane.tsx +15 -7
  248. package/src/plugins/builtin/company-kpis/screenshot-evidence.ts +10 -3
  249. package/src/plugins/builtin/composite-plugins.ts +107 -64
  250. package/src/plugins/builtin/credit-boards/cdx-pane.tsx +4 -4
  251. package/src/plugins/builtin/credit-boards/index.tsx +21 -21
  252. package/src/plugins/builtin/credit-boards/model.ts +0 -1
  253. package/src/plugins/builtin/credit-boards/pane.tsx +30 -0
  254. package/src/plugins/builtin/credit-boards/sovr-pane.tsx +4 -4
  255. package/src/plugins/builtin/debt-maturities/client.ts +37 -9
  256. package/src/plugins/builtin/debt-maturities/headless.ts +3 -1
  257. package/src/plugins/builtin/debt-maturities/pane.tsx +5 -4
  258. package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
  259. package/src/plugins/builtin/dividend-yield/pane.tsx +1 -1
  260. package/src/plugins/builtin/earnings-calls/data.ts +28 -7
  261. package/src/plugins/builtin/earnings-calls/headless.ts +3 -2
  262. package/src/plugins/builtin/earnings-calls/pane.tsx +10 -5
  263. package/src/plugins/builtin/econ/calendar-model.ts +42 -17
  264. package/src/plugins/builtin/econ/detail-view.tsx +2 -2
  265. package/src/plugins/builtin/econ/index.tsx +68 -22
  266. package/src/plugins/builtin/econ-statistics/headless.ts +12 -2
  267. package/src/plugins/builtin/econ-statistics/pane.tsx +1 -1
  268. package/src/plugins/builtin/econ-statistics/view.ts +17 -0
  269. package/src/plugins/builtin/executives/data.ts +17 -6
  270. package/src/plugins/builtin/executives/pane.tsx +16 -7
  271. package/src/plugins/builtin/filing-events/pane.tsx +22 -5
  272. package/src/plugins/builtin/fx-matrix/freshness.ts +65 -0
  273. package/src/plugins/builtin/fx-matrix/index.tsx +22 -1
  274. package/src/plugins/builtin/fx-matrix/pairs.ts +1 -1
  275. package/src/plugins/builtin/fx-matrix/settings.ts +42 -2
  276. package/src/plugins/builtin/gpu/headless.ts +9 -3
  277. package/src/plugins/builtin/gpu/model.ts +14 -5
  278. package/src/plugins/builtin/help/index.tsx +1 -0
  279. package/src/plugins/builtin/holders/beneficial-client.ts +29 -7
  280. package/src/plugins/builtin/holders/beneficial-view.tsx +7 -3
  281. package/src/plugins/builtin/holders/client.ts +3 -6
  282. package/src/plugins/builtin/holders/format.ts +31 -1
  283. package/src/plugins/builtin/holders/headless.ts +32 -6
  284. package/src/plugins/builtin/holders/pane.tsx +25 -13
  285. package/src/plugins/builtin/holders/report-header.ts +46 -5
  286. package/src/plugins/builtin/insider/index.tsx +4 -4
  287. package/src/plugins/builtin/iv-history/charts.tsx +21 -7
  288. package/src/plugins/builtin/iv-history/client.ts +12 -2
  289. package/src/plugins/builtin/iv-history/format.ts +33 -2
  290. package/src/plugins/builtin/iv-history/headless.ts +22 -10
  291. package/src/plugins/builtin/iv-history/index.tsx +3 -3
  292. package/src/plugins/builtin/iv-history/model.ts +61 -13
  293. package/src/plugins/builtin/iv-history/pane.tsx +11 -3
  294. package/src/plugins/builtin/iv-history/screen-pane.tsx +42 -18
  295. package/src/plugins/builtin/jobs/pane.tsx +1 -1
  296. package/src/plugins/builtin/kelly-sizer/headless.ts +149 -0
  297. package/src/plugins/builtin/kelly-sizer/history.ts +80 -0
  298. package/src/plugins/builtin/kelly-sizer/index.tsx +2 -0
  299. package/src/plugins/builtin/kelly-sizer/pane.tsx +121 -45
  300. package/src/plugins/builtin/kelly-sizer/portfolio.ts +25 -0
  301. package/src/plugins/builtin/kelly-sizer/sections.tsx +14 -0
  302. package/src/plugins/builtin/kelly-sizer/types.ts +9 -1
  303. package/src/plugins/builtin/layout-manager/index.tsx +9 -1
  304. package/src/plugins/builtin/macro-day/client.ts +24 -0
  305. package/src/plugins/builtin/macro-day/headless.ts +11 -8
  306. package/src/plugins/builtin/macro-day/index.tsx +3 -0
  307. package/src/plugins/builtin/macro-day/model.ts +11 -6
  308. package/src/plugins/builtin/macro-day/pane.tsx +12 -8
  309. package/src/plugins/builtin/macro-day/release-table.ts +40 -0
  310. package/src/plugins/builtin/macro-day/releases.ts +62 -44
  311. package/src/plugins/builtin/market-heatmap/data.ts +25 -5
  312. package/src/plugins/builtin/market-heatmap/evidence.ts +90 -0
  313. package/src/plugins/builtin/market-heatmap/index.tsx +144 -63
  314. package/src/plugins/builtin/market-heatmap/model.ts +94 -3
  315. package/src/plugins/builtin/market-heatmap/portfolio.ts +12 -2
  316. package/src/plugins/builtin/market-movers/headless.ts +31 -4
  317. package/src/plugins/builtin/market-movers/index.tsx +8 -1
  318. package/src/plugins/builtin/market-movers/model.ts +71 -17
  319. package/src/plugins/builtin/market-movers/table.ts +50 -23
  320. package/src/plugins/builtin/members/pane.tsx +10 -0
  321. package/src/plugins/builtin/news/headless.ts +9 -2
  322. package/src/plugins/builtin/news/wire/news/footer.ts +10 -0
  323. package/src/plugins/builtin/openfda/client.ts +1 -1
  324. package/src/plugins/builtin/options/carry.ts +95 -0
  325. package/src/plugins/builtin/options/index.tsx +58 -5
  326. package/src/plugins/builtin/options/strike-window.ts +183 -0
  327. package/src/plugins/builtin/options/table.ts +55 -3
  328. package/src/plugins/builtin/options/types.ts +8 -1
  329. package/src/plugins/builtin/options/view.tsx +161 -12
  330. package/src/plugins/builtin/options-positioning/headless.ts +4 -2
  331. package/src/plugins/builtin/options-scenario/charts.tsx +2 -2
  332. package/src/plugins/builtin/options-scenario/client.ts +73 -17
  333. package/src/plugins/builtin/options-scenario/headless.ts +71 -24
  334. package/src/plugins/builtin/options-scenario/hedge.ts +284 -0
  335. package/src/plugins/builtin/options-scenario/index.tsx +9 -2
  336. package/src/plugins/builtin/options-scenario/model.ts +33 -0
  337. package/src/plugins/builtin/options-scenario/pane.tsx +40 -16
  338. package/src/plugins/builtin/pe-band/model.ts +2 -2
  339. package/src/plugins/builtin/pe-band/report-dates.ts +11 -7
  340. package/src/plugins/builtin/perps/equity-row.tsx +8 -5
  341. package/src/plugins/builtin/perps/model.ts +16 -5
  342. package/src/plugins/builtin/perps/pane.tsx +1 -1
  343. package/src/plugins/builtin/plugin-marketplace/model.ts +64 -21
  344. package/src/plugins/builtin/plugin-marketplace/packs.ts +118 -0
  345. package/src/plugins/builtin/plugin-marketplace/pane.tsx +344 -32
  346. package/src/plugins/builtin/plugin-marketplace/store.ts +7 -1
  347. package/src/plugins/builtin/plugin-module.ts +87 -4
  348. package/src/plugins/builtin/portfolio-list/account-metrics.ts +16 -1
  349. package/src/plugins/builtin/portfolio-list/allocation.ts +3 -0
  350. package/src/plugins/builtin/portfolio-list/cached-account.ts +18 -9
  351. package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +71 -36
  352. package/src/plugins/builtin/portfolio-list/cli/render.ts +89 -18
  353. package/src/plugins/builtin/portfolio-list/cli/shared.ts +2 -16
  354. package/src/plugins/builtin/portfolio-list/headless.ts +40 -7
  355. package/src/plugins/builtin/portfolio-list/pane/index.tsx +7 -4
  356. package/src/plugins/builtin/portfolio-list/summary/index.tsx +22 -4
  357. package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +11 -1
  358. package/src/plugins/builtin/realized-vol/headless.ts +3 -0
  359. package/src/plugins/builtin/realized-vol/pane.tsx +1 -1
  360. package/src/plugins/builtin/research/corporate-actions-pane.tsx +2 -2
  361. package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +1 -1
  362. package/src/plugins/builtin/research/relative-valuation-model.ts +7 -3
  363. package/src/plugins/builtin/revenue-breakdown/client.ts +13 -6
  364. package/src/plugins/builtin/revenue-breakdown/headless.ts +4 -1
  365. package/src/plugins/builtin/revenue-breakdown/pane.tsx +7 -4
  366. package/src/plugins/builtin/reverse-dcf/headless.ts +5 -1
  367. package/src/plugins/builtin/reverse-dcf/model.ts +2 -1
  368. package/src/plugins/builtin/reverse-dcf/pane.tsx +1 -1
  369. package/src/plugins/builtin/risk-factors/data.ts +23 -9
  370. package/src/plugins/builtin/risk-factors/headless.ts +5 -2
  371. package/src/plugins/builtin/risk-factors/pane.tsx +6 -5
  372. package/src/plugins/builtin/seasonality/pane.tsx +1 -1
  373. package/src/plugins/builtin/sec/index.tsx +5 -5
  374. package/src/plugins/builtin/sectors/client.ts +10 -2
  375. package/src/plugins/builtin/sectors/headless.ts +35 -6
  376. package/src/plugins/builtin/sectors/index.tsx +18 -1
  377. package/src/plugins/builtin/sectors/sector-model.ts +150 -41
  378. package/src/plugins/builtin/shared/command-tab.ts +51 -0
  379. package/src/plugins/builtin/shared/headless-market-data.ts +33 -1
  380. package/src/plugins/builtin/shared/members-menu.tsx +260 -0
  381. package/src/plugins/builtin/shared/report-freshness.ts +50 -2
  382. package/src/plugins/builtin/shared/ticker-request.ts +25 -1
  383. package/src/plugins/builtin/shared/use-quote-board.ts +25 -5
  384. package/src/plugins/builtin/shared/volatility/options.ts +1 -46
  385. package/src/plugins/builtin/short-interest/index.tsx +19 -4
  386. package/src/plugins/builtin/short-interest/surface.tsx +4 -4
  387. package/src/plugins/builtin/short-volume/index.tsx +1 -10
  388. package/src/plugins/builtin/short-volume/pane.tsx +1 -1
  389. package/src/plugins/builtin/social-mentions/pane.tsx +1 -1
  390. package/src/plugins/builtin/supply-chain/model.ts +1 -1
  391. package/src/plugins/builtin/themes/pane.tsx +3 -0
  392. package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +4 -0
  393. package/src/plugins/builtin/ticker-detail/financials/model.ts +25 -2
  394. package/src/plugins/builtin/ticker-detail/headless.ts +63 -25
  395. package/src/plugins/builtin/ticker-detail/overview/model.ts +9 -4
  396. package/src/plugins/builtin/ticker-detail/overview-tab.tsx +3 -2
  397. package/src/plugins/builtin/ticker-detail/pane.tsx +4 -5
  398. package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +94 -6
  399. package/src/plugins/builtin/treasury-auctions/cache.ts +5 -2
  400. package/src/plugins/builtin/treasury-auctions/client.ts +22 -8
  401. package/src/plugins/builtin/treasury-auctions/headless.ts +40 -4
  402. package/src/plugins/builtin/treasury-auctions/index.tsx +11 -9
  403. package/src/plugins/builtin/treasury-auctions/model.ts +197 -30
  404. package/src/plugins/builtin/treasury-auctions/pane.tsx +35 -11
  405. package/src/plugins/builtin/treasury-auctions/types.ts +11 -1
  406. package/src/plugins/builtin/vol-surface/charts.tsx +1 -3
  407. package/src/plugins/builtin/vol-surface/client.ts +6 -2
  408. package/src/plugins/builtin/vol-surface/evidence.ts +11 -6
  409. package/src/plugins/builtin/vol-surface/headless.ts +124 -20
  410. package/src/plugins/builtin/vol-surface/model.ts +23 -11
  411. package/src/plugins/builtin/vol-surface/pane.tsx +38 -27
  412. package/src/plugins/builtin/vol-surface/tables.ts +124 -0
  413. package/src/plugins/builtin/world-indices/client.ts +22 -4
  414. package/src/plugins/builtin/world-indices/headless.ts +54 -27
  415. package/src/plugins/builtin/world-indices/model.ts +4 -2
  416. package/src/plugins/builtin/world-indices/table.tsx +13 -2
  417. package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +2 -0
  418. package/src/plugins/builtin/world-venue-map/basemap.ts +18 -0
  419. package/src/plugins/builtin/world-venue-map/country-labels.ts +78 -0
  420. package/src/plugins/builtin/world-venue-map/geo-series.ts +1 -1
  421. package/src/plugins/builtin/world-venue-map/geo-svg.tsx +2 -1
  422. package/src/plugins/builtin/world-venue-map/index.ts +6 -6
  423. package/src/plugins/builtin/world-venue-map/layered-pane.tsx +27 -14
  424. package/src/plugins/builtin/world-venue-map/layers.ts +68 -10
  425. package/src/plugins/builtin/world-venue-map/map.tsx +198 -62
  426. package/src/plugins/builtin/world-venue-map/model.ts +16 -0
  427. package/src/plugins/builtin/world-venue-map/natural-earth/index.chunk.ts +3 -0
  428. package/src/plugins/builtin/world-venue-map/natural-earth/labels.chunk.ts +244 -0
  429. package/src/plugins/builtin/world-venue-map/pane.tsx +16 -10
  430. package/src/plugins/builtin/yield-curve/index.tsx +1 -1
  431. package/src/plugins/builtin-editorial.ts +126 -0
  432. package/src/plugins/catalog-backend.ts +16 -9
  433. package/src/plugins/catalog-browser.ts +127 -63
  434. package/src/plugins/catalog-manifest.ts +73 -40
  435. package/src/plugins/catalog-ui.ts +26 -6
  436. package/src/plugins/extracted-plugins.ts +7 -1
  437. package/src/plugins/ownership.ts +150 -7
  438. package/src/plugins/plugin-functions.ts +54 -0
  439. package/src/plugins/plugin-off.ts +36 -0
  440. package/src/plugins/registry/host-actions.ts +16 -0
  441. package/src/plugins/registry/index.ts +84 -24
  442. package/src/plugins/registry/plugin-state.ts +25 -1
  443. package/src/plugins/runtime/context.tsx +29 -0
  444. package/src/react/input.ts +48 -1
  445. package/src/remote/app-host.tsx +5 -0
  446. package/src/remote/controller.ts +3 -53
  447. package/src/remote/matching.ts +69 -0
  448. package/src/remote/schema.ts +1 -1
  449. package/src/remote/semantic-tree.tsx +14 -0
  450. package/src/remote/types.ts +2 -0
  451. package/src/renderers/browser/app-services.ts +3 -1
  452. package/src/renderers/dom/data-table/dom.ts +31 -0
  453. package/src/renderers/dom/data-table/index.tsx +5 -0
  454. package/src/renderers/dom/desktop/icons.tsx +14 -0
  455. package/src/renderers/dom/desktop/query-bar.tsx +59 -32
  456. package/src/renderers/dom/host/box.tsx +113 -17
  457. package/src/renderers/dom/host/drag-shield.ts +35 -0
  458. package/src/renderers/dom/host/live-frame.ts +62 -0
  459. package/src/renderers/dom/host/mouse.ts +8 -1
  460. package/src/renderers/dom/host/scroll-box.tsx +6 -5
  461. package/src/renderers/dom/host/tabs.tsx +3 -2
  462. package/src/renderers/dom/input-host.tsx +6 -1
  463. package/src/renderers/dom/styles.css +26 -5
  464. package/src/renderers/electrobun/bun/desktop/backend-requests.ts +7 -0
  465. package/src/renderers/electrobun/bun/desktop/backend.ts +7 -1
  466. package/src/renderers/electrobun/bun/desktop/detached-windows.ts +12 -1
  467. package/src/renderers/electrobun/bun/desktop/initialization.ts +15 -1
  468. package/src/renderers/electrobun/shared/protocol.ts +12 -1
  469. package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +4 -1
  470. package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +101 -5
  471. package/src/renderers/electrobun/view/host/native.ts +0 -10
  472. package/src/renderers/electrobun/view/host/window-move.ts +28 -0
  473. package/src/renderers/electrobun/view/main.tsx +4 -1
  474. package/src/renderers/electrobun/view/remote/persistence.ts +15 -2
  475. package/src/renderers/electrobun/view/ui-host.tsx +2 -5
  476. package/src/renderers/opentui/input-host.tsx +6 -1
  477. package/src/renderers/opentui/start.tsx +9 -0
  478. package/src/renderers/opentui/ui-host.tsx +7 -1
  479. package/src/shares/portable-layout.ts +16 -6
  480. package/src/sources/gloomberb-cloud/index.ts +19 -10
  481. package/src/sources/gloomberb-cloud/normalizers.ts +20 -21
  482. package/src/sources/listing-symbols.ts +11 -5
  483. package/src/sources/provider-errors.ts +88 -3
  484. package/src/sources/provider-router/batches.ts +3 -3
  485. package/src/sources/provider-router/cached-routes.ts +8 -4
  486. package/src/sources/provider-router/financial-routes.ts +13 -7
  487. package/src/sources/provider-router/financials.ts +106 -16
  488. package/src/sources/provider-router/history.ts +27 -11
  489. package/src/sources/provider-router/index.ts +1 -1
  490. package/src/sources/provider-router/primary.ts +24 -6
  491. package/src/sources/sec-edgar.ts +68 -8
  492. package/src/state/pane-scroll-registry.tsx +67 -35
  493. package/src/sync/core-contributors.ts +4 -3
  494. package/src/test-support/cli-context.ts +2 -1
  495. package/src/test-support/data-provider.ts +34 -0
  496. package/src/test-support/margin-account.ts +108 -0
  497. package/src/test-support/shell-pane-keys.tsx +1 -0
  498. package/src/theme/series-colors.ts +46 -0
  499. package/src/theme/themes.ts +149 -0
  500. package/src/tickers/search/index.ts +22 -2
  501. package/src/tickers/search/ranking.ts +45 -1
  502. package/src/tickers/search/types.ts +3 -1
  503. package/src/time-series/resolution.ts +15 -0
  504. package/src/time-series/resolve.ts +1 -14
  505. package/src/types/config.ts +61 -1
  506. package/src/types/financials.ts +32 -3
  507. package/src/types/headless.ts +11 -0
  508. package/src/types/instrument.ts +8 -0
  509. package/src/types/plugin.ts +49 -3
  510. package/src/ui/host.tsx +16 -0
  511. package/src/ui/index.tsx +10 -3
  512. package/src/ui/scroll-box-axis.ts +26 -0
  513. package/src/utils/cli-output.ts +14 -1
  514. package/src/utils/currency-units.ts +8 -3
  515. package/src/utils/depositary-receipt.ts +54 -10
  516. package/src/utils/display-number.ts +63 -0
  517. package/src/utils/exchanges.ts +13 -0
  518. package/src/utils/format.ts +2 -1
  519. package/src/utils/fundamentals.ts +17 -1
  520. package/src/utils/fx-market-hours.ts +34 -0
  521. package/src/utils/option-expiry.ts +126 -0
  522. package/src/utils/price-history-integrity.ts +19 -6
  523. package/src/utils/price-history.ts +39 -6
  524. package/src/utils/rpc-timeout-error.ts +6 -2
  525. package/src/utils/sec-eps-basis.ts +159 -30
  526. package/src/utils/sec.ts +38 -34
  527. package/src/utils/throttled-fetch.ts +51 -22
@@ -12,6 +12,7 @@ import { debtMaturitiesModule } from "./builtin/debt-maturities";
12
12
  import { revenueBreakdownModule } from "./builtin/revenue-breakdown";
13
13
  import { mnaModule } from "./builtin/mna";
14
14
  import { cryptoBoardModule } from "./builtin/crypto-board";
15
+ import { shortInterestModule } from "./builtin/short-interest";
15
16
  import { shortVolumeModule } from "./builtin/short-volume";
16
17
  import { socialMentionsModule } from "./builtin/social-mentions";
17
18
  import { timeSalesModule } from "./builtin/time-sales";
@@ -93,11 +94,21 @@ import { moneyMarketsModule } from "./builtin/money-markets";
93
94
  import { ratePathModule } from "./builtin/rate-path";
94
95
  import {
95
96
  applicationPluginMeta,
96
- macroPluginMeta,
97
- marketOverviewPluginMeta,
97
+ creditPluginMeta,
98
+ earningsPluginMeta,
99
+ filingsPluginMeta,
100
+ optionsVolatilityPluginMeta,
101
+ ownershipPluginMeta,
102
+ ratesMacroPluginMeta,
103
+ tickerCorePluginMeta,
104
+ altDataPluginMeta,
105
+ cryptoPluginMeta,
106
+ futuresCommoditiesPluginMeta,
107
+ globalMarketsPluginMeta,
108
+ quantPluginMeta,
109
+ screenersPluginMeta,
98
110
  newsPluginMeta,
99
111
  portfolioPluginMeta,
100
- tickerResearchPluginMeta,
101
112
  } from "./builtin/builtin-plugin-meta";
102
113
 
103
114
  const browserApplicationPlugin = composeBuiltinPlugin({
@@ -110,84 +121,107 @@ const browserPortfolioPlugin = composeBuiltinPlugin({
110
121
  modules: [portfolioListModule, portfolioAnalyticsModule, positionSizerModule],
111
122
  });
112
123
 
113
- const browserTickerResearchPlugin = composeBuiltinPlugin({
114
- ...tickerResearchPluginMeta,
124
+ // Ticker Research's successors with the modules it had on the web. Holders,
125
+ // 13F funds and the Congress tab are terminal-only, so Ownership & Insiders
126
+ // is smaller here.
127
+ const browserTickerCorePlugin = composeBuiltinPlugin({
128
+ ...tickerCorePluginMeta,
115
129
  modules: [
116
130
  tickerDetailModule,
117
131
  chartComposerModule,
132
+ researchModule,
133
+ estimateRevisionsModule,
134
+ companyKpisModule,
135
+ revenueBreakdownModule,
136
+ browserDividendYieldModule,
137
+ reverseDcfModule,
138
+ peBandModule,
139
+ executivesModule,
140
+ timeSalesModule,
141
+ ],
142
+ });
143
+
144
+ const browserOptionsVolatilityPlugin = composeBuiltinPlugin({
145
+ ...optionsVolatilityPluginMeta,
146
+ modules: [
118
147
  optionsModule,
119
148
  optionsPositioningModule,
120
149
  optionsCalculatorModule,
121
150
  optionsScenarioModule,
122
151
  volSurfaceModule,
123
152
  realizedVolModule,
124
- seasonalityModule,
125
- earningsRippleModule,
126
- reverseDcfModule,
127
- peBandModule,
128
- macroDayModule,
129
153
  ivHistoryModule,
130
- backtestModule,
131
- timeSalesModule,
132
- estimateRevisionsModule,
133
- researchModule,
134
- shortVolumeModule,
135
- socialMentionsModule,
136
- debtMaturitiesModule,
137
- revenueBreakdownModule,
138
- supplyChainModule,
139
- creditDocumentsModule,
140
- companyAttentionModule,
141
- catalystsModule,
142
- companyKpisModule,
143
- awardsModule,
144
- exposureModule,
145
- mnaModule,
146
- browserDividendYieldModule,
147
- earningsCallsModule,
148
- executivesModule,
149
- riskFactorsModule,
150
- filingEventsModule,
151
- // Filings and Form 4s come through Gloom Cloud, behind a sign-in wall.
152
- secModule,
154
+ ],
155
+ });
156
+
157
+ const browserOwnershipPlugin = composeBuiltinPlugin({
158
+ ...ownershipPluginMeta,
159
+ description: "Insider trades, and short interest and volume.",
160
+ modules: [
161
+ // Form 4s come through Gloom Cloud, behind a sign-in wall.
153
162
  insiderModule,
154
- // Hiring data is a Gloom Cloud Pro dataset.
155
- jobsModule,
163
+ // Daily volume shares open this pane.
164
+ shortInterestModule,
165
+ shortVolumeModule,
156
166
  ],
157
167
  });
158
168
 
169
+ const browserFilingsPlugin = composeBuiltinPlugin({
170
+ ...filingsPluginMeta,
171
+ // Filings come through Gloom Cloud, behind a sign-in wall.
172
+ modules: [secModule, riskFactorsModule, filingEventsModule, catalystsModule, mnaModule],
173
+ });
174
+
159
175
  const browserNewsPlugin = composeBuiltinPlugin({
160
176
  ...newsPluginMeta,
161
177
  modules: [tickerNewsModule, browserNewsWireModule],
162
178
  });
163
179
 
164
- const browserMarketOverviewPlugin = composeBuiltinPlugin({
165
- ...marketOverviewPluginMeta,
166
- description: "Global indices, scanners, sectors, FX, futures, and correlations.",
180
+ // Market Overview's successors with the modules it had on the web: all of
181
+ // them but top movers.
182
+ const browserGlobalMarketsPlugin = composeBuiltinPlugin({
183
+ ...globalMarketsPluginMeta,
184
+ modules: [worldIndicesModule, worldVenueMapModule, sectorsModule, fxMatrixModule, relativeRotationModule],
185
+ });
186
+
187
+ const browserScreenersPlugin = composeBuiltinPlugin({
188
+ ...screenersPluginMeta,
189
+ description: "Equity screener, session highs and lows, and unusual options flow.",
190
+ modules: [equityScreenerModule, scannerModule],
191
+ });
192
+
193
+ const browserFuturesCommoditiesPlugin = composeBuiltinPlugin({
194
+ ...futuresCommoditiesPluginMeta,
195
+ modules: [futuresModule, futuresCurveModule, cotModule, doeModule],
196
+ });
197
+
198
+ const browserCryptoPlugin = composeBuiltinPlugin({
199
+ ...cryptoPluginMeta,
200
+ modules: [cryptoBoardModule, perpsModule],
201
+ });
202
+
203
+ const browserAltDataPlugin = composeBuiltinPlugin({
204
+ ...altDataPluginMeta,
167
205
  modules: [
168
- correlationModule,
169
- relativeRotationModule,
170
- equityScreenerModule,
171
- worldIndicesModule,
172
- worldVenueMapModule,
173
- scannerModule,
174
- sectorsModule,
175
- fxMatrixModule,
176
- futuresModule,
177
- futuresCurveModule,
178
- cotModule,
179
- doeModule,
180
- gpuModule,
181
- attentionModule,
182
- powerModule,
183
- cryptoBoardModule,
184
- perpsModule,
206
+ ...[attentionModule, gpuModule, powerModule].map((module) => ({ module, stateId: "market-overview" })),
207
+ supplyChainModule,
208
+ exposureModule,
209
+ awardsModule,
210
+ companyAttentionModule,
211
+ // Hiring data is a Gloom Cloud Pro dataset.
212
+ jobsModule,
213
+ socialMentionsModule,
185
214
  ],
186
215
  });
187
216
 
188
- const browserMacroPlugin = composeBuiltinPlugin({
189
- ...macroPluginMeta,
190
- description: "Economic calendar, rates, volatility, credit spreads, single-name, index and sovereign CDS, and Treasury auctions.",
217
+ const browserQuantPlugin = composeBuiltinPlugin({
218
+ ...quantPluginMeta,
219
+ modules: [{ module: correlationModule, stateId: "market-overview" }, backtestModule, seasonalityModule, macroDayModule],
220
+ });
221
+
222
+ // The same panes as on the terminal.
223
+ const browserRatesMacroPlugin = composeBuiltinPlugin({
224
+ ...ratesMacroPluginMeta,
191
225
  modules: [
192
226
  macroSharedResourcesModule,
193
227
  economicCalendarModule,
@@ -196,14 +230,34 @@ const browserMacroPlugin = composeBuiltinPlugin({
196
230
  yieldCurveModule,
197
231
  ratePathModule,
198
232
  moneyMarketsModule,
199
- bondCalculatorModule,
200
233
  centralBankRatesModule,
201
234
  volatilityModule,
202
- creditConditionsModule,
203
235
  marketValuationModule,
236
+ ],
237
+ });
238
+
239
+ const browserCreditPlugin = composeBuiltinPlugin({
240
+ ...creditPluginMeta,
241
+ modules: [
204
242
  cdsModule,
205
243
  creditBoardsModule,
244
+ creditConditionsModule,
206
245
  treasuryAuctionsModule,
246
+ bondCalculatorModule,
247
+ { module: creditDocumentsModule, stateId: "ticker-research" },
248
+ { module: debtMaturitiesModule, stateId: "ticker-research" },
249
+ ],
250
+ });
251
+
252
+ // The web app has never carried the earnings calendar. The call transcripts
253
+ // and the ripple ran with Ticker Research here, so their pane state is under
254
+ // its namespace, not Macro's as on the terminal.
255
+ const browserEarningsPlugin = composeBuiltinPlugin({
256
+ ...earningsPluginMeta,
257
+ description: "Earnings call transcripts, and the earnings ripple through customers and suppliers.",
258
+ modules: [
259
+ { module: earningsCallsModule, stateId: "ticker-research" },
260
+ { module: earningsRippleModule, stateId: "ticker-research" },
207
261
  ],
208
262
  });
209
263
 
@@ -215,10 +269,18 @@ const browserMacroPlugin = composeBuiltinPlugin({
215
269
  export const browserBuiltinPlugins: readonly GloomPlugin[] = [
216
270
  browserGloomberbCloudPlugin,
217
271
  browserPortfolioPlugin,
218
- browserTickerResearchPlugin,
272
+ browserTickerCorePlugin,
273
+ browserOptionsVolatilityPlugin,
274
+ browserOwnershipPlugin,
275
+ browserFilingsPlugin,
219
276
  browserApplicationPlugin,
220
277
  browserNewsPlugin,
221
- browserMarketOverviewPlugin,
278
+ browserGlobalMarketsPlugin,
279
+ browserScreenersPlugin,
280
+ browserFuturesCommoditiesPlugin,
281
+ browserCryptoPlugin,
282
+ browserAltDataPlugin,
283
+ browserQuantPlugin,
222
284
  marketHeatmapPlugin,
223
285
  marketHaltsPlugin,
224
286
  fearGreedPlugin,
@@ -227,7 +289,9 @@ export const browserBuiltinPlugins: readonly GloomPlugin[] = [
227
289
  clinicalTrialsPlugin,
228
290
  commentLettersPlugin,
229
291
  openFdaPlugin,
230
- browserMacroPlugin,
292
+ browserRatesMacroPlugin,
293
+ browserCreditPlugin,
294
+ browserEarningsPlugin,
231
295
  alertsPlugin,
232
296
  researchSearchPlugin,
233
297
  ];
@@ -1,5 +1,10 @@
1
+ import type { FunctionAccess } from "../cli/pane-functions/function-help";
2
+ import type { GloomPlugin, PluginTarget } from "../types/plugin";
1
3
  import { ABSORBED_PLUGINS } from "./absorbed";
4
+ import { highlightedCodes, pluginFunctions } from "./plugin-functions";
5
+ import { BUILTIN_EDITORIAL } from "./builtin-editorial";
2
6
  import { getPluginCatalog } from "./catalog";
7
+ import { browserBuiltinPlugins } from "./catalog-browser";
3
8
 
4
9
  /**
5
10
  * The public description of the plugins that ship inside Gloomberb.
@@ -8,71 +13,80 @@ import { getPluginCatalog } from "./catalog";
8
13
  * built-in has no repository to read metadata from. Hand-maintaining that half
9
14
  * elsewhere meant it silently drifted every time a built-in changed its panes
10
15
  * or description, so it is derived from the live catalog here instead and
11
- * checked against a committed snapshot in CI.
16
+ * checked against a committed snapshot in CI. Editorial copy the catalog does
17
+ * not carry lives in `builtin-editorial.ts`.
18
+ *
19
+ * Fields added since the first version are optional for the directory, which
20
+ * keeps reading a manifest without them.
12
21
  */
13
22
 
23
+ /** A function the plugin adds, as the directory lists it. */
24
+ interface BuiltinShortcutManifestEntry {
25
+ code: string;
26
+ name: string;
27
+ description: string;
28
+ /** Free gets only the upgrade (`pro`) or a preview (`preview`); absent when Free gets it all. */
29
+ access?: FunctionAccess;
30
+ /** Where it runs, when that is narrower than the plugin: a code the web app lacks. */
31
+ targets?: PluginTarget[];
32
+ }
33
+
14
34
  interface BuiltinPluginManifestEntry {
15
35
  id: string;
16
36
  name: string;
17
37
  description: string;
38
+ /** Ten words at most, for a card. */
39
+ tagline?: string;
18
40
  /** Curated, since the catalog has no notion of categories. */
19
41
  categories: string[];
20
42
  toggleable: boolean;
21
43
  featured?: true;
22
44
  /** Path to artwork in this repo, resolved by the directory against HEAD. */
23
45
  icon?: string;
46
+ /** Everywhere the app runs, and the web when the browser catalog carries it. */
47
+ targets: PluginTarget[];
24
48
  contributes: {
25
49
  panes: string[];
26
50
  capabilities: string[];
27
51
  broker: boolean;
52
+ shortcuts?: BuiltinShortcutManifestEntry[];
28
53
  };
54
+ /** The codes a card shows. */
55
+ highlights?: string[];
56
+ /** Codes whose reviewed capture the directory shows, best first. */
57
+ screenshots?: string[];
29
58
  }
30
59
 
31
- /**
32
- * Editorial metadata the runtime catalog does not carry. Anything missing here
33
- * is reported by `generate-plugin-manifest.ts` rather than silently defaulted,
34
- * so a new built-in cannot slip into the directory uncategorised.
35
- */
36
- const EDITORIAL: Record<
37
- string,
38
- { categories: string[]; featured?: true; icon?: string }
39
- > = {
40
- "gloomberb-cloud": {
41
- categories: ["data", "cloud"],
42
- featured: true,
43
- icon: "plugin-icons/gloomberb-cloud.webp",
44
- },
45
- alerts: { categories: ["alerts"] },
46
- application: { categories: ["core"] },
47
- broker: { categories: ["broker"] },
48
- "clinical-trials": { categories: ["research"] },
49
- "comment-letters": { categories: ["research"] },
50
- "custom-view": { categories: ["data", "productivity"] },
51
- debug: { categories: ["developer"] },
52
- "fear-greed": { categories: ["markets", "sentiment"], icon: "plugin-icons/fear-greed.webp" },
53
- members: { categories: ["markets", "research"] },
54
- "ipo-calendar": { categories: ["macro", "markets"], icon: "plugin-icons/ipo-calendar.webp" },
55
- macro: { categories: ["macro"] },
56
- "market-halts": { categories: ["markets"], icon: "plugin-icons/market-halts.webp" },
57
- "market-heatmap": { categories: ["markets"], icon: "plugin-icons/market-heatmap.webp" },
58
- "market-overview": { categories: ["markets"] },
59
- news: { categories: ["news"] },
60
- notes: { categories: ["productivity"] },
61
- openfda: { categories: ["research"] },
62
- portfolio: { categories: ["portfolio"] },
63
- "research-search": { categories: ["research", "news"] },
64
- "ticker-research": { categories: ["research"] },
65
- };
66
-
67
60
  export interface BuiltinManifest {
68
61
  version: 1;
69
62
  plugins: BuiltinPluginManifestEntry[];
70
63
  /** Built-in ids with no editorial entry; a non-empty list fails generation. */
71
64
  uncategorised: string[];
65
+ /** Editorial highlights or screenshots naming a code the plugin lacks, as `id:CODE`; these fail generation too. */
66
+ unknownCodes: string[];
67
+ }
68
+
69
+ const NATIVE_TARGETS: PluginTarget[] = ["cli", "tui", "desktop"];
70
+
71
+ /**
72
+ * The codes a plugin's pane templates answer to. Commands a plugin registers
73
+ * while it sets up (ALRT, NOTE) are not known until it runs, so they are not
74
+ * listed; the Plugins pane reads them from the running app.
75
+ */
76
+ function functionsOf(plugin: GloomPlugin) {
77
+ return pluginFunctions({
78
+ templates: (plugin.paneTemplates ?? []).map((template) => ({
79
+ label: template.label,
80
+ prefix: template.shortcut?.prefix,
81
+ description: template.description,
82
+ })),
83
+ });
72
84
  }
73
85
 
74
86
  export function buildBuiltinManifest(): BuiltinManifest {
75
87
  const uncategorised: string[] = [];
88
+ const unknownCodes: string[] = [];
89
+ const web = new Map(browserBuiltinPlugins.map((plugin) => [plugin.id, plugin]));
76
90
 
77
91
  const plugins = getPluginCatalog()
78
92
  // Built in again, but released apps from before that still install these
@@ -80,18 +94,34 @@ export function buildBuiltinManifest(): BuiltinManifest {
80
94
  // id a built-in claims. This build shows that row as its built-in, so they
81
95
  // join the manifest once those releases have updated.
82
96
  .filter(({ plugin }) => !ABSORBED_PLUGINS.some((absorbed) => absorbed.id === plugin.id))
83
- .map(({ plugin }) => {
84
- const editorial = EDITORIAL[plugin.id];
97
+ .map(({ plugin }): BuiltinPluginManifestEntry => {
98
+ const editorial = BUILTIN_EDITORIAL[plugin.id];
85
99
  if (!editorial) uncategorised.push(plugin.id);
86
100
 
101
+ // Some built-ins carry fewer functions in the web app.
102
+ const webPlugin = web.get(plugin.id);
103
+ const webCodes = new Set(webPlugin ? functionsOf(webPlugin).map((fn) => fn.code) : []);
104
+ const functions = functionsOf(plugin);
105
+ const shortcuts = functions.map((fn): BuiltinShortcutManifestEntry => ({
106
+ ...fn,
107
+ ...(webPlugin && !webCodes.has(fn.code) ? { targets: [...NATIVE_TARGETS] } : {}),
108
+ }));
109
+ const codes = new Set(functions.map((fn) => fn.code));
110
+ for (const code of [...editorial?.highlights ?? [], ...editorial?.screenshots ?? []]) {
111
+ if (!codes.has(code)) unknownCodes.push(`${plugin.id}:${code}`);
112
+ }
113
+ const screenshots = (editorial?.screenshots ?? []).filter((code) => codes.has(code));
114
+
87
115
  return {
88
116
  id: plugin.id,
89
117
  name: plugin.name,
90
118
  description: plugin.description ?? "",
119
+ ...(editorial?.tagline ? { tagline: editorial.tagline } : {}),
91
120
  categories: editorial?.categories ?? [],
92
121
  toggleable: plugin.toggleable === true,
93
122
  ...(editorial?.featured ? { featured: true as const } : {}),
94
123
  ...(editorial?.icon ? { icon: editorial.icon } : {}),
124
+ targets: webPlugin ? [...NATIVE_TARGETS, "web"] : [...NATIVE_TARGETS],
95
125
  contributes: {
96
126
  panes: (plugin.panes ?? []).map((pane) => pane.id).sort(),
97
127
  capabilities: (plugin.capabilities ?? [])
@@ -101,10 +131,13 @@ export function buildBuiltinManifest(): BuiltinManifest {
101
131
  })
102
132
  .sort(),
103
133
  broker: !!plugin.broker,
134
+ ...(shortcuts.length > 0 ? { shortcuts } : {}),
104
135
  },
136
+ ...(functions.length > 0 ? { highlights: highlightedCodes(plugin.id, functions) } : {}),
137
+ ...(screenshots.length > 0 ? { screenshots } : {}),
105
138
  };
106
139
  })
107
140
  .sort((left, right) => left.id.localeCompare(right.id));
108
141
 
109
- return { version: 1, plugins, uncategorised: uncategorised.sort() };
142
+ return { version: 1, plugins, uncategorised: uncategorised.sort(), unknownCodes };
110
143
  }
@@ -15,24 +15,42 @@ import { clinicalTrialsPlugin } from "./builtin/clinical-trials";
15
15
  import { commentLettersPlugin } from "./builtin/comment-letters";
16
16
  import { openFdaPlugin } from "./builtin/openfda";
17
17
  import {
18
+ altDataPlugin,
18
19
  applicationPlugin,
19
20
  brokerPlugin,
20
- macroPlugin,
21
- marketOverviewPlugin,
21
+ creditPlugin,
22
+ cryptoPlugin,
23
+ earningsPlugin,
24
+ filingsPlugin,
25
+ futuresCommoditiesPlugin,
26
+ globalMarketsPlugin,
27
+ optionsVolatilityPlugin,
28
+ ownershipPlugin,
22
29
  portfolioPlugin,
23
- tickerResearchPlugin,
30
+ quantPlugin,
31
+ ratesMacroPlugin,
32
+ screenersPlugin,
33
+ tickerCorePlugin,
24
34
  } from "./builtin/composite-plugins";
25
35
 
26
36
  export const uiBuiltinPlugins: GloomPlugin[] = [
27
37
  gloomberbCloudPlugin,
28
38
  portfolioPlugin,
29
- tickerResearchPlugin,
39
+ tickerCorePlugin,
40
+ optionsVolatilityPlugin,
41
+ ownershipPlugin,
42
+ filingsPlugin,
30
43
  brokerPlugin,
31
44
  applicationPlugin,
32
45
  newsPlugin,
33
46
  notesPlugin,
34
47
  customViewPlugin,
35
- marketOverviewPlugin,
48
+ globalMarketsPlugin,
49
+ screenersPlugin,
50
+ futuresCommoditiesPlugin,
51
+ cryptoPlugin,
52
+ altDataPlugin,
53
+ quantPlugin,
36
54
  marketHeatmapPlugin,
37
55
  marketHaltsPlugin,
38
56
  fearGreedPlugin,
@@ -41,7 +59,9 @@ export const uiBuiltinPlugins: GloomPlugin[] = [
41
59
  clinicalTrialsPlugin,
42
60
  commentLettersPlugin,
43
61
  openFdaPlugin,
44
- macroPlugin,
62
+ ratesMacroPlugin,
63
+ creditPlugin,
64
+ earningsPlugin,
45
65
  alertsPlugin,
46
66
  researchSearchPlugin,
47
67
  ];
@@ -4,6 +4,7 @@ import { join } from "path";
4
4
  import type { AppConfig } from "../types/config";
5
5
  import { debugLog } from "../utils/debug-log";
6
6
  import { getPluginsDir } from "./loader";
7
+ import { encodeBuiltinDisabledPluginIds } from "./ownership";
7
8
  import { pluginDirectoryNames } from "./plugin-names";
8
9
 
9
10
  const log = debugLog.createLogger("plugin-seed");
@@ -63,7 +64,12 @@ export async function seedExtractedPlugins(
63
64
  pluginsDir: string = getPluginsDir(),
64
65
  ): Promise<SeedResult> {
65
66
  const alreadySeeded = new Set(config.seededPlugins ?? []);
66
- const disabled = new Set(config.disabledPlugins ?? []);
67
+ // A previous owner that is now a group of built-ins counts as off only while
68
+ // all of them are, which is when its id is saved.
69
+ const disabled = new Set([
70
+ ...config.disabledPlugins ?? [],
71
+ ...encodeBuiltinDisabledPluginIds(config.disabledPlugins ?? []),
72
+ ]);
67
73
 
68
74
  const result: SeedResult = { installed: [], failed: [], seeded: [...alreadySeeded] };
69
75