{"_id":"@dsh-mixxed/dsh-client-ui-settings-skills","_rev":"2-5c395a198ab5ca2cf0c9b6f10ed92031","name":"@dsh-mixxed/dsh-client-ui-settings-skills","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.2":{"name":"@dsh-mixxed/dsh-client-ui-settings-skills","version":"0.1.2","keywords":["dsh","plugin","deepseek","settings","skills"],"license":"MIT","_id":"@dsh-mixxed/dsh-client-ui-settings-skills@0.1.2","maintainers":[{"name":"dragons96999","email":"dragons96999@163.com"}],"homepage":"https://github.com/dsh-mixxed/dsh-client-ui-settings-skills#readme","bugs":{"url":"https://github.com/dsh-mixxed/dsh-client-ui-settings-skills/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-slots"],"platform":"web"}},"dist":{"shasum":"f57538fcc39995496ce23180ff1a1e10c8688c98","tarball":"https://registry.npmjs.org/@dsh-mixxed/dsh-client-ui-settings-skills/-/dsh-client-ui-settings-skills-0.1.2.tgz","fileCount":8,"integrity":"sha512-VtQhFb915WItNtgW5zyKjU42Gc6tG7twd0b/XIp3BcE2e6U3ZySknvptUdE/0jK6/pC4cgaaPYKjy3h2iHrVDw==","signatures":[{"sig":"MEYCIQCIKK8qL9iUD7Ou7Pn2pdudsWcoU/d4lI/xbPTCz53bmAIhAJ0qh58sROLdi6gBuozMaXg6vDFtI6ZVVUI2/As0ZyU8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":982747},"type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"c42832350dc7cde2cf89eb83552d15b82e24baf5","scripts":{"pack":"npm pack","test":"vitest run","build":"node scripts/build.mjs","prepack":"npm run build","typecheck":"tsc -p tsconfig.json"},"_npmUser":{"name":"dragons96999","email":"dragons96999@163.com"},"repository":{"url":"git+https://github.com/dsh-mixxed/dsh-client-ui-settings-skills.git","type":"git"},"_npmVersion":"11.9.0","description":"Out-of-tree dsh plugin: a Skill management page in Web Settings (read-only catalog over harness / user / workspace dimensions).","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"18.3.1","vitest":"^3.0.0","esbuild":"^0.25.0","react-dom":"18.3.1","typescript":"^5.7.2","@types/node":"^24.0.0","@types/react":"^18.3.12","lightningcss":"^1.29.0","@types/react-dom":"18.3.0","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-agent":"0.1.0-rc.6","@deepseek-ai/dsh-scope":"0.1.0-rc.6","@deepseek-ai/dsh-skill":"0.1.0-rc.6","@deepseek-ai/dsh-session":"0.1.0-rc.6","@deepseek-ai/schemastery":"3.18.1","@deepseek-ai/dsh-settings":"0.1.0-rc.6","@deepseek-ai/dsh-workspace":"0.1.0-rc.6","@deepseek-ai/dsh-agent-presets":"0.1.0-rc.6","@deepseek-ai/dsh-client-locale":"0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-host-webserver":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-settings":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-primitives":"0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-client-ui-settings-skills_0.1.2_1786856929019_0.04841883249524237","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dsh-mixxed/dsh-client-ui-settings-skills","version":"0.1.3","description":"Out-of-tree dsh plugin: a Skill management page in Web Settings (read-only catalog over harness / user / workspace dimensions).","type":"module","license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dsh-mixxed/dsh-client-ui-settings-skills.git"},"keywords":["dsh","plugin","deepseek","settings","skills"],"exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"dsh":{"client":{"platform":"web","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-slots"]},"bundle":{"patch":"./cordis.patch.yml"}},"scripts":{"build":"node scripts/build.mjs","prepack":"npm run build","typecheck":"tsc -p tsconfig.json","test":"vitest run","pack":"npm pack"},"devDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-agent":"0.1.0-rc.6","@deepseek-ai/dsh-agent-presets":"0.1.0-rc.6","@deepseek-ai/dsh-client-locale":"0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-primitives":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-settings":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"0.1.0-rc.6","@deepseek-ai/dsh-host-webserver":"0.1.0-rc.6","@deepseek-ai/dsh-scope":"0.1.0-rc.6","@deepseek-ai/dsh-session":"0.1.0-rc.6","@deepseek-ai/dsh-settings":"0.1.0-rc.6","@deepseek-ai/dsh-skill":"0.1.0-rc.6","@deepseek-ai/dsh-workspace":"0.1.0-rc.6","@deepseek-ai/schemastery":"3.18.1","@types/node":"^24.0.0","@types/react":"^18.3.12","@types/react-dom":"18.3.0","esbuild":"^0.25.0","jsdom":"^26.0.0","lightningcss":"^1.29.0","react":"18.3.1","react-dom":"18.3.1","typescript":"^5.7.2","vitest":"^3.0.0"},"gitHead":"a1f1f1f12755bbe9037685d2ae83be468e4ac304","_id":"@dsh-mixxed/dsh-client-ui-settings-skills@0.1.3","bugs":{"url":"https://github.com/dsh-mixxed/dsh-client-ui-settings-skills/issues"},"homepage":"https://github.com/dsh-mixxed/dsh-client-ui-settings-skills#readme","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-hcGhhzCGGCSGMaONHo/K6HOiNlJvvTc7ajQ6dls7HsAEoUDCi/i5JRK88cfhjwH6qlxHgvjlvKoA9DRAgZYoxg==","shasum":"7bd90be94254ae55d44f4bd2c031ebb6dd35622f","tarball":"https://registry.npmjs.org/@dsh-mixxed/dsh-client-ui-settings-skills/-/dsh-client-ui-settings-skills-0.1.3.tgz","fileCount":8,"unpackedSize":975960,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDynEC0a8A7C2vgAfY3avuOhWpeqIY3kBFgC9W8n44cqAIgTvNG/4X482mrSbpG3ojoyeH/p48GkzTD86l8t9lXHYA="}]},"_npmUser":{"name":"dragons96999","email":"dragons96999@163.com"},"directories":{},"maintainers":[{"name":"dragons96999","email":"dragons96999@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-client-ui-settings-skills_0.1.3_1788516795700_0.8197565545766912"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-16T05:08:48.853Z","modified":"2026-09-04T10:13:16.030Z","0.1.2":"2026-08-16T05:08:49.167Z","0.1.3":"2026-09-04T10:13:15.863Z"},"bugs":{"url":"https://github.com/dsh-mixxed/dsh-client-ui-settings-skills/issues"},"license":"MIT","homepage":"https://github.com/dsh-mixxed/dsh-client-ui-settings-skills#readme","keywords":["dsh","plugin","deepseek","settings","skills"],"repository":{"type":"git","url":"git+https://github.com/dsh-mixxed/dsh-client-ui-settings-skills.git"},"description":"Out-of-tree dsh plugin: a Skill management page in Web Settings (read-only catalog over harness / user / workspace dimensions).","maintainers":[{"name":"dragons96999","email":"dragons96999@163.com"}],"readme":"# ui-settings-skills\n\nA dsh plugin that adds a **Skill management** page to Web Settings, organized by workspace.\n\nBuilt as a fully out-of-tree plugin — the deepseek-harness source stays untouched. It registers a `settings.section` slot (the page appears in Settings → **技能 / Skills**) and serves its skill catalog over its own HTTP route (`ctx.webServer`).\n\n## Install\n\n1. Install the plugin from npm (published as `@dsh-mixxed/dsh-client-ui-settings-skills`):\n\n   ```sh\n   dsh plugin --profile web add @dsh-mixxed/dsh-client-ui-settings-skills\n   ```\n\n   The package declares `dsh.bundle` (its bundled `cordis.patch.yml`), so `dsh plugin add` automatically appends it to the profile's `dsh.profile.bundles` layer stack and the plugin mounts on the next boot — **no manual `cordis.patch.yml` editing**.\n\n   Upgrading an install that predates the bundle declaration: remove the legacy `ui-settings-skills` row from `$DSH_HOME/profiles/<name>/cordis.patch.yml` — the bundle layer now supplies it, and leaving both would mount the id twice.\n\n2. Restart the profile (new plugins are discovered at boot), then open Settings → **技能 / Skills**.\n\n### Building from source (development / offline)\n\n```sh\npnpm install\npnpm run typecheck\npnpm test\npnpm run build\nnpm pack          # produces dsh-mixxed-dsh-client-ui-settings-skills-<version>.tgz\ndsh plugin --profile web add ./dsh-mixxed-dsh-client-ui-settings-skills-<version>.tgz\n```\n\n## Features\n\n- One tab per workspace, with global and user-level skills folded into every workspace view\n- **Manages only user-level skills (`~/.agents/skills`) and project skills** — preset-loaded (`custom`) and built-in skills are never shown or toggled\n- Search box that filters skills by name or description\n- Localized scope badges on every row (用户 / User, 工作区 / Workspace)\n- Skill descriptions clamp to two lines, with the full text shown on hover\n- **Enable/disable toggles** on every managed row — see [Skill toggles](#skill-toggles)\n\n## Skill toggles\n\nEvery managed skill row carries a switch. Turning a skill **off**:\n\n- removes it from the model catalog (`tool-skill`) and the `/name` injection boundary,\n- removes it from the `/` command menu in the conversation composer,\n- takes effect immediately — the next `/` open reflects the change.\n\nScope semantics:\n\n- **User-level skills** (`~/.agents/skills`) toggle globally across every workspace.\n- **Project skills** toggle per workspace: the same skill can stay enabled in one workspace and disabled in another.\n\nState persists in the settings document (`ui-settings-skills-policy` namespace), so it survives profile restarts, and turning a skill back **on** restores it everywhere.\n\n> Preset-loaded (`custom`) and built-in skills are never managed and never shown on the page.\n\n## Verify\n\n```sh\ndsh --profile <name> --dump-config | Select-String ui-settings-skills\n```\n\nThe composed config shows the `ui-settings-skills` row, and `$DSH_HOME/profiles/<name>/package.json` lists `@dsh-mixxed/dsh-client-ui-settings-skills` under `dsh.profile.bundles` (auto-appended by `dsh plugin add`).\n\nAfter the restart, the Skills page shows one tab per workspace, a search box, and localized skill rows.\n\n## Config (optional)\n\nThe plugin runs in the `host` role by default (routes + settings namespace + shadowing provider). A `policy` role registers only the shadowing provider — no namespace, no routes. Override it from your profile's own `cordis.patch.yml` — the user layer is applied after the bundle layer, so an id-targeted patch overrides the bundled mount row:\n\n```yaml\n- id: ui-settings-skills\n  name: \"@dsh-mixxed/dsh-client-ui-settings-skills\"\n  config:\n    role: policy      # default 'host'\n```\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}