@deepseek-ai/dsh-client-ui-settings-plugin-inventory 0.1.7-rc.1 → 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
@@ -1,6 +1,52 @@
1
- # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
2
- # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
- # after editing either side, bring the other along and re-record with:
1
+ # Bilingual-pair consistency record for README.md (docs/i18n/README.md): per heading
2
+ # section, a hash of its English and Chinese blocks outside code blocks and generated regions.
3
+ # After editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/client/ui-settings-plugin-inventory/README.md
5
- README.md: 7353f14d111aa1c89c3331a3d4977ddfbf950294
6
- README.zh.md: 9078f8074a10688cb7370ec7ee5fd8af16ca48c1
5
+ /:
6
+ en: 9121298d88fe8ea6
7
+ zh: 5da705491f951d0e
8
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory:
9
+ en: 463eecf002ec0f54
10
+ zh: b8dc6003ddccd14a
11
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/summary:
12
+ en: f52353cf99816eb8
13
+ zh: e172c1751289882f
14
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/table-of-contents:
15
+ en: d152484eb41ac6b4
16
+ zh: 09388d293f9be9cb
17
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/use-this-package:
18
+ en: 67637808e7940157
19
+ zh: d4d0716ea4d33e4a
20
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/use-this-package/reading-a-card:
21
+ en: 141d6a73e99fee51
22
+ zh: 2aa28b174867c967
23
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/use-this-package/the-preset-switcher:
24
+ en: 84e5938329199a22
25
+ zh: 6f5cfaac56433e8b
26
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/use-this-package/retrying-a-failed-read:
27
+ en: 673c7574e14078be
28
+ zh: b093e897f0341973
29
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/understand-the-implementation:
30
+ en: cab883d26642c932
31
+ zh: 54e7321bd781b400
32
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/understand-the-implementation/registration:
33
+ en: e4792880c5916ce0
34
+ zh: 4c8171a446dd153f
35
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/understand-the-implementation/rendering:
36
+ en: 779146e3d3732803
37
+ zh: 0dfafa328dfeda75
38
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/further-exploration:
39
+ en: ae3819f0c5da95bd
40
+ zh: 40972ab96d5c95e2
41
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/model-experience:
42
+ en: 69fb187ac2361233
43
+ zh: d4d3ec4ed3e3d98d
44
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/model-experience/kv-cache-effect:
45
+ en: ca75c51c89c2c9b0
46
+ zh: de54f3467ef3b9be
47
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/known-limitations-and-deferred-work:
48
+ en: 3d3343d97eb73762
49
+ zh: 5fc9d1c1f0c4055d
50
+ /deepseek-ai-dsh-client-ui-settings-plugin-inventory/known-limitations-and-deferred-work/dev-note:
51
+ en: 7516b7e39304e5b3
52
+ zh: 8961c0cefb89ee12
package/README.md CHANGED
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
9
9
 
10
10
  ## Summary
11
11
 
12
- The **Plugin list** tab lets Web users inspect plugins without changing their configuration. It lists agent presets, then the global inventory; both start collapsed and open on demand or during a search. Cards show localized titles and descriptions when available, identify instances by stable entry id, and expose enablement, source details, runtime status, disabled conditions, and discovery failures; preset-provided global entries name their presets. Search covers both groups and points to matches in other presets. The tab handles loading, empty, no-match, failure, and retry states without exposing transport details, and still shows the global inventory without a preset roster.
12
+ The **Plugin list** tab lets Web users inspect plugins without changing their configuration. It lists agent presets, open by default, then the collapsed global inventory; a search opens both. Cards show localized titles and descriptions when available, identify instances by stable entry id, and expose enablement, source details, runtime status, disabled conditions, and discovery failures; preset-provided global entries name their presets. Search covers both groups and points to matches in other presets. The tab handles loading, empty, no-match, failure, and retry states without exposing transport details, and still shows the global inventory without a preset roster.
13
13
 
14
14
  ## Table of Contents
15
15
 
@@ -31,9 +31,9 @@ A failed installation with pending pnpm build permissions offers **Allow these s
31
31
 
32
32
  ### Reading a card
33
33
 
34
- Each collapsed card uses the plugin's localized title and description when available. Settings shortens literal package-name or module-name fallbacks by removing the npm scope and the `cordis:`, `cordis-plugin-`, or `dsh-`/`dsh-host-`/`dsh-client-` prefix; locale titles remain unchanged. The Host supplies locale and package-field fallbacks in `meta`; the Client selects the current language. Full module specifiers remain available in details and search. Missing descriptions are omitted, and metadata diagnostics appear with the card. This compact naming applies only to Settings, not the sidebar's Plugins page.
34
+ Each collapsed card uses the plugin's localized title and description when available; a description shows at most two lines until its card is expanded. Settings shortens literal package-name or module-name fallbacks by removing the npm scope and the `cordis:`, `cordis-plugin-`, or `dsh-`/`dsh-host-`/`dsh-client-` prefix; locale titles remain unchanged. The Host supplies locale and package-field fallbacks in `meta`; the Client selects the current language. Full module specifiers remain available in details and search. Missing descriptions are omitted, and metadata diagnostics appear with the card. This compact naming applies only to Settings, not the sidebar's Plugins page.
35
35
 
