gloomberb 0.18.3 → 0.18.5
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 +8 -8
- package/README.zh-CN.md +11 -11
- package/bin/{gloomberb → gloom} +3 -1
- package/package.json +6 -2
- package/patches/electrobun@1.18.1.patch +32 -1
- package/src/account/auth-model.ts +7 -3
- package/src/account/checkout-handoff.tsx +225 -0
- package/src/account/device-signin-dialog.tsx +2 -2
- package/src/account/device-signin.ts +2 -2
- package/src/account/upgrade-dialog.tsx +1 -1
- package/src/api-client/askg.ts +2 -2
- package/src/api-client/auth.ts +11 -6
- package/src/api-client/catalysts.ts +2 -1
- package/src/api-client/central-bank-rates.ts +6 -0
- package/src/api-client/collections.ts +5 -1
- package/src/api-client/cot.ts +2 -0
- package/src/api-client/crypto-etf-flows.ts +37 -0
- package/src/api-client/crypto-markets.ts +60 -0
- package/src/api-client/data.ts +98 -5
- package/src/api-client/doe.ts +15 -0
- package/src/api-client/equity-screener.ts +28 -0
- package/src/api-client/exchange-announcements.ts +38 -0
- package/src/api-client/fund-facts.ts +39 -0
- package/src/api-client/futures-curve.ts +9 -1
- package/src/api-client/hiring.ts +301 -0
- package/src/api-client/index.ts +182 -16
- package/src/api-client/live-scan.ts +91 -0
- package/src/api-client/market-discovery.ts +14 -0
- package/src/api-client/members.ts +18 -0
- package/src/api-client/mna.ts +6 -0
- package/src/api-client/paths.ts +18 -1
- package/src/api-client/request.ts +224 -26
- package/src/api-client/research-activity.ts +3 -10
- package/src/api-client/short-side-publications.ts +37 -0
- package/src/api-client/socket.ts +64 -4
- package/src/api-client/swap-curve.ts +35 -0
- package/src/api-client/themes.ts +7 -1
- package/src/api-client/types.ts +96 -2
- package/src/app/keybindings/index.ts +3 -0
- package/src/app/keybindings/labels.ts +18 -1
- package/src/app/keybindings/resolve.ts +14 -0
- package/src/app/pane-runtime/plugin-bindings.ts +9 -2
- package/src/app/runtime/broker-import.ts +43 -26
- package/src/app/runtime/desktop-deeplink.ts +5 -5
- package/src/app/runtime/plugin-bindings.ts +2 -2
- package/src/app/runtime/startup.ts +13 -0
- package/src/app/star-prompt/status-line.tsx +2 -2
- package/src/architecture/core-builtin-allowlist.json +5 -2
- package/src/architecture/ui-literals-allowlist.json +3 -3
- package/src/architecture/ui-tokens-allowlist.json +1 -1
- package/src/brokers/broker-portfolio-sync.ts +37 -0
- package/src/brokers/directory.ts +11 -0
- package/src/brokers/logos.ts +3 -1
- package/src/brokers/signed-in/adapter.ts +304 -26
- package/src/brokers/signed-in/client.ts +14 -2
- package/src/brokers/signed-in/connect.ts +10 -2
- package/src/brokers/sync-broker-instance.ts +9 -1
- package/src/capabilities/chart-series.ts +22 -6
- package/src/cli/bank-section.ts +1 -1
- package/src/cli/base-converter.ts +23 -14
- package/src/cli/central-bank-events.ts +1 -1
- package/src/cli/command-options.ts +59 -4
- package/src/cli/commands/api.ts +9 -6
- package/src/cli/commands/broker.ts +2 -2
- package/src/cli/commands/command-utils.ts +2 -2
- package/src/cli/commands/crypto-hints.ts +7 -20
- package/src/cli/commands/fred-series.ts +9 -2
- package/src/cli/commands/keybindings.ts +25 -2
- package/src/cli/commands/market.ts +1177 -278
- package/src/cli/commands/news-hints.ts +2 -2
- package/src/cli/commands/news-search.ts +59 -6
- package/src/cli/commands/options-chain.ts +59 -3
- package/src/cli/commands/options-leaps.ts +41 -26
- package/src/cli/commands/overview.ts +222 -61
- package/src/cli/commands/plugins.ts +9 -9
- package/src/cli/commands/remote.ts +13 -10
- package/src/cli/commands/search.ts +82 -46
- package/src/cli/commands/system.ts +27 -19
- package/src/cli/commands/themes.ts +1 -1
- package/src/cli/commands/ticker.ts +194 -48
- package/src/cli/context.ts +3 -2
- package/src/cli/desktop-pane-shot-view.ts +2 -2
- package/src/cli/desktop-pane-shot.ts +1 -1
- package/src/cli/earnings-calendar.ts +4 -4
- package/src/cli/entry.ts +18 -1
- package/src/cli/errors.ts +21 -3
- package/src/cli/exit-codes.ts +1 -1
- package/src/cli/export-source.ts +38 -4
- package/src/cli/freshness.ts +2 -8
- package/src/cli/fx-forward.ts +130 -0
- package/src/cli/fx-pair.ts +10 -9
- package/src/cli/glossary.ts +113 -20
- package/src/cli/help.ts +19 -13
- package/src/cli/history-export.ts +126 -0
- package/src/cli/history-rows.ts +226 -50
- package/src/cli/index-roots.ts +5 -45
- package/src/cli/index.ts +24 -18
- package/src/cli/known-gaps.ts +123 -27
- package/src/cli/listing-arg.ts +316 -46
- package/src/cli/name-entries.ts +30 -18
- package/src/cli/native-smoke.ts +2 -0
- package/src/cli/not-a-ticker.ts +19 -9
- package/src/cli/opentui-libc.ts +5 -0
- package/src/cli/options.ts +12 -0
- package/src/cli/pane-functions/capabilities.ts +75 -20
- package/src/cli/pane-functions/catalog.ts +24 -23
- package/src/cli/pane-functions/discovery.ts +1 -1
- package/src/cli/pane-functions/dom.ts +10 -7
- package/src/cli/pane-functions/financial-ratio-shot.ts +2 -2
- package/src/cli/pane-functions/freshness.ts +193 -30
- package/src/cli/pane-functions/function-help.ts +76 -30
- package/src/cli/pane-functions/headless.ts +59 -12
- package/src/cli/pane-functions/index.ts +28 -19
- package/src/cli/pane-functions/market-session.ts +15 -5
- package/src/cli/pane-functions/options.ts +22 -2
- package/src/cli/pane-functions/report-notices.ts +12 -4
- package/src/cli/pane-functions/report.ts +10 -6
- package/src/cli/pane-functions/resolver.ts +64 -11
- package/src/cli/pane-functions/screenshot-assessment.ts +322 -0
- package/src/cli/pane-functions/screenshot-bridge.ts +152 -0
- package/src/cli/pane-functions/screenshot-chart-evidence.ts +396 -0
- package/src/cli/pane-functions/screenshot-data-evidence.ts +383 -0
- package/src/cli/pane-functions/screenshot-evidence.ts +1 -1
- package/src/cli/pane-functions/screenshot-payload.ts +453 -0
- package/src/cli/pane-functions/screenshot-render.ts +316 -0
- package/src/cli/pane-functions/screenshot-types.ts +162 -0
- package/src/cli/pane-functions/shot-options.ts +8 -3
- package/src/cli/peso-dollar-rates.ts +79 -0
- package/src/cli/quote-answer.ts +45 -4
- package/src/cli/report-tables.ts +75 -19
- package/src/cli/restore-plugins.ts +42 -15
- package/src/cli/result.ts +164 -23
- package/src/cli/series-search.ts +5 -5
- package/src/cli/statement-filings.ts +19 -0
- package/src/cli/suffixed-listing-rows.ts +49 -0
- package/src/cli/symbol-args.ts +50 -15
- package/src/cli/symbol-cells.ts +120 -0
- package/src/cli/symbol-list.ts +198 -68
- package/src/cli/symbol-rows.ts +131 -25
- package/src/cli/ticker-resolution.ts +108 -11
- package/src/cli/treasury-yields.ts +5 -5
- package/src/cli/types.ts +2 -0
- package/src/cli/uncovered-instrument.ts +3 -3
- package/src/cli/unknown-command.ts +6 -6
- package/src/components/chart/composite/chart-layout.ts +131 -0
- package/src/components/chart/composite/composite-chart.tsx +395 -20
- package/src/components/chart/composite/format.ts +27 -0
- package/src/components/chart/composite/interactions.ts +7 -2
- package/src/components/chart/composite/legend.tsx +75 -3
- package/src/components/chart/composite/levels.ts +7 -0
- package/src/components/chart/composite/panel-gestures.ts +41 -0
- package/src/components/chart/composite/panel-labels.ts +2 -1
- package/src/components/chart/composite/panel-series.ts +1 -0
- package/src/components/chart/composite/panel-surface.tsx +314 -13
- package/src/components/chart/composite/price-axis-labels.tsx +27 -3
- package/src/components/chart/composite/range-statistics.ts +62 -0
- package/src/components/chart/composite/rasterizer.ts +44 -19
- package/src/components/chart/composite/scene.ts +20 -4
- package/src/components/chart/composite/series-axis-tags.tsx +16 -9
- package/src/components/chart/composite/text-renderer.ts +48 -21
- package/src/components/chart/composite/toolbar.tsx +52 -5
- package/src/components/chart/composite/types.ts +17 -0
- package/src/components/chart/composite/use-composite-chart-keyboard.ts +120 -13
- package/src/components/chart/composite/use-composite-value-scales.ts +44 -0
- package/src/components/chart/composite/use-composite-viewport.ts +12 -3
- package/src/components/chart/composite/value-scale.ts +149 -0
- package/src/components/chart/composite/volume-profile-paint.ts +6 -3
- package/src/components/chart/core/pointer.ts +2 -0
- package/src/components/chart-table/index.ts +2 -0
- package/src/components/chart-table/read.tsx +74 -0
- package/src/components/command-bar/commands/collection-list.ts +41 -19
- package/src/components/command-bar/commands/collection.ts +9 -3
- package/src/components/command-bar/commands/direct/index.ts +1 -1
- package/src/components/command-bar/commands/direct/runtime.ts +3 -2
- package/src/components/command-bar/pane-templates/items.ts +59 -6
- package/src/components/command-bar/pane-templates/workflow.ts +10 -1
- package/src/components/command-bar/panel/prompt-binding.ts +0 -8
- package/src/components/command-bar/routes/root/plugin-install.ts +1 -1
- package/src/components/command-bar/routes/root/provider-search.ts +42 -11
- package/src/components/command-bar/routes/root/results.ts +18 -4
- package/src/components/command-bar/routes/root/runtime.ts +15 -3
- package/src/components/command-bar/routes/root/search-providers.ts +25 -2
- package/src/components/command-bar/routes/root/selection.ts +6 -1
- package/src/components/command-bar/routes/root/shortcut-feedback.ts +4 -1
- package/src/components/command-bar/routes/root/shortcuts.ts +30 -3
- package/src/components/command-bar/routes/ticker-search/results.ts +73 -4
- package/src/components/command-bar/selection-runtime.ts +50 -10
- package/src/components/command-bar/surface/index.tsx +24 -2
- package/src/components/command-bar/view-model.ts +7 -0
- package/src/components/command-bar/workflow/alert.ts +1 -1
- package/src/components/command-bar/workflow/broker.ts +2 -2
- package/src/components/command-bar/workflow/collection-actions.ts +46 -7
- package/src/components/command-bar/workflow/collection-ticker.ts +32 -4
- package/src/components/command-bar/workflow/fields.ts +8 -2
- package/src/components/command-bar/workflow/ops.ts +18 -4
- package/src/components/command-bar/workflow/portfolio-position.ts +53 -4
- package/src/components/command-bar/workflow/submit.ts +3 -2
- package/src/components/command-bar/workflow/tickers.ts +5 -1
- package/src/components/company-logo.tsx +39 -0
- package/src/components/data-table/sections.ts +4 -2
- package/src/components/form-modal/confirm.tsx +2 -1
- package/src/components/form-modal/request.ts +5 -0
- package/src/components/form-modal/routes.ts +4 -1
- package/src/components/index.ts +12 -6
- package/src/components/layout/header.tsx +33 -46
- package/src/components/layout/market-summary.ts +9 -6
- package/src/components/layout/pane/capture-status.ts +1 -1
- package/src/components/layout/pane/footer/index.tsx +1 -0
- package/src/components/layout/pane/footer/model.ts +38 -5
- package/src/components/layout/shell/chrome.ts +19 -6
- package/src/components/layout/shell/index.tsx +2 -1
- package/src/components/layout/shell/pane/layers.tsx +19 -1
- package/src/components/layout/status-bar.tsx +2 -2
- package/src/components/market-board/index.tsx +11 -3
- package/src/components/onboarding/onboarding-frame.tsx +1 -1
- package/src/components/onboarding/onboarding-wizard.tsx +1 -0
- package/src/components/onboarding/portfolio-step/broker-setup-panel.tsx +2 -2
- package/src/components/onboarding/portfolio-step/positions-panel.tsx +2 -2
- package/src/components/onboarding/wizard-broker-sync.ts +4 -1
- package/src/components/pane-settings-dialog/desktop.tsx +20 -7
- package/src/components/pane-settings-dialog/tui.tsx +17 -9
- package/src/components/pane-settings-dialog/value.ts +8 -1
- package/src/components/pane-settings-dialog.tsx +44 -13
- package/src/components/sign-in-code-panel.tsx +27 -19
- package/src/components/ui/column-grid.tsx +48 -4
- package/src/components/ui/country-flag-art.tsx +180 -0
- package/src/components/ui/country-flag.tsx +118 -12
- package/src/components/ui/data-table/opentui/index.tsx +61 -2
- package/src/components/ui/data-table/opentui/model.ts +109 -2
- package/src/components/ui/data-table/types.ts +1 -1
- package/src/components/ui/display.tsx +10 -2
- package/src/components/ui/index.ts +3 -1
- package/src/components/ui/logo-mark.tsx +11 -2
- package/src/components/ui/query-bar.tsx +1 -1
- package/src/components/ui/row-notes.ts +79 -0
- package/src/core/state/app/layout.ts +6 -4
- package/src/core/state/app/state.ts +9 -0
- package/src/core/state/app/types.ts +3 -0
- package/src/data/cached-query.ts +8 -1
- package/src/data/config/chart-settings.ts +3 -3
- package/src/data/config/home.ts +10 -2
- package/src/data/config/layout.ts +4 -1
- package/src/data/config/store/node.ts +4 -0
- package/src/data/config/store/normalize.ts +13 -3
- package/src/data/config/store/portfolio-as-of-column.ts +2 -2
- package/src/data/json-storage.ts +2 -0
- package/src/data/saved-copies.ts +123 -0
- package/src/docs/snapshot.json +422 -112
- package/src/i18n/es.ts +30 -13
- package/src/i18n/ja.ts +30 -13
- package/src/i18n/ko.ts +30 -13
- package/src/i18n/zh-cn.ts +30 -13
- package/src/i18n/zh-tw.ts +30 -13
- package/src/layout/desks.ts +1 -1
- package/src/layout/launch-layout.ts +1 -1
- package/src/layout/pane-manager/floating-actions.ts +5 -3
- package/src/layout/pane-manager/floating.ts +43 -1
- package/src/layout/pane-manager/index.ts +2 -0
- package/src/layout/selected-ticker.ts +74 -0
- package/src/market-data/coordinator/financials.ts +10 -2
- package/src/market-data/coordinator/index.ts +3 -1
- package/src/market-data/coordinator/quotes.ts +4 -2
- package/src/market-data/depositary-pair.ts +251 -0
- package/src/market-data/futures-board.ts +1 -1
- package/src/market-data/futures-contract.ts +124 -40
- package/src/market-data/fx-closes.ts +17 -2
- package/src/market-data/hooks.tsx +19 -11
- package/src/market-data/market/change-basis.ts +81 -11
- package/src/market-data/market/dated-previous-close.ts +203 -0
- package/src/market-data/market/freshness.ts +34 -5
- package/src/market-data/market/futures-week.ts +68 -0
- package/src/market-data/market/period-return.ts +163 -0
- package/src/market-data/market/status.ts +16 -4
- package/src/market-data/market/trading-sessions.ts +13 -0
- package/src/market-data/market/year-to-date.ts +8 -13
- package/src/market-data/options-alternatives.ts +60 -0
- package/src/market-data/performance.ts +20 -14
- package/src/market-data/perpetual-premium.ts +32 -0
- package/src/market-data/published-apac-sessions.ts +2 -1
- package/src/market-data/published-futures-sessions.ts +69 -0
- package/src/market-data/quotes/contributions.ts +25 -3
- package/src/market-data/quotes/freshness.ts +42 -0
- package/src/market-data/quotes/intraday-bar.ts +37 -0
- package/src/market-data/quotes/regular-session-valuation.ts +13 -8
- package/src/market-data/quotes/resolution.ts +7 -2
- package/src/market-data/selectors.ts +3 -0
- package/src/market-data/tax-equivalent.ts +1 -1
- package/src/market-data/ticker-price-returns.ts +3 -1
- package/src/news/aggregator.ts +5 -1
- package/src/news/news-model.ts +4 -0
- package/src/news/types.ts +11 -0
- package/src/notifications/app-notifier.ts +1 -1
- package/src/notifications/notification-log.ts +6 -4
- package/src/plugins/auto-update.ts +2 -2
- package/src/plugins/builtin/account-management/index.tsx +1 -0
- package/src/plugins/builtin/account-management/pane.tsx +9 -8
- package/src/plugins/builtin/alerts/alert-engine.ts +34 -20
- package/src/plugins/builtin/alerts/calendar-events.ts +429 -0
- package/src/plugins/builtin/alerts/cli.ts +533 -85
- package/src/plugins/builtin/alerts/command.ts +12 -10
- package/src/plugins/builtin/alerts/constants.ts +1 -1
- package/src/plugins/builtin/alerts/event-rows.ts +9 -5
- package/src/plugins/builtin/alerts/events-pane.tsx +71 -56
- package/src/plugins/builtin/alerts/events.ts +107 -5
- package/src/plugins/builtin/alerts/fired-log.ts +119 -0
- package/src/plugins/builtin/alerts/format.ts +10 -3
- package/src/plugins/builtin/alerts/headless.ts +107 -41
- package/src/plugins/builtin/alerts/history-pane.tsx +105 -62
- package/src/plugins/builtin/alerts/history-rows.ts +92 -0
- package/src/plugins/builtin/alerts/history.ts +2 -0
- package/src/plugins/builtin/alerts/index.tsx +107 -30
- package/src/plugins/builtin/alerts/iv-level.ts +365 -0
- package/src/plugins/builtin/alerts/levels.ts +3 -3
- package/src/plugins/builtin/alerts/live.ts +3 -3
- package/src/plugins/builtin/alerts/metric-command.ts +61 -0
- package/src/plugins/builtin/alerts/metric-data.ts +70 -0
- package/src/plugins/builtin/alerts/metric-model.ts +175 -0
- package/src/plugins/builtin/alerts/metric-parity-fixture.json +725 -0
- package/src/plugins/builtin/alerts/pane.tsx +130 -49
- package/src/plugins/builtin/alerts/price.ts +35 -0
- package/src/plugins/builtin/alerts/quotes.ts +24 -0
- package/src/plugins/builtin/alerts/research-builder.ts +84 -11
- package/src/plugins/builtin/alerts/research-rules.ts +76 -3
- package/src/plugins/builtin/alerts/scheduled-check.ts +206 -32
- package/src/plugins/builtin/alerts/scheduled-sources.ts +26 -3
- package/src/plugins/builtin/alerts/scheduled.ts +188 -29
- package/src/plugins/builtin/alerts/storage.ts +38 -12
- package/src/plugins/builtin/alerts/targets.ts +12 -3
- package/src/plugins/builtin/alerts/types.ts +3 -0
- package/src/plugins/builtin/analytics/index.tsx +8 -2
- package/src/plugins/builtin/analytics/metrics.ts +1 -1
- package/src/plugins/builtin/analytics/risk-book.ts +215 -0
- package/src/plugins/builtin/analytics/risk-client.ts +13 -6
- package/src/plugins/builtin/analytics/risk-headless.ts +55 -21
- package/src/plugins/builtin/analytics/risk-math.ts +6 -3
- package/src/plugins/builtin/analytics/risk-model.ts +297 -104
- package/src/plugins/builtin/analytics/risk-options.ts +17 -2
- package/src/plugins/builtin/analytics/risk-pane.tsx +97 -36
- package/src/plugins/builtin/attention/pane.tsx +6 -2
- package/src/plugins/builtin/awards/headless.ts +7 -3
- package/src/plugins/builtin/awards/model.ts +18 -0
- package/src/plugins/builtin/awards/pane.tsx +6 -3
- package/src/plugins/builtin/backtest/headless.ts +13 -8
- package/src/plugins/builtin/backtest/pane.tsx +9 -4
- package/src/plugins/builtin/backtest/presets.ts +29 -3
- package/src/plugins/builtin/backtest/rules.ts +41 -5
- package/src/plugins/builtin/broker-manager/add-flow.tsx +12 -7
- package/src/plugins/builtin/broker-manager/detail.tsx +47 -19
- package/src/plugins/builtin/broker-manager/footer.ts +27 -11
- package/src/plugins/builtin/broker-manager/index.tsx +24 -14
- package/src/plugins/builtin/broker-manager/keyboard.ts +1 -1
- package/src/plugins/builtin/broker-manager/model.ts +18 -3
- package/src/plugins/builtin/broker-manager/pane-actions.tsx +183 -57
- package/src/plugins/builtin/broker-manager/table.ts +28 -12
- package/src/plugins/builtin/broker-trading/account-picker.tsx +2 -1
- package/src/plugins/builtin/broker-trading/chart-levels.ts +82 -13
- package/src/plugins/builtin/broker-trading/controller.ts +66 -24
- package/src/plugins/builtin/broker-trading/dock.tsx +22 -4
- package/src/plugins/builtin/broker-trading/headless.ts +2 -1
- package/src/plugins/builtin/broker-trading/index.tsx +19 -1
- package/src/plugins/builtin/broker-trading/linked-orders.ts +148 -0
- package/src/plugins/builtin/broker-trading/order-feed.ts +83 -10
- package/src/plugins/builtin/broker-trading/orders.tsx +109 -31
- package/src/plugins/builtin/broker-trading/overview-orders.tsx +9 -3
- package/src/plugins/builtin/broker-trading/pane-model.ts +30 -2
- package/src/plugins/builtin/broker-trading/pane.tsx +111 -24
- package/src/plugins/builtin/broker-trading/ticket-parts.tsx +36 -7
- package/src/plugins/builtin/broker-trading/ticket.tsx +112 -31
- package/src/plugins/builtin/buildout/cells.tsx +4 -0
- package/src/plugins/builtin/buildout/detail/index.tsx +5 -1
- package/src/plugins/builtin/buildout/detail/ui.tsx +7 -4
- package/src/plugins/builtin/buildout/pane/index.tsx +25 -12
- package/src/plugins/builtin/buildout/pane/status.tsx +0 -4
- package/src/plugins/builtin/builtin-plugin-meta.ts +2 -2
- package/src/plugins/builtin/catalysts/detail.tsx +3 -2
- package/src/plugins/builtin/catalysts/index.tsx +1 -1
- package/src/plugins/builtin/catalysts/model.ts +51 -5
- package/src/plugins/builtin/catalysts/pane.tsx +6 -8
- package/src/plugins/builtin/central-bank-rates/client.ts +5 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +36 -10
- package/src/plugins/builtin/central-bank-rates/model.ts +33 -8
- package/src/plugins/builtin/changelog/index.tsx +1 -0
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +4 -1
- package/src/plugins/builtin/chart-composer/chart-spec-edit.ts +3 -2
- package/src/plugins/builtin/chart-composer/chart-spec.ts +7 -0
- package/src/plugins/builtin/chart-composer/cli-options.ts +7 -10
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +7 -3
- package/src/plugins/builtin/chart-composer/editor/controller.ts +4 -0
- package/src/plugins/builtin/chart-composer/editor/model.ts +2 -0
- package/src/plugins/builtin/chart-composer/editor.tsx +9 -4
- package/src/plugins/builtin/chart-composer/formula.ts +71 -18
- package/src/plugins/builtin/chart-composer/headless-schema.ts +42 -29
- package/src/plugins/builtin/chart-composer/headless.ts +266 -37
- package/src/plugins/builtin/chart-composer/index.tsx +12 -2
- package/src/plugins/builtin/chart-composer/leverage-overlay.ts +142 -0
- package/src/plugins/builtin/chart-composer/pane.tsx +144 -30
- package/src/plugins/builtin/chart-composer/presets.ts +50 -15
- package/src/plugins/builtin/chart-composer/quick-add.tsx +40 -25
- package/src/plugins/builtin/chart-composer/series-catalog.ts +1 -0
- package/src/plugins/builtin/chart-composer/series-expression.ts +65 -6
- package/src/plugins/builtin/chart-composer/session-history.ts +31 -28
- package/src/plugins/builtin/chart-composer/session-range.ts +4 -2
- package/src/plugins/builtin/chart-composer/settings.ts +31 -19
- package/src/plugins/builtin/chart-composer/use-series-catalog.ts +44 -31
- package/src/plugins/builtin/chart-composer/viewport-labels.ts +18 -8
- package/src/plugins/builtin/chat/attachments/model.ts +3 -1
- package/src/plugins/builtin/chat/content/command-suggestions.ts +92 -0
- package/src/plugins/builtin/chat/content/composer.tsx +13 -6
- package/src/plugins/builtin/chat/content/footer.tsx +6 -3
- package/src/plugins/builtin/chat/content/index.tsx +51 -22
- package/src/plugins/builtin/chat/content/open-targets.ts +14 -3
- package/src/plugins/builtin/chat/controller/session-runtime.ts +4 -2
- package/src/plugins/builtin/chat/index.tsx +23 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +1 -0
- package/src/plugins/builtin/chat/message/inline-tokens.tsx +23 -0
- package/src/plugins/builtin/chat/message/pane-chip.tsx +50 -20
- package/src/plugins/builtin/chat/pane-links/commands.ts +265 -0
- package/src/plugins/builtin/chat/pane-links/model.ts +12 -3
- package/src/plugins/builtin/chat/pane-links/open.ts +9 -2
- package/src/plugins/builtin/chat/people.ts +1 -1
- package/src/plugins/builtin/chat/unread-inbox-pane.tsx +10 -1
- package/src/plugins/builtin/clinical-trials/client.ts +5 -2
- package/src/plugins/builtin/clinical-trials/model.ts +13 -4
- package/src/plugins/builtin/clinical-trials/pane.tsx +32 -12
- package/src/plugins/builtin/clinical-trials/ticker-sponsor.ts +17 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +1 -1
- package/src/plugins/builtin/cloud/askg/lock-note.ts +1 -1
- package/src/plugins/builtin/cloud/askg/tool-display.ts +1 -1
- package/src/plugins/builtin/cloud/auth-commands.ts +3 -3
- package/src/plugins/builtin/cloud/plugin.tsx +1 -1
- package/src/plugins/builtin/cloud/team/pane-sections.tsx +105 -47
- package/src/plugins/builtin/cloud/team/pane-ui.tsx +42 -4
- package/src/plugins/builtin/cloud/team/pane.tsx +204 -64
- package/src/plugins/builtin/cloud/thesis/store.ts +45 -22
- package/src/plugins/builtin/cloud-tweets/registration.ts +1 -0
- package/src/plugins/builtin/commodities-energy/index.tsx +29 -2
- package/src/plugins/builtin/commodities-energy/view-state.ts +2 -0
- package/src/plugins/builtin/commodity-balances/pane.tsx +11 -4
- package/src/plugins/builtin/company-attention/app-rank.tsx +7 -5
- package/src/plugins/builtin/company-attention/building-model.ts +222 -0
- package/src/plugins/builtin/company-attention/building.tsx +172 -0
- package/src/plugins/builtin/company-attention/client.ts +117 -1
- package/src/plugins/builtin/company-attention/evidence.ts +16 -3
- package/src/plugins/builtin/company-attention/headless.ts +101 -5
- package/src/plugins/builtin/company-attention/index.tsx +6 -3
- package/src/plugins/builtin/company-attention/model.ts +33 -7
- package/src/plugins/builtin/company-attention/moves-model.ts +253 -0
- package/src/plugins/builtin/company-attention/moves.tsx +159 -0
- package/src/plugins/builtin/company-attention/pane.tsx +79 -23
- package/src/plugins/builtin/company-attention/signals-model.ts +229 -0
- package/src/plugins/builtin/company-attention/signals.tsx +160 -0
- package/src/plugins/builtin/company-kpis/headless.ts +3 -2
- package/src/plugins/builtin/company-kpis/model.ts +2 -2
- package/src/plugins/builtin/company-kpis/pane.tsx +1 -1
- package/src/plugins/builtin/composite-plugins.ts +2 -1
- package/src/plugins/builtin/congress-trades/headless.ts +1 -1
- package/src/plugins/builtin/connections/index.ts +1 -0
- package/src/plugins/builtin/correlation/headless-schema.ts +3 -2
- package/src/plugins/builtin/correlation/headless.ts +5 -3
- package/src/plugins/builtin/cot/headless.ts +28 -6
- package/src/plugins/builtin/cot/model.ts +12 -0
- package/src/plugins/builtin/cot/pane.tsx +3 -2
- package/src/plugins/builtin/cpi/headless.ts +5 -1
- package/src/plugins/builtin/cpi/pane.tsx +11 -9
- package/src/plugins/builtin/credit-boards/model.ts +2 -0
- package/src/plugins/builtin/credit-documents/headless.ts +1 -1
- package/src/plugins/builtin/crypto-board/client.ts +86 -0
- package/src/plugins/builtin/crypto-board/defi-view.tsx +218 -0
- package/src/plugins/builtin/crypto-board/defi.ts +239 -0
- package/src/plugins/builtin/crypto-board/headless.ts +117 -6
- package/src/plugins/builtin/crypto-board/index.tsx +8 -3
- package/src/plugins/builtin/crypto-board/model.ts +40 -8
- package/src/plugins/builtin/crypto-board/pane.tsx +55 -21
- package/src/plugins/builtin/crypto-board/series.ts +19 -1
- package/src/plugins/builtin/crypto-etf-flows/client.ts +60 -0
- package/src/plugins/builtin/crypto-etf-flows/headless.ts +132 -0
- package/src/plugins/builtin/crypto-etf-flows/index.tsx +44 -0
- package/src/plugins/builtin/crypto-etf-flows/model.ts +121 -0
- package/src/plugins/builtin/crypto-etf-flows/pane.tsx +193 -0
- package/src/plugins/builtin/debug/index.tsx +1 -0
- package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
- package/src/plugins/builtin/docs/index.tsx +1 -1
- package/src/plugins/builtin/docs/pane.tsx +2 -2
- package/src/plugins/builtin/docs/targets.ts +1 -1
- package/src/plugins/builtin/doe/client.ts +5 -1
- package/src/plugins/builtin/doe/headless.ts +12 -6
- package/src/plugins/builtin/doe/model.ts +43 -6
- package/src/plugins/builtin/doe/pane.tsx +18 -11
- package/src/plugins/builtin/earnings/board-model.ts +13 -6
- package/src/plugins/builtin/earnings/board-table.ts +4 -1
- package/src/plugins/builtin/earnings/board.tsx +253 -50
- package/src/plugins/builtin/earnings/calendar-model.ts +188 -0
- package/src/plugins/builtin/earnings/calendar.tsx +338 -0
- package/src/plugins/builtin/earnings/client.ts +4 -3
- package/src/plugins/builtin/earnings/headless.ts +53 -15
- package/src/plugins/builtin/earnings/history-model.ts +53 -36
- package/src/plugins/builtin/earnings/index.tsx +15 -22
- package/src/plugins/builtin/earnings/model.ts +17 -12
- package/src/plugins/builtin/earnings/scope.ts +89 -0
- package/src/plugins/builtin/earnings-calls/calendar.tsx +310 -0
- package/src/plugins/builtin/earnings-calls/data.ts +146 -2
- package/src/plugins/builtin/earnings-calls/headless.ts +151 -9
- package/src/plugins/builtin/earnings-calls/index.tsx +3 -3
- package/src/plugins/builtin/earnings-calls/lock-note.ts +1 -1
- package/src/plugins/builtin/earnings-calls/pane.tsx +149 -31
- package/src/plugins/builtin/earnings-calls/upcoming.ts +195 -0
- package/src/plugins/builtin/earnings-ripple/pane.tsx +10 -5
- package/src/plugins/builtin/econ/calendar-model.ts +144 -27
- package/src/plugins/builtin/econ/detail-view.tsx +48 -10
- package/src/plugins/builtin/econ/figures.ts +72 -0
- package/src/plugins/builtin/econ/fred-catalog.ts +23 -6
- package/src/plugins/builtin/econ/fred-series-map.ts +4 -0
- package/src/plugins/builtin/econ/index.tsx +144 -27
- package/src/plugins/builtin/econ/print-watch.ts +2 -1
- package/src/plugins/builtin/econ/types.ts +34 -1
- package/src/plugins/builtin/econ-statistics/client.ts +16 -3
- package/src/plugins/builtin/econ-statistics/defs.ts +4 -0
- package/src/plugins/builtin/econ-statistics/detail.tsx +2 -2
- package/src/plugins/builtin/econ-statistics/headless.ts +87 -28
- package/src/plugins/builtin/econ-statistics/index.tsx +3 -3
- package/src/plugins/builtin/econ-statistics/pane.tsx +2 -1
- package/src/plugins/builtin/econ-statistics/stats.ts +104 -0
- package/src/plugins/builtin/econ-statistics/view.ts +19 -1
- package/src/plugins/builtin/equity-screener/client.ts +21 -3
- package/src/plugins/builtin/equity-screener/headless.ts +68 -6
- package/src/plugins/builtin/equity-screener/live.ts +1 -1
- package/src/plugins/builtin/equity-screener/model.ts +6 -0
- package/src/plugins/builtin/equity-screener/pane.tsx +47 -12
- package/src/plugins/builtin/equity-screener/screen-check.ts +90 -0
- package/src/plugins/builtin/equity-screener/ticker-check.tsx +148 -0
- package/src/plugins/builtin/estimate-revisions/headless.ts +3 -1
- package/src/plugins/builtin/estimate-revisions/lock-note.ts +3 -3
- package/src/plugins/builtin/estimate-revisions/model.ts +8 -10
- package/src/plugins/builtin/exposure/charts.tsx +2 -2
- package/src/plugins/builtin/exposure/headless.ts +51 -6
- package/src/plugins/builtin/exposure/index.tsx +28 -2
- package/src/plugins/builtin/exposure/model.ts +20 -1
- package/src/plugins/builtin/exposure/pane.tsx +10 -5
- package/src/plugins/builtin/fear-greed/index.tsx +1 -1
- package/src/plugins/builtin/filing-events/index.tsx +1 -1
- package/src/plugins/builtin/futures/index.tsx +1 -0
- package/src/plugins/builtin/futures/model.ts +12 -10
- package/src/plugins/builtin/futures/returns.ts +8 -36
- package/src/plugins/builtin/futures/table.tsx +3 -3
- package/src/plugins/builtin/futures-curve/client.ts +40 -9
- package/src/plugins/builtin/futures-curve/headless.ts +39 -17
- package/src/plugins/builtin/futures-curve/model.ts +258 -69
- package/src/plugins/builtin/futures-curve/pane.tsx +46 -17
- package/src/plugins/builtin/fx-matrix/client.ts +20 -8
- package/src/plugins/builtin/fx-matrix/headless.ts +37 -16
- package/src/plugins/builtin/fx-matrix/index.tsx +25 -13
- package/src/plugins/builtin/fx-matrix/live-legs.ts +34 -0
- package/src/plugins/builtin/fx-matrix/settings.ts +2 -1
- package/src/plugins/builtin/gpu/headless.ts +9 -4
- package/src/plugins/builtin/help/index.tsx +13 -3
- package/src/plugins/builtin/help/keybindings-editor.tsx +18 -14
- package/src/plugins/builtin/holders/beneficial-model.ts +8 -11
- package/src/plugins/builtin/holders/beneficial-report.ts +6 -5
- package/src/plugins/builtin/holders/beneficial-view.tsx +7 -3
- package/src/plugins/builtin/holders/client.ts +13 -1
- package/src/plugins/builtin/holders/format.ts +28 -17
- package/src/plugins/builtin/holders/headless.ts +46 -7
- package/src/plugins/builtin/holders/index-holders.ts +264 -0
- package/src/plugins/builtin/holders/pane.tsx +79 -15
- package/src/plugins/builtin/holders/report-rows.ts +35 -7
- package/src/plugins/builtin/holders/table-model.ts +2 -1
- package/src/plugins/builtin/holders/treemap.tsx +2 -2
- package/src/plugins/builtin/insider/headless.ts +1 -1
- package/src/plugins/builtin/insider/signals-client.ts +1 -1
- package/src/plugins/builtin/insider/signals.tsx +1 -1
- package/src/plugins/builtin/ipo-calendar/pane.tsx +7 -4
- package/src/plugins/builtin/iv-history/client.ts +20 -0
- package/src/plugins/builtin/iv-history/headless.ts +7 -4
- package/src/plugins/builtin/iv-history/index.tsx +1 -1
- package/src/plugins/builtin/iv-history/model.ts +13 -4
- package/src/plugins/builtin/iv-history/series.ts +3 -1
- package/src/plugins/builtin/jobs/lock-note.ts +1 -1
- package/src/plugins/builtin/jobs/model.ts +4 -15
- package/src/plugins/builtin/jobs/pane.tsx +7 -5
- package/src/plugins/builtin/jobs/share-bars.tsx +11 -5
- package/src/plugins/builtin/jodi/pane.tsx +10 -4
- package/src/plugins/builtin/layout-manager/index.tsx +1 -0
- package/src/plugins/builtin/macro-day/headless.ts +20 -7
- package/src/plugins/builtin/macro-day/index.tsx +3 -2
- package/src/plugins/builtin/macro-day/model.ts +29 -8
- package/src/plugins/builtin/macro-day/pane.tsx +51 -13
- package/src/plugins/builtin/macro-day/releases.ts +55 -13
- package/src/plugins/builtin/market-heatmap/data.ts +9 -2
- package/src/plugins/builtin/market-heatmap/evidence.ts +1 -1
- package/src/plugins/builtin/market-heatmap/headless.ts +9 -6
- package/src/plugins/builtin/market-heatmap/index.tsx +3 -3
- package/src/plugins/builtin/market-heatmap/model.ts +10 -7
- package/src/plugins/builtin/market-movers/client.ts +33 -19
- package/src/plugins/builtin/market-movers/footer.ts +2 -2
- package/src/plugins/builtin/market-movers/headless.ts +8 -2
- package/src/plugins/builtin/market-movers/index.tsx +16 -10
- package/src/plugins/builtin/market-movers/screener.ts +29 -8
- package/src/plugins/builtin/market-movers/session-body.tsx +4 -2
- package/src/plugins/builtin/market-movers/session-table.ts +4 -2
- package/src/plugins/builtin/market-movers/table.ts +4 -1
- package/src/plugins/builtin/market-valuation/headless.ts +2 -0
- package/src/plugins/builtin/market-valuation/view.ts +5 -0
- package/src/plugins/builtin/members/breadth-pane.tsx +81 -0
- package/src/plugins/builtin/members/client.ts +19 -4
- package/src/plugins/builtin/members/headless.ts +24 -10
- package/src/plugins/builtin/members/index.tsx +9 -9
- package/src/plugins/builtin/members/model.ts +23 -4
- package/src/plugins/builtin/members/pane.tsx +31 -14
- package/src/plugins/builtin/mna/client.ts +1 -0
- package/src/plugins/builtin/mna/detail.tsx +20 -32
- package/src/plugins/builtin/mna/distress/detail.tsx +16 -4
- package/src/plugins/builtin/mna/distress/model.ts +3 -2
- package/src/plugins/builtin/mna/distress/pane.tsx +7 -4
- package/src/plugins/builtin/mna/headless.ts +6 -13
- package/src/plugins/builtin/mna/model.ts +93 -15
- package/src/plugins/builtin/mna/pane.tsx +5 -4
- package/src/plugins/builtin/news/headless.ts +12 -6
- package/src/plugins/builtin/news/index.tsx +10 -1
- package/src/plugins/builtin/news/wire/index.tsx +3 -2
- package/src/plugins/builtin/news/wire/news/command-bar-search.ts +26 -10
- package/src/plugins/builtin/news/wire/news/query-presets.ts +6 -2
- package/src/plugins/builtin/news/wire/rss/cli.ts +3 -3
- package/src/plugins/builtin/notes/cli.ts +49 -14
- package/src/plugins/builtin/openfda/pane.tsx +1 -1
- package/src/plugins/builtin/options/analytics.ts +26 -2
- package/src/plugins/builtin/options/carry.ts +2 -2
- package/src/plugins/builtin/options/index.tsx +1 -1
- package/src/plugins/builtin/options/model-spot.ts +5 -2
- package/src/plugins/builtin/options/strike-window.ts +2 -1
- package/src/plugins/builtin/options/table.ts +1 -7
- package/src/plugins/builtin/options/view.tsx +30 -13
- package/src/plugins/builtin/options-calculator/headless.ts +46 -7
- package/src/plugins/builtin/options-positioning/client.ts +19 -0
- package/src/plugins/builtin/options-positioning/headless.ts +54 -14
- package/src/plugins/builtin/options-positioning/index.tsx +3 -3
- package/src/plugins/builtin/options-positioning/model.ts +47 -8
- package/src/plugins/builtin/options-positioning/pane.tsx +68 -38
- package/src/plugins/builtin/options-scenario/client.ts +123 -28
- package/src/plugins/builtin/options-scenario/collar.ts +8 -6
- package/src/plugins/builtin/options-scenario/csp-screen-headless.ts +127 -0
- package/src/plugins/builtin/options-scenario/csp-screen-pane.tsx +165 -0
- package/src/plugins/builtin/options-scenario/csp-screen.ts +258 -0
- package/src/plugins/builtin/options-scenario/csp.ts +101 -21
- package/src/plugins/builtin/options-scenario/headless.ts +36 -15
- package/src/plugins/builtin/options-scenario/hedge.ts +20 -14
- package/src/plugins/builtin/options-scenario/index.tsx +28 -3
- package/src/plugins/builtin/options-scenario/model.ts +13 -0
- package/src/plugins/builtin/options-scenario/pane.tsx +9 -5
- package/src/plugins/builtin/perps/equity-row.tsx +11 -3
- package/src/plugins/builtin/perps/freshness.ts +14 -9
- package/src/plugins/builtin/perps/headless.ts +3 -1
- package/src/plugins/builtin/perps/list-perpetuals.ts +25 -4
- package/src/plugins/builtin/perps/live-rows.ts +168 -0
- package/src/plugins/builtin/perps/markets-section.tsx +154 -0
- package/src/plugins/builtin/perps/pane.tsx +49 -26
- package/src/plugins/builtin/perps/venue-markets.ts +96 -0
- package/src/plugins/builtin/plugin-marketplace/index.tsx +2 -1
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +143 -59
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +72 -24
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +158 -141
- package/src/plugins/builtin/portfolio-list/cli/render.ts +54 -22
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +3 -3
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +29 -24
- package/src/plugins/builtin/portfolio-list/headless.ts +7 -4
- package/src/plugins/builtin/portfolio-list/income.ts +13 -2
- package/src/plugins/builtin/portfolio-list/index.tsx +9 -2
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +21 -8
- package/src/plugins/builtin/portfolio-list/pane/purchase-date-fx.ts +46 -0
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +11 -8
- package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +16 -9
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +2 -15
- package/src/plugins/builtin/power/client.ts +4 -1
- package/src/plugins/builtin/power/evidence.ts +22 -7
- package/src/plugins/builtin/power/gas.tsx +5 -1
- package/src/plugins/builtin/power/pane.tsx +8 -1
- package/src/plugins/builtin/power/prices.tsx +10 -3
- package/src/plugins/builtin/rate-path/pane.tsx +2 -2
- package/src/plugins/builtin/research/analyst-headless.ts +25 -8
- package/src/plugins/builtin/research/analyst-model.ts +68 -3
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +63 -14
- package/src/plugins/builtin/research/event-model.ts +3 -1
- package/src/plugins/builtin/research/event-sources.ts +12 -4
- package/src/plugins/builtin/research/index.tsx +2 -1
- package/src/plugins/builtin/research/relative-valuation-basis.ts +58 -0
- package/src/plugins/builtin/research/relative-valuation-columns.ts +31 -2
- package/src/plugins/builtin/research/relative-valuation-currency.ts +12 -5
- package/src/plugins/builtin/research/relative-valuation-headless.ts +84 -26
- package/src/plugins/builtin/research/relative-valuation-model.ts +88 -19
- package/src/plugins/builtin/research/relative-valuation-pane.tsx +80 -13
- package/src/plugins/builtin/research/relative-valuation-peers.ts +1 -1
- package/src/plugins/builtin/reverse-dcf/model.ts +6 -2
- package/src/plugins/builtin/risk-factors/index.tsx +2 -2
- package/src/plugins/builtin/scanner/feed.ts +2 -2
- package/src/plugins/builtin/scanner/index.ts +24 -1
- package/src/plugins/builtin/scanner/live-condition-editor.tsx +222 -0
- package/src/plugins/builtin/scanner/live-feed.ts +168 -0
- package/src/plugins/builtin/scanner/live-headless.ts +114 -0
- package/src/plugins/builtin/scanner/live-model.ts +351 -0
- package/src/plugins/builtin/scanner/live-pane.tsx +677 -0
- package/src/plugins/builtin/scanner/live-track.ts +186 -0
- package/src/plugins/builtin/scanner/lock-note.ts +1 -1
- package/src/plugins/builtin/sec/forms.ts +13 -0
- package/src/plugins/builtin/sec/fund-abroad.ts +32 -0
- package/src/plugins/builtin/sec/fund-facts.ts +68 -8
- package/src/plugins/builtin/sec/headless.ts +85 -8
- package/src/plugins/builtin/sec/index.tsx +58 -12
- package/src/plugins/builtin/sectors/client.ts +2 -1
- package/src/plugins/builtin/sectors/sector-model.ts +11 -15
- package/src/plugins/builtin/series-inventory.ts +3 -0
- package/src/plugins/builtin/shared/broker-reconnect.ts +107 -22
- package/src/plugins/builtin/shared/cloud-upgrade.ts +34 -6
- package/src/plugins/builtin/shared/earnings-calendar.ts +375 -0
- package/src/plugins/builtin/{earnings/estimate-basis.ts → shared/earnings-estimate-basis.ts} +1 -1
- package/src/plugins/builtin/shared/earnings-report.ts +3 -3
- package/src/plugins/builtin/shared/fx-rate-freshness.ts +23 -1
- package/src/plugins/builtin/shared/job-posting.ts +129 -0
- package/src/plugins/builtin/shared/macro-releases.ts +65 -0
- package/src/plugins/builtin/shared/pro-lock-note.ts +3 -3
- package/src/plugins/builtin/shared/report-freshness.ts +3 -0
- package/src/plugins/builtin/shared/research-trading.tsx +21 -0
- package/src/plugins/builtin/shared/scanner-capture.ts +3 -0
- package/src/plugins/builtin/shared/series-cache.ts +2 -0
- package/src/plugins/builtin/shared/ticker-surface.ts +2 -1
- package/src/plugins/builtin/shared/use-quote-board.ts +8 -2
- package/src/plugins/builtin/shared/volatility/pricing.ts +7 -1
- package/src/plugins/builtin/short-interest/client.ts +2 -0
- package/src/plugins/builtin/short-interest/headless.ts +41 -12
- package/src/plugins/builtin/short-interest/index.tsx +23 -1
- package/src/plugins/builtin/short-interest/model.ts +70 -19
- package/src/plugins/builtin/short-interest/pane.tsx +19 -2
- package/src/plugins/builtin/short-interest/publications-client.ts +82 -0
- package/src/plugins/builtin/short-interest/publications-headless.ts +29 -0
- package/src/plugins/builtin/short-interest/publications-model.ts +50 -0
- package/src/plugins/builtin/short-interest/publications-pane.tsx +66 -0
- package/src/plugins/builtin/short-interest/schedule.ts +35 -2
- package/src/plugins/builtin/short-interest/surface.tsx +11 -4
- package/src/plugins/builtin/short-interest/types.ts +9 -0
- package/src/plugins/builtin/short-interest/watch-client.ts +14 -8
- package/src/plugins/builtin/short-interest/watch-model.ts +12 -25
- package/src/plugins/builtin/short-interest/watch-pane.tsx +5 -1
- package/src/plugins/builtin/supply-chain/flow.tsx +33 -9
- package/src/plugins/builtin/supply-chain/model.ts +51 -3
- package/src/plugins/builtin/supply-chain/pane.tsx +78 -39
- package/src/plugins/builtin/supply-chain/row-evidence.tsx +1 -1
- package/src/plugins/builtin/themes/headless.ts +11 -6
- package/src/plugins/builtin/themes/model.ts +15 -5
- package/src/plugins/builtin/themes/pane.tsx +27 -8
- package/src/plugins/builtin/thirteenf/headless.ts +5 -5
- package/src/plugins/builtin/thirteenf/signals.ts +3 -1
- package/src/plugins/builtin/ticker-detail/adr-pair/headless.ts +123 -0
- package/src/plugins/builtin/ticker-detail/adr-pair/model.ts +132 -0
- package/src/plugins/builtin/ticker-detail/adr-pair/tab.tsx +87 -0
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +40 -26
- package/src/plugins/builtin/ticker-detail/data-panes/history-bars.ts +8 -4
- package/src/plugins/builtin/ticker-detail/data-panes/returns-history.ts +67 -3
- package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +112 -5
- package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +17 -2
- package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +21 -7
- package/src/plugins/builtin/ticker-detail/financials/model.ts +36 -1
- package/src/plugins/builtin/ticker-detail/financials/offerings.ts +56 -0
- package/src/plugins/builtin/ticker-detail/financials/ratios.ts +62 -13
- package/src/plugins/builtin/ticker-detail/financials/tab.tsx +30 -4
- package/src/plugins/builtin/ticker-detail/headless-schema.ts +14 -2
- package/src/plugins/builtin/ticker-detail/headless.ts +148 -35
- package/src/plugins/builtin/ticker-detail/index.tsx +37 -5
- package/src/plugins/builtin/ticker-detail/overview/model.ts +65 -10
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +9 -1
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +68 -11
- package/src/plugins/builtin/ticker-detail/pane.tsx +11 -0
- package/src/plugins/builtin/ticker-detail/quote-footer.ts +14 -4
- package/src/plugins/builtin/ticker-detail/research-tabs.ts +11 -0
- package/src/plugins/builtin/vol-surface/charts.tsx +9 -4
- package/src/plugins/builtin/vol-surface/client.ts +7 -4
- package/src/plugins/builtin/vol-surface/headless.ts +71 -13
- package/src/plugins/builtin/vol-surface/index.tsx +2 -2
- package/src/plugins/builtin/vol-surface/model.ts +26 -9
- package/src/plugins/builtin/vol-surface/pane.tsx +44 -7
- package/src/plugins/builtin/vol-surface/tables.ts +31 -3
- package/src/plugins/builtin/volatility/dvol.ts +46 -0
- package/src/plugins/builtin/volatility/model.ts +5 -10
- package/src/plugins/builtin/volatility/pane.tsx +2 -2
- package/src/plugins/builtin/volatility/series.ts +26 -0
- package/src/plugins/builtin/world-indices/footer.ts +1 -1
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +4 -3
- package/src/plugins/builtin/world-venue-map/basemap.ts +3 -1
- package/src/plugins/builtin/world-venue-map/chokepoint-chart.ts +40 -0
- package/src/plugins/builtin/world-venue-map/evidence.ts +1 -1
- package/src/plugins/builtin/world-venue-map/geo-series.ts +90 -11
- package/src/plugins/builtin/world-venue-map/headless.ts +1 -1
- package/src/plugins/builtin/world-venue-map/index.ts +3 -26
- package/src/plugins/builtin/world-venue-map/layers.ts +1 -1
- package/src/plugins/builtin/world-venue-map/map.tsx +2 -1
- package/src/plugins/builtin/world-venue-map/pane.tsx +4 -2
- package/src/plugins/builtin/world-venue-map/venue-header.tsx +15 -4
- package/src/plugins/builtin/yield-curve/client.ts +25 -0
- package/src/plugins/builtin/yield-curve/curves.ts +7 -4
- package/src/plugins/builtin/yield-curve/headless.ts +38 -4
- package/src/plugins/builtin/yield-curve/history.ts +4 -3
- package/src/plugins/builtin/yield-curve/index.tsx +12 -6
- package/src/plugins/builtin/yield-curve/swaps-model.ts +93 -0
- package/src/plugins/builtin/yield-curve/swaps.tsx +99 -0
- package/src/plugins/bundle.ts +1 -1
- package/src/plugins/catalog-browser.ts +15 -9
- package/src/plugins/compat.ts +3 -3
- package/src/plugins/dependencies.ts +75 -14
- package/src/plugins/extracted-plugins.ts +132 -34
- package/src/plugins/host-link.ts +149 -34
- package/src/plugins/installer.ts +35 -10
- package/src/plugins/loader.ts +206 -38
- package/src/plugins/manager-node.ts +2 -2
- package/src/plugins/marketplace/deactivation.ts +22 -0
- package/src/plugins/marketplace/model.ts +2 -2
- package/src/plugins/marketplace/packs.ts +1 -1
- package/src/plugins/ownership.ts +1 -1
- package/src/plugins/peer-retry.ts +155 -0
- package/src/plugins/registry/contributions.ts +3 -1
- package/src/plugins/registry/index.ts +4 -3
- package/src/plugins/registry/plugin-state.ts +3 -0
- package/src/plugins/seed-notice.ts +20 -0
- package/src/plugins/shortcut-argument.ts +39 -0
- package/src/portfolio/allocation.ts +1 -1
- package/src/portfolio/collection-name.ts +31 -0
- package/src/portfolio/column-values.ts +15 -13
- package/src/portfolio/cost-fx.ts +296 -19
- package/src/portfolio/manual-lots.ts +75 -0
- package/src/portfolio/mutations.ts +60 -22
- package/src/portfolio/suffixed-listings.ts +209 -0
- package/src/portfolio/totals-currency.ts +24 -0
- package/src/public/__snapshots__/public-api.test.ts.snap +15 -0
- package/src/public/time-series.ts +11 -8
- package/src/remote/schema.ts +1 -1
- package/src/renderers/browser/app-services.ts +1 -7
- package/src/renderers/browser/config-host.ts +5 -55
- package/src/renderers/browser/main.tsx +30 -60
- package/src/renderers/dom/boot-frame-page.ts +187 -0
- package/src/renderers/dom/boot-frame.ts +237 -0
- package/src/renderers/dom/build-assets.ts +46 -8
- package/src/renderers/dom/dom-ui-host.tsx +4 -29
- package/src/renderers/dom/host/ascii-text.ts +16 -2
- package/src/renderers/dom/host/box.tsx +43 -2
- package/src/renderers/dom/host/chart-surface.tsx +2 -0
- package/src/renderers/dom/host/hls.chunk.ts +3 -0
- package/src/renderers/dom/host/image-surface.tsx +49 -0
- package/src/renderers/dom/host/media-surface.tsx +24 -18
- package/src/renderers/dom/host/mouse.ts +30 -0
- package/src/renderers/dom/host/size-observer.ts +1 -1
- package/src/renderers/dom/host/style.ts +1 -1
- package/src/renderers/dom/styles.css +76 -0
- package/src/renderers/dom/test-utils.tsx +2 -1
- package/src/renderers/electrobun/bun/application-menu/index.ts +3 -3
- package/src/renderers/electrobun/bun/desktop/app-name.ts +222 -0
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +3 -0
- package/src/renderers/electrobun/bun/desktop/backend.ts +56 -3
- package/src/renderers/electrobun/bun/desktop/detached-windows.ts +1 -1
- package/src/renderers/electrobun/bun/desktop/host-requests.ts +9 -3
- package/src/renderers/electrobun/bun/desktop/initialization.ts +81 -18
- package/src/renderers/electrobun/bun/desktop/relaunch.ts +74 -25
- package/src/renderers/electrobun/bun/desktop/state-broadcaster.ts +1 -0
- package/src/renderers/electrobun/bun/desktop/update.ts +70 -3
- package/src/renderers/electrobun/bun/desktop/workspace/index.ts +2 -0
- package/src/renderers/electrobun/bun/external-plugins.ts +29 -7
- package/src/renderers/electrobun/bun/index.ts +36 -2
- package/src/renderers/electrobun/bun/window/boot-frame.ts +67 -0
- package/src/renderers/electrobun/bun/window/create.ts +4 -1
- package/src/renderers/electrobun/shared/app-name.ts +17 -0
- package/src/renderers/electrobun/shared/boot-frame.ts +7 -0
- package/src/renderers/electrobun/shared/protocol.ts +6 -1
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +1 -1
- package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +3 -3
- package/src/renderers/electrobun/view/config-host.ts +3 -0
- package/src/renderers/electrobun/view/desktop/window/snapshot.ts +1 -0
- package/src/renderers/electrobun/view/fatal-screen.tsx +1 -1
- package/src/renderers/electrobun/view/main.tsx +30 -4
- package/src/renderers/electrobun/view/news-source.ts +5 -5
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +1 -1
- package/src/renderers/electrobun/view/ui-host.tsx +1 -1
- package/src/renderers/opentui/browser-open.ts +88 -0
- package/src/renderers/opentui/host.tsx +5 -14
- package/src/renderers/opentui/image/loader.ts +3 -2
- package/src/renderers/opentui/native-smoke.ts +10 -1
- package/src/renderers/opentui/pane-image/index.ts +2 -1
- package/src/renderers/opentui/render-lib.ts +253 -0
- package/src/renderers/opentui/render-timing-smoke.ts +1 -1
- package/src/renderers/opentui/start.tsx +1 -1
- package/src/renderers/opentui/toast-host.tsx +71 -43
- package/src/renderers/share/layout-view.tsx +2 -2
- package/src/renderers/share/main.tsx +4 -4
- package/src/renderers/share/view.tsx +1 -1
- package/src/series/resolve.ts +22 -6
- package/src/series/standalone.ts +30 -2
- package/src/series/types.ts +8 -1
- package/src/shares/api.ts +4 -1
- package/src/shares/pane.ts +1 -1
- package/src/sources/gloomberb-cloud/fred-series.ts +46 -1
- package/src/sources/gloomberb-cloud/index.ts +32 -16
- package/src/sources/gloomberb-cloud/news.ts +39 -0
- package/src/sources/gloomberb-cloud/normalizers.ts +16 -1
- package/src/sources/gloomberb-cloud/perpetuals.ts +49 -1
- package/src/sources/listing-symbols.ts +37 -0
- package/src/sources/provider-errors.ts +16 -2
- package/src/sources/provider-router/batches.ts +10 -2
- package/src/sources/provider-router/financial-routes.ts +21 -3
- package/src/sources/provider-router/financials.ts +15 -2
- package/src/sources/provider-router/history.ts +58 -15
- package/src/sources/provider-router/index.ts +146 -10
- package/src/sources/provider-router/primary.ts +1 -1
- package/src/sources/provider-router/search.ts +13 -2
- package/src/state/app/bootstrap.ts +23 -0
- package/src/state/app/context/index.tsx +3 -0
- package/src/state/hooks/inline-tickers.ts +30 -5
- package/src/sync/auth-transition.ts +19 -9
- package/src/sync/baseline.ts +10 -4
- package/src/sync/controller.ts +67 -17
- package/src/sync/core-contributors.ts +46 -14
- package/src/sync/react.ts +4 -1
- package/src/sync/types.ts +3 -0
- package/src/team/collections-sync.ts +2 -1
- package/src/team/collections.ts +178 -17
- package/src/telemetry/crash-reports.ts +17 -4
- package/src/telemetry/usage-counts.ts +0 -18
- package/src/test-support/builtin-panes.ts +1 -1
- package/src/theme/colors.ts +11 -30
- package/src/theme/ui-tokens.ts +37 -1
- package/src/tickers/company-name-listing.ts +210 -33
- package/src/tickers/company-name.ts +59 -0
- package/src/tickers/index-roots.ts +47 -0
- package/src/tickers/instrument-label.ts +5 -1
- package/src/tickers/listing-venues.ts +23 -0
- package/src/tickers/metadata.ts +10 -0
- package/src/tickers/perpetual-listing.ts +5 -2
- package/src/tickers/search/bare-symbol.ts +36 -0
- package/src/tickers/search/home-listing.ts +75 -0
- package/src/tickers/search/index.ts +111 -33
- package/src/tickers/search/ranking.ts +64 -5
- package/src/tickers/search/types.ts +5 -0
- package/src/tickers/search/upsert.ts +29 -0
- package/src/tickers/terminal-codes.ts +416 -40
- package/src/time-series/bar-aggregation.ts +243 -0
- package/src/time-series/base-series.ts +315 -0
- package/src/time-series/chart-bounds.ts +349 -0
- package/src/time-series/chart-seed.ts +142 -0
- package/src/time-series/daily-valuation.ts +62 -0
- package/src/time-series/economic.ts +5 -0
- package/src/time-series/field-catalog.ts +1 -3
- package/src/time-series/forward-valuation.ts +32 -0
- package/src/time-series/fundamentals.ts +173 -10
- package/src/time-series/history-acquisition.ts +499 -0
- package/src/time-series/hooks.ts +1 -0
- package/src/time-series/leverage.ts +100 -0
- package/src/time-series/market-resolution.ts +4 -2
- package/src/time-series/market.ts +2 -1
- package/src/time-series/price-comparison.ts +175 -30
- package/src/time-series/price-units.ts +72 -2
- package/src/time-series/range.ts +9 -1
- package/src/time-series/resolution.ts +174 -16
- package/src/time-series/resolve-context.ts +161 -0
- package/src/time-series/resolve.ts +185 -1587
- package/src/time-series/series-name.ts +38 -0
- package/src/time-series/series-presentation.ts +242 -0
- package/src/time-series/spec.ts +13 -7
- package/src/time-series/studies.ts +377 -82
- package/src/time-series/tail-reconcile.ts +121 -0
- package/src/time-series/transforms.ts +1 -0
- package/src/time-series/types.ts +34 -2
- package/src/time-series/use-chart-resolution.ts +4 -5
- package/src/time-series/valuation-releases.ts +39 -0
- package/src/types/broker.ts +10 -0
- package/src/types/config.ts +14 -0
- package/src/types/data-provider.ts +23 -1
- package/src/types/desktop-window.ts +2 -0
- package/src/types/exchange-rate.ts +6 -0
- package/src/types/financials.ts +145 -8
- package/src/types/headless.ts +117 -9
- package/src/types/instrument.ts +6 -0
- package/src/types/plugin.ts +66 -9
- package/src/types/price-history.ts +2 -0
- package/src/types/ticker.ts +13 -0
- package/src/types/trading.ts +59 -1
- package/src/ui/ascii-font.ts +13 -1
- package/src/ui/host.tsx +6 -1
- package/src/updater/command-names.ts +180 -0
- package/src/updater/index.ts +10 -5
- package/src/utils/calendar-date.ts +32 -15
- package/src/utils/cash-runway.ts +241 -0
- package/src/utils/central-banks.ts +42 -0
- package/src/utils/cli-output.ts +259 -80
- package/src/utils/contract-month.ts +16 -0
- package/src/utils/crypto-pair.ts +61 -3
- package/src/utils/currency-units.ts +29 -0
- package/src/utils/datetime-format.ts +10 -0
- package/src/utils/debug-log.ts +1 -1
- package/src/utils/decimal-comma.ts +39 -6
- package/src/utils/exchange-announcements.ts +71 -0
- package/src/utils/exchange-rate-snapshot.ts +10 -0
- package/src/utils/financial-statements.ts +89 -5
- package/src/utils/format.ts +34 -16
- package/src/utils/fundamentals.ts +150 -34
- package/src/utils/fx-market-hours.ts +10 -1
- package/src/utils/latest-financial-period.ts +8 -0
- package/src/utils/linux-libc.ts +54 -0
- package/src/utils/market-capitalization.ts +111 -15
- package/src/utils/max-drawdown.ts +64 -0
- package/src/utils/network-failure.ts +86 -0
- package/src/utils/option-expiry.ts +186 -7
- package/src/utils/options.ts +10 -0
- package/src/utils/plugin-proxy-hosts.json +1 -0
- package/src/utils/price-earnings.ts +11 -5
- package/src/utils/price-history.ts +23 -8
- package/src/utils/price-window.ts +131 -0
- package/src/utils/release-date.ts +47 -0
- package/src/utils/sec.ts +3 -0
- package/src/utils/throttled-fetch.ts +11 -4
- package/src/utils/trailing-eps.ts +67 -0
- package/src/utils/typed-text.ts +21 -0
- package/src/utils/utc-time.ts +24 -1
- package/src/version.ts +6 -0
- package/src/cli/pane-functions/screenshot.ts +0 -2122
- package/src/renderers/browser/first-screen.ts +0 -193
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
<img src="src/assets/gloomberb-logo.svg" alt="
|
|
3
|
+
<img src="src/assets/gloomberb-logo.svg" alt="Gloom logo" width="76" />
|
|
4
4
|
|
|
5
|
-
#
|
|
5
|
+
# Gloom
|
|
6
6
|
|
|
7
7
|
**Open-source finance terminal. Fast, keyboard-driven, and extensible.**
|
|
8
8
|
|
|
@@ -21,7 +21,7 @@ Desktop app for macOS and Windows. Terminal UI for macOS, Linux, and Windows.
|
|
|
21
21
|
<br />
|
|
22
22
|
<br />
|
|
23
23
|
|
|
24
|
-
<img src="https://gloom.sh/landing-terminal.png" alt="
|
|
24
|
+
<img src="https://gloom.sh/landing-terminal.png" alt="Gloom terminal showing portfolio, watchlists, market data, and chart panels." width="720" />
|
|
25
25
|
|
|
26
26
|
<sub>Backed by <a href="https://adjacent.markets/?ref=gloomberb"><img src="docs/assets/adjacent.svg" alt="" width="12" height="12" /> Adjacent</a></sub>
|
|
27
27
|
|
|
@@ -45,7 +45,7 @@ For the terminal on **macOS or Linux**:
|
|
|
45
45
|
curl -fsSL gloom.sh/install | bash
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
The script downloads the prebuilt release from GitHub and checks its SHA-256 against the digest GitHub lists. Apple Silicon Macs get the desktop app and the `
|
|
48
|
+
The script downloads the prebuilt release from GitHub and checks its SHA-256 against the digest GitHub lists. Apple Silicon Macs get the desktop app and the `gloom` command; Linux and Intel Macs get the standalone binary. It asks for `sudo` only if the destination isn't writable. Prefer to download it yourself? See the [installation guide](docs/installation.md).
|
|
49
49
|
|
|
50
50
|
With [Bun](https://bun.sh), on any supported OS:
|
|
51
51
|
|
|
@@ -53,13 +53,13 @@ With [Bun](https://bun.sh), on any supported OS:
|
|
|
53
53
|
bun install -g gloomberb
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
Then run `
|
|
56
|
+
Then run `gloom`. The command was called `gloomberb` before 0.18.4, and that name still works. For chart graphics, use a Kitty-compatible terminal such as Ghostty, Kitty, or WezTerm. Windows Terminal draws charts as text; the desktop app draws them in full.
|
|
57
57
|
|
|
58
58
|
## Start
|
|
59
59
|
|
|
60
60
|
Press `Ctrl+P` for the command bar, or `` ` `` to search for a ticker. Try `DES AAPL` for company details or `GP NVDA` for a price chart. `HELP` lists commands and shortcuts.
|
|
61
61
|
|
|
62
|
-
The [user guide](docs/usage.md) covers charts, broker setup, shortcuts, and the CLI (`
|
|
62
|
+
The [user guide](docs/usage.md) covers charts, broker setup, shortcuts, and the CLI (`gloom quote AAPL`).
|
|
63
63
|
|
|
64
64
|
## Data and privacy
|
|
65
65
|
|
|
@@ -69,6 +69,6 @@ Crash reports and usage counts can be turned off. See [what is sent and how to o
|
|
|
69
69
|
|
|
70
70
|
## Plugins and contributing
|
|
71
71
|
|
|
72
|
-
Plugins add panes, data providers, broker connections, and commands. Install one from GitHub with `
|
|
72
|
+
Plugins add panes, data providers, broker connections, and commands. Install one from GitHub with `gloom install gloom-sh/gloom-tv`. See the [plugin guide](PLUGINS.md) and the [contributing guide](CONTRIBUTING.md).
|
|
73
73
|
|
|
74
|
-
[MIT licensed](LICENSE). Built with [OpenTUI](https://opentui.com/). [Sponsor
|
|
74
|
+
[MIT licensed](LICENSE). Built with [OpenTUI](https://opentui.com/). [Sponsor Gloom](https://gloom.sh/sponsor).
|
package/README.zh-CN.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
<img src="src/assets/gloomberb-logo.svg" alt="
|
|
3
|
+
<img src="src/assets/gloomberb-logo.svg" alt="Gloom 标志" width="76" />
|
|
4
4
|
|
|
5
|
-
#
|
|
5
|
+
# Gloom
|
|
6
6
|
|
|
7
7
|
**开源金融终端。快速、键盘驱动、可扩展。**
|
|
8
8
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<br />
|
|
22
22
|
<br />
|
|
23
23
|
|
|
24
|
-
<img src="https://gloom.sh/landing-terminal.png" alt="
|
|
24
|
+
<img src="https://gloom.sh/landing-terminal.png" alt="Gloom 终端界面,显示投资组合、自选列表、市场数据和图表面板。" width="720" />
|
|
25
25
|
|
|
26
26
|
<sub>由 <a href="https://adjacent.markets/?ref=gloomberb"><img src="docs/assets/adjacent.svg" alt="" width="12" height="12" /> Adjacent</a> 赞助支持</sub>
|
|
27
27
|
|
|
@@ -47,7 +47,7 @@ brew install --cask gloomberb
|
|
|
47
47
|
|
|
48
48
|
在 **Windows 11** 上,[下载安装程序](https://github.com/gloom-sh/gloomberb/releases/latest/download/stable-win-x64-GloomberbSetup.exe)。支持 x64,也可通过 x64 仿真在 ARM64 上运行。
|
|
49
49
|
|
|
50
|
-
两个平台的桌面安装程序均包含 `
|
|
50
|
+
两个平台的桌面安装程序均包含 `gloom` 终端命令。
|
|
51
51
|
|
|
52
52
|
### 终端版
|
|
53
53
|
|
|
@@ -65,7 +65,7 @@ curl -fsSL gloom.sh/install | bash
|
|
|
65
65
|
bun install -g gloomberb
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
运行 `
|
|
68
|
+
运行 `gloom` 即可启动。0.18.4 之前命令名为 `gloomberb`,该名称仍可使用。要显示图形,请使用兼容 Kitty 图形协议的终端,例如 Ghostty、Kitty 或 WezTerm。直接下载、安装位置与更新方式详见[安装指南(英文)](docs/installation.md)。
|
|
69
69
|
|
|
70
70
|
## 开始使用
|
|
71
71
|
|
|
@@ -86,9 +86,9 @@ bun install -g gloomberb
|
|
|
86
86
|
直接在 shell 中运行命令:
|
|
87
87
|
|
|
88
88
|
```bash
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
gloom quote AAPL
|
|
90
|
+
gloom quote AAPL --json
|
|
91
|
+
gloom help
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
默认输出便于阅读;脚本可使用 `--json`、`--csv` 或 `--ndjson` 获取结构化输出。命令与参数详见 [CLI 参考(英文)](docs/usage.md#cli)。
|
|
@@ -98,7 +98,7 @@ gloomberb help
|
|
|
98
98
|
插件可添加面板、数据源、券商连接与命令。从 GitHub 安装插件:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
|
|
101
|
+
gloom install gloom-sh/gloom-tv
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
详见[插件开发指南(英文)](PLUGINS.md)、[直播电视配置(英文)](docs/usage.md#live-tv)或[贡献指南(英文)](CONTRIBUTING.md)。
|
|
@@ -111,6 +111,6 @@ gloomberb install gloom-sh/gloom-tv
|
|
|
111
111
|
|
|
112
112
|
<a href="https://adjacent.markets/?ref=gloomberb"><img src="docs/assets/adjacent.svg" alt="Adjacent" width="56" /></a>
|
|
113
113
|
|
|
114
|
-
[Adjacent](https://adjacent.markets/?ref=gloomberb) 提供预测市场指数、参考利率与数据。感谢其对
|
|
114
|
+
[Adjacent](https://adjacent.markets/?ref=gloomberb) 提供预测市场指数、参考利率与数据。感谢其对 Gloom 开源开发的支持。
|
|
115
115
|
|
|
116
|
-
如需赞助
|
|
116
|
+
如需赞助 Gloom,请发送邮件至 [hello@gloom.sh](mailto:hello@gloom.sh)。
|
package/bin/{gloomberb → gloom}
RENAMED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
|
|
3
|
+
// The package installs this as both `gloom` and `gloomberb`.
|
|
4
|
+
//
|
|
3
5
|
// Bun applies patchedDependencies only to the root project, so a global
|
|
4
|
-
// `bun install -g
|
|
6
|
+
// `bun install -g` runs react-reconciler without
|
|
5
7
|
// patches/react-reconciler@0.33.0.patch. Its dev build then records a
|
|
6
8
|
// performance.measure for every component render, which Bun keeps forever.
|
|
7
9
|
// The reconciler reads console.timeStamp once at load to decide, so hide it
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gloomberb",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.5",
|
|
4
4
|
"packageManager": "bun@1.3.11",
|
|
5
5
|
"description": "Market research and portfolio tracker for the terminal",
|
|
6
6
|
"module": "src/public/index.ts",
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
"./broker": "./src/public/broker.ts"
|
|
36
36
|
},
|
|
37
37
|
"bin": {
|
|
38
|
-
"
|
|
38
|
+
"gloom": "bin/gloom",
|
|
39
|
+
"gloomberb": "bin/gloom"
|
|
39
40
|
},
|
|
40
41
|
"files": [
|
|
41
42
|
"bin",
|
|
@@ -82,6 +83,7 @@
|
|
|
82
83
|
"benchmark:tui:navigation": "bun run scripts/benchmark-tui-navigation.ts",
|
|
83
84
|
"benchmark:tui:compare": "bun run scripts/benchmark-tui-compare.ts",
|
|
84
85
|
"benchmark:tui:memory": "bun run scripts/benchmark-tui-memory.ts",
|
|
86
|
+
"benchmark:startup": "bun run scripts/benchmark-startup.ts",
|
|
85
87
|
"check:pane-chrome": "bun run scripts/pane-chrome/checks.ts",
|
|
86
88
|
"check:chat-mentions": "bun scripts/pane-chrome/chat-mentions.ts",
|
|
87
89
|
"check:pane-screenshot": "bun run scripts/pane-chrome/screenshot.ts",
|
|
@@ -91,6 +93,8 @@
|
|
|
91
93
|
"ui:benchmark": "bun run scripts/pane-chrome/ui-benchmark.ts",
|
|
92
94
|
"audit:ui": "bun run scripts/pane-chrome/ui-audit.ts",
|
|
93
95
|
"check:call-player": "bun run scripts/pane-chrome/call-player.ts",
|
|
96
|
+
"check:chart-axis-zoom": "bun run scripts/pane-chrome/chart-axis-zoom.ts",
|
|
97
|
+
"check:chart-panel-layout": "bun run scripts/pane-chrome/chart-panel-layout.ts",
|
|
94
98
|
"kit:page": "bun run scripts/pane-chrome/kit-page.ts",
|
|
95
99
|
"audit:ui:compare": "bun run scripts/pane-chrome/ui-audit-compare.ts",
|
|
96
100
|
"benchmark:pane-drag:compare": "bun run scripts/pane-chrome/frame-budget.ts",
|
|
@@ -74,7 +74,7 @@ index cdaa2bca0fabe577cb667056aa6f8f84211189c2..3839e5232742c2467180c344f51a30f1
|
|
|
74
74
|
|
|
75
75
|
// Encrypt function
|
|
76
76
|
diff --git a/dist/api/bun/core/Updater.ts b/dist/api/bun/core/Updater.ts
|
|
77
|
-
index 39daf6d341780af8e30c2c50327162863f5977ec..
|
|
77
|
+
index 39daf6d341780af8e30c2c50327162863f5977ec..65677cd1d642ef832cf4f90a315d3ffc977909a3 100644
|
|
78
78
|
--- a/dist/api/bun/core/Updater.ts
|
|
79
79
|
+++ b/dist/api/bun/core/Updater.ts
|
|
80
80
|
@@ -132,6 +132,19 @@ let updateInfo: {
|
|
@@ -254,6 +254,37 @@ index 39daf6d341780af8e30c2c50327162863f5977ec..0174d2ce1a9a4fa8ae0fd97367293fc5
|
|
|
254
254
|
|
|
255
255
|
// Ensure launcher binary is executable
|
|
256
256
|
const launcherPath = join(appBundleDir, "bin", "launcher");
|
|
257
|
+
@@ -1071,14 +1129,18 @@ del "%~f0"
|
|
258
|
+
// current process has exited first. The detached shell survives our
|
|
259
|
+
// exit and polls until the process is gone.
|
|
260
|
+
const pid = process.pid;
|
|
261
|
+
+ // The shell, sleep and open by their full paths, from /: a terminal
|
|
262
|
+
+ // launch can hand the app a PATH without them, and a spawn into a
|
|
263
|
+
+ // folder that is gone fails as if the shell were missing.
|
|
264
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
265
|
+
Bun.spawn(
|
|
266
|
+
[
|
|
267
|
+
- "sh",
|
|
268
|
+
+ "/bin/sh",
|
|
269
|
+
"-c",
|
|
270
|
+
- `while kill -0 ${pid} 2>/dev/null; do sleep 0.5; done; sleep 1; open "${runningAppBundlePath}"`,
|
|
271
|
+
+ `while kill -0 ${pid} 2>/dev/null; do /bin/sleep 0.5; done; /bin/sleep 1; /usr/bin/open "${runningAppBundlePath}"`,
|
|
272
|
+
],
|
|
273
|
+
{
|
|
274
|
+
+ cwd: "/",
|
|
275
|
+
detached: true,
|
|
276
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
277
|
+
} as any,
|
|
278
|
+
@@ -1087,7 +1149,8 @@ del "%~f0"
|
|
279
|
+
// On Linux, launch the launcher binary inside the app directory
|
|
280
|
+
const launcherPath = join(runningAppBundlePath, "bin", "launcher");
|
|
281
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
282
|
+
- Bun.spawn(["sh", "-c", `"${launcherPath}" &`], {
|
|
283
|
+
+ Bun.spawn(["/bin/sh", "-c", `"${launcherPath}" &`], {
|
|
284
|
+
+ cwd: "/",
|
|
285
|
+
detached: true,
|
|
286
|
+
} as any);
|
|
287
|
+
}
|
|
257
288
|
diff --git a/dist/api/bun/preload/.generated/compiled.ts b/dist/api/bun/preload/.generated/compiled.ts
|
|
258
289
|
index 3ab1d7d8de8938ae60823650fd3a29b952a76cb6..e0e841e6a87ce41533c6bdda8d29400aaf478e31 100644
|
|
259
290
|
--- a/dist/api/bun/preload/.generated/compiled.ts
|
|
@@ -125,13 +125,17 @@ export async function performEmailAuth(mode: AccountMode, email: string, passwor
|
|
|
125
125
|
} else {
|
|
126
126
|
user = await apiClient.signIn(email, password);
|
|
127
127
|
}
|
|
128
|
-
if (
|
|
129
|
-
await apiClient.sendVerification().catch(logFailure("account-auth", "Verification email request failed"));
|
|
130
|
-
}
|
|
128
|
+
if (apiClient.getCurrentUser()?.id !== user.id) throw new Error("Another sign-in replaced this request.");
|
|
131
129
|
const sessionToken = apiClient.getSessionToken();
|
|
132
130
|
if (sessionToken) {
|
|
133
131
|
chatController.adoptSession(sessionToken, user);
|
|
134
132
|
}
|
|
133
|
+
if (!user.emailVerified) {
|
|
134
|
+
await apiClient.sendVerification().catch(logFailure("account-auth", "Verification email request failed"));
|
|
135
|
+
}
|
|
136
|
+
if (apiClient.getSessionToken() !== sessionToken || apiClient.getCurrentUser()?.id !== user.id) {
|
|
137
|
+
throw new Error("Another sign-in replaced this request.");
|
|
138
|
+
}
|
|
135
139
|
identifyResearchUser();
|
|
136
140
|
await chatController.refreshSession().catch(logFailure("account-auth", "Session refresh after email authentication failed"));
|
|
137
141
|
return user;
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What follows "Start free trial": checkout opens in the browser, and this
|
|
3
|
+
* dialog says so, keeps the way back to it and waits for Pro to arrive. The
|
|
4
|
+
* browser button reopens the same checkout instead of starting another, and
|
|
5
|
+
* a terminal that cannot open a browser (over SSH, say) gets the short link
|
|
6
|
+
* and its QR code to finish on any device.
|
|
7
|
+
*/
|
|
8
|
+
import { useCallback, useEffect, useState } from "react";
|
|
9
|
+
import { apiClient } from "../api-client";
|
|
10
|
+
import { ApiRequestError } from "../api-client/errors";
|
|
11
|
+
import { hasProAccess, usePlanAccess, type PlanAccessUser } from "../api-client/plan-access";
|
|
12
|
+
import { Button } from "../components/ui/button";
|
|
13
|
+
import { DialogActions } from "../components/ui/dialog-actions";
|
|
14
|
+
import { FORM_DIALOG_WIDTH, DialogFrame } from "../components/ui/frame";
|
|
15
|
+
import { SignInCodePanel } from "../components/sign-in-code-panel";
|
|
16
|
+
import { t } from "../i18n";
|
|
17
|
+
import { useAppLanguage } from "../i18n/react";
|
|
18
|
+
import { useViewport } from "../react/input";
|
|
19
|
+
import { colors } from "../theme/colors";
|
|
20
|
+
import { Box, Text, TextAttributes, useUiCapabilities } from "../ui";
|
|
21
|
+
import { type DialogApi, type PromptContext, useDialogKeyboard } from "../ui/dialog";
|
|
22
|
+
import { logFailure } from "../utils/log-failure";
|
|
23
|
+
import { accountSession } from "./session";
|
|
24
|
+
|
|
25
|
+
/** The checkout once it exists; the browser may still be opening it. */
|
|
26
|
+
export interface CheckoutHandoffTarget {
|
|
27
|
+
/** The checkout page itself, which the browser button opens again. */
|
|
28
|
+
url: string;
|
|
29
|
+
/** A short link to the same checkout, to read or scan; null when the server sent none. */
|
|
30
|
+
link: string | null;
|
|
31
|
+
/** Settles false when no browser could be opened from here. */
|
|
32
|
+
opened: Promise<boolean>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Where the account stands while checkout is open in the browser. */
|
|
36
|
+
type CheckoutHandoffPlan = "waiting" | "pro" | "verify";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Pro once the account has it; "verify" when checkout went through but Pro
|
|
40
|
+
* waits for the email to be confirmed, which an unverified account can reach.
|
|
41
|
+
*/
|
|
42
|
+
function checkoutHandoffPlan(user: PlanAccessUser | null | undefined): CheckoutHandoffPlan {
|
|
43
|
+
if (hasProAccess(user)) return "pro";
|
|
44
|
+
if (user?.plan === "pro" && user.emailVerified !== true) return "verify";
|
|
45
|
+
return "waiting";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** How often the account is asked again while checkout is open. */
|
|
49
|
+
const POLL_MS = 5_000;
|
|
50
|
+
let pollMs = POLL_MS;
|
|
51
|
+
|
|
52
|
+
/** A shorter poll, so a test sees Pro arrive without waiting seconds; no argument restores it. */
|
|
53
|
+
export function setCheckoutHandoffPollForTests(ms: number = POLL_MS): void {
|
|
54
|
+
pollMs = ms;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Signed out, or a session the server no longer takes: asking again cannot help. */
|
|
58
|
+
function isAuthFailure(error: unknown): boolean {
|
|
59
|
+
return error instanceof ApiRequestError && (error.status === 401 || error.status === 403);
|
|
60
|
+
}
|
|
61
|
+
/** Polling stops after this; coming back to the app still refreshes the account. */
|
|
62
|
+
const POLL_FOR_MS = 15 * 60_000;
|
|
63
|
+
/** How long "Pro is on" stays before the dialog closes itself. */
|
|
64
|
+
const PRO_HOLD_MS = 1_500;
|
|
65
|
+
|
|
66
|
+
/** Rows around the panel, as in the sign-in dialog: margins, frame, title block and key line. */
|
|
67
|
+
const TERMINAL_DIALOG_ROWS = 12;
|
|
68
|
+
const DESKTOP_DIALOG_ROWS = 10;
|
|
69
|
+
|
|
70
|
+
function handoffStatus(target: { url: string } | null, plan: CheckoutHandoffPlan): { text: string; color: string } {
|
|
71
|
+
if (plan === "pro") return { text: t("Pro is on."), color: colors.positive };
|
|
72
|
+
if (plan === "verify") return { text: t("Checkout done. Confirm your email to turn Pro on."), color: colors.warning };
|
|
73
|
+
if (!target) return { text: t("Opening checkout..."), color: colors.textDim };
|
|
74
|
+
return { text: t("Waiting for checkout..."), color: colors.textDim };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function CheckoutHandoffDialog({
|
|
78
|
+
resolve,
|
|
79
|
+
dismiss,
|
|
80
|
+
target: pending,
|
|
81
|
+
}: PromptContext<true> & { target: Promise<CheckoutHandoffTarget> }) {
|
|
82
|
+
useAppLanguage();
|
|
83
|
+
const { nativePaneChrome } = useUiCapabilities();
|
|
84
|
+
const { height: termHeight } = useViewport();
|
|
85
|
+
const [target, setTarget] = useState<CheckoutHandoffTarget | null>(null);
|
|
86
|
+
// Null while the browser is still opening it; the button, link and QR show already.
|
|
87
|
+
const [opened, setOpened] = useState<boolean | null>(null);
|
|
88
|
+
// Re-renders when the account changes; the plan is read from the account itself.
|
|
89
|
+
usePlanAccess();
|
|
90
|
+
const plan = checkoutHandoffPlan(apiClient.getCurrentUser());
|
|
91
|
+
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
let live = true;
|
|
94
|
+
// A checkout that could not be created closes this; the caller opens the Cloud page.
|
|
95
|
+
void pending.then(
|
|
96
|
+
(value) => {
|
|
97
|
+
if (!live) return;
|
|
98
|
+
setTarget(value);
|
|
99
|
+
void value.opened.then((result) => { if (live) setOpened(result); });
|
|
100
|
+
},
|
|
101
|
+
() => { if (live) dismiss(); },
|
|
102
|
+
);
|
|
103
|
+
return () => {
|
|
104
|
+
live = false;
|
|
105
|
+
};
|
|
106
|
+
}, [dismiss, pending]);
|
|
107
|
+
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if (!target || plan !== "waiting") return;
|
|
110
|
+
let live = true;
|
|
111
|
+
let inFlight = false;
|
|
112
|
+
const stopAt = Date.now() + POLL_FOR_MS;
|
|
113
|
+
const timer = setInterval(() => {
|
|
114
|
+
if (!live || inFlight) return;
|
|
115
|
+
if (Date.now() > stopAt || !apiClient.isSignedIn()) {
|
|
116
|
+
clearInterval(timer);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
inFlight = true;
|
|
120
|
+
// A plain read; the session (and with it every footer and tab) is
|
|
121
|
+
// refreshed only once the account has changed.
|
|
122
|
+
void apiClient.getAccountProfile()
|
|
123
|
+
.then((profile) => {
|
|
124
|
+
if (live && checkoutHandoffPlan(profile) !== "waiting") return accountSession.refreshSession();
|
|
125
|
+
})
|
|
126
|
+
.catch((error: unknown) => {
|
|
127
|
+
if (isAuthFailure(error)) clearInterval(timer);
|
|
128
|
+
else logFailure("account-upgrade", "Checking for Pro after checkout failed")(error);
|
|
129
|
+
})
|
|
130
|
+
.finally(() => {
|
|
131
|
+
inFlight = false;
|
|
132
|
+
});
|
|
133
|
+
}, pollMs);
|
|
134
|
+
return () => {
|
|
135
|
+
live = false;
|
|
136
|
+
clearInterval(timer);
|
|
137
|
+
};
|
|
138
|
+
}, [plan, target]);
|
|
139
|
+
|
|
140
|
+
const finish = useCallback(() => resolve(true), [resolve]);
|
|
141
|
+
useEffect(() => {
|
|
142
|
+
if (plan !== "pro") return;
|
|
143
|
+
const timer = setTimeout(finish, PRO_HOLD_MS);
|
|
144
|
+
return () => clearTimeout(timer);
|
|
145
|
+
}, [finish, plan]);
|
|
146
|
+
|
|
147
|
+
useDialogKeyboard((event) => {
|
|
148
|
+
if (event.name === "escape") {
|
|
149
|
+
event.stopPropagation?.();
|
|
150
|
+
dismiss();
|
|
151
|
+
} else if ((event.name === "enter" || event.name === "return") && plan === "pro") {
|
|
152
|
+
event.stopPropagation?.();
|
|
153
|
+
finish();
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
const title = t("Finish checkout in your browser");
|
|
158
|
+
// Where nothing opened, the terminal host left Stripe's own link on the clipboard.
|
|
159
|
+
const subtitle = !target || opened !== false
|
|
160
|
+
? t("Pro turns on here as soon as it's done.")
|
|
161
|
+
: target.link
|
|
162
|
+
? t("No browser opens from here. Open the link on any device.")
|
|
163
|
+
: t("No browser opens from here. Paste the copied link in a browser.");
|
|
164
|
+
const panel = (rows: number) => (
|
|
165
|
+
<SignInCodePanel
|
|
166
|
+
url={target?.url ?? null}
|
|
167
|
+
link={target?.link ?? null}
|
|
168
|
+
code={null}
|
|
169
|
+
status={handoffStatus(target, plan)}
|
|
170
|
+
height={Math.max(4, rows)}
|
|
171
|
+
shortcutScope="checkout-handoff:browser"
|
|
172
|
+
/>
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
if (nativePaneChrome) {
|
|
176
|
+
return (
|
|
177
|
+
<Box width={FORM_DIALOG_WIDTH} maxWidth="calc(100vw - 72px)" flexDirection="column">
|
|
178
|
+
<DialogFrame title={title} subtitle={subtitle} onClose={dismiss} desktopFooter={null}>
|
|
179
|
+
{panel(termHeight - DESKTOP_DIALOG_ROWS)}
|
|
180
|
+
<Box style={{ marginTop: "var(--gloom-space-md)" }}>
|
|
181
|
+
<DialogActions alignEnd>
|
|
182
|
+
<Button label="Close" variant="secondary" desktopShortcut="Esc" onPress={dismiss} />
|
|
183
|
+
</DialogActions>
|
|
184
|
+
</Box>
|
|
185
|
+
</DialogFrame>
|
|
186
|
+
</Box>
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return (
|
|
191
|
+
<Box flexDirection="column" alignItems="center">
|
|
192
|
+
<Box height={1}>
|
|
193
|
+
<Text fg={colors.textBright} attributes={TextAttributes.BOLD}>{title}</Text>
|
|
194
|
+
</Box>
|
|
195
|
+
<Box height={1}>
|
|
196
|
+
<Text fg={colors.textDim}>{subtitle}</Text>
|
|
197
|
+
</Box>
|
|
198
|
+
<Box height={1} />
|
|
199
|
+
{panel(termHeight - TERMINAL_DIALOG_ROWS)}
|
|
200
|
+
<Box height={1} />
|
|
201
|
+
<Box height={1}>
|
|
202
|
+
<Text fg={colors.textMuted}>{t("esc to close")}</Text>
|
|
203
|
+
</Box>
|
|
204
|
+
</Box>
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Shows the hand-off while `target` creates the checkout, with the way back
|
|
210
|
+
* to it as soon as it exists, and keeps it up until Pro arrives or the person
|
|
211
|
+
* closes it. Resolves true once the
|
|
212
|
+
* account has Pro, otherwise when it is closed.
|
|
213
|
+
*/
|
|
214
|
+
export async function promptCheckoutHandoff(
|
|
215
|
+
dialog: DialogApi,
|
|
216
|
+
target: Promise<CheckoutHandoffTarget>,
|
|
217
|
+
): Promise<boolean> {
|
|
218
|
+
const result = await dialog
|
|
219
|
+
.prompt<true>({
|
|
220
|
+
size: "full",
|
|
221
|
+
content: (context) => <CheckoutHandoffDialog {...context} target={target} />,
|
|
222
|
+
})
|
|
223
|
+
.catch(logFailure("account-upgrade", "Checkout hand-off failed", undefined));
|
|
224
|
+
return result === true;
|
|
225
|
+
}
|
|
@@ -69,13 +69,13 @@ function deviceSignInStatus(snapshot: DeviceSignInSnapshot): { text: string; col
|
|
|
69
69
|
case "denied":
|
|
70
70
|
return { text: t("Denied. Press enter to request a new code."), color: colors.negative };
|
|
71
71
|
case "error":
|
|
72
|
-
return { text: t("Can't reach
|
|
72
|
+
return { text: t("Can't reach Gloom Cloud. Retrying..."), color: colors.warning };
|
|
73
73
|
case "waiting":
|
|
74
74
|
return snapshot.error
|
|
75
75
|
? { text: t("Connection problem, retrying..."), color: colors.warning }
|
|
76
76
|
: { text: t("Waiting for approval..."), color: colors.textDim };
|
|
77
77
|
default:
|
|
78
|
-
return { text: t("Contacting
|
|
78
|
+
return { text: t("Contacting Gloom Cloud..."), color: colors.textDim };
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -54,7 +54,7 @@ const POLL_BACKOFF_FACTOR = 2;
|
|
|
54
54
|
|
|
55
55
|
function defaultClientName(): string {
|
|
56
56
|
const name = typeof process !== "undefined" ? process.env.HOSTNAME?.trim() : "";
|
|
57
|
-
return name && name !== "localhost" ? name : "
|
|
57
|
+
return name && name !== "localhost" ? name : "Gloom";
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
function defaultClientPlatform(): string | undefined {
|
|
@@ -63,7 +63,7 @@ function defaultClientPlatform(): string | undefined {
|
|
|
63
63
|
|
|
64
64
|
function errorMessage(error: unknown): string {
|
|
65
65
|
if (error instanceof Error && error.message.trim()) return error.message.trim();
|
|
66
|
-
return "Could not reach
|
|
66
|
+
return "Could not reach Gloom Cloud.";
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
export function parseDeviceCodeExpiryMs(expiresAt: unknown, now: number): number {
|
|
@@ -74,7 +74,7 @@ export function upgradeDialogCopy(
|
|
|
74
74
|
const firstCharge = formatTrialEnd(new Date(now.getTime() + days * MS_PER_DAY));
|
|
75
75
|
return {
|
|
76
76
|
title: tf("Try Pro free for {days} days", { days }),
|
|
77
|
-
subtitle: tf("$0 today, then {price} from {date}. Cancel before and you pay nothing.", {
|
|
77
|
+
subtitle: tf("$0 today, then {price} from {date}. Card required. Cancel before and you pay nothing.", {
|
|
78
78
|
price,
|
|
79
79
|
date: firstCharge ?? "",
|
|
80
80
|
}),
|
package/src/api-client/askg.ts
CHANGED
|
@@ -375,7 +375,7 @@ export function classifyASKGRequestError(error: unknown): ASKGTransportError {
|
|
|
375
375
|
if (error.status === 426) {
|
|
376
376
|
return new ASKGTransportError(
|
|
377
377
|
"protocol",
|
|
378
|
-
`Ask Gloom no longer speaks protocol v${ASKG_PROTOCOL_VERSION}. Update
|
|
378
|
+
`Ask Gloom no longer speaks protocol v${ASKG_PROTOCOL_VERSION}. Update Gloom.`,
|
|
379
379
|
{ status: error.status },
|
|
380
380
|
);
|
|
381
381
|
}
|
|
@@ -465,7 +465,7 @@ export class CloudASKGApi implements ASKGTransport {
|
|
|
465
465
|
if (response?.protocolVersion !== ASKG_PROTOCOL_VERSION) {
|
|
466
466
|
throw new ASKGTransportError(
|
|
467
467
|
"protocol",
|
|
468
|
-
`Ask Gloom speaks protocol v${response?.protocolVersion ?? "?"}, this build speaks v${ASKG_PROTOCOL_VERSION}. Update
|
|
468
|
+
`Ask Gloom speaks protocol v${response?.protocolVersion ?? "?"}, this build speaks v${ASKG_PROTOCOL_VERSION}. Update Gloom.`,
|
|
469
469
|
);
|
|
470
470
|
}
|
|
471
471
|
return response;
|
package/src/api-client/auth.ts
CHANGED
|
@@ -74,6 +74,7 @@ export class CloudAuthApi {
|
|
|
74
74
|
username: string,
|
|
75
75
|
name: string,
|
|
76
76
|
password: string,
|
|
77
|
+
isCurrent: () => boolean = () => true,
|
|
77
78
|
): Promise<AuthUser> {
|
|
78
79
|
const result = await this.options.request<{ user: AuthUser }>(
|
|
79
80
|
"/auth/sign-up/email",
|
|
@@ -81,24 +82,28 @@ export class CloudAuthApi {
|
|
|
81
82
|
method: "POST",
|
|
82
83
|
body: JSON.stringify({ email, username, name, password }),
|
|
83
84
|
},
|
|
85
|
+
isCurrent,
|
|
84
86
|
);
|
|
87
|
+
if (!isCurrent()) throw new Error("Another sign-in replaced this request.");
|
|
85
88
|
this.options.requireCapturedSession(
|
|
86
|
-
"Account created, but
|
|
89
|
+
"Account created, but Gloom could not save the login session. Please try logging in again.",
|
|
87
90
|
);
|
|
88
91
|
this.options.setCurrentUser(result.user);
|
|
89
92
|
return result.user;
|
|
90
93
|
}
|
|
91
94
|
|
|
92
|
-
async signIn(email: string, password: string): Promise<AuthUser> {
|
|
95
|
+
async signIn(email: string, password: string, isCurrent: () => boolean = () => true): Promise<AuthUser> {
|
|
93
96
|
const result = await this.options.request<{ user: AuthUser }>(
|
|
94
97
|
"/auth/sign-in/email",
|
|
95
98
|
{
|
|
96
99
|
method: "POST",
|
|
97
100
|
body: JSON.stringify({ email, password }),
|
|
98
101
|
},
|
|
102
|
+
isCurrent,
|
|
99
103
|
);
|
|
104
|
+
if (!isCurrent()) throw new Error("Another sign-in replaced this request.");
|
|
100
105
|
this.options.requireCapturedSession(
|
|
101
|
-
"Logged in, but
|
|
106
|
+
"Logged in, but Gloom could not save the login session. Please try again.",
|
|
102
107
|
);
|
|
103
108
|
this.options.setCurrentUser(result.user);
|
|
104
109
|
return result.user;
|
|
@@ -127,11 +132,11 @@ export class CloudAuthApi {
|
|
|
127
132
|
});
|
|
128
133
|
}
|
|
129
134
|
|
|
130
|
-
async signOut(): Promise<void> {
|
|
135
|
+
async signOut(isCurrent: () => boolean = () => true): Promise<void> {
|
|
131
136
|
try {
|
|
132
|
-
await this.options.request("/auth/sign-out", { method: "POST" });
|
|
137
|
+
await this.options.request("/auth/sign-out", { method: "POST" }, isCurrent);
|
|
133
138
|
} finally {
|
|
134
|
-
this.options.setSessionToken(null);
|
|
139
|
+
if (isCurrent()) this.options.setSessionToken(null);
|
|
135
140
|
}
|
|
136
141
|
}
|
|
137
142
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
type QuoteMatchMode = "exact" | "whitespace" | "normalized"
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/** Regulator events, then the ones a company or its exchange dates itself (results, meetings, deals). */
|
|
4
|
+
export const CATALYST_TYPES = ["regulatory", "clinical", "litigation", "antitrust", "recall", "sanctions", "export_control", "tariff", "rulemaking", "approval", "advisory", "pdufa", "results", "shareholder_meeting", "merger_vote", "deal_closing", "investor_day"] as const
|
|
4
5
|
export type CatalystType = (typeof CATALYST_TYPES)[number]
|
|
5
6
|
type DatePrecision = "day" | "month" | "year"
|
|
6
7
|
interface CatalystIdentifiers {
|
|
@@ -31,6 +31,12 @@ export interface CentralBankRow {
|
|
|
31
31
|
confirmationSourceUrl?: string | null
|
|
32
32
|
/** The bank's next decision from its own published calendar, or China's next 1-year LPR fixing (`kind`). */
|
|
33
33
|
nextMeeting: { date: string; sourceUrl: string; verifiedAt: string; kind?: "decision" | "fixing" } | null
|
|
34
|
+
/**
|
|
35
|
+
* The bank's latest kept decision (China's LPR fixing) on or before `lastChangeDate`, already announced: when the
|
|
36
|
+
* move was decided, which the observed change date can trail by days. Null when the kept calendar does not reach back
|
|
37
|
+
* that far or no change is observed; older servers leave it out.
|
|
38
|
+
*/
|
|
39
|
+
lastDecision?: { date: string; sourceUrl: string; verifiedAt: string; kind?: "decision" | "fixing" } | null
|
|
34
40
|
/** Why `nextMeeting` is null; older servers leave it out, and a null meeting then reads as not published. */
|
|
35
41
|
nextMeetingStatus?: "scheduled" | "not-published" | "not-verified" | "no-policy-rate"
|
|
36
42
|
/** The BIS series definition and breaks, also in `notes`: history a citation of the latest rate leaves out. */
|
|
@@ -23,7 +23,11 @@ export class CloudCollectionsApi {
|
|
|
23
23
|
async putTeamCollectionItem(
|
|
24
24
|
teamId: string,
|
|
25
25
|
collectionId: string,
|
|
26
|
-
item: {
|
|
26
|
+
item: {
|
|
27
|
+
symbol: string; exchange?: string | null; quantity?: number | null; note?: string | null;
|
|
28
|
+
/** Left out, the server keeps what it has; a null date clears its date. */
|
|
29
|
+
dateAcquired?: string | null; currency?: string; costFxRate?: number | null; costFxCurrency?: string | null;
|
|
30
|
+
},
|
|
27
31
|
): Promise<TeamCollectionItem> {
|
|
28
32
|
return this.request(`/teams/${encodeURIComponent(teamId)}/collections/${encodeURIComponent(collectionId)}/items`, {
|
|
29
33
|
method: "PUT",
|
package/src/api-client/cot.ts
CHANGED
|
@@ -29,6 +29,8 @@ interface CotMarket {
|
|
|
29
29
|
marketName: string
|
|
30
30
|
exchangeCode: string
|
|
31
31
|
commodityCode: string
|
|
32
|
+
/** What one contract is, in the CFTC's words: "CONTRACTS OF 100 TROY OUNCES". Null where the report states none. */
|
|
33
|
+
contractUnits?: string | null
|
|
32
34
|
}
|
|
33
35
|
export interface CotPayloadBase {
|
|
34
36
|
source: "CFTC"
|