gloomberb 0.15.8 → 0.16.0

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 (473) hide show
  1. package/README.md +10 -2
  2. package/package.json +1 -1
  3. package/src/api-client/app-attention.ts +147 -0
  4. package/src/api-client/attention.ts +26 -0
  5. package/src/api-client/awards.ts +215 -0
  6. package/src/api-client/catalysts.ts +160 -0
  7. package/src/api-client/chat.ts +137 -14
  8. package/src/api-client/company-kpis.ts +153 -0
  9. package/src/api-client/cpi.ts +52 -0
  10. package/src/api-client/credit-documents.ts +107 -0
  11. package/src/api-client/data.ts +187 -3
  12. package/src/api-client/distress.ts +164 -0
  13. package/src/api-client/equity-screener.ts +11 -0
  14. package/src/api-client/exposure.ts +202 -0
  15. package/src/api-client/gpu.ts +93 -0
  16. package/src/api-client/hiring.ts +110 -0
  17. package/src/api-client/index.ts +77 -3
  18. package/src/api-client/normalizers.ts +31 -1
  19. package/src/api-client/perps.ts +127 -0
  20. package/src/api-client/power.ts +148 -0
  21. package/src/api-client/request.ts +58 -1
  22. package/src/api-client/research-activity.ts +172 -13
  23. package/src/api-client/socket.ts +75 -27
  24. package/src/api-client/supply-chain-graph.ts +40 -0
  25. package/src/api-client/supply-chain.ts +98 -0
  26. package/src/api-client/telemetry.ts +29 -0
  27. package/src/api-client/themes.ts +28 -0
  28. package/src/api-client/types.ts +31 -1
  29. package/src/api-client/wall-experiments.ts +100 -0
  30. package/src/api-client/wall-summary.ts +49 -0
  31. package/src/api-client/web-experiments.ts +136 -0
  32. package/src/app/pane-runtime/plugin-bindings.ts +5 -0
  33. package/src/app/pane-runtime/ticker-open-runtime.ts +8 -2
  34. package/src/app/runtime/update.ts +13 -1
  35. package/src/cli/commands/system.ts +2 -0
  36. package/src/cli/desktop-pane-shot.ts +3 -4
  37. package/src/cli/pane-functions/data.ts +78 -0
  38. package/src/cli/pane-functions/financial-ratio-shot.ts +160 -0
  39. package/src/cli/pane-functions/function-help.ts +205 -8
  40. package/src/cli/pane-functions/headless.ts +4 -0
  41. package/src/cli/pane-functions/screenshot-evidence.ts +21 -0
  42. package/src/cli/pane-functions/screenshot.ts +49 -5
  43. package/src/components/chart-table/index.ts +1 -0
  44. package/src/components/chart-table/layout.ts +15 -0
  45. package/src/components/command-bar/action-runtime.ts +1 -0
  46. package/src/components/command-bar/commands/direct/index.ts +32 -0
  47. package/src/components/command-bar/commands/registry.ts +7 -0
  48. package/src/components/command-bar/pane-templates/items.ts +11 -0
  49. package/src/components/command-bar/pane-templates/workflow.ts +19 -4
  50. package/src/components/command-bar/routes/root/command-items.ts +6 -0
  51. package/src/components/command-bar/routes/root/provider-search.ts +2 -0
  52. package/src/components/command-bar/routes/root/results.ts +64 -0
  53. package/src/components/command-bar/routes/root/runtime.ts +8 -0
  54. package/src/components/command-bar/routes/ticker-search/results.ts +89 -24
  55. package/src/components/command-bar/routes/ticker-search/route.ts +2 -0
  56. package/src/components/command-bar/surface/index.tsx +15 -0
  57. package/src/components/command-bar/view-model.ts +3 -0
  58. package/src/components/command-bar/workflow/ops.ts +19 -0
  59. package/src/components/command-bar/workflow/tickers.ts +5 -0
  60. package/src/components/company-logo.tsx +15 -2
  61. package/src/components/data-table/table-pane.ts +2 -1
  62. package/src/components/index.ts +1 -0
  63. package/src/components/layout/detached-pane-shell.tsx +12 -1
  64. package/src/components/layout/missing-pane.tsx +87 -23
  65. package/src/components/layout/pane/footer/index.tsx +64 -18
  66. package/src/components/layout/pane/footer/model.ts +85 -0
  67. package/src/components/layout/pane/sidebar.tsx +19 -1
  68. package/src/components/layout/shell/pane/management-shortcuts.ts +13 -1
  69. package/src/components/layout/status-bar.tsx +93 -28
  70. package/src/components/layout/status-widget-space.ts +72 -0
  71. package/src/components/onboarding/first-run-workspace.ts +8 -2
  72. package/src/components/onboarding/onboarding-wizard.tsx +35 -16
  73. package/src/components/price-performance.tsx +31 -34
  74. package/src/components/ui/data-table/index.tsx +11 -8
  75. package/src/components/ui/display.tsx +9 -3
  76. package/src/components/ui/figure.tsx +94 -0
  77. package/src/components/ui/icon.tsx +3 -1
  78. package/src/components/ui/message-composer.tsx +8 -1
  79. package/src/components/ui/ratio-bar.tsx +84 -0
  80. package/src/components/ui/toggle.tsx +3 -1
  81. package/src/components/use-scrollbox-layout.ts +17 -0
  82. package/src/core/state/app/layout.ts +35 -1
  83. package/src/core/state/app/state.ts +15 -0
  84. package/src/core/state/app/types.ts +1 -0
  85. package/src/data/config/store/normalize.ts +24 -0
  86. package/src/i18n/es.ts +1 -0
  87. package/src/i18n/ja.ts +1 -0
  88. package/src/i18n/ko.ts +1 -0
  89. package/src/i18n/zh-cn.ts +1 -0
  90. package/src/i18n/zh-tw.ts +1 -0
  91. package/src/layout-marketplace/pane-imagery.ts +1 -0
  92. package/src/market-data/coordinator/entries.ts +13 -0
  93. package/src/market-data/coordinator/financials.ts +33 -8
  94. package/src/market-data/market/freshness.ts +16 -5
  95. package/src/market-data/published-cn-sessions.ts +25 -0
  96. package/src/market-data/published-nse-sessions.ts +20 -0
  97. package/src/news/aggregator.ts +4 -0
  98. package/src/plugins/builtin/account-management/model.ts +6 -1
  99. package/src/plugins/builtin/account-management/pane.tsx +36 -25
  100. package/src/plugins/builtin/alerts/catalysts.ts +77 -0
  101. package/src/plugins/builtin/alerts/events-pane.tsx +3 -0
  102. package/src/plugins/builtin/alerts/events.ts +10 -4
  103. package/src/plugins/builtin/alerts/history-pane.tsx +1 -1
  104. package/src/plugins/builtin/alerts/history.ts +1 -0
  105. package/src/plugins/builtin/alerts/index.tsx +6 -0
  106. package/src/plugins/builtin/alerts/research-builder.ts +10 -3
  107. package/src/plugins/builtin/alerts/research-rules.ts +15 -1
  108. package/src/plugins/builtin/analytics/risk-client.ts +15 -3
  109. package/src/plugins/builtin/analytics/risk-headless.ts +123 -18
  110. package/src/plugins/builtin/attention/client.ts +80 -0
  111. package/src/plugins/builtin/attention/evidence.ts +30 -0
  112. package/src/plugins/builtin/attention/headless.ts +33 -0
  113. package/src/plugins/builtin/attention/index.tsx +18 -0
  114. package/src/plugins/builtin/attention/model.ts +59 -0
  115. package/src/plugins/builtin/attention/pane.tsx +211 -0
  116. package/src/plugins/builtin/attention/trending.tsx +59 -0
  117. package/src/plugins/builtin/awards/alerts.ts +32 -0
  118. package/src/plugins/builtin/awards/client.ts +82 -0
  119. package/src/plugins/builtin/awards/detail.tsx +107 -0
  120. package/src/plugins/builtin/awards/evidence.ts +36 -0
  121. package/src/plugins/builtin/awards/headless.ts +55 -0
  122. package/src/plugins/builtin/awards/index.tsx +20 -0
  123. package/src/plugins/builtin/awards/model.ts +42 -0
  124. package/src/plugins/builtin/awards/pane.tsx +263 -0
  125. package/src/plugins/builtin/catalysts/client.ts +28 -0
  126. package/src/plugins/builtin/catalysts/detail.tsx +88 -0
  127. package/src/plugins/builtin/catalysts/evidence.ts +47 -0
  128. package/src/plugins/builtin/catalysts/headless.ts +42 -0
  129. package/src/plugins/builtin/catalysts/history.ts +26 -0
  130. package/src/plugins/builtin/catalysts/index.tsx +29 -0
  131. package/src/plugins/builtin/catalysts/model.ts +135 -0
  132. package/src/plugins/builtin/catalysts/pane.tsx +159 -0
  133. package/src/plugins/builtin/chart-composer/index.tsx +8 -1
  134. package/src/plugins/builtin/chat/attachments/desktop.tsx +610 -0
  135. package/src/plugins/builtin/chat/attachments/files.ts +45 -0
  136. package/src/plugins/builtin/chat/attachments/model.ts +164 -0
  137. package/src/plugins/builtin/chat/attachments/terminal.tsx +72 -0
  138. package/src/plugins/builtin/chat/attachments/transfer.ts +165 -0
  139. package/src/plugins/builtin/chat/content/channel-navigation.ts +13 -12
  140. package/src/plugins/builtin/chat/content/composer-runtime.ts +25 -4
  141. package/src/plugins/builtin/chat/content/composer.tsx +46 -4
  142. package/src/plugins/builtin/chat/content/footer.tsx +46 -8
  143. package/src/plugins/builtin/chat/content/index.tsx +263 -62
  144. package/src/plugins/builtin/chat/content/layout-metrics.ts +10 -2
  145. package/src/plugins/builtin/chat/content/open-targets.ts +17 -3
  146. package/src/plugins/builtin/chat/content/scroll.ts +7 -1
  147. package/src/plugins/builtin/chat/content/shortcuts.ts +36 -11
  148. package/src/plugins/builtin/chat/content/snapshot.ts +3 -0
  149. package/src/plugins/builtin/chat/content/transcript.tsx +17 -1
  150. package/src/plugins/builtin/chat/content/types.ts +7 -0
  151. package/src/plugins/builtin/chat/controller/attachments.ts +213 -0
  152. package/src/plugins/builtin/chat/controller/connections.ts +3 -1
  153. package/src/plugins/builtin/chat/controller/index.ts +114 -2
  154. package/src/plugins/builtin/chat/controller/lifecycle.ts +9 -0
  155. package/src/plugins/builtin/chat/controller/messages.ts +35 -2
  156. package/src/plugins/builtin/chat/controller/send.ts +128 -25
  157. package/src/plugins/builtin/chat/controller/state.ts +12 -1
  158. package/src/plugins/builtin/chat/controller/utils.ts +7 -5
  159. package/src/plugins/builtin/chat/controller/view.ts +2 -0
  160. package/src/plugins/builtin/chat/index.tsx +21 -0
  161. package/src/plugins/builtin/chat/layout.ts +9 -4
  162. package/src/plugins/builtin/chat/message/desktop.tsx +55 -20
  163. package/src/plugins/builtin/chat/message/header.tsx +30 -5
  164. package/src/plugins/builtin/chat/message/inline-tokens.tsx +9 -0
  165. package/src/plugins/builtin/chat/message/pending-send.ts +35 -0
  166. package/src/plugins/builtin/chat/message/profile-popover.tsx +5 -1
  167. package/src/plugins/builtin/chat/message/render-state.ts +12 -2
  168. package/src/plugins/builtin/chat/message/terminal.tsx +51 -4
  169. package/src/plugins/builtin/chat/message/types.ts +6 -1
  170. package/src/plugins/builtin/chat/pane-state.ts +59 -1
  171. package/src/plugins/builtin/chat/profile-popover.ts +50 -1
  172. package/src/plugins/builtin/chat/sidebar.tsx +8 -3
  173. package/src/plugins/builtin/chat/status-widget.tsx +29 -12
  174. package/src/plugins/builtin/chat/unread-inbox-pane.tsx +143 -0
  175. package/src/plugins/builtin/chat/unread-inbox.ts +91 -0
  176. package/src/plugins/builtin/clinical-trials/client.ts +237 -0
  177. package/src/plugins/builtin/clinical-trials/index.tsx +74 -0
  178. package/src/plugins/builtin/clinical-trials/pane.tsx +225 -0
  179. package/src/plugins/builtin/clinical-trials/types.ts +2 -0
  180. package/src/plugins/builtin/cloud/askg/controller.ts +37 -6
  181. package/src/plugins/builtin/cloud/askg/executor.ts +59 -44
  182. package/src/plugins/builtin/cloud/askg/host.ts +8 -1
  183. package/src/plugins/builtin/cloud/askg/manifest.ts +29 -2
  184. package/src/plugins/builtin/cloud/askg/model.ts +47 -13
  185. package/src/plugins/builtin/cloud/askg/notes.ts +100 -0
  186. package/src/plugins/builtin/cloud/askg/pane.tsx +50 -14
  187. package/src/plugins/builtin/cloud/askg/protocol.ts +39 -1
  188. package/src/plugins/builtin/cloud/askg/result-budget.ts +156 -0
  189. package/src/plugins/builtin/cloud/askg/user-data.ts +89 -0
  190. package/src/plugins/builtin/cloud/auth-actions.tsx +55 -31
  191. package/src/plugins/builtin/cloud/plugin.tsx +4 -1
  192. package/src/plugins/builtin/cloud/team/pane-sections.tsx +10 -1
  193. package/src/plugins/builtin/cloud/team/pane.tsx +3 -2
  194. package/src/plugins/builtin/cloud/thesis/board-pane.tsx +2 -2
  195. package/src/plugins/builtin/cloud/thesis/detail.tsx +1 -1
  196. package/src/plugins/builtin/cloud/thesis/ticker-tab.tsx +2 -2
  197. package/src/plugins/builtin/cloud/trial-offer-status-widget.tsx +202 -0
  198. package/src/plugins/builtin/cloud/upgrade-command.ts +1 -1
  199. package/src/plugins/builtin/cloud/upgrade-dialog.tsx +29 -3
  200. package/src/plugins/builtin/cloud/upgrade-status-widget.tsx +1 -1
  201. package/src/plugins/builtin/cloud-tweets/table.tsx +1 -1
  202. package/src/plugins/builtin/comment-letters/client.ts +342 -0
  203. package/src/plugins/builtin/comment-letters/index.tsx +74 -0
  204. package/src/plugins/builtin/comment-letters/pane.tsx +295 -0
  205. package/src/plugins/builtin/comment-letters/types.ts +43 -0
  206. package/src/plugins/builtin/company-attention/app-rank.tsx +79 -0
  207. package/src/plugins/builtin/company-attention/client.ts +69 -0
  208. package/src/plugins/builtin/company-attention/evidence.ts +45 -0
  209. package/src/plugins/builtin/company-attention/headless.ts +47 -0
  210. package/src/plugins/builtin/company-attention/index.tsx +30 -0
  211. package/src/plugins/builtin/company-attention/model.ts +129 -0
  212. package/src/plugins/builtin/company-attention/pane.tsx +183 -0
  213. package/src/plugins/builtin/company-kpis/client.ts +92 -0
  214. package/src/plugins/builtin/company-kpis/headless.ts +32 -0
  215. package/src/plugins/builtin/company-kpis/index.tsx +26 -0
  216. package/src/plugins/builtin/company-kpis/model.ts +124 -0
  217. package/src/plugins/builtin/company-kpis/pane.tsx +226 -0
  218. package/src/plugins/builtin/company-kpis/related.ts +11 -0
  219. package/src/plugins/builtin/company-kpis/screenshot-evidence.ts +44 -0
  220. package/src/plugins/builtin/composite-plugins.ts +32 -0
  221. package/src/plugins/builtin/correlation/history.ts +4 -1
  222. package/src/plugins/builtin/correlation/index.tsx +139 -80
  223. package/src/plugins/builtin/correlation/matrix/pair-chart.tsx +48 -0
  224. package/src/plugins/builtin/correlation/matrix/selection.ts +77 -0
  225. package/src/plugins/builtin/correlation/relationship/model.ts +2 -2
  226. package/src/plugins/builtin/cpi/client.ts +66 -0
  227. package/src/plugins/builtin/cpi/headless.ts +78 -0
  228. package/src/plugins/builtin/cpi/index.tsx +31 -0
  229. package/src/plugins/builtin/cpi/model.ts +198 -0
  230. package/src/plugins/builtin/cpi/pane.tsx +157 -0
  231. package/src/plugins/builtin/credit-documents/client.ts +99 -0
  232. package/src/plugins/builtin/credit-documents/detail.tsx +109 -0
  233. package/src/plugins/builtin/credit-documents/evidence.ts +64 -0
  234. package/src/plugins/builtin/credit-documents/gauge.tsx +55 -0
  235. package/src/plugins/builtin/credit-documents/headless.ts +40 -0
  236. package/src/plugins/builtin/credit-documents/index.tsx +19 -0
  237. package/src/plugins/builtin/credit-documents/model.ts +336 -0
  238. package/src/plugins/builtin/credit-documents/pane.tsx +185 -0
  239. package/src/plugins/builtin/custom-view/view-spec.ts +14 -2
  240. package/src/plugins/builtin/debt-maturities/pane.tsx +1 -0
  241. package/src/plugins/builtin/dividend-yield/pane.tsx +1 -1
  242. package/src/plugins/builtin/earnings/board.tsx +3 -0
  243. package/src/plugins/builtin/earnings/index.tsx +2 -0
  244. package/src/plugins/builtin/earnings-calls/pane.tsx +7 -1
  245. package/src/plugins/builtin/earnings-ripple/client.ts +60 -0
  246. package/src/plugins/builtin/earnings-ripple/headless.ts +35 -0
  247. package/src/plugins/builtin/earnings-ripple/index.tsx +35 -0
  248. package/src/plugins/builtin/earnings-ripple/model.ts +98 -0
  249. package/src/plugins/builtin/earnings-ripple/pane.tsx +103 -0
  250. package/src/plugins/builtin/equity-screener/client.ts +1 -1
  251. package/src/plugins/builtin/equity-screener/criterion-editor.tsx +1 -1
  252. package/src/plugins/builtin/equity-screener/model.ts +74 -9
  253. package/src/plugins/builtin/equity-screener/pane.tsx +2 -0
  254. package/src/plugins/builtin/estimate-revisions/pane.tsx +3 -0
  255. package/src/plugins/builtin/executives/pane.tsx +3 -1
  256. package/src/plugins/builtin/exposure/charts.tsx +66 -0
  257. package/src/plugins/builtin/exposure/client.ts +53 -0
  258. package/src/plugins/builtin/exposure/drivers.ts +29 -0
  259. package/src/plugins/builtin/exposure/editor.tsx +61 -0
  260. package/src/plugins/builtin/exposure/evidence.ts +39 -0
  261. package/src/plugins/builtin/exposure/headless.ts +51 -0
  262. package/src/plugins/builtin/exposure/holdings.ts +56 -0
  263. package/src/plugins/builtin/exposure/index.tsx +13 -0
  264. package/src/plugins/builtin/exposure/model.ts +104 -0
  265. package/src/plugins/builtin/exposure/pane.tsx +247 -0
  266. package/src/plugins/builtin/fear-greed/pane.tsx +2 -9
  267. package/src/plugins/builtin/filing-events/pane.tsx +2 -1
  268. package/src/plugins/builtin/gpu/board.tsx +163 -0
  269. package/src/plugins/builtin/gpu/changes.tsx +94 -0
  270. package/src/plugins/builtin/gpu/client.ts +130 -0
  271. package/src/plugins/builtin/gpu/equities.tsx +112 -0
  272. package/src/plugins/builtin/gpu/headless.ts +67 -0
  273. package/src/plugins/builtin/gpu/history.tsx +140 -0
  274. package/src/plugins/builtin/gpu/index.tsx +18 -0
  275. package/src/plugins/builtin/gpu/ladder.tsx +127 -0
  276. package/src/plugins/builtin/gpu/model.ts +317 -0
  277. package/src/plugins/builtin/gpu/pane.tsx +63 -0
  278. package/src/plugins/builtin/help/index.tsx +19 -2
  279. package/src/plugins/builtin/holders/pane.tsx +4 -8
  280. package/src/plugins/builtin/insider/detail.tsx +119 -0
  281. package/src/plugins/builtin/insider/display.ts +221 -0
  282. package/src/plugins/builtin/insider/headless.ts +24 -3
  283. package/src/plugins/builtin/insider/index.tsx +206 -108
  284. package/src/plugins/builtin/insider/insider-data.ts +31 -3
  285. package/src/plugins/builtin/insider/model.ts +53 -4
  286. package/src/plugins/builtin/insider/table-model.ts +226 -0
  287. package/src/plugins/builtin/insider/table.tsx +79 -0
  288. package/src/plugins/builtin/iv-history/screen-pane.tsx +1 -1
  289. package/src/plugins/builtin/jobs/pane.tsx +14 -7
  290. package/src/plugins/builtin/macro-day/client.ts +50 -0
  291. package/src/plugins/builtin/macro-day/headless.ts +51 -0
  292. package/src/plugins/builtin/macro-day/index.tsx +21 -0
  293. package/src/plugins/builtin/macro-day/model.ts +137 -0
  294. package/src/plugins/builtin/macro-day/pane.tsx +118 -0
  295. package/src/plugins/builtin/macro-day/releases.ts +58 -0
  296. package/src/plugins/builtin/market-halts/model.ts +30 -17
  297. package/src/plugins/builtin/market-halts/pane.tsx +15 -21
  298. package/src/plugins/builtin/market-heatmap/data.ts +1 -1
  299. package/src/plugins/builtin/market-heatmap/index.tsx +198 -50
  300. package/src/plugins/builtin/market-heatmap/portfolio.ts +220 -0
  301. package/src/plugins/builtin/market-movers/index.tsx +1 -0
  302. package/src/plugins/builtin/market-movers/session-body.tsx +5 -2
  303. package/src/plugins/builtin/mna/distress/client.ts +326 -0
  304. package/src/plugins/builtin/mna/distress/detail.tsx +247 -0
  305. package/src/plugins/builtin/mna/distress/headless.ts +257 -0
  306. package/src/plugins/builtin/mna/distress/model.ts +427 -0
  307. package/src/plugins/builtin/mna/distress/pane.tsx +606 -0
  308. package/src/plugins/builtin/mna/index.tsx +15 -0
  309. package/src/plugins/builtin/mna/pane.tsx +42 -1
  310. package/src/plugins/builtin/news/index.tsx +62 -16
  311. package/src/plugins/builtin/news/wire/filter-articles.ts +54 -0
  312. package/src/plugins/builtin/news/wire/index.tsx +37 -3
  313. package/src/plugins/builtin/news/wire/industry-pane.tsx +29 -13
  314. package/src/plugins/builtin/news/wire/mutes.ts +253 -0
  315. package/src/plugins/builtin/news/wire/news/command-bar-search.ts +117 -0
  316. package/src/plugins/builtin/news/wire/news/footer.ts +4 -0
  317. package/src/plugins/builtin/news/wire/news/list-search.ts +34 -0
  318. package/src/plugins/builtin/news/wire/news/pop-out.tsx +158 -0
  319. package/src/plugins/builtin/news/wire/news/preset-pane.tsx +64 -19
  320. package/src/plugins/builtin/openfda/client.ts +300 -0
  321. package/src/plugins/builtin/openfda/index.tsx +71 -0
  322. package/src/plugins/builtin/openfda/pane.tsx +382 -0
  323. package/src/plugins/builtin/openfda/types.ts +76 -0
  324. package/src/plugins/builtin/options/footer.ts +1 -0
  325. package/src/plugins/builtin/options-calculator/pane.tsx +0 -1
  326. package/src/plugins/builtin/options-positioning/index.tsx +4 -2
  327. package/src/plugins/builtin/options-positioning/pane.tsx +1 -1
  328. package/src/plugins/builtin/pe-band/client.ts +61 -0
  329. package/src/plugins/builtin/pe-band/headless.ts +51 -0
  330. package/src/plugins/builtin/pe-band/index.tsx +20 -0
  331. package/src/plugins/builtin/pe-band/model.ts +267 -0
  332. package/src/plugins/builtin/pe-band/pane.tsx +159 -0
  333. package/src/plugins/builtin/perps/client.ts +66 -0
  334. package/src/plugins/builtin/perps/equity-row.tsx +28 -0
  335. package/src/plugins/builtin/perps/headless.ts +34 -0
  336. package/src/plugins/builtin/perps/index.tsx +14 -0
  337. package/src/plugins/builtin/perps/model.ts +58 -0
  338. package/src/plugins/builtin/perps/pane.tsx +185 -0
  339. package/src/plugins/builtin/plugin-marketplace/pane.tsx +0 -1
  340. package/src/plugins/builtin/portfolio-list/cli/render.ts +177 -87
  341. package/src/plugins/builtin/portfolio-list/headless.ts +237 -0
  342. package/src/plugins/builtin/portfolio-list/index.tsx +2 -0
  343. package/src/plugins/builtin/portfolio-list/mutations.ts +17 -0
  344. package/src/plugins/builtin/portfolio-list/pane/data.ts +17 -0
  345. package/src/plugins/builtin/portfolio-list/pane/index.tsx +88 -5
  346. package/src/plugins/builtin/portfolio-list/pane/remove-ticker.ts +85 -0
  347. package/src/plugins/builtin/portfolio-list/pane/streaming.ts +18 -12
  348. package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +6 -0
  349. package/src/plugins/builtin/power/client.ts +100 -0
  350. package/src/plugins/builtin/power/detail.tsx +82 -0
  351. package/src/plugins/builtin/power/evidence.ts +56 -0
  352. package/src/plugins/builtin/power/generation.tsx +37 -0
  353. package/src/plugins/builtin/power/headless.ts +43 -0
  354. package/src/plugins/builtin/power/index.tsx +16 -0
  355. package/src/plugins/builtin/power/model.ts +89 -0
  356. package/src/plugins/builtin/power/pane.tsx +209 -0
  357. package/src/plugins/builtin/power/query.ts +25 -0
  358. package/src/plugins/builtin/relative-rotation/pane.tsx +3 -3
  359. package/src/plugins/builtin/research/analyst-pane.tsx +1 -1
  360. package/src/plugins/builtin/research/corporate-actions-pane.tsx +13 -4
  361. package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +5 -3
  362. package/src/plugins/builtin/research-search/pane.tsx +21 -7
  363. package/src/plugins/builtin/revenue-breakdown/pane.tsx +1 -1
  364. package/src/plugins/builtin/reverse-dcf/client.ts +35 -0
  365. package/src/plugins/builtin/reverse-dcf/headless.ts +44 -0
  366. package/src/plugins/builtin/reverse-dcf/index.tsx +20 -0
  367. package/src/plugins/builtin/reverse-dcf/model.ts +87 -0
  368. package/src/plugins/builtin/reverse-dcf/pane.tsx +107 -0
  369. package/src/plugins/builtin/risk-factors/pane.tsx +2 -1
  370. package/src/plugins/builtin/scanner/denied.tsx +4 -2
  371. package/src/plugins/builtin/scanner/feed.ts +1 -0
  372. package/src/plugins/builtin/scanner/flow-pane.tsx +3 -2
  373. package/src/plugins/builtin/scanner/hilo-pane.tsx +1 -1
  374. package/src/plugins/builtin/seasonality/client.ts +4 -1
  375. package/src/plugins/builtin/sec/command-bar-search.ts +217 -0
  376. package/src/plugins/builtin/sec/forms.ts +54 -0
  377. package/src/plugins/builtin/sec/headless.ts +31 -5
  378. package/src/plugins/builtin/sec/index.tsx +67 -11
  379. package/src/plugins/builtin/sec/model.ts +35 -5
  380. package/src/plugins/builtin/sectors/headless.ts +1 -0
  381. package/src/plugins/builtin/sectors/index.tsx +72 -26
  382. package/src/plugins/builtin/shared/cloud-upgrade.ts +143 -39
  383. package/src/plugins/builtin/shared/pro-feature-wall.tsx +8 -4
  384. package/src/plugins/builtin/shared/research-cells.tsx +107 -0
  385. package/src/plugins/builtin/shared/series-list-detail.tsx +5 -1
  386. package/src/plugins/builtin/shared/wall-teaser-catalog.ts +80 -0
  387. package/src/plugins/builtin/shared/wall-teaser.tsx +192 -0
  388. package/src/plugins/builtin/shared/wall-view-lifecycle.ts +43 -0
  389. package/src/plugins/builtin/short-interest/index.tsx +31 -0
  390. package/src/plugins/builtin/short-interest/watch-client.ts +70 -0
  391. package/src/plugins/builtin/short-interest/watch-headless.ts +49 -0
  392. package/src/plugins/builtin/short-interest/watch-model.ts +185 -0
  393. package/src/plugins/builtin/short-interest/watch-pane.tsx +169 -0
  394. package/src/plugins/builtin/short-volume/pane.tsx +1 -1
  395. package/src/plugins/builtin/social-mentions/pane.tsx +1 -1
  396. package/src/plugins/builtin/supply-chain/client.ts +104 -0
  397. package/src/plugins/builtin/supply-chain/disclosure-quote.tsx +17 -0
  398. package/src/plugins/builtin/supply-chain/evidence.ts +88 -0
  399. package/src/plugins/builtin/supply-chain/flow-layout.ts +133 -0
  400. package/src/plugins/builtin/supply-chain/flow.tsx +323 -0
  401. package/src/plugins/builtin/supply-chain/graph-client.ts +83 -0
  402. package/src/plugins/builtin/supply-chain/graph-evidence.ts +25 -0
  403. package/src/plugins/builtin/supply-chain/graph-model.ts +45 -0
  404. package/src/plugins/builtin/supply-chain/graph-pane.tsx +218 -0
  405. package/src/plugins/builtin/supply-chain/graph.tsx +163 -0
  406. package/src/plugins/builtin/supply-chain/headless.ts +105 -0
  407. package/src/plugins/builtin/supply-chain/index.tsx +17 -0
  408. package/src/plugins/builtin/supply-chain/model.ts +145 -0
  409. package/src/plugins/builtin/supply-chain/pane.tsx +276 -0
  410. package/src/plugins/builtin/supply-chain/row-evidence.tsx +96 -0
  411. package/src/plugins/builtin/supply-chain/trust.ts +34 -0
  412. package/src/plugins/builtin/themes/client.ts +39 -0
  413. package/src/plugins/builtin/themes/headless.ts +38 -0
  414. package/src/plugins/builtin/themes/model.ts +92 -0
  415. package/src/plugins/builtin/themes/pane.tsx +125 -0
  416. package/src/plugins/builtin/thirteenf/pane.tsx +6 -15
  417. package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +5 -6
  418. package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +201 -0
  419. package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +327 -0
  420. package/src/plugins/builtin/ticker-detail/financials/period-end-history.ts +5 -2
  421. package/src/plugins/builtin/ticker-detail/financials/ratios.ts +18 -2
  422. package/src/plugins/builtin/ticker-detail/financials/tab.tsx +2 -1
  423. package/src/plugins/builtin/ticker-detail/headless.ts +7 -2
  424. package/src/plugins/builtin/ticker-detail/index.tsx +22 -0
  425. package/src/plugins/builtin/ticker-detail/overview/components.tsx +53 -30
  426. package/src/plugins/builtin/ticker-detail/overview/pane.tsx +2 -0
  427. package/src/plugins/builtin/ticker-detail/overview-tab.tsx +111 -46
  428. package/src/plugins/builtin/ticker-detail/pane.tsx +50 -6
  429. package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +20 -41
  430. package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +3 -0
  431. package/src/plugins/builtin/time-sales/pane.tsx +1 -1
  432. package/src/plugins/builtin/world-indices/indices.ts +1 -0
  433. package/src/plugins/catalog-browser.ts +38 -0
  434. package/src/plugins/catalog-manifest.ts +3 -0
  435. package/src/plugins/catalog-ui.ts +6 -0
  436. package/src/plugins/current-target.ts +0 -9
  437. package/src/public/__snapshots__/public-api.test.ts.snap +1 -0
  438. package/src/renderers/browser/cloud-transport.ts +66 -1
  439. package/src/renderers/browser/main.tsx +2 -0
  440. package/src/renderers/dom/data-table/row.tsx +2 -0
  441. package/src/renderers/dom/desktop/controls.tsx +38 -25
  442. package/src/renderers/dom/desktop/icons.tsx +8 -0
  443. package/src/renderers/dom/host/chart-surface.tsx +36 -2
  444. package/src/renderers/dom/host/focus-scope.ts +11 -1
  445. package/src/renderers/dom/styles.css +28 -0
  446. package/src/renderers/electrobun/view/backend-rpc.ts +3 -2
  447. package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +1 -1
  448. package/src/renderers/electrobun/view/http-fetch.ts +2 -0
  449. package/src/renderers/electrobun/view/main.tsx +3 -1
  450. package/src/renderers/electrobun/view/rpc-timeout.ts +59 -0
  451. package/src/renderers/opentui/start.tsx +3 -0
  452. package/src/shares/api.ts +3 -1
  453. package/src/sources/sec-edgar/identity.ts +36 -0
  454. package/src/sources/sec-edgar.ts +1 -34
  455. package/src/state/app/context/index.tsx +8 -0
  456. package/src/sync/core-contributors.ts +2 -0
  457. package/src/telemetry/attention-counts.ts +164 -0
  458. package/src/telemetry/live-config.ts +7 -0
  459. package/src/test-support/rpc-loopback.ts +7 -3
  460. package/src/test-support/shell-pane-keys.tsx +34 -0
  461. package/src/tickers/instrument-kind.ts +12 -6
  462. package/src/tickers/search/asset-classes.ts +91 -0
  463. package/src/tickers/search/index.ts +18 -4
  464. package/src/tickers/search/ranking.ts +22 -3
  465. package/src/types/config.ts +23 -1
  466. package/src/types/headless.ts +17 -0
  467. package/src/ui/host.tsx +6 -0
  468. package/src/utils/double-escape-close.ts +20 -0
  469. package/src/utils/html-entities.ts +15 -0
  470. package/src/utils/http-proxy-response.ts +44 -7
  471. package/src/utils/plugin-proxy-hosts.json +3 -0
  472. package/src/utils/sec.ts +19 -1
  473. package/src/utils/text-wrap.ts +13 -8
