gloomberb 0.17.1 → 0.17.3

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 (237) hide show
  1. package/package.json +1 -1
  2. package/src/{plugins/builtin/cloud → account}/auth-dialog.tsx +7 -7
  3. package/src/api-client/earnings.ts +4 -2
  4. package/src/api-client/futures-curve.ts +16 -0
  5. package/src/api-client/index.ts +18 -8
  6. package/src/api-client/types.ts +3 -1
  7. package/src/app/global-shortcuts.ts +10 -0
  8. package/src/app/keybindings/actions.ts +16 -0
  9. package/src/app/runtime/desktop-deeplink.ts +1 -1
  10. package/src/app.tsx +1 -1
  11. package/src/architecture/core-builtin-allowlist.json +4 -9
  12. package/src/cli/commands/market.ts +94 -25
  13. package/src/cli/commands/options-chain.ts +29 -33
  14. package/src/cli/commands/options-leaps.ts +462 -63
  15. package/src/cli/commands/search.ts +53 -9
  16. package/src/cli/commands/ticker.ts +100 -21
  17. package/src/cli/desktop-pane-shot.ts +34 -9
  18. package/src/cli/fx-pair.ts +17 -0
  19. package/src/cli/glossary.ts +134 -6
  20. package/src/cli/history-rows.ts +16 -4
  21. package/src/cli/index.ts +44 -12
  22. package/src/cli/known-gaps.ts +43 -2
  23. package/src/cli/listing-arg.ts +19 -4
  24. package/src/cli/listing-suggestion.ts +33 -2
  25. package/src/cli/pane-functions/catalog.ts +6 -3
  26. package/src/cli/pane-functions/dom.ts +56 -8
  27. package/src/cli/pane-functions/freshness.ts +48 -5
  28. package/src/cli/pane-functions/function-help.ts +2 -2
  29. package/src/cli/pane-functions/headless.ts +85 -19
  30. package/src/cli/pane-functions/index.ts +65 -7
  31. package/src/cli/pane-functions/market-session.ts +69 -6
  32. package/src/cli/pane-functions/report-notices.ts +15 -0
  33. package/src/cli/pane-functions/resolver.ts +4 -2
  34. package/src/cli/pane-functions/screenshot.ts +14 -1
  35. package/src/cli/scroll-truncation.ts +5 -1
  36. package/src/cli/symbol-args.ts +60 -3
  37. package/src/cli/symbol-list.ts +19 -7
  38. package/src/cli/unknown-command.ts +70 -0
  39. package/src/components/chart/native/surface/visibility.ts +37 -7
  40. package/src/components/command-bar/workflow/builtin.ts +2 -2
  41. package/src/components/command-bar/workflow/collection-actions.ts +1 -1
  42. package/src/components/feedback-dialog.tsx +1 -1
  43. package/src/components/layout/header.tsx +348 -102
  44. package/src/components/layout/shell/index.tsx +1 -1
  45. package/src/components/layout/status-bar-groups.ts +1 -1
  46. package/src/components/layout/status-bar.tsx +2 -2
  47. package/src/components/markdown-text.tsx +50 -64
  48. package/src/components/market-board/index.tsx +12 -6
  49. package/src/components/reader/article-reader.tsx +1 -1
  50. package/src/components/reader/detail-reader.tsx +37 -12
  51. package/src/components/reader/reader-text.tsx +32 -17
  52. package/src/components/ticker/badge/index.tsx +2 -0
  53. package/src/components/ui/display.tsx +6 -1
  54. package/src/components/ui/external-link.tsx +10 -2
  55. package/src/data/memory-resource-store.ts +1 -1
  56. package/src/data/resource-store.ts +13 -1
  57. package/src/docs/snapshot.json +13 -13
  58. package/src/i18n/es.ts +1 -0
  59. package/src/i18n/ja.ts +1 -0
  60. package/src/i18n/ko.ts +1 -0
  61. package/src/i18n/zh-cn.ts +1 -0
  62. package/src/i18n/zh-tw.ts +1 -0
  63. package/src/layout-marketplace/gallery.tsx +2 -2
  64. package/src/layout-marketplace/linked-sync.ts +1 -1
  65. package/src/market-data/futures-contract.ts +10 -0
  66. package/src/market-data/market/format.ts +7 -2
  67. package/src/market-data/market/freshness.ts +28 -1
  68. package/src/market-data/published-apac-sessions.ts +12 -2
  69. package/src/market-data/quotes/regular-session-valuation.ts +32 -1
  70. package/src/market-data/quotes/resolution.ts +2 -0
  71. package/src/plugins/builtin/account-management/pane.tsx +17 -13
  72. package/src/plugins/builtin/attention/headless.ts +19 -10
  73. package/src/plugins/builtin/attention/model.ts +22 -0
  74. package/src/plugins/builtin/bond-calculator/pane.tsx +2 -1
  75. package/src/plugins/builtin/changelog/index.tsx +11 -8
  76. package/src/plugins/builtin/chart-composer/editor/desktop-view.tsx +2 -0
  77. package/src/plugins/builtin/chart-composer/index.tsx +1 -1
  78. package/src/plugins/builtin/chart-composer/presets.ts +33 -1
  79. package/src/plugins/builtin/chat/attachments/desktop.tsx +2 -1
  80. package/src/plugins/builtin/chat/attachments/model.ts +5 -3
  81. package/src/plugins/builtin/chat/channel-labels.ts +2 -2
  82. package/src/plugins/builtin/chat/content/channel-navigation.ts +1 -1
  83. package/src/plugins/builtin/chat/content/footer.tsx +6 -0
  84. package/src/plugins/builtin/chat/content/index.tsx +2 -2
  85. package/src/plugins/builtin/chat/content/open-targets.ts +13 -4
  86. package/src/plugins/builtin/chat/content/transcript.tsx +2 -0
  87. package/src/plugins/builtin/chat/content/whole-message-copy.ts +70 -0
  88. package/src/plugins/builtin/chat/conversations.ts +1 -1
  89. package/src/plugins/builtin/chat/index.tsx +2 -2
  90. package/src/plugins/builtin/chat/layout.ts +91 -31
  91. package/src/plugins/builtin/chat/markdown.ts +94 -0
  92. package/src/plugins/builtin/chat/message/desktop.tsx +3 -2
  93. package/src/plugins/builtin/chat/message/inline-tokens.tsx +197 -80
  94. package/src/plugins/builtin/chat/message/render-state.ts +3 -0
  95. package/src/plugins/builtin/chat/message/terminal.tsx +4 -4
  96. package/src/plugins/builtin/chat/share/flow.tsx +1 -1
  97. package/src/plugins/builtin/chat/sidebar-rows.ts +1 -1
  98. package/src/plugins/builtin/chat/sidebar.tsx +2 -2
  99. package/src/plugins/builtin/chat/unread-inbox-pane.tsx +2 -2
  100. package/src/plugins/builtin/cloud/auth-actions.tsx +1 -1
  101. package/src/plugins/builtin/cloud/auth-commands.ts +1 -1
  102. package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +1 -1
  103. package/src/plugins/builtin/cloud/team/acm-tab.tsx +3 -3
  104. package/src/plugins/builtin/cloud/team/capability.ts +2 -2
  105. package/src/plugins/builtin/cloud/team/command.ts +4 -4
  106. package/src/plugins/builtin/cloud/team/module.tsx +3 -3
  107. package/src/plugins/builtin/cloud/team/pane-model.ts +2 -2
  108. package/src/plugins/builtin/cloud/team/pane-sections.tsx +1 -1
  109. package/src/plugins/builtin/cloud/team/pane-ui.tsx +1 -1
  110. package/src/plugins/builtin/cloud/team/pane.tsx +3 -3
  111. package/src/plugins/builtin/cloud/team/status-widget.tsx +3 -3
  112. package/src/plugins/builtin/cloud/team/team-state-host.ts +1 -1
  113. package/src/plugins/builtin/cloud/team/views.ts +2 -2
  114. package/src/plugins/builtin/cloud/thesis/board-pane.tsx +1 -1
  115. package/src/plugins/builtin/cloud/thesis/detail.tsx +1 -1
  116. package/src/plugins/builtin/cloud/thesis/exposure.ts +18 -2
  117. package/src/plugins/builtin/cloud/thesis/ticker-tab.tsx +1 -1
  118. package/src/plugins/builtin/cloud/upgrade-command.ts +1 -1
  119. package/src/plugins/builtin/company-attention/headless.ts +8 -5
  120. package/src/plugins/builtin/company-attention/model.ts +53 -2
  121. package/src/plugins/builtin/company-attention/pane.tsx +1 -1
  122. package/src/plugins/builtin/congress-trades/detail.tsx +7 -4
  123. package/src/plugins/builtin/congress-trades/pane.tsx +3 -1
  124. package/src/plugins/builtin/correlation/relationship/pane.tsx +3 -7
  125. package/src/plugins/builtin/cot/client.ts +12 -4
  126. package/src/plugins/builtin/cot/pane.tsx +2 -2
  127. package/src/plugins/builtin/crypto-board/model.ts +7 -3
  128. package/src/plugins/builtin/custom-view/pane.tsx +2 -2
  129. package/src/plugins/builtin/debt-maturities/pane.tsx +1 -6
  130. package/src/plugins/builtin/debug/index.tsx +15 -15
  131. package/src/plugins/builtin/dividend-yield/client.ts +8 -1
  132. package/src/plugins/builtin/dividend-yield/headless.ts +11 -2
  133. package/src/plugins/builtin/dividend-yield/pane.tsx +8 -5
  134. package/src/plugins/builtin/docs/blocks.tsx +13 -2
  135. package/src/plugins/builtin/docs/index.tsx +5 -3
  136. package/src/plugins/builtin/docs/pane.tsx +24 -6
  137. package/src/plugins/builtin/docs/targets.ts +5 -3
  138. package/src/plugins/builtin/earnings/board-model.ts +18 -1
  139. package/src/plugins/builtin/earnings/board-table.ts +18 -3
  140. package/src/plugins/builtin/earnings/headless.ts +13 -2
  141. package/src/plugins/builtin/earnings/history-model.ts +1 -1
  142. package/src/plugins/builtin/earnings/history-table.ts +2 -2
  143. package/src/plugins/builtin/earnings-calls/data.ts +22 -0
  144. package/src/plugins/builtin/earnings-calls/pane.tsx +24 -14
  145. package/src/plugins/builtin/equity-screener/headless.ts +4 -3
  146. package/src/plugins/builtin/equity-screener/live.ts +27 -1
  147. package/src/plugins/builtin/equity-screener/pane.tsx +21 -2
  148. package/src/plugins/builtin/fear-greed/charts.tsx +5 -1
  149. package/src/plugins/builtin/fear-greed/pane.tsx +1 -1
  150. package/src/plugins/builtin/futures/index.tsx +32 -4
  151. package/src/plugins/builtin/futures/model.ts +65 -3
  152. package/src/plugins/builtin/futures/table.tsx +31 -11
  153. package/src/plugins/builtin/futures/use-board-terms.ts +89 -0
  154. package/src/plugins/builtin/help/feedback-tab.tsx +1 -1
  155. package/src/plugins/builtin/holders/pane.tsx +6 -1
  156. package/src/plugins/builtin/mna/client.ts +12 -2
  157. package/src/plugins/builtin/mna/detail.tsx +2 -2
  158. package/src/plugins/builtin/mna/pane.tsx +2 -2
  159. package/src/plugins/builtin/notes/index.tsx +1 -1
  160. package/src/plugins/builtin/notes/owner.tsx +7 -6
  161. package/src/plugins/builtin/notes/ticker-notes-tab.tsx +2 -3
  162. package/src/plugins/builtin/options/carry.ts +36 -0
  163. package/src/plugins/builtin/options/open-interest-as-of.ts +16 -5
  164. package/src/plugins/builtin/options/view.tsx +19 -7
  165. package/src/plugins/builtin/options-calculator/pane.tsx +58 -4
  166. package/src/plugins/builtin/options-calculator/premium-history.ts +34 -0
  167. package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +8 -5
  168. package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +4 -3
  169. package/src/plugins/builtin/portfolio-list/cli/shared.ts +9 -0
  170. package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +6 -3
  171. package/src/plugins/builtin/portfolio-list/mutations.ts +1 -1
  172. package/src/plugins/builtin/portfolio-list/pane/remove-ticker.ts +1 -1
  173. package/src/plugins/builtin/research/corporate-actions-pane.tsx +4 -2
  174. package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +2 -9
  175. package/src/plugins/builtin/research/event-model.ts +21 -4
  176. package/src/plugins/builtin/research/headless-schema.ts +31 -1
  177. package/src/plugins/builtin/research/relative-valuation-columns.ts +289 -0
  178. package/src/plugins/builtin/research/relative-valuation-currency.ts +164 -0
  179. package/src/plugins/builtin/research/relative-valuation-headless.ts +94 -11
  180. package/src/plugins/builtin/research/relative-valuation-model.ts +4 -1
  181. package/src/plugins/builtin/research/relative-valuation-pane.tsx +13 -4
  182. package/src/plugins/builtin/research/relative-valuation-peers.ts +302 -0
  183. package/src/plugins/builtin/research-search/data.ts +11 -0
  184. package/src/plugins/builtin/research-search/pane.tsx +13 -2
  185. package/src/plugins/builtin/scanner/hilo-pane.tsx +7 -17
  186. package/src/plugins/builtin/seasonality/client.ts +23 -0
  187. package/src/plugins/builtin/seasonality/pane.tsx +4 -2
  188. package/src/plugins/builtin/sectors/index.tsx +7 -3
  189. package/src/plugins/builtin/series-inventory.ts +1 -0
  190. package/src/plugins/builtin/shared/earnings-report.ts +10 -4
  191. package/src/plugins/builtin/shared/report-freshness.ts +6 -2
  192. package/src/plugins/builtin/short-interest/headless.ts +13 -3
  193. package/src/plugins/builtin/short-interest/index.tsx +1 -1
  194. package/src/plugins/builtin/short-interest/model.ts +62 -3
  195. package/src/plugins/builtin/short-interest/pane.tsx +2 -2
  196. package/src/plugins/builtin/short-interest/schedule.ts +107 -0
  197. package/src/plugins/builtin/short-interest/watch-client.ts +54 -8
  198. package/src/plugins/builtin/short-interest/watch-headless.ts +8 -3
  199. package/src/plugins/builtin/short-interest/watch-model.ts +52 -23
  200. package/src/plugins/builtin/short-interest/watch-pane.tsx +1 -1
  201. package/src/plugins/builtin/supply-chain/flow.tsx +14 -4
  202. package/src/plugins/builtin/themes/headless.ts +1 -1
  203. package/src/plugins/builtin/thirteenf/overlap-pane.tsx +23 -27
  204. package/src/plugins/builtin/ticker-detail/index.tsx +1 -1
  205. package/src/plugins/builtin/ticker-detail/overview/model.ts +4 -3
  206. package/src/plugins/builtin/ticker-detail/overview-tab.tsx +4 -4
  207. package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +9 -4
  208. package/src/plugins/builtin/vol-surface/pane.tsx +16 -1
  209. package/src/plugins/builtin/volatility/chart-model.ts +1 -1
  210. package/src/plugins/builtin/volatility/charts.tsx +1 -1
  211. package/src/renderers/dom/styles.css +10 -2
  212. package/src/sources/gloomberb-cloud/normalizers.ts +3 -0
  213. package/src/sources/provider-router/batches.ts +2 -1
  214. package/src/sources/provider-router/cache.ts +3 -0
  215. package/src/sync/baseline.ts +19 -14
  216. package/src/sync/controller.ts +140 -40
  217. package/src/sync/core-contributors.ts +256 -32
  218. package/src/sync/types.ts +44 -0
  219. package/src/{plugins/builtin/cloud/team → team}/collections-sync.ts +6 -6
  220. package/src/{plugins/builtin/cloud/team → team}/collections.ts +3 -3
  221. package/src/{plugins/builtin/cloud/team → team}/model.ts +2 -2
  222. package/src/{plugins/builtin/cloud/team → team}/pane-request.ts +1 -1
  223. package/src/{plugins/builtin/cloud/team → team}/store.ts +3 -3
  224. package/src/time-series/resolve.ts +19 -2
  225. package/src/types/data-provider.ts +11 -0
  226. package/src/types/financials.ts +46 -4
  227. package/src/types/headless.ts +43 -0
  228. package/src/types/plugin.ts +7 -0
  229. package/src/utils/decimal-comma.ts +18 -0
  230. package/src/utils/declared-dividends.ts +39 -0
  231. package/src/utils/exchanges.ts +7 -0
  232. package/src/utils/forward-dividend.ts +62 -9
  233. package/src/utils/fundamentals.ts +13 -2
  234. package/src/utils/markdown.ts +180 -0
  235. package/src/utils/market-capitalization.ts +22 -0
  236. package/src/utils/option-expiry.ts +16 -0
  237. package/src/utils/sec.ts +2 -1
