@gloom-sh/terminal 0.18.5 → 0.19.1

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 (570) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +1 -1
  3. package/package.json +1 -1
  4. package/patches/electrobun@1.18.1.patch +163 -8
  5. package/src/api-client/app-attention.ts +3 -0
  6. package/src/api-client/beneficial-owners.ts +3 -0
  7. package/src/api-client/company-kpis.ts +3 -0
  8. package/src/api-client/cot.ts +6 -2
  9. package/src/api-client/credit-documents.ts +6 -0
  10. package/src/api-client/data.ts +19 -7
  11. package/src/api-client/equity-screener.ts +24 -0
  12. package/src/api-client/fund-facts.ts +45 -4
  13. package/src/api-client/hiring.ts +3 -0
  14. package/src/api-client/index.ts +15 -0
  15. package/src/api-client/ipo.ts +24 -1
  16. package/src/api-client/market-discovery.ts +10 -0
  17. package/src/api-client/market-movers.ts +7 -0
  18. package/src/api-client/members.ts +1 -1
  19. package/src/api-client/mna.ts +3 -0
  20. package/src/api-client/paths.ts +9 -1
  21. package/src/api-client/perps.ts +43 -0
  22. package/src/api-client/research-activity.ts +3 -2
  23. package/src/api-client/roadmap.ts +85 -0
  24. package/src/api-client/types.ts +82 -2
  25. package/src/app/pane-runtime/plugin-bindings.ts +9 -5
  26. package/src/app/runtime/broker-import.ts +0 -2
  27. package/src/app/runtime/plugin-bindings.ts +73 -56
  28. package/src/architecture/core-builtin-allowlist.json +2 -2
  29. package/src/architecture/pane-tabs-allowlist.json +3 -0
  30. package/src/architecture/ttl-caches-allowlist.json +19 -0
  31. package/src/brokers/sync-broker-instance.ts +2 -8
  32. package/src/capabilities/chart-series.ts +1 -1
  33. package/src/cli/commands/crypto-hints.ts +40 -24
  34. package/src/cli/commands/market.ts +107 -38
  35. package/src/cli/commands/news-search.ts +22 -0
  36. package/src/cli/commands/options-chain.ts +48 -7
  37. package/src/cli/commands/options-leaps.ts +9 -3
  38. package/src/cli/commands/overview.ts +147 -32
  39. package/src/cli/commands/search.ts +21 -1
  40. package/src/cli/commands/themes.ts +11 -2
  41. package/src/cli/commands/ticker.ts +87 -36
  42. package/src/cli/company-name-hint.ts +41 -0
  43. package/src/cli/earnings-calendar.ts +1 -1
  44. package/src/cli/errors.ts +25 -2
  45. package/src/cli/glossary.ts +31 -2
  46. package/src/cli/history-rows.ts +57 -9
  47. package/src/cli/index-roots.ts +0 -7
  48. package/src/cli/index.ts +2 -0
  49. package/src/cli/listing-arg.ts +235 -60
  50. package/src/cli/output-file.ts +68 -0
  51. package/src/cli/pane-functions/capabilities.ts +4 -0
  52. package/src/cli/pane-functions/catalog.ts +80 -7
  53. package/src/cli/pane-functions/discovery.ts +21 -1
  54. package/src/cli/pane-functions/dom.ts +13 -3
  55. package/src/cli/pane-functions/freshness.ts +93 -4
  56. package/src/cli/pane-functions/function-help.ts +20 -10
  57. package/src/cli/pane-functions/headless.ts +17 -7
  58. package/src/cli/pane-functions/index.ts +54 -16
  59. package/src/cli/pane-functions/market-session.ts +66 -4
  60. package/src/cli/pane-functions/options.ts +19 -1
  61. package/src/cli/pane-functions/resolver.ts +19 -8
  62. package/src/cli/pane-functions/screenshot-assessment.ts +6 -4
  63. package/src/cli/pane-functions/screenshot-types.ts +5 -0
  64. package/src/cli/quote-answer.ts +22 -11
  65. package/src/cli/saved-copy-persistence.ts +88 -0
  66. package/src/cli/ticker-resolution.ts +3 -2
  67. package/src/components/chart/composite/composite-chart.tsx +4 -0
  68. package/src/components/chart/composite/interactions.ts +6 -0
  69. package/src/components/chart/composite/legend.tsx +45 -7
  70. package/src/components/chart/composite/panel-gestures.ts +33 -0
  71. package/src/components/chart/composite/panel-surface.tsx +52 -3
  72. package/src/components/chart/composite/rasterizer.ts +24 -13
  73. package/src/components/chart/composite/scene.ts +39 -4
  74. package/src/components/chart/composite/series-cues.ts +14 -0
  75. package/src/components/chart/composite/text-renderer.ts +9 -2
  76. package/src/components/chart/composite/tool-catalog.ts +36 -0
  77. package/src/components/chart/composite/tools.ts +203 -44
  78. package/src/components/chart/composite/use-composite-chart-keyboard.ts +11 -4
  79. package/src/components/command-bar/assist/inventory.ts +2 -1
  80. package/src/components/command-bar/commands/direct/index.ts +28 -13
  81. package/src/components/command-bar/list/model.ts +5 -0
  82. package/src/components/command-bar/pane-templates/items.ts +3 -2
  83. package/src/components/command-bar/routes/root/runtime.ts +6 -7
  84. package/src/components/command-bar/selection-runtime.ts +52 -3
  85. package/src/components/command-bar/surface/index.tsx +2 -0
  86. package/src/components/command-bar/workflow/collection-actions.ts +3 -3
  87. package/src/components/layout/pane/capture-stamp.ts +2 -2
  88. package/src/components/layout/pane/footer/index.tsx +22 -6
  89. package/src/components/layout/pane/footer/model.ts +83 -15
  90. package/src/components/layout/pane/status-footer.ts +35 -2
  91. package/src/components/layout/status-widget-space.ts +9 -0
  92. package/src/components/onboarding/onboarding-wizard.tsx +4 -1
  93. package/src/components/onboarding/portfolio-step/positions-panel.tsx +12 -7
  94. package/src/components/onboarding/wizard-broker-sync.ts +0 -1
  95. package/src/components/onboarding/wizard-positions.ts +3 -3
  96. package/src/components/ticker/list-table-view.tsx +8 -21
  97. package/src/components/ui/choice-dialog.tsx +23 -18
  98. package/src/components/ui/choice-groups.ts +18 -0
  99. package/src/components/ui/data-table/opentui/index.tsx +9 -7
  100. package/src/components/ui/data-table/opentui/model.ts +26 -1
  101. package/src/components/ui/data-table/types.ts +2 -0
  102. package/src/components/ui/display.tsx +18 -3
  103. package/src/components/ui/icon.tsx +4 -1
  104. package/src/components/ui/list-view.tsx +8 -4
  105. package/src/components/ui/query-bar-keys.tsx +2 -0
  106. package/src/components/ui/query-bar.tsx +1 -0
  107. package/src/components/ui/select-button.tsx +5 -1
  108. package/src/components/ui/select-field.tsx +1 -0
  109. package/src/components/ui/table-layout.ts +8 -5
  110. package/src/core/app-runtime.ts +2 -0
  111. package/src/core/app-services.ts +2 -2
  112. package/src/data/config/chart-settings.ts +1 -1
  113. package/src/data/json-ticker-repository.ts +17 -8
  114. package/src/data/plugin-cache.ts +5 -3
  115. package/src/data/saved-copies.ts +8 -0
  116. package/src/data/ticker-repository.ts +16 -9
  117. package/src/data/ticker-writes.ts +81 -0
  118. package/src/data/ttl-cache.ts +165 -0
  119. package/src/docs/snapshot.json +103 -142
  120. package/src/i18n/es.ts +20 -6
  121. package/src/i18n/ja.ts +20 -6
  122. package/src/i18n/ko.ts +20 -6
  123. package/src/i18n/zh-cn.ts +20 -6
  124. package/src/i18n/zh-tw.ts +20 -6
  125. package/src/market-data/depositary-pair.ts +27 -3
  126. package/src/market-data/fund-facts.ts +50 -0
  127. package/src/market-data/market/change-basis.ts +16 -3
  128. package/src/market-data/market/format.ts +25 -0
  129. package/src/market-data/market/freshness.ts +2 -1
  130. package/src/market-data/options-alternatives.ts +81 -4
  131. package/src/market-data/quotes/metadata.ts +7 -0
  132. package/src/news/aggregator.ts +119 -9
  133. package/src/news/cloud-session.ts +21 -0
  134. package/src/news/hooks.ts +1 -0
  135. package/src/news/news-model.ts +1 -0
  136. package/src/news/types.ts +17 -0
  137. package/src/plugins/builtin/alerts/alert-engine.ts +20 -1
  138. package/src/plugins/builtin/alerts/alert-log.ts +33 -0
  139. package/src/plugins/builtin/alerts/calendar-events.ts +10 -4
  140. package/src/plugins/builtin/alerts/cli-forms.ts +216 -0
  141. package/src/plugins/builtin/alerts/cli.ts +362 -80
  142. package/src/plugins/builtin/alerts/command.ts +25 -1
  143. package/src/plugins/builtin/alerts/event-rows.ts +24 -3
  144. package/src/plugins/builtin/alerts/events-pane.tsx +34 -10
  145. package/src/plugins/builtin/alerts/fired-log.ts +73 -9
  146. package/src/plugins/builtin/alerts/format.ts +75 -5
  147. package/src/plugins/builtin/alerts/headless.ts +34 -12
  148. package/src/plugins/builtin/alerts/history-rows.ts +3 -2
  149. package/src/plugins/builtin/alerts/history.ts +1 -1
  150. package/src/plugins/builtin/alerts/index.tsx +79 -16
  151. package/src/plugins/builtin/alerts/metric-command.ts +77 -4
  152. package/src/plugins/builtin/alerts/metric-data.ts +54 -13
  153. package/src/plugins/builtin/alerts/metric-model.ts +163 -14
  154. package/src/plugins/builtin/alerts/metric-parity-fixture.json +1 -1
  155. package/src/plugins/builtin/alerts/pane.tsx +61 -23
  156. package/src/plugins/builtin/alerts/quotes.ts +6 -0
  157. package/src/plugins/builtin/alerts/storage.ts +12 -8
  158. package/src/plugins/builtin/alerts/types.ts +4 -0
  159. package/src/plugins/builtin/analytics/index.tsx +2 -1
  160. package/src/plugins/builtin/analytics/risk-client.ts +16 -5
  161. package/src/plugins/builtin/analytics/risk-fx.ts +70 -15
  162. package/src/plugins/builtin/analytics/risk-headless.ts +27 -0
  163. package/src/plugins/builtin/analytics/risk-model.ts +55 -9
  164. package/src/plugins/builtin/analytics/risk-pane.tsx +8 -2
  165. package/src/plugins/builtin/attention/index.tsx +2 -1
  166. package/src/plugins/builtin/attention/listing.ts +14 -0
  167. package/src/plugins/builtin/broker-manager/index.tsx +7 -3
  168. package/src/plugins/builtin/buildout/cells.tsx +12 -4
  169. package/src/plugins/builtin/buildout/format.ts +38 -0
  170. package/src/plugins/builtin/buildout/model/normalizers.ts +36 -1
  171. package/src/plugins/builtin/buildout/pane/index.tsx +4 -1
  172. package/src/plugins/builtin/buildout/table-model.ts +23 -2
  173. package/src/plugins/builtin/builtin-plugin-meta.ts +6 -2
  174. package/src/plugins/builtin/cds/client.ts +142 -30
  175. package/src/plugins/builtin/cds/headless.ts +35 -8
  176. package/src/plugins/builtin/cds/model.ts +145 -18
  177. package/src/plugins/builtin/cds/pane.tsx +16 -5
  178. package/src/plugins/builtin/changelog/index.tsx +9 -6
  179. package/src/plugins/builtin/chart-composer/catalog-inventory.ts +3 -0
  180. package/src/plugins/builtin/chart-composer/cli-options.ts +4 -0
  181. package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +7 -0
  182. package/src/plugins/builtin/chart-composer/editor/controller.ts +2 -2
  183. package/src/plugins/builtin/chart-composer/follow-binding.ts +14 -2
  184. package/src/plugins/builtin/chart-composer/headless-schema.ts +7 -1
  185. package/src/plugins/builtin/chart-composer/headless.ts +6 -1
  186. package/src/plugins/builtin/chart-composer/index.tsx +5 -6
  187. package/src/plugins/builtin/chart-composer/pane.tsx +37 -8
  188. package/src/plugins/builtin/chart-composer/settings.ts +27 -0
  189. package/src/plugins/builtin/chat/content/command-suggestions.ts +1 -0
  190. package/src/plugins/builtin/chat/controller/index.ts +5 -1
  191. package/src/plugins/builtin/chat/controller/notifications.ts +33 -3
  192. package/src/plugins/builtin/chat/controller/state.ts +25 -2
  193. package/src/plugins/builtin/chat/controller/unread-people.ts +89 -23
  194. package/src/plugins/builtin/chat/controller/utils.ts +7 -2
  195. package/src/plugins/builtin/chat/pane-links/commands.ts +7 -1
  196. package/src/plugins/builtin/chat/status-preview.ts +79 -0
  197. package/src/plugins/builtin/chat/status-widget.tsx +147 -10
  198. package/src/plugins/builtin/chat/unread-badge.ts +51 -10
  199. package/src/plugins/builtin/clinical-trials/client.ts +49 -4
  200. package/src/plugins/builtin/clinical-trials/model.ts +86 -31
  201. package/src/plugins/builtin/clinical-trials/pane.tsx +61 -49
  202. package/src/plugins/builtin/clinical-trials/sponsor-listing.ts +90 -0
  203. package/src/plugins/builtin/clinical-trials/sponsor-tickers.ts +95 -15
  204. package/src/plugins/builtin/clinical-trials/trial-pages.ts +50 -0
  205. package/src/plugins/builtin/cloud/askg/manifest.ts +2 -0
  206. package/src/plugins/builtin/company-attention/building.tsx +5 -1
  207. package/src/plugins/builtin/company-attention/client.ts +8 -9
  208. package/src/plugins/builtin/company-attention/evidence.ts +4 -1
  209. package/src/plugins/builtin/company-attention/headless.ts +2 -1
  210. package/src/plugins/builtin/company-attention/moves.tsx +5 -1
  211. package/src/plugins/builtin/company-attention/pane.tsx +12 -2
  212. package/src/plugins/builtin/company-attention/signals.tsx +5 -1
  213. package/src/plugins/builtin/company-kpis/headless.ts +8 -3
  214. package/src/plugins/builtin/company-kpis/model.ts +73 -5
  215. package/src/plugins/builtin/company-kpis/pane.tsx +15 -7
  216. package/src/plugins/builtin/composite-plugins.ts +2 -1
  217. package/src/plugins/builtin/correlation/headless.ts +13 -5
  218. package/src/plugins/builtin/correlation/history.ts +22 -0
  219. package/src/plugins/builtin/cot/client.ts +22 -18
  220. package/src/plugins/builtin/cot/headless.ts +15 -10
  221. package/src/plugins/builtin/cot/model.ts +14 -1
  222. package/src/plugins/builtin/cot/pane.tsx +22 -14
  223. package/src/plugins/builtin/credit-boards/client.ts +6 -10
  224. package/src/plugins/builtin/credit-conditions/headless.ts +8 -2
  225. package/src/plugins/builtin/credit-conditions/index.tsx +5 -1
  226. package/src/plugins/builtin/credit-conditions/model.ts +4 -0
  227. package/src/plugins/builtin/credit-conditions/series.ts +3 -1
  228. package/src/plugins/builtin/credit-documents/detail.tsx +2 -2
  229. package/src/plugins/builtin/credit-documents/export.ts +173 -0
  230. package/src/plugins/builtin/credit-documents/headless.ts +10 -10
  231. package/src/plugins/builtin/credit-documents/model.ts +104 -14
  232. package/src/plugins/builtin/credit-documents/pane.tsx +12 -5
  233. package/src/plugins/builtin/custom-view/sources.ts +2 -0
  234. package/src/plugins/builtin/dividend-yield/client.ts +131 -23
  235. package/src/plugins/builtin/dividend-yield/headless.ts +44 -16
  236. package/src/plugins/builtin/dividend-yield/model.ts +8 -5
  237. package/src/plugins/builtin/dividend-yield/pane.tsx +38 -13
  238. package/src/plugins/builtin/dividend-yield/ranking.ts +37 -14
  239. package/src/plugins/builtin/dividend-yield/types.ts +20 -2
  240. package/src/plugins/builtin/dividend-yield/view.ts +30 -2
  241. package/src/plugins/builtin/docs/targets.ts +5 -1
  242. package/src/plugins/builtin/doe/headless.ts +3 -2
  243. package/src/plugins/builtin/doe/pane.tsx +13 -3
  244. package/src/plugins/builtin/earnings/board-model.ts +16 -15
  245. package/src/plugins/builtin/earnings/board.tsx +62 -71
  246. package/src/plugins/builtin/earnings/headless.ts +40 -4
  247. package/src/plugins/builtin/earnings/scope.ts +31 -43
  248. package/src/plugins/builtin/earnings-calls/calendar.tsx +2 -2
  249. package/src/plugins/builtin/earnings-calls/data.ts +18 -6
  250. package/src/plugins/builtin/earnings-calls/format.ts +31 -2
  251. package/src/plugins/builtin/earnings-calls/headless.ts +20 -5
  252. package/src/plugins/builtin/earnings-calls/model.ts +6 -1
  253. package/src/plugins/builtin/earnings-calls/pane.tsx +12 -4
  254. package/src/plugins/builtin/econ/calendar-model.ts +48 -1
  255. package/src/plugins/builtin/econ/calendar-source.ts +4 -2
  256. package/src/plugins/builtin/econ/detail-view.tsx +2 -2
  257. package/src/plugins/builtin/econ/figures.ts +48 -0
  258. package/src/plugins/builtin/econ/index.tsx +14 -5
  259. package/src/plugins/builtin/econ/print-watch.ts +3 -1
  260. package/src/plugins/builtin/econ/types.ts +2 -0
  261. package/src/plugins/builtin/econ-statistics/client.ts +11 -0
  262. package/src/plugins/builtin/econ-statistics/defs.ts +6 -0
  263. package/src/plugins/builtin/econ-statistics/headless.ts +16 -6
  264. package/src/plugins/builtin/econ-statistics/pane.tsx +8 -4
  265. package/src/plugins/builtin/econ-statistics/stats.ts +39 -9
  266. package/src/plugins/builtin/equity-screener/categories.ts +179 -0
  267. package/src/plugins/builtin/equity-screener/client.ts +4 -2
  268. package/src/plugins/builtin/equity-screener/headless.ts +144 -13
  269. package/src/plugins/builtin/equity-screener/ideas.ts +49 -0
  270. package/src/plugins/builtin/equity-screener/model.ts +99 -10
  271. package/src/plugins/builtin/equity-screener/pane.tsx +68 -13
  272. package/src/plugins/builtin/fixed-income/pane.tsx +2 -1
  273. package/src/plugins/builtin/futures/use-board-terms.ts +42 -28
  274. package/src/plugins/builtin/futures/use-front-returns.ts +45 -28
  275. package/src/plugins/builtin/fx-matrix/client.ts +6 -3
  276. package/src/plugins/builtin/fx-matrix/headless.ts +1 -1
  277. package/src/plugins/builtin/fx-matrix/index.tsx +4 -2
  278. package/src/plugins/builtin/fx-matrix/live-legs.ts +42 -3
  279. package/src/plugins/builtin/gpu/headless.ts +8 -2
  280. package/src/plugins/builtin/help/function-index.ts +4 -1
  281. package/src/plugins/builtin/help/index.tsx +62 -59
  282. package/src/plugins/builtin/help/shortcut-model.ts +1 -1
  283. package/src/plugins/builtin/help/shortcut-table.tsx +5 -6
  284. package/src/plugins/builtin/help/table-cells.tsx +13 -2
  285. package/src/plugins/builtin/holders/beneficial-client.ts +5 -1
  286. package/src/plugins/builtin/holders/beneficial-view.tsx +3 -0
  287. package/src/plugins/builtin/holders/fund-holders.ts +51 -0
  288. package/src/plugins/builtin/holders/headless.ts +22 -3
  289. package/src/plugins/builtin/holders/pane.tsx +3 -0
  290. package/src/plugins/builtin/holders/report-rows.ts +4 -1
  291. package/src/plugins/builtin/insider/headless.ts +2 -2
  292. package/src/plugins/builtin/ipo-calendar/client.ts +18 -2
  293. package/src/plugins/builtin/ipo-calendar/headless.ts +75 -11
  294. package/src/plugins/builtin/ipo-calendar/listing-ipo.ts +160 -0
  295. package/src/plugins/builtin/ipo-calendar/model.ts +98 -2
  296. package/src/plugins/builtin/iv-history/client.ts +52 -11
  297. package/src/plugins/builtin/iv-history/format.ts +36 -23
  298. package/src/plugins/builtin/iv-history/headless.ts +33 -18
  299. package/src/plugins/builtin/iv-history/index.tsx +2 -2
  300. package/src/plugins/builtin/iv-history/model.ts +163 -27
  301. package/src/plugins/builtin/iv-history/pane.tsx +10 -6
  302. package/src/plugins/builtin/iv-history/screen-pane.tsx +22 -15
  303. package/src/plugins/builtin/iv-history/universe.ts +5 -1
  304. package/src/plugins/builtin/jobs/client.ts +25 -29
  305. package/src/plugins/builtin/kelly-sizer/model.ts +12 -8
  306. package/src/plugins/builtin/kelly-sizer/pane.tsx +9 -9
  307. package/src/plugins/builtin/kelly-sizer/sections.tsx +19 -10
  308. package/src/plugins/builtin/kelly-sizer/types.ts +10 -4
  309. package/src/plugins/builtin/macro-day/headless.ts +12 -5
  310. package/src/plugins/builtin/macro-day/index.tsx +1 -1
  311. package/src/plugins/builtin/macro-day/model.ts +39 -5
  312. package/src/plugins/builtin/macro-day/pane.tsx +27 -19
  313. package/src/plugins/builtin/macro-day/release-table.ts +2 -2
  314. package/src/plugins/builtin/market-heatmap/data.ts +8 -33
  315. package/src/plugins/builtin/market-movers/client.ts +27 -7
  316. package/src/plugins/builtin/market-movers/headless.ts +34 -12
  317. package/src/plugins/builtin/market-movers/index.tsx +26 -14
  318. package/src/plugins/builtin/market-movers/min-float.ts +74 -0
  319. package/src/plugins/builtin/market-movers/model.ts +4 -1
  320. package/src/plugins/builtin/market-movers/screener.ts +22 -4
  321. package/src/plugins/builtin/market-movers/session-body.tsx +13 -8
  322. package/src/plugins/builtin/market-movers/session-table.ts +4 -3
  323. package/src/plugins/builtin/market-movers/table.ts +17 -5
  324. package/src/plugins/builtin/members/breadth-pane.tsx +2 -1
  325. package/src/plugins/builtin/mna/headless.ts +2 -0
  326. package/src/plugins/builtin/mna/pane.tsx +3 -1
  327. package/src/plugins/builtin/news/headless.ts +3 -1
  328. package/src/plugins/builtin/news/index.tsx +4 -0
  329. package/src/plugins/builtin/news/wire/categories.ts +19 -3
  330. package/src/plugins/builtin/news/wire/industry-pane.tsx +1 -0
  331. package/src/plugins/builtin/news/wire/news/footer.ts +31 -5
  332. package/src/plugins/builtin/news/wire/news/preset-pane.tsx +6 -1
  333. package/src/plugins/builtin/news/wire/news/table.tsx +2 -2
  334. package/src/plugins/builtin/openfda/client.ts +14 -2
  335. package/src/plugins/builtin/openfda/index.tsx +3 -2
  336. package/src/plugins/builtin/openfda/model.ts +9 -0
  337. package/src/plugins/builtin/openfda/pane.tsx +42 -6
  338. package/src/plugins/builtin/options/analytics.ts +29 -5
  339. package/src/plugins/builtin/options/enrichment.ts +17 -5
  340. package/src/plugins/builtin/options/table.ts +5 -2
  341. package/src/plugins/builtin/options/types.ts +2 -0
  342. package/src/plugins/builtin/options/view.tsx +17 -4
  343. package/src/plugins/builtin/options-positioning/client.ts +11 -0
  344. package/src/plugins/builtin/options-positioning/headless.ts +21 -8
  345. package/src/plugins/builtin/options-positioning/index.tsx +1 -1
  346. package/src/plugins/builtin/options-positioning/model.ts +78 -9
  347. package/src/plugins/builtin/options-positioning/pane.tsx +21 -6
  348. package/src/plugins/builtin/options-scenario/client.ts +116 -47
  349. package/src/plugins/builtin/options-scenario/csp-screen-headless.ts +142 -10
  350. package/src/plugins/builtin/options-scenario/csp-screen-pane.tsx +206 -55
  351. package/src/plugins/builtin/options-scenario/csp-screen.ts +63 -23
  352. package/src/plugins/builtin/options-scenario/csp.ts +8 -2
  353. package/src/plugins/builtin/options-scenario/index.tsx +9 -7
  354. package/src/plugins/builtin/options-scenario/strategy-screen.ts +532 -0
  355. package/src/plugins/builtin/pe-band/model.ts +12 -49
  356. package/src/plugins/builtin/perps/cascade-tabs.tsx +161 -0
  357. package/src/plugins/builtin/perps/cascade.ts +236 -0
  358. package/src/plugins/builtin/perps/client.ts +56 -2
  359. package/src/plugins/builtin/perps/headless.ts +65 -9
  360. package/src/plugins/builtin/perps/index.tsx +7 -5
  361. package/src/plugins/builtin/perps/model.ts +18 -4
  362. package/src/plugins/builtin/perps/pane.tsx +19 -22
  363. package/src/plugins/builtin/perps/status-line.ts +25 -0
  364. package/src/plugins/builtin/plugin-module.ts +5 -1
  365. package/src/plugins/builtin/portfolio-list/cached-account.ts +3 -1
  366. package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +2 -8
  367. package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +4 -4
  368. package/src/plugins/builtin/portfolio-list/cli/render.ts +7 -5
  369. package/src/plugins/builtin/portfolio-list/pane/futures-front.ts +40 -0
  370. package/src/plugins/builtin/portfolio-list/pane/index.tsx +6 -7
  371. package/src/plugins/builtin/portfolio-list/pane/streaming.ts +5 -2
  372. package/src/plugins/builtin/portfolio-list/pane/supplemental.ts +3 -2
  373. package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +0 -14
  374. package/src/plugins/builtin/portfolio-list/quick-add/resolution.ts +5 -2
  375. package/src/plugins/builtin/portfolio-list/table.tsx +15 -9
  376. package/src/plugins/builtin/primary-dealers/client.ts +13 -38
  377. package/src/plugins/builtin/realized-vol/client.ts +13 -5
  378. package/src/plugins/builtin/realized-vol/evidence.ts +29 -4
  379. package/src/plugins/builtin/realized-vol/headless.ts +8 -4
  380. package/src/plugins/builtin/realized-vol/index.tsx +2 -2
  381. package/src/plugins/builtin/realized-vol/model.ts +37 -6
  382. package/src/plugins/builtin/realized-vol/pane.tsx +11 -9
  383. package/src/plugins/builtin/relative-rotation/client.ts +18 -4
  384. package/src/plugins/builtin/relative-rotation/headless.ts +3 -3
  385. package/src/plugins/builtin/relative-rotation/index.tsx +2 -1
  386. package/src/plugins/builtin/relative-rotation/model.ts +16 -40
  387. package/src/plugins/builtin/relative-rotation/pane.tsx +3 -2
  388. package/src/plugins/builtin/research/corporate-actions-pane.tsx +3 -2
  389. package/src/plugins/builtin/research/event-model.ts +40 -12
  390. package/src/plugins/builtin/research/headless.ts +1 -1
  391. package/src/plugins/builtin/research/index.tsx +7 -3
  392. package/src/plugins/builtin/research/relative-valuation-headless.ts +13 -26
  393. package/src/plugins/builtin/research/relative-valuation-model.ts +31 -3
  394. package/src/plugins/builtin/research/relative-valuation-pane.tsx +59 -20
  395. package/src/plugins/builtin/research/relative-valuation-peers.ts +217 -20
  396. package/src/plugins/builtin/research/relative-valuation-settings.ts +44 -0
  397. package/src/plugins/builtin/reverse-dcf/headless.ts +5 -3
  398. package/src/plugins/builtin/reverse-dcf/model.ts +61 -6
  399. package/src/plugins/builtin/reverse-dcf/pane.tsx +7 -4
  400. package/src/plugins/builtin/risk-factors/data.ts +4 -2
  401. package/src/plugins/builtin/risk-factors/headless.ts +5 -2
  402. package/src/plugins/builtin/roadmap/index.tsx +28 -0
  403. package/src/plugins/builtin/roadmap/model.ts +67 -0
  404. package/src/plugins/builtin/roadmap/pane.tsx +244 -0
  405. package/src/plugins/builtin/scanner/flow-model.ts +50 -4
  406. package/src/plugins/builtin/scanner/flow-pane.tsx +367 -65
  407. package/src/plugins/builtin/scanner/flow-session.ts +146 -0
  408. package/src/plugins/builtin/scanner/headless.ts +204 -35
  409. package/src/plugins/builtin/scanner/index.ts +16 -5
  410. package/src/plugins/builtin/scanner/live-headless.ts +48 -5
  411. package/src/plugins/builtin/scanner/live-model.ts +11 -0
  412. package/src/plugins/builtin/scanner/live-pane.tsx +3 -3
  413. package/src/plugins/builtin/scanner/lock-note.ts +3 -2
  414. package/src/plugins/builtin/seasonality/headless.ts +10 -1
  415. package/src/plugins/builtin/sec/fund-facts-view.tsx +5 -2
  416. package/src/plugins/builtin/sec/fund-facts.ts +116 -34
  417. package/src/plugins/builtin/sec/headless.ts +4 -2
  418. package/src/plugins/builtin/sec/index.tsx +3 -0
  419. package/src/plugins/builtin/series-inventory.ts +2 -0
  420. package/src/plugins/builtin/shared/cloud-resource.ts +16 -7
  421. package/src/plugins/builtin/shared/cloud-upgrade.ts +4 -3
  422. package/src/plugins/builtin/shared/earnings-calendar.ts +6 -2
  423. package/src/plugins/builtin/shared/earnings-report.ts +2 -2
  424. package/src/plugins/builtin/shared/headless-market-data.ts +2 -2
  425. package/src/plugins/builtin/shared/job-posting.ts +1 -0
  426. package/src/plugins/builtin/shared/members-menu.tsx +3 -2
  427. package/src/plugins/builtin/shared/pro-lock-note.ts +12 -12
  428. package/src/plugins/builtin/shared/report-freshness.ts +11 -2
  429. package/src/plugins/builtin/shared/research-cells.tsx +1 -1
  430. package/src/plugins/builtin/shared/series-cache.ts +4 -4
  431. package/src/plugins/builtin/shared/ticker-choice.tsx +2 -1
  432. package/src/plugins/builtin/shared/ticker-company.ts +77 -0
  433. package/src/plugins/builtin/shared/use-quote-board.ts +2 -1
  434. package/src/plugins/builtin/shared/volatility/live-session.ts +34 -8
  435. package/src/plugins/builtin/shared/volatility/pricing.ts +19 -0
  436. package/src/plugins/builtin/shared/wall-view-lifecycle.ts +3 -1
  437. package/src/plugins/builtin/themes/model.ts +16 -7
  438. package/src/plugins/builtin/themes/pane.tsx +5 -5
  439. package/src/plugins/builtin/thirteenf/api.ts +12 -1
  440. package/src/plugins/builtin/thirteenf/data.ts +7 -7
  441. package/src/plugins/builtin/thirteenf/headless.ts +31 -4
  442. package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +43 -18
  443. package/src/plugins/builtin/ticker-detail/data-panes/returns-history.ts +3 -2
  444. package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +62 -0
  445. package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +83 -46
  446. package/src/plugins/builtin/ticker-detail/headless.ts +31 -16
  447. package/src/plugins/builtin/ticker-detail/overview/model.ts +11 -3
  448. package/src/plugins/builtin/ticker-detail/overview-tab.tsx +2 -1
  449. package/src/plugins/builtin/ticker-detail/pane.tsx +14 -8
  450. package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +2 -1
  451. package/src/plugins/builtin/ticker-detail/settings.ts +1 -0
  452. package/src/plugins/builtin/time-sales/pane.tsx +31 -19
  453. package/src/plugins/builtin/treasury-auctions/headless.ts +21 -12
  454. package/src/plugins/builtin/treasury-auctions/pane.tsx +9 -3
  455. package/src/plugins/builtin/treasury-daily/client.ts +41 -5
  456. package/src/plugins/builtin/treasury-daily/headless.ts +2 -2
  457. package/src/plugins/builtin/treasury-daily/index.tsx +1 -1
  458. package/src/plugins/builtin/treasury-daily/model.ts +50 -3
  459. package/src/plugins/builtin/treasury-daily/pane.tsx +81 -2
  460. package/src/plugins/builtin/vol-surface/client.ts +3 -13
  461. package/src/plugins/builtin/vol-surface/headless.ts +3 -3
  462. package/src/plugins/builtin/vol-surface/index.tsx +1 -1
  463. package/src/plugins/builtin/vol-surface/pane.tsx +7 -5
  464. package/src/plugins/builtin/volatility/index.tsx +2 -2
  465. package/src/plugins/builtin/volatility/pane.tsx +7 -4
  466. package/src/plugins/builtin/world-venue-map/headless.ts +3 -3
  467. package/src/plugins/builtin/yield-curve/client.ts +61 -1
  468. package/src/plugins/builtin/yield-curve/headless.ts +9 -6
  469. package/src/plugins/builtin/yield-curve/index.tsx +34 -10
  470. package/src/plugins/builtin/yield-curve/swaps.tsx +9 -5
  471. package/src/plugins/catalog-browser.ts +2 -1
  472. package/src/plugins/catalog-manifest.ts +2 -1
  473. package/src/plugins/host-link.ts +1 -1
  474. package/src/plugins/marketplace/model.ts +18 -5
  475. package/src/portfolio/column-values.ts +11 -7
  476. package/src/portfolio/futures-positions.ts +6 -3
  477. package/src/portfolio/position-quantity.ts +15 -9
  478. package/src/remote/resources.ts +2 -1
  479. package/src/renderers/dom/data-table/row.tsx +26 -0
  480. package/src/renderers/dom/desktop/icons.tsx +7 -0
  481. package/src/renderers/dom/desktop/list-view.tsx +13 -10
  482. package/src/renderers/dom/desktop/query-bar.tsx +4 -2
  483. package/src/renderers/dom/desktop/select-field.tsx +4 -2
  484. package/src/renderers/dom/host/chart-surface.tsx +21 -0
  485. package/src/renderers/electrobun/bun/desktop/app-name.ts +3 -3
  486. package/src/renderers/electrobun/bun/desktop/backend.ts +21 -10
  487. package/src/renderers/electrobun/bun/desktop/host-requests.ts +15 -0
  488. package/src/renderers/electrobun/bun/desktop/initialization.ts +2 -0
  489. package/src/renderers/electrobun/bun/desktop/installer-folder.ts +731 -0
  490. package/src/renderers/electrobun/bun/desktop/relaunch.ts +102 -10
  491. package/src/renderers/electrobun/bun/desktop/update.ts +115 -14
  492. package/src/renderers/electrobun/bun/desktop/view-ids.ts +52 -0
  493. package/src/renderers/electrobun/bun/desktop/windows-script.ts +92 -0
  494. package/src/renderers/electrobun/bun/index.ts +26 -2
  495. package/src/renderers/electrobun/bun/window/create.ts +43 -4
  496. package/src/renderers/electrobun/bun/window/events.ts +20 -0
  497. package/src/renderers/electrobun/bun/window/windows-custom-chrome.ts +9 -2
  498. package/src/renderers/electrobun/bun/window/windows-native.ts +78 -0
  499. package/src/renderers/electrobun/bun/window/windows-quit.ts +57 -0
  500. package/src/renderers/electrobun/shared/app-name.ts +13 -0
  501. package/src/renderers/electrobun/shared/protocol.ts +12 -0
  502. package/src/renderers/electrobun/view/backend-rpc.ts +6 -0
  503. package/src/renderers/electrobun/view/main.tsx +24 -1
  504. package/src/renderers/electrobun/view/news-source.ts +5 -1
  505. package/src/renderers/electrobun/view/remote/ticker-repository.ts +14 -7
  506. package/src/renderers/electrobun/view/ui-host.tsx +8 -0
  507. package/src/renderers/electrobun/view/view-ids.ts +85 -0
  508. package/src/renderers/opentui/start.tsx +5 -0
  509. package/src/series/registry.ts +1 -0
  510. package/src/series/types.ts +6 -0
  511. package/src/series/validate.ts +1 -0
  512. package/src/sources/gloomberb-cloud/fred-series.ts +3 -1
  513. package/src/sources/gloomberb-cloud/index.ts +43 -8
  514. package/src/sources/gloomberb-cloud/news.ts +47 -7
  515. package/src/sources/provider-router/financials.ts +15 -3
  516. package/src/sources/provider-router/index.ts +8 -5
  517. package/src/state/ticker-cleanup.ts +50 -0
  518. package/src/sync/controller.ts +4 -3
  519. package/src/sync/core-contributors.ts +90 -31
  520. package/src/telemetry/stall-reports-dom.ts +38 -0
  521. package/src/telemetry/stall-reports-node.ts +75 -0
  522. package/src/telemetry/stall-reports.ts +214 -0
  523. package/src/test-support/preload.ts +14 -0
  524. package/src/theme/themes.ts +10 -0
  525. package/src/tickers/company-name-listing.ts +53 -13
  526. package/src/tickers/company-name.ts +50 -4
  527. package/src/tickers/index-roots.ts +7 -0
  528. package/src/tickers/listing-fate.ts +2 -2
  529. package/src/tickers/listing-venues.ts +15 -3
  530. package/src/tickers/search/index.ts +6 -2
  531. package/src/tickers/search/ranking.ts +5 -1
  532. package/src/tickers/search/upsert.ts +13 -0
  533. package/src/tickers/terminal-codes.ts +19 -0
  534. package/src/tickers/ticker-changes.ts +8 -4
  535. package/src/time-series/alignment.ts +1 -1
  536. package/src/time-series/economic.ts +18 -4
  537. package/src/time-series/field-catalog.ts +1 -1
  538. package/src/time-series/filed-trailing-eps.ts +197 -0
  539. package/src/time-series/fundamentals.ts +44 -1
  540. package/src/time-series/ice-credit.ts +3 -0
  541. package/src/time-series/price-comparison.ts +30 -2
  542. package/src/time-series/resolve-context.ts +3 -1
  543. package/src/time-series/resolve.ts +56 -4
  544. package/src/time-series/session-bar.ts +11 -0
  545. package/src/time-series/spec.ts +3 -2
  546. package/src/time-series/studies.ts +8 -2
  547. package/src/time-series/total-return.ts +160 -0
  548. package/src/time-series/transforms.ts +2 -3
  549. package/src/time-series/types.ts +22 -1
  550. package/src/types/company-from.ts +40 -0
  551. package/src/types/data-provider.ts +7 -0
  552. package/src/types/financials.ts +59 -1
  553. package/src/types/headless.ts +27 -3
  554. package/src/types/news-source.ts +1 -0
  555. package/src/types/plugin.ts +9 -0
  556. package/src/ui/host.tsx +3 -0
  557. package/src/updater/failure.ts +4 -1
  558. package/src/utils/cli-output.ts +42 -1
  559. package/src/utils/crypto-pair.ts +165 -7
  560. package/src/utils/declared-dividends.ts +1 -1
  561. package/src/utils/forward-dividend.ts +2 -0
  562. package/src/utils/fundamentals.ts +60 -8
  563. package/src/utils/fx-market-hours.ts +26 -3
  564. package/src/utils/main-thread-stall.ts +35 -2
  565. package/src/utils/market-capitalization.ts +24 -1
  566. package/src/utils/price-history.ts +7 -1
  567. package/src/utils/shell-word.ts +8 -0
  568. package/src/utils/trailing-dividend.ts +53 -4
  569. package/src/version.ts +2 -2
  570. package/src/plugins/builtin/clinical-trials/ticker-sponsor.ts +0 -17
