@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 +51 -5
- package/README.md +5 -5
- package/README.zh.md +5 -5
- package/lib/client.js +51 -22
- package/package.json +13 -13
package/README.i18n.yaml
CHANGED
|
@@ -1,6 +1,52 @@
|
|
|
1
|
-
# Bilingual-pair consistency record (docs/i18n/README.md):
|
|
2
|
-
#
|
|
3
|
-
#
|
|
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
|
-
|
|
6
|
-
|
|
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;
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
34
|
+
每张收起的卡片使用插件可用的本地化标题与描述;描述最多显示两行,展开卡片后显示全文。设置页会缩短字面的包名或模块名回退值,移除 npm scope 以及 `cordis:`、`cordis-plugin-` 或 `dsh-`/`dsh-host-`/`dsh-client-` 前缀;locale 标题保持原样。Host 在 `meta` 中提供 locale 与包字段的回退结果,Client 选择当前语言。详情与搜索仍保留完整模块标识。缺失的描述不显示,元信息诊断随卡片展示。这种短名显示仅用于设置页,不影响侧栏的插件页。
|
|
35
35
|
|
|
36
|
-
|
|
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
|
|
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
|
|
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}.
|
|
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.
|
|
212
|
+
className: PluginInventorySettingsTab_module_css_default.cardDescription,
|
|
193
213
|
id: descriptionId,
|
|
194
214
|
children: description
|
|
195
215
|
}),
|
|
196
|
-
entryId
|
|
197
|
-
className: PluginInventorySettingsTab_module_css_default.
|
|
198
|
-
|
|
199
|
-
|
|
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
|
|
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 ??
|
|
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:
|
|
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:
|
|
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)("
|
|
440
|
-
className:
|
|
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)(
|
|
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:
|
|
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:
|
|
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: "
|
|
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.
|
|
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.
|
|
50
|
-
"@deepseek-ai/dsh-client-locale": "0.
|
|
51
|
-
"@deepseek-ai/dsh-client-test-runtime": "0.
|
|
52
|
-
"@deepseek-ai/dsh-client-ui-agent-preset": "0.
|
|
53
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.
|
|
54
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.
|
|
55
|
-
"@deepseek-ai/dsh-
|
|
56
|
-
"@deepseek-ai/dsh-
|
|
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-
|
|
59
|
-
"@deepseek-ai/dsh-
|
|
60
|
-
"@deepseek-ai/dsh-client-
|
|
61
|
-
"@deepseek-ai/dsh-client-
|
|
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",
|