@twinsearth/w2m-dsh-plugin 2.0.4 → 2.0.5

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 (69) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +8 -0
  4. package/bin/w2m-joint.mjs +69 -7
  5. package/codex/mcp-servers.toml +1 -1
  6. package/docs/acceptance/2.0.5/RELEASE-205.json +21 -0
  7. package/docs/acceptance/2.0.5/RELEASE-2050.json +22 -0
  8. package/docs/adr/0001-collaboration-crdt.md +59 -0
  9. package/lib/client.js +146 -8
  10. package/package.json +2 -2
  11. package/plugin.json +1 -1
  12. package/src/agent/agent.mjs +97 -36
  13. package/src/agent/artifact-delivery.mjs +89 -0
  14. package/src/agent/caps.mjs +16 -2
  15. package/src/agent/sinks/git-sink.mjs +78 -0
  16. package/src/agent/sinks/ssh-sink.mjs +83 -0
  17. package/src/agent/sse-cursor.mjs +16 -0
  18. package/src/agent/sse-watchdog.mjs +71 -0
  19. package/src/plugin/dataplane-sink-route.mjs +113 -0
  20. package/src/plugin/fleet-chat-route.mjs +11 -0
  21. package/src/plugin/joint-dev/dispatch.mjs +5 -1
  22. package/src/plugin/joint-dev/merge-approval.mjs +115 -0
  23. package/src/plugin/joint-dev/progress.mjs +107 -0
  24. package/src/plugin/joint-dev/relay-dispatch.mjs +52 -22
  25. package/src/plugin/project-stream-route.mjs +58 -0
  26. package/src/plugin/tools-joint.mjs +6 -1
  27. package/src/plugin/tools.mjs +25 -5
  28. package/src/relay/fleet-messages.mjs +48 -24
  29. package/src/relay/project-room.mjs +47 -2
  30. package/src/relay/server.mjs +11 -5
  31. package/src/relay/state.mjs +63 -3
  32. package/src/util/chat-crypto.mjs +70 -1
  33. package/docs/COLLAB/COLLABORATION-MODEL.md +0 -240
  34. package/docs/COLLAB/EXECUTION-AUTH-MODEL.md +0 -361
  35. package/docs/COLLAB/M1-ACCEPTANCE-RUNBOOK.md +0 -70
  36. package/docs/COLLAB/M1-MAINTENANCE.md +0 -313
  37. package/docs/COLLAB/M2-TASK-GRANT.md +0 -231
  38. package/docs/COLLAB/M3-GIT-NATIVE-TASKS.md +0 -291
  39. package/docs/COLLAB/M4-PROJECT-ROOM.md +0 -260
  40. package/docs/COLLAB/M5-MULTI-CLIENT-PRIMITIVES.md +0 -263
  41. package/docs/COLLAB/M6-CROSS-NETWORK-RELIABILITY.md +0 -231
  42. package/docs/COLLAB/M7-METRICS-ACCEPTANCE.md +0 -263
  43. package/docs/COLLAB/TASK-MODEL.md +0 -281
  44. package/docs/acceptance/1.9.10/RELEASE-1910.json +0 -21
  45. package/docs/acceptance/1.9.11/RELEASE-1911.json +0 -20
  46. package/docs/acceptance/1.9.12/RELEASE-1912.json +0 -20
  47. package/docs/acceptance/1.9.13/RELEASE-1913.json +0 -20
  48. package/docs/acceptance/1.9.14/RELEASE-1914.json +0 -20
  49. package/docs/acceptance/1.9.15/RELEASE-1915.json +0 -22
  50. package/docs/acceptance/1.9.16/RELEASE-1916.json +0 -21
  51. package/docs/acceptance/1.9.17/RELEASE-1917.json +0 -20
  52. package/docs/acceptance/1.9.19/RELEASE-1919.json +0 -21
  53. package/docs/acceptance/1.9.20/RELEASE-1920.json +0 -22
  54. package/docs/acceptance/1.9.4/RELEASE-194.json +0 -23
  55. package/docs/acceptance/1.9.5/RELEASE-195.json +0 -23
  56. package/docs/acceptance/1.9.6/RELEASE-196.json +0 -22
  57. package/docs/acceptance/1.9.7/RELEASE-197.json +0 -21
  58. package/docs/acceptance/1.9.8/RELEASE-198.json +0 -21
  59. package/docs/acceptance/1.9.9/RELEASE-199.json +0 -21
  60. package/lib/client.js.bak2 +0 -640
  61. package/src/plugin/dataflow.mjs +0 -72
  62. package/src/plugin/fleet-target.mjs.bak-arch2 +0 -812
  63. package/src/plugin/fleet-target.mjs.bak-archive +0 -812
  64. package/src/plugin/tofuture/report.mjs +0 -44
  65. package/src/plugin/tools.mjs.bak-c7 +0 -7029
  66. package/src/relay/tofuture-whitelist.mjs +0 -46
  67. package/src/util/data-plane.mjs +0 -180
  68. package/src/util/sealed-object.mjs +0 -141
  69. package/src/util/tofuture-hmac.mjs +0 -30