@@ -0,0 +1,165 @@
1
+ /**
2
+ * A keyed in-memory cache that serves a loaded value for a while and shares a
3
+ * load that is still out. It is what a plugin reaches for instead of keeping
4
+ * its own `Map<key, { at, value }>` with a TTL constant and `Date.now() - at`
5
+ * checks, each copy with its own rule for a concurrent call, a forced reload
6
+ * and a failed load.
7
+ *
8
+ * It holds nothing across a restart, and `load` never answers with an expired
9
+ * value. A pane whose data must outlive a restart, or fall back to the saved
10
+ * copy when a refresh fails, wants `createPluginCache` (src/data/plugin-cache.ts).
11
+ *
12
+ * The rules, for every key:
13
+ * - A fresh value is served as it is; a load that is still out is shared, so
14
+ * two callers never start two requests for one key. A load is shared for
15
+ * no longer than `ttlMs` (a number), so one that hangs cannot hold the key.
16
+ * - `force` skips a fresh value and starts a load, except that it joins one
17
+ * that is already out when that load began after the value it would
18
+ * replace: panes that refresh together make one request, not one each.
19
+ * - The last good value stays until a load brings a newer one. A forced
20
+ * load that fails, or brings a value `keep` refuses, leaves it in place,
21
+ * and `peek(key, { stale: true })` reads it past its TTL while a reload is
22
+ * out, for a view that keeps drawing the last copy.
23
+ * - A load that rejects reaches every caller waiting on it. By default
24
+ * nothing is kept, so the next call asks again; `rejectionMs` keeps the
25
+ * rejection that long, for a load a poll would otherwise repeat each tick.
26
+ * - A load runs as soon as `load` is called, not on a later tick.
27
+ */
28
+ export interface TtlCacheOptions<V> {
29
+ /** How long a loaded value is served, from when it arrives; a function sets it per value. */
30
+ ttlMs: number | ((value: V) => number);
31
+ /**
32
+ * Whether a loaded value is kept. One that is not still answers the callers
33
+ * waiting on it, and the next call loads again. Default: every value.
34
+ */
35
+ keep?: (value: V) => boolean;
36
+ /** How long a rejected load is kept and served again. Default 0: it is dropped. */
37
+ rejectionMs?: number;
38
+ /** The oldest keys go first past this many. Default: unbounded. */
39
+ maxEntries?: number;
40
+ /** The clock, for tests. */
41
+ now?: () => number;
42
+ }
43
+
44
+ export interface TtlCache<V> {
45
+ /** The key's fresh value or the load already out for it; otherwise starts `load`. */
46
+ load(key: string, load: () => V | PromiseLike<V>, options?: { force?: boolean }): Promise<V>;
47
+ /**
48
+ * The key's fresh value, `undefined` when it has none. `stale` also reads
49
+ * the last good value past its TTL, for a view that keeps drawing it until
50
+ * the next load lands.
51
+ */
52
+ peek(key: string, options?: { stale?: boolean }): V | undefined;
53
+ /** Whether the key's last load was rejected and `rejectionMs` still keeps that rejection. */
54
+ failed(key: string): boolean;
55
+ /** Keeps a value that arrived by another road, for the TTL. */
56
+ set(key: string, value: V): void;
57
+ /**
58
+ * Forgets the key. With `only`, a promise `load` returned, forgets just the
59
+ * load or kept rejection it stands for, and only while it is still the
60
+ * key's: a caller that gives up on a load cannot drop a newer one.
61
+ */
62
+ delete(key: string, only?: Promise<V>): void;
63
+ clear(): void;
64
+ }
65
+
66
+ interface Slot<V> {
67
+ /** The last good value: fresh until `expiresAt`, readable as stale after. */
68
+ held?: { value: V; arrivedAt: number; expiresAt: number };
69
+ /** The load that is out. */
70
+ loading?: { promise: Promise<V>; startedAt: number };
71
+ /** A rejected load kept for `rejectionMs`. */
72
+ failed?: { promise: Promise<V>; expiresAt: number };
73
+ }
74
+
75
+ export function createTtlCache<V>(options: TtlCacheOptions<V>): TtlCache<V> {
76
+ const { keep = () => true, rejectionMs = 0, maxEntries = Infinity, now: clock = () => Date.now() } = options;
77
+ const ttlFor = (value: V) => typeof options.ttlMs === "function" ? options.ttlMs(value) : options.ttlMs;
78
+ const shareMs = typeof options.ttlMs === "number" ? options.ttlMs : Infinity;
79
+ const slots = new Map<string, Slot<V>>();
80
+
81
+ const store = (key: string, slot: Slot<V>) => {
82
+ slots.delete(key);
83
+ slots.set(key, slot);
84
+ while (slots.size > maxEntries) slots.delete(slots.keys().next().value!);
85
+ };
86
+ /** A slot with nothing in it is not kept. */
87
+ const tidy = (key: string, slot: Slot<V>) => {
88
+ if (!slot.held && !slot.loading && !slot.failed && slots.get(key) === slot) slots.delete(key);
89
+ };
90
+ const hold = (slot: Slot<V>, value: V) => {
91
+ const arrivedAt = clock();
92
+ slot.held = { value, arrivedAt, expiresAt: arrivedAt + ttlFor(value) };
93
+ slot.failed = undefined;
94
+ };
95
+
96
+ return {
97
+ load(key, load, { force = false } = {}) {
98
+ const at = clock();
99
+ const slot = slots.get(key) ?? {};
100
+ const { held, loading, failed } = slot;
101
+ if (!force) {
102
+ if (held && held.expiresAt > at) return Promise.resolve(held.value);
103
+ if (failed && failed.expiresAt > at) return failed.promise;
104
+ }
105
+ if (loading && at - loading.startedAt < shareMs && (!force || !held || loading.startedAt >= held.arrivedAt)) return loading.promise;
106
+
107
+ const run: NonNullable<Slot<V>["loading"]> = { promise: undefined as unknown as Promise<V>, startedAt: at };
108
+ const current = () => slots.get(key)?.loading === run;
109
+ run.promise = new Promise<V>((resolve) => resolve(load())).then((value) => {
110
+ if (current()) {
111
+ slot.loading = undefined;
112
+ try {
113
+ // A `keep` or TTL function that throws rejects for the callers, like the load.
114
+ if (keep(value)) hold(slot, value);
115
+ } finally {
116
+ tidy(key, slot);
117
+ }
118
+ }
119
+ return value;
120
+ }, (error: unknown) => {
121
+ if (current()) {
122
+ slot.loading = undefined;
123
+ const fresh = slot.held && slot.held.expiresAt > clock();
124
+ if (rejectionMs > 0 && !fresh) slot.failed = { promise: run.promise, expiresAt: clock() + rejectionMs };
125
+ tidy(key, slot);
126
+ }
127
+ throw error;
128
+ });
129
+ // A caller that drops the promise must not raise an unhandled rejection.
130
+ run.promise.then(undefined, () => { /* Intentional ignore: every caller holds this promise and sees the rejection. */ });
131
+ slot.loading = run;
132
+ slot.failed = undefined;
133
+ store(key, slot);
134
+ return run.promise;
135
+ },
136
+ peek(key, { stale = false } = {}) {
137
+ const held = slots.get(key)?.held;
138
+ return held && (stale || held.expiresAt > clock()) ? held.value : undefined;
139
+ },
140
+ failed(key) {
141
+ const failed = slots.get(key)?.failed;
142
+ return !!failed && failed.expiresAt > clock();
143
+ },
144
+ set(key, value) {
145
+ if (!keep(value)) return;
146
+ const slot = slots.get(key) ?? {};
147
+ hold(slot, value);
148
+ store(key, slot);
149
+ },
150
+ delete(key, only) {
151
+ const slot = slots.get(key);
152
+ if (!slot) return;
153
+ if (!only) {
154
+ slots.delete(key);
155
+ return;
156
+ }
157
+ if (slot.loading?.promise === only) slot.loading = undefined;
158
+ if (slot.failed?.promise === only) slot.failed = undefined;
159
+ tidy(key, slot);
160
+ },
161
+ clear() {
162
+ slots.clear();
163
+ },
164
+ };
165
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "format": 1,
3
3
  "site": "https://gloom.sh",
4
- "updatedAt": "2026-10-25",
4
+ "updatedAt": "2026-10-28",
5
5
  "categories": [
6
6
  {
7
7
  "id": "research",
@@ -37,16 +37,6 @@
37
37
  }
38
38
  ],
39
39
  "functions": [
40
- {
41
- "code": "ATTN",
42
- "name": "Research attention",
43
- "description": "What Gloom users are researching",
44
- "detail": "Which tickers opted-in Gloom users are researching, by hour, day and week, with sector and country totals and abnormal attention. Delayed at least an hour. Pro shows the full board; Free shows three rows per section.",
45
- "category": "research",
46
- "arg": "NVDA",
47
- "access": "pro",
48
- "lesson": "/academy/compare-screen-follow-money/filings-and-attention/attention"
49
- },
50
40
  {
51
41
  "code": "DES",
52
42
  "name": "Security overview",
@@ -295,9 +285,9 @@
295
285
  },
296
286
  {
297
287
  "code": "CSP",
298
- "name": "Cash-secured put screen",
299
- "description": "Put-selling yield across a list",
300
- "detail": "For each ticker, the put nearest a delta (0.30) on the expiry about 30 days out, ranked by annualised yield on cash at the bid, with distance out of the money, delta, IV rank, the bid/ask spread (wide ones flagged, never dropped), and whether earnings fall before expiry. Enter opens the put in OSA.",
288
+ "name": "Options strategy screen",
289
+ "description": "Puts, covered calls, spreads, condors, straddles and calendars across a list",
290
+ "detail": "One tab per strategy: cash-secured put, covered call, vertical, iron condor, straddle, strangle and calendar. For each ticker it picks the legs by delta and expiry, then shows credit or debit, max gain and loss, break-evens, probability of profit, IV rank, wide spreads and earnings before expiry. Income trades rank by yearly return, debit trades by reward to risk.",
301
291
  "category": "research",
302
292
  "arg": "JPM, GS, KO"
303
293
  },
@@ -1043,8 +1033,9 @@
1043
1033
  "code": "FLOW",
1044
1034
  "name": "Options flow",
1045
1035
  "description": "Unusual options activity",
1046
- "detail": "Sweeps, blocks, and large premium prints as they hit the tape, with ticker, strike, expiry, and premium.",
1036
+ "detail": "Sweeps, blocks, and large premium prints, plus the session's net premium tide.",
1047
1037
  "category": "markets",
1038
+ "arg": "NVDA",
1048
1039
  "access": "pro",
1049
1040
  "lesson": "/academy/options-and-volatility/positioning-and-flow/options-flow"
1050
1041
  },
@@ -1693,6 +1684,13 @@
1693
1684
  "category": "app",
1694
1685
  "lesson": "/academy/terminal-and-workspace/how-the-terminal-works/help-cards"
1695
1686
  },
