gloomberb 0.17.0 → 0.17.2
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 +1 -1
- package/src/{plugins/builtin/cloud → account}/auth-dialog.tsx +7 -7
- package/src/api-client/data.ts +5 -1
- package/src/api-client/doe.ts +19 -0
- package/src/api-client/earnings.ts +4 -2
- package/src/api-client/index.ts +1 -0
- package/src/app/global-shortcuts.ts +10 -0
- package/src/app/keybindings/actions.ts +16 -0
- package/src/app/runtime/desktop-deeplink.ts +1 -1
- package/src/app/runtime/update.ts +16 -0
- package/src/app.tsx +1 -1
- package/src/architecture/core-builtin-allowlist.json +4 -9
- package/src/architecture/dom-cell-metrics-allowlist.json +100 -26
- package/src/cli/commands/market.ts +87 -17
- package/src/cli/commands/options-chain.ts +93 -23
- package/src/cli/commands/options-leaps.ts +462 -63
- package/src/cli/commands/search.ts +10 -7
- package/src/cli/commands/ticker.ts +19 -10
- package/src/cli/glossary.ts +1 -1
- package/src/cli/index.ts +14 -6
- package/src/cli/known-gaps.ts +22 -0
- package/src/cli/pane-functions/catalog.ts +45 -10
- package/src/cli/pane-functions/dom.ts +36 -10
- package/src/cli/pane-functions/function-help.ts +4 -2
- package/src/cli/pane-functions/headless.ts +12 -1
- package/src/cli/pane-functions/index.ts +44 -3
- package/src/cli/pane-functions/lock-note.ts +56 -0
- package/src/cli/pane-functions/report-notices.ts +15 -0
- package/src/cli/symbol-args.ts +19 -0
- package/src/components/command-bar/list/view.tsx +2 -1
- package/src/components/command-bar/workflow/builtin.ts +2 -2
- package/src/components/command-bar/workflow/collection-actions.ts +1 -1
- package/src/components/feedback-dialog.tsx +1 -1
- package/src/components/index.ts +3 -2
- package/src/components/layout/header.tsx +58 -14
- package/src/components/layout/shell/chrome.ts +10 -4
- package/src/components/layout/shell/index.tsx +1 -1
- package/src/components/layout/status-bar-groups.ts +1 -1
- package/src/components/layout/status-bar.tsx +2 -2
- package/src/components/markdown-text.tsx +14 -2
- package/src/components/reader/article-reader.tsx +1 -1
- package/src/components/reader/detail-reader.tsx +10 -7
- package/src/components/reader/reader-text.tsx +32 -17
- package/src/components/ui/column-grid.tsx +206 -0
- package/src/components/ui/display.tsx +40 -3
- package/src/components/ui/fill.ts +8 -0
- package/src/components/ui/index.ts +2 -0
- package/src/layout-marketplace/gallery.tsx +2 -2
- package/src/layout-marketplace/linked-sync.ts +1 -1
- package/src/market-data/market/freshness.ts +3 -0
- package/src/market-data/published-apac-sessions.ts +12 -2
- package/src/market-data/quotes/screener-live-quotes.ts +31 -7
- package/src/plugins/builtin/account-management/form-components.tsx +4 -7
- package/src/plugins/builtin/account-management/password-dialog.tsx +3 -2
- package/src/plugins/builtin/backtest/pane.tsx +9 -3
- package/src/plugins/builtin/buildout/detail/company.tsx +4 -3
- package/src/plugins/builtin/buildout/detail/ui.tsx +9 -12
- package/src/plugins/builtin/chart-composer/index.tsx +1 -1
- package/src/plugins/builtin/chart-composer/presets.ts +33 -1
- package/src/plugins/builtin/chat/channel-labels.ts +2 -2
- package/src/plugins/builtin/chat/content/channel-navigation.ts +1 -1
- package/src/plugins/builtin/chat/content/index.tsx +2 -2
- package/src/plugins/builtin/chat/conversations.ts +1 -1
- package/src/plugins/builtin/chat/index.tsx +2 -2
- package/src/plugins/builtin/chat/share/flow.tsx +1 -1
- package/src/plugins/builtin/chat/sidebar-rows.ts +1 -1
- package/src/plugins/builtin/chat/sidebar.tsx +2 -2
- package/src/plugins/builtin/chat/unread-inbox-pane.tsx +2 -2
- package/src/plugins/builtin/cloud/askg/pane.tsx +2 -1
- package/src/plugins/builtin/cloud/askg/tool-timeline.tsx +3 -2
- package/src/plugins/builtin/cloud/auth-actions.tsx +1 -1
- package/src/plugins/builtin/cloud/auth-commands.ts +1 -1
- package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +1 -1
- package/src/plugins/builtin/cloud/team/acm-tab.tsx +3 -3
- package/src/plugins/builtin/cloud/team/capability.ts +2 -2
- package/src/plugins/builtin/cloud/team/command.ts +4 -4
- package/src/plugins/builtin/cloud/team/module.tsx +3 -3
- package/src/plugins/builtin/cloud/team/pane-model.ts +2 -2
- package/src/plugins/builtin/cloud/team/pane-sections.tsx +1 -1
- package/src/plugins/builtin/cloud/team/pane-ui.tsx +1 -1
- package/src/plugins/builtin/cloud/team/pane.tsx +3 -3
- package/src/plugins/builtin/cloud/team/status-widget.tsx +3 -3
- package/src/plugins/builtin/cloud/team/team-state-host.ts +1 -1
- package/src/plugins/builtin/cloud/team/views.ts +2 -2
- package/src/plugins/builtin/cloud/thesis/board-pane.tsx +1 -1
- package/src/plugins/builtin/cloud/thesis/detail.tsx +12 -10
- package/src/plugins/builtin/cloud/thesis/ticker-tab.tsx +1 -1
- package/src/plugins/builtin/cloud/upgrade-command.ts +1 -1
- package/src/plugins/builtin/congress-trades/detail.tsx +8 -4
- package/src/plugins/builtin/connections/pane.tsx +16 -5
- package/src/plugins/builtin/cpi/pane.tsx +5 -4
- package/src/plugins/builtin/custom-view/pane.tsx +2 -2
- package/src/plugins/builtin/dividend-yield/headless.ts +8 -2
- package/src/plugins/builtin/dividend-yield/pane.tsx +4 -2
- package/src/plugins/builtin/docs/blocks.tsx +13 -2
- package/src/plugins/builtin/docs/pane.tsx +6 -5
- package/src/plugins/builtin/doe/index.tsx +11 -4
- package/src/plugins/builtin/doe/pane.tsx +5 -4
- package/src/plugins/builtin/doe/prices.ts +84 -0
- package/src/plugins/builtin/doe/series.ts +4 -1
- package/src/plugins/builtin/earnings/board-model.ts +18 -1
- package/src/plugins/builtin/earnings/board-table.ts +18 -3
- package/src/plugins/builtin/earnings/headless.ts +13 -2
- package/src/plugins/builtin/earnings/history-model.ts +1 -1
- package/src/plugins/builtin/earnings/history-table.ts +2 -2
- package/src/plugins/builtin/earnings-calls/headless.ts +7 -21
- package/src/plugins/builtin/earnings-calls/index.tsx +2 -0
- package/src/plugins/builtin/earnings-calls/lock-note.ts +17 -0
- package/src/plugins/builtin/equity-screener/headless.ts +59 -1
- package/src/plugins/builtin/equity-screener/live.ts +82 -31
- package/src/plugins/builtin/equity-screener/pane.tsx +60 -23
- package/src/plugins/builtin/estimate-revisions/client.ts +1 -1
- package/src/plugins/builtin/estimate-revisions/headless.ts +9 -2
- package/src/plugins/builtin/estimate-revisions/index.tsx +3 -0
- package/src/plugins/builtin/estimate-revisions/lock-note.ts +23 -0
- package/src/plugins/builtin/executives/index.tsx +18 -0
- package/src/plugins/builtin/exposure/charts.tsx +4 -3
- package/src/plugins/builtin/filing-events/index.tsx +8 -10
- package/src/plugins/builtin/fixed-income/pane.tsx +2 -1
- package/src/plugins/builtin/gpu/equities.tsx +9 -6
- package/src/plugins/builtin/help/feedback-tab.tsx +1 -1
- package/src/plugins/builtin/iv-history/format.ts +3 -0
- package/src/plugins/builtin/iv-history/headless.ts +3 -1
- package/src/plugins/builtin/iv-history/index.tsx +3 -1
- package/src/plugins/builtin/iv-history/model.ts +3 -1
- package/src/plugins/builtin/iv-history/screen-pane.tsx +3 -1
- package/src/plugins/builtin/iv-history/universe.ts +1 -1
- package/src/plugins/builtin/jobs/headless.ts +6 -20
- package/src/plugins/builtin/jobs/index.tsx +2 -0
- package/src/plugins/builtin/jobs/lock-note.ts +16 -0
- package/src/plugins/builtin/notes/index.tsx +1 -1
- package/src/plugins/builtin/notes/owner.tsx +2 -2
- package/src/plugins/builtin/options/carry.ts +36 -0
- package/src/plugins/builtin/options/index.tsx +2 -1
- package/src/plugins/builtin/options/model-spot.ts +94 -0
- package/src/plugins/builtin/options/open-interest-as-of.ts +74 -0
- package/src/plugins/builtin/options/view.tsx +69 -11
- package/src/plugins/builtin/options-calculator/pane.tsx +56 -1
- package/src/plugins/builtin/options-calculator/premium-history.ts +34 -0
- package/src/plugins/builtin/options-scenario/client.ts +33 -9
- package/src/plugins/builtin/options-scenario/csp.ts +168 -0
- package/src/plugins/builtin/options-scenario/evidence.ts +3 -0
- package/src/plugins/builtin/options-scenario/headless.ts +24 -8
- package/src/plugins/builtin/options-scenario/index.tsx +3 -1
- package/src/plugins/builtin/options-scenario/pane.tsx +32 -6
- package/src/plugins/builtin/portfolio-list/mutations.ts +1 -1
- package/src/plugins/builtin/portfolio-list/pane/remove-ticker.ts +1 -1
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +4 -2
- package/src/plugins/builtin/research/event-model.ts +7 -4
- package/src/plugins/builtin/risk-factors/index.tsx +18 -0
- package/src/plugins/builtin/risk-factors/pane.tsx +2 -1
- package/src/plugins/builtin/scanner/headless.ts +9 -2
- package/src/plugins/builtin/scanner/index.ts +3 -0
- package/src/plugins/builtin/scanner/lock-note.ts +17 -0
- package/src/plugins/builtin/series-inventory.ts +2 -1
- package/src/plugins/builtin/shared/cloud-denied.ts +39 -8
- package/src/plugins/builtin/shared/earnings-report.ts +10 -4
- package/src/plugins/builtin/shared/pro-lock-note.ts +58 -0
- package/src/plugins/builtin/shared/series-list-detail.tsx +10 -5
- package/src/plugins/builtin/social-mentions/client.ts +3 -3
- package/src/plugins/builtin/social-mentions/headless.ts +6 -2
- package/src/plugins/builtin/social-mentions/index.tsx +2 -1
- package/src/plugins/builtin/social-mentions/lock-note.ts +15 -0
- package/src/plugins/builtin/supply-chain/flow.tsx +15 -13
- package/src/plugins/builtin/supply-chain/graph.tsx +6 -4
- package/src/plugins/builtin/supply-chain/pane.tsx +8 -5
- package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +14 -1
- package/src/plugins/builtin/ticker-detail/financials/ratios.ts +9 -7
- package/src/plugins/builtin/ticker-detail/headless.ts +4 -1
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +105 -104
- package/src/plugins/builtin/ticker-detail/overview/model.ts +9 -2
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +34 -8
- package/src/plugins/builtin/vol-surface/pane.tsx +6 -3
- package/src/public/__snapshots__/public-api.test.ts.snap +2 -0
- package/src/renderers/dom/data-table/index.tsx +48 -15
- package/src/renderers/dom/data-table/row.tsx +1 -1
- package/src/renderers/dom/desktop/popover.tsx +6 -15
- package/src/renderers/dom/host/input.tsx +27 -3
- package/src/renderers/dom/host/surface-3d.tsx +6 -4
- package/src/renderers/dom/styles.css +26 -6
- package/src/renderers/electrobun/view/app-services.ts +2 -22
- package/src/renderers/electrobun/view/news-source.ts +42 -0
- package/src/series/validate.ts +5 -0
- package/src/shares/dialog.tsx +2 -1
- package/src/sources/gloomberb-cloud/normalizers.ts +2 -0
- package/src/sources/provider-router/financials.ts +5 -0
- package/src/{plugins/builtin/cloud/team → team}/collections-sync.ts +6 -6
- package/src/{plugins/builtin/cloud/team → team}/collections.ts +3 -3
- package/src/{plugins/builtin/cloud/team → team}/model.ts +2 -2
- package/src/{plugins/builtin/cloud/team → team}/pane-request.ts +1 -1
- package/src/{plugins/builtin/cloud/team → team}/store.ts +3 -3
- package/src/types/data-provider.ts +3 -0
- package/src/types/financials.ts +28 -0
- package/src/types/plugin.ts +17 -4
- package/src/utils/decimal-comma.ts +18 -0
- package/src/utils/exchanges.ts +7 -0
- package/src/utils/financial-statements.ts +25 -0
- package/src/utils/forward-dividend.ts +39 -9
- package/src/utils/fundamentals.ts +41 -1
- package/src/utils/option-expiry.ts +16 -0
- package/src/utils/sec.ts +2 -1
package/package.json
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
* hosted terminal's sign-in gate reuses.
|
|
7
7
|
*/
|
|
8
8
|
import { useEffect, useRef, useState } from "react";
|
|
9
|
-
import type { AuthUser } from "
|
|
10
|
-
import { DialogFrame } from "
|
|
11
|
-
import { useAppLanguage } from "
|
|
12
|
-
import { useDialog, type PromptContext } from "
|
|
13
|
-
import { AuthForm, authFormTitle } from "
|
|
14
|
-
import type { AccountMode } from "
|
|
15
|
-
import { CloudVerificationPanel } from "
|
|
9
|
+
import type { AuthUser } from "../api-client";
|
|
10
|
+
import { DialogFrame } from "../components/ui/frame";
|
|
11
|
+
import { useAppLanguage } from "../i18n/react";
|
|
12
|
+
import { useDialog, type PromptContext } from "../ui/dialog";
|
|
13
|
+
import { AuthForm, authFormTitle } from "./auth-form";
|
|
14
|
+
import type { AccountMode } from "./auth-model";
|
|
15
|
+
import { CloudVerificationPanel } from "./verification-panel";
|
|
16
16
|
|
|
17
17
|
function AuthDialog({
|
|
18
18
|
initialMode,
|
package/src/api-client/data.ts
CHANGED
|
@@ -38,7 +38,7 @@ import type { BeneficialOwnersPayload, CloudBeneficialOwnersParams } from "./ben
|
|
|
38
38
|
import type { SocialMentionDayPosts, SocialMentionsPayload, SocialMentionsRange } from "./social-mentions";
|
|
39
39
|
import type { FuturesContractTermsPayload, FuturesCurveAsOfPayload, FuturesCurvePayload } from "./futures-curve";
|
|
40
40
|
import type { CotBoardPayload, CotContractPayload, CotFamily, CotClass } from "./cot";
|
|
41
|
-
import type { DoeBoardPayload } from "./doe";
|
|
41
|
+
import type { DoeBoardPayload, DoePricesPayload } from "./doe";
|
|
42
42
|
import type { CarbonBoard, CarbonHistory, EuropePowerBoard, EuropePowerHistory, GasStorageBoard, GasStorageHistory, GasStorageSeasonal } from "./europe-energy";
|
|
43
43
|
import type { GpuBoardPayload, GpuEventsPayload, GpuHistoryPayload, GpuHistoryQuery } from "./gpu";
|
|
44
44
|
import type { CpiBoardPayload } from "./cpi";
|
|
@@ -586,6 +586,10 @@ export class CloudDataApi {
|
|
|
586
586
|
return this.request<DoeBoardPayload>("/cloud/doe/board");
|
|
587
587
|
}
|
|
588
588
|
|
|
589
|
+
async getCloudDoePrices(): Promise<DoePricesPayload> {
|
|
590
|
+
return this.request<DoePricesPayload>("/cloud/doe/prices");
|
|
591
|
+
}
|
|
592
|
+
|
|
589
593
|
async getCloudAttention(window: AttentionWindow = "now", symbol?: string): Promise<AttentionPayload> {
|
|
590
594
|
const path = symbol ? `/cloud/attention/${encodeURIComponent(symbol)}` : "/cloud/attention";
|
|
591
595
|
return this.request<AttentionPayload>(`${path}?window=${window}`);
|
package/src/api-client/doe.ts
CHANGED
|
@@ -73,3 +73,22 @@ export interface DoeBoardPayload {
|
|
|
73
73
|
reports: DoeReportStatus[];
|
|
74
74
|
series: DoeSeriesRow[];
|
|
75
75
|
}
|
|
76
|
+
|
|
77
|
+
/** One EIA weekly US retail price series, as GET /cloud/doe/prices serves it. */
|
|
78
|
+
interface DoePriceSeries {
|
|
79
|
+
id: string;
|
|
80
|
+
/** The EIA source key, which a report cites. */
|
|
81
|
+
key: string;
|
|
82
|
+
label: string;
|
|
83
|
+
unit: "usd-per-gallon";
|
|
84
|
+
/** [Monday the EIA surveyed, dollars per gallon], oldest first, the last five years. */
|
|
85
|
+
points: Array<[string, number]>;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface DoePricesPayload {
|
|
89
|
+
source: "EIA";
|
|
90
|
+
generatedAt: string;
|
|
91
|
+
status: "available" | "partial" | "unavailable";
|
|
92
|
+
gaps: string[];
|
|
93
|
+
series: DoePriceSeries[];
|
|
94
|
+
}
|
|
@@ -38,7 +38,9 @@ export interface EarningsReport {
|
|
|
38
38
|
reportedAt: string | null;
|
|
39
39
|
/** Fiscal quarter end month, YYYY-MM. */
|
|
40
40
|
fiscalPeriod: string | null;
|
|
41
|
+
/** The company's cap as RV reads it: its latest snapshot at the regular session's price. */
|
|
41
42
|
marketCap: number | null;
|
|
43
|
+
/** For an upcoming report, the consensus every earnings view shows, with `epsAnalysts` behind it. */
|
|
42
44
|
epsEstimate: number | null;
|
|
43
45
|
epsActual: number | null;
|
|
44
46
|
epsAnalysts: number | null;
|
|
@@ -48,6 +50,8 @@ export interface EarningsReport {
|
|
|
48
50
|
realized: EarningsRealizedMove | null;
|
|
49
51
|
/** Whether the date is out, announced or projected; absent from older servers. */
|
|
50
52
|
dateStatus?: EarningsDateStatus;
|
|
53
|
+
/** The reported figure's basis, null when it cannot be determined; absent from older servers. */
|
|
54
|
+
epsBasis?: EarningsEpsBasis | null;
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
export interface EarningsCalendarReport extends EarningsReport {
|
|
@@ -65,8 +69,6 @@ export interface EarningsCalendarPayload {
|
|
|
65
69
|
|
|
66
70
|
interface EarningsHistoryReport extends EarningsReport {
|
|
67
71
|
revenueActual: number | null;
|
|
68
|
-
/** Null when the basis cannot be determined; absent from older servers. */
|
|
69
|
-
epsBasis?: EarningsEpsBasis | null;
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
export interface EarningsHistoryPayload {
|
package/src/api-client/index.ts
CHANGED
|
@@ -812,6 +812,7 @@ class GloomApiClient {
|
|
|
812
812
|
getCloudAwards = this.data.getCloudAwards.bind(this.data);
|
|
813
813
|
getCloudAward = this.data.getCloudAward.bind(this.data);
|
|
814
814
|
getCloudDoeBoard = this.data.getCloudDoeBoard.bind(this.data);
|
|
815
|
+
getCloudDoePrices = this.data.getCloudDoePrices.bind(this.data);
|
|
815
816
|
getCloudAttention = this.data.getCloudAttention.bind(this.data);
|
|
816
817
|
getCloudPowerBoard = this.data.getCloudPowerBoard.bind(this.data);
|
|
817
818
|
getCloudPowerHistory = this.data.getCloudPowerHistory.bind(this.data);
|
|
@@ -212,6 +212,16 @@ export function useAppGlobalShortcuts({
|
|
|
212
212
|
return;
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
+
// Text fields keep Cmd+Z. Everywhere else it restores the previous layout.
|
|
216
|
+
// A detached window has no layout history of its own.
|
|
217
|
+
if (action === "layout-undo" || action === "layout-redo") {
|
|
218
|
+
if (isDetachedWindow || dialogOpen || state.commandBarOpen || state.inputCaptured || event.targetEditable === true) return;
|
|
219
|
+
event.preventDefault();
|
|
220
|
+
event.stopPropagation();
|
|
221
|
+
dispatch({ type: action === "layout-undo" ? "UNDO_LAYOUT" : "REDO_LAYOUT" });
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
215
225
|
if (dialogOpen) return;
|
|
216
226
|
|
|
217
227
|
if (!isDetachedWindow && action === "command-bar") {
|
|
@@ -30,6 +30,8 @@ export type CoreKeybindingActionId =
|
|
|
30
30
|
| "pane-share"
|
|
31
31
|
| "pane-ask"
|
|
32
32
|
| "layout-gallery"
|
|
33
|
+
| "layout-undo"
|
|
34
|
+
| "layout-redo"
|
|
33
35
|
| "tidy-windows"
|
|
34
36
|
| "window-move-mode"
|
|
35
37
|
| "window-resize-mode";
|
|
@@ -62,6 +64,8 @@ export const PANE_ACTION_IDS = new Set<CoreKeybindingActionId>([
|
|
|
62
64
|
"pane-share",
|
|
63
65
|
"pane-ask",
|
|
64
66
|
"layout-gallery",
|
|
67
|
+
"layout-undo",
|
|
68
|
+
"layout-redo",
|
|
65
69
|
"tidy-windows",
|
|
66
70
|
"window-move-mode",
|
|
67
71
|
"window-resize-mode",
|
|
@@ -245,6 +249,18 @@ export const KEYBINDING_ACTIONS: readonly KeybindingActionDef[] = [
|
|
|
245
249
|
description: "Open layout actions.",
|
|
246
250
|
defaults: ["CmdOrCtrl+Shift+L"],
|
|
247
251
|
},
|
|
252
|
+
{
|
|
253
|
+
id: "layout-undo",
|
|
254
|
+
category: "Pane Management",
|
|
255
|
+
description: "Undo the last layout change.",
|
|
256
|
+
defaults: ["CmdOrCtrl+Z"],
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
id: "layout-redo",
|
|
260
|
+
category: "Pane Management",
|
|
261
|
+
description: "Redo the last undone layout change.",
|
|
262
|
+
defaults: ["CmdOrCtrl+Shift+Z"],
|
|
263
|
+
},
|
|
248
264
|
{
|
|
249
265
|
id: "tidy-windows",
|
|
250
266
|
category: "Pane Management",
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import type { DesktopDeepLinkBridge } from "../../types/desktop-deeplink";
|
|
12
12
|
import type { DesktopWindowBridge } from "../../types/desktop-window";
|
|
13
13
|
import { requestAccountManagementTab } from "../../plugins/builtin/account-management/navigation";
|
|
14
|
-
import { openTeamPane } from "../../
|
|
14
|
+
import { openTeamPane } from "../../team/pane-request";
|
|
15
15
|
import { chatController } from "../../plugins/builtin/chat/controller";
|
|
16
16
|
import { getShare, type ShareRecord } from "../../shares/api";
|
|
17
17
|
import { openShareLink, registerShareOpener } from "../../shares/open";
|
|
@@ -10,13 +10,25 @@ import {
|
|
|
10
10
|
performUpdate,
|
|
11
11
|
type ReleaseInfo,
|
|
12
12
|
type UpdateCheckResult,
|
|
13
|
+
type UpdateProgress,
|
|
13
14
|
} from "../../updater";
|
|
14
15
|
import { VERSION } from "../../version";
|
|
16
|
+
import { debugLog } from "../../utils/debug-log";
|
|
15
17
|
import { reportCrash } from "../../telemetry/crash-reports";
|
|
16
18
|
import { runAutomated } from "../../telemetry/usage-counts";
|
|
17
19
|
|
|
18
20
|
const UPDATE_CHECK_INTERVAL_MS = 60 * 60_000; // hourly
|
|
19
21
|
|
|
22
|
+
const updateLog = debugLog.createLogger("update");
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The header and the command bar show a failed update's message, and the header
|
|
26
|
+
* cuts it to its room: the log keeps what the updater actually said.
|
|
27
|
+
*/
|
|
28
|
+
function logUpdateFailure(progress: UpdateProgress): void {
|
|
29
|
+
if (progress.phase === "error") updateLog.error("update failed", { error: progress.error });
|
|
30
|
+
}
|
|
31
|
+
|
|
20
32
|
/** An update is being downloaded, applied, or is downloaded and waiting for a restart. */
|
|
21
33
|
function updateInFlight(progress: AppState["updateProgress"]): boolean {
|
|
22
34
|
return progress?.phase === "downloading" || progress?.phase === "replacing" || progress?.phase === "ready";
|
|
@@ -53,6 +65,7 @@ export function useAppUpdateRuntime({
|
|
|
53
65
|
const startUpdate = useCallback((release: ReleaseInfo) => {
|
|
54
66
|
dispatch({ type: "SET_UPDATE_PROGRESS", progress: { phase: "downloading", percent: 0 } });
|
|
55
67
|
void performUpdate(release, (progress) => {
|
|
68
|
+
logUpdateFailure(progress);
|
|
56
69
|
dispatch({ type: "SET_UPDATE_PROGRESS", progress });
|
|
57
70
|
});
|
|
58
71
|
}, [dispatch]);
|
|
@@ -66,6 +79,7 @@ export function useAppUpdateRuntime({
|
|
|
66
79
|
dispatch({ type: "SET_UPDATE_PROGRESS", progress: { phase: "replacing" } });
|
|
67
80
|
void applyUpdate((progress) => {
|
|
68
81
|
if (progress.phase === "error") restartingRef.current = false;
|
|
82
|
+
logUpdateFailure(progress);
|
|
69
83
|
dispatch({ type: "SET_UPDATE_PROGRESS", progress });
|
|
70
84
|
});
|
|
71
85
|
}, [dispatch, enabled, isDetachedWindow, stateRef]);
|
|
@@ -91,6 +105,8 @@ export function useAppUpdateRuntime({
|
|
|
91
105
|
return { kind: "error", error: message || "Update check failed" };
|
|
92
106
|
});
|
|
93
107
|
|
|
108
|
+
if (result.kind === "error") updateLog.warn("update check failed", { error: result.error });
|
|
109
|
+
|
|
94
110
|
if (!manual) {
|
|
95
111
|
if (result.kind === "available") {
|
|
96
112
|
dispatch({ type: "SET_UPDATE_AVAILABLE", release: result.release });
|
package/src/app.tsx
CHANGED
|
@@ -14,7 +14,7 @@ import { Header } from "./components/layout/header";
|
|
|
14
14
|
import { StatusBar } from "./components/layout/status-bar";
|
|
15
15
|
import { useAppChromeShown } from "./components/layout/presentation";
|
|
16
16
|
import { useLinkedLayoutSync } from "./layout-marketplace/linked-sync";
|
|
17
|
-
import { useTeamCollectionsSync } from "./
|
|
17
|
+
import { useTeamCollectionsSync } from "./team/collections-sync";
|
|
18
18
|
import { Shell } from "./components/layout/shell";
|
|
19
19
|
import { DetachedPaneShell } from "./components/layout/detached-pane-shell";
|
|
20
20
|
import { TransientLayoutProvider } from "./components/layout/transient-layout";
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
"src/app/global-shortcuts.ts": ["help"],
|
|
5
5
|
"src/app/pane-runtime/plugin-bindings.ts": ["broker-manager","layout-manager"],
|
|
6
6
|
"src/app/runtime/broker-import.ts": ["portfolio-list"],
|
|
7
|
-
"src/app/runtime/desktop-deeplink.ts": ["account-management","chat"
|
|
7
|
+
"src/app/runtime/desktop-deeplink.ts": ["account-management","chat"],
|
|
8
8
|
"src/app/runtime/startup.ts": ["chat"],
|
|
9
9
|
"src/cli/commands/market.ts": ["holders","insider","research","sec"],
|
|
10
10
|
"src/cli/commands/options-chain.ts": ["options","options-calculator"],
|
|
11
|
-
"src/cli/commands/options-leaps.ts": ["options","vol-surface"],
|
|
11
|
+
"src/cli/commands/options-leaps.ts": ["iv-history","options","vol-surface"],
|
|
12
12
|
"src/cli/commands/overview.ts": ["correlation","econ","market-movers","sectors","world-indices"],
|
|
13
13
|
"src/cli/commands/ticker.ts": ["notes"],
|
|
14
14
|
"src/cli/desktop-pane-shot.ts": ["market-valuation","time-sales"],
|
|
@@ -24,21 +24,16 @@
|
|
|
24
24
|
"src/components/command-bar/routes/root/command-items.ts": ["portfolio-list"],
|
|
25
25
|
"src/components/command-bar/routes/root/help-items.ts": ["help"],
|
|
26
26
|
"src/components/command-bar/routes/root/shortcut-items.ts": ["portfolio-list"],
|
|
27
|
-
"src/components/command-bar/workflow/builtin.ts": ["
|
|
28
|
-
"src/components/command-bar/workflow/collection-actions.ts": ["
|
|
27
|
+
"src/components/command-bar/workflow/builtin.ts": ["portfolio-list"],
|
|
28
|
+
"src/components/command-bar/workflow/collection-actions.ts": ["portfolio-list"],
|
|
29
29
|
"src/components/command-bar/workflow/ops.ts": ["correlation","portfolio-list","ticker-detail"],
|
|
30
30
|
"src/components/command-bar/workflow/tickers.ts": ["portfolio-list"],
|
|
31
|
-
"src/components/feedback-dialog.tsx": ["cloud"],
|
|
32
31
|
"src/components/form-modal/routes.ts": ["portfolio-list"],
|
|
33
32
|
"src/components/index.ts": ["portfolio-list"],
|
|
34
33
|
"src/components/layout/shell/index.tsx": ["cloud"],
|
|
35
|
-
"src/components/layout/status-bar-groups.ts": ["cloud"],
|
|
36
|
-
"src/components/layout/status-bar.tsx": ["cloud"],
|
|
37
34
|
"src/components/onboarding/use-onboarding-upgrade.ts": ["chat"],
|
|
38
35
|
"src/components/onboarding/wizard-model.ts": ["portfolio-list"],
|
|
39
36
|
"src/components/onboarding/wizard-positions.ts": ["portfolio-list"],
|
|
40
|
-
"src/layout-marketplace/gallery.tsx": ["cloud"],
|
|
41
|
-
"src/layout-marketplace/linked-sync.ts": ["cloud"],
|
|
42
37
|
"src/layout/desks.ts": ["chart-composer"],
|
|
43
38
|
"src/plugins/catalog-browser.ts": ["alerts","analytics","attention","awards","backtest","bond-calculator","catalysts","cds","central-bank-rates","changelog","chart-composer","clinical-trials","cloud","comment-letters","commodities-energy","commodity-balances","company-attention","company-kpis","connections","correlation","cot","cpi","credit-boards","credit-conditions","credit-documents","crypto-board","debt-maturities","dividend-yield","docs","doe","earnings-calls","earnings-ripple","econ","econ-statistics","equity-screener","estimate-revisions","executives","exposure","fear-greed","filing-events","fixed-income","futures","futures-curve","fx-matrix","gpu","help","insider","ipo-calendar","iv-history","jobs","jodi","kelly-sizer","layout-manager","macro-day","market-halts","market-heatmap","market-valuation","members","mna","money-markets","news","openfda","options","options-calculator","options-positioning","options-scenario","pe-band","perps","portfolio-list","power","primary-dealers","rate-path","realized-vol","relative-rotation","research","research-search","revenue-breakdown","reverse-dcf","risk-factors","scanner","seasonality","sec","sectors","short-interest","short-volume","social-mentions","supply-chain","ticker-detail","time-sales","trace-bonds","treasury-auctions","treasury-daily","vol-surface","volatility","world-indices","world-venue-map","yield-curve"],
|
|
44
39
|
"src/plugins/catalog-ui.ts": ["alerts","clinical-trials","cloud","comment-letters","custom-view","fear-greed","ipo-calendar","market-halts","market-heatmap","members","news","notes","openfda","research-search"],
|
|
@@ -1,28 +1,102 @@
|
|
|
1
1
|
{
|
|
2
|
-
"src/components/layout/pane/header.tsx":
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"src/components/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"src/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"src/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"src/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"src/renderers/dom/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"src/renderers/dom/
|
|
27
|
-
|
|
2
|
+
"src/components/layout/pane/header.tsx": {
|
|
3
|
+
"uses": 2,
|
|
4
|
+
"why": "The title bar's inset for the window controls comes from the shell's header geometry, which the terminal shares, in cells."
|
|
5
|
+
},
|
|
6
|
+
"src/components/layout/pane/sizing.ts": {
|
|
7
|
+
"uses": 3,
|
|
8
|
+
"why": "Panes receive their size in cells (PaneProps); this gives the desktop's taller chrome row in those cells."
|
|
9
|
+
},
|
|
10
|
+
"src/components/layout/shell/drag/slide.ts": {
|
|
11
|
+
"uses": 4,
|
|
12
|
+
"why": "A dragged pane moves by offsets of the saved layout, which is kept in cells."
|
|
13
|
+
},
|
|
14
|
+
"src/components/layout/shell/pane/layers.tsx": {
|
|
15
|
+
"uses": 6,
|
|
16
|
+
"why": "Pane rectangles in the saved layout are in cells; this is where they become pixels."
|
|
17
|
+
},
|
|
18
|
+
"src/components/ui/select-button.tsx": {
|
|
19
|
+
"uses": 2,
|
|
20
|
+
"why": "A select's width is given in cells by the pane, as its terminal button's is."
|
|
21
|
+
},
|
|
22
|
+
"src/renderers/dom/data-table/dom.ts": {
|
|
23
|
+
"uses": 26,
|
|
24
|
+
"why": "The table's scroll and pointer API speaks rows and columns to callers shared with the terminal (j/k, paging, visible range); a row of text is one line tall."
|
|
25
|
+
},
|
|
26
|
+
"src/renderers/dom/data-table/index.tsx": {
|
|
27
|
+
"uses": 19,
|
|
28
|
+
"why": "Every pane gives its columns in cells (DataTableColumn.width) and rows are one line tall: the horizontal extent, the overflow decision, virtualization and paging follow from them."
|
|
29
|
+
},
|
|
30
|
+
"src/renderers/dom/data-table/row.tsx": {
|
|
31
|
+
"uses": 10,
|
|
32
|
+
"why": "Column widths and gaps are cells in the column model every pane uses; a row is one line tall."
|
|
33
|
+
},
|
|
34
|
+
"src/renderers/dom/desktop/controls.tsx": {
|
|
35
|
+
"uses": 6,
|
|
36
|
+
"why": "Callers give a button's size in cells; a framed field keeps its text one cell off its frame, as the terminal's does."
|
|
37
|
+
},
|
|
38
|
+
"src/renderers/dom/desktop/list-view.tsx": {
|
|
39
|
+
"uses": 2,
|
|
40
|
+
"why": "The caller gives a list's height in rows."
|
|
41
|
+
},
|
|
42
|
+
"src/renderers/dom/desktop/query-bar.tsx": {
|
|
43
|
+
"uses": 1,
|
|
44
|
+
"why": "The pane gives its search field's width in cells."
|
|
45
|
+
},
|
|
46
|
+
"src/renderers/dom/desktop/select-field.tsx": {
|
|
47
|
+
"uses": 2,
|
|
48
|
+
"why": "An inline select is one row tall, the row it sits in."
|
|
49
|
+
},
|
|
50
|
+
"src/renderers/dom/dom-ui-host.tsx": {
|
|
51
|
+
"uses": 6,
|
|
52
|
+
"why": "Exposes the cell size to components that still size in cells (chart bitmaps, the company logo)."
|
|
53
|
+
},
|
|
54
|
+
"src/renderers/dom/host/input.tsx": {
|
|
55
|
+
"uses": 3,
|
|
56
|
+
"why": "Callers give a field's width and height in cells; a one-line field is one row tall."
|
|
57
|
+
},
|
|
58
|
+
"src/renderers/dom/host/live-frame.ts": {
|
|
59
|
+
"uses": 8,
|
|
60
|
+
"why": "A resize's live frame is in cells, the pane's unit, until the pane renders at the new size."
|
|
61
|
+
},
|
|
62
|
+
"src/renderers/dom/host/mouse.ts": {
|
|
63
|
+
"uses": 10,
|
|
64
|
+
"why": "Pointer handlers receive cell coordinates, the event API every renderer shares."
|
|
65
|
+
},
|
|
66
|
+
"src/renderers/dom/host/scroll-box.tsx": {
|
|
67
|
+
"uses": 22,
|
|
68
|
+
"why": "The scroller's API (scrollTop, scrollBy, viewport) is in rows and columns for callers shared with the terminal; content insets are given in cells."
|
|
69
|
+
},
|
|
70
|
+
"src/renderers/dom/host/size-observer.ts": {
|
|
71
|
+
"uses": 6,
|
|
72
|
+
"why": "Observed sizes are reported in cells, as callers expect."
|
|
73
|
+
},
|
|
74
|
+
"src/renderers/dom/host/style.ts": {
|
|
75
|
+
"uses": 27,
|
|
76
|
+
"why": "Maps the shared Box and Text props that components give in cells (width, height, padding, margin, gap, position) to pixels."
|
|
77
|
+
},
|
|
78
|
+
"src/renderers/dom/host/surface-fit.ts": {
|
|
79
|
+
"uses": 4,
|
|
80
|
+
"why": "A chart takes its box when its cells come within a cell of it, because panes still count their space in cells."
|
|
81
|
+
},
|
|
82
|
+
"src/renderers/dom/host/tabs.tsx": {
|
|
83
|
+
"uses": 2,
|
|
84
|
+
"why": "A tab strip is one row tall, the row every caller reserves for it."
|
|
85
|
+
},
|
|
86
|
+
"src/renderers/dom/host/text.tsx": {
|
|
87
|
+
"uses": 2,
|
|
88
|
+
"why": "The ASCII wordmark draws one glyph per cell."
|
|
89
|
+
},
|
|
90
|
+
"src/renderers/dom/input-host.tsx": {
|
|
91
|
+
"uses": 4,
|
|
92
|
+
"why": "The viewport is reported in cells (useViewport), the unit every renderer shares."
|
|
93
|
+
},
|
|
94
|
+
"src/renderers/dom/native-renderer.ts": {
|
|
95
|
+
"uses": 4,
|
|
96
|
+
"why": "The renderer's width and height are reported in cells, the unit every renderer shares."
|
|
97
|
+
},
|
|
98
|
+
"src/renderers/dom/styles.css": {
|
|
99
|
+
"uses": 14,
|
|
100
|
+
"why": "Defines the cell size and the base line height; status, footer and hint lines are one row; a few insets are one cell, as the terminal's (the floating pane's two-cell grip, a query bar segment)."
|
|
101
|
+
}
|
|
28
102
|
}
|