@@ -1,4 +1,4 @@
1
- import type { OptionContract, OptionsChain, Quote } from "../../types/financials";
1
+ import type { OptionContract, OptionsChain, Quote, TickerFinancials } from "../../types/financials";
2
2
  import type { DataProvider } from "../../types/data-provider";
3
3
  import type { CliListing } from "../listing-arg";
4
4
  import { cliStyles, cliTerminalWidth, wrapText } from "../../utils/cli-output";
@@ -9,10 +9,10 @@ import {
9
9
  formatModelSpotPrice, modelSpotLabel, optionModelSpot, type OptionModelSpot,
10
10
  } from "../../plugins/builtin/options/model-spot";
11
11
  import {
12
- chainOpenInterestAsOf, loadListedOpenInterest, openInterestAsOfLabel, type OpenInterestAsOf,
12
+ chainOpenInterestAsOf, loadListedOpenInterest, openInterestAsOfLabel, type OpenInterestAsOf, statedOpenInterestAsOf,
13
13
  } from "../../plugins/builtin/options/open-interest-as-of";
14
14
  import { DEFAULT_OPTION_CALC_DRAFT } from "../../plugins/builtin/options-calculator/model";
15
- import { expiryIsoDate, missingExpiryText, parseOptionExpiration } from "../../utils/option-expiry";
15
+ import { expiryIsoDate, parseOptionExpiration } from "../../utils/option-expiry";
16
16
 