1687
+ {
1688
+ "code": "ROADMAP",
1689
+ "name": "Roadmap",
1690
+ "description": "What is coming next",
1691
+ "detail": "What is being built, what is planned and what shipped, with each item's votes. Pro members vote on what is building or planned, once per item, and can take the vote back.",
1692
+ "category": "app"
1693
+ },
1696
1694
  {
1697
1695
  "code": "HELP",
1698
1696
  "name": "Help",
@@ -1808,7 +1806,7 @@
1808
1806
  },
1809
1807
  {
1810
1808
  "type": "code",
1811
- "code": "bun install -g gloomberb"
1809
+ "code": "bun install -g @gloom-sh/terminal"
1812
1810
  },
1813
1811
  {
1814
1812
  "type": "heading",
@@ -1862,14 +1860,22 @@
1862
1860
  ],
1863
1861
  [
1864
1862
  "Bun",
1865
- "`bun install -g gloomberb@latest`"
1863
+ "`bun install -g @gloom-sh/terminal@latest`"
1866
1864
  ]
1867
1865
  ]
1868
1866
  },
1867
+ {
1868
+ "type": "paragraph",
1869
+ "text": "An existing `gloomberb` install keeps updating as it is."
1870
+ },
1869
1871
  {
1870
1872
  "type": "paragraph",
1871
1873
  "text": "Installed before 0.18.4, when the command was `gloomberb`? Updating adds `gloom` beside it and `gloomberb` keeps working, with nothing to reinstall."
1872
1874
  },
