@czj-git/dsh-plugin-hub 0.1.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/LICENSE +21 -0
- package/README.en.md +357 -0
- package/README.md +357 -0
- package/cordis.patch.yml +8 -0
- package/dist/api.d.ts +246 -0
- package/dist/api.js +243 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +107 -0
- package/dist/render.d.ts +11 -0
- package/dist/render.js +41 -0
- package/dist/tool-schema.d.ts +281 -0
- package/dist/tool-schema.js +129 -0
- package/package.json +75 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 chuzhaojun
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.en.md
ADDED
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
# DSH Plugin Hub plugin
|
|
2
|
+
|
|
3
|
+
English | [中文](README.md)
|
|
4
|
+
|
|
5
|
+
Connects the public, read-only [DSH Plugin Hub](https://dshpluginhub.dev) search API to DeepSeek Harness. Agents can discover published and verified plugins, inspect rankings, and receive install commands, compatibility data, community metrics, and source links.
|
|
6
|
+
|
|
7
|
+
## Capabilities
|
|
8
|
+
|
|
9
|
+
- `dsh_plugin_search`: search by task, feature, plugin name, repository, or author.
|
|
10
|
+
- `dsh_plugin_rankings`: list daily growth, Top Stars, newly listed, or recently active plugins.
|
|
11
|
+
- Filter localized results by category, runtime type, installation source, ordering, and page.
|
|
12
|
+
- Return concise actionable text in Native mode and the complete structured result in Code Mode.
|
|
13
|
+
- Validate every public API response field and expose pagination, data freshness, and anonymous quota metadata.
|
|
14
|
+
- Honor Harness cancellation, configurable timeouts, 429 retry information, and stable error categories.
|
|
15
|
+
|
|
16
|
+
The plugin only calls the public `GET /api/v1/plugins/search` endpoint. It requires no API key, reads no user identity, favorites, or private data, and performs no installation or other write operation. Install commands are result data; execution remains governed by the Harness shell, permission, and approval policies.
|
|
17
|
+
|
|
18
|
+
## Install and run
|
|
19
|
+
|
|
20
|
+
Install the npm package into the Web profile:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
dsh plugin --profile web add @czj-git/dsh-plugin-hub
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Inspect the composed configuration and start Harness:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
dsh --profile web --dump-config
|
|
30
|
+
dsh --profile web
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Configuration
|
|
34
|
+
|
|
35
|
+
The bundle supplies these defaults:
|
|
36
|
+
|
|
37
|
+
```yaml
|
|
38
|
+
- id: dsh-plugin-hub
|
|
39
|
+
name: '@czj-git/dsh-plugin-hub'
|
|
40
|
+
config:
|
|
41
|
+
baseUrl: https://dshpluginhub.dev
|
|
42
|
+
locale: en
|
|
43
|
+
timeoutMs: 15000
|
|
44
|
+
maxResults: 10
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
| Field | Type | Default | Constraints and behavior |
|
|
48
|
+
|---|---|---:|---|
|
|
49
|
+
| `baseUrl` | `string` | `https://dshpluginhub.dev` | API origin. It must use HTTP(S), contain no credentials, query, or fragment, and is normalized without a trailing `/`. |
|
|
50
|
+
| `locale` | `zh \| en` | `en` | Description language when a tool call omits `locale`. |
|
|
51
|
+
| `timeoutMs` | `integer` | `15000` | HTTP timeout per request, from 1 to 120000 milliseconds. |
|
|
52
|
+
| `maxResults` | `integer` | `10` | Highest permitted `limit`, from 1 to 50, and the default `limit` for each call. |
|
|
53
|
+
|
|
54
|
+
Later profile patch layers must restate the complete `config` object because Cordis patching replaces the row value instead of deep-merging it.
|
|
55
|
+
|
|
56
|
+
## Tool inputs
|
|
57
|
+
|
|
58
|
+
### `dsh_plugin_search`
|
|
59
|
+
|
|
60
|
+
Searches published and verified plugins. The tool trims `query` and collapses consecutive whitespace to one space. An empty normalized query fails before any network request.
|
|
61
|
+
|
|
62
|
+
| Parameter | Required | Type/values | Default | Description |
|
|
63
|
+
|---|---|---|---|---|
|
|
64
|
+
| `query` | Yes | `string` | — | A user need, feature, plugin, author, or repository. It must be non-empty after normalization and contain at most 100 characters. |
|
|
65
|
+
| `locale` | No | `zh`, `en` | Configured `locale` | Selects localized descriptions. |
|
|
66
|
+
| `category` | No | See “Enumerations” | All categories | Restricts the marketplace category. |
|
|
67
|
+
| `type` | No | `host`, `client`, `hybrid` | All types | Restricts the plugin runtime type. |
|
|
68
|
+
| `source` | No | `npm`, `github` | All sources | Restricts the installation source. |
|
|
69
|
+
| `sort` | No | `relevance`, `growth`, `stars`, `newest`, `active` | `relevance` | Selects stable ordering. A non-empty query defaults to relevance. |
|
|
70
|
+
| `page` | No | `integer` | `1` | Result page from 1 to 1000. |
|
|
71
|
+
| `limit` | No | `integer` | Configured `maxResults` | Items on this page, from 1 to `maxResults`; the service limit is 50. |
|
|
72
|
+
|
|
73
|
+
Example input:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"query": "help a text-only agent understand screenshots",
|
|
78
|
+
"locale": "en",
|
|
79
|
+
"category": "multimodal-creative",
|
|
80
|
+
"type": "hybrid",
|
|
81
|
+
"source": "npm",
|
|
82
|
+
"sort": "relevance",
|
|
83
|
+
"page": 1,
|
|
84
|
+
"limit": 5
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Natural-language example:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
Find a DeepSeek Harness plugin that lets a text-only agent analyze screenshots. Prefer npm packages and include the install command.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### `dsh_plugin_rankings`
|
|
95
|
+
|
|
96
|
+
Lists rankings through the ordering modes of the same public search endpoint. This tool has no keyword, `type`, or `source` parameter.
|
|
97
|
+
|
|
98
|
+
| Parameter | Required | Type/values | Default | Description |
|
|
99
|
+
|---|---|---|---|---|
|
|
100
|
+
| `ranking` | Yes | `growth`, `stars`, `newest`, `active` | — | Selects the ranking definition. |
|
|
101
|
+
| `locale` | No | `zh`, `en` | Configured `locale` | Selects localized descriptions. |
|
|
102
|
+
| `category` | No | See “Enumerations” | All categories | Ranks only one category. |
|
|
103
|
+
| `page` | No | `integer` | `1` | Result page from 1 to 1000. |
|
|
104
|
+
| `limit` | No | `integer` | Configured `maxResults` | Items on this page, from 1 to `maxResults`. |
|
|
105
|
+
|
|
106
|
+
Ranking definitions:
|
|
107
|
+
|
|
108
|
+
| Value | Ranking | Ordering signal |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| `growth` | Daily growth | GitHub Star change between the two latest successful snapshots. `starsDelta1d` is `null` without a previous snapshot. |
|
|
111
|
+
| `stars` | Top Stars | Total GitHub Stars. |
|
|
112
|
+
| `newest` | Newly listed | First listing time in DSH Plugin Hub. |
|
|
113
|
+
| `active` | Recently active | Latest GitHub push time. |
|
|
114
|
+
|
|
115
|
+
Example input:
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"ranking": "stars",
|
|
120
|
+
"locale": "en",
|
|
121
|
+
"category": "coding-tools",
|
|
122
|
+
"page": 1,
|
|
123
|
+
"limit": 10
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Enumerations
|
|
128
|
+
|
|
129
|
+
`category` values:
|
|
130
|
+
|
|
131
|
+
| Value | Meaning |
|
|
132
|
+
|---|---|
|
|
133
|
+
| `agent-workflow` | Agents and workflows |
|
|
134
|
+
| `coding-tools` | Coding and developer tools |
|
|
135
|
+
| `models-data` | Models and data |
|
|
136
|
+
| `ui-experience` | UI and experience |
|
|
137
|
+
| `integrations` | Connections and integrations |
|
|
138
|
+
| `security-governance` | Security and governance |
|
|
139
|
+
| `multimodal-creative` | Multimodal and creative tools |
|
|
140
|
+
| `observability-cost` | Observability and usage |
|
|
141
|
+
| `other` | Other |
|
|
142
|
+
|
|
143
|
+
`sort` values:
|
|
144
|
+
|
|
145
|
+
- `relevance`: exact and prefix matches on names, repositories, and authors lead, followed by contains matches and descriptions; Stars and plugin ID keep ties stable.
|
|
146
|
+
- `growth`, `stars`, `newest`, and `active`: use the same definitions as the ranking tool.
|
|
147
|
+
|
|
148
|
+
## Tool output
|
|
149
|
+
|
|
150
|
+
Both tools return the same structured value. Code Mode can consume every field. Native mode uses the text projection below to avoid placing a large JSON object in the model context.
|
|
151
|
+
|
|
152
|
+
### Complete field reference
|
|
153
|
+
|
|
154
|
+
| Path | Type | Description |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| `items` | `Plugin[]` | Plugins on the current page. No matches produce `[]`, not an error. |
|
|
157
|
+
| `items[].id` | `string` | Stable public plugin ID. |
|
|
158
|
+
| `items[].slug` | `string` | Public `owner/repository` identifier. |
|
|
159
|
+
| `items[].name` | `string` | Display name. |
|
|
160
|
+
| `items[].owner` | `string` | GitHub repository owner. |
|
|
161
|
+
| `items[].repo` | `string` | GitHub repository name. |
|
|
162
|
+
| `items[].description` | `string` | Description localized for the selected `locale`. |
|
|
163
|
+
| `items[].type` | `host \| client \| hybrid` | Plugin runtime type. |
|
|
164
|
+
| `items[].category` | `string` | Marketplace category enumeration. |
|
|
165
|
+
| `items[].topics` | `string[]` | Repository topics. |
|
|
166
|
+
| `items[].language` | `string` | Primary repository language. |
|
|
167
|
+
| `items[].license` | `string` | License identifier. |
|
|
168
|
+
| `items[].package.name` | `string` | Package or installation target. |
|
|
169
|
+
| `items[].package.version` | `string` | Validated version. |
|
|
170
|
+
| `items[].package.source` | `npm \| github` | Installation source. |
|
|
171
|
+
| `items[].package.sourceSpec` | `string` | Installation specifier pinned to the validated source/version. |
|
|
172
|
+
| `items[].package.installCommand` | `string` | Copyable DSH command. Returning it does not execute it. |
|
|
173
|
+
| `items[].package.profile` | `string` | Recommended Harness profile. |
|
|
174
|
+
| `items[].compatibility.harnessVersion` | `string` | Harness version used or required during validation. |
|
|
175
|
+
| `items[].compatibility.verificationLevel` | `static-checked \| runtime-verified` | Static or runtime verification level. |
|
|
176
|
+
| `items[].compatibility.smokeStatus` | `static-passed \| passed \| manual-step-required \| failed \| not-run` | Smoke-check result. |
|
|
177
|
+
| `items[].compatibility.validatedAt` | `string` | Compatibility validation time. |
|
|
178
|
+
| `items[].metrics.stars` | `integer` | GitHub Stars. |
|
|
179
|
+
| `items[].metrics.starsDelta1d` | `integer \| null` | Star change between the latest two successful snapshots; `null` without a baseline. |
|
|
180
|
+
| `items[].metrics.forks` | `integer` | GitHub Forks. |
|
|
181
|
+
| `items[].metrics.openIssues` | `integer` | GitHub open issues. |
|
|
182
|
+
| `items[].metrics.views` | `integer` | Public DSH Plugin Hub view count. |
|
|
183
|
+
| `items[].timestamps.listedAt` | `string` | First marketplace listing time. |
|
|
184
|
+
| `items[].timestamps.lastPushedAt` | `string` | Latest GitHub push time. |
|
|
185
|
+
| `items[].timestamps.sourceUpdatedAt` | `string` | Latest source-data update time. |
|
|
186
|
+
| `items[].links.detail` | `string` | DSH Plugin Hub detail URL. |
|
|
187
|
+
| `items[].links.repository` | `string` | GitHub repository URL. |
|
|
188
|
+
| `pagination.page` | `integer` | Current page. |
|
|
189
|
+
| `pagination.perPage` | `integer` | Page size returned by the service. |
|
|
190
|
+
| `pagination.total` | `integer` | Total matching plugins. |
|
|
191
|
+
| `pagination.totalPages` | `integer` | Total pages. |
|
|
192
|
+
| `meta.apiVersion` | `v1` | Public API version. |
|
|
193
|
+
| `meta.locale` | `zh \| en` | Effective description locale. |
|
|
194
|
+
| `meta.query` | `string` | Normalized query accepted by the service; rankings normally return an empty string. |
|
|
195
|
+
| `meta.sort` | `string` | Effective ordering. |
|
|
196
|
+
| `meta.dataUpdatedAt` | `string` | Update time of the data used by this response. |
|
|
197
|
+
| `rateLimit.limit` | `integer \| null` | Anonymous limit from the response header; `null` when absent or invalid. |
|
|
198
|
+
| `rateLimit.remaining` | `integer \| null` | Remaining quota from the response header; `null` when absent or invalid. |
|
|
199
|
+
| `rateLimit.reset` | `string \| null` | Raw `RateLimit-Reset` response header. |
|
|
200
|
+
| `rateLimit.retryAfterSeconds` | `integer \| null` | Non-negative integer seconds from `Retry-After`, normally present on 429. |
|
|
201
|
+
|
|
202
|
+
### Complete structured output example
|
|
203
|
+
|
|
204
|
+
```json
|
|
205
|
+
{
|
|
206
|
+
"items": [
|
|
207
|
+
{
|
|
208
|
+
"id": "123",
|
|
209
|
+
"slug": "owner/plugin",
|
|
210
|
+
"name": "plugin",
|
|
211
|
+
"owner": "owner",
|
|
212
|
+
"repo": "plugin",
|
|
213
|
+
"description": "A verified DeepSeek Harness plugin.",
|
|
214
|
+
"type": "host",
|
|
215
|
+
"category": "coding-tools",
|
|
216
|
+
"topics": ["dsh-plugin", "developer-tools"],
|
|
217
|
+
"language": "TypeScript",
|
|
218
|
+
"license": "MIT",
|
|
219
|
+
"package": {
|
|
220
|
+
"name": "dsh-plugin-example",
|
|
221
|
+
"version": "1.0.0",
|
|
222
|
+
"source": "npm",
|
|
223
|
+
"sourceSpec": "dsh-plugin-example@1.0.0",
|
|
224
|
+
"installCommand": "dsh plugin --profile web add dsh-plugin-example",
|
|
225
|
+
"profile": "web"
|
|
226
|
+
},
|
|
227
|
+
"compatibility": {
|
|
228
|
+
"harnessVersion": "0.1.0-rc.7",
|
|
229
|
+
"verificationLevel": "runtime-verified",
|
|
230
|
+
"smokeStatus": "passed",
|
|
231
|
+
"validatedAt": "2026-08-27T00:00:00.000Z"
|
|
232
|
+
},
|
|
233
|
+
"metrics": {
|
|
234
|
+
"stars": 42,
|
|
235
|
+
"starsDelta1d": 3,
|
|
236
|
+
"forks": 4,
|
|
237
|
+
"openIssues": 1,
|
|
238
|
+
"views": 20
|
|
239
|
+
},
|
|
240
|
+
"timestamps": {
|
|
241
|
+
"listedAt": "2026-08-20T00:00:00.000Z",
|
|
242
|
+
"lastPushedAt": "2026-08-26T00:00:00.000Z",
|
|
243
|
+
"sourceUpdatedAt": "2026-08-27T00:00:00.000Z"
|
|
244
|
+
},
|
|
245
|
+
"links": {
|
|
246
|
+
"detail": "https://dshpluginhub.dev/en/plugins/owner/plugin",
|
|
247
|
+
"repository": "https://github.com/owner/plugin"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
],
|
|
251
|
+
"pagination": {
|
|
252
|
+
"page": 1,
|
|
253
|
+
"perPage": 5,
|
|
254
|
+
"total": 1,
|
|
255
|
+
"totalPages": 1
|
|
256
|
+
},
|
|
257
|
+
"meta": {
|
|
258
|
+
"apiVersion": "v1",
|
|
259
|
+
"locale": "en",
|
|
260
|
+
"query": "screenshot analysis",
|
|
261
|
+
"sort": "relevance",
|
|
262
|
+
"dataUpdatedAt": "2026-08-27T00:00:00.000Z"
|
|
263
|
+
},
|
|
264
|
+
"rateLimit": {
|
|
265
|
+
"limit": 60,
|
|
266
|
+
"remaining": 58,
|
|
267
|
+
"reset": "42",
|
|
268
|
+
"retryAfterSeconds": null
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Native mode text example
|
|
274
|
+
|
|
275
|
+
```text
|
|
276
|
+
Plugin search: 1 matches; showing 1 on page 1.
|
|
277
|
+
1. plugin (owner/plugin)
|
|
278
|
+
A verified DeepSeek Harness plugin.
|
|
279
|
+
coding-tools · host · 42 stars · 1d growth +3
|
|
280
|
+
Install: dsh plugin --profile web add dsh-plugin-example
|
|
281
|
+
Details: https://dshpluginhub.dev/en/plugins/owner/plugin
|
|
282
|
+
Repository: https://github.com/owner/plugin
|
|
283
|
+
Anonymous API quota remaining: 58/60.
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
No matches produce a successful `items: []`. Native mode renders:
|
|
287
|
+
|
|
288
|
+
```text
|
|
289
|
+
Plugin search: no published, verified plugins matched. Try a broader query or remove a filter.
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Errors and cancellation
|
|
293
|
+
|
|
294
|
+
Input validation, network failures, public API errors, and response-validation failures end the tool call instead of presenting partial data as success. The underlying client throws `PluginHubApiError` with these programmatic fields:
|
|
295
|
+
|
|
296
|
+
| Field | Type | Description |
|
|
297
|
+
|---|---|---|
|
|
298
|
+
| `message` | `string` | Stable caller-facing explanation. |
|
|
299
|
+
| `code` | `string` | Local error code or public service error code. |
|
|
300
|
+
| `status` | `integer \| null` | HTTP status, or `null` if no response was received. |
|
|
301
|
+
| `fields` | `Record<string, string>` | Service field errors, or an empty object. |
|
|
302
|
+
| `retryAfterSeconds` | `integer \| null` | Retry delay accepted only from a valid non-negative integer header. |
|
|
303
|
+
|
|
304
|
+
Local error codes:
|
|
305
|
+
|
|
306
|
+
| `code` | Condition |
|
|
307
|
+
|---|---|
|
|
308
|
+
| `CANCELLED` | Harness cancelled the active tool call. |
|
|
309
|
+
| `TIMEOUT` | The request exceeded configured `timeoutMs`. |
|
|
310
|
+
| `NETWORK_ERROR` | DNS, TLS, connection, or another network operation failed. |
|
|
311
|
+
| `INVALID_RESPONSE` | The service returned non-JSON data or a successful response missing required fields. |
|
|
312
|
+
| `HTTP_<status>` | An unsuccessful response did not include a recognized public error object. |
|
|
313
|
+
|
|
314
|
+
Public service codes are preserved, including `INVALID_QUERY` for invalid parameters and `RATE_LIMITED` when anonymous quota is exhausted. A 429 response also reads `Retry-After`.
|
|
315
|
+
|
|
316
|
+
Programmatic handling example:
|
|
317
|
+
|
|
318
|
+
```ts
|
|
319
|
+
import { PluginHubApiError, PluginHubClient } from '@czj-git/dsh-plugin-hub/api'
|
|
320
|
+
|
|
321
|
+
const client = new PluginHubClient({
|
|
322
|
+
baseUrl: 'https://dshpluginhub.dev',
|
|
323
|
+
timeoutMs: 15_000,
|
|
324
|
+
})
|
|
325
|
+
|
|
326
|
+
try {
|
|
327
|
+
const result = await client.search(
|
|
328
|
+
{ query: 'memory', locale: 'en', page: 1, perPage: 5 },
|
|
329
|
+
new AbortController().signal,
|
|
330
|
+
)
|
|
331
|
+
console.log(result.items)
|
|
332
|
+
} catch (error) {
|
|
333
|
+
if (error instanceof PluginHubApiError) {
|
|
334
|
+
console.error(error.code, error.status, error.retryAfterSeconds)
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## Development and verification
|
|
340
|
+
|
|
341
|
+
```sh
|
|
342
|
+
npm install
|
|
343
|
+
npm run check
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
`npm run check` runs strict type checking, keyless unit tests, and the production build. GitHub source installs run `prepare` to generate `dist/`; pnpm 10+ asks users to explicitly allow that build script. Publish an npm package or tarball containing prebuilt `dist/` files to avoid install-time build permission.
|
|
347
|
+
|
|
348
|
+
## Limitations
|
|
349
|
+
|
|
350
|
+
- The public API currently exposes one search endpoint; the ranking tool uses that endpoint's stable sort modes.
|
|
351
|
+
- Plugin README bodies, comments, favorites, and user data are outside the public API.
|
|
352
|
+
- Returned install commands are not executed and do not prove suitability for every profile; callers should inspect `package.profile` and the compatibility fields.
|
|
353
|
+
- Anonymous limits are service-controlled and may change; the tool reports the actual headers on each response.
|
|
354
|
+
|
|
355
|
+
## License
|
|
356
|
+
|
|
357
|
+
MIT
|