@bruc3van/dsh-doctor 0.5.5 → 0.5.7

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 (30) hide show
  1. package/README.en.md +77 -181
  2. package/README.md +77 -181
  3. package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-alpha.2/packages.json +1 -3
  4. package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-alpha.2/symbols.json +8 -0
  5. package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-alpha.3/behavior.md +14 -0
  6. package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-alpha.3/config-rules.json +36 -0
  7. package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-alpha.3/manifest.json +19 -0
  8. package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-alpha.3/packages.json +74 -0
  9. package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-alpha.3/services.json +28 -0
  10. package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-alpha.3/symbols.json +134 -0
  11. package/package.json +1 -1
  12. package/skills/dsh-plugin-upgrade/SKILL.md +54 -23
  13. package/skills/dsh-plugin-upgrade/evals/evals.json +55 -0
  14. package/skills/dsh-plugin-upgrade/evals/files/import-move-plugin/README.md +5 -0
  15. package/skills/dsh-plugin-upgrade/evals/files/import-move-plugin/package.json +31 -0
  16. package/skills/dsh-plugin-upgrade/evals/files/import-move-plugin/src/index.ts +20 -0
  17. package/skills/dsh-plugin-upgrade/evals/files/import-move-plugin/src/stores.ts +15 -0
  18. package/skills/dsh-plugin-upgrade/evals/files/settings-plugin/README.md +7 -0
  19. package/skills/dsh-plugin-upgrade/evals/files/settings-plugin/package.json +20 -0
  20. package/skills/dsh-plugin-upgrade/evals/files/settings-plugin/src/index.ts +2 -0
  21. package/skills/dsh-plugin-upgrade/evals/files/settings-plugin/src/namespace-read.ts +6 -0
  22. package/skills/dsh-plugin-upgrade/evals/files/settings-plugin/src/settings.ts +21 -0
  23. package/skills/dsh-plugin-upgrade/evals/trigger-evals.json +22 -0
  24. package/skills/dsh-plugin-upgrade/references/cli-bootstrap.md +6 -4
  25. package/skills/dsh-plugin-upgrade/references/migration-map.md +5 -1
  26. package/skills/dsh-plugin-upgrade/references/source-investigation.md +2 -0
  27. package/skills/dsh-plugin-upgrade/references/verification.md +6 -0
  28. package/src/cli.mjs +7 -3
  29. package/src/migrate-verify.mjs +3 -2
  30. package/src/migrate.mjs +53 -22
package/README.en.md CHANGED
@@ -2,19 +2,24 @@
2
2
 
3
3
  [中文](README.md) | English
4
4
 
5
- DSH Doctor helps an agent diagnose and upgrade DeepSeek Harness plugins: identify API changes between releases, modify code where the migration is known, point out semantic changes that need developer judgment, then rebuild and verify the plugin.
5
+ DSH Doctor is an upgrade and troubleshooting tool for DSH plugin developers and agents. It finds what needs to change during an upgrade, handles changes that are known to be safe, and then checks dependencies, build output, installation, and activation.
6
6
 
7
- The current focus is:
7
+ When a change depends on the plugin's business logic, Doctor calls it out for the agent or developer instead of guessing. Every edit is previewed and backed up first, and runtime checks use a temporary DSH environment rather than the developer's everyday profile.
8
8
 
9
- ```text
10
- DSH 0.1.1 → DSH 0.1.2
11
- ```
9
+ > This is a community-maintained third-party project, not an official DeepSeek project. The current migration scope is DSH 0.1.1 → 0.1.2. The catalog exactly covers `dsh-v0.1.1-rc.2` → `dsh-v0.1.2-alpha.3` and retains the alpha.2 historical rules. Differences outside those catalogs still require a separate investigation and are not proven compatible by the catalog.
12
10
 
