deadbyte-mcp 0.15.44 → 0.15.46

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 (174) hide show
  1. package/MANIFEST.SHA256 +86 -138
  2. package/PROVENANCE.json +35 -18
  3. package/README.txt +22 -21
  4. package/RELEASE.json +369 -334
  5. package/SBOM.cdx.json +2 -2
  6. package/TEST-MATRIX.json +27 -17
  7. package/bridge/package.json +1 -1
  8. package/controller/deadbyte-controller.ps1 +1871 -1769
  9. package/controller/deadbyte-desktop-policy.json +6 -6
  10. package/controller/deadbyte-process-policy.json +4 -4
  11. package/docs/R68-COMPAT-HOST-EXEC-CANDIDATE.md +63 -0
  12. package/docs/R69-LIVE-OUTCOME-R70-POLICY-TRANSFER.md +136 -0
  13. package/docs/R70-CODING-DIGEST-SUPERVISOR-CHECKPOINT-20261013.md +42 -0
  14. package/docs/R70-FINITE-GRANT-OWNER-BOUNDARY-20261013.md +80 -0
  15. package/docs/R70-OWNER-BOOTSTRAP-CHECKPOINT-20261013.md +60 -0
  16. package/docs/R70-REFERENCE-MECHANISMS.json +95 -0
  17. package/docs/R70-TRUST-GUARD-EXPIRY-CHECKPOINT-20261013.md +47 -0
  18. package/package.json +2 -2
  19. package/scripts/benchmark-l0-r71.mjs +76 -0
  20. package/scripts/gate-windows-r71.ps1 +64 -0
  21. package/scripts/gate-windows-r72.ps1 +76 -0
  22. package/scripts/npm-release-r48.mjs +4 -0
  23. package/scripts/npm-release-readiness-r71.mjs +21 -0
  24. package/scripts/npm-release-readiness-r72.mjs +76 -0
  25. package/scripts/verify-r70-full-regression.ps1 +72 -0
  26. package/src/authority-continuity-r65.mjs +28 -8
  27. package/src/autonomous-mcp-tools.mjs +1 -1
  28. package/src/autonomous-output-contracts.mjs +4 -1
  29. package/src/autonomous-policy.mjs +54 -7
  30. package/src/capability-ledger.mjs +1 -1
  31. package/src/capability-resolver.mjs +2 -1
  32. package/src/commander-compat-runtime.mjs +30 -2
  33. package/src/deadbyte-cli.mjs +722 -719
  34. package/src/launcher-isolation.mjs +58 -0
  35. package/src/native-diff-v2.mjs +18 -5
  36. package/src/native-diff.mjs +21 -5
  37. package/src/r70-owner-approval.mjs +78 -0
  38. package/src/remote-authority.mjs +75 -75
  39. package/src/remote-live-log.mjs +48 -14
  40. package/src/remote-mcp-machine-smoke-client.mjs +84 -84
  41. package/src/remote-result-journal.mjs +1 -1
  42. package/src/runtime-update.mjs +232 -24
  43. package/src/staging-input-isolation.mjs +79 -0
  44. package/src/tool-audit.mjs +2 -0
  45. package/src/version.mjs +1 -1
  46. package/test/autonomous-local-supervisor.test.mjs +2 -1
  47. package/test/autonomous-output-contract.test.mjs +17 -1
  48. package/test/autonomous-supervisor-integration.test.mjs +2 -1
  49. package/test/capability-resolver.test.mjs +17 -0
  50. package/test/codex-autonomous-r44.test.mjs +1 -1
  51. package/test/commander-compat-runtime.test.mjs +42 -0
  52. package/test/controller-policy-preflight-r59.test.mjs +1 -0
  53. package/test/deferred-slot-operation-behavior.test.mjs +2 -2
  54. package/test/native-diff-topology-r36.test.mjs +35 -2
  55. package/test/native-diff.test.mjs +83 -3
  56. package/test/r58-cleanup-retention.test.mjs +3 -3
  57. package/test/r58-concurrent-recovery.test.mjs +3 -3
  58. package/test/r58-stale-owner.test.mjs +1 -1
  59. package/test/r59-tool-surface-compat.test.mjs +9 -5
  60. package/test/r60-authority-coherence.test.mjs +10 -2
  61. package/test/r65-authority-runtime-epoch.test.mjs +9 -1
  62. package/test/r67-isolated-slot-rollback-restore.test.mjs +2 -1
  63. package/test/r67-npm-publish-gate.test.mjs +4 -2
  64. package/test/r67-release-contract.test.mjs +8 -7
  65. package/test/r69-live-outcome.test.mjs +137 -0
  66. package/test/r70-autonomous-grant-expiry.test.mjs +89 -0
  67. package/test/r70-autonomous-policy-bootstrap.test.mjs +166 -0
  68. package/test/r70-controller-autonomous-root.test.mjs +104 -0
  69. package/test/r70-controller-grant-subset.test.mjs +28 -0
  70. package/test/r70-controller-owner-issue-boundary.test.mjs +80 -0
  71. package/test/r70-controller-policy-snapshot.test.mjs +66 -0
  72. package/test/r70-owner-approval.test.mjs +67 -0
  73. package/test/r71-full-verifier-artifact.test.mjs +28 -0
  74. package/test/r71-isolated-slot-rollback-restore.test.mjs +62 -0
  75. package/test/r71-native-diff-mcp-wire.test.mjs +75 -0
  76. package/test/r71-publish-fence.test.mjs +38 -0
  77. package/test/r71-release-identity.test.mjs +33 -0
  78. package/test/r72-launcher-isolation.test.mjs +99 -0
  79. package/test/r72-publication-fence.test.mjs +56 -0
  80. package/test/r72-publication-output-integrity.test.mjs +110 -0
  81. package/test/r72-remote-safe-contract.test.mjs +101 -0
  82. package/test/r72-staging-input-isolation.test.mjs +87 -0
  83. package/test/r72-staging-workspace-isolation.test.mjs +114 -0
  84. package/test/remote-result-journal.test.mjs +12 -0
  85. package/test/remote-session-cli.test.mjs +112 -65
  86. package/test/standing-grants.test.mjs +2 -2
  87. package/test/tool-audit.test.mjs +14 -0
  88. package/bin/appcontainer-stage.obj +0 -0
  89. package/bin/bootstrap-advapi32.obj +0 -0
  90. package/bin/bootstrap-exitcode.obj +0 -0
  91. package/bin/bootstrap-kernel32.obj +0 -0
  92. package/bin/child-control-probe.obj +0 -0
  93. package/bin/child-control-stage.obj +0 -0
  94. package/bin/contained-reverse-worker.obj +0 -0
  95. package/bin/contained-transform-worker.obj +0 -0
  96. package/bin/containment-probe.obj +0 -0
  97. package/bin/deadbyte-contain.obj +0 -0
  98. package/bin/deadbyte-desktop-input-r40.obj +0 -0
  99. package/bin/deadbyte-desktop-observer-r40.obj +0 -0
  100. package/bin/deadbyte-desktop-uia-r40.obj +0 -0
  101. package/bin/deadbyte-exec.obj +0 -0
  102. package/bin/deadbyte-hardware-observer-r45.obj +0 -0
  103. package/bin/deadbyte-native-inspect-r67.obj +0 -0
  104. package/bin/deadbyte-process-host.obj +0 -0
  105. package/bin/deadbyte-tunnel-host.obj +0 -0
  106. package/conpty-input-observer.obj +0 -0
  107. package/miniconpty.obj +0 -0
  108. package/proof/CONTAINMENT-BUILD.txt +0 -163
  109. package/proof/MCP-SMOKE-STATUS.txt +0 -9
  110. package/proof/NODE-SYNTAX.txt +0 -4
  111. package/proof/PROOF.txt +0 -6
  112. package/proof/R34-TASK8-SUPERVISOR-CHECKPOINT.json +0 -29
  113. package/proof/R34-TASK9-MCP-SURFACE-CHECKPOINT.json +0 -28
  114. package/proof/SECRET-SCAN.txt +0 -4
  115. package/proof/SOURCE-GATES.txt +0 -16
  116. package/proof/STATUS.txt +0 -11
  117. package/proof/TARGET-V0313-CONTAINMENT-PASS.sha256 +0 -1
  118. package/proof/TARGET-V0313-CONTAINMENT-PASS.txt +0 -215
  119. package/proof/TARGET-V040-CONTAINED-IPC-FAIL.sha256 +0 -1
  120. package/proof/TARGET-V040-CONTAINED-IPC-FAIL.txt +0 -299
  121. package/proof/TARGET-V041-CONTAINED-CREATEPROCESS-203.sha256 +0 -1
  122. package/proof/TARGET-V041-CONTAINED-CREATEPROCESS-203.txt +0 -311
  123. package/proof/TARGET-V042-CONTAINED-CREATEPROCESS-203.sha256 +0 -1
  124. package/proof/TARGET-V042-CONTAINED-CREATEPROCESS-203.txt +0 -313
  125. package/proof/TARGET-V043-CONTAINED-CREATEPROCESS-203.sha256 +0 -1
  126. package/proof/TARGET-V043-CONTAINED-CREATEPROCESS-203.txt +0 -308
  127. package/proof/TARGET-V044-CONTAINED-PASS.sha256 +0 -1
  128. package/proof/TARGET-V044-CONTAINED-PASS.txt +0 -432
  129. package/proof/TARGET-V045-DUAL-OPERATION-PASS.sha256 +0 -1
  130. package/proof/TARGET-V045-DUAL-OPERATION-PASS.txt +0 -481
  131. package/proof/TARGET-V046-FIXED-EXECUTABLE-REGISTRY-PASS.sha256 +0 -1
  132. package/proof/TARGET-V046-FIXED-EXECUTABLE-REGISTRY-PASS.txt +0 -610
  133. package/proof/TARGET-V047-RUNTIME-MANIFEST-PASS.sha256 +0 -1
  134. package/proof/TARGET-V047-RUNTIME-MANIFEST-PASS.txt +0 -642
  135. package/proof/TARGET-V050-BATCH-GATE-PASS.sha256 +0 -1
  136. package/proof/TARGET-V050-BATCH-GATE-PASS.txt +0 -713
  137. package/proof/TESTS.txt +0 -686
  138. package/proof/TRUST-EPHEMERAL.txt +0 -4
  139. package/proof/V03-FREEZE.txt +0 -27
  140. package/proof/V041-IPC-HOTFIX.txt +0 -16
  141. package/proof/V042-ENV-HOTFIX.txt +0 -15
  142. package/proof/V043-DRIVE-CWD-HOTFIX.txt +0 -14
  143. package/proof/V044-LOCALAPPDATA-HOTFIX.txt +0 -18
  144. package/proof/V045-OPERATION-REGISTRY.txt +0 -7
  145. package/proof/V046-WORKER-REGISTRY.txt +0 -12
  146. package/proof/V047-WORKER-MANIFEST.txt +0 -18
  147. package/proof/V050-BATCH-TRUST-CLOSURE.txt +0 -21
  148. package/proof/V060-ACTIVE-NETWORK-AUTHORITY.txt +0 -29
  149. package/proof/V070-NODE-SYNTAX.txt +0 -36
  150. package/proof/V070-NODE-TESTS.txt +0 -752
  151. package/proof/V070-PACK-DRY-RUN.txt +0 -126
  152. package/proof/V070-SOURCE-GATE.txt +0 -30
  153. package/proof/V070-STATIC-SCAN.txt +0 -4
  154. package/proof/V070-WINDOWS-GATE-PENDING.txt +0 -25
  155. package/proof/V071-NODE-SYNTAX.txt +0 -1
  156. package/proof/V071-NODE-TESTS.txt +0 -796
  157. package/proof/V071-PACK-DRY-RUN.json +0 -656
  158. package/proof/V071-SOURCE-GATE.txt +0 -16
  159. package/proof/V071-WINDOWS-GATE-PENDING.txt +0 -24
  160. package/proof/V073-NODE-SYNTAX.txt +0 -4
  161. package/proof/V073-SOURCE-GATE.txt +0 -21
  162. package/proof/V073-STATIC-SCAN.txt +0 -10
  163. package/proof/V073-WINDOWS-GATE-PENDING.txt +0 -5
  164. package/proof/VERIFY.txt +0 -7
  165. package/proof/WINDOWS-CONTAINED-STATUS.txt +0 -5
  166. package/proof/WINDOWS-CONTAINMENT-STATUS.txt +0 -3
  167. package/proof/commander-closure-20260927/CONTINUATION.json +0 -43
  168. package/proof/commander-closure-20260927/RESULT.json +0 -30
  169. package/proof/commander-closure-20260927/SEARCH-CONTINUATION.json +0 -30
  170. package/proof/commander-closure-20260927/XLS-REFERENCE-PROBE.json +0 -13
  171. package/proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json +0 -122
  172. package/proof/r59-full-regression-current.json +0 -13
  173. package/proof/r59-full-regression-current.stderr.log +0 -0
  174. package/proof/r59-full-regression-current.stdout.log +0 -1268
