@dsh-plugin-hub/dsh-plugin 0.1.4 → 0.2.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 +18 -1
- package/index.js +99 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -13,9 +13,16 @@ Install into a Profile:
|
|
|
13
13
|
dsh plugin --profile web add @dsh-plugin-hub/dsh-plugin
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
The bundle exposes
|
|
16
|
+
The bundle exposes read-only discovery and diagnosis tools plus confirmed plan
|
|
17
|
+
application, all backed by the local `dsh-hub` CLI:
|
|
17
18
|
|
|
19
|
+
- `dsh_hub_search` searches the live catalog.
|
|
20
|
+
- `dsh_hub_plugin_info` reviews exact versions, compatibility and security.
|
|
21
|
+
- `dsh_hub_plugin_plan` creates an exact, preconditioned Plugin install plan.
|
|
18
22
|
- `dsh_hub_profile_plan` creates a read-only, expiring install plan.
|
|
23
|
+
- `dsh_hub_profile_diff` compares Plugin membership, order, versions, sources, and Release identity.
|
|
24
|
+
- `dsh_hub_profile_upgrade_plan` plans an upgrade and returns its full diff.
|
|
25
|
+
- `dsh_hub_profile_doctor` diagnoses local state and release drift.
|
|
19
26
|
- `dsh_hub_profile_share_plan` captures an exact, read-only publication plan.
|
|
20
27
|
- `dsh_hub_profile_rollback_plan` selects a complete recoverable revision.
|
|
21
28
|
- `dsh_hub_operation_apply` applies that plan after explicit confirmation.
|
|
@@ -25,6 +32,16 @@ Every machine-triggered mutation uses an expiring, single-use, preconditioned
|
|
|
25
32
|
plan and the same staging, validation, atomic switch and rollback implementation
|
|
26
33
|
as direct CLI use.
|
|
27
34
|
|
|
35
|
+
## Telemetry
|
|
36
|
+
|
|
37
|
+
This adapter does not add a separate telemetry client. Commands it invokes use
|
|
38
|
+
the installed `dsh-hub` CLI preference. On the CLI's first run a notice is
|
|
39
|
+
shown and that run sends no event; later eligible install and Profile lifecycle
|
|
40
|
+
operations report anonymous aggregates unless the user runs `dsh-hub telemetry
|
|
41
|
+
off` or uses one of the documented per-invocation opt-outs. See the
|
|
42
|
+
[`@dsh-plugin-hub/cli` README](https://github.com/pax-beehive/dsh-hub-cli/tree/main/packages/cli#anonymous-cli-telemetry) for the
|
|
43
|
+
exact fields, retention period, debug mode, and controls.
|
|
44
|
+
|
|
28
45
|
Requires Node.js 22.13 or later, `@deepseek-ai/cordis`, and
|
|
29
46
|
`@deepseek-ai/dsh-tools`.
|
|
30
47
|
|
package/index.js
CHANGED
|
@@ -32,6 +32,50 @@ const output = {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export function apply(ctx) {
|
|
35
|
+
ctx.tools.register(defineTool({
|
|
36
|
+
name: 'dsh_hub_search',
|
|
37
|
+
description: 'Search the live DSH Plugin Hub catalog by name, capability, or natural-language need. This is read-only.',
|
|
38
|
+
parameters: {
|
|
39
|
+
query: { type: 'string', required: true, description: 'Plugin name, capability, or task to search for.' },
|
|
40
|
+
},
|
|
41
|
+
output,
|
|
42
|
+
async execute(args, exec) {
|
|
43
|
+
const events = await run(['search', args.query, '--json'], exec.signal)
|
|
44
|
+
return events[0] ?? { items: [] }
|
|
45
|
+
},
|
|
46
|
+
}))
|
|
47
|
+
|
|
48
|
+
ctx.tools.register(defineTool({
|
|
49
|
+
name: 'dsh_hub_plugin_info',
|
|
50
|
+
description: 'Inspect one Plugin, its exact selected version, source, compatibility, and published security assessment. This is read-only.',
|
|
51
|
+
parameters: {
|
|
52
|
+
packageName: { type: 'string', required: true, description: 'Exact npm package name.' },
|
|
53
|
+
version: { type: 'string', description: 'Exact version, tag, or range (default latest).' },
|
|
54
|
+
},
|
|
55
|
+
output,
|
|
56
|
+
async execute(args, exec) {
|
|
57
|
+
const values = ['info', args.packageName, '--version', args.version ?? 'latest', '--json']
|
|
58
|
+
const events = await run(values, exec.signal)
|
|
59
|
+
return events[0] ?? {}
|
|
60
|
+
},
|
|
61
|
+
}))
|
|
62
|
+
|
|
63
|
+
ctx.tools.register(defineTool({
|
|
64
|
+
name: 'dsh_hub_plugin_plan',
|
|
65
|
+
description: 'Create a non-mutating, exact and preconditioned plan to install one reviewed Plugin. Present the source, security assessment, target Profile, and exact version before applying it.',
|
|
66
|
+
parameters: {
|
|
67
|
+
packageName: { type: 'string', required: true, description: 'Exact npm package name.' },
|
|
68
|
+
profile: { type: 'string', description: 'Local target Profile name (default web).' },
|
|
69
|
+
version: { type: 'string', description: 'Exact version, tag, or range (default latest).' },
|
|
70
|
+
},
|
|
71
|
+
output,
|
|
72
|
+
async execute(args, exec) {
|
|
73
|
+
const values = ['install', args.packageName, '--profile', args.profile ?? 'web', '--version', args.version ?? 'latest', '--plan', '--json']
|
|
74
|
+
const events = await run(values, exec.signal)
|
|
75
|
+
return events[0] ?? {}
|
|
76
|
+
},
|
|
77
|
+
}))
|
|
78
|
+
|
|
35
79
|
ctx.tools.register(defineTool({
|
|
36
80
|
name: 'dsh_hub_profile_plan',
|
|
37
81
|
description: 'Create a non-mutating, exact and preconditioned plan to install or upgrade a public DSH Hub Profile. Present the plan to the user before applying it.',
|
|
@@ -48,9 +92,63 @@ export function apply(ctx) {
|
|
|
48
92
|
},
|
|
49
93
|
}))
|
|
50
94
|
|
|
95
|
+
ctx.tools.register(defineTool({
|
|
96
|
+
name: 'dsh_hub_profile_diff',
|
|
97
|
+
description: 'Compare the current local Profile lock with a public Hub Release, including additions, removals, load-order changes, versions, and immutable sources. This is read-only.',
|
|
98
|
+
parameters: {
|
|
99
|
+
slug: { type: 'string', description: 'Hub Profile slug; defaults to the installed Hub Profile.' },
|
|
100
|
+
profile: { type: 'string', description: 'Local target Profile name (default web).' },
|
|
101
|
+
version: { type: 'string', description: 'Target Release version (default latest).' },
|
|
102
|
+
},
|
|
103
|
+
output,
|
|
104
|
+
async execute(args, exec) {
|
|
105
|
+
const values = ['profile', 'diff']
|
|
106
|
+
if (args.slug) values.push(args.slug)
|
|
107
|
+
values.push('--profile', args.profile ?? 'web', '--version', args.version ?? 'latest', '--json')
|
|
108
|
+
const events = await run(values, exec.signal)
|
|
109
|
+
return events[0] ?? {}
|
|
110
|
+
},
|
|
111
|
+
}))
|
|
112
|
+
|
|
113
|
+
ctx.tools.register(defineTool({
|
|
114
|
+
name: 'dsh_hub_profile_upgrade_plan',
|
|
115
|
+
description: 'Create a reviewed plan to upgrade the installed Profile to a selected Hub Release. Returns an up-to-date result without creating a mutation when no change is needed.',
|
|
116
|
+
parameters: {
|
|
117
|
+
slug: { type: 'string', description: 'Hub Profile slug; defaults to the installed Hub Profile.' },
|
|
118
|
+
profile: { type: 'string', description: 'Local target Profile name (default web).' },
|
|
119
|
+
version: { type: 'string', description: 'Target Release version (default latest).' },
|
|
120
|
+
},
|
|
121
|
+
output,
|
|
122
|
+
async execute(args, exec) {
|
|
123
|
+
const values = ['profile', 'upgrade']
|
|
124
|
+
if (args.slug) values.push(args.slug)
|
|
125
|
+
values.push('--profile', args.profile ?? 'web', '--version', args.version ?? 'latest', '--plan', '--json')
|
|
126
|
+
const events = await run(values, exec.signal)
|
|
127
|
+
return events[0] ?? {}
|
|
128
|
+
},
|
|
129
|
+
}))
|
|
130
|
+
|
|
131
|
+
ctx.tools.register(defineTool({
|
|
132
|
+
name: 'dsh_hub_profile_doctor',
|
|
133
|
+
description: 'Diagnose the local Profile directory, lockfile, bundle order, installed versions, required inputs, and drift from a Hub Release. This is read-only.',
|
|
134
|
+
parameters: {
|
|
135
|
+
slug: { type: 'string', description: 'Hub Profile slug; defaults to the installed Hub Profile.' },
|
|
136
|
+
profile: { type: 'string', description: 'Local Profile name (default web).' },
|
|
137
|
+
version: { type: 'string', description: 'Release used for drift and input checks (default latest).' },
|
|
138
|
+
},
|
|
139
|
+
output,
|
|
140
|
+
async execute(args, exec) {
|
|
141
|
+
const values = ['profile', 'doctor']
|
|
142
|
+
if (args.slug) values.push(args.slug)
|
|
143
|
+
values.push('--profile', args.profile ?? 'web', '--version', args.version ?? 'latest', '--json')
|
|
144
|
+
const events = await run(values, exec.signal)
|
|
145
|
+
return events[0] ?? {}
|
|
146
|
+
},
|
|
147
|
+
}))
|
|
148
|
+
|
|
51
149
|
ctx.tools.register(defineTool({
|
|
52
150
|
name: 'dsh_hub_operation_apply',
|
|
53
|
-
description: 'Apply a previously reviewed DSH Hub
|
|
151
|
+
description: 'Apply a previously reviewed DSH Hub Plugin or Profile mutation plan. Set confirmed=true only after the user explicitly confirms that exact plan.',
|
|
54
152
|
parameters: {
|
|
55
153
|
planId: { type: 'string', required: true, description: 'Plan UUID returned by any DSH Hub planning tool.' },
|
|
56
154
|
confirmed: { type: 'boolean', required: true, description: 'Must reflect explicit user confirmation of this plan.' },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dsh-plugin-hub/dsh-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "DSH tools for planning and applying reproducible Plugin Hub Profiles through the local dsh-hub CLI",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dsh-plugin",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"LICENSE"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@dsh-plugin-hub/cli": "0.
|
|
30
|
+
"@dsh-plugin-hub/cli": "0.2.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@deepseek-ai/cordis": "^4.0.1",
|