@deepseek-ai/dsh-client-ui-settings-models 0.1.7-rc.2 → 0.2.0-rc.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.
package/README.i18n.yaml CHANGED
@@ -6,11 +6,11 @@
6
6
  en: d1bc4d9ef67bfb19
7
7
  zh: d095e4dc76f1c5e0
8
8
  /deepseek-ai-dsh-client-ui-settings-models:
9
- en: 65e1e8a17a23e576
10
- zh: 01de4e98a002d376
9
+ en: 0db6fa836e1ff511
10
+ zh: 0e2968763e1fb7a5
11
11
  /deepseek-ai-dsh-client-ui-settings-models/summary:
12
- en: 53301a5d29936f69
13
- zh: 9ac408a33571dbdd
12
+ en: 51252c1e9fa6da0a
13
+ zh: 227b54d7898417fa
14
14
  /deepseek-ai-dsh-client-ui-settings-models/table-of-contents:
15
15
  en: d152484eb41ac6b4
16
16
  zh: 09388d293f9be9cb
@@ -42,8 +42,8 @@
42
42
  en: 670b8c066aed9b7a
43
43
  zh: 2bedba9a2e0e3fee
44
44
  /deepseek-ai-dsh-client-ui-settings-models/understand-the-implementation/onboarding-coordinator:
45
- en: 5b18ec5319a96cfa
46
- zh: 0eaa3078e7d87cad
45
+ en: 46dea666dffe8813
46
+ zh: 6f56fdc365fa3642
47
47
  /deepseek-ai-dsh-client-ui-settings-models/further-exploration:
48
48
  en: 20abd8b98b6c20e2
49
49
  zh: 6dfda7955ce5f33f
package/README.md CHANGED
@@ -7,9 +7,11 @@ kind: "package-reference"
7
7
 
8
8
  English | [中文](README.zh.md)
9
9
 
10
+ Desktop product events use the optional [product analytics service](../product-analytics/README.md); ordinary Web interactions are excluded.
11
+
10
12
  ## Summary
11
13
 
