@twinsearth/w2m-dsh-plugin 1.5.3 → 1.5.4
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.
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "The w2m fleet plugins: one account, many machines, any of Windows, macOS or Linux.",
|
|
8
|
-
"version": "1.5.
|
|
8
|
+
"version": "1.5.4"
|
|
9
9
|
},
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "w2m-fleet",
|
|
13
13
|
"source": "./",
|
|
14
14
|
"description": "Read fleet state and dispatch commands across the machines registered to one account. Read-only MCP surface: the five exposed tools cannot change anything.",
|
|
15
|
-
"version": "1.5.
|
|
15
|
+
"version": "1.5.4",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "TwinsEarth"
|
|
18
18
|
},
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
]
|
|
27
27
|
}
|
|
28
28
|
],
|
|
29
|
-
"version": "1.5.
|
|
29
|
+
"version": "1.5.4"
|
|
30
30
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "w2m-fleet",
|
|
3
3
|
"description": "Drive the same project on online Windows, macOS and Linux machines from one account: read fleet state, dispatch commands and read results. The MCP surface is deliberately read-only.",
|
|
4
|
-
"version": "1.5.
|
|
4
|
+
"version": "1.5.4",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "TwinsEarth"
|
|
7
7
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,19 @@
|
|
|
7
7
|
|
|
8
8
|
All notable changes to this project are documented here.
|
|
9
9
|
|
|
10
|
+
## [1.5.4] — 2026-10-23
|
|
11
|
+
|
|
12
|
+
**验签 bootstrap 的结果覆盖过期的显式 relay(现场故障:设备仍指向 127.0.0.1)。**
|
|
13
|
+
|
|
14
|
+
现场证据:DSH 升级到 v1.5.3 后仍报 `W2M_UNREACHABLE: could not reach the Rabbit at
|
|
15
|
+
http://127.0.0.1:8787`——它的 profile 仍显式写着本机地址,v1.5.3 只在“无显式 relay”时才采用
|
|
16
|
+
bootstrap 池,于是拿到池却继续拨 loopback。
|
|
17
|
+
|
|
18
|
+
- bootstrap 验签成功后**总是采用** `relays[0]` 作为 `rabbitUrl`,并 warn 记录被替换的旧地址;
|
|
19
|
+
想固定 relay 的运维应显式设置 `relayUrls`(此时 bootstrap 分支不执行)。
|
|
20
|
+
- 只影响“验签通过”的答案;失败仍保持原配置并写 `w2m_status.bootstrap.last_error`。
|
|
21
|
+
- 测试:bootstrap 6/6、bootstrap-cli 6/6;证据 `docs/acceptance/1.5.4/BOOTSTRAP-WINS.json`
|
|
22
|
+
(fleet task `01M5ANYMVL0FV9C`)。
|
|
10
23
|
## [1.5.3] — 2026-10-23
|
|
11
24
|
|
|
12
25
|
**零接触自动入队:只能升级插件的机器也能自己找到编队。**
|
package/codex/mcp-servers.toml
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.5.4",
|
|
3
|
+
"case": "BOOTSTRAP-WINS",
|
|
4
|
+
"kind": "positive",
|
|
5
|
+
"machines": [
|
|
6
|
+
"b53a37f4-1464-4512-9259-33a7df091e3e"
|
|
7
|
+
],
|
|
8
|
+
"executed_at": "2026-10-23T13:33:16.362Z",
|
|
9
|
+
"executor": "lead",
|
|
10
|
+
"requirement": "a verified bootstrap answer replaces a stale explicit rabbitUrl, so an upgrade-only machine that named a dead local relay still reaches the operator relay pool",
|
|
11
|
+
"task_id": "01M5ANYMVL0FV9C",
|
|
12
|
+
"result": {
|
|
13
|
+
"outcome": "ok",
|
|
14
|
+
"assertions": {
|
|
15
|
+
"bootstrap_suite": "6/6 pass",
|
|
16
|
+
"override_branch": "adopted relays[0] with a warning naming the replaced URL"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"note": "suites ran as a real fleet task; the override is the v1.5.4 delta"
|
|
20
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twinsearth/w2m-dsh-plugin",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.4",
|
|
4
4
|
"description": "Run one project across your own Windows and macOS machines from a single DeepSeek account, through 11 w2m_* tools. Four coordination modes (replicate, split, broadcast, pipeline) and six aggregate verdicts (consistent, divergent, divergent-platform, failed, partial, unverifiable). P2P hole punching by default, with a bundled relay, STUN responder and ledger fallback, so the fleet needs no third-party service. Joining needs a pairing code plus autoStartAgent: true; installing alone does not join.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
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.5.
|
|
4
|
+
"version": "1.5.4",
|
|
5
5
|
"description": "Run one project across your own Windows and macOS machines from a single DeepSeek account, through 12 w2m_* tools. Four coordination modes (replicate, split, broadcast, pipeline) and six aggregate verdicts (consistent, divergent, divergent-platform, failed, partial, unverifiable). P2P hole punching by default, with a bundled relay, STUN responder and ledger fallback, so the fleet needs no third-party service. Joining needs a pairing code plus autoStartAgent: true; installing alone does not join.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"keywords": [
|
package/src/plugin/tools.mjs
CHANGED
|
@@ -277,7 +277,7 @@ const MAX_STAGES = 16;
|
|
|
277
277
|
* `package.json` during `scripts/pack.mjs` rather than hand-maintained, and `W2M_PLUGIN_VERSION`
|
|
278
278
|
* overrides it at runtime for tests and packagers.
|
|
279
279
|
*/
|
|
280
|
-
const PLUGIN_VERSION = '1.5.
|
|
280
|
+
const PLUGIN_VERSION = '1.5.4';
|
|
281
281
|
|
|
282
282
|
/** How long any single HTTP call may take before it is aborted, in milliseconds. */
|
|
283
283
|
const DEFAULT_REQUEST_TIMEOUT_MS = 15_000;
|
|
@@ -7400,7 +7400,15 @@ async function startLocalStack(ctx, cfg) {
|
|
|
7400
7400
|
});
|
|
7401
7401
|
if (outcome.ok === true) {
|
|
7402
7402
|
cfg.relayUrls = outcome.relays;
|
|
7403
|
-
|
|
7403
|
+
const previousRelay = cfg.rabbitUrl; // v1.5.4: capture what a stale profile pinned
|
|
7404
|
+
// v1.5.4: a verified bootstrap answer WINS over a stale explicit rabbitUrl. A field machine
|
|
7405
|
+
// still named 127.0.0.1:8787 (a local relay that is not running), so v1.5.3 adopted the pool but
|
|
7406
|
+
// kept dialing loopback and reported W2M_UNREACHABLE. To pin a relay instead, set relayUrls.
|
|
7407
|
+
cfg.rabbitUrl = outcome.relays[0];
|
|
7408
|
+
cfg.rabbitSource = 'bootstrap';
|
|
7409
|
+
if (typeof previousRelay === 'string' && previousRelay !== outcome.relays[0]) {
|
|
7410
|
+
ctx.logger?.warn?.('w2m: bootstrap replaced the configured relay ' + previousRelay + ' with ' + outcome.relays[0]);
|
|
7411
|
+
}
|
|
7404
7412
|
cfg.bootstrap = { configured: true, url: cfg.bootstrapUrl, source: outcome.source, relays: outcome.relays, expires_at: outcome.expires_at, last_error: null };
|
|
7405
7413
|
ctx.logger?.info?.('w2m: bootstrap assigned relays (' + outcome.relays.join(', ') + ')');
|
|
7406
7414
|
} else {
|