@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 +57 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/src/plugin/tools.mjs +28 -1
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.
|
|
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.
|
|
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": [
|
package/src/plugin/tools.mjs
CHANGED
|
@@ -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.
|
|
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 ' +
|