13
- The project also diagnoses DSH profiles and installed plugins, checks for compatible versions, and performs safety checks before quarantine or removal.
11
+ ## What it helps with
12
+
13
+ | Scenario | What DSH Doctor provides |
14
+ |---|---|
15
+ | Upgrade a plugin | Scans source, dependencies, manifest, client graph, patches, and build output; applies exact catalog-confirmed migrations and leaves semantic work to the agent |
16
+ | Verify a migration | Runs static reanalysis, dependency synchronization, build/test scripts, real tarball packaging, and temporary-profile installation and activation checks |
17
+ | Diagnose a DSH environment | Checks profile layers, plugin versions and peers, lockfile, bundles, patches, client contracts, duplicate mounts, and DSH CLI/Harness version drift |
18
+ | Recover safely | Compares before/after baselines, checks compatible updates, generates and verifies quarantine overlays, and records dependency and configuration impact before removal |
14
19
 
15
- > This is a community-maintained third-party project, not an official DeepSeek project. The current catalog uses `dsh-v0.1.1-rc.2` and `dsh-v0.1.2-alpha.2` as the reference points for the 0.1.1-to-0.1.2 changes. An agent should still check actual differences when a plugin uses another patch or prerelease.
20
+ Agents can orchestrate these capabilities through the skill, while other tools can integrate the same structured CLI workflows.
16
21
 
17
- ## Upgrade a plugin with the skill
22
+ ## Recommended: use the skill with an agent
18
23
 
19
24
  Install the repository's [`dsh-plugin-upgrade`](skills/dsh-plugin-upgrade/SKILL.md) skill:
20
25
 
@@ -29,219 +34,110 @@ Upgrade this plugin from DSH 0.1.1 to DSH 0.1.2.
29
34
  Analyze compatibility first, modify the code, then complete build and runtime verification.
30
35
  ```
31
36
 
32
- An upgrade request does not itself authorize dropping the old runtime. If the developer has not said, the skill explicitly asks whether the same upgraded plugin release must still support DSH 0.1.1 before any migration write, dependency installation, build, or runtime command. When compatibility must be preserved, the agent designs a dual-version approach first and verifies 0.1.1 and 0.1.2 separately; one successful 0.1.2 run is not dual-version evidence.
37
+ The skill guides the agent to:
33
38
 
34
- The skill reminds the agent to work in this order:
39
+ 1. establish the plugin, actual DSH installation, Harness checkout, package manager, and usable DSH Doctor;
40
+ 2. analyze source, dependencies, configuration, patches, and existing artifacts;
41
+ 3. confirm whether the upgraded plugin release targets only 0.1.2 or must remain compatible with 0.1.1;
42
+ 4. preview and apply exact changes allowed by that compatibility strategy, then handle semantic migrations that require business context;
43
+ 5. rebuild and report static, artifact, isolated-runtime, and business-behavior evidence separately;
44
+ 6. commit or publish through the plugin repository's own process only when the developer explicitly requests it.
35
45
 
36
- 1. inspect the plugin root, Harness checkout, package manager, and available DSH Doctor;
37
- 2. analyze source, type imports, dependencies, manifest, client graph, patches, and build output;
38
- 3. confirm whether the upgraded release targets only 0.1.2 or must remain compatible with 0.1.1;
39
- 4. preview and apply code changes that are known to be equivalent under the selected compatibility strategy;
40
- 5. use the new API owners to handle semantic changes that require understanding the plugin;
41
- 6. rebuild the plugin and run static, build, and isolated runtime verification, covering both versions in dual-version mode;
42
- 7. report the compatibility intent, changed files, remaining work, backups, and the verification level actually reached.
46
+ `npx skills add` installs agent instructions only; it does not install DSH Doctor globally. The skill checks the local CLI and npm registry first. If the local version is unsuitable, it runs a pinned version through `npm exec` without changing the global installation.
43
47
 
44
- `npx skills add` installs agent instructions only. It does not install DSH Doctor globally. The skill checks the local CLI and npm registry first. If the local version is unsuitable, it uses a pinned `npx` version by default and does not change the global npm installation.
45
-
46
- After verification, the agent can follow the plugin repository's existing versioning and release process if requested. The skill itself does not commit or publish anything automatically.
48
+ An upgrade request does not itself authorize dropping the old runtime. When compatibility intent is missing, the skill may perform read-only analysis but asks before migration writes, dependency installation, build, or runtime commands. Dual-version mode requires separate 0.1.1 and 0.1.2 evidence; one 0.1.2 smoke test is not dual-version proof.
47
49
 
48
50
  ## How it works
49
51
 
50
- DSH Doctor has three parts:
52
+ DSH Doctor has three parts that constrain one another:
51
53
 
52
- - **Skill**: tells the agent which steps to follow, which actions need confirmation, and what to report;
53
- - **CLI**: scans the plugin, lists problems, changes deterministic code, and runs verification;
54
- - **Migration catalog**: records known package, API, Service, configuration, and behavior changes between the two DSH versions.
54
+ - **Skill**: defines investigation steps, the compatibility decision, confirmation gates, and reporting standards for the agent;
55
+ - **CLI**: provides read-only analysis, safe edits, diagnosis, baselines, recovery, and staged verification;
56
+ - **Migration catalog**: stores exact DSH tags/commits and known package, symbol, Service, configuration, and behavior changes.
55
57
 
56
- The workflow is:
58
+ The plugin migration workflow is:
57
59
 
58
60
  ```text