36
- The stable entry id appears underneath the title, alongside a small enablement tag; a colored root-fiber status dot marks only the phases the tag cannot state: `pending` maps to idle, while `loading` and `unloading` map to ongoing. An `active` or `failed` fiber shows its tag without a dot. A composition-generated subtitle omits its leading `include:` marker, while hover, search, the accessible name, and expanded details retain the complete id. Long entry ids truncate in the row and remain available on hover. Expanding one card reveals the declared entry id, the full module specifier, and the state facts: a preset row names the preset it comes from, its runtime status when the composition is live, and its disable condition when it carries one; a preset-provided global row explains that agent presets provide it per session, names the presets that enable it, and offers a jump into the preset group. Preset names resolve through the shared `presetDisplayText` fold (`dsh-agent-preset-registry/display`) over [`ui-agent-preset`](../ui-agent-preset/README.md)'s dictionaries: shipped presets follow the active locale while user-authored ones keep their own metadata, so an English surface never echoes the preset declarations' Chinese names. Search filters both groups by localized title and description, module name, and entry id.
36
+ A small enablement tag marks only the states that differ from plainly enabled: disabled, conditional, provided by presets, and failed; a plainly enabled row carries no tag. A colored root-fiber status dot marks the live phases no tag states: `pending` maps to idle, while `loading` and `unloading` map to ongoing; an `active` or `failed` fiber shows no dot. The stable entry id appears in a code chip at the card's bottom-left, in line with the title, only when it differs from the title: a composition-generated id drops its leading `include:` marker there, and an id that then repeats the title is omitted. Whenever the chip shows, its hover text and the card's accessible name carry the complete id; search and expanded details always retain it. Long entry ids truncate in the chip and remain available on hover. Expanding one card reveals its full description, the declared entry id, the full module specifier, and the state facts: a preset row names the preset it comes from, its runtime status when the composition is live, and its disable condition when it carries one; a preset-provided global row explains that agent presets provide it per session, names the presets that enable it, and offers a jump into the preset group. Preset names resolve through the shared `presetDisplayText` fold (`dsh-agent-preset-registry/display`) over [`ui-agent-preset`](../ui-agent-preset/README.md)'s dictionaries: shipped presets follow the active locale while user-authored ones keep their own metadata, so an English surface never echoes the preset declarations' Chinese names. Search filters both groups by localized title and description, module name, and entry id.
37
37
 
38
38
  ### The preset switcher
39
39
 
@@ -41,7 +41,7 @@ The switcher is the same selector-pill-plus-menu control the General settings ro
41
41
 
42
42
  ### Retrying a failed read
43
43
 
44
- A failed read renders the shared error marker inside the tab; loading and current-page synchronization use the shared ongoing loader. Retrying re-runs the lazy `list()` call without exposing transport details.
44
+ A failed read renders the shared error marker inside the tab. Loading shows skeleton cards in the card grid, and current-page synchronization uses the shared ongoing loader. Retrying re-runs the lazy `list()` call without exposing transport details.
45
45
 
46
46
  The Plugin list also shows synchronization failures on the current page. Its retry reapplies the latest client graph without changing Host enablement or refreshing the page.
47
47
 
@@ -61,7 +61,7 @@ The browser plugin registers one localized `settings.plugins.tab` contribution w
61
61
 
62
62
  ### Rendering
63
63
 
64
- Row keys are scope-qualified (`global:`, `preset:<id>:<index>`), so one module appearing in both scopes keeps distinct disclosure state; a declared entry id appears in expanded details and supplies the collapsed subtitle after removal of a leading composition `include:` marker, while a row without one stays unlabeled. The preset-provided marking is derived client-side: a global entry carries it when it is disabled there while at least one preset row for the same module specifier is actually enabled, so a module every preset gates off (or declares only conditionally) stays plainly disabled rather than over-claiming provision.
64
+ Row keys are scope-qualified (`global:`, `preset:<id>:<index>`), so one module appearing in both scopes keeps distinct disclosure state; a declared entry id appears in expanded details and, after removal of a leading composition `include:` marker, supplies the collapsed id chip when the result differs from the title, while a row without one stays unlabeled. The preset-provided marking is derived client-side: a global entry carries it when it is disabled there while at least one preset row for the same module specifier is actually enabled, so a module every preset gates off (or declares only conditionally) stays plainly disabled rather than over-claiming provision.
65
65
 
66
66
  </details>
67
67
 
package/README.zh.md CHANGED
@@ -9,7 +9,7 @@ kind: "package-reference"
9
9
 
10
10
  ## 概述
11
11
 
12
- **插件列表**标签页让 Web 用户查看插件,而不改变其配置。它先列 agent(智能体)预设分组,再列全局清单;两个分组默认都收起,按需展开,搜索期间保持展开。卡片显示可用的本地化标题与描述,以稳定的条目 id 标识实例,并展示启停状态、出处、运行状态、禁用条件与发现失败;由预设提供的全局条目会列出对应预设。搜索覆盖两个分组,并指出其他预设中的匹配。标签页处理加载、空结果、无匹配、失败与重试状态,且不暴露传输细节;没有预设 roster 时仍会展示全局清单。
12
+ **插件列表**标签页让 Web 用户查看插件,而不改变其配置。它先列 agent(智能体)预设分组,再列全局清单;预设分组默认展开,全局分组默认收起,搜索期间两组都展开。卡片显示可用的本地化标题与描述,以稳定的条目 id 标识实例,并展示启停状态、出处、运行状态、禁用条件与发现失败;由预设提供的全局条目会列出对应预设。搜索覆盖两个分组,并指出其他预设中的匹配。标签页处理加载、空结果、无匹配、失败与重试状态,且不暴露传输细节;没有预设 roster 时仍会展示全局清单。
13
13
 
