@michengai/dsh-skills-manager 0.1.13 → 0.1.15

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.md CHANGED
@@ -23,6 +23,12 @@
23
23
 
24
24
  > DSH Skills Manager is a community-maintained plugin, not an official DeepSeek AI product.
25
25
 
26
+ <p align="center">
27
+ <img src="assets/screenshots/skills-manager.png" alt="Skills Manager settings page" width="960">
28
+ </p>
29
+
30
+ > The screenshot shows DSH-local skills with enable, disable, and delete actions. Shared Agent skills stay read-only.
31
+
26
32
  ## Features
27
33
 
28
34
  - Shows local `$DSH_HOME\skills` and shared `$DSH_AGENTS_HOME\skills` in one Settings page.
@@ -31,8 +37,6 @@
31
37
  - Imports a plugin directory containing `SKILL.md` through the native file picker and confirms every name collision.
32
38
  - Rejects traversal names, imports from the DSH skills directory itself, and symbolic links.
33
39
 
34
- ![Skills Manager settings page](assets/screenshots/skills-manager.png)
35
-
36
40
  ## Prerequisites
37
41
 
38
42
  - A working DeepSeek Harness Web installation with `dsh` available in PowerShell.
@@ -85,6 +89,30 @@ Open **Settings → Skills**, then use the panel as follows:
85
89
  | Replace or delete | Confirm a name collision, or select **Delete** for an unneeded local skill. | DSH-local skills only |
86
90
  | Inspect shared skills | Review shared Agent skills without changing their metadata. | Read-only |
87
91
 
92
+ <p align="center">
93
+ <img src="assets/screenshots/skills-public.png" alt="Shared Agent skills remain visible when no local skills are installed" width="960">
94
+ </p>
95
+
96
+ > Shared Agent skills stay visible when the DSH-local group is empty.
97
+
98
+ <p align="center">
99
+ <img src="assets/screenshots/upload-plugin.png" alt="Upload plugin dialog" width="960">
100
+ </p>
101
+
102
+ > The compact upload dialog accepts a plugin `SKILL.md`, a plugin directory, or drag-and-drop.
103
+
104
+ <p align="center">
105
+ <img src="assets/screenshots/delete-plugin.png" alt="Delete plugin confirmation" width="960">
106
+ </p>
107
+
108
+ > Deleting a DSH-local skill requires confirmation and cannot be undone.
109
+
110
+ <p align="center">
111
+ <img src="assets/screenshots/slash-command.png" alt="Chat slash command after enabling a local skill" width="640">
112
+ </p>
113
+
114
+ > Enabling a DSH-local skill restores its `/` command in the chat composer.
115
+
88
116
  Escape closes only the frontmost upload or confirmation dialog and leaves Settings open.
89
117
 
90
118
  ## Permissions and safety limits
package/README.zh-CN.md CHANGED
@@ -23,6 +23,12 @@
23
23
 
24
24
  > DSH Skills Manager 是社区维护的插件,并非 DeepSeek AI 官方产品。
25
25
 
26
+ <p align="center">
27
+ <img src="assets/screenshots/skills-manager.png" alt="技能管理设置页面" width="960">
28
+ </p>
29
+
30
+ > 截图展示 DSH 本地技能的启用、停用和删除入口。公共 Agent 技能保持只读,不显示操作按钮。
31
+
26
32
  ## 功能概览
27
33
 
28
34
  - 在同一设置页查看本地 `$DSH_HOME\skills` 与公共 `$DSH_AGENTS_HOME\skills`。
@@ -31,8 +37,6 @@
31
37
  - 使用系统文件选择器导入包含 `SKILL.md` 的插件目录,并对同名覆盖强制确认。
32
38
  - 拒绝目录穿越、从 DSH 技能目录导入自身及符号链接导入。
33
39
 
34
- ![技能管理设置页面](assets/screenshots/skills-manager.png)
35
-
36
40
  ## 前置条件
37
41
 
38
42
  - 已可正常运行 DeepSeek Harness Web,且可在 PowerShell 中使用 `dsh`。
@@ -85,6 +89,30 @@ dsh --profile web --dump-config
85
89
  | 覆盖或删除 | 同名时确认覆盖;使用「删除」移除不再需要的本地技能。 | 仅 DSH 本地技能 |
86
90
  | 查看公共技能 | 查看公共 Agent 技能,不修改其元数据。 | 只读 |
87
91
 