@@ -1,72 +0,0 @@
1
- /**
2
- * Data flow across the fleet: map results that are too big to return inline travel as blobs, and the reduce step names
3
- * exactly which blob it read.
4
- *
5
- * ## Why a plan instead of a pipe
6
- *
7
- * Machines do not send data to each other directly: the relay is the only channel every machine can reach, and it already
8
- * stores content-addressed blobs. So the shape is map -> PUT blob -> reduce by sha256. The decisions worth testing are the
9
- * boundaries: when an output is inline, when it becomes a blob, and what happens when a blob a reduce depends on is not
10
- * there. A pipeline that silently drops a shard is worse than one that fails.
11
- */
12
-
13
- /** Stage stdout at or below this travels inline in the result envelope. */
14
- export const MAX_INLINE_BYTES = 64 * 1024;
15
-
16
- /** Past this a stage output is not a result any more: it is a data problem the operator has to see. */
17
- export const HARD_CAP_BYTES = 16 * 1024 * 1024;
18
-
19
- /**
20
- * Decide how one machine's stage output travels.
21
- *
22
- * @param {{machineId?: string, stageIndex?: number, stdoutBytes?: number}} input
23
- * @returns {{ok: true, mode: 'inline'|'blob', stdoutBytes: number} | {ok: false, code: string, detail: object}}
24
- */
25
- export function planStageOutput(input = {}) {
26
- const machineId = typeof input.machineId === 'string' && input.machineId !== '' ? input.machineId : null;
27
- if (machineId === null) return { ok: false, code: 'STAGE_MACHINE_MISSING', detail: {} };
28
- const stdoutBytes = Number.isFinite(input.stdoutBytes) ? Math.max(0, Math.floor(input.stdoutBytes)) : 0;
29
- if (stdoutBytes > HARD_CAP_BYTES) {
30
- return { ok: false, code: 'STAGE_OUTPUT_TOO_LARGE', detail: { machineId, stdoutBytes, hardCapBytes: HARD_CAP_BYTES } };
31
- }
32
- return { ok: true, mode: stdoutBytes <= MAX_INLINE_BYTES ? 'inline' : 'blob', stdoutBytes };
33
- }
34
-
35
- const SHA256 = /^[0-9a-f]{64}$/;
36
-
37
- /**
38
- * Build the reduce input list from the map results.
39
- *
40
- * Every map machine must contribute exactly one entry: inline text is carried as-is, a blob result must name a sha256.
41
- * A missing or malformed hash is refused by name -- the reduce step must never run on a partial fleet and call the answer
42
- * complete.
43
- *
44
- * @param {{results?: Array<{machine_id?: string, mode?: string, stdout?: string, blob_sha256?: string}>,
45
- * reducerMachineId?: string}} input
46
- * @returns {{ok: true, reducerMachineId: string, inputs: Array<{machine_id: string, mode: 'inline'|'blob', stdout?: string, sha256?: string}>} |
47
- * {ok: false, code: string, detail: object}}
48
- */
49
- export function buildReducePlan(input = {}) {
50
- const reducer = typeof input.reducerMachineId === 'string' && input.reducerMachineId !== '' ? input.reducerMachineId : null;
51
- if (reducer === null) return { ok: false, code: 'REDUCER_MISSING', detail: {} };
52
- const results = Array.isArray(input.results) ? input.results : null;
53
- if (results === null || results.length === 0) return { ok: false, code: 'NO_MAP_RESULTS', detail: {} };
54
-
55
- const seen = new Set();
56
- const inputs = [];
57
- for (const result of results) {
58
- const machineId = typeof result?.machine_id === 'string' && result.machine_id !== '' ? result.machine_id : null;
59
- if (machineId === null) return { ok: false, code: 'MAP_MACHINE_MISSING', detail: {} };
60
- if (seen.has(machineId)) return { ok: false, code: 'MAP_MACHINE_DUPLICATE', detail: { machineId } };
61
- seen.add(machineId);
62
- const mode = result?.mode === 'blob' ? 'blob' : 'inline';
63
- if (mode === 'blob') {
64
- const sha = typeof result?.blob_sha256 === 'string' ? result.blob_sha256.toLowerCase() : '';
65
- if (!SHA256.test(sha)) return { ok: false, code: 'BLOB_MISSING', detail: { machineId, sha256: result?.blob_sha256 ?? null } };
66
- inputs.push({ machine_id: machineId, mode, sha256: sha });
67
- } else {
68
- inputs.push({ machine_id: machineId, mode, stdout: typeof result?.stdout === 'string' ? result.stdout : '' });
69
- }
70
- }
71
- return { ok: true, reducerMachineId: reducer, inputs };
72
- }