17
17
  export const OPTIONS_USAGE = "options <symbol> [--expiration <YYYY-MM-DD|unix>]";
18
18
 
@@ -29,22 +29,6 @@ function listedDates(expirations: readonly number[]): string[] {
29
29
  return [...new Set(expirations.map((expiration) => expiryIsoDate(expiration)).filter(Boolean))].sort();
30
30
  }
31
31
 
32
- /**
33
- * Why a chain request for one expiry came back without contracts, and which
34
- * expiries it could have been: the few nearest the requested date, so a typo or
35
- * an unlisted LEAPS date points at the neighbours to pick.
36
- */
37
- export function missingExpiryMessage(
38
- symbol: string,
39
- requested: number,
40
- expirations: readonly number[],
41
- ): { message: string; details?: string } {
42
- return {
43
- message: missingExpiryText(requested, expirations, symbol),
44
- details: `Run gloomberb options ${symbol} to list every expiry (--json carries them too).`,
45
- };
46
- }
47
-
48
32
  const EXPIRY_LIST_LIMIT = 40;
49
33
  const EXPIRY_LIST_WIDTH = 100;
50
34
  const EXPIRY_GAP = 2;
@@ -113,16 +97,30 @@ function optionModelFigures(chain: OptionsChain, inputs: OptionModelInputs): Map
113
97
  return figures;
