@twinsearth/w2m-dsh-plugin 3.1.0 → 3.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/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +21 -0
- package/README.md +16 -1
- package/codex/mcp-servers.toml +1 -1
- package/cordis.patch.yml +5 -0
- package/docs/acceptance/3.2.0/RELEASE-3200.json +47 -0
- package/lib/contract.js +22 -0
- package/package.json +7 -4
- package/plugin.json +1 -1
- package/src/interop/contract/LICENSE +661 -0
- package/src/interop/contract/PROVENANCE.md +26 -0
- package/src/interop/contract/client.js +93 -0
- package/src/interop/contract/constants.js +94 -0
- package/src/interop/contract/envelope.js +83 -0
- package/src/interop/contract/index.js +20 -0
- package/src/interop/contract/negotiate.js +106 -0
- package/src/interop/contract/relay.js +229 -0
- package/src/interop/contract/server.js +77 -0
- package/src/interop/contract/transports.js +319 -0
- package/src/interop/index.mjs +270 -0
- package/src/plugin/tools.mjs +1 -1
|
@@ -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": "3.
|
|
8
|
+
"version": "3.2.0"
|
|
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": "3.
|
|
15
|
+
"version": "3.2.0",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "TwinsEarth"
|
|
18
18
|
},
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
]
|
|
27
27
|
}
|
|
28
28
|
],
|
|
29
|
-
"version": "3.
|
|
29
|
+
"version": "3.2.0"
|
|
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": "3.
|
|
4
|
+
"version": "3.2.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "TwinsEarth"
|
|
7
7
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,27 @@ All notable changes to this project are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [3.2.0] - 2026-11-14
|
|
8
|
+
|
|
9
|
+
- 互联契约子插件:`@twinsearth/w2m-dsh-plugin/contract`,基于独立发布的版本化契约 SDK
|
|
10
|
+
`@twinsearth/dsh-fang-contract@1.1.1`(逐字节副本 + `src/interop/contract/PROVENANCE.md`,
|
|
11
|
+
`scripts/check-contract-vendor.mjs` 逐字节复核并纳入测试)。三个项目(w2m / 瓮城 dsh-fang / 房主
|
|
12
|
+
dsh-master)各自独立发布,互不 import 内部代码、互不改对方资料,只经方法表 + 信封 + 传输层互联。
|
|
13
|
+
- w2m 方法表(`w2m.*`,契约版本 `1.0.0`,与插件版本解耦):`w2m.status`、`w2m.methods`、
|
|
14
|
+
`w2m.fleet.snapshot`、`w2m.devices.list`、`w2m.tasks.list`;MINOR 只新增,删/改义升 MAJOR 并双写。
|
|
15
|
+
provider 由 `w2m.*` 宿主注入(`providers` 或 `w2mContractProviders` 服务),缺席时如实报
|
|
16
|
+
`handler-threw: … exposes no … provider`,不返回空数据冒充成功。
|
|
17
|
+
- 服务端:`createContractServer` 承载 hello/health/invoke(协议 `fang-master` v1);提供
|
|
18
|
+
`w2mContract` 服务;同宿主对端(fang/master 的 local 传输)默认找 `fangContract`,本插件在该名
|
|
19
|
+
缺席时补位、已存在时不覆盖,避免与瓮城抢服务键。HTTP 路由固定 `/api/w2m/contract/{hello,health,invoke}`,
|
|
20
|
+
不占用 fang 的 `/fang/api/contract/*`;配置 `fileDir` 时再挂 file 兜底服务端。
|
|
21
|
+
- 客户端:`createW2mContractClient` 复用 SDK 的 **local → http → file → legacy** 四级自动降级
|
|
22
|
+
(legacy 走 3.1.x 旧服务键 `fangForker` 等兜底),可调用 `fang.*` / `contract.*` / `w2m.*` 方法。
|
|
23
|
+
- 与 3.1.0 的关系:本版包含 3.0.0(决策中心)与 3.1.0(队列子插件)的全部内容,三者一起作为
|
|
24
|
+
v3.2.0 发布;版本号语义仍各自独立(插件 3.2.0 / w2m 契约 1.0.0 / 契约 SDK 1.1.1)。
|
|
25
|
+
- 测试:新增 `test/contract-interop.test.mjs` 9 项(方法表与 hello 广告、信封往返与显式拒绝、
|
|
26
|
+
provider 注入与缺席、三路由注册、服务补位/不覆盖、local/http/file/legacy 四级降级、SDK 副本逐字节一致)。
|
|
27
|
+
|
|
7
28
|
## [3.1.0] - 2026-11-14
|
|
8
29
|
|
|
9
30
|
- 队列子插件:`@twinsearth/dsh-fang-queue-journal`(瓮城)移植为 `@twinsearth/w2m-dsh-plugin/queue-journal`。
|
package/README.md
CHANGED
|
@@ -93,7 +93,7 @@ w2m-mcp --help
|
|
|
93
93
|
# 复制进你自己的 codex/mcp-servers.toml
|
|
94
94
|
[mcp_servers.w2m]
|
|
95
95
|
command = "npx"
|
|
96
|
-
args = ["-y", "@twinsearth/w2m-dsh-plugin@3.
|
|
96
|
+
args = ["-y", "@twinsearth/w2m-dsh-plugin@3.2.0", "w2m-mcp"]
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
### 5. 验证过的 release tarball(离线)
|
|
@@ -195,3 +195,18 @@ plugins:
|
|
|
195
195
|
- [Issues](https://github.com/TwinsEarth/dsh-windows2macos/issues)
|
|
196
196
|
|
|
197
197
|
MIT.
|
|
198
|
+
|
|
199
|
+
## 互联契约(contract 1.x)
|
|
200
|
+
|
|
201
|
+
`@twinsearth/w2m-dsh-plugin/contract` 是 w2m 与瓮城 dsh-Fang、房主 dsh-Master 之间的唯一通道:
|
|
202
|
+
三个项目各自独立发布、互不 import 内部代码,只经由版本化契约 SDK
|
|
203
|
+
`@twinsearth/dsh-fang-contract` 的方法表 + 信封 + 传输层协作。
|
|
204
|
+
|
|
205
|
+
- 子插件行:`@twinsearth/w2m-dsh-plugin/contract`(默认启用)。
|
|
206
|
+
- 服务端方法(`w2m.*`,契约版本 1.0.0):`w2m.status`、`w2m.methods`、`w2m.fleet.snapshot`、
|
|
207
|
+
`w2m.devices.list`、`w2m.tasks.list`。
|
|
208
|
+
- HTTP:`POST /api/w2m/contract/invoke`、`GET /api/w2m/contract/hello`、`GET /api/w2m/contract/health`。
|
|
209
|
+
- 同宿主互通走 local 服务:w2m 提供 `w2mContract`,并在 `fangContract` 缺席时补位(已存在则不覆盖)。
|
|
210
|
+
- 跨宿主互通走 http 或 file:客户端按 **local → http → file → legacy** 自动降级。
|
|
211
|
+
- 升级契约 SDK:`npm pack @twinsearth/dsh-fang-contract@<版本>` → 覆盖 `src/interop/contract/` →
|
|
212
|
+
重生成 `PROVENANCE.md` → `npm run verify:contract`。
|
package/codex/mcp-servers.toml
CHANGED
package/cordis.patch.yml
CHANGED
|
@@ -153,6 +153,11 @@
|
|
|
153
153
|
# carries no config so the plugin's own defaults apply.
|
|
154
154
|
# 队列日志 (queue journal): composer drafts and the queue mirror, ported from dsh-Fang's
|
|
155
155
|
# @twinsearth/dsh-fang-queue-journal in v3.1.0. Enabled so the composer dock appears.
|
|
156
|
+
# 互联契约 (contract 1.x): w2m.* methods over the published @twinsearth/dsh-fang-contract SDK.
|
|
157
|
+
# Independent from dsh-fang and dsh-master: no shared code, only method table + envelope + transport.
|
|
158
|
+
- id: dsh-w2m-contract
|
|
159
|
+
name: '@twinsearth/w2m-dsh-plugin/contract'
|
|
160
|
+
config: {}
|
|
156
161
|
- id: dsh-queue-journal
|
|
157
162
|
name: '@twinsearth/w2m-dsh-plugin/queue-journal'
|
|
158
163
|
config: {}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "3.2.0",
|
|
3
|
+
"case": "RELEASE-3200",
|
|
4
|
+
"kind": "positive",
|
|
5
|
+
"machines": [
|
|
6
|
+
"b53a37f4-1464-4512-9259-33a7df091e3e"
|
|
7
|
+
],
|
|
8
|
+
"executed_at": "2026-11-14T01:11:13.111Z",
|
|
9
|
+
"executor": "lead",
|
|
10
|
+
"task_id": "pre-release-3200",
|
|
11
|
+
"requirement": "v3.2.0: w2m speaks the independently published, versioned interop contract SDK (@twinsearth/dsh-fang-contract 1.1.1) for w2m <-> dsh-fang and w2m <-> dsh-master interop: own w2m.* method table, server (local service + /api/w2m/contract routes + optional file fallback), client with local->http->file->legacy downgrade, and byte-identical vendored SDK copy; no dsh-fang or dsh-master source is imported or modified",
|
|
12
|
+
"commands": [
|
|
13
|
+
[
|
|
14
|
+
"node",
|
|
15
|
+
"--test",
|
|
16
|
+
"--test-force-exit",
|
|
17
|
+
"test/contract-interop.test.mjs"
|
|
18
|
+
],
|
|
19
|
+
[
|
|
20
|
+
"node",
|
|
21
|
+
"--test",
|
|
22
|
+
"--test-force-exit",
|
|
23
|
+
"test/layer-model.test.mjs",
|
|
24
|
+
"test/claims.test.mjs"
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
"node",
|
|
28
|
+
"scripts/check-contract-vendor.mjs"
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
"node",
|
|
32
|
+
"scripts/pack.mjs"
|
|
33
|
+
]
|
|
34
|
+
],
|
|
35
|
+
"result": {
|
|
36
|
+
"outcome": "ok",
|
|
37
|
+
"assertions": {
|
|
38
|
+
"independence": "the three projects stay independent: w2m imports no dsh-fang or dsh-master source, modifies neither tree, and depends only on the published @twinsearth/dsh-fang-contract package, whose 1.1.1 files are vendored byte for byte under src/interop/contract/ with sha256 recorded in PROVENANCE.md",
|
|
39
|
+
"methodTable": "w2m.* methods at contractVersion 1.0.0: w2m.status, w2m.methods, w2m.fleet.snapshot, w2m.devices.list, w2m.tasks.list; the SDK protocol (fang-master v1) and contract package version (1.1.1) stay separate from the plugin version (3.2.0)",
|
|
40
|
+
"server": "createW2mContractServer wraps the SDK server; apply() provides w2mContract, yields the fangContract name only when it is free, registers /api/w2m/contract/{hello,health,invoke} on the connection registry and mounts the SDK file contract server when fileDir is configured",
|
|
41
|
+
"client": "createW2mContractClient reuses the SDK router, so local -> http -> file -> legacy downgrade works; the legacy hop calls the 3.1.x service keys (fangForker etc.) as the last resort",
|
|
42
|
+
"suites": "contract-interop 9/9; layer model and claims 71 pass with 1 network skip; vendor checker 9/9 files match PROVENANCE.md",
|
|
43
|
+
"no_fake_data": "a handler without an injected provider answers handler-threw carrying w2m-service-absent instead of returning empty success data",
|
|
44
|
+
"artifact": "scripts/pack.mjs packs dist/twinsearth-w2m-dsh-plugin-3.2.0.tgz deterministically; the published sha256 is the one release.yml writes into dist/SHA256SUMS, so the record does not restate the hash of the archive that contains it"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
package/lib/contract.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-facing entry for W2M's interop contract layer: `@twinsearth/w2m-dsh-plugin/contract`.
|
|
3
|
+
*
|
|
4
|
+
* The documented subpath a profile row names to expose `w2m.*` methods (local service + HTTP routes)
|
|
5
|
+
* and to reach peers through the published contract SDK's local → http → file → legacy fallback.
|
|
6
|
+
* The vendored SDK copy and its provenance live in `src/interop/contract/`.
|
|
7
|
+
*/
|
|
8
|
+
export {
|
|
9
|
+
CONTRACT_LOCAL_SERVICE,
|
|
10
|
+
CONTRACT_ROUTE_PREFIX,
|
|
11
|
+
W2M_CONTRACT_CAPABILITIES,
|
|
12
|
+
W2M_CONTRACT_SERVICE,
|
|
13
|
+
W2M_CONTRACT_VERSION,
|
|
14
|
+
W2M_METHODS,
|
|
15
|
+
W2M_METHOD_VERSION,
|
|
16
|
+
apply,
|
|
17
|
+
createW2mContractClient,
|
|
18
|
+
createW2mContractServer,
|
|
19
|
+
inject,
|
|
20
|
+
name,
|
|
21
|
+
registerContractRoutes,
|
|
22
|
+
} from '../src/interop/index.mjs';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twinsearth/w2m-dsh-plugin",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
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": {
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"./decision-center": "./lib/decision-center.js",
|
|
17
17
|
"./locale/en.json": "./locale/en.json",
|
|
18
18
|
"./locale/zh.json": "./locale/zh.json",
|
|
19
|
-
"./queue-journal": "./lib/queue-journal.js"
|
|
19
|
+
"./queue-journal": "./lib/queue-journal.js",
|
|
20
|
+
"./contract": "./lib/contract.js"
|
|
20
21
|
},
|
|
21
22
|
"dsh": {
|
|
22
23
|
"plugin": true,
|
|
@@ -74,7 +75,7 @@
|
|
|
74
75
|
"pack": "node scripts/pack.mjs",
|
|
75
76
|
"reachability": "node scripts/reachability-check.mjs",
|
|
76
77
|
"reachability:classify": "node scripts/reachability-classify.mjs",
|
|
77
|
-
"test": "node --test --test-force-exit test/relay.test.mjs test/broadcast.test.mjs test/blake2s.test.mjs test/agent.test.mjs test/plan-sec-cmd.test.mjs test/authority.test.mjs test/blocks.test.mjs test/approval-index.test.mjs test/fleet-sync.test.mjs test/fleet-merge.test.mjs test/fleet-memory-e2e.test.mjs test/fleet-concurrency.test.mjs test/fleet-merge-race.test.mjs test/health.test.mjs test/storage.test.mjs test/exit-channel.test.mjs test/council.test.mjs test/council-session.test.mjs test/log-bounds.test.mjs test/test-report.test.mjs test/fleet-scale.test.mjs test/fleet-state.test.mjs test/crypto-blake2s.test.mjs test/installed-version.test.mjs test/permission.test.mjs test/machine-test-packet.test.mjs test/field-authority.test.mjs test/approval-gate.test.mjs test/authority-choice.test.mjs test/reachability-check.test.mjs test/reachability-classify.test.mjs test/accepted-orphans.test.mjs test/acceptance-doc.test.mjs test/layer-model.test.mjs test/cwd-containment.test.mjs test/cwd-outside-project.test.mjs test/memory.test.mjs test/tools.test.mjs test/claims.test.mjs test/fleet-target.test.mjs test/client-bundle.test.mjs test/schedule.test.mjs test/auto-update.test.mjs test/update-source.test.mjs test/update-install.test.mjs test/update-wiring.test.mjs test/signing.test.mjs test/stress.test.mjs test/shared-config.test.mjs test/metrics.test.mjs test/metrics-route.test.mjs test/tool-cards.test.mjs test/p2p-stun.test.mjs test/p2p-transport.test.mjs test/p2p-signaling.test.mjs test/p2p-node.test.mjs test/p2p-transport-fields.test.mjs test/p2p-plugin.test.mjs test/p2p-crypto.test.mjs test/stun-server.test.mjs test/loader-entry.test.mjs test/mdns-wire.test.mjs test/mdns-discover.test.mjs test/chatops-approval.test.mjs test/chatops-policy.test.mjs test/chatops-file-safety.test.mjs test/chatops-outbound-queue.test.mjs test/chatops-commands.test.mjs test/chatops-bridge.test.mjs test/chatops-config-route.test.mjs test/chatops-apply.test.mjs test/chatops-ilink-contract.test.mjs test/chatops-fleet.test.mjs test/chatops-account.test.mjs test/chatops-auth.test.mjs test/chatops-fleet-scope.test.mjs test/chatops-handoff.test.mjs test/chatops-fleet-wiring.test.mjs test/chatops-fleet-live.test.mjs test/chatops-takeover.test.mjs test/chatops-device-signing.test.mjs test/chatops-relay-verify.test.mjs test/chatops-durability.test.mjs test/chatops-run-command.test.mjs test/secrets-guard.test.mjs test/chatops-ilink-fleet-bridge.test.mjs test/agent-plugins.test.mjs test/memory-layer.test.mjs test/mcp-server.test.mjs test/portable-plugins.test.mjs test/mcp-http.test.mjs test/mcp-http-live.test.mjs test/vision.test.mjs test/ilink-shape.test.mjs test/chatops-fleet-join.test.mjs test/admission.test.mjs test/admission-routes.test.mjs test/join-degradation.test.mjs test/account-identity.test.mjs test/join-challenge.test.mjs test/exec-env-injection.test.mjs test/account-join.test.mjs test/fleet-messages.test.mjs test/message-shards.test.mjs test/fleet-messages-http.test.mjs test/message-notify.test.mjs test/update-channels.test.mjs test/update-prerelease.test.mjs test/session-watch.test.mjs test/session-readonly.test.mjs test/session-sync.test.mjs test/fleet-chat-identity.test.mjs test/identity-reader.test.mjs test/intents.test.mjs test/dataflow.test.mjs test/council-fleet.test.mjs test/fleet-memory.test.mjs test/memory-view.test.mjs test/schema-spec.test.mjs test/fleet-weight-parity.test.mjs test/task-deps.test.mjs test/dataflow-wiring.test.mjs test/task-graph.test.mjs test/ask-store.test.mjs test/turn.test.mjs test/fleet-members.test.mjs test/redact.test.mjs test/policy-matrix.test.mjs test/envelope-signature.test.mjs test/chat-crypto.test.mjs test/reduce-suggestion.test.mjs test/merge-hint.test.mjs test/fleet-chat-route.test.mjs test/maintenance.test.mjs test/maintenance-ferry.test.mjs test/grant.test.mjs test/grant-gate.test.mjs test/worktree.test.mjs test/patch-artifact.test.mjs test/merge-queue.test.mjs test/m3-workflow.test.mjs test/project-room.test.mjs test/project-attribution.test.mjs test/project-locks.test.mjs test/project-reviews.test.mjs test/project-notifications.test.mjs test/blob-sessions.test.mjs test/outbox.test.mjs test/reliability-metrics.test.mjs test/evidence.test.mjs test/grant-issue.test.mjs test/project-refs.test.mjs test/exec-capability.test.mjs test/secondary-link.test.mjs test/bootstrap-cli.test.mjs test/bootstrap.test.mjs test/windows-hidden-task.test.mjs test/relay-failover.test.mjs test/npm-update.test.mjs test/agent-start-nonblocking.test.mjs test/fleet-chat-capture.test.mjs test/capture-route.test.mjs test/update-resolver.test.mjs test/agent-identity-safe.test.mjs test/re-pair-stale-token.test.mjs test/gpw-folder-policy.test.mjs test/gpw-activation.test.mjs test/gpw-hardening.test.mjs test/gpw-tamper-gate.test.mjs test/gpw-persistence.test.mjs test/gpw-colors.test.mjs test/gpw-recent-fold.test.mjs test/gpw-auto-approve.test.mjs test/joint-dev-dispatch.test.mjs test/joint-dev-loop.test.mjs test/joint-dev-audit.test.mjs test/joint-dev-redline.test.mjs test/relay-redline-guard.test.mjs test/relay-p0-projection.test.mjs test/guarded-dispatch.test.mjs test/p0-single-matcher.test.mjs test/path-policy.test.mjs test/path-policy-fs.test.mjs test/gpw-inheritance-table.test.mjs test/gpw-policy-adapter.test.mjs test/target-policy.test.mjs test/relay-redline-audit.test.mjs test/relay-repair-ledger.test.mjs test/relay-purge-blobs.test.mjs test/relay-scrub.test.mjs test/joint-dev-plan-store.test.mjs test/relay-basepath-blobs.test.mjs test/operator-token.test.mjs test/relay-health-capabilities.test.mjs test/joint-relay-dispatch.test.mjs test/operator-token-route.test.mjs test/relay-scrub-task-projection.test.mjs test/operator-key-approval.test.mjs test/relay-offer-journal.test.mjs test/joint-r5-wiring.test.mjs test/p1-hardening.test.mjs test/joint-merge-engine.test.mjs test/artifact-ref-dir-sink.test.mjs test/chat-sticker-guard.test.mjs test/relay-task-progress.test.mjs test/gpw-modes.test.mjs test/joint-cli.test.mjs test/joint-command-hash.test.mjs test/joint-dispatch-audit.test.mjs test/tools-cancel-auth.test.mjs test/fleet-mirror.test.mjs test/sink-git-ssh.test.mjs test/agent-sse-watchdog.test.mjs test/version-gate.test.mjs test/joint-merge-cli.test.mjs test/joint-progress.test.mjs test/project-room-truncation.test.mjs test/chat-crypto-aad.test.mjs test/agent-artifact-delivery.test.mjs test/dataplane-sink-route.test.mjs test/artifact-sink-e2e.test.mjs test/project-room-persistence.test.mjs test/project-room-disk-persistence.test.mjs test/project-stream-route.test.mjs test/chat-v2-gate.test.mjs test/xiangqi.test.mjs test/xfer-foundation.test.mjs test/xfer-ferry.test.mjs test/xfer-publish.test.mjs test/xfer-want-block.test.mjs test/p2p-cipher-diag.test.mjs test/chacha-fallback.test.mjs test/fleet-binding.test.mjs test/fleet-home.test.mjs test/fleet-config.test.mjs test/fleet-config-route.test.mjs test/xfer-channel.test.mjs test/p2p-race.test.mjs test/path-scheduler.test.mjs test/transport.test.mjs test/iroh-sidecar.test.mjs test/discovery.test.mjs test/p2p-rtt.test.mjs test/artifact-ref-v3.test.mjs test/xfer-recovery.test.mjs test/xfer-router.test.mjs test/remote-s2-capture.test.mjs test/view-capture.test.mjs test/view-frame-channel.test.mjs test/view-consent.test.mjs test/remote-view-route.test.mjs test/remote-media.test.mjs test/view-session-key.test.mjs test/remote-requests.test.mjs test/relay-target.test.mjs test/decision-center.test.mjs test/decision-routes.test.mjs test/decision-outbox.test.mjs test/queue-journal.test.mjs",
|
|
78
|
+
"test": "node --test --test-force-exit test/relay.test.mjs test/broadcast.test.mjs test/blake2s.test.mjs test/agent.test.mjs test/plan-sec-cmd.test.mjs test/authority.test.mjs test/blocks.test.mjs test/approval-index.test.mjs test/fleet-sync.test.mjs test/fleet-merge.test.mjs test/fleet-memory-e2e.test.mjs test/fleet-concurrency.test.mjs test/fleet-merge-race.test.mjs test/health.test.mjs test/storage.test.mjs test/exit-channel.test.mjs test/council.test.mjs test/council-session.test.mjs test/log-bounds.test.mjs test/test-report.test.mjs test/fleet-scale.test.mjs test/fleet-state.test.mjs test/crypto-blake2s.test.mjs test/installed-version.test.mjs test/permission.test.mjs test/machine-test-packet.test.mjs test/field-authority.test.mjs test/approval-gate.test.mjs test/authority-choice.test.mjs test/reachability-check.test.mjs test/reachability-classify.test.mjs test/accepted-orphans.test.mjs test/acceptance-doc.test.mjs test/layer-model.test.mjs test/cwd-containment.test.mjs test/cwd-outside-project.test.mjs test/memory.test.mjs test/tools.test.mjs test/claims.test.mjs test/fleet-target.test.mjs test/client-bundle.test.mjs test/schedule.test.mjs test/auto-update.test.mjs test/update-source.test.mjs test/update-install.test.mjs test/update-wiring.test.mjs test/signing.test.mjs test/stress.test.mjs test/shared-config.test.mjs test/metrics.test.mjs test/metrics-route.test.mjs test/tool-cards.test.mjs test/p2p-stun.test.mjs test/p2p-transport.test.mjs test/p2p-signaling.test.mjs test/p2p-node.test.mjs test/p2p-transport-fields.test.mjs test/p2p-plugin.test.mjs test/p2p-crypto.test.mjs test/stun-server.test.mjs test/loader-entry.test.mjs test/mdns-wire.test.mjs test/mdns-discover.test.mjs test/chatops-approval.test.mjs test/chatops-policy.test.mjs test/chatops-file-safety.test.mjs test/chatops-outbound-queue.test.mjs test/chatops-commands.test.mjs test/chatops-bridge.test.mjs test/chatops-config-route.test.mjs test/chatops-apply.test.mjs test/chatops-ilink-contract.test.mjs test/chatops-fleet.test.mjs test/chatops-account.test.mjs test/chatops-auth.test.mjs test/chatops-fleet-scope.test.mjs test/chatops-handoff.test.mjs test/chatops-fleet-wiring.test.mjs test/chatops-fleet-live.test.mjs test/chatops-takeover.test.mjs test/chatops-device-signing.test.mjs test/chatops-relay-verify.test.mjs test/chatops-durability.test.mjs test/chatops-run-command.test.mjs test/secrets-guard.test.mjs test/chatops-ilink-fleet-bridge.test.mjs test/agent-plugins.test.mjs test/memory-layer.test.mjs test/mcp-server.test.mjs test/portable-plugins.test.mjs test/mcp-http.test.mjs test/mcp-http-live.test.mjs test/vision.test.mjs test/ilink-shape.test.mjs test/chatops-fleet-join.test.mjs test/admission.test.mjs test/admission-routes.test.mjs test/join-degradation.test.mjs test/account-identity.test.mjs test/join-challenge.test.mjs test/exec-env-injection.test.mjs test/account-join.test.mjs test/fleet-messages.test.mjs test/message-shards.test.mjs test/fleet-messages-http.test.mjs test/message-notify.test.mjs test/update-channels.test.mjs test/update-prerelease.test.mjs test/session-watch.test.mjs test/session-readonly.test.mjs test/session-sync.test.mjs test/fleet-chat-identity.test.mjs test/identity-reader.test.mjs test/intents.test.mjs test/dataflow.test.mjs test/council-fleet.test.mjs test/fleet-memory.test.mjs test/memory-view.test.mjs test/schema-spec.test.mjs test/fleet-weight-parity.test.mjs test/task-deps.test.mjs test/dataflow-wiring.test.mjs test/task-graph.test.mjs test/ask-store.test.mjs test/turn.test.mjs test/fleet-members.test.mjs test/redact.test.mjs test/policy-matrix.test.mjs test/envelope-signature.test.mjs test/chat-crypto.test.mjs test/reduce-suggestion.test.mjs test/merge-hint.test.mjs test/fleet-chat-route.test.mjs test/maintenance.test.mjs test/maintenance-ferry.test.mjs test/grant.test.mjs test/grant-gate.test.mjs test/worktree.test.mjs test/patch-artifact.test.mjs test/merge-queue.test.mjs test/m3-workflow.test.mjs test/project-room.test.mjs test/project-attribution.test.mjs test/project-locks.test.mjs test/project-reviews.test.mjs test/project-notifications.test.mjs test/blob-sessions.test.mjs test/outbox.test.mjs test/reliability-metrics.test.mjs test/evidence.test.mjs test/grant-issue.test.mjs test/project-refs.test.mjs test/exec-capability.test.mjs test/secondary-link.test.mjs test/bootstrap-cli.test.mjs test/bootstrap.test.mjs test/windows-hidden-task.test.mjs test/relay-failover.test.mjs test/npm-update.test.mjs test/agent-start-nonblocking.test.mjs test/fleet-chat-capture.test.mjs test/capture-route.test.mjs test/update-resolver.test.mjs test/agent-identity-safe.test.mjs test/re-pair-stale-token.test.mjs test/gpw-folder-policy.test.mjs test/gpw-activation.test.mjs test/gpw-hardening.test.mjs test/gpw-tamper-gate.test.mjs test/gpw-persistence.test.mjs test/gpw-colors.test.mjs test/gpw-recent-fold.test.mjs test/gpw-auto-approve.test.mjs test/joint-dev-dispatch.test.mjs test/joint-dev-loop.test.mjs test/joint-dev-audit.test.mjs test/joint-dev-redline.test.mjs test/relay-redline-guard.test.mjs test/relay-p0-projection.test.mjs test/guarded-dispatch.test.mjs test/p0-single-matcher.test.mjs test/path-policy.test.mjs test/path-policy-fs.test.mjs test/gpw-inheritance-table.test.mjs test/gpw-policy-adapter.test.mjs test/target-policy.test.mjs test/relay-redline-audit.test.mjs test/relay-repair-ledger.test.mjs test/relay-purge-blobs.test.mjs test/relay-scrub.test.mjs test/joint-dev-plan-store.test.mjs test/relay-basepath-blobs.test.mjs test/operator-token.test.mjs test/relay-health-capabilities.test.mjs test/joint-relay-dispatch.test.mjs test/operator-token-route.test.mjs test/relay-scrub-task-projection.test.mjs test/operator-key-approval.test.mjs test/relay-offer-journal.test.mjs test/joint-r5-wiring.test.mjs test/p1-hardening.test.mjs test/joint-merge-engine.test.mjs test/artifact-ref-dir-sink.test.mjs test/chat-sticker-guard.test.mjs test/relay-task-progress.test.mjs test/gpw-modes.test.mjs test/joint-cli.test.mjs test/joint-command-hash.test.mjs test/joint-dispatch-audit.test.mjs test/tools-cancel-auth.test.mjs test/fleet-mirror.test.mjs test/sink-git-ssh.test.mjs test/agent-sse-watchdog.test.mjs test/version-gate.test.mjs test/joint-merge-cli.test.mjs test/joint-progress.test.mjs test/project-room-truncation.test.mjs test/chat-crypto-aad.test.mjs test/agent-artifact-delivery.test.mjs test/dataplane-sink-route.test.mjs test/artifact-sink-e2e.test.mjs test/project-room-persistence.test.mjs test/project-room-disk-persistence.test.mjs test/project-stream-route.test.mjs test/chat-v2-gate.test.mjs test/xiangqi.test.mjs test/xfer-foundation.test.mjs test/xfer-ferry.test.mjs test/xfer-publish.test.mjs test/xfer-want-block.test.mjs test/p2p-cipher-diag.test.mjs test/chacha-fallback.test.mjs test/fleet-binding.test.mjs test/fleet-home.test.mjs test/fleet-config.test.mjs test/fleet-config-route.test.mjs test/xfer-channel.test.mjs test/p2p-race.test.mjs test/path-scheduler.test.mjs test/transport.test.mjs test/iroh-sidecar.test.mjs test/discovery.test.mjs test/p2p-rtt.test.mjs test/artifact-ref-v3.test.mjs test/xfer-recovery.test.mjs test/xfer-router.test.mjs test/remote-s2-capture.test.mjs test/view-capture.test.mjs test/view-frame-channel.test.mjs test/view-consent.test.mjs test/remote-view-route.test.mjs test/remote-media.test.mjs test/view-session-key.test.mjs test/remote-requests.test.mjs test/relay-target.test.mjs test/decision-center.test.mjs test/decision-routes.test.mjs test/decision-outbox.test.mjs test/queue-journal.test.mjs test/contract-interop.test.mjs",
|
|
78
79
|
"test:acceptance-doc": "node --test --test-force-exit test/acceptance-doc.test.mjs",
|
|
79
80
|
"test:account-identity": "node --test --test-force-exit test/account-identity.test.mjs",
|
|
80
81
|
"test:account-join": "node --test --test-force-exit test/account-join.test.mjs",
|
|
@@ -175,7 +176,9 @@
|
|
|
175
176
|
"test:secondary-link": "node --test --test-force-exit test/secondary-link.test.mjs",
|
|
176
177
|
"verify:fleet-isolation": "node scripts/verify-fleet-isolation.mjs",
|
|
177
178
|
"test:decision-center": "node --test --test-force-exit test/decision-center.test.mjs test/decision-routes.test.mjs test/decision-outbox.test.mjs",
|
|
178
|
-
"test:queue-journal": "node --test --test-force-exit test/queue-journal.test.mjs"
|
|
179
|
+
"test:queue-journal": "node --test --test-force-exit test/queue-journal.test.mjs",
|
|
180
|
+
"test:contract": "node --test --test-force-exit test/contract-interop.test.mjs",
|
|
181
|
+
"verify:contract": "node scripts/check-contract-vendor.mjs"
|
|
179
182
|
},
|
|
180
183
|
"devDependencies": {
|
|
181
184
|
"@eslint/js": "^10.0.1",
|
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": "3.
|
|
4
|
+
"version": "3.2.0",
|
|
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": [
|