deadbyte-mcp 0.15.23 → 0.15.24
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/MANIFEST.SHA256 +34 -28
- package/PROVENANCE.json +11 -10
- package/README.txt +7 -7
- package/RELEASE.json +19 -38
- package/TEST-MATRIX.json +32 -96
- package/package.json +2 -2
- package/proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json +111 -0
- package/scripts/commander-real-performance-benchmark-r47.mjs +12 -3
- package/src/atomic-mutation.mjs +12 -4
- package/src/coding-mcp-tools.mjs +15 -1
- package/src/coding-output-contracts.mjs +9 -3
- package/src/commander-office-reader-r48.mjs +36 -3
- package/src/commander-pdf-r48.mjs +36 -1
- package/src/commander-wire-adapter-r47.mjs +56 -2
- package/src/host-plane.mjs +10 -31
- package/src/machine-fs-mcp-tools.mjs +7 -1
- package/src/machine-fs-output-contracts.mjs +6 -0
- package/src/mcp-server.mjs +14 -2
- package/src/output-contracts.mjs +6 -4
- package/src/stdio-protocol-guard.mjs +71 -0
- package/src/version.mjs +1 -1
- package/test/atomic-mutation.test.mjs +61 -0
- package/test/coding-mcp-unknown-effect.test.mjs +42 -0
- package/test/commander-biff-reference-r48.test.mjs +38 -0
- package/test/commander-core-bridge-r47.test.mjs +19 -0
- package/test/commander-office-reader-r48.test.mjs +18 -2
- package/test/commander-pdf-r48.test.mjs +35 -0
- package/test/commander-protocol-adversarial-r48.test.mjs +166 -0
- package/test/commander-real-parity-r47.test.mjs +37 -3
- package/test/commander-schema-differential-r48.test.mjs +1 -1
- package/test/commander-wire-contract-r47.test.mjs +32 -0
- package/test/machine-fs-mcp-tools.test.mjs +12 -0
- package/test/output-schema.test.mjs +20 -1
- package/test/r48-release-contract.test.mjs +27 -27
- package/test/tunnel-stdio-compat.test.mjs +3 -1
|
@@ -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.
|
|
10
|
-
const [pkg,lock,release,provenance]=await Promise.all([
|
|
9
|
+
test('R48 0.15.24 successor binds exact active 0.15.23 parent and Commander differential evidence',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.
|
|
17
|
-
assert.equal(lock.version,'0.15.
|
|
18
|
-
assert.equal(lock.packages[''].version,'0.15.
|
|
19
|
-
assert.equal(DEADBYTE_VERSION,'0.15.
|
|
20
|
-
assert.equal(release.version,'0.15.
|
|
21
|
-
assert.equal(provenance.version,'0.15.
|
|
17
|
+
assert.equal(pkg.version,'0.15.24');
|
|
18
|
+
assert.equal(lock.version,'0.15.24');
|
|
19
|
+
assert.equal(lock.packages[''].version,'0.15.24');
|
|
20
|
+
assert.equal(DEADBYTE_VERSION,'0.15.24');
|
|
21
|
+
assert.equal(release.version,'0.15.24');
|
|
22
|
+
assert.equal(provenance.version,'0.15.24');
|
|
23
|
+
assert.equal(matrix.version,'0.15.24');
|
|
22
24
|
assert.equal(release.train,'R48');
|
|
23
|
-
assert.equal(release.label,'
|
|
24
|
-
assert.equal(release.parent.release_id,'v0.15.
|
|
25
|
-
assert.equal(release.parent.manifest_sha256,'
|
|
26
|
-
assert.equal(release.parent.generation_manifest_sha256,'
|
|
27
|
-
assert.equal(release.source_predecessor.version,'0.15.
|
|
28
|
-
assert.equal(release.source_predecessor.tarball_sha256,'
|
|
29
|
-
assert.equal(release.source_predecessor.manifest_file_sha256,'
|
|
25
|
+
assert.equal(release.label,'COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE');
|
|
26
|
+
assert.equal(release.parent.release_id,'v0.15.23-c97e3d21e792420e');
|
|
27
|
+
assert.equal(release.parent.manifest_sha256,'c97e3d21e792420ea90dada3c1360cd56e4c1f221daa86596d611b0d1ac351ec');
|
|
28
|
+
assert.equal(release.parent.generation_manifest_sha256,'4d2d3a4dc103576c39171c52db3436366e62d8b872bcafa4c55f2adb6d3a1126');
|
|
29
|
+
assert.equal(release.source_predecessor.version,'0.15.23');
|
|
30
|
+
assert.equal(release.source_predecessor.tarball_sha256,'8c8711805bd05b9d4f61a7c9e123d888eb65121a10c85247807a723154416af4');
|
|
31
|
+
assert.equal(release.source_predecessor.manifest_file_sha256,'c97e3d21e792420ea90dada3c1360cd56e4c1f221daa86596d611b0d1ac351ec');
|
|
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.
|
|
34
|
-
assert.
|
|
35
|
-
assert.equal(release.capabilities.
|
|
36
|
-
assert.equal(release.capabilities.
|
|
37
|
-
assert.equal(release.capabilities.
|
|
38
|
-
assert.equal(release.capabilities.
|
|
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\(
|
|
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
|
|