1875
+ {
1876
+ "type": "paragraph",
1877
+ "text": "Had `Gloomberb.app`? Its next update renames it to `Gloom.app`; settings and data stay."
1878
+ },
1873
1879
  {
1874
1880
  "type": "heading",
1875
1881
  "level": 3,
@@ -2930,7 +2936,7 @@
2930
2936
  "troubleshooting",
2931
2937
  "diagnostics"
2932
2938
  ],
2933
- "updatedAt": "2026-10-07",
2939
+ "updatedAt": "2026-10-25",
2934
2940
  "blocks": [
2935
2941
  {
2936
2942
  "type": "heading",
@@ -2980,7 +2986,7 @@
2980
2986
  {
2981
2987
  "type": "list",
2982
2988
  "items": [
2983
- "`Bad CPU type in executable` on macOS: an Intel Mac running the Apple Silicon app. Delete `/Applications/Gloomberb.app` and rerun `curl -fsSL gloom.sh/install | bash` for the Intel terminal build.",
2989
+ "`Bad CPU type in executable` on macOS: an Intel Mac running the Apple Silicon app. Delete `/Applications/Gloom.app` (`Gloomberb.app` before the app was renamed) and rerun `curl -fsSL gloom.sh/install | bash` for the Intel terminal build.",
2984
2990
  "`gloom doctor` shows runtime errors.",
2985
2991
  "Update with the same method you installed with. See [Install and update](/docs/getting-started)."
2986
2992
  ]
@@ -3306,7 +3312,7 @@
3306
3312
  },
3307
3313
  {
3308
3314
  "type": "paragraph",
3309
- "text": "When signed in, searches you finish in the command bar are saved to improve search, shown to no one, and deleted with your account. [Research attention](/docs/attention) is a separate opt-in, off by default."
3315
+ "text": "When signed in, searches you finish in the command bar are saved to improve search, shown to no one, and deleted with your account. Attention Counts, the research attention contribution, is a separate opt-in, off by default."
3310
3316
  },
3311
3317
  {
3312
3318
  "type": "paragraph",
@@ -4048,115 +4054,7 @@
4048
4054
  },
4049
4055
  {
4050
4056
  "type": "paragraph",
4051
- "text": "CLI `gloom fn JOBS NVDA`. MCP `company.hiring`, `market.hiring_movers`, `hiring.momentum`, `apps.attention`, `apps.rank_history`. Related: [Research attention](/docs/attention)."
4052
- }
4053
- ]
4054
- },
4055
- {
4056
- "slug": "attention",
4057
- "title": "Research attention",
4058
- "lead": "ATTN shows which tickers other Gloom users are researching, and which are getting unusual attention",
4059
- "category": "Understand the data",
4060
- "tags": [
4061
- "ATTN",
4062
- "attention",
4063
- "research",
4064
- "privacy"
4065
- ],
4066
- "updatedAt": "2026-10-07",
4067
- "blocks": [
4068
- {
4069
- "type": "heading",
4070
- "level": 2,
4071
- "text": "Open it"
4072
- },
4073
- {
4074
- "type": "table",
4075
- "headers": [
4076
- "Command",
4077
- "Opens"
4078
- ],
4079
- "rows": [
4080
- [
4081
- "`ATTN`",
4082
- "The board"
4083
- ],
4084
- [
4085
- "`ATTN NVDA`",
4086
- "One ticker"
4087
- ],
4088
- [
4089
- "`ATTN 6758:JPX`",
4090
- "An international listing"
4091
- ]
4092
- ]
4093
- },
4094
- {
4095
- "type": "heading",
4096
- "level": 2,
4097
- "text": "What you see"
4098
- },
4099
- {
4100
- "type": "table",
4101
- "headers": [
4102
- "Tab",
4103
- "Shows"
4104
- ],
4105
- "rows": [
4106
- [
4107
- "Ranking",
4108
- "Tickers by research hours, with share, price move and relative volume"
4109
- ],
4110
- [
4111
- "Abnormal",
4112
- "Tickers well above their own usual level"
4113
- ],
4114
- [
4115
- "Sectors, Countries",
4116
- "Totals by sector and country"
4117
- ],
4118
- [
4119
- "History",
4120
- "Hourly research hours for one ticker"
4121
- ],
4122
- [
4123
- "Evidence",
4124
- "The window and rules behind each figure"
4125
- ]
4126
- ]
4127
- },
4128
- {
4129
- "type": "paragraph",
4130
- "text": "Switch the window between Now, Today and Week. Enter opens a ticker, `e` shows evidence."
4131
- },
4132
- {
4133
- "type": "heading",
4134
- "level": 2,
4135
- "text": "Free and Pro"
4136
- },
4137
- {
4138
- "type": "paragraph",
4139
- "text": "Pro shows the full board and 29 days of hourly history. Free shows three rows per section and the latest point. Data lags by at least an hour."
4140
- },
4141
- {
4142
- "type": "heading",
4143
- "level": 2,
4144
- "text": "Keep in mind"
4145
- },
4146
- {
4147
- "type": "list",
4148
- "items": [
4149
- "Counts come only from users who opted in, so they are a sample, not the market. A ticker appears only when enough people looked at it, and hidden hours are unavailable, not zero."
4150
- ]
4151
- },
4152
- {
4153
- "type": "heading",
4154
- "level": 2,
4155
- "text": "Your choice"
4156
- },
4157
- {
4158
- "type": "paragraph",
4159
- "text": "Contributing is a separate opt-in setting, off by default. Toggle **Attention Counts** in Settings or with `gloom config set telemetry.attention true`. See the [Privacy Policy](/privacy). MCP `market.attention`."
4057
+ "text": "CLI `gloom fn JOBS NVDA`. MCP `company.hiring`, `market.hiring_movers`, `hiring.momentum`, `apps.attention`, `apps.rank_history`."
4160
4058
  }
4161
4059
  ]
4162
4060
  },