114
98
  }
115
99
 
116
- /** Spot and dividend yield for IV and delta, read from the underlying the way the options pane does; missing ones stay missing. */
100
+ /** The underlying's financials, as DES reads them: its dividend yield, ex-dividend date and next report. Null when they cannot be read. */
101
+ export function loadUnderlyingFinancials(
102
+ dataProvider: Pick<DataProvider, "getTickerFinancials">,
103
+ listing: CliListing,
104
+ refresh: boolean,
105
+ ): Promise<TickerFinancials | null> {
106
+ return Promise.resolve().then(() => dataProvider.getTickerFinancials(
107
+ listing.request.symbol, listing.request.exchange, { cacheMode: refresh ? "refresh" : "default" },
108
+ )).catch(() => null);
109
+ }
110
+
111
+ /**
112
+ * Spot and dividend yield for IV and delta, read from the underlying the way the
113
+ * options pane does; missing ones stay missing. `financials` shares one read of
114
+ * them with a caller that needs more of them.
115
+ */
117
116
  export async function loadOptionModelInputs(
118
117
  dataProvider: Pick<DataProvider, "getTickerFinancials">,
119
118
  listing: CliListing,
120
119
  quote: Promise<Quote | null>,
121
120
  refresh: boolean,
121
+ underlying: Promise<TickerFinancials | null> = loadUnderlyingFinancials(dataProvider, listing, refresh),
122
122
  ): Promise<OptionModelInputs> {
123
- const financials = await Promise.resolve().then(() => dataProvider.getTickerFinancials(
124
- listing.request.symbol, listing.request.exchange, { cacheMode: refresh ? "refresh" : "default" },
125
- )).catch(() => null);
123
+ const financials = await underlying;
126
124
  const current = [await quote, financials?.quote]
127
125
  .find((candidate) => candidate && candidate.stale !== true && isFiniteNumber(candidate.price) && candidate.price > 0);
128
126
  const dividendYield = financials?.fundamentals?.dividendYield;
@@ -161,21 +159,19 @@ export function valueChainAtModelSpot(
161
159
  };
162
160
  }
