gloomberb 0.18.2 → 0.18.4
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 +106 -5
- 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 +2 -2
- 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 +99 -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 +24 -5
- package/src/api-client/market-discovery.ts +14 -0
- package/src/api-client/members.ts +6 -0
- package/src/api-client/mna.ts +6 -0
- package/src/api-client/paths.ts +18 -1
- package/src/api-client/request.ts +26 -7
- 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/telemetry.ts +17 -0
- package/src/api-client/themes.ts +7 -1
- package/src/api-client/types.ts +90 -2
- package/src/app/global-shortcuts.ts +1 -16
- package/src/app/pane-runtime/plugin-bindings.ts +9 -2
- 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/runtime/update.ts +28 -8
- package/src/app/star-prompt/status-line.tsx +2 -2
- package/src/architecture/core-builtin-allowlist.json +5 -2
- package/src/architecture/pane-tabs-allowlist.json +65 -0
- 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 +4 -2
- package/src/cli/commands/keybindings.ts +2 -2
- package/src/cli/commands/market.ts +1189 -296
- package/src/cli/commands/news-hints.ts +2 -2
- package/src/cli/commands/news-search.ts +59 -6
- package/src/cli/commands/options-leaps.ts +41 -26
- package/src/cli/commands/overview.ts +121 -48
- package/src/cli/commands/plugins.ts +9 -9
- package/src/cli/commands/remote.ts +13 -10
- package/src/cli/commands/search.ts +64 -44
- package/src/cli/commands/system.ts +27 -19
- package/src/cli/commands/themes.ts +1 -1
- package/src/cli/commands/ticker.ts +272 -70
- 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 +20 -2
- package/src/cli/exit-codes.ts +1 -1
- package/src/cli/export-source.ts +10 -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 +64 -20
- package/src/cli/help.ts +20 -14
- package/src/cli/history-export.ts +126 -0
- package/src/cli/history-rows.ts +196 -43
- package/src/cli/index-roots.ts +5 -45
- package/src/cli/index.ts +32 -18
- package/src/cli/issuer-membership.ts +103 -0
- package/src/cli/known-gaps.ts +118 -25
- package/src/cli/listing-arg.ts +315 -43
- package/src/cli/name-entries.ts +73 -22
- 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 +77 -20
- package/src/cli/pane-functions/catalog.ts +40 -23
- package/src/cli/pane-functions/discovery.ts +1 -1
- package/src/cli/pane-functions/dom.ts +12 -8
- package/src/cli/pane-functions/financial-ratio-shot.ts +2 -2
- package/src/cli/pane-functions/freshness.ts +174 -23
- package/src/cli/pane-functions/function-help.ts +66 -27
- package/src/cli/pane-functions/headless.ts +48 -16
- package/src/cli/pane-functions/index.ts +82 -21
- 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 +5 -5
- package/src/cli/pane-functions/resolver.ts +65 -14
- 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 +38 -3
- package/src/cli/report-tables.ts +190 -27
- package/src/cli/restore-plugins.ts +29 -14
- package/src/cli/result.ts +122 -25
- 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 +226 -60
- 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 +387 -21
- package/src/components/chart/composite/drawing-store.ts +26 -6
- package/src/components/chart/composite/interactions.ts +9 -3
- package/src/components/chart/composite/legend.tsx +75 -3
- package/src/components/chart/composite/levels.ts +5 -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-surface.tsx +316 -11
- package/src/components/chart/composite/price-axis-labels.tsx +27 -3
- package/src/components/chart/composite/rasterizer.ts +44 -19
- package/src/components/chart/composite/scene.ts +16 -4
- 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 +19 -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/routes/root/command-items.ts +32 -6
- 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/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/data-table/view.tsx +23 -3
- 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 +13 -6
- package/src/components/layout/detached-pane-shell.tsx +1 -0
- package/src/components/layout/floating-pane.tsx +1 -0
- package/src/components/layout/header.tsx +234 -60
- 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/model.ts +11 -5
- package/src/components/layout/pane/header.tsx +10 -3
- package/src/components/layout/pane/index.tsx +1 -0
- package/src/components/layout/pane/pane-tabs.tsx +9 -1
- 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-wizard.tsx +1 -0
- package/src/components/onboarding/portfolio-step/broker-setup-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 +5 -1
- 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/components/ui/stat-grid.tsx +28 -3
- package/src/components/ui/status.tsx +3 -1
- package/src/core/app-services.ts +4 -0
- package/src/core/state/app/layout.ts +4 -4
- 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 +84 -0
- package/src/docs/snapshot.json +65 -32
- package/src/i18n/es.ts +51 -12
- package/src/i18n/ja.ts +51 -12
- package/src/i18n/ko.ts +51 -12
- package/src/i18n/zh-cn.ts +51 -12
- package/src/i18n/zh-tw.ts +51 -12
- 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/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 +49 -7
- package/src/market-data/market/freshness.ts +34 -5
- package/src/market-data/market/period-return.ts +163 -0
- 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/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 +5 -1
- 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 +4 -2
- 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/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 +30 -18
- package/src/plugins/builtin/alerts/calendar-events.ts +378 -0
- package/src/plugins/builtin/alerts/cli.ts +485 -76
- package/src/plugins/builtin/alerts/command.ts +5 -10
- 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 +108 -5
- package/src/plugins/builtin/alerts/fired-log.ts +78 -0
- package/src/plugins/builtin/alerts/format.ts +2 -1
- package/src/plugins/builtin/alerts/headless.ts +100 -39
- package/src/plugins/builtin/alerts/history-pane.tsx +105 -62
- package/src/plugins/builtin/alerts/history-rows.ts +89 -0
- package/src/plugins/builtin/alerts/index.tsx +45 -18
- package/src/plugins/builtin/alerts/iv-level.ts +365 -0
- package/src/plugins/builtin/alerts/levels.ts +3 -3
- package/src/plugins/builtin/alerts/pane.tsx +97 -29
- 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 +77 -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 +13 -10
- package/src/plugins/builtin/alerts/targets.ts +12 -3
- 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 +107 -43
- package/src/plugins/builtin/attention/pane.tsx +22 -16
- 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 +12 -9
- package/src/plugins/builtin/backtest/export.ts +1 -1
- package/src/plugins/builtin/backtest/headless.ts +3 -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 +21 -12
- package/src/plugins/builtin/broker-manager/keyboard.ts +1 -1
- package/src/plugins/builtin/broker-manager/model.ts +12 -2
- 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 +45 -13
- package/src/plugins/builtin/broker-trading/dock.tsx +24 -4
- package/src/plugins/builtin/broker-trading/headless.ts +2 -1
- package/src/plugins/builtin/broker-trading/index.tsx +7 -1
- package/src/plugins/builtin/broker-trading/linked-orders.ts +148 -0
- package/src/plugins/builtin/broker-trading/order-feed.ts +75 -7
- 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 +115 -26
- package/src/plugins/builtin/broker-trading/ticket-parts.tsx +36 -7
- package/src/plugins/builtin/broker-trading/ticket.tsx +122 -36
- 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 +34 -18
- package/src/plugins/builtin/buildout/pane/status.tsx +0 -4
- package/src/plugins/builtin/builtin-plugin-meta.ts +1 -1
- package/src/plugins/builtin/catalysts/client.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 +49 -4
- package/src/plugins/builtin/catalysts/pane.tsx +9 -11
- 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 +1 -0
- package/src/plugins/builtin/chart-composer/chart-spec-edit.ts +2 -1
- package/src/plugins/builtin/chart-composer/chart-spec.ts +7 -0
- package/src/plugins/builtin/chart-composer/cli-options.ts +2 -5
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +2 -1
- package/src/plugins/builtin/chart-composer/editor/controller.ts +2 -0
- package/src/plugins/builtin/chart-composer/editor.tsx +4 -1
- package/src/plugins/builtin/chart-composer/headless-schema.ts +28 -26
- package/src/plugins/builtin/chart-composer/headless.ts +253 -35
- 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 +128 -28
- 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 +15 -21
- 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 +5 -6
- 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/index.tsx +1 -1
- package/src/plugins/builtin/chat/pane-links/open.ts +1 -1
- package/src/plugins/builtin/chat/people.ts +1 -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/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 +14 -8
- package/src/plugins/builtin/company-attention/app-rank.tsx +11 -10
- 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 +89 -31
- 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 +5 -4
- 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 +7 -4
- package/src/plugins/builtin/correlation/relationship/model.ts +1 -0
- package/src/plugins/builtin/correlation/settings.ts +1 -0
- 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 +7 -5
- 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/credit-documents/pane.tsx +8 -7
- 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/debt-maturities/pane.tsx +4 -3
- 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 +19 -12
- 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 +132 -20
- package/src/plugins/builtin/econ/detail-view.tsx +48 -10
- 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 +112 -25
- package/src/plugins/builtin/econ/print-watch.ts +2 -1
- package/src/plugins/builtin/econ/types.ts +32 -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 +13 -2
- 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 +103 -0
- package/src/plugins/builtin/econ-statistics/view.ts +16 -1
- package/src/plugins/builtin/equity-screener/client.ts +21 -3
- package/src/plugins/builtin/equity-screener/headless.ts +77 -5
- package/src/plugins/builtin/equity-screener/live.ts +1 -1
- package/src/plugins/builtin/equity-screener/model.ts +34 -0
- package/src/plugins/builtin/equity-screener/pane.tsx +148 -106
- 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/headless.ts +51 -6
- package/src/plugins/builtin/exposure/index.tsx +28 -2
- package/src/plugins/builtin/exposure/model.ts +7 -0
- package/src/plugins/builtin/exposure/pane.tsx +16 -10
- 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/model.ts +10 -9
- package/src/plugins/builtin/futures/returns.ts +8 -36
- package/src/plugins/builtin/futures/table.tsx +1 -1
- 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 +15 -8
- package/src/plugins/builtin/fx-matrix/headless.ts +32 -14
- package/src/plugins/builtin/fx-matrix/index.tsx +13 -11
- package/src/plugins/builtin/fx-matrix/live-legs.ts +22 -0
- package/src/plugins/builtin/fx-matrix/settings.ts +2 -1
- package/src/plugins/builtin/gpu/board.tsx +4 -1
- package/src/plugins/builtin/gpu/changes.tsx +10 -10
- package/src/plugins/builtin/gpu/equities.tsx +4 -1
- package/src/plugins/builtin/gpu/headless.ts +9 -4
- package/src/plugins/builtin/gpu/history.tsx +4 -2
- package/src/plugins/builtin/gpu/pane.tsx +5 -3
- package/src/plugins/builtin/help/index.tsx +13 -3
- 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 +15 -2
- package/src/plugins/builtin/holders/format.ts +28 -17
- package/src/plugins/builtin/holders/headless.ts +48 -8
- 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/thirteenf-match.ts +3 -1
- package/src/plugins/builtin/holders/treemap.tsx +2 -2
- package/src/plugins/builtin/insider/base-values.ts +11 -7
- package/src/plugins/builtin/insider/client.ts +3 -0
- package/src/plugins/builtin/insider/headless.ts +20 -7
- package/src/plugins/builtin/insider/index.tsx +17 -8
- package/src/plugins/builtin/insider/issuer.ts +34 -4
- package/src/plugins/builtin/insider/signals-client.ts +3 -3
- package/src/plugins/builtin/insider/signals.tsx +1 -1
- package/src/plugins/builtin/insider/table-model.ts +35 -13
- package/src/plugins/builtin/insider/table.tsx +5 -2
- 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/events.ts +145 -0
- package/src/plugins/builtin/iv-history/format.ts +3 -0
- package/src/plugins/builtin/iv-history/headless.ts +91 -7
- 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 +14 -8
- 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 +46 -10
- 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 +36 -21
- 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 +33 -11
- 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/headless.ts +6 -5
- package/src/plugins/builtin/members/pane.tsx +11 -4
- 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 +50 -15
- package/src/plugins/builtin/notes/export.ts +17 -6
- package/src/plugins/builtin/notes/files.ts +16 -5
- package/src/plugins/builtin/openfda/pane.tsx +1 -1
- package/src/plugins/builtin/options/carry.ts +2 -2
- package/src/plugins/builtin/options/enrichment-model.ts +10 -9
- package/src/plugins/builtin/options/index.tsx +1 -1
- package/src/plugins/builtin/options/model-spot.ts +70 -4
- package/src/plugins/builtin/options/view.tsx +51 -23
- package/src/plugins/builtin/options-calculator/headless.ts +46 -7
- package/src/plugins/builtin/options-calculator/pane.tsx +3 -2
- package/src/plugins/builtin/options-positioning/headless.ts +11 -3
- package/src/plugins/builtin/options-positioning/model.ts +24 -0
- package/src/plugins/builtin/options-positioning/pane.tsx +10 -12
- package/src/plugins/builtin/options-scenario/client.ts +142 -29
- 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 +49 -21
- 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 +22 -10
- package/src/plugins/builtin/perps/equity-row.tsx +11 -3
- package/src/plugins/builtin/perps/freshness.ts +8 -5
- 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 +161 -0
- package/src/plugins/builtin/perps/markets-section.tsx +154 -0
- package/src/plugins/builtin/perps/pane.tsx +36 -17
- 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 +145 -60
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +78 -27
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +158 -141
- package/src/plugins/builtin/portfolio-list/cli/render.ts +49 -20
- 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 +6 -3
- 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/live-accounts.ts +16 -9
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +2 -15
- package/src/plugins/builtin/power/client.ts +6 -3
- 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 +44 -32
- package/src/plugins/builtin/power/prices.tsx +10 -3
- 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 +76 -9
- package/src/plugins/builtin/research/relative-valuation-peers.ts +1 -1
- package/src/plugins/builtin/reverse-dcf/client.ts +2 -1
- package/src/plugins/builtin/reverse-dcf/model.ts +10 -5
- package/src/plugins/builtin/risk-factors/index.tsx +2 -2
- package/src/plugins/builtin/scanner/lock-note.ts +1 -1
- package/src/plugins/builtin/seasonality/client.ts +2 -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 +6 -4
- package/src/plugins/builtin/sectors/sector-model.ts +11 -15
- package/src/plugins/builtin/series-inventory.ts +2 -0
- package/src/plugins/builtin/shared/broker-reconnect.ts +107 -22
- package/src/plugins/builtin/shared/cloud-resource.ts +15 -2
- 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/pro-lock-note.ts +3 -3
- package/src/plugins/builtin/shared/report-freshness.ts +3 -0
- package/src/plugins/builtin/shared/research-trading.tsx +23 -0
- package/src/plugins/builtin/shared/series-cache.ts +2 -0
- package/src/plugins/builtin/shared/series-list-detail.tsx +3 -1
- package/src/plugins/builtin/shared/ticker-surface.ts +2 -1
- package/src/plugins/builtin/shared/volatility/options.ts +2 -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/social-mentions/client.ts +2 -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 +8 -5
- package/src/plugins/builtin/themes/model.ts +14 -4
- package/src/plugins/builtin/themes/pane.tsx +24 -5
- 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 +8 -3
- package/src/plugins/builtin/ticker-detail/research-tabs.ts +11 -0
- package/src/plugins/builtin/vol-surface/client.ts +28 -7
- package/src/plugins/builtin/vol-surface/headless.ts +43 -15
- package/src/plugins/builtin/vol-surface/model.ts +34 -12
- package/src/plugins/builtin/vol-surface/pane.tsx +33 -13
- package/src/plugins/builtin/vol-surface/stored.ts +34 -3
- package/src/plugins/builtin/vol-surface/tables.ts +14 -0
- package/src/plugins/builtin/volatility/model.ts +5 -10
- 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 +2 -1
- 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 +10 -8
- 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 +14 -0
- package/src/public/time-series.ts +11 -8
- package/src/remote/schema.ts +1 -1
- package/src/renderers/browser/config-host.ts +3 -0
- package/src/renderers/browser/main.tsx +23 -3
- 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/desktop/controls.tsx +1 -1
- package/src/renderers/dom/desktop/query-bar.tsx +2 -0
- 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/host/tabs.tsx +16 -5
- package/src/renderers/dom/host/top-surface.ts +127 -0
- package/src/renderers/dom/styles.css +115 -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/core-capabilities.ts +9 -1
- 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/update.ts +210 -30
- package/src/renderers/electrobun/bun/external-plugins.ts +29 -7
- package/src/renderers/electrobun/bun/index.ts +11 -1
- 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/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/config-host.ts +3 -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 +9 -7
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +9 -2
- 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 +8 -1
- 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 +39 -16
- package/src/sources/gloomberb-cloud/news.ts +39 -0
- package/src/sources/gloomberb-cloud/normalizers.ts +14 -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/financial-routes.ts +21 -3
- package/src/sources/provider-router/financials.ts +15 -2
- package/src/sources/provider-router/history.ts +30 -8
- package/src/sources/provider-router/index.ts +16 -0
- package/src/sources/provider-router/primary.ts +1 -1
- package/src/state/app/bootstrap.ts +23 -0
- package/src/state/hooks/inline-tickers.ts +30 -5
- package/src/sync/controller.ts +1 -1
- package/src/sync/core-contributors.ts +46 -14
- package/src/team/collections-sync.ts +2 -1
- package/src/team/collections.ts +178 -17
- package/src/telemetry/crash-reports.ts +21 -4
- package/src/telemetry/update-failures-node.ts +59 -0
- package/src/telemetry/update-failures.ts +307 -0
- package/src/test-support/builtin-panes.ts +1 -1
- package/src/theme/colors.ts +3 -30
- package/src/theme/ui-tokens.ts +37 -1
- package/src/tickers/company-name-listing.ts +215 -36
- package/src/tickers/company-name.ts +43 -0
- package/src/tickers/index-roots.ts +47 -0
- package/src/tickers/instrument-label.ts +5 -1
- package/src/tickers/listing-fate.ts +30 -0
- package/src/tickers/metadata.ts +10 -0
- package/src/tickers/perpetual-listing.ts +5 -2
- package/src/tickers/search/home-listing.ts +75 -0
- package/src/tickers/search/index.ts +76 -27
- package/src/tickers/search/ranking.ts +54 -4
- 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 +307 -0
- package/src/time-series/chart-bounds.ts +349 -0
- package/src/time-series/chart-seed.ts +142 -0
- package/src/time-series/economic.ts +5 -0
- package/src/time-series/fundamentals.ts +18 -3
- package/src/time-series/history-acquisition.ts +499 -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/range.ts +9 -1
- package/src/time-series/resolution.ts +174 -16
- package/src/time-series/resolve-context.ts +157 -0
- package/src/time-series/resolve.ts +126 -1577
- package/src/time-series/series-name.ts +38 -0
- package/src/time-series/series-presentation.ts +208 -0
- package/src/time-series/spec.ts +11 -6
- package/src/time-series/studies.ts +109 -12
- package/src/time-series/tail-reconcile.ts +121 -0
- package/src/time-series/types.ts +29 -2
- package/src/time-series/use-chart-resolution.ts +4 -5
- package/src/types/broker.ts +10 -0
- package/src/types/config.ts +14 -0
- package/src/types/data-provider.ts +20 -0
- package/src/types/exchange-rate.ts +6 -0
- package/src/types/financials.ts +104 -7
- package/src/types/headless.ts +83 -6
- package/src/types/instrument.ts +3 -0
- package/src/types/issuer-listings.ts +28 -0
- package/src/types/plugin.ts +65 -8
- 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 +175 -0
- package/src/updater/failure.ts +163 -0
- package/src/updater/index.ts +97 -28
- 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-pair.ts +26 -0
- 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 +83 -4
- 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 +83 -0
- package/src/utils/option-expiry.ts +139 -7
- package/src/utils/price-earnings.ts +11 -5
- package/src/utils/price-history.ts +18 -8
- package/src/utils/price-window.ts +131 -0
- package/src/utils/release-date.ts +47 -0
- package/src/utils/sec.ts +71 -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/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.19, 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.19 之前命令名为 `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.4",
|
|
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..0174d2ce1a9a4fa8ae0fd97367293fc5a794286a 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: {
|
|
@@ -97,7 +97,62 @@ index 39daf6d341780af8e30c2c50327162863f5977ec..bf4a4b615f84904759d4bcd57be0d899
|
|
|
97
97
|
function cleanupExtractionFolder(
|
|
98
98
|
extractionFolder: string,
|
|
99
99
|
keepTarHash: string,
|
|
100
|
-
@@ -
|
|
100
|
+
@@ -158,6 +171,54 @@ function cleanupExtractionFolder(
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
+/**
|
|
105
|
+
+ * Where the running app goes while the new one moves in: `<app>.previous`, or,
|
|
106
|
+
+ * when an older one is still there and cannot be removed (a bundle another
|
|
107
|
+
+ * user owns), a name of its own, so a copy left behind once never blocks
|
|
108
|
+
+ * every later update. The app removes the copies it left at its next start.
|
|
109
|
+
+ */
|
|
110
|
+
+function updateAsidePath(appPath: string): string {
|
|
111
|
+
+ const previous = `${appPath}.previous`;
|
|
112
|
+
+ if (!statSync(previous, { throwIfNoEntry: false })) return previous;
|
|
113
|
+
+ try {
|
|
114
|
+
+ rmSync(previous, { recursive: true, force: true });
|
|
115
|
+
+ } catch (e) {
|
|
116
|
+
+ // Left for the next start to remove; this update takes another name.
|
|
117
|
+
+ }
|
|
118
|
+
+ if (!statSync(previous, { throwIfNoEntry: false })) return previous;
|
|
119
|
+
+ for (let attempt = 0; ; attempt += 1) {
|
|
120
|
+
+ const unique = `${previous}-${Date.now().toString(36)}${attempt ? `-${attempt}` : ""}`;
|
|
121
|
+
+ if (!statSync(unique, { throwIfNoEntry: false })) return unique;
|
|
122
|
+
+ }
|
|
123
|
+
+}
|
|
124
|
+
+
|
|
125
|
+
+/**
|
|
126
|
+
+ * Puts the new app where the running one is. The running app is moved aside
|
|
127
|
+
+ * rather than deleted first, so a move that fails (another volume, a
|
|
128
|
+
+ * read-only one, no permission) puts it back instead of leaving no app at all.
|
|
129
|
+
+ * The copy moved aside is removed when it can be; one that cannot goes at the
|
|
130
|
+
+ * app's next start.
|
|
131
|
+
+ */
|
|
132
|
+
+function replaceAppBundle(runningAppPath: string, newAppPath: string) {
|
|
133
|
+
+ const hadRunningApp = !!statSync(runningAppPath, { throwIfNoEntry: false });
|
|
134
|
+
+ const asidePath = hadRunningApp ? updateAsidePath(runningAppPath) : null;
|
|
135
|
+
+ if (asidePath) renameSync(runningAppPath, asidePath);
|
|
136
|
+
+
|
|
137
|
+
+ emitStatus("replacing-app", "Installing new version...");
|
|
138
|
+
+ try {
|
|
139
|
+
+ renameSync(newAppPath, runningAppPath);
|
|
140
|
+
+ } catch (error) {
|
|
141
|
+
+ if (asidePath) renameSync(asidePath, runningAppPath);
|
|
142
|
+
+ throw error;
|
|
143
|
+
+ }
|
|
144
|
+
+ if (!asidePath) return;
|
|
145
|
+
+ try {
|
|
146
|
+
+ rmSync(asidePath, { recursive: true, force: true });
|
|
147
|
+
+ } catch (e) {
|
|
148
|
+
+ // The new app is in place; the app removes the old copy at its next start.
|
|
149
|
+
+ }
|
|
150
|
+
+}
|
|
151
|
+
+
|
|
152
|
+
const Updater = {
|
|
153
|
+
updateInfo: () => {
|
|
154
|
+
return updateInfo;
|
|
155
|
+
@@ -176,6 +237,12 @@ const Updater = {
|
|
101
156
|
onStatusChangeCallback = callback;
|
|
102
157
|
},
|
|
103
158
|
|
|
@@ -110,7 +165,7 @@ index 39daf6d341780af8e30c2c50327162863f5977ec..bf4a4b615f84904759d4bcd57be0d899
|
|
|
110
165
|
// todo: allow switching channels, by default will check the current channel
|
|
111
166
|
checkForUpdate: async () => {
|
|
112
167
|
emitStatus("checking", "Checking for updates...");
|
|
113
|
-
@@ -196,11 +
|
|
168
|
+
@@ -196,11 +263,11 @@ const Updater = {
|
|
114
169
|
|
|
115
170
|
const cacheBuster = Math.random().toString(36).substring(7);
|
|
116
171
|
const platformPrefix = getPlatformPrefix(
|
|
@@ -124,7 +179,7 @@ index 39daf6d341780af8e30c2c50327162863f5977ec..bf4a4b615f84904759d4bcd57be0d899
|
|
|
124
179
|
|
|
125
180
|
try {
|
|
126
181
|
const updateInfoResponse = await fetch(updateInfoUrl);
|
|
127
|
-
@@ -329,11 +
|
|
182
|
+
@@ -329,11 +396,11 @@ const Updater = {
|
|
128
183
|
|
|
129
184
|
// check if there's a patch file for it
|
|
130
185
|
const platformPrefix = getPlatformPrefix(
|
|
@@ -138,7 +193,7 @@ index 39daf6d341780af8e30c2c50327162863f5977ec..bf4a4b615f84904759d4bcd57be0d899
|
|
|
138
193
|
emitStatus(
|
|
139
194
|
"fetching-patch",
|
|
140
195
|
`Checking for patch: ${currentHash.slice(0, 8)}`,
|
|
141
|
-
@@ -612,12 +
|
|
196
|
+
@@ -612,12 +679,12 @@ const Updater = {
|
|
142
197
|
|
|
143
198
|
const cacheBuster = Math.random().toString(36).substring(7);
|
|
144
199
|
const platformPrefix = getPlatformPrefix(
|
|
@@ -153,6 +208,52 @@ index 39daf6d341780af8e30c2c50327162863f5977ec..bf4a4b615f84904759d4bcd57be0d899
|
|
|
153
208
|
const prevVersionCompressedTarballPath = join(
|
|
154
209
|
appDataFolder,
|
|
155
210
|
"self-extraction",
|
|
211
|
+
@@ -760,7 +827,12 @@ const Updater = {
|
|
212
|
+
mkdirSync(extractionFolder, { recursive: true });
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
- let latestHash = (await Updater.checkForUpdate()).hash;
|
|
216
|
+
+ // Install the build that was downloaded. Checking again here fetched
|
|
217
|
+
+ // the newest manifest instead: once a newer release was out (or the
|
|
218
|
+
+ // check failed offline) its tar was not there and the install
|
|
219
|
+
+ // returned without a word, so a download waiting for a restart could
|
|
220
|
+
+ // never be installed.
|
|
221
|
+
+ let latestHash = updateInfo.hash;
|
|
222
|
+
const latestTarPath = join(extractionFolder, `${latestHash}.tar`);
|
|
223
|
+
|
|
224
|
+
let appBundleSubpath: string = "";
|
|
225
|
+
@@ -894,14 +966,7 @@ const Updater = {
|
|
226
|
+
emitStatus("replacing-app", "Removing old version...");
|
|
227
|
+
|
|
228
|
+
if (currentOS === "macos") {
|
|
229
|
+
- // Remove existing app before installing the new one
|
|
230
|
+
- if (statSync(runningAppBundlePath, { throwIfNoEntry: false })) {
|
|
231
|
+
- rmSync(runningAppBundlePath, { recursive: true });
|
|
232
|
+
- }
|
|
233
|
+
-
|
|
234
|
+
- emitStatus("replacing-app", "Installing new version...");
|
|
235
|
+
- // Move new app to running location
|
|
236
|
+
- renameSync(newAppBundlePath, runningAppBundlePath);
|
|
237
|
+
+ replaceAppBundle(runningAppBundlePath, newAppBundlePath);
|
|
238
|
+
|
|
239
|
+
// Remove quarantine extended attributes to prevent "damaged" error
|
|
240
|
+
// The inner bundle is already signed/notarized, but macOS applies
|
|
241
|
+
@@ -918,14 +983,7 @@ const Updater = {
|
|
242
|
+
// On Linux, we now have directory bundles instead of AppImage files
|
|
243
|
+
// The app is stored in {appDataFolder}/app/
|
|
244
|
+
const appBundleDir = join(appDataFolder, "app");
|
|
245
|
+
-
|
|
246
|
+
- // Remove existing app directory if it exists
|
|
247
|
+
- if (statSync(appBundleDir, { throwIfNoEntry: false })) {
|
|
248
|
+
- rmSync(appBundleDir, { recursive: true });
|
|
249
|
+
- }
|
|
250
|
+
-
|
|
251
|
+
- // Move new app bundle directory to app location
|
|
252
|
+
- renameSync(newAppBundlePath, appBundleDir);
|
|
253
|
+
+ replaceAppBundle(appBundleDir, newAppBundlePath);
|
|
254
|
+
|
|
255
|
+
// Ensure launcher binary is executable
|
|
256
|
+
const launcherPath = join(appBundleDir, "bin", "launcher");
|
|
156
257
|
diff --git a/dist/api/bun/preload/.generated/compiled.ts b/dist/api/bun/preload/.generated/compiled.ts
|
|
157
258
|
index 3ab1d7d8de8938ae60823650fd3a29b952a76cb6..e0e841e6a87ce41533c6bdda8d29400aaf478e31 100644
|
|
158
259
|
--- a/dist/api/bun/preload/.generated/compiled.ts
|
|
@@ -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
|
@@ -83,7 +83,7 @@ export class CloudAuthApi {
|
|
|
83
83
|
},
|
|
84
84
|
);
|
|
85
85
|
this.options.requireCapturedSession(
|
|
86
|
-
"Account created, but
|
|
86
|
+
"Account created, but Gloom could not save the login session. Please try logging in again.",
|
|
87
87
|
);
|
|
88
88
|
this.options.setCurrentUser(result.user);
|
|
89
89
|
return result.user;
|
|
@@ -98,7 +98,7 @@ export class CloudAuthApi {
|
|
|
98
98
|
},
|
|
99
99
|
);
|
|
100
100
|
this.options.requireCapturedSession(
|
|
101
|
-
"Logged in, but
|
|
101
|
+
"Logged in, but Gloom could not save the login session. Please try again.",
|
|
102
102
|
);
|
|
103
103
|
this.options.setCurrentUser(result.user);
|
|
104
104
|
return result.user;
|
|
@@ -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",
|