@@ -4385,7 +4283,7 @@
4385
4283
  "perpetuals",
4386
4284
  "history"
4387
4285
  ],
4388
- "updatedAt": "2026-10-09",
4286
+ "updatedAt": "2026-10-26",
4389
4287
  "blocks": [
4390
4288
  {
4391
4289
  "type": "heading",
@@ -4425,6 +4323,18 @@
4425
4323
  "Shows"
4426
4324
  ],
4427
4325
  "rows": [
4326
+ [
4327
+ "Compare",
4328
+ "One asset's contracts across the venues: mark, funding, premium and when each was observed"
4329
+ ],
4330
+ [
4331
+ "Liquidations",
4332
+ "One asset's liquidated longs and shorts across the venues: 24-hour and 7-day totals, the hourly series and the largest prints"
4333
+ ],
4334
+ [
4335
+ "Depth",
4336
+ "One asset's resting bids and asks within 0.5%, 1% and 2% of mid on each venue, from each venue's order book every hour"
4337
+ ],
4428
4338
  [
4429
4339
  "History",
4430
4340
  "Funding, open interest and mark premium, with price candles and settled funding where available"
@@ -4448,6 +4358,37 @@
4448
4358
  "type": "paragraph",
4449
4359
  "text": "Pro shows the stored history. Free shows a limited preview of the latest values. History starts when Gloom first collected a market."
4450
4360
  },
4361
+ {
4362
+ "type": "heading",
4363
+ "level": 2,
4364
+ "text": "Liquidations"
4365
+ },
4366
+ {
4367
+ "type": "paragraph",
4368
+ "text": "Each venue's public liquidation stream, kept event by event with the time it arrived. A long liquidated is a forced sell, a short a forced buy, valued at the price the venue reports: the average fill on Binance and Hyperliquid, the bankruptcy price on Bybit and OKX. What the streams leave out:"
4369
+ },
4370
+ {
4371
+ "type": "list",
4372
+ "items": [
4373
+ "Binance and OKX send at most one liquidation per contract each second, so a burst on one contract is undercounted.",
4374
+ "Bybit sends every liquidation.",
4375
+ "Hyperliquid publishes only the positions its liquidity vault takes over (backstop liquidations). Liquidations closed on the order book are not published venue-wide and are missing.",
4376
+ "Venues publish no liquidation history, so time the collector was not connected is missing, not zero, and history starts at first collection."
4377
+ ]
4378
+ },
4379
+ {
4380
+ "type": "paragraph",
4381
+ "text": "Free shows each contract's 24-hour and 7-day totals and the three largest prints; Pro adds the hourly series and the twenty largest prints."
4382
+ },
4383
+ {
4384
+ "type": "heading",
4385
+ "level": 2,
4386
+ "text": "Order book depth"
4387
+ },
4388
+ {
4389
+ "type": "paragraph",
4390
+ "text": "The quote notional resting within 0.5%, 1% and 2% of mid, read once an hour from each venue's public order book for its 50 largest markets by open interest. Binance and Bybit return the nearest 1,000 price levels a side and OKX 5,000; on the deepest markets the book ends inside a band, which then shows at least (≥) what it holds. Hyperliquid returns 20 levels a side, so wider bands are read from its grouped book and a band's edge falls within one price group. A book not read for 2.5 hours (it left its venue's 50 largest, or the venue is failing) is marked stale and left out of the band totals; after a week it is no longer listed. Free shows the latest reading; Pro the hourly history."
4391
+ },
4451
4392
  {
4452
4393
  "type": "heading",
4453
4394
  "level": 2,
@@ -4465,7 +4406,7 @@
4465
4406
  {
4466
4407
  "type": "list",
4467
4408
  "items": [
4468
- "Stored readings cover Hyperliquid, Binance, Bybit and OKX.",
4409
+ "Stored readings cover Hyperliquid, Binance, Bybit and OKX. Compare shows each venue's leading contract free; Pro lists every contract.",
4469
4410
  "Positive funding means longs pay shorts. Open interest in contracts and in USD differ, because a price rise adds USD open interest without new contracts.",
4470
4411
  "A stock perpetual's premium is blank while the stock market is closed. The live board and trading are in the Hyperliquid plugin."
4471
4412
  ]
@@ -4736,7 +4677,7 @@
4736
4677
  "call wall",
4737
4678
  "put wall"
4738
4679
  ],
4739
- "updatedAt": "2026-10-23",
4680
+ "updatedAt": "2026-10-28",
4740
4681
  "blocks": [
4741
4682
  {
4742
4683
  "type": "heading",
@@ -4855,7 +4796,7 @@
4855
4796
  {
4856
4797
  "type": "list",
4857
4798
  "items": [
4858
- "Gamma per contract is Black-Scholes gamma with the forward at spot, times the 100-share multiplier. Time runs to 16:00 New York on the expiry date, at least one hour.",
4799
+ "Gamma per contract is Black-Scholes gamma with the forward at spot, times the 100-share multiplier. Time runs to 16:00 New York on the expiry date, at least one hour, from now, or outside the session from the spot's time: before the open, a same-day expiry has the hours from the pre-market print to the close, with the volatility the last session's quotes imply. A cash index (SPX, XSP) outside its session is spot at that session's close.",
4859
4800
  "Each strike's volatility comes from its expiry's out-of-the-money quotes, linear between quoted strikes and flat beyond. An expiry without usable quotes is left out and named.",
4860
4801
  "GEX at a strike is gamma × 100 × spot × 1% of spot × open interest.",
4861
4802
  "The flip reprices net GEX from 15% below to 15% above spot in 0.25% steps, each strike keeping its volatility, and takes the sign change nearest spot.",
@@ -4953,7 +4894,7 @@
4953
4894
  },
4954
4895
  {
4955
4896
  "type": "paragraph",
4956
- "text": "`gloom fn GEX SPY --csv` opens with a summary: spot and quote times, the open interest session, the unit, net GEX, the dealer range, the flip and both walls. Puts export negative, so call and put GEX add up to net. `--json` has the same under `metadata.gamma`."
4897
+ "text": "`gloom fn GEX SPY --csv` opens with a summary: spot, when gamma is evaluated and when its quotes were taken (`Gamma at ..., vols from ...`), the open interest session, the unit, net GEX, the dealer range, the flip and both walls. Puts export negative, so call and put GEX add up to net. `--json` has the same under `metadata.gamma`."
4957
4898
  },
4958
4899
  {
4959
4900
  "type": "heading",
@@ -5539,7 +5480,7 @@
5539
5480
  "functions",
5540
5481
  "screenshots"
5541
5482
  ],
5542
- "updatedAt": "2026-10-12",
5483
+ "updatedAt": "2026-10-27",
5543
5484
  "blocks": [
5544
5485
  {
5545
5486
  "type": "paragraph",
@@ -5711,8 +5652,8 @@
5711
5652
  "Ticker and quick notes"
5712
5653
  ],
5713
5654
  [
5714
- "`alerts list`, `alerts add <symbol> <above|below|crosses> <price>`, `alerts delete|rearm <id>`",
5715
- "Price alerts"
5655
+ "`alerts list`, `alerts add ...`, `alerts delete|rearm <id>`",
5656
+ "Price, valuation, daily technical and event alerts, every kind the `ALRT` pane offers; the forms are below"
5716
5657
  ]
5717
5658
  ]
5718
5659
  },
@@ -5720,6 +5661,22 @@
5720
5661
  "type": "paragraph",
5721
5662
  "text": "[Portfolios and rebalancing](/docs/portfolio) walks through targets and the drift table. `CASH` in `portfolio target` is the cash line; `portfolio add` and `position set` refuse a bare `CASH` (the stock is `CASH:NASDAQ`). `portfolio` and `watchlist` write immediately and ignore `--dry-run`. Sign-in, account management and chat are app-only."
5722
5663
  },
5664
+ {
5665
+ "type": "paragraph",
5666
+ "text": "The alerts commands, as `gloom help alerts` lists them:"
5667
+ },
5668
+ {
5669
+ "type": "code",
5670
+ "code": "gloom alerts list\ngloom alerts add <symbol> <above|below|crosses> <price>\ngloom alerts add <symbol> <pe|ps|rsi(14)> <above|below> <level>\ngloom alerts add <symbol> ma(50) crosses <above|below> ma(200)\ngloom alerts add <symbol> closes <above|below> ma(200)\ngloom alerts add <symbol>/<benchmark> <above|below|crosses> <ratio>\ngloom alerts add <symbol> rrg <leading|weakening|lagging|improving> [--benchmark <symbol>]\ngloom alerts add <symbol> earnings [--days <n> | results]\ngloom alerts add <calendar event> [--country <code>] [--days <n>]\ngloom alerts add [symbol] news <keyword>\ngloom alerts add [symbol] flow [premium] [calls|puts] [sweeps|blocks]\ngloom alerts add <symbol> <iv|rr> <above|below> <level>\ngloom alerts add <OCC contract> iv spike <points>\ngloom alerts add <symbol> 52-week <high|low>\ngloom alerts add <symbol> unusual volume [<multiple>x]\ngloom alerts add <symbol> filing [8-K|10-K|10-Q|S-1|13D|13D/A|13G|13G/A|6-K|20-F]\ngloom alerts add <symbol> insider [buy|sell]\ngloom alerts add <symbol> short interest [increase|decrease] [<percent>%]\ngloom alerts add <symbol> analyst [upgrade|downgrade]\ngloom alerts add <symbol> hiring [accelerating|slowing]\ngloom alerts add perps <market> <funding|oi|premium|closed-premium> <above|below> <percent>\ngloom alerts add catalyst [type <type> | agency <agency> | country <code>]\ngloom alerts add <symbol> catalyst\ngloom alerts add congress [member name]\ngloom alerts add 13f <fund CIK>\ngloom alerts delete <id>\ngloom alerts rearm <id>"
5671
+ },
5672
+ {
5673
+ "type": "paragraph",
5674
+ "text": "Words none of these forms read are refused with the list of kinds. Adding a rule that already exists names the existing alert's ID and adds nothing, and `rearm` on an alert that has not gone off says it is already active. An RSI or moving-average alert is always saved: it reads the same daily closes `history` shows as final and says when it is first checked."
5675
+ },
5676
+ {
5677
+ "type": "paragraph",
5678
+ "text": "`alerts list` shows each alert's listing with its currency, its last reading with when it is from (or `not checked yet`) and when it was created, in ISO 8601 UTC. `alerts list --csv` keeps its columns in order (`id,kind,target,trigger,eventDate,status,lastCheckedPrice,triggeredAt`) and adds `createdAt,listing,currency,lastReading,lastReadingAt` after them. Creating, re-arming and deleting an alert go in the app's alert log beside the alerts that fired (`gloom fn ALRT --tab history`)."
5679
+ },
5723
5680
  {
5724
5681
  "type": "heading",
5725
5682
  "level": 2,
@@ -6928,6 +6885,10 @@
6928
6885
  "type": "paragraph",
6929
6886
  "text": "The [financial news API](/news) page shows the live wire and has the Get API key button."
6930
6887
  },
6888
+ {
6889
+ "type": "paragraph",
6890
+ "text": "Comparing news APIs? See [the best financial news APIs](/alternatives/financial-news-apis), or Gloom side by side with [NewsAPI.org](/alternatives/newsapi-org) and [newsfilter.io](/alternatives/newsfilter-io)."
6891
+ },
6931
6892
  {
6932
6893
  "type": "paragraph",
6933
6894
  "text": "See also: [Gloom Datasets](/docs/datasets), a separate paid API for alternative signals, filings, macro, news and market data, with its own `gds_` keys."
@@ -7206,7 +7167,7 @@
7206
7167
  {
7207
7168
  "type": "list",
7208
7169
  "items": [
7209
- "**Alternative data:** GPU rental prices, supply chain, hiring postings and momentum, social mentions, app attention, power and grid, perpetuals, catalysts and litigation, research attention, congressional trades, operating exposure.",
7170
+ "**Alternative data:** GPU rental prices, supply chain, hiring postings and momentum, social mentions, app attention, power and grid, perpetuals, catalysts and litigation, congressional trades, operating exposure.",
7210
7171
  "**Filings and company text:** KPIs and guidance, executive pay, risk factors, 8-K events, transcripts, credit documents, debt maturities, revenue breakdown, SEC filings, insiders and 13F, document search.",
7211
7172
  "**News:** Real-time stories, sources and topics.",
7212
7173
  "**Macro and positioning:** CPI, EIA inventories, COT, yield curves and macro series, central bank rates, short volume and interest, CDS, government awards.",
@@ -7732,7 +7693,7 @@
7732
7693
  "title": "Screening the market (EQS)",
7733
7694
  "summary": "EQS keeps only the stocks in its stored universe that meet all your rules (valuation, growth, margins, liquidity, ownership and more) and ranks the matches.",
7734
7695
  "chapter": "Compare, screen and follow the money",
7735
- "minutes": 4
7696
+ "minutes": 5
7736
7697
  },
7737
7698
  {
7738
7699
  "url": "/academy/compare-screen-follow-money/who-owns-it/holders-and-13f",
@@ -7785,10 +7746,10 @@
7785
7746
  },
7786
7747
  {
7787
7748
  "url": "/academy/compare-screen-follow-money/filings-and-attention/attention",
7788
- "title": "Attention: research and social buzz (ATTN, BUZZ)",
7789
- "summary": "ATTN ranks the tickers Gloom users are researching against each ticker's usual level, and BUZZ counts the day's posts on X naming a ticker, with the top posts and their stance.",
7749
+ "title": "Social buzz (BUZZ)",
7750
+ "summary": "BUZZ counts the day's posts on X naming a ticker against its usual level, with the top posts and their stance.",
7790
7751
  "chapter": "Compare, screen and follow the money",
7791
- "minutes": 4
7752
+ "minutes": 3
7792
7753
  },
7793
7754
  {
7794
7755
  "url": "/academy/options-and-volatility/options-from-zero/what-is-an-option",
package/src/i18n/es.ts CHANGED
@@ -506,10 +506,8 @@ export const es: Record<string, string> = {
506
506
  "Pin Ticker": "Fijar ticker",
507
507
 
508
508
  // ── Help pane ────────────────────────────────────────────────
509
- "How To Use Gloom": "Cómo usar Gloom",
510
509
  "Not sure of a code? Click the search bar at the top, or press {key}, and type what you want in plain words, like \"top news\". The Functions tab lists everything.": "¿No sabes el código? Haz clic en la barra de búsqueda de arriba, o pulsa {key}, y escribe lo que quieres con tus palabras, como \"top news\". La pestaña Funciones las lista todas.",
511
510
  "Not sure of a code? Click the search bar at the top and type what you want in plain words, like \"top news\". The Functions tab lists everything.": "¿No sabes el código? Haz clic en la barra de búsqueda de arriba y escribe lo que quieres con tus palabras, como \"top news\". La pestaña Funciones las lista todas.",
512
- "Click anything to use it; the keys shown beside actions are shortcuts.": "Haz clic en cualquier cosa para usarla; las teclas junto a las acciones son atajos.",
513
511
  "Open Help": "Abrir la ayuda",
514
512
  "Command Prefixes": "Prefijos de comandos",
515
513
  "Window Templates": "Plantillas de ventana",
@@ -519,7 +517,6 @@ export const es: Record<string, string> = {
519
517
  "Scrolling": "Desplazamiento",
520
518
  "Open Debug Log": "Abrir registro de depuración",
521
519
  "GitHub Issues": "GitHub Issues",
522
- "Docked panes stay in the saved layout.": "Los paneles anclados permanecen en el diseño guardado.",
523
520
  "Floating panes can be dragged by the title bar and resized from the lower-right corner.": "Los paneles flotantes se arrastran por la barra de título y se redimensionan desde la esquina inferior derecha.",
524
521
  "Use Layout Actions for split, move, duplicate, close all floating panes, undo, redo, and layout presets.": "Usa Acciones de diseño para dividir, mover, duplicar, cerrar paneles flotantes, deshacer, rehacer y diseños predefinidos.",
525
522
  "Move through focused table and list rows.": "Moverse por las filas de tablas y listas activas.",
@@ -564,7 +561,6 @@ export const es: Record<string, string> = {
564
561
  "Go back from a nested command screen when the query is empty.": "Volver de una pantalla de comando anidada cuando la consulta está vacía.",
565
562
  "Reorder ordered multi-select choices.": "Reordenar opciones de selección múltiple ordenadas.",
566
563
  "Submit multiline command forms.": "Enviar formularios de comando multilínea.",
567
- "Layout Basics": "Fundamentos del diseño",
568
564
 
569
565
  // ── Onboarding ───────────────────────────────────────────────
570
566
  "The open terminal for modern finance.": "La terminal abierta para las finanzas modernas.",
@@ -1115,6 +1111,19 @@ export const es: Record<string, string> = {
1115
1111
  "{symbol}'s figures are not collected yet; the next read stores them.": "Aún no se han recopilado las cifras de {symbol}; la próxima lectura las guardará.",
1116
1112
  "{symbol} files with the SEC as a trust or pool, not as an open-end fund, and its sponsor's site is not one Gloom reads.": "{symbol} está registrado ante la SEC como fideicomiso o pool, no como fondo abierto, y Gloom no lee el sitio de su patrocinador.",
1117
1113
  "No figures for {symbol}: its sponsor's site is not one Gloom reads, and the SEC's prospectus and N-PORT data sets list none for it yet.": "No hay cifras para {symbol}: Gloom no lee el sitio de su patrocinador y los conjuntos de datos de folletos y N-PORT de la SEC aún no incluyen ninguna.",
1114
+ "est. {range}": "est. {range}",
1115
+ "Shares outstanding": "Acciones en circulación",
1116
+ "1M flows": "Flujos 1M",
1117
+ "Structure": "Estructura",
1118
+ "Closed-end fund": "Fondo cerrado",
1119
+ "BDC": "BDC",
1120
+ "est.": "est.",
1121
+ "{count} shares": "{count} acciones",
1122
+ "No figures for {symbol}: it files with the SEC as a closed-end fund or BDC, but neither the filings Gloom reads nor its sponsor's site state any for it yet.": "No hay cifras para {symbol}: está registrado ante la SEC como fondo cerrado o BDC, pero ni las presentaciones que lee Gloom ni el sitio de su patrocinador indican ninguna todavía.",
1123
+ "No NAV for {symbol}: {publisher} publishes figures for it, but no NAV.": "No hay valor liquidativo para {symbol}: {publisher} publica cifras del fondo, pero no su valor liquidativo.",
1124
+ "No NAV for {symbol}: its SEC filings state net assets but no NAV per share, and its sponsor's NAV is not one Gloom reads.": "No hay valor liquidativo para {symbol}: sus presentaciones ante la SEC indican el patrimonio neto pero no el valor liquidativo por acción, y Gloom no lee el de su patrocinador.",
1125
+ "No NAV for {symbol}: its sponsor's site is not one Gloom reads, and a trust files no NAV with the SEC's fund data sets.": "No hay valor liquidativo para {symbol}: Gloom no lee el sitio de su patrocinador, y un fideicomiso no presenta valor liquidativo en los conjuntos de datos de fondos de la SEC.",
1126
+ "No NAV for {symbol}: its sponsor's site is not one Gloom reads, and the SEC's prospectus and N-PORT data sets state no NAV.": "No hay valor liquidativo para {symbol}: Gloom no lee el sitio de su patrocinador, y los conjuntos de datos de folletos y N-PORT de la SEC no indican ninguno.",
1118
1127
  "No figures for {symbol}: it lists as a fund, but the SEC's lists do not name it yet and its sponsor's site is not one Gloom reads.": "No hay cifras para {symbol}: cotiza como fondo, pero las listas de la SEC aún no lo incluyen y Gloom no lee el sitio de su patrocinador.",
1119
1128
  "No fund facts for {symbol}: it is not on the SEC's lists of US-listed funds.": "No hay datos del fondo para {symbol}: no figura en las listas de fondos cotizados en EE. UU. de la SEC.",
1120
1129
  "No fund facts for {symbol} yet.": "Aún no hay datos del fondo para {symbol}.",
@@ -1478,8 +1487,11 @@ export const es: Record<string, string> = {
1478
1487
  "Answers cite filings, calls and news.": "Las respuestas citan informes, llamadas y noticias.",
1479
1488
  "{ticker} is open. {shortcut}, then AP, adds more.": "{ticker} está abierto. {shortcut} y luego AP añade más.",
1480
1489
  "Later: {shortcut}, then AP.": "Más tarde: {shortcut} y luego AP.",
1481
- "Enter: next field, then add.": "Enter: siguiente campo, luego añade.",
1482
- "Enter to add a ticker.": "Enter para añadir un ticker.",
1490
+ "Enter: next field, then add": "Enter: siguiente campo, luego añade",
1491
+ "Add one ticker to continue": "Añade un ticker para continuar",
1492
+ "Add one ticker to continue.": "Añade un ticker para continuar.",
1493
+ "Esc, then Enter: continue": "Esc y luego Enter: continuar",
1494
+ "Enter to add a ticker": "Enter para añadir un ticker",
1483
1495
  " already added": " ya añadido",
1484
1496
  "Credentials stay on this device.": "Las credenciales se quedan en este dispositivo.",
1485
1497
  "Ask Gloom": "Ask Gloom",
@@ -1656,6 +1668,8 @@ export const es: Record<string, string> = {
1656
1668
  "Guides": "Guías",
1657
1669
  "Academy": "Academia",
1658
1670
  "offline, saved copy": "sin conexión, copia guardada",
1671
+ "company data from {listing}": "datos de la empresa de {listing}",
1672
+ "from {listing}": "de {listing}",
1659
1673
  "Open in Browser": "Abrir en el navegador",
1660
1674
  "No docs match \"{query}\".": "Nada en la documentación coincide con \"{query}\".",
1661
1675
  "No docs for {name} yet.": "Aún no hay documentación para {name}.",