deadbyte-mcp 0.15.23 → 0.15.25

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 (50) hide show
  1. package/MANIFEST.SHA256 +49 -40
  2. package/PROVENANCE.json +11 -10
  3. package/README.txt +7 -7
  4. package/RELEASE.json +19 -38
  5. package/TEST-MATRIX.json +32 -96
  6. package/package.json +3 -3
  7. package/proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json +122 -0
  8. package/scripts/commander-hardening-gate-r47.mjs +10 -1
  9. package/scripts/commander-real-performance-benchmark-r47.mjs +12 -3
  10. package/scripts/gate-windows-r48.ps1 +45 -0
  11. package/scripts/init-host-policy.ps1 +9 -1
  12. package/scripts/npm-release-r48.mjs +2 -1
  13. package/scripts/windows-gate-evidence-r48.mjs +27 -0
  14. package/src/atomic-mutation.mjs +12 -4
  15. package/src/coding-mcp-tools.mjs +15 -1
  16. package/src/coding-output-contracts.mjs +9 -3
  17. package/src/commander-office-reader-r48.mjs +36 -3
  18. package/src/commander-pdf-r48.mjs +36 -1
  19. package/src/commander-wire-adapter-r47.mjs +72 -2
  20. package/src/host-plane.mjs +10 -31
  21. package/src/machine-fs-mcp-tools.mjs +7 -1
  22. package/src/machine-fs-output-contracts.mjs +6 -0
  23. package/src/machine-fs-smoke-client.mjs +6 -17
  24. package/src/mcp-host-smoke-client.mjs +3 -2
  25. package/src/mcp-server.mjs +14 -2
  26. package/src/mcp-smoke-client.mjs +4 -9
  27. package/src/observation-smoke-client.mjs +5 -10
  28. package/src/output-contracts.mjs +6 -4
  29. package/src/process-smoke-client.mjs +3 -3
  30. package/src/runtime-catalog-expectation.mjs +37 -0
  31. package/src/stdio-protocol-guard.mjs +71 -0
  32. package/src/tunnel-stdio-compat-smoke.mjs +5 -9
  33. package/src/version.mjs +1 -1
  34. package/test/atomic-mutation.test.mjs +61 -0
  35. package/test/coding-catalog-consistency.test.mjs +9 -1
  36. package/test/coding-mcp-unknown-effect.test.mjs +42 -0
  37. package/test/commander-biff-reference-r48.test.mjs +38 -0
  38. package/test/commander-core-bridge-r47.test.mjs +19 -0
  39. package/test/commander-office-reader-r48.test.mjs +18 -2
  40. package/test/commander-pdf-r48.test.mjs +35 -0
  41. package/test/commander-protocol-adversarial-r48.test.mjs +166 -0
  42. package/test/commander-real-parity-r47.test.mjs +41 -3
  43. package/test/commander-schema-differential-r48.test.mjs +1 -1
  44. package/test/commander-wire-contract-r47.test.mjs +32 -0
  45. package/test/contained.test.mjs +4 -6
  46. package/test/controller.test.mjs +2 -1
  47. package/test/machine-fs-mcp-tools.test.mjs +12 -0
  48. package/test/output-schema.test.mjs +20 -1
  49. package/test/r48-release-contract.test.mjs +27 -27
  50. package/test/tunnel-stdio-compat.test.mjs +7 -7
@@ -7,7 +7,7 @@ import { fileURLToPath } from 'node:url';
7
7
  import { Client } from '@modelcontextprotocol/client';
8
8
  import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotocol/client/stdio';
9
9
  import { generateTrustKeypair } from '../src/trust.mjs';
10
- import { structuredToolResult, workspaceOpenOutputSchema } from '../src/output-contracts.mjs';
10
+ import { hostFileWriteOutputSchema, structuredToolResult, workspaceOpenOutputSchema } from '../src/output-contracts.mjs';
11
11
 
12
12
  const here = path.dirname(fileURLToPath(import.meta.url));
13
13
  const repoRoot = path.resolve(here, '..');
@@ -85,3 +85,22 @@ test('DEADBYTE validates structured output locally even on isError paths', () =>
85
85
  /DEADBYTE output contract violation/
86
86
  );
87
87
  });