92
+ <p align="center">
93
+ <img src="assets/screenshots/skills-public.png" alt="未安装本地技能时仍可查看公共 Agent 技能" width="960">
94
+ </p>
95
+
96
+ > 本地 DSH 技能为空时,公共 Agent 技能仍然可见。
97
+
98
+ <p align="center">
99
+ <img src="assets/screenshots/upload-plugin.png" alt="上传插件弹窗" width="960">
100
+ </p>
101
+
102
+ > 紧凑上传弹窗支持选择 `SKILL.md`、选择插件目录,或直接拖放文件。
103
+
104
+ <p align="center">
105
+ <img src="assets/screenshots/delete-plugin.png" alt="删除插件确认框" width="960">
106
+ </p>
107
+
108
+ > 删除 DSH 本地技能需要确认,删除后无法恢复。
109
+
110
+ <p align="center">
111
+ <img src="assets/screenshots/slash-command.png" alt="启用本地技能后的斜杠命令" width="640">
112
+ </p>
113
+
114
+ > 启用 DSH 本地技能后,聊天输入框会恢复对应的 `/` 命令。
115
+
88
116
  按 ESC 只关闭最上层上传框或确认框,设置页会保持打开。
89
117
 
90
118
  ## 权限与安全边界
package/lib/client.js CHANGED
@@ -183,15 +183,15 @@ window.__ModuleLoader__.load({
183
183
  };
184
184
 
185
185
  var CSS = `
186
- .dssm-section{display:flex;min-width:0;flex-direction:column;gap:20px;color:var(--dsw-alias-label-primary)}
187
- .dssm-toolbar{display:flex;align-items:flex-start;gap:16px;padding-bottom:16px;border-bottom:1px solid var(--dsw-alias-border-l2)}
188
- .dssm-title{margin:0;font-size:20px;line-height:28px;font-weight:650;letter-spacing:-.2px}.dssm-desc{margin:4px 0 0;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}
189
- .dssm-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.dssm-btn{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:0 13px;border:1px solid transparent;border-radius:8px;background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);font:inherit;font-size:13px;font-weight:550;cursor:pointer;transition:opacity 180ms ease,background 180ms ease,border-color 180ms ease}
186
+ .dssm-section{box-sizing:border-box;display:flex;min-width:0;max-width:760px;width:100%;margin:0 auto;flex-direction:column;gap:16px;padding:0 0 32px;color:var(--dsw-alias-label-primary)}
187
+ .dssm-toolbar{display:flex;align-items:flex-start;gap:16px;padding-bottom:12px}
188
+ .dssm-title{margin:0;font-size:20px;line-height:28px;font-weight:650;letter-spacing:-.2px}.dssm-desc{margin:4px 0 0;max-width:42em;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}
189
+ .dssm-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.dssm-btn{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;min-height:32px;padding:0 12px;border:1px solid transparent;border-radius:8px;background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);font:inherit;font-size:13px;font-weight:550;cursor:pointer;transition:opacity 180ms ease,background 180ms ease,border-color 180ms ease}
190
190
  .dssm-btn:hover:not(:disabled){opacity:.9}.dssm-btn:disabled{opacity:.5;cursor:default}.dssm-btn-secondary{background:transparent;border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary)}.dssm-btn-danger{background:transparent;border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}
191
191
  .dssm-btn:focus-visible,.dssm-dropzone:focus-visible,.dssm-icon-btn:focus-visible{outline:2px solid var(--dsw-alias-state-success-primary);outline-offset:2px}.dssm-summary{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-2)}
192
192
  .dssm-summary-count{font-size:18px;font-weight:650}.dssm-summary-label{color:var(--dsw-alias-label-secondary);font-size:12px}.dssm-summary-separator{width:1px;height:24px;background:var(--dsw-alias-border-l2)}
193
193
  .dssm-group{display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2)}.dssm-group-head{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--dsw-alias-border-l1)}.dssm-group-title{margin:0;font-size:14px;font-weight:600}.dssm-count{color:var(--dsw-alias-label-tertiary);font-size:12px}.dssm-path{margin-left:auto;max-width:48%;overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:12px;text-overflow:ellipsis;white-space:nowrap}
194
- .dssm-row{display:flex;align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid var(--dsw-alias-border-l1)}.dssm-row:last-child{border-bottom:0}.dssm-row-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:3px}.dssm-row-id{display:flex;align-items:center;gap:7px;min-width:0}.dssm-row-name{overflow:hidden;font-size:14px;font-weight:560;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.dssm-tag{flex:none;padding:1px 6px;border:1px solid var(--dsw-alias-border-l3);border-radius:4px;color:var(--dsw-alias-label-secondary);font-size:11px;line-height:16px}.dssm-tag-on{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.dssm-tag-off{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.dssm-note{overflow:hidden;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}.dssm-empty{padding:28px 16px;color:var(--dsw-alias-label-tertiary);font-size:13px;text-align:center}.dssm-error{color:var(--dsw-alias-state-error-primary);font-size:13px;line-height:20px}
194
+ .dssm-row{display:flex;align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid var(--dsw-alias-border-l1)}.dssm-row:last-child{border-bottom:0}.dssm-row-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:3px}.dssm-row-id{display:flex;align-items:center;gap:7px;min-width:0}.dssm-row-name{overflow:hidden;font-size:13px;font-weight:500;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.dssm-tag{flex:none;padding:1px 6px;border:1px solid var(--dsw-alias-border-l3);border-radius:4px;color:var(--dsw-alias-label-secondary);font-size:11px;line-height:16px}.dssm-tag-on{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.dssm-tag-off{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.dssm-note{overflow:hidden;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}.dssm-empty{padding:28px 16px;color:var(--dsw-alias-label-tertiary);font-size:13px;text-align:center}.dssm-error{color:var(--dsw-alias-state-error-primary);font-size:13px;line-height:20px}
195
195
  .dssm-mask{position:fixed;z-index:1100;inset:0;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%;padding:24px;background:rgba(0,0,0,.58)}.dssm-modal{box-sizing:border-box;display:flex;width:min(480px,100%)!important;height:auto!important;max-width:100%;max-height:100%;min-width:0;min-height:0;flex:0 0 auto!important;align-self:center!important;flex-direction:column;gap:18px;padding:24px;overflow:auto;border:1px solid var(--dsw-alias-border-l2);border-radius:16px;background:var(--dsw-alias-bg-layer-2);box-shadow:var(--dsw-shadow-lv3)}.dssm-modal-upload{width:min(480px,100%)!important;height:auto!important;max-width:100%;max-height:100%;align-self:center!important;flex:0 0 auto!important;overflow:auto}.dssm-modal-head{display:flex;align-items:center;gap:12px}.dssm-modal-title{margin:0;flex:1;font-size:17px;line-height:24px;font-weight:650}.dssm-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:0;border-radius:7px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:20px;line-height:1;cursor:pointer}.dssm-icon-btn:hover{background:var(--dsw-alias-interactive-bg-hover)}
196
196
  .dssm-dropzone{box-sizing:border-box;display:flex;width:100%;min-height:144px;flex:none;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:18px;border:1px dashed var(--dsw-alias-border-l3);border-radius:12px;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);cursor:pointer;transition:border-color 180ms ease,background 180ms ease}.dssm-dropzone:hover,.dssm-dropzone-active{border-color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-interactive-bg-hover)}.dssm-dropzone-title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:560}.dssm-dropzone-copy{font-size:12px;line-height:18px;text-align:center}.dssm-file{display:flex;align-items:center;gap:8px;padding:9px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;color:var(--dsw-alias-label-primary);font-size:13px}.dssm-file-name{overflow:hidden;flex:1;text-overflow:ellipsis;white-space:nowrap}.dssm-modal-head,.dssm-file,.dssm-modal-actions{flex:none}.dssm-modal-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px}.dssm-hidden-input{display:none}
197
197
  @media (max-width:560px){.dssm-mask{padding:12px;align-items:center}.dssm-modal{width:100%!important;height:auto!important;padding:16px;gap:12px;align-self:center!important}.dssm-modal-upload{width:100%!important;align-self:center!important}.dssm-toolbar{flex-wrap:wrap}.dssm-actions{margin-left:0}.dssm-path{display:none}.dssm-row{align-items:flex-start;flex-wrap:wrap}.dssm-row>.dssm-btn{margin-left:auto}.dssm-modal-actions{justify-content:stretch}.dssm-modal-actions .dssm-btn{flex:1 1 auto}}@media (prefers-reduced-motion:reduce){.dssm-btn,.dssm-dropzone{transition:none}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michengai/dsh-skills-manager",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "NPM-installable DSH Web plugin for managing local skills and viewing shared Agent skills safely.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {