deadbyte-mcp 0.15.24 → 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 +26 -23
- package/PROVENANCE.json +8 -8
- package/README.txt +7 -7
- package/RELEASE.json +7 -7
- package/TEST-MATRIX.json +8 -8
- package/package.json +2 -2
- package/proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json +17 -6
- package/scripts/commander-hardening-gate-r47.mjs +10 -1
- 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/commander-wire-adapter-r47.mjs +16 -0
- package/src/machine-fs-smoke-client.mjs +6 -17
- package/src/mcp-host-smoke-client.mjs +3 -2
- package/src/mcp-smoke-client.mjs +4 -9
- package/src/observation-smoke-client.mjs +5 -10
- package/src/process-smoke-client.mjs +3 -3
- package/src/runtime-catalog-expectation.mjs +37 -0
- package/src/tunnel-stdio-compat-smoke.mjs +5 -9
- package/src/version.mjs +1 -1
- package/test/coding-catalog-consistency.test.mjs +9 -1
- package/test/commander-real-parity-r47.test.mjs +8 -4
- package/test/contained.test.mjs +4 -6
- package/test/controller.test.mjs +2 -1
- package/test/r48-release-contract.test.mjs +14 -14
- package/test/tunnel-stdio-compat.test.mjs +4 -6
package/MANIFEST.SHA256
CHANGED
|
@@ -1336,12 +1336,12 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
|
|
|
1336
1336
|
f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
|
|
1337
1337
|
51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
|
|
1338
1338
|
3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
|
|
1339
|
-
|
|
1339
|
+
031ffd3142b95fb18a6e21ee49c6369057aa7cdf0fb7067bda70de9d2bc9e91c package.json
|
|
1340
1340
|
872947dffd89755b03558b217129f009dc9f4fd1ce55e93c602fc6ea97ba8b48 proof/commander-closure-20260927/CONTINUATION.json
|
|
1341
1341
|
2959980d295814aaa0df71fdb358d2cbfd01c1357ee36ef6b10c149875bdb262 proof/commander-closure-20260927/RESULT.json
|
|
1342
1342
|
2c2866309ca3a6fc8de5b03d445f1dcf0778474fa25cefb822b2ab729bc91c62 proof/commander-closure-20260927/SEARCH-CONTINUATION.json
|
|
1343
1343
|
c897727b13b10041067cd061f552dc8933e20cb085a7d8df7fe8ed2e5972fac7 proof/commander-closure-20260927/XLS-REFERENCE-PROBE.json
|
|
1344
|
-
|
|
1344
|
+
db86fe94947fa02a19b15426507fbac7d9df6092170416efe5e7bce0d3d28607 proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json
|
|
1345
1345
|
8177e3a354721a73df889f386a97e7744a2e017d150aecf4bf309f5177d18690 proof/CONTAINMENT-BUILD.txt
|
|
1346
1346
|
a8efa13e44ff50902aee64cfca542d19605a1ae23db95280ad2d44b324f3eae7 proof/MCP-SMOKE-STATUS.txt
|
|
1347
1347
|
7c115069cc4a343ca21b0ebdee74bd8f544b02d4aa906ffa13308725825d891a proof/NODE-SYNTAX.txt
|
|
@@ -1401,7 +1401,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
|
|
|
1401
1401
|
bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
|
|
1402
1402
|
2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
|
|
1403
1403
|
f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
|
|
1404
|
-
|
|
1404
|
+
5aec9f09e147d8d815bb099285b66380bae1a999e65cb827261f2c6301901af1 PROVENANCE.json
|
|
1405
1405
|
27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
|
|
1406
1406
|
0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
|
|
1407
1407
|
bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
|
|
@@ -1409,8 +1409,8 @@ bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.jso
|
|
|
1409
1409
|
f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.json
|
|
1410
1410
|
731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
|
|
1411
1411
|
d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
|
|
1412
|
-
|
|
1413
|
-
|
|
1412
|
+
e236c6159a69ea654897e23987434f9c15c2a3b062f50632f177f22bf775b9cc README.txt
|
|
1413
|
+
22941f9c86ae48570209218de5d34f6e95fa8b6e3d6bd9f1a87337d3b8ee6674 RELEASE.json
|
|
1414
1414
|
d3f8aee77f036e59951d56ab95fda98a050017fba7be8cf178761eb3236383a4 SBOM.cdx.json
|
|
1415
1415
|
7c86062c4f69db3179a129d65945ccfab1b1c1c5bcc29b91383eac097d50f2aa scripts/activate-skill-creator-1.1.1.mjs
|
|
1416
1416
|
bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
|
|
@@ -1432,7 +1432,7 @@ fc2cedd94892b0639075e03e8d0fe92cdd3bc964ab88f70b2c6474202d31a6d3 scripts/check-
|
|
|
1432
1432
|
d67037522c81ff1946cac4a33b2ffc1fc7792be8aeb8bae768f4b71665511233 scripts/check-process-deadline-r46.mjs
|
|
1433
1433
|
8dacedabbf6e698bcbe87fb92f210245e71bd959542843042cfc953d65923f63 scripts/check-r46-background.mjs
|
|
1434
1434
|
7d3c741de2b1c29f82efa96ab81fc819d8520f97413ce5ab0d4a1b1efd0e8b42 scripts/coding-live-smoke.mjs
|
|
1435
|
-
|
|
1435
|
+
6d6e18b2a17448dad569dfbf60ac103c6c8bcfe73c49af93506816c3c0b7fe73 scripts/commander-hardening-gate-r47.mjs
|
|
1436
1436
|
51ab687334db36641cd3a73e58ea6dbbbe9914c79ea98c65f0b91e157563c4fe scripts/commander-parity-benchmark.mjs
|
|
1437
1437
|
d7806aa408dc7ca74f05feec535ad6cc545f8c61892c51f0fe388bb13d975290 scripts/commander-real-performance-benchmark-r47.mjs
|
|
1438
1438
|
254872f5f1f2fa662b1061aad4c3da59b21d882e45f7f0ceefff2f688ea493a1 scripts/deferred-slot-operation-r37-0110.mjs
|
|
@@ -1501,16 +1501,17 @@ a0ad824eed1d8be051d5f731579f9bf4115b311f202b75ea0d03aa257b13a671 scripts/gate-w
|
|
|
1501
1501
|
7489fd39491c8ee496bfae08819b2502dbbefd6c47b19a0146d08d203170c07b scripts/gate-windows-r44.ps1
|
|
1502
1502
|
500b330c6d14afb1162d28efb9b99e75cec9f702a67b6b936449943c908177a9 scripts/gate-windows-r45.ps1
|
|
1503
1503
|
00a3fc5aa75763c40ff0e09173091168903eb7fcae0ce164e51876569a4e2ff1 scripts/gate-windows-r46.ps1
|
|
1504
|
+
e2d555bfcdc1464834cd6541753a7edc9845fc4a72761c2ec9f2d75991616b2d scripts/gate-windows-r48.ps1
|
|
1504
1505
|
9a085b34b9e54023eb0efadcea1e74a1bef44b984105d064768d66910999173e scripts/gate-windows.ps1
|
|
1505
1506
|
9e625bdc701298c05eb2a63c208d023a487a1baf306c05940eb29c19fb1d6544 scripts/init-desktop-policy-r40.ps1
|
|
1506
|
-
|
|
1507
|
+
01451045bff624a157e7eea79afd7edfa8cb8212ea0256c8ec744fe1e1b269ff scripts/init-host-policy.ps1
|
|
1507
1508
|
1a771b5b8a62d57f26762d53472ed68a3e733674b1c91e08becf0dc2e4325039 scripts/inspect-active-release-r45.mjs
|
|
1508
1509
|
de6142bd5693cf4edb8725c9c43fc77e9bdc12f5b398a757006d778d3ee3f8ed scripts/inspect-r46-active.mjs
|
|
1509
1510
|
06425d2a4004cb0ad66383c10c30aaa91bb020be2926bc76f9681a8f0827ddfc scripts/inventory-reference-dist.mjs
|
|
1510
1511
|
7ea8cf6bf094a1612603bc716228a3753e5f06fca8a0684d2da15a04d0710c64 scripts/list-source-zips.mjs
|
|
1511
1512
|
9d12d15f7c83ddf272834072ed37d618a232bd8a3fd36c339761fe08bb9380d8 scripts/npm-publish-r47.ps1
|
|
1512
1513
|
4f1a6e0f8d23bd24b066b3a2df0cae1d47822c16c754122fde78dc509d0752f8 scripts/npm-release-r47.mjs
|
|
1513
|
-
|
|
1514
|
+
b080c89e1a842808ec9c835dc0033ea6cf068931e8e3a9fd802d6525ca20570c scripts/npm-release-r48.mjs
|
|
1514
1515
|
31bc0af20f7eecddda5f845da023f1d1750c70627ce872a885a3b06596c0c07f scripts/pcb-skill-src-bringup-evidence.md.txt
|
|
1515
1516
|
75d59f8e8d25fefb1f3afa7bd37f17287f277a7bcd09a04813daa9dea9d629fd scripts/pcb-skill-src-constraint-model.md.txt
|
|
1516
1517
|
eb350a6f70b822afaeedbf944ce017b4cc351edac599173b352d8b685207686e scripts/pcb-skill-src-emc-mechanical-dfm.md.txt
|
|
@@ -1586,6 +1587,7 @@ d05fd67d62005aebf3cd2daf1e67f0550d124a2068baf9aa0550afb7de26f440 scripts/window
|
|
|
1586
1587
|
7bf69fa83b1107171369a76844786eb3930a633f5ef6ad77285fbe276c1e79ae scripts/windows-gate-evidence-r44.mjs
|
|
1587
1588
|
65a259259bb33755ee4873c57ae1588665e5af3a40dd4cc83b5bccdfed228ea1 scripts/windows-gate-evidence-r45.mjs
|
|
1588
1589
|
536f36b6d4cd86b9f874f6b8c0599d752d9efa69a2691f8971ee4b0d317c9739 scripts/windows-gate-evidence-r46.mjs
|
|
1590
|
+
f344639080f68b7da5cda765b518e0fb91bc8818229b6f460e82b173018ad30c scripts/windows-gate-evidence-r48.mjs
|
|
1589
1591
|
2255b8eb78ca61267df54448560a671357f04893b6bb1df27b8b9fc8a944d255 scripts/windows-gate-evidence.mjs
|
|
1590
1592
|
105a5c6dcd54e4fabb416df9eaac093654f3ea39c4233a56e0bc6d53371b2128 scripts/workload-contract-regression-r47.mjs
|
|
1591
1593
|
c32cb9054a1b9641ae071c00622c0054272bdb0b519ea22c4ff926a1600a2b46 scripts/workload-stream-regression.mjs
|
|
@@ -1641,7 +1643,7 @@ ad575fc45fdf02fd0f680a9f5a1d0a0fc8509922fd1832b2a80f72b2fa8c319c src/commander-
|
|
|
1641
1643
|
1d292ce65a6c01dc272c7da2d13264f80552f79d2ee9c485ee0584a9cee7fb9a src/commander-remote-relay-r47.mjs
|
|
1642
1644
|
fe74274c8de996839c4cc95782f8caf746679b414fbf0390880b1c2ff732d5a8 src/commander-ui-resources.mjs
|
|
1643
1645
|
b95c6c118ba81cea6671b8959723729094b4cb5736b42b470e1e1e400b55f4f8 src/commander-url-reader-r48.mjs
|
|
1644
|
-
|
|
1646
|
+
a32226e302669553d39565176fc7ef9a0ace24834d2c19d3558ba33f13016ba0 src/commander-wire-adapter-r47.mjs
|
|
1645
1647
|
46664a086a1931aac6c432786764c118341ac8d33c8a75a7552a80cd9e0502f9 src/compact-gateway-mcp-tools.mjs
|
|
1646
1648
|
4218d1d1478d9e9a044d9b61c5ae205cd2ca0651a314900fad03992d0b12d286 src/compact-gateway-output-contracts.mjs
|
|
1647
1649
|
40ac70ece531de7709d3c51686b36b48e0ae60283d1fb18d0adc037bfe6f9063 src/contained-cli.mjs
|
|
@@ -1684,15 +1686,15 @@ e1afae872e4252a4002032f1610033d41f5224896b0b06be077f54b267ed4f4f src/invocation
|
|
|
1684
1686
|
5413fea537f9d72f73e89137b4c750530fbca41598b16bd9ede0e1c272111488 src/machine-fs-mcp-tools.mjs
|
|
1685
1687
|
d94e4478b7e465fa559065e508f65b9ef3eff815a8f2d7b2481bf2a0b05224c9 src/machine-fs-output-contracts.mjs
|
|
1686
1688
|
7f68488f9e48ada11b1f1ea64032efa82a68dc6b632fffcf37fbe9bd95237e26 src/machine-fs-read-worker.mjs
|
|
1687
|
-
|
|
1689
|
+
0e9f04f090fd227656c0ea579b53541fbf544212544d2a6944f1598e67bae95c src/machine-fs-smoke-client.mjs
|
|
1688
1690
|
5498b87a1ffd83ac25d86f92ee939a88f534307c7f63878481c11fbff0d8733c src/machine-fs.mjs
|
|
1689
1691
|
14c072f1eefac6e9a7b91e50a0eb4669b972212c1e4bab03c8141fef86933cc8 src/machine-identity.mjs
|
|
1690
1692
|
ad4ca3635cb228b57b5b98e9518f379380ee1a03ad07ab4d12f8b7f324be2517 src/machine-mcp-tools.mjs
|
|
1691
1693
|
e81b3ac2955e5dfafe308c82da24356a14da396230cb9fc47b231ab672d5be48 src/machine-output-contracts.mjs
|
|
1692
1694
|
ed85d41c494a334117661ddec8191d34974fe28cb2a3378f3c04ee0e4c5d3ccc src/mcp-contained-smoke-client.mjs
|
|
1693
|
-
|
|
1695
|
+
1ba02360e81bd5419caccbecf254408a089e73c450ca1f4b9c6085d1cb041b19 src/mcp-host-smoke-client.mjs
|
|
1694
1696
|
083c780f35bd6cccd16cdf506f7c73adf4f3228d4036031df7e5d47e8dbdf319 src/mcp-server.mjs
|
|
1695
|
-
|
|
1697
|
+
8eb24a5ecf19c1b4fe98ae483f0604aa733db1f6ff0fa538587f8cb281654386 src/mcp-smoke-client.mjs
|
|
1696
1698
|
cde7c813f5a2e9a69f09849455d1504e766963845a1f4b201ecc84090fa260d5 src/memory-r41.mjs
|
|
1697
1699
|
9525aee66944023603f6d1ebb0768b8e8ab8bb93582a10dd7f9cd4459ee07454 src/native-diff-v2.mjs
|
|
1698
1700
|
2b2293a90db419dd1b548d766475c7e9e1bf243d3e9b0011969f1622ba803e74 src/native-diff.mjs
|
|
@@ -1700,7 +1702,7 @@ cde7c813f5a2e9a69f09849455d1504e766963845a1f4b201ecc84090fa260d5 src/memory-r41
|
|
|
1700
1702
|
69773eaa6447632497f2668e376e9fa395fb398c922cb883cb157fa4cdf33c5c src/observation-mcp-tools.mjs
|
|
1701
1703
|
47f58ddf5e5681fdf01f362b591ea3193bfcdfe02ffcc0bb03f1625123ad60fd src/observation-output-contracts.mjs
|
|
1702
1704
|
3cfef96336b5bda9956a1efb1c55910037f56a3b47f65d50aeb64979fb464179 src/observation-runtime.mjs
|
|
1703
|
-
|
|
1705
|
+
2ce4111839427cbc0d053b24982cbbd47cde3d668d24ea93651ff2f5fa3f2fb9 src/observation-smoke-client.mjs
|
|
1704
1706
|
7d215399327b7e5a8b5e3c89bbe304c086c9b733dd5c7526b31f101afe97b783 src/operation-history.mjs
|
|
1705
1707
|
65dc466392ab317dad527e7f08004cc975b4a77f66509e10d786c691fed7bfbb src/operation-lifecycle.mjs
|
|
1706
1708
|
96c29ce8f90a717ebc311155acfa075c7ea8f6f63401a37269586fbe1419376f src/operation-policy.mjs
|
|
@@ -1712,7 +1714,7 @@ e541a1dba48034b914dc15eb789a6fa0bc43f60439dda61d31a7a99de9ff1a9f src/operator-s
|
|
|
1712
1714
|
f5322664c669bc193214a803f9723e3728053f60bc008530db39a9af7f7bab75 src/process-policy.mjs
|
|
1713
1715
|
ba3eafd91b69e75700824c1a6103ff0e2f6a6cad162a607e1b12250d6bc52142 src/process-readiness.mjs
|
|
1714
1716
|
f364076cad1cead310c7d43312a2c92d18f8ffc966bf50781436f37347cc0b1d src/process-runtime.mjs
|
|
1715
|
-
|
|
1717
|
+
0fd4eb9716e06929a3b236ddcd3bfd570b206ef442af28f04b8db0190e8fe58a src/process-smoke-client.mjs
|
|
1716
1718
|
bb4d1532684b8f81a42377c4b0a9d4c61207856edfff496e878ffbb885b52442 src/proof-cli.mjs
|
|
1717
1719
|
be4a4f7f16e473ac842559a5a18eccb59e3693bded59a1abc71e75ff448cc755 src/proof-worker.mjs
|
|
1718
1720
|
4a8c2b9a8487fd7d2a27b0cbff54ec7ef240e446df002791968b836c9443a10d src/provider-circuit.mjs
|
|
@@ -1747,6 +1749,7 @@ da7a51640bee04dff80e24c2ad6241ef87d160866df1fd9b8ef02c8beda6cee5 src/remote-mcp
|
|
|
1747
1749
|
c8fd6fd3e49e866f2c3be326ab07222b36a44528ee0fc3f7b371c34a60e3c45b src/remote-session-guardian.mjs
|
|
1748
1750
|
827b156eac01cc9ec6f5ca9a49219612f0da511fde770a9eb1235aa913b5e514 src/request-identity.mjs
|
|
1749
1751
|
39251ab165bb0a0b8ea9b4c533aa0cd674934c0fa2c7f63145eac680d1d67be9 src/resource-identity.mjs
|
|
1752
|
+
320b162944953b3aca58d4a48e6c9507f37a84ad1a9aaebe0aeb02a497cf80cb src/runtime-catalog-expectation.mjs
|
|
1750
1753
|
ce2223bf6075e96cc02505c1439acce18bb1f204c5e86cf9152bb7194daf3cd2 src/runtime-identity.mjs
|
|
1751
1754
|
f2f09e79fd56c7f9005af526b12afbb5b7a64367d0556ad38ba5e6a22bca9524 src/runtime-update.mjs
|
|
1752
1755
|
c61335adb38bfc415fe1cdabfe2c0a87e61579dfd1e52cce91c44d6993479457 src/search-cursor.mjs
|
|
@@ -1763,15 +1766,15 @@ fbc50dcd21c87814191ddc235da7d425ffbb1bcfe4446dda1a7fae1d5ae9ce14 src/tool-audit
|
|
|
1763
1766
|
ac7394cf2c353dfab645937ab7bfb6eed7e42f345c1d46185f37f9d65772104c src/tool-surface-ledger.mjs
|
|
1764
1767
|
bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init.mjs
|
|
1765
1768
|
1325b75abd94c44ea53278e2763448d3065d7cce979581f223dd186e05e3234e src/trust.mjs
|
|
1766
|
-
|
|
1769
|
+
2a91fcd0311f80fdaabc353174cdbdae7f8f0915cce7ca2938343c0be00f652d src/tunnel-stdio-compat-smoke.mjs
|
|
1767
1770
|
aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
|
|
1768
1771
|
642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
|
|
1769
1772
|
8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
|
|
1770
|
-
|
|
1773
|
+
6934452f55187f49f689151e1d6d3a76533ee6c6650aee63d0261069a502e917 src/version.mjs
|
|
1771
1774
|
7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
|
|
1772
1775
|
76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
|
|
1773
1776
|
4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
|
|
1774
|
-
|
|
1777
|
+
bef1c8833390e77cff9be1b8ee363ed4a74bc5c677545f85806543134bd5d7f4 TEST-MATRIX.json
|
|
1775
1778
|
e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
|
|
1776
1779
|
2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
|
|
1777
1780
|
d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
|
|
@@ -1813,7 +1816,7 @@ aec98dc7d09acf39916425d055d5e76f45713ef4d3d73f9aedb7ec1ea037bed4 test/capabilit
|
|
|
1813
1816
|
84eefe1a43474927fdc6fb7ef269309c662cefb229d6af2c91d9e2f0b9ba5c23 test/cli-entrypoint.test.mjs
|
|
1814
1817
|
bec565ffa8550d56a5bb21927177c37d9d05f8353e3bc2541fc156886fe23688 test/codex-app-server-r44.test.mjs
|
|
1815
1818
|
c43105a78ee4c93417d720ee660cfebc75b17f142a6484568e3cbaa583457f8c test/codex-autonomous-r44.test.mjs
|
|
1816
|
-
|
|
1819
|
+
dda317c3fe46f92512c2ee05eb91615ec60f88a00a7fa9c3d43f7121c2438e9f test/coding-catalog-consistency.test.mjs
|
|
1817
1820
|
604605e1992ea62e1eca6880d7b0bae36d43b16d17573a663cd9b3ff089575c7 test/coding-crash.test.mjs
|
|
1818
1821
|
f37e260c2def4c48434b3f251a4cb756a1852843784c08cf6c39dba9045dfb69 test/coding-mcp-unknown-effect.test.mjs
|
|
1819
1822
|
0fad3c669e48d60bbae7f4b847472677bf3bf8bcc9db0c798d76814b8f907e17 test/coding-observation.test.mjs
|
|
@@ -1834,7 +1837,7 @@ fc014858b70428735c5311efdc07ff814e63db9330f89426d697077f2509c264 test/commander
|
|
|
1834
1837
|
bfc2e6d7e1aa5332c1c81687001cdb5f923a45c5ce64925097fe11fd850e9214 test/commander-pdf-r48.test.mjs
|
|
1835
1838
|
bacb96828ea0431cd5f3a8ecb637894f0bdf80b5f52e9308ba0cbb982f50bd2a test/commander-protocol-adversarial-r48.test.mjs
|
|
1836
1839
|
7b31f1db99ede6837ce491cc670b73d68ab0cdd7ee96ab5d3be713dc19288fc0 test/commander-protocol-r47.test.mjs
|
|
1837
|
-
|
|
1840
|
+
5709ea1cf4e65c4f1759206123216cac6cb66d8a383c0b0a6c00f4a551d9c727 test/commander-real-parity-r47.test.mjs
|
|
1838
1841
|
5a7938243a5dbab4dd218fe2d8a34dbaf4eb76b4e9261bd2f15a34c01aa1e520 test/commander-reference-contract-r48.test.mjs
|
|
1839
1842
|
b91717e90c678a07dab88f51285717f4e986b02fa65555f00e01e164d476a3a0 test/commander-remote-bridge-r47.test.mjs
|
|
1840
1843
|
7bd183f57b33e4cd8c981fc906c80a6855cb856baace0bcb3f145dadf9d62127 test/commander-remote-plane-r47.test.mjs
|
|
@@ -1847,7 +1850,7 @@ d8e884e241c705b12797f911fb967a4a33b1ec6f3e15b433735882b3de4a34e5 test/commander
|
|
|
1847
1850
|
3b5133e8cc7a8c2c5e66a7c34ac5e4f9bf2cf14b5897a7e871fb41ba82b629e5 test/compact-max-catalog-r40.test.mjs
|
|
1848
1851
|
22e3cc9a6f9e2da776e3c737b964e2a8889c1363c244474de552d8e17dac8ffc test/compact-max-catalog-r44.test.mjs
|
|
1849
1852
|
d05c22af0c714fd98ee7454668e8b2968e6349f006b5e7d8ead2b6669e68714c test/compact-max-catalog-r45.test.mjs
|
|
1850
|
-
|
|
1853
|
+
4ea8081def2890ce0116701257410f387132e20c9b41363801ee74f38ce2be45 test/contained.test.mjs
|
|
1851
1854
|
48a3b64ed40311fb017217cd85f3102c77a2cd72490b5edd41aac01247a1882c test/containment.test.mjs
|
|
1852
1855
|
599eba90e0e4e1222518f7c268e0d5598dcbc9121a13fe6ede909645e72ec24b test/context-provenance.test.mjs
|
|
1853
1856
|
7ce34ff30b9cac5fdbbd7fc4dbced1a19322a1fb2b9e7ec28f2c7135d935f395 test/controller-desktop-r40.test.mjs
|
|
@@ -1859,7 +1862,7 @@ a972bd20fa927427e6d8e4181699a27e792e916b02dcf8a1ac3e2b44afd238c1 test/controlle
|
|
|
1859
1862
|
41959e534e2283bf55ced245a58b6ea8d4d0d91d79820d87a3325adc2051560a test/controller-r27.test.mjs
|
|
1860
1863
|
ceba7d1a09ccdcb20f33fe4e6de7667ffe0f0170d1bc9fefadfdba4d7f228090 test/controller-r29.test.mjs
|
|
1861
1864
|
4d0dc810d9af13907f31c834a13acfb7e01ffbbe65575b69649fe52741e42175 test/controller-r30.test.mjs
|
|
1862
|
-
|
|
1865
|
+
08c3075ee0b7301160cad1b00cc5ad865bea87a700203e76339aedc927becd27 test/controller.test.mjs
|
|
1863
1866
|
ca977f49ca8096c37e1db1d10066f6526c33f06df6d952d29b0b4958a9d9f9dc test/core.test.mjs
|
|
1864
1867
|
7ba4b06a1c4141ba87b5b371157fb59940d15a1016b4c599a13753d63ad0d3d3 test/DEADBYTE-MCP-WRITE-PROBE.txt
|
|
1865
1868
|
c526724a6d10648fdd5152af917ba2fe51836dc5877daaac554bbd9e52fcd47e test/deferred-slot-operation-behavior.test.mjs
|
|
@@ -2013,7 +2016,7 @@ d8f544bbcdfff61f7abb7705ad7e5e1f17998f5fde3c114fb33915fc66d1408f test/r41-final
|
|
|
2013
2016
|
2c5f2093b945c267c8d09cd2da0875c7f45911a7c01aa02a50cd64c2c1a7ccdc test/r45-autonomous-quick-test.test.mjs
|
|
2014
2017
|
532075c86893caf68a2d0ea09171bee4c7d60892c1892011285376a2c186ed92 test/r45-finalization.test.mjs
|
|
2015
2018
|
25a21ccffcf566b020b8f3c6c0a5a3b7ff06b243fff84e405207e458640ba487 test/r47-release-contract.test.mjs
|
|
2016
|
-
|
|
2019
|
+
48b0be4d9c422e5368718e12541be73e9879326d43218fd16ded703b76228269 test/r48-release-contract.test.mjs
|
|
2017
2020
|
e45a6cd299d8d65bdeb9bc0117ce1eb2b47fdebad89a02413ee979c9d0ae3a5c test/release-activation-gate.test.mjs
|
|
2018
2021
|
85f6dc2059fd19d03452309ffe67bed5b87da8e6f0ce3a85cab58cba8b197ceb test/release-generation.test.mjs
|
|
2019
2022
|
bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
|
|
@@ -2049,7 +2052,7 @@ a98537d1136988251572f424b29ff8f798356dcfd9a7a1d4238a9c7e943e6a52 test/standing-
|
|
|
2049
2052
|
1ffc13c7ae2010d5c29b02fcb6b2226f52152ce3dd8064fce6d321701f919952 test/tool-surface-ledger.test.mjs
|
|
2050
2053
|
be2f1dcbcba6cadc6bcfcb9e2ad94c078a1ac285e93295991fbfbdcf98eee65e test/tool-surface-snapshot.test.mjs
|
|
2051
2054
|
197bd6664f4a8e8d3769c058d693b363ed5a9ad2e69aec8ee37ffb289c6d03c4 test/tracer-bullet.test.mjs
|
|
2052
|
-
|
|
2055
|
+
86b5f6cbe94f3a8a962394134add820438fe934e609e44067ace3896b0a84a1b test/tunnel-stdio-compat.test.mjs
|
|
2053
2056
|
bdb8ebea2ec1252fdcb703ce8aab773012c471a8feda4efdd1f41b5101b63824 test/windows-observation-r48.test.mjs
|
|
2054
2057
|
239d665f36dd7582e8148649ef7979835fe90f2e640585e28d0152397762e282 test/windows-observation-surface-r48.test.mjs
|
|
2055
2058
|
29017f917b1775a1c2c184aef26c61e5bf4093d64441052e2da0824b582f669c test/workload-substrate.test.mjs
|
package/PROVENANCE.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.provenance.v1",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.25",
|
|
4
4
|
"builder": "deadbyte-r48-commander-differential-protocol-hardening",
|
|
5
5
|
"source_model": "development-root -> pinned Commander 0.2.51 differential oracle -> incremental PDF revision fix + explicit unknown-effect mutation semantics + directory/binary compatibility + DOCX drawing/header/footer search + raw MCP adversarial protocol proof -> bounded R48 regression -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed machine truth",
|
|
6
6
|
"signing": "ed25519",
|
|
7
|
-
"parent_release_id": "v0.15.
|
|
8
|
-
"parent_manifest_sha256": "
|
|
9
|
-
"parent_generation_manifest_sha256": "
|
|
10
|
-
"source_predecessor_version": "0.15.
|
|
11
|
-
"source_predecessor_tarball_sha256": "
|
|
12
|
-
"source_predecessor_manifest_file_sha256": "
|
|
7
|
+
"parent_release_id": "v0.15.24-c33fcbc449562285",
|
|
8
|
+
"parent_manifest_sha256": "c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e",
|
|
9
|
+
"parent_generation_manifest_sha256": "6b81c4a5b940a6ef525b7d0ce8e7ff5e6b9fc9b8048d9522ea8852fa29b85395",
|
|
10
|
+
"source_predecessor_version": "0.15.24",
|
|
11
|
+
"source_predecessor_tarball_sha256": "23ea53fb4f331873c742c810f815d5ad18291f74c1bda1fd1d8c08475dbbd4ad",
|
|
12
|
+
"source_predecessor_manifest_file_sha256": "c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e",
|
|
13
13
|
"commander_reference_version": "0.2.51",
|
|
14
14
|
"commander_reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
|
|
15
15
|
"commander_reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140",
|
|
16
16
|
"full_regression_task_receipt_sha256": "7711039e4807f6c2af02bbda897d0032b067e0a6631f789fd3bf801258160d3f",
|
|
17
|
-
"reproducibility": "manifest-bound package bytes; exact 0.15.
|
|
17
|
+
"reproducibility": "manifest-bound package bytes; exact immutable 0.15.24 registry and active runtime predecessor; reference server/schema byte pins; signed full-regression task receipt; raw MCP protocol adversarial proof; npm production audit zero vulnerabilities; signed machine truth required after activation"
|
|
18
18
|
}
|
package/README.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
DEADBYTE MCP V0.15.
|
|
1
|
+
DEADBYTE MCP V0.15.25 / R48 COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE
|
|
2
2
|
=========================
|
|
3
3
|
|
|
4
4
|
AUTHENTICATED MACHINE TRUTH + DURABLE AGENT + CODING + AUTONOMOUS PRODUCTION ENGINE
|
|
@@ -7,12 +7,12 @@ NPX PRIMARY OPERATOR UX
|
|
|
7
7
|
------------------------
|
|
8
8
|
Use the npm CLI entry point instead of the legacy CMD convenience wrapper:
|
|
9
9
|
|
|
10
|
-
npx -y deadbyte-mcp@0.15.
|
|
11
|
-
npx -y deadbyte-mcp@0.15.
|
|
12
|
-
npx -y deadbyte-mcp@0.15.
|
|
13
|
-
npx -y deadbyte-mcp@0.15.
|
|
14
|
-
npx -y deadbyte-mcp@0.15.
|
|
15
|
-
npx -y deadbyte-mcp@0.15.
|
|
10
|
+
npx -y deadbyte-mcp@0.15.25 mcp
|
|
11
|
+
npx -y deadbyte-mcp@0.15.25 remote
|
|
12
|
+
npx -y deadbyte-mcp@0.15.25 remote status
|
|
13
|
+
npx -y deadbyte-mcp@0.15.25 remote restart
|
|
14
|
+
npx -y deadbyte-mcp@0.15.25 audit status
|
|
15
|
+
npx -y deadbyte-mcp@0.15.25 audit verify
|
|
16
16
|
|
|
17
17
|
The `mcp` command is the quiet stdio server entry for local MCP clients; stdout is reserved for MCP.
|
|
18
18
|
The remote CLI invokes the stable active-release PowerShell launcher directly with shell=false.
|
package/RELEASE.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.release.v1",
|
|
3
3
|
"name": "deadbyte-mcp",
|
|
4
|
-
"version": "0.15.
|
|
4
|
+
"version": "0.15.25",
|
|
5
5
|
"train": "R48",
|
|
6
6
|
"label": "COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE",
|
|
7
7
|
"protocol_revision": "2026-07-28",
|
|
8
8
|
"parent": {
|
|
9
|
-
"release_id": "v0.15.
|
|
10
|
-
"manifest_sha256": "
|
|
11
|
-
"generation_manifest_sha256": "
|
|
9
|
+
"release_id": "v0.15.24-c33fcbc449562285",
|
|
10
|
+
"manifest_sha256": "c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e",
|
|
11
|
+
"generation_manifest_sha256": "6b81c4a5b940a6ef525b7d0ce8e7ff5e6b9fc9b8048d9522ea8852fa29b85395"
|
|
12
12
|
},
|
|
13
13
|
"source_predecessor": {
|
|
14
|
-
"version": "0.15.
|
|
15
|
-
"tarball_sha256": "
|
|
16
|
-
"manifest_file_sha256": "
|
|
14
|
+
"version": "0.15.24",
|
|
15
|
+
"tarball_sha256": "23ea53fb4f331873c742c810f815d5ad18291f74c1bda1fd1d8c08475dbbd4ad",
|
|
16
|
+
"manifest_file_sha256": "c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e",
|
|
17
17
|
"reference_package": "@wonderwhy-er/desktop-commander@0.2.51",
|
|
18
18
|
"reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
|
|
19
19
|
"reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
|
package/TEST-MATRIX.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.test-matrix.v1",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.25",
|
|
4
4
|
"train": "R48",
|
|
5
5
|
"primary_platform": "win32-x64",
|
|
6
6
|
"reference": {
|
|
@@ -22,13 +22,13 @@
|
|
|
22
22
|
{"id":"release-smoke","command":"node --test test/release-smoke-isolation.test.mjs","expected":"PASS"},
|
|
23
23
|
{"id":"runtime-update","command":"node --test test/runtime-self-update.test.mjs","expected":"PASS"},
|
|
24
24
|
{"id":"audit","command":"npm audit --omit=dev","expected":"0 vulnerabilities"},
|
|
25
|
-
{"id":"activation","command":"npx -y deadbyte-mcp@0.15.
|
|
26
|
-
{"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.
|
|
27
|
-
{"id":"rollback-restore","command":"immutable slot rollback/restore","expected":"0.15.
|
|
25
|
+
{"id":"activation","command":"npx -y deadbyte-mcp@0.15.25 remote status","expected":"active runtime 0.15.25 with no VERSION SKEW"},
|
|
26
|
+
{"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.25 generation"},
|
|
27
|
+
{"id":"rollback-restore","command":"immutable slot rollback/restore","expected":"0.15.25 -> exact 0.15.24 -> exact 0.15.25"}
|
|
28
28
|
],
|
|
29
29
|
"focused_proof": {
|
|
30
30
|
"raw_mcp_protocol": {"tests":3,"pass":3,"fail":0},
|
|
31
|
-
"commander_hardening": {"tests":
|
|
31
|
+
"commander_hardening": {"tests":139,"pass":139,"fail":0,"skip":0},
|
|
32
32
|
"npm_audit_production_vulnerabilities": 0
|
|
33
33
|
},
|
|
34
34
|
"full_regression_partition_proof": {
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"action_receipt_sha256": "095c5eb4d959b9105a769649aa196a1d33f5097b899031dd16997e5ba1b352e6"
|
|
42
42
|
},
|
|
43
43
|
"performance": {
|
|
44
|
-
"fresh_cross_reference_status": "
|
|
45
|
-
"reason": "
|
|
46
|
-
"historical_sample_only":
|
|
44
|
+
"fresh_cross_reference_status": "PASS_PINNED_REFERENCE_RUNTIME",
|
|
45
|
+
"reason": "A test-only copy of the byte-pinned 0.2.51 reference was installed with scripts, audit, and dev dependencies disabled; production has no reference dependency.",
|
|
46
|
+
"historical_sample_only": false
|
|
47
47
|
},
|
|
48
48
|
"non_win32": {
|
|
49
49
|
"portable_tests": "supported where platform-independent",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.25",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Authenticated MCP agentic runtime with signed skills, persistent model backends, identity-bound remote devices, durable job supervision, immutable release slots, and separately revocable machine authority.",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"contained:run": "node src/contained-cli.mjs workspaces/demo input.txt",
|
|
43
43
|
"contained:smoke": "node src/contained-smoke.mjs",
|
|
44
44
|
"mcp:contained:smoke": "node src/mcp-contained-smoke-client.mjs",
|
|
45
|
-
"gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-
|
|
45
|
+
"gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r48.ps1",
|
|
46
46
|
"authority:smoke": "node src/authority-smoke.mjs",
|
|
47
47
|
"mcp:remote:smoke": "node src/remote-mcp-smoke-client.mjs",
|
|
48
48
|
"mcp:host:smoke": "node src/mcp-host-smoke-client.mjs",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.commander-differential-checkpoint.v1",
|
|
3
3
|
"status": "INCOMPLETE",
|
|
4
|
-
"observed_at_utc": "2026-09-
|
|
4
|
+
"observed_at_utc": "2026-09-29T13:36:00.000Z",
|
|
5
5
|
"source": {
|
|
6
6
|
"requested_path": "D:\\Projects\\deadbyte-mcp-r36-dev",
|
|
7
7
|
"requested_path_version": "0.12.0",
|
|
8
8
|
"actual_successor_workspace": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev",
|
|
9
|
-
"version": "0.15.
|
|
9
|
+
"version": "0.15.25",
|
|
10
10
|
"git_head": "f9037d4847a7204ce4e1f808758ee3f0e9e7a738",
|
|
11
11
|
"path_drift_classification": "requested source path is a historical snapshot and cannot produce a successor of active 0.15.23"
|
|
12
12
|
},
|
|
@@ -62,6 +62,12 @@
|
|
|
62
62
|
"classification": "REAL_DEADBYTE_DEFECT_FIXED_IN_SOURCE",
|
|
63
63
|
"red": "reference exposes drawing markers, header/footer text, and literal DOCX part search while DEADBYTE omitted those document parts and searched ZIP bytes",
|
|
64
64
|
"green": "native bounded DOCX parsing now exposes drawing/header/footer evidence and searches document/header/footer w:t parts through deterministic compatibility sessions"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "interactive-output-quiescence",
|
|
68
|
+
"classification": "REAL_DEADBYTE_DEFECT_FIXED_IN_SOURCE",
|
|
69
|
+
"red": "interact_with_process returned after the first stream advance and could omit the final END marker from a 1.1 MiB response",
|
|
70
|
+
"green": "bounded stream-quiescence waiting plus unconditional test cleanup passed 20 consecutive real PowerShell repetitions and the expanded 139-test hardening gate"
|
|
65
71
|
}
|
|
66
72
|
],
|
|
67
73
|
"focused_evidence": [
|
|
@@ -73,6 +79,8 @@
|
|
|
73
79
|
{"scope": "mcp-protocol-adversarial", "tests": 3, "pass": 3, "fail": 0, "skip": 0},
|
|
74
80
|
{"scope": "atomic-mutation-public-boundaries", "tests": 15, "pass": 14, "fail": 0, "skip": 1},
|
|
75
81
|
{"scope": "full-regression-r48", "files": 211, "batches": 8, "fail": 0, "task_receipt_sha256": "7711039e4807f6c2af02bbda897d0032b067e0a6631f789fd3bf801258160d3f"},
|
|
82
|
+
{"scope": "expanded-commander-hardening", "tests": 139, "pass": 139, "fail": 0, "skip": 0},
|
|
83
|
+
{"scope": "powershell-large-output-repeat", "runs": 20, "pass": 20, "fail": 0},
|
|
76
84
|
{"scope": "npm-audit-production", "vulnerabilities": 0},
|
|
77
85
|
{"scope": "real-performance-sample", "iterations_per_workload": 50, "reference_byte_pins_verified": true, "status": "HISTORICAL_ONLY_FRESH_RUN_BLOCKED_REFERENCE_RUNTIME_DEPS",
|
|
78
86
|
"results": {"read_file": {"reference_ops_per_sec": 55, "deadbyte_ops_per_sec": 1058}, "list_directory": {"reference_ops_per_sec": 3818, "deadbyte_ops_per_sec": 1959}, "get_file_info": {"reference_ops_per_sec": 1805, "deadbyte_ops_per_sec": 2231}, "read_multiple_files": {"reference_ops_per_sec": 30, "deadbyte_ops_per_sec": 562}}}
|
|
@@ -81,12 +89,12 @@
|
|
|
81
89
|
"changed_file_sha256": {
|
|
82
90
|
"src/commander-pdf-r48.mjs": "23cda18e86daa4163003fb5a80e0069bc19541d454f32a9a38b1d901ee39f26b",
|
|
83
91
|
"src/coding-search.mjs": "7f15b59bc240d896beddc2057354f8c72f296fe189db30c200d2c84a67d65773",
|
|
84
|
-
"src/commander-wire-adapter-r47.mjs": "
|
|
92
|
+
"src/commander-wire-adapter-r47.mjs": "a32226e302669553d39565176fc7ef9a0ace24834d2c19d3558ba33f13016ba0",
|
|
85
93
|
"src/commander-office-reader-r48.mjs": "7379825118da8fae16d63fe7c4d89b0ddb03e7649f3754adae58a4480f8b317f",
|
|
86
94
|
"test/commander-pdf-r48.test.mjs": "bfc2e6d7e1aa5332c1c81687001cdb5f923a45c5ce64925097fe11fd850e9214",
|
|
87
95
|
"test/commander-biff-reference-r48.test.mjs": "8e8b20604062a0398214e159729b10bedff334cb44bddfa4b4046b1ae396520f",
|
|
88
96
|
"test/commander-schema-differential-r48.test.mjs": "fb82a21e8752ccb82cbd6b631f3366bfe5af9a4c5a433db5a128c0a1fe703c66",
|
|
89
|
-
"test/commander-real-parity-r47.test.mjs": "
|
|
97
|
+
"test/commander-real-parity-r47.test.mjs": "5709ea1cf4e65c4f1759206123216cac6cb66d8a383c0b0a6c00f4a551d9c727"
|
|
90
98
|
,"test/commander-wire-contract-r47.test.mjs": "d8e884e241c705b12797f911fb967a4a33b1ec6f3e15b433735882b3de4a34e5"
|
|
91
99
|
,"test/commander-office-reader-r48.test.mjs": "abf1eb0977a064101420a0e908a4c2adbf9d606e9873433709910efafa2b4453"
|
|
92
100
|
,"test/commander-core-bridge-r47.test.mjs": "16092ed097420b9da99573c1e84f62d011fcb5db069242d70ffd1649c704fd35"
|
|
@@ -101,10 +109,13 @@
|
|
|
101
109
|
,"test/atomic-mutation.test.mjs": "98de1fc43092c27e0fa85f391607494b11e6cc0d53eaf47b6db1ab457c6d6a4b"
|
|
102
110
|
,"test/coding-mcp-unknown-effect.test.mjs": "f37e260c2def4c48434b3f251a4cb756a1852843784c08cf6c39dba9045dfb69"
|
|
103
111
|
,"scripts/commander-real-performance-benchmark-r47.mjs": "d7806aa408dc7ca74f05feec535ad6cc545f8c61892c51f0fe388bb13d975290"
|
|
112
|
+
,"scripts/commander-hardening-gate-r47.mjs": "6d6e18b2a17448dad569dfbf60ac103c6c8bcfe73c49af93506816c3c0b7fe73"
|
|
113
|
+
,"src/stdio-protocol-guard.mjs": "71e0ddc5e7abaedbb4659bdfb91b6e2db43a642cbec83eee62c16fb069a3c202"
|
|
114
|
+
,"test/commander-protocol-adversarial-r48.test.mjs": "bacb96828ea0431cd5f3a8ecb637894f0bdf80b5f52e9308ba0cbb982f50bd2a"
|
|
104
115
|
},
|
|
105
116
|
"release_created": true,
|
|
106
|
-
"candidate_version": "0.15.
|
|
107
|
-
"publish_attempt": {"status":"
|
|
117
|
+
"candidate_version": "0.15.25",
|
|
118
|
+
"publish_attempt": {"status":"PENDING_AUTH","npm_whoami":"E401 Unauthorized","registry_predecessor_version":"0.15.24","registry_predecessor_tarball_sha256":"23ea53fb4f331873c742c810f815d5ad18291f74c1bda1fd1d8c08475dbbd4ad"},
|
|
108
119
|
"published": false,
|
|
109
120
|
"activated": false,
|
|
110
121
|
"remaining_scope": "restore npm authentication, registry round-trip, successor activation, exact 0.15.23 rollback, exact successor restore and independent final closure"
|
|
@@ -13,7 +13,16 @@ const suites = [
|
|
|
13
13
|
'test/commander-exhaustive-surface-r47.test.mjs',
|
|
14
14
|
'test/commander-core-bridge-r47.test.mjs',
|
|
15
15
|
'test/commander-wire-contract-r47.test.mjs',
|
|
16
|
-
'test/commander-
|
|
16
|
+
'test/commander-reference-contract-r48.test.mjs',
|
|
17
|
+
'test/commander-schema-differential-r48.test.mjs',
|
|
18
|
+
'test/commander-biff-reference-r48.test.mjs',
|
|
19
|
+
'test/commander-office-reader-r48.test.mjs',
|
|
20
|
+
'test/commander-pdf-r48.test.mjs',
|
|
21
|
+
'test/commander-url-reader-r48.test.mjs',
|
|
22
|
+
'test/commander-external-process-r48.test.mjs',
|
|
23
|
+
'test/commander-protocol-r47.test.mjs',
|
|
24
|
+
'test/commander-protocol-adversarial-r48.test.mjs',
|
|
25
|
+
'test/prompts-resources.test.mjs'
|
|
17
26
|
];
|
|
18
27
|
|
|
19
28
|
const startedAt = new Date().toISOString();
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
$ErrorActionPreference = 'Stop'
|
|
2
|
+
Set-StrictMode -Version 3.0
|
|
3
|
+
|
|
4
|
+
function Invoke-GateStep {
|
|
5
|
+
param([Parameter(Mandatory)][string]$Name,[Parameter(Mandatory)][string[]]$NpmArgs)
|
|
6
|
+
Write-Host "==== $Name ===="
|
|
7
|
+
& npm.cmd @NpmArgs
|
|
8
|
+
if ($LASTEXITCODE -ne 0) { throw "DEADBYTE 0.15.25 / R48 gate failed at $Name with exit code $LASTEXITCODE" }
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
Invoke-GateStep 'containment-build' @('run','containment:build')
|
|
12
|
+
Invoke-GateStep 'process-policy-refresh' @('run','process:policy:refresh')
|
|
13
|
+
Invoke-GateStep 'desktop-policy-refresh' @('run','desktop:policy:refresh')
|
|
14
|
+
Invoke-GateStep 'hardware-build' @('run','hardware:build')
|
|
15
|
+
|
|
16
|
+
$hostPolicy = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..\controller\deadbyte-host-policy.json'))
|
|
17
|
+
Remove-Item -LiteralPath $hostPolicy -Force -ErrorAction SilentlyContinue
|
|
18
|
+
if (Test-Path -LiteralPath $hostPolicy) { throw 'could not establish hermetic Host policy absence' }
|
|
19
|
+
|
|
20
|
+
Invoke-GateStep 'r48-release-focused' @('run','r48:release:test')
|
|
21
|
+
Invoke-GateStep 'r48-catalog' @('run','r48:catalog:test')
|
|
22
|
+
Invoke-GateStep 'commander-hardening' @('run','r47:hardening:test')
|
|
23
|
+
Invoke-GateStep 'full-regression' @('run','r48:full:test')
|
|
24
|
+
Invoke-GateStep 'mcp-smoke' @('run','mcp:smoke')
|
|
25
|
+
Invoke-GateStep 'mcp-agent-smoke' @('run','mcp:agent:smoke')
|
|
26
|
+
Invoke-GateStep 'mcp-coding-smoke' @('run','mcp:coding:smoke')
|
|
27
|
+
Invoke-GateStep 'mcp-machine-fs-smoke' @('run','mcp:machine-fs:smoke')
|
|
28
|
+
Invoke-GateStep 'mcp-observation-smoke' @('run','mcp:observation:smoke')
|
|
29
|
+
Invoke-GateStep 'mcp-process-smoke' @('run','mcp:process:smoke')
|
|
30
|
+
Invoke-GateStep 'mcp-autonomous-smoke' @('run','mcp:autonomous:smoke')
|
|
31
|
+
Invoke-GateStep 'tunnel-stdio-compat-smoke' @('run','mcp:tunnel-compat:smoke')
|
|
32
|
+
Invoke-GateStep 'containment-smoke' @('run','containment:smoke')
|
|
33
|
+
Invoke-GateStep 'contained-smoke' @('run','contained:smoke')
|
|
34
|
+
Invoke-GateStep 'mcp-contained-smoke' @('run','mcp:contained:smoke')
|
|
35
|
+
Invoke-GateStep 'host-policy-refresh' @('run','host:policy:init')
|
|
36
|
+
Invoke-GateStep 'manifest-write' @('run','manifest:write')
|
|
37
|
+
Invoke-GateStep 'manifest-verify' @('run','manifest:verify')
|
|
38
|
+
Invoke-GateStep 'doctor' @('run','doctor')
|
|
39
|
+
Invoke-GateStep 'mcp-host-smoke' @('run','mcp:host:smoke')
|
|
40
|
+
Invoke-GateStep 'authority-smoke' @('run','authority:smoke')
|
|
41
|
+
Invoke-GateStep 'manifest-final-verify' @('run','manifest:verify')
|
|
42
|
+
|
|
43
|
+
& node.exe (Join-Path $PSScriptRoot 'windows-gate-evidence-r48.mjs')
|
|
44
|
+
if ($LASTEXITCODE -ne 0) { throw "R48 evidence writer failed with exit code $LASTEXITCODE" }
|
|
45
|
+
Write-Host '==== DEADBYTE 0.15.25 / R48 WINDOWS GATE: PASS ===='
|
|
@@ -10,7 +10,15 @@ Set-StrictMode -Version 3.0
|
|
|
10
10
|
$ErrorActionPreference = 'Stop'
|
|
11
11
|
|
|
12
12
|
function Get-Sha256Lower([string]$Path) {
|
|
13
|
-
|
|
13
|
+
$stream = [System.IO.File]::OpenRead($Path)
|
|
14
|
+
try {
|
|
15
|
+
$sha = [System.Security.Cryptography.SHA256]::Create()
|
|
16
|
+
try {
|
|
17
|
+
([System.BitConverter]::ToString($sha.ComputeHash($stream))).Replace('-', '').ToLowerInvariant()
|
|
18
|
+
}
|
|
19
|
+
finally { $sha.Dispose() }
|
|
20
|
+
}
|
|
21
|
+
finally { $stream.Dispose() }
|
|
14
22
|
}
|
|
15
23
|
|
|
16
24
|
if ([string]::IsNullOrWhiteSpace($CoreRoot)) {
|
|
@@ -105,7 +105,8 @@ async function main() {
|
|
|
105
105
|
|
|
106
106
|
console.log('[3/7] Packing artifact with npm pack...');
|
|
107
107
|
const packed = parseJson(runNpm(['pack', '--json'], { timeout: 180000 }));
|
|
108
|
-
const
|
|
108
|
+
const packRecord = Array.isArray(packed) ? packed[0] : packed?.[pkg.name];
|
|
109
|
+
const filename = packRecord?.filename;
|
|
109
110
|
if (!filename) throw new Error('npm pack did not return a tarball filename');
|
|
110
111
|
const tarball = path.join(root, filename);
|
|
111
112
|
let releaseSucceeded = false;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {createHash} from 'node:crypto';
|
|
2
|
+
import {mkdir,open,readFile} from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import {fileURLToPath} from 'node:url';
|
|
6
|
+
import {doctor} from '../src/doctor-r45.mjs';
|
|
7
|
+
|
|
8
|
+
const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
|
|
9
|
+
const stateRoot=path.resolve(process.env.DEADBYTE_STATE_ROOT||path.join(os.homedir(),'.deadbyte-mcp'));
|
|
10
|
+
const sha256=bytes=>createHash('sha256').update(bytes).digest('hex');
|
|
11
|
+
const insist=(ok,message)=>{if(!ok)throw new Error(message);};
|
|
12
|
+
const pkg=JSON.parse(await readFile(path.join(root,'package.json'),'utf8'));
|
|
13
|
+
const release=JSON.parse(await readFile(path.join(root,'RELEASE.json'),'utf8'));
|
|
14
|
+
const active=JSON.parse(await readFile(path.join(stateRoot,'active-release.json'),'utf8'));
|
|
15
|
+
const manifestSha256=sha256(await readFile(path.join(root,'MANIFEST.SHA256')));
|
|
16
|
+
insist(pkg.version==='0.15.25'&&release.version===pkg.version&&release.train==='R48','R48 candidate identity mismatch');
|
|
17
|
+
insist(active.release_id===release.parent.release_id&&active.manifest_sha256===release.parent.manifest_sha256&&active.generation_manifest_sha256===release.parent.generation_manifest_sha256,'active runtime is not the exact sealed R48 parent');
|
|
18
|
+
const health=await doctor();
|
|
19
|
+
insist(health.status==='ok'&&health.package_version===pkg.version&&health.manifest?.verified===true,'R48 doctor evidence invalid');
|
|
20
|
+
insist(health.policy?.host_v2_ready===true,'R48 Host policy v2 is not ready');
|
|
21
|
+
const evidence={schema:'deadbyte.r48-windows-gate.v1',status:'passed',exit_code:0,version:pkg.version,train:'R48',completed_at_utc:new Date().toISOString(),manifest_sha256:manifestSha256,parent:release.parent,active_predecessor:{release_id:active.release_id,version:active.version,manifest_sha256:active.manifest_sha256,generation_manifest_sha256:active.generation_manifest_sha256},doctor:{verified_entries:health.manifest.verified_entries,host_v2_ready:true},gates:{full_regression:true,commander_hardening:true,exact_catalog:true,stdio_smokes:true,manifest_final_verify:true}};
|
|
22
|
+
const bytes=Buffer.from(`${JSON.stringify(evidence,null,2)}\n`);
|
|
23
|
+
const dir=path.join(stateRoot,'evidence','release'); await mkdir(dir,{recursive:true});
|
|
24
|
+
const target=path.join(dir,`r48-windows-gate-${manifestSha256.slice(0,16)}.json`);
|
|
25
|
+
try{const handle=await open(target,'wx',0o600);try{await handle.writeFile(bytes);await handle.sync();}finally{await handle.close();}}
|
|
26
|
+
catch(error){if(error?.code!=='EEXIST')throw error;const prior=JSON.parse(await readFile(target,'utf8'));insist(prior.schema===evidence.schema&&prior.status==='passed'&&prior.version===evidence.version&&prior.manifest_sha256===manifestSha256&&prior.parent?.release_id===release.parent.release_id,'conflicting R48 gate evidence identity');}
|
|
27
|
+
console.log(JSON.stringify({status:'passed',path:target,sha256:sha256(bytes),manifest_sha256:manifestSha256}));
|
|
@@ -581,6 +581,19 @@ export function createCommanderWireAdapter({machineFsRuntime=null,processRuntime
|
|
|
581
581
|
}
|
|
582
582
|
return null;
|
|
583
583
|
}
|
|
584
|
+
async function waitForStreamQuiescence(sessionId,observed,timeoutMs,settleMs=100){
|
|
585
|
+
const deadline=Date.now()+timeoutMs;
|
|
586
|
+
let current=observed;
|
|
587
|
+
while(current.state==='running'&&Date.now()<deadline){
|
|
588
|
+
const baseline=current.stream_head;
|
|
589
|
+
const waitMs=Math.min(settleMs,Math.max(1,deadline-Date.now()));
|
|
590
|
+
const next=await processRuntime.read({sessionId,offset:baseline,maxBytes:1,waitMs});
|
|
591
|
+
if(next.state!=='running') return next;
|
|
592
|
+
if(next.stream_head>baseline){ current=next; continue; }
|
|
593
|
+
return next;
|
|
594
|
+
}
|
|
595
|
+
return current;
|
|
596
|
+
}
|
|
584
597
|
async function readProcessRange(sessionId,start,end){
|
|
585
598
|
if(!Number.isInteger(start)||!Number.isInteger(end)||start<0||end<start) throw new Error('native process range invalid');
|
|
586
599
|
if(end-start>RDC_PROCESS_SNAPSHOT_MAX) throw new Error(`RDC process response exceeds ${RDC_PROCESS_SNAPSHOT_MAX} byte compatibility bound`);
|
|
@@ -710,6 +723,9 @@ export function createCommanderWireAdapter({machineFsRuntime=null,processRuntime
|
|
|
710
723
|
if((observed.stream_head??before.stream_head)<=before.stream_head&&observed.state==='running'&&waitMs>0){
|
|
711
724
|
observed=await waitForStreamAdvance(sessionId,before.stream_head,waitMs)??observed;
|
|
712
725
|
}
|
|
726
|
+
if((observed.stream_head??before.stream_head)>before.stream_head&&observed.state==='running'&&waitMs>0){
|
|
727
|
+
observed=await waitForStreamQuiescence(sessionId,observed,waitMs);
|
|
728
|
+
}
|
|
713
729
|
const streamHead=Number.isInteger(observed.stream_head)?observed.stream_head:before.stream_head;
|
|
714
730
|
const earliest=Number.isInteger(observed.earliest_offset)?observed.earliest_offset:observed.offset;
|
|
715
731
|
const start=Math.max(before.stream_head,earliest);
|
|
@@ -8,6 +8,7 @@ import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotoc
|
|
|
8
8
|
import { CODING_GRANT_SCHEMA, loadCodingPolicy } from './coding-plane.mjs';
|
|
9
9
|
import { verifyMachineFsReceiptFile } from './machine-fs.mjs';
|
|
10
10
|
import { generateTrustKeypair } from './trust.mjs';
|
|
11
|
+
import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
|
|
11
12
|
|
|
12
13
|
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
13
14
|
const repoRoot = path.resolve(here, '..');
|
|
@@ -51,24 +52,13 @@ const client = new Client({ name: 'deadbyte-machine-fs-smoke', version: '0.8.0'
|
|
|
51
52
|
const transport = new StdioClientTransport({
|
|
52
53
|
command: process.execPath, args: [serverPath], cwd: repoRoot,
|
|
53
54
|
env: { ...getDefaultEnvironment(), DEADBYTE_CODING_RUNTIME: '1', DEADBYTE_MACHINE_FS_RUNTIME: '1',
|
|
55
|
+
DEADBYTE_PRIVILEGED_POLICY: '',
|
|
54
56
|
DEADBYTE_CODING_POLICY: policyPath, DEADBYTE_SIGNING_KEY: keys.privateKeyPath,
|
|
55
57
|
DEADBYTE_VERIFY_KEY: keys.publicKeyPath }, stderr: 'pipe'
|
|
56
58
|
});
|
|
57
59
|
const stderrChunks = [];
|
|
58
60
|
transport.stderr?.on('data', chunk => stderrChunks.push(Buffer.from(chunk)));
|
|
59
|
-
const
|
|
60
|
-
const codingTools = [
|
|
61
|
-
'coding_benchmark_run','coding_command_run','coding_file_read','coding_file_write','coding_files_read',
|
|
62
|
-
'coding_receipt_verify','coding_search','coding_session_status','coding_stat',
|
|
63
|
-
'coding_symbol_definition','coding_symbol_diagnostics','coding_symbol_implementations','coding_symbol_outline','coding_symbol_references','coding_symbol_rename_preview','coding_symbol_replace',
|
|
64
|
-
'coding_task_approve','coding_task_cancel','coding_task_events','coding_task_run',
|
|
65
|
-
'coding_task_status','coding_task_submit','coding_task_verify','coding_text_replace','coding_tree'
|
|
66
|
-
];
|
|
67
|
-
const machineFsTools = [
|
|
68
|
-
'machine_fs_delete','machine_fs_edit_exact','machine_fs_list','machine_fs_mkdir',
|
|
69
|
-
'machine_fs_move','machine_fs_read','machine_fs_stat','machine_fs_write'
|
|
70
|
-
];
|
|
71
|
-
const expectedCatalog = [...baseTools, ...codingTools, ...machineFsTools].sort();
|
|
61
|
+
const expectedCatalog = await expectedFullCatalogForEnv({DEADBYTE_CODING_RUNTIME:'1',DEADBYTE_MACHINE_FS_RUNTIME:'1'});
|
|
72
62
|
const receipts = [];
|
|
73
63
|
const remember = (operation, result) => {
|
|
74
64
|
if (result.status !== 'committed' || !/^[0-9a-f]{24}$/.test(result.receipt_id ?? '')) throw new Error(`${operation} missing committed receipt`);
|
|
@@ -79,10 +69,9 @@ try {
|
|
|
79
69
|
await client.connect(transport);
|
|
80
70
|
const listed = await client.listTools();
|
|
81
71
|
const names = listed.tools.map(tool => tool.name).sort();
|
|
82
|
-
|
|
83
|
-
for (const tool of listed.tools)
|
|
84
|
-
|
|
85
|
-
}
|
|
72
|
+
assertExactCatalog(names,expectedCatalog,'machine fs smoke');
|
|
73
|
+
for (const tool of listed.tools) if (tool.outputSchema !== undefined &&
|
|
74
|
+
(tool.outputSchema?.type !== 'object' || tool.outputSchema?.additionalProperties !== false)) throw new Error(`tool ${tool.name} has non-strict output schema`);
|
|
86
75
|
const rootStat = structured(await client.callTool({ name:'machine_fs_stat', arguments:{ root_id:'core', path:'.', hash:false } }), 'machine_fs_stat(root)');
|
|
87
76
|
if (rootStat.status !== 'ok' || rootStat.kind !== 'directory') throw new Error('machine fs root stat malformed');
|
|
88
77
|
const made = remember('machine_fs_mkdir', structured(await client.callTool({
|
|
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
6
6
|
import { Client } from '@modelcontextprotocol/client';
|
|
7
7
|
import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotocol/client/stdio';
|
|
8
8
|
import { generateTrustKeypair } from './trust.mjs';
|
|
9
|
+
import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
|
|
9
10
|
|
|
10
11
|
const sha256 = bytes => createHash('sha256').update(bytes).digest('hex');
|
|
11
12
|
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -84,8 +85,8 @@ function structured(result, label) {
|
|
|
84
85
|
try {
|
|
85
86
|
await client.connect(transport);
|
|
86
87
|
const names = (await client.listTools()).tools.map(t => t.name).sort();
|
|
87
|
-
const expected =
|
|
88
|
-
|
|
88
|
+
const expected = await expectedFullCatalogForEnv({DEADBYTE_PRIVILEGED_POLICY:policyPath});
|
|
89
|
+
assertExactCatalog(names,expected,'privileged smoke');
|
|
89
90
|
|
|
90
91
|
const writeText = structured(await client.callTool({
|
|
91
92
|
name: 'host_file_write',
|
package/src/mcp-smoke-client.mjs
CHANGED
|
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
6
6
|
import { Client } from '@modelcontextprotocol/client';
|
|
7
7
|
import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotocol/client/stdio';
|
|
8
8
|
import { generateTrustKeypair } from './trust.mjs';
|
|
9
|
+
import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
|
|
9
10
|
|
|
10
11
|
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
11
12
|
const repoRoot = path.resolve(here, '..');
|
|
@@ -39,6 +40,7 @@ const transport = new StdioClientTransport({
|
|
|
39
40
|
DEADBYTE_WORKSPACE_ROOT: workspaceRoot,
|
|
40
41
|
DEADBYTE_SIGNING_KEY: keys.privateKeyPath,
|
|
41
42
|
DEADBYTE_VERIFY_KEY: keys.publicKeyPath,
|
|
43
|
+
DEADBYTE_PRIVILEGED_POLICY: '',
|
|
42
44
|
DEADBYTE_STDIO_CONSOLE_GUARD_PROBE: '1'
|
|
43
45
|
},
|
|
44
46
|
stderr: 'pipe'
|
|
@@ -67,15 +69,8 @@ try {
|
|
|
67
69
|
const names = listed.tools.map(tool => tool.name).sort();
|
|
68
70
|
const guardStderr = Buffer.concat(serverStderr).toString('utf8');
|
|
69
71
|
if (!guardStderr.includes('DEADBYTE MCP LOG DEADBYTE_STDIO_CONSOLE_GUARD_PROBE')) throw new Error('stdio console guard probe did not reach stderr');
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
const allowedCatalogs = [
|
|
73
|
-
baseTools,
|
|
74
|
-
[...baseTools, ...privilegedTools]
|
|
75
|
-
].map(items => [...items].sort());
|
|
76
|
-
if (!allowedCatalogs.some(expected => JSON.stringify(names) === JSON.stringify(expected))) {
|
|
77
|
-
throw new Error(`tool catalog mismatch: ${JSON.stringify(names)}`);
|
|
78
|
-
}
|
|
72
|
+
const expected=await expectedFullCatalogForEnv({});
|
|
73
|
+
assertExactCatalog(names,expected,'MCP smoke');
|
|
79
74
|
|
|
80
75
|
const opened = structured(await client.callTool({
|
|
81
76
|
name: 'workspace_open',
|
|
@@ -8,6 +8,7 @@ import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotoc
|
|
|
8
8
|
import { loadCodingPolicy } from './coding-plane.mjs';
|
|
9
9
|
import { verifyObservationReceiptFile } from './observation-runtime.mjs';
|
|
10
10
|
import { generateTrustKeypair } from './trust.mjs';
|
|
11
|
+
import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
|
|
11
12
|
|
|
12
13
|
const here=path.dirname(fileURLToPath(import.meta.url));
|
|
13
14
|
const repoRoot=path.resolve(here,'..');
|
|
@@ -49,21 +50,15 @@ const client=new Client({name:'deadbyte-observation-smoke',version:'0.8.0'},
|
|
|
49
50
|
{versionNegotiation:{mode:{pin:'2026-07-28'}}});
|
|
50
51
|
const transport=new StdioClientTransport({command:process.execPath,args:[serverPath],cwd:repoRoot,
|
|
51
52
|
env:{...getDefaultEnvironment(),DEADBYTE_MACHINE_RUNTIME:'1',DEADBYTE_CODING_RUNTIME:'1',DEADBYTE_OBSERVATION_RUNTIME:'1',
|
|
53
|
+
DEADBYTE_PRIVILEGED_POLICY:'',
|
|
52
54
|
DEADBYTE_CODING_POLICY:policyPath,DEADBYTE_STATE_ROOT:state,DEADBYTE_SIGNING_KEY:keys.privateKeyPath,DEADBYTE_VERIFY_KEY:keys.publicKeyPath},stderr:'pipe'});
|
|
53
55
|
const stderr=[]; transport.stderr?.on('data',chunk=>stderr.push(Buffer.from(chunk)));
|
|
54
|
-
const
|
|
55
|
-
const machine=['machine_list','machine_ping','machine_revoke','machine_status'];
|
|
56
|
-
const coding=['coding_benchmark_run','coding_command_run','coding_file_read','coding_file_write','coding_files_read','coding_receipt_verify','coding_search',
|
|
57
|
-
'coding_session_status','coding_stat','coding_symbol_definition','coding_symbol_diagnostics','coding_symbol_implementations','coding_symbol_outline','coding_symbol_references','coding_symbol_rename_preview','coding_symbol_replace',
|
|
58
|
-
'coding_task_approve','coding_task_cancel','coding_task_events','coding_task_run','coding_task_status',
|
|
59
|
-
'coding_task_submit','coding_task_verify','coding_text_replace','coding_tree'];
|
|
60
|
-
const observation=['machine_hardware_query','machine_process_list','machine_search_cancel','machine_search_page','machine_search_start','machine_search_status','machine_system_status'];
|
|
61
|
-
const expected=[...base,...machine,...coding,...observation].sort();
|
|
56
|
+
const expected=await expectedFullCatalogForEnv({DEADBYTE_MACHINE_RUNTIME:'1',DEADBYTE_CODING_RUNTIME:'1',DEADBYTE_OBSERVATION_RUNTIME:'1'});
|
|
62
57
|
try{
|
|
63
58
|
await client.connect(transport);
|
|
64
59
|
const listed=await client.listTools(); const names=listed.tools.map(tool=>tool.name).sort();
|
|
65
|
-
|
|
66
|
-
for(const tool of listed.tools) if(tool.outputSchema?.type!=='object'||tool.outputSchema?.additionalProperties!==false) throw new Error(`tool ${tool.name}
|
|
60
|
+
assertExactCatalog(names,expected,'observation smoke');
|
|
61
|
+
for(const tool of listed.tools) if(tool.outputSchema!==undefined&&(tool.outputSchema?.type!=='object'||tool.outputSchema?.additionalProperties!==false)) throw new Error(`tool ${tool.name} has non-strict output schema`);
|
|
67
62
|
const codingStatus=structured(await client.callTool({name:'coding_session_status',arguments:{}}),'coding_session_status');
|
|
68
63
|
if(codingStatus.status!=='ok'||codingStatus.armed!==false) throw new Error('observation smoke requires coding mutation authority disarmed');
|
|
69
64
|
const system=structured(await client.callTool({name:'machine_system_status',arguments:{}}),'machine_system_status');
|
|
@@ -8,6 +8,7 @@ import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotoc
|
|
|
8
8
|
import { canonicalJson } from './canonical-json.mjs';
|
|
9
9
|
import { loadProcessPolicy, PROCESS_GRANT_SCHEMA } from './process-policy.mjs';
|
|
10
10
|
import { generateTrustKeypair, loadPublicVerifyKey } from './trust.mjs';
|
|
11
|
+
import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
|
|
11
12
|
|
|
12
13
|
const EVENT_DOMAIN = Buffer.from('DEADBYTE-PROCESS-EVENT-V1\0', 'utf8');
|
|
13
14
|
const ZERO_SHA256 = '0'.repeat(64);
|
|
@@ -58,9 +59,8 @@ try {
|
|
|
58
59
|
await client.connect(transport);
|
|
59
60
|
const listed = await client.listTools();
|
|
60
61
|
const names = listed.tools.map(tool => tool.name).sort();
|
|
61
|
-
const expected =
|
|
62
|
-
|
|
63
|
-
if (JSON.stringify(names) !== JSON.stringify(expected)) throw new Error(`process smoke catalog mismatch: ${JSON.stringify(names)}`);
|
|
62
|
+
const expected = await expectedFullCatalogForEnv({DEADBYTE_PROCESS_RUNTIME:'1'});
|
|
63
|
+
assertExactCatalog(names,expected,'process smoke');
|
|
64
64
|
const started = structured(await client.callTool({ name: 'process_session_start', arguments: {
|
|
65
65
|
profile_id: 'ping_hold', root_id: 'core', cwd: '.', args: []
|
|
66
66
|
} }), 'process_session_start');
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { R36_CAPABILITY_LEDGER } from './capability-ledger.mjs';
|
|
5
|
+
|
|
6
|
+
const packageRoot=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
|
|
7
|
+
const catalogPath=path.join(packageRoot,'docs','R48-FULL-TOOL-CATALOG.json');
|
|
8
|
+
const AGENT_TOOLS=new Set(['agent_task_approve','agent_task_cancel','agent_task_events','agent_task_run','agent_task_status','agent_task_submit','agent_task_verify']);
|
|
9
|
+
|
|
10
|
+
export async function expectedFullCatalogForEnv(env){
|
|
11
|
+
const canonical=JSON.parse(await readFile(catalogPath,'utf8'));
|
|
12
|
+
if(canonical.schema!=='deadbyte.r48-full-catalog.v1'||canonical.tool_count!==canonical.tools?.length) throw new Error('canonical R48 full catalog is invalid');
|
|
13
|
+
const disabled=new Set();
|
|
14
|
+
for(const capability of R36_CAPABILITY_LEDGER.entries){
|
|
15
|
+
const flag=capability.runtime_flag;
|
|
16
|
+
const enabled=flag===null||(flag==='DEADBYTE_PRIVILEGED_POLICY'?Boolean(env[flag]):env[flag]==='1');
|
|
17
|
+
if(!enabled) disabled.add(capability.full_tool);
|
|
18
|
+
}
|
|
19
|
+
// The rename preview tool is registered by the coding surface even when its
|
|
20
|
+
// optional Native Diff backend is absent; only the apply path needs Autonomous.
|
|
21
|
+
if(env.DEADBYTE_CODING_RUNTIME==='1') disabled.delete('coding_symbol_rename_preview');
|
|
22
|
+
if(env.DEADBYTE_AGENT_RUNTIME!=='1') for(const name of AGENT_TOOLS) disabled.add(name);
|
|
23
|
+
if(env.DEADBYTE_PROCESS_RUNTIME!=='1') disabled.add('process_session_cancel');
|
|
24
|
+
return canonical.tools.filter(name=>!disabled.has(name));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function assertExactCatalog(actual,expected,label='MCP'){
|
|
28
|
+
const names=[...actual].sort((a,b)=>a.localeCompare(b,'en'));
|
|
29
|
+
const wanted=[...expected].sort((a,b)=>a.localeCompare(b,'en'));
|
|
30
|
+
if(JSON.stringify(names)!==JSON.stringify(wanted)){
|
|
31
|
+
const actualSet=new Set(names); const expectedSet=new Set(wanted);
|
|
32
|
+
const missing=wanted.filter(name=>!actualSet.has(name));
|
|
33
|
+
const unexpected=names.filter(name=>!expectedSet.has(name));
|
|
34
|
+
throw new Error(`${label} catalog mismatch: missing=${JSON.stringify(missing)} unexpected=${JSON.stringify(unexpected)}`);
|
|
35
|
+
}
|
|
36
|
+
return names;
|
|
37
|
+
}
|
|
@@ -3,6 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { Client } from '@modelcontextprotocol/client';
|
|
5
5
|
import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotocol/client/stdio';
|
|
6
|
+
import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
|
|
6
7
|
|
|
7
8
|
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
8
9
|
const repoRoot = path.resolve(here, '..');
|
|
@@ -11,6 +12,7 @@ const workspaceRoot = path.join(repoRoot, 'workspaces');
|
|
|
11
12
|
const baseEnv = {
|
|
12
13
|
...process.env,
|
|
13
14
|
DEADBYTE_WORKSPACE_ROOT: workspaceRoot,
|
|
15
|
+
DEADBYTE_PRIVILEGED_POLICY: '',
|
|
14
16
|
DEADBYTE_TUNNEL_STDIO_PROBE_COMPAT: '1'
|
|
15
17
|
};
|
|
16
18
|
|
|
@@ -100,6 +102,7 @@ async function modernPassThrough() {
|
|
|
100
102
|
env: {
|
|
101
103
|
...getDefaultEnvironment(),
|
|
102
104
|
DEADBYTE_WORKSPACE_ROOT: workspaceRoot,
|
|
105
|
+
DEADBYTE_PRIVILEGED_POLICY: '',
|
|
103
106
|
DEADBYTE_TUNNEL_STDIO_PROBE_COMPAT: '1'
|
|
104
107
|
},
|
|
105
108
|
stderr: 'pipe'
|
|
@@ -112,15 +115,8 @@ async function modernPassThrough() {
|
|
|
112
115
|
if (era !== 'modern') throw new Error(`expected modern era through compat prefilter, got ${String(era)}`);
|
|
113
116
|
const listed = await client.listTools();
|
|
114
117
|
const names = listed.tools.map(tool => tool.name).sort();
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
const allowedCatalogs = [
|
|
118
|
-
baseTools,
|
|
119
|
-
[...baseTools, ...privilegedTools]
|
|
120
|
-
].map(items => [...items].sort());
|
|
121
|
-
if (!allowedCatalogs.some(expected => JSON.stringify(names) === JSON.stringify(expected))) {
|
|
122
|
-
throw new Error(`modern catalog changed through compat prefilter: ${JSON.stringify(names)}`);
|
|
123
|
-
}
|
|
118
|
+
const expected=await expectedFullCatalogForEnv({});
|
|
119
|
+
assertExactCatalog(names,expected,'modern tunnel compatibility');
|
|
124
120
|
return { protocol_revision: '2026-07-28', protocol_era: era, tools: names };
|
|
125
121
|
} catch (error) {
|
|
126
122
|
const stderr = Buffer.concat(serverStderr).toString('utf8').trim();
|
package/src/version.mjs
CHANGED
|
@@ -16,9 +16,17 @@ function extract(source){
|
|
|
16
16
|
assert.ok(m,'coding catalog array missing');
|
|
17
17
|
return [...m[1].matchAll(/'([^']+)'/g)].map(x=>x[1]).sort();
|
|
18
18
|
}
|
|
19
|
-
for(const rel of ['src/
|
|
19
|
+
for(const rel of ['src/remote-mcp-coding-smoke-client.mjs','src/remote-mcp-smoke-client.mjs']){
|
|
20
20
|
test(`${rel} uses the exact R36 25-tool coding catalog`,async()=>{
|
|
21
21
|
const source=await readFile(path.join(root,...rel.split('/')),'utf8');
|
|
22
22
|
assert.deepEqual(extract(source),expected);
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
|
+
for(const rel of ['src/machine-fs-smoke-client.mjs','src/observation-smoke-client.mjs']){
|
|
26
|
+
test(`${rel} derives its exact R48 catalog from the canonical runtime catalog`,async()=>{
|
|
27
|
+
const source=await readFile(path.join(root,...rel.split('/')),'utf8');
|
|
28
|
+
assert.match(source,/expectedFullCatalogForEnv/);
|
|
29
|
+
assert.match(source,/assertExactCatalog/);
|
|
30
|
+
assert.doesNotMatch(source,/const (?:codingTools|coding)\s*=\s*\[/);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
@@ -73,13 +73,14 @@ test('real Commander-parity filesystem lifecycle is transactional and signed',as
|
|
|
73
73
|
|
|
74
74
|
test('real Commander adapter preserves PowerShell command bytes through the bounded REPL', {skip:process.platform!=='win32'}, async()=>{
|
|
75
75
|
const f=await processFixture();
|
|
76
|
+
let adapter=null,pid=null;
|
|
76
77
|
try{
|
|
77
|
-
|
|
78
|
+
adapter=createCommanderWireAdapter({processRuntime:f.runtime});
|
|
78
79
|
const command=`[Console]::OutputEncoding=[Text.UTF8Encoding]::new(); $x='a b'; "DB:$x"; 'pipe' | ForEach-Object { "P:$_" }; "U:สวัสดี"`;
|
|
79
80
|
const started=await adapter.handlers.start_process({command,timeout_ms:10000});
|
|
80
|
-
|
|
81
|
+
pid=started.structuredContent.pid;
|
|
81
82
|
let output='';
|
|
82
|
-
for(let i=0;i<50&&!output.includes('P:pipe');i++){
|
|
83
|
+
for(let i=0;i<50&&!(output.includes('DB:a b')&&output.includes('P:pipe')&&output.includes('U:สวัสดี'));i++){
|
|
83
84
|
const page=await adapter.handlers.read_process_output({pid,offset:0,length:100,timeout_ms:100});
|
|
84
85
|
output+=page.content[0].text;
|
|
85
86
|
}
|
|
@@ -94,7 +95,10 @@ test('real Commander adapter preserves PowerShell command bytes through the boun
|
|
|
94
95
|
assert.match(largeText,/END/);
|
|
95
96
|
const ended=await adapter.handlers.force_terminate({pid});
|
|
96
97
|
assert.equal(ended.structuredContent.termination.verified,true);
|
|
97
|
-
}finally{
|
|
98
|
+
}finally{
|
|
99
|
+
if(adapter&&pid!==null) await adapter.handlers.force_terminate({pid}).catch(()=>{});
|
|
100
|
+
await rm(f.root,{recursive:true,force:true});
|
|
101
|
+
}
|
|
98
102
|
});
|
|
99
103
|
|
|
100
104
|
test('real stale mutation is rejected before commit and leaves source intact',async()=>{
|
package/test/contained.test.mjs
CHANGED
|
@@ -456,13 +456,11 @@ test('receipt and verifier bind contained worker, launcher and independent trans
|
|
|
456
456
|
assert.match(verifier, /contained transform semantic mismatch/);
|
|
457
457
|
});
|
|
458
458
|
|
|
459
|
-
test('MCP protocol smoke
|
|
459
|
+
test('MCP protocol smoke derives the exact full catalog and explicitly disables Host', async () => {
|
|
460
460
|
const smoke = await readFile(fileURLToPath(new URL('../src/mcp-smoke-client.mjs', import.meta.url)), 'utf8');
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
assert.match(smoke, /
|
|
464
|
-
assert.match(smoke, /baseTools/);
|
|
465
|
-
assert.match(smoke, /privilegedTools/);
|
|
461
|
+
assert.match(smoke, /expectedFullCatalogForEnv/);
|
|
462
|
+
assert.match(smoke, /assertExactCatalog/);
|
|
463
|
+
assert.match(smoke, /DEADBYTE_PRIVILEGED_POLICY: ''/);
|
|
466
464
|
assert.doesNotMatch(smoke, /agent_task_/);
|
|
467
465
|
});
|
|
468
466
|
|
package/test/controller.test.mjs
CHANGED
|
@@ -83,7 +83,8 @@ test('controller keeps privileged policy optional and propagates it only to the
|
|
|
83
83
|
test('Windows host policy bootstrap pins executables and creates only explicit local roots', async () => {
|
|
84
84
|
const init = await readFile(fileURLToPath(new URL('../scripts/init-host-policy.ps1', import.meta.url)), 'utf8');
|
|
85
85
|
assert.match(init, /deadbyte\.host-policy\.v2/);
|
|
86
|
-
assert.match(init, /
|
|
86
|
+
assert.match(init, /System\.Security\.Cryptography\.SHA256/);
|
|
87
|
+
assert.match(init, /System\.IO\.File.*OpenRead/);
|
|
87
88
|
assert.match(init, /powershell_script/);
|
|
88
89
|
assert.match(init, /cmd_script/);
|
|
89
90
|
assert.match(init, /node_script/);
|
|
@@ -6,7 +6,7 @@ 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.
|
|
9
|
+
test('R48 0.15.25 successor binds exact active immutable 0.15.24 parent',async()=>{
|
|
10
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),
|
|
@@ -14,21 +14,21 @@ test('R48 0.15.24 successor binds exact active 0.15.23 parent and Commander diff
|
|
|
14
14
|
read('PROVENANCE.json').then(JSON.parse),
|
|
15
15
|
read('TEST-MATRIX.json').then(JSON.parse)
|
|
16
16
|
]);
|
|
17
|
-
assert.equal(pkg.version,'0.15.
|
|
18
|
-
assert.equal(lock.version,'0.15.
|
|
19
|
-
assert.equal(lock.packages[''].version,'0.15.
|
|
20
|
-
assert.equal(DEADBYTE_VERSION,'0.15.
|
|
21
|
-
assert.equal(release.version,'0.15.
|
|
22
|
-
assert.equal(provenance.version,'0.15.
|
|
23
|
-
assert.equal(matrix.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');
|
|
24
24
|
assert.equal(release.train,'R48');
|
|
25
25
|
assert.equal(release.label,'COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE');
|
|
26
|
-
assert.equal(release.parent.release_id,'v0.15.
|
|
27
|
-
assert.equal(release.parent.manifest_sha256,'
|
|
28
|
-
assert.equal(release.parent.generation_manifest_sha256,'
|
|
29
|
-
assert.equal(release.source_predecessor.version,'0.15.
|
|
30
|
-
assert.equal(release.source_predecessor.tarball_sha256,'
|
|
31
|
-
assert.equal(release.source_predecessor.manifest_file_sha256,'
|
|
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');
|
|
32
32
|
assert.equal(release.source_predecessor.reference_server_sha256,'dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305');
|
|
33
33
|
assert.equal(release.source_predecessor.reference_schemas_sha256,'f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140');
|
|
34
34
|
assert.equal(release.capabilities.full_tool_count,116);
|
|
@@ -145,13 +145,11 @@ test('installed stdio prefilter answers legacy startup probe and forwards split
|
|
|
145
145
|
assert.deepEqual(hexLines, ['HEX:' + modern.toString('hex')]);
|
|
146
146
|
});
|
|
147
147
|
|
|
148
|
-
test('tunnel compatibility smoke
|
|
148
|
+
test('tunnel compatibility smoke derives exact modern catalog and explicitly disables Host', async () => {
|
|
149
149
|
const smoke = await readFile(fileURLToPath(new URL('../src/tunnel-stdio-compat-smoke.mjs', import.meta.url)), 'utf8');
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
assert.match(smoke, /
|
|
153
|
-
assert.match(smoke, /baseTools/);
|
|
154
|
-
assert.match(smoke, /privilegedTools/);
|
|
150
|
+
assert.match(smoke, /expectedFullCatalogForEnv/);
|
|
151
|
+
assert.match(smoke, /assertExactCatalog/);
|
|
152
|
+
assert.match(smoke, /DEADBYTE_PRIVILEGED_POLICY: ''/);
|
|
155
153
|
assert.doesNotMatch(smoke, /agent_task_/);
|
|
156
154
|
});
|
|
157
155
|
|