163
161
 
164
- /** The open-interest date of the chain's expiry, from OPX's listing of it; null when the listing cannot be read. */
165
- export async function loadOptionsChainOpenInterest(
166
- symbol: string, chain: OptionsChain, listed?: ReturnType<typeof loadListedOpenInterest> | null,
167
- ): Promise<OpenInterestAsOf | null> {
162
+ /**
163
+ * The open-interest date of the chain's expiry: the chain's own, else (a chain
164
+ * that does not say) from OPX's listing of it; null when the listing cannot be read.
165
+ */
166
+ export async function loadOptionsChainOpenInterest(symbol: string, chain: OptionsChain): Promise<OpenInterestAsOf | null> {
167
+ const stated = statedOpenInterestAsOf(chain);
168
+ if (stated) return stated;
168
169
  const expiration = [...chain.calls, ...chain.puts][0]?.expiration;
169
170
  if (expiration == null) return null;
170
- const payload = await (listed ?? loadListedOpenInterest(symbol, expiryIsoDate(expiration)));
171
+ const payload = await loadListedOpenInterest(symbol, expiryIsoDate(expiration));
171
172
  return payload ? chainOpenInterestAsOf(chain, payload) : null;
172
173
  }
173
174
 
174
- /** OPX's listing of an expiry, requested while the chain loads. */
175
- export function requestListedOpenInterest(symbol: string, expiration: number) {
176
- return loadListedOpenInterest(symbol, expiryIsoDate(expiration));
177
- }
178
-
179
175
  /**
180
176
  * The line under the chain: `Greeks at spot 89.79 (close Mon 12 Oct 20:00 UTC), dividend yield 2.34%, rate 4% · OI as of Fri 9 Oct`.
181
177
  * An open interest whose date cannot be established says why.