14
14
  ## 目录
15
15
 
@@ -31,9 +31,9 @@ kind: "package-reference"
31
31
 
32
32
  ### 阅读卡片
33
33
 
34
- 每张收起的卡片使用插件可用的本地化标题与描述。设置页会缩短字面的包名或模块名回退值,移除 npm scope 以及 `cordis:`、`cordis-plugin-` 或 `dsh-`/`dsh-host-`/`dsh-client-` 前缀;locale 标题保持原样。Host 在 `meta` 中提供 locale 与包字段的回退结果,Client 选择当前语言。详情与搜索仍保留完整模块标识。缺失的描述不显示,元信息诊断随卡片展示。这种短名显示仅用于设置页,不影响侧栏的插件页。
34
+ 每张收起的卡片使用插件可用的本地化标题与描述;描述最多显示两行,展开卡片后显示全文。设置页会缩短字面的包名或模块名回退值,移除 npm scope 以及 `cordis:`、`cordis-plugin-` 或 `dsh-`/`dsh-host-`/`dsh-client-` 前缀;locale 标题保持原样。Host 在 `meta` 中提供 locale 与包字段的回退结果,Client 选择当前语言。详情与搜索仍保留完整模块标识。缺失的描述不显示,元信息诊断随卡片展示。这种短名显示仅用于设置页,不影响侧栏的插件页。
35
35
 
36
- 稳定的条目 id 显示在标题下方,卡片带有表示启停状态的小标签;彩色根 fiber 状态圆点只标记标签无法表达的阶段:`pending` 映射为 idle,`loading` 与 `unloading` 映射为 ongoing。`active` 或 `failed` fiber 只显示标签,不显示圆点。组合生成的次标题省略开头的 `include:` 标记;悬停、搜索、无障碍名称与展开详情仍保留完整 id。长条目 id 会在行内截断,悬停时仍可查看完整值。展开卡片后会显示声明的条目 id、完整模块标识与状态事实:预设行说明它来自哪个预设、组合存活时的运行状态,以及它携带的禁用条件;被预设提供的全局行说明它由 Agent 预设按会话提供、列出启用它的预设,并提供跳转到预设组的入口。预设名经共享的 `presetDisplayText` 纯函数(`dsh-agent-preset-registry/display`)叠在 [`ui-agent-preset`](../ui-agent-preset/README.zh.md) 的字典上解析:内置预设走当前语言,用户自建预设保留自己的元数据,因此英文界面不会回显预设声明里的中文名。搜索按本地化标题与描述、模块名称及条目 id 过滤两组。
36
+ 表示启停状态的小标签只标记与普通启用不同的状态:已停用、条件启用、由预设提供与启动失败;普通启用的行不带标签。彩色根 fiber 状态圆点标记没有标签表达的存活阶段:`pending` 映射为 idle,`loading` 与 `unloading` 映射为 ongoing;`active` 或 `failed` fiber 不显示圆点。稳定的条目 id 仅在与标题不同时显示,位于卡片左下角的代码标签中,与标题左对齐:组合生成的 id 在此省略开头的 `include:` 标记,省略后与标题相同的 id 不再重复显示。显示代码标签时,其悬停提示与卡片的无障碍名称带完整 id;搜索与展开详情始终保留完整 id。长条目 id 会在代码标签内截断,悬停时仍可查看完整值。展开卡片后会显示完整描述、声明的条目 id、完整模块标识与状态事实:预设行说明它来自哪个预设、组合存活时的运行状态,以及它携带的禁用条件;被预设提供的全局行说明它由 Agent 预设按会话提供、列出启用它的预设,并提供跳转到预设组的入口。预设名经共享的 `presetDisplayText` 纯函数(`dsh-agent-preset-registry/display`)叠在 [`ui-agent-preset`](../ui-agent-preset/README.zh.md) 的字典上解析:内置预设走当前语言,用户自建预设保留自己的元数据,因此英文界面不会回显预设声明里的中文名。搜索按本地化标题与描述、模块名称及条目 id 过滤两组。
37
37
 
38
38
  ### 预设切换器
39
39
 
@@ -41,7 +41,7 @@ kind: "package-reference"
41
41
 
42
42
  ### 重试失败的读取
43
43
 
44
- 读取失败会在标签页内渲染共享 error 标记;加载与当前页面同步使用共享 ongoing loading。重试会重新执行懒 `list()` 调用,且不会暴露传输细节。
44
+ 读取失败会在标签页内渲染共享 error 标记。加载时在卡片网格中显示骨架卡片,当前页面同步使用共享 ongoing loading。重试会重新执行懒 `list()` 调用,且不会暴露传输细节。
45
45
 
46
46
  插件列表还显示当前页面的同步失败。重试会重新应用最新客户端图,不改变 Host 启用状态,也不刷新页面。
47
47
 
@@ -61,7 +61,7 @@ kind: "package-reference"
61
61
 
62
62
  ### 渲染
63
63
 
