@kenz1117/dsh-ui-usage-billing 1.5.0-alpha.2 → 1.5.1

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.
@@ -18,6 +18,12 @@ export interface SessionExportRow {
18
18
  id: string;
19
19
  title?: string;
20
20
  cwd?: string;
21
+ /** 直接父会话 id(仅子智能体会话携带);顶层会话缺失。 */
22
+ parentId?: string;
23
+ /** 后代子会话费用合计(人民币元);无后代时缺失。 */
24
+ subCost?: number;
25
+ /** 后代子会话调用数;无后代时缺失。 */
26
+ subCalls?: number;
21
27
  calls: number;
22
28
  cost: number;
23
29
  lastActive: number;
@@ -26,7 +32,7 @@ export interface SessionExportRow {
26
32
  export declare function dayRowsCsv(byDay: Record<string, DayExportRow>): string;
27
33
  /** 按站点(中转站/直连/未知路由)CSV:站点,类别,调用,费用(元)。 */
28
34
  export declare function siteRowsCsv(bySite: Record<string, DayExportRow>): string;
29
- /** 按会话 CSV:会话 id,标题,项目,调用,费用(元),最后活跃(ISO)。 */
35
+ /** 按会话 CSV:会话 id,标题,项目,调用,费用(元),最后活跃(ISO),父会话,子会话调用,子会话费用(元)。 */
30
36
  export declare function sessionRowsCsv(rows: readonly SessionExportRow[]): string;
31
37
  /** 导出文件名:带日期范围(usage-2026-08-01_2026-08-22.csv);无日期时只带前缀。 */
32
38
  export declare function exportFileName(prefix: string, ext: 'csv' | 'json', dates: readonly string[]): string;
@@ -22,6 +22,7 @@ export interface LiveStats {
22
22
  bySession?: readonly {
23
23
  id: string;
24
24
  cost: number;
25
+ subCost?: number;
25
26
  }[];
26
27
  byTurn?: readonly {
27
28
  sessionId: string;
@@ -40,13 +41,22 @@ export interface QuotaSlice {
40
41
  }[];
41
42
  }
42
43
  /**
43
- * 当前会话累计费用:bySession 里会话 id 匹配的那行;缺省为 0。
44
- * 导出供测试:纯函数。
44
+ * 当前会话累计费用:bySession 里会话 id 匹配的那行(含后代子智能体费用
45
+ * subCost——子智能体是宿主的独立会话,其消耗按父链并入本对话的口径);
46
+ * 缺省为 0。导出供测试:纯函数。
45
47
  * @param stats - 薄统计切片。
46
48
  * @param sessionId - 当前会话 id。
47
- * @returns 该会话累计费用(人民币元)。
49
+ * @returns 该会话累计费用(人民币元,含子智能体)。
48
50
  */
49
51
  export declare function sessionCostOf(stats: LiveStats | null, sessionId: string | undefined): number;
52
+ /**
53
+ * 当前会话的后代子智能体费用(bySession 行的 subCost):供「含子」拆分展示,
54
+ * 让胶囊上的总额与本体会话费用对得上账。导出供测试:纯函数。
55
+ * @param stats - 薄统计切片。
56
+ * @param sessionId - 当前会话 id。
57
+ * @returns 后代子会话费用合计(人民币元);无则 0。
58
+ */
59
+ export declare function sessionSubCostOf(stats: LiveStats | null, sessionId: string | undefined): number;
50
60
  /**
51
61
  * 当前轮费用:byTurn 里该会话最新一轮的 cost;缺省为 0。
52
62
  * byTurn 服务端按起始时间倒序下发,但求 max(turn) 更稳健(不依赖顺序)。
@@ -1,5 +1,5 @@
1
1
  /** Locale dictionaries for the usage billing surface. */
2
- export type UsageBillingKey = 'title' | 'cost' | 'todayCost' | 'monthCost' | 'yearCost' | 'monthProjected' | 'liveTurn' | 'liveSession' | 'calls' | 'cacheHitRate' | 'tokens' | 'inputTokens' | 'outputTokens' | 'avgCost' | 'kpiRange' | 'avgRangeToday' | 'avgRange7d' | 'avgRangeWeek' | 'avgRangeMonth' | 'avgRangeAll' | 'trend' | 'trend7d' | 'trend30d' | 'trendMetric' | 'trendMetricCost' | 'trendMetricTokens' | 'pricingSearch' | 'bandPinHint' | 'trendEmpty' | 'trendTotal' | 'roundsUnit' | 'healthModelsLive' | 'healthVendorsDown' | 'healthVendorsUnavailable' | 'budget' | 'budgetRemain' | 'budgetAmount' | 'budgetSummary' | 'sessions' | 'sessionTitle' | 'lastActive' | 'sessionOverflow' | 'budgetTierBody' | 'models' | 'providerBilling' | 'channelUnknown' | 'directTag' | 'relayTag' | 'unknownTag' | 'unknownChannelHint' | 'planCountUnit' | 'actual' | 'pricing' | 'input' | 'output' | 'cacheHit' | 'peak' | 'offPeak' | 'flat' | 'band' | 'close' | 'footer' | 'footerCredit' | 'lastUpdated' | 'noData' | 'todayRate' | 'rateLive' | 'rateBuiltin' | 'pricingSyncedAt' | 'pricingSyncNow' | 'pricingSyncing' | 'promoBadge' | 'promoUntil' | 'promoOpenEnded' | 'pricingTip' | 'pricingUnit' | 'pricingNotes' | 'ubPeak' | 'ubOff' | 'ubStd' | 'peakBand' | 'pricingSource' | 'noteCache' | 'noteBand' | 'noteSource' | 'balance' | 'recharge' | 'rechargeHint' | 'balanceUnconfigured' | 'balanceUnauthorized' | 'balanceUnreachable' | 'uncatalogued' | 'estimatedPricing' | 'balanceDays' | 'balanceLowBody' | 'reconcileDrift' | 'reconcileDismiss' | 'subscriptionNotConfigured' | 'subscriptionUnauthorized' | 'subscriptionUnavailable' | 'subscriptionInvalid' | 'subscriptionRateLimited' | 'subscriptionSession' | 'subscriptionWeekly' | 'subscriptionMonthly' | 'subscriptionBilling' | 'subscriptionRemaining' | 'subscriptionExhausted' | 'subscriptionReset' | 'subscriptionNoApi' | 'floatWindow' | 'floatModeCombined' | 'floatModeSubscription' | 'floatMode' | 'floatTargets' | 'floatWindowHint' | 'floatPrimaryToday' | 'floatPrimaryWeek' | 'floatPrimaryMonth' | 'floatNoTargets' | 'floatNoTargetsHint' | 'cardDisplay' | 'cardDisplayHint' | 'cardMetric' | 'cardMetricMoney' | 'cardMetricTokens' | 'cardSpan' | 'cardSpanDay' | 'cardSpanWeek' | 'cardSpanMonth' | 'triggerMonthTokens' | 'triggerTodayTokens' | 'triggerWeekTokens' | 'subscriptionsStale' | 'staleLedgerNotice' | 'unreadableNotice' | 'unreadableFormatNotice' | 'unreadableNoLedgerNotice' | 'tokenCacheWrite' | 'toolRank' | 'toolName' | 'userPrices' | 'userPricesHint' | 'userPriceSave' | 'userPriceModel' | 'userPriceSource' | 'userPriceSourceHint' | 'userPriceOffPeak' | 'userPriceNormal' | 'userPriceCurrency' | 'userPriceAdd' | 'userPriceRemoveSelected' | 'userPriceSelect' | 'sessionStaleBadge' | 'sessionUntitled' | 'heatmapLess' | 'heatmapMore' | 'currency' | 'currencyCny' | 'currencyUsd' | 'currencyEur' | 'language' | 'heatmap' | 'rounds' | 'roundsHint' | 'anomaly' | 'model' | 'thModel' | 'thInputMiss' | 'thInputHit' | 'costAbbr' | 'tabOverview' | 'tabTrends' | 'tabProviders' | 'tabPricing' | 'tabSettings' | 'budgetHint' | 'peakAlertHint' | 'peakAlertDescPeak' | 'peakAlertDescOff' | 'peakAlertDescPeakZhipu' | 'peakAlertDescOffZhipu' | 'export' | 'exportCsvDay' | 'exportCsvSession' | 'exportJson' | 'peakShare' | 'peakSharePerCall' | 'offPeakSavings' | 'perfMax' | 'weekCost' | 'roleCost' | 'roleUser' | 'roleAssistant' | 'roleTool' | 'roleHint' | 'tierPeak' | 'tierOff' | 'tierToPeak' | 'tierToOff' | 'tierAlertEnterPeak' | 'tierAlertEnterOff' | 'tierAlertEnterPeakZhipu' | 'tierAlertEnterOffZhipu' | 'peakAlertTitlePeak' | 'peakAlertTitleOff' | 'peakAlert' | 'peakAlertLeadMin' | 'peakAlertPos' | 'peakAlertMode' | 'peakAlertPosCorner' | 'peakAlertPosCenter' | 'peakAlertModePeak' | 'peakAlertModeOff' | 'peakAlertModeBoth' | 'peakAlertWebNotify' | 'peakAlertPreview' | 'planTypeCode' | 'planTypeToken' | 'subscriptionFeePerMonth' | 'triggerToday' | 'triggerMonth' | 'subscriptionTag' | 'cellEstimateHint' | 'free' | 'perfSamples' | 'perfTtft' | 'perfP50' | 'perfP90' | 'perfTps' | 'perfLatency' | 'perfEstimated' | 'perfEmpty' | 'perfTpsUnit' | 'perfTitle' | 'perfHint' | 'perfAll' | 'perfChartEmpty' | 'heatmapYear' | 'heatmapHalf' | 'heatmapMonth' | 'metricCost' | 'metricTokens' | 'heatmapTotal' | 'activeDays' | 'streakDays' | 'subscriptionAutoDetect' | 'pluginAuthor' | 'pluginRepository' | 'pluginNpm' | 'pluginLicense' | 'tabToken' | 'tokenExport' | 'tokenExportCsv' | 'tokenReasoningShare' | 'tokenReasoningShort' | 'tokenIo' | 'tokenPeak' | 'densityLabel' | 'densityHint' | 'densityCompact' | 'densityDefault' | 'densityComfortable' | 'motionLabel' | 'motionHint' | 'motionOff' | 'motionSubtle' | 'motionRich' | 'settingsNavBudget' | 'settingsNavAlert' | 'settingsNavDisplay' | 'settingsNavAdvanced' | 'settingsNavAbout' | 'settingsSectionDisplay' | 'emptyHint' | 'tokenDaily' | 'tokenByModel' | 'tokenMiss' | 'tokenHit' | 'tokenOutput' | 'tokenViewStructure' | 'tokenViewModel' | 'tokenHitShort' | 'tokenMissShort' | 'tokenTotal' | 'tokenShare' | 'usageStatsTool' | 'usageStatsToolHint' | 'balanceGranted' | 'balanceTopped' | 'balanceDaily' | 'balanceDaysLong' | 'balanceDaysUnit' | 'popTodayModel' | 'popNoConsumption' | 'popTitle' | 'popDirectLead' | 'popSubLead' | 'unpricedHint' | 'searchEstimateHint' | 'siteListDisplay' | 'siteListDisplayHint' | 'liveCostBar' | 'liveCostBarHint' | 'liveCostBarPosition' | 'liveCostBarPosBelow' | 'liveCostBarPosAbove' | 'liveCostBarPosToolbar' | 'exportCsvSite' | 'panelRelayQuota' | 'relayBalance' | 'relayNoQuota' | 'relayWindowUsed' | 'relayKindNewApi' | 'relayKindSub2Api' | 'relayKindUnknown' | 'expandAll' | 'collapseAll' | 'todayOnly' | 'todayNoConsumption';
2
+ export type UsageBillingKey = 'title' | 'cost' | 'todayCost' | 'monthCost' | 'yearCost' | 'monthProjected' | 'liveTurn' | 'liveSession' | 'liveSessionSub' | 'calls' | 'cacheHitRate' | 'tokens' | 'inputTokens' | 'outputTokens' | 'avgCost' | 'kpiRange' | 'avgRangeToday' | 'avgRange7d' | 'avgRangeWeek' | 'avgRangeMonth' | 'avgRangeAll' | 'trend' | 'trend7d' | 'trend30d' | 'trendMetric' | 'trendMetricCost' | 'trendMetricTokens' | 'pricingSearch' | 'bandPinHint' | 'trendEmpty' | 'trendTotal' | 'roundsUnit' | 'healthModelsLive' | 'healthVendorsDown' | 'healthVendorsUnavailable' | 'budget' | 'budgetRemain' | 'budgetAmount' | 'budgetSummary' | 'sessions' | 'sessionTitle' | 'lastActive' | 'sessionOverflow' | 'budgetTierBody' | 'models' | 'providerBilling' | 'channelUnknown' | 'directTag' | 'relayTag' | 'unknownTag' | 'unknownChannelHint' | 'planCountUnit' | 'actual' | 'pricing' | 'input' | 'output' | 'cacheHit' | 'peak' | 'offPeak' | 'flat' | 'band' | 'close' | 'footer' | 'footerCredit' | 'lastUpdated' | 'noData' | 'todayRate' | 'rateLive' | 'rateBuiltin' | 'pricingSyncedAt' | 'pricingSyncNow' | 'pricingSyncing' | 'promoBadge' | 'promoUntil' | 'promoOpenEnded' | 'pricingTip' | 'pricingUnit' | 'pricingNotes' | 'ubPeak' | 'ubOff' | 'ubStd' | 'peakBand' | 'pricingSource' | 'noteCache' | 'noteBand' | 'noteSource' | 'balance' | 'recharge' | 'rechargeHint' | 'balanceUnconfigured' | 'balanceUnauthorized' | 'balanceUnreachable' | 'uncatalogued' | 'estimatedPricing' | 'balanceDays' | 'balanceLowBody' | 'reconcileDrift' | 'reconcileDismiss' | 'subscriptionNotConfigured' | 'subscriptionUnauthorized' | 'subscriptionUnavailable' | 'subscriptionInvalid' | 'subscriptionRateLimited' | 'subscriptionSession' | 'subscriptionWeekly' | 'subscriptionMonthly' | 'subscriptionBilling' | 'subscriptionRemaining' | 'subscriptionExhausted' | 'subscriptionReset' | 'subscriptionNoApi' | 'floatWindow' | 'floatModeCombined' | 'floatModeSubscription' | 'floatMode' | 'floatTargets' | 'floatWindowHint' | 'floatPrimaryToday' | 'floatPrimaryWeek' | 'floatPrimaryMonth' | 'floatNoTargets' | 'floatNoTargetsHint' | 'cardDisplay' | 'cardDisplayHint' | 'cardMetric' | 'cardMetricMoney' | 'cardMetricTokens' | 'cardSpan' | 'cardSpanDay' | 'cardSpanWeek' | 'cardSpanMonth' | 'cardDeltaBadge' | 'cardDeltaShow' | 'cardDeltaHide' | 'triggerMonthTokens' | 'triggerTodayTokens' | 'triggerWeekTokens' | 'subscriptionsStale' | 'staleLedgerNotice' | 'unreadableNotice' | 'unreadableFormatNotice' | 'unreadableNoLedgerNotice' | 'tokenCacheWrite' | 'toolRank' | 'toolName' | 'userPrices' | 'userPricesHint' | 'userPriceSave' | 'userPriceModel' | 'userPriceSource' | 'userPriceSourceHint' | 'userPriceOffPeak' | 'userPriceNormal' | 'userPriceCurrency' | 'userPriceAdd' | 'userPriceRemoveSelected' | 'userPriceSelect' | 'sessionStaleBadge' | 'sessionUntitled' | 'sessionSubCost' | 'sessionSubCalls' | 'sessionSubRow' | 'heatmapLess' | 'heatmapMore' | 'currency' | 'currencyCny' | 'currencyUsd' | 'currencyEur' | 'language' | 'heatmap' | 'rounds' | 'roundsHint' | 'anomaly' | 'model' | 'thModel' | 'thInputMiss' | 'thInputHit' | 'costAbbr' | 'tabOverview' | 'tabTrends' | 'tabProviders' | 'tabPricing' | 'tabSettings' | 'budgetHint' | 'peakAlertHint' | 'peakAlertDescPeak' | 'peakAlertDescOff' | 'peakAlertDescPeakZhipu' | 'peakAlertDescOffZhipu' | 'export' | 'exportCsvDay' | 'exportCsvSession' | 'exportJson' | 'peakShare' | 'peakSharePerCall' | 'offPeakSavings' | 'perfMax' | 'weekCost' | 'roleCost' | 'roleUser' | 'roleAssistant' | 'roleTool' | 'roleHint' | 'tierPeak' | 'tierOff' | 'tierToPeak' | 'tierToOff' | 'tierAlertEnterPeak' | 'tierAlertEnterOff' | 'tierAlertEnterPeakZhipu' | 'tierAlertEnterOffZhipu' | 'peakAlertTitlePeak' | 'peakAlertTitleOff' | 'peakAlert' | 'peakAlertLeadMin' | 'peakAlertPos' | 'peakAlertMode' | 'peakAlertPosCorner' | 'peakAlertPosCenter' | 'peakAlertModePeak' | 'peakAlertModeOff' | 'peakAlertModeBoth' | 'peakAlertWebNotify' | 'peakAlertPreview' | 'planTypeCode' | 'planTypeToken' | 'subscriptionFeePerMonth' | 'triggerToday' | 'triggerMonth' | 'subscriptionTag' | 'cellEstimateHint' | 'free' | 'perfSamples' | 'perfTtft' | 'perfP50' | 'perfP90' | 'perfTps' | 'perfLatency' | 'perfEstimated' | 'perfEmpty' | 'perfTpsUnit' | 'perfTitle' | 'perfHint' | 'perfAll' | 'perfChartEmpty' | 'heatmapYear' | 'heatmapHalf' | 'heatmapMonth' | 'metricCost' | 'metricTokens' | 'heatmapTotal' | 'activeDays' | 'streakDays' | 'subscriptionAutoDetect' | 'pluginAuthor' | 'pluginRepository' | 'pluginNpm' | 'pluginLicense' | 'tabToken' | 'tokenExport' | 'tokenExportCsv' | 'tokenReasoningShare' | 'tokenReasoningShort' | 'tokenIo' | 'tokenPeak' | 'densityLabel' | 'densityHint' | 'densityCompact' | 'densityDefault' | 'densityComfortable' | 'motionLabel' | 'motionHint' | 'motionOff' | 'motionSubtle' | 'motionRich' | 'settingsNavBudget' | 'settingsNavAlert' | 'settingsNavDisplay' | 'settingsNavAdvanced' | 'settingsNavAbout' | 'settingsSectionDisplay' | 'emptyHint' | 'tokenDaily' | 'tokenByModel' | 'tokenMiss' | 'tokenHit' | 'tokenOutput' | 'tokenViewStructure' | 'tokenViewModel' | 'tokenHitShort' | 'tokenMissShort' | 'tokenTotal' | 'tokenShare' | 'usageStatsTool' | 'usageStatsToolHint' | 'balanceGranted' | 'balanceTopped' | 'balanceDaily' | 'balanceDaysLong' | 'balanceDaysUnit' | 'popTodayModel' | 'popNoConsumption' | 'popTitle' | 'popDirectLead' | 'popSubLead' | 'unpricedHint' | 'searchEstimateHint' | 'siteListDisplay' | 'siteListDisplayHint' | 'liveCostBar' | 'liveCostBarHint' | 'liveCostBarPosition' | 'liveCostBarPosBelow' | 'liveCostBarPosAbove' | 'liveCostBarPosToolbar' | 'exportCsvSite' | 'panelRelayQuota' | 'relayBalance' | 'relayNoQuota' | 'relayWindowUsed' | 'relayKindNewApi' | 'relayKindSub2Api' | 'relayKindUnknown' | 'expandAll' | 'collapseAll' | 'todayOnly' | 'todayNoConsumption';
3
3
  export declare const NS = "usageBilling";
4
4
  export declare const zh: Record<UsageBillingKey, string>;
5
5
  export declare const en: Record<UsageBillingKey, string>;
@@ -54,8 +54,10 @@ export interface BillingCardPrefs {
54
54
  metric: BillingCardMetric;
55
55
  /** 主数字统计范围:今日 / 本周 / 本月(默认今日)。 */
56
56
  span: BillingCardSpan;
57
+ /** 是否显示「今日环比」涨跌徽章(默认显示;issue #93:部分用户觉得红色横条太醒目)。 */
58
+ showDelta: boolean;
57
59
  }
58
- /** 默认计费卡偏好:花费金额 + 今日口径。 */
60
+ /** 默认计费卡偏好:花费金额 + 今日口径 + 显示环比徽章(保持 v1.5.0 行为)。 */
59
61
  export declare const DEFAULT_BILLING_CARD_PREFS: BillingCardPrefs;
60
62
  /** localStorage key(与 budget store 的 `dsh.ui-usage-billing.*` 命名空间一致)。 */
61
63
  export declare const BILLING_CARD_STORAGE_KEY = "dsh.ui-usage-billing.card";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kenz1117/dsh-ui-usage-billing",
3
3
  "description": "Usage billing dashboard for DeepSeek Harness: sidebar cost metrics plus a full dashboard modal, priced from a current multi-provider catalog with real usage aggregated from session logs.",
4
- "version": "1.5.0-alpha.2",
4
+ "version": "1.5.1",
5
5
  "keywords": [
6
6
  "deepseek-harness",
7
7
  "deepseek",
@@ -77,7 +77,8 @@
77
77
  "0.2.0-rc.2": "compatible",
78
78
  "0.2.1-alpha.1": "compatible",
79
79
  "0.2.1-alpha.2": "compatible",
80
- "0.2.1-alpha.3": "compatible"
80
+ "0.2.1-alpha.3": "compatible",
81
+ "0.2.1-rc.2": "compatible"
81
82
  }
82
83
  }
83
84
  },
@@ -122,35 +123,36 @@
122
123
  "@deepseek-ai/cordis": "*",
123
124
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
124
125
  "@deepseek-ai/cordis-plugin-loader": "^1.0.5",
125
- "@deepseek-ai/dsh-api-gateway": "0.1.7-rc.1",
126
- "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.1",
127
- "@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.1",
128
- "@deepseek-ai/dsh-atomic-write": "0.1.7-rc.1",
129
- "@deepseek-ai/dsh-agent": "0.1.7-rc.1",
130
- "@deepseek-ai/dsh-client-locale": "0.1.7-rc.1",
131
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.1",
132
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.7-rc.1",
133
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.1",
134
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.1",
135
- "@deepseek-ai/dsh-client-ui-sidebar": "0.1.7-rc.1",
136
- "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.1",
137
- "@deepseek-ai/dsh-credentials": "0.1.7-rc.1",
138
- "@deepseek-ai/dsh-host-webserver": "0.1.7-rc.1",
139
- "@deepseek-ai/dsh-home-paths": "0.1.7-rc.1",
140
- "@deepseek-ai/dsh-invariants": "0.1.7-rc.1",
141
- "@deepseek-ai/dsh-llm": "0.1.7-rc.1",
142
- "@deepseek-ai/dsh-ptc-runtime": "0.1.7-rc.1",
143
- "@deepseek-ai/dsh-sandbox": "0.1.7-rc.1",
144
- "@deepseek-ai/dsh-sandbox-policy": "0.1.7-rc.1",
145
- "@deepseek-ai/dsh-scope": "0.1.7-rc.1",
146
- "@deepseek-ai/dsh-session": "0.1.7-rc.1",
147
- "@deepseek-ai/dsh-session-persistence": "0.1.7-rc.1",
148
- "@deepseek-ai/dsh-settings": "0.1.7-rc.1",
149
- "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.1",
150
- "@deepseek-ai/dsh-tools": "0.1.7-rc.1",
151
- "@deepseek-ai/dsh-typert-protocol": "0.1.7-rc.1",
152
- "@deepseek-ai/dsh-user-approval": "0.1.7-rc.1",
153
- "@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.1",
126
+ "@deepseek-ai/dsh-api-gateway": "0.2.1-rc.2",
127
+ "@deepseek-ai/dsh-api-remotes": "0.2.1-rc.2",
128
+ "@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.2",
129
+ "@deepseek-ai/dsh-atomic-write": "0.2.1-rc.2",
130
+ "@deepseek-ai/dsh-agent": "0.2.1-rc.2",
131
+ "@deepseek-ai/dsh-client-locale": "0.2.1-rc.2",
132
+ "@deepseek-ai/dsh-client-store": "0.2.1-rc.2",
133
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.2",
134
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
135
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
136
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-rc.2",
137
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
138
+ "@deepseek-ai/dsh-credentials": "0.2.1-rc.2",
139
+ "@deepseek-ai/dsh-host-webserver": "0.2.1-rc.2",
140
+ "@deepseek-ai/dsh-home-paths": "0.2.1-rc.2",
141
+ "@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
142
+ "@deepseek-ai/dsh-util-code-language": "0.2.1-rc.2",
143
+ "@deepseek-ai/dsh-llm": "0.2.1-rc.2",
144
+ "@deepseek-ai/dsh-ptc-runtime": "0.2.1-rc.2",
145
+ "@deepseek-ai/dsh-sandbox": "0.2.1-rc.2",
146
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.1-rc.2",
147
+ "@deepseek-ai/dsh-scope": "0.2.1-rc.2",
148
+ "@deepseek-ai/dsh-session": "0.2.1-rc.2",
149
+ "@deepseek-ai/dsh-session-persistence": "0.2.1-rc.2",
150
+ "@deepseek-ai/dsh-settings": "0.2.1-rc.2",
151
+ "@deepseek-ai/dsh-system-prompt": "0.2.1-rc.2",
152
+ "@deepseek-ai/dsh-tools": "0.2.1-rc.2",
153
+ "@deepseek-ai/dsh-typert-protocol": "0.2.1-rc.2",
154
+ "@deepseek-ai/dsh-user-approval": "0.2.1-rc.2",
155
+ "@deepseek-ai/dsh-util-workspace-path": "0.2.1-rc.2",
154
156
  "@deepseek-ai/schemastery": "^3.18.4",
155
157
  "@shikijs/langs": "^4.3.1",
156
158
  "@testing-library/dom": "^10.4.1",