88
+
89
+ test('host mutation contract preserves explicit post-effect uncertainty', () => {
90
+ const expected = 'a'.repeat(64);
91
+ const parsed = hostFileWriteOutputSchema.parse({
92
+ status: 'failed',
93
+ error: 'post-commit observation failed',
94
+ outcome: 'FAILED_AFTER_UNKNOWN_EFFECT',
95
+ side_effect_state: 'unknown',
96
+ expected_after_sha256: expected
97
+ });
98
+ assert.equal(parsed.expected_after_sha256, expected);
99
+ assert.throws(() => hostFileWriteOutputSchema.parse({
100
+ status: 'failed',
101
+ error: 'post-commit observation failed',
102
+ outcome: 'FAILED_AFTER_UNKNOWN_EFFECT',
103
+ side_effect_state: 'unknown',
104
+ expected_after_sha256: 'not-a-hash'
105
+ }));
106
+ });
@@ -6,43 +6,43 @@ import { DEADBYTE_VERSION } from '../src/version.mjs';
6
6
  const root=new URL('../',import.meta.url);
7
7
  const read=rel=>readFile(new URL(rel,root),'utf8');
8
8
 
9
- test('R48 0.15.23 successor binds active 0.15.22 parent and livelog trace evidence',async()=>{
10
- const [pkg,lock,release,provenance]=await Promise.all([
9
+ test('R48 0.15.25 successor binds exact active immutable 0.15.24 parent',async()=>{
10
+ const [pkg,lock,release,provenance,matrix]=await Promise.all([
11
11
  read('package.json').then(JSON.parse),
12
12
  read('package-lock.json').then(JSON.parse),
13
13
  read('RELEASE.json').then(JSON.parse),
14
- read('PROVENANCE.json').then(JSON.parse)
14
+ read('PROVENANCE.json').then(JSON.parse),
15
+ read('TEST-MATRIX.json').then(JSON.parse)
15
16
  ]);
16
- assert.equal(pkg.version,'0.15.23');
17
- assert.equal(lock.version,'0.15.23');
18
- assert.equal(lock.packages[''].version,'0.15.23');
19
- assert.equal(DEADBYTE_VERSION,'0.15.23');
20
- assert.equal(release.version,'0.15.23');
21
- assert.equal(provenance.version,'0.15.23');
17
+ assert.equal(pkg.version,'0.15.25');
18
+ assert.equal(lock.version,'0.15.25');
19
+ assert.equal(lock.packages[''].version,'0.15.25');
20
+ assert.equal(DEADBYTE_VERSION,'0.15.25');
21
+ assert.equal(release.version,'0.15.25');
22
+ assert.equal(provenance.version,'0.15.25');
23
+ assert.equal(matrix.version,'0.15.25');
22
24
  assert.equal(release.train,'R48');
23
- assert.equal(release.label,'HUMAN LIVELOG TRACE + VISUAL OPCODE BASELINE');
24
- assert.equal(release.parent.release_id,'v0.15.22-ed178d33bf883f68');
25
- assert.equal(release.parent.manifest_sha256,'ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8');
26
- assert.equal(release.parent.generation_manifest_sha256,'029b177dc1838388ddec154be38cb597a4dcfa0711b2297196d5a9e7cb8dbe18');
27
- assert.equal(release.source_predecessor.version,'0.15.22');
28
- assert.equal(release.source_predecessor.tarball_sha256,'fda51e06fa16116179d9c48f1466432886c10e62807482326d2dc5ccb7b66eac');
29
- assert.equal(release.source_predecessor.manifest_file_sha256,'ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8');
25
+ assert.equal(release.label,'COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE');
26
+ assert.equal(release.parent.release_id,'v0.15.24-c33fcbc449562285');
27
+ assert.equal(release.parent.manifest_sha256,'c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e');
28
+ assert.equal(release.parent.generation_manifest_sha256,'6b81c4a5b940a6ef525b7d0ce8e7ff5e6b9fc9b8048d9522ea8852fa29b85395');
29
+ assert.equal(release.source_predecessor.version,'0.15.24');
30
+ assert.equal(release.source_predecessor.tarball_sha256,'23ea53fb4f331873c742c810f815d5ad18291f74c1bda1fd1d8c08475dbbd4ad');
31
+ assert.equal(release.source_predecessor.manifest_file_sha256,'c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e');
30
32
  assert.equal(release.source_predecessor.reference_server_sha256,'dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305');
31
33
  assert.equal(release.source_predecessor.reference_schemas_sha256,'f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140');
32
34
  assert.equal(release.capabilities.full_tool_count,116);
33
- assert.equal(release.capabilities.full_tool_catalog.path,'docs/R48-FULL-TOOL-CATALOG.json');
34
- assert.deepEqual(release.capabilities.windows_queries,['registry','services','drivers','sockets','volumes','usb','wsl']);
35
- assert.equal(release.capabilities.machine_fs_list_entry_fault_isolation,true);
36
- assert.equal(release.capabilities.capability_manifest_authority_truth,true);
37
- assert.equal(release.capabilities.capability_manifest_host_grant_truth,true);
38
- assert.equal(release.capabilities.human_livelog_visual_opcode,true);
39
- assert.equal(release.capabilities.human_livelog_absolute_root_paths,true);
40
- assert.equal(release.capabilities.human_livelog_trace_span,true);
41
- assert.equal(release.capabilities.human_livelog_presentation_filter,true);
42
- assert.equal(release.capabilities.human_livelog_tty_in_place_rewrite,true);
43
- assert.equal(release.capabilities.human_livelog_expanded_summary,true);
35
+ assert.equal(release.capabilities.commander_incremental_pdf_revisions,true);
36
+ assert.equal(release.capabilities.commander_docx_header_footer_search,true);
37
+ assert.equal(release.capabilities.commander_directory_read_fallback,true);
38
+ assert.equal(release.capabilities.commander_binary_detection,true);
39
+ assert.equal(release.capabilities.commander_protocol_adversarial,true);
40
+ assert.equal(release.capabilities.atomic_mutation_unknown_effect,true);
44
41
  assert.equal(provenance.parent_release_id,release.parent.release_id);
45
42
  assert.equal(provenance.parent_manifest_sha256,release.parent.manifest_sha256);
46
43
  assert.equal(provenance.parent_generation_manifest_sha256,release.parent.generation_manifest_sha256);
47
44
  assert.equal(provenance.source_predecessor_tarball_sha256,release.source_predecessor.tarball_sha256);
45
+ assert.equal(matrix.full_regression_partition_proof.files,211);
46
+ assert.equal(matrix.full_regression_partition_proof.fail,0);
47
+ assert.equal(matrix.full_regression_partition_proof.task_receipt_sha256,'7711039e4807f6c2af02bbda897d0032b067e0a6631f789fd3bf801258160d3f');
48
48
  });
@@ -76,7 +76,9 @@ test('probe adapter forwards malformed and unknown input unchanged', () => {
76
76
 
77
77
  test('strict MCP core still rejects legacy at the SDK serving boundary', async () => {
78
78
  const source = await readFile(fileURLToPath(new URL('../src/mcp-server.mjs', import.meta.url)), 'utf8');
79
- assert.match(source, /serveStdio\([\s\S]*\{ legacy: 'reject' \}\)/);
79
+ assert.match(source, /serveStdio\(/);
80
+ assert.match(source, /legacy:\s*'reject'/);
81
+ assert.match(source, /transport:\s*new DeadbyteStdioServerTransport\(\)/);
80
82
  assert.match(source, /installTunnelStdioProbeCompat/);
81
83
  });
82
84
 
@@ -143,13 +145,11 @@ test('installed stdio prefilter answers legacy startup probe and forwards split
143
145
  assert.deepEqual(hexLines, ['HEX:' + modern.toString('hex')]);
144
146
  });
145
147
 
146
- test('tunnel compatibility smoke preserves only base or base-plus-host modern catalogs', async () => {
148
+ test('tunnel compatibility smoke derives exact modern catalog and explicitly disables Host', async () => {
147
149
  const smoke = await readFile(fileURLToPath(new URL('../src/tunnel-stdio-compat-smoke.mjs', import.meta.url)), 'utf8');
148
- for (const name of ['contained_transform', 'evidence_verify', 'file_read', 'proof_execute', 'workspace_open']) assert.match(smoke, new RegExp(name));
149
- for (const name of ['host_exec', 'host_file_read', 'host_file_write']) assert.match(smoke, new RegExp(name));
150
- assert.match(smoke, /allowedCatalogs/);
151
- assert.match(smoke, /baseTools/);
152
- assert.match(smoke, /privilegedTools/);
150
+ assert.match(smoke, /expectedFullCatalogForEnv/);
151
+ assert.match(smoke, /assertExactCatalog/);
152
+ assert.match(smoke, /DEADBYTE_PRIVILEGED_POLICY: ''/);
153
153
  assert.doesNotMatch(smoke, /agent_task_/);
154
154
  });
155
155