gloomberb 0.18.3 → 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/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 +84 -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 +22 -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 +21 -4
- package/src/api-client/short-side-publications.ts +37 -0
- package/src/api-client/socket.ts +64 -4
- package/src/api-client/swap-curve.ts +35 -0
- package/src/api-client/themes.ts +7 -1
- package/src/api-client/types.ts +90 -2
- 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/star-prompt/status-line.tsx +2 -2
- package/src/architecture/core-builtin-allowlist.json +5 -2
- package/src/architecture/ui-literals-allowlist.json +3 -3
- package/src/architecture/ui-tokens-allowlist.json +1 -1
- package/src/brokers/broker-portfolio-sync.ts +37 -0
- package/src/brokers/directory.ts +11 -0
- package/src/brokers/logos.ts +3 -1
- package/src/brokers/signed-in/adapter.ts +304 -26
- package/src/brokers/signed-in/client.ts +14 -2
- package/src/brokers/signed-in/connect.ts +10 -2
- package/src/brokers/sync-broker-instance.ts +9 -1
- package/src/capabilities/chart-series.ts +22 -6
- package/src/cli/bank-section.ts +1 -1
- package/src/cli/base-converter.ts +23 -14
- package/src/cli/central-bank-events.ts +1 -1
- package/src/cli/command-options.ts +59 -4
- package/src/cli/commands/api.ts +9 -6
- package/src/cli/commands/broker.ts +2 -2
- package/src/cli/commands/command-utils.ts +2 -2
- package/src/cli/commands/crypto-hints.ts +7 -20
- package/src/cli/commands/fred-series.ts +4 -2
- package/src/cli/commands/keybindings.ts +2 -2
- package/src/cli/commands/market.ts +1117 -264
- 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 +192 -47
- 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 +19 -13
- 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 +24 -18
- package/src/cli/known-gaps.ts +118 -25
- package/src/cli/listing-arg.ts +300 -41
- package/src/cli/name-entries.ts +30 -18
- package/src/cli/native-smoke.ts +2 -0
- package/src/cli/not-a-ticker.ts +19 -9
- package/src/cli/opentui-libc.ts +5 -0
- package/src/cli/options.ts +12 -0
- package/src/cli/pane-functions/capabilities.ts +75 -20
- package/src/cli/pane-functions/catalog.ts +24 -23
- package/src/cli/pane-functions/discovery.ts +1 -1
- package/src/cli/pane-functions/dom.ts +10 -7
- package/src/cli/pane-functions/financial-ratio-shot.ts +2 -2
- package/src/cli/pane-functions/freshness.ts +174 -23
- package/src/cli/pane-functions/function-help.ts +66 -27
- package/src/cli/pane-functions/headless.ts +24 -11
- package/src/cli/pane-functions/index.ts +18 -16
- 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 +47 -10
- 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 +61 -16
- package/src/cli/restore-plugins.ts +29 -14
- package/src/cli/result.ts +111 -22
- package/src/cli/series-search.ts +5 -5
- package/src/cli/statement-filings.ts +19 -0
- package/src/cli/suffixed-listing-rows.ts +49 -0
- package/src/cli/symbol-args.ts +50 -15
- package/src/cli/symbol-cells.ts +120 -0
- package/src/cli/symbol-list.ts +198 -68
- package/src/cli/symbol-rows.ts +131 -25
- package/src/cli/ticker-resolution.ts +108 -11
- package/src/cli/treasury-yields.ts +5 -5
- package/src/cli/types.ts +2 -0
- package/src/cli/uncovered-instrument.ts +3 -3
- package/src/cli/unknown-command.ts +6 -6
- package/src/components/chart/composite/chart-layout.ts +131 -0
- package/src/components/chart/composite/composite-chart.tsx +373 -16
- package/src/components/chart/composite/interactions.ts +7 -2
- package/src/components/chart/composite/legend.tsx +75 -3
- package/src/components/chart/composite/levels.ts +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 +305 -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 +13 -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/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/form-modal/confirm.tsx +2 -1
- package/src/components/form-modal/request.ts +5 -0
- package/src/components/form-modal/routes.ts +4 -1
- package/src/components/index.ts +12 -6
- package/src/components/layout/header.tsx +7 -6
- 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/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/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 +29 -12
- package/src/i18n/ja.ts +29 -12
- package/src/i18n/ko.ts +29 -12
- package/src/i18n/zh-cn.ts +29 -12
- package/src/i18n/zh-tw.ts +29 -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 +29 -19
- 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 +107 -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 +76 -3
- package/src/plugins/builtin/alerts/scheduled-check.ts +206 -32
- package/src/plugins/builtin/alerts/scheduled-sources.ts +26 -3
- package/src/plugins/builtin/alerts/scheduled.ts +188 -29
- package/src/plugins/builtin/alerts/storage.ts +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 +97 -36
- package/src/plugins/builtin/attention/pane.tsx +6 -2
- package/src/plugins/builtin/awards/headless.ts +7 -3
- package/src/plugins/builtin/awards/model.ts +18 -0
- package/src/plugins/builtin/awards/pane.tsx +6 -3
- package/src/plugins/builtin/backtest/headless.ts +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 +22 -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 +110 -23
- package/src/plugins/builtin/broker-trading/ticket-parts.tsx +36 -7
- package/src/plugins/builtin/broker-trading/ticket.tsx +112 -31
- package/src/plugins/builtin/buildout/cells.tsx +4 -0
- package/src/plugins/builtin/buildout/detail/index.tsx +5 -1
- package/src/plugins/builtin/buildout/detail/ui.tsx +7 -4
- package/src/plugins/builtin/buildout/pane/index.tsx +25 -12
- package/src/plugins/builtin/buildout/pane/status.tsx +0 -4
- package/src/plugins/builtin/builtin-plugin-meta.ts +1 -1
- 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 +6 -8
- package/src/plugins/builtin/central-bank-rates/client.ts +5 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +36 -10
- package/src/plugins/builtin/central-bank-rates/model.ts +33 -8
- package/src/plugins/builtin/changelog/index.tsx +1 -0
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +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 +127 -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 +11 -4
- package/src/plugins/builtin/company-attention/app-rank.tsx +7 -5
- package/src/plugins/builtin/company-attention/building-model.ts +222 -0
- package/src/plugins/builtin/company-attention/building.tsx +172 -0
- package/src/plugins/builtin/company-attention/client.ts +117 -1
- package/src/plugins/builtin/company-attention/evidence.ts +16 -3
- package/src/plugins/builtin/company-attention/headless.ts +101 -5
- package/src/plugins/builtin/company-attention/index.tsx +6 -3
- package/src/plugins/builtin/company-attention/model.ts +33 -7
- package/src/plugins/builtin/company-attention/moves-model.ts +253 -0
- package/src/plugins/builtin/company-attention/moves.tsx +159 -0
- package/src/plugins/builtin/company-attention/pane.tsx +79 -23
- package/src/plugins/builtin/company-attention/signals-model.ts +229 -0
- package/src/plugins/builtin/company-attention/signals.tsx +160 -0
- package/src/plugins/builtin/company-kpis/headless.ts +3 -2
- package/src/plugins/builtin/company-kpis/model.ts +2 -2
- package/src/plugins/builtin/company-kpis/pane.tsx +1 -1
- package/src/plugins/builtin/composite-plugins.ts +2 -1
- package/src/plugins/builtin/congress-trades/headless.ts +1 -1
- package/src/plugins/builtin/connections/index.ts +1 -0
- package/src/plugins/builtin/correlation/headless-schema.ts +3 -2
- package/src/plugins/builtin/correlation/headless.ts +5 -3
- package/src/plugins/builtin/cot/headless.ts +28 -6
- package/src/plugins/builtin/cot/model.ts +12 -0
- package/src/plugins/builtin/cot/pane.tsx +3 -2
- package/src/plugins/builtin/cpi/headless.ts +5 -1
- package/src/plugins/builtin/cpi/pane.tsx +11 -9
- package/src/plugins/builtin/credit-boards/model.ts +2 -0
- package/src/plugins/builtin/credit-documents/headless.ts +1 -1
- package/src/plugins/builtin/crypto-board/client.ts +86 -0
- package/src/plugins/builtin/crypto-board/defi-view.tsx +218 -0
- package/src/plugins/builtin/crypto-board/defi.ts +239 -0
- package/src/plugins/builtin/crypto-board/headless.ts +117 -6
- package/src/plugins/builtin/crypto-board/index.tsx +8 -3
- package/src/plugins/builtin/crypto-board/model.ts +40 -8
- package/src/plugins/builtin/crypto-board/pane.tsx +55 -21
- package/src/plugins/builtin/crypto-board/series.ts +19 -1
- package/src/plugins/builtin/crypto-etf-flows/client.ts +60 -0
- package/src/plugins/builtin/crypto-etf-flows/headless.ts +132 -0
- package/src/plugins/builtin/crypto-etf-flows/index.tsx +44 -0
- package/src/plugins/builtin/crypto-etf-flows/model.ts +121 -0
- package/src/plugins/builtin/crypto-etf-flows/pane.tsx +193 -0
- package/src/plugins/builtin/debug/index.tsx +1 -0
- package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
- package/src/plugins/builtin/docs/index.tsx +1 -1
- package/src/plugins/builtin/docs/pane.tsx +2 -2
- package/src/plugins/builtin/docs/targets.ts +1 -1
- package/src/plugins/builtin/doe/client.ts +5 -1
- package/src/plugins/builtin/doe/headless.ts +12 -6
- package/src/plugins/builtin/doe/model.ts +43 -6
- package/src/plugins/builtin/doe/pane.tsx +18 -11
- package/src/plugins/builtin/earnings/board-model.ts +13 -6
- package/src/plugins/builtin/earnings/board-table.ts +4 -1
- package/src/plugins/builtin/earnings/board.tsx +253 -50
- package/src/plugins/builtin/earnings/calendar-model.ts +188 -0
- package/src/plugins/builtin/earnings/calendar.tsx +338 -0
- package/src/plugins/builtin/earnings/client.ts +4 -3
- package/src/plugins/builtin/earnings/headless.ts +53 -15
- package/src/plugins/builtin/earnings/history-model.ts +53 -36
- package/src/plugins/builtin/earnings/index.tsx +15 -22
- package/src/plugins/builtin/earnings/model.ts +17 -12
- package/src/plugins/builtin/earnings/scope.ts +89 -0
- package/src/plugins/builtin/earnings-calls/calendar.tsx +310 -0
- package/src/plugins/builtin/earnings-calls/data.ts +146 -2
- package/src/plugins/builtin/earnings-calls/headless.ts +151 -9
- package/src/plugins/builtin/earnings-calls/index.tsx +3 -3
- package/src/plugins/builtin/earnings-calls/lock-note.ts +1 -1
- package/src/plugins/builtin/earnings-calls/pane.tsx +149 -31
- package/src/plugins/builtin/earnings-calls/upcoming.ts +195 -0
- package/src/plugins/builtin/earnings-ripple/pane.tsx +10 -5
- package/src/plugins/builtin/econ/calendar-model.ts +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 +68 -6
- package/src/plugins/builtin/equity-screener/live.ts +1 -1
- package/src/plugins/builtin/equity-screener/model.ts +6 -0
- package/src/plugins/builtin/equity-screener/pane.tsx +45 -10
- 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 +6 -1
- 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/headless.ts +9 -4
- 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 +13 -1
- package/src/plugins/builtin/holders/format.ts +28 -17
- package/src/plugins/builtin/holders/headless.ts +46 -7
- package/src/plugins/builtin/holders/index-holders.ts +264 -0
- package/src/plugins/builtin/holders/pane.tsx +79 -15
- package/src/plugins/builtin/holders/report-rows.ts +35 -7
- package/src/plugins/builtin/holders/table-model.ts +2 -1
- package/src/plugins/builtin/holders/treemap.tsx +2 -2
- package/src/plugins/builtin/insider/headless.ts +1 -1
- package/src/plugins/builtin/insider/signals-client.ts +1 -1
- package/src/plugins/builtin/insider/signals.tsx +1 -1
- package/src/plugins/builtin/ipo-calendar/pane.tsx +7 -4
- package/src/plugins/builtin/iv-history/client.ts +20 -0
- package/src/plugins/builtin/iv-history/headless.ts +4 -4
- package/src/plugins/builtin/iv-history/index.tsx +1 -1
- package/src/plugins/builtin/iv-history/model.ts +13 -4
- package/src/plugins/builtin/iv-history/series.ts +3 -1
- package/src/plugins/builtin/jobs/lock-note.ts +1 -1
- package/src/plugins/builtin/jobs/model.ts +4 -15
- package/src/plugins/builtin/jobs/pane.tsx +7 -5
- package/src/plugins/builtin/jobs/share-bars.tsx +11 -5
- package/src/plugins/builtin/jodi/pane.tsx +10 -4
- package/src/plugins/builtin/layout-manager/index.tsx +1 -0
- package/src/plugins/builtin/macro-day/headless.ts +20 -7
- package/src/plugins/builtin/macro-day/index.tsx +3 -2
- package/src/plugins/builtin/macro-day/model.ts +29 -8
- package/src/plugins/builtin/macro-day/pane.tsx +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 +33 -19
- package/src/plugins/builtin/market-movers/headless.ts +8 -2
- package/src/plugins/builtin/market-movers/index.tsx +16 -10
- package/src/plugins/builtin/market-movers/screener.ts +29 -8
- package/src/plugins/builtin/market-movers/session-body.tsx +4 -2
- package/src/plugins/builtin/market-movers/session-table.ts +4 -2
- package/src/plugins/builtin/market-movers/table.ts +4 -1
- package/src/plugins/builtin/market-valuation/headless.ts +2 -0
- package/src/plugins/builtin/market-valuation/view.ts +5 -0
- package/src/plugins/builtin/members/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 +49 -14
- package/src/plugins/builtin/openfda/pane.tsx +1 -1
- package/src/plugins/builtin/options/carry.ts +2 -2
- package/src/plugins/builtin/options/index.tsx +1 -1
- package/src/plugins/builtin/options/view.tsx +10 -10
- package/src/plugins/builtin/options-calculator/headless.ts +46 -7
- package/src/plugins/builtin/options-scenario/client.ts +123 -28
- package/src/plugins/builtin/options-scenario/collar.ts +8 -6
- package/src/plugins/builtin/options-scenario/csp-screen-headless.ts +127 -0
- package/src/plugins/builtin/options-scenario/csp-screen-pane.tsx +165 -0
- package/src/plugins/builtin/options-scenario/csp-screen.ts +258 -0
- package/src/plugins/builtin/options-scenario/csp.ts +101 -21
- package/src/plugins/builtin/options-scenario/headless.ts +36 -15
- package/src/plugins/builtin/options-scenario/hedge.ts +20 -14
- package/src/plugins/builtin/options-scenario/index.tsx +28 -3
- package/src/plugins/builtin/options-scenario/model.ts +13 -0
- package/src/plugins/builtin/options-scenario/pane.tsx +9 -5
- package/src/plugins/builtin/perps/equity-row.tsx +11 -3
- package/src/plugins/builtin/perps/freshness.ts +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 +143 -59
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +72 -24
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +158 -141
- package/src/plugins/builtin/portfolio-list/cli/render.ts +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 +4 -1
- package/src/plugins/builtin/power/evidence.ts +22 -7
- package/src/plugins/builtin/power/gas.tsx +5 -1
- package/src/plugins/builtin/power/pane.tsx +8 -1
- package/src/plugins/builtin/power/prices.tsx +10 -3
- package/src/plugins/builtin/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/model.ts +6 -2
- package/src/plugins/builtin/risk-factors/index.tsx +2 -2
- package/src/plugins/builtin/scanner/lock-note.ts +1 -1
- package/src/plugins/builtin/sec/forms.ts +13 -0
- package/src/plugins/builtin/sec/fund-abroad.ts +32 -0
- package/src/plugins/builtin/sec/fund-facts.ts +68 -8
- package/src/plugins/builtin/sec/headless.ts +85 -8
- package/src/plugins/builtin/sec/index.tsx +58 -12
- package/src/plugins/builtin/sectors/client.ts +2 -1
- package/src/plugins/builtin/sectors/sector-model.ts +11 -15
- package/src/plugins/builtin/series-inventory.ts +2 -0
- package/src/plugins/builtin/shared/broker-reconnect.ts +107 -22
- package/src/plugins/builtin/shared/cloud-upgrade.ts +34 -6
- package/src/plugins/builtin/shared/earnings-calendar.ts +375 -0
- package/src/plugins/builtin/{earnings/estimate-basis.ts → shared/earnings-estimate-basis.ts} +1 -1
- package/src/plugins/builtin/shared/earnings-report.ts +3 -3
- package/src/plugins/builtin/shared/fx-rate-freshness.ts +23 -1
- package/src/plugins/builtin/shared/job-posting.ts +129 -0
- package/src/plugins/builtin/shared/pro-lock-note.ts +3 -3
- package/src/plugins/builtin/shared/report-freshness.ts +3 -0
- package/src/plugins/builtin/shared/research-trading.tsx +21 -0
- package/src/plugins/builtin/shared/series-cache.ts +2 -0
- package/src/plugins/builtin/shared/ticker-surface.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/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 +5 -4
- package/src/plugins/builtin/vol-surface/headless.ts +12 -3
- package/src/plugins/builtin/vol-surface/model.ts +4 -2
- 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/dom-ui-host.tsx +4 -29
- package/src/renderers/dom/host/ascii-text.ts +16 -2
- package/src/renderers/dom/host/box.tsx +43 -2
- package/src/renderers/dom/host/chart-surface.tsx +2 -0
- package/src/renderers/dom/host/hls.chunk.ts +3 -0
- package/src/renderers/dom/host/image-surface.tsx +49 -0
- package/src/renderers/dom/host/media-surface.tsx +24 -18
- package/src/renderers/dom/host/mouse.ts +30 -0
- package/src/renderers/dom/host/size-observer.ts +1 -1
- package/src/renderers/dom/host/style.ts +1 -1
- package/src/renderers/dom/styles.css +76 -0
- package/src/renderers/dom/test-utils.tsx +2 -1
- package/src/renderers/electrobun/bun/application-menu/index.ts +3 -3
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +3 -0
- package/src/renderers/electrobun/bun/desktop/backend.ts +46 -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/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 +5 -5
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +1 -1
- package/src/renderers/electrobun/view/ui-host.tsx +1 -1
- package/src/renderers/opentui/browser-open.ts +88 -0
- package/src/renderers/opentui/host.tsx +5 -14
- package/src/renderers/opentui/image/loader.ts +3 -2
- package/src/renderers/opentui/native-smoke.ts +10 -1
- package/src/renderers/opentui/pane-image/index.ts +2 -1
- package/src/renderers/opentui/render-lib.ts +253 -0
- package/src/renderers/opentui/render-timing-smoke.ts +1 -1
- package/src/renderers/opentui/start.tsx +1 -1
- package/src/renderers/share/layout-view.tsx +2 -2
- package/src/renderers/share/main.tsx +4 -4
- package/src/renderers/share/view.tsx +1 -1
- package/src/series/resolve.ts +22 -6
- package/src/series/standalone.ts +30 -2
- package/src/series/types.ts +8 -1
- package/src/shares/api.ts +4 -1
- package/src/shares/pane.ts +1 -1
- package/src/sources/gloomberb-cloud/fred-series.ts +46 -1
- package/src/sources/gloomberb-cloud/index.ts +32 -16
- package/src/sources/gloomberb-cloud/news.ts +39 -0
- package/src/sources/gloomberb-cloud/normalizers.ts +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/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 +17 -4
- 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 +210 -33
- package/src/tickers/index-roots.ts +47 -0
- package/src/tickers/instrument-label.ts +5 -1
- 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 +14 -0
- package/src/types/exchange-rate.ts +6 -0
- package/src/types/financials.ts +104 -7
- package/src/types/headless.ts +76 -6
- package/src/types/instrument.ts +3 -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/index.ts +10 -5
- package/src/utils/calendar-date.ts +32 -15
- package/src/utils/cash-runway.ts +241 -0
- package/src/utils/central-banks.ts +42 -0
- package/src/utils/cli-output.ts +259 -80
- package/src/utils/contract-month.ts +16 -0
- package/src/utils/crypto-pair.ts +61 -3
- package/src/utils/currency-units.ts +29 -0
- package/src/utils/datetime-format.ts +10 -0
- package/src/utils/debug-log.ts +1 -1
- package/src/utils/decimal-comma.ts +39 -6
- package/src/utils/exchange-announcements.ts +71 -0
- package/src/utils/exchange-rate-snapshot.ts +10 -0
- package/src/utils/financial-statements.ts +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 +3 -0
- package/src/utils/throttled-fetch.ts +11 -4
- package/src/utils/trailing-eps.ts +67 -0
- package/src/utils/typed-text.ts +21 -0
- package/src/utils/utc-time.ts +24 -1
- package/src/version.ts +6 -0
- package/src/cli/pane-functions/screenshot.ts +0 -2122
|
@@ -6,13 +6,16 @@ import {
|
|
|
6
6
|
renderSection,
|
|
7
7
|
renderTable,
|
|
8
8
|
wrapText,
|
|
9
|
+
wrapToTerminal,
|
|
9
10
|
} from "../../utils/cli-output";
|
|
10
11
|
import type { DataProvider } from "../../types/data-provider";
|
|
11
12
|
import type { Quote } from "../../types/financials";
|
|
12
13
|
import { quotedListingName } from "../../tickers/listing-name";
|
|
13
14
|
import type { TickerRecord } from "../../types/ticker";
|
|
14
15
|
import {
|
|
16
|
+
candidateExchange,
|
|
15
17
|
LISTING_SEARCH_LIMIT,
|
|
18
|
+
listingDistance,
|
|
16
19
|
searchTickerCandidates,
|
|
17
20
|
type TickerSearchCandidate,
|
|
18
21
|
} from "../../tickers/search";
|
|
@@ -24,16 +27,20 @@ import { fail, failRetryable } from "../errors";
|
|
|
24
27
|
import { isProviderBusy, SEARCH_BUSY_CODE, SEARCH_BUSY_MESSAGE } from "../../sources/provider-errors";
|
|
25
28
|
import type { MarketContext } from "../types";
|
|
26
29
|
import type { CliCommandContext, GloomPlugin } from "../../types/plugin";
|
|
27
|
-
import {
|
|
30
|
+
import { indexRootTryLine } from "../index-roots";
|
|
31
|
+
import { indexRootFor } from "../../tickers/index-roots";
|
|
28
32
|
import { readBrokerIndexCode } from "../listing-arg";
|
|
29
33
|
import { knownGapMessage, commandPointer } from "../known-gaps";
|
|
30
34
|
import { instrumentTypeLabel } from "../../tickers/instrument-kind";
|
|
31
35
|
import { canonicalExchange, isUsListingExchange } from "../../utils/exchanges";
|
|
32
|
-
import { groupByCompany, sameCompany } from "../../tickers/company-name";
|
|
36
|
+
import { companyNameExtraWords, groupByCompany, sameCompany } from "../../tickers/company-name";
|
|
37
|
+
import { namedByService } from "../../tickers/company-name-listing";
|
|
33
38
|
import { findCatalogSeries, renderSeriesMatches, type SeriesMatch } from "../series-search";
|
|
34
|
-
import {
|
|
39
|
+
import { centralBankAskedAbout, centralBankCiting, type CentralBank } from "../../utils/central-banks";
|
|
35
40
|
import { createPaneCatalog } from "../pane-functions/discovery";
|
|
36
41
|
import { buildPaneCatalogEntries, filterPaneCatalogEntries, selectPaneCatalogMatches } from "../pane-functions/catalog";
|
|
42
|
+
import { normalizeSearchText } from "../../tickers/search/ranking";
|
|
43
|
+
import { hasNonLatinLetters } from "../../utils/typed-text";
|
|
37
44
|
|
|
38
45
|
interface SearchCommandDependencies {
|
|
39
46
|
initMarketData?: () => Promise<MarketContext>;
|
|
@@ -102,7 +109,8 @@ export async function searchCandidatesForCli({
|
|
|
102
109
|
quote?: Promise<Quote | null>;
|
|
103
110
|
}): Promise<TickerSearchCandidate[]> {
|
|
104
111
|
const trimmedQuery = query.trim();
|
|
105
|
-
|
|
112
|
+
// Only signs (`!!!`) name nothing: no saved ticker is a match for them.
|
|
113
|
+
if (!normalizeSearchText(trimmedQuery)) return [];
|
|
106
114
|
|
|
107
115
|
const localTickerMap = new Map(
|
|
108
116
|
tickers.map((ticker) => [ticker.metadata.ticker.toUpperCase(), ticker] as const),
|
|
@@ -124,7 +132,8 @@ export async function searchCandidatesForCli({
|
|
|
124
132
|
const quote = BARE_SYMBOL.test(symbol) && candidates.some((candidate) => candidate.symbol.toUpperCase() === symbol)
|
|
125
133
|
? await (quoted ?? loadSearchedQuote(symbol, savedExchange, dataProvider))
|
|
126
134
|
: null;
|
|
127
|
-
return withQuotedNames(symbol, withHomeListingPrimary(
|
|
135
|
+
return withQuotedNames(symbol, withHomeListingPrimary(trimmedQuery, withPrimaryListingFirst(symbol, candidates, quote)), quote)
|
|
136
|
+
.slice(0, totalLimit);
|
|
128
137
|
} catch (error) {
|
|
129
138
|
// Not "No matches found": a script or a reader would take that for a name nothing lists.
|
|
130
139
|
if (isProviderBusy(error)) failRetryable(SEARCH_BUSY_MESSAGE, SEARCH_BUSY_CODE);
|
|
@@ -204,15 +213,10 @@ function formerIssuerNotes(candidates: readonly TickerSearchCandidate[], fate: S
|
|
|
204
213
|
/** A query that is a bare symbol (CAR, BRK.B), not a name or a phrase. */
|
|
205
214
|
const BARE_SYMBOL = /^[A-Z0-9][A-Z0-9.\-]{0,11}$/;
|
|
206
215
|
|
|
207
|
-
function candidateExchange(candidate: TickerSearchCandidate): string {
|
|
208
|
-
return canonicalExchange(candidate.result?.exchange === "SMART"
|
|
209
|
-
? candidate.result.primaryExchange
|
|
210
|
-
: candidate.result?.exchange || candidate.result?.primaryExchange || candidate.ticker?.metadata.exchange || candidate.right);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
216
|
/**
|
|
214
217
|
* For a bare symbol several companies list (CAR: Avis, Carrefour, CAR Group),
|
|
215
|
-
* the listing `quote CAR` reads goes first
|
|
218
|
+
* the company of the listing `quote CAR` reads goes first, under its home
|
|
219
|
+
* line when the service marks one of its listings so, then each
|
|
216
220
|
* other company's first listing, then the rest of their venues, so a short
|
|
217
221
|
* list still shows every company. A saved listing is the user's choice and
|
|
218
222
|
* stays where search put it. Any other query keeps search's order.
|
|
@@ -228,8 +232,10 @@ function withPrimaryListingFirst(
|
|
|
228
232
|
const listed = exact.filter((candidate) => candidate.kind === "search" && (candidate.instrumentClass === "equity" || candidate.instrumentClass === "other"));
|
|
229
233
|
const companies = groupByCompany(listed, resolveSearchName);
|
|
230
234
|
if (companies.length < 2) return candidates;
|
|
231
|
-
const
|
|
232
|
-
if (!
|
|
235
|
+
const quoted = quotedCandidate(listed, quote);
|
|
236
|
+
if (!quoted) return candidates;
|
|
237
|
+
// That company leads with its home line where it lists one under the symbol too (TD on TSX before NYSE).
|
|
238
|
+
const primary = companies.find((group) => group.includes(quoted))?.find((candidate) => candidate.result?.homeListing === true) ?? quoted;
|
|
233
239
|
const firsts = companies.filter((group) => !group.includes(primary)).map((group) => group[0]!);
|
|
234
240
|
const ordered = [primary, ...firsts, ...listed.filter((candidate) => candidate !== primary && !firsts.includes(candidate))];
|
|
235
241
|
const at = candidates.indexOf(listed[0]!);
|
|
@@ -241,19 +247,6 @@ function withPrimaryListingFirst(
|
|
|
241
247
|
));
|
|
242
248
|
}
|
|
243
249
|
|
|
244
|
-
/** Venues that only quote shares listed elsewhere: the OTC tiers, Frankfurt's open market and Germany's regional exchanges. */
|
|
245
|
-
const SECONDARY_VENUES = new Set(["OTC", "PNK", "OTCQX", "OTCQB", "FWB2", "MUNICH", "XSTU", "XDUS", "XBER", "XHAM", "HANOVER"]);
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* How far a listing is from being its company's own line: 0 a plain one, 1 a
|
|
249
|
-
* line that only quotes shares listed elsewhere (a regional venue, OTC, a
|
|
250
|
-
* Milan 4MSFT or London 0XXX code), 2 a depositary receipt.
|
|
251
|
-
*/
|
|
252
|
-
function listingDistance(candidate: TickerSearchCandidate): 0 | 1 | 2 {
|
|
253
|
-
if (/depositary|^(?:ADR|ADS|GDR|CDR|BDR)$/i.test(candidate.instrumentType ?? "")) return 2;
|
|
254
|
-
return SECONDARY_VENUES.has(candidateExchange(candidate)) || /\d/.test(candidate.symbol) && /[A-Za-z]/.test(candidate.symbol) ? 1 : 0;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
250
|
/**
|
|
258
251
|
* A company searched by name lists its home line as the primary listing. A
|
|
259
252
|
* search row names no home exchange or volume, so a company's lines go by
|
|
@@ -262,20 +255,31 @@ function listingDistance(candidate: TickerSearchCandidate): 0 | 1 | 2 {
|
|
|
262
255
|
* listing search put first, often the one-off cross-listing whose short name
|
|
263
256
|
* matched the query (LUFTHANSA on Budapest), gives way only to a closer line,
|
|
264
257
|
* or to one searched at least twice as often, or any scored line when it has
|
|
265
|
-
* no score. A listing searched by its own symbol is not moved
|
|
258
|
+
* no score. A listing searched by its own symbol is not moved, and nor is
|
|
259
|
+
* the line the service marks as the company's home (`homeListing`).
|
|
260
|
+
*
|
|
261
|
+
* The line the service marks with the name as typed is the company the name
|
|
262
|
+
* means ("coca cola" is The Coca-Cola Company's KO). A company whose name
|
|
263
|
+
* only adds words to it (Coca-Cola Consolidated, Coca-Cola Europacific) is
|
|
264
|
+
* not one of its lines, and no score outweighs the mark: only a closer line
|
|
265
|
+
* of the same name takes the lead, its home line for a receipt.
|
|
266
266
|
*/
|
|
267
|
-
function withHomeListingPrimary(
|
|
267
|
+
function withHomeListingPrimary(query: string, candidates: TickerSearchCandidate[]): TickerSearchCandidate[] {
|
|
268
268
|
const primary = candidates.find((candidate) => candidate.category === "Primary Listing");
|
|
269
|
-
if (!primary || primary.kind !== "search" || primary.
|
|
269
|
+
if (!primary || primary.kind !== "search" || primary.result?.homeListing === true
|
|
270
|
+
|| primary.symbol.toUpperCase() === query.toUpperCase()) return candidates;
|
|
270
271
|
const company = resolveSearchName(primary);
|
|
272
|
+
const marked = !!primary.result && namedByService(query, primary.result);
|
|
271
273
|
const lines = candidates.filter((candidate) => candidate.kind === "search" && candidate.category !== "Funds & Derivatives"
|
|
272
|
-
&& (candidate.instrumentClass === "equity" || candidate.instrumentClass === "other") && sameCompany(resolveSearchName(candidate), company)
|
|
274
|
+
&& (candidate.instrumentClass === "equity" || candidate.instrumentClass === "other") && sameCompany(resolveSearchName(candidate), company)
|
|
275
|
+
&& (!marked || companyNameExtraWords(resolveSearchName(candidate), company) != null));
|
|
273
276
|
const score = (candidate: TickerSearchCandidate) => candidate.result?.popularity ?? candidate.popularity ?? null;
|
|
274
277
|
const [home] = [...lines].sort((a, b) => listingDistance(a) - listingDistance(b) || (score(b) ?? -1) - (score(a) ?? -1) || candidates.indexOf(a) - candidates.indexOf(b));
|
|
275
278
|
if (!home || home === primary) return candidates;
|
|
276
279
|
const closer = listingDistance(home) < listingDistance(primary);
|
|
277
280
|
const [homeScore, primaryScore] = [score(home), score(primary)];
|
|
278
|
-
const moreSearched = listingDistance(home) === listingDistance(primary) && homeScore != null
|
|
281
|
+
const moreSearched = !marked && listingDistance(home) === listingDistance(primary) && homeScore != null
|
|
282
|
+
&& (primaryScore == null || homeScore >= primaryScore * 2);
|
|
279
283
|
if (!closer && !moreSearched) return candidates;
|
|
280
284
|
const rest = candidates.filter((candidate) => candidate !== home);
|
|
281
285
|
const at = rest.indexOf(primary);
|
|
@@ -366,7 +370,7 @@ function searchCandidateRows(candidates: TickerSearchCandidate[]) {
|
|
|
366
370
|
}
|
|
367
371
|
|
|
368
372
|
/**
|
|
369
|
-
* "^VIX Cboe Volatility Index (try:
|
|
373
|
+
* "^VIX Cboe Volatility Index (try: gloom quote ^VIX)" for a bare index root, whose
|
|
370
374
|
* search finds funds named after the index but not the index, unless it does list it.
|
|
371
375
|
*/
|
|
372
376
|
function indexRootNote(query: string, candidates: TickerSearchCandidate[]): string | null {
|
|
@@ -375,19 +379,31 @@ function indexRootNote(query: string, candidates: TickerSearchCandidate[]): stri
|
|
|
375
379
|
return indexRootTryLine(root);
|
|
376
380
|
}
|
|
377
381
|
|
|
378
|
-
/**
|
|
382
|
+
/**
|
|
383
|
+
* The bank on the CBR board a query names ("SNB", "Norges Bank"), asks the
|
|
384
|
+
* policy rate of ("bank of japan rate"), or whose row reads the FRED series
|
|
385
|
+
* it names (DFEDTARU).
|
|
386
|
+
*/
|
|
379
387
|
function searchedCentralBank(query: string): CentralBank | null {
|
|
380
|
-
return
|
|
388
|
+
return centralBankAskedAbout(query) ?? centralBankCiting(query.replace(/^FRED:/i, ""));
|
|
381
389
|
}
|
|
382
390
|
|
|
383
|
-
/** "Swiss National Bank (Switzerland): policy rate on the CBR board,
|
|
391
|
+
/** "Swiss National Bank (Switzerland): policy rate on the CBR board, gloom fn CBR." */
|
|
384
392
|
function centralBankLine(bank: CentralBank): string {
|
|
385
|
-
return `${bank.name} (${bank.place}): policy rate on the CBR board,
|
|
393
|
+
return `${bank.name} (${bank.place}): policy rate on the CBR board, gloom fn CBR.`;
|
|
386
394
|
}
|
|
387
395
|
|
|
388
396
|
/** Search finds tickers and companies; a function, a dataset or a term is in the catalog, so an empty search points there. */
|
|
389
397
|
function catalogHint(query: string): string {
|
|
390
|
-
return `Search finds tickers and company names. Try:
|
|
398
|
+
return `Search finds tickers and company names. Try: gloom catalog "${query.replace(/"/g, "")}"`;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/** What a search for a name in another script (任天堂) that found nothing says: listings are named in Latin letters. */
|
|
402
|
+
const OTHER_SCRIPT_NO_MATCH = "No matches. Try the ticker or the English name.";
|
|
403
|
+
|
|
404
|
+
/** The line an empty search ends with: where else to look, or for a name in another script, what to type instead. */
|
|
405
|
+
function emptySearchHint(query: string): string {
|
|
406
|
+
return hasNonLatinLetters(query) ? OTHER_SCRIPT_NO_MATCH : catalogHint(query);
|
|
391
407
|
}
|
|
392
408
|
|
|
393
409
|
/**
|
|
@@ -408,7 +424,7 @@ function searchNotes(
|
|
|
408
424
|
const empty = candidates.length === 0 && !fate.stopped;
|
|
409
425
|
// A gap line that names the index (TNX's yield line names ^TNX) says it once.
|
|
410
426
|
return [...fate.notes, ...formerIssuerNotes(candidates, fate), gap ? null : indexRootNote(query, candidates), gap, bank ? centralBankLine(bank) : null, setting,
|
|
411
|
-
empty && !gap && !bank && !setting && functions.length === 0 ?
|
|
427
|
+
empty && !gap && !bank && !setting && functions.length === 0 ? emptySearchHint(query) : null]
|
|
412
428
|
.filter((note): note is string => !!note);
|
|
413
429
|
}
|
|
414
430
|
|
|
@@ -419,7 +435,7 @@ function renderFunctionMatches(functions: readonly SearchFunctionMatch[]): strin
|
|
|
419
435
|
renderSection("Functions"),
|
|
420
436
|
...renderDefinitions(functions.map((match) => [`${match.token} ${match.label}`, match.description] as const), { width, termStyle: cliStyles.command }),
|
|
421
437
|
"",
|
|
422
|
-
...wrapText("No ticker or company matches.
|
|
438
|
+
...wrapText("No ticker or company matches. gloom catalog <function> shows a function's options and examples.", width)
|
|
423
439
|
.map((line) => cliStyles.muted(line)),
|
|
424
440
|
].join("\n");
|
|
425
441
|
}
|
|
@@ -455,7 +471,7 @@ export function buildSearchReport({
|
|
|
455
471
|
if (indexNote) lines.push("", indexNote);
|
|
456
472
|
if (gap) lines.push("", gap);
|
|
457
473
|
const bank = searchedCentralBank(query);
|
|
458
|
-
if (bank) lines.push("", centralBankLine(bank));
|
|
474
|
+
if (bank) lines.push("", wrapToTerminal(centralBankLine(bank)));
|
|
459
475
|
const setting = commandPointer(query);
|
|
460
476
|
if (setting) lines.push("", setting);
|
|
461
477
|
const charted = renderSeriesMatches(query, series, SEARCH_SERIES_LIMIT, cliTerminalWidth() ?? 100, "catalog");
|
|
@@ -469,7 +485,10 @@ export function buildSearchReport({
|
|
|
469
485
|
if (candidates.length === 0) {
|
|
470
486
|
if (fate.stopped) return lines.join("\n");
|
|
471
487
|
if (functions.length > 0) lines.push("", renderFunctionMatches(functions));
|
|
472
|
-
else if (!gap && !bank && !setting && !charted)
|
|
488
|
+
else if (!gap && !bank && !setting && !charted) {
|
|
489
|
+
return [...lines, ...hasNonLatinLetters(query) ? [cliStyles.muted(OTHER_SCRIPT_NO_MATCH)]
|
|
490
|
+
: [cliStyles.muted("No matches found."), cliStyles.muted(catalogHint(query))]].join("\n");
|
|
491
|
+
}
|
|
473
492
|
if (pointToCatalog) lines.push("", cliStyles.muted(catalogHint(query)));
|
|
474
493
|
return lines.join("\n");
|
|
475
494
|
}
|
|
@@ -516,7 +535,8 @@ function searchedFunctions(
|
|
|
516
535
|
plugins: GloomPlugin[] | undefined,
|
|
517
536
|
context: MarketContext,
|
|
518
537
|
): Promise<SearchFunctionMatch[]> {
|
|
519
|
-
|
|
538
|
+
// Functions are named in English: a name in another script is no function's.
|
|
539
|
+
return candidates.length === 0 && !fate.stopped && !knownGapMessage(query) && !searchedCentralBank(query) && plugins && !hasNonLatinLetters(query)
|
|
520
540
|
? searchFunctionsForCli(query, plugins, context)
|
|
521
541
|
: Promise.resolve([]);
|
|
522
542
|
}
|
|
@@ -538,7 +558,7 @@ export async function search(query: string, dependencies: SearchCommandDependenc
|
|
|
538
558
|
const failCommand = dependencies.fail ?? fail;
|
|
539
559
|
const initMarketDataFn = dependencies.initMarketData ?? initMarketData;
|
|
540
560
|
if (!trimmedQuery) {
|
|
541
|
-
failCommand("Usage:
|
|
561
|
+
failCommand("Usage: gloom search <query>");
|
|
542
562
|
}
|
|
543
563
|
|
|
544
564
|
await withMarketData(initMarketDataFn, async (context) => {
|
|
@@ -8,6 +8,7 @@ import { canonicalTimeZone } from "../../utils/utc-time";
|
|
|
8
8
|
import { readBaseCurrency } from "../../utils/base-currency";
|
|
9
9
|
import { NIGHTLY_CHANNEL_SUMMARY, parseUpdateChannel, withUpdateChannel } from "../../updater/channel";
|
|
10
10
|
import type { CliCommandDef } from "../../types/plugin";
|
|
11
|
+
import type { BuiltinCliCommandDef } from "../command-options";
|
|
11
12
|
import { resolveCliDataDir, withCliServices, withConfigData } from "../context";
|
|
12
13
|
import { CLI_COMMAND_GROUPS } from "../help";
|
|
13
14
|
import { dryRunNote, formatBytes, formatStatusCell } from "../helpers";
|
|
@@ -75,7 +76,7 @@ function parseBaseCurrencySetting(value: string): string {
|
|
|
75
76
|
if ("code" in reading) return reading.code;
|
|
76
77
|
const [first] = reading.suggestions;
|
|
77
78
|
return fail(reading.error, first
|
|
78
|
-
? `baseCurrency takes an ISO 4217 code:
|
|
79
|
+
? `baseCurrency takes an ISO 4217 code: gloom config set baseCurrency ${first}`
|
|
79
80
|
: "baseCurrency takes an ISO 4217 code such as USD, EUR or CAD.");
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -84,7 +85,7 @@ function baseCurrencyProblem(value: unknown): string | null {
|
|
|
84
85
|
const reading = readBaseCurrency(typeof value === "string" ? value : "");
|
|
85
86
|
if ("code" in reading) return null;
|
|
86
87
|
const [first] = reading.suggestions;
|
|
87
|
-
return `${reading.error} Set one:
|
|
88
|
+
return `${reading.error} Set one: gloom config set baseCurrency ${first ?? "<code>"}`;
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
function describeBaseCurrency(value: unknown): string {
|
|
@@ -115,7 +116,7 @@ function summarizeKeybindings(value: unknown): string {
|
|
|
115
116
|
`${Object.keys(described.commands ?? {}).length} command bindings`,
|
|
116
117
|
...(described.issues?.length ? [cliStyles.warning(`${described.issues.length} issues`)] : []),
|
|
117
118
|
];
|
|
118
|
-
return `${parts.join(", ")} ${cliStyles.muted("(
|
|
119
|
+
return `${parts.join(", ")} ${cliStyles.muted("(gloom config get keybindings)")}`;
|
|
119
120
|
}
|
|
120
121
|
|
|
121
122
|
function renderKeybindings(value: unknown): string {
|
|
@@ -141,7 +142,7 @@ function renderKeybindings(value: unknown): string {
|
|
|
141
142
|
[{ header: "Keys" }, { header: "Runs" }],
|
|
142
143
|
Object.entries(described.commands).map(([chord, query]) => [chord, query]),
|
|
143
144
|
)
|
|
144
|
-
: wrapText("None. Bind one with
|
|
145
|
+
: wrapText("None. Bind one with gloom config set keybindings.commands.<keys> <command>.", cliTerminalWidth() ?? 80)
|
|
145
146
|
.map((line) => cliStyles.muted(line)).join("\n"),
|
|
146
147
|
];
|
|
147
148
|
if (described.issues.length > 0) {
|
|
@@ -215,6 +216,11 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
215
216
|
});
|
|
216
217
|
checks.push({ check: "database", status: "ok", detail: join(services.dataDir, ".gloomberb-cache.db") });
|
|
217
218
|
checks.push({ check: "plugins", status: "ok", detail: String(services.services.pluginRegistry.allPlugins.size) });
|
|
219
|
+
// Official plugins a launch could not install, which the app otherwise just lacks.
|
|
220
|
+
const { officialPluginsCheck } = await import("../../plugins/extracted-plugins");
|
|
221
|
+
const { gitInstalled } = await import("../../plugins/installer");
|
|
222
|
+
const official = officialPluginsCheck(services.config, { gitMissing: () => !gitInstalled() });
|
|
223
|
+
if (official) checks.push(official);
|
|
218
224
|
checks.push({ check: "capabilities", status: "ok", detail: String(services.services.pluginRegistry.capabilities.manifests().length) });
|
|
219
225
|
// Only a saved value no conversion can price is worth a line.
|
|
220
226
|
const baseCurrencyIssue = baseCurrencyProblem(services.config.baseCurrency);
|
|
@@ -223,7 +229,7 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
223
229
|
checks.push({
|
|
224
230
|
check: "theme",
|
|
225
231
|
status: themeName(theme) ? "ok" : "warn",
|
|
226
|
-
detail: themeName(theme) ? describeThemeId(theme) : `${describeThemeId(theme)}. Pick one with
|
|
232
|
+
detail: themeName(theme) ? describeThemeId(theme) : `${describeThemeId(theme)}. Pick one with gloom config set theme <id>.`,
|
|
227
233
|
});
|
|
228
234
|
});
|
|
229
235
|
} catch (error) {
|
|
@@ -347,7 +353,7 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
347
353
|
return;
|
|
348
354
|
}
|
|
349
355
|
if (action === "get") {
|
|
350
|
-
const key = requireArg(args[1], "Usage:
|
|
356
|
+
const key = requireArg(args[1], "Usage: gloom config get <key>", ctx);
|
|
351
357
|
if (!Object.prototype.hasOwnProperty.call(safeConfig, key)) {
|
|
352
358
|
ctx.fail(`Unknown config key "${key}".`, `Keys: ${Object.keys(safeConfig).join(", ")}`);
|
|
353
359
|
}
|
|
@@ -366,8 +372,8 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
366
372
|
return;
|
|
367
373
|
}
|
|
368
374
|
if (action === "set") {
|
|
369
|
-
const key = requireArg(args[1], "Usage:
|
|
370
|
-
const value = requireArg(args[2], "Usage:
|
|
375
|
+
const key = requireArg(args[1], "Usage: gloom config set <key> <value>", ctx);
|
|
376
|
+
const value = requireArg(args[2], "Usage: gloom config set <key> <value>", ctx);
|
|
371
377
|
if (key.startsWith(`${KEYBINDINGS_CONFIG_KEY}.`)) {
|
|
372
378
|
// The value may carry several chords or a multi-word command, so
|
|
373
379
|
// everything after the key is the value.
|
|
@@ -391,10 +397,10 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
391
397
|
ctx.fail(`Config key "${key}" is not editable from the CLI.`, `Editable keys: ${EDITABLE_CONFIG_KEYS.join(", ")}, keybindings.*`);
|
|
392
398
|
}
|
|
393
399
|
if ((isTelemetryConfigKey(key) || key === STAR_PROMPT_CONFIG_KEY) && value !== "true" && value !== "false") {
|
|
394
|
-
ctx.fail(`Usage:
|
|
400
|
+
ctx.fail(`Usage: gloom config set ${key} true|false`);
|
|
395
401
|
}
|
|
396
402
|
if (key === UPDATE_CHANNEL_CONFIG_KEY && !parseUpdateChannel(value)) {
|
|
397
|
-
ctx.fail(`Usage:
|
|
403
|
+
ctx.fail(`Usage: gloom config set ${key} stable|nightly`);
|
|
398
404
|
}
|
|
399
405
|
// A display name may come unquoted: config set theme White Phosphor.
|
|
400
406
|
const parsedValue = key === "theme"
|
|
@@ -435,7 +441,7 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
435
441
|
});
|
|
436
442
|
return;
|
|
437
443
|
}
|
|
438
|
-
ctx.fail("Usage:
|
|
444
|
+
ctx.fail("Usage: gloom config list|get|set|themes");
|
|
439
445
|
});
|
|
440
446
|
},
|
|
441
447
|
};
|
|
@@ -478,7 +484,7 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
478
484
|
});
|
|
479
485
|
return;
|
|
480
486
|
}
|
|
481
|
-
ctx.fail("Usage:
|
|
487
|
+
ctx.fail("Usage: gloom cache status|clear");
|
|
482
488
|
});
|
|
483
489
|
},
|
|
484
490
|
};
|
|
@@ -507,7 +513,7 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
507
513
|
],
|
|
508
514
|
textColumns: [
|
|
509
515
|
{ key: "capability", header: "Capability", shrink: false },
|
|
510
|
-
{ key: "id", header: "Source"
|
|
516
|
+
{ key: "id", header: "Source" },
|
|
511
517
|
{ key: "kind", header: "Kind", shrink: false },
|
|
512
518
|
{ key: "enabled", header: "Enabled" },
|
|
513
519
|
{ key: "operations", header: "Operations", format: (value) => String(value).split(",").join(", ") },
|
|
@@ -517,9 +523,11 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
517
523
|
},
|
|
518
524
|
};
|
|
519
525
|
|
|
520
|
-
const pluginCommand:
|
|
526
|
+
const pluginCommand: BuiltinCliCommandDef = {
|
|
521
527
|
name: "plugin",
|
|
522
528
|
description: "Inspect, turn on or off, link, or check any plugin",
|
|
529
|
+
// `link` and `doctor` take a checkout's path.
|
|
530
|
+
keepsArgAsTyped: () => true,
|
|
523
531
|
help: {
|
|
524
532
|
group: CLI_COMMAND_GROUPS.plugins,
|
|
525
533
|
usage: [
|
|
@@ -534,7 +542,7 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
534
542
|
title: "Developing a plugin",
|
|
535
543
|
lines: [
|
|
536
544
|
"link puts a symlink to a local checkout in the plugins folder, so edits are live on the next start.",
|
|
537
|
-
"doctor checks an installed or linked plugin the way the app and the desktop build will: entry, the
|
|
545
|
+
"doctor checks an installed or linked plugin the way the app and the desktop build will: entry, the Gloom it declares, removed or deprecated imports, export, id, targets, declared hosts, and the browser bundle. Run it before publishing.",
|
|
538
546
|
],
|
|
539
547
|
}],
|
|
540
548
|
examples: ["plugin list", "plugin info news", "plugin disable hackernews", "plugin link ../my-plugin", "plugin doctor ../my-plugin"],
|
|
@@ -564,7 +572,7 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
564
572
|
return;
|
|
565
573
|
}
|
|
566
574
|
if (action === "link") {
|
|
567
|
-
const path = requireArg(args[1], "Usage:
|
|
575
|
+
const path = requireArg(args[1], "Usage: gloom plugin link <path>", ctx);
|
|
568
576
|
const { linkPlugin } = await import("../../plugins/installer");
|
|
569
577
|
const info = await linkPlugin(path, { quiet: ctx.cliOptions.format !== "text" });
|
|
570
578
|
if (ctx.cliOptions.format !== "text") ctx.printResult({ data: info });
|
|
@@ -588,14 +596,14 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
588
596
|
return;
|
|
589
597
|
}
|
|
590
598
|
if (action === "info") {
|
|
591
|
-
const id = requireArg(args[1], "Usage:
|
|
599
|
+
const id = requireArg(args[1], "Usage: gloom plugin info <id>", ctx);
|
|
592
600
|
const row = pluginRows().find((plugin) => plugin.id === id);
|
|
593
601
|
if (!row) ctx.fail(`Plugin "${id}" is not available.`);
|
|
594
602
|
ctx.printResult({ data: row });
|
|
595
603
|
return;
|
|
596
604
|
}
|
|
597
605
|
if (action === "enable" || action === "disable") {
|
|
598
|
-
const id = requireArg(args[1], `Usage:
|
|
606
|
+
const id = requireArg(args[1], `Usage: gloom plugin ${action} <id>`, ctx);
|
|
599
607
|
// A retired id that now names a group of built-ins switches all of them.
|
|
600
608
|
const targetIds = builtinPluginGroupMembers(id) ?? [id];
|
|
601
609
|
for (const targetId of targetIds) {
|
|
@@ -622,7 +630,7 @@ export function createSystemCliCommands(): CliCommandDef[] {
|
|
|
622
630
|
});
|
|
623
631
|
return;
|
|
624
632
|
}
|
|
625
|
-
ctx.fail("Usage:
|
|
633
|
+
ctx.fail("Usage: gloom plugin list|info|enable|disable|doctor|link");
|
|
626
634
|
});
|
|
627
635
|
},
|
|
628
636
|
};
|
|
@@ -13,7 +13,7 @@ export function describeThemeId(id: string): string {
|
|
|
13
13
|
/** Every id with its name, from the registry, for an error that has to say what would have worked. */
|
|
14
14
|
function themeChoicesText(): string {
|
|
15
15
|
const choices = listThemes().map(({ id, name }) => `${id} (${name})`).join(", ");
|
|
16
|
-
return `Themes: ${choices}.
|
|
16
|
+
return `Themes: ${choices}. gloom config themes lists them with notes.`;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|