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.
- package/MANIFEST.SHA256 +49 -40
- package/PROVENANCE.json +11 -10
- package/README.txt +7 -7
- package/RELEASE.json +19 -38
- package/TEST-MATRIX.json +32 -96
- package/package.json +3 -3
- package/proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json +122 -0
- package/scripts/commander-hardening-gate-r47.mjs +10 -1
- package/scripts/commander-real-performance-benchmark-r47.mjs +12 -3
- package/scripts/gate-windows-r48.ps1 +45 -0
- package/scripts/init-host-policy.ps1 +9 -1
- package/scripts/npm-release-r48.mjs +2 -1
- package/scripts/windows-gate-evidence-r48.mjs +27 -0
- 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 +72 -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/machine-fs-smoke-client.mjs +6 -17
- package/src/mcp-host-smoke-client.mjs +3 -2
- package/src/mcp-server.mjs +14 -2
- package/src/mcp-smoke-client.mjs +4 -9
- package/src/observation-smoke-client.mjs +5 -10
- package/src/output-contracts.mjs +6 -4
- package/src/process-smoke-client.mjs +3 -3
- package/src/runtime-catalog-expectation.mjs +37 -0
- package/src/stdio-protocol-guard.mjs +71 -0
- package/src/tunnel-stdio-compat-smoke.mjs +5 -9
- package/src/version.mjs +1 -1
- package/test/atomic-mutation.test.mjs +61 -0
- package/test/coding-catalog-consistency.test.mjs +9 -1
- 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 +41 -3
- package/test/commander-schema-differential-r48.test.mjs +1 -1
- package/test/commander-wire-contract-r47.test.mjs +32 -0
- package/test/contained.test.mjs +4 -6
- package/test/controller.test.mjs +2 -1
- 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 +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.
|
|
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.
|
|
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.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,'
|
|
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.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.
|
|
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
|
|
|
@@ -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
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
assert.match(smoke, /
|
|
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
|
|