gloomberb 0.16.3 → 0.16.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/package.json +4 -1
- package/src/api-client/askg.ts +43 -0
- package/src/api-client/auth.ts +15 -0
- package/src/api-client/beneficial-owners.ts +4 -0
- package/src/api-client/chat.ts +19 -0
- package/src/api-client/company-kpis.ts +14 -2
- package/src/api-client/data.ts +34 -16
- package/src/api-client/index.ts +12 -0
- package/src/api-client/normalizers.ts +27 -0
- package/src/api-client/paths.ts +88 -23
- package/src/api-client/request.ts +2 -1
- package/src/api-client/research-activity.ts +31 -0
- package/src/api-client/socket.ts +39 -8
- package/src/api-client/types.ts +57 -1
- package/src/api-client/upgrade-experiment.ts +90 -0
- package/src/app/global-shortcuts.ts +11 -1
- package/src/app/keybindings/actions.ts +10 -0
- package/src/app/pane-runtime/index.tsx +8 -0
- package/src/app/pane-runtime/pane-template-runtime.ts +5 -0
- package/src/app/pane-runtime/plugin-bindings.ts +65 -25
- package/src/app/pane-runtime/ticker-inspector-runtime.ts +12 -0
- package/src/app/pane-runtime/ticker-open-runtime.ts +18 -1
- package/src/app/runtime/desktop-deeplink.ts +5 -0
- package/src/app/star-prompt/model.ts +98 -0
- package/src/app/star-prompt/runtime.ts +41 -0
- package/src/app/star-prompt/status-line.tsx +190 -0
- package/src/app.tsx +13 -7
- package/src/architecture/core-builtin-allowlist.json +70 -0
- package/src/brokers/signed-in/adapter.ts +33 -2
- package/src/brokers/signed-in/client.ts +10 -0
- package/src/brokers/signed-in/sign-in-dialog.tsx +23 -9
- package/src/brokers/signed-in/sign-in.ts +62 -5
- package/src/capabilities/registry.ts +8 -1
- package/src/capabilities/types.ts +2 -0
- package/src/cli/commands/crypto-hints.ts +12 -4
- package/src/cli/commands/market.ts +359 -99
- package/src/cli/commands/options-chain.ts +172 -0
- package/src/cli/commands/options-leaps.ts +422 -0
- package/src/cli/commands/overview.ts +164 -26
- package/src/cli/commands/search.ts +29 -8
- package/src/cli/commands/system.ts +99 -19
- package/src/cli/commands/themes.ts +64 -0
- package/src/cli/commands/ticker.ts +62 -30
- package/src/cli/desktop-pane-shot.ts +97 -16
- package/src/cli/errors.ts +25 -2
- package/src/cli/freshness.ts +7 -4
- package/src/cli/fx-pair.ts +57 -0
- package/src/cli/help.ts +14 -1
- package/src/cli/index-roots.ts +51 -0
- package/src/cli/index.ts +9 -6
- package/src/cli/listing-arg.ts +211 -3
- package/src/cli/not-a-ticker.ts +37 -0
- package/src/cli/options.ts +50 -6
- package/src/cli/pane-functions/capabilities.ts +8 -2
- package/src/cli/pane-functions/catalog.ts +13 -2
- package/src/cli/pane-functions/data.ts +36 -5
- package/src/cli/pane-functions/dom.ts +21 -13
- package/src/cli/pane-functions/freshness.ts +205 -26
- package/src/cli/pane-functions/function-help.ts +67 -22
- package/src/cli/pane-functions/headless.ts +5 -4
- package/src/cli/pane-functions/index.ts +3 -0
- package/src/cli/pane-functions/market-session.ts +133 -0
- package/src/cli/pane-functions/options.ts +15 -4
- package/src/cli/pane-functions/report-notices.ts +63 -0
- package/src/cli/pane-functions/report.ts +4 -0
- package/src/cli/pane-functions/resolver.ts +4 -6
- package/src/cli/pane-functions/screenshot-evidence.ts +2 -0
- package/src/cli/pane-functions/screenshot.ts +105 -23
- package/src/cli/registry.ts +2 -1
- package/src/cli/result.ts +50 -13
- package/src/cli/row-window.ts +76 -0
- package/src/cli/scroll-truncation.ts +34 -0
- package/src/components/chart/composite/composite-chart.tsx +43 -4
- package/src/components/chart/composite/legend.tsx +39 -6
- package/src/components/chart/composite/rasterizer.ts +64 -4
- package/src/components/chart/composite/series-cues.ts +71 -0
- package/src/components/chart/composite/text-renderer.ts +16 -8
- package/src/components/chart/composite/types.ts +3 -0
- package/src/components/command-bar/commands/direct/index.ts +9 -1
- package/src/components/command-bar/commands/plugin/items.ts +3 -1
- package/src/components/command-bar/commands/registry.ts +7 -0
- package/src/components/command-bar/layout-items/focused-pane.ts +38 -0
- package/src/components/command-bar/pane-templates/workflow.ts +5 -0
- package/src/components/command-bar/routes/root/command-items.ts +2 -0
- package/src/components/command-bar/routes/root/plugin-turn-on.ts +92 -0
- package/src/components/command-bar/routes/root/results.ts +40 -10
- package/src/components/command-bar/routes/root/runtime.ts +8 -0
- package/src/components/command-bar/routes/root/search-providers.ts +97 -14
- package/src/components/command-bar/surface/index.tsx +18 -4
- package/src/components/command-bar/theme-picker.tsx +48 -13
- package/src/components/command-bar/workflow/ops.ts +5 -3
- package/src/components/data-table/view.tsx +28 -9
- package/src/components/layout/floating-pane.tsx +6 -2
- package/src/components/layout/market-summary.ts +23 -9
- package/src/components/layout/pane/content.tsx +46 -29
- package/src/components/layout/pane/cycle-order.ts +2 -11
- package/src/components/layout/pane/header.tsx +2 -1
- package/src/components/layout/pane/title.ts +1 -1
- package/src/components/layout/presentation.ts +22 -0
- package/src/components/layout/shell/active-drag.ts +1 -1
- package/src/components/layout/shell/drag/index.ts +4 -0
- package/src/components/layout/shell/drag/live.ts +76 -5
- package/src/components/layout/shell/drag/runtime.ts +8 -8
- package/src/components/layout/shell/index.tsx +47 -6
- package/src/components/layout/shell/layout-state.ts +5 -11
- package/src/components/layout/shell/menu.ts +28 -1
- package/src/components/layout/shell/pane/actions.ts +2 -1
- package/src/components/layout/shell/pane/layers.tsx +51 -10
- package/src/components/layout/shell/pane/management-shortcuts.ts +5 -0
- package/src/components/layout/shell/pane/new-layout.ts +116 -0
- package/src/components/layout/shell/shortcuts.ts +5 -2
- package/src/components/layout/shell/visible-layout.ts +44 -1
- package/src/components/layout/status-bar.tsx +4 -1
- package/src/components/markdown-text.tsx +9 -5
- package/src/components/metric-treemap/heat-surface.tsx +27 -8
- package/src/components/metric-treemap/heat-tiles.ts +48 -17
- package/src/components/onboarding/onboarding-frame.tsx +33 -10
- package/src/components/onboarding/onboarding-wizard.tsx +49 -40
- package/src/components/onboarding/portfolio-step/positions-panel.tsx +5 -2
- package/src/components/onboarding/pro-step-layout.ts +86 -0
- package/src/components/onboarding/use-onboarding-upgrade.ts +6 -2
- package/src/components/ui/button.tsx +10 -0
- package/src/components/ui/data-table/index.tsx +38 -0
- package/src/components/ui/data-table/types.ts +8 -1
- package/src/components/ui/data-table/visible-range.ts +2 -0
- package/src/components/ui/icon.tsx +11 -2
- package/src/components/ui/index.ts +1 -1
- package/src/core/connection-health.ts +1 -1
- package/src/core/state/app/layout-reducer.ts +89 -3
- package/src/core/state/app/state.ts +8 -5
- package/src/core/state/app/types.ts +13 -2
- package/src/data/config/layout.ts +55 -21
- package/src/data/config/store/fold-panes.ts +149 -0
- package/src/data/config/store/migrations.ts +7 -0
- package/src/data/config/store/node.ts +27 -6
- package/src/data/config/store/normalize.ts +37 -3
- package/src/i18n/es.ts +14 -1
- package/src/i18n/ja.ts +14 -1
- package/src/i18n/ko.ts +14 -1
- package/src/i18n/zh-cn.ts +14 -1
- package/src/i18n/zh-tw.ts +14 -1
- package/src/layout/desks.ts +1 -2
- package/src/layout/pane-layout-move.ts +264 -0
- package/src/layout/pane-manager/hidden-panes.ts +160 -0
- package/src/layout/pane-manager/index.ts +1 -0
- package/src/market-data/coordinator/entries.ts +7 -1
- package/src/market-data/coordinator/quotes.ts +2 -2
- package/src/market-data/market/freshness.ts +118 -18
- package/src/market-data/market/status.ts +40 -0
- package/src/market-data/options-alternatives.ts +69 -0
- package/src/market-data/quotes/contributions.ts +19 -2
- package/src/market-data/quotes/metadata.ts +16 -0
- package/src/market-data/quotes/screener-live-quotes.ts +56 -5
- package/src/plugins/builtin/account-management/keyboard.ts +3 -0
- package/src/plugins/builtin/account-management/model.ts +1 -0
- package/src/plugins/builtin/account-management/navigation.ts +1 -1
- package/src/plugins/builtin/account-management/pane.tsx +31 -4
- package/src/plugins/builtin/alerts/quotes.ts +3 -0
- package/src/plugins/builtin/analytics/risk-headless.ts +3 -1
- package/src/plugins/builtin/analytics/risk-model.ts +37 -8
- package/src/plugins/builtin/analytics/risk-pane.tsx +8 -4
- package/src/plugins/builtin/backtest/pane.tsx +1 -1
- package/src/plugins/builtin/broker-manager/detail.tsx +4 -0
- package/src/plugins/builtin/broker-manager/index.tsx +7 -3
- package/src/plugins/builtin/broker-manager/model.ts +8 -0
- package/src/plugins/builtin/broker-manager/pane-actions.tsx +8 -2
- package/src/plugins/builtin/broker-manager/sign-in-end.ts +82 -0
- package/src/plugins/builtin/broker-manager/table.ts +5 -0
- package/src/plugins/builtin/builtin-plugin-meta.ts +121 -11
- package/src/plugins/builtin/chart-composer/pane.tsx +1 -1
- package/src/plugins/builtin/chat/channels.ts +34 -36
- package/src/plugins/builtin/chat/command-bar.ts +138 -0
- package/src/plugins/builtin/chat/composer-commands.ts +21 -1
- package/src/plugins/builtin/chat/content/composer-runtime.ts +11 -1
- package/src/plugins/builtin/chat/content/footer.tsx +5 -3
- package/src/plugins/builtin/chat/content/index.tsx +21 -1
- package/src/plugins/builtin/chat/content/mentions.ts +2 -1
- package/src/plugins/builtin/chat/content/user-map.ts +3 -1
- package/src/plugins/builtin/chat/controller/index.ts +48 -0
- package/src/plugins/builtin/chat/conversations.ts +256 -0
- package/src/plugins/builtin/chat/discord-command.ts +91 -0
- package/src/plugins/builtin/chat/edit-window.ts +12 -6
- package/src/plugins/builtin/chat/ghost-user.ts +14 -0
- package/src/plugins/builtin/chat/index.tsx +40 -2
- package/src/plugins/builtin/chat/layout.ts +2 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +2 -1
- package/src/plugins/builtin/chat/message/header.tsx +24 -15
- package/src/plugins/builtin/chat/message/profile-popover.tsx +2 -1
- package/src/plugins/builtin/chat/message/render-state.ts +3 -0
- package/src/plugins/builtin/chat/pane-requests.ts +60 -0
- package/src/plugins/builtin/chat/pane-state.ts +32 -2
- package/src/plugins/builtin/chat/pane.tsx +8 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +112 -4
- package/src/plugins/builtin/cloud/askg/conversation-store.ts +21 -0
- package/src/plugins/builtin/cloud/askg/manifest.ts +1 -0
- package/src/plugins/builtin/cloud/askg/model.ts +129 -70
- package/src/plugins/builtin/cloud/askg/pane.tsx +772 -377
- package/src/plugins/builtin/cloud/askg/protocol.ts +40 -2
- package/src/plugins/builtin/cloud/askg/tool-display.ts +437 -0
- package/src/plugins/builtin/cloud/askg/tool-timeline.tsx +403 -0
- package/src/plugins/builtin/cloud/company-picker.tsx +1 -9
- package/src/plugins/builtin/cloud/mcp-connect/command.ts +24 -0
- package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +360 -0
- package/src/plugins/builtin/cloud/mcp-connect/model.ts +135 -0
- package/src/plugins/builtin/cloud/mcp-connect/sections.ts +62 -0
- package/src/plugins/builtin/cloud/plugin.tsx +36 -1
- package/src/plugins/builtin/cloud/starter-symbols.ts +8 -0
- package/src/plugins/builtin/cloud/terminal-relay/acm-tab.tsx +89 -0
- package/src/plugins/builtin/cloud/terminal-relay/client.ts +97 -0
- package/src/plugins/builtin/cloud/terminal-relay/connect-section.tsx +57 -0
- package/src/plugins/builtin/cloud/terminal-relay/engine.ts +666 -0
- package/src/plugins/builtin/cloud/terminal-relay/grants.ts +137 -0
- package/src/plugins/builtin/cloud/terminal-relay/host.tsx +81 -0
- package/src/plugins/builtin/cloud/terminal-relay/indicator.tsx +82 -0
- package/src/plugins/builtin/cloud/terminal-relay/manifest.ts +234 -0
- package/src/plugins/builtin/cloud/terminal-relay/policy.ts +153 -0
- package/src/plugins/builtin/cloud/terminal-relay/prompts.tsx +168 -0
- package/src/plugins/builtin/cloud/terminal-relay/redact.ts +73 -0
- package/src/plugins/builtin/cloud/terminal-relay/summary.ts +62 -0
- package/src/plugins/builtin/cloud/upgrade-dialog.tsx +26 -2
- package/src/plugins/builtin/cloud/upgrade-personalization.ts +57 -0
- package/src/plugins/builtin/cloud/upgrade-tickers.ts +124 -0
- package/src/plugins/builtin/comment-letters/client.ts +1 -3
- package/src/plugins/builtin/company-kpis/client.ts +23 -8
- package/src/plugins/builtin/company-kpis/headless.ts +3 -1
- package/src/plugins/builtin/company-kpis/pane.tsx +15 -7
- package/src/plugins/builtin/company-kpis/screenshot-evidence.ts +10 -3
- package/src/plugins/builtin/composite-plugins.ts +107 -64
- package/src/plugins/builtin/credit-boards/cdx-pane.tsx +4 -4
- package/src/plugins/builtin/credit-boards/index.tsx +21 -21
- package/src/plugins/builtin/credit-boards/model.ts +0 -1
- package/src/plugins/builtin/credit-boards/pane.tsx +30 -0
- package/src/plugins/builtin/credit-boards/sovr-pane.tsx +4 -4
- package/src/plugins/builtin/debt-maturities/client.ts +37 -9
- package/src/plugins/builtin/debt-maturities/headless.ts +3 -1
- package/src/plugins/builtin/debt-maturities/pane.tsx +5 -4
- package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
- package/src/plugins/builtin/dividend-yield/pane.tsx +1 -1
- package/src/plugins/builtin/earnings-calls/data.ts +28 -7
- package/src/plugins/builtin/earnings-calls/headless.ts +3 -2
- package/src/plugins/builtin/earnings-calls/pane.tsx +10 -5
- package/src/plugins/builtin/econ/calendar-model.ts +42 -17
- package/src/plugins/builtin/econ/detail-view.tsx +2 -2
- package/src/plugins/builtin/econ/index.tsx +68 -22
- package/src/plugins/builtin/econ-statistics/headless.ts +12 -2
- package/src/plugins/builtin/econ-statistics/pane.tsx +1 -1
- package/src/plugins/builtin/econ-statistics/view.ts +17 -0
- package/src/plugins/builtin/executives/data.ts +17 -6
- package/src/plugins/builtin/executives/pane.tsx +16 -7
- package/src/plugins/builtin/filing-events/pane.tsx +22 -5
- package/src/plugins/builtin/fx-matrix/freshness.ts +65 -0
- package/src/plugins/builtin/fx-matrix/index.tsx +22 -1
- package/src/plugins/builtin/fx-matrix/pairs.ts +1 -1
- package/src/plugins/builtin/fx-matrix/settings.ts +42 -2
- package/src/plugins/builtin/gpu/headless.ts +9 -3
- package/src/plugins/builtin/gpu/model.ts +14 -5
- package/src/plugins/builtin/help/index.tsx +1 -0
- package/src/plugins/builtin/holders/beneficial-client.ts +29 -7
- package/src/plugins/builtin/holders/beneficial-view.tsx +7 -3
- package/src/plugins/builtin/holders/headless.ts +6 -1
- package/src/plugins/builtin/holders/pane.tsx +3 -0
- package/src/plugins/builtin/insider/index.tsx +4 -4
- package/src/plugins/builtin/iv-history/charts.tsx +21 -7
- package/src/plugins/builtin/iv-history/client.ts +12 -2
- package/src/plugins/builtin/iv-history/format.ts +33 -2
- package/src/plugins/builtin/iv-history/headless.ts +22 -10
- package/src/plugins/builtin/iv-history/index.tsx +3 -3
- package/src/plugins/builtin/iv-history/model.ts +61 -13
- package/src/plugins/builtin/iv-history/pane.tsx +11 -3
- package/src/plugins/builtin/iv-history/screen-pane.tsx +42 -18
- package/src/plugins/builtin/jobs/pane.tsx +1 -1
- package/src/plugins/builtin/kelly-sizer/headless.ts +149 -0
- package/src/plugins/builtin/kelly-sizer/history.ts +80 -0
- package/src/plugins/builtin/kelly-sizer/index.tsx +2 -0
- package/src/plugins/builtin/kelly-sizer/pane.tsx +109 -39
- package/src/plugins/builtin/kelly-sizer/sections.tsx +14 -0
- package/src/plugins/builtin/kelly-sizer/types.ts +9 -1
- package/src/plugins/builtin/layout-manager/index.tsx +9 -1
- package/src/plugins/builtin/macro-day/client.ts +24 -0
- package/src/plugins/builtin/macro-day/headless.ts +11 -8
- package/src/plugins/builtin/macro-day/index.tsx +3 -0
- package/src/plugins/builtin/macro-day/model.ts +11 -6
- package/src/plugins/builtin/macro-day/pane.tsx +12 -8
- package/src/plugins/builtin/macro-day/release-table.ts +40 -0
- package/src/plugins/builtin/macro-day/releases.ts +62 -44
- package/src/plugins/builtin/market-heatmap/data.ts +25 -5
- package/src/plugins/builtin/market-heatmap/evidence.ts +90 -0
- package/src/plugins/builtin/market-heatmap/index.tsx +144 -63
- package/src/plugins/builtin/market-heatmap/model.ts +94 -3
- package/src/plugins/builtin/market-heatmap/portfolio.ts +12 -2
- package/src/plugins/builtin/market-movers/headless.ts +31 -4
- package/src/plugins/builtin/market-movers/index.tsx +8 -1
- package/src/plugins/builtin/market-movers/model.ts +71 -17
- package/src/plugins/builtin/market-movers/table.ts +50 -23
- package/src/plugins/builtin/news/headless.ts +9 -2
- package/src/plugins/builtin/news/wire/news/footer.ts +10 -0
- package/src/plugins/builtin/openfda/client.ts +1 -1
- package/src/plugins/builtin/options/carry.ts +95 -0
- package/src/plugins/builtin/options/index.tsx +58 -5
- package/src/plugins/builtin/options/strike-window.ts +183 -0
- package/src/plugins/builtin/options/table.ts +55 -3
- package/src/plugins/builtin/options/types.ts +8 -1
- package/src/plugins/builtin/options/view.tsx +161 -12
- package/src/plugins/builtin/options-positioning/headless.ts +4 -2
- package/src/plugins/builtin/options-scenario/charts.tsx +2 -2
- package/src/plugins/builtin/options-scenario/client.ts +73 -17
- package/src/plugins/builtin/options-scenario/headless.ts +71 -24
- package/src/plugins/builtin/options-scenario/hedge.ts +284 -0
- package/src/plugins/builtin/options-scenario/index.tsx +9 -2
- package/src/plugins/builtin/options-scenario/model.ts +33 -0
- package/src/plugins/builtin/options-scenario/pane.tsx +40 -16
- package/src/plugins/builtin/pe-band/model.ts +2 -2
- package/src/plugins/builtin/pe-band/report-dates.ts +11 -7
- package/src/plugins/builtin/perps/equity-row.tsx +8 -5
- package/src/plugins/builtin/perps/model.ts +16 -5
- package/src/plugins/builtin/plugin-marketplace/model.ts +64 -21
- package/src/plugins/builtin/plugin-marketplace/packs.ts +118 -0
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +344 -32
- package/src/plugins/builtin/plugin-marketplace/store.ts +7 -1
- package/src/plugins/builtin/plugin-module.ts +87 -4
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +71 -36
- package/src/plugins/builtin/portfolio-list/cli/render.ts +87 -18
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +2 -16
- package/src/plugins/builtin/portfolio-list/headless.ts +38 -7
- package/src/plugins/builtin/realized-vol/headless.ts +3 -0
- package/src/plugins/builtin/realized-vol/pane.tsx +1 -1
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +2 -2
- package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +1 -1
- package/src/plugins/builtin/revenue-breakdown/client.ts +13 -6
- package/src/plugins/builtin/revenue-breakdown/headless.ts +4 -1
- package/src/plugins/builtin/revenue-breakdown/pane.tsx +7 -4
- package/src/plugins/builtin/reverse-dcf/headless.ts +5 -1
- package/src/plugins/builtin/reverse-dcf/pane.tsx +1 -1
- package/src/plugins/builtin/risk-factors/data.ts +23 -9
- package/src/plugins/builtin/risk-factors/headless.ts +5 -2
- package/src/plugins/builtin/risk-factors/pane.tsx +6 -5
- package/src/plugins/builtin/seasonality/pane.tsx +1 -1
- package/src/plugins/builtin/sec/index.tsx +5 -5
- package/src/plugins/builtin/sectors/client.ts +10 -2
- package/src/plugins/builtin/sectors/headless.ts +35 -6
- package/src/plugins/builtin/sectors/index.tsx +18 -1
- package/src/plugins/builtin/sectors/sector-model.ts +150 -41
- package/src/plugins/builtin/shared/command-tab.ts +51 -0
- package/src/plugins/builtin/shared/headless-market-data.ts +33 -1
- package/src/plugins/builtin/shared/members-menu.tsx +4 -4
- package/src/plugins/builtin/shared/report-freshness.ts +50 -2
- package/src/plugins/builtin/shared/ticker-request.ts +25 -1
- package/src/plugins/builtin/shared/use-quote-board.ts +25 -5
- package/src/plugins/builtin/shared/volatility/options.ts +1 -46
- package/src/plugins/builtin/short-interest/index.tsx +19 -4
- package/src/plugins/builtin/short-interest/surface.tsx +4 -4
- package/src/plugins/builtin/short-volume/index.tsx +1 -10
- package/src/plugins/builtin/supply-chain/model.ts +1 -1
- package/src/plugins/builtin/ticker-detail/headless.ts +43 -21
- package/src/plugins/builtin/ticker-detail/pane.tsx +4 -5
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +94 -6
- package/src/plugins/builtin/treasury-auctions/cache.ts +5 -2
- package/src/plugins/builtin/treasury-auctions/client.ts +22 -8
- package/src/plugins/builtin/treasury-auctions/headless.ts +40 -4
- package/src/plugins/builtin/treasury-auctions/index.tsx +11 -9
- package/src/plugins/builtin/treasury-auctions/model.ts +197 -30
- package/src/plugins/builtin/treasury-auctions/pane.tsx +35 -11
- package/src/plugins/builtin/treasury-auctions/types.ts +11 -1
- package/src/plugins/builtin/vol-surface/charts.tsx +1 -3
- package/src/plugins/builtin/vol-surface/client.ts +6 -2
- package/src/plugins/builtin/vol-surface/evidence.ts +11 -6
- package/src/plugins/builtin/vol-surface/headless.ts +124 -20
- package/src/plugins/builtin/vol-surface/model.ts +23 -11
- package/src/plugins/builtin/vol-surface/pane.tsx +38 -27
- package/src/plugins/builtin/vol-surface/tables.ts +124 -0
- package/src/plugins/builtin/world-indices/client.ts +22 -4
- package/src/plugins/builtin/world-indices/headless.ts +54 -27
- package/src/plugins/builtin/world-indices/model.ts +4 -2
- package/src/plugins/builtin/world-indices/table.tsx +13 -2
- package/src/plugins/builtin/world-venue-map/geo-series.ts +1 -1
- package/src/plugins/builtin/world-venue-map/index.ts +1 -1
- package/src/plugins/builtin/yield-curve/index.tsx +1 -1
- package/src/plugins/builtin-editorial.ts +126 -0
- package/src/plugins/catalog-backend.ts +16 -9
- package/src/plugins/catalog-browser.ts +127 -63
- package/src/plugins/catalog-manifest.ts +73 -40
- package/src/plugins/catalog-ui.ts +26 -6
- package/src/plugins/extracted-plugins.ts +7 -1
- package/src/plugins/ownership.ts +150 -7
- package/src/plugins/plugin-functions.ts +54 -0
- package/src/plugins/plugin-off.ts +36 -0
- package/src/plugins/registry/host-actions.ts +16 -0
- package/src/plugins/registry/index.ts +84 -24
- package/src/plugins/registry/plugin-state.ts +25 -1
- package/src/plugins/runtime/context.tsx +29 -0
- package/src/react/input.ts +48 -1
- package/src/remote/app-host.tsx +5 -0
- package/src/remote/controller.ts +3 -53
- package/src/remote/matching.ts +69 -0
- package/src/remote/schema.ts +1 -1
- package/src/remote/semantic-tree.tsx +14 -0
- package/src/remote/types.ts +2 -0
- package/src/renderers/dom/desktop/icons.tsx +14 -0
- package/src/renderers/dom/desktop/query-bar.tsx +59 -32
- package/src/renderers/dom/host/box.tsx +1 -1
- package/src/renderers/dom/host/drag-shield.ts +17 -6
- package/src/renderers/dom/host/live-frame.ts +10 -2
- package/src/renderers/dom/input-host.tsx +6 -1
- package/src/renderers/dom/styles.css +13 -0
- package/src/renderers/electrobun/bun/desktop/backend.ts +5 -1
- package/src/renderers/electrobun/bun/desktop/detached-windows.ts +12 -1
- package/src/renderers/electrobun/bun/desktop/initialization.ts +2 -1
- package/src/renderers/electrobun/shared/protocol.ts +2 -0
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +1 -1
- package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +101 -5
- package/src/renderers/electrobun/view/main.tsx +4 -1
- package/src/renderers/opentui/input-host.tsx +6 -1
- package/src/renderers/opentui/start.tsx +9 -0
- package/src/shares/portable-layout.ts +16 -6
- package/src/sources/gloomberb-cloud/index.ts +19 -10
- package/src/sources/gloomberb-cloud/normalizers.ts +4 -1
- package/src/sources/listing-symbols.ts +11 -5
- package/src/sources/provider-errors.ts +88 -3
- package/src/sources/provider-router/cached-routes.ts +8 -4
- package/src/sources/provider-router/financial-routes.ts +11 -5
- package/src/sources/provider-router/financials.ts +42 -15
- package/src/sources/provider-router/history.ts +27 -11
- package/src/sources/provider-router/index.ts +1 -1
- package/src/sources/provider-router/primary.ts +23 -5
- package/src/sources/sec-edgar.ts +68 -8
- package/src/sync/core-contributors.ts +4 -3
- package/src/test-support/cli-context.ts +2 -1
- package/src/test-support/data-provider.ts +34 -0
- package/src/test-support/shell-pane-keys.tsx +1 -0
- package/src/theme/series-colors.ts +46 -0
- package/src/theme/themes.ts +149 -0
- package/src/tickers/search/index.ts +22 -2
- package/src/tickers/search/ranking.ts +45 -1
- package/src/tickers/search/types.ts +3 -1
- package/src/time-series/resolve.ts +1 -14
- package/src/types/config.ts +61 -1
- package/src/types/headless.ts +11 -0
- package/src/types/instrument.ts +8 -0
- package/src/types/plugin.ts +49 -3
- package/src/ui/host.tsx +8 -4
- package/src/ui/index.tsx +2 -0
- package/src/utils/cli-output.ts +14 -1
- package/src/utils/exchanges.ts +13 -0
- package/src/utils/format.ts +2 -1
- package/src/utils/fx-market-hours.ts +34 -0
- package/src/utils/option-expiry.ts +126 -0
- package/src/utils/price-history.ts +39 -6
- package/src/utils/rpc-timeout-error.ts +6 -2
- package/src/utils/sec-eps-basis.ts +159 -30
- package/src/utils/sec.ts +38 -34
- package/src/utils/throttled-fetch.ts +51 -22
|
@@ -3,16 +3,16 @@ import type {
|
|
|
3
3
|
ASKGConversationDetail,
|
|
4
4
|
ASKGConversationTool,
|
|
5
5
|
} from "../../../../api-client/askg";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
import type {
|
|
7
|
+
ASKGFeedback,
|
|
8
|
+
ASKGLimits,
|
|
9
|
+
ASKGSseEvent,
|
|
10
|
+
ASKGToolCallEvent,
|
|
11
|
+
JsonValue,
|
|
12
|
+
ToolManifestSource,
|
|
13
|
+
ToolResultPayload,
|
|
14
|
+
ToolResultStatus,
|
|
15
|
+
WriteTier,
|
|
16
16
|
} from "./protocol";
|
|
17
17
|
import { capToolNote } from "./notes";
|
|
18
18
|
|
|
@@ -35,6 +35,8 @@ export interface ASKGToolRow {
|
|
|
35
35
|
name: string;
|
|
36
36
|
/** One line rendering of the call arguments, e.g. `NVDA · range=5Y`. */
|
|
37
37
|
argumentSummary: string;
|
|
38
|
+
/** The arguments themselves, when known, so the row can name what it read. */
|
|
39
|
+
args?: Record<string, JsonValue>;
|
|
38
40
|
writeTier: WriteTier;
|
|
39
41
|
/** Server tools are executed by the platform and marked as run by Gloom. */
|
|
40
42
|
origin: "client" | "server";
|
|
@@ -67,6 +69,14 @@ export interface ASKGErrorState {
|
|
|
67
69
|
retryAfterMs?: number;
|
|
68
70
|
}
|
|
69
71
|
|
|
72
|
+
/** The person's rating of one answer, as the control shows it. */
|
|
73
|
+
export interface ASKGTurnFeedback extends ASKGFeedback {
|
|
74
|
+
/** A request is out: the control already shows the choice it carries. */
|
|
75
|
+
pending: "rating" | "share" | null;
|
|
76
|
+
/** Asked to send, and the server had no answer left to send. */
|
|
77
|
+
shareFailed?: boolean;
|
|
78
|
+
}
|
|
79
|
+
|
|
70
80
|
export interface ASKGTurn {
|
|
71
81
|
id: string;
|
|
72
82
|
/** Server turn id, known once the stream announces itself. */
|
|
@@ -77,6 +87,8 @@ export interface ASKGTurn {
|
|
|
77
87
|
status: ASKGTurnStatus;
|
|
78
88
|
error: ASKGErrorState | null;
|
|
79
89
|
startedAt: number;
|
|
90
|
+
/** Absent until rated, here or on a stored conversation. */
|
|
91
|
+
feedback?: ASKGTurnFeedback;
|
|
80
92
|
}
|
|
81
93
|
|
|
82
94
|
export interface ASKGConversationState {
|
|
@@ -90,6 +102,11 @@ export interface ASKGConversationState {
|
|
|
90
102
|
turns: ASKGTurn[];
|
|
91
103
|
/** Highest applied `seq`, so a resumed stream skips replayed events. */
|
|
92
104
|
lastSeq: number;
|
|
105
|
+
/**
|
|
106
|
+
* The server takes answer ratings: a session or a reopened conversation
|
|
107
|
+
* said so. Until then, and on an older server, no answer shows the control.
|
|
108
|
+
*/
|
|
109
|
+
feedbackAvailable: boolean;
|
|
93
110
|
}
|
|
94
111
|
|
|
95
112
|
export const EMPTY_ASKG_CONVERSATION: ASKGConversationState = {
|
|
@@ -100,6 +117,7 @@ export const EMPTY_ASKG_CONVERSATION: ASKGConversationState = {
|
|
|
100
117
|
acceptedTools: [],
|
|
101
118
|
turns: [],
|
|
102
119
|
lastSeq: 0,
|
|
120
|
+
feedbackAvailable: false,
|
|
103
121
|
};
|
|
104
122
|
|
|
105
123
|
export type ASKGAction =
|
|
@@ -109,8 +127,12 @@ export type ASKGAction =
|
|
|
109
127
|
model: string;
|
|
110
128
|
limits: ASKGLimits;
|
|
111
129
|
acceptedTools: string[];
|
|
130
|
+
/** The session accepted answer ratings. */
|
|
131
|
+
feedback: boolean;
|
|
112
132
|
}
|
|
113
133
|
| { type: "prompt"; turnId: string; prompt: string; at: number }
|
|
134
|
+
| { type: "feedback"; turnId: string; feedback: ASKGTurnFeedback | null }
|
|
135
|
+
| { type: "feedback-unavailable" }
|
|
114
136
|
| { type: "event"; event: ASKGSseEvent }
|
|
115
137
|
| { type: "tool-awaiting-confirmation"; toolCallId: string }
|
|
116
138
|
| { type: "tool-running"; toolCallId: string }
|
|
@@ -170,6 +192,7 @@ function rowFromToolCall(event: ASKGToolCallEvent): ASKGToolRow {
|
|
|
170
192
|
toolCallId: event.toolCallId,
|
|
171
193
|
name: event.name,
|
|
172
194
|
argumentSummary: summarizeToolArguments(event.args),
|
|
195
|
+
args: event.args,
|
|
173
196
|
writeTier: event.writeTier,
|
|
174
197
|
origin: "client",
|
|
175
198
|
status: requiresLocalConfirmation(event) ? "awaiting-confirmation" : "pending",
|
|
@@ -230,6 +253,12 @@ function appendToolRow(turn: ASKGTurn, row: ASKGToolRow): ASKGTurn {
|
|
|
230
253
|
return { ...turn, tools };
|
|
231
254
|
}
|
|
232
255
|
|
|
256
|
+
/** A refusal at the daily cap means none are left, whatever the count read earlier. */
|
|
257
|
+
function withQuotaSpent(state: ASKGConversationState, code: ASKGClientErrorCode): ASKGConversationState {
|
|
258
|
+
if (code !== "daily_turn_cap" || !state.limits) return state;
|
|
259
|
+
return { ...state, limits: { ...state.limits, turnsRemainingToday: 0 } };
|
|
260
|
+
}
|
|
261
|
+
|
|
233
262
|
function applyEvent(
|
|
234
263
|
state: ASKGConversationState,
|
|
235
264
|
event: ASKGSseEvent,
|
|
@@ -239,7 +268,11 @@ function applyEvent(
|
|
|
239
268
|
const next = { ...state, lastSeq: event.seq };
|
|
240
269
|
|
|
241
270
|
switch (event.type) {
|
|
242
|
-
case "session":
|
|
271
|
+
case "session": {
|
|
272
|
+
const turn = next.turns[next.turns.length - 1];
|
|
273
|
+
// The limits were read when the session opened; every turn the platform
|
|
274
|
+
// admits since then uses one of the questions they counted.
|
|
275
|
+
const admitted = !!turn && !turn.remoteTurnId && !!next.limits;
|
|
243
276
|
return patchTurn(
|
|
244
277
|
{
|
|
245
278
|
...next,
|
|
@@ -247,10 +280,17 @@ function applyEvent(
|
|
|
247
280
|
model: event.model,
|
|
248
281
|
// A turn that named no conversation learns here where it was filed.
|
|
249
282
|
conversationId: event.conversationId ?? next.conversationId,
|
|
283
|
+
...(admitted && next.limits ? {
|
|
284
|
+
limits: {
|
|
285
|
+
...next.limits,
|
|
286
|
+
turnsRemainingToday: Math.max(0, next.limits.turnsRemainingToday - 1),
|
|
287
|
+
},
|
|
288
|
+
} : {}),
|
|
250
289
|
},
|
|
251
290
|
null,
|
|
252
|
-
(
|
|
291
|
+
(current) => (current.remoteTurnId ? current : { ...current, remoteTurnId: event.turnId }),
|
|
253
292
|
);
|
|
293
|
+
}
|
|
254
294
|
case "text-delta":
|
|
255
295
|
return patchTurn(next, event.turnId, (turn) => ({
|
|
256
296
|
...turn,
|
|
@@ -263,10 +303,13 @@ function applyEvent(
|
|
|
263
303
|
// A call this client ran keeps its own row whatever the echo says it
|
|
264
304
|
// was: replacing it would drop its write tier, result and undo.
|
|
265
305
|
if (event.source === "server" && !hasClientRow(next, event.toolCallId)) {
|
|
306
|
+
// A server older than the field sends none, like a stored call that kept none.
|
|
307
|
+
const args = isRecord(event.args) ? event.args : undefined;
|
|
266
308
|
return patchTurn(next, event.turnId, (turn) => appendToolRow(turn, {
|
|
267
309
|
toolCallId: event.toolCallId,
|
|
268
310
|
name: event.name,
|
|
269
|
-
argumentSummary: event.summary.note ?? "",
|
|
311
|
+
argumentSummary: args ? summarizeToolArguments(args) : (event.summary.note ?? ""),
|
|
312
|
+
...(args ? { args } : {}),
|
|
270
313
|
writeTier: "read",
|
|
271
314
|
origin: "server",
|
|
272
315
|
source: event.source,
|
|
@@ -292,7 +335,7 @@ function applyEvent(
|
|
|
292
335
|
case "tool-result-ack":
|
|
293
336
|
return next;
|
|
294
337
|
case "error":
|
|
295
|
-
return patchTurn(next, event.turnId ?? null, (turn) => ({
|
|
338
|
+
return patchTurn(withQuotaSpent(next, event.code), event.turnId ?? null, (turn) => ({
|
|
296
339
|
...turn,
|
|
297
340
|
status: "error",
|
|
298
341
|
error: {
|
|
@@ -345,7 +388,21 @@ export function askgReducer(
|
|
|
345
388
|
model: action.model,
|
|
346
389
|
limits: action.limits,
|
|
347
390
|
acceptedTools: action.acceptedTools,
|
|
391
|
+
feedbackAvailable: action.feedback,
|
|
348
392
|
};
|
|
393
|
+
case "feedback": {
|
|
394
|
+
const index = state.turns.findIndex((turn) => turn.id === action.turnId);
|
|
395
|
+
const turn = state.turns[index];
|
|
396
|
+
if (!turn) return state;
|
|
397
|
+
const next: ASKGTurn = { ...turn };
|
|
398
|
+
if (action.feedback) next.feedback = action.feedback;
|
|
399
|
+
else delete next.feedback;
|
|
400
|
+
const turns = [...state.turns];
|
|
401
|
+
turns[index] = next;
|
|
402
|
+
return { ...state, turns };
|
|
403
|
+
}
|
|
404
|
+
case "feedback-unavailable":
|
|
405
|
+
return state.feedbackAvailable ? { ...state, feedbackAvailable: false } : state;
|
|
349
406
|
case "prompt":
|
|
350
407
|
return {
|
|
351
408
|
...state,
|
|
@@ -392,7 +449,7 @@ export function askgReducer(
|
|
|
392
449
|
case "undo":
|
|
393
450
|
return patchToolRow(state, action.toolCallId, (row) => ({ ...row, undo: action.undo }));
|
|
394
451
|
case "turn-failed":
|
|
395
|
-
return patchTurn(state, action.turnId, (turn) => ({
|
|
452
|
+
return patchTurn(withQuotaSpent(state, action.error.code), action.turnId, (turn) => ({
|
|
396
453
|
...turn,
|
|
397
454
|
status: "error",
|
|
398
455
|
error: action.error,
|
|
@@ -423,6 +480,9 @@ export function askgReducer(
|
|
|
423
480
|
conversationId: action.conversation.id,
|
|
424
481
|
turns: turnsFromConversation(action.conversation),
|
|
425
482
|
lastSeq: 0,
|
|
483
|
+
// No session may be open yet, so the stored conversation says it too.
|
|
484
|
+
feedbackAvailable: state.feedbackAvailable
|
|
485
|
+
|| action.conversation.capabilities?.feedback === 1,
|
|
426
486
|
};
|
|
427
487
|
case "conversation-started":
|
|
428
488
|
return { ...state, conversationId: null, turns: [], lastSeq: 0 };
|
|
@@ -433,6 +493,7 @@ export function askgReducer(
|
|
|
433
493
|
model: state.model,
|
|
434
494
|
limits: state.limits,
|
|
435
495
|
acceptedTools: state.acceptedTools,
|
|
496
|
+
feedbackAvailable: state.feedbackAvailable,
|
|
436
497
|
};
|
|
437
498
|
}
|
|
438
499
|
}
|
|
@@ -449,6 +510,7 @@ function rowFromStoredTool(tool: ASKGConversationTool): ASKGToolRow {
|
|
|
449
510
|
argumentSummary: tool.args
|
|
450
511
|
? summarizeToolArguments(tool.args as Record<string, JsonValue>)
|
|
451
512
|
: (tool.note ?? ""),
|
|
513
|
+
...(tool.args ? { args: tool.args as Record<string, JsonValue> } : {}),
|
|
452
514
|
writeTier: "read",
|
|
453
515
|
origin: tool.origin,
|
|
454
516
|
status: (tool.status as ASKGToolRowStatus) ?? "ok",
|
|
@@ -460,6 +522,31 @@ function rowFromStoredTool(tool: ASKGConversationTool): ASKGToolRow {
|
|
|
460
522
|
};
|
|
461
523
|
}
|
|
462
524
|
|
|
525
|
+
/** A stored rating, read defensively: an unknown thumb is no rating. */
|
|
526
|
+
function storedFeedback(
|
|
527
|
+
feedback: ASKGFeedback | null | undefined,
|
|
528
|
+
): ASKGTurnFeedback | null {
|
|
529
|
+
if (!feedback || (feedback.rating !== "up" && feedback.rating !== "down")) return null;
|
|
530
|
+
return {
|
|
531
|
+
rating: feedback.rating,
|
|
532
|
+
reason: feedback.rating === "down" ? feedback.reason ?? null : null,
|
|
533
|
+
shared: feedback.shared === true,
|
|
534
|
+
pending: null,
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Whether an answer shows the rating control: a finished answer with text,
|
|
540
|
+
* filed under a server turn id, on a server that takes ratings. A failed,
|
|
541
|
+
* cancelled or still streaming turn has nothing to rate.
|
|
542
|
+
*/
|
|
543
|
+
export function canRateTurn(state: ASKGConversationState, turn: ASKGTurn): boolean {
|
|
544
|
+
return state.feedbackAvailable
|
|
545
|
+
&& turn.status === "complete"
|
|
546
|
+
&& !!turn.remoteTurnId
|
|
547
|
+
&& turn.answer.trim().length > 0;
|
|
548
|
+
}
|
|
549
|
+
|
|
463
550
|
/**
|
|
464
551
|
* Rebuilds the transcript of a reopened conversation. Messages arrive oldest
|
|
465
552
|
* first as alternating question and answer, and each pair becomes one turn, so
|
|
@@ -489,6 +576,7 @@ export function turnsFromConversation(
|
|
|
489
576
|
// still shows rather than being dropped on the floor.
|
|
490
577
|
const turn = turns[turns.length - 1];
|
|
491
578
|
const tools = message.tools.map(rowFromStoredTool);
|
|
579
|
+
const feedback = storedFeedback(message.feedback);
|
|
492
580
|
if (!turn || turn.answer) {
|
|
493
581
|
turns.push({
|
|
494
582
|
id: `stored:${conversation.id}:${message.seq}`,
|
|
@@ -499,10 +587,18 @@ export function turnsFromConversation(
|
|
|
499
587
|
status: "complete",
|
|
500
588
|
error: null,
|
|
501
589
|
startedAt,
|
|
590
|
+
...(feedback ? { feedback } : {}),
|
|
502
591
|
});
|
|
503
592
|
continue;
|
|
504
593
|
}
|
|
505
|
-
turns[turns.length - 1] = {
|
|
594
|
+
turns[turns.length - 1] = {
|
|
595
|
+
...turn,
|
|
596
|
+
// The answer's id is the one the rating was filed under.
|
|
597
|
+
remoteTurnId: message.turnId ?? turn.remoteTurnId,
|
|
598
|
+
answer: message.text,
|
|
599
|
+
tools,
|
|
600
|
+
...(feedback ? { feedback } : {}),
|
|
601
|
+
};
|
|
506
602
|
}
|
|
507
603
|
return turns;
|
|
508
604
|
}
|
|
@@ -713,64 +809,27 @@ export function canRetryASKGError(error: ASKGErrorState): boolean {
|
|
|
713
809
|
return !UNRETRYABLE_ERROR_CODES.has(error.code);
|
|
714
810
|
}
|
|
715
811
|
|
|
812
|
+
/** "12s", "8 min", "22 h": a wait a person can picture. */
|
|
813
|
+
function waitText(ms: number): string {
|
|
814
|
+
const seconds = Math.max(1, Math.round(ms / 1000));
|
|
815
|
+
if (seconds < 90) return `${seconds}s`;
|
|
816
|
+
const minutes = Math.round(seconds / 60);
|
|
817
|
+
if (minutes < 90) return `${minutes} min`;
|
|
818
|
+
return `${Math.round(minutes / 60)} h`;
|
|
819
|
+
}
|
|
820
|
+
|
|
716
821
|
/** Specific, actionable one line description of a failure. */
|
|
717
822
|
export function describeASKGError(error: ASKGErrorState): string {
|
|
718
823
|
const title = ERROR_TITLES[error.code] ?? "Ask Gloom failed";
|
|
719
|
-
const
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
824
|
+
const wait = error.retryAfterMs && error.retryAfterMs > 0 ? waitText(error.retryAfterMs) : null;
|
|
825
|
+
// The cap has one thing to say: none left, and when there will be more.
|
|
826
|
+
if (error.code === "daily_turn_cap") {
|
|
827
|
+
return `No questions left today.${wait ? ` More in ${wait}.` : ""}`;
|
|
828
|
+
}
|
|
829
|
+
const retry = wait ? ` Try again in ${wait}.` : "";
|
|
830
|
+
// A machine code the platform appends ("daily_turn_cap") is not for people.
|
|
831
|
+
const detail = error.message.replace(/\s*\b[a-z]+(?:_[a-z]+)+\b\.?/g, "").trim();
|
|
723
832
|
return detail && detail.toLowerCase() !== title.toLowerCase()
|
|
724
833
|
? `${title}: ${detail}${retry}`
|
|
725
834
|
: `${title}.${retry}`;
|
|
726
835
|
}
|
|
727
|
-
|
|
728
|
-
/**
|
|
729
|
-
* The server running a script of tool calls in one step. Each call it made
|
|
730
|
-
* has its own row above it, so this row only reports how the script ended.
|
|
731
|
-
*/
|
|
732
|
-
function isScriptRow(row: Pick<ASKGToolRow, "name" | "origin">): boolean {
|
|
733
|
-
return row.origin === "server" && row.name === SCRIPT_TOOL_NAME;
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
/**
|
|
737
|
-
* The label and one-line summary a timeline row leads with. A script has no
|
|
738
|
-
* arguments worth showing: a clean run puts its note ("3 calls, 1.2 s") on
|
|
739
|
-
* the line, and any other outcome leaves the note to the line below, which
|
|
740
|
-
* wraps, so it is said once and in full.
|
|
741
|
-
*/
|
|
742
|
-
export function toolRowHeadline(row: ASKGToolRow): { label: string; summary: string } {
|
|
743
|
-
if (!isScriptRow(row)) return { label: row.name, summary: row.argumentSummary };
|
|
744
|
-
return { label: "Script", summary: row.status === "ok" ? row.note ?? "" : "" };
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
/** Wording for the tool row status column. */
|
|
748
|
-
export function describeToolStatus(row: ASKGToolRow): string {
|
|
749
|
-
// A script counts calls, not rows, and its note already says how many.
|
|
750
|
-
if (isScriptRow(row)) {
|
|
751
|
-
if (row.status === "ok") return "done";
|
|
752
|
-
if (row.status === "partial") return "partial";
|
|
753
|
-
}
|
|
754
|
-
switch (row.status) {
|
|
755
|
-
case "pending":
|
|
756
|
-
return "queued";
|
|
757
|
-
case "awaiting-confirmation":
|
|
758
|
-
return "needs approval";
|
|
759
|
-
case "running":
|
|
760
|
-
return "running";
|
|
761
|
-
case "ok":
|
|
762
|
-
return row.rowCount === undefined
|
|
763
|
-
? "done"
|
|
764
|
-
: `${row.rowCount} ${row.rowCount === 1 ? "row" : "rows"}`;
|
|
765
|
-
case "partial":
|
|
766
|
-
return row.rowCount === undefined ? "partial" : `${row.rowCount} rows · partial`;
|
|
767
|
-
case "denied":
|
|
768
|
-
return "declined";
|
|
769
|
-
case "timeout":
|
|
770
|
-
return "timed out";
|
|
771
|
-
case "cancelled":
|
|
772
|
-
return "cancelled";
|
|
773
|
-
case "error":
|
|
774
|
-
return "failed";
|
|
775
|
-
}
|
|
776
|
-
}
|