deadbyte-mcp 0.15.20 → 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 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
- fcf75bf9bca9087083629d561793a62c48bccca5ce809815dfbf41b5ebd37e63 package.json
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
- 24fd81da0f2bd1924b98166d5a3346250932bd1119a9510afa7fe2bb4b941069 PROVENANCE.json
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
- 366e830adfb7d20f50af0c518414b84943df0768467b24ec3b7ba687da89e02a README.txt
1411
- 8a3bc7b365d910a519305428dca02c54201506916e9d46c015f15f48896c537c RELEASE.json
1412
- 1f729b4427610aeb5941060c5ece1dd2d080791d39b1f332c7bc6aef5ca80033 SBOM.cdx.json
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,7 +1598,7 @@ 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
- ecccd8645297f2edd131b2e1a30016fb58ea9d18d8536aa784a21734c81cf209 src/capability-resolver.mjs
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
@@ -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
- 15defd69705903fa637df403a0099e4ff060577db48fcb101c782a00967f51f8 src/mcp-server.mjs
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
- 5bed29049d7c8823986120d68d7477bf2224860e85e4e9b6c1fec7413f2ffd99 src/version.mjs
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
- fe93303c735ffeca84c05340f171ecaec4c0b922ee506603f463ace86b3224c4 TEST-MATRIX.json
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
- 5cdf20eace97fa87563c6b139390e6bd8ccbe80215f53aacd041579bfbad20d6 test/capability-resolver.test.mjs
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
@@ -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
- dfb788030ce448c4f18eed99fe7e8ee74d8f022a1d2fd36fc7e6d4a5bc4de7f6 test/compact-max-catalog-r45.test.mjs
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
- c050366979eb50810425593130b36c985ff5f74fddb3e1fd55fb9b0713ec5e89 test/r48-release-contract.test.mjs
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.20",
4
- "builder": "deadbyte-r48-durable-journal-hotfix",
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.19-4b5fcf7acdff11e9",
8
- "parent_manifest_sha256": "4b5fcf7acdff11e935e8f34b5659d92d1f0c51437795432f7715d6a98a55bc29",
9
- "parent_generation_manifest_sha256": "610f4fef7c5e37330f7b2b0fbad69efe0a00f9c7bd256ce8e08bc87e1891680b",
10
- "source_predecessor_version": "0.15.19",
11
- "source_predecessor_tarball_sha256": "e4224ec93588cbd6d68a147cc26097e8a29ddea870fa5f3a9020ab9ed1efbe8f",
12
- "source_predecessor_manifest_file_sha256": "4b5fcf7acdff11e935e8f34b5659d92d1f0c51437795432f7715d6a98a55bc29",
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 wire reference hashes; native payloads hash-bound; version/slot/generation coherence verified by signed machine ping"
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.20 / R48 DURABLE JOURNAL AUTHENTIC EVENT HOTFIX
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.20 mcp
11
- npx -y deadbyte-mcp@0.15.20 remote
12
- npx -y deadbyte-mcp@0.15.20 remote status
13
- npx -y deadbyte-mcp@0.15.20 remote restart
14
- npx -y deadbyte-mcp@0.15.20 audit status
15
- npx -y deadbyte-mcp@0.15.20 audit verify
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,19 +1,19 @@
1
1
  {
2
2
  "schema": "deadbyte.release.v1",
3
3
  "name": "deadbyte-mcp",
4
- "version": "0.15.20",
4
+ "version": "0.15.21",
5
5
  "train": "R48",
6
- "label": "DURABLE JOURNAL AUTHENTIC EVENT HOTFIX",
6
+ "label": "CAPABILITY MANIFEST AUTHORITY TRUTH",
7
7
  "protocol_revision": "2026-07-28",
8
8
  "parent": {
9
- "release_id": "v0.15.19-4b5fcf7acdff11e9",
10
- "manifest_sha256": "4b5fcf7acdff11e935e8f34b5659d92d1f0c51437795432f7715d6a98a55bc29",
11
- "generation_manifest_sha256": "610f4fef7c5e37330f7b2b0fbad69efe0a00f9c7bd256ce8e08bc87e1891680b"
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.19",
15
- "tarball_sha256": "e4224ec93588cbd6d68a147cc26097e8a29ddea870fa5f3a9020ab9ed1efbe8f",
16
- "manifest_file_sha256": "4b5fcf7acdff11e935e8f34b5659d92d1f0c51437795432f7715d6a98a55bc29",
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"
@@ -44,6 +44,8 @@
44
44
  "pid_reuse_self_recovery": true,
45
45
  "bounded_controller_failure_evidence": true,
46
46
  "durable_task_events_preserve_signed_envelope": true,
47
+ "capability_manifest_authority_truth": true,
48
+ "capability_manifest_host_grant_truth": true,
47
49
  "process_profiles": ["ping_hold", "powershell", "powershell_repl"],
48
50
  "powershell_fileless": true,
49
51
  "powershell_source_max_arg_bytes": 8192,
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.20",
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.20"
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.20","hashes":[{"alg":"SHA-256","content":"46bcd3768bb95f8c63fc3118e031efc2818a92929611cabf6c3b29c5162a6591"}]}
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.20",
3
+ "version": "0.15.21",
4
4
  "train": "R48",
5
5
  "primary_platform": "win32-x64",
6
6
  "reference": {
@@ -10,7 +10,9 @@
10
10
  "schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
11
11
  },
12
12
  "required": [
13
- {"id":"coding-durable-event-envelope","command":"node test/coding-runtime.test.mjs","expected":"PASS with signed durable event envelope fields"},
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"},
14
16
  {"id":"commander-hardening","command":"npm run r47:hardening:test","expected":"PASS"},
15
17
  {"id":"r48-release","command":"npm run r48:release:test","expected":"PASS"},
16
18
  {"id":"full-regression","command":"npm run r48:full:test","expected":"PASS"},
@@ -18,14 +20,15 @@
18
20
  {"id":"release-smoke","command":"node --test test/release-smoke-isolation.test.mjs","expected":"PASS"},
19
21
  {"id":"runtime-update","command":"node --test test/runtime-self-update.test.mjs","expected":"PASS"},
20
22
  {"id":"audit","command":"npm audit --omit=dev","expected":"0 vulnerabilities"},
21
- {"id":"activation","command":"npx -y deadbyte-mcp@0.15.20 remote status","expected":"active runtime 0.15.20 with no VERSION SKEW"},
22
- {"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.20 generation"}
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"}
23
26
  ],
24
27
  "full_regression_partition_proof": {
25
28
  "files": 204,
26
29
  "batches": 8,
27
- "tests": 1013,
28
- "pass": 1005,
30
+ "tests": 1015,
31
+ "pass": 1007,
29
32
  "skip": 8,
30
33
  "fail": 0
31
34
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deadbyte-mcp",
3
- "version": "0.15.20",
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
- reqs.push('coding_session.armed', 'policy.write');
94
- } else {
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
- if (capability.mutating) {
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 (cap.authority === 'coding' && cap.mutating && codingStatus && !codingStatus.armed) {
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.reason || 'Coding session is not armed for mutation',
258
+ reason: codingStatus?.reason || 'Coding session is not armed for this capability',
234
259
  recoverable: true
235
260
  };
236
- } else if (cap.authority === 'autonomous' && cap.mutating && autonomousStatus && !autonomousStatus.armed) {
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.reason || 'Autonomous session is not armed for mutation',
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
  }
@@ -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,catalogProvider:()=>[...registeredToolNames]
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,4 +1,4 @@
1
- export const DEADBYTE_VERSION = '0.15.20';
1
+ export const DEADBYTE_VERSION = '0.15.21';
2
2
  export const MCP_PROTOCOL_VERSION = '2026-07-28';
3
3
  export const RECEIPT_SCHEMA_V1 = 'deadbyte.receipt.v1';
4
4
  export const RECEIPT_SCHEMA_V2 = 'deadbyte.receipt.v2';
@@ -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', 'coding_runtime.ready']);
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
+ });
@@ -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
- 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'}));
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 0.15.19 parent plus sealed 0.15.19 source predecessor',async()=>{
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.20');
17
- assert.equal(lock.version,'0.15.20');
18
- assert.equal(lock.packages[''].version,'0.15.20');
19
- assert.equal(DEADBYTE_VERSION,'0.15.20');
20
- assert.equal(release.version,'0.15.20');
21
- assert.equal(provenance.version,'0.15.20');
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,'DURABLE JOURNAL AUTHENTIC EVENT HOTFIX');
24
- assert.equal(release.parent.release_id,'v0.15.19-4b5fcf7acdff11e9');
25
- assert.equal(release.parent.manifest_sha256,'4b5fcf7acdff11e935e8f34b5659d92d1f0c51437795432f7715d6a98a55bc29');
26
- assert.equal(release.parent.generation_manifest_sha256,'610f4fef7c5e37330f7b2b0fbad69efe0a00f9c7bd256ce8e08bc87e1891680b');
27
- assert.equal(release.source_predecessor.version,'0.15.19');
28
- assert.equal(release.source_predecessor.tarball_sha256,'e4224ec93588cbd6d68a147cc26097e8a29ddea870fa5f3a9020ab9ed1efbe8f');
29
- assert.equal(release.source_predecessor.manifest_file_sha256,'4b5fcf7acdff11e935e8f34b5659d92d1f0c51437795432f7715d6a98a55bc29');
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);