59
- analyze
60
- change deterministic code
61
+ investigate the actual environment
62
+ catalog-driven analysis
63
+ → reviewed-plan exact changes
61
64
  → agent handles semantic changes
62
- rebuild
63
- → static verification
65
+ build and artifact verification
64
66
  → temporary-profile installation and activation
65
- publish through the plugin's own release process
67
+ → plugin business-behavior verification
66
68
  ```
67
69
 
68
- The CLI only auto-edits migrations marked `exact` by the catalog. Ownership and lifecycle changes involving Session, Workspace, Conversation, and pending interactions are reported as `MIG_SEMANTIC_API_CHANGE`. The agent must handle them in the context of the plugin instead of applying a mechanical replacement.
69
-
70
- ## Why versioned rules are needed
71
-
72
- DSH 0.1.2 changes more than package versions:
70
+ DSH 0.1.2 changes more than package versions. Legacy owners such as `dsh-client-runtime` and `dsh-host-apiproxy` were split, while Session, Workspace, Conversation, pending interaction, and Settings capabilities moved to new controllers, UI packages, or Services. The CLI only auto-edits relationships marked `exact`; ownership, lifecycle, and business-call changes are reported as `MIG_SEMANTIC_API_CHANGE`.
73
71
 
74
- - `@deepseek-ai/dsh-client-runtime` was removed and has no single aggregate replacement;
75
- - store features moved to `dsh-client-store`;
76
- - Session, Workspace, Conversation, and pending interactions moved to separate controllers or UI packages;
77
- - `@deepseek-ai/dsh-host-apiproxy` was removed, so browser calls move to the appropriate business Remote;
78
- - client graph, platform externals, exports, and some profile patch targets also changed.
72
+ With an exact Harness checkout, Doctor also verifies the commits behind the two catalog tags and compares entry ids in the target web profile. After the additional source interval has been investigated, `--target-version` can bind dependencies and runtime checks to a newer 0.1.2 target, but it does not extend the catalog's API claims.
79
73
 
80
- The migration catalog stores source/target tags and Git commits together with package, symbol, Service, and configuration rules. With `--harness-root`, the CLI verifies the commits behind both tags and compares entry ids in the target web profile. This gives the agent concrete version differences instead of making it guess the new API.
74
+ ## Core capabilities
81
75
 
82
- ## Coverage
83
-
84
- | Area | How Doctor and the agent handle it |
76
+ | Area | How it is handled |
85
77
  |---|---|
86
- | JS/TS imports, including type-only, aliased, and mixed imports | Analyzed with the TypeScript AST; symbols with a known equivalent can be rewritten |
87
- | Removed or added DSH packages | Checked in source and manifest; dependencies are updated only when no remaining reference blocks the change |
88
- | DSH/Cordis version ranges | Checks dependencies, devDependencies, and peerDependencies; existing peer ranges are not widened automatically |
89
- | Session, Workspace, Conversation, and other semantic changes | Reports the new owner and reason; the agent modifies the business code |
78
+ | JS/TS imports and named re-exports | Uses the TypeScript AST for type-only, aliased, and mixed imports; rewrites only known equivalent symbols |
79
+ | Removed packages and retained-package API changes | Checks source and manifest, preserves exports that still exist, and reports symbols that need semantic migration |
80
+ | DSH/Cordis version ranges | Checks dependencies, devDependencies, peerDependencies, and resolved versions; existing peer ranges are not widened automatically |
90
81
  | `dsh.client` and client exports | Checks inject, external, platform, immediately, and `exports["./client"]` |
91
- | Harness patch targets | Compares old and new entries when an exact Harness checkout is available |
92
- | Build output | Scans `lib`, `dist`, `build`, and `out` for old APIs |
93
- | Plugin build | Runs existing typecheck, build, test, and pack:check scripts; build or pack:check is required for artifact verification |
82
+ | Harness patch targets | Compares old and new bundle entries when an exact Harness checkout is available |
83
+ | Build output | Scans `lib`, `dist`, `build`, and `out` for source/artifact drift |
84
+ | Plugin build | Runs existing typecheck, build, test, and pack:check scripts; test/typecheck alone cannot establish artifact verification |
94
85
  | Installation and activation | Packs the real tarball and installs it into a fresh web profile under a temporary `DSH_HOME` |
95
- | UI and business behavior | Not decided by Doctor; the agent or developer runs plugin-specific checks |
86
+ | Profile diagnosis | Composes bundle, profile, home, and CLI overlays in DSH order while preserving field provenance |
87
+ | Update, quarantine, and removal | Verifies versions, dependencies, configuration layers, and dependents before producing an explicit operation plan; updates, persistent quarantine, and removal need explicit confirmation |
96
88
 
97
- Source analysis uses the TypeScript AST and is cross-checked against the manifest, client graph, and build output. A bundle without an old string does not prove that source code is compatible, and a successful compile does not prove that the published artifact or runtime is compatible.
89
+ No legacy string in source, a successful compile, an installable tarball, and correct business behavior are different evidence levels. Doctor does not present one as proof of another.
98
90
 
99
- ## Safety
91
+ ## Safety and evidence
100
92
 
101
93
  - `diagnose`, `migrate analyze`, and static verification are read-only and do not load or execute the inspected plugin;
102
- - `migrate apply` requires `--safe --plan-file`; preview only creates a new plan outside the plugin root, never overwrites an existing file, and persists the complete analysis plus every input-file hash; `--yes` applies only that same reviewed plan;
103
- - only `exact` migrations are auto-edited; semantic changes are not guessed;
104
- - SHA-256 is checked before writing, so a file changed after preview is rejected;
105
- - existing files receive timestamped backups and are replaced atomically through a temporary file;
106
- - build and runtime verification synchronize dependencies and execute plugin scripts, so they require explicit `--yes --install`; install lifecycle scripts are disabled and lockfile plus resolved-version evidence is recorded;
107
- - runtime verification uses a temporary `DSH_HOME`, not the normal `~/.dsh`;
108
- - JSON, baselines, and recovery snapshots redact plugin configuration and common secret/token/password/key fields;
109
- - global CLI installation, persistent quarantine, plugin removal, and publishing are never performed automatically by the skill.
110
-
111
- ## Use the migration CLI manually
94
+ - only migrations marked `exact` by the catalog can be changed automatically; semantic changes are not guessed mechanically;
95
+ - `migrate apply` uses a reviewed plan outside the plugin root and binds the full analysis, actual target version, and every input-file hash;
96
+ - SHA-256 is rechecked before writes, input drift rejects the apply, and existing files receive timestamped backups;
97
+ - build/runtime commands require explicit confirmation and synchronize dependencies with lifecycle scripts disabled;
98
+ - runtime verification uses a temporary `DSH_HOME` instead of installing into the developer's normal `~/.dsh`;
99
+ - JSON, baselines, and recovery snapshots redact common secret, token, password, and key fields;
100
+ - global CLI installation, persistent quarantine, plugin removal, commits, and publication are never implicit actions.
112
101
 
113
- Node.js `^22.19.0` or `>=24.0.0` is required.
102
+ ## Boundaries
114
103
 
115
- First confirm that the CLI contains the required migration:
104
+ - Doctor can report a new API owner and migration reason, but it cannot replace understanding the plugin's business logic;
105
+ - named imports and named re-exports from retained packages are recognized, while property access through namespace imports still needs manual investigation;
106
+ - `runtime-verified` proves packaging, installation, and basic activation, not UI, Service lifecycle, or business-flow correctness;
107
+ - DSH patches or prereleases outside the catalog require investigation of the additional source interval;
108
+ - static diagnosis cannot establish dynamic Service dependencies or whether plugin-owned external data is safe to delete.
116
109
 
117
- ```sh
118
- npx --yes --package=@bruc3van/dsh-doctor@0.5.5 \
119
- dsh-doctor migrations list
120
- ```
110
+ ## CLI quick reference
121
111
 
122
- ### 1. Analyze
123
-
124
- ```sh
125
- dsh-doctor migrate analyze /path/to/plugin \
126
- --from dsh-v0.1.1-rc.2 \
127
- --to dsh-v0.1.2-alpha.2 \
128
- --harness-root /path/to/deepseek-harness \
129
- --json
130
- ```
131
-
132
- Analysis checks source, dependencies, manifest, client graph, patch targets, and existing build output without executing plugin code.
133
-
134
- ### 2. Apply
135
-
136
- ```sh
137
- # Preview
138
- dsh-doctor migrate apply /path/to/plugin --safe \
139
- --plan-file /temporary/path/reviewed-migration-plan.json \
140
- --harness-root /path/to/deepseek-harness --json
141
-
142
- # Write after confirmation
143
- dsh-doctor migrate apply /path/to/plugin --safe --yes \
144
- --plan-file /temporary/path/reviewed-migration-plan.json \
145
- --harness-root /path/to/deepseek-harness --json
146
- ```
147
-
148
- The plan must stay outside the plugin root so it is not analyzed as plugin input. Apply checks the plan digest, every analyzed input, and each edit's before/after hashes; source, manifest, or other analyzed-input changes require a new reviewed plan. Deterministic dependency edits use catalog-owned Client/Host and peer/dev policies instead of inheriting the removed package's dependency section. Every changed file receives a backup.
149
-
150
- ### 3. Verify
151
-
152
- ```sh
153
- dsh-doctor migrate verify /path/to/plugin --level static \
154
- --harness-root /path/to/deepseek-harness --json
155
- dsh-doctor migrate verify /path/to/plugin --level build --yes --install \
156
- --harness-root /path/to/deepseek-harness --json
157
- dsh-doctor migrate verify /path/to/plugin --level runtime --yes --install \
158
- --harness-root /path/to/deepseek-harness --json
159
- ```
160
-
161
- | Level | What it checks |
162
- |---|---|
163
- | `static` | Rechecks source, manifest, client graph, patches, and artifacts |
164
- | `build` | Synchronizes and verifies target dependencies and the lockfile, then runs build/test scripts and scans output again |
165
- | `runtime` | After dependency and build gates, packs the real tarball and checks target DSH, installed package, bundle, and effective configuration in a temporary profile |
166
-
167
- Verification states are:
168
-
169
- ```text
170
- analyzed → source-migrated → artifact-verified → runtime-verified
171
- ```
172
-
173
- `runtime-verified` means that packing, installation, and basic activation passed. It does not replace real UI, Service lifecycle, and business-flow testing.
174
-
175
- ## Diagnose DSH and installed plugins
176
-
177
- Global installation:
112
+ Requires Node.js `^22.19.0` or `>=24.0.0`.
178
113
 
179
114
  ```sh
