@twinsearth/w2m-dsh-plugin 1.0.1 → 1.0.2

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/CHANGELOG.md CHANGED
@@ -2,6 +2,63 @@
2
2
 
3
3
  All notable changes to this project are documented here.
4
4
 
5
+ ## [1.0.2] — 2026-10-16
6
+
7
+ **One missing line made the whole plugin fail to mount, and it had been missing since v0.41.0.**
8
+
9
+ ### The defect
10
+
11
+ JsonSchemaError: unsupported JSON schema:
12
+ parameters.accept_block.additionalProperties must be explicitly true or false at authorError
13
+ at parameterSchemaSpecToJsonSchema (dsh-tools/lib/index.js:803)
14
+ at defineTool (dsh-tools/lib/index.js:848)
15
+ at Object.apply (src/plugin/tools.mjs:5025)
16
+
17
+ `w2m_memory`'s `accept_block` was declared as `type: 'object'` **without `additionalProperties`**, and DSH's
18
+ compiler requires it to be explicit. **The throw happens while the tool is being defined, so the entire fiber fails
19
+ to mount** — the client shows the package as `异常`, **all eleven tools disappear**, and the message is visible
20
+ only if something gets far enough to print it.
21
+
22
+ **That single parameter is the whole failure.** Checked across the entire tool surface: **one `type: 'object'`
23
+ parameter exists in this file, and it was the one.**
24
+
25
+ ### Verified against the real compiler, not the shim
26
+
27
+ `verify-installed.mjs` runs against an offline shim that checks shape only, **which is why it reported
28
+ `PASS: 11 tools registered` for every broken version**. The real `@deepseek-ai/dsh-tools` was extracted from
29
+ `app.asar` — 10,913 entries, preserving the `node_modules` layout so bare specifiers resolve — and the same call
30
+ was made against it both ways:
31
+
32
+ WITHOUT additionalProperties -> THREW JsonSchemaError: ... must be explicitly true or false
33
+ WITH additionalProperties -> ACCEPTED
34
+
35
+ **Same error, same code path as the client reported.** That is the first measurement in this session taken from the
36
+ compiler that actually runs.
37
+
38
+ ### `true`, not `false`
39
+
40
+ `verifyBlock()` and `acceptWithAuthority()` already validate the block's structure and its hash, **so the schema
41
+ is not the guard here**. A peer that adds a field outside the seven would be refused **for a reason that has nothing
42
+ to do with trust**, and refusing a legitimate block is the worse of the two errors.
43
+
44
+ ### Why this took so long to find, stated plainly
45
+
46
+ **The error was invisible until the installer was used.** When the package was installed with `pnpm` and then
47
+ removed, the client failed *earlier*, with `cannot resolve profile bundle`, which names a resolution problem and
48
+ not a schema one. **Installing through the plugin manager took it far enough to reach `defineTool` and print the
49
+ real cause.**
50
+
51
+ **So the user's instinct was right in the way that mattered**: not that the official path behaves differently, but
52
+ that it is the path which gets far enough to report the truth. Four earlier rounds of diagnosis — a fabricated
53
+ incompatibility with the host, a mount-row duplicate, a release-notes defect, a runtime-discovery defect — were all
54
+ real, and **none of them was this**.
55
+
56
+ ### The method that worked
57
+
58
+ I extracted the host's own compiler from `app.asar` and called it directly. **Every previous attempt had tested
59
+ against a shim, a clone, or an inference**, and each of those agreed with the broken declaration. **The only
60
+ measurement that disagreed was the one taken from the code that throws.**
61
+
5
62
  ## [1.0.1] — 2026-10-16
6
63
 
7
64
  **The first stable release. Three defects fixed, two of them mine and one of them published 56 times.**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twinsearth/w2m-dsh-plugin",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "DSH: Windows2MacOS — drive the same project on online Windows and macOS machines from one DeepSeek account, across networks and regions. P2P hole punching is the default path (relay + shared server as rendezvous, ledger and fallback), with a bundled STUN responder, Tailscale/public-VPS/tunnel shapes, Rabbit relay + per-machine Localside + eight DSH tools (replicate / split), nine aggregate verdicts and signed requests.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "twinsearth-w2m-dsh",
4
- "version": "1.0.1",
4
+ "version": "1.0.2",
5
5
  "description": "Cross-platform fleet execution between Windows and macOS: one DeepSeek Harness account, a Rabbit relay, and signed device identity. Ships four Agent Skills describing fleet dispatch, field-level memory acceptance, session references, and resource scheduling.",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -208,7 +208,7 @@ const MAX_STAGES = 16;
208
208
  * `package.json` during `scripts/pack.mjs` rather than hand-maintained, and `W2M_PLUGIN_VERSION`
209
209
  * overrides it at runtime for tests and packagers.
210
210
  */
211
- const PLUGIN_VERSION = '1.0.1';
211
+ const PLUGIN_VERSION = '1.0.2';
212
212
 
213
213
  /** How long any single HTTP call may take before it is aborted, in milliseconds. */
214
214
  const DEFAULT_REQUEST_TIMEOUT_MS = 15_000;
@@ -5067,6 +5067,33 @@ export async function apply(ctx, config = {}) {
5067
5067
  },
5068
5068
  accept_block: {
5069
5069
  type: 'object',
5070
+ /**
5071
+ * `true`, and it has to be stated.
5072
+ *
5073
+ * ## The defect this closes, and why it took so long to see
5074
+ *
5075
+ * DSH's `parameterSchemaSpecToJsonSchema` **requires an explicit `additionalProperties` on every
5076
+ * `type: 'object'` parameter** and throws otherwise:
5077
+ *
5078
+ * JsonSchemaError: unsupported JSON schema:
5079
+ * parameters.accept_block.additionalProperties must be explicitly true or false at authorError
5080
+ * at parameterSchemaSpecToJsonSchema (dsh-tools/lib/index.js:803)
5081
+ * at defineTool (dsh-tools/lib/index.js:848)
5082
+ * at Object.apply (src/plugin/tools.mjs:5025)
5083
+ *
5084
+ * **The throw happens while the tool is being defined, so the whole fiber fails to mount** -- the client
5085
+ * reports the package as `异常`, none of the eleven tools appear, and **the message is only visible if
5086
+ * something gets far enough to print it.** This parameter has had that shape since v0.41.0, so the
5087
+ * failure dates from then.
5088
+ *
5089
+ * **`true` rather than `false`:** `verifyBlock()` and `acceptWithAuthority()` already validate the block's
5090
+ * structure and hash, so the schema is not the guard here, and a peer that adds a field outside the seven
5091
+ * would be **refused for a reason that has nothing to do with trust**. Refusing a legitimate block is the
5092
+ * worse error of the two.
5093
+ *
5094
+ * Only one parameter in this file had the shape -- checked across the whole tool surface, not just here.
5095
+ */
5096
+ additionalProperties: true,
5070
5097
  description:
5071
5098
  'v0.41.0. Accept a CAT7 cognitive block received from another machine, per field, DRIVEN BY AN ' +
5072
5099
  'AUTHORITY LEVEL (actor_authority below) rather than accepted whole. A field the level cannot ' +