deadbyte-mcp 0.15.19 → 0.15.21
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 +14 -14
- package/PROVENANCE.json +10 -10
- package/README.txt +7 -7
- package/RELEASE.json +15 -29
- package/SBOM.cdx.json +3 -3
- package/TEST-MATRIX.json +9 -5
- package/package.json +1 -1
- package/src/capability-resolver.mjs +63 -14
- package/src/coding-task-runtime.mjs +1 -1
- package/src/mcp-server.mjs +2 -1
- package/src/version.mjs +1 -1
- package/test/capability-resolver.test.mjs +68 -1
- package/test/coding-runtime.test.mjs +7 -0
- package/test/compact-max-catalog-r45.test.mjs +25 -1
- package/test/r48-release-contract.test.mjs +16 -14
package/MANIFEST.SHA256
CHANGED
|
@@ -1335,7 +1335,7 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
|
|
|
1335
1335
|
f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
|
|
1336
1336
|
51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
|
|
1337
1337
|
3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
|
|
1338
|
-
|
|
1338
|
+
8b341990ff54a32760233b5e1bee614a01c10634b4da03fb6678643bfec0e2b8 package.json
|
|
1339
1339
|
872947dffd89755b03558b217129f009dc9f4fd1ce55e93c602fc6ea97ba8b48 proof/commander-closure-20260927/CONTINUATION.json
|
|
1340
1340
|
2959980d295814aaa0df71fdb358d2cbfd01c1357ee36ef6b10c149875bdb262 proof/commander-closure-20260927/RESULT.json
|
|
1341
1341
|
2c2866309ca3a6fc8de5b03d445f1dcf0778474fa25cefb822b2ab729bc91c62 proof/commander-closure-20260927/SEARCH-CONTINUATION.json
|
|
@@ -1399,7 +1399,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
|
|
|
1399
1399
|
bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
|
|
1400
1400
|
2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
|
|
1401
1401
|
f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
|
|
1402
|
-
|
|
1402
|
+
882599a4a5734296f96cef5235de97d3157b44950e525458a576051f139d2cbf PROVENANCE.json
|
|
1403
1403
|
27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
|
|
1404
1404
|
0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
|
|
1405
1405
|
bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
|
|
@@ -1407,9 +1407,9 @@ bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.jso
|
|
|
1407
1407
|
f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.json
|
|
1408
1408
|
731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
|
|
1409
1409
|
d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1410
|
+
fec4fdf373b3a3a2a36b228722ad67cfee48ab3600840013f9ea1c255fa7b574 README.txt
|
|
1411
|
+
c5cc53320752501dde2c781c388cf5cee46dabb9d7527c20401de44ab8e96136 RELEASE.json
|
|
1412
|
+
1241bc4856d07ef3c3b92d52b81cd2b6c1f9e6e31136b9cfbc2527e943de0f53 SBOM.cdx.json
|
|
1413
1413
|
bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
|
|
1414
1414
|
8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
|
|
1415
1415
|
1d4e9dee6f0669bd825334a6a72e13ee85ee29ab430dcef21d893ffd744774b5 scripts/autonomous-benchmark.mjs
|
|
@@ -1598,13 +1598,13 @@ e5f944a310ed957e3b8f7b1cab54c082acf1b35f8fdd7d9b672ebe1a80dc37ac src/canonical-
|
|
|
1598
1598
|
da5181cec30034ddf089baa5358becb5651da238a2e7cf0888007a4c60b4ea6b src/capability-benchmark-runner.mjs
|
|
1599
1599
|
2b62295591f142ca4b3bc5b03e6434f7fc3c51d9502f9a40ef8a03d1f72a8899 src/capability-benchmark.mjs
|
|
1600
1600
|
160199b25f45bd0490f6b21a9fa8194313e9673c4b2699afce68249d3d249a7b src/capability-ledger.mjs
|
|
1601
|
-
|
|
1601
|
+
163ff2615496c453c3a325c79f49b1520e2effad93acf976a12e5a192bd5268a src/capability-resolver.mjs
|
|
1602
1602
|
94e5aeff2453cdc0239aee4d547dbbefee183c71933cb84e5e8a418fa99bc1e8 src/codex-app-server-r44.mjs
|
|
1603
1603
|
6d0a80daaa2711e67e2597bff3db5bd2802682f559107a492f3cd89b9c6785ed src/coding-mcp-tools.mjs
|
|
1604
1604
|
d6fc395575f49abbbf60bf6f6ef5ee9ad51034a7e770a381e6ec34f869788306 src/coding-output-contracts.mjs
|
|
1605
1605
|
96368159d56a12f7f85d7d00f9184c7758772b2349483b38e37dfc34f3db8e98 src/coding-plane.mjs
|
|
1606
1606
|
7f15b59bc240d896beddc2057354f8c72f296fe189db30c200d2c84a67d65773 src/coding-search.mjs
|
|
1607
|
-
|
|
1607
|
+
3882bd3e91b8df09db0dc6ff848ad6c6deb70fd2a5cf844fd0391e40900265a1 src/coding-task-runtime.mjs
|
|
1608
1608
|
c34c2a96ffe7a5e41380fbf88aa716107ab9042810faf5254446b958f259fa3f src/commander-compat-contracts.mjs
|
|
1609
1609
|
018e7f204e3a529ec2fa7d380acfd3b8b9cc230f0292ae7fed0de9c00fc9fa85 src/commander-compat-runtime.mjs
|
|
1610
1610
|
7fda3faba6f4f26c7eed75d676abe691bbc3018bd3804ca07900b31acec68596 src/commander-core-bridge.mjs
|
|
@@ -1668,7 +1668,7 @@ ad4ca3635cb228b57b5b98e9518f379380ee1a03ad07ab4d12f8b7f324be2517 src/machine-mc
|
|
|
1668
1668
|
e81b3ac2955e5dfafe308c82da24356a14da396230cb9fc47b231ab672d5be48 src/machine-output-contracts.mjs
|
|
1669
1669
|
ed85d41c494a334117661ddec8191d34974fe28cb2a3378f3c04ee0e4c5d3ccc src/mcp-contained-smoke-client.mjs
|
|
1670
1670
|
b705345aa432b6a6ebbf62aabce1f78ba7e392bdfe998e79217eba8289ed0a7e src/mcp-host-smoke-client.mjs
|
|
1671
|
-
|
|
1671
|
+
4f2ddba24aa0fb3d86b90ca8772ad96f5e51b715a94a3e8986038d266cd9e92c src/mcp-server.mjs
|
|
1672
1672
|
b490c4152b16adae658b3af20a4827847866cec352e1b0c9eb6b36094116b83b src/mcp-smoke-client.mjs
|
|
1673
1673
|
cde7c813f5a2e9a69f09849455d1504e766963845a1f4b201ecc84090fa260d5 src/memory-r41.mjs
|
|
1674
1674
|
9525aee66944023603f6d1ebb0768b8e8ab8bb93582a10dd7f9cd4459ee07454 src/native-diff-v2.mjs
|
|
@@ -1743,11 +1743,11 @@ bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init
|
|
|
1743
1743
|
aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
|
|
1744
1744
|
642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
|
|
1745
1745
|
8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
|
|
1746
|
-
|
|
1746
|
+
2c3edb278ad7ac00768216d0e47b0a5c14e90abc983e18fca1c77d262e5f5096 src/version.mjs
|
|
1747
1747
|
7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
|
|
1748
1748
|
76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
|
|
1749
1749
|
4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
|
|
1750
|
-
|
|
1750
|
+
dd71ec32ac61c686e441c8e2cf9821f3c6a722f5276de46ac08abff937c2bc9e TEST-MATRIX.json
|
|
1751
1751
|
e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
|
|
1752
1752
|
2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
|
|
1753
1753
|
d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
|
|
@@ -1784,7 +1784,7 @@ bad448d7bfd0c66b8d0dc0fa601fc22d69ccc3f447140ed0f77b68957984daea test/capabilit
|
|
|
1784
1784
|
c343906ca0878e13c576cd9f615802b1139c693bf6769a780dfb052637cf0d83 test/capability-benchmark.test.mjs
|
|
1785
1785
|
b9a8faa4b86683ac5aea891fe6bc95f8e425fb31635176aa4603f9d582b52a79 test/capability-claims-r36.test.mjs
|
|
1786
1786
|
a466a490759d438a8ac68919f79ddcb52253bdbecb5e4448a4fbf62af118184e test/capability-ledger-r36.test.mjs
|
|
1787
|
-
|
|
1787
|
+
aec98dc7d09acf39916425d055d5e76f45713ef4d3d73f9aedb7ec1ea037bed4 test/capability-resolver.test.mjs
|
|
1788
1788
|
84eefe1a43474927fdc6fb7ef269309c662cefb229d6af2c91d9e2f0b9ba5c23 test/cli-entrypoint.test.mjs
|
|
1789
1789
|
bec565ffa8550d56a5bb21927177c37d9d05f8353e3bc2541fc156886fe23688 test/codex-app-server-r44.test.mjs
|
|
1790
1790
|
c43105a78ee4c93417d720ee660cfebc75b17f142a6484568e3cbaa583457f8c test/codex-autonomous-r44.test.mjs
|
|
@@ -1793,7 +1793,7 @@ c43105a78ee4c93417d720ee660cfebc75b17f142a6484568e3cbaa583457f8c test/codex-aut
|
|
|
1793
1793
|
0fad3c669e48d60bbae7f4b847472677bf3bf8bcc9db0c798d76814b8f907e17 test/coding-observation.test.mjs
|
|
1794
1794
|
cd94ba88ab460868f79dc540a38ad1dd6b96c4fd39cf13a14cf5d855ba0d5254 test/coding-plane-adversarial.test.mjs
|
|
1795
1795
|
6b60c96a043f4f9505f897a6a0a1bc9234e730de92919cb3ccbacd862f5654c7 test/coding-plane.test.mjs
|
|
1796
|
-
|
|
1796
|
+
b4f9d400e2eb1a5dfce8445dd8c37e0b4a0ef338dc184afd7181a7c6e49f9c7c test/coding-runtime.test.mjs
|
|
1797
1797
|
e1c383d676966a94e74a7ffdcbd8670610abdad761510b2083f038317e285b99 test/coding-search-r36.test.mjs
|
|
1798
1798
|
0de59bc71219f18559e21cedb9594d47d6ae7b52a84b952a1e5eaa5883a5cd48 test/commander-compat-runtime.test.mjs
|
|
1799
1799
|
e37e4b46502999c45a49e8e484e006c4544d2e705eef63059a8debfb1f7c08b6 test/commander-core-bridge-r47.test.mjs
|
|
@@ -1818,7 +1818,7 @@ d68167d1ab3040670262c4916c0230acf85b8a6dfb1c5e1b28738843e3adf280 test/commander
|
|
|
1818
1818
|
14a7aa23e27da0a59025c71766fc8685d62abc07b3ea4f5fd3453aa00923fd47 test/compact-gateway-r36.test.mjs
|
|
1819
1819
|
3b5133e8cc7a8c2c5e66a7c34ac5e4f9bf2cf14b5897a7e871fb41ba82b629e5 test/compact-max-catalog-r40.test.mjs
|
|
1820
1820
|
22e3cc9a6f9e2da776e3c737b964e2a8889c1363c244474de552d8e17dac8ffc test/compact-max-catalog-r44.test.mjs
|
|
1821
|
-
|
|
1821
|
+
d05c22af0c714fd98ee7454668e8b2968e6349f006b5e7d8ead2b6669e68714c test/compact-max-catalog-r45.test.mjs
|
|
1822
1822
|
887df1e1627747444baf7e4e4179015e5b15c8e236c14674ddf36e3a83766bba test/contained.test.mjs
|
|
1823
1823
|
48a3b64ed40311fb017217cd85f3102c77a2cd72490b5edd41aac01247a1882c test/containment.test.mjs
|
|
1824
1824
|
599eba90e0e4e1222518f7c268e0d5598dcbc9121a13fe6ede909645e72ec24b test/context-provenance.test.mjs
|
|
@@ -1984,7 +1984,7 @@ d8f544bbcdfff61f7abb7705ad7e5e1f17998f5fde3c114fb33915fc66d1408f test/r41-final
|
|
|
1984
1984
|
2c5f2093b945c267c8d09cd2da0875c7f45911a7c01aa02a50cd64c2c1a7ccdc test/r45-autonomous-quick-test.test.mjs
|
|
1985
1985
|
532075c86893caf68a2d0ea09171bee4c7d60892c1892011285376a2c186ed92 test/r45-finalization.test.mjs
|
|
1986
1986
|
25a21ccffcf566b020b8f3c6c0a5a3b7ff06b243fff84e405207e458640ba487 test/r47-release-contract.test.mjs
|
|
1987
|
-
|
|
1987
|
+
26c52445254369d60d669135fab1f61764bfec790c2f1097d14858e10be01416 test/r48-release-contract.test.mjs
|
|
1988
1988
|
e45a6cd299d8d65bdeb9bc0117ce1eb2b47fdebad89a02413ee979c9d0ae3a5c test/release-activation-gate.test.mjs
|
|
1989
1989
|
85f6dc2059fd19d03452309ffe67bed5b87da8e6f0ce3a85cab58cba8b197ceb test/release-generation.test.mjs
|
|
1990
1990
|
bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
|
package/PROVENANCE.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.provenance.v1",
|
|
3
|
-
"version": "0.15.
|
|
4
|
-
"builder": "deadbyte-r48-
|
|
5
|
-
"source_model": "development-root -> pinned Desktop Commander 0.2.51 wire reference -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed machine truth",
|
|
3
|
+
"version": "0.15.21",
|
|
4
|
+
"builder": "deadbyte-r48-capability-manifest-authority-truth",
|
|
5
|
+
"source_model": "development-root -> pinned Desktop Commander 0.2.51 wire reference -> authority-truth 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.20-bab990b08c9c1f07",
|
|
8
|
+
"parent_manifest_sha256": "bab990b08c9c1f0788a1ede6b0695d293f8433e4ef0f541eca59635cf125a43d",
|
|
9
|
+
"parent_generation_manifest_sha256": "617ea6bfbfc7e1952d17e7fea1043fd70b32bb1edacbd3ed6002fec7235c7221",
|
|
10
|
+
"source_predecessor_version": "0.15.20",
|
|
11
|
+
"source_predecessor_tarball_sha256": "eb7cbe8465ae3834c9857fc2115c7ab4eb3d1a018aa1695b799912def5dc3cee",
|
|
12
|
+
"source_predecessor_manifest_file_sha256": "bab990b08c9c1f0788a1ede6b0695d293f8433e4ef0f541eca59635cf125a43d",
|
|
13
13
|
"commander_reference_version": "0.2.51",
|
|
14
14
|
"commander_reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
|
|
15
15
|
"commander_reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140",
|
|
16
|
-
"reproducibility": "manifest-bound package bytes; exact
|
|
16
|
+
"reproducibility": "manifest-bound package bytes; exact predecessor package digest; authority state resolver covered by unit and real compact stdio proof; version/slot/generation coherence verified by signed machine ping"
|
|
17
17
|
}
|
package/README.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
DEADBYTE MCP V0.15.
|
|
1
|
+
DEADBYTE MCP V0.15.21 / R48 CAPABILITY MANIFEST AUTHORITY TRUTH
|
|
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.21 mcp
|
|
11
|
+
npx -y deadbyte-mcp@0.15.21 remote
|
|
12
|
+
npx -y deadbyte-mcp@0.15.21 remote status
|
|
13
|
+
npx -y deadbyte-mcp@0.15.21 remote restart
|
|
14
|
+
npx -y deadbyte-mcp@0.15.21 audit status
|
|
15
|
+
npx -y deadbyte-mcp@0.15.21 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,43 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.release.v1",
|
|
3
3
|
"name": "deadbyte-mcp",
|
|
4
|
-
"version": "0.15.
|
|
4
|
+
"version": "0.15.21",
|
|
5
5
|
"train": "R48",
|
|
6
|
-
"label": "
|
|
6
|
+
"label": "CAPABILITY MANIFEST AUTHORITY TRUTH",
|
|
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.20-bab990b08c9c1f07",
|
|
10
|
+
"manifest_sha256": "bab990b08c9c1f0788a1ede6b0695d293f8433e4ef0f541eca59635cf125a43d",
|
|
11
|
+
"generation_manifest_sha256": "617ea6bfbfc7e1952d17e7fea1043fd70b32bb1edacbd3ed6002fec7235c7221"
|
|
12
12
|
},
|
|
13
13
|
"source_predecessor": {
|
|
14
|
-
"version": "0.15.
|
|
15
|
-
"tarball_sha256": "
|
|
16
|
-
"manifest_file_sha256": "
|
|
14
|
+
"version": "0.15.20",
|
|
15
|
+
"tarball_sha256": "eb7cbe8465ae3834c9857fc2115c7ab4eb3d1a018aa1695b799912def5dc3cee",
|
|
16
|
+
"manifest_file_sha256": "bab990b08c9c1f0788a1ede6b0695d293f8433e4ef0f541eca59635cf125a43d",
|
|
17
17
|
"reference_package": "@wonderwhy-er/desktop-commander@0.2.51",
|
|
18
18
|
"reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
|
|
19
19
|
"reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
|
|
20
20
|
},
|
|
21
21
|
"platform": {
|
|
22
22
|
"primary": "win32",
|
|
23
|
-
"architectures": [
|
|
24
|
-
"x64"
|
|
25
|
-
]
|
|
23
|
+
"architectures": ["x64"]
|
|
26
24
|
},
|
|
27
25
|
"capabilities": {
|
|
28
|
-
"host_execution_modes": [
|
|
29
|
-
|
|
30
|
-
"inline",
|
|
31
|
-
"native"
|
|
32
|
-
],
|
|
33
|
-
"hardware_queries": [
|
|
34
|
-
"cpu",
|
|
35
|
-
"gpu",
|
|
36
|
-
"memory",
|
|
37
|
-
"storage",
|
|
38
|
-
"network",
|
|
39
|
-
"pci"
|
|
40
|
-
],
|
|
26
|
+
"host_execution_modes": ["script", "inline", "native"],
|
|
27
|
+
"hardware_queries": ["cpu", "gpu", "memory", "storage", "network", "pci"],
|
|
41
28
|
"compact_tool_count": 43,
|
|
42
29
|
"full_tool_count": 115,
|
|
43
30
|
"full_tool_catalog": {
|
|
@@ -56,11 +43,10 @@
|
|
|
56
43
|
"package_slot_version_coherence": true,
|
|
57
44
|
"pid_reuse_self_recovery": true,
|
|
58
45
|
"bounded_controller_failure_evidence": true,
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
],
|
|
46
|
+
"durable_task_events_preserve_signed_envelope": true,
|
|
47
|
+
"capability_manifest_authority_truth": true,
|
|
48
|
+
"capability_manifest_host_grant_truth": true,
|
|
49
|
+
"process_profiles": ["ping_hold", "powershell", "powershell_repl"],
|
|
64
50
|
"powershell_fileless": true,
|
|
65
51
|
"powershell_source_max_arg_bytes": 8192,
|
|
66
52
|
"powershell_persistent_repl": true,
|
package/SBOM.cdx.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.6",
|
|
4
|
-
"serialNumber": "urn:cdx:deadbyte-mcp:r48:0.15.
|
|
4
|
+
"serialNumber": "urn:cdx:deadbyte-mcp:r48:0.15.21",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
7
|
"component": {
|
|
8
8
|
"type": "application",
|
|
9
9
|
"name": "deadbyte-mcp",
|
|
10
|
-
"version": "0.15.
|
|
10
|
+
"version": "0.15.21"
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"components": [
|
|
@@ -15,6 +15,6 @@
|
|
|
15
15
|
{"type":"library","name":"@modelcontextprotocol/server","version":"2.1.0"},
|
|
16
16
|
{"type":"library","name":"typescript","version":"5.9.3"},
|
|
17
17
|
{"type":"library","name":"zod","version":"4.4.3"},
|
|
18
|
-
{"type":"file","name":"deadbyte-hardware-observer-r45.exe","version":"0.15.
|
|
18
|
+
{"type":"file","name":"deadbyte-hardware-observer-r45.exe","version":"0.15.21","hashes":[{"alg":"SHA-256","content":"46bcd3768bb95f8c63fc3118e031efc2818a92929611cabf6c3b29c5162a6591"}]}
|
|
19
19
|
]
|
|
20
20
|
}
|
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.21",
|
|
4
4
|
"train": "R48",
|
|
5
5
|
"primary_platform": "win32-x64",
|
|
6
6
|
"reference": {
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
"schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
|
|
11
11
|
},
|
|
12
12
|
"required": [
|
|
13
|
+
{"id":"capability-authority-truth","command":"node --test test/capability-resolver.test.mjs","expected":"PASS across disarmed Coding/Process/Autonomous/Desktop/Host plus armed Host positive control"},
|
|
14
|
+
{"id":"compact-authority-truth","command":"node --test test/compact-max-catalog-r45.test.mjs","expected":"PASS real compact stdio authority-state manifest truth"},
|
|
15
|
+
{"id":"coding-durable-event-envelope","command":"node --test test/coding-runtime.test.mjs","expected":"PASS with signed durable event envelope fields"},
|
|
13
16
|
{"id":"commander-hardening","command":"npm run r47:hardening:test","expected":"PASS"},
|
|
14
17
|
{"id":"r48-release","command":"npm run r48:release:test","expected":"PASS"},
|
|
15
18
|
{"id":"full-regression","command":"npm run r48:full:test","expected":"PASS"},
|
|
@@ -17,14 +20,15 @@
|
|
|
17
20
|
{"id":"release-smoke","command":"node --test test/release-smoke-isolation.test.mjs","expected":"PASS"},
|
|
18
21
|
{"id":"runtime-update","command":"node --test test/runtime-self-update.test.mjs","expected":"PASS"},
|
|
19
22
|
{"id":"audit","command":"npm audit --omit=dev","expected":"0 vulnerabilities"},
|
|
20
|
-
{"id":"activation","command":"npx -y deadbyte-mcp@0.15.
|
|
21
|
-
{"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.
|
|
23
|
+
{"id":"activation","command":"npx -y deadbyte-mcp@0.15.21 remote status","expected":"active runtime 0.15.21 with no VERSION SKEW"},
|
|
24
|
+
{"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.21 generation"},
|
|
25
|
+
{"id":"live-capability-truth","command":"capability_manifest after activation","expected":"DENIED mutating/bound reads follow disarmed authority; authority-independent reads remain AVAILABLE"}
|
|
22
26
|
],
|
|
23
27
|
"full_regression_partition_proof": {
|
|
24
28
|
"files": 204,
|
|
25
29
|
"batches": 8,
|
|
26
|
-
"tests":
|
|
27
|
-
"pass":
|
|
30
|
+
"tests": 1015,
|
|
31
|
+
"pass": 1007,
|
|
28
32
|
"skip": 8,
|
|
29
33
|
"fail": 0
|
|
30
34
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.21",
|
|
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.",
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import { processSessionStatus } from './process-policy.mjs';
|
|
2
|
+
import { assertHostArmed } from './host-plane.mjs';
|
|
3
|
+
|
|
4
|
+
const CODING_ARMED_READ_CAPABILITIES = new Set([
|
|
5
|
+
'coding.tree','coding.stat','coding.search','coding.files_read','coding.file_read',
|
|
6
|
+
'semantic.outline','semantic.definition','semantic.references','semantic.diagnostics','semantic.implementations','semantic.rename_preview'
|
|
7
|
+
]);
|
|
8
|
+
|
|
1
9
|
export const CAPABILITY_STATES = Object.freeze({
|
|
2
10
|
AVAILABLE: 'AVAILABLE',
|
|
3
11
|
DEGRADED: 'DEGRADED',
|
|
@@ -88,12 +96,11 @@ export function deriveCapabilityRequirements(capability) {
|
|
|
88
96
|
reqs.push('skill_plane.valid');
|
|
89
97
|
return reqs;
|
|
90
98
|
}
|
|
99
|
+
if (CODING_ARMED_READ_CAPABILITIES.has(capability.id) && capability.authority !== 'coding') reqs.push('coding_session.armed');
|
|
91
100
|
if (capability.authority === 'coding') {
|
|
92
|
-
if (capability.mutating)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
reqs.push('coding_runtime.ready');
|
|
96
|
-
}
|
|
101
|
+
if (capability.mutating || CODING_ARMED_READ_CAPABILITIES.has(capability.id)) reqs.push('coding_session.armed');
|
|
102
|
+
else reqs.push('coding_runtime.ready');
|
|
103
|
+
if (capability.mutating) reqs.push('policy.write');
|
|
97
104
|
} else if (capability.authority === 'process') {
|
|
98
105
|
if (capability.mutating) {
|
|
99
106
|
reqs.push('process_session.armed');
|
|
@@ -113,11 +120,7 @@ export function deriveCapabilityRequirements(capability) {
|
|
|
113
120
|
reqs.push('desktop_runtime.ready');
|
|
114
121
|
}
|
|
115
122
|
} else if (capability.authority === 'host' || capability.host_only) {
|
|
116
|
-
|
|
117
|
-
reqs.push('host_policy.armed');
|
|
118
|
-
} else {
|
|
119
|
-
reqs.push('host_policy.configured');
|
|
120
|
-
}
|
|
123
|
+
reqs.push('host_policy.armed');
|
|
121
124
|
}
|
|
122
125
|
return reqs;
|
|
123
126
|
}
|
|
@@ -148,11 +151,33 @@ export async function resolveCapabilityStates({
|
|
|
148
151
|
try { codingStatus = await codingRuntime.sessionStatus(); } catch {}
|
|
149
152
|
}
|
|
150
153
|
|
|
154
|
+
let processStatus = null;
|
|
155
|
+
if (processRuntime?.sessionStatus) {
|
|
156
|
+
try { processStatus = await processRuntime.sessionStatus(); } catch {}
|
|
157
|
+
} else if (processRuntime?.policy) {
|
|
158
|
+
try { processStatus = await processSessionStatus(processRuntime.policy); } catch {}
|
|
159
|
+
}
|
|
160
|
+
|
|
151
161
|
let autonomousStatus = null;
|
|
152
162
|
if (autonomousRuntime?.sessionStatus) {
|
|
153
163
|
try { autonomousStatus = await autonomousRuntime.sessionStatus(); } catch {}
|
|
154
164
|
}
|
|
155
165
|
|
|
166
|
+
let desktopStatus = null;
|
|
167
|
+
if (desktopRuntime?.status) {
|
|
168
|
+
try { desktopStatus = await desktopRuntime.status(); } catch {}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
let hostStatus = null;
|
|
172
|
+
if (hostPolicy) {
|
|
173
|
+
try {
|
|
174
|
+
const armed = await assertHostArmed(hostPolicy);
|
|
175
|
+
hostStatus = { configured:true, armed:true, reason:armed.standing ? 'standing-grant' : 'armed' };
|
|
176
|
+
} catch (error) {
|
|
177
|
+
hostStatus = { configured:true, armed:false, reason:String(error?.message ?? error) };
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
156
181
|
let skillListResult = null;
|
|
157
182
|
if (skillRuntime?.list) {
|
|
158
183
|
try { skillListResult = await skillRuntime.list(); } catch (err) {
|
|
@@ -225,20 +250,44 @@ export async function resolveCapabilityStates({
|
|
|
225
250
|
};
|
|
226
251
|
}
|
|
227
252
|
// 4. Session Authority Checks
|
|
228
|
-
else if (
|
|
253
|
+
else if (requires.includes('coding_session.armed') && !codingStatus?.armed) {
|
|
229
254
|
state = CAPABILITY_STATES.DENIED;
|
|
230
255
|
ready = false;
|
|
231
256
|
diagnostic = {
|
|
232
257
|
code: 'CODING_SESSION_DISARMED',
|
|
233
|
-
reason: codingStatus
|
|
258
|
+
reason: codingStatus?.reason || 'Coding session is not armed for this capability',
|
|
234
259
|
recoverable: true
|
|
235
260
|
};
|
|
236
|
-
} else if (
|
|
261
|
+
} else if (requires.includes('process_session.armed') && !processStatus?.armed) {
|
|
262
|
+
state = CAPABILITY_STATES.DENIED;
|
|
263
|
+
ready = false;
|
|
264
|
+
diagnostic = {
|
|
265
|
+
code: 'PROCESS_SESSION_DISARMED',
|
|
266
|
+
reason: processStatus?.reason || 'Process session is not armed for mutation',
|
|
267
|
+
recoverable: true
|
|
268
|
+
};
|
|
269
|
+
} else if (requires.includes('autonomous_session.armed') && !autonomousStatus?.armed) {
|
|
237
270
|
state = CAPABILITY_STATES.DENIED;
|
|
238
271
|
ready = false;
|
|
239
272
|
diagnostic = {
|
|
240
273
|
code: 'AUTONOMOUS_SESSION_DISARMED',
|
|
241
|
-
reason: autonomousStatus
|
|
274
|
+
reason: autonomousStatus?.reason || 'Autonomous session is not armed for mutation',
|
|
275
|
+
recoverable: true
|
|
276
|
+
};
|
|
277
|
+
} else if (requires.includes('desktop_control.armed') && !desktopStatus?.armed) {
|
|
278
|
+
state = CAPABILITY_STATES.DENIED;
|
|
279
|
+
ready = false;
|
|
280
|
+
diagnostic = {
|
|
281
|
+
code: 'DESKTOP_SESSION_DISARMED',
|
|
282
|
+
reason: desktopStatus?.reason || 'Desktop control is not armed for mutation',
|
|
283
|
+
recoverable: true
|
|
284
|
+
};
|
|
285
|
+
} else if (requires.includes('host_policy.armed') && !hostStatus?.armed) {
|
|
286
|
+
state = CAPABILITY_STATES.DENIED;
|
|
287
|
+
ready = false;
|
|
288
|
+
diagnostic = {
|
|
289
|
+
code: 'HOST_POLICY_DISARMED',
|
|
290
|
+
reason: hostStatus?.reason || 'Privileged host policy is disarmed',
|
|
242
291
|
recoverable: true
|
|
243
292
|
};
|
|
244
293
|
}
|
|
@@ -553,7 +553,7 @@ export function createCodingTaskRuntime({ codingRuntime, signingKeyPath, verifyK
|
|
|
553
553
|
journal_head_sha256: all.at(-1)?.event_sha256 ?? ZERO_HASH,
|
|
554
554
|
stream_id: snapshot.stream_id, stream_generation: snapshot.generation, stream_next_seq: snapshot.next_seq,
|
|
555
555
|
stream_coverage: stream.coverage(),
|
|
556
|
-
events: page.items.map(item=>item.
|
|
556
|
+
events: page.items.map(item => all[item.seq - 1])
|
|
557
557
|
};
|
|
558
558
|
}
|
|
559
559
|
|
package/src/mcp-server.mjs
CHANGED
|
@@ -479,7 +479,8 @@ serveStdio(() => {
|
|
|
479
479
|
|
|
480
480
|
registerCompactGatewayTools(toolServer,{
|
|
481
481
|
profile:surfaceProfile,ledger:R36_CAPABILITY_LEDGER,codingRuntime,semanticRuntime,machineFsRuntime,
|
|
482
|
-
processRuntime,observationRuntime,machineRuntime,desktopRuntime,
|
|
482
|
+
processRuntime,observationRuntime,machineRuntime,desktopRuntime,skillRuntime,autonomousRuntime,hostPolicy,
|
|
483
|
+
catalogProvider:()=>[...registeredToolNames]
|
|
483
484
|
});
|
|
484
485
|
|
|
485
486
|
if (hostPolicy) {
|
package/src/version.mjs
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import test from 'node:test';
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
3
6
|
import {
|
|
4
7
|
CAPABILITY_STATES,
|
|
5
8
|
deriveCapabilityRequirements,
|
|
@@ -22,7 +25,7 @@ test('deriveCapabilityRequirements maps dependencies accurately', () => {
|
|
|
22
25
|
mutating: false,
|
|
23
26
|
runtime_flag: 'DEADBYTE_CODING_RUNTIME'
|
|
24
27
|
});
|
|
25
|
-
assert.deepEqual(reqCodingRead, ['DEADBYTE_CODING_RUNTIME', '
|
|
28
|
+
assert.deepEqual(reqCodingRead, ['DEADBYTE_CODING_RUNTIME', 'coding_session.armed']);
|
|
26
29
|
|
|
27
30
|
const reqCodingWrite = deriveCapabilityRequirements({
|
|
28
31
|
id: 'coding.file_write',
|
|
@@ -131,3 +134,67 @@ test('resolveCapabilityStates resolves all 5 states correctly', async () => {
|
|
|
131
134
|
assert.equal(skillCap.diagnostic.code, 'SKILL_ENVELOPE_MISMATCH');
|
|
132
135
|
assert.ok(degradedRes.degraded_capabilities.some(d => d.id === 'skill.catalog'));
|
|
133
136
|
});
|
|
137
|
+
|
|
138
|
+
test('capability resolver reports actual disarmed authority across coding process autonomous desktop and host', async () => {
|
|
139
|
+
const ledger={entries:[
|
|
140
|
+
{id:'coding.search',compact_tool:'coding_inspect',full_tool:'coding_search',compact_op:'search',authority:'coding',mutating:false,production:true,runtime_flag:'DEADBYTE_CODING_RUNTIME'},
|
|
141
|
+
{id:'process.start',compact_tool:'process_session',full_tool:'process_session_start',compact_op:'start',authority:'process',mutating:true,production:true,runtime_flag:'DEADBYTE_PROCESS_RUNTIME'},
|
|
142
|
+
{id:'autonomous.goal_submit',compact_tool:'autonomous_goal_submit',full_tool:'autonomous_goal_submit',compact_op:'direct',authority:'autonomous',mutating:true,production:true,runtime_flag:'DEADBYTE_AUTONOMOUS_RUNTIME'},
|
|
143
|
+
{id:'desktop.action',compact_tool:'desktop_control',full_tool:'desktop_action',compact_op:'action',authority:'desktop',mutating:true,production:true,runtime_flag:'DEADBYTE_DESKTOP_RUNTIME'},
|
|
144
|
+
{id:'host.file_read',compact_tool:'host_file_read',full_tool:'host_file_read',compact_op:'direct',authority:'host',mutating:false,production:false,runtime_flag:'DEADBYTE_PRIVILEGED_POLICY'}
|
|
145
|
+
]};
|
|
146
|
+
const result=await resolveCapabilityStates({
|
|
147
|
+
ledger,
|
|
148
|
+
toolCatalog:['coding_inspect','process_session','autonomous_goal_submit','desktop_control','host_file_read'],
|
|
149
|
+
profile:'compact',
|
|
150
|
+
env:{},
|
|
151
|
+
codingRuntime:{sessionStatus:async()=>({armed:false,reason:'coding-disarmed'})},
|
|
152
|
+
processRuntime:{sessionStatus:async()=>({armed:false,reason:'process-disarmed'})},
|
|
153
|
+
autonomousRuntime:{sessionStatus:async()=>({armed:false,reason:'autonomous-disarmed'})},
|
|
154
|
+
desktopRuntime:{status:async()=>({armed:false,reason:'desktop-disarmed'})},
|
|
155
|
+
hostPolicy:{arm_file:path.join(os.tmpdir(),'deadbyte-capability-resolver-never-armed.json'),policy_sha256:'a'.repeat(64)}
|
|
156
|
+
});
|
|
157
|
+
const byId=id=>result.capabilities.find(item=>item.id===id);
|
|
158
|
+
assert.equal(byId('coding.search').state,CAPABILITY_STATES.DENIED);
|
|
159
|
+
assert.equal(byId('coding.search').diagnostic.code,'CODING_SESSION_DISARMED');
|
|
160
|
+
assert.equal(byId('process.start').state,CAPABILITY_STATES.DENIED);
|
|
161
|
+
assert.equal(byId('process.start').diagnostic.code,'PROCESS_SESSION_DISARMED');
|
|
162
|
+
assert.equal(byId('autonomous.goal_submit').state,CAPABILITY_STATES.DENIED);
|
|
163
|
+
assert.equal(byId('autonomous.goal_submit').diagnostic.code,'AUTONOMOUS_SESSION_DISARMED');
|
|
164
|
+
assert.equal(byId('desktop.action').state,CAPABILITY_STATES.DENIED);
|
|
165
|
+
assert.equal(byId('desktop.action').diagnostic.code,'DESKTOP_SESSION_DISARMED');
|
|
166
|
+
assert.equal(byId('host.file_read').state,CAPABILITY_STATES.DENIED);
|
|
167
|
+
assert.equal(byId('host.file_read').diagnostic.code,'HOST_POLICY_DISARMED');
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
test('capability resolver reports armed Host capability when the standing grant is valid', async () => {
|
|
172
|
+
const root=await mkdtemp(path.join(os.tmpdir(),'deadbyte-capability-host-'));
|
|
173
|
+
try{
|
|
174
|
+
const armFile=path.join(root,'host-grant.json');
|
|
175
|
+
const policySha='b'.repeat(64);
|
|
176
|
+
await writeFile(armFile,JSON.stringify({
|
|
177
|
+
schema:'deadbyte.host-grant.v2',
|
|
178
|
+
policy_sha256:policySha,
|
|
179
|
+
instance_nonce:'c'.repeat(64),
|
|
180
|
+
armed_at_utc:new Date().toISOString()
|
|
181
|
+
}));
|
|
182
|
+
const result=await resolveCapabilityStates({
|
|
183
|
+
ledger:{entries:[{
|
|
184
|
+
id:'host.file_read',compact_tool:'host_file_read',full_tool:'host_file_read',compact_op:'direct',
|
|
185
|
+
authority:'host',mutating:false,production:false,runtime_flag:'DEADBYTE_PRIVILEGED_POLICY'
|
|
186
|
+
}]},
|
|
187
|
+
toolCatalog:['host_file_read'],
|
|
188
|
+
profile:'compact',
|
|
189
|
+
env:{},
|
|
190
|
+
hostPolicy:{arm_file:armFile,policy_sha256:policySha}
|
|
191
|
+
});
|
|
192
|
+
const hostRead=result.capabilities[0];
|
|
193
|
+
assert.equal(hostRead.state,CAPABILITY_STATES.AVAILABLE);
|
|
194
|
+
assert.equal(hostRead.ready,true);
|
|
195
|
+
assert.equal(hostRead.diagnostic,null);
|
|
196
|
+
assert.deepEqual(hostRead.requires,['DEADBYTE_PRIVILEGED_POLICY','host_policy.armed']);
|
|
197
|
+
}finally{
|
|
198
|
+
await rm(root,{recursive:true,force:true});
|
|
199
|
+
}
|
|
200
|
+
});
|
|
@@ -158,6 +158,13 @@ test('durable coding task chains edit command benchmark and verifies task receip
|
|
|
158
158
|
assert.equal(page.stream_id, submitted.task_id);
|
|
159
159
|
assert.equal(page.events.length, 3);
|
|
160
160
|
assert.equal(page.events[0].seq, 4);
|
|
161
|
+
assert.equal(page.events[0].schema, 'deadbyte.coding-task-event.v1');
|
|
162
|
+
assert.equal(page.events[0].task_id, submitted.task_id);
|
|
163
|
+
assert.match(page.events[0].created_at_utc, /^\d{4}-\d{2}-\d{2}T/);
|
|
164
|
+
assert.match(page.events[0].prev_sha256, /^[0-9a-f]{64}$/);
|
|
165
|
+
assert.equal(page.events[0].attestation.algorithm, 'ed25519');
|
|
166
|
+
assert.match(page.events[0].attestation.key_id, /^[0-9a-f]{64}$/);
|
|
167
|
+
assert.equal(typeof page.events[0].attestation.signature_base64, 'string');
|
|
161
168
|
assert.equal(page.events[2].seq, 6);
|
|
162
169
|
const verified = await f.tasks.verify({ taskId: submitted.task_id });
|
|
163
170
|
assert.equal(verified.ok, true);
|
|
@@ -90,7 +90,31 @@ test('R45 real max-runtime compact stdio catalog is exactly 43 with verified ski
|
|
|
90
90
|
assert.ok(hardware);assert.equal(hardware.authority,'none');assert.equal(hardware.compact_tool,'machine_observe');assert.equal(hardware.compact_op,'hardware_query');
|
|
91
91
|
const skill=m.capabilities.find(item=>item.id==='skill.catalog');
|
|
92
92
|
assert.ok(skill);assert.equal(skill.authority,'none');assert.equal(skill.mutating,false);
|
|
93
|
-
|
|
93
|
+
|
|
94
|
+
const byId=id=>m.capabilities.find(item=>item.id===id);
|
|
95
|
+
for(const [id,reasonCode] of [
|
|
96
|
+
['coding.search','CODING_SESSION_DISARMED'],
|
|
97
|
+
['process.start','PROCESS_SESSION_DISARMED'],
|
|
98
|
+
['autonomous.goal_submit','AUTONOMOUS_SESSION_DISARMED'],
|
|
99
|
+
['desktop.action','DESKTOP_SESSION_DISARMED'],
|
|
100
|
+
['host.file_read','HOST_POLICY_DISARMED']
|
|
101
|
+
]){
|
|
102
|
+
const item=byId(id);
|
|
103
|
+
assert.ok(item,'missing capability '+id);
|
|
104
|
+
assert.equal(item.state,'DENIED',id+' must reflect disarmed authority');
|
|
105
|
+
assert.equal(item.ready,false,id+' must not be ready while disarmed');
|
|
106
|
+
assert.equal(item.diagnostic?.code,reasonCode,id+' diagnostic mismatch');
|
|
107
|
+
assert.ok(m.unavailable_capabilities.some(entry=>entry.id===id&&entry.state==='DENIED'&&entry.reason_code===reasonCode),
|
|
108
|
+
id+' must be listed as unavailable');
|
|
109
|
+
}
|
|
110
|
+
for(const id of ['coding.task_events','coding.task_status','coding.task_verify','process.list','desktop.observe']){
|
|
111
|
+
const item=byId(id);
|
|
112
|
+
assert.ok(item,'missing read-only capability '+id);
|
|
113
|
+
assert.equal(item.state,'AVAILABLE',id+' should remain available without mutation authority');
|
|
114
|
+
assert.equal(item.ready,true,id+' should remain ready without mutation authority');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
console.log(JSON.stringify({tool_count:m.tool_count,catalog_sha256:m.catalog_sha256,ledger_sha256:m.ledger_sha256,desktop:true,hardware_query:true,skill:true,authority:'DISARMED',authority_truth:true}));
|
|
94
118
|
} finally {
|
|
95
119
|
await client.close().catch(()=>{});
|
|
96
120
|
for(const q of [processGrant,hostArm,desktopGrant,codingLease,autonomousLease]) assert.equal(await absent(q),true,'authority file appeared during catalog probe: '+q);
|
|
@@ -6,29 +6,31 @@ 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 successor identity is coherent and binds active
|
|
9
|
+
test('R48 successor identity is coherent and binds active 0.15.20 parent plus sealed 0.15.20 source predecessor',async()=>{
|
|
10
10
|
const [pkg,lock,release,provenance]=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
14
|
read('PROVENANCE.json').then(JSON.parse)
|
|
15
15
|
]);
|
|
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.
|
|
16
|
+
assert.equal(pkg.version,'0.15.21');
|
|
17
|
+
assert.equal(lock.version,'0.15.21');
|
|
18
|
+
assert.equal(lock.packages[''].version,'0.15.21');
|
|
19
|
+
assert.equal(DEADBYTE_VERSION,'0.15.21');
|
|
20
|
+
assert.equal(release.version,'0.15.21');
|
|
21
|
+
assert.equal(provenance.version,'0.15.21');
|
|
22
22
|
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,'
|
|
23
|
+
assert.equal(release.label,'CAPABILITY MANIFEST AUTHORITY TRUTH');
|
|
24
|
+
assert.equal(release.parent.release_id,'v0.15.20-bab990b08c9c1f07');
|
|
25
|
+
assert.equal(release.parent.manifest_sha256,'bab990b08c9c1f0788a1ede6b0695d293f8433e4ef0f541eca59635cf125a43d');
|
|
26
|
+
assert.equal(release.parent.generation_manifest_sha256,'617ea6bfbfc7e1952d17e7fea1043fd70b32bb1edacbd3ed6002fec7235c7221');
|
|
27
|
+
assert.equal(release.source_predecessor.version,'0.15.20');
|
|
28
|
+
assert.equal(release.source_predecessor.tarball_sha256,'eb7cbe8465ae3834c9857fc2115c7ab4eb3d1a018aa1695b799912def5dc3cee');
|
|
29
|
+
assert.equal(release.source_predecessor.manifest_file_sha256,'bab990b08c9c1f0788a1ede6b0695d293f8433e4ef0f541eca59635cf125a43d');
|
|
30
30
|
assert.equal(release.source_predecessor.reference_server_sha256,'dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305');
|
|
31
31
|
assert.equal(release.source_predecessor.reference_schemas_sha256,'f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140');
|
|
32
|
+
assert.equal(release.capabilities.capability_manifest_authority_truth,true);
|
|
33
|
+
assert.equal(release.capabilities.capability_manifest_host_grant_truth,true);
|
|
32
34
|
assert.equal(provenance.parent_release_id,release.parent.release_id);
|
|
33
35
|
assert.equal(provenance.parent_manifest_sha256,release.parent.manifest_sha256);
|
|
34
36
|
assert.equal(provenance.parent_generation_manifest_sha256,release.parent.generation_manifest_sha256);
|