115
+ # Global installation
180
116
  npm install --global @bruc3van/dsh-doctor
181
- dsh-doctor diagnose
182
- ```
183
-
184
- Temporary use:
185
-
186
- ```sh
187
- npx @bruc3van/dsh-doctor diagnose
188
- ```
189
-
190
- The default target is `$DSH_HOME/profiles/web`, falling back to `~/.dsh`.
191
-
192
- ```sh
193
- dsh-doctor diagnose
194
- dsh-doctor diagnose --json
195
- dsh-doctor diagnose --check-updates
196
- ```
197
117
 
198
- Diagnosis composes configuration in DSH order:
199
-
200
- ```text
201
- bundle layers → profile cordis.patch.yml → home cordis.patch.yml → CLI overlays
118
+ # Or run one pinned version without changing the global installation
119
+ npm exec --yes --package=@bruc3van/dsh-doctor@<version> -- dsh-doctor --help
202
120
  ```
203
121
 
204
- It checks plugin versions and peers, Node engines, installation and lockfile state, bundles and patches, client contracts, duplicate mounts, higher-layer overrides, and DSH CLI/Harness version drift. Normal diagnosis does not use the network. Only `--check-updates` and recovery operations contact the npm registry.
205
-
206
- ## Recovery operations
207
-
208
- ```sh
209
- # Check and install the highest manifest-declared compatible version
210
- dsh-doctor recover @scope/plugin --action check-update
211
- dsh-doctor recover @scope/plugin --action update
212
- dsh-doctor recover @scope/plugin --action update --yes
213
-
214
- # Create a temporary quarantine overlay
215
- dsh-doctor recover @scope/plugin --action quarantine \
216
- --output ./plugin-quarantine.yml
217
-
218
- # Persist it only after testing the temporary overlay
219
- dsh-doctor recover @scope/plugin --action persist-quarantine --verified
220
- dsh-doctor recover @scope/plugin --action persist-quarantine --verified --yes
221
-
222
- # Removal is always separate
223
- dsh-doctor recover @scope/plugin --action remove
224
- dsh-doctor recover @scope/plugin --action remove --yes
225
- ```
226
-
227
- Before quarantine or removal, Doctor checks entry ownership, configuration layers, direct dependencies, core bundles, lockfile state, manual mounts, and known client dependents. Static checks cannot prove dynamic Service dependencies or external data safety, so restart the profile and test its main features afterwards.
228
-
229
- You can also save and compare a baseline around an upgrade:
122
+ | Command | Purpose |
123
+ |---|---|
124
+ | `dsh-doctor diagnose [--json] [--check-updates]` | Diagnose the current profile and installed plugins; normal diagnosis does not use the network |
125
+ | `dsh-doctor migrations list` | List the exact migration catalogs bundled with the current CLI |
126
+ | `dsh-doctor migrate analyze` / `apply` / `verify` | Analyze a migration, apply a reviewed plan, or run static/build/runtime verification |
127
+ | `dsh-doctor baseline create` / `compare` | Save or compare a redacted before/after diagnostic baseline |
128
+ | `dsh-doctor recover <package> --action <action>` | Check updates, generate/persist/roll back quarantine, or enter the separate removal workflow |
230
129
 
231
- ```sh
232
- dsh-doctor baseline create
233
- dsh-doctor baseline compare
234
- ```
130
+ Use `dsh-doctor --help` for full options and confirmation requirements. Migration orchestration and semantic-investigation rules live in [`dsh-plugin-upgrade`](skills/dsh-plugin-upgrade/SKILL.md) and its references.
235
131
 
236
132
  ## Output and exit codes
237
133
 
238
- Text output supports Chinese and English. `--json` uses stable English codes and keeps redacted structured evidence.
134
+ Text output supports Chinese and English. `--json` uses stable English codes and preserves redacted structured evidence.
239
135
 
240
136
  | Exit code | Meaning |
241
137
  |---|---|
242
- | `0` | No blocker remains, or the action completed and passed its verification |
243
- | `1` | Compatibility issues, semantic migration, or verification work remains |
244
- | `2` | Argument, environment, or action-execution failure |
138
+ | `0` | No blocking error, or the operation completed and passed its verification level |
139
+ | `1` | Compatibility issues, semantic migration work, or incomplete verification remains |
140
+ | `2` | Argument, environment, or operation failure |
245
141
 
246
142
  ## Development
247
143
 
@@ -251,6 +147,6 @@ npm run check
251
147
  npm pack --dry-run
252
148
  ```
253
149
 
254
- Tests cover the CLI, configuration composition, diagnosis, redaction, backups and write protection, AST migration, build gates, isolated runtime verification, and recovery operations. CI tests Node.js `22.19` and `24` on macOS, Ubuntu, and Windows.
150
+ Tests cover the CLI, configuration composition, diagnosis, redaction, backups and write protection, AST migration, build gates, isolated runtime verification, and recovery. CI runs on macOS, Ubuntu, and Windows with Node.js `22.19` and `24`.
255
151
 
256
152
  Local development, the skill, and the CLI never commit, tag, or publish automatically.