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/src/cli/index.ts
CHANGED
|
@@ -20,11 +20,13 @@ import {
|
|
|
20
20
|
type CliHelpEntry,
|
|
21
21
|
} from "./help";
|
|
22
22
|
import { parsePaneFunctionArgs, SHOT_SIZE_LIMITS } from "./pane-functions/options";
|
|
23
|
-
import { checkCliCommandOptions } from "./command-options";
|
|
23
|
+
import { checkCliCommandOptions, foldCommandArgs } from "./command-options";
|
|
24
|
+
import { foldTypedText } from "../utils/typed-text";
|
|
24
25
|
import { CLI_EXIT_CODES } from "./exit-codes";
|
|
25
26
|
import { asUsageError, fail, inferCliErrorOptions, printCliError } from "./errors";
|
|
26
|
-
import { cliStyles, setCliColorEnabledOverride, setCliWidthOverride } from "../utils/cli-output";
|
|
27
|
+
import { cliStyles, setCliColorEnabledOverride, setCliPlainOverride, setCliWidthOverride } from "../utils/cli-output";
|
|
27
28
|
import { setDisplayTimeZone } from "../utils/utc-time";
|
|
29
|
+
import { collectSavedCopies } from "../data/saved-copies";
|
|
28
30
|
import { search, searchCandidatesForCli, buildSearchReport } from "./commands/search";
|
|
29
31
|
import { ticker } from "./commands/ticker";
|
|
30
32
|
import { requireOneArg, takeFlag, takeOption } from "./commands/command-utils";
|
|
@@ -92,7 +94,7 @@ export function createCoreCliCommands(
|
|
|
92
94
|
{
|
|
93
95
|
name: "launch-ui",
|
|
94
96
|
aliases: ["ui"],
|
|
95
|
-
description: "Open the terminal UI, like plain
|
|
97
|
+
description: "Open the terminal UI, like plain gloom",
|
|
96
98
|
help: {
|
|
97
99
|
group: CLI_COMMAND_GROUPS.app,
|
|
98
100
|
usage: ["launch-ui"],
|
|
@@ -174,7 +176,7 @@ export function createCoreCliCommands(
|
|
|
174
176
|
group: CLI_COMMAND_GROUPS.functions,
|
|
175
177
|
usage: ["fn <function> [argument] [options]"],
|
|
176
178
|
options: [
|
|
177
|
-
{ flags: "--<option> <value>", description: "A function setting;
|
|
179
|
+
{ flags: "--<option> <value>", description: "A function setting; gloom catalog <function> lists them" },
|
|
178
180
|
{ flags: "--require-bot-safe", description: "Fail unless the function has a verified, complete report" },
|
|
179
181
|
{ flags: "--explain", description: "Follow the report with what its terms mean (text and JSON; CSV keeps the rows)" },
|
|
180
182
|
{
|
|
@@ -190,8 +192,16 @@ export function createCoreCliCommands(
|
|
|
190
192
|
"fn WEI --csv --section europe > europe.csv",
|
|
191
193
|
"fn 13F AAPL --view=ticker-holdings",
|
|
192
194
|
"fn OVME --spot 100 --strike 100 --days 30 --volatility 25",
|
|
195
|
+
"fn HIVG SPY --event fomc --offset -6 --lookback ALL --csv",
|
|
193
196
|
"fn AUCT --explain",
|
|
194
197
|
],
|
|
198
|
+
sections: [{
|
|
199
|
+
title: "Exit status",
|
|
200
|
+
lines: [
|
|
201
|
+
"0 when the report has data for what was asked, partial data with warnings about the rest included; 1 when it has none (an empty report, or rows with no value for a listing that has nothing) or the input is bad. --json ok is false exactly when the exit status is 1.",
|
|
202
|
+
"CSV headers are the same for every symbol: a reason a figure is missing goes to the status column, never into a number cell.",
|
|
203
|
+
],
|
|
204
|
+
}],
|
|
195
205
|
},
|
|
196
206
|
execute: async (args, ctx) => {
|
|
197
207
|
requirePaneFunctionTarget(args, "fn", ctx);
|
|
@@ -209,12 +219,12 @@ export function createCoreCliCommands(
|
|
|
209
219
|
{ flags: "--output <path>", description: "PNG to write; defaults to gloomberb-<function>-<argument>.png in this folder" },
|
|
210
220
|
{ flags: "--width <px>", description: `Layout width, ${SHOT_WIDTH.min} to ${SHOT_WIDTH.max} (default 1280). The PNG is drawn at twice the size: ${SHOT_WIDTH.min * 2} to ${SHOT_WIDTH.max * 2} px wide` },
|
|
211
221
|
{ flags: "--height <px>", description: `Layout height, ${SHOT_HEIGHT.min} to ${SHOT_HEIGHT.max} (default 720), so ${SHOT_HEIGHT.min * 2} to ${SHOT_HEIGHT.max * 2} px tall` },
|
|
212
|
-
{ flags: "--theme <id>", description: "Render with another theme, such as amber or colorblind;
|
|
222
|
+
{ flags: "--theme <id>", description: "Render with another theme, such as amber or colorblind; gloom config themes lists them" },
|
|
213
223
|
{ flags: "--scale <n>", description: "Text scale from 0.5 to 4 (default 1)" },
|
|
214
224
|
{ flags: "--watermark <label>", description: "Label drawn in the pane title bar" },
|
|
215
225
|
{ flags: "--no-status", description: "Leave out the dated status line (as-of, delay, market hours) drawn in the pane footer" },
|
|
216
226
|
{ flags: "--strict", description: `Exit ${CLI_EXIT_CODES.unusableShot} when the pane is empty, shows an error, is still loading or is access-gated; the PNG and the Reason line are still written` },
|
|
217
|
-
{ flags: "--<option> <value>", description: "A function setting;
|
|
227
|
+
{ flags: "--<option> <value>", description: "A function setting; gloom catalog <function> lists them" },
|
|
218
228
|
EXCHANGE_OPTION,
|
|
219
229
|
],
|
|
220
230
|
examples: [
|
|
@@ -257,7 +267,7 @@ export function createCoreCliCommands(
|
|
|
257
267
|
execute: async (args) => {
|
|
258
268
|
const ref = args[0];
|
|
259
269
|
if (!ref) {
|
|
260
|
-
fail("Usage:
|
|
270
|
+
fail("Usage: gloom install <user/repo>");
|
|
261
271
|
}
|
|
262
272
|
console.error(cliStyles.warning("Runs with your full permissions. Read the source first."));
|
|
263
273
|
await installListedPlugin(ref);
|
|
@@ -270,9 +280,9 @@ export function createCoreCliCommands(
|
|
|
270
280
|
group: CLI_COMMAND_GROUPS.plugins,
|
|
271
281
|
usage: ["update [name]"],
|
|
272
282
|
sections: [{
|
|
273
|
-
title: "Updating
|
|
283
|
+
title: "Updating Gloom itself",
|
|
274
284
|
lines: [
|
|
275
|
-
"The app updates itself from stable releases. config set updates.channel nightly adds the nightly build of main; see
|
|
285
|
+
"The app updates itself from stable releases. config set updates.channel nightly adds the nightly build of main; see gloom help config.",
|
|
276
286
|
],
|
|
277
287
|
}],
|
|
278
288
|
examples: ["update", "update gloom-tv"],
|
|
@@ -293,7 +303,7 @@ export function createCoreCliCommands(
|
|
|
293
303
|
execute: async (args) => {
|
|
294
304
|
const name = args[0];
|
|
295
305
|
if (!name) {
|
|
296
|
-
fail("Usage:
|
|
306
|
+
fail("Usage: gloom remove <name>");
|
|
297
307
|
}
|
|
298
308
|
await removePlugin(name);
|
|
299
309
|
},
|
|
@@ -319,7 +329,7 @@ function requirePaneFunctionTarget(args: string[], commandName: string, ctx: Cli
|
|
|
319
329
|
// Intentional ignore: The pane function runner reports invalid options with its error code.
|
|
320
330
|
return;
|
|
321
331
|
}
|
|
322
|
-
if (!target) ctx.fail(`Usage:
|
|
332
|
+
if (!target) ctx.fail(`Usage: gloom ${commandName} <function> [argument] [options]`);
|
|
323
333
|
}
|
|
324
334
|
|
|
325
335
|
function printHelpText(text: string, ctx: CliCommandContext): void {
|
|
@@ -387,8 +397,8 @@ function failUnknownCommand(token: string, commands: CliCommandDef[], pointers:
|
|
|
387
397
|
const exported = suggestion ? null : exportCommandPointer(token, pointers.args);
|
|
388
398
|
const catalog = suggestion ? null : exported ?? catalogPointer(token, pointers.hits, pointers.args);
|
|
389
399
|
const help = suggestion
|
|
390
|
-
? `Did you mean ${suggestion}? Run
|
|
391
|
-
: catalog ? `${catalog}\nRun
|
|
400
|
+
? `Did you mean ${suggestion}? Run gloom help to see every command.`
|
|
401
|
+
: catalog ? `${catalog}\nRun gloom help to see every command.` : "Run gloom help to see every command.";
|
|
392
402
|
fail(`Unknown command "${token}".`, ticker ? `${ticker}\n${help}` : help);
|
|
393
403
|
}
|
|
394
404
|
|
|
@@ -436,13 +446,15 @@ export async function dispatchCli(args: string[], options: DispatchCliOptions =
|
|
|
436
446
|
}
|
|
437
447
|
setCliColorEnabledOverride(parsed.options.color);
|
|
438
448
|
setCliWidthOverride(parsed.options.width ?? null);
|
|
449
|
+
// The CLI entry sets plain output for a pipe or NO_COLOR (entry.ts); `--plain` and `--no-plain` decide it either way.
|
|
450
|
+
if (parsed.options.plain != null) setCliPlainOverride(parsed.options.plain);
|
|
439
451
|
const command = parsed.args[0] ?? (parsed.help ? "help" : undefined);
|
|
440
452
|
if (!command) {
|
|
441
453
|
return { kind: "unhandled" };
|
|
442
454
|
}
|
|
443
455
|
|
|
444
456
|
const registry = await createRegistry(options);
|
|
445
|
-
const resolved = registry.lookup.get(normalizeCliCommandToken(command));
|
|
457
|
+
const resolved = registry.lookup.get(normalizeCliCommandToken(foldTypedText(command)));
|
|
446
458
|
if (!resolved) {
|
|
447
459
|
return { kind: "unhandled" };
|
|
448
460
|
}
|
|
@@ -452,15 +464,17 @@ export async function dispatchCli(args: string[], options: DispatchCliOptions =
|
|
|
452
464
|
const helpOnly = parsed.help && resolved.command.name !== "help";
|
|
453
465
|
const target = helpOnly ? registry.lookup.get("help")! : resolved;
|
|
454
466
|
// The words after a command that runs a function name the function whose help it is (`fn BT --help`).
|
|
467
|
+
// Full-width letters and digits (GME, 10) are read as the ASCII they stand for, once, here.
|
|
455
468
|
const commandArgs = helpOnly
|
|
456
|
-
? [resolved.command.name, ...FUNCTION_COMMANDS.has(resolved.command.name) ? parsed.args.slice(1) : []]
|
|
457
|
-
: parsed.args.slice(1);
|
|
469
|
+
? [resolved.command.name, ...FUNCTION_COMMANDS.has(resolved.command.name) ? foldCommandArgs(resolved.command, parsed.args.slice(1)) : []]
|
|
470
|
+
: foldCommandArgs(resolved.command, parsed.args.slice(1), parsed.literalStart - 1);
|
|
458
471
|
try {
|
|
459
472
|
if (!helpOnly && resolved.builtin) checkCliCommandOptions(resolved.command, commandArgs, parsed.literalStart - 1);
|
|
460
|
-
|
|
473
|
+
// What it answers from a saved copy, its refresh having failed, its closing line says.
|
|
474
|
+
const result = await collectSavedCopies(() => Promise.resolve(target.command.execute(
|
|
461
475
|
commandArgs,
|
|
462
476
|
createCliCommandContext(target.ownerId, registry, parsed.options, commandArgs),
|
|
463
|
-
);
|
|
477
|
+
)));
|
|
464
478
|
return normalizeCliDispatchResult(result);
|
|
465
479
|
} catch (error) {
|
|
466
480
|
// A coin typed without its quote currency (USDT) is named by its one symbol (USDT-USD) in the hint.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { AppConfig } from "../types/config";
|
|
2
|
+
import type { DataProvider } from "../types/data-provider";
|
|
3
|
+
import type { TickerRecord } from "../types/ticker";
|
|
4
|
+
import { canonicalExchange, isUsListingExchange, parsePublicTickerKey } from "../utils/exchanges";
|
|
5
|
+
import { logFailure } from "../utils/log-failure";
|
|
6
|
+
import { savedListingName } from "./listing-arg";
|
|
7
|
+
|
|
8
|
+
/** A list holding the company: its name, and the other saved listing it holds the company as (null for the listing asked about). */
|
|
9
|
+
export interface ListMembership {
|
|
10
|
+
name: string;
|
|
11
|
+
/** RCI.B:TSX when the list holds Rogers as its Toronto line and the report is of RCI. */
|
|
12
|
+
via: string | null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface CompanyMemberships {
|
|
16
|
+
portfolios: ListMembership[];
|
|
17
|
+
watchlists: ListMembership[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* A listing as Gloom Cloud writes an issuer's listings: the bare ticker on a
|
|
22
|
+
* US venue or none (RCI), SYMBOL:EXCHANGE elsewhere (RCI.B:TSX), with a
|
|
23
|
+
* share class's dash or slash as a dot (BRK-B is BRK.B).
|
|
24
|
+
*/
|
|
25
|
+
export function issuerListingKey(symbol: string, exchange?: string): string {
|
|
26
|
+
const parsed = parsePublicTickerKey(symbol);
|
|
27
|
+
const venue = parsed.exchange ?? canonicalExchange(exchange);
|
|
28
|
+
const code = parsed.symbol.toUpperCase().replace(/[-/]/g, ".");
|
|
29
|
+
return venue && !isUsListingExchange(venue) ? `${code}:${venue}` : code;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function names(config: AppConfig, ids: readonly string[], kind: "portfolios" | "watchlists"): Map<string, string> {
|
|
33
|
+
const collections: ReadonlyArray<{ id: string; name: string }> = config[kind];
|
|
34
|
+
return new Map(ids.flatMap((id) => {
|
|
35
|
+
const name = collections.find((collection) => collection.id === id)?.name;
|
|
36
|
+
return name ? [[id, name] as const] : [];
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The portfolios and watchlists that hold a company, whichever of its
|
|
42
|
+
* listings they saved: the listing's own lists, then those holding another
|
|
43
|
+
* of `issuerListings` (its keys as `issuerListingKey` writes them), each
|
|
44
|
+
* once and saying which listing it holds. A restricted list holding RCI.B:TSX
|
|
45
|
+
* holds Rogers, which also trades as RCI in New York. Without the company's
|
|
46
|
+
* listings, only the listing's own lists.
|
|
47
|
+
*/
|
|
48
|
+
export function companyMemberships(
|
|
49
|
+
config: AppConfig,
|
|
50
|
+
own: TickerRecord | null,
|
|
51
|
+
saved: readonly TickerRecord[],
|
|
52
|
+
issuerListings: readonly string[] | null,
|
|
53
|
+
): CompanyMemberships {
|
|
54
|
+
const listings = new Set(issuerListings ?? []);
|
|
55
|
+
const ownKey = own ? savedListingName(own).key : null;
|
|
56
|
+
const others = listings.size === 0 ? [] : saved.filter((ticker) =>
|
|
57
|
+
savedListingName(ticker).key !== ownKey
|
|
58
|
+
&& listings.has(issuerListingKey(ticker.metadata.ticker, ticker.metadata.exchange)));
|
|
59
|
+
const collect = (kind: "portfolios" | "watchlists"): ListMembership[] => {
|
|
60
|
+
const held = new Map<string, ListMembership>();
|
|
61
|
+
for (const [id, name] of names(config, own?.metadata[kind] ?? [], kind)) held.set(id, { name, via: null });
|
|
62
|
+
for (const ticker of others) {
|
|
63
|
+
for (const [id, name] of names(config, ticker.metadata[kind], kind)) {
|
|
64
|
+
if (!held.has(id)) held.set(id, { name, via: savedListingName(ticker).key });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return [...held.values()];
|
|
68
|
+
};
|
|
69
|
+
return { portfolios: collect("portfolios"), watchlists: collect("watchlists") };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* `companyMemberships` for a listing, asking Gloom Cloud for the company's
|
|
74
|
+
* other listings only when another saved listing is in a list at all. A
|
|
75
|
+
* failed lookup leaves the listing's own lists.
|
|
76
|
+
*/
|
|
77
|
+
export async function loadCompanyMemberships({
|
|
78
|
+
config,
|
|
79
|
+
own,
|
|
80
|
+
symbol,
|
|
81
|
+
exchange,
|
|
82
|
+
loadTickers,
|
|
83
|
+
dataProvider,
|
|
84
|
+
}: {
|
|
85
|
+
config: AppConfig;
|
|
86
|
+
own: TickerRecord | null;
|
|
87
|
+
/** The listing the report is of, and its venue (RCI, NYSE). */
|
|
88
|
+
symbol: string;
|
|
89
|
+
exchange: string;
|
|
90
|
+
loadTickers: () => Promise<TickerRecord[]>;
|
|
91
|
+
dataProvider: Pick<DataProvider, "getIssuerListings">;
|
|
92
|
+
}): Promise<CompanyMemberships> {
|
|
93
|
+
const ownKey = own ? savedListingName(own).key : null;
|
|
94
|
+
const saved = await Promise.resolve().then(loadTickers)
|
|
95
|
+
.catch(logFailure("cli.issuer-membership", "Reading saved listings failed", [] as TickerRecord[]));
|
|
96
|
+
const listed = saved.filter((ticker) => savedListingName(ticker).key !== ownKey
|
|
97
|
+
&& (ticker.metadata.portfolios.length > 0 || ticker.metadata.watchlists.length > 0));
|
|
98
|
+
const { getIssuerListings } = dataProvider;
|
|
99
|
+
if (listed.length === 0 || !getIssuerListings) return companyMemberships(config, own, [], null);
|
|
100
|
+
const issuer = await Promise.resolve().then(() => getIssuerListings.call(dataProvider, symbol, exchange))
|
|
101
|
+
.catch(logFailure("cli.issuer-membership", "Reading the company's listings failed", null));
|
|
102
|
+
return companyMemberships(config, own, listed, issuer?.listings.map((listing) => issuerListingKey(listing.symbol, listing.exchange)) ?? null);
|
|
103
|
+
}
|
package/src/cli/known-gaps.ts
CHANGED
|
@@ -1,21 +1,48 @@
|
|
|
1
1
|
import { listingSuffixExchange } from "../sources/listing-symbols";
|
|
2
|
+
import { kindFromListingSyntax } from "../tickers/instrument-kind";
|
|
2
3
|
import { parsePublicTickerKey } from "../utils/exchanges";
|
|
3
4
|
import { listingAbroadVenue } from "../utils/sec";
|
|
4
5
|
import { nimCommand } from "./bank-section";
|
|
5
6
|
import { treasuryYieldLine, treasuryYieldTenor } from "./treasury-yields";
|
|
6
7
|
|
|
8
|
+
/**
|
|
9
|
+
* What a listing is to a sub-minute ask: a US listing, which has a tape; one
|
|
10
|
+
* known to trade abroad, a future, or another class a symbol's own syntax names
|
|
11
|
+
* (an index, a currency pair, a coin), none of which has trades or quotes.
|
|
12
|
+
*/
|
|
13
|
+
type SubMinuteListing = "unknown" | "abroad" | "future" | "other";
|
|
14
|
+
|
|
15
|
+
function subMinuteListing(symbol: string): SubMinuteListing {
|
|
16
|
+
if (listedAbroad(symbol)) return "abroad";
|
|
17
|
+
const kind = kindFromListingSyntax(symbol, parsePublicTickerKey(symbol).exchange);
|
|
18
|
+
return kind === "future" ? "future" : kind ? "other" : "unknown";
|
|
19
|
+
}
|
|
20
|
+
|
|
7
21
|
/**
|
|
8
22
|
* Where data finer than a minute is: nowhere as bars. GIP draws 1-minute
|
|
9
23
|
* bars; for a US listing TAS lists each trade (a window of the session with
|
|
10
24
|
* `--from`/`--to`) and QR each quote. `history --interval`, GIP's
|
|
11
|
-
* `--
|
|
12
|
-
*
|
|
25
|
+
* `--chart-resolution 1s` and QR on a listing abroad all say this. The tape
|
|
26
|
+
* covers US equities only, and TAS and QR answer anything else with an
|
|
27
|
+
* error or an empty table, so a listing without one is told only the bars
|
|
28
|
+
* that exist for it. A future's finest are G's 1-minute bars of its session
|
|
29
|
+
* (`fn G GC=F --range-preset 1D`) and `history`'s 5-minute bars of 1D, both
|
|
30
|
+
* checked on GC=F and SI=F on 2026-10-21. GIP is not named for one: its
|
|
31
|
+
* window is the UTC day, not the session, and it was reported with no points
|
|
32
|
+
* for a future.
|
|
13
33
|
*/
|
|
14
|
-
export function subMinuteDataMessage(symbol = "<ticker>", listing:
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
34
|
+
export function subMinuteDataMessage(symbol = "<ticker>", listing: SubMinuteListing = subMinuteListing(symbol)): string {
|
|
35
|
+
const none = "No second or tick bars";
|
|
36
|
+
switch (listing) {
|
|
37
|
+
case "abroad":
|
|
38
|
+
return `${none}; 1-minute bars: fn GIP ${symbol}; trades exist for US listings only.`;
|
|
39
|
+
case "future":
|
|
40
|
+
return `${none}; 1-minute bars: fn G ${symbol} --range-preset 1D (history ${symbol} --range 1D has 5-minute bars). Trades and quotes cover US equities only.`;
|
|
41
|
+
case "other":
|
|
42
|
+
return `${none}; 1-minute bars: fn GIP ${symbol}. Trades and quotes cover US equities only.`;
|
|
43
|
+
default:
|
|
44
|
+
return `${none}; 1-minute bars: fn GIP ${symbol}; for a US listing, each trade: fn TAS ${symbol} (a window: --from 10:30 --to 10:35), each quote: fn QR ${symbol}.`;
|
|
45
|
+
}
|
|
19
46
|
}
|
|
20
47
|
|
|
21
48
|
/**
|
|
@@ -42,8 +69,8 @@ export function isSubMinuteInterval(value: string): boolean {
|
|
|
42
69
|
* (checked 2026-10-19).
|
|
43
70
|
*/
|
|
44
71
|
export const MUNI_LINE = "Municipal bonds: no AAA muni curve (MMD and BVAL are licensed). Muni bond funds: MUB, VTEB, TFI (national), SUB (short-term), "
|
|
45
|
-
+ "CMF, VTEC (California), NYF, MUNY (New York). SEC yield, distribution yield, yield to worst and duration:
|
|
46
|
-
+ "
|
|
72
|
+
+ "CMF, VTEC (California), NYF, MUNY (New York). SEC yield, distribution yield, yield to worst and duration: gloom fn DVD <fund> or "
|
|
73
|
+
+ "gloom fundamentals <fund>; tax-equivalent yield and muni/Treasury ratio: add --tax-rate 40.8 (with --state-rate 13.3 --state CA for a "
|
|
47
74
|
+ "single-state fund).";
|
|
48
75
|
|
|
49
76
|
/**
|
|
@@ -51,7 +78,7 @@ export const MUNI_LINE = "Municipal bonds: no AAA muni curve (MMD and BVAL are l
|
|
|
51
78
|
* or, while no source carries it, the nearest thing the app does have, with
|
|
52
79
|
* the traded proxies either way. `search` and `catalog` answer a query that
|
|
53
80
|
* names one with this line instead of pointing at each other. One entry per
|
|
54
|
-
* subject; every proxy named is a listing `
|
|
81
|
+
* subject; every proxy named is a listing `gloom quote` answers (checked
|
|
55
82
|
* 2026-10-11: CO2:LSE is the physical EUA ETC, while a bare CO2 is a Brent
|
|
56
83
|
* future; BDRY, SBLK, GNK and DSX on 2026-10-17), a function `fn` runs, or a
|
|
57
84
|
* command that answers (`news "dry bulk"`).
|
|
@@ -102,11 +129,11 @@ const KNOWN_GAPS: ReadonlyArray<{ terms: readonly string[]; tickers?: readonly s
|
|
|
102
129
|
*/
|
|
103
130
|
const BANK_FIGURES_TOPIC = {
|
|
104
131
|
topic: "Bank deposits, uninsured share and CRE / capital",
|
|
105
|
-
availability: "in the Bank section of
|
|
132
|
+
availability: "in the Bank section of gloom fundamentals <ticker>",
|
|
106
133
|
phrases: ["nim", "nims", "net interest margin", "net interest margins", "deposits", "deposit growth", "deposit flows",
|
|
107
134
|
"deposit outflows", "deposit base", "uninsured", "cre", "commercial real estate"],
|
|
108
135
|
closestLabel: "net interest margin",
|
|
109
|
-
closest: [["EQS", "NIM%, Pro:
|
|
136
|
+
closest: [["EQS", "NIM%, Pro: gloom fn EQS --metric kpiNimPercent"]],
|
|
110
137
|
} as const;
|
|
111
138
|
|
|
112
139
|
/**
|
|
@@ -114,7 +141,7 @@ const BANK_FIGURES_TOPIC = {
|
|
|
114
141
|
* command or a function. One example, writing a file.
|
|
115
142
|
*/
|
|
116
143
|
function exportLine(symbol = "LMT"): string {
|
|
117
|
-
return `Export: add --csv or --json to any command to print its result as CSV or JSON, e.g.
|
|
144
|
+
return `Export: add --csv or --json to any command to print its result as CSV or JSON, e.g. gloom history ${symbol} --csv > ${
|
|
118
145
|
symbol.toLowerCase().replace(/[^a-z0-9]+/g, "-")}.csv`;
|
|
119
146
|
}
|
|
120
147
|
|
|
@@ -126,13 +153,26 @@ const EXPORT_POINTER = {
|
|
|
126
153
|
leads: true,
|
|
127
154
|
} as const;
|
|
128
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Bloomberg's spreadsheet formulas (BDP, BDH, BDS), Excel and Sheets: the Google Sheets functions take the same
|
|
158
|
+
* tickers and fields. Listed before the export line, so "excel" alone is this one and "export to excel" that one.
|
|
159
|
+
*/
|
|
160
|
+
const SHEETS_POINTER = {
|
|
161
|
+
names: ["bdh", "bdp", "bds", "excel", "sheets", "gsheets", "google sheets"],
|
|
162
|
+
words: ["formula", "formulas", "function", "functions", "add", "in", "addin", "plugin", "bloomberg", "google", "for", "with",
|
|
163
|
+
"data", "how", "to", "use", "can", "i", "a", "an", "the", "my", "spreadsheet", "spreadsheets", "workbook", "workbooks"],
|
|
164
|
+
line: "Spreadsheets: =GLOOM and =GLOOMH in Google Sheets take the tickers and fields of Bloomberg's BDP and BDH (Pro): "
|
|
165
|
+
+ "gloom.sh/docs/google-sheets. For Excel, add --csv to any command.",
|
|
166
|
+
leads: true,
|
|
167
|
+
} as const;
|
|
168
|
+
|
|
129
169
|
/** "bank", "bank figures": beside the functions a bank's name finds (CBR), where its figures are. */
|
|
130
170
|
const BANK_FIGURES_POINTER = {
|
|
131
171
|
names: ["bank", "banks", "banking"],
|
|
132
172
|
words: ["figures", "figure", "data", "metrics", "holding", "company", "companies", "section", "kpi", "kpis", "ratios",
|
|
133
173
|
"fundamentals", "stats", "statistics", "balance", "sheet"],
|
|
134
|
-
line: "Bank figures (deposits, uninsured share, CRE / capital, lead bank):
|
|
135
|
-
+ "Net interest margin (Pro):
|
|
174
|
+
line: "Bank figures (deposits, uninsured share, CRE / capital, lead bank): gloom fundamentals <ticker>, Bank section. "
|
|
175
|
+
+ "Net interest margin (Pro): gloom fn EQS --metric kpiNimPercent",
|
|
136
176
|
};
|
|
137
177
|
|
|
138
178
|
/**
|
|
@@ -170,6 +210,27 @@ const TOPIC_POINTERS: ReadonlyArray<{
|
|
|
170
210
|
whole: ["borrow", "borrowing", "utilization", "utilisation", "locate", "locates", "htb", "lendable shares"],
|
|
171
211
|
closest: [["SI", "FINRA short interest and days to cover"], ["SIW", "crowded shorts across your names"], ["SIV", "daily short volume"]],
|
|
172
212
|
},
|
|
213
|
+
{
|
|
214
|
+
// FUT and CTM list COMEX metals (HG copper, ALI aluminium), never the London or Shanghai contracts: a query naming those
|
|
215
|
+
// venues is told so, not pointed at FUT. The IMF's monthly world prices stand in for LME's (`fred PCOPPUSDM`).
|
|
216
|
+
topic: "LME and Shanghai (SHFE) metals futures",
|
|
217
|
+
availability: "not covered (FUT and CTM list COMEX contracts only). Monthly world prices in USD/t: gloom fred PCOPPUSDM, gloom fred PALUMUSDM",
|
|
218
|
+
phrases: ["lme", "london metal exchange", "london metals exchange", "shfe", "shanghai futures exchange", "shanghai futures",
|
|
219
|
+
"shanghai copper", "shanghai aluminium", "shanghai aluminum", "shanghai zinc", "shanghai nickel", "shanghai tin", "shanghai lead",
|
|
220
|
+
"shanghai rebar", "shanghai steel", "shanghai metals"],
|
|
221
|
+
closestLabel: "COMEX curves",
|
|
222
|
+
closest: [["CTM", "gloom fn CTM HG for copper, gloom fn CTM ALI for aluminium"]],
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
// "exchange reserves" alone reads as crypto's; "foreign exchange reserves" is a central bank's, so only whole.
|
|
226
|
+
topic: "Crypto exchange reserves and exchange flows",
|
|
227
|
+
availability: "not covered (no source for coins held on exchanges)",
|
|
228
|
+
phrases: ["crypto exchange reserves", "bitcoin exchange reserves", "btc exchange reserves", "eth exchange reserves",
|
|
229
|
+
"ethereum exchange reserves", "exchange inflows", "exchange outflows", "exchange netflow", "exchange netflows", "exchange net flows",
|
|
230
|
+
"coins on exchanges", "bitcoin on exchanges", "btc on exchanges"],
|
|
231
|
+
whole: ["exchange reserves", "exchange reserve", "exchange balances", "exchange balance", "exchange flows"],
|
|
232
|
+
closest: [["CRYP", "DeFi TVL by protocol and chain: gloom fn CRYP --list defi; stablecoin supply: --list stablecoin"]],
|
|
233
|
+
},
|
|
173
234
|
];
|
|
174
235
|
|
|
175
236
|
/** The words of a text, lower case: `DoD-budget` and `dod budget` read alike. */
|
|
@@ -208,26 +269,50 @@ export function topicPointer(query: string): { message: string; codes: string[]
|
|
|
208
269
|
* and `catalog` print beside whatever else the query finds. A query asks for one when every word is a word of that
|
|
209
270
|
* command and one of them names it: "light theme", "dark", "colour-blind", but not "ai theme" (THEM's basket) or
|
|
210
271
|
* "dark pool"; "drip", "dividend income", but not "income statement" or "net income"; "tether", "depeg",
|
|
211
|
-
* "usdc peg", but not "peg ratio".
|
|
272
|
+
* "usdc peg", but not "peg ratio". A command with `qualifiers` also needs one of them once the query says more than
|
|
273
|
+
* its name: "fx forward rate", but not "forward rate".
|
|
212
274
|
*/
|
|
213
|
-
const COMMAND_POINTERS: ReadonlyArray<{
|
|
275
|
+
const COMMAND_POINTERS: ReadonlyArray<{
|
|
276
|
+
names: readonly string[];
|
|
277
|
+
words: readonly string[];
|
|
278
|
+
qualifiers?: readonly string[];
|
|
279
|
+
line: string;
|
|
280
|
+
leads?: true;
|
|
281
|
+
}> = [
|
|
214
282
|
BANK_FIGURES_POINTER,
|
|
283
|
+
SHEETS_POINTER,
|
|
215
284
|
EXPORT_POINTER,
|
|
216
285
|
{
|
|
217
286
|
names: ["theme", "themes", "light", "dark", "colorblind", "colourblind", "blind"],
|
|
218
287
|
words: ["mode", "color", "colour", "colors", "colours", "high", "contrast", "change", "switch", "set", "setting", "settings"],
|
|
219
|
-
line: "Themes:
|
|
288
|
+
line: "Themes: gloom config themes",
|
|
220
289
|
},
|
|
221
290
|
{
|
|
222
291
|
names: ["drip", "drips", "reinvest", "reinvested", "reinvesting", "reinvestment", "income"],
|
|
223
292
|
words: ["dividend", "dividends", "portfolio", "my", "annual", "yearly", "passive", "projection", "project", "projected",
|
|
224
293
|
"plan", "planner", "calculator", "forecast", "yield", "growth"],
|
|
225
|
-
line: "Portfolio income, yield and DRIP projection:
|
|
294
|
+
line: "Portfolio income, yield and DRIP projection: gloom portfolio show <name> --drip",
|
|
226
295
|
},
|
|
227
296
|
{
|
|
228
297
|
names: ["tether", "usdt", "usdc", "depeg", "depegs", "depegged", "depegging", "peg", "pegs", "pegged", "stablecoin", "stablecoins"],
|
|
229
298
|
words: ["stable", "coin", "coins", "off", "check", "monitor", "watch", "scare", "risk", "dollar", "usd", "status", "price", "prices", "low"],
|
|
230
|
-
line: "Stablecoins against their peg, off peg in bp, 24h low and high:
|
|
299
|
+
line: "Stablecoins against their peg, off peg in bp, 24h low and high: gloom fn CRYP --list stablecoin",
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
// A currency forward, not a forward rate on a yield curve, forward guidance, a forward P/E or the forward
|
|
303
|
+
// inflation series: a query that says more than "forward" has to name FX.
|
|
304
|
+
names: ["forward", "forwards", "fwd", "fwds"],
|
|
305
|
+
words: ["rate", "rates", "implied", "hedge", "hedging", "cost", "costs", "premium", "interest", "1w", "2w", "30d", "1m", "3m",
|
|
306
|
+
"6m", "1y"],
|
|
307
|
+
qualifiers: ["fx", "currency", "currencies", "point", "points", "pips", "cip", "covered", "parity", "outright",
|
|
308
|
+
"usd", "mxn", "eur", "gbp", "usdmxn", "eurusd", "gbpusd", "eurmxn", "peso", "dollar", "euro", "sterling"],
|
|
309
|
+
line: "FX forwards implied by both currencies' short rates (covered interest parity), with forward points and the hedge cost: gloom fx USD/MXN --forward 30d",
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
names: ["defi", "tvl", "tvls", "total value locked", "on-chain", "onchain", "aave", "lido", "eigenlayer", "morpho"],
|
|
313
|
+
words: ["protocol", "protocols", "chain", "chains", "crypto", "data", "top", "by", "history",
|
|
314
|
+
"change", "ranking", "rankings", "dashboard", "lending", "staking"],
|
|
315
|
+
line: "DeFi TVL, top protocols and chains with 7D and 30D change: gloom fn CRYP --list defi (by chain: --by chain)",
|
|
231
316
|
},
|
|
232
317
|
];
|
|
233
318
|
|
|
@@ -245,7 +330,7 @@ export function commandPointerLeads(query: string): boolean {
|
|
|
245
330
|
}
|
|
246
331
|
|
|
247
332
|
/**
|
|
248
|
-
* The line for a command word typed as `
|
|
333
|
+
* The line for a command word typed as `gloom export LMT`: exporting is a flag every command takes, not a
|
|
249
334
|
* command, so the example runs on the symbol typed. Null for any other word.
|
|
250
335
|
*/
|
|
251
336
|
export function exportCommandPointer(token: string, args: readonly string[]): string | null {
|
|
@@ -254,11 +339,19 @@ export function exportCommandPointer(token: string, args: readonly string[]): st
|
|
|
254
339
|
return exportLine(symbol);
|
|
255
340
|
}
|
|
256
341
|
|
|
342
|
+
/** A name of several words ("on-chain") names the command when its words run together in the query. */
|
|
257
343
|
function findCommandPointer(query: string): (typeof COMMAND_POINTERS)[number] | null {
|
|
258
344
|
const asked = words(query);
|
|
259
345
|
if (asked.length === 0) return null;
|
|
260
|
-
return COMMAND_POINTERS.find(({ names, words: other
|
|
261
|
-
|
|
346
|
+
return COMMAND_POINTERS.find(({ names, words: other, qualifiers = [] }) => {
|
|
347
|
+
const named = new Set(names.flatMap((name) => {
|
|
348
|
+
const parts = words(name);
|
|
349
|
+
return containsWords(asked, parts) ? parts : [];
|
|
350
|
+
}));
|
|
351
|
+
return named.size > 0
|
|
352
|
+
&& asked.every((word) => named.has(word) || other.includes(word) || qualifiers.includes(word))
|
|
353
|
+
&& (qualifiers.length === 0 || asked.every((word) => named.has(word)) || asked.some((word) => qualifiers.includes(word)));
|
|
354
|
+
}) ?? null;
|
|
262
355
|
}
|
|
263
356
|
|
|
264
357
|
/**
|
|
@@ -272,8 +365,8 @@ export function bankFigurePointer(name: string, arg: string): { message: string;
|
|
|
272
365
|
return {
|
|
273
366
|
message: `${name} is not a function: a bank's figures are in the Bank section of fundamentals.`,
|
|
274
367
|
details: [
|
|
275
|
-
`Deposits, uninsured share, CRE / capital and the lead bank:
|
|
276
|
-
`Net interest margin (Pro): ${symbol ? nimCommand(symbol) : "
|
|
368
|
+
`Deposits, uninsured share, CRE / capital and the lead bank: gloom fundamentals ${symbol || "<ticker>"}`,
|
|
369
|
+
`Net interest margin (Pro): ${symbol ? nimCommand(symbol) : "gloom fn EQS --metric kpiNimPercent"}`,
|
|
277
370
|
].join("\n"),
|
|
278
371
|
};
|
|
279
372
|
}
|