@stolyarovmn/dsh-ui-registry-aggregator 0.4.17 → 0.5.0
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 +93 -204
- package/client.js +1877 -0
- package/cordis.patch.yml +0 -3
- package/index.js +198 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +87 -91
- package/source-core.js +1166 -0
- package/lib/client.js +0 -2384
- package/lib/core.js +0 -1599
- package/lib/index.js +0 -254
package/README.md
CHANGED
|
@@ -1,225 +1,114 @@
|
|
|
1
|
-
# Registry Aggregator for DeepSeek Harness
|
|
1
|
+
# Registry Aggregator for DeepSeek Harness 0.2.x
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This branch is the clean DSH `0.2.0` implementation line. It does **not** carry compatibility code or UI workarounds from DSH `0.1.x`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Current stable version: `0.5.0`
|
|
6
|
+
Current validation baseline: DSH `v0.2.0-rc.2`. Compatibility checks use the actual running DSH version from the active installation manifest rather than a hardcoded RC.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
## Install from npm
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
```powershell
|
|
11
|
+
$DSH_VERSION = "0.2.0-rc.2"
|
|
12
|
+
$PROFILE = "dsh-020-test"
|
|
13
|
+
$env:DSH_HOME = "$env:USERPROFILE\.dsh-020-test"
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Search across connected sources, filter results, inspect evidence, and install a verified DSH bundle without leaving DeepSeek Harness.
|
|
16
|
-
|
|
17
|
-

|
|
18
|
-
|
|
19
|
-
## Highlights
|
|
20
|
-
|
|
21
|
-
- **Federated Sources** — combine npm, GitHub, and compatible JSON catalogs.
|
|
22
|
-
- **Browse** — search all enabled sources as one deduplicated index.
|
|
23
|
-
- **Verified DSH bundles** — npm/GitHub candidates are checked for a root `dsh.bundle.patch` before they are exposed as installable results.
|
|
24
|
-
- **Evidence** — display release channel, GitHub stars, npm 30-day downloads, freshness, source metadata, and declared DSH compatibility when available.
|
|
25
|
-
- **Filters** — stable releases, age, category, and DSH metadata.
|
|
26
|
-
- **Multi-sort** — compose Stars, Downloads, Freshness, and Name; each criterion can be ascending or descending.
|
|
27
|
-
- **Pagination** — 20, 50, or 100 items per page with navigation above and below results.
|
|
28
|
-
- **Native install** — one-click installation through the DSH Plugin Manager Host API.
|
|
29
|
-
- **Fallback command** — installable results also expose their `dsh plugin add …` command.
|
|
30
|
-
- **Responsive popularity metadata** — missing GitHub star counts are hydrated after Browse renders, so GitHub metadata cannot block the initial search result.
|
|
31
|
-
|
|
32
|
-
## What's new in 0.4.17
|
|
33
|
-
|
|
34
|
-
0.4.17 promotes the tested `0.4.17-rc.3` build and adds native plugin update workflows while preserving the Plugins-page integration introduced in 0.4.16.
|
|
35
|
-
|
|
36
|
-
- Installed bundles and Registry **Updates** cards can start updates through the native DSH Plugin Manager.
|
|
37
|
-
- **Update all** runs available updates sequentially and can cancel the active/remaining queue.
|
|
38
|
-
- Individual update operations expose native progress/cancellation through Plugin Manager request ids.
|
|
39
|
-
- Installed Browse results with a newer discovered version expose **Update** instead of a disabled install action.
|
|
40
|
-
- **Add a new source** is substantially more compact, with icon-only Cancel/Add actions inline with the fields on desktop.
|
|
41
|
-
- Registry controls, borders, radii, links, and state colors are aligned with the DSH `0.1.7-rc.2` visual language used by this release.
|
|
42
|
-
- DSH runtime dependencies, declared compatibility, and the install smoke test target `0.1.7-rc.2`.
|
|
15
|
+
pnpm dlx "@deepseek-ai/dsh@$DSH_VERSION" plugin --profile $PROFILE add "@stolyarovmn/dsh-ui-registry-aggregator@0.5.0"
|
|
16
|
+
pnpm dlx "@deepseek-ai/dsh@$DSH_VERSION" --profile $PROFILE
|
|
17
|
+
```
|
|
43
18
|
|
|
44
|
-
|
|
19
|
+
The package declares DSH compatibility as `>=0.2.0-rc.2 <0.3.0`. Registry compatibility badges are evaluated against the DSH version that is actually running.
|
|
20
|
+
|
|
21
|
+
## Current milestone
|
|
22
|
+
|
|
23
|
+
The native Plugin Manager remains responsible for package lifecycle. Registry Aggregator adds discovery capabilities around it.
|
|
24
|
+
|
|
25
|
+
Implemented in this milestone:
|
|
26
|
+
|
|
27
|
+
- native `plugins.bundle.config` integration;
|
|
28
|
+
- `Sources | Browse | Updates` navigation;
|
|
29
|
+
- live source configuration through `ctx.configForms.get('registry-aggregator')`; the bundle slot is presentation-only because DSH does not guarantee a single `form` for bundle-wide pages;
|
|
30
|
+
- built-in npm and GitHub sources;
|
|
31
|
+
- custom JSON and corporate catalog sources;
|
|
32
|
+
- Host-side health checks and discovered-item counts;
|
|
33
|
+
- per-source enable/disable, add, remove, refresh, copy-address, count, and error state;
|
|
34
|
+
- DSH 0.2-native switch geometry and icon-action sizing copied under the plugin namespace;
|
|
35
|
+
- authenticated Host RPC over the DSH Connection service;
|
|
36
|
+
- bounded responses, request timeouts, redirect validation, DNS pinning, and private-network blocking;
|
|
37
|
+
- no duplicate `Installed` view;
|
|
38
|
+
- live federated Browse search across enabled npm, GitHub, custom JSON, and corporate sources;
|
|
39
|
+
- compact single-row source/release/freshness/tag/compatibility/page-size filters on desktop, with responsive wrapping below 900px, multi-source metadata, and 20/50/100 pagination; compatibility uses the native DSH shield contour as its neutral filter icon;
|
|
40
|
+
- combinable multi-sort criteria for relevance, stars, downloads, freshness, and name with per-criterion direction; when several are active they contribute equally through percentile-normalized composite ranking, so every selected criterion can affect the order;
|
|
41
|
+
- npm 30-day download enrichment plus lazy paired `30d | total` stats for visible npm rows; lifetime totals are summed from the package creation date (or npm's 2015-01-10 data floor) in bounded windows, and the UI never presents a partial lifetime sum as a real total;
|
|
42
|
+
- package freshness distinguishes npm release time from GitHub repository push time, so GitHub metadata churn does not make every item look newly released;
|
|
43
|
+
- best-effort package artwork discovery from the DSH top-level manifest `icon` field, returned to the Client as bounded data URLs with the same SVG/PNG/JPEG/WebP and 256 KiB policy as native DSH metadata;
|
|
44
|
+
- popular/default Browse results when the query is empty;
|
|
45
|
+
- real npm/GitHub source marks and a package icon exposed through the DSH 0.2 manifest contract;
|
|
46
|
+
- horizontal layout containment for narrow Plugin Manager detail panes;
|
|
47
|
+
- one-click Browse installation through the native DSH `remote.pluginManager` service: `inspect` → `installBundle`, installed-state synchronization via `listBundles` / `plugin-manager/changed`, and inline failure reporting;
|
|
48
|
+
- icon-only Browse install states using the same local DSH-style glyph language as the rest of the page;
|
|
49
|
+
- explicit `v<version>` package versions plus lazy manifest evidence for GitHub/npm rows;
|
|
50
|
+
- compatibility evidence against the actual running DSH version, following DSH peer semantics for `@deepseek-ai/dsh` and `@deepseek-ai/dsh-*`; Browse shows `Compatible`, `Incompatible`, or neutral `Not verified` as plain colored text, and can filter by compatibility;
|
|
51
|
+
- live Updates discovery from native installed bundles plus latest npm manifests, with per-package update through `remote.pluginManager.installBundle`;
|
|
52
|
+
- no runtime import of Harness Client implementation packages;
|
|
53
|
+
- Harness-provided React and DSH theme tokens.
|
|
54
|
+
|
|
55
|
+
Known limitations in `0.5.0`:
|
|
56
|
+
|
|
57
|
+
- build-script approval UI remains in the native **Add plugin** dialog;
|
|
58
|
+
- bulk **Update all** / cancel orchestration is not part of the DSH 0.2 line yet;
|
|
59
|
+
- update discovery for GitHub-only installed dependencies without npm package identity is not implemented yet.
|
|
45
60
|
|
|
46
61
|
## Architecture
|
|
47
62
|
|
|
48
63
|
```text
|
|
49
|
-
Plugins
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
64
|
+
DSH Plugins
|
|
65
|
+
└─ Installed
|
|
66
|
+
└─ Registry Aggregator
|
|
67
|
+
└─ plugins.bundle.config
|
|
68
|
+
├─ Sources
|
|
69
|
+
├─ Browse
|
|
70
|
+
└─ Updates
|
|
71
|
+
|
|
72
|
+
Sources UI
|
|
73
|
+
├─ ctx.configForms.get('registry-aggregator')
|
|
74
|
+
│ ├─ snapshot subscription
|
|
75
|
+
│ └─ form.mutate(...) → Host Config.sources
|
|
76
|
+
└─ ctx.connection.rpc.call
|
|
77
|
+
└─ /api/plugin-sources/{health,counts,browse,icons,metadata,download-stats}
|
|
78
|
+
└─ Host source adapters
|
|
79
|
+
├─ npm
|
|
80
|
+
├─ GitHub
|
|
81
|
+
├─ custom-json
|
|
82
|
+
└─ corporate
|
|
83
|
+
|
|
84
|
+
Browse Install / Updates
|
|
85
|
+
└─ native DSH remote.pluginManager
|
|
56
86
|
├─ inspect(spec)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
The browser does not fetch arbitrary catalog URLs directly. External source access happens on the Host side through the authenticated DSH Connection RPC boundary.
|
|
61
|
-
|
|
62
|
-
GitHub star enrichment is intentionally separate from the Browse critical path:
|
|
63
|
-
|
|
64
|
-
```text
|
|
65
|
-
Browse request
|
|
66
|
-
→ discover / verify / filter / sort / paginate
|
|
67
|
-
→ render cards
|
|
68
|
-
→ request missing GitHub stars for visible repositories
|
|
69
|
-
→ update cards in place
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Install
|
|
73
|
-
|
|
74
|
-
### npm
|
|
87
|
+
├─ installBundle(spec)
|
|
88
|
+
└─ listBundles() / plugin-manager/changed
|
|
75
89
|
|
|
76
|
-
|
|
77
|
-
|
|
90
|
+
Enable / disable / uninstall
|
|
91
|
+
└─ native DSH Plugin Manager
|
|
78
92
|
```
|
|
79
93
|
|
|
80
|
-
|
|
94
|
+
## Test from GitHub
|
|
81
95
|
|
|
82
|
-
|
|
83
|
-
pnpm dlx @deepseek-ai/dsh@0.1.7-rc.2 plugin --profile web add @stolyarovmn/dsh-ui-registry-aggregator
|
|
84
|
-
```
|
|
96
|
+
Use a commit SHA from this branch rather than publishing a test package:
|
|
85
97
|
|
|
86
|
-
|
|
98
|
+
```powershell
|
|
99
|
+
$DSH_VERSION = "0.2.0-rc.2"
|
|
100
|
+
$PROFILE = "dsh-020-test"
|
|
101
|
+
$COMMIT = "<commit-sha>"
|
|
102
|
+
$env:DSH_HOME = "$env:USERPROFILE\.dsh-020-test"
|
|
87
103
|
|
|
88
|
-
|
|
89
|
-
pnpm dlx @deepseek-ai/dsh
|
|
104
|
+
pnpm dlx "@deepseek-ai/dsh@$DSH_VERSION" plugin --profile $PROFILE add "github:Stolyarovmn/dsh-ui-registry-aggregator#$COMMIT"
|
|
105
|
+
pnpm dlx "@deepseek-ai/dsh@$DSH_VERSION" --profile $PROFILE
|
|
90
106
|
```
|
|
91
107
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
```text
|
|
95
|
-
Plugins → Installed → @stolyarovmn/dsh-ui-registry-aggregator
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
npm and GitHub sources are added automatically on first use.
|
|
99
|
-
|
|
100
|
-
## Source types
|
|
101
|
-
|
|
102
|
-
| Type | Behavior |
|
|
103
|
-
| --- | --- |
|
|
104
|
-
| `npm` | npm registry discovery using DSH-related package metadata and keywords. |
|
|
105
|
-
| `github` | GitHub repository discovery using DeepSeek-Harness-specific topic intersections. |
|
|
106
|
-
| `dsh-plugin-shop` | JSON catalog adapter for a compatible source endpoint. |
|
|
107
|
-
| `dshplugin-app` | JSON catalog adapter for a dshplugin.app-compatible endpoint. |
|
|
108
|
-
| `custom-json` | Public JSON catalog. |
|
|
109
|
-
| `corporate` | JSON catalog with Host-controlled private-network and credential permissions. |
|
|
110
|
-
|
|
111
|
-
A JSON source may return a bare array or an object containing `plugins`, `items`, or `results`.
|
|
112
|
-
|
|
113
|
-
Example:
|
|
114
|
-
|
|
115
|
-
```json
|
|
116
|
-
{
|
|
117
|
-
"plugins": [
|
|
118
|
-
{
|
|
119
|
-
"id": "pdf-tools",
|
|
120
|
-
"name": "PDF Tools",
|
|
121
|
-
"description": "Extract and merge PDF documents.",
|
|
122
|
-
"version": "1.2.0",
|
|
123
|
-
"package": "@example/dsh-plugin-pdf",
|
|
124
|
-
"repository": "https://github.com/example/dsh-plugin-pdf",
|
|
125
|
-
"install": {
|
|
126
|
-
"type": "npm",
|
|
127
|
-
"spec": "@example/dsh-plugin-pdf@1.2.0"
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
]
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Identity precedence is npm package, canonical repository URL, then source-specific id. Duplicate records preserve source attribution, versions, and normalized category tags.
|
|
135
|
-
|
|
136
|
-
## Discovery quality
|
|
137
|
-
|
|
138
|
-
Registry Aggregator treats registry search hits as **candidates**, not automatically as installable DSH plugins.
|
|
139
|
-
|
|
140
|
-
- npm candidates are verified against their published package metadata.
|
|
141
|
-
- Exact npm package names can be resolved from the registry packument instead of relying only on the eventually-consistent search index.
|
|
142
|
-
- Short and partial queries combine cached discovery with query-specific npm/GitHub discovery.
|
|
143
|
-
- GitHub discovery uses DeepSeek-Harness-specific topic intersections instead of the broad `dsh-plugin` topic alone.
|
|
144
|
-
- npm/GitHub candidates must declare a root `dsh.bundle.patch` before the UI exposes **Install** or the fallback command.
|
|
145
|
-
- Candidates that are not valid DSH bundles are removed before totals, sorting, pagination, and rendering.
|
|
146
|
-
- npm/GitHub source counters represent verified installable bundle candidates rather than raw keyword/topic cardinality.
|
|
147
|
-
|
|
148
|
-
## Popularity evidence
|
|
149
|
-
|
|
150
|
-
- npm download counts come from npm package/download metadata.
|
|
151
|
-
- GitHub stars are taken from GitHub discovery when the result already contains them.
|
|
152
|
-
- If a visible npm-discovered plugin has a GitHub repository but no star count, the client requests the missing repository statistics **after the Browse result is rendered**.
|
|
153
|
-
- Async star lookup is cached and limited to visible results; failures are ignored rather than failing Browse.
|
|
154
|
-
|
|
155
|
-
## Sorting
|
|
156
|
-
|
|
157
|
-
Sorting criteria are independent and composable:
|
|
158
|
-
|
|
159
|
-
- **Stars**
|
|
160
|
-
- **Downloads**
|
|
161
|
-
- **Freshness**
|
|
162
|
-
- **Name**
|
|
163
|
-
|
|
164
|
-
Clicking a criterion cycles:
|
|
165
|
-
|
|
166
|
-
```text
|
|
167
|
-
off → descending → ascending → off
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
The order in which criteria are enabled defines priority.
|
|
171
|
-
|
|
172
|
-
## Compatibility
|
|
173
|
-
|
|
174
|
-
- DSH: `>=0.1.7-rc.2 <0.2.0`
|
|
175
|
-
- Tested with DSH `0.1.7-rc.2`
|
|
176
|
-
|
|
177
|
-
Exact package compatibility is read from package metadata when a publisher declares it. Installation is validated again by the native DSH Plugin Manager.
|
|
178
|
-
|
|
179
|
-
## Security
|
|
180
|
-
|
|
181
|
-
Browser-editable source settings never contain credentials.
|
|
182
|
-
|
|
183
|
-
Host protections include:
|
|
184
|
-
|
|
185
|
-
- HTTP(S)-only source URLs;
|
|
186
|
-
- rejection of URL-embedded credentials;
|
|
187
|
-
- blocking of loopback, link-local, private, multicast, reserved, and other non-global-unicast destinations by default;
|
|
188
|
-
- DNS pinning and redirect destination revalidation;
|
|
189
|
-
- source, response-size, result-count, concurrency, and RPC-size limits;
|
|
190
|
-
- Host-controlled allowlists for private sources and environment-based bearer tokens;
|
|
191
|
-
- install-spec validation before a command is exposed or sent to the Plugin Manager.
|
|
192
|
-
|
|
193
|
-
The Install action executes third-party code through the native DSH Plugin Manager. Review the source and package before installation.
|
|
194
|
-
|
|
195
|
-
## Host configuration
|
|
196
|
-
|
|
197
|
-
```yaml
|
|
198
|
-
- id: registry-aggregator
|
|
199
|
-
name: '@stolyarovmn/dsh-ui-registry-aggregator'
|
|
200
|
-
config:
|
|
201
|
-
timeoutMs: 10000
|
|
202
|
-
maxResponseBytes: 2097152
|
|
203
|
-
maxPlugins: 2000
|
|
204
|
-
maxSources: 20
|
|
205
|
-
maxTotalPlugins: 5000
|
|
206
|
-
maxRpcBytes: 4194304
|
|
207
|
-
concurrency: 4
|
|
208
|
-
privateSourceIds:
|
|
209
|
-
- corporate
|
|
210
|
-
auth:
|
|
211
|
-
- sourceId: corporate
|
|
212
|
-
tokenEnv: DSH_CORPORATE_REGISTRY_TOKEN
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
## Development
|
|
216
|
-
|
|
217
|
-
```sh
|
|
218
|
-
npm install
|
|
219
|
-
npm test
|
|
220
|
-
npm run test:pack
|
|
221
|
-
```
|
|
108
|
+
Then open **Plugins → Installed → Registry Aggregator** and verify **Sources**, **Browse**, installation, compatibility filtering, download statistics, and **Updates** in the real Harness UI.
|
|
222
109
|
|
|
223
|
-
##
|
|
110
|
+
## Historical lines
|
|
224
111
|
|
|
225
|
-
|
|
112
|
+
- `dsh-0.1.7` — stable `v0.4.17` line for DSH `0.1.7-rc.2`.
|
|
113
|
+
- `dsh-0.1.5` — historical DSH `0.1.5-rc.3` compatibility line.
|
|
114
|
+
- `main` — neutral project landing branch.
|