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
|
@@ -67,7 +67,7 @@ function ratioShot(resolved: ResolvedPaneFunction, payload: DesktopPaneShotPaylo
|
|
|
67
67
|
return { symbol, financials, tab, period, model: ratioTableForFinancials(financials, tab, period, history) };
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
const hasRatio = ({ model
|
|
70
|
+
const hasRatio = ({ model }: RatioShot, index: number) => model.ratios.some((def) => (
|
|
71
71
|
typeof model.cells.get(def.id)?.[index]?.value === "number"
|
|
72
72
|
));
|
|
73
73
|
|
|
@@ -106,7 +106,7 @@ export function financialRatioShotEvidence(
|
|
|
106
106
|
date: statement.date,
|
|
107
107
|
periodEnd: ratioPeriodEnd(statement),
|
|
108
108
|
price: typeof price === "number" ? price : null,
|
|
109
|
-
ratios: shot.
|
|
109
|
+
ratios: shot.model.ratios.flatMap((def) => {
|
|
110
110
|
const value = shot.model.cells.get(def.id)![index]!.value;
|
|
111
111
|
return typeof value === "number" ? [{ id: def.id, label: def.label, value }] : [];
|
|
112
112
|
}),
|
|
@@ -12,6 +12,8 @@ import { localTimeSuffix, parseReportTime, type ReportTime } from "../../utils/u
|
|
|
12
12
|
import { isRecord } from "../../utils/guards";
|
|
13
13
|
import { latestRegularSessionClose, readIndexSession } from "../../market-data/market/freshness";
|
|
14
14
|
import { reportMarketSession, reportVenueSessionDates, type ReportMarket, type SessionObservation, type VenueSessionDate } from "./market-session";
|
|
15
|
+
import { savedCopyShownAt } from "../../data/saved-copies";
|
|
16
|
+
import { releasedText } from "../../utils/release-date";
|
|
15
17
|
|
|
16
18
|
/**
|
|
17
19
|
* The four states of docs/usage.md#how-current-a-report-is, plus `unreported`
|
|
@@ -23,10 +25,26 @@ type ReportFreshnessStatus = HeadlessFreshnessStatus | "unreported";
|
|
|
23
25
|
/** What every `fn` report cites about its data, in its JSON and its last text line. */
|
|
24
26
|
export interface ReportFreshness {
|
|
25
27
|
source: string;
|
|
26
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Newest observation: an ISO instant in UTC, or an ISO date. For a figure
|
|
30
|
+
* dated by the period it covers whose release is known (`referencePeriod`),
|
|
31
|
+
* the day or time it was released. Null when nothing in the data is dated.
|
|
32
|
+
*/
|
|
27
33
|
asOf: string | null;
|
|
34
|
+
/**
|
|
35
|
+
* The newest observation's own date when `asOf` is its release: the first
|
|
36
|
+
* day of its period with `periodicity` (`2026-09-01` is Sep 2026), else the
|
|
37
|
+
* day it is dated by (a weekly figure's week end). The status line then
|
|
38
|
+
* reads `Sep 2026, released Tue 20 Oct`.
|
|
39
|
+
*/
|
|
40
|
+
referencePeriod?: string;
|
|
28
41
|
/** Oldest observation, when it is more than a day older than `asOf`. */
|
|
29
42
|
oldest?: string;
|
|
43
|
+
/**
|
|
44
|
+
* How often the oldest observation publishes, when its rows say and it is
|
|
45
|
+
* not `periodicity` (a quarterly figure beside a monthly one); null for a day.
|
|
46
|
+
*/
|
|
47
|
+
oldestPeriodicity?: ReportFreshness["periodicity"] | null;
|
|
30
48
|
/** With a declared `citeOldest`: the oldest observation whenever it is older than `asOf`. Exports cite it. */
|
|
31
49
|
oldestObservation?: string;
|
|
32
50
|
status: ReportFreshnessStatus;
|
|
@@ -86,18 +104,42 @@ export interface ReportFreshness {
|
|
|
86
104
|
* oldest observation) to when this report was built: `oldest 9 min`.
|
|
87
105
|
*/
|
|
88
106
|
oldestAgeMinutes?: number;
|
|
107
|
+
/** The data states no feed (`status` is `unreported`) and its line says only its time and age (`ageOnly`). */
|
|
108
|
+
ageOnly?: true;
|
|
89
109
|
/** What the newest observation is, said before its time: `newest story Tue 29 Sep 2026 20:17 UTC`. */
|
|
90
110
|
asOfLabel?: string;
|
|
91
111
|
/** What the figures are, said after the status: `funding = current estimate, pays 08:00 UTC`. */
|
|
92
112
|
note?: string;
|
|
113
|
+
/** Shorter forms of `note`, in the order a capture's line too long for it tries them. */
|
|
114
|
+
noteVariants?: string[];
|
|
93
115
|
/** When the figures reach readers and when the next are due, said right after the as-of date. */
|
|
94
116
|
schedule?: string;
|
|
117
|
+
/** Shorter forms of `schedule`, in the order a status line too long for it tries them. */
|
|
118
|
+
scheduleVariants?: string[];
|
|
95
119
|
/** Who published the figures, when the data names them. */
|
|
96
120
|
publisher?: string;
|
|
97
121
|
/** When the publisher released the data, an ISO instant in UTC or an ISO date, when the data states it. */
|
|
98
122
|
publishedAt?: string;
|
|
99
123
|
/** When this report was built. */
|
|
100
124
|
retrievedAt: string;
|
|
125
|
+
/**
|
|
126
|
+
* Refreshing the data failed and a copy saved earlier answered: when that
|
|
127
|
+
* copy was saved, an ISO instant in UTC. The status line then says
|
|
128
|
+
* `couldn't refresh; saved 21:49 UTC` in place of how current the data is.
|
|
129
|
+
*/
|
|
130
|
+
savedAt?: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* The freshness a command prints, saying when what it shows (`shown`: its
|
|
135
|
+
* rows, or the data its line is drawn from) came from a copy saved earlier
|
|
136
|
+
* because refreshing it failed (`collectSavedCopies`): its status line then
|
|
137
|
+
* reads `couldn't refresh; saved 21:49 UTC` instead of live or delayed.
|
|
138
|
+
*/
|
|
139
|
+
export function withSavedCopy<F extends ReportFreshness | undefined>(freshness: F, shown: unknown): F {
|
|
140
|
+
if (!freshness || freshness.savedAt) return freshness;
|
|
141
|
+
const savedAt = savedCopyShownAt(shown);
|
|
142
|
+
return savedAt == null ? freshness : { ...freshness, savedAt: new Date(savedAt).toISOString() };
|
|
101
143
|
}
|
|
102
144
|
|
|
103
145
|
/** One source's newest observation: an ISO instant in UTC. */
|
|
@@ -140,6 +182,40 @@ interface Observations {
|
|
|
140
182
|
units: ReportTime[];
|
|
141
183
|
/** Metadata and snapshot stamps: candidates for `asOf` only. */
|
|
142
184
|
extra: ReportTime[];
|
|
185
|
+
/** A unit dated by the period it covers whose row says when it was released (`releasedOn`), and how often. */
|
|
186
|
+
releases?: Map<ReportTime, UnitRelease>;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
interface UnitRelease {
|
|
190
|
+
released: ReportTime | null;
|
|
191
|
+
periodicity?: NonNullable<HeadlessPaneFreshness["periodicity"]>;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const PERIODICITIES = new Set<unknown>(["monthly", "quarterly", "semiannual", "annual"]);
|
|
195
|
+
|
|
196
|
+
/** What a dated row says of its release: `releasedOn` and its `periodicity`, when it names either. */
|
|
197
|
+
function readUnitRelease(record: Record<string, unknown>, time: ReportTime, now: number, observations: Observations): void {
|
|
198
|
+
const hasPeriodicity = PERIODICITIES.has(record.periodicity);
|
|
199
|
+
if (!time.dateOnly || (record.releasedOn == null && !hasPeriodicity)) return;
|
|
200
|
+
(observations.releases ??= new Map()).set(time, {
|
|
201
|
+
released: releaseTime(record.releasedOn as HeadlessPaneFreshness["releasedOn"], time, now),
|
|
202
|
+
...(hasPeriodicity ? { periodicity: record.periodicity as UnitRelease["periodicity"] } : {}),
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* The release and periodicity of the newest observation when the rows dated
|
|
208
|
+
* `asOf` all say the same one; nothing when any of them names none, or they
|
|
209
|
+
* disagree (a monthly and a weekly figure dated the same day).
|
|
210
|
+
*/
|
|
211
|
+
function newestUnitRelease(observations: Observations, asOf: ReportTime): UnitRelease | null {
|
|
212
|
+
if (observations.extra.some((time) => time.time > asOf.time)) return null;
|
|
213
|
+
const newest = observations.units.filter((time) => time.time === asOf.time);
|
|
214
|
+
const releases = newest.map((time) => observations.releases?.get(time) ?? null);
|
|
215
|
+
const [first] = releases;
|
|
216
|
+
if (!first || releases.some((release) => !release
|
|
217
|
+
|| release.released?.time !== first.released?.time || release.periodicity !== first.periodicity)) return null;
|
|
218
|
+
return first;
|
|
143
219
|
}
|
|
144
220
|
|
|
145
221
|
function emptySignals(): FeedSignals {
|
|
@@ -231,7 +307,10 @@ function collect(
|
|
|
231
307
|
?? (observedKey ? null : observedTime(row, now, UPDATE_KEYS));
|
|
232
308
|
if (!ignoreStaleFlags) readUnitStale(row, time, signals);
|
|
233
309
|
readSession(row, time, signals);
|
|
234
|
-
if (time)
|
|
310
|
+
if (time) {
|
|
311
|
+
observations.units.push(time);
|
|
312
|
+
readUnitRelease(row, time, now, observations);
|
|
313
|
+
}
|
|
235
314
|
}
|
|
236
315
|
if (definition.shape === "series" && !declaredObservations) {
|
|
237
316
|
for (const series of (result as HeadlessSeriesResult).series) {
|
|
@@ -359,6 +438,17 @@ function declaredSources(declared: HeadlessPaneFreshness, now: number): Array<{
|
|
|
359
438
|
});
|
|
360
439
|
}
|
|
361
440
|
|
|
441
|
+
/**
|
|
442
|
+
* A declared release of the newest observation, when it is after the
|
|
443
|
+
* observation's day (or a time on it) and not in the future; null for anything
|
|
444
|
+
* else, a figure released the day it is dated by among them.
|
|
445
|
+
*/
|
|
446
|
+
function releaseTime(declared: HeadlessPaneFreshness["releasedOn"], observed: ReportTime, now: number): ReportTime | null {
|
|
447
|
+
const released = parseReportTime(declared);
|
|
448
|
+
if (!released || released.time < observed.time || released.time > now + FUTURE_TOLERANCE_MS) return null;
|
|
449
|
+
return released.dateOnly && released.time === observed.time ? null : released;
|
|
450
|
+
}
|
|
451
|
+
|
|
362
452
|
/** A declared bar period still forming, its last day read as a date; null for anything else. */
|
|
363
453
|
function readPeriodToDate(declared: HeadlessPaneFreshness["periodToDate"], now: number): { period: "week" | "month"; through: ReportTime | null } | null {
|
|
364
454
|
if (declared?.period !== "week" && declared?.period !== "month") return null;
|
|
@@ -375,7 +465,7 @@ function resolveFreshness({ declared, signals, observations, now }: FreshnessInp
|
|
|
375
465
|
const asOf = declaredAsOf ?? periodToDate?.through ?? newest([...observations.units, ...observations.extra]);
|
|
376
466
|
// The oldest source, not the newest, says how far behind the view can be.
|
|
377
467
|
const agedFrom = sources.length ? oldest(sources.map(({ time }) => time))
|
|
378
|
-
: declared.oldestAge ? oldest(observations.units) ?? asOf : null;
|
|
468
|
+
: declared.oldestAge || declared.ageOnly ? oldest(observations.units) ?? asOf : null;
|
|
379
469
|
const oldestAgeMinutes = agedFrom && !agedFrom.dateOnly ? Math.max(0, Math.floor((now - agedFrom.time) / 60_000)) : null;
|
|
380
470
|
// A loader that dates its data itself also says how old the oldest part is, or nothing;
|
|
381
471
|
// `oldest: null` says the rows are a history, whose first entry is not stale data.
|
|
@@ -441,7 +531,10 @@ function resolveFreshness({ declared, signals, observations, now }: FreshnessInp
|
|
|
441
531
|
const asOfClose = closeDate && asOf && !declaredAsOf ? closeDate : null;
|
|
442
532
|
const tradingDayMarket = asOfClose ? closeMarket
|
|
443
533
|
: asOf?.dateOnly ? declared.tradingDayMarket?.trim() || null : null;
|
|
444
|
-
|
|
534
|
+
// Rows dated by the period they cover can say how often they publish and when the newest was released.
|
|
535
|
+
const unitRelease = asOf && !declaredAsOf && !periodToDate ? newestUnitRelease(observations, asOf) : null;
|
|
536
|
+
const periodicity = (declared.periodicity ?? unitRelease?.periodicity) && asOf?.dateOnly
|
|
537
|
+
? declared.periodicity ?? unitRelease?.periodicity : undefined;
|
|
445
538
|
// Rows that are quotes (a feed, a venue's session) keep the market line, even on a dataset's pane.
|
|
446
539
|
const quoted = rowsAreQuotes(signals);
|
|
447
540
|
// A dataset disseminated with a delay (DTCC's swap tape) lags its newest observation all the same.
|
|
@@ -450,14 +543,28 @@ function resolveFreshness({ declared, signals, observations, now }: FreshnessInp
|
|
|
450
543
|
const observation = lagDays != null ? declared.observation?.trim() : undefined;
|
|
451
544
|
|
|
452
545
|
const note = declared.note?.trim();
|
|
546
|
+
const noteVariants = note ? (declared.noteVariants ?? []).map((variant) => variant.trim()).filter((variant) => variant && variant !== note) : [];
|
|
453
547
|
const asOfLabel = asOf ? declared.asOfLabel?.trim() : undefined;
|
|
454
548
|
const schedule = declared.schedule?.trim();
|
|
549
|
+
const scheduleVariants = schedule ? (declared.scheduleVariants ?? []).map((variant) => variant.trim()).filter((variant) => variant && variant !== schedule) : [];
|
|
455
550
|
const publisher = declared.publisher?.trim();
|
|
456
551
|
const publishedAt = parseReportTime(declared.publishedAt);
|
|
552
|
+
// A figure dated by the period it covers is as of its release: September's permits
|
|
553
|
+
// are dated 1 Sep and were released 20 Oct. Age, staleness and the oldest stay the observation's.
|
|
554
|
+
const released = asOf?.dateOnly && !declared.dataset && !periodToDate
|
|
555
|
+
? releaseTime(declared.releasedOn, asOf, now) ?? unitRelease?.released ?? null : null;
|
|
556
|
+
// The oldest row's own period, when the rows name theirs (a quarterly figure among daily ones).
|
|
557
|
+
const oldestRelease = !declared.periodicity && oldestTime ? observations.releases?.get(oldestTime) : undefined;
|
|
558
|
+
const oldestPeriodicity = declared.oldestPeriodicity !== undefined ? declared.oldestPeriodicity
|
|
559
|
+
: oldestRelease ? oldestRelease.periodicity ?? null : unitRelease?.periodicity ? null : undefined;
|
|
457
560
|
return {
|
|
458
561
|
source: declared.source?.trim() || (sources.length ? [...new Set(sources.map(({ source }) => source))].join(", ") : DEFAULT_REPORT_SOURCE),
|
|
459
|
-
asOf: asOf ? isoTime(asOf) : null,
|
|
460
|
-
...(
|
|
562
|
+
asOf: released ? isoTime(released) : asOf ? isoTime(asOf) : null,
|
|
563
|
+
...(released && asOf ? { referencePeriod: isoTime(asOf) } : {}),
|
|
564
|
+
...(asOf && oldestTime && asOf.time - oldestTime.time > OLDEST_GAP_MS ? {
|
|
565
|
+
oldest: isoTime(oldestTime),
|
|
566
|
+
...(oldestPeriodicity !== undefined && (oldestPeriodicity ?? undefined) !== periodicity ? { oldestPeriodicity } : {}),
|
|
567
|
+
} : {}),
|
|
461
568
|
...(asOf && oldestUnit && oldestUnit.time < asOf.time ? { oldestObservation: isoTime(oldestUnit) } : {}),
|
|
462
569
|
status,
|
|
463
570
|
...(delayMinutes != null && delayMinutes > 0 ? { delayMinutes } : {}),
|
|
@@ -475,9 +582,12 @@ function resolveFreshness({ declared, signals, observations, now }: FreshnessInp
|
|
|
475
582
|
...(observation ? { observation } : {}),
|
|
476
583
|
...(sources.length ? { sources: sources.map(({ source, time }) => ({ source, asOf: isoTime(time) })) } : {}),
|
|
477
584
|
...(oldestAgeMinutes != null ? { oldestAgeMinutes } : {}),
|
|
585
|
+
...(status === "unreported" && declared.ageOnly ? { ageOnly: true as const } : {}),
|
|
478
586
|
...(asOfLabel ? { asOfLabel } : {}),
|
|
479
587
|
...(note ? { note } : {}),
|
|
588
|
+
...(noteVariants.length > 0 ? { noteVariants } : {}),
|
|
480
589
|
...(schedule ? { schedule } : {}),
|
|
590
|
+
...(scheduleVariants.length > 0 ? { scheduleVariants } : {}),
|
|
481
591
|
...(publisher ? { publisher } : {}),
|
|
482
592
|
...(publishedAt ? { publishedAt: isoTime(publishedAt) } : {}),
|
|
483
593
|
retrievedAt: new Date(now).toISOString(),
|
|
@@ -558,7 +668,11 @@ export function deriveRenderedFreshness(
|
|
|
558
668
|
declared: merged,
|
|
559
669
|
signals,
|
|
560
670
|
// Rendered rows are often a history (a news list, a filing feed), so only the newest is cited.
|
|
561
|
-
observations: {
|
|
671
|
+
observations: {
|
|
672
|
+
units: observed?.observations.units ?? [],
|
|
673
|
+
extra: [...(observed?.observations.extra ?? []), ...units],
|
|
674
|
+
...(observed?.observations.releases ? { releases: observed.observations.releases } : {}),
|
|
675
|
+
},
|
|
562
676
|
now,
|
|
563
677
|
});
|
|
564
678
|
}
|
|
@@ -689,7 +803,8 @@ function statusText(freshness: ReportFreshness, short = false): string {
|
|
|
689
803
|
case "not-a-feed":
|
|
690
804
|
return freshness.basis ? `not a live feed (${freshness.basis})` : "not a live feed";
|
|
691
805
|
case "unreported":
|
|
692
|
-
|
|
806
|
+
// Keep any date or age, without inventing a feed status or announcing its absence.
|
|
807
|
+
return "";
|
|
693
808
|
default: {
|
|
694
809
|
const _exhaustive: never = freshness.status;
|
|
695
810
|
return _exhaustive;
|
|
@@ -702,6 +817,19 @@ function onRetrievalDay(iso: string, retrievedAt: string): boolean {
|
|
|
702
817
|
return iso.slice(0, 10) === retrievedAt.slice(0, 10);
|
|
703
818
|
}
|
|
704
819
|
|
|
820
|
+
/**
|
|
821
|
+
* What a report answered from a saved copy says in place of how current its
|
|
822
|
+
* data is: `couldn't refresh; saved 21:49 UTC`, with the day when the copy was
|
|
823
|
+
* saved on another day than the report was built.
|
|
824
|
+
*/
|
|
825
|
+
function savedCopyText(savedAt: string, retrievedAt: string, local: boolean): string {
|
|
826
|
+
const at = Date.parse(savedAt);
|
|
827
|
+
if (!Number.isFinite(at)) return "couldn't refresh";
|
|
828
|
+
const iso = new Date(at).toISOString();
|
|
829
|
+
const time = onRetrievalDay(iso, retrievedAt) ? `${iso.slice(11, 16)} UTC${local ? localTimeSuffix(at) : ""}` : timeText(iso, local);
|
|
830
|
+
return `couldn't refresh; saved ${time}`;
|
|
831
|
+
}
|
|
832
|
+
|
|
705
833
|
/** `US and XETRA`, `US, XETRA and EPA`. */
|
|
706
834
|
function listText(items: readonly string[]): string {
|
|
707
835
|
return items.length <= 1 ? items.join("") : `${items.slice(0, -1).join(", ")} and ${items.at(-1)}`;
|
|
@@ -734,14 +862,19 @@ function asOfText(freshness: ReportFreshness, short: boolean, local: boolean, un
|
|
|
734
862
|
const market = freshness.tradingDayMarket;
|
|
735
863
|
const period = freshness.periodicity;
|
|
736
864
|
const time = parseReportTime(freshness.asOf);
|
|
737
|
-
const
|
|
865
|
+
const reference = freshness.referencePeriod;
|
|
866
|
+
// `Sep 2026, released Tue 20 Oct`: the period the figure covers, then when it was released.
|
|
867
|
+
const released = reference ? releasedText(freshness.asOf, reference) : null;
|
|
868
|
+
const asOf = released && reference ? `${period ? periodText(reference, period) : dayText(reference)}, ${released}`
|
|
869
|
+
: freshness.periodToDate ? periodToDateText(freshness.periodToDate, freshness.asOf)
|
|
738
870
|
: period ? `${periodText(freshness.asOf, period)} (${period})`
|
|
739
871
|
: freshness.asOfClose
|
|
740
872
|
? `${tradingDayText(freshness.asOfClose, market)} close`
|
|
741
873
|
: time?.dateOnly ? tradingDayText(freshness.asOf, market)
|
|
742
874
|
: undated && time && onRetrievalDay(new Date(time.time).toISOString(), freshness.retrievedAt)
|
|
743
875
|
? `${new Date(time.time).toISOString().slice(11, 16)} UTC` : timeText(freshness.asOf, local);
|
|
744
|
-
const
|
|
876
|
+
const oldestPeriod = freshness.oldestPeriodicity !== undefined ? freshness.oldestPeriodicity : period;
|
|
877
|
+
const oldest = freshness.oldest && (oldestPeriod ? periodText(freshness.oldest, oldestPeriod) : dayText(freshness.oldest));
|
|
745
878
|
// A list dated by its newest entry names it, so the time is not read as when the list was read.
|
|
746
879
|
const dated = freshness.asOfLabel ? `${freshness.asOfLabel} ${asOf}` : asOf;
|
|
747
880
|
return oldest && !short && freshness.oldestAgeMinutes == null ? `${dated} (oldest ${oldest})` : dated;
|
|
@@ -817,10 +950,12 @@ interface StatusLineDetail {
|
|
|
817
950
|
local?: "none";
|
|
818
951
|
/** Leave the day off a time of the day the report was built. */
|
|
819
952
|
date?: "none";
|
|
820
|
-
/** Leave out what the figures are (`funding = current estimate`)
|
|
821
|
-
note?: "none";
|
|
822
|
-
/** Leave out when the figures are published and the next are due
|
|
823
|
-
schedule?: "none";
|
|
953
|
+
/** Leave out what the figures are (`funding = current estimate`), or say the shorter form at this index of `noteVariants`. */
|
|
954
|
+
note?: "none" | number;
|
|
955
|
+
/** Leave out when the figures are published and the next are due, or say the shorter form at this index of `scheduleVariants`. */
|
|
956
|
+
schedule?: "none" | number;
|
|
957
|
+
/** Leave out what not-a-feed data is (`not a live feed` for `not a live feed (weekly report)`). */
|
|
958
|
+
basis?: "none";
|
|
824
959
|
}
|
|
825
960
|
|
|
826
961
|
/**
|
|
@@ -836,11 +971,13 @@ function statusLineParts(freshness: ReportFreshness, detail: StatusLineDetail =
|
|
|
836
971
|
return [
|
|
837
972
|
...(freshness.sources?.length ? sourcesAsOfParts(freshness, freshness.sources, undated)
|
|
838
973
|
: [asOfText(freshness, detail.asOf === "short", local, undated)]),
|
|
839
|
-
...(freshness.schedule && detail.schedule !== "none"
|
|
974
|
+
...(freshness.schedule && detail.schedule !== "none"
|
|
975
|
+
? [typeof detail.schedule === "number" ? freshness.scheduleVariants?.[detail.schedule] ?? freshness.schedule : freshness.schedule] : []),
|
|
840
976
|
...(freshness.oldestAgeMinutes != null ? [`oldest ${ageText(freshness.oldestAgeMinutes)}`] : []),
|
|
841
|
-
|
|
977
|
+
...(freshness.savedAt ? [savedCopyText(freshness.savedAt, freshness.retrievedAt, local)]
|
|
978
|
+
: [statusText(detail.basis === "none" ? { ...freshness, basis: undefined } : freshness, detail.status === "short")].filter(Boolean)),
|
|
842
979
|
...(freshness.market && detail.market !== "none" ? [marketText(freshness.market, now, detail.market === "short", local)] : []),
|
|
843
|
-
...(freshness.note && detail.note !== "none" ? [freshness.note] : []),
|
|
980
|
+
...(freshness.note && detail.note !== "none" ? [typeof detail.note === "number" ? freshness.noteVariants?.[detail.note] ?? freshness.note : freshness.note] : []),
|
|
844
981
|
];
|
|
845
982
|
}
|
|
846
983
|
|
|
@@ -881,7 +1018,8 @@ function datasetLineParts(freshness: ReportFreshness, asOf: string, lagDays: num
|
|
|
881
1018
|
...(detail.source === "none" ? [] : [`Source: ${freshness.source}`]),
|
|
882
1019
|
`${freshness.observation} ${asOf.slice(0, 10)}`,
|
|
883
1020
|
lagText(lagDays),
|
|
884
|
-
...(freshness.
|
|
1021
|
+
...(freshness.savedAt ? [savedCopyText(freshness.savedAt, freshness.retrievedAt, false)]
|
|
1022
|
+
: freshness.status === "stale" ? ["stale"] : []),
|
|
885
1023
|
];
|
|
886
1024
|
}
|
|
887
1025
|
const period = freshness.periodicity;
|
|
@@ -892,10 +1030,20 @@ function datasetLineParts(freshness: ReportFreshness, asOf: string, lagDays: num
|
|
|
892
1030
|
...(detail.source === "none" ? [] : [`Source: ${freshness.source}`]),
|
|
893
1031
|
`observed ${dated(asOf)}${period ? ` (${period})` : ""}${oldest}`,
|
|
894
1032
|
`lag ${lagDays}d`,
|
|
895
|
-
...(stale ? [stale] : []),
|
|
1033
|
+
...(freshness.savedAt ? [savedCopyText(freshness.savedAt, freshness.retrievedAt, false)] : stale ? [stale] : []),
|
|
896
1034
|
];
|
|
897
1035
|
}
|
|
898
1036
|
|
|
1037
|
+
/**
|
|
1038
|
+
* A line too narrow for its whole schedule keeps when the figures were
|
|
1039
|
+
* published longest: the not-a-feed basis goes first, then the schedule
|
|
1040
|
+
* shortens through `scheduleVariants`. Nothing for a line without them.
|
|
1041
|
+
*/
|
|
1042
|
+
function shorterSchedules(freshness: ReportFreshness, detail: StatusLineDetail): StatusLineDetail[] {
|
|
1043
|
+
if (!freshness.schedule || !freshness.scheduleVariants?.length) return [];
|
|
1044
|
+
return [{ ...detail, basis: "none" }, ...freshness.scheduleVariants.map((_, index) => ({ ...detail, basis: "none" as const, schedule: index }))];
|
|
1045
|
+
}
|
|
1046
|
+
|
|
899
1047
|
/**
|
|
900
1048
|
* The plain status line of a capture: the longest of `statusLineVariants`,
|
|
901
1049
|
* `Fri 9 Oct close · 15 min delayed · markets closed until Mon` for quotes.
|
|
@@ -927,7 +1075,9 @@ export function paneStatusLineVariants(freshness: ReportFreshness): string[] {
|
|
|
927
1075
|
// A dataset's line has no market or local time to leave out: it reads as its report and capture do.
|
|
928
1076
|
if (datesObservation(freshness)) return statusLineVariants(freshness);
|
|
929
1077
|
const pane: StatusLineDetail = { local: "none", date: "none" };
|
|
930
|
-
const
|
|
1078
|
+
const shortest: StatusLineDetail = { ...pane, market: "short", status: "short", note: "none" };
|
|
1079
|
+
const details: StatusLineDetail[] = [pane, { ...pane, market: "short" }, { ...pane, market: "short", status: "short" }, shortest,
|
|
1080
|
+
...shorterSchedules(freshness, shortest), { ...shortest, schedule: "none" }];
|
|
931
1081
|
return [...new Set(details.map((detail) => capitalize(statusLineParts(freshness, detail).join(" · "))))];
|
|
932
1082
|
}
|
|
933
1083
|
|
|
@@ -964,10 +1114,11 @@ export function statusLineVariants(freshness: ReportFreshness, { source = false
|
|
|
964
1114
|
// A line that dates each source keeps every source's time and their age to
|
|
965
1115
|
// the last: its day goes first, then what the figures are.
|
|
966
1116
|
const shortest = details.at(-1)!;
|
|
967
|
-
// What the figures are goes before when they are published.
|
|
1117
|
+
// What the figures are goes before when they are published, in its shorter forms first.
|
|
968
1118
|
const trailing: StatusLineDetail[] = [
|
|
1119
|
+
...(freshness.noteVariants ?? []).map((_, index) => ({ ...shortest, note: index })),
|
|
969
1120
|
...(freshness.note ? [{ ...shortest, note: "none" as const }] : []),
|
|
970
|
-
...(freshness.schedule ? [{ ...shortest, note: "none" as const, schedule: "none" as const }] : []),
|
|
1121
|
+
...(freshness.schedule ? [...shorterSchedules(freshness, { ...shortest, note: "none" }), { ...shortest, note: "none" as const, schedule: "none" as const }] : []),
|
|
971
1122
|
];
|
|
972
1123
|
const variants: StatusLineDetail[] = freshness.sources?.length
|
|
973
1124
|
? [{}, ...details.map((detail) => ({ ...detail, date: "none" as const })), { ...shortest, date: "none", note: "none" }]
|
|
@@ -1023,7 +1174,7 @@ export function captureStatusLine({ report: loaded, selfDated, quoted, rendered
|
|
|
1023
1174
|
}
|
|
1024
1175
|
if (report && loaded?.declaresData) return sourced(report);
|
|
1025
1176
|
if (quoted) return plain(quoted, "quotes");
|
|
1026
|
-
if (report && report.status !== "unreported") return sourced(report);
|
|
1177
|
+
if (report && (report.status !== "unreported" || report.ageOnly)) return sourced(report);
|
|
1027
1178
|
return plain(rendered(), null);
|
|
1028
1179
|
}
|
|
1029
1180
|
|
|
@@ -104,6 +104,15 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
104
104
|
data: QUOTES,
|
|
105
105
|
bloomberg: ["DES"],
|
|
106
106
|
},
|
|
107
|
+
ADR: {
|
|
108
|
+
summary: "What exchange rate does a receipt's price imply? A depositary receipt beside its home listing: the ratio, both prices with when each was set, the dollar rate they imply (the CCL rate for an Argentine pair) against spot, and the receipt's premium or discount. Opens DES on its ADR vs Home tab.",
|
|
109
|
+
usage: ["ADR GGAL", "ADR TSM", "ADR GGAL.BA"],
|
|
110
|
+
keys: [key("Enter", " open the listing")],
|
|
111
|
+
data: QUOTES,
|
|
112
|
+
bloomberg: [],
|
|
113
|
+
// A tab of DES, filed under it.
|
|
114
|
+
docs: "DES",
|
|
115
|
+
},
|
|
107
116
|
QQ: {
|
|
108
117
|
summary: "A compact board of live quotes for any list of tickers, each with change, range and a sparkline. Good as the always-open strip in a layout.",
|
|
109
118
|
usage: ["QQ NVDA, AAPL, MSFT"],
|
|
@@ -126,8 +135,8 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
126
135
|
bloomberg: ["GIP"],
|
|
127
136
|
},
|
|
128
137
|
G: {
|
|
129
|
-
summary: "Chart any series together: prices, statement lines, valuation multiples, FRED series, map series such as chokepoint transits, indicators and formulas. Series read SYMBOL:field, FRED:series or GEO:series.",
|
|
130
|
-
usage: ["G", "G NVDA:revenue, NVDA:net_income", "G XOM, GEO:HORMUZ"],
|
|
138
|
+
summary: "Chart any series together: prices, statement lines, valuation multiples, FRED series, map series such as chokepoint transits, indicators and formulas. Series read SYMBOL:field, FRED:series or GEO:series, separated by commas; tickers with spaces between them are a list too.",
|
|
139
|
+
usage: ["G", "G NVDA:revenue, NVDA:net_income", "G XOM, GEO:HORMUZ", "G AAPL MSFT"],
|
|
131
140
|
keys: CHART_KEYS,
|
|
132
141
|
data: { free: "Prices 15 minutes delayed, other series as published", pro: "Prices real-time for US listings, other series as published" },
|
|
133
142
|
bloomberg: ["G"],
|
|
@@ -140,8 +149,8 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
140
149
|
bloomberg: [],
|
|
141
150
|
},
|
|
142
151
|
CMP: {
|
|
143
|
-
summary: "Price returns rebased to a shared start date for two or more tickers, so relative performance reads at a glance.",
|
|
144
|
-
usage: ["CMP NVDA, AMD, AVGO"],
|
|
152
|
+
summary: "Price returns rebased to a shared start date for two or more tickers, so relative performance reads at a glance. A leveraged or inverse fund gets its daily objective drawn from its index fund, and its decay in its own panel.",
|
|
153
|
+
usage: ["CMP NVDA, AMD, AVGO", "CMP TQQQ, QQQ"],
|
|
145
154
|
keys: CHART_KEYS,
|
|
146
155
|
data: QUOTES,
|
|
147
156
|
bloomberg: ["COMP", "TRA"],
|
|
@@ -228,14 +237,14 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
228
237
|
summary: "Screen covered stocks on valuation, growth, margins, liquidity, volatility, short interest, insider activity and 13F holders, then rank the matches by any metric. "
|
|
229
238
|
+ "ATR% is the 14-session average true range as a percent of the last close. IV rank is a rank, not an IV percentile: 0 is the lowest 30-day implied volatility of the past 52 weeks and 100 the highest.",
|
|
230
239
|
usage: ["EQS"],
|
|
231
|
-
keys: [key("a", "dd criterion"), key("m", "etric"), key("s", "ave screen"), key("o", "pen research")],
|
|
240
|
+
keys: [key("a", "dd criterion"), key("m", "etric"), key("t", "check ticker"), key("s", "ave screen"), key("o", "pen research")],
|
|
232
241
|
data: same("Daily snapshot, statements as filed"),
|
|
233
242
|
bloomberg: ["EQS"],
|
|
234
243
|
},
|
|
235
244
|
OMON: {
|
|
236
245
|
summary: "Calls and puts by expiry with bid, ask, spread, volume, open interest, implied volatility, Greeks, extrinsic per year and a put's cost as a percent of spot. "
|
|
237
246
|
+ "The Strikes filter lists every strike, a count either side of the money, or a delta band such as .70 to .90 for deep in-the-money LEAPS.",
|
|
238
|
-
usage: ["OMON NVDA", "
|
|
247
|
+
usage: ["OMON NVDA", "gloom fn OMON NVDA --expiration 2028-01-21"],
|
|
239
248
|
keys: [key("c", "alc"), key("a", "dd to OSA"), key("s", "urface")],
|
|
240
249
|
data: OPTIONS,
|
|
241
250
|
bloomberg: ["OMON"],
|
|
@@ -265,24 +274,33 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
265
274
|
OSA: {
|
|
266
275
|
summary: "Build a multi-leg options position and value it at any spot, date and vol shift: payoff, P&L grid, breakevens and Greeks. European pricing, so no early exercise. "
|
|
267
276
|
+ "With a NAV and a budget in bps it sizes the position as a hedge: contracts, premium, notional protected and coverage of an equity sleeve. "
|
|
268
|
-
+ "--strategy csp sells a cash-secured put: cash secured, premium, yield on cash and annualised,
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
"
|
|
277
|
+
+ "--strategy csp sells a cash-secured put: cash secured, premium, yield on cash and annualised, the bid, ask and spread with the yield at the bid, "
|
|
278
|
+
+ "distance out of the money, break-even, days to expiry and an earnings flag. CSP ranks the same put across several names.",
|
|
279
|
+
usage: ["OSA AAPL", "gloom fn OSA AAPL --strategy vertical --expiration 2027-01-15",
|
|
280
|
+
"gloom fn OSA KO --strategy csp --strike 85 --expiration 2026-11-20",
|
|
281
|
+
"gloom fn OSA SPY --strategy put --strike 700 --expiration 2027-01-15 --nav 100m --budget-bps 50 --sleeve 100m"],
|
|
272
282
|
keys: [key("a", "dd leg"), key("c", "hain"), key("d", "ate"), key("v", "ol shift")],
|
|
273
283
|
data: OPTIONS,
|
|
274
284
|
bloomberg: ["OSA"],
|
|
275
285
|
},
|
|
286
|
+
CSP: {
|
|
287
|
+
summary: "Which names pay most to sell a put? For each, the put nearest a delta (0.30) on the expiry nearest a date or a number of days out (30), "
|
|
288
|
+
+ "ranked by annualised yield on cash at the bid, with % out of the money, delta, IV rank, the spread (marked wide, never left out) and an earnings flag.",
|
|
289
|
+
usage: ["CSP JPM, GS, KO", "gloom fn CSP JPM GS KO AAPL --delta 0.20 --days 45"],
|
|
290
|
+
keys: [key("Enter", " open in OSA")],
|
|
291
|
+
data: OPTIONS,
|
|
292
|
+
bloomberg: [],
|
|
293
|
+
},
|
|
276
294
|
OVDV: {
|
|
277
295
|
summary: "The implied volatility surface fitted from option quotes: 3D sheet, table, smiles, ATM term structure, 25-delta skew and forwards, live or on stored daily closes.",
|
|
278
|
-
usage: ["OVDV NVDA", "
|
|
296
|
+
usage: ["OVDV NVDA", "gloom fn OVDV NVDA --tab skew --expiration 2027-01-15", "gloom fn OVDV SPY --date 2026-10-09 --tab skew"],
|
|
279
297
|
keys: [key("v", "iew"), key("c", "hain"), key("m", "ore expiries"), key("t", " stored dates")],
|
|
280
298
|
data: { free: `${DELAYED}; stored dates at the close`, pro: "Real-time; stored dates at the close" },
|
|
281
299
|
bloomberg: ["OVDV"],
|
|
282
300
|
},
|
|
283
301
|
HIVG: {
|
|
284
302
|
summary: "Daily 30-day, 90-day and one-year at-the-money implied vol since February 2024 against realized vol, with each measure's 52-week rank and percentile.",
|
|
285
|
-
usage: ["HIVG AAPL", "
|
|
303
|
+
usage: ["HIVG AAPL", "gloom fn HIVG SPY --lookback ALL --csv"],
|
|
286
304
|
keys: [key("s", "urface")],
|
|
287
305
|
data: IV_DAILY,
|
|
288
306
|
bloomberg: ["HIVG", "GV"],
|
|
@@ -380,8 +398,8 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
380
398
|
bloomberg: ["CACS"],
|
|
381
399
|
},
|
|
382
400
|
EVTS: {
|
|
383
|
-
summary: "The market's report days with implied and past moves; a ticker picks its row.",
|
|
384
|
-
usage: ["EVTS", "EVTS NVDA"],
|
|
401
|
+
summary: "The market's report days with implied and past moves, or a past or coming week or day of them; a ticker picks its row.",
|
|
402
|
+
usage: ["EVTS", "EVTS NVDA", "gloom fn EVTS --week last", "gloom fn EVTS --date 2026-10-15"],
|
|
385
403
|
keys: [key("t", "icker"), key("e", "stimates"), key("c", "alls"), key("a", "nalysts")],
|
|
386
404
|
data: EARNINGS_DAYS,
|
|
387
405
|
bloomberg: ["EVTS"],
|
|
@@ -405,7 +423,7 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
405
423
|
bloomberg: ["DVD"],
|
|
406
424
|
},
|
|
407
425
|
SI: {
|
|
408
|
-
summary: "FINRA short interest settlements with shares short, days to cover and average daily volume over time. Daily volume
|
|
426
|
+
summary: "FINRA short interest settlements with shares short, days to cover and average daily volume over time. Daily volume, fails to deliver and weekly ATS/OTC volume are the other tabs.",
|
|
409
427
|
usage: ["SI AAPL"],
|
|
410
428
|
keys: [key("v", "iew"), STEP],
|
|
411
429
|
data: same("Twice a month, as FINRA publishes"),
|
|
@@ -425,6 +443,20 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
425
443
|
data: same("Daily, the evening after each session"),
|
|
426
444
|
bloomberg: [],
|
|
427
445
|
},
|
|
446
|
+
FTD: {
|
|
447
|
+
summary: "The short interest pane on Fails to deliver: outstanding fail shares for each settlement date and CUSIP. These snapshots are never added across dates.",
|
|
448
|
+
usage: ["FTD AAPL"],
|
|
449
|
+
keys: [key("v", "iew"), OPEN, OPEN_SOURCE],
|
|
450
|
+
data: same("Twice a month, as the SEC publishes"),
|
|
451
|
+
bloomberg: [],
|
|
452
|
+
},
|
|
453
|
+
ATS: {
|
|
454
|
+
summary: "The short interest pane on Weekly ATS/OTC: ATS and non-ATS off-exchange shares and trades. ATS % is ATS shares divided by published off-exchange shares, not total market volume or short volume.",
|
|
455
|
+
usage: ["ATS AAPL"],
|
|
456
|
+
keys: [key("v", "iew"), OPEN, OPEN_SOURCE],
|
|
457
|
+
data: same("Weekly with FINRA's publication delay"),
|
|
458
|
+
bloomberg: [],
|
|
459
|
+
},
|
|
428
460
|
DIAG: {
|
|
429
461
|
summary: "A read of the company's filings and numbers into red flags, anomalies, green flags and items to watch, each with the evidence it came from.",
|
|
430
462
|
usage: ["DIAG NVDA"],
|
|
@@ -458,8 +490,8 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
458
490
|
bloomberg: ["CF"],
|
|
459
491
|
},
|
|
460
492
|
CALLS: {
|
|
461
|
-
summary: "Earnings call transcripts with speakers, the analyst Q&A, and extracted guidance and quotes.
|
|
462
|
-
usage: ["CALLS", "CALLS NVDA"],
|
|
493
|
+
summary: "Earnings call transcripts with speakers, the analyst Q&A, and extracted guidance and quotes. With a ticker, the company's calls, its next one first with its start and how far away it is. Alone, the calendar of every company's calls this week; --view transcripts lists the latest transcripts.",
|
|
494
|
+
usage: ["CALLS", "CALLS NVDA", "CALLS --view transcripts"],
|
|
463
495
|
keys: [OPEN, key("/", "find"), OPEN_SOURCE],
|
|
464
496
|
data: pro("Within hours of the call"),
|
|
465
497
|
access: "pro",
|
|
@@ -506,9 +538,9 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
506
538
|
bloomberg: [],
|
|
507
539
|
},
|
|
508
540
|
HIRE: {
|
|
509
|
-
summary: "Pro hiring momentum: weekly observed open roles, additions and removals, role families, seniority, remote and location mix, peers and primary posting evidence. Observed requisitions are not headcount. No argument opens the covered-company board.",
|
|
510
|
-
usage: ["HIRE", "HIRE NET", "HIRE 0700:HKEX"],
|
|
511
|
-
keys: [TABS, OPEN, key("e", "vidence"), key("o", "pen source"), key("d", "es"), key("g", "raph")],
|
|
541
|
+
summary: "Pro hiring momentum: weekly observed open roles, additions and removals, role families, seniority, remote and location mix, peers and primary posting evidence. Moves ranks the companies whose new roles accelerated or slowed against their own weeks and their peers, with why and the postings behind it. Observed requisitions are not headcount. No argument opens the covered-company board.",
|
|
542
|
+
usage: ["HIRE", "HIRE NET", "HIRE 0700:HKEX", "gloom fn HIRE RIVN --tab moves"],
|
|
543
|
+
keys: [TABS, OPEN, key("e", "vidence"), key("o", "pen source"), key("d", "es"), key("g", "raph"), key("n", "otify")],
|
|
512
544
|
data: { free: "Latest values and three rows per section", pro: "Weekly history, all stored observations and evidence" },
|
|
513
545
|
access: "preview",
|
|
514
546
|
bloomberg: [],
|
|
@@ -658,7 +690,7 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
658
690
|
bloomberg: ["CN"],
|
|
659
691
|
},
|
|
660
692
|
NI: {
|
|
661
|
-
summary: "Market news by topic code (MNA, CB, ENERGY, REG, CRYPTO, EARN, IPO) or sector.",
|
|
693
|
+
summary: "Market news by topic code (MNA, CB, ENERGY, METALS, REG, CRYPTO, EARN, IPO) or sector.",
|
|
662
694
|
usage: ["NI ENERGY"],
|
|
663
695
|
keys: [OPEN, SEARCH, POP_OUT, key("t", "icker")],
|
|
664
696
|
data: NEWS,
|
|
@@ -730,7 +762,7 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
730
762
|
bloomberg: ["IMAP"],
|
|
731
763
|
},
|
|
732
764
|
FXC: {
|
|
733
|
-
summary: "A cross-rate matrix for the major currencies, or for any of 45 chosen in its settings or with --currencies from the command line (
|
|
765
|
+
summary: "A cross-rate matrix for the major currencies, or for any of 45 chosen in its settings or with --currencies from the command line (gloom fn FXC --currencies USD,ZAR,NGN).",
|
|
734
766
|
usage: ["FXC"],
|
|
735
767
|
keys: [],
|
|
736
768
|
data: FX,
|
|
@@ -751,6 +783,13 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
751
783
|
data: same("Real-time where it streams, others every 15 seconds"),
|
|
752
784
|
bloomberg: [],
|
|
753
785
|
},
|
|
786
|
+
ETFF: {
|
|
787
|
+
summary: "Daily net flows of the US spot bitcoin and ether ETFs, fund by fund in US$ millions, with the last 5 and 20 days, the running total since launch, and the funds the newest day still waits on.",
|
|
788
|
+
usage: ["ETFF", "gloom fn ETFF --asset eth"],
|
|
789
|
+
keys: [key("1-4", " range"), OPEN_SOURCE],
|
|
790
|
+
data: same("Daily, as each fund reports after the US close"),
|
|
791
|
+
bloomberg: [],
|
|
792
|
+
},
|
|
754
793
|
FUT: {
|
|
755
794
|
summary: "Each root's front futures contract (until its stated roll date) and the day's most active month across equity index, equity sectors, rates, energy, metals, agriculture, livestock and FX with last price, unit and session change, grouped by sector.",
|
|
756
795
|
usage: ["FUT"],
|
|
@@ -759,7 +798,7 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
759
798
|
bloomberg: ["GLCO"],
|
|
760
799
|
},
|
|
761
800
|
CTM: {
|
|
762
|
-
summary: "A futures root's listed contracts as a curve against a week and a month ago, with roll yield, contango or backwardation, and each contract's price, open interest and volume. Takes a FUT root, VX or a CME crypto root (BTC, ETH, SOL, XRP), which also shows each contract's premium to spot and annualised basis against the USD pair
|
|
801
|
+
summary: "A futures root's listed contracts as a curve against a week and a month ago, with roll yield, contango or backwardation, and each contract's price, open interest and volume. Takes a FUT root, VX or a CME crypto root (BTC, ETH, SOL, XRP), which also shows each contract's premium to spot and annualised basis against the USD pair in the minute of each contract's last trade: Ann Basis = (Last / spot - 1) × 365 / days to expiry, simple actual/365, with days counted to final settlement.",
|
|
763
802
|
usage: ["CTM GC", "CTM BTC"],
|
|
764
803
|
keys: [key("d", "ate"), key("c", "urrent"), STEP],
|
|
765
804
|
data: same("Delayed, usually 10 minutes; VIX at settlement"),
|
|
@@ -986,7 +1025,7 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
986
1025
|
},
|
|
987
1026
|
CDS: {
|
|
988
1027
|
summary: "Single-name corporate CDS from DTCC public dissemination. CDS alone lists the issuers traded in the last 5 days with trade count, last trade, 5Y spread and its 1W and 1M moves through the roll while the level is current, to rank them by (`fn CDS --sort 1m`); past 2,000bp a name is quoted in points upfront (`57.6 pts`), moves too, and ranks after the bp names; with a ticker or issuer, its 5Y spread (level, date, 1W and 1M change, range), its trades and, in `fn`, its daily levels (`fn CDS F --csv --section daily`).",
|
|
989
|
-
usage: ["CDS", "CDS F", "
|
|
1028
|
+
usage: ["CDS", "CDS F", "gloom fn CDS --sort 1m", "gloom fn CDS F --csv --section daily"],
|
|
990
1029
|
keys: [OPEN, STEP],
|
|
991
1030
|
data: same("Delayed, as trades are disseminated"),
|
|
992
1031
|
bloomberg: ["CDS"],
|
|
@@ -1029,7 +1068,7 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
1029
1068
|
bloomberg: ["CF"],
|
|
1030
1069
|
},
|
|
1031
1070
|
ETF: {
|
|
1032
|
-
summary: "A US-listed fund's SEC filings: registration statements and prospectus updates, shareholder reports, N-CEN and N-PORT reports. Open any of them inline.",
|
|
1071
|
+
summary: "A US-listed fund's facts, a leveraged or inverse fund's daily objective among them, then its own SEC filings: registration statements and prospectus updates, shareholder reports, N-CEN and N-PORT reports. Open any of them inline.",
|
|
1033
1072
|
usage: ["ETF SPY"],
|
|
1034
1073
|
keys: [OPEN, OPEN_SOURCE],
|
|
1035
1074
|
data: AS_FILED,
|
|
@@ -1088,7 +1127,7 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
1088
1127
|
// Run a workspace
|
|
1089
1128
|
PF: {
|
|
1090
1129
|
summary: "Your portfolio or watchlist with live quotes, market value, P&L, weights of the total with cash, and sparklines. With target weights set, each holding adds its target, drift and the trade that rebalances it; broker-synced and manual positions sit in the same table.",
|
|
1091
|
-
usage: ["PF"],
|
|
1130
|
+
usage: ["PF", "PF Family"],
|
|
1092
1131
|
keys: [key("a", "dd"), OPEN, key("s", " grid")],
|
|
1093
1132
|
data: QUOTES,
|
|
1094
1133
|
bloomberg: [],
|
|
@@ -1307,7 +1346,7 @@ export const FUNCTION_HELP: Readonly<Record<string, FunctionHelp>> = {
|
|
|
1307
1346
|
bloomberg: [],
|
|
1308
1347
|
},
|
|
1309
1348
|
PL: {
|
|
1310
|
-
summary: "What
|
|
1349
|
+
summary: "What Gloom is made of: switch built-ins on and off, one by one or by applying a starter pack, and install plugins from GitHub.",
|
|
1311
1350
|
usage: ["PL"],
|
|
1312
1351
|
keys: [key("e", "nable"), key("a", "pply pack"), key("i", "nstall"), SEARCH],
|
|
1313
1352
|
data: null,
|