12
- `dsh-client-ui-settings-models` is the Models settings page of the dsh web client: users configure API keys (stored write-only under the profile's credential reference), edit each provider's model list, and hand-declare custom pi-ai routes, with provider rows and one editor card at a time. The page joins the provider directory, the settings document, and the credential descriptions into one shared snapshot, so a row's state stays consistent across all three. It also walks first-run users through two ordered dialogs — a versioned internal-testing notice and the conditional official-DeepSeek credential step.
14
+ `dsh-client-ui-settings-models` is the Models settings page of the dsh web client: users configure API keys (stored write-only under the profile's credential reference), edit each provider's model list, and hand-declare custom pi-ai routes, with provider rows and one editor card at a time. The page joins the provider directory, the settings document, and the credential descriptions into one shared snapshot, so a row's state stays consistent across all three. It also walks first-run users through two ordered dialogs — a versioned preview notice and the conditional official-DeepSeek credential step.
13
15
 
14
16
  ## Table of Contents
15
17
 
@@ -83,7 +85,7 @@ Each settings write carries the card's current `revision`, so a concurrent write
83
85
 
84
86
  ### Onboarding coordinator
85
87
 
86
- The notice step owns its exact copy in `src/client/locales.ts` and its acknowledgement version in `src/onboarding-copy.ts`; on loopback it compares and writes `ui-settings-general.welcomeNoticeVersion` through the shared configuration form, and only an explicit Continue records the current version. A non-loopback browser cannot use that Host-only namespace, so acknowledgement is process-local and the notice returns after reload. The DeepSeek step targets `deepseek-official` in `llm-deepseek` and renders the existing `ProviderEditor` in credential-only mode inside the shared onboarding modal; `credentials.set` stays the only secret write, and no provider settings are changed.
88
+ The notice step owns its exact copy in `src/client/locales.ts` and its acknowledgement version in `src/onboarding-copy.ts`; on loopback it compares and writes `ui-settings-general.welcomeNoticeVersion` through the shared configuration form, and only an explicit Continue records the current version. Users who acknowledged an earlier version see the current notice again. A non-loopback browser cannot use that Host-only namespace, so acknowledgement is process-local and the notice returns after reload. The DeepSeek step targets `deepseek-official` in `llm-deepseek` and renders the existing `ProviderEditor` in credential-only mode inside the shared onboarding modal; `credentials.set` stays the only secret write, and no provider settings are changed.
87
89
 
88
90
  </details>
89
91
 
package/README.zh.md CHANGED
@@ -7,9 +7,11 @@ kind: "package-reference"
7
7
 
8
8
  [English](README.md) | 中文
9
9
 
10
+ 桌面端产品事件使用可选的[产品埋点服务](../product-analytics/README.zh.md),不包含普通 Web 交互。
11
+
10
12
  ## 概述
11
13
 
12
- `dsh-client-ui-settings-models` 是 dsh Web 客户端的 Models 设置页面:用户可以配置 API 密钥(以只写方式存入 profile 的凭据引用之下)、编辑每个提供商的模型列表,并手工声明自定义 pi-ai 路由;页面以提供商行展示,一次只展开一张编辑卡片。该页面把提供商目录、设置文档与凭据描述合并为一个共享快照,因此行的状态在三个方面始终一致。它还会带首次运行的用户走两个有序弹窗——版本化内测声明,以及按条件显示的官方 DeepSeek 凭据步骤。
14
+ `dsh-client-ui-settings-models` 是 dsh Web 客户端的 Models 设置页面:用户可以配置 API 密钥(以只写方式存入 profile 的凭据引用之下)、编辑每个提供商的模型列表,并手工声明自定义 pi-ai 路由;页面以提供商行展示,一次只展开一张编辑卡片。该页面把提供商目录、设置文档与凭据描述合并为一个共享快照,因此行的状态在三个方面始终一致。它还会带首次运行的用户走两个有序弹窗——版本化预览版说明,以及按条件显示的官方 DeepSeek 凭据步骤。
13
15
 
14
16
  ## 目录
15
17
 
@@ -83,7 +85,7 @@ Models 页面包含 **DeepSeek 账号**(`deepseek-account`,英文为 **DeepS
83
85
 
84
86
  ### 引导协调器
85
87
 
86
- 声明步骤在 `src/client/locales.ts` 中持有精确文案,并在 `src/onboarding-copy.ts` 中持有确认版本;回环时它通过既有 settings API 比较并写入 `ui-settings-general.welcomeNoticeVersion`,且只有显式点击「继续」才会记录当前版本。非回环浏览器无法使用这个仅限宿主的 namespace,因此确认只保留在进程内,刷新后声明会再次出现。DeepSeek 步骤面向 `llm-deepseek` 中的 `deepseek-official`,在共享引导模态框内以仅凭据模式渲染既有 `ProviderEditor`;`credentials.set` 仍是唯一的机密写入,且不改变任何提供商设置。
88
+ 预览版说明在 `src/client/locales.ts` 中持有精确文案,并在 `src/onboarding-copy.ts` 中持有确认版本;回环时它通过既有 settings API 比较并写入 `ui-settings-general.welcomeNoticeVersion`,且只有显式点击「继续」才会记录当前版本。已确认旧版的用户会再次看到当前说明。非回环浏览器无法使用这个仅限宿主的 namespace,因此确认只保留在进程内,刷新后说明会再次出现。DeepSeek 步骤面向 `llm-deepseek` 中的 `deepseek-official`,在共享引导模态框内以仅凭据模式渲染既有 `ProviderEditor`;`credentials.set` 仍是唯一的机密写入,且不改变任何提供商设置。
87
89
 
88
90
  </details>
89
91
 
package/lib/client.js CHANGED
@@ -1833,6 +1833,7 @@ window.__ModuleLoader__.load({
1833
1833
  props.onClose(false);
1834
1834
  },
1835
1835
  onSubmit: () => {
1836
+ props.onSubmitCredential?.();
1836
1837
  apply();
1837
1838
  }
1838
1839
  })
@@ -2472,13 +2473,6 @@ window.__ModuleLoader__.load({
2472
2473
  };
2473
2474
  //#endregion
2474
2475
  //#region lib/types/client/DeepSeekOnboardingDialog.js
2475
- /**
2476
- * Official-DeepSeek first-run step. Readiness comes from the same
2477
- * provider/settings/credential join as the Models page: any provider the user
2478
- * can already talk to ends the step, and only a user with none is offered the
2479
- * official DeepSeek route. The step reuses that page's credential editor in
2480
- * the onboarding plugin's shared modal, so the key is entered once.
2481
- */
2482
2476
  /* v8 ignore next 3 -- closed-union defaults only defend future source widening */
2483
2477
  function assertNever$1(_value) {
2484
2478
  throw new Error("unexpected DeepSeek onboarding state");
@@ -2551,6 +2545,9 @@ window.__ModuleLoader__.load({
2551
2545
  readOnly: false,
2552
2546
  hideTitle: true,
2553
2547
  credentialOnly: true,
2548
+ onSubmitCredential: () => {
2549
+ props.track?.("api_key_save_click", {});
2550
+ },
2554
2551
  credentialRequired: true,
2555
2552
  autoFocusCredential: true,
2556
2553
  cancelLabelKey: "onboardingLater",
@@ -2586,7 +2583,7 @@ window.__ModuleLoader__.load({
2586
2583
  };
2587
2584
  //#endregion
2588
2585
  //#region lib/types/client/WelcomeNotice.js
2589
- /** Product-wide, versioned internal-testing notice. */
2586
+ /** Product-wide, versioned preview notice. */
2590
2587
  /**
2591
2588
  * Render the current notice until its exact copy version is acknowledged.
2592
2589
  * @param props - settings-shell owner state and welcome dependencies.
@@ -2650,7 +2647,7 @@ window.__ModuleLoader__.load({
2650
2647
  * Bump only when the notice changes materially and every user should see it
2651
2648
  * again. The acknowledgement is compared for exact equality.
2652
2649
  */
2653
- const WELCOME_NOTICE_VERSION = "2026-08-13.1";
2650
+ const WELCOME_NOTICE_VERSION = "2026-09-28.1";
2654
2651
  //#endregion
2655
2652
  //#region lib/types/client/welcome-store.js
2656
2653
  /**
@@ -2948,8 +2945,8 @@ window.__ModuleLoader__.load({
2948
2945
  settingsPathUnresolvable: "unresolvable settings path",
2949
2946
  create: "Create provider",
2950
2947
  creating: "Creating…",
2951
- welcomeTitle: "Internal Testing Notice",
2952
- welcomeBody: "DeepSeek Harness 0.1 remains in testing for Harness developers. Many areas need further improvement, and we welcome feedback from the developer community. DeepSeek Harness's core plugins and foundational APIs will continue to evolve rapidly over the coming months.\n\nWe look forward to exploring the limits of intelligence with developers around the world, building on open-source, open, reusable, and composable infrastructure. We welcome Harness developers everywhere to join the DSH plugin ecosystem.",
2948
+ welcomeTitle: "Preview Notice",
2949
+ welcomeBody: "DeepSeek Harness 0.2 is still in preview, and many areas need continued improvement and refinement. We welcome feedback and suggestions from all developers and users. The new desktop app now targets a broad range of users, while developer-related advanced features can be enabled in the settings. DeepSeek Harness’s product features and plugin APIs are expected to continue rapid iteration and evolution, and will gradually stabilize over time.\n\nWe look forward to exploring the limits of intelligence together with users and developers around the world, building on open-source, reusable, and composable infrastructure. We welcome everyone to bring their ideas to life with DeepSeek Harness and participate in the community to enrich the plugin ecosystem.",
2953
2950
  welcomeContinue: "Continue",
2954
2951
  welcomeError: "The acknowledgement could not be saved. Please try again.",
2955
2952
  onboardingTitle: "Add an API key to get started",
@@ -3064,8 +3061,8 @@ window.__ModuleLoader__.load({
3064
3061
  settingsPathUnresolvable: "无法解析设置路径",
3065
3062
  create: "创建提供商",
3066
3063
  creating: "创建中…",
3067
- welcomeTitle: "内测声明",
3068
- welcomeBody: "DeepSeek Harness 目前的 0.1 版本仍处在面向 Harness 开发者进行测试的阶段,还有许多地方需要持续改进和打磨,希望听取广大开发者的反馈建议。预计 DeepSeek Harness 的核心插件以及基础 API 都会在接下来的一段时间内快速迭代、持续演化。\n\n我们期待与全球开发者一起,在开源、开放、可复用、可组合的基础设施之上,共同探索智能上限。欢迎全球 Harness 开发者加入 DSH 插件生态。",
3064
+ welcomeTitle: "预览版说明",
3065
+ welcomeBody: "DeepSeek Harness 目前的 0.2 版本仍处于预览阶段,还有许多地方需要持续改进和打磨,希望听取广大开发者和用户的反馈建议。现在,新的桌面端面向广泛用户,开发者相关的进阶功能可在配置中开启使用。预计 DeepSeek Harness 的产品功能以及插件 API 都会继续快速迭代、持续演化,并逐渐趋于稳定。\n\n我们期待与全球用户和开发者一起,在开源、可复用、可组合的基础设施之上,共同探索智能上限。欢迎大家用 DeepSeek Harness 将想法变成现实,与社区一起丰富插件生态。",
3069
3066
  welcomeContinue: "继续",
3070
3067
  welcomeError: "暂时无法保存确认状态,请重试。",
3071
3068
  onboardingTitle: "添加一个 API Key 开始使用",
@@ -4028,6 +4025,7 @@ window.__ModuleLoader__.load({
4028
4025
  });
4029
4026
  const deepSeekOnboardingInjected = () => ({
4030
4027
  automatic: credentialOnboarding,
4028
+ track: (name, attributes) => ctx.get("productAnalytics")?.track(name, attributes),
4031
4029
  controller,
4032
4030
  hooks: { models: controller.store },
4033
4031
  operations,
@@ -5,6 +5,7 @@
5
5
  * official DeepSeek route. The step reuses that page's credential editor in
6
6
  * the onboarding plugin's shared modal, so the key is entered once.
7
7
  */
8
+ import type { TrackProductEvent } from '@deepseek-ai/dsh-client-product-analytics/client';
8
9
  import type { ReactNode } from 'react';
9
10
  import type { SnapshotStore } from '@deepseek-ai/dsh-client-store';
10
11
  import type { InjectFace, PropsRuntime, PropsRenderSlots } from '@deepseek-ai/dsh-client-ui-slots';
@@ -14,6 +15,8 @@ import type { SettingsSchemaOperations } from './schema-operations.ts';
14
15
  import type { en } from './locales.ts';
15
16
  /** Registration-side dependencies of {@link DeepSeekOnboardingDialog}. */
16
17
  export interface DeepSeekOnboardingInjected {
18
+ /** Desktop-only event collection. */
19
+ track?: TrackProductEvent;
17
20
  /** Whether first-run setup should show automatically. Explicit requests remain available. */
18
21
  automatic: boolean;
19
22
  hooks: {
@@ -67,6 +67,8 @@ export interface ProviderEditorProps {
67
67
  submitBusyLabelKey?: keyof typeof en;
68
68
  /** Close the editor; `changed` reports whether an Apply committed. */
69
69
  onClose: (changed: boolean) => void;
70
+ /** Called on a credential form submission before the save starts. */
71
+ onSubmitCredential?: () => void;
70
72
  /**
71
73
  * Called once per change with whether the apply or the model list's
72
74
  * endpoint interrogation is in flight, so the owner can hold its surface
@@ -1,4 +1,4 @@
1
- /** Product-wide, versioned internal-testing notice. */
1
+ /** Product-wide, versioned preview notice. */
2
2
  import type { ReactNode } from 'react';
3
3
  import type { SnapshotStore } from '@deepseek-ai/dsh-client-store';
4
4
  import type { InjectFace, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
@@ -1,11 +1,3 @@
1
- /**
2
- * Models settings and product-onboarding plugin, browser half. It registers
3
- * the Models page plus the ordered internal-testing and official-DeepSeek
4
- * onboarding dialogs, whose UI shares this package's modal wrapper. The Host
5
- * settings and credential contracts stay behind their existing wire APIs.
6
- * Export discipline:
7
- * packages/client/AGENTS.md.
8
- */
9
1
  import type { Context as ClientContext } from '@deepseek-ai/cordis';
10
2
  import { ModelsSettingsStore } from './store.ts';
11
3
  import { type ModelsKey } from './locales.ts';
@@ -6,5 +6,5 @@ export declare const WELCOME_NOTICE_ACK_FIELD = "welcomeNoticeVersion";
6
6
  * Bump only when the notice changes materially and every user should see it
7
7
  * again. The acknowledgement is compared for exact equality.
8
8
  */
9
- export declare const WELCOME_NOTICE_VERSION = "2026-08-13.1";
9
+ export declare const WELCOME_NOTICE_VERSION = "2026-09-28.1";
10
10
  //# sourceMappingURL=onboarding-copy.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-settings-models",
3
3
  "description": "Models settings and shared product-onboarding dialogs over existing settings and credential joins",
4
- "version": "0.1.7-rc.2",
4
+ "version": "0.2.0-rc.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -42,18 +42,19 @@
42
42
  "devDependencies": {
43
43
  "@types/react": "~18.3.1",
44
44
  "react": "^18.2.0",
45
- "@deepseek-ai/dsh-host-webserver": "0.1.7-rc.2",
46
- "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.2",
47
- "@deepseek-ai/dsh-client-locale": "0.1.7-rc.2",
48
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
49
- "@deepseek-ai/dsh-client-test-runtime": "0.1.7-rc.2",
50
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
51
- "@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.2",
52
- "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
45
+ "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.1",
46
+ "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
47
+ "@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
48
+ "@deepseek-ai/dsh-client-test-runtime": "0.2.0-rc.1",
49
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
50
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1",
51
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.1",
52
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
53
53
  "@deepseek-ai/cordis": "~4.0.4",
54
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
55
- "@deepseek-ai/dsh-util-values": "0.1.7-rc.2",
56
- "@deepseek-ai/dsh-remote-mock": "0.1.7-rc.2"
54
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1",
55
+ "@deepseek-ai/dsh-util-values": "0.2.0-rc.1",
56
+ "@deepseek-ai/dsh-remote-mock": "0.2.0-rc.1",
57
+ "@deepseek-ai/dsh-client-product-analytics": "0.2.0-rc.1"
57
58
  },
58
59
  "dependencies": {
59
60
  "@deepseek-ai/schemastery": "~3.18.4"