@@ -1,84 +1,84 @@
1
- import { randomBytes } from 'node:crypto';
2
- import { readFile } from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
5
- import { verifyMachinePingPublic } from './machine-identity.mjs';
6
- import { parseActivePointer } from './release-slot.mjs';
7
- import { probeRemoteEnforcement } from './remote-enforcement-probe-r60.mjs';
8
-
9
- const endpointText = process.argv[2];
10
- if (!endpointText) throw new Error('usage: node src/remote-mcp-machine-smoke-client.mjs https://host/mcp/path');
11
- const endpoint = new URL(endpointText);
12
- if (endpoint.protocol !== 'https:') throw new Error('machine live gate requires HTTPS');
13
- const enforcementMode=process.argv[3]??null;
14
- if(enforcementMode!==null&&!['default','desktop','host','full','revoked'].includes(enforcementMode))throw new Error('remote enforcement probe mode invalid');
15
-
16
- const machineTools = ['machine_list', 'machine_ping', 'machine_revoke', 'machine_status'];
17
- const client = new Client(
18
- { name: 'deadbyte-r29-machine-gate', version: '0.8.5' },
19
- { versionNegotiation: { mode: { pin: '2026-07-28' } } }
20
- );
21
- const transport = new StreamableHTTPClientTransport(endpoint);
22
-
23
- function structured(result, label) {
24
- if (result.isError) throw new Error(`${label} returned tool error: ${JSON.stringify(result.structuredContent ?? result.content)}`);
25
- if (!result.structuredContent || typeof result.structuredContent !== 'object') throw new Error(`${label} returned no structured object`);
26
- return result.structuredContent;
27
- }
28
-
29
- try {
30
- await client.connect(transport);
31
- const listed = await client.listTools();
32
- const names = listed.tools.map(tool => tool.name).sort();
33
- for (const name of machineTools) if (!names.includes(name)) throw new Error(`machine tool missing: ${name}`);
34
- for (const tool of listed.tools.filter(tool => machineTools.includes(tool.name))) {
35
- if (tool.outputSchema?.type !== 'object' || tool.outputSchema?.additionalProperties !== false || !tool.outputSchema?.properties) {
36
- throw new Error(`machine tool ${tool.name} missing strict output schema`);
37
- }
38
- }
39
-
40
- const status = structured(await client.callTool({ name: 'machine_status', arguments: {} }), 'machine_status');
41
- if (status.status !== 'ok') throw new Error(`machine_status status=${String(status.status)}`);
42
- const machines = structured(await client.callTool({ name: 'machine_list', arguments: {} }), 'machine_list');
43
- if (machines.status !== 'ok' || !Array.isArray(machines.machines)) throw new Error('machine_list invalid');
44
- const self = machines.machines.find(item => item.machine_id === status.machine_id);
45
- if (!self) throw new Error('machine_list does not contain current machine');
46
- for (const field of ['public_key_spki_base64','identity_generation','online_epoch','release_id','release_manifest_sha256','generation_manifest_sha256']) {
47
- if (self[field] !== status[field]) throw new Error(`machine_list/status mismatch: ${field}`);
48
- }
49
-
50
- const nonce = randomBytes(32).toString('hex');
51
- const ping = structured(await client.callTool({ name: 'machine_ping', arguments: { nonce } }), 'machine_ping');
52
- if (ping.status !== 'ok' || ping.nonce !== nonce || ping.machine_id !== status.machine_id) throw new Error('machine_ping identity/nonce mismatch');
53
- for (const field of ['identity_generation','online_epoch','release_id','release_manifest_sha256','generation_manifest_sha256']) {
54
- if (ping[field] !== status[field]) throw new Error(`machine_ping/status mismatch: ${field}`);
55
- }
56
- const signatureVerified = await verifyMachinePingPublic({ ping, publicKeySpkiBase64: status.public_key_spki_base64 });
57
- if (!signatureVerified) throw new Error('machine ping public Ed25519 verification failed');
58
- if(enforcementMode!==null){
59
- const stateRoot=process.env.DEADBYTE_STATE_ROOT;
60
- if(!stateRoot||!path.isAbsolute(stateRoot))throw new Error('remote enforcement probe state root missing');
61
- const pointer=parseActivePointer(await readFile(path.join(stateRoot,'active-release.json'),'utf8'));
62
- for(const [actual,expected] of [
63
- [status.release_id,pointer.release_id],
64
- [status.release_manifest_sha256,pointer.manifest_sha256],
65
- [status.generation_manifest_sha256,pointer.generation_manifest_sha256]
66
- ])if(actual!==expected)throw new Error('signed machine status does not bind active release/generation');
67
- await probeRemoteEnforcement({client,mode:enforcementMode});
68
- }
69
-
70
- console.log(JSON.stringify({
71
- status: 'passed',
72
- protocol_revision: client.getNegotiatedProtocolVersion(),
73
- tool_count: names.length,
74
- machine_id: status.machine_id,
75
- identity_generation: status.identity_generation,
76
- release_id: status.release_id,
77
- release_manifest_sha256: status.release_manifest_sha256,
78
- generation_manifest_sha256: status.generation_manifest_sha256,
79
- signature_verified: true,
80
- ...(enforcementMode?{enforcement_mode:enforcementMode,enforcement_verified:true}:{})
81
- }));
82
- } finally {
83
- await client.close().catch(() => {});
84
- }
1
+ import { randomBytes } from 'node:crypto';
2
+ import { readFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
5
+ import { verifyMachinePingPublic } from './machine-identity.mjs';
6
+ import { parseActivePointer } from './release-slot.mjs';
7
+ import { probeRemoteEnforcement } from './remote-enforcement-probe-r60.mjs';
8
+
9
+ const endpointText = process.argv[2];
10
+ if (!endpointText) throw new Error('usage: node src/remote-mcp-machine-smoke-client.mjs https://host/mcp/path');
11
+ const endpoint = new URL(endpointText);
12
+ if (endpoint.protocol !== 'https:') throw new Error('machine live gate requires HTTPS');
13
+ const enforcementMode=process.argv[3]??null;
14
+ if(enforcementMode!==null&&!['default','operator','desktop','host','full','revoked'].includes(enforcementMode))throw new Error('remote enforcement probe mode invalid');
15
+
16
+ const machineTools = ['machine_list', 'machine_ping', 'machine_revoke', 'machine_status'];
17
+ const client = new Client(
18
+ { name: 'deadbyte-r29-machine-gate', version: '0.8.5' },
19
+ { versionNegotiation: { mode: { pin: '2026-07-28' } } }
20
+ );
21
+ const transport = new StreamableHTTPClientTransport(endpoint);
22
+
23
+ function structured(result, label) {
24
+ if (result.isError) throw new Error(`${label} returned tool error: ${JSON.stringify(result.structuredContent ?? result.content)}`);
25
+ if (!result.structuredContent || typeof result.structuredContent !== 'object') throw new Error(`${label} returned no structured object`);
26
+ return result.structuredContent;
27
+ }
28
+
29
+ try {
30
+ await client.connect(transport);
31
+ const listed = await client.listTools();
32
+ const names = listed.tools.map(tool => tool.name).sort();
33
+ for (const name of machineTools) if (!names.includes(name)) throw new Error(`machine tool missing: ${name}`);
34
+ for (const tool of listed.tools.filter(tool => machineTools.includes(tool.name))) {
35
+ if (tool.outputSchema?.type !== 'object' || tool.outputSchema?.additionalProperties !== false || !tool.outputSchema?.properties) {
36
+ throw new Error(`machine tool ${tool.name} missing strict output schema`);
37
+ }
38
+ }
39
+
40
+ const status = structured(await client.callTool({ name: 'machine_status', arguments: {} }), 'machine_status');
41
+ if (status.status !== 'ok') throw new Error(`machine_status status=${String(status.status)}`);
42
+ const machines = structured(await client.callTool({ name: 'machine_list', arguments: {} }), 'machine_list');
43
+ if (machines.status !== 'ok' || !Array.isArray(machines.machines)) throw new Error('machine_list invalid');
44
+ const self = machines.machines.find(item => item.machine_id === status.machine_id);
45
+ if (!self) throw new Error('machine_list does not contain current machine');
46
+ for (const field of ['public_key_spki_base64','identity_generation','online_epoch','release_id','release_manifest_sha256','generation_manifest_sha256']) {
47
+ if (self[field] !== status[field]) throw new Error(`machine_list/status mismatch: ${field}`);
48
+ }
49
+
50
+ const nonce = randomBytes(32).toString('hex');
51
+ const ping = structured(await client.callTool({ name: 'machine_ping', arguments: { nonce } }), 'machine_ping');
52
+ if (ping.status !== 'ok' || ping.nonce !== nonce || ping.machine_id !== status.machine_id) throw new Error('machine_ping identity/nonce mismatch');
53
+ for (const field of ['identity_generation','online_epoch','release_id','release_manifest_sha256','generation_manifest_sha256']) {
54
+ if (ping[field] !== status[field]) throw new Error(`machine_ping/status mismatch: ${field}`);
55
+ }
56
+ const signatureVerified = await verifyMachinePingPublic({ ping, publicKeySpkiBase64: status.public_key_spki_base64 });
57
+ if (!signatureVerified) throw new Error('machine ping public Ed25519 verification failed');
58
+ if(enforcementMode!==null){
59
+ const stateRoot=process.env.DEADBYTE_STATE_ROOT;
60
+ if(!stateRoot||!path.isAbsolute(stateRoot))throw new Error('remote enforcement probe state root missing');
61
+ const pointer=parseActivePointer(await readFile(path.join(stateRoot,'active-release.json'),'utf8'));
62
+ for(const [actual,expected] of [
63
+ [status.release_id,pointer.release_id],
64
+ [status.release_manifest_sha256,pointer.manifest_sha256],
65
+ [status.generation_manifest_sha256,pointer.generation_manifest_sha256]
66
+ ])if(actual!==expected)throw new Error('signed machine status does not bind active release/generation');
67
+ await probeRemoteEnforcement({client,mode:enforcementMode});
68
+ }
69
+
70
+ console.log(JSON.stringify({
71
+ status: 'passed',
72
+ protocol_revision: client.getNegotiatedProtocolVersion(),
73
+ tool_count: names.length,
74
+ machine_id: status.machine_id,
75
+ identity_generation: status.identity_generation,
76
+ release_id: status.release_id,
77
+ release_manifest_sha256: status.release_manifest_sha256,
78
+ generation_manifest_sha256: status.generation_manifest_sha256,
79
+ signature_verified: true,
80
+ ...(enforcementMode?{enforcement_mode:enforcementMode,enforcement_verified:true}:{})
81
+ }));
82
+ } finally {
83
+ await client.close().catch(() => {});
84
+ }
@@ -5,7 +5,7 @@ import { sanitizeAuditArgs } from './tool-audit.mjs';
5
5
  export const REMOTE_RESULT_JOURNAL_SCHEMA='deadbyte.remote-result-journal.v1';
6
6
  const SESSION=/^[0-9a-f]{24}$/;
7
7
  const HASH=/^[0-9a-f]{64}$/;
8
- const STATUS=new Set(['ok','error']);
8
+ const STATUS=new Set(['ok','error','pending']);
9
9
  const SIDE_EFFECT_STATES=new Set(['unknown']);
10
10
  const EVENT_TYPES=new Set(['tool.call','tool.result']);
11
11