gloomberb 0.10.5 → 0.11.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.
- package/README.md +58 -9
- package/README.zh-CN.md +6 -6
- package/package.json +12 -3
- package/src/api-client/auth.ts +48 -10
- package/src/api-client/data.ts +72 -0
- package/src/api-client/index.test.ts +158 -0
- package/src/api-client/index.ts +115 -4
- package/src/api-client/paths.ts +73 -0
- package/src/api-client/request.test.ts +30 -0
- package/src/api-client/request.ts +58 -21
- package/src/api-client/socket-health.test.ts +80 -0
- package/src/api-client/socket.ts +110 -6
- package/src/api-client/types.ts +267 -0
- package/src/app/global-shortcuts.test.tsx +144 -9
- package/src/app/global-shortcuts.ts +33 -11
- package/src/app/runtime/broker-import.ts +39 -5
- package/src/app/runtime/startup.ts +7 -1
- package/src/app/runtime/update.ts +32 -5
- package/src/app.tsx +48 -24
- package/src/architecture/import-boundaries.test.ts +5 -1
- package/src/brokers/broker-ticker-sync.ts +3 -8
- package/src/brokers/sync-broker-instance.test.ts +59 -0
- package/src/brokers/sync-broker-instance.ts +37 -13
- package/src/capabilities/chart-series.ts +318 -0
- package/src/capabilities/factories.ts +50 -0
- package/src/capabilities/index.ts +1 -0
- package/src/capabilities/registry.test.ts +135 -0
- package/src/capabilities/registry.ts +31 -4
- package/src/capabilities/types.ts +52 -0
- package/src/cli/commands/overview.ts +2 -2
- package/src/cli/desktop-pane-shot.ts +2 -0
- package/src/cli/index.ts +10 -4
- package/src/cli/pane-functions/catalog.ts +4 -0
- package/src/cli/pane-functions/data.ts +6 -1
- package/src/cli/pane-functions/discovery.ts +76 -10
- package/src/cli/pane-functions/report.test.ts +76 -0
- package/src/cli/pane-functions/report.ts +7 -1
- package/src/cli/pane-functions/resolver.ts +4 -1
- package/src/cli/pane-functions/screenshot.test.ts +56 -3
- package/src/cli/pane-functions/screenshot.ts +68 -5
- package/src/cli/registry.ts +1 -1
- package/src/components/chart/composite/composite-chart.test.tsx +54 -0
- package/src/components/chart/composite/composite-chart.tsx +96 -18
- package/src/components/chart/composite/downsample.test.ts +136 -0
- package/src/components/chart/composite/downsample.ts +208 -0
- package/src/components/chart/composite/format.test.ts +34 -0
- package/src/components/chart/composite/format.ts +33 -10
- package/src/components/chart/composite/panel-series.test.ts +66 -0
- package/src/components/chart/composite/panel-series.ts +101 -0
- package/src/components/chart/core/axis-format.ts +13 -3
- package/src/components/chart/core/index.test.ts +7 -0
- package/src/components/chart/core/renderer.ts +3 -4
- package/src/components/chart/multi-line/renderer.ts +1 -0
- package/src/components/chart/native/kitty/index.test.ts +25 -3
- package/src/components/chart/native/kitty/support.ts +37 -3
- package/src/components/chart/native/use-chart-text-fallback.ts +19 -0
- package/src/components/chart/static/chart/surface.tsx +43 -12
- package/src/components/chart/static/multi-line-chart-surface.tsx +41 -5
- package/src/components/command-bar/commands/direct/index.ts +18 -0
- package/src/components/command-bar/commands/registry.ts +14 -0
- package/src/components/command-bar/routes/root/article-results.test.ts +83 -0
- package/src/components/command-bar/routes/root/article-results.ts +55 -0
- package/src/components/command-bar/routes/root/command-items.ts +3 -0
- package/src/components/command-bar/routes/root/results.ts +38 -11
- package/src/components/command-bar/routes/root/runtime.ts +6 -2
- package/src/components/command-bar/routes/ticker-search/actions.ts +1 -1
- package/src/components/command-bar/surface/assist.test.tsx +13 -6
- package/src/components/command-bar/surface/index.tsx +39 -1
- package/src/components/command-bar/view-model.test.ts +19 -0
- package/src/components/command-bar/view-model.ts +39 -3
- package/src/components/command-bar/workflow/collection-actions.test.ts +94 -0
- package/src/components/command-bar/workflow/collection-actions.ts +14 -3
- package/src/components/command-bar/workflow/ops.test.ts +136 -0
- package/src/components/command-bar/workflow/ops.ts +71 -1
- package/src/components/company-logo.test.ts +19 -0
- package/src/components/company-logo.tsx +60 -0
- package/src/components/feed-data-table/stack-view.tsx +7 -1
- package/src/components/index.ts +2 -1
- package/src/components/layout/detached-pane-shell.tsx +11 -5
- package/src/components/layout/header.test.tsx +35 -0
- package/src/components/layout/header.tsx +106 -14
- package/src/components/layout/pane/cycle-order.test.ts +0 -1
- package/src/components/layout/pane/footer/index.test.tsx +19 -19
- package/src/components/layout/pane/header.tsx +2 -13
- package/src/components/layout/shell/index.tsx +5 -0
- package/src/components/layout/status-bar.test.tsx +36 -1
- package/src/components/layout/status-bar.tsx +48 -2
- package/src/components/onboarding/account-step/chooser-panel.tsx +27 -50
- package/src/components/onboarding/account-step/form-panel.tsx +88 -30
- package/src/components/onboarding/account-step/index.tsx +11 -2
- package/src/components/onboarding/account-step/qr-panel.tsx +68 -0
- package/src/components/onboarding/account-step/signed-in-panel.tsx +5 -8
- package/src/components/onboarding/onboarding-frame.tsx +517 -0
- package/src/components/onboarding/onboarding-steps.tsx +0 -264
- package/src/components/onboarding/onboarding-wizard.test.tsx +665 -196
- package/src/components/onboarding/onboarding-wizard.tsx +857 -267
- package/src/components/onboarding/portfolio-step/broker-fields-panel.tsx +81 -51
- package/src/components/onboarding/portfolio-step/broker-setup-panel.tsx +14 -20
- package/src/components/onboarding/portfolio-step/broker-sync-panel.tsx +8 -11
- package/src/components/onboarding/portfolio-step/choose-panel.tsx +18 -22
- package/src/components/onboarding/portfolio-step/index.tsx +3 -0
- package/src/components/onboarding/portfolio-step/types.ts +3 -0
- package/src/components/onboarding/wizard-account.ts +41 -25
- package/src/components/onboarding/wizard-broker-sync.ts +45 -67
- package/src/components/onboarding/wizard-model.ts +18 -2
- package/src/components/table-view-shared.test.ts +11 -0
- package/src/components/table-view-shared.tsx +26 -0
- package/src/components/ui/data-table/index.tsx +19 -1
- package/src/components/ui/data-table/opentui/index.tsx +29 -9
- package/src/components/ui/data-table/types.ts +2 -0
- package/src/components/ui/external-link.tsx +4 -2
- package/src/components/ui/fields.tsx +5 -1
- package/src/components/ui/loading.tsx +1 -1
- package/src/components/ui/status.tsx +76 -4
- package/src/components/ui/table-layout.test.ts +24 -0
- package/src/components/ui/table-layout.ts +90 -23
- package/src/components/ui/tabs.tsx +86 -4
- package/src/core/app-services.ts +14 -3
- package/src/core/connection-health.test.ts +143 -0
- package/src/core/connection-health.ts +295 -0
- package/src/core/state/app/layout-reducer.ts +34 -0
- package/src/core/state/app/layout.ts +21 -0
- package/src/core/state/app/state.ts +10 -0
- package/src/core/state/app/types.ts +7 -1
- package/src/data/config/chart-settings.ts +11 -2
- package/src/data/config/store/index.test.ts +83 -9
- package/src/data/config/store/migrations.ts +16 -0
- package/src/data/config/store/normalize.ts +59 -1
- package/src/data/fred-series.ts +8 -2
- package/src/i18n/es.ts +135 -0
- package/src/i18n/ja.ts +135 -0
- package/src/i18n/ko.ts +135 -0
- package/src/i18n/zh-cn.ts +135 -0
- package/src/i18n/zh-tw.ts +135 -0
- package/src/market-data/coordinator/chart.ts +3 -2
- package/src/market-data/coordinator/index.test.ts +2 -2
- package/src/market-data/coordinator/index.ts +1 -1
- package/src/market-data/hooks.tsx +3 -2
- package/src/market-data/market/format.test.ts +7 -0
- package/src/market-data/market/freshness.ts +5 -2
- package/src/market-data/market/status.test.ts +12 -0
- package/src/market-data/market/status.ts +34 -17
- package/src/market-data/quotes/freshness.test.ts +16 -0
- package/src/news/aggregator.test.ts +131 -3
- package/src/news/aggregator.ts +163 -27
- package/src/news/hooks.test.tsx +2 -0
- package/src/news/hooks.ts +31 -1
- package/src/news/news-model.ts +5 -2
- package/src/news/types.ts +7 -0
- package/src/notifications/app-notifier.test.ts +28 -6
- package/src/notifications/app-notifier.ts +24 -5
- package/src/plugins/broker-sync/broker-sync.test.ts +159 -0
- package/src/plugins/broker-sync/native-loader.ts +10 -0
- package/src/plugins/broker-sync/normalize.ts +301 -0
- package/src/plugins/broker-sync/public.ts +122 -0
- package/src/plugins/broker-sync/robinhood-native.ts +367 -0
- package/src/plugins/broker-sync/robinhood.ts +114 -0
- package/src/plugins/broker-sync/simplefin-native.ts +201 -0
- package/src/plugins/broker-sync/simplefin.ts +70 -0
- package/src/plugins/builtin/account-management/footer.ts +8 -19
- package/src/plugins/builtin/account-management/pane.tsx +18 -13
- package/src/plugins/builtin/ai/pi/host.ts +6 -5
- package/src/plugins/builtin/ai/providers.ts +1 -1
- package/src/plugins/builtin/ai/screener/footer.ts +0 -7
- package/src/plugins/builtin/ai/screener/pane.test.tsx +2 -1
- package/src/plugins/builtin/ai/screener/pane.tsx +3 -1
- package/src/plugins/builtin/ai/screener/results-view.tsx +8 -0
- package/src/plugins/builtin/ai/screener/runner.ts +7 -3
- package/src/plugins/builtin/ai/workspace/pane.tsx +13 -2
- package/src/plugins/builtin/alerts/alert-engine.test.ts +38 -1
- package/src/plugins/builtin/alerts/alert-engine.ts +43 -1
- package/src/plugins/builtin/alerts/constants.ts +2 -1
- package/src/plugins/builtin/alerts/index.test.tsx +49 -6
- package/src/plugins/builtin/alerts/index.tsx +68 -36
- package/src/plugins/builtin/alerts/pane.tsx +64 -64
- package/src/plugins/builtin/alerts/quotes.ts +11 -3
- package/src/plugins/builtin/alerts/types.ts +1 -0
- package/src/plugins/builtin/analytics/index.tsx +32 -12
- package/src/plugins/builtin/analytics/pane-model.ts +54 -18
- package/src/plugins/builtin/analytics/portfolio-selection.ts +19 -0
- package/src/plugins/builtin/analytics/view.tsx +5 -3
- package/src/plugins/builtin/broker-manager/detail.tsx +7 -2
- package/src/plugins/builtin/broker-manager/footer.ts +4 -9
- package/src/plugins/builtin/broker-manager/index.tsx +1 -6
- package/src/plugins/builtin/buildout/detail/ui.tsx +15 -4
- package/src/plugins/builtin/buildout/model/index.ts +1 -1
- package/src/plugins/builtin/buildout/pane/header.tsx +1 -0
- package/src/plugins/builtin/buildout/pane/index.tsx +17 -18
- package/src/plugins/builtin/changelog/index.tsx +60 -45
- package/src/plugins/builtin/chart-composer/catalog-inventory.test.ts +97 -0
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +366 -0
- package/src/plugins/builtin/chart-composer/chart-spec.ts +21 -1
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +307 -0
- package/src/plugins/builtin/chart-composer/editor/controller.ts +1 -1
- package/src/plugins/builtin/chart-composer/index.tsx +45 -5
- package/src/plugins/builtin/chart-composer/pane.tsx +29 -89
- package/src/plugins/builtin/chart-composer/presets.test.ts +48 -0
- package/src/plugins/builtin/chart-composer/presets.ts +69 -3
- package/src/plugins/builtin/chart-composer/quick-add.tsx +8 -5
- package/src/plugins/builtin/chart-composer/semantic.ts +18 -14
- package/src/plugins/builtin/chart-composer/series-catalog.test.ts +39 -0
- package/src/plugins/builtin/chart-composer/series-catalog.ts +104 -3
- package/src/plugins/builtin/chart-composer/shortcuts.test.ts +10 -10
- package/src/plugins/builtin/chart-composer/shortcuts.ts +4 -12
- package/src/plugins/builtin/chart-composer/use-series-catalog.ts +230 -23
- package/src/plugins/builtin/chat/chat.test.tsx +22 -0
- package/src/plugins/builtin/chat/content/composer.tsx +6 -4
- package/src/plugins/builtin/chat/content/index.tsx +7 -0
- package/src/plugins/builtin/chat/content/snapshot.ts +9 -2
- package/src/plugins/builtin/chat/content/transcript.tsx +10 -0
- package/src/plugins/builtin/chat/controller/channel-actions.ts +11 -1
- package/src/plugins/builtin/chat/controller/channels.ts +20 -4
- package/src/plugins/builtin/chat/controller/index.ts +67 -15
- package/src/plugins/builtin/chat/controller/lifecycle.ts +3 -0
- package/src/plugins/builtin/chat/controller/message-loading.ts +5 -1
- package/src/plugins/builtin/chat/controller/messages.ts +3 -1
- package/src/plugins/builtin/chat/controller/notifications.ts +32 -11
- package/src/plugins/builtin/chat/controller/persistence.ts +0 -3
- package/src/plugins/builtin/chat/controller/realtime.ts +3 -3
- package/src/plugins/builtin/chat/controller/send.ts +1 -3
- package/src/plugins/builtin/chat/controller/session-runtime.ts +4 -9
- package/src/plugins/builtin/chat/controller/state.ts +8 -3
- package/src/plugins/builtin/chat/controller/storage.ts +0 -2
- package/src/plugins/builtin/chat/controller/view.ts +3 -2
- package/src/plugins/builtin/chat/controller.test.ts +195 -28
- package/src/plugins/builtin/chat/profile-popover.ts +1 -1
- package/src/plugins/builtin/cloud/auth-actions.tsx +14 -7
- package/src/plugins/builtin/cloud/auth-commands.ts +38 -46
- package/src/plugins/builtin/cloud/auth-dialog.tsx +296 -0
- package/src/{components/onboarding/account-step/model.test.ts → plugins/builtin/cloud/auth-model.test.ts} +1 -1
- package/src/{components/onboarding/account-step/model.ts → plugins/builtin/cloud/auth-model.ts} +37 -6
- package/src/plugins/builtin/cloud/browser.tsx +9 -0
- package/src/plugins/builtin/cloud/buildout-module.tsx +23 -0
- package/src/plugins/builtin/cloud/device-signin-dialog.tsx +243 -0
- package/src/plugins/builtin/cloud/device-signin.test.ts +217 -0
- package/src/plugins/builtin/cloud/device-signin.ts +234 -0
- package/src/plugins/builtin/cloud/index.tsx +2 -0
- package/src/plugins/builtin/cloud/plugin.tsx +10 -24
- package/src/plugins/builtin/cloud/upgrade-command.ts +13 -6
- package/src/plugins/builtin/cloud-tweets/registration.ts +6 -1
- package/src/plugins/builtin/cloud-tweets/table.tsx +57 -10
- package/src/plugins/builtin/composite-plugins.ts +39 -5
- package/src/plugins/builtin/congress-trades/detail.tsx +45 -5
- package/src/plugins/builtin/congress-trades/footer.ts +7 -16
- package/src/plugins/builtin/congress-trades/model.test.ts +85 -0
- package/src/plugins/builtin/congress-trades/model.ts +69 -1
- package/src/plugins/builtin/congress-trades/pane.tsx +63 -22
- package/src/plugins/builtin/connections/index.ts +53 -0
- package/src/plugins/builtin/connections/pane.test.tsx +79 -0
- package/src/plugins/builtin/connections/pane.tsx +258 -0
- package/src/plugins/builtin/correlation/index.test.tsx +2 -1
- package/src/plugins/builtin/correlation/index.tsx +58 -19
- package/src/plugins/builtin/correlation/matrix/model.ts +18 -7
- package/src/plugins/builtin/correlation/relationship/pane.tsx +43 -19
- package/src/plugins/builtin/correlation/settings.ts +1 -1
- package/src/plugins/builtin/credit-conditions/client.test.ts +80 -0
- package/src/plugins/builtin/credit-conditions/client.ts +105 -0
- package/src/plugins/builtin/credit-conditions/index.test.tsx +111 -0
- package/src/plugins/builtin/credit-conditions/index.tsx +227 -0
- package/src/plugins/builtin/credit-conditions/model.test.ts +43 -0
- package/src/plugins/builtin/credit-conditions/model.ts +64 -0
- package/src/plugins/builtin/debug/index.tsx +11 -6
- package/src/plugins/builtin/dividend-yield/client.test.ts +58 -0
- package/src/plugins/builtin/dividend-yield/client.ts +270 -0
- package/src/plugins/builtin/dividend-yield/index.tsx +61 -0
- package/src/plugins/builtin/dividend-yield/model.ts +83 -0
- package/src/plugins/builtin/dividend-yield/pane.tsx +306 -0
- package/src/plugins/builtin/dividend-yield/types.ts +22 -0
- package/src/plugins/builtin/earnings/data/cache.test.ts +10 -7
- package/src/plugins/builtin/earnings/data/cache.ts +23 -9
- package/src/plugins/builtin/earnings/index.tsx +59 -6
- package/src/plugins/builtin/earnings/model.test.ts +19 -1
- package/src/plugins/builtin/earnings/model.ts +17 -15
- package/src/plugins/builtin/econ/calendar-model.test.ts +37 -3
- package/src/plugins/builtin/econ/calendar-model.ts +32 -26
- package/src/plugins/builtin/econ/fred-series-map.ts +18 -0
- package/src/plugins/builtin/econ/index.test.tsx +110 -0
- package/src/plugins/builtin/econ/index.tsx +95 -52
- package/src/plugins/builtin/fear-greed/cache.test.ts +18 -3
- package/src/plugins/builtin/fear-greed/cache.ts +18 -6
- package/src/plugins/builtin/fear-greed/charts.tsx +9 -2
- package/src/plugins/builtin/fear-greed/format.ts +0 -9
- package/src/plugins/builtin/fear-greed/pane.tsx +21 -21
- package/src/plugins/builtin/futures/contracts.ts +100 -0
- package/src/plugins/builtin/futures/index.tsx +298 -0
- package/src/plugins/builtin/futures/model.test.ts +129 -0
- package/src/plugins/builtin/futures/model.ts +136 -0
- package/src/plugins/builtin/futures/pane.test.tsx +239 -0
- package/src/plugins/builtin/futures/table.test.ts +155 -0
- package/src/plugins/builtin/futures/table.tsx +241 -0
- package/src/plugins/builtin/fx-matrix/index.tsx +160 -134
- package/src/plugins/builtin/fx-matrix/pairs.ts +12 -1
- package/src/plugins/builtin/fx-matrix/pane.test.tsx +109 -0
- package/src/plugins/builtin/help/components.tsx +1 -30
- package/src/plugins/builtin/help/index.tsx +4 -24
- package/src/plugins/builtin/holders/pane.tsx +17 -12
- package/src/plugins/builtin/holders/thirteenf-match.ts +1 -2
- package/src/plugins/builtin/holders/treemap.tsx +4 -2
- package/src/plugins/builtin/insider/index.tsx +40 -14
- package/src/plugins/builtin/ipo-calendar/cache.ts +101 -0
- package/src/plugins/builtin/ipo-calendar/client.test.ts +31 -0
- package/src/plugins/builtin/ipo-calendar/client.ts +296 -0
- package/src/plugins/builtin/ipo-calendar/index.tsx +65 -0
- package/src/plugins/builtin/ipo-calendar/model.ts +145 -0
- package/src/plugins/builtin/ipo-calendar/pane.tsx +328 -0
- package/src/plugins/builtin/ipo-calendar/types.ts +19 -0
- package/src/plugins/builtin/kelly-sizer/index.test.tsx +3 -3
- package/src/plugins/builtin/kelly-sizer/model.ts +8 -1
- package/src/plugins/builtin/kelly-sizer/pane.tsx +33 -15
- package/src/plugins/builtin/kelly-sizer/view.tsx +12 -5
- package/src/plugins/builtin/market-halts/client.ts +114 -0
- package/src/plugins/builtin/market-halts/index.tsx +29 -0
- package/src/plugins/builtin/market-halts/model.test.ts +187 -0
- package/src/plugins/builtin/market-halts/model.ts +291 -0
- package/src/plugins/builtin/market-halts/pane.tsx +256 -0
- package/src/plugins/builtin/market-heatmap/data.test.ts +1 -0
- package/src/plugins/builtin/market-heatmap/data.ts +12 -3
- package/src/plugins/builtin/market-heatmap/index.tsx +131 -46
- package/src/plugins/builtin/market-movers/index.tsx +145 -63
- package/src/plugins/builtin/market-movers/model.ts +19 -3
- package/src/plugins/builtin/market-movers/screener.test.ts +108 -0
- package/src/plugins/builtin/market-movers/screener.ts +168 -10
- package/src/plugins/builtin/news/index.tsx +87 -104
- package/src/plugins/builtin/news/wire/article-search.test.ts +72 -0
- package/src/plugins/builtin/news/wire/article-search.ts +140 -0
- package/src/plugins/builtin/news/wire/breaking/notifications.test.ts +2 -0
- package/src/plugins/builtin/news/wire/breaking/pane.test.tsx +2 -0
- package/src/plugins/builtin/news/wire/breaking/pane.tsx +22 -9
- package/src/plugins/builtin/news/wire/categories.ts +35 -0
- package/src/plugins/builtin/news/wire/default-feeds.ts +47 -1
- package/src/plugins/builtin/news/wire/feed-config.test.ts +10 -5
- package/src/plugins/builtin/news/wire/index.tsx +42 -5
- package/src/plugins/builtin/news/wire/industry-pane.tsx +44 -20
- package/src/plugins/builtin/news/wire/news/detail-view.tsx +10 -5
- package/src/plugins/builtin/news/wire/news/footer.ts +35 -1
- package/src/plugins/builtin/news/wire/news/preset-pane.tsx +19 -7
- package/src/plugins/builtin/news/wire/news/query-presets.ts +16 -2
- package/src/plugins/builtin/news/wire/news/table.test.tsx +54 -0
- package/src/plugins/builtin/news/wire/news/table.tsx +119 -19
- package/src/plugins/builtin/news/wire/rss/source.test.ts +12 -0
- package/src/plugins/builtin/news/wire/rss/source.ts +1 -1
- package/src/plugins/builtin/notes/files.test.ts +18 -0
- package/src/plugins/builtin/notes/files.ts +90 -4
- package/src/plugins/builtin/notes/index.tsx +7 -1
- package/src/plugins/builtin/notes/quick-notes-pane.test.tsx +182 -0
- package/src/plugins/builtin/notes/quick-notes-pane.tsx +74 -31
- package/src/plugins/builtin/notes/sync.test.ts +49 -0
- package/src/plugins/builtin/notes/sync.ts +98 -0
- package/src/plugins/builtin/notes/ticker-notes-tab.test.tsx +380 -0
- package/src/plugins/builtin/notes/ticker-notes-tab.tsx +97 -40
- package/src/plugins/builtin/options/calc-seed.test.ts +118 -0
- package/src/plugins/builtin/options/calc-seed.ts +52 -0
- package/src/plugins/builtin/options/footer.ts +4 -1
- package/src/plugins/builtin/options/index.tsx +22 -1
- package/src/plugins/builtin/options/live-quotes.ts +8 -0
- package/src/plugins/builtin/options/table.ts +3 -1
- package/src/plugins/builtin/options/view.test.tsx +5 -1
- package/src/plugins/builtin/options/view.tsx +112 -17
- package/src/plugins/builtin/options-calculator/index.tsx +35 -0
- package/src/plugins/builtin/options-calculator/model.test.ts +172 -0
- package/src/plugins/builtin/options-calculator/model.ts +273 -0
- package/src/plugins/builtin/options-calculator/pane.test.tsx +138 -0
- package/src/plugins/builtin/options-calculator/pane.tsx +218 -0
- package/src/plugins/builtin/plugin-module.test.ts +16 -2
- package/src/plugins/builtin/plugin-module.ts +5 -1
- package/src/plugins/builtin/polls/client.ts +57 -0
- package/src/plugins/builtin/polls/hooks.ts +20 -0
- package/src/plugins/builtin/polls/index.tsx +35 -0
- package/src/plugins/builtin/polls/normalize.test.ts +230 -0
- package/src/plugins/builtin/polls/normalize.ts +319 -0
- package/src/plugins/builtin/polls/pane.tsx +722 -0
- package/src/plugins/builtin/polls/types.ts +77 -0
- package/src/plugins/builtin/portfolio-list/account-metrics.test.ts +20 -0
- package/src/plugins/builtin/portfolio-list/account-metrics.ts +11 -6
- package/src/plugins/builtin/portfolio-list/header.tsx +15 -4
- package/src/plugins/builtin/portfolio-list/pane/index.test.tsx +1 -0
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +7 -3
- package/src/plugins/builtin/portfolio-list/pane/streaming.ts +6 -1
- package/src/plugins/builtin/portfolio-list/pane/supplemental.ts +1 -1
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +2 -0
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +16 -6
- package/src/plugins/builtin/research/analyst-pane.tsx +40 -67
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +30 -31
- package/src/plugins/builtin/research/equity-diagnostic-pane.test.tsx +303 -0
- package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +485 -0
- package/src/plugins/builtin/research/index.test.ts +20 -25
- package/src/plugins/builtin/research/index.tsx +36 -5
- package/src/plugins/builtin/research/relative-valuation-pane.tsx +86 -26
- package/src/plugins/builtin/scanner/denied.tsx +31 -0
- package/src/plugins/builtin/scanner/feed.ts +94 -0
- package/src/plugins/builtin/scanner/flow-model.test.ts +85 -0
- package/src/plugins/builtin/scanner/flow-model.ts +133 -0
- package/src/plugins/builtin/scanner/flow-pane.tsx +197 -0
- package/src/plugins/builtin/scanner/hilo-bars.tsx +121 -0
- package/src/plugins/builtin/scanner/hilo-model.test.ts +44 -0
- package/src/plugins/builtin/scanner/hilo-model.ts +75 -0
- package/src/plugins/builtin/scanner/hilo-pane.tsx +165 -0
- package/src/plugins/builtin/scanner/index.ts +109 -0
- package/src/plugins/builtin/scanner/waiting.tsx +11 -0
- package/src/plugins/builtin/sec/index.tsx +33 -14
- package/src/plugins/builtin/sectors/index.tsx +119 -81
- package/src/plugins/builtin/sectors/move-bar.tsx +43 -0
- package/src/plugins/builtin/sectors/sector-data.ts +18 -0
- package/src/plugins/builtin/sectors/sector-model.ts +13 -15
- package/src/plugins/builtin/shared/auto-refresh.ts +51 -0
- package/src/plugins/builtin/shared/cloud-upgrade.ts +37 -6
- package/src/plugins/builtin/shared/pane-footer.ts +16 -3
- package/src/plugins/builtin/shared/public-share.ts +23 -0
- package/src/plugins/builtin/shared/screener-live-quotes.test.ts +91 -0
- package/src/plugins/builtin/shared/screener-live-quotes.ts +134 -0
- package/src/plugins/builtin/shared/table-pane.ts +1 -5
- package/src/plugins/builtin/shared/use-quote-board.test.tsx +211 -0
- package/src/plugins/builtin/shared/use-quote-board.ts +195 -0
- package/src/plugins/builtin/short-interest/client.ts +124 -0
- package/src/plugins/builtin/short-interest/index.tsx +62 -0
- package/src/plugins/builtin/short-interest/model.ts +113 -0
- package/src/plugins/builtin/short-interest/pane.tsx +252 -0
- package/src/plugins/builtin/short-interest/types.ts +9 -0
- package/src/plugins/builtin/substack/api/cache.ts +7 -3
- package/src/plugins/builtin/substack/api/loaders.ts +36 -12
- package/src/plugins/builtin/substack/api/types.ts +2 -0
- package/src/plugins/builtin/substack/article-detail.tsx +15 -1
- package/src/plugins/builtin/substack/pane-footer.ts +3 -22
- package/src/plugins/builtin/substack/pane-state.ts +1 -1
- package/src/plugins/builtin/substack/pane.tsx +56 -14
- package/src/plugins/builtin/thirteenf/api.test.ts +1 -1
- package/src/plugins/builtin/thirteenf/api.ts +44 -19
- package/src/plugins/builtin/thirteenf/data.ts +15 -7
- package/src/plugins/builtin/thirteenf/model.ts +2 -0
- package/src/plugins/builtin/thirteenf/pane.tsx +51 -12
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +10 -4
- package/src/plugins/builtin/ticker-detail/data-panes/provider-search.tsx +67 -11
- package/src/plugins/builtin/ticker-detail/financials/tab.tsx +15 -8
- package/src/plugins/builtin/ticker-detail/index.tsx +5 -21
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +72 -32
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +12 -14
- package/src/plugins/builtin/ticker-detail/pane.tsx +4 -1
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.test.tsx +70 -0
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +42 -28
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +96 -49
- package/src/plugins/builtin/ticker-detail/research-tabs.ts +32 -0
- package/src/plugins/builtin/ticker-detail/settings.ts +12 -0
- package/src/plugins/builtin/ticker-research-backend-plugin.ts +2 -9
- package/src/plugins/builtin/ticker-research-plugin.ts +6 -0
- package/src/plugins/builtin/treasury-auctions/cache.test.ts +173 -0
- package/src/plugins/builtin/treasury-auctions/cache.ts +104 -0
- package/src/plugins/builtin/treasury-auctions/client.test.ts +181 -0
- package/src/plugins/builtin/treasury-auctions/client.ts +151 -0
- package/src/plugins/builtin/treasury-auctions/index.tsx +90 -0
- package/src/plugins/builtin/treasury-auctions/model.test.ts +147 -0
- package/src/plugins/builtin/treasury-auctions/model.ts +188 -0
- package/src/plugins/builtin/treasury-auctions/pane.test.tsx +170 -0
- package/src/plugins/builtin/treasury-auctions/pane.tsx +417 -0
- package/src/plugins/builtin/treasury-auctions/types.ts +59 -0
- package/src/plugins/builtin/tv/pane.tsx +67 -7
- package/src/plugins/builtin/tv/youtube-embed.test.ts +84 -0
- package/src/plugins/builtin/tv/youtube-embed.ts +173 -0
- package/src/plugins/builtin/tv/youtube-stream.ts +27 -2
- package/src/plugins/builtin/volatility/client.ts +87 -0
- package/src/plugins/builtin/volatility/index.test.tsx +107 -0
- package/src/plugins/builtin/volatility/index.tsx +193 -0
- package/src/plugins/builtin/volatility/model.test.ts +66 -0
- package/src/plugins/builtin/volatility/model.ts +113 -0
- package/src/plugins/builtin/world-indices/footer.ts +43 -23
- package/src/plugins/builtin/world-indices/index.tsx +44 -93
- package/src/plugins/builtin/world-indices/indices.ts +11 -2
- package/src/plugins/builtin/world-indices/model.ts +17 -24
- package/src/plugins/builtin/world-indices/pane.test.tsx +116 -0
- package/src/plugins/builtin/world-indices/table.tsx +82 -37
- package/src/plugins/builtin/yield-curve/index.tsx +16 -7
- package/src/plugins/builtin/yield-curve/treasury-data.test.ts +25 -0
- package/src/plugins/builtin/yield-curve/treasury-data.ts +16 -0
- package/src/plugins/catalog-backend.ts +8 -0
- package/src/plugins/catalog-browser.test.ts +68 -0
- package/src/plugins/catalog-browser.ts +134 -0
- package/src/plugins/catalog-ui.ts +8 -0
- package/src/plugins/event-bus.ts +1 -0
- package/src/plugins/ibkr/flex/index.test.ts +19 -0
- package/src/plugins/ibkr/flex/index.ts +1 -1
- package/src/plugins/ibkr/trade/tab/footer.ts +9 -23
- package/src/plugins/ibkr/trade/tab/index.tsx +1 -5
- package/src/plugins/ibkr/trading/pane-view.tsx +149 -87
- package/src/plugins/ibkr/trading/pane.tsx +2 -2
- package/src/plugins/ownership.ts +3 -0
- package/src/plugins/pane-manager/floating.ts +8 -2
- package/src/plugins/pane-manager.test.ts +13 -0
- package/src/plugins/prediction-markets/backend-plugin.ts +2 -0
- package/src/plugins/prediction-markets/capability.test.ts +281 -0
- package/src/plugins/prediction-markets/capability.ts +171 -0
- package/src/plugins/prediction-markets/chart.tsx +18 -26
- package/src/plugins/prediction-markets/columns.ts +3 -2
- package/src/plugins/prediction-markets/controller/catalog.ts +92 -14
- package/src/plugins/prediction-markets/controller/data.ts +7 -1
- package/src/plugins/prediction-markets/controller/detail.ts +4 -0
- package/src/plugins/prediction-markets/controller/index.ts +4 -16
- package/src/plugins/prediction-markets/detail/book.tsx +3 -23
- package/src/plugins/prediction-markets/detail/overview.tsx +0 -18
- package/src/plugins/prediction-markets/detail/pane.tsx +36 -12
- package/src/plugins/prediction-markets/detail.test.tsx +1 -1
- package/src/plugins/prediction-markets/index.tsx +2 -0
- package/src/plugins/prediction-markets/metrics.ts +28 -18
- package/src/plugins/prediction-markets/navigation.ts +1 -0
- package/src/plugins/prediction-markets/pane.test.tsx +1 -1
- package/src/plugins/prediction-markets/pane.tsx +8 -1
- package/src/plugins/prediction-markets/services/fetch.ts +3 -2
- package/src/plugins/prediction-markets/services/kalshi/adapter.ts +128 -29
- package/src/plugins/prediction-markets/services/kalshi/normalize.ts +3 -1
- package/src/plugins/prediction-markets/services/kalshi/types.ts +14 -0
- package/src/plugins/prediction-markets/services/polymarket/adapter.ts +57 -14
- package/src/plugins/prediction-markets/services/polymarket/detail.ts +67 -18
- package/src/plugins/prediction-markets/test-helpers.tsx +0 -1
- package/src/plugins/prediction-markets/types.ts +3 -9
- package/src/plugins/registry/context.ts +6 -1
- package/src/plugins/registry/index.test.ts +2 -0
- package/src/plugins/registry/index.ts +53 -3
- package/src/plugins/runtime/context.tsx +4 -2
- package/src/plugins/runtime/index.tsx +9 -0
- package/src/remote/controller.test.ts +17 -4
- package/src/renderers/browser/app-services.ts +61 -0
- package/src/renderers/browser/cloud-transport.test.ts +32 -0
- package/src/renderers/browser/cloud-transport.ts +29 -0
- package/src/renderers/browser/config-host.ts +62 -0
- package/src/renderers/browser/error-boundary.tsx +23 -0
- package/src/renderers/browser/main.tsx +61 -0
- package/src/renderers/browser/persistence.ts +74 -0
- package/src/renderers/browser/storage.test.ts +66 -0
- package/src/renderers/browser/storage.ts +50 -0
- package/src/renderers/browser/ticker-repository.ts +59 -0
- package/src/renderers/browser/ui-host.tsx +40 -0
- package/src/renderers/cloudflare/worker.test.ts +133 -0
- package/src/renderers/cloudflare/worker.ts +115 -0
- package/src/renderers/electrobun/bun/core-capabilities.ts +2 -2
- package/src/renderers/electrobun/bun/desktop/capability-bridge.test.ts +64 -0
- package/src/renderers/electrobun/bun/desktop/capability-bridge.ts +41 -7
- package/src/renderers/electrobun/bun/desktop/host-requests.ts +5 -2
- package/src/renderers/electrobun/bun/desktop/http-fetch.test.ts +33 -0
- package/src/renderers/electrobun/bun/desktop/http-fetch.ts +53 -6
- package/src/renderers/electrobun/bun/desktop/initialization.test.ts +27 -0
- package/src/renderers/electrobun/bun/desktop/initialization.ts +6 -1
- package/src/renderers/electrobun/bun/index.ts +1 -0
- package/src/renderers/electrobun/shared/protocol.ts +2 -0
- package/src/renderers/electrobun/view/app-services.ts +39 -5
- package/src/renderers/electrobun/view/build-assets.ts +17 -10
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +186 -65
- package/src/renderers/electrobun/view/cli-pane-shot-health.test.ts +25 -0
- package/src/renderers/electrobun/view/cli-pane-shot-health.ts +31 -0
- package/src/renderers/electrobun/view/data-table/index.tsx +19 -11
- package/src/renderers/electrobun/view/data-table/row.tsx +2 -0
- package/src/renderers/electrobun/view/desktop/controls.test.tsx +68 -0
- package/src/renderers/electrobun/view/desktop/controls.tsx +27 -1
- package/src/renderers/electrobun/view/dom-ui-host.tsx +143 -0
- package/src/renderers/electrobun/view/host/box.test.tsx +113 -0
- package/src/renderers/electrobun/view/host/box.tsx +11 -6
- package/src/renderers/electrobun/view/host/chart-surface.tsx +7 -1
- package/src/renderers/electrobun/view/host/input.tsx +11 -7
- package/src/renderers/electrobun/view/host/media-surface.tsx +70 -3
- package/src/renderers/electrobun/view/host/tabs.tsx +97 -5
- package/src/renderers/electrobun/view/host/text.tsx +5 -2
- package/src/renderers/electrobun/view/input-host.test.tsx +140 -0
- package/src/renderers/electrobun/view/input-host.tsx +4 -2
- package/src/renderers/electrobun/view/main.tsx +2 -0
- package/src/renderers/electrobun/view/native-stubs/backend-rpc.ts +19 -1
- package/src/renderers/electrobun/view/native-stubs/broker-sync-native-loader.ts +7 -0
- package/src/renderers/electrobun/view/native-stubs/chart/kitty-support.ts +10 -0
- package/src/renderers/electrobun/view/remote/capability-invoker.test.ts +46 -0
- package/src/renderers/electrobun/view/remote/capability-invoker.ts +34 -13
- package/src/renderers/electrobun/view/remote/connection-health-backend.ts +19 -0
- package/src/renderers/electrobun/view/remote/connection-health.test.ts +44 -0
- package/src/renderers/electrobun/view/remote/connection-health.ts +49 -0
- package/src/renderers/electrobun/view/styles.css +5 -0
- package/src/renderers/electrobun/view/ui-host.tsx +3 -137
- package/src/renderers/opentui/host.tsx +15 -1
- package/src/renderers/opentui/start.tsx +2 -0
- package/src/renderers/opentui/terminal-media.test.ts +102 -0
- package/src/renderers/opentui/terminal-media.ts +142 -0
- package/src/renderers/share/main.tsx +54 -0
- package/src/renderers/share/styles.css +19 -0
- package/src/renderers/share/view.test.tsx +22 -0
- package/src/renderers/share/view.tsx +79 -0
- package/src/shares/api.test.ts +56 -0
- package/src/shares/api.ts +103 -0
- package/src/shares/chart-snapshot.test.ts +34 -0
- package/src/shares/chart-snapshot.ts +28 -0
- package/src/shares/payload.ts +104 -0
- package/src/sources/gloomberb-cloud/index.test.ts +61 -1
- package/src/sources/gloomberb-cloud/index.ts +86 -14
- package/src/sources/gloomberb-cloud/normalizers.test.ts +34 -0
- package/src/sources/gloomberb-cloud/normalizers.ts +5 -5
- package/src/sources/provider-router/connection-health.test.ts +28 -0
- package/src/sources/provider-router/connection-health.ts +47 -0
- package/src/sources/provider-router/history.test.ts +55 -6
- package/src/sources/provider-router/history.ts +119 -14
- package/src/sources/provider-router/index.ts +12 -1
- package/src/sources/provider-router/news.test.ts +34 -0
- package/src/sources/provider-router/news.ts +15 -1
- package/src/sources/sec-edgar.test.ts +59 -0
- package/src/sources/sec-edgar.ts +63 -23
- package/src/sources/yahoo-finance/history.ts +2 -9
- package/src/sources/yahoo-finance/http.ts +1 -1
- package/src/sources/yahoo-finance/mappers.ts +3 -0
- package/src/sources/yahoo-finance/snapshots.ts +10 -2
- package/src/sources/yahoo-finance/symbols.test.ts +10 -0
- package/src/sources/yahoo-finance/symbols.ts +14 -9
- package/src/sources/yahoo-finance/types.ts +19 -0
- package/src/sources/yahoo-finance.test.ts +1 -1
- package/src/sources/yahoo-finance.ts +6 -2
- package/src/state/app/context/index.test.tsx +101 -0
- package/src/state/app/context/index.tsx +10 -0
- package/src/state/config-save-scheduler.ts +1 -6
- package/src/state/persist-scheduler.test.ts +31 -0
- package/src/state/persist-scheduler.ts +21 -8
- package/src/sync/auth-transition.test.ts +36 -0
- package/src/sync/auth-transition.ts +22 -0
- package/src/sync/baseline.ts +32 -0
- package/src/sync/controller.test.ts +67 -0
- package/src/sync/controller.ts +32 -1
- package/src/sync/core-contributors.test.ts +102 -1
- package/src/sync/core-contributors.ts +98 -12
- package/src/sync/react.ts +18 -2
- package/src/sync/types.ts +12 -0
- package/src/test-support/plugin-runtime.ts +3 -0
- package/src/theme/font-scale.test.ts +14 -0
- package/src/theme/font-scale.ts +69 -0
- package/src/tickers/search/index.test.ts +27 -0
- package/src/tickers/search/upsert.ts +10 -0
- package/src/time-series/alignment.ts +15 -11
- package/src/time-series/field-catalog.ts +10 -0
- package/src/time-series/fundamentals.ts +19 -11
- package/src/time-series/hooks.ts +8 -2
- package/src/time-series/parsed-history-cache.ts +35 -0
- package/src/time-series/resolution.ts +10 -0
- package/src/time-series/resolve.test.ts +332 -3
- package/src/time-series/resolve.ts +225 -25
- package/src/time-series/spec-studies.test.ts +23 -0
- package/src/time-series/spec.ts +21 -2
- package/src/time-series/transforms.test.ts +76 -1
- package/src/time-series/transforms.ts +39 -8
- package/src/time-series/types.ts +9 -2
- package/src/time-series/use-chart-resolution.test.tsx +105 -1
- package/src/time-series/use-chart-resolution.ts +67 -13
- package/src/types/capability-route-source.ts +2 -1
- package/src/types/config.ts +30 -27
- package/src/types/media.ts +2 -0
- package/src/types/plugin.ts +8 -1
- package/src/ui/host.tsx +8 -0
- package/src/ui/pointer-drag.ts +12 -0
- package/src/ui/qr.test.ts +79 -0
- package/src/ui/qr.ts +82 -0
- package/src/updater.test.ts +117 -16
- package/src/updater.ts +32 -5
- package/src/utils/exchanges.ts +1 -0
- package/src/utils/external-url.test.ts +32 -0
- package/src/utils/external-url.ts +23 -0
- package/src/utils/price-history.ts +11 -10
- package/src/utils/sec.test.ts +6 -0
- package/src/utils/sec.ts +1 -1
- package/src/utils/sort-values.ts +31 -0
- package/src/utils/zoned-date-time.ts +67 -0
- package/src/components/onboarding/wizard-keyboard.ts +0 -306
- package/src/plugins/builtin/chart-composer/date-window-dialog.tsx +0 -120
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
<img src="https://
|
|
3
|
+
<img src="https://gloom.sh/gloomberb-logo-grayscale.svg" alt="Gloomberb logo" width="76" />
|
|
4
4
|
|
|
5
5
|
# Gloomberb
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
Desktop app for macOS and Windows. Terminal UI for macOS, Linux, and Windows.
|
|
10
10
|
|
|
11
|
-
<a href="https://
|
|
11
|
+
<a href="https://gloom.sh/download/desktop"><strong>Download desktop</strong></a>
|
|
12
12
|
·
|
|
13
13
|
<a href="#install"><strong>Install the TUI</strong></a>
|
|
14
14
|
·
|
|
@@ -17,7 +17,7 @@ Desktop app for macOS and Windows. Terminal UI for macOS, Linux, and Windows.
|
|
|
17
17
|
<br />
|
|
18
18
|
<br />
|
|
19
19
|
|
|
20
|
-
<img src="https://
|
|
20
|
+
<img src="https://gloom.sh/landing-terminal.png" alt="Gloomberb terminal showing portfolio, watchlists, market data, and chart panels." width="720" />
|
|
21
21
|
|
|
22
22
|
</div>
|
|
23
23
|
|
|
@@ -29,8 +29,24 @@ Gloomberb has two ways in:
|
|
|
29
29
|
|---------|----------|-------------|
|
|
30
30
|
| Desktop app | A polished app window, pop-out panes, OS shortcuts, and built-in updates | Published for macOS and Windows. It also installs a `gloomberb` terminal command for the TUI. |
|
|
31
31
|
| Terminal UI | Fast keyboard workflows inside your terminal, SSH/dev boxes, Linux machines, and script-friendly setups | Runs with `gloomberb` on macOS, Linux, and Windows. |
|
|
32
|
+
| Browser app | The shared DOM interface without an install | Open [term.gloom.sh](https://term.gloom.sh). |
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
The desktop app and TUI share the full command language and plugin system. The browser app uses the same official DOM renderer and layout with a reviewed browser plugin catalog.
|
|
35
|
+
|
|
36
|
+
## Browser App
|
|
37
|
+
|
|
38
|
+
[term.gloom.sh](https://term.gloom.sh) works anonymously with configuration, tickers, layouts, session state, and plugin state stored in the browser. Anonymous sessions receive rate-limited, 15-minute-delayed Gloom Cloud market data and read-only chat. Login remains optional and enables sync and chat posting; Pro accounts receive realtime market data. Cloud REST and WebSocket traffic uses the same-origin `/api` path, which the Worker forwards only to `https://api.gloom.sh`; it is not an arbitrary network proxy.
|
|
39
|
+
|
|
40
|
+
The browser build intentionally omits brokers and native integrations, filesystem notes, local AI, external plugins, updater/debug tools, application menus, native window controls, pop-out native windows, and native context menus. Modules that still depend on desktop-only or CORS-blocked feeds are also absent for now: RSS/Substack, prediction markets and polls, market halts/heatmap/movers, dividend/ownership/SEC panes, earnings/IPO, and TV. Public shares open under `/s/:id` in a separate slim bundle. Share creation and owner deletion use the signed-in Gloom Cloud session through the same fixed API path; public reads require no account.
|
|
41
|
+
|
|
42
|
+
Local browser development:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
bun run web:build
|
|
46
|
+
bunx wrangler dev
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Validate the public artifacts with `bun run web:audit` and `bun run cloudflare:dry-run`. `wrangler.jsonc` is intentionally generic and contains no account, route, domain, namespace, or secret. Production routing and the private Gloom Cloud API deployment are configured separately.
|
|
34
50
|
|
|
35
51
|
## Install
|
|
36
52
|
|
|
@@ -41,21 +57,21 @@ Install the desktop app and the `gloomberb` terminal command:
|
|
|
41
57
|
```bash
|
|
42
58
|
brew install --cask vincelwt/tap/gloomberb
|
|
43
59
|
# or
|
|
44
|
-
curl -fsSL
|
|
60
|
+
curl -fsSL gloom.sh/install | bash
|
|
45
61
|
```
|
|
46
62
|
|
|
47
63
|
Both install `Gloomberb.app` and a `gloomberb` command that runs the TUI through the app bundle, so the bundled runtime is stored once.
|
|
48
64
|
|
|
49
65
|
Prefer a direct download?
|
|
50
66
|
|
|
51
|
-
- [Download Gloomberb for Mac](https://
|
|
67
|
+
- [Download Gloomberb for Mac](https://gloom.sh/download/desktop)
|
|
52
68
|
|
|
53
69
|
### Linux
|
|
54
70
|
|
|
55
71
|
Install the standalone TUI binary:
|
|
56
72
|
|
|
57
73
|
```bash
|
|
58
|
-
curl -fsSL
|
|
74
|
+
curl -fsSL gloom.sh/install | bash
|
|
59
75
|
```
|
|
60
76
|
|
|
61
77
|
This installs `gloomberb` to `~/.local/bin` by default. A Linux desktop package is not published yet.
|
|
@@ -106,6 +122,7 @@ Open command mode with `Ctrl+P`, then type a command. Press `` ` `` to open tick
|
|
|
106
122
|
| `TOP` | Ranked market stories |
|
|
107
123
|
| `HM` | Market heatmap |
|
|
108
124
|
| `MOST` | Market movers |
|
|
125
|
+
| `HILO` | New highs and new lows |
|
|
109
126
|
| `PF` | Portfolios and watchlists |
|
|
110
127
|
| `KELLY AAPL` | Position sizing |
|
|
111
128
|
| `HELP` | Full in-app shortcut list |
|
|
@@ -113,9 +130,19 @@ Open command mode with `Ctrl+P`, then type a command. Press `` ` `` to open tick
|
|
|
113
130
|
## What It Does
|
|
114
131
|
|
|
115
132
|
- Research companies with quotes, charts, financials, filings, holders, insiders, options, analyst ratings, events, and relative valuation.
|
|
116
|
-
- Follow markets with top stories, breaking news, sector feeds, Substack subscriptions, global indices, FX, macro events, yield curves, market movers, and fear/greed.
|
|
133
|
+
- Follow markets with top stories, breaking news, sector feeds, Substack subscriptions, global indices, futures, FX, macro events, yield curves, Treasury auctions, market movers, new-high/new-low and options-flow scanners, and fear/greed.
|
|
117
134
|
- Track portfolios and watchlists, connect brokers, set alerts, keep notes, run AI screens, browse prediction markets, and use Gloom Cloud chat.
|
|
118
135
|
|
|
136
|
+
### Broker position sync
|
|
137
|
+
|
|
138
|
+
Use **New Portfolio** or **Add Broker Account** to connect a broker. Gloomberb can import positions from Interactive Brokers, Public, Robinhood, and SimpleFIN.
|
|
139
|
+
|
|
140
|
+
- Robinhood opens a browser sign-in page. Gloomberb uses only the read-only account and equity-position tools from the Robinhood Trading MCP server.
|
|
141
|
+
- Public needs an API secret from Public API settings. Gloomberb creates a short-lived access token and uses only the account and portfolio endpoints.
|
|
142
|
+
- SimpleFIN needs a one-time setup token from SimpleFIN Bridge. Gloomberb exchanges the token and imports only accounts that contain holdings.
|
|
143
|
+
|
|
144
|
+
Gloomberb saves the connection data on the local device. It does not include this data in Gloom Cloud synchronization. A later position sync updates the managed portfolios and removes positions that the broker no longer reports.
|
|
145
|
+
|
|
119
146
|
## CLI
|
|
120
147
|
|
|
121
148
|
Running `gloomberb` with no arguments launches the terminal UI. Normal commands run through a headless CLI path; use `gloomberb launch-ui` when a script should explicitly open the UI.
|
|
@@ -199,6 +226,7 @@ Use `HELP` inside Gloomberb for the live shortcut list. The common command-bar p
|
|
|
199
226
|
| `DES <ticker>` / `T <ticker>` | Security details for a ticker |
|
|
200
227
|
| `FA <ticker>` | Financial statement view |
|
|
201
228
|
| `G <series>` | Custom chart composer |
|
|
229
|
+
| `CAT [query]` | Browse and search chartable series |
|
|
202
230
|
| `GP <ticker>` | Price chart |
|
|
203
231
|
| `GIP <ticker>` | Intraday price chart |
|
|
204
232
|
| `HP <ticker>` | Historical OHLCV prices |
|
|
@@ -212,9 +240,13 @@ Use `HELP` inside Gloomberb for the live shortcut list. The common command-bar p
|
|
|
212
240
|
| `CMP <tickers>` | Normalized price comparison |
|
|
213
241
|
| `CORR <tickers>` | Ticker return correlations |
|
|
214
242
|
| `ANR <ticker>` | Analyst targets and ratings |
|
|
243
|
+
| `DIAG <ticker>` | Equity Diagnostic with cited flags and anomalies |
|
|
215
244
|
| `SEC <ticker>` | SEC filings and company disclosures |
|
|
216
245
|
| `OMON <ticker>` | Options monitor |
|
|
246
|
+
| `OVME` | Black-Scholes option calculator with Greeks and implied volatility |
|
|
217
247
|
| `HDS <ticker>` | Institutional holders |
|
|
248
|
+
| `DVD <ticker>` | Dividend yield and history |
|
|
249
|
+
| `SI <ticker>` | Short interest |
|
|
218
250
|
| `13F [fund/ticker/CIK]` | 13F fund filings and holdings |
|
|
219
251
|
| `INS <ticker>` | Insider activity |
|
|
220
252
|
| `EVT <ticker>` | Corporate actions, earnings, and estimates |
|
|
@@ -222,7 +254,7 @@ Use `HELP` inside Gloomberb for the live shortcut list. The common command-bar p
|
|
|
222
254
|
|
|
223
255
|
### Chart Composer
|
|
224
256
|
|
|
225
|
-
`G`, `GP`, `GIP`, `CMP`, `GF`, and `GE` all open the same chart composer with different starting presets. A custom expression can mix unrelated data sources on one synchronized timeline:
|
|
257
|
+
`G`, `GP`, `GIP`, `CMP`, `GF`, and `GE` all open the same chart composer with different starting presets. `CAT` opens a searchable catalog of those chartable series so you can graph one without typing the expression. A custom expression can mix unrelated data sources on one synchronized timeline:
|
|
226
258
|
|
|
227
259
|
```text
|
|
228
260
|
G AAPL:price, MSFT:revenue, FRED:CPIAUCSL
|
|
@@ -239,6 +271,8 @@ The toolbar controls preset or exact date ranges, intervals from one minute thro
|
|
|
239
271
|
| `TOP` | Ranked market stories |
|
|
240
272
|
| `HM` | Market heatmap for large US stocks and ETFs |
|
|
241
273
|
| `MOST` | Top gainers, losers, most active, and trending tickers |
|
|
274
|
+
| `HILO` | Session new highs and new lows with 30s/1m/5m momentum |
|
|
275
|
+
| `FLOW` | Unusual options activity: sweeps, blocks, and large premium |
|
|
242
276
|
| `PM <query>` | Polymarket and Kalshi prediction data |
|
|
243
277
|
| `N` | News feed |
|
|
244
278
|
| `CN <ticker>` | Ticker news |
|
|
@@ -249,9 +283,15 @@ The toolbar controls preset or exact date ranges, intervals from one minute thro
|
|
|
249
283
|
| `TBO` | TheBuildout infrastructure intelligence |
|
|
250
284
|
| `CG` | Congress trading disclosures |
|
|
251
285
|
| `WEI` | Global equity indices |
|
|
286
|
+
| `FUT` | Front-month futures across index, rates, energy, metals, grains, and FX |
|
|
252
287
|
| `ECON` | Economic events and releases |
|
|
253
288
|
| `GC` | Yield curve |
|
|
289
|
+
| `AUCT` | Treasury auction results: high rate, bid-to-cover, indirect share, and size |
|
|
290
|
+
| `VIX` | VIX 30-day/3-month implied-volatility curve |
|
|
291
|
+
| `CRD` | Credit spreads |
|
|
254
292
|
| `ERN` | Earnings calendar |
|
|
293
|
+
| `IPO` | Upcoming and recent IPOs |
|
|
294
|
+
| `HALT` | US trading halts with reason and resumption times |
|
|
255
295
|
| `TV` | Live Bloomberg, CNBC, and Yahoo Finance television |
|
|
256
296
|
| `BI` / `SP` | S&P 500 sector performance |
|
|
257
297
|
| `FXC` | Major FX cross rates |
|
|
@@ -284,10 +324,19 @@ The toolbar controls preset or exact date ranges, intervals from one minute thro
|
|
|
284
324
|
| `SB` | Toggle the status bar |
|
|
285
325
|
| `VF` | Toggle quote value flashing |
|
|
286
326
|
| `TH <theme>` | Change color theme |
|
|
327
|
+
| `FONT+` / `FONT-` | Increase or decrease desktop font size |
|
|
328
|
+
| `CONN` | Connection health |
|
|
329
|
+
| `POLL` | Prediction-market polls |
|
|
330
|
+
| `ART` | Loaded article lookup |
|
|
331
|
+
| `UPGRADE` | Account upgrade |
|
|
287
332
|
| `CR` | Cycle chart renderer |
|
|
288
333
|
| `LANG <locale>` | Change interface language (`auto`, `en`, `es`, `zh-CN`, `zh-TW`, `ja`, or `ko`) |
|
|
289
334
|
| `PL <plugin>` | Manage plugins |
|
|
290
335
|
|
|
336
|
+
## Gloom Cloud sign-in
|
|
337
|
+
|
|
338
|
+
Sign in with email and password, or pick `Log In with QR Code` from the command bar and scan the code with the Gloomberb mobile companion app to sign the terminal in without typing. The onboarding wizard offers the same QR option as the recommended path, with email and password as the alternative.
|
|
339
|
+
|
|
291
340
|
## Localized interface
|
|
292
341
|
|
|
293
342
|
Gloomberb includes English, Spanish, Simplified Chinese, Traditional Chinese, Japanese, and Korean UI support. English remains the default fallback language.
|
package/README.zh-CN.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
<img src="https://
|
|
3
|
+
<img src="https://gloom.sh/gloomberb-logo-grayscale.svg" alt="Gloomberb logo" width="76" />
|
|
4
4
|
|
|
5
5
|
# Gloomberb
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
桌面应用支持 macOS 和 Windows。终端界面(TUI)支持 macOS、Linux 和 Windows。
|
|
10
10
|
|
|
11
|
-
<a href="https://
|
|
11
|
+
<a href="https://gloom.sh/download/desktop"><strong>下载桌面版</strong></a>
|
|
12
12
|
·
|
|
13
13
|
<a href="#安装">安装 TUI</a>
|
|
14
14
|
·
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<br />
|
|
18
18
|
<br />
|
|
19
19
|
|
|
20
|
-
<img src="https://
|
|
20
|
+
<img src="https://gloom.sh/landing-terminal.png" alt="Gloomberb 终端界面,显示投资组合、自选列表、市场数据和图表面板。" width="720" />
|
|
21
21
|
|
|
22
22
|
</div>
|
|
23
23
|
|
|
@@ -43,21 +43,21 @@ Gloomberb 有两种使用方式:
|
|
|
43
43
|
```bash
|
|
44
44
|
brew install --cask vincelwt/tap/gloomberb
|
|
45
45
|
# 或
|
|
46
|
-
curl -fsSL
|
|
46
|
+
curl -fsSL gloom.sh/install | bash
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
两种方式都会安装 `Gloomberb.app`,以及一个通过应用内置运行时执行 TUI 的 `gloomberb` 命令,运行时只会存储一份。
|
|
50
50
|
|
|
51
51
|
想直接下载?
|
|
52
52
|
|
|
53
|
-
- [下载 Gloomberb(Mac 版)](https://
|
|
53
|
+
- [下载 Gloomberb(Mac 版)](https://gloom.sh/download/desktop)
|
|
54
54
|
|
|
55
55
|
### Linux
|
|
56
56
|
|
|
57
57
|
安装独立的 TUI 可执行文件:
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
|
-
curl -fsSL
|
|
60
|
+
curl -fsSL gloom.sh/install | bash
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
默认会将 `gloomberb` 安装到 `~/.local/bin`。Linux 桌面安装包暂未发布。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gloomberb",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"packageManager": "bun@1.3.11",
|
|
5
5
|
"description": "Market research and portfolio tracker for the terminal",
|
|
6
6
|
"module": "src/index.tsx",
|
|
@@ -19,15 +19,21 @@
|
|
|
19
19
|
"build": "bun run scripts/build.ts",
|
|
20
20
|
"build:all": "bun run scripts/build.ts --all",
|
|
21
21
|
"desktop:view:build": "bun run scripts/build-electrobun-view.ts",
|
|
22
|
+
"web:build": "bun run scripts/build-web.ts",
|
|
23
|
+
"web:audit": "bun run web:build && bun run scripts/audit-web-bundle.ts",
|
|
24
|
+
"cloudflare:typecheck": "tsc --project tsconfig.cloudflare.json",
|
|
25
|
+
"cloudflare:dry-run": "bun run web:build && wrangler deploy --dry-run",
|
|
22
26
|
"desktop:dev": "bun run scripts/electrobun-dev.ts",
|
|
23
27
|
"desktop:build": "electrobun build",
|
|
24
28
|
"desktop:release": "electrobun build --env=stable",
|
|
25
29
|
"desktop:release:windows": "electrobun build --env=stable --targets=win-x64",
|
|
26
30
|
"i18n:audit": "bun run scripts/i18n-audit.ts",
|
|
27
|
-
"typecheck": "bun run typecheck:opentui && bun run typecheck:electrobun-bun && bun run typecheck:electrobun-view && bun run typecheck:scripts",
|
|
31
|
+
"typecheck": "bun run typecheck:opentui && bun run typecheck:electrobun-bun && bun run typecheck:electrobun-view && bun run typecheck:browser && bun run typecheck:cloudflare && bun run typecheck:scripts",
|
|
28
32
|
"typecheck:opentui": "tsc --project tsconfig.opentui.json",
|
|
29
33
|
"typecheck:electrobun-bun": "tsc --project tsconfig.electrobun-bun.json",
|
|
30
34
|
"typecheck:electrobun-view": "tsc --project tsconfig.electrobun-view.json",
|
|
35
|
+
"typecheck:browser": "tsc --project tsconfig.browser.json",
|
|
36
|
+
"typecheck:cloudflare": "tsc --project tsconfig.cloudflare.json",
|
|
31
37
|
"typecheck:scripts": "tsc --project tsconfig.scripts.json",
|
|
32
38
|
"test": "bun test",
|
|
33
39
|
"test:global-upgrade": "bun run scripts/smoke-global-upgrade.ts",
|
|
@@ -52,7 +58,8 @@
|
|
|
52
58
|
"electrobun": "^1.18.1",
|
|
53
59
|
"happy-dom": "^20.11.1",
|
|
54
60
|
"png-to-ico": "^2.1.8",
|
|
55
|
-
"rcedit": "^4.0.1"
|
|
61
|
+
"rcedit": "^4.0.1",
|
|
62
|
+
"wrangler": "^4.0.0"
|
|
56
63
|
},
|
|
57
64
|
"peerDependencies": {
|
|
58
65
|
"typescript": "^5.9.2"
|
|
@@ -60,12 +67,14 @@
|
|
|
60
67
|
"dependencies": {
|
|
61
68
|
"@earendil-works/pi-agent-core": "0.81.1",
|
|
62
69
|
"@earendil-works/pi-ai": "0.81.1",
|
|
70
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
63
71
|
"@opentui/core": "^0.3.2",
|
|
64
72
|
"@opentui/react": "^0.3.2",
|
|
65
73
|
"@stoqey/ib": "^1.5.6",
|
|
66
74
|
"@tanstack/react-virtual": "^3.14.2",
|
|
67
75
|
"hls.js": "1.6.13",
|
|
68
76
|
"jimp": "1.6.1",
|
|
77
|
+
"qrcode-generator": "^2.0.4",
|
|
69
78
|
"react": "19.2.7",
|
|
70
79
|
"react-dom": "19.2.7",
|
|
71
80
|
"rxjs": "^7.8.2",
|
package/src/api-client/auth.ts
CHANGED
|
@@ -5,8 +5,11 @@ import type {
|
|
|
5
5
|
AuthUser,
|
|
6
6
|
BuildoutAccountResponse,
|
|
7
7
|
BuildoutTokenResponse,
|
|
8
|
+
CloudBrowserHandoffResponse,
|
|
8
9
|
CloudPricing,
|
|
9
10
|
CloudVerificationResponse,
|
|
11
|
+
DeviceAuthStartResponse,
|
|
12
|
+
DeviceAuthTokenResponse,
|
|
10
13
|
PersistedAuthUser,
|
|
11
14
|
} from "./types";
|
|
12
15
|
|
|
@@ -15,6 +18,7 @@ type CloudApiRequest = <T>(path: string, options?: RequestInit) => Promise<T>;
|
|
|
15
18
|
interface CloudAuthApiOptions {
|
|
16
19
|
getCurrentUser(): AuthUser | null;
|
|
17
20
|
getSessionToken(): string | null;
|
|
21
|
+
hasSessionCredential(): boolean;
|
|
18
22
|
request: CloudApiRequest;
|
|
19
23
|
requireCapturedSession(message: string): void;
|
|
20
24
|
setCurrentUser(user: AuthUser | null): void;
|
|
@@ -26,7 +30,7 @@ export class CloudAuthApi {
|
|
|
26
30
|
constructor(private readonly options: CloudAuthApiOptions) {}
|
|
27
31
|
|
|
28
32
|
restoreCachedUser(user: PersistedAuthUser | null): void {
|
|
29
|
-
if (!this.options.
|
|
33
|
+
if (!this.options.hasSessionCredential() || !user?.id) {
|
|
30
34
|
this.options.setCurrentUser(null);
|
|
31
35
|
return;
|
|
32
36
|
}
|
|
@@ -53,15 +57,6 @@ export class CloudAuthApi {
|
|
|
53
57
|
});
|
|
54
58
|
}
|
|
55
59
|
|
|
56
|
-
async ensureVerifiedSession(): Promise<AuthUser | null> {
|
|
57
|
-
if (!this.options.getSessionToken()) return null;
|
|
58
|
-
if (!this.options.getCurrentUser()) {
|
|
59
|
-
await this.getSession();
|
|
60
|
-
}
|
|
61
|
-
const user = this.options.getCurrentUser();
|
|
62
|
-
return user?.emailVerified ? user : null;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
60
|
async signUp(email: string, username: string, name: string, password: string): Promise<AuthUser> {
|
|
66
61
|
const result = await this.options.request<{ user: AuthUser }>("/auth/sign-up/email", {
|
|
67
62
|
method: "POST",
|
|
@@ -86,6 +81,26 @@ export class CloudAuthApi {
|
|
|
86
81
|
return result.user;
|
|
87
82
|
}
|
|
88
83
|
|
|
84
|
+
/** Starts a QR / device sign-in; the mobile app approves the returned user code. */
|
|
85
|
+
async startDeviceSignIn(body: { clientName?: string; clientPlatform?: string }): Promise<DeviceAuthStartResponse> {
|
|
86
|
+
return this.options.request<DeviceAuthStartResponse>("/auth/device/start", {
|
|
87
|
+
method: "POST",
|
|
88
|
+
body: JSON.stringify(body),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Polls a pending device sign-in. Unlike the email flow, approval hands back
|
|
94
|
+
* a raw session token in the body instead of a Set-Cookie header; the caller
|
|
95
|
+
* installs it through the same path boot restoration uses.
|
|
96
|
+
*/
|
|
97
|
+
async pollDeviceSignIn(deviceCode: string): Promise<DeviceAuthTokenResponse> {
|
|
98
|
+
return this.options.request<DeviceAuthTokenResponse>("/auth/device/token", {
|
|
99
|
+
method: "POST",
|
|
100
|
+
body: JSON.stringify({ deviceCode }),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
89
104
|
async signOut(): Promise<void> {
|
|
90
105
|
try {
|
|
91
106
|
await this.options.request("/auth/sign-out", { method: "POST" });
|
|
@@ -111,6 +126,18 @@ export class CloudAuthApi {
|
|
|
111
126
|
}
|
|
112
127
|
}
|
|
113
128
|
|
|
129
|
+
/**
|
|
130
|
+
* Emails a password reset link. The reset itself completes on the gloom.sh
|
|
131
|
+
* site, so the app only ever sends the email. The server answers the same
|
|
132
|
+
* way whether or not the address exists.
|
|
133
|
+
*/
|
|
134
|
+
async requestPasswordReset(email: string): Promise<void> {
|
|
135
|
+
await this.options.request("/auth/request-password-reset", {
|
|
136
|
+
method: "POST",
|
|
137
|
+
body: JSON.stringify({ email }),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
114
141
|
async sendVerification(): Promise<CloudVerificationResponse> {
|
|
115
142
|
return this.options.request<CloudVerificationResponse>("/cloud/auth/send-verification", {
|
|
116
143
|
method: "POST",
|
|
@@ -118,6 +145,17 @@ export class CloudAuthApi {
|
|
|
118
145
|
});
|
|
119
146
|
}
|
|
120
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Creates a short-lived browser handoff for the captured native session.
|
|
150
|
+
* The server deliberately returns an opaque one-time URL, never the session cookie.
|
|
151
|
+
*/
|
|
152
|
+
async createBrowserHandoff(): Promise<CloudBrowserHandoffResponse> {
|
|
153
|
+
return this.options.request<CloudBrowserHandoffResponse>("/cloud/auth/browser-handoff", {
|
|
154
|
+
method: "POST",
|
|
155
|
+
body: JSON.stringify({}),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
121
159
|
async getAccountProfile(): Promise<AccountProfile> {
|
|
122
160
|
const result = await this.options.request<{ profile: AccountProfile }>("/account/profile", {
|
|
123
161
|
method: "GET",
|
package/src/api-client/data.ts
CHANGED
|
@@ -4,6 +4,10 @@ import { normalizeTweetSearchResponse } from "./normalizers";
|
|
|
4
4
|
import {
|
|
5
5
|
cloudCongressHousePath,
|
|
6
6
|
cloudExchangeRatePath,
|
|
7
|
+
cloudSec13FPath,
|
|
8
|
+
cloudSecFilingContentPath,
|
|
9
|
+
cloudSecFilingDocumentsPath,
|
|
10
|
+
cloudSecFilingsPath,
|
|
7
11
|
cloudFredSeriesPath,
|
|
8
12
|
cloudHistoryPath,
|
|
9
13
|
cloudMarketSearchPath,
|
|
@@ -17,23 +21,33 @@ import {
|
|
|
17
21
|
type CloudFredSeriesParams,
|
|
18
22
|
type CloudHistoryParams,
|
|
19
23
|
type CloudNewsParams,
|
|
24
|
+
type CloudSecFilingParams,
|
|
25
|
+
type CloudSecFilingsParams,
|
|
20
26
|
type CloudTickerTweetsParams,
|
|
21
27
|
type CloudTweetSearchParams,
|
|
22
28
|
} from "./paths";
|
|
23
29
|
import type {
|
|
24
30
|
CloudAnalystResearchPayload,
|
|
31
|
+
CloudShortInterestPayload,
|
|
25
32
|
CloudCompanyProfile,
|
|
26
33
|
CloudCongressHousePayload,
|
|
27
34
|
CloudCorporateActionsPayload,
|
|
28
35
|
CloudEconEventPayload,
|
|
36
|
+
CloudEquityDiagnosticMode,
|
|
37
|
+
CloudEquityDiagnosticResult,
|
|
29
38
|
CloudFredSeriesPayload,
|
|
30
39
|
CloudFundamentals,
|
|
31
40
|
CloudHoldersPayload,
|
|
32
41
|
CloudMarketBatchPayload,
|
|
33
42
|
CloudMarketBatchTarget,
|
|
34
43
|
CloudMarketResponse,
|
|
44
|
+
CloudMarketScreenerCategory,
|
|
45
|
+
CloudMarketScreenerPayload,
|
|
35
46
|
CloudNewsListResponse,
|
|
36
47
|
CloudNewsPayload,
|
|
48
|
+
CloudSecContentResponse,
|
|
49
|
+
CloudSecDocumentsResponse,
|
|
50
|
+
CloudSecFilingsResponse,
|
|
37
51
|
CloudOptionsChainPayload,
|
|
38
52
|
CloudPricePointPayload,
|
|
39
53
|
CloudQuotePayload,
|
|
@@ -77,6 +91,22 @@ export class CloudDataApi {
|
|
|
77
91
|
return this.postMarketBatch("/market/quotes/batch", targets, mode);
|
|
78
92
|
}
|
|
79
93
|
|
|
94
|
+
async getCloudMarketScreener(
|
|
95
|
+
category: CloudMarketScreenerCategory,
|
|
96
|
+
count = 25,
|
|
97
|
+
mode: "cache-first" | "refresh" = "cache-first",
|
|
98
|
+
): Promise<CloudMarketResponse<CloudMarketScreenerPayload>> {
|
|
99
|
+
const requestedCount = Number.isFinite(count) ? Math.round(count) : 25;
|
|
100
|
+
const params = new URLSearchParams({
|
|
101
|
+
category,
|
|
102
|
+
count: String(Math.max(1, Math.min(50, requestedCount))),
|
|
103
|
+
mode,
|
|
104
|
+
});
|
|
105
|
+
return this.request<CloudMarketResponse<CloudMarketScreenerPayload>>(
|
|
106
|
+
`/market/screener?${params.toString()}`,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
80
110
|
async getCloudOptionsChain(
|
|
81
111
|
symbol: string,
|
|
82
112
|
exchange?: string,
|
|
@@ -112,6 +142,12 @@ export class CloudDataApi {
|
|
|
112
142
|
return this.requestMarketSymbol("/market/analyst", symbol, exchange);
|
|
113
143
|
}
|
|
114
144
|
|
|
145
|
+
async getCloudShortInterest(symbol: string, years?: number): Promise<CloudMarketResponse<CloudShortInterestPayload>> {
|
|
146
|
+
const params = new URLSearchParams({ symbol: symbol.toUpperCase() });
|
|
147
|
+
if (years != null) params.set("years", String(years));
|
|
148
|
+
return this.request<CloudMarketResponse<CloudShortInterestPayload>>(`/market/short-interest?${params}`);
|
|
149
|
+
}
|
|
150
|
+
|
|
115
151
|
async getCloudCorporateActions(symbol: string, exchange?: string): Promise<CloudMarketResponse<CloudCorporateActionsPayload>> {
|
|
116
152
|
return this.requestMarketSymbol("/market/corporate-actions", symbol, exchange);
|
|
117
153
|
}
|
|
@@ -138,6 +174,26 @@ export class CloudDataApi {
|
|
|
138
174
|
return this.request<CloudMarketResponse<{ rate: number }>>(cloudExchangeRatePath(fromCurrency));
|
|
139
175
|
}
|
|
140
176
|
|
|
177
|
+
/**
|
|
178
|
+
* On-demand single-company evidence review. This is a cloud product endpoint,
|
|
179
|
+
* not a market-data capability, so it is called directly instead of routed
|
|
180
|
+
* through the asset-data provider.
|
|
181
|
+
*/
|
|
182
|
+
async getCloudEquityDiagnostic(
|
|
183
|
+
symbol: string,
|
|
184
|
+
exchange?: string,
|
|
185
|
+
mode: CloudEquityDiagnosticMode = "cache-first",
|
|
186
|
+
): Promise<CloudEquityDiagnosticResult> {
|
|
187
|
+
return this.request<CloudEquityDiagnosticResult>("/research/equity-diagnostic", {
|
|
188
|
+
method: "POST",
|
|
189
|
+
body: JSON.stringify({
|
|
190
|
+
symbol: symbol.trim().toUpperCase(),
|
|
191
|
+
...(exchange ? { exchange } : {}),
|
|
192
|
+
mode,
|
|
193
|
+
}),
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
141
197
|
async getCloudEconomicCalendar(): Promise<CloudEconEventPayload[]> {
|
|
142
198
|
return this.request<CloudEconEventPayload[]>("/cloud/econ/calendar");
|
|
143
199
|
}
|
|
@@ -157,6 +213,22 @@ export class CloudDataApi {
|
|
|
157
213
|
return this.request<CloudCongressHousePayload>(cloudCongressHousePath(params));
|
|
158
214
|
}
|
|
159
215
|
|
|
216
|
+
async getCloudSecFilings(params: CloudSecFilingsParams): Promise<CloudSecFilingsResponse> {
|
|
217
|
+
return this.request<CloudSecFilingsResponse>(cloudSecFilingsPath(params));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
async getCloudSecFilingDocuments(params: CloudSecFilingParams): Promise<CloudSecDocumentsResponse> {
|
|
221
|
+
return this.request<CloudSecDocumentsResponse>(cloudSecFilingDocumentsPath(params));
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
async getCloudSecFilingContent(params: CloudSecFilingParams): Promise<CloudSecContentResponse> {
|
|
225
|
+
return this.request<CloudSecContentResponse>(cloudSecFilingContentPath(params));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
async getCloudSec13F(path: string, params: Record<string, string | number | undefined> = {}): Promise<unknown> {
|
|
229
|
+
return this.request<unknown>(cloudSec13FPath(path, params));
|
|
230
|
+
}
|
|
231
|
+
|
|
160
232
|
async getCloudNews(params: CloudNewsParams = {}): Promise<CloudNewsListResponse> {
|
|
161
233
|
return this.request<CloudNewsListResponse>(cloudNewsPath(params));
|
|
162
234
|
}
|