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
package/README.md CHANGED
@@ -75,8 +75,14 @@ Press `Ctrl+P` to open the command bar, or press `` ` `` to search for a ticker.
75
75
  | `OPX SPY` / `GEX SPY` | Open interest by strike and expiry, max pain and dealer gamma ([method](docs/options-positioning.md)) |
76
76
  | `HVG AAPL` / `HVT AAPL` | Realized volatility and volatility cones |
77
77
  | `SEAS AAPL` | Seasonality: monthly returns by year and year overlays |
78
+ | `RDCF AAPL` | Reverse DCF: the cash flow growth the price assumes |
79
+ | `PEB AAPL` | P/E band: price against multiples of trailing EPS, and today's P/E in its own history |
80
+ | `SIW` | Short squeeze watch: crowded shorts in your portfolios and watchlists that are moving up |
81
+ | `RIPL` | Earnings Ripple: customers and suppliers of your holdings that report soon |
82
+ | `MDAY SPY` | Macro-day reaction: how a name moves on CPI, jobs and FOMC days against a normal day |
78
83
  | `COT [code or root]` | CFTC positioning and cross-market extremes |
79
84
  | `DOE` / `NGS` | EIA weekly oil stocks and gas storage, with builds, draws and five-year ranges |
85
+ | `CPI [component]` / `ECAN` | US consumer prices by component, with weights, contributions to the headline and the next release |
80
86
  | `TOP` | Market stories |
81
87
  | `WIRP` / `FFIP` | US rate path and conditional FOMC probabilities |
82
88
  | `BTMM` | Funding rates, bill curves and Federal Reserve liquidity |
@@ -84,7 +90,7 @@ Press `Ctrl+P` to open the command bar, or press `` ` `` to search for a ticker.
84
90
  | `PF` | Portfolios and watchlists |
85
91
  | `HELP` | Commands and keyboard shortcuts |
86
92
 
87
- Use `Tab` to switch panes and `j` / `k` to navigate lists. The [user guide](docs/usage.md) covers charts, broker setup, keyboard shortcuts, and the full command reference. See [research data conventions](docs/research-data.md) for return definitions, financial sources, and model assumptions.
93
+ Use `Tab` to switch panes and `j` / `k` to navigate lists. The [user guide](docs/usage.md) covers charts, broker setup, keyboard shortcuts, and the full command reference. See [research data conventions](docs/research-data.md) for return definitions, financial sources, and model assumptions. [Supply chain evidence](docs/supply-chain.md) explains Pro SPLC trust tiers, source evidence, reverse relationships, flow diagrams and multi-hop graphs and path searches. [Credit documents](docs/credit-documents.md) covers CRDOC/COVN capital structure, covenant headroom and amendment evidence. [Research attention](docs/research-attention.md) covers the Pro ATTN dataset, privacy-qualified counts and Gloom Trending. [Hiring and app attention](docs/hiring-app-attention.md) covers HIRE/APPS observations, evidence and Pro previews. [Government awards](docs/government-awards.md) covers AWARDS, procurement history and source coverage. [Distress records](docs/distress-monitor.md) covers DIST: 8-K filings, going-concern disclosures, listing designations and insolvency notices, with their dates and licences. [Power and grid capacity](docs/power-grid.md) covers POWER queues, large loads, utility exposure and source history. [Perpetual markets](docs/perpetuals.md) covers funding, open interest, premiums and Pro access. [Exposure analysis](docs/exposure.md) covers EXPO scenario estimates, portfolio weights and evidence paths.
88
94
 
89
95
  ## CLI
90
96
 
@@ -131,10 +137,12 @@ gloomberb config set telemetry.usage false
131
137
 
132
138
  Setting `GLOOMBERB_NO_TELEMETRY=1` or `DO_NOT_TRACK=1` in the environment turns all of it off. The browser app also honours Do Not Track and Global Privacy Control.
133
139
 
140
+ **Attention Counts are separate and off by default.** Run `Attention Counts` in the command bar and review the consent dialog to share ticker research counts for Gloom Trending. This sends ticker symbols and the kind of explicit research action only while signed in with a verified account. It does not send holdings, watchlist names, queries or an install id. Consent stays on this device; cloud sync cannot enable it elsewhere. Turn the setting off to discard unsent counts, or run `gloomberb config set telemetry.attention false`. The environment and browser opt-outs above also disable Attention Counts. See the [attention privacy review](docs/attention-privacy.md) for the authenticated collection boundary, retention, aggregation and remaining risks.
141
+
134
142
  ## Sponsors
