dsh-plugin-shop 0.1.2 → 0.1.4

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.
Files changed (2) hide show
  1. package/README.md +133 -39
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,64 +1,158 @@
1
+ <div align="center">
2
+
1
3
  # dsh-plugin-shop
2
4
 
5
+ **The plugin store for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)** — browse a catalog of
6
+ dsh plugins, install one with a single confirmation, and manage what you have, from a tab inside Settings.
7
+
8
+ [![npm](https://img.shields.io/npm/v/dsh-plugin-shop?logo=npm&color=cb3837)](https://www.npmjs.com/package/dsh-plugin-shop)
9
+ [![license](https://img.shields.io/npm/l/dsh-plugin-shop?color=blue)](https://github.com/LivXue/dsh-plugin-shop/blob/main/LICENSE)
10
+ [![plugin CI](https://github.com/LivXue/dsh-plugin-shop/actions/workflows/plugin.yml/badge.svg)](https://github.com/LivXue/dsh-plugin-shop/actions/workflows/plugin.yml)
11
+ [![catalog](https://github.com/LivXue/dsh-plugin-shop/actions/workflows/daily.yml/badge.svg)](https://github.com/LivXue/dsh-plugin-shop/actions/workflows/daily.yml)
12
+
3
13
  English | [中文](https://github.com/LivXue/dsh-plugin-shop/blob/main/packages/dsh-plugin-shop/docs/README.zh.md)
4
14
 
5
- The plugin store for [DeepSeek Harness](https://github.com/deepseek-harness), as a
6
- tab inside the Harness settings surface: browse a catalog of dsh plugins, install
7
- one with a single confirmation, enable or disable what is installed, and see what
8
- has a newer version.
15
+ </div>
16
+
17
+ ---
18
+
19
+ ## 🖼️ Screenshots
20
+
21
+ <div align="center">
22
+ <img src="https://raw.githubusercontent.com/LivXue/dsh-plugin-shop/main/docs/images/shelf-light.png" alt="The plugin store shelf inside dsh Settings" width="860">
23
+ </div>
24
+
25
+ <table>
26
+ <tr>
27
+ <td width="50%"><img src="https://raw.githubusercontent.com/LivXue/dsh-plugin-shop/main/docs/images/gate-light.png" alt="Installing an unreviewed plugin requires an explicit acknowledgement"></td>
28
+ <td width="50%"><img src="https://raw.githubusercontent.com/LivXue/dsh-plugin-shop/main/docs/images/shelf-dark.png" alt="The same shelf in the dark theme"></td>
29
+ </tr>
30
+ <tr>
31
+ <td align="center"><sub>Installing an unreviewed plugin requires an explicit acknowledgement</sub></td>
32
+ <td align="center"><sub>The same shelf in the dark theme</sub></td>
33
+ </tr>
34
+ </table>
35
+
36
+ ## 📦 Install
37
+
38
+ Two tracks below. They do the same thing; pick the one that matches who is reading.
39
+
40
+ ### 🧑 For people
41
+
42
+ ```sh
43
+ dsh plugin --profile web add dsh-plugin-shop
44
+ ```
45
+
46
+ Replace `web` with your profile if you use another one. Then restart `dsh` once — a
47
+ newly added bundle is not applied to a running process — and open
48
+
49
+ > **Settings → Plugins → Plugin store**
50
+
51
+ You land on a shelf of plugin cards with a search box. The first load reads the catalog
52
+ over the network and can take a few seconds; a shimmering skeleton stands in until the
53
+ cards arrive.
54
+
55
+ ### 🤖 For agents
9
56
 
10
- ## Install
57
+ Non-interactive, no prompts, nothing to confirm. `--profile` is **mandatory** —
58
+ without it `dsh plugin` exits with
59
+ `error: required option '--profile <name>' not specified`.
60
+
61
+ **1. Resolve a profile name.** Profiles are directories under `$DSH_HOME/profiles`
62
+ (`$DSH_HOME` defaults to `~/.dsh`). `node_modules` appears there too and is *not* a
63
+ profile.
64
+
65
+ ```sh
66
+ ls -1 "${DSH_HOME:-$HOME/.dsh}/profiles" | grep -v '^node_modules$'
67
+ ```
68
+
69
+ **2. Install.**
70
+
71
+ ```sh
72
+ dsh plugin --profile <profile> add dsh-plugin-shop
73
+ ```
74
+
75
+ **3. Verify — do not skip this.** A zero exit from step 2 means pnpm resolved the
76
+ package, not that the profile will load it. Assert on the bundle list:
11
77
 
12
78
  ```sh
13
- dsh plugin --profile <your-profile> add dsh-plugin-shop
79
+ dsh plugin --profile <profile> list --depth 0
14
80
  ```
15
81
 
16
- Restart `dsh` once. The tab appears under **Settings Plugins Plugin store**.
82
+ `dsh-plugin-shop` must appear with a resolved version. If you would rather read the
83
+ manifest directly, the same fact lives at
84
+ `$DSH_HOME/profiles/<profile>/package.json` under `dsh.profile.bundles`.
17
85
 
18
- ## What it does
86
+ **4. Restart the profile** — `dsh --profile <profile>`, or `dsh web` for the web
87
+ profile. Enabling or disabling an *already installed* plugin is hot; adding a new
88
+ bundle is not.
19
89
 
20
- - **Browse and search** the catalog — 1800+ packages harvested from npm by the
21
- `dsh-plugin` keyword, with the author's own summary when they declared one.
22
- - **Install** with one confirmation. An unreviewed plugin requires an explicit
23
- acknowledgement first, because an installed plugin holds the same privileges as
24
- a built-in one: your files, your shell, and the requests sent to the model.
25
- - **Enable / disable** an installed plugin without a restart.
26
- - **Spot outdated installs** against the catalog's current version.
90
+ #### Failure modes
27
91
 
28
- ## How it is put together
92
+ | What you see | What it means | What to do |
93
+ |---|---|---|
94
+ | `error: required option '--profile <name>' not specified` | `--profile` was omitted | Pass it; there is no default |
95
+ | A version older than npm's `latest` gets installed | pnpm 11 holds back very recently published versions | Expected, not an error; the newest lands once its cooldown passes |
96
+ | `client bundles not found ... lib/client.js` | the copy on disk was built without its browser half | Install from npm rather than from a source checkout, or run `pnpm build` in that checkout |
97
+ | `no profile directory found above <path>` | the plugin could not locate its profile | Please report it — this is resolved from `ctx.baseUrl` and should not fail |
98
+ | The tab is missing after a restart | the bundle is not in the profile's `bundles` | Re-run step 3; if it is absent, step 2 did not complete |
29
99
 
30
- Two halves, one package:
100
+ ## What it does
31
101
 
32
- - **Host** (`dsh-plugin-shop`) — fetches the catalog over the network, verifies its
33
- sha256 against the pointer, caches it, and runs `dsh plugin add` under a
34
- per-profile mutex. It exposes exactly five `store/*` Remote methods and nothing
35
- else.
36
- - **Client** (`dsh-plugin-shop/client`) the settings tab. It touches neither the
37
- network nor the filesystem; every effect goes through those five methods.
102
+ | | |
103
+ |---|---|
104
+ | **Browse & search** | 1800+ packages harvested from npm by the `dsh-plugin` keyword, shown with the author's own summary when they declared one |
105
+ | **Install** | One confirmation. An unreviewed plugin requires an explicit acknowledgement first — an installed plugin holds the same privileges as a built-in one |
106
+ | **Enable / disable** | Applies to an installed plugin without a restart |
107
+ | **Outdated installs** | Compared against the catalog's current version |
38
108
 
39
- ## The catalog
109
+ ## 🧩 How it is put together
110
+
111
+ Two halves ship in this one package, and the split between them is the security
112
+ boundary:
113
+
114
+ | Half | Entry | Can reach | Cannot reach |
115
+ |---|---|---|---|
116
+ | **Host** | `dsh-plugin-shop` | The network (catalog fetch and sha256 verify), the filesystem (cache), `dsh plugin add` under a per-profile mutex | — |
117
+ | **Client** | `dsh-plugin-shop/client` | Exactly five `store/*` Remote methods | The network, the filesystem |
118
+
119
+ Compromising the browser half buys an attacker those five calls and nothing more.
120
+
121
+ ## ⚙️ Configuration
122
+
123
+ | Variable | Effect |
124
+ |---|---|
125
+ | `DSH_STORE_CATALOG_URL` | Point the store at your own catalog mirror instead of the public one |
126
+
127
+ ## 📚 The catalog
40
128
 
41
129
  Built daily from the public npm registry and published as static JSON:
42
130
 
43
- - `https://LivXue.github.io/dsh-plugin-shop/v1/index.json` — the pointer, carrying
44
- `schemaVersion`, `builtAt`, and the content hash
45
- - `https://LivXue.github.io/dsh-plugin-shop/v1/plugins.<sha256>.json` — the data
131
+ - [`/v1/index.json`](https://LivXue.github.io/dsh-plugin-shop/v1/index.json) — the pointer, carrying `schemaVersion`, `builtAt`, and the content hash
132
+ - `/v1/plugins.<sha256>.json` the data, content-addressed and safe to cache indefinitely
133
+
134
+ The pointer is small enough to poll. The store verifies the data file's sha256 against
135
+ the pointer before trusting a byte of it.
136
+
137
+ ## ⚠️ What it does not claim
46
138
 
47
- Point the store at your own mirror with `DSH_STORE_CATALOG_URL`.
139
+ A listing is not an endorsement.
48
140
 
49
- ## What it does not claim
141
+ `capabilities` is whatever the author wrote about their own package. **There is no
142
+ sandbox in v0**, and the interface never renders that field as an enforced permission
143
+ list. The `verified` tier means a human read *that exact version*; a newer publish
144
+ downgrades it to `verified-stale` and keeps the review pinned to the version it was
145
+ actually given — so passing review once cannot buy trust for every future release.
50
146
 
51
- A listing is not an endorsement. `capabilities` is whatever the author wrote about
52
- their own package — there is no sandbox in v0, and the UI never renders it as an
53
- enforced permission list. The `verified` tier means a human read that exact
54
- version; a newer publish downgrades to `verified-stale` and keeps the review
55
- pinned to the version it was given.
147
+ ## 🏷️ For plugin authors
56
148
 
57
- ## Author-facing docs
149
+ Add `"keywords": ["dsh-plugin"]` to `package.json` and publish. The daily build finds
150
+ you; nothing is submitted to this project. Declare a `dsh.catalog` section to control
151
+ your own category, summary and capabilities — or omit it, and the catalog derives a
152
+ listing from your npm `description`.
58
153
 
59
- Declaring a `dsh.catalog` section so your plugin lists with your own words:
60
- [docs/schema.md](https://github.com/LivXue/dsh-plugin-shop/blob/main/docs/schema.md).
154
+ Full reference: [docs/schema.md](https://github.com/LivXue/dsh-plugin-shop/blob/main/docs/schema.md).
61
155
 
62
- ## License
156
+ ## 📄 License
63
157
 
64
- MIT
158
+ [MIT](https://github.com/LivXue/dsh-plugin-shop/blob/main/LICENSE) © LivXue
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-shop",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "The DeepSeek Harness plugin store: browse, install, enable, and update dsh plugins from a git-auditable catalog.",
5
5
  "repository": {
6
6
  "type": "git",