gloomberb 0.9.9 → 0.10.0
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 +41 -3
- package/README.zh-CN.md +294 -0
- package/package.json +10 -4
- package/patches/@opentui%2Fcore@0.3.2.patch +26 -69
- package/src/api-client/auth.ts +2 -0
- package/src/api-client/index.test.ts +4 -0
- package/src/api-client/types.ts +3 -0
- package/src/app/pane-runtime/pane-settings-runtime.tsx +1 -0
- package/src/app/pane-template-dialog-wizard.test.tsx +36 -0
- package/src/app/pane-template-dialog-wizard.tsx +10 -3
- package/src/app/runtime/desktop-deeplink.test.ts +15 -0
- package/src/app/runtime/desktop-deeplink.ts +21 -6
- package/src/app.tsx +40 -33
- package/src/capabilities/service-capabilities.ts +7 -2
- package/src/cli/commands/automation.test.ts +202 -0
- package/src/cli/commands/automation.ts +153 -36
- package/src/cli/commands/market.ts +1 -14
- package/src/cli/commands/system.ts +4 -1
- package/src/cli/context.ts +1 -1
- package/src/cli/desktop-pane-shot.ts +65 -4
- package/src/cli/entry.ts +1 -1
- package/src/cli/pane-functions/capabilities.ts +532 -0
- package/src/cli/pane-functions/catalog.ts +39 -4
- package/src/cli/pane-functions/data.test.ts +17 -0
- package/src/cli/pane-functions/data.ts +55 -13
- package/src/cli/pane-functions/discovery.ts +36 -9
- package/src/cli/pane-functions/index.test.ts +104 -1
- package/src/cli/pane-functions/index.ts +64 -5
- package/src/cli/pane-functions/options.ts +21 -6
- package/src/cli/pane-functions/report.ts +735 -72
- package/src/cli/pane-functions/resolver.ts +70 -6
- package/src/cli/pane-functions/screenshot.test.ts +431 -0
- package/src/cli/pane-functions/screenshot.ts +952 -8
- package/src/components/chart/composite/column-layout.ts +215 -0
- package/src/components/chart/composite/composite-chart.test.tsx +630 -0
- package/src/components/chart/composite/composite-chart.tsx +1148 -0
- package/src/components/chart/composite/format.test.ts +137 -0
- package/src/components/chart/composite/format.ts +135 -0
- package/src/components/chart/composite/index.ts +38 -0
- package/src/components/chart/composite/interactions.test.ts +109 -0
- package/src/components/chart/composite/interactions.ts +247 -0
- package/src/components/chart/composite/price-series.test.ts +39 -0
- package/src/components/chart/composite/price-series.ts +78 -0
- package/src/components/chart/composite/rasterizer.ts +359 -0
- package/src/components/chart/composite/renderers.test.ts +610 -0
- package/src/components/chart/composite/scene.test.ts +464 -0
- package/src/components/chart/composite/scene.ts +553 -0
- package/src/components/chart/composite/text-renderer.ts +285 -0
- package/src/components/chart/composite/time-scale.test.ts +88 -0
- package/src/components/chart/composite/time-scale.ts +217 -0
- package/src/components/chart/composite/types.ts +141 -0
- package/src/components/chart/core/data.ts +81 -5
- package/src/components/chart/core/index.test.ts +128 -43
- package/src/components/chart/core/resolution.ts +0 -6
- package/src/components/chart/native/chart-rasterizer.ts +1 -3
- package/src/components/chart/native/kitty/index.test.ts +99 -120
- package/src/components/chart/native/kitty/manager.ts +3 -0
- package/src/components/chart/native/kitty/protocol.ts +4 -1
- package/src/components/chart/native/raster/crosshair.ts +79 -46
- package/src/components/chart/native/raster/types.ts +2 -11
- package/src/components/chart/native/surface/manager.ts +48 -3
- package/src/components/chart/price-axis-labels.tsx +18 -4
- package/src/components/command-bar/commands/direct/index.ts +25 -0
- package/src/components/command-bar/commands/registry.ts +9 -0
- package/src/components/command-bar/helpers.test.ts +4 -1
- package/src/components/command-bar/list/view.tsx +18 -6
- package/src/components/command-bar/multi-select-picker.tsx +6 -5
- package/src/components/command-bar/pane-settings.test.ts +141 -0
- package/src/components/command-bar/pane-settings.ts +61 -1
- package/src/components/command-bar/panel/body.tsx +7 -6
- package/src/components/command-bar/routes/root/command-items.ts +4 -4
- package/src/components/command-bar/routes/root/results.ts +10 -1
- package/src/components/command-bar/routes/root/selection.test.ts +54 -0
- package/src/components/command-bar/routes/root/selection.ts +13 -0
- package/src/components/command-bar/routing/actions.ts +18 -2
- package/src/components/command-bar/routing/list-state.ts +2 -1
- package/src/components/command-bar/surface/index.test.tsx +36 -4
- package/src/components/command-bar/surface/pane.test.tsx +93 -0
- package/src/components/command-bar/theme-picker.tsx +2 -1
- package/src/components/command-bar/view-model.ts +19 -20
- package/src/components/command-bar/workflow/body.tsx +2 -1
- package/src/components/command-bar/workflow/field-row.tsx +3 -2
- package/src/components/command-bar/workflow/fields.ts +4 -2
- package/src/components/command-bar/workflow/ops.test.ts +161 -0
- package/src/components/command-bar/workflow/ops.ts +20 -50
- package/src/components/command-bar/workflow/route-actions.test.ts +34 -0
- package/src/components/command-bar/workflow/route-actions.ts +4 -0
- package/src/components/command-bar/workflow/types.ts +1 -0
- package/src/components/feed-data-table/stack-view.tsx +6 -5
- package/src/components/index.ts +13 -1
- package/src/components/layout/detached-pane-shell.tsx +2 -1
- package/src/components/layout/floating-pane.tsx +3 -0
- package/src/components/layout/header.tsx +15 -8
- package/src/components/layout/pane/footer/index.test.tsx +22 -3
- package/src/components/layout/pane/footer/index.tsx +3 -1
- package/src/components/layout/pane/footer/model.ts +9 -2
- package/src/components/layout/pane/header.tsx +4 -6
- package/src/components/layout/pane/index.tsx +3 -0
- package/src/components/layout/pane/sidebar.test.tsx +100 -0
- package/src/components/layout/pane/sidebar.tsx +239 -0
- package/src/components/layout/pane/title.ts +4 -3
- package/src/components/layout/shell/action-menu-overlay.tsx +5 -3
- package/src/components/layout/shell/drag/runtime.ts +2 -0
- package/src/components/layout/shell/menu.test.ts +19 -0
- package/src/components/layout/shell/menu.ts +8 -5
- package/src/components/layout/shell/native/pointer-runtime.ts +4 -1
- package/src/components/layout/shell/pane/layers.tsx +2 -2
- package/src/components/layout/status-bar.tsx +8 -7
- package/src/components/layout/window-controls.tsx +4 -3
- package/src/components/metric-treemap/index.tsx +3 -2
- package/src/components/onboarding/onboarding-steps.tsx +30 -29
- package/src/components/onboarding/onboarding-wizard.tsx +5 -4
- package/src/components/onboarding/portfolio-step/broker-fields-panel.tsx +15 -12
- package/src/components/onboarding/portfolio-step/broker-setup-panel.tsx +17 -16
- package/src/components/onboarding/portfolio-step/broker-sync-panel.tsx +6 -5
- package/src/components/onboarding/portfolio-step/choose-panel.tsx +5 -4
- package/src/components/pane-settings-dialog/desktop.tsx +25 -3
- package/src/components/pane-settings-dialog/field-dialogs.tsx +5 -4
- package/src/components/pane-settings-dialog/tui.tsx +11 -9
- package/src/components/pane-settings-dialog/value.ts +8 -5
- package/src/components/pane-settings-dialog.test.tsx +235 -0
- package/src/components/pane-settings-dialog.tsx +24 -0
- package/src/components/pane-template-wizard.tsx +6 -2
- package/src/components/ticker/list-table-view.tsx +3 -2
- package/src/components/ui/button.tsx +3 -1
- package/src/components/ui/choice-dialog.tsx +6 -1
- package/src/components/ui/confirm-dialog.tsx +3 -2
- package/src/components/ui/fields.tsx +10 -1
- package/src/components/ui/frame.tsx +4 -1
- package/src/components/ui/index.ts +5 -0
- package/src/components/ui/inline-quick-add.tsx +104 -0
- package/src/components/ui/list-view.tsx +5 -4
- package/src/components/ui/loading.tsx +2 -1
- package/src/components/ui/multi-select/dialog.tsx +188 -44
- package/src/components/ui/popover.tsx +10 -0
- package/src/components/ui/shortcut-hint.tsx +2 -0
- package/src/components/ui/status.tsx +4 -3
- package/src/components/ui/tabs.tsx +19 -8
- package/src/components/ui/toggle.tsx +44 -3
- package/src/components/ui/ui.test.tsx +67 -5
- package/src/core/app-services.ts +4 -6
- package/src/core/state/session-persistence.ts +3 -2
- package/src/data/config/chart-settings.ts +712 -0
- package/src/data/config/layout.ts +24 -5
- package/src/data/config/store/index.test.ts +377 -14
- package/src/data/config/store/normalize.ts +79 -65
- package/src/data/fred-series.ts +137 -0
- package/src/i18n/index.test.ts +114 -0
- package/src/i18n/index.ts +147 -0
- package/src/i18n/ja.ts +1013 -0
- package/src/i18n/ko.ts +1011 -0
- package/src/i18n/languages.test.ts +31 -0
- package/src/i18n/languages.ts +72 -0
- package/src/i18n/zh-cn.ts +1013 -0
- package/src/i18n/zh-tw.ts +1013 -0
- package/src/plugins/builtin/account-management/footer.ts +3 -2
- package/src/plugins/builtin/account-management/form-components.tsx +3 -2
- package/src/plugins/builtin/account-management/keyboard.ts +6 -0
- package/src/plugins/builtin/account-management/model.ts +25 -21
- package/src/plugins/builtin/account-management/navigation.test.ts +27 -0
- package/src/plugins/builtin/account-management/navigation.ts +24 -0
- package/src/plugins/builtin/account-management/pane.tsx +120 -85
- package/src/plugins/builtin/account-management/password-dialog.tsx +10 -9
- package/src/plugins/builtin/ai/agent-history.ts +139 -0
- package/src/plugins/builtin/ai/ask-ai-detail-tab.tsx +133 -51
- package/src/plugins/builtin/ai/ask-ai.test.tsx +83 -22
- package/src/plugins/builtin/ai/index.test.ts +302 -0
- package/src/plugins/builtin/ai/index.tsx +374 -40
- package/src/plugins/builtin/ai/pane-settings.test.ts +155 -0
- package/src/plugins/builtin/ai/pane-settings.ts +319 -0
- package/src/plugins/builtin/ai/pi/credential-store.test.ts +80 -0
- package/src/plugins/builtin/ai/pi/credential-store.ts +138 -0
- package/src/plugins/builtin/ai/pi/file-store.ts +138 -0
- package/src/plugins/builtin/ai/pi/host.test.ts +500 -0
- package/src/plugins/builtin/ai/pi/host.ts +564 -0
- package/src/plugins/builtin/ai/pi/index.ts +5 -0
- package/src/plugins/builtin/ai/pi/models-store.test.ts +44 -0
- package/src/plugins/builtin/ai/pi/models-store.ts +141 -0
- package/src/plugins/builtin/ai/pi/providers.ts +68 -0
- package/src/plugins/builtin/ai/pi/runtime.test.ts +240 -0
- package/src/plugins/builtin/ai/pi/runtime.ts +635 -0
- package/src/plugins/builtin/ai/providers.test.ts +68 -0
- package/src/plugins/builtin/ai/providers.ts +163 -38
- package/src/plugins/builtin/ai/runner-selection.test.ts +174 -0
- package/src/plugins/builtin/ai/runner-selection.ts +193 -0
- package/src/plugins/builtin/ai/runner-selector.tsx +153 -0
- package/src/plugins/builtin/ai/runner.test.ts +198 -0
- package/src/plugins/builtin/ai/runner.ts +276 -73
- package/src/plugins/builtin/ai/screener/contract.test.ts +26 -73
- package/src/plugins/builtin/ai/screener/contract.ts +14 -52
- package/src/plugins/builtin/ai/screener/editor-runtime.ts +55 -5
- package/src/plugins/builtin/ai/screener/editor.tsx +42 -36
- package/src/plugins/builtin/ai/screener/footer.ts +82 -67
- package/src/plugins/builtin/ai/screener/keyboard.ts +27 -11
- package/src/plugins/builtin/ai/screener/model.test.ts +24 -0
- package/src/plugins/builtin/ai/screener/model.ts +9 -3
- package/src/plugins/builtin/ai/screener/pane.test.tsx +142 -55
- package/src/plugins/builtin/ai/screener/pane.tsx +95 -97
- package/src/plugins/builtin/ai/screener/results-view.tsx +8 -41
- package/src/plugins/builtin/ai/screener/runner.ts +41 -25
- package/src/plugins/builtin/ai/screener/tabs-bar.tsx +2 -2
- package/src/plugins/builtin/ai/use-runtime-providers.ts +28 -0
- package/src/plugins/builtin/ai/workspace/model.test.ts +227 -0
- package/src/plugins/builtin/ai/workspace/model.ts +308 -0
- package/src/plugins/builtin/ai/workspace/pane.test.tsx +197 -0
- package/src/plugins/builtin/ai/workspace/pane.tsx +896 -0
- package/src/plugins/builtin/analytics/index.test.tsx +3 -3
- package/src/plugins/builtin/analytics/index.tsx +3 -8
- package/src/plugins/builtin/broker-manager/detail.tsx +25 -24
- package/src/plugins/builtin/broker-manager/index.test.tsx +1 -1
- package/src/plugins/builtin/broker-manager/index.tsx +9 -11
- package/src/plugins/builtin/broker-manager/model.ts +11 -10
- package/src/plugins/builtin/broker-manager/pane-actions.tsx +22 -21
- package/src/plugins/builtin/broker-manager/table.ts +9 -8
- package/src/plugins/builtin/changelog/index.tsx +3 -8
- package/src/plugins/builtin/chart-composer/chart-spec.ts +89 -0
- package/src/plugins/builtin/chart-composer/cli-options.ts +98 -0
- package/src/plugins/builtin/chart-composer/date-window-dialog.tsx +120 -0
- package/src/plugins/builtin/chart-composer/editor.test.tsx +332 -0
- package/src/plugins/builtin/chart-composer/editor.tsx +1107 -0
- package/src/plugins/builtin/chart-composer/index.tsx +228 -0
- package/src/plugins/builtin/chart-composer/pane.tsx +645 -0
- package/src/plugins/builtin/chart-composer/presets.test.ts +561 -0
- package/src/plugins/builtin/chart-composer/presets.ts +759 -0
- package/src/plugins/builtin/chart-composer/quick-add.test.tsx +245 -0
- package/src/plugins/builtin/chart-composer/quick-add.tsx +409 -0
- package/src/plugins/builtin/chart-composer/semantic.ts +86 -0
- package/src/plugins/builtin/chart-composer/series-catalog.test.ts +65 -0
- package/src/plugins/builtin/chart-composer/series-catalog.ts +295 -0
- package/src/plugins/builtin/chart-composer/settings.test.ts +163 -0
- package/src/plugins/builtin/chart-composer/settings.ts +397 -0
- package/src/plugins/builtin/chart-composer/shortcuts.test.ts +44 -0
- package/src/plugins/builtin/chart-composer/shortcuts.ts +35 -0
- package/src/plugins/builtin/chart-composer/use-series-catalog.ts +103 -0
- package/src/plugins/builtin/chat/channel-labels.ts +5 -4
- package/src/plugins/builtin/chat/channels.ts +12 -11
- package/src/plugins/builtin/chat/chat.test.tsx +32 -0
- package/src/plugins/builtin/chat/content/composer-runtime.ts +6 -1
- package/src/plugins/builtin/chat/content/composer.tsx +9 -8
- package/src/plugins/builtin/chat/content/index.tsx +36 -1
- package/src/plugins/builtin/chat/content/new-dm-dialog.tsx +8 -7
- package/src/plugins/builtin/chat/content/transcript.tsx +9 -3
- package/src/plugins/builtin/chat/controller/utils.ts +10 -9
- package/src/plugins/builtin/chat/message/desktop.tsx +17 -10
- package/src/plugins/builtin/chat/message/profile-popover.test.tsx +122 -3
- package/src/plugins/builtin/chat/message/profile-popover.tsx +38 -1
- package/src/plugins/builtin/chat/message/terminal.tsx +19 -10
- package/src/plugins/builtin/chat/pane-state.test.ts +31 -0
- package/src/plugins/builtin/chat/pane-state.ts +30 -0
- package/src/plugins/builtin/chat/pane.tsx +27 -4
- package/src/plugins/builtin/chat/profile-popover.ts +62 -5
- package/src/plugins/builtin/chat/sidebar.test.tsx +4 -7
- package/src/plugins/builtin/chat/sidebar.tsx +107 -168
- package/src/plugins/builtin/chat/test-harness.tsx +6 -0
- package/src/plugins/builtin/cloud/auth-actions.tsx +5 -4
- package/src/plugins/builtin/cloud/plugin.tsx +150 -127
- package/src/plugins/builtin/composite-plugins.ts +71 -0
- package/src/plugins/builtin/correlation/index.test.tsx +4 -4
- package/src/plugins/builtin/correlation/index.tsx +3 -8
- package/src/plugins/builtin/earnings/index.tsx +37 -21
- package/src/plugins/builtin/earnings/model.test.ts +52 -0
- package/src/plugins/builtin/earnings/model.ts +32 -0
- package/src/plugins/builtin/econ/detail-view.tsx +17 -4
- package/src/plugins/builtin/econ/fred-cache.test.ts +57 -11
- package/src/plugins/builtin/econ/index.tsx +16 -20
- package/src/plugins/builtin/fear-greed/index.tsx +2 -8
- package/src/plugins/builtin/fx-matrix/index.tsx +3 -8
- package/src/plugins/builtin/help/components.tsx +5 -4
- package/src/plugins/builtin/help/index.tsx +14 -17
- package/src/plugins/builtin/holders/index.tsx +2 -8
- package/src/plugins/builtin/insider/index.tsx +2 -7
- package/src/plugins/builtin/kelly-sizer/index.test.tsx +2 -2
- package/src/plugins/builtin/kelly-sizer/index.tsx +3 -7
- package/src/plugins/builtin/kelly-sizer/test-support.tsx +3 -3
- package/src/plugins/builtin/layout-manager/index.tsx +3 -7
- package/src/plugins/builtin/market-heatmap/index.tsx +3 -8
- package/src/plugins/builtin/market-movers/index.tsx +3 -8
- package/src/plugins/builtin/news/index.tsx +12 -16
- package/src/plugins/builtin/news/wire/breaking/pane.test.tsx +3 -3
- package/src/plugins/builtin/news/wire/index.tsx +83 -73
- package/src/plugins/builtin/options/index.tsx +2 -8
- package/src/plugins/builtin/plugin-module.test.ts +89 -0
- package/src/plugins/builtin/plugin-module.ts +116 -0
- package/src/plugins/builtin/portfolio-list/header.tsx +4 -3
- package/src/plugins/builtin/portfolio-list/index.test.ts +17 -0
- package/src/plugins/builtin/portfolio-list/index.tsx +3 -5
- package/src/plugins/builtin/portfolio-list/pane/index.test.tsx +3 -3
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +53 -53
- package/src/plugins/builtin/portfolio-list/settings.ts +5 -3
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +4 -3
- package/src/plugins/builtin/research/index.tsx +2 -8
- package/src/plugins/builtin/sec/index.tsx +2 -8
- package/src/plugins/builtin/sectors/index.tsx +3 -8
- package/src/plugins/builtin/thirteenf/index.tsx +3 -8
- package/src/plugins/builtin/thirteenf/pane.test.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/chart-tab-switch.test.tsx +49 -23
- package/src/plugins/builtin/ticker-detail/index.test.tsx +15 -136
- package/src/plugins/builtin/ticker-detail/index.tsx +2 -93
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +6 -5
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +41 -17
- package/src/plugins/builtin/ticker-detail/pane.tsx +4 -3
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.test.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/settings.ts +3 -50
- package/src/plugins/builtin/ticker-research-backend-plugin.ts +17 -0
- package/src/plugins/builtin/ticker-research-plugin.ts +27 -0
- package/src/plugins/builtin/tv/channels.ts +27 -0
- package/src/plugins/builtin/tv/index.tsx +40 -0
- package/src/plugins/builtin/tv/pane.tsx +286 -0
- package/src/plugins/builtin/tv/youtube-stream.ts +100 -0
- package/src/plugins/builtin/world-indices/index.tsx +3 -8
- package/src/plugins/builtin/yield-curve/index.tsx +8 -8
- package/src/plugins/catalog-backend.test.ts +21 -0
- package/src/plugins/catalog-backend.ts +42 -0
- package/src/plugins/catalog-ui.ts +6 -14
- package/src/plugins/ibkr/instance-selection.test.ts +0 -1
- package/src/plugins/ownership.ts +143 -0
- package/src/plugins/prediction-markets/backend-plugin.ts +19 -0
- package/src/plugins/prediction-markets/chart.test.tsx +7 -5
- package/src/plugins/prediction-markets/chart.tsx +25 -7
- package/src/plugins/registry/index.test.ts +51 -0
- package/src/plugins/registry/index.ts +8 -0
- package/src/plugins/registry/pane-settings.ts +1 -1
- package/src/plugins/runtime/index.test.tsx +2 -2
- package/src/remote/app-host.tsx +16 -3
- package/src/remote/controller.test.ts +102 -1
- package/src/remote/controller.ts +122 -0
- package/src/remote/types.ts +11 -0
- package/src/renderers/electrobun/bun/core-capabilities.ts +123 -27
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +5 -1
- package/src/renderers/electrobun/bun/desktop/initialization.ts +5 -1
- package/src/renderers/electrobun/bun/desktop/media.ts +15 -0
- package/src/renderers/electrobun/bun/desktop/window-style.ts +4 -1
- package/src/renderers/electrobun/bun/desktop/workspace/index.test.ts +32 -1
- package/src/renderers/electrobun/bun/desktop/workspace/index.ts +10 -0
- package/src/renderers/electrobun/bun/index.ts +5 -0
- package/src/renderers/electrobun/bun/tui-entry.ts +1 -6
- package/src/renderers/electrobun/view/ai-host.ts +124 -19
- package/src/renderers/electrobun/view/backend-rpc.ts +4 -0
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +151 -39
- package/src/renderers/electrobun/view/desktop/popover.tsx +166 -0
- package/src/renderers/electrobun/view/dialog-host.test.ts +25 -0
- package/src/renderers/electrobun/view/dialog-host.tsx +75 -12
- package/src/renderers/electrobun/view/host/box.tsx +5 -0
- package/src/renderers/electrobun/view/host/chart-surface.tsx +10 -9
- package/src/renderers/electrobun/view/host/input.tsx +9 -19
- package/src/renderers/electrobun/view/host/media-surface.tsx +170 -0
- package/src/renderers/electrobun/view/host/mouse.ts +1 -0
- package/src/renderers/electrobun/view/host/style.ts +1 -1
- package/src/renderers/electrobun/view/host/tabs.tsx +4 -3
- package/src/renderers/electrobun/view/main.tsx +10 -3
- package/src/renderers/electrobun/view/styles.css +17 -0
- package/src/renderers/electrobun/view/ui-host.tsx +7 -0
- package/src/renderers/opentui/chart-surface.test.tsx +52 -6
- package/src/renderers/opentui/chart-surface.tsx +95 -11
- package/src/renderers/opentui/dialog-host.tsx +36 -5
- package/src/renderers/opentui/host.tsx +39 -0
- package/src/renderers/opentui/start.tsx +30 -0
- package/src/renderers/opentui/ui-host.tsx +2 -0
- package/src/sources/provider-router/index.test.ts +43 -0
- package/src/sources/provider-router/index.ts +4 -0
- package/src/sources/provider-router/supplemental.ts +46 -0
- package/src/sources/sec-edgar.test.ts +203 -2
- package/src/sources/sec-edgar.ts +70 -15
- package/src/state/app/context/index.tsx +13 -1
- package/src/state/app/context/selector.test.tsx +62 -1
- package/src/state/session-persistence.test.ts +13 -2
- package/src/sync/controller.test.ts +190 -3
- package/src/sync/controller.ts +76 -45
- package/src/sync/core-contributors.test.ts +121 -0
- package/src/sync/core-contributors.ts +104 -27
- package/src/sync/react.ts +6 -8
- package/src/sync/types.ts +3 -0
- package/src/time-series/alignment.ts +158 -0
- package/src/time-series/economic.ts +49 -0
- package/src/time-series/field-catalog.ts +306 -0
- package/src/time-series/fundamentals.test.ts +505 -0
- package/src/time-series/fundamentals.ts +842 -0
- package/src/time-series/hooks.ts +45 -0
- package/src/time-series/index.ts +14 -0
- package/src/time-series/live-quotes.test.ts +219 -0
- package/src/time-series/live-quotes.ts +203 -0
- package/src/time-series/market-resolution.ts +53 -0
- package/src/time-series/market.ts +125 -0
- package/src/time-series/reporting.ts +98 -0
- package/src/time-series/resolve.test.ts +1281 -0
- package/src/time-series/resolve.ts +783 -0
- package/src/time-series/spec-studies.test.ts +400 -0
- package/src/time-series/spec.ts +487 -0
- package/src/time-series/studies.ts +563 -0
- package/src/time-series/transforms.test.ts +105 -0
- package/src/time-series/transforms.ts +152 -0
- package/src/time-series/types.ts +162 -0
- package/src/time-series/use-chart-resolution.ts +166 -0
- package/src/types/config.ts +9 -11
- package/src/types/desktop-window.ts +1 -0
- package/src/types/financials.ts +4 -0
- package/src/types/media.ts +17 -0
- package/src/types/plugin.ts +32 -1
- package/src/ui/context-menu.tsx +15 -3
- package/src/ui/dialog.tsx +14 -2
- package/src/ui/host.tsx +40 -1
- package/src/ui/index.tsx +9 -0
- package/src/utils/exchanges.test.ts +13 -1
- package/src/utils/exchanges.ts +10 -0
- package/src/utils/financial-statements.test.ts +138 -0
- package/src/utils/financial-statements.ts +115 -8
- package/src/utils/format.test.ts +11 -1
- package/src/utils/format.ts +7 -0
- package/src/version.ts +1 -1
- package/src/components/chart/bar-chart-renderer.test.ts +0 -233
- package/src/components/chart/bar-chart-renderer.ts +0 -445
- package/src/components/chart/comparison/data.test.ts +0 -159
- package/src/components/chart/comparison/data.ts +0 -302
- package/src/components/chart/comparison/renderer.test.ts +0 -187
- package/src/components/chart/comparison/renderer.ts +0 -282
- package/src/components/chart/comparison/scene.ts +0 -178
- package/src/components/chart/comparison-stock-chart/axis-width.ts +0 -99
- package/src/components/chart/comparison-stock-chart/canvas.ts +0 -148
- package/src/components/chart/comparison-stock-chart/controls.ts +0 -252
- package/src/components/chart/comparison-stock-chart/helpers.ts +0 -101
- package/src/components/chart/comparison-stock-chart/interactions.ts +0 -208
- package/src/components/chart/comparison-stock-chart/layout-metrics.ts +0 -62
- package/src/components/chart/comparison-stock-chart/layout.tsx +0 -155
- package/src/components/chart/comparison-stock-chart/legend.tsx +0 -74
- package/src/components/chart/comparison-stock-chart/native-surfaces.ts +0 -89
- package/src/components/chart/comparison-stock-chart/render-data.ts +0 -227
- package/src/components/chart/comparison-stock-chart/render-output.ts +0 -140
- package/src/components/chart/comparison-stock-chart/selection-runtime.ts +0 -128
- package/src/components/chart/comparison-stock-chart/sources.ts +0 -51
- package/src/components/chart/comparison-stock-chart/surface-runtime.ts +0 -159
- package/src/components/chart/comparison-stock-chart/toolbar.tsx +0 -117
- package/src/components/chart/comparison-stock-chart/types.ts +0 -22
- package/src/components/chart/comparison-stock-chart/view.tsx +0 -572
- package/src/components/chart/comparison-stock-chart/viewport-runtime.ts +0 -239
- package/src/components/chart/comparison-stock-chart.tsx +0 -24
- package/src/components/chart/core/axis-measure.ts +0 -33
- package/src/components/chart/core/controller.test.ts +0 -157
- package/src/components/chart/core/controller.ts +0 -349
- package/src/components/chart/core/indicator-selector.tsx +0 -75
- package/src/components/chart/core/keyboard.ts +0 -24
- package/src/components/chart/core/pane-settings.test.ts +0 -52
- package/src/components/chart/core/pane-settings.ts +0 -141
- package/src/components/chart/core/scroll.test.ts +0 -64
- package/src/components/chart/core/scroll.ts +0 -82
- package/src/components/chart/core/window-viewport.test.ts +0 -69
- package/src/components/chart/core/window-viewport.ts +0 -162
- package/src/components/chart/display-cursor.ts +0 -153
- package/src/components/chart/indicators/bands.test.ts +0 -36
- package/src/components/chart/indicators/bands.ts +0 -29
- package/src/components/chart/indicators/moving-averages.test.ts +0 -39
- package/src/components/chart/indicators/moving-averages.ts +0 -42
- package/src/components/chart/indicators/options.test.ts +0 -32
- package/src/components/chart/indicators/options.ts +0 -107
- package/src/components/chart/indicators/oscillators.test.ts +0 -58
- package/src/components/chart/indicators/oscillators.ts +0 -92
- package/src/components/chart/native/canvas-bitmaps.ts +0 -140
- package/src/components/chart/native/raster/comparison-chart.ts +0 -162
- package/src/components/chart/native/surface/hooks.ts +0 -144
- package/src/components/chart/native/surface/rendering.ts +0 -211
- package/src/components/chart/static/bar-chart-surface.test.tsx +0 -101
- package/src/components/chart/static/bar-chart-surface.tsx +0 -292
- package/src/components/chart/stock-chart/auto.ts +0 -216
- package/src/components/chart/stock-chart/axis-width.ts +0 -146
- package/src/components/chart/stock-chart/bitmaps.ts +0 -22
- package/src/components/chart/stock-chart/canvas.ts +0 -202
- package/src/components/chart/stock-chart/controls.tsx +0 -149
- package/src/components/chart/stock-chart/cursor.ts +0 -60
- package/src/components/chart/stock-chart/data-runtime.ts +0 -128
- package/src/components/chart/stock-chart/footer.test.ts +0 -65
- package/src/components/chart/stock-chart/footer.ts +0 -303
- package/src/components/chart/stock-chart/geometry.ts +0 -160
- package/src/components/chart/stock-chart/index.test.ts +0 -532
- package/src/components/chart/stock-chart/index.tsx +0 -29
- package/src/components/chart/stock-chart/indicators.ts +0 -226
- package/src/components/chart/stock-chart/interaction-runtime.ts +0 -44
- package/src/components/chart/stock-chart/interactions.ts +0 -300
- package/src/components/chart/stock-chart/keyboard.ts +0 -373
- package/src/components/chart/stock-chart/layout-metrics.ts +0 -62
- package/src/components/chart/stock-chart/layout.tsx +0 -177
- package/src/components/chart/stock-chart/native-surfaces.ts +0 -121
- package/src/components/chart/stock-chart/presentation.ts +0 -67
- package/src/components/chart/stock-chart/renderer-switch.test.tsx +0 -263
- package/src/components/chart/stock-chart/rendering/bounds.ts +0 -116
- package/src/components/chart/stock-chart/rendering/candidates.ts +0 -145
- package/src/components/chart/stock-chart/rendering/data.ts +0 -370
- package/src/components/chart/stock-chart/rendering/invalidation.ts +0 -68
- package/src/components/chart/stock-chart/rendering/output.ts +0 -304
- package/src/components/chart/stock-chart/rendering/planning.ts +0 -122
- package/src/components/chart/stock-chart/rendering/projection.test.tsx +0 -98
- package/src/components/chart/stock-chart/rendering/projection.ts +0 -112
- package/src/components/chart/stock-chart/rendering/state.test.ts +0 -70
- package/src/components/chart/stock-chart/rendering/state.ts +0 -283
- package/src/components/chart/stock-chart/requests.ts +0 -337
- package/src/components/chart/stock-chart/resolution-support.ts +0 -96
- package/src/components/chart/stock-chart/resolved/runtime.ts +0 -289
- package/src/components/chart/stock-chart/resolved.tsx +0 -359
- package/src/components/chart/stock-chart/settings.ts +0 -81
- package/src/components/chart/stock-chart/surface-runtime.ts +0 -62
- package/src/components/chart/stock-chart/types.ts +0 -25
- package/src/components/chart/stock-chart/view.tsx +0 -155
- package/src/components/chart/stock-chart/viewport/effects.ts +0 -293
- package/src/components/chart/stock-chart/viewport/index.ts +0 -144
- package/src/components/chart/stock-chart/viewport/runtime.ts +0 -375
- package/src/components/chart/time-axis-label.tsx +0 -175
- package/src/plugins/builtin/ai/gloomberb-cli.ts +0 -71
- package/src/plugins/builtin/ai/screener/action-bar.tsx +0 -58
- package/src/plugins/builtin/comparison-chart/index.test.tsx +0 -848
- package/src/plugins/builtin/comparison-chart/index.tsx +0 -194
- package/src/plugins/builtin/econ/fred-cache.ts +0 -106
- package/src/plugins/builtin/plugin-groups.ts +0 -130
- package/src/plugins/builtin/ticker-detail/chart-pane.tsx +0 -91
- package/src/plugins/builtin/ticker-detail/chart-tab.tsx +0 -100
- package/src/plugins/builtin/ticker-detail/data-panes/fundamental-graph/content.tsx +0 -296
- package/src/plugins/builtin/ticker-detail/data-panes/fundamental-graph/data.ts +0 -62
- package/src/plugins/builtin/ticker-detail/data-panes/fundamental-graph/model.ts +0 -608
- package/src/plugins/builtin/ticker-detail/data-panes/fundamental-graph/settings.ts +0 -65
- package/src/plugins/builtin/ticker-detail/data-panes/fundamental-graph/types.ts +0 -58
- package/src/plugins/builtin/ticker-detail/data-panes/fundamental-graph.tsx +0 -138
- package/src/plugins/builtin/ticker-detail/data-panes.test.ts +0 -220
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
diff --git a/index-218h9p3f.js b/index-218h9p3f.js
|
|
2
|
-
index b9445d2cca9477dfe06026da451b6d19268fcbdd..
|
|
2
|
+
index b9445d2cca9477dfe06026da451b6d19268fcbdd..8734376ebd706056791f8b59ad0992ac6c440d3c 100644
|
|
3
3
|
--- a/index-218h9p3f.js
|
|
4
4
|
+++ b/index-218h9p3f.js
|
|
5
5
|
@@ -6487,17 +6487,27 @@ class MouseParser {
|
|
@@ -166,51 +166,8 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
166
166
|
this.events.push({
|
|
167
167
|
type: "mouse",
|
|
168
168
|
raw: decodeLatin1(rawBytes),
|
|
169
|
-
@@ -
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
async function resolveNativePackage() {
|
|
173
|
-
+ const loadNativePackage = async (packageName) => await import(packageName);
|
|
174
|
-
if (process.platform === "darwin") {
|
|
175
|
-
if (process.arch === "x64")
|
|
176
|
-
- return await import("@opentui/core-darwin-x64");
|
|
177
|
-
+ return await loadNativePackage("@opentui/core-darwin-x64");
|
|
178
|
-
if (process.arch === "arm64")
|
|
179
|
-
- return await import("@opentui/core-darwin-arm64");
|
|
180
|
-
+ return await loadNativePackage("@opentui/core-darwin-arm64");
|
|
181
|
-
}
|
|
182
|
-
if (process.platform === "linux") {
|
|
183
|
-
validateLinuxLibcOverride();
|
|
184
|
-
if (process.arch === "x64") {
|
|
185
|
-
if (process.env.OPENTUI_LIBC === "musl") {
|
|
186
|
-
- return await import("@opentui/core-linux-x64-musl");
|
|
187
|
-
+ return await loadNativePackage("@opentui/core-linux-x64-musl");
|
|
188
|
-
} else {
|
|
189
|
-
- return await import("@opentui/core-linux-x64");
|
|
190
|
-
+ return await loadNativePackage("@opentui/core-linux-x64");
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
if (process.arch === "arm64") {
|
|
194
|
-
if (process.env.OPENTUI_LIBC === "musl") {
|
|
195
|
-
- return await import("@opentui/core-linux-arm64-musl");
|
|
196
|
-
+ return await loadNativePackage("@opentui/core-linux-arm64-musl");
|
|
197
|
-
} else {
|
|
198
|
-
- return await import("@opentui/core-linux-arm64");
|
|
199
|
-
+ return await loadNativePackage("@opentui/core-linux-arm64");
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
if (process.platform === "win32") {
|
|
204
|
-
if (process.arch === "x64")
|
|
205
|
-
- return await import("@opentui/core-win32-x64");
|
|
206
|
-
+ return await loadNativePackage("@opentui/core-win32-x64");
|
|
207
|
-
if (process.arch === "arm64")
|
|
208
|
-
- return await import("@opentui/core-win32-arm64");
|
|
209
|
-
+ return await loadNativePackage("@opentui/core-win32-arm64");
|
|
210
|
-
}
|
|
211
|
-
throw new Error(`opentui is not supported on the current platform: ${process.platform}-${process.arch}`);
|
|
212
|
-
}
|
|
213
|
-
@@ -17996,5 +18031,7 @@ function isGapType(value) {
|
|
169
|
+
@@ -17995,6 +18029,8 @@ function isGapType(value) {
|
|
170
|
+
|
|
214
171
|
class BoxRenderable extends Renderable {
|
|
215
172
|
_backgroundColor;
|
|
216
173
|
+ _hoverBackgroundColor;
|
|
@@ -218,7 +175,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
218
175
|
_border;
|
|
219
176
|
_borderStyle;
|
|
220
177
|
_borderColor;
|
|
221
|
-
@@ -18023,6 +
|
|
178
|
+
@@ -18023,6 +18059,7 @@ class BoxRenderable extends Renderable {
|
|
222
179
|
this._focusable = true;
|
|
223
180
|
}
|
|
224
181
|
this._backgroundColor = parseColor(options.backgroundColor || this._defaultOptions.backgroundColor);
|
|
@@ -226,7 +183,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
226
183
|
this._border = options.border ?? this._defaultOptions.border;
|
|
227
184
|
if (!options.border && (options.borderStyle || options.borderColor || options.focusedBorderColor || options.customBorderChars)) {
|
|
228
185
|
this._border = true;
|
|
229
|
-
@@ -18064,11 +
|
|
186
|
+
@@ -18064,11 +18101,26 @@ class BoxRenderable extends Renderable {
|
|
230
187
|
}
|
|
231
188
|
set backgroundColor(value) {
|
|
232
189
|
const newColor = parseColor(value ?? this._defaultOptions.backgroundColor);
|
|
@@ -254,7 +211,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
254
211
|
get border() {
|
|
255
212
|
return this._border;
|
|
256
213
|
}
|
|
257
|
-
@@ -18152,9 +
|
|
214
|
+
@@ -18152,9 +18204,39 @@ class BoxRenderable extends Renderable {
|
|
258
215
|
this.requestRender();
|
|
259
216
|
}
|
|
260
217
|
}
|
|
@@ -295,7 +252,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
295
252
|
if (!hasBorder && !hasVisibleFill) {
|
|
296
253
|
return;
|
|
297
254
|
}
|
|
298
|
-
@@ -18171,7 +
|
|
255
|
+
@@ -18171,7 +18253,7 @@ class BoxRenderable extends Renderable {
|
|
299
256
|
customBorderChars: this._customBorderChars,
|
|
300
257
|
border: this._border,
|
|
301
258
|
borderColor: currentBorderColor,
|
|
@@ -304,7 +261,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
304
261
|
shouldFill: this.shouldFill,
|
|
305
262
|
title: this._title,
|
|
306
263
|
titleAlignment: this._titleAlignment,
|
|
307
|
-
@@ -22288,6 +
|
|
264
|
+
@@ -22288,6 +22370,8 @@ class MouseEvent {
|
|
308
265
|
button;
|
|
309
266
|
x;
|
|
310
267
|
y;
|
|
@@ -313,7 +270,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
313
270
|
source;
|
|
314
271
|
modifiers;
|
|
315
272
|
scroll;
|
|
316
|
-
@@ -22307,6 +
|
|
273
|
+
@@ -22307,6 +22391,8 @@ class MouseEvent {
|
|
317
274
|
this.button = attributes.button;
|
|
318
275
|
this.x = attributes.x;
|
|
319
276
|
this.y = attributes.y;
|
|
@@ -322,7 +279,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
322
279
|
this.modifiers = attributes.modifiers;
|
|
323
280
|
this.scroll = attributes.scroll;
|
|
324
281
|
this.source = attributes.source;
|
|
325
|
-
@@ -22457,6 +
|
|
282
|
+
@@ -22457,6 +22543,10 @@ class CliRenderer extends EventEmitter9 {
|
|
326
283
|
resizeDebounceDelay = 100;
|
|
327
284
|
enableMouseMovement = false;
|
|
328
285
|
_useMouse = true;
|
|
@@ -333,7 +290,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
333
290
|
autoFocus = true;
|
|
334
291
|
_screenMode = "alternate-screen";
|
|
335
292
|
_footerHeight = DEFAULT_FOOTER_HEIGHT;
|
|
336
|
-
@@ -22491,7 +
|
|
293
|
+
@@ -22491,7 +22581,7 @@ class CliRenderer extends EventEmitter9 {
|
|
337
294
|
this.handleResize(width, height);
|
|
338
295
|
}).bind(this);
|
|
339
296
|
_capabilities = null;
|
|
@@ -342,7 +299,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
342
299
|
_hasPointer = false;
|
|
343
300
|
_lastPointerModifiers = {
|
|
344
301
|
shift: false,
|
|
345
|
-
@@ -22738,7 +
|
|
302
|
+
@@ -22738,7 +22828,13 @@ Captured external output:
|
|
346
303
|
privateCapabilityRepliesActive: false,
|
|
347
304
|
pixelResolutionQueryActive: false,
|
|
348
305
|
explicitWidthCprActive: false,
|
|
@@ -357,7 +314,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
357
314
|
},
|
|
358
315
|
clock: this.clock
|
|
359
316
|
});
|
|
360
|
-
@@ -24021,12 +
|
|
317
|
+
@@ -24021,12 +24117,14 @@ Captured external output:
|
|
361
318
|
enableMouse() {
|
|
362
319
|
this._useMouse = true;
|
|
363
320
|
this.lib.enableMouse(this.rendererPtr, this.enableMouseMovement);
|
|
@@ -372,7 +329,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
372
329
|
}
|
|
373
330
|
enableKittyKeyboard(flags = 3) {
|
|
374
331
|
this.lib.enableKittyKeyboard(this.rendererPtr, flags);
|
|
375
|
-
@@ -24036,6 +
|
|
332
|
+
@@ -24036,6 +24134,52 @@ Captured external output:
|
|
376
333
|
this.lib.disableKittyKeyboard(this.rendererPtr);
|
|
377
334
|
this.updateStdinParserProtocolContext({ kittyKeyboardEnabled: false }, true);
|
|
378
335
|
}
|
|
@@ -425,7 +382,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
425
382
|
set useThread(useThread) {
|
|
426
383
|
this._useThread = useThread;
|
|
427
384
|
this.lib.setUseThread(this.rendererPtr, useThread);
|
|
428
|
-
@@ -24141,6 +
|
|
385
|
+
@@ -24141,6 +24285,7 @@ Captured external output:
|
|
429
386
|
}
|
|
430
387
|
this.lib.processCapabilityResponse(this.rendererPtr, sequence);
|
|
431
388
|
this._capabilities = this.lib.getTerminalCapabilities(this.rendererPtr);
|
|
@@ -433,7 +390,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
433
390
|
if (this._capabilities?.terminal?.from_xtversion) {
|
|
434
391
|
this.resolveXtVersionWaiters();
|
|
435
392
|
}
|
|
436
|
-
@@ -24170,6 +
|
|
393
|
+
@@ -24170,6 +24315,7 @@ Captured external output:
|
|
437
394
|
if (sequence === "\x1B[I") {
|
|
438
395
|
if (this.shouldRestoreModesOnNextFocus) {
|
|
439
396
|
this.lib.restoreTerminalModes(this.rendererPtr);
|
|
@@ -441,7 +398,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
441
398
|
this.shouldRestoreModesOnNextFocus = false;
|
|
442
399
|
}
|
|
443
400
|
if (this._terminalFocusState !== true) {
|
|
444
|
-
@@ -24218,7 +
|
|
401
|
+
@@ -24218,7 +24364,7 @@ Captured external output:
|
|
445
402
|
this._keyHandler.processParsedKey(event.key);
|
|
446
403
|
return;
|
|
447
404
|
case "mouse":
|
|
@@ -450,7 +407,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
450
407
|
return;
|
|
451
408
|
}
|
|
452
409
|
this.dispatchSequenceHandlers(event.raw);
|
|
453
|
-
@@ -24264,6 +
|
|
410
|
+
@@ -24264,6 +24410,7 @@ Captured external output:
|
|
454
411
|
}
|
|
455
412
|
this.waitingForPixelResolution = false;
|
|
456
413
|
this.updateStdinParserProtocolContext({ pixelResolutionQueryActive: false }, true);
|
|
@@ -458,7 +415,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
458
415
|
return true;
|
|
459
416
|
}
|
|
460
417
|
return false;
|
|
461
|
-
@@ -24292,15 +
|
|
418
|
+
@@ -24292,15 +24439,62 @@ Captured external output:
|
|
462
419
|
}
|
|
463
420
|
return event;
|
|
464
421
|
}
|
|
@@ -485,7 +442,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
485
442
|
+ if (this._pendingMouseMoveTimer !== null || this._isDestroyed) {
|
|
486
443
|
+ return;
|
|
487
444
|
+ }
|
|
488
|
-
+ const delay = Math.max(
|
|
445
|
+
+ const delay = Math.max(8, Math.floor(this.minTargetFrameTime));
|
|
489
446
|
+ this._pendingMouseMoveTimer = this.clock.setTimeout(() => {
|
|
490
447
|
+ this._pendingMouseMoveTimer = null;
|
|
491
448
|
+ this.flushPendingMouseMove();
|
|
@@ -521,7 +478,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
521
478
|
this._hasPointer = true;
|
|
522
479
|
this._lastPointerModifiers = mouseEvent.modifiers;
|
|
523
480
|
if (this._console.visible) {
|
|
524
|
-
@@ -24437,6 +
|
|
481
|
+
@@ -24437,6 +24631,8 @@ Captured external output:
|
|
525
482
|
return;
|
|
526
483
|
}
|
|
527
484
|
const baseEvent = {
|
|
@@ -530,7 +487,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
530
487
|
type: "move",
|
|
531
488
|
button: 0,
|
|
532
489
|
x: this._latestPointer.x,
|
|
533
|
-
@@ -24527,6 +
|
|
490
|
+
@@ -24527,6 +24723,7 @@ Captured external output:
|
|
534
491
|
const pendingSplitFooterTransition = this.pendingSplitFooterTransition;
|
|
535
492
|
const previousGeometry = calculateRenderGeometry(this._screenMode, this._terminalWidth, this._terminalHeight, this._footerHeight);
|
|
536
493
|
const prevWidth = this._terminalWidth;
|
|
@@ -538,7 +495,7 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
538
495
|
const previousTerminalHeight = this._terminalHeight;
|
|
539
496
|
const visiblePreviousSplitHeight = pendingSplitFooterTransition?.sourceHeight ?? previousGeometry.effectiveFooterHeight;
|
|
540
497
|
this._terminalWidth = width;
|
|
541
|
-
@@ -24832,6 +
|
|
498
|
+
@@ -24832,6 +25029,11 @@ Captured external output:
|
|
542
499
|
this.clock.clearTimeout(this.resizeTimeoutId);
|
|
543
500
|
this.resizeTimeoutId = null;
|
|
544
501
|
}
|
|
@@ -550,14 +507,14 @@ index b9445d2cca9477dfe06026da451b6d19268fcbdd..da790c31da185325405227329dad2ac1
|
|
|
550
507
|
if (this.capabilityTimeoutId !== null) {
|
|
551
508
|
this.clock.clearTimeout(this.capabilityTimeoutId);
|
|
552
509
|
this.capabilityTimeoutId = null;
|
|
553
|
-
@@ -24847,6 +
|
|
554
|
-
this.renderTimeout = null;
|
|
510
|
+
@@ -24847,6 +25049,7 @@ Captured external output:
|
|
555
511
|
}
|
|
556
512
|
this.themeModeState.cancelRefresh();
|
|
557
|
-
+ this.disablePixelMouseMode();
|
|
558
513
|
this._isRunning = false;
|
|
514
|
+
+ this.disablePixelMouseMode();
|
|
559
515
|
this.waitingForPixelResolution = false;
|
|
560
516
|
this.updateStdinParserProtocolContext({
|
|
517
|
+
privateCapabilityRepliesActive: false,
|
|
561
518
|
diff --git a/lib/parse.mouse.d.ts b/lib/parse.mouse.d.ts
|
|
562
519
|
index c29f953fde0b78f09d2ec7a830e5a72452c1fe7e..04613b921bd9b4a9a7a1a4fbd0234d4012df67a1 100644
|
|
563
520
|
--- a/lib/parse.mouse.d.ts
|
package/src/api-client/auth.ts
CHANGED
|
@@ -41,6 +41,7 @@ export class CloudAuthApi {
|
|
|
41
41
|
syncEnabled: user.syncEnabled === false ? false : true,
|
|
42
42
|
weeklyRoundupEnabled: user.weeklyRoundupEnabled === false ? false : true,
|
|
43
43
|
positionAlertsEnabled: user.positionAlertsEnabled === false ? false : true,
|
|
44
|
+
chatEmailNotificationsEnabled: user.chatEmailNotificationsEnabled === false ? false : true,
|
|
44
45
|
lastSyncAt: typeof user.lastSyncAt === "string" ? user.lastSyncAt : null,
|
|
45
46
|
lastRoundupEmailAt: typeof user.lastRoundupEmailAt === "string" ? user.lastRoundupEmailAt : null,
|
|
46
47
|
createdAt: typeof user.createdAt === "string" ? user.createdAt : "",
|
|
@@ -153,6 +154,7 @@ export class CloudAuthApi {
|
|
|
153
154
|
xAccount: profile.xAccount,
|
|
154
155
|
sharedPortfolioId: profile.sharedPortfolioId,
|
|
155
156
|
acceptUnknownDms: profile.acceptUnknownDms,
|
|
157
|
+
chatEmailNotificationsEnabled: profile.chatEmailNotificationsEnabled,
|
|
156
158
|
portfolioAnalytics: profile.portfolioAnalytics,
|
|
157
159
|
syncEnabled: profile.syncEnabled,
|
|
158
160
|
weeklyRoundupEnabled: profile.weeklyRoundupEnabled,
|
|
@@ -587,6 +587,7 @@ describe("apiClient account profile", () => {
|
|
|
587
587
|
xAccount: "vincelwt",
|
|
588
588
|
sharedPortfolioId: "main",
|
|
589
589
|
acceptUnknownDms: true,
|
|
590
|
+
chatEmailNotificationsEnabled: false,
|
|
590
591
|
updatedAt: "2026-04-01T00:00:00.000Z",
|
|
591
592
|
},
|
|
592
593
|
});
|
|
@@ -598,6 +599,7 @@ describe("apiClient account profile", () => {
|
|
|
598
599
|
profilePublic: true,
|
|
599
600
|
sharedPortfolioId: "main",
|
|
600
601
|
acceptUnknownDms: true,
|
|
602
|
+
chatEmailNotificationsEnabled: false,
|
|
601
603
|
});
|
|
602
604
|
|
|
603
605
|
expect(new URL(requestedUrl).pathname).toBe("/account/profile");
|
|
@@ -607,10 +609,12 @@ describe("apiClient account profile", () => {
|
|
|
607
609
|
profilePublic: true,
|
|
608
610
|
sharedPortfolioId: "main",
|
|
609
611
|
acceptUnknownDms: true,
|
|
612
|
+
chatEmailNotificationsEnabled: false,
|
|
610
613
|
});
|
|
611
614
|
expect(profile.username).toBe("renamed");
|
|
612
615
|
expect(apiClient.getCurrentUser()?.username).toBe("renamed");
|
|
613
616
|
expect(apiClient.getCurrentUser()?.plan).toBe("pro");
|
|
617
|
+
expect(apiClient.getCurrentUser()?.chatEmailNotificationsEnabled).toBe(false);
|
|
614
618
|
});
|
|
615
619
|
|
|
616
620
|
test("changes password through Better Auth", async () => {
|
package/src/api-client/types.ts
CHANGED
|
@@ -83,6 +83,7 @@ export interface AuthUser {
|
|
|
83
83
|
xAccount?: string | null;
|
|
84
84
|
sharedPortfolioId?: string | null;
|
|
85
85
|
acceptUnknownDms?: boolean;
|
|
86
|
+
chatEmailNotificationsEnabled?: boolean;
|
|
86
87
|
portfolioAnalytics?: PublicPortfolioAnalytics | null;
|
|
87
88
|
syncEnabled?: boolean;
|
|
88
89
|
weeklyRoundupEnabled?: boolean;
|
|
@@ -110,6 +111,7 @@ export interface AccountProfile {
|
|
|
110
111
|
xAccount: string | null;
|
|
111
112
|
sharedPortfolioId: string | null;
|
|
112
113
|
acceptUnknownDms: boolean;
|
|
114
|
+
chatEmailNotificationsEnabled: boolean;
|
|
113
115
|
portfolioAnalytics?: PublicPortfolioAnalytics | null;
|
|
114
116
|
syncEnabled: boolean;
|
|
115
117
|
weeklyRoundupEnabled: boolean;
|
|
@@ -168,6 +170,7 @@ export type AccountProfileUpdate = Partial<{
|
|
|
168
170
|
xAccount: string | null;
|
|
169
171
|
sharedPortfolioId: string | null;
|
|
170
172
|
acceptUnknownDms: boolean;
|
|
173
|
+
chatEmailNotificationsEnabled: boolean;
|
|
171
174
|
portfolioAnalytics: PublicPortfolioAnalytics | null;
|
|
172
175
|
syncEnabled: boolean;
|
|
173
176
|
weeklyRoundupEnabled: boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import type { ReactElement } from "react";
|
|
3
|
+
import { runPaneTemplateDialogWizard } from "./pane-template-dialog-wizard";
|
|
4
|
+
|
|
5
|
+
test("changing a sequential wizard selector clears a later default", async () => {
|
|
6
|
+
const defaults: Array<string | undefined> = [];
|
|
7
|
+
const answers = ["codex", ""];
|
|
8
|
+
const dialog = {
|
|
9
|
+
prompt: async ({ content }: { content: (context: unknown) => ReactElement }) => {
|
|
10
|
+
const element = content({});
|
|
11
|
+
defaults.push((element.props as { step?: { defaultValue?: string } }).step?.defaultValue);
|
|
12
|
+
return answers.shift();
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const values = await runPaneTemplateDialogWizard(dialog as never, [{
|
|
17
|
+
key: "providerId",
|
|
18
|
+
label: "Provider",
|
|
19
|
+
type: "select",
|
|
20
|
+
defaultValue: "claude",
|
|
21
|
+
clearOnChange: ["modelId"],
|
|
22
|
+
options: [
|
|
23
|
+
{ label: "Claude", value: "claude" },
|
|
24
|
+
{ label: "OpenAI", value: "codex" },
|
|
25
|
+
],
|
|
26
|
+
}, {
|
|
27
|
+
key: "modelId",
|
|
28
|
+
label: "Model",
|
|
29
|
+
type: "text",
|
|
30
|
+
required: false,
|
|
31
|
+
defaultValue: "claude-opus-4-8",
|
|
32
|
+
}]);
|
|
33
|
+
|
|
34
|
+
expect(defaults).toEqual(["claude", undefined]);
|
|
35
|
+
expect(values).toEqual({ providerId: "codex", modelId: "" });
|
|
36
|
+
});
|
|
@@ -16,6 +16,7 @@ export async function runPaneTemplateDialogWizard(
|
|
|
16
16
|
steps: WizardStep[],
|
|
17
17
|
): Promise<Record<string, string> | null> {
|
|
18
18
|
const values: Record<string, string> = {};
|
|
19
|
+
const clearedKeys = new Set<string>();
|
|
19
20
|
|
|
20
21
|
for (const step of steps) {
|
|
21
22
|
if (step.dependsOn && values[step.dependsOn.key] !== step.dependsOn.value) {
|
|
@@ -29,16 +30,19 @@ export async function runPaneTemplateDialogWizard(
|
|
|
29
30
|
continue;
|
|
30
31
|
}
|
|
31
32
|
|
|
33
|
+
const activeStep = clearedKeys.has(step.key)
|
|
34
|
+
? { ...step, defaultValue: undefined }
|
|
35
|
+
: step;
|
|
32
36
|
const result = step.type === "select"
|
|
33
37
|
? await dialog.prompt<string>({
|
|
34
|
-
content: (ctx: PromptContext<string>) => <PaneTemplateSelectStep {...ctx} step={
|
|
38
|
+
content: (ctx: PromptContext<string>) => <PaneTemplateSelectStep {...ctx} step={activeStep} />,
|
|
35
39
|
})
|
|
36
40
|
: step.type === "textarea"
|
|
37
41
|
? await dialog.prompt<string>({
|
|
38
|
-
content: (ctx: PromptContext<string>) => <PaneTemplateTextareaStep {...ctx} step={
|
|
42
|
+
content: (ctx: PromptContext<string>) => <PaneTemplateTextareaStep {...ctx} step={activeStep} />,
|
|
39
43
|
})
|
|
40
44
|
: await dialog.prompt<string>({
|
|
41
|
-
content: (ctx: PromptContext<string>) => <PaneTemplateInputStep {...ctx} step={
|
|
45
|
+
content: (ctx: PromptContext<string>) => <PaneTemplateInputStep {...ctx} step={activeStep} />,
|
|
42
46
|
});
|
|
43
47
|
|
|
44
48
|
if (result === undefined || ((step.type === "select" || step.type === "textarea") && !result)) {
|
|
@@ -46,6 +50,9 @@ export async function runPaneTemplateDialogWizard(
|
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
values[step.key] = result;
|
|
53
|
+
if (!Object.is(result, step.defaultValue ?? "")) {
|
|
54
|
+
for (const key of step.clearOnChange ?? []) clearedKeys.add(key);
|
|
55
|
+
}
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
return values;
|
|
@@ -54,8 +54,15 @@ describe("desktop deeplinks", () => {
|
|
|
54
54
|
expect(resolveDesktopDeepLinkAction("gloomberb://chat/channel/everyone")).toEqual({
|
|
55
55
|
type: "open-chat-channel",
|
|
56
56
|
channelId: "everyone",
|
|
57
|
+
messageId: null,
|
|
57
58
|
message: "Opened chat everyone.",
|
|
58
59
|
});
|
|
60
|
+
expect(resolveDesktopDeepLinkAction("gloomberb://chat/channel/dm%3Aabc?message=m%3A2")).toEqual({
|
|
61
|
+
type: "open-chat-channel",
|
|
62
|
+
channelId: "dm:abc",
|
|
63
|
+
messageId: "m:2",
|
|
64
|
+
message: "Opened chat dm:abc.",
|
|
65
|
+
});
|
|
59
66
|
expect(resolveDesktopDeepLinkAction("gloomberb://chat/dm?users=@vince,@alex")).toEqual({
|
|
60
67
|
type: "open-chat-dm",
|
|
61
68
|
participants: "@vince,@alex",
|
|
@@ -63,6 +70,14 @@ describe("desktop deeplinks", () => {
|
|
|
63
70
|
});
|
|
64
71
|
});
|
|
65
72
|
|
|
73
|
+
test("routes email preference links to account management", () => {
|
|
74
|
+
expect(resolveDesktopDeepLinkAction("gloomberb://cloud/emails")).toEqual({
|
|
75
|
+
type: "open-account-management",
|
|
76
|
+
route: { kind: "cloud-emails", week: null },
|
|
77
|
+
message: "Opened email settings.",
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
66
81
|
test("routes news links", () => {
|
|
67
82
|
expect(resolveDesktopDeepLinkAction("gloomberb://news?ticker=7203.T")).toEqual({
|
|
68
83
|
type: "open-news",
|
|
@@ -9,9 +9,10 @@ import {
|
|
|
9
9
|
} from "../../types/config";
|
|
10
10
|
import type { DesktopDeepLinkBridge } from "../../types/desktop-deeplink";
|
|
11
11
|
import type { DesktopWindowBridge } from "../../types/desktop-window";
|
|
12
|
+
import { requestAccountManagementTab } from "../../plugins/builtin/account-management/navigation";
|
|
12
13
|
|
|
13
14
|
type CloudDeepLinkRoute = {
|
|
14
|
-
kind: "cloud-alerts" | "cloud-roundup";
|
|
15
|
+
kind: "cloud-alerts" | "cloud-emails" | "cloud-roundup";
|
|
15
16
|
week: string | null;
|
|
16
17
|
};
|
|
17
18
|
|
|
@@ -28,7 +29,7 @@ export type DesktopDeepLinkAction =
|
|
|
28
29
|
values: { symbol: string; condition: AlertDeepLinkCondition; price: string };
|
|
29
30
|
message: string;
|
|
30
31
|
}
|
|
31
|
-
| { type: "open-chat-channel"; channelId: string; message: string }
|
|
32
|
+
| { type: "open-chat-channel"; channelId: string; messageId: string | null; message: string }
|
|
32
33
|
| { type: "open-chat-dm"; participants: string; message: string }
|
|
33
34
|
| { type: "open-news"; kind: NewsDeepLinkKind; symbol: string | null; message: string }
|
|
34
35
|
| { type: "unsupported"; message: string };
|
|
@@ -151,6 +152,13 @@ function parseCloudDeepLink(parsed: ParsedGloomUrl): DesktopDeepLinkAction {
|
|
|
151
152
|
message: `Opened portfolio alert settings${weekSuffix(week)}.`,
|
|
152
153
|
};
|
|
153
154
|
}
|
|
155
|
+
if (route === "emails") {
|
|
156
|
+
return {
|
|
157
|
+
type: "open-account-management",
|
|
158
|
+
route: { kind: "cloud-emails", week: null },
|
|
159
|
+
message: "Opened email settings.",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
154
162
|
return { type: "unsupported", message: "Unsupported Gloomberb cloud link." };
|
|
155
163
|
}
|
|
156
164
|
|
|
@@ -194,7 +202,8 @@ function parseChatDeepLink(parsed: ParsedGloomUrl): DesktopDeepLinkAction {
|
|
|
194
202
|
if (route === "channel") {
|
|
195
203
|
const channelId = parsed.segments[1] ?? param(parsed.url, "id", "channel");
|
|
196
204
|
if (!channelId) return { type: "unsupported", message: "Chat channel links need a channel id." };
|
|
197
|
-
|
|
205
|
+
const messageId = param(parsed.url, "message", "messageId");
|
|
206
|
+
return { type: "open-chat-channel", channelId, messageId, message: `Opened chat ${channelId}.` };
|
|
198
207
|
}
|
|
199
208
|
if (route === "dm") {
|
|
200
209
|
const participants = param(parsed.url, "users", "participants", "user") ?? parsed.segments.slice(1).join(",");
|
|
@@ -202,9 +211,9 @@ function parseChatDeepLink(parsed: ParsedGloomUrl): DesktopDeepLinkAction {
|
|
|
202
211
|
return { type: "open-chat-dm", participants, message: "Opened DM." };
|
|
203
212
|
}
|
|
204
213
|
if (route === "default") {
|
|
205
|
-
return { type: "open-chat-channel", channelId: "", message: "Opened chat." };
|
|
214
|
+
return { type: "open-chat-channel", channelId: "", messageId: null, message: "Opened chat." };
|
|
206
215
|
}
|
|
207
|
-
return { type: "open-chat-channel", channelId: route, message: `Opened chat ${route}.` };
|
|
216
|
+
return { type: "open-chat-channel", channelId: route, messageId: null, message: `Opened chat ${route}.` };
|
|
208
217
|
}
|
|
209
218
|
|
|
210
219
|
function parseNewsDeepLink(parsed: ParsedGloomUrl): DesktopDeepLinkAction {
|
|
@@ -389,7 +398,12 @@ function handleOpenChatChannel(
|
|
|
389
398
|
notifyError(pluginRegistry, "Chat is unavailable.");
|
|
390
399
|
return;
|
|
391
400
|
}
|
|
392
|
-
const options = action.channelId
|
|
401
|
+
const options = action.channelId
|
|
402
|
+
? {
|
|
403
|
+
arg: action.channelId,
|
|
404
|
+
...(action.messageId ? { values: { messageId: action.messageId } } : {}),
|
|
405
|
+
}
|
|
406
|
+
: undefined;
|
|
393
407
|
void pluginRegistry.createPaneFromTemplateAsyncFn("new-chat-pane", options).then(() => {
|
|
394
408
|
notifySuccess(pluginRegistry, action.message);
|
|
395
409
|
}).catch((error) => {
|
|
@@ -450,6 +464,7 @@ export function handleDesktopDeepLink(rawUrl: string, options: DesktopDeepLinkHa
|
|
|
450
464
|
switch (action.type) {
|
|
451
465
|
case "open-account-management":
|
|
452
466
|
if (!requirePane(options.pluginRegistry, "account-management", "Account management is unavailable.")) return;
|
|
467
|
+
if (action.route.kind === "cloud-emails") requestAccountManagementTab("emails");
|
|
453
468
|
options.pluginRegistry.showPane("account-management");
|
|
454
469
|
notifySuccess(options.pluginRegistry, action.message);
|
|
455
470
|
return;
|
package/src/app.tsx
CHANGED
|
@@ -32,6 +32,7 @@ import type { AppSessionSnapshot } from "./core/state/session-persistence";
|
|
|
32
32
|
import type { MarketDataCoordinator } from "./market-data/coordinator";
|
|
33
33
|
import { createAppNotifier } from "./notifications/app-notifier";
|
|
34
34
|
import { createAppServices } from "./core/app-services";
|
|
35
|
+
import { getLoadablePlugins } from "./plugins/catalog";
|
|
35
36
|
import { useBrokerImportRuntime } from "./app/runtime/broker-import";
|
|
36
37
|
import { useDesktopDeepLinkRuntime } from "./app/runtime/desktop-deeplink";
|
|
37
38
|
import { useDesktopApplicationMenuRuntime } from "./app/runtime/desktop-menu";
|
|
@@ -268,6 +269,7 @@ function AppInner({
|
|
|
268
269
|
|
|
269
270
|
useCloudSyncRuntime({
|
|
270
271
|
state,
|
|
272
|
+
getState: getRemoteState,
|
|
271
273
|
dispatch,
|
|
272
274
|
tickerRepository,
|
|
273
275
|
pluginRegistry,
|
|
@@ -330,14 +332,15 @@ function AppInner({
|
|
|
330
332
|
getState={getRemoteState}
|
|
331
333
|
pluginRegistry={pluginRegistry}
|
|
332
334
|
desktopWindowBridge={desktopWindowBridge}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
335
|
+
>
|
|
336
|
+
<ThemedAppRoot>
|
|
337
|
+
<DetachedPaneShell
|
|
338
|
+
pluginRegistry={pluginRegistry}
|
|
339
|
+
desktopWindowBridge={{ ...desktopWindowBridge, kind: "detached", paneId: desktopWindowBridge.paneId }}
|
|
340
|
+
/>
|
|
341
|
+
<ToastViewport position="bottom-right" />
|
|
342
|
+
</ThemedAppRoot>
|
|
343
|
+
</RemoteControlHost>
|
|
341
344
|
</ContextMenuProvider>
|
|
342
345
|
);
|
|
343
346
|
}
|
|
@@ -350,30 +353,31 @@ function AppInner({
|
|
|
350
353
|
getState={getRemoteState}
|
|
351
354
|
pluginRegistry={pluginRegistry}
|
|
352
355
|
desktopWindowBridge={desktopWindowBridge}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
356
|
+
>
|
|
357
|
+
<ThemedAppRoot>
|
|
358
|
+
<Header />
|
|
359
|
+
<TransientLayoutProvider>
|
|
360
|
+
<Shell
|
|
361
|
+
pluginRegistry={pluginRegistry}
|
|
362
|
+
desktopWindowBridge={desktopWindowBridge}
|
|
363
|
+
desktopDockPreview={desktopDockPreview}
|
|
364
|
+
commandBarNativeOccluder={commandBarNativeOccluder}
|
|
365
|
+
/>
|
|
366
|
+
<StatusBar />
|
|
367
|
+
</TransientLayoutProvider>
|
|
368
|
+
{state.commandBarOpen && (
|
|
369
|
+
<CommandBar
|
|
370
|
+
dataProvider={dataProvider}
|
|
371
|
+
tickerRepository={tickerRepository}
|
|
372
|
+
pluginRegistry={pluginRegistry}
|
|
373
|
+
quitApp={() => rendererHost.requestExit()}
|
|
374
|
+
onCheckForUpdates={() => runUpdateCheck(true)}
|
|
375
|
+
onNativeOccluderChange={setCommandBarNativeOccluder}
|
|
376
|
+
/>
|
|
377
|
+
)}
|
|
378
|
+
<ToastViewport position="bottom-right" />
|
|
379
|
+
</ThemedAppRoot>
|
|
380
|
+
</RemoteControlHost>
|
|
377
381
|
</ContextMenuProvider>
|
|
378
382
|
);
|
|
379
383
|
}
|
|
@@ -428,7 +432,10 @@ export function App({
|
|
|
428
432
|
|
|
429
433
|
const services = useMemo(() => {
|
|
430
434
|
return measurePerf("startup.app.create-services", () => (
|
|
431
|
-
createAppServices({
|
|
435
|
+
createAppServices({
|
|
436
|
+
config,
|
|
437
|
+
plugins: getLoadablePlugins(externalPlugins),
|
|
438
|
+
})
|
|
432
439
|
), {
|
|
433
440
|
externalPluginCount: externalPlugins.length,
|
|
434
441
|
disabledPluginCount: config.disabledPlugins.length,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { BrokerConnectionStatus } from "../types/broker";
|
|
2
2
|
import type { QuoteSubscriptionTarget } from "../types/data-provider";
|
|
3
3
|
import type { Quote } from "../types/financials";
|
|
4
|
+
import type { AiAuthProgressEvent } from "../plugins/builtin/ai/runner";
|
|
5
|
+
import type { AiAgentHistoryMessage } from "../plugins/builtin/ai/agent-history";
|
|
4
6
|
|
|
5
7
|
export const BROKER_CAPABILITY_ID = "broker.core";
|
|
6
8
|
export const NOTES_FILES_CAPABILITY_ID = "notes.files";
|
|
@@ -22,6 +24,9 @@ export type BrokerRemoteEvent = BrokerStatusEvent | BrokerQuoteEvent;
|
|
|
22
24
|
|
|
23
25
|
export type AiRunnerEvent =
|
|
24
26
|
| { kind: "chunk"; output: string }
|
|
25
|
-
| { kind: "done"; output: string }
|
|
27
|
+
| { kind: "done"; output: string; agentMessages?: AiAgentHistoryMessage[] }
|
|
26
28
|
| { kind: "cancelled" }
|
|
27
|
-
| { kind: "error"; error: string }
|
|
29
|
+
| { kind: "error"; error: string }
|
|
30
|
+
| { kind: "account-auth"; event: AiAuthProgressEvent }
|
|
31
|
+
| { kind: "account-connected"; catalog: unknown }
|
|
32
|
+
| { kind: "account-error"; error: string };
|