135
143
 
136
144
  <a href="https://adjacent.markets/?ref=gloomberb"><img src="docs/assets/adjacent.svg" alt="Adjacent" width="56" /></a>
137
145
 
138
146
  [Adjacent](https://adjacent.markets/?ref=gloomberb) builds prediction-market indices, reference rates, and data. Thank you for backing Gloomberb's open-source work.
139
147
 
140
- To sponsor Gloomberb, email [hello@gloom.sh](mailto:hello@gloom.sh).
148
+ To sponsor Gloomberb, see [gloom.sh/sponsor](https://gloom.sh/sponsor).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gloomberb",
3
- "version": "0.15.8",
3
+ "version": "0.16.0",
4
4
  "packageManager": "bun@1.3.11",
5
5
  "description": "Market research and portfolio tracker for the terminal",
6
6
  "module": "src/public/index.ts",
@@ -0,0 +1,147 @@
1
+ type AppStore = "app-store" | "google-play"
2
+ export type AppChart = "free" | "paid" | "grossing" | "unranked"
3
+
4
+ export interface AppAttentionFilter {
5
+ symbol?: string
6
+ country?: string
7
+ chart?: AppChart
8
+ category?: string
9
+ days?: number
10
+ limit?: number
11
+ offset?: number
12
+ }
13
+ interface AppObservation {
14
+ appId: string
15
+ name: string
16
+ developer: string
17
+ developerId: string | null
18
+ appUrl: string
19
+ genres: string[]
20
+ genreIds: string[]
21
+ rank: number | null
22
+ rating: number | null
23
+ ratingCount: number | null
24
+ reviewCount: number | null
25
+ ratingObservedAt: string | null
26
+ ratingSourceUrl: string | null
27
+ symbol: string | null
28
+ exchange: string | null
29
+ entityId: string | null
30
+ parentEntityId: string | null
31
+ confidence: number
32
+ mappingSourceUrl: string | null
33
+ mappingRevisionId: string | null
34
+ }
35
+ interface AppStoredRow extends AppObservation {
36
+ sourceId: string
37
+ store: AppStore
38
+ country: string
39
+ chart: AppChart
40
+ category: string
41
+ chartLimit: number
42
+ sourceUrl: string
43
+ sourceUpdatedAt: string | null
44
+ observedAt: string
45
+ revisionId: string
46
+ supersedesRevisionId: string | null
47
+ }
48
+ interface AppAttentionRow extends AppStoredRow {
49
+ rankChange1d: number | null
50
+ rankChange7d: number | null
51
+ rankVelocity7d: number | null
52
+ ratingChange7d: number | null
53
+ ratingCountGrowth7d: number | null
54
+ reviewGrowth7d: number | null
55
+ stale: boolean
56
+ }
57
+ export interface AppCompany {
58
+ symbol: string
59
+ name: string
60
+ appCount: number
61
+ countryCount: number
62
+ chartCount: number
63
+ attentionScore: number | null
64
+ rankVelocity7d: number | null
65
+ ratingChange7d: number | null
66
+ ratingCountGrowth7d: number | null
67
+ comparableSeries7d: number
68
+ observedAt: string
69
+ }
70
+ interface AppHistoryPoint {
71
+ date: string
72
+ attentionScore: number | null
73
+ appCount: number
74
+ countryCount: number
75
+ seriesCount: number
76
+ rating: number | null
77
+ ratingCount: number | null
78
+ reviewCount: number | null
79
+ }
80
+ interface AppCountry {
81
+ country: string
82
+ appCount: number
83
+ rankedApps: number
84
+ attentionScore: number | null
85
+ rankVelocity7d: number | null
86
+ observedAt: string
87
+ }
88
+ interface AppSourceState {
89
+ sourceId: string
90
+ lastAttemptAt: string | null
91
+ lastOkAt: string | null
92
+ nextPollAt: string | null
93
+ failures: number
94
+ lastError: string | null
95
+ captures: number
96
+ }
97
+ export interface AppAttentionPayload {
98
+ generatedAt: string
99
+ requestedSymbol?: string
100
+ page?: { offset: number; limit: number; total: number; nextOffset: number | null }
101
+ symbol: string | null
102
+ access: "pro" | "preview"
103
+ status: "ready" | "collecting" | "unavailable"
104
+ summary: {
105
+ appCount: number
106
+ companyCount: number
107
+ countryCount: number
108
+ observationCount: number
109
+ mappedObservationCount: number
110
+ attentionScore: number | null
111
+ rankVelocity7d: number | null
112
+ ratingChange7d: number | null
113
+ ratingCountGrowth7d: number | null
114
+ comparableSeries7d: number
115
+ firstObservedAt: string | null
116
+ lastObservedAt: string | null
117
+ }
118
+ apps: AppAttentionRow[]
119
+ companies: AppCompany[]
120
+ peers: AppCompany[]
121
+ countries: AppCountry[]
122
+ history: AppHistoryPoint[]
123
+ spreads: Array<{ appId: string; name: string; chart: AppChart; category: string; bestCountry: string; bestRank: number; worstCountry: string; worstRank: number; spread: number; countryCount: number }>
124
+ evidence: Array<{ revisionId: string; supersedesRevisionId: string | null; sourceId: string; sourceUrl: string; observedAt: string; sourceUpdatedAt: string | null; appId: string; name: string; country: string; chart: AppChart; rank: number | null; rating: number | null; ratingCount: number | null; reviewCount: number | null; ratingSourceUrl: string | null; mappingSourceUrl: string | null; confidence: number }>
125
+ coverage: {
126
+ configuredCountries: string[]
127
+ observedCountries: string[]
128
+ availableCharts: AppChart[]
129
+ categories: string[]
130
+ sources: AppSourceState[]
131
+ limitations: string[]
132
+ historyDays: number
133
+ staleAfterHours: number
134
+ }
135
+ locked: { apps: number; companies: number; peers: number; countries: number; history: number; spreads: number; evidence: number }
136
+ }
137
+
138
+ export interface AppRankPayload {
139
+ generatedAt: string;
140
+ access: "pro" | "preview";
141
+ status: "ready" | "collecting";
142
+ store: AppStore;
143
+ appId: string;
144
+ rankHistory: Array<{ appId: string; name: string; store: AppStore; country: string; chart: AppChart; category: string; date: string; rank: number | null; rating: number | null; ratingCount: number | null; reviewCount: number | null; observedAt: string; sourceUpdatedAt: string | null; ratingSourceUrl: string | null; present: boolean; sourceUrl: string; revisionId: string; chartLimit: number }>;
145
+ page: { offset: number; limit: number; total: number; nextOffset: number | null };
146
+ locked: number;
147
+ }
@@ -0,0 +1,26 @@
1
+ export type AttentionWindow = "now" | "today" | "week";
2
+ export interface AttentionPoint {
3
+ bucketStart: string; researchUnits: number; publishedAt?: string; minimumContributors?: number;
4
+ rounding?: number; lagHours?: number; methodologyVersion?: number;
5
+ }
6
+ export interface AttentionRow {
7
+ symbol: string; ticker: string; exchange: string; name: string | null; country: string | null; sector: string | null;
8
+ rank: number; researchUnits: number; sharePct: number; zScore: number | null; baselinePeriods: number;
9
+ priceChangePct: number | null; relativeVolume: number | null; marketAsOf: string | null; relativeVolumeAsOf?: string | null;
10
+ news: Array<{ title: string; url: string; publishedAt: string }>;
11
+ history: AttentionPoint[];
12
+ evidence: { source: string; asOf: string; periodStart: string; periodEnd: string; unit: string; confidence: string; methodologyVersion: number };
13
+ }
14
+ export interface AttentionGroup { name: string; researchUnits: number; sharePct: number; tickers: number }
15
+ export interface AttentionPayload {
16
+ generatedAt: string; asOf: string | null; window: AttentionWindow; periodStart: string; periodEnd: string;
17
+ status: "disabled" | "collecting" | "ready"; stale: boolean;
18
+ rows: AttentionRow[]; sectors: AttentionGroup[]; countries: AttentionGroup[];
19
+ privacy: { minimumContributors: number; rounding: number; lagHours: number; methodologyVersion: number };
20
+ coverage: { publishedHours: number; publishedTickers: number; baselineDays: number };
21
+ history?: AttentionPoint[];
22
+ selectedListing?: Pick<AttentionRow, "symbol" | "ticker" | "exchange" | "name" | "country" | "sector"> | null;
23
+ historyEvidence?: AttentionRow["evidence"] | null;
24
+ methodologyUrl: string; entitlement: "pro" | "preview"; truncated: boolean;
25
+ counts: { rows: number; sectors: number; countries: number };
26
+ }
@@ -0,0 +1,215 @@
1
+ /** Public-source financial amounts remain decimal strings through persistence and REST. */
2
+ export type AwardType = "prime" | "subaward" | "modification" | "notice"
3
+ interface AwardIdentifier {
4
+ scheme: "uei" | "duns" | "cage" | "lei" | "source" | "cik"
5
+ value: string
6
+ }
7
+ interface AwardRecipient {
8
+ name: string
9
+ identifiers?: AwardIdentifier[]
10
+ country?: string | null
11
+ }
12
+ export interface AwardInput {
13
+ source: string
14
+ sourceAwardId: string
15
+ sourceRevisionId?: string | null
16
+ jurisdiction: string
17
+ awardType: AwardType
18
+ awardStatus?: string | null
19
+ title: string
20
+ description?: string | null
21
+ awardDate: string
22
+ dateBasis?: "award" | "publication" | "period-start"
23
+ dataBasis?:
24
+ | "api-award"
25
+ | "api-search"
26
+ | "api-combined"
27
+ | "bulk-latest-transaction"
28
+ | "bulk-transaction"
29
+ | "api-transaction"
30
+ | "combined-transaction"
31
+ dataEffectiveDate?: string
32
+ fieldAsOf?: Record<string, string>
33
+ fieldSourceUrls?: Record<string, string>
34
+ periodStart?: string | null
35
+ periodEnd?: string | null
36
+ fiscalYear?: number | null
37
+ currency: string
38
+ /** Cumulative award obligation. Never sum this with transaction flows. */
39
+ obligatedAmount?: string | null
40
+ ceilingAmount?: string | null
41
+ /** Face value for awards; action amount for modification records. */
42
+ awardAmount?: string | null
43
+ recipient: AwardRecipient
44
+ agency: { id?: string | null; name: string; parentName?: string | null }
45
+ parentAwardId?: string | null
46
+ parentSource?: string | null
47
+ parentRecipient?: AwardRecipient | null
48
+ transactionId?: string | null
49
+ modificationNumber?: string | null
50
+ actionType?: string | null
51
+ classifications?: { scheme: string; code: string; label?: string }[]
52
+ naics?: string | null
53
+ psc?: string | null
54
+ sector?: string | null
55
+ placeOfPerformance?: {
56
+ country?: string | null
57
+ region?: string | null
58
+ city?: string | null
59
+ } | null
60
+ sourceUrl: string
61
+ publishedAt?: string | null
62
+ sourceUpdatedAt?: string | null
63
+ evidenceQuote?: string | null
64
+ confidence?: number
65
+ rawPayload?: unknown
66
+ }
67
+ interface AwardEntityMatch {
68
+ ticker: string
69
+ exchange: string | null
70
+ legalName: string
71
+ parentName: string | null
72
+ cik: string | null
73
+ method: "identifier" | "legal-name" | "verified-alias"
74
+ evidenceUrl: string
75
+ confidence: number
76
+ }
77
+ export interface AwardRow extends AwardInput {
78
+ id: string
79
+ revisionId: string
80
+ observedAt: string
81
+ entity: AwardEntityMatch | null
82
+ revenueComparison: AwardRevenueComparison | null
83
+ }
84
+ interface AwardRevenueComparison {
85
+ awardAmount: string
86
+ annualRevenue: string
87
+ currency: string
88
+ periodStart: string
89
+ periodEnd: string
90
+ filedAt: string
91
+ sourceUrl: string
92
+ percent: number
93
+ basis: "award-value" | "obligated"
94
+ }
95
+ export interface AwardFilter {
96
+ ticker?: string
97
+ parentId?: string
98
+ jurisdiction?: string
99
+ agency?: string
100
+ sector?: string
101
+ source?: string
102
+ awardType?: AwardType
103
+ currency?: string
104
+ from?: string
105
+ to?: string
106
+ fiscalYear?: number
107
+ query?: string
108
+ minAmount?: string
109
+ cursor?: string
110
+ limit?: number
111
+ }
112
+ export interface AwardAggregate {
113
+ source: string
114
+ key: string
115
+ label: string
116
+ currency: string
117
+ awardType: AwardType
118
+ count: number
119
+ obligatedAmount: string | null
120
+ ceilingAmount: string | null
121
+ awardAmount: string | null
122
+ sharePercent: number | null
123
+ }
124
+ export interface AwardCompanyLeader extends AwardAggregate {
125
+ sector: string
126
+ ticker: string | null
127
+ exchange: string | null
128
+ }
129
+ export interface AwardHistoryPoint {
130
+ source: string
131
+ month: string
132
+ currency: string
133
+ awardType: AwardType
134
+ count: number
135
+ obligatedAmount: string | null
136
+ ceilingAmount: string | null
137
+ awardAmount: string | null
138
+ cumulativeObligatedAmount: string | null
139
+ }
140
+ interface AwardSourceState {
141
+ source: string
142
+ enabled: boolean
143
+ lastAttemptAt: string | null
144
+ lastOkAt: string | null
145
+ nextPollAt: string | null
146
+ failures: number
147
+ lastError: string | null
148
+ cursor: string | null
149
+ coverageStart: string | null
150
+ coverageEnd: string | null
151
+ coverageComplete: boolean
152
+ records: number
153
+ requestsToday: number
154
+ }
155
+ interface AwardCoverage {
156
+ source: string
157
+ startDate: string
158
+ endDate: string
159
+ status: "pending" | "running" | "complete" | "failed"
160
+ records: number
161
+ pages: number
162
+ cursor: string | null
163
+ lastError: string | null
164
+ updatedAt: string
165
+ }
166
+ export interface AwardsPayload {
167
+ generatedAt: string
168
+ asOf: string | null
169
+ status: "available" | "partial" | "unavailable"
170
+ access: "full" | "preview"
171
+ rows: AwardRow[]
172
+ nextCursor: string | null
173
+ agencies: AwardAggregate[]
174
+ sectors: AwardAggregate[]
175
+ leaders: AwardCompanyLeader[]
176
+ history: AwardHistoryPoint[]
177
+ alerts: AwardRow[]
178
+ sources: AwardSourceState[]
179
+ coverage: AwardCoverage[]
180
+ gaps: string[]
181
+ locked: boolean
182
+ truncated?: {
183
+ agencies: boolean
184
+ sectors: boolean
185
+ history: boolean
186
+ leaders: boolean
187
+ }
188
+ }
189
+ interface AwardRevision {
190
+ id: string
191
+ observedAt: string
192
+ sourceUpdatedAt: string | null
193
+ supersedes: string | null
194
+ award: AwardInput
195
+ }
196
+ interface AwardEdge {
197
+ kind: "government-customer" | "subcontractor"
198
+ from: AwardRecipient
199
+ to: AwardRecipient
200
+ awardId: string
201
+ sourceUrl: string
202
+ amount: string | null
203
+ currency: string
204
+ }
205
+ export interface AwardDetailPayload {
206
+ nextRevisionsCursor?: string | null
207
+ truncated?: { revisions: boolean; subawards: boolean; modifications: boolean }
208
+ row: AwardRow | null
209
+ revisions: AwardRevision[]
210
+ subawards: AwardRow[]
211
+ modifications: AwardRow[]
212
+ edges: AwardEdge[]
213
+ access: "full" | "preview"
214
+ locked: boolean
215
+ }
@@ -0,0 +1,160 @@
1
+ type QuoteMatchMode = "exact" | "whitespace" | "normalized"
2
+
3
+ export const CATALYST_TYPES = ["regulatory", "clinical", "litigation", "antitrust", "recall", "sanctions", "export_control", "tariff", "rulemaking", "approval", "advisory", "pdufa"] as const
4
+ export type CatalystType = (typeof CATALYST_TYPES)[number]
5
+ type DatePrecision = "day" | "month" | "year"
6
+ interface CatalystIdentifiers {
7
+ cik?: string
8
+ lei?: string
9
+ isin?: string
10
+ tickers?: Array<{ ticker: string; exchange?: string | null }>
11
+ [key: string]: unknown
12
+ }
13
+ interface CatalystPartyInput {
14
+ name: string
15
+ role?: string
16
+ identifiers?: CatalystIdentifiers
17
+ }
18
+ interface CatalystParty extends CatalystPartyInput {
19
+ entityId: string | null
20
+ ticker: string | null
21
+ exchange: string | null
22
+ resolution: "identifier" | "alias" | "unresolved"
23
+ confidence: number
24
+ }
25
+ interface CatalystOpinion {
26
+ label: "Model opinion"
27
+ direction: "positive" | "negative" | "mixed" | "uncertain"
28
+ type: CatalystType
29
+ rationale: string
30
+ quote: string
31
+ quoteOffset: number
32
+ quoteSourceLength: number
33
+ quoteMatchMode: QuoteMatchMode
34
+ confidence: number
35
+ model: string
36
+ gateModel: string
37
+ generatedAt: string
38
+ promptVersion: string
39
+ }
40
+ interface CatalystInput {
41
+ source: string
42
+ externalId: string
43
+ type: CatalystType
44
+ agency: string
45
+ jurisdiction: string
46
+ country?: string | null
47
+ title: string
48
+ summary: string
49
+ status: string
50
+ announcedDate?: string | null
51
+ effectiveDate?: string | null
52
+ deadlineDate?: string | null
53
+ datePrecision?: { announced?: DatePrecision; effective?: DatePrecision; deadline?: DatePrecision }
54
+ parties: CatalystPartyInput[]
55
+ sourceUrl: string
56
+ sourceDocumentId?: string | null
57
+ language?: string
58
+ observedAt: string
59
+ sourcePublishedAt?: string | null
60
+ quote?: string | null
61
+ /** Kept privately for evidence validation and repeatable extraction. */
62
+ sourceText?: string
63
+ confidence: number
64
+ metadata?: Record<string, unknown>
65
+ sector?: string | null
66
+ opinion?: CatalystOpinion | null
67
+ }
68
+ interface CatalystChange { field: string; before: unknown; after: unknown }
69
+ export interface CatalystEvent extends Omit<CatalystInput, "parties" | "sourceText"> {
70
+ id: string
71
+ revisionId: string
72
+ revision: number
73
+ parties: CatalystParty[]
74
+ announcedDate: string | null
75
+ effectiveDate: string | null
76
+ deadlineDate: string | null
77
+ datePrecision: NonNullable<CatalystInput["datePrecision"]>
78
+ country: string | null
79
+ sector: string | null
80
+ language: string
81
+ quote: string | null
82
+ quoteOffset: number | null
83
+ quoteSourceLength: number | null
84
+ quoteMatchMode: QuoteMatchMode | null
85
+ opinion: CatalystOpinion | null
86
+ changes: CatalystChange[]
87
+ supersedesRevisionId: string | null
88
+ firstSeenAt: string
89
+ lastSeenAt: string
90
+ }
91
+ export interface CatalystFilters {
92
+ symbol?: string
93
+ type?: CatalystType
94
+ agency?: string
95
+ country?: string
96
+ sector?: string
97
+ status?: string
98
+ source?: string
99
+ search?: string
100
+ from?: string
101
+ to?: string
102
+ dateField?: "announced" | "effective" | "deadline" | "observed" | "any"
103
+ upcoming?: boolean
104
+ changed?: boolean
105
+ litigation?: boolean
106
+ limit?: number
107
+ offset?: number
108
+ }
109
+ interface CatalystSource {
110
+ id: string
111
+ name: string
112
+ agency: string
113
+ jurisdiction: string
114
+ country: string
115
+ enabled: boolean
116
+ disabledReason?: string
117
+ homepage: string
118
+ termsUrl?: string
119
+ cadenceMinutes: number
120
+ coverage: string
121
+ }
122
+ interface CatalystSourceState {
123
+ source: string
124
+ lastOkAt: string | null
125
+ lastAttemptAt: string | null
126
+ nextPollAt: string | null
127
+ failures: number
128
+ lastError: string | null
129
+ cursor: string | null
130
+ etag: string | null
131
+ lastModified: string | null
132
+ eventsSeen: number
133
+ }
134
+ interface CatalystCoverage {
135
+ sources: Array<CatalystSource & { state: CatalystSourceState | null; events: number }>
136
+ totalEvents: number
137
+ linkedEvents: number
138
+ unresolvedParties: number
139
+ jurisdictions: string[]
140
+ firstObservedAt: string | null
141
+ lastObservedAt: string | null
142
+ }
143
+ export interface CatalystResponse {
144
+ events: CatalystEvent[]
145
+ total: number
146
+ limit: number
147
+ offset: number
148
+ asOf: string
149
+ filters: CatalystFilters
150
+ coverage: CatalystCoverage
151
+ facets: { types: string[]; agencies: string[]; countries: string[]; sectors: string[]; statuses: string[] }
152
+ access?: { pro: boolean; lockedRows: number; previewLimit: number }
153
+ }
154
+ export interface CatalystDetail { event: CatalystEvent; history: CatalystEvent[]; historyTotal?: number; historyTruncated?: boolean; historyOffset?: number; historyLimit?: number; historyHasMore?: boolean; asOf: string; access?: { pro: boolean; lockedRows: number; previewLimit: number } }
155
+ export interface CatalystStatus {
156
+ ready: boolean
157
+ coverage: CatalystCoverage
158
+ }
159
+
160
+ export interface CatalystChanges extends CatalystResponse { nextCursor: string | null; hasMore: boolean }