@@ -1,8 +1,27 @@
1
+ import type { AttentionPayload, AttentionWindow } from "./attention";
2
+ import type { HiringBoard, HiringPayload } from "./hiring";
3
+ import type { AppAttentionFilter, AppAttentionPayload, AppRankPayload } from "./app-attention";
4
+ import type { CatalystResponse, CatalystDetail, CatalystFilters, CatalystStatus, CatalystChanges } from "./catalysts";
5
+ import type { KpisPayload, GuidancePayload, KpiQueryOptions } from "./company-kpis";
6
+ import { companyDisclosurePath } from "./company-kpis";
7
+ import type { PowerBoard, PowerDetail, PowerFilter, PowerHistory } from "./power";
8
+ import type { PerpBoardPayload, PerpHistoryPayload, PerpRankingsPayload, PerpBoardQuery, PerpHistoryQuery, PerpMarketPayload } from "./perps";
9
+ import type { ExposureRequest, ExposurePayload, ExposureScenario } from "./exposure";
10
+ import type { SupplyChainPayload, SupplyOptions } from "./supply-chain";
11
+ import { supplyGraphQuery, type GraphOptions, type GraphPayload } from "./supply-chain-graph";
12
+ import type { AwardDetailPayload, AwardFilter, AwardsPayload } from "./awards";
1
13
  import type { EarningsEvent } from "../types/data-provider";
