deadbyte-mcp 0.15.8 → 0.15.10
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 +11 -11
- package/PROVENANCE.json +1 -1
- package/README.txt +6 -6
- package/RELEASE.json +1 -1
- package/package.json +1 -1
- package/scripts/verify-package.ps1 +138 -0
- package/src/skill-plane-r44.mjs +12 -7
- package/src/version.mjs +1 -1
- package/test/cli-entrypoint.test.mjs +4 -3
- package/test/core.test.mjs +2 -1
- package/test/release-version.test.mjs +5 -4
- package/test/skill-plane-r44.test.mjs +20 -0
- package/DEADBYTE-MCP-local.cmd +0 -4
package/MANIFEST.SHA256
CHANGED
|
@@ -52,7 +52,6 @@ e74d45bd9facf03c9a2a0ff52600252924deb804a87e4b5503f48662a2b45a3b conpty-input-o
|
|
|
52
52
|
0ed1dfaa324eccadd4f6a07385df73feac8bdfef83a4b3ab3f31139885649841 controller/deadbyte-process-policy.json
|
|
53
53
|
d274b099a298c1033fea8f1e8849751693bbc0448778d619400acb82d4f53a3b controller/deadbyte-semantic-lsp-config.json
|
|
54
54
|
3023d2985f5b6e5cc7c0d08cb8b342b362c93dce7ebd4224635362194be40cf2 controller/README.TXT
|
|
55
|
-
70dfccba12797ce5fea60668c97026cf71e7942cb4d886cac5853e05b362b6c1 DEADBYTE-MCP-local.cmd
|
|
56
55
|
101e613518c73c6aa31c725fe1b5f9a24c995dc9876b7b28e1f3e97ac9f8d362 DEADBYTE-MCP-R27-FINAL/R27-ADMIN-CLOSURE.json
|
|
57
56
|
e9baf9abf4410ff8bd0f68e6b957dbbf9790fc88d9126311c5c135e943424952 DEADBYTE-MCP-R27-FINAL/R27-CLEANUP-FINAL-RECEIPT.json
|
|
58
57
|
39cb483c0897af5027bf1790a35a4c3b9a8cd5f6e3a2e0440787615f69cd14b2 DEADBYTE-MCP-R27-FINAL/R27-FINAL-CLOSURE.json
|
|
@@ -1329,7 +1328,7 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
|
|
|
1329
1328
|
f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
|
|
1330
1329
|
51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
|
|
1331
1330
|
3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
|
|
1332
|
-
|
|
1331
|
+
fc923c05c542ed4d3eeace06c1f782fe431d877ee0227c24096aeea45af5d03e package.json
|
|
1333
1332
|
8177e3a354721a73df889f386a97e7744a2e017d150aecf4bf309f5177d18690 proof/CONTAINMENT-BUILD.txt
|
|
1334
1333
|
a8efa13e44ff50902aee64cfca542d19605a1ae23db95280ad2d44b324f3eae7 proof/MCP-SMOKE-STATUS.txt
|
|
1335
1334
|
7c115069cc4a343ca21b0ebdee74bd8f544b02d4aa906ffa13308725825d891a proof/NODE-SYNTAX.txt
|
|
@@ -1389,7 +1388,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
|
|
|
1389
1388
|
bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
|
|
1390
1389
|
2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
|
|
1391
1390
|
f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
|
|
1392
|
-
|
|
1391
|
+
2a17d078ccbf03b254509985b3cdf51496e8d02958b4f3bc878e5aac7bb15b10 PROVENANCE.json
|
|
1393
1392
|
27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
|
|
1394
1393
|
0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
|
|
1395
1394
|
bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
|
|
@@ -1397,8 +1396,8 @@ bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.jso
|
|
|
1397
1396
|
f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.json
|
|
1398
1397
|
731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
|
|
1399
1398
|
d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
|
|
1400
|
-
|
|
1401
|
-
|
|
1399
|
+
4d8bc9d61d7558a484269cc13263b42bb39417700bb3858069d64a2d1ae190e8 README.txt
|
|
1400
|
+
de2c63a505343a61cfbfe4a905d9021ccdc4cce39ccb3e681c2526518bf494c5 RELEASE.json
|
|
1402
1401
|
507a42441c8fbb0b1bef63a13fad9e1680262cd6d34cc176b7ed0c5423ddbcc7 SBOM.cdx.json
|
|
1403
1402
|
bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
|
|
1404
1403
|
8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
|
|
@@ -1525,6 +1524,7 @@ caac2867971dfdf56456528b816ff56282a11cbba81510c13e1723accffac678 scripts/runtim
|
|
|
1525
1524
|
b0cc75c38e0163dbcf7fb1b0d21f2dc34c71f2d0e2a156a53e570ff84afc64e6 scripts/semantic-preflight.ps1
|
|
1526
1525
|
0a115aa9829576c86cc247f754cae69ae09ba146b637d3a1c9fbc16420d20a5d scripts/tool-surface-snapshot.mjs
|
|
1527
1526
|
f8d9c6718cbe20e02e517297e8f35f51c7dcd51b62b8b4a483630a9cd3b1f788 scripts/verify-memory-r41.mjs
|
|
1527
|
+
e552634ca1f8673f5daaaf5e45302d2a7fc4b1a1eac256f60bed2c9136bafa05 scripts/verify-package.ps1
|
|
1528
1528
|
0c22bd0d61e50d35105a146b3b78acbb6889e9821537834892737c7f5aafb75e scripts/verify-r41-parent.mjs
|
|
1529
1529
|
e64878a14b5bf1eb22a011abe0ca2d6ff58c5c22b08cf6e01170ce1e1bf8ea91 scripts/verify-r42-parent.mjs
|
|
1530
1530
|
4896279b3f855ad0f20288fbab36717e4b2040dc0c4fca31232d5b1d5de1c166 scripts/verify-r43-parent.mjs
|
|
@@ -1693,7 +1693,7 @@ fc5407ef8338ebeeede16225b3249166dc4d45e903d873eb46c15c3df07dc9ad src/semantic-b
|
|
|
1693
1693
|
17472b07dbfc1f6eff6831d79926a526e668ed0278cacbf9b4c421019174f505 src/semantic-lsp-backend.mjs
|
|
1694
1694
|
a14cb827602d74f7c9822098815add8bf1ab6b27598d22b44880c8c98e754c1b src/semantic-lsp-config.mjs
|
|
1695
1695
|
3fc8d3786b981ec173e7ff634f117c1464e3e80f13cf471bd5e0fa38e4d4ac3b src/skill-mcp-tools-r44.mjs
|
|
1696
|
-
|
|
1696
|
+
3640e91254d3ed000ba32c41d3582de8af492915c6ee23f284e36f3873519616 src/skill-plane-r44.mjs
|
|
1697
1697
|
3dc2102335cd1e86ee52a11950f80ff6e1771f4291325d4f95a8ea2b849617cc src/stdio-console-guard.mjs
|
|
1698
1698
|
6dccdb538be9783276399a5ad2cce54b1f0d8cc305fd58bee9f0f46d6a412af6 src/text-policy.mjs
|
|
1699
1699
|
144c75f8e8a4c2a182db82642475359459e5c108b2a4cecd80488bea1e6ab3bb src/tool-audit.mjs
|
|
@@ -1704,7 +1704,7 @@ bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init
|
|
|
1704
1704
|
16df134040e3ff1e73df722b568d3e8ac0a6923b097696cead7580da75aa8d2a src/tunnel-stdio-compat.mjs
|
|
1705
1705
|
642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
|
|
1706
1706
|
8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
|
|
1707
|
-
|
|
1707
|
+
afb1d220f824f94a3c1b654213f50e25af380d22e89cba6efb0d58324026e62a src/version.mjs
|
|
1708
1708
|
7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
|
|
1709
1709
|
76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
|
|
1710
1710
|
4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
|
|
@@ -1745,7 +1745,7 @@ bad448d7bfd0c66b8d0dc0fa601fc22d69ccc3f447140ed0f77b68957984daea test/capabilit
|
|
|
1745
1745
|
c343906ca0878e13c576cd9f615802b1139c693bf6769a780dfb052637cf0d83 test/capability-benchmark.test.mjs
|
|
1746
1746
|
b9a8faa4b86683ac5aea891fe6bc95f8e425fb31635176aa4603f9d582b52a79 test/capability-claims-r36.test.mjs
|
|
1747
1747
|
a466a490759d438a8ac68919f79ddcb52253bdbecb5e4448a4fbf62af118184e test/capability-ledger-r36.test.mjs
|
|
1748
|
-
|
|
1748
|
+
84eefe1a43474927fdc6fb7ef269309c662cefb229d6af2c91d9e2f0b9ba5c23 test/cli-entrypoint.test.mjs
|
|
1749
1749
|
bec565ffa8550d56a5bb21927177c37d9d05f8353e3bc2541fc156886fe23688 test/codex-app-server-r44.test.mjs
|
|
1750
1750
|
c43105a78ee4c93417d720ee660cfebc75b17f142a6484568e3cbaa583457f8c test/codex-autonomous-r44.test.mjs
|
|
1751
1751
|
350e151dbd8cc2723b141c5cf5f90bdf11289577c9b9347330e3ad815d948e98 test/coding-catalog-consistency.test.mjs
|
|
@@ -1773,7 +1773,7 @@ a972bd20fa927427e6d8e4181699a27e792e916b02dcf8a1ac3e2b44afd238c1 test/controlle
|
|
|
1773
1773
|
ceba7d1a09ccdcb20f33fe4e6de7667ffe0f0170d1bc9fefadfdba4d7f228090 test/controller-r29.test.mjs
|
|
1774
1774
|
4d0dc810d9af13907f31c834a13acfb7e01ffbbe65575b69649fe52741e42175 test/controller-r30.test.mjs
|
|
1775
1775
|
cceba415584a641291ad08814a666c08c902c6614579611a082334cbad2b5b34 test/controller.test.mjs
|
|
1776
|
-
|
|
1776
|
+
ca977f49ca8096c37e1db1d10066f6526c33f06df6d952d29b0b4958a9d9f9dc test/core.test.mjs
|
|
1777
1777
|
7ba4b06a1c4141ba87b5b371157fb59940d15a1016b4c599a13753d63ad0d3d3 test/DEADBYTE-MCP-WRITE-PROBE.txt
|
|
1778
1778
|
c526724a6d10648fdd5152af917ba2fe51836dc5877daaac554bbd9e52fcd47e test/deferred-slot-operation-behavior.test.mjs
|
|
1779
1779
|
69a515b1a36f0620cae4057ea8dc5302751058e290aedaf2f0b637eb3288aba8 test/deferred-slot-operation.test.mjs
|
|
@@ -1923,7 +1923,7 @@ d8f544bbcdfff61f7abb7705ad7e5e1f17998f5fde3c114fb33915fc66d1408f test/r41-final
|
|
|
1923
1923
|
bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
|
|
1924
1924
|
7cc69e786bfd9e4a7e70888c4c1b5f756a264bc1a991139c468b63af23f24c38 test/release-slot.test.mjs
|
|
1925
1925
|
0109c76b480cc600f6ed42be4519df3fa6835012bb9e4ba4ae6be6635468c4a8 test/release-smoke-isolation.test.mjs
|
|
1926
|
-
|
|
1926
|
+
c4b570fb4c9826cba15998e44a9e01ba0f92d23309251648866fd77fab96b5c2 test/release-version.test.mjs
|
|
1927
1927
|
c270a4e2d1384071e7c406f4ec8c8c1da56228844bf64362cffa03558be3cc49 test/remote-console-r40.test.mjs
|
|
1928
1928
|
ba122b4a7a6953b9fc8187a531a3e8b0f5f8519da602c551b32df8c88c85e879 test/remote-device-r44.test.mjs
|
|
1929
1929
|
3d26a0550a22c69990567d998c28e4ba0978c71429741c10c7c47f261653fbe2 test/remote-live-log-r36.test.mjs
|
|
@@ -1946,7 +1946,7 @@ abfbc97af4a3337694f2362c00da24fd2a06b526ba324e04d0d0816197c75595 test/semantic-
|
|
|
1946
1946
|
1a3567cd485f127ff66f8e0f39c4a66eeb29d0a8d417173040764ff072907927 test/semantic-runtime-routing.test.mjs
|
|
1947
1947
|
27e2bf4ffd18c51cd2b62dfca836fb24288a75ff8a7f55ed9d45f5ba0dd1578a test/semantic-server-config-integration.test.mjs
|
|
1948
1948
|
7f9b1e4f2f53d20386b721b57490c43268954982cff4522da26b1acdac2cb23a test/skill-mcp-r44.test.mjs
|
|
1949
|
-
|
|
1949
|
+
ce8c503863544f36d101c079187d5f02ff5868c526c36f05cf5bea4a7ba2c015 test/skill-plane-r44.test.mjs
|
|
1950
1950
|
a98537d1136988251572f424b29ff8f798356dcfd9a7a1d4238a9c7e943e6a52 test/standing-grants.test.mjs
|
|
1951
1951
|
2c8ad3d273965fa6f7ba2f3aa1ee50791a28f4dcf6dfc8cd8d73510f2577f9f9 test/task-contract-r42.test.mjs
|
|
1952
1952
|
6ecc712b7bcb2abdb934e7d40232ed97ac355f3f47665f557c2168b04d113b41 test/tool-audit.test.mjs
|
package/PROVENANCE.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.provenance.v1",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.10",
|
|
4
4
|
"builder": "deadbyte-r46-fileless-powershell",
|
|
5
5
|
"source_model": "development-root -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed final closure",
|
|
6
6
|
"signing": "ed25519",
|
package/README.txt
CHANGED
|
@@ -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.9 mcp
|
|
11
|
+
npx -y deadbyte-mcp@0.15.9 remote
|
|
12
|
+
npx -y deadbyte-mcp@0.15.9 remote status
|
|
13
|
+
npx -y deadbyte-mcp@0.15.9 remote restart
|
|
14
|
+
npx -y deadbyte-mcp@0.15.9 audit status
|
|
15
|
+
npx -y deadbyte-mcp@0.15.9 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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.10",
|
|
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.",
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#requires -Version 5.1
|
|
2
|
+
[CmdletBinding()]
|
|
3
|
+
param()
|
|
4
|
+
|
|
5
|
+
Set-StrictMode -Version 3.0
|
|
6
|
+
$ErrorActionPreference = 'Stop'
|
|
7
|
+
|
|
8
|
+
$RepoRoot = Split-Path -Parent $PSScriptRoot
|
|
9
|
+
Set-Location $RepoRoot
|
|
10
|
+
|
|
11
|
+
function Parse-NpmJson([string]$text) {
|
|
12
|
+
$candidates = @()
|
|
13
|
+
$b = $text.IndexOf('[')
|
|
14
|
+
$c = $text.IndexOf('{')
|
|
15
|
+
if ($b -ge 0) { $candidates += $b }
|
|
16
|
+
if ($c -ge 0) { $candidates += $c }
|
|
17
|
+
if ($candidates.Count -eq 0) { throw "No JSON found in npm output: $text" }
|
|
18
|
+
$start = ($candidates | Measure-Object -Minimum).Minimum
|
|
19
|
+
return ($text.Substring($start) | ConvertFrom-Json)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function Get-PackEntry($parsed) {
|
|
23
|
+
if ($parsed -is [System.Array]) {
|
|
24
|
+
return $parsed[0]
|
|
25
|
+
}
|
|
26
|
+
if ($parsed.PSObject.Properties['deadbyte-mcp']) {
|
|
27
|
+
return $parsed.'deadbyte-mcp'
|
|
28
|
+
}
|
|
29
|
+
if ($parsed.PSObject.Properties['files'] -or $parsed.PSObject.Properties['filename']) {
|
|
30
|
+
return $parsed
|
|
31
|
+
}
|
|
32
|
+
$props = @($parsed.PSObject.Properties)
|
|
33
|
+
if ($props.Count -gt 0) {
|
|
34
|
+
return $props[0].Value
|
|
35
|
+
}
|
|
36
|
+
return $parsed
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
Write-Host "=== [1/6] Checking package.json and bin entry ==="
|
|
40
|
+
if (-not (Test-Path "package.json" -PathType Leaf)) {
|
|
41
|
+
throw "package.json not found in $RepoRoot"
|
|
42
|
+
}
|
|
43
|
+
$pkg = Get-Content "package.json" -Raw | ConvertFrom-Json
|
|
44
|
+
$binPath = $pkg.bin.'deadbyte-mcp'
|
|
45
|
+
if ([string]::IsNullOrWhiteSpace($binPath) -or $binPath -ne 'src/deadbyte-cli.mjs') {
|
|
46
|
+
throw "package.json bin['deadbyte-mcp'] must be 'src/deadbyte-cli.mjs', found: $binPath"
|
|
47
|
+
}
|
|
48
|
+
if (-not (Test-Path $binPath -PathType Leaf)) {
|
|
49
|
+
throw "CLI entrypoint '$binPath' does not exist"
|
|
50
|
+
}
|
|
51
|
+
Write-Host " PASS: package.json bin['deadbyte-mcp'] -> $binPath"
|
|
52
|
+
|
|
53
|
+
Write-Host "`n=== [2/6] Checking npm pack --dry-run for Windows command collisions ==="
|
|
54
|
+
$dryRunJson = (& npm.cmd pack --dry-run --json 2>&1 | Out-String)
|
|
55
|
+
if ($LASTEXITCODE -ne 0) {
|
|
56
|
+
throw "npm pack --dry-run failed with exit code $($LASTEXITCODE)"
|
|
57
|
+
}
|
|
58
|
+
$parsedDry = Parse-NpmJson $dryRunJson
|
|
59
|
+
$dryEntry = Get-PackEntry $parsedDry
|
|
60
|
+
$files = $dryEntry.files
|
|
61
|
+
|
|
62
|
+
$collisionFiles = @($files | Where-Object {
|
|
63
|
+
$p = [string]$_.path
|
|
64
|
+
$p -match '^(?:package/)?DEADBYTE-MCP.*\.cmd$'
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
if ($collisionFiles.Count -gt 0) {
|
|
68
|
+
$found = ($collisionFiles | ForEach-Object { $_.path }) -join ', '
|
|
69
|
+
throw "Found forbidden root .cmd executable in package surface: $found"
|
|
70
|
+
}
|
|
71
|
+
Write-Host " PASS: Zero root DEADBYTE-MCP*.cmd collisions detected in pack dry-run"
|
|
72
|
+
|
|
73
|
+
Write-Host "`n=== [3/6] Generating test tarball in temp directory ==="
|
|
74
|
+
$testDir = Join-Path $env:TEMP ("deadbyte-pkg-verify-" + [System.Guid]::NewGuid().ToString('N').Substring(0, 8))
|
|
75
|
+
New-Item -ItemType Directory -Path $testDir -Force | Out-Null
|
|
76
|
+
try {
|
|
77
|
+
$packOut = (& npm.cmd pack --pack-destination $testDir --json 2>&1 | Out-String)
|
|
78
|
+
if ($LASTEXITCODE -ne 0) {
|
|
79
|
+
throw "npm pack failed with exit code $($LASTEXITCODE)"
|
|
80
|
+
}
|
|
81
|
+
$packParsed = Parse-NpmJson $packOut
|
|
82
|
+
$packEntry = Get-PackEntry $packParsed
|
|
83
|
+
$tarballName = [string]$packEntry.filename
|
|
84
|
+
$tarballPath = Join-Path $testDir $tarballName
|
|
85
|
+
|
|
86
|
+
if (-not (Test-Path $tarballPath -PathType Leaf)) {
|
|
87
|
+
throw "Tarball not found at $tarballPath"
|
|
88
|
+
}
|
|
89
|
+
Write-Host " PASS: Generated tarball: $tarballName"
|
|
90
|
+
|
|
91
|
+
Write-Host "`n=== [4/6] Inspecting tarball contents ==="
|
|
92
|
+
$listing = (& tar -tf $tarballPath 2>&1)
|
|
93
|
+
$tarCollisions = @($listing | Where-Object { $_ -match '^package/DEADBYTE-MCP.*\.cmd$' })
|
|
94
|
+
if ($tarCollisions.Count -gt 0) {
|
|
95
|
+
throw "Tarball contains root .cmd files: $($tarCollisions -join ', ')"
|
|
96
|
+
}
|
|
97
|
+
$hasCli = @($listing | Where-Object { $_ -eq 'package/src/deadbyte-cli.mjs' })
|
|
98
|
+
if ($hasCli.Count -eq 0) {
|
|
99
|
+
throw "Tarball missing package/src/deadbyte-cli.mjs"
|
|
100
|
+
}
|
|
101
|
+
Write-Host " PASS: Tarball contains src/deadbyte-cli.mjs and no root collision .cmd files"
|
|
102
|
+
|
|
103
|
+
Write-Host "`n=== [5/6] Testing local direct node CLI invocation ==="
|
|
104
|
+
$verOut = (& node (Join-Path $RepoRoot "src/deadbyte-cli.mjs") --version 2>&1 | Out-String).Trim()
|
|
105
|
+
if ($verOut -ne [string]$pkg.version) {
|
|
106
|
+
throw "Direct node CLI version mismatch: expected $($pkg.version), got $verOut"
|
|
107
|
+
}
|
|
108
|
+
Write-Host " PASS: Direct node CLI version matches $($pkg.version)"
|
|
109
|
+
|
|
110
|
+
Write-Host "`n=== [6/6] Testing clean-directory external npx execution ==="
|
|
111
|
+
Push-Location $testDir
|
|
112
|
+
try {
|
|
113
|
+
$origEap = $ErrorActionPreference
|
|
114
|
+
$ErrorActionPreference = 'SilentlyContinue'
|
|
115
|
+
$rawOut = (cmd.exe /c "npx.cmd --yes --package `"$tarballPath`" deadbyte-mcp --version 2>nul")
|
|
116
|
+
$exitCode = $LASTEXITCODE
|
|
117
|
+
$ErrorActionPreference = $origEap
|
|
118
|
+
|
|
119
|
+
if ($exitCode -ne 0) {
|
|
120
|
+
throw "npx execution failed with exit code $exitCode"
|
|
121
|
+
}
|
|
122
|
+
$npxVer = ($rawOut | Out-String).Trim()
|
|
123
|
+
$lastLine = ($npxVer -split '\r?\n')[-1].Trim()
|
|
124
|
+
if ($lastLine -ne [string]$pkg.version) {
|
|
125
|
+
throw "npx local tarball version mismatch: expected $($pkg.version), got $lastLine"
|
|
126
|
+
}
|
|
127
|
+
Write-Host " PASS: npx local tarball returned $($pkg.version) in isolated directory"
|
|
128
|
+
} finally {
|
|
129
|
+
Pop-Location
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
Write-Host "`n========================================================"
|
|
133
|
+
Write-Host "PACKAGE_VERIFICATION_PASS: All package hygiene and execution checks passed!"
|
|
134
|
+
Write-Host "========================================================"
|
|
135
|
+
|
|
136
|
+
} finally {
|
|
137
|
+
Remove-Item -LiteralPath $testDir -Recurse -Force -ErrorAction SilentlyContinue
|
|
138
|
+
}
|
package/src/skill-plane-r44.mjs
CHANGED
|
@@ -170,19 +170,24 @@ export async function createSkillPlane({root,verifyKeyPath}={}){
|
|
|
170
170
|
async function list(){
|
|
171
171
|
const names=(await readdir(rootReal)).sort((a,b)=>a.localeCompare(b,'en'));
|
|
172
172
|
const skills=[];
|
|
173
|
+
const invalid_skills=[];
|
|
173
174
|
for(const name of names){
|
|
174
175
|
const full=path.join(rootReal,name);
|
|
175
176
|
const st=await lstat(full);
|
|
176
177
|
insist(st.isDirectory()&&!st.isSymbolicLink(),`skill registry contains non-directory entry: ${name}`);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
178
|
+
try{
|
|
179
|
+
const item=await verified(name);
|
|
180
|
+
skills.push({
|
|
181
|
+
name:item.body.name,version:item.body.version,description:item.body.description,audience:item.body.audience,
|
|
182
|
+
manifest_sha256:item.envelope.manifest_sha256,required_capabilities:item.requiredCapabilities,
|
|
183
|
+
authority_planes:item.authorityPlanes,resource_count:item.resources.length,provenance:item.body.provenance,verified:true
|
|
184
|
+
});
|
|
185
|
+
}catch(error){
|
|
186
|
+
invalid_skills.push({name,error:String(error),verified:false});
|
|
187
|
+
}
|
|
183
188
|
}
|
|
184
189
|
const registrySha=sha(Buffer.from(canonicalJson(skills.map(item=>({name:item.name,manifest_sha256:item.manifest_sha256}))),'utf8'));
|
|
185
|
-
return {status:'ok',skills,registry_sha256:registrySha,verify_key_id:keyId};
|
|
190
|
+
return {status:'ok',skills,invalid_skills,registry_sha256:registrySha,verify_key_id:keyId};
|
|
186
191
|
}
|
|
187
192
|
async function load({name}={}){
|
|
188
193
|
const item=await verified(name);
|
package/src/version.mjs
CHANGED
|
@@ -4,6 +4,7 @@ import { readFile } from 'node:fs/promises';
|
|
|
4
4
|
import { spawnSync } from 'node:child_process';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { DEADBYTE_VERSION } from '../src/version.mjs';
|
|
7
8
|
|
|
8
9
|
const root=path.resolve(fileURLToPath(new URL('..',import.meta.url)));
|
|
9
10
|
const packagePath=path.join(root,'package.json');
|
|
@@ -21,7 +22,7 @@ test('npx CLI reports the canonical package version through --version, -v and ve
|
|
|
21
22
|
for(const arg of ['--version','-v','version']){
|
|
22
23
|
const result=spawnSync(process.execPath,[cliPath,arg],{cwd:root,encoding:'utf8',windowsHide:true});
|
|
23
24
|
assert.equal(result.status,0,result.stderr);
|
|
24
|
-
assert.equal(result.stdout.trim(),
|
|
25
|
+
assert.equal(result.stdout.trim(),DEADBYTE_VERSION);
|
|
25
26
|
}
|
|
26
27
|
});
|
|
27
28
|
|
|
@@ -50,6 +51,6 @@ test('npx CLI exposes local supervisor lifecycle without any supervisor arm comm
|
|
|
50
51
|
|
|
51
52
|
test('README makes npx the primary operator UX',async()=>{
|
|
52
53
|
const readme=await readFile(path.join(root,'README.txt'),'utf8');
|
|
53
|
-
assert.match(readme
|
|
54
|
-
assert.match(readme
|
|
54
|
+
assert.match(readme,new RegExp(`npx -y deadbyte-mcp@${DEADBYTE_VERSION.replace(/\./g,'\\.')} remote`));
|
|
55
|
+
assert.match(readme,new RegExp(`npx -y deadbyte-mcp@${DEADBYTE_VERSION.replace(/\./g,'\\.')} audit verify`));
|
|
55
56
|
});
|
package/test/core.test.mjs
CHANGED
|
@@ -14,6 +14,7 @@ import { PROOF_EXECUTION_POLICY } from '../src/operation-policy.mjs';
|
|
|
14
14
|
import { createRequestIdentity, validateRequestIdentity } from '../src/request-identity.mjs';
|
|
15
15
|
import { generateTrustKeypair } from '../src/trust.mjs';
|
|
16
16
|
import { verifyReceipt } from '../src/verifier.mjs';
|
|
17
|
+
import { DEADBYTE_VERSION } from '../src/version.mjs';
|
|
17
18
|
|
|
18
19
|
const verifierCli = fileURLToPath(new URL('../src/verifier-cli.mjs', import.meta.url));
|
|
19
20
|
|
|
@@ -105,7 +106,7 @@ test('proof execution creates deterministic output and signed verifiable receipt
|
|
|
105
106
|
assert.equal(result.receipt.request.schema, 'deadbyte.request.v1');
|
|
106
107
|
assert.match(result.receipt.request.nonce, /^[0-9a-f]{64}$/);
|
|
107
108
|
assert.match(result.receipt.request.sha256, /^[0-9a-f]{64}$/);
|
|
108
|
-
assert.equal(result.receipt.runtime.package_version,
|
|
109
|
+
assert.equal(result.receipt.runtime.package_version, DEADBYTE_VERSION);
|
|
109
110
|
assert.match(result.receipt.runtime.mcp_ingress_adapter, /^(?:none|tunnel-stdio-probe-compat-v1)$/);
|
|
110
111
|
assert.match(result.receipt.runtime.mcp_ingress_adapter_sha256, /^[0-9a-f]{64}$/);
|
|
111
112
|
assert.match(result.receipt.runtime.mcp_ingress_mode_source_sha256, /^[0-9a-f]{64}$/);
|
|
@@ -2,6 +2,7 @@ import test from 'node:test';
|
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
3
|
import { readFile } from 'node:fs/promises';
|
|
4
4
|
import { createHash } from 'node:crypto';
|
|
5
|
+
import { DEADBYTE_VERSION } from '../src/version.mjs';
|
|
5
6
|
|
|
6
7
|
const root=new URL('../',import.meta.url);
|
|
7
8
|
const text=rel=>readFile(new URL(rel,root),'utf8');
|
|
@@ -9,7 +10,7 @@ const PARENT_RELEASE='v0.15.2-0fb46542f6a4345f';
|
|
|
9
10
|
const PARENT_MANIFEST='0fb46542f6a4345f1c527565d06bf6e9b8e283260e47bf684fb70a60308fcf34';
|
|
10
11
|
const PARENT_GENERATION='00cde7bf540cc2804d679a39040d5b07193c5f8a0d49cac3b882402f8f4e6ad8';
|
|
11
12
|
|
|
12
|
-
test('R46 current authority agrees on
|
|
13
|
+
test('R46 current authority agrees on the package release version and preserves exact V0.15.2 parent identity',async()=>{
|
|
13
14
|
const pkg=JSON.parse(await text('package.json'));
|
|
14
15
|
const release=JSON.parse(await text('RELEASE.json'));
|
|
15
16
|
const [version,controller,gate,readme,architecture,controllerReadme,deferred,parity,closure,closureVerify,windowsGate,processPolicy]=await Promise.all([
|
|
@@ -27,7 +28,7 @@ test('R46 current authority agrees on V0.15.5 and preserves exact V0.15.2 parent
|
|
|
27
28
|
text('controller/deadbyte-process-policy.json')
|
|
28
29
|
]);
|
|
29
30
|
|
|
30
|
-
assert.equal(pkg.version,
|
|
31
|
+
assert.equal(pkg.version,DEADBYTE_VERSION);
|
|
31
32
|
assert.equal(pkg.scripts['gate:windows'],'powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r46.ps1');
|
|
32
33
|
assert.equal(pkg.scripts['self-update:deferred'],'node scripts/deferred-slot-operation-r46.mjs');
|
|
33
34
|
assert.equal(pkg.scripts['release:parity'],'node scripts/release-parity-r46.mjs');
|
|
@@ -36,7 +37,7 @@ test('R46 current authority agrees on V0.15.5 and preserves exact V0.15.2 parent
|
|
|
36
37
|
assert.equal(pkg.scripts['r46:fileless:test'],"node --test --test-concurrency=1 test/process-policy.test.mjs test/process-policy-refresh.test.mjs test/release-generation.test.mjs test/process-runtime.test.mjs test/process-mcp-tools.test.mjs test/compact-gateway-r36.test.mjs test/capability-ledger-r36.test.mjs test/remote-device-r44.test.mjs test/observation-runtime.test.mjs test/observation-mcp-tools.test.mjs");
|
|
37
38
|
assert.equal(pkg.scripts['r46:full:test'],'node scripts/full-regression-r46.mjs');
|
|
38
39
|
|
|
39
|
-
assert.match(version
|
|
40
|
+
assert.match(version,new RegExp(`DEADBYTE_VERSION = '${DEADBYTE_VERSION.replace(/\./g,'\\.')}'`));
|
|
40
41
|
assert.match(controller,/CONTROLLER V0\.15\.5 \/ R46/);
|
|
41
42
|
assert.match(gate,/DEADBYTE V0\.15\.5 \/ R46 FILELESS POWERSHELL WINDOWS BATCH GATE: PASS/);
|
|
42
43
|
assert.match(readme,/^DEADBYTE MCP V0\.15\.5 \/ R46 FILELESS POWERSHELL PRODUCT BASELINE$/m);
|
|
@@ -59,7 +60,7 @@ test('R46 current authority agrees on V0.15.5 and preserves exact V0.15.2 parent
|
|
|
59
60
|
assert.match(closureVerify,/DEADBYTE-R46-FINAL-CLOSURE-V1/);
|
|
60
61
|
assert.match(windowsGate,/deadbyte\.r46-windows-gate\.v1/);
|
|
61
62
|
|
|
62
|
-
assert.equal(release.version,
|
|
63
|
+
assert.equal(release.version,DEADBYTE_VERSION);
|
|
63
64
|
assert.equal(release.train,'R46');
|
|
64
65
|
assert.equal(release.label,'FILELESS POWERSHELL PRODUCT BASELINE');
|
|
65
66
|
assert.equal(release.parent.release_id,PARENT_RELEASE);
|
|
@@ -61,6 +61,26 @@ test('R44 skill catalog is metadata-only and load is signature/content bound',as
|
|
|
61
61
|
}finally{await rm(f.root,{recursive:true,force:true});}
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
+
test('R44 skill plane reports malformed registry entries without hiding valid skills',async()=>{
|
|
65
|
+
const f=await fixture();
|
|
66
|
+
try{
|
|
67
|
+
await installSkill(f,{name:'good-skill'});
|
|
68
|
+
await installSkill(f,{name:'broken-skill'});
|
|
69
|
+
const broken=path.join(f.registry,'broken-skill','skill.json');
|
|
70
|
+
const envelope=JSON.parse(await readFile(broken,'utf8'));
|
|
71
|
+
envelope.body.description='tampered without resigning';
|
|
72
|
+
await writeFile(broken,JSON.stringify(envelope,null,2)+'\n','utf8');
|
|
73
|
+
const plane=await createSkillPlane({root:f.registry,verifyKeyPath:f.keys.publicKeyPath});
|
|
74
|
+
const listed=await plane.list();
|
|
75
|
+
assert.equal(listed.status,'ok');
|
|
76
|
+
assert.deepEqual(listed.skills.map(item=>item.name),['good-skill']);
|
|
77
|
+
assert.equal(listed.invalid_skills.length,1);
|
|
78
|
+
assert.equal(listed.invalid_skills[0].name,'broken-skill');
|
|
79
|
+
assert.match(listed.invalid_skills[0].error,/body hash mismatch/);
|
|
80
|
+
assert.equal(listed.invalid_skills[0].verified,false);
|
|
81
|
+
}finally{await rm(f.root,{recursive:true,force:true});}
|
|
82
|
+
});
|
|
83
|
+
|
|
64
84
|
test('R44 skill plane fails closed on SKILL.md and resource tampering',async()=>{
|
|
65
85
|
const f=await fixture();
|
|
66
86
|
try{
|
package/DEADBYTE-MCP-local.cmd
DELETED