64
- 行 key 按作用域限定(`global:`、`preset:<id>:<index>`),因此同一模块出现在两个作用域时保持各自的展开状态;声明的条目 id 出现在展开详情中,并在去掉开头的组合 `include:` 标记后作为收起次标题,没有 id 的行不显示次级标签。预设提供标记在客户端推导:一个全局条目在全局被停用、且至少一个预设行对同一模块标识实际启用时才携带它,因此被所有预设关掉(或仅条件声明)的模块保持单纯的已停用,而不是夸大提供关系。
64
+ 行 key 按作用域限定(`global:`、`preset:<id>:<index>`),因此同一模块出现在两个作用域时保持各自的展开状态;声明的条目 id 出现在展开详情中;去掉开头的组合 `include:` 标记后若与标题不同,则作为收起卡片的 id 代码标签,没有 id 的行不显示次级标签。预设提供标记在客户端推导:一个全局条目在全局被停用、且至少一个预设行对同一模块标识实际启用时才携带它,因此被所有预设关掉(或仅条件声明)的模块保持单纯的已停用,而不是夸大提供关系。
65
65
 
66
66
  </details>
67
67
 
package/lib/client.js CHANGED
@@ -54,7 +54,7 @@ window.__ModuleLoader__.load({
54
54
  }
55
55
  //#endregion
56
56
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-settings-plugin-inventory/src/client/PluginInventorySettingsTab.module.css.mjs
57
- const css = ".qSYn7G_section{width:100%;max-width:760px;color:var(--dsw-alias-label-primary);flex-direction:column;gap:14px;display:flex}.qSYn7G_catalogHeading h3,.qSYn7G_status,.qSYn7G_failure p{margin:0}.qSYn7G_status,.qSYn7G_failure{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:20px}.qSYn7G_failure{color:var(--dsw-alias-state-error-primary);align-items:center;gap:10px;display:flex}.qSYn7G_statusWithDot{align-items:center;gap:6px;display:inline-flex}.qSYn7G_failure button{border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:4px 10px}.qSYn7G_catalog{flex-direction:column;gap:12px;display:flex}.qSYn7G_search{width:100%;color:var(--dsw-alias-label-tertiary);align-items:center;display:flex;position:relative}.qSYn7G_search>svg{pointer-events:none;position:absolute;left:12px}.qSYn7G_search input{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-1);width:100%;height:36px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:10px;outline:none;padding:0 34px 0 36px;font-size:13px}.qSYn7G_search input::placeholder{color:var(--dsw-alias-label-tertiary)}.qSYn7G_search input:focus-visible{border-color:var(--dsw-alias-state-business-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-state-business-primary) 18%, transparent)}.qSYn7G_catalogHeading{align-items:baseline;gap:7px;padding:0 2px;display:flex}.qSYn7G_catalogHeading h3{font-size:13px;font-weight:600;line-height:20px}.qSYn7G_catalogHeading span{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;font-size:12px;line-height:18px}.qSYn7G_cards{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:10px;margin:0;padding:0;list-style:none;display:grid}.qSYn7G_card{min-width:0;box-shadow:var(--dsw-elevation-stroke);background:var(--dsw-alias-bg-layer-3);border:0;border-radius:14px;overflow:hidden}.qSYn7G_card[data-open=true]{--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);box-shadow:var(--dsw-elevation-panel)}.qSYn7G_cardContent{box-sizing:border-box;width:100%;min-height:52px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;align-items:stretch;padding:12px 14px;display:flex}.qSYn7G_cardContent:hover,.qSYn7G_card[data-open=true]>.qSYn7G_cardContent{background:var(--dsw-alias-interactive-bg-hover)}.qSYn7G_cardContent:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}.qSYn7G_cardMainRow{justify-content:space-between;align-items:center;gap:12px;min-width:0;display:flex}.qSYn7G_cardTitle,.qSYn7G_cardIdentity{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.qSYn7G_cardTitle{flex:1;min-width:0;font-size:14px;font-weight:600;line-height:20px}.qSYn7G_cardIdentity,.qSYn7G_entryValue{font-family:var(--ds-font-family-code);font-size:12px;line-height:18px}.qSYn7G_cardIdentity{width:100%;color:var(--dsw-alias-label-tertiary);display:block}.qSYn7G_cardTrailing{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:7px;display:inline-flex}.qSYn7G_phaseDot{flex:none;display:inline-flex}.qSYn7G_group{flex-direction:column;gap:10px;display:flex}.qSYn7G_groupTitleRow{align-items:center;gap:8px;min-height:32px;display:flex}.qSYn7G_group+.qSYn7G_group{border-top:.5px solid var(--dsw-alias-border-l2);padding-top:14px}.qSYn7G_headerEnd{margin-left:auto}.qSYn7G_groupToggle{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:none;align-items:center;gap:8px;padding:0;display:flex}.qSYn7G_groupToggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.qSYn7G_groupToggle>.qSYn7G_chevron{transform:rotate(-90deg)}.qSYn7G_groupToggle[aria-expanded=true]>.qSYn7G_chevron{transform:none}.qSYn7G_groupTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.qSYn7G_groupSub{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:4px 8px;margin:-6px 0 0 20px;font-size:12px;line-height:18px;display:flex}.qSYn7G_failedCount{color:var(--dsw-alias-state-error-primary)}.qSYn7G_switcher{white-space:nowrap;background:var(--dsw-alias-bg-module-platform);height:36px;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border:none;border-radius:18px;flex:none;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.qSYn7G_switcher:hover{background:var(--dsw-alias-interactive-bg-hover)}.qSYn7G_switcher:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.qSYn7G_switcher>.qSYn7G_chevron{flex:none}.qSYn7G_switcherLabel{text-overflow:ellipsis;max-width:240px;overflow:hidden}.qSYn7G_groupBody{flex-direction:column;gap:10px;display:flex}.qSYn7G_brokenNote{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;white-space:pre-line;border-radius:8px;margin:0;padding:8px 10px;font-size:12.5px;line-height:18px}.qSYn7G_hint{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;font-size:12.5px;line-height:18px;display:flex}.qSYn7G_jumpLink{color:var(--dsw-alias-state-business-primary);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-size:12.5px}.qSYn7G_enabledIn{flex-wrap:wrap;align-items:baseline;gap:4px 10px;display:flex}.qSYn7G_card[data-failed=true]{border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.qSYn7G_chevron{color:var(--dsw-alias-label-tertiary);flex:none}.qSYn7G_card[data-open=true] .qSYn7G_chevron{transform:rotate(180deg)}.qSYn7G_cardDetails{border-top:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);padding:10px 14px 12px}.qSYn7G_entryValue{overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);display:block}.qSYn7G_details{grid-template-columns:76px minmax(0,1fr);gap:6px 10px;margin:8px 0 0;display:grid}.qSYn7G_details div{display:contents}.qSYn7G_details dt{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:17px}.qSYn7G_details dd{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:17px}.qSYn7G_visuallyHidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:no-preference){.qSYn7G_chevron{transition:transform .14s var(--ds-ease-in-out)}}@media (width<=680px){.qSYn7G_cards{grid-template-columns:minmax(0,1fr)}}";
57
+ const css = ".qSYn7G_section{width:100%;max-width:760px;color:var(--dsw-alias-label-primary);flex-direction:column;gap:14px;display:flex;container:qSYn7G_plugin-inventory/inline-size}.qSYn7G_status,.qSYn7G_failure p{margin:0}.qSYn7G_status,.qSYn7G_failure{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:20px}.qSYn7G_failure{color:var(--dsw-alias-state-error-primary);align-items:center;gap:10px;display:flex}.qSYn7G_statusWithDot{align-items:center;gap:6px;display:inline-flex}.qSYn7G_failure button{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;background:0 0;padding:4px 10px}.qSYn7G_catalog{flex-direction:column;gap:12px;display:flex}.qSYn7G_search{width:100%;color:var(--dsw-alias-label-tertiary);align-items:center;display:flex;position:relative}.qSYn7G_search>svg{pointer-events:none;position:absolute;left:12px}.qSYn7G_search input{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);width:100%;height:36px;color:var(--dsw-alias-label-primary);font:inherit;outline:none;padding:0 34px 0 36px;font-size:13px}.qSYn7G_search input::placeholder{color:var(--dsw-alias-label-tertiary)}.qSYn7G_search input:focus-visible{border-color:var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary)) 18%, transparent)}.qSYn7G_cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0;padding:0;list-style:none;display:grid}.qSYn7G_card{border:.5px solid var(--dsw-alias-settings-card-stroke);border-radius:var(--dsw-radius-xl);background:var(--dsw-alias-settings-card-fill);flex-direction:column;min-width:0;display:flex;overflow:hidden}.qSYn7G_card[data-open=true]{border-color:var(--dsw-alias-border-l3)}.qSYn7G_card:nth-child(odd)[data-open=true]+.qSYn7G_card,.qSYn7G_card:nth-child(odd):has(+.qSYn7G_card[data-open=true]){align-self:start}.qSYn7G_cardContent{box-sizing:border-box;width:100%;min-height:52px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:auto;align-items:stretch;gap:2px;padding:12px 14px;display:flex}.qSYn7G_cardContent:hover,.qSYn7G_card[data-open=true]>.qSYn7G_cardContent{background:var(--dsw-alias-interactive-bg-hover)}.qSYn7G_cardContent:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.qSYn7G_cardMainRow{justify-content:space-between;align-items:center;gap:12px;min-width:0;display:flex}.qSYn7G_cardTitle,.qSYn7G_cardIdentity{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.qSYn7G_cardTitle{flex:1;min-width:0;font-size:14px;font-weight:500;line-height:20px}.qSYn7G_cardDescription{color:var(--dsw-alias-label-tertiary);text-wrap:pretty;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.qSYn7G_card[data-open=true] .qSYn7G_cardDescription{display:block}.qSYn7G_cardMeta{margin-top:auto;padding-top:6px;display:flex}.qSYn7G_cardIdentity,.qSYn7G_entryValue{font-family:var(--ds-font-family-code);font-size:12px;line-height:18px}.qSYn7G_cardIdentity{box-sizing:border-box;border-radius:var(--dsw-radius-xs);background:var(--dsw-alias-bg-module-platform);max-width:100%;color:var(--dsw-alias-label-secondary);padding:1px 6px;display:block}.qSYn7G_cardTrailing{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:8px;display:inline-flex}.qSYn7G_phaseDot{flex:none;display:inline-flex}.qSYn7G_group{flex-direction:column;gap:10px;display:flex}.qSYn7G_groupTitleRow{align-items:center;gap:8px;min-height:36px;display:flex}.qSYn7G_group+.qSYn7G_group{border-top:.5px solid var(--dsw-alias-border-l2);padding-top:14px}.qSYn7G_headerEnd{margin-left:auto}.qSYn7G_groupToggle{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:none;align-items:center;gap:8px;padding:0;display:flex}.qSYn7G_groupToggle:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.qSYn7G_groupToggle>.qSYn7G_chevron{transform:rotate(-90deg)}.qSYn7G_groupToggle[aria-expanded=true]>.qSYn7G_chevron{transform:none}.qSYn7G_groupTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.qSYn7G_groupSub{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex-wrap:wrap;row-gap:4px;margin:-6px 0 0 20px;font-size:12px;line-height:18px;display:flex}.qSYn7G_groupSub>*+:before{content:\"·\";color:var(--dsw-alias-label-tertiary);padding:0 6px}.qSYn7G_failedCount{color:var(--dsw-alias-state-error-primary)}.qSYn7G_switcher{white-space:nowrap;border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);height:36px;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border:none;flex:none;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.qSYn7G_switcher:hover{background:var(--dsw-alias-interactive-bg-hover)}.qSYn7G_switcher:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.qSYn7G_switcher>.qSYn7G_chevron{flex:none}.qSYn7G_switcherLabel{text-overflow:ellipsis;max-width:240px;overflow:hidden}.qSYn7G_groupBody{flex-direction:column;gap:10px;display:flex}.qSYn7G_brokenNote{border-radius:var(--dsw-radius-lg);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;white-space:pre-line;margin:0;padding:8px 10px;font-size:12px;line-height:18px}.qSYn7G_hint{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0;font-size:12px;line-height:18px;display:flex}.qSYn7G_jumpLink{color:var(--dsw-alias-state-business-primary);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-size:12px}.qSYn7G_skeletonCard{border:.5px solid var(--dsw-alias-settings-card-stroke);border-radius:var(--dsw-radius-xl);background:var(--dsw-alias-settings-card-fill);flex-direction:column;gap:8px;padding:15px 14px;display:flex}.qSYn7G_skeletonBar{border-radius:var(--dsw-radius-xs);background:var(--dsw-alias-bg-skeleton);width:40%;height:14px}.qSYn7G_skeletonBar+.qSYn7G_skeletonBar{width:80%;height:12px}.qSYn7G_enabledIn{flex-wrap:wrap;align-items:baseline;gap:4px 10px;display:flex}.qSYn7G_card[data-failed=true]{border-color:color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.qSYn7G_chevron{color:var(--dsw-alias-label-tertiary);flex:none}.qSYn7G_card[data-open=true] .qSYn7G_chevron{transform:rotate(180deg)}.qSYn7G_cardDetails{border-top:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);padding:10px 14px 12px}.qSYn7G_entryValue{overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);display:block}.qSYn7G_details{grid-template-columns:76px minmax(0,1fr);gap:6px 10px;margin:8px 0 0;display:grid}.qSYn7G_details div{display:contents}.qSYn7G_details dt{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:17px}.qSYn7G_details dd{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:17px}.qSYn7G_visuallyHidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:no-preference){.qSYn7G_chevron{transition:transform .14s var(--ds-ease-in-out)}.qSYn7G_skeletonBar{animation:2s cubic-bezier(.36,0,.64,1) infinite qSYn7G_plugin-inventory-skeleton}}@keyframes qSYn7G_plugin-inventory-skeleton{0%{opacity:1}40%{opacity:.6}80%,to{opacity:1}}@container qSYn7G_plugin-inventory (width<=520px){.qSYn7G_cards{grid-template-columns:minmax(0,1fr)}}";
58
58
  const tagId = "@deepseek-ai/dsh-client-ui-settings-plugin-inventory/PluginInventorySettingsTab.module.css";
59
59
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
60
60
  const tag = document.createElement("style");
@@ -67,14 +67,15 @@ window.__ModuleLoader__.load({
67
67
  "brokenNote": "qSYn7G_brokenNote",
68
68
  "card": "qSYn7G_card",
69
69
  "cardContent": "qSYn7G_cardContent",
70
+ "cardDescription": "qSYn7G_cardDescription",
70
71
  "cardDetails": "qSYn7G_cardDetails",
71
72
  "cardIdentity": "qSYn7G_cardIdentity",
72
73
  "cardMainRow": "qSYn7G_cardMainRow",
74
+ "cardMeta": "qSYn7G_cardMeta",
73
75
  "cardTitle": "qSYn7G_cardTitle",
74
76
  "cardTrailing": "qSYn7G_cardTrailing",
75
77
  "cards": "qSYn7G_cards",
76
78
  "catalog": "qSYn7G_catalog",
77
- "catalogHeading": "qSYn7G_catalogHeading",
78
79
  "chevron": "qSYn7G_chevron",
79
80
  "details": "qSYn7G_details",
80
81
  "enabledIn": "qSYn7G_enabledIn",
@@ -91,8 +92,12 @@ window.__ModuleLoader__.load({
91
92
  "hint": "qSYn7G_hint",
92
93
  "jumpLink": "qSYn7G_jumpLink",
93
94
  "phaseDot": "qSYn7G_phaseDot",
95
+ "plugin-inventory": "qSYn7G_plugin-inventory",
96
+ "plugin-inventory-skeleton": "qSYn7G_plugin-inventory-skeleton",
94
97
  "search": "qSYn7G_search",
95
98
  "section": "qSYn7G_section",
99
+ "skeletonBar": "qSYn7G_skeletonBar",
100
+ "skeletonCard": "qSYn7G_skeletonCard",
96
101
  "status": "qSYn7G_status",
97
102
  "statusWithDot": "qSYn7G_statusWithDot",
98
103
  "switcher": "qSYn7G_switcher",
@@ -108,6 +113,13 @@ window.__ModuleLoader__.load({
108
113
  failed: "failed",
109
114
  unloading: "unloading"
110
115
  };
116
+ /** Placeholder cards the loading skeleton lays out in the cards grid. */
117
+ const SKELETON_CARDS = [
118
+ 0,
119
+ 1,
120
+ 2,
121
+ 3
122
+ ];
111
123
  /** Localized accessible label for one root Fiber phase. */
112
124
  function phaseLabel(phase, t) {
113
125
  return phase === null ? t("unobserved") : t(PHASE_KEYS[phase]);
@@ -120,6 +132,14 @@ window.__ModuleLoader__.load({
120
132
  function entrySubtitle(entryId) {
121
133
  return entryId.replace(/^include:/, "");
122
134
  }
135
+ /** Whether a card shows its entry id: the id exists and, without its `include:` marker, differs from the title. */
136
+ function idAddsToTitle(entryId, title) {
137
+ return entryId !== null && entrySubtitle(entryId) !== title;
138
+ }
139
+ /** Accessible card name: the title, the complete entry id when the card shows one, then the enablement state. */
140
+ function cardLabel(title, entryId, state) {
141
+ return idAddsToTitle(entryId, title) ? `${title}, ${entryId}, ${state}` : `${title}, ${state}`;
142
+ }
123
143
  /** Preserve translated titles and shorten literal package or module name fallbacks in Settings. */
124
144
  function pluginText(row, resolveText) {
125
145
  const title = row.meta?.title;
@@ -189,15 +209,18 @@ window.__ModuleLoader__.load({
189
209
  })]
190
210
  }),
191
211
  description === void 0 ? null : (0, react_jsx_runtime.jsx)("span", {
192
- className: PluginInventorySettingsTab_module_css_default.hint,
212
+ className: PluginInventorySettingsTab_module_css_default.cardDescription,
193
213
  id: descriptionId,
194
214
  children: description
195
215
  }),
196
- entryId === null ? null : (0, react_jsx_runtime.jsx)("code", {
197
- className: PluginInventorySettingsTab_module_css_default.cardIdentity,
198
- title: entryId,
199
- children: entrySubtitle(entryId)
200
- })
216
+ idAddsToTitle(entryId, title) ? (0, react_jsx_runtime.jsx)("span", {
217
+ className: PluginInventorySettingsTab_module_css_default.cardMeta,
218
+ children: (0, react_jsx_runtime.jsx)("code", {
219
+ className: PluginInventorySettingsTab_module_css_default.cardIdentity,
220
+ title: entryId,
221
+ children: entrySubtitle(entryId)
222
+ })
223
+ }) : null
201
224
  ]
202
225
  }),
203
226
  metadataError === void 0 ? null : (0, react_jsx_runtime.jsx)("p", {
@@ -246,15 +269,14 @@ window.__ModuleLoader__.load({
246
269
  });
247
270
  }
248
271
  const TAG_TONES = {
249
- enabled: "success",
250
272
  disabled: "neutral",
251
273
  conditional: "warning",
252
274
  preset: "info",
253
275
  failed: "danger"
254
276
  };
255
- /** Enablement tag; `kind` selects the palette. */
277
+ /** Enablement tag for the states that depart from the default; a plainly enabled row carries none. */
256
278
  function StateTag({ kind, label }) {
257
- return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
279
+ return kind === "enabled" ? null : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
258
280
  tone: TAG_TONES[kind],
259
281
  children: label
260
282
  });
@@ -314,7 +336,7 @@ window.__ModuleLoader__.load({
314
336
  const selectedRows = selected === void 0 ? [] : selected.rows.filter(rowMatch);
315
337
  const otherPresetMatches = searching ? presets.filter((preset) => preset !== selected && preset.rows.some(rowMatch)) : [];
316
338
  const otherMatchCount = otherPresetMatches.reduce((total, preset) => total + preset.rows.filter(rowMatch).length, 0);
317
- const presetEffectiveOpen = searching || (presetOpen ?? false);
339
+ const presetEffectiveOpen = searching || (presetOpen ?? true);
318
340
  const globalEffectiveOpen = searching || (globalOpen ?? false);
319
341
  const nothingMatches = searching && globalCount === 0 && selectedRows.length === 0 && otherPresetMatches.length === 0;
320
342
  const retry = () => {
@@ -341,7 +363,7 @@ window.__ModuleLoader__.load({
341
363
  failed,
342
364
  expanded,
343
365
  onToggle: toggleRow,
344
- ariaLabel: `${title}${row.entryId === null ? "" : `, ${row.entryId}`}, ${stateText}`,
366
+ ariaLabel: cardLabel(title, row.entryId, stateText),
345
367
  trailing: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [row.enabled === true && showsPhaseDot(row.fiberPhase) ? (0, react_jsx_runtime.jsx)(PhaseDot, {
346
368
  phase: row.fiberPhase,
347
369
  t
@@ -379,7 +401,7 @@ window.__ModuleLoader__.load({
379
401
  failed,
380
402
  expanded,
381
403
  onToggle: toggleRow,
382
- ariaLabel: `${title}, ${entry.entryId}, ${stateText}`,
404
+ ariaLabel: cardLabel(title, entry.entryId, stateText),
383
405
  trailing: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [entry.enabled && showsPhaseDot(entry.fiberPhase) ? (0, react_jsx_runtime.jsx)(PhaseDot, {
384
406
  phase: entry.fiberPhase,
385
407
  t
@@ -436,10 +458,17 @@ window.__ModuleLoader__.load({
436
458
  })
437
459
  ]
438
460
  }),
439
- state.status === "loading" ? (0, react_jsx_runtime.jsxs)("p", {
440
- className: `${PluginInventorySettingsTab_module_css_default.status} ${PluginInventorySettingsTab_module_css_default.statusWithDot}`,
461
+ state.status === "loading" ? (0, react_jsx_runtime.jsxs)("div", {
462
+ className: PluginInventorySettingsTab_module_css_default.cards,
441
463
  role: "status",
442
- children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" }), t("loading")]
464
+ children: [(0, react_jsx_runtime.jsx)("span", {
465
+ className: PluginInventorySettingsTab_module_css_default.visuallyHidden,
466
+ children: t("loading")
467
+ }), SKELETON_CARDS.map((slot) => (0, react_jsx_runtime.jsxs)("div", {
468
+ className: PluginInventorySettingsTab_module_css_default.skeletonCard,
469
+ "aria-hidden": "true",
470
+ children: [(0, react_jsx_runtime.jsx)("span", { className: PluginInventorySettingsTab_module_css_default.skeletonBar }), (0, react_jsx_runtime.jsx)("span", { className: PluginInventorySettingsTab_module_css_default.skeletonBar })]
471
+ }, slot))]
443
472
  }) : null,
444
473
  state.status === "error" ? (0, react_jsx_runtime.jsxs)("div", {
445
474
  className: PluginInventorySettingsTab_module_css_default.failure,
@@ -546,9 +575,9 @@ window.__ModuleLoader__.load({
546
575
  }),
547
576
  (0, react_jsx_runtime.jsxs)("p", {
548
577
  className: PluginInventorySettingsTab_module_css_default.groupSub,
549
- children: [t("presetSubtitle"), (0, react_jsx_runtime.jsx)("span", {
578
+ children: [(0, react_jsx_runtime.jsx)("span", { children: t("presetSubtitle") }), (0, react_jsx_runtime.jsx)("span", {
550
579
  "data-preset-plugin-count": selectedRows.length,
551
- children: ` · ${String(selectedRows.length)} ${t("countUnit")}`
580
+ children: `${String(selectedRows.length)} ${t("countUnit")}`
552
581
  })]
553
582
  }),
554
583
  presetEffectiveOpen ? (0, react_jsx_runtime.jsxs)("div", {
@@ -606,10 +635,10 @@ window.__ModuleLoader__.load({
606
635
  (0, react_jsx_runtime.jsxs)("p", {
607
636
  className: PluginInventorySettingsTab_module_css_default.groupSub,
608
637
  children: [
609
- t("globalSubtitle"),
638
+ (0, react_jsx_runtime.jsx)("span", { children: t("globalSubtitle") }),
610
639
  (0, react_jsx_runtime.jsx)("span", {
611
640
  "data-plugin-count": globalCount,
612
- children: ` · ${String(globalCount)} ${t("countUnit")}`
641
+ children: `${String(globalCount)} ${t("countUnit")}`
613
642
  }),
614
643
  filteredFailed.length > 0 ? (0, react_jsx_runtime.jsxs)("span", {
615
644
  className: PluginInventorySettingsTab_module_css_default.failedCount,
@@ -708,7 +737,7 @@ window.__ModuleLoader__.load({
708
737
  enabledTag: "Enabled",
709
738
  disabledTag: "Disabled",
710
739
  conditionalTag: "Conditional",
711
- presetEnabledTag: "Enabled via presets",
740
+ presetEnabledTag: "Via presets",
712
741
  failedTag: "Failed",
713
742
  moduleLabel: "Module",
714
743
  fromPreset: "From",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-settings-plugin-inventory",
3
3
  "description": "Read-only Cordis Loader inventory tab in Web Plugins settings",
4
- "version": "0.1.7-rc.1",
4
+ "version": "0.2.0-rc.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -46,19 +46,19 @@
46
46
  "@types/react": "~18.3.1",
47
47
  "react": "^18.2.0",
48
48
  "react-dom": "^18.2.0",
49
- "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.1",
50
- "@deepseek-ai/dsh-client-locale": "0.1.7-rc.1",
51
- "@deepseek-ai/dsh-client-test-runtime": "0.1.7-rc.1",
52
- "@deepseek-ai/dsh-client-ui-agent-preset": "0.1.7-rc.1",
53
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.1",
54
- "@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.1",
55
- "@deepseek-ai/dsh-package-manifest": "0.1.7-rc.1",
56
- "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.1",
49
+ "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
50
+ "@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
51
+ "@deepseek-ai/dsh-client-test-runtime": "0.2.0-rc.1",
52
+ "@deepseek-ai/dsh-client-ui-agent-preset": "0.2.0-rc.1",
53
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1",
54
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
55
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
56
+ "@deepseek-ai/dsh-package-manifest": "0.2.0-rc.1",
57
57
  "@deepseek-ai/cordis": "~4.0.4",
58
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.1",
59
- "@deepseek-ai/dsh-agent-preset-registry": "0.1.7-rc.1",
60
- "@deepseek-ai/dsh-client-modules": "0.1.7-rc.1",
61
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.1"
58
+ "@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.1",
59
+ "@deepseek-ai/dsh-client-modules": "0.2.0-rc.1",
60
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.1",
61
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1"
62
62
  },
63
63
  "files": [
64
64
  "lib/index.js",