2
14
  import type { MarketDividendsPayload, MarketHeatmapResult, MarketHeatmapUniverseId, MarketMoversPayload } from "./market-discovery";
3
15
  import type { DebtMaturitiesPayload } from "./debt-maturities";
4
16
  import type { RevenueBreakdownPayload, RevenueBreakdownView } from "./revenue-breakdown";
5
17
  import type { MnaDealPayload, MnaDealsParams, MnaDealsPayload } from "./mna";
18
+ import {
19
+ distressQuery,
20
+ type DistressDesignationsParams,
21
+ type DistressFilingsParams,
22
+ type GoingConcernParams,
23
+ type InsolvencyNoticesParams,
24
+ } from "./distress";
6
25
  import type { IpoCalendarParams, IpoCalendarPayload } from "./ipo";
7
26
  import type { CryptoMarketsPayload } from "./crypto-markets";
8
27
  import type { CentralBankRatesPayload } from "./central-bank-rates";
@@ -15,6 +34,8 @@ import type { SocialMentionDayPosts, SocialMentionsPayload, SocialMentionsRange
15
34
  import type { FuturesCurveAsOfPayload, FuturesCurvePayload } from "./futures-curve";
16
35
  import type { CotBoardPayload, CotContractPayload, CotFamily, CotClass } from "./cot";
17
36
  import type { DoeBoardPayload } from "./doe";
37
+ import type { GpuBoardPayload, GpuEventsPayload, GpuHistoryPayload, GpuHistoryQuery } from "./gpu";
38
+ import type { CpiBoardPayload } from "./cpi";
18
39
  import type { TapeSnapshot } from "./tape";
19
40
  import type { ExchangeRateSnapshot } from "../types/exchange-rate";
20
41
  import type { RatePathPayload } from "./rates";
@@ -146,10 +167,12 @@ export class CloudDataApi {
146
167
  path: string,
147
168
  targets: CloudMarketBatchTarget[],
148
169
  mode: "cache-first" | "refresh",
170
+ signal?: AbortSignal,
149
171
  ): Promise<CloudMarketResponse<CloudMarketBatchPayload<T>>> {
150
172
  return this.request<CloudMarketResponse<CloudMarketBatchPayload<T>>>(path, {
151
173
  method: "POST",
152
174
  body: JSON.stringify({ targets, mode }),
175
+ ...(signal ? { signal } : {}),
153
176
  });
154
177
  }
155
178
 
@@ -158,6 +181,14 @@ export class CloudDataApi {
158
181
  return this.request<T>(`/cloud/equity-screener/${path}`, init);
159
182
  }
160
183
 
184
+ getCloudThemes() {
185
+ return this.request<import("./themes").ThemesPayload>("/cloud/themes");
186
+ }
187
+
188
+ getCloudThemeMembers(id: string) {
189
+ return this.request<import("./themes").ThemeMembersPayload>(`/cloud/themes/${encodeURIComponent(id)}`);
190
+ }
191
+
161
192
  /** Stored implied volatility (HIVG, VCA, OVDV dates); one prefix-scoped method, like EQS. */
162
193
  impliedVolatility<T>(path: string, init?: RequestInit) {
163
194
  return this.request<T>(`/cloud/iv/${path}`, init);
@@ -204,8 +235,9 @@ export class CloudDataApi {
204
235
  async getCloudQuotesBatch(
205
236
  targets: CloudMarketBatchTarget[],
206
237
  mode: "cache-first" | "refresh" = "cache-first",
238
+ options: { signal?: AbortSignal } = {},
207
239
  ): Promise<CloudMarketResponse<CloudMarketBatchPayload<CloudQuotePayload>>> {
208
- return this.postMarketBatch("/market/quotes/batch", targets, mode);
240
+ return this.postMarketBatch("/market/quotes/batch", targets, mode, options.signal);
209
241
  }
210
242
 
211
243
  async getCloudWorldVenues(): Promise<
@@ -324,9 +356,11 @@ export class CloudDataApi {
324
356
  symbol: string,
325
357
  exchange: string,
326
358
  params: CloudHistoryParams = {},
359
+ options: { signal?: AbortSignal } = {},
327
360
  ): Promise<CloudMarketResponse<CloudPricePointPayload[]>> {
328
361
  return this.request<CloudMarketResponse<CloudPricePointPayload[]>>(
329
362
  cloudHistoryPath(symbol, exchange, params),
363
+ options.signal ? { signal: options.signal } : undefined,
330
364
  );
331
365
  }
332
366
 
@@ -368,9 +402,11 @@ export class CloudDataApi {
368
402
  async getCloudFredSeries(
369
403
  seriesId: string,
370
404
  params: CloudFredSeriesParams = {},
405
+ options: { signal?: AbortSignal } = {},
371
406
  ): Promise<CloudFredSeriesPayload> {
372
407
  return this.request<CloudFredSeriesPayload>(
373
408
  cloudFredSeriesPath(seriesId, params),
409
+ options.signal ? { signal: options.signal } : undefined,
374
410
  );
375
411
  }
376
412
 
@@ -386,10 +422,140 @@ export class CloudDataApi {
386
422
  return this.request<CotContractPayload>(`/cloud/cot/contracts/${encodeURIComponent(code)}?${new URLSearchParams({ report })}`);
387
423
  }
388
424
 
425
+ /** Credit-document paths stay with their pane; keep the shared client small. */
426
+ creditDocuments<T>(path: string): Promise<T> {
427
+ return this.request<T>(`/cloud/credit-documents/${path}`);
428
+ }
429
+
430
+ async getCloudHiring(symbol?: string, query: { limit?: number; offset?: number } = {}, signal?: AbortSignal): Promise<HiringBoard | HiringPayload> {
431
+ const params = new URLSearchParams({ limit: String(query.limit ?? 100), offset: String(query.offset ?? 0) });
432
+ return this.request<HiringBoard | HiringPayload>(symbol ? `/cloud/hiring/${encodeURIComponent(symbol)}` : `/cloud/hiring?${params}`, { signal });
433
+ }
434
+
435
+ async getCloudAppRankHistory(store: "app-store" | "google-play", appId: string, query: AppAttentionFilter = {}, signal?: AbortSignal): Promise<AppRankPayload> {
436
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
437
+ return this.request<AppRankPayload>(`/cloud/app-attention/app/${store}/${encodeURIComponent(appId)}?${params}`, { signal });
438
+ }
439
+
440
+ async getCloudAppAttention(query: AppAttentionFilter = {}, signal?: AbortSignal): Promise<AppAttentionPayload> {
441
+ const { symbol, ...filters } = query;
442
+ const params = new URLSearchParams(Object.entries(filters).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
443
+ return this.request<AppAttentionPayload>(`/cloud/app-attention/${symbol ? encodeURIComponent(symbol) : "board"}?${params}`, { signal });
444
+ }
445
+
446
+ async getCloudCatalysts(query: CatalystFilters = {}, signal?: AbortSignal): Promise<CatalystResponse> {
447
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
448
+ const route = query.litigation && query.symbol ? `/cloud/catalysts/litigation/${encodeURIComponent(query.symbol)}` : "/cloud/catalysts";
449
+ return this.request<CatalystResponse>(`${route}?${params}`, { signal });
450
+ }
451
+
452
+ async getCloudCatalystChanges(query: { since: string; cursor?: string; limit?: number }, signal?: AbortSignal): Promise<CatalystChanges> {
453
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
454
+ return this.request<CatalystChanges>(`/cloud/catalysts/changes?${params}`, { signal });
455
+ }
456
+
457
+ async getCloudCatalystEvent(id: string, signal?: AbortSignal, query: { offset?: number; limit?: number } = {}): Promise<CatalystDetail> {
458
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
459
+ return this.request<CatalystDetail>(`/cloud/catalysts/events/${encodeURIComponent(id)}?${params}`, { signal });
460
+ }
461
+
462
+ async getCloudCatalystStatus(): Promise<CatalystStatus> {
463
+ return this.request<CatalystStatus>("/cloud/catalysts/status");
464
+ }
465
+
466
+ async getCloudCompanyKpis(symbol: string, options: KpiQueryOptions = {}): Promise<KpisPayload> {
467
+ return this.request<KpisPayload>(companyDisclosurePath("kpis", symbol, options));
468
+ }
469
+
470
+ async getCloudCompanyGuidance(symbol: string, options: KpiQueryOptions = {}): Promise<GuidancePayload> {
471
+ return this.request<GuidancePayload>(companyDisclosurePath("guidance", symbol, options));
472
+ }
473
+ async getCloudPerpsBoard(query: PerpBoardQuery = {}): Promise<PerpBoardPayload> {
474
+ return this.request(`/cloud/perps/board?${new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]))}`);
475
+ }
476
+ async getCloudPerpsHistory(query: PerpHistoryQuery): Promise<PerpHistoryPayload> {
477
+ return this.request(`/cloud/perps/history?${new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]))}`);
478
+ }
479
+ async getCloudPerpsRankings(): Promise<PerpRankingsPayload> { return this.request("/cloud/perps/rankings"); }
480
+ async getCloudPerpsCompare(baseAsset: string): Promise<PerpBoardPayload> { return this.request(`/cloud/perps/compare?${new URLSearchParams({ baseAsset })}`); }
481
+ async getCloudPerpsEquity(symbol: string): Promise<PerpBoardPayload> { return this.request(`/cloud/perps/equity/${encodeURIComponent(symbol)}`); }
482
+ async getCloudPerpsMarket(marketId: string): Promise<PerpMarketPayload> { return this.request(`/cloud/perps/market?${new URLSearchParams({ marketId })}`); }
483
+
484
+ async analyzeCloudExposure(request: ExposureRequest): Promise<ExposurePayload> {
485
+ return this.request<ExposurePayload>("/cloud/exposure/analyze", { method: "POST", body: JSON.stringify(request) });
486
+ }
487
+
488
+ async getCloudExposureScenarios(): Promise<{ scenarios: ExposureScenario[] }> {
489
+ return this.request<{ scenarios: ExposureScenario[] }>("/cloud/exposure/scenarios");
490
+ }
491
+
492
+ async getCloudSupplyChain(symbol: string, options: SupplyOptions = {}): Promise<SupplyChainPayload> {
493
+ const query = new URLSearchParams();
494
+ if (options.tiers?.length) query.set("tiers", options.tiers.join(","));
495
+ if (options.includeLeads) query.set("includeLeads", "1");
496
+ return this.request<SupplyChainPayload>(`/cloud/supply-chain/${encodeURIComponent(symbol)}${query.size ? `?${query}` : ""}`);
497
+ }
498
+
499
+ getCloudAwards(query: AwardFilter = {}, signal?: AbortSignal): Promise<AwardsPayload> {
500
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value != null).map(([key, value]) => [key, `${value}`]));
501
+ return this.request<AwardsPayload>(`/cloud/awards?${params}`, { signal });
502
+ }
503
+
504
+ getCloudAward(id: string, signal?: AbortSignal, revisionsCursor?: string): Promise<AwardDetailPayload> {
505
+ const query = revisionsCursor ? `?${new URLSearchParams({ revisionsCursor })}` : "";
506
+ return this.request<AwardDetailPayload>(`/cloud/awards/detail/${encodeURIComponent(id)}${query}`, { signal });
507
+ }
508
+
509
+ async getCloudSupplyGraph(symbol: string, options: Partial<GraphOptions> = {}): Promise<GraphPayload> {
510
+ return this.request<GraphPayload>(`/cloud/supply-chain/${encodeURIComponent(symbol)}/graph?${supplyGraphQuery(options)}`);
511
+ }
512
+
513
+ async getCloudSupplyPaths(from: string, to: string, options: Partial<GraphOptions> = {}): Promise<GraphPayload> {
514
+ return this.request<GraphPayload>(`/cloud/supply-chain/paths?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)}&${supplyGraphQuery(options)}`);
515
+ }
516
+
389
517
  async getCloudDoeBoard(): Promise<DoeBoardPayload> {
390
518
  return this.request<DoeBoardPayload>("/cloud/doe/board");
391
519
  }
392
520
 
521
+ async getCloudAttention(window: AttentionWindow = "now", symbol?: string): Promise<AttentionPayload> {
522
+ const path = symbol ? `/cloud/attention/${encodeURIComponent(symbol)}` : "/cloud/attention";
523
+ return this.request<AttentionPayload>(`${path}?window=${window}`);
524
+ }
525
+
526
+ async getCloudPowerBoard(query: PowerFilter = {}, signal?: AbortSignal): Promise<PowerBoard> {
527
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
528
+ return this.request<PowerBoard>(`/cloud/power/board?${params}`, { signal });
529
+ }
530
+
531
+ async getCloudPowerHistory(query: PowerFilter = {}): Promise<PowerHistory> {
532
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
533
+ return this.request<PowerHistory>(`/cloud/power/history?${params}`);
534
+ }
535
+
536
+ async getCloudPowerProject(id: string, query: Pick<PowerFilter, "offset" | "limit"> = {}, signal?: AbortSignal): Promise<PowerDetail> {
537
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
538
+ return this.request<PowerDetail>(`/cloud/power/projects/${encodeURIComponent(id)}?${params}`, { signal });
539
+ }
540
+
541
+ async getCloudGpuBoard(): Promise<GpuBoardPayload> {
542
+ return this.request<GpuBoardPayload>("/cloud/gpu/board");
543
+ }
544
+
545
+ async getCloudGpuHistory(query: GpuHistoryQuery = {}): Promise<GpuHistoryPayload> {
546
+ const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
547
+ return this.request<GpuHistoryPayload>(`/cloud/gpu/history?${params}`);
548
+ }
549
+
550
+ async getCloudGpuEvents(gpuModel?: string): Promise<GpuEventsPayload> {
551
+ const params = new URLSearchParams({ limit: "1000", ...(gpuModel ? { gpuModel } : {}) });
552
+ return this.request<GpuEventsPayload>(`/cloud/gpu/events?${params}`);
553
+ }
554
+
555
+ async getCloudCpiBoard(): Promise<CpiBoardPayload> {
556
+ return this.request<CpiBoardPayload>("/cloud/cpi/board");
557
+ }
558
+
393
559
  async getCloudTape(symbol: string, exchange: string, signal?: AbortSignal): Promise<TapeSnapshot> {
394
560
  return this.request<TapeSnapshot>(`/cloud/tape/${encodeURIComponent(symbol)}?exchange=${encodeURIComponent(exchange)}`, { signal: signal ?? AbortSignal.timeout(30_000) });
395
561
  }
@@ -454,6 +620,24 @@ export class CloudDataApi {
454
620
  return this.request<MnaDealPayload>(`/cloud/mna/deals/${encodeURIComponent(id)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
455
621
  }
456
622
 
623
+ // Public records about companies in difficulty. The answers are unchecked
624
+ // JSON: the distress tab's parsers validate them before anything is drawn.
625
+ async getPublicDistressFilings(params: DistressFilingsParams, options?: { signal?: AbortSignal }): Promise<unknown> {
626
+ return this.request<unknown>(`/public/events${distressQuery(params)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
627
+ }
628
+
629
+ async getPublicGoingConcern(params: GoingConcernParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
630
+ return this.request<unknown>(`/public/going-concern${distressQuery(params)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
631
+ }
632
+
633
+ async getPublicDistressDesignations(params: DistressDesignationsParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
634
+ return this.request<unknown>(`/public/distress-designations${distressQuery(params)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
635
+ }
636
+
637
+ async getPublicInsolvencyNotices(params: InsolvencyNoticesParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
638
+ return this.request<unknown>(`/public/insolvency-notices${distressQuery(params)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
639
+ }
640
+
457
641
  async getCloudIpoCalendar(params: IpoCalendarParams = {}, options?: { signal?: AbortSignal }): Promise<IpoCalendarPayload> {
458
642
  const query = new URLSearchParams();
459
643
  for (const [key, value] of Object.entries(params)) {
@@ -620,8 +804,8 @@ export class CloudDataApi {
620
804
  }
621
805
 
622
806
  /**
623
- * Cross-document full-text search. Pro-gated: unentitled accounts get a 402,
624
- * which the caller turns into the access gate rather than an empty result.
807
+ * Cross-document full-text search, open to every signed-in account; signed
808
+ * out it answers 401. Only alerts on a saved search need Pro.
625
809
  */
626
810
  async searchCloudDocuments(
627
811
  params: CloudSearchParams,
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Public records about companies in difficulty: US 8-K filings under the
3
+ * bankruptcy, obligation and listing items, SEC going-concern disclosures,
4
+ * exchange listing designations and company insolvency notices. Every route
5
+ * is anonymous; field names follow the server, which serves the last three in
6
+ * snake case.
7
+ */
8
+ import type { CloudFilingEventPayload } from "./types";
9
+
10
+ /** `distress` is Items 1.03 and 2.04; `listing` is Item 3.01. */
11
+ export type DistressFilingKind = "distress" | "listing";
12
+
13
+ export interface DistressFilingsParams {
14
+ kind: DistressFilingKind;
15
+ /** 1 to 200; the route has no offset, so this is the whole list. */
16
+ limit?: number;
17
+ }
18
+
19
+ export interface DistressFilingsPayload {
20
+ events: CloudFilingEventPayload[];
21
+ }
22
+
23
+ export type GoingConcernVerdict = "doubt_raised" | "doubt_alleviated" | "policy_only" | "unclear";
24
+
25
+ export interface GoingConcernParams {
26
+ verdict?: GoingConcernVerdict;
27
+ limit?: number;
28
+ offset?: number;
29
+ }
30
+
31
+ export interface GoingConcernDisclosure {
32
+ id: string;
33
+ cik: string;
34
+ /** Venue-qualified trading symbol (`BMRA:NASDAQ`), null for a filer without one. */
35
+ ticker: string | null;
36
+ accession: string;
37
+ form: string;
38
+ period_end: string | null;
39
+ filed_at: string;
40
+ fact_date: string | null;
41
+ tag: string;
42
+ verdict: GoingConcernVerdict;
43
+ /** Whether the filing frames its assessment over one year; null when it does not say. */
44
+ within_one_year: boolean | null;
45
+ source_within_one_year: boolean | null;
46
+ summary: string;
47
+ quote: string;
48
+ text: string;
49
+ text_truncated: boolean;
50
+ dataset_month: string;
51
+ company: { ticker: string; cik: string | null; name: string; shortName: string };
52
+ filing_url: string;
53
+ }
54
+
55
+ export interface GoingConcernPayload {
56
+ disclosures: GoingConcernDisclosure[];
57
+ hasMore: boolean;
58
+ limit: number;
59
+ offset: number;
60
+ }
61
+
62
+ export type DesignationDateBasis = "designation" | "effective" | "first_observed";
63
+
64
+ export interface DistressDesignationsParams {
65
+ kind?: string;
66
+ exchange?: string;
67
+ limit?: number;
68
+ offset?: number;
69
+ }
70
+
71
+ export interface DistressDesignation {
72
+ id: string;
73
+ source: string;
74
+ region: string;
75
+ exchange: string;
76
+ /** Canonical listing key, e.g. `2867:TWSE`. */
77
+ symbol: string | null;
78
+ local_code: string;
79
+ entity_name: string;
80
+ entity_name_en: string | null;
81
+ market_segment: string | null;
82
+ /** `delisted`, `changed_trading_method` or `suspended`. */
83
+ kind: string;
84
+ designated_at: string | null;
85
+ effective_at: string | null;
86
+ first_seen_at: string;
87
+ last_seen_at: string;
88
+ ended_at: string | null;
89
+ remarks: string;
90
+ source_url: string;
91
+ notice_url: string | null;
92
+ date_basis: DesignationDateBasis;
93
+ }
94
+
95
+ /** The licence terms a source's rows are published under, reproduced with them. */
96
+ export interface DistressAttribution {
97
+ source: string;
98
+ organization: string;
99
+ dataset: string | null;
100
+ version: string | null;
101
+ year: number | null;
102
+ datasetUrls: string[];
103
+ licence: string;
104
+ licenceUrl: string;
105
+ notice: string;
106
+ }
107
+
108
+ export interface DistressDesignationsPayload {
109
+ designations: DistressDesignation[];
110
+ hasMore: boolean;
111
+ limit: number;
112
+ offset: number;
113
+ attributions: DistressAttribution[];
114
+ }
115
+
116
+ export interface InsolvencyNoticesParams {
117
+ country?: string;
118
+ kind?: string;
119
+ /** Company name prefix, two characters or more. */
120
+ name_prefix?: string;
121
+ limit?: number;
122
+ offset?: number;
123
+ }
124
+
125
+ export interface InsolvencyNotice {
126
+ source: string;
127
+ country: string;
128
+ /** SIREN in France, the Companies House number in the UK. */
129
+ registry_id: string;
130
+ entity_name: string;
131
+ symbol: string | null;
132
+ kind: string;
133
+ /** The official judgment label (France) or Gazette notice code (UK). */
134
+ raw_code: string;
135
+ /** Judgment or procedure date, when the notice states one. */
136
+ notice_date: string | null;
137
+ published_date: string;
138
+ court: string;
139
+ notice_id: string;
140
+ notice_url: string;
141
+ /** `annonce`, `rectificatif` or `annulation`. */
142
+ notice_type: string;
143
+ original_notice_id: string | null;
144
+ /** `active`, `superseded` or `cancelled`. */
145
+ status: string;
146
+ }
147
+
148
+ export interface InsolvencyNoticesPayload {
149
+ notices: InsolvencyNotice[];
150
+ hasMore: boolean;
151
+ limit: number;
152
+ offset: number;
153
+ attributions: DistressAttribution[];
154
+ }
155
+
156
+ /** `?a=1&b=2` from the defined, non-empty values; empty when there are none. */
157
+ export function distressQuery(params: object): string {
158
+ const query = new URLSearchParams();
159
+ for (const [key, value] of Object.entries(params)) {
160
+ if (value !== undefined && value !== null && value !== "") query.set(key, String(value));
161
+ }
162
+ const text = query.toString();
163
+ return text ? `?${text}` : "";
164
+ }
@@ -1,4 +1,7 @@
1
+ /** Cited company disclosures; Pro, omitted by older servers. */
2
+ export const KPI_FIELDS = ["kpiArr", "kpiNrrPercent", "kpiRpo", "kpiCrpo", "kpiSubscribers", "kpiDau", "kpiMau", "kpiGmv", "kpiTakeRatePercent", "kpiSameStoreSalesPercent", "kpiStores", "kpiBacklog", "kpiBookToBill", "kpiNimPercent", "kpiCet1Percent", "kpiCombinedRatioPercent", "kpiOccupancyPercent", "kpiLoadFactorPercent", "guideRevenueChangePercent", "guideEpsChangePercent"] as const;
1
3
  export const NUMERIC_FIELDS = [
4
+ ...KPI_FIELDS,
2
5
  "price",
3
6
  "changePercent",
4
7
  "volume",
@@ -26,6 +29,8 @@ export const NUMERIC_FIELDS = [
26
29
  "xPostsVsMedian",
27
30
  "wikiViewsPerDay",
28
31
  "wikiViewsVsMedian",
32
+ "attentionResearchUnits",
33
+ "attentionZScore",
29
34
  "return1WPercent",
30
35
  "return1MPercent",
31
36
  "return3MPercent",
@@ -40,9 +45,14 @@ export const NUMERIC_FIELDS = [
40
45
  "analystUpsidePercent",
41
46
  "ivRank",
42
47
  "ivToHv",
48
+ "hiringOpenRoles", "hiringNetAddsWeek", "hiringRemotePercent", "hiringZScore",
49
+ "appAttentionScore", "appRankVelocity7d", "appRatingDrift7d", "appRatingCountGrowth7d",
43
50
  ] as const;
51
+ /** Hiring and app attention are optional when connecting to an older server. */
52
+ export const HIRING_APP_FIELDS = ["hiringOpenRoles", "hiringNetAddsWeek", "hiringRemotePercent", "hiringZScore", "appAttentionScore", "appRankVelocity7d", "appRatingDrift7d", "appRatingCountGrowth7d"] as const;
44
53
  /** Social attention; a server from before them omits these metrics. */
45
54
  export const SOCIAL_FIELDS = ["xPostsPerDay", "xPostsVsMedian", "wikiViewsPerDay", "wikiViewsVsMedian"] as const;
55
+ export const ATTENTION_FIELDS = ["attentionResearchUnits", "attentionZScore"] as const;
46
56
  /** Returns, valuation, estimates and options; a server from before them omits these metrics. */
47
57
  export const RESEARCH_FIELDS = [
48
58
  "return1WPercent", "return1MPercent", "return3MPercent", "returnYtdPercent", "return1YPercent", "fromHigh52WPercent",
@@ -147,6 +157,7 @@ export interface SavedScreen {
147
157
  updatedAt: string;
148
158
  }
149
159
  export interface ScreenFieldDefinition {
160
+ access?: "pro";
150
161
  id: ScreenField;
151
162
  label: string;
152
163
  kind: "number" | "category";
@@ -0,0 +1,202 @@
1
+ type EvidenceTier = "structured" | "primary" | "secondary" | "imported";
2
+
3
+ export type ExposureRange = { low: number; high: number }
4
+ export type ExposureBasis =
5
+ | "revenue"
6
+ | "cost"
7
+ | "purchases"
8
+ | "receivables"
9
+ | "operating_income"
10
+ | "interest_expense"
11
+ | "debt"
12
+ type ExposureShockKind =
13
+ | "country"
14
+ | "commodity"
15
+ | "rate"
16
+ | "fx"
17
+ | "tariff"
18
+ | "supplier"
19
+ | "customer"
20
+ /** Percentages are percentage points. Weights alone are fractions of NAV. */
21
+ interface ExposureShock {
22
+ id: string
23
+ kind: ExposureShockKind
24
+ /** ISO country/currency code, commodity, or exact entity id/ticker/name. */
25
+ target: string
26
+ changePct?: number
27
+ changeBps?: number
28
+ /** Optional product restriction, e.g. a country export ban on semiconductors. */
29
+ products?: string[]
30
+ /** An explicit user assumption, never represented as a sourced disclosure. */
31
+ transmission?: {
32
+ basis: ExposureBasis
33
+ exposurePct: ExposureRange
34
+ /** Change in the denominator per unit change in the shock. */
35
+ factor: ExposureRange
36
+ direction?: 1 | -1
37
+ }
38
+ }
39
+ export interface ExposureScenario {
40
+ id?: string
41
+ label: string
42
+ shocks: ExposureShock[]
43
+ }
44
+ export interface ExposureHolding {
45
+ symbol: string
46
+ /** Signed fraction of NAV; 0.25 = 25%, -0.1 = 10% short. */
47
+ weight: number
48
+ }
49
+ export interface ExposureRequest {
50
+ holdings: ExposureHolding[]
51
+ scenario: ExposureScenario
52
+ depth?: number
53
+ /** Cash weight in NAV fractions, never used to renormalize holding weights. */
54
+ cashWeight?: number
55
+ }
56
+ export interface ExposureEvidence {
57
+ id: string
58
+ source: string
59
+ tier: EvidenceTier | "profile" | "user"
60
+ url: string | null
61
+ quote: string | null
62
+ asOf: string | null
63
+ period: string | null
64
+ units: string
65
+ currency: string | null
66
+ confidence: number | null
67
+ /** Corrections must supersede explicitly; adapters return the current revision. */
68
+ revision?: string | null
69
+ }
70
+ export interface ExposureExtensionObservation {
71
+ id: string
72
+ label: string
73
+ kind: "kpi" | "credit" | "guidance"
74
+ value: number | null
75
+ units: string
76
+ evidence: ExposureEvidence[]
77
+ currency?: string | null
78
+ period?: string | null
79
+ asOf?: string | null
80
+ basis?: string
81
+ dimensions?: Record<string, string>
82
+ qualifier?: string
83
+ range?: { low: number | null; high: number | null }
84
+ valueText?: string
85
+ status?: string
86
+ notes?: string[]
87
+ sensitivity?: {
88
+ kind: ExposureShockKind
89
+ target: string
90
+ basis: ExposureBasis
91
+ period: string
92
+ exposurePct: ExposureRange
93
+ factor: ExposureRange
94
+ direction: 1 | -1
95
+ } | null
96
+ }
97
+ interface ExposurePathHop {
98
+ from: { id: string; name: string; symbol: string | null; country: string | null }
99
+ to: { id: string; name: string; symbol: string | null; country: string | null }
100
+ evidence: ExposureEvidence[]
101
+ pct: number | null
102
+ basis: ExposureBasis | null
103
+ denominatorEntityId: string | null
104
+ }
105
+ export interface ExposureComponent {
106
+ id: string
107
+ shockId: string
108
+ label: string
109
+ channel: "geography" | "product" | "supplier" | "customer" | "profile" | "assumption" | "extension"
110
+ order: number
111
+ basis: ExposureBasis | null
112
+ period: string | null
113
+ classification: "disclosed" | "estimated" | "unknown"
114
+ exposurePct: ExposureRange | null
115
+ /** Estimated operating-denominator change; never a stock-return forecast. */
116
+ impactPct: ExposureRange | null
117
+ proportionalEstimatePct?: number | null
118
+ evidence: ExposureEvidence[]
119
+ path: ExposurePathHop[]
120
+ unknowns: string[]
121
+ /** Used only internally for validated disjoint revenue partitions. */
122
+ partition?: string | null
123
+ }
124
+ interface ExposureMeasure {
125
+ shockId: string
126
+ basis: ExposureBasis
127
+ period: string
128
+ exposurePct: ExposureRange
129
+ impactPct: ExposureRange | null
130
+ classification: "disclosed" | "estimated"
131
+ componentIds: string[]
132
+ /** True when an unquantified matching relationship prevents a complete bound. */
133
+ incomplete: boolean
134
+ }
135
+ interface ExposureHoldingResult {
136
+ symbol: string
137
+ name: string | null
138
+ weight: number
139
+ status: "quantified" | "partial" | "unknown"
140
+ measures: ExposureMeasure[]
141
+ components: ExposureComponent[]
142
+ extensions: ExposureExtensionObservation[]
143
+ unknowns: string[]
144
+ coverage: {
145
+ revenueRows: number
146
+ graphNodes: number
147
+ graphLinks: number
148
+ matchedPaths: number
149
+ quantifiedComponents: number
150
+ unknownComponents: number
151
+ graphComplete: boolean
152
+ oldestEvidenceAt: string | null
153
+ latestEvidenceAt: string | null
154
+ }
155
+ }
156
+ interface ExposurePortfolioMeasure {
157
+ shockId: string
158
+ basis: ExposureBasis
159
+ period: string
160
+ /** Holding-weighted operating exposure, in NAV-weighted percentage points. */
161
+ signedExposurePct: ExposureRange
162
+ grossExposurePct: ExposureRange
163
+ impactPct: ExposureRange | null
164
+ coveredGrossWeight: number
165
+ unknownGrossWeight: number
166
+ symbols: string[]
167
+ }
168
+ interface ExposureConcentration {
169
+ kind: "country" | "supplier" | "customer"
170
+ key: string
171
+ label: string
172
+ basis: ExposureBasis | null
173
+ period: string | null
174
+ grossExposurePct: ExposureRange | null
175
+ signedExposurePct: ExposureRange | null
176
+ grossHoldingWeight: number
177
+ symbols: string[]
178
+ evidence: ExposureEvidence[]
179
+ incomplete: boolean
180
+ }
181
+ export interface ExposurePayload {
182
+ version: 1
183
+ scenario: ExposureScenario
184
+ evaluatedAt: string
185
+ access: "full" | "preview"
186
+ depth: number
187
+ requestedHoldings: number
188
+ lockedHoldings: number
189
+ holdings: ExposureHoldingResult[]
190
+ portfolio: {
191
+ grossWeight: number
192
+ netWeight: number
193
+ cashWeight: number | null
194
+ /** 1 - net holding weights - explicit cash, financing/residual if not zero. */
195
+ residualWeight: number
196
+ measures: ExposurePortfolioMeasure[]
197
+ concentrations: ExposureConcentration[]
198
+ unknownGrossWeight: number
199
+ }
200
+ unknowns: string[]
201
+ methodology: string[]
202
+ }