deadbyte-mcp 0.15.5 → 0.15.7
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 +23 -6
- package/docs/V085-R47-JEV-DECISION-PLANE.md +1 -0
- package/package.json +1 -1
- package/scripts/archive-source-zips.mjs +1 -0
- package/scripts/build-combined-skill.mjs +146 -0
- package/scripts/deploy-r47.mjs +27 -0
- package/scripts/disarm-host-for-update-r47.mjs +3 -0
- package/scripts/find-internet-skill-finder-zip-r47.mjs +1 -0
- package/scripts/list-source-zips.mjs +3 -0
- package/scripts/npm-publish-r47.ps1 +22 -0
- package/scripts/npm-release-r47.mjs +39 -0
- package/scripts/probe-source-zips.mjs +1 -0
- package/scripts/probe-zips.mjs +1 -0
- package/scripts/read-source-zips.mjs +5 -0
- package/scripts/remove-source-archives-r47.mjs +1 -0
- package/scripts/repair-builder-template.mjs +1 -0
- package/scripts/run-skill-creator-scaffold.mjs +1 -0
- package/scripts/wait-r47-handoff.mjs +1 -0
- package/src/autonomous-runtime.mjs +20 -1
- package/src/jev-decision-plane.mjs +128 -0
- package/src/skill-plane-r44.mjs +2 -0
- package/src/version.mjs +1 -1
- package/test/jev-decision-plane.test.mjs +63 -0
- package/test/skill-plane-r44.test.mjs +1 -0
- /package/{DEADBYTE-MCP.cmd → DEADBYTE-MCP-local.cmd} +0 -0
package/MANIFEST.SHA256
CHANGED
|
@@ -52,11 +52,11 @@ 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
|
|
55
56
|
101e613518c73c6aa31c725fe1b5f9a24c995dc9876b7b28e1f3e97ac9f8d362 DEADBYTE-MCP-R27-FINAL/R27-ADMIN-CLOSURE.json
|
|
56
57
|
e9baf9abf4410ff8bd0f68e6b957dbbf9790fc88d9126311c5c135e943424952 DEADBYTE-MCP-R27-FINAL/R27-CLEANUP-FINAL-RECEIPT.json
|
|
57
58
|
39cb483c0897af5027bf1790a35a4c3b9a8cd5f6e3a2e0440787615f69cd14b2 DEADBYTE-MCP-R27-FINAL/R27-FINAL-CLOSURE.json
|
|
58
59
|
9aaf6d07e7511a1f0046ee8cc731d4b9660bbbf47dcea785a9c6b6cec95640bc DEADBYTE-MCP-R27-FINAL/R27-SLOT-UPDATE-RECEIPT.json
|
|
59
|
-
70dfccba12797ce5fea60668c97026cf71e7942cb4d886cac5853e05b362b6c1 DEADBYTE-MCP.cmd
|
|
60
60
|
7994082e4340b5f43272e8cb111ce54043af64dc3a04d5279e251f3dae16f654 docs/ADR-0001-PRODUCTION-BASELINE-SEAMS.md
|
|
61
61
|
c945b519454c6cb4c89a2b432a3f7ad29a5e7d4bc1db638972104f0093639b18 docs/ARCHITECTURE.md
|
|
62
62
|
3f455f407933d8e044682f3415bdb51e68d7c4b508411dda7d8ed65b6e1d7e79 docs/AUTHORITY.md
|
|
@@ -95,6 +95,7 @@ c3d651efa0355e88f6ab4f1978ef581058646b9d82a10ca6641294a191a882fa docs/V081-R25-
|
|
|
95
95
|
ed23ebd2512563d45fb200706ec7b887781ed39c4e9836ef0e81af2b81db2b61 docs/V083-R27-IMMUTABLE-RELEASE-SLOTS.md
|
|
96
96
|
c40cba16657dad75b2380876d8eeaa0bc81ad68b1a4bd20876442874e92caab7 docs/V084-R28-PERSISTENT-NAMED-TUNNEL.md
|
|
97
97
|
9ac697e2b85ee2f2bb981274e8efd0ff91b25c316eebd491911c8949435e1443 docs/V085-R29-MACHINE-IDENTITY.md
|
|
98
|
+
18c0403516fda2d7fd135663a5b8b1d3ec29da16229dcb846d742870d6874fad docs/V085-R47-JEV-DECISION-PLANE.md
|
|
98
99
|
f31bcbc42ef171de27d19369a6012dc31f0d8c50b67add9b2f195235f300619c harness/r42-agent-evals.json
|
|
99
100
|
b9870c5f3057712b178d65b1627c02874f178d9048e11fc3dca693a2caa073a4 harness/task-contract.schema.json
|
|
100
101
|
3c6e49fda86d80e372403746e4be9c2c3506f1298de5fc4bc3832673dfc92f3b mcp-server.mjs
|
|
@@ -1328,7 +1329,7 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
|
|
|
1328
1329
|
f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
|
|
1329
1330
|
51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
|
|
1330
1331
|
3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
|
|
1331
|
-
|
|
1332
|
+
c2e60730f0406fc7dac480a0fe96f4e9b221d6937a43cc646b74ca0b99200a97 package.json
|
|
1332
1333
|
8177e3a354721a73df889f386a97e7744a2e017d150aecf4bf309f5177d18690 proof/CONTAINMENT-BUILD.txt
|
|
1333
1334
|
a8efa13e44ff50902aee64cfca542d19605a1ae23db95280ad2d44b324f3eae7 proof/MCP-SMOKE-STATUS.txt
|
|
1334
1335
|
7c115069cc4a343ca21b0ebdee74bd8f544b02d4aa906ffa13308725825d891a proof/NODE-SYNTAX.txt
|
|
@@ -1400,9 +1401,11 @@ d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.jso
|
|
|
1400
1401
|
4c490e8bcc0c2ea977a8f839cde247680bead95f6bbfb90d9a98b4f0e4eb8921 RELEASE.json
|
|
1401
1402
|
507a42441c8fbb0b1bef63a13fad9e1680262cd6d34cc176b7ed0c5423ddbcc7 SBOM.cdx.json
|
|
1402
1403
|
bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
|
|
1404
|
+
8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
|
|
1403
1405
|
1d4e9dee6f0669bd825334a6a72e13ee85ee29ab430dcef21d893ffd744774b5 scripts/autonomous-benchmark.mjs
|
|
1404
1406
|
34f9318b6f4afb29948fdc5ab973edca4dfc4fbd63c9a5105478b5e95812dabf scripts/autonomous-build.ps1
|
|
1405
1407
|
075acd7616740135973497d676dcd0431f0437bdba87e4eedba4751cb148ff02 scripts/autonomous-tests.ps1
|
|
1408
|
+
70bccc3572de7e26ac91154b9d87185feab0c2dbfc4cbd40f89660e5769f53b0 scripts/build-combined-skill.mjs
|
|
1406
1409
|
92f23292ce358af88e6c42e126791c57b25d2b0689c538940d8c0745b7447d4e scripts/build-containment.ps1
|
|
1407
1410
|
f29c45250e58c5bfbf60089c17317845b6d8e3ef4a4874a37b7ed28538072ca7 scripts/build-desktop-r40.ps1
|
|
1408
1411
|
b2a3bd0238953842b0d090dd8405b925e21042b77d9f8286aacc8a5f65d5aed3 scripts/build-hardware-r45.ps1
|
|
@@ -1426,9 +1429,11 @@ a64b6779eff80d68d90d238dee7f2feda5ada3c5c59bcaeae2ab7812bd28404e scripts/deferr
|
|
|
1426
1429
|
751632aeb2e56b093f9589897bbe7e874db61e9238a13bd1506bde2df0b706e9 scripts/deferred-slot-operation-r45.mjs
|
|
1427
1430
|
d4710039ceff7380f3b6a0040ad118a81eabdda2706c459f9b81f8e08978fba4 scripts/deferred-slot-operation-r46.mjs
|
|
1428
1431
|
34116370895aeff9a424475558f4aca3b05460146455d9bb0bafcacd1a270910 scripts/deferred-slot-operation.mjs
|
|
1432
|
+
cabea0b3dbfccc2b24f276f8ccba9bffa9b006497eaedc83c7dd04875aa82e4d scripts/deploy-r47.mjs
|
|
1429
1433
|
2cc7a37231f8836a48c3bf4024887f38c10bfc89296ac483e4b98b3f18281933 scripts/derive-r45-parent.mjs
|
|
1430
1434
|
67221c5619019a9d19611432d4361c99c365f14e89483e4c8f78451839960176 scripts/derive-r45-release.mjs
|
|
1431
1435
|
87c6acc0df96a6e8bb6692bc7b12e8b386196a80cba554d9b214ff8bb12147fe scripts/derive-r45-tests.mjs
|
|
1436
|
+
899de2ec448597d2a7432f4c25a2c2b7002e19a9297af42acc8a90cb6d37a72b scripts/disarm-host-for-update-r47.mjs
|
|
1432
1437
|
a66155921f249a960d83ba1c79b2ab255b6e8b148197498a1d184644818a0e77 scripts/extract-r46-failures.mjs
|
|
1433
1438
|
69e3beb55573b5fc3ba30a220fabf9e3585e7757430fb3264caf27e41254b789 scripts/final-closure-r36.mjs
|
|
1434
1439
|
4b7dce462db12237e9f3bb8637e703689140c16e5ddd8bf08b41f8a4b35de95d scripts/final-closure-r37-0110.mjs
|
|
@@ -1457,6 +1462,7 @@ c1a16ed8b9e3bde9622d288e7274d7677eec7fa1783cbb090fb8df96db3d6e2a scripts/final-
|
|
|
1457
1462
|
d329183a7bb564879563e6341d232d3b6c99ffc45f27ed0b0f0705004f5475ad scripts/finalize-r43.mjs
|
|
1458
1463
|
6b2096cf5a42c333e47c3cbf583ead93965fbe313a58c29c0a929edc0dd211f2 scripts/finalize-r44.mjs
|
|
1459
1464
|
c1f063bb6918bf7cfacdf4b0c6a5d429ac8978a48b436e10797157992856ab94 scripts/finalize-r45.mjs
|
|
1465
|
+
a51799081afabecca7dd576689fe09afef51f9d17fbfd38ffe6f5849f9441442 scripts/find-internet-skill-finder-zip-r47.mjs
|
|
1460
1466
|
41fa45fe6d75356d1600aa1a8fcc10db776ed9ca0f9db05de3d5e695f7f7d139 scripts/full-regression-r43.mjs
|
|
1461
1467
|
519c586d7c462b34989c28f41f6e7af868a316ea3cda6ed7ec6b9ec16773b55d scripts/full-regression-r44.mjs
|
|
1462
1468
|
26d14418f441672a843e85236583d83c5001b89a9dac2aa1ed94b04c4c0562de scripts/full-regression-r45.mjs
|
|
@@ -1478,8 +1484,13 @@ a0ad824eed1d8be051d5f731579f9bf4115b311f202b75ea0d03aa257b13a671 scripts/gate-w
|
|
|
1478
1484
|
1f076a5d55616027d7a272c860118fb437f67a629cf4aa4258f1d4acd56043c7 scripts/init-host-policy.ps1
|
|
1479
1485
|
1a771b5b8a62d57f26762d53472ed68a3e733674b1c91e08becf0dc2e4325039 scripts/inspect-active-release-r45.mjs
|
|
1480
1486
|
de6142bd5693cf4edb8725c9c43fc77e9bdc12f5b398a757006d778d3ee3f8ed scripts/inspect-r46-active.mjs
|
|
1487
|
+
7ea8cf6bf094a1612603bc716228a3753e5f06fca8a0684d2da15a04d0710c64 scripts/list-source-zips.mjs
|
|
1488
|
+
50b333bf712062e951bcc933ebf1a0c3a761132e4ff736f1fc57a452e9cc50db scripts/npm-release-r47.mjs
|
|
1489
|
+
453dd636b452f4343a36f31a93a763e97f58ed5d6c9df3d2ba05b236934a3a1f scripts/probe-source-zips.mjs
|
|
1490
|
+
8f9d97a4d23e9d05e7cadfb6a519b1ddb9da04894bca98bdc293fc3797e8423c scripts/probe-zips.mjs
|
|
1481
1491
|
e19a1d591ccd07af2e87d930ce23b0cc9b814bc2a395408045543847154097d7 scripts/r40-compact-ledger-probe.mjs
|
|
1482
1492
|
68b9a60aca3f3e3e9ec239710f8368594ef3c8a98fff0816d2e9a7950df48287 scripts/r47-core-failures.mjs
|
|
1493
|
+
38ff2864fb657f7c7b9970db9db153d8b29be89184ba8b234c47ce02ce3078d0 scripts/read-source-zips.mjs
|
|
1483
1494
|
bec6b4e8eb554e579db60af6f2acc1714e6a615926c55886b56e62fdc9dd1249 scripts/refresh-process-policy.mjs
|
|
1484
1495
|
f549bb7642ac7c38d735952f4c97cfe393a6ba1b049d1664f501761090086d76 scripts/release-manifest.mjs
|
|
1485
1496
|
2272ceab04fba9030fe3dad5ccb14b8313f7dea963873ca64a86945608b6e7fb scripts/release-parity-r36.mjs
|
|
@@ -1503,9 +1514,12 @@ cf22007de7774404b2baaa5741771b4fb19926c78254c3d72d9d39bec25f50f2 scripts/releas
|
|
|
1503
1514
|
d42efb6dd8e6abc79c66e768f8c0feb10fa3341bcce0888750461f56612f0fd3 scripts/release-parity-tests-r45.ps1
|
|
1504
1515
|
4c8ff3df2d3c5bb06984be8887381f29d87c468c6a0c87db7ba623717907e79a scripts/release-parity-tests.ps1
|
|
1505
1516
|
1b83f49d9798188533c8cfca0030a98af34560fe181b3e593db790319e1b7bc5 scripts/release-parity.mjs
|
|
1517
|
+
21ddee002ddfc1d7c34bf92a4cc02abac38630c4814366216efda66217db6baa scripts/remove-source-archives-r47.mjs
|
|
1518
|
+
817c2f5ce7f2c935a268e16f4a2d8b8611ddf89df8776682082baafb63a84921 scripts/repair-builder-template.mjs
|
|
1506
1519
|
fb6e47bf46f86887bcbde703b2618ead594ba430a6faf298be6b34432a87e030 scripts/run-r46-full-regression-background.mjs
|
|
1507
1520
|
46751fc8c4f25329c235e1946c662f33c23c46428d4075a2f7c9543c801c5cfd scripts/run-r46-windows-gate-background.mjs
|
|
1508
1521
|
cabfa63d5edb83f32b3e6e5ce22e76223644d81a3361d52a28de2dbc07e59a54 scripts/run-r46-windows-gate-background.ps1
|
|
1522
|
+
abf8ac3074e8964c9648b5b60069730c255faa5f4169f3aefc7a9eff350a1efc scripts/run-skill-creator-scaffold.mjs
|
|
1509
1523
|
caac2867971dfdf56456528b816ff56282a11cbba81510c13e1723accffac678 scripts/runtime-self-update.mjs
|
|
1510
1524
|
b0cc75c38e0163dbcf7fb1b0d21f2dc34c71f2d0e2a156a53e570ff84afc64e6 scripts/semantic-preflight.ps1
|
|
1511
1525
|
0a115aa9829576c86cc247f754cae69ae09ba146b637d3a1c9fbc16420d20a5d scripts/tool-surface-snapshot.mjs
|
|
@@ -1515,6 +1529,7 @@ e64878a14b5bf1eb22a011abe0ca2d6ff58c5c22b08cf6e01170ce1e1bf8ea91 scripts/verify
|
|
|
1515
1529
|
4896279b3f855ad0f20288fbab36717e4b2040dc0c4fca31232d5b1d5de1c166 scripts/verify-r43-parent.mjs
|
|
1516
1530
|
ac538a9bdf7dd1594833b5ec6873651a0949128dffe45b8a422f06aaffc1951c scripts/verify-r44-parent.mjs
|
|
1517
1531
|
236abbb55c61a2ae2520a37710ef390450550ff82fb68b662f709905f1fea5b8 scripts/verify-r45-parent.mjs
|
|
1532
|
+
90f42a1791b60b4f164e3c960c70c09906fd44310e8d814932ea9e84fcb918ee scripts/wait-r47-handoff.mjs
|
|
1518
1533
|
eb59d412712270bedc33bcdabd65fe9c31994339858a4947d0dc4bac371256fc scripts/windows-gate-evidence-r36.mjs
|
|
1519
1534
|
ea68d948b9e3bf155b7782b5745d75d98c142a199785ba52840aff7d2272ea17 scripts/windows-gate-evidence-r37-0110.mjs
|
|
1520
1535
|
3d7c5092b080cae079607e5f741edd5c106117b962b0ebdc2c647431517a2282 scripts/windows-gate-evidence-r38.mjs
|
|
@@ -1553,7 +1568,7 @@ ff05f616bdcd6552affca58bf26459b899a467782f012c07f6a54da6df4e496f src/autonomous
|
|
|
1553
1568
|
1228a83490a35a656bea9a3e2f814a13d9f568d86b0738279ca9d1a3602bce92 src/autonomous-planner.mjs
|
|
1554
1569
|
5a85c30f9b4e30a9a366a738298928fe074e0cc6c82dc328ab85745c145f7bf4 src/autonomous-policy.mjs
|
|
1555
1570
|
f9bf3b46e4b32ab7dd7864c646809e13fea64f72accf114929588dac7dc82014 src/autonomous-progress.mjs
|
|
1556
|
-
|
|
1571
|
+
ffde3dbd761d7e642a03f0cab506a38e38fc60dcb505557c5c01279629696d57 src/autonomous-runtime.mjs
|
|
1557
1572
|
5c2fc073cc989121f775735600e96809ec2a51bf4167c877a263f54f2aa9a680 src/autonomous-supervisor-host.mjs
|
|
1558
1573
|
b3fbc640f5edca562ffc1f5b1d455762525baa644996ff34e92e825f98bfc82a src/autonomous-supervisor.mjs
|
|
1559
1574
|
61de686111e5b5d24ceb1e2adc8da175d69a4f22af08691c4edaea1c763cf859 src/autonomous-timeout-recovery.mjs
|
|
@@ -1603,6 +1618,7 @@ f89acac9935ec9e757ee611893d1ffbe04ae3c2a03c43feb87af0427da39e830 src/fuzzy-sear
|
|
|
1603
1618
|
880e942358ba4fae2139027f924b79045a7cc90c775b09761d35cd5e411b005f src/host-plane.mjs
|
|
1604
1619
|
cd00584f346160c8ad16b4dcf64b3fb6499668f3bc299c199b67f53caa995746 src/ingress-mode.mjs
|
|
1605
1620
|
e1afae872e4252a4002032f1610033d41f5224896b0b06be077f54b267ed4f4f src/invocation.mjs
|
|
1621
|
+
12c5347b87bf7b42276a1c3fef4c3d7271c06219c653cf55b95612d0f9bc7913 src/jev-decision-plane.mjs
|
|
1606
1622
|
9efb25c69ecb0cf5778483d24a3944d2f08f52ebcbd271a212e89189add50167 src/job-supervisor-host-r44.mjs
|
|
1607
1623
|
532fbd7d5402bb9d65b81a1efdfa9ea1d7292d96e1d9c2d1e8d40ccc52af2670 src/lsp-stdio-client.mjs
|
|
1608
1624
|
6856b81e8aab42d144b88d0c4be5b2b4c9ad7e51b5bb36d2d4e8fd134935ae56 src/machine-fs-mcp-tools.mjs
|
|
@@ -1676,7 +1692,7 @@ fc5407ef8338ebeeede16225b3249166dc4d45e903d873eb46c15c3df07dc9ad src/semantic-b
|
|
|
1676
1692
|
17472b07dbfc1f6eff6831d79926a526e668ed0278cacbf9b4c421019174f505 src/semantic-lsp-backend.mjs
|
|
1677
1693
|
a14cb827602d74f7c9822098815add8bf1ab6b27598d22b44880c8c98e754c1b src/semantic-lsp-config.mjs
|
|
1678
1694
|
3fc8d3786b981ec173e7ff634f117c1464e3e80f13cf471bd5e0fa38e4d4ac3b src/skill-mcp-tools-r44.mjs
|
|
1679
|
-
|
|
1695
|
+
4c3523126e3056ef1f30bc0f162c396868fca96d3ad8df2e7a0f5ae573a6f31d src/skill-plane-r44.mjs
|
|
1680
1696
|
3dc2102335cd1e86ee52a11950f80ff6e1771f4291325d4f95a8ea2b849617cc src/stdio-console-guard.mjs
|
|
1681
1697
|
6dccdb538be9783276399a5ad2cce54b1f0d8cc305fd58bee9f0f46d6a412af6 src/text-policy.mjs
|
|
1682
1698
|
144c75f8e8a4c2a182db82642475359459e5c108b2a4cecd80488bea1e6ab3bb src/tool-audit.mjs
|
|
@@ -1687,7 +1703,7 @@ bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init
|
|
|
1687
1703
|
16df134040e3ff1e73df722b568d3e8ac0a6923b097696cead7580da75aa8d2a src/tunnel-stdio-compat.mjs
|
|
1688
1704
|
642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
|
|
1689
1705
|
8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
|
|
1690
|
-
|
|
1706
|
+
0ce4c08618f4e846d6c978e5d5b39229130d786c3b17c737dcf02010434d5afb src/version.mjs
|
|
1691
1707
|
7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
|
|
1692
1708
|
76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
|
|
1693
1709
|
4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
|
|
@@ -1845,6 +1861,7 @@ f95c920ee2b24d5ec940a9bae277771562ce275556bd89f0071f183b13c154b8 test/fixtures/
|
|
|
1845
1861
|
981e9bc8cad0635ac280f0ad494b86adea6d714d575234d5423d2eed7a511d55 test/host-inline-r45.test.mjs
|
|
1846
1862
|
e80f4172b400f126d0280eba53ffcc748597442ef57c4a62b3fd6f76c27e5fdc test/host-plane.test.mjs
|
|
1847
1863
|
1205e33a1924dcc33a18372f0c973076fff39e99203a671b39d14269d51b2999 test/human-clarification-r42.test.mjs
|
|
1864
|
+
682096cf689608970adce4ecb35b63d953dec5d3e152f9430871054bb41310a4 test/jev-decision-plane.test.mjs
|
|
1848
1865
|
b12322450d23f44513b02d2c54f216520f392bf76e221af22fdcb5a11261ec3d test/lsp-stdio-client.test.mjs
|
|
1849
1866
|
af1716b6b831eabe8f43e1276b85519c3cedee9ecb98d261033ac3f5e6f84166 test/machine-fs-mcp-tools.test.mjs
|
|
1850
1867
|
6eae806805d59a844e27ff410313874bc263c84a84d83dc166b442448092c3be test/machine-fs-runtime.test.mjs
|
|
@@ -1928,7 +1945,7 @@ abfbc97af4a3337694f2362c00da24fd2a06b526ba324e04d0d0816197c75595 test/semantic-
|
|
|
1928
1945
|
1a3567cd485f127ff66f8e0f39c4a66eeb29d0a8d417173040764ff072907927 test/semantic-runtime-routing.test.mjs
|
|
1929
1946
|
27e2bf4ffd18c51cd2b62dfca836fb24288a75ff8a7f55ed9d45f5ba0dd1578a test/semantic-server-config-integration.test.mjs
|
|
1930
1947
|
7f9b1e4f2f53d20386b721b57490c43268954982cff4522da26b1acdac2cb23a test/skill-mcp-r44.test.mjs
|
|
1931
|
-
|
|
1948
|
+
b59577750bce1dbff3058716c5107517312eb1b0a1b24220dba6702fed573bf2 test/skill-plane-r44.test.mjs
|
|
1932
1949
|
a98537d1136988251572f424b29ff8f798356dcfd9a7a1d4238a9c7e943e6a52 test/standing-grants.test.mjs
|
|
1933
1950
|
2c8ad3d273965fa6f7ba2f3aa1ee50791a28f4dcf6dfc8cd8d73510f2577f9f9 test/task-contract-r42.test.mjs
|
|
1934
1951
|
6ecc712b7bcb2abdb934e7d40232ed97ac355f3f47665f557c2168b04d113b41 test/tool-audit.test.mjs
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# V085-R47 JEV Decision / Judgment Plane\n\n## Purpose\n\nJEV is integrated as a decision and judgment plane only. It can classify and reject a proposed planner decision, but it cannot execute a capability, arm a lease, mint authority, bypass policy, or invoke Host authority.\n\nThe execution authority remains DEADBYTE.\n\n## Execution boundary\n\nintent -> planner -> strict decision contract -> JEV judgment\nallow -> DEADBYTE authority recheck -> precondition -> effect -> observation -> verification -> signed evidence\nreject -> durable judgment-rejected event -> planner replan\n\nAn allow result never substitutes for the DEADBYTE authority check performed by the execution layer.\n\n## Trust invariants\n\n1. JEV receives the live configured capability ledger projection; it does not define authority.\n2. JEV output carries authority_source: DEADBYTE and execution_authority: DEADBYTE.\n3. Host operations are never delegated through JEV.\n4. Desktop, Process, Autonomous, and other authority classes remain separate.\n5. JEV does not receive raw shell, arbitrary executable, numeric PID, or machine-revocation authority.\n6. A rejected judgment is journaled and causes replanning; it is not silently discarded.\n7. Native Diff, leases, preconditions, receipts, release gates, and verification remain authoritative.\n8. Plan guards remain in the execution layer. JEV does not duplicate execution-state policy.\n\n## Judgment identity\n\nThe judgment binds planner round, request id, decision SHA-256, goal SHA-256, required authority, required capabilities, mutation classification, verdict, and rejection reasons.\n\nThe resulting judgment_sha256 is durable journal evidence.\n\n## Security model\n\nJEV is a membrane, not a second executor.\n\nJEV may decide: this proposed action is structurally or authority-incompatible.\nJEV may not decide: therefore execute it anyway.\n\nDEADBYTE decides whether the action is authorized now under the current live lease, generation, policy, preconditions, and release state.\n\nThis preserves a single execution authority while allowing a richer reasoning and judgment architecture to sit above it.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.7",
|
|
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 @@
|
|
|
1
|
+
import {rename,mkdir} from "node:fs/promises";import path from "node:path";import os from "node:os";const home=os.homedir(),src=path.join(home,".deadbyte-mcp","skills"),dst=path.join(home,".deadbyte-mcp","source-archives");await mkdir(dst,{recursive:true});for(const f of ["deadbyte-machine-truth.zip","lowlevel-reverse-engineering.zip"]){await rename(path.join(src,f),path.join(dst,f))}console.log(dst)
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import {readFile,writeFile,mkdir,rm} from "node:fs/promises";
|
|
2
|
+
import path from "node:path";import os from "node:os";import zlib from "node:zlib";
|
|
3
|
+
import {createHash,createPrivateKey,createPublicKey,sign} from "node:crypto";
|
|
4
|
+
const home=os.homedir(), srcDir=path.join(home,".deadbyte-mcp","skills"), out=path.join(srcDir,"deadbyte-lowlevel-machine-truth");
|
|
5
|
+
const filesA=["references/mode-routing.md","references/proof-engineering.md","references/advanced-technique-selector.md","references/capability-discovery.md","references/build-provenance.md","references/kernel-baremetal.md","references/reverse-archaeology.md","references/data-performance.md","references/conversation-contract.md"];
|
|
6
|
+
const filesB=["references/analysis-patterns.md","references/safe-lab-and-reporting.md","references/tooling-and-evidence.md","scripts/triage_artifact.py"];
|
|
7
|
+
const wanted=[...filesA,...filesB];
|
|
8
|
+
const sha=b=>createHash("sha256").update(b).digest("hex");
|
|
9
|
+
function entries(buf){const eocd=buf.lastIndexOf(Buffer.from([0x50,0x4b,0x05,0x06]));if(eocd<0)throw Error("zip EOCD missing");const cdOff=buf.readUInt32LE(eocd+16),cdSize=buf.readUInt32LE(eocd+12);let p=cdOff,out=[];while(p<cdOff+cdSize){if(buf.readUInt32LE(p)!==0x02014b50)throw Error("central directory corrupt");const method=buf.readUInt16LE(p+10),csize=buf.readUInt32LE(p+20),n=buf.readUInt16LE(p+28),x=buf.readUInt16LE(p+30),c=buf.readUInt16LE(p+32),off=buf.readUInt32LE(p+42);const name=buf.subarray(p+46,p+46+n).toString("utf8");out.push({name,method,csize,off});p+=46+n+x+c}return out}
|
|
10
|
+
function extract(buf,e){const p=e.off,n=buf.readUInt16LE(p+26),x=buf.readUInt16LE(p+28),raw=buf.subarray(p+30+n+x,p+30+n+x+e.csize);return e.method===0?raw:zlib.inflateRawSync(raw)}
|
|
11
|
+
function canonical(v){return Array.isArray(v)?v.map(canonical):v&&typeof v==="object"?Object.fromEntries(Object.keys(v).sort((a,b)=>a.localeCompare(b,"en")).map(k=>[k,canonical(v[k])])):v}
|
|
12
|
+
const a=await readFile(path.join(srcDir,"deadbyte-machine-truth.zip")),b=await readFile(path.join(srcDir,"lowlevel-reverse-engineering.zip"));
|
|
13
|
+
const maps=new Map();for(const e of entries(a))maps.set(e.name,extract(a,e));for(const e of entries(b))maps.set("B:"+e.name,extract(b,e));
|
|
14
|
+
await rm(out,{recursive:true,force:true});
|
|
15
|
+
await mkdir(path.join(out,"references"),{recursive:true});await mkdir(path.join(out,"scripts"),{recursive:true});
|
|
16
|
+
const description="Evidence-first low-level engineering and reverse-engineering workflow that combines DEADBYTE machine-truth verification, proof engineering, capability routing, binary archaeology, compiler-aware analysis, safe lab practice, and reproducible evidence.";
|
|
17
|
+
const skill=`---
|
|
18
|
+
name: deadbyte-lowlevel-machine-truth
|
|
19
|
+
description: ${description}
|
|
20
|
+
version: 1.0.0
|
|
21
|
+
audience: agent
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# DEADBYTE LOWLEVEL MACHINE TRUTH
|
|
25
|
+
|
|
26
|
+
Use this skill for substantial low-level engineering, reverse engineering, binary and firmware analysis, kernel or bare-metal work, debugging, performance investigation, and evidence-heavy technical research.
|
|
27
|
+
|
|
28
|
+
## Core doctrine
|
|
29
|
+
|
|
30
|
+
The machine is the final witness. Treat source, bytes, traces, measurements, specifications, and reproducible experiments as evidence. Separate KNOWN, INFERRED, UNKNOWN, HYPOTHESIS, ESTIMATE, and RECOMMENDATION.
|
|
31
|
+
|
|
32
|
+
Do not confuse implementation with verification:
|
|
33
|
+
|
|
34
|
+
\\`COMPILES != WORKS\\`
|
|
35
|
+
\\`PATCHED != FIXED\\`
|
|
36
|
+
\\`REPORTS PASS != MACHINE VERIFIED\\`
|
|
37
|
+
|
|
38
|
+
## Operating loop
|
|
39
|
+
|
|
40
|
+
1. CLASSIFY the actual problem and target artifact.
|
|
41
|
+
2. DEFINE DONE with measurable acceptance criteria.
|
|
42
|
+
3. ESTABLISH the strongest available evidence and preserve hashes.
|
|
43
|
+
4. CHECK premises: architecture, ABI, bitness, endianness, addresses, ownership, versions, privilege, and provenance.
|
|
44
|
+
5. ISOLATE the failure surface to the first broken invariant.
|
|
45
|
+
6. FORM one falsifiable hypothesis.
|
|
46
|
+
7. Choose one high-information decision.
|
|
47
|
+
8. Perform the smallest responsible action.
|
|
48
|
+
9. VERIFY with fresh observed evidence.
|
|
49
|
+
10. Apply an adversarial test that could falsify the conclusion.
|
|
50
|
+
11. Report the narrowest truthful status: PASS, FAIL, PARTIALLY VERIFIED, BLOCKED BY EVIDENCE, or HYPOTHESIS ONLY.
|
|
51
|
+
|
|
52
|
+
## Low-level route
|
|
53
|
+
|
|
54
|
+
For native binaries, firmware, drivers, bootloaders, memory dumps, undocumented protocols, or compiler/ABI reconstruction:
|
|
55
|
+
|
|
56
|
+
- preserve the original and SHA-256;
|
|
57
|
+
- identify format, architecture, endianness, bitness, ABI, image base, sections, symbols, imports, relocations, and entry points;
|
|
58
|
+
- establish file-offset versus RVA/VA/runtime address domains;
|
|
59
|
+
- map control flow and data flow before assigning semantic names;
|
|
60
|
+
- treat decompiler output as a hypothesis, not ground truth;
|
|
61
|
+
- recover structures from repeated offsets, widths, alignment, lifetime, and cross-references;
|
|
62
|
+
- account for compiler optimization, inlining, tail calls, jump tables, thunks, exception paths, and generated wrappers;
|
|
63
|
+
- cross-validate important conclusions with independent representations;
|
|
64
|
+
- use dynamic execution only in an authorized, disposable, controlled environment.
|
|
65
|
+
|
|
66
|
+
## Evidence workflow
|
|
67
|
+
|
|
68
|
+
Maintain a hypothesis ledger:
|
|
69
|
+
|
|
70
|
+
\\`\\`\\`
|
|
71
|
+
CLAIM:
|
|
72
|
+
EVIDENCE:
|
|
73
|
+
ALTERNATIVE:
|
|
74
|
+
DISCRIMINATOR:
|
|
75
|
+
EXPECTED IF TRUE:
|
|
76
|
+
EXPECTED IF FALSE:
|
|
77
|
+
STATUS:
|
|
78
|
+
\\`\\`\\`
|
|
79
|
+
|
|
80
|
+
For each major conclusion, preserve the exact artifact hash, tool/version, configuration, address domain, command or observation, and exit status. If evidence conflicts, preserve the conflict and design the smallest safe experiment that distinguishes the explanations.
|
|
81
|
+
|
|
82
|
+
## Safety boundary
|
|
83
|
+
|
|
84
|
+
Only analyze software, devices, samples, and environments the operator owns or is explicitly authorized to assess. For suspicious or malicious artifacts, prefer metadata-only triage, static analysis, emulation, containment, controlled sinks, snapshots, and remediation-oriented findings. Do not provide credential theft, persistence, destructive payloads, unauthorized access, evasion, or weaponized exploit instructions.
|
|
85
|
+
|
|
86
|
+
## Mode routing
|
|
87
|
+
|
|
88
|
+
Use the smallest applicable mode:
|
|
89
|
+
|
|
90
|
+
- DESIGN for architecture and tradeoffs.
|
|
91
|
+
- BUILD for software creation or modification.
|
|
92
|
+
- DEBUG for unknown or broken behavior.
|
|
93
|
+
- VERIFY for correctness or release claims.
|
|
94
|
+
- RESEARCH for changing or externally sourced facts.
|
|
95
|
+
- LOWLEVEL for kernel, boot, ABI, ISA, firmware, MMIO, and bare metal.
|
|
96
|
+
- REVERSE for binary, file-format, firmware-image, and native-code analysis.
|
|
97
|
+
- ARCHIVE for historical reconstruction and provenance.
|
|
98
|
+
- DATA/PERF for data quality and performance.
|
|
99
|
+
- COLLAB when intent or consequential action needs clarification.
|
|
100
|
+
|
|
101
|
+
Load only the references needed for the current phase.
|
|
102
|
+
|
|
103
|
+
## Advanced techniques
|
|
104
|
+
|
|
105
|
+
Do not use advanced tooling because it sounds advanced. First state the uncertainty and why ordinary testing cannot resolve it. Then select a technique with a discriminating signal and a stop condition. Useful classes include differential testing, property-based testing, fuzzing, symbolic/concolic execution, model checking, fault injection, emulation traces, profilers, hardware counters, reproducible-build comparison, and mutation testing.
|
|
106
|
+
|
|
107
|
+
## Deterministic triage
|
|
108
|
+
|
|
109
|
+
Before opening an unknown artifact in a debugger or decompiler, run the bundled metadata-only \\`scripts/triage_artifact.py\\`. Preserve its output and the original hash. It never executes the input.
|
|
110
|
+
|
|
111
|
+
## Completion contract
|
|
112
|
+
|
|
113
|
+
Before claiming \\`fixed\\`, \\`ready\\`, \\`safe\\`, \\`verified\\`, or \\`PASS\\`, answer:
|
|
114
|
+
|
|
115
|
+
- WHAT IS THE CLAIM?
|
|
116
|
+
- WHAT FRESH EVIDENCE SUPPORTS IT?
|
|
117
|
+
- WHAT WAS NOT TESTED?
|
|
118
|
+
- WHAT COULD STILL BREAK?
|
|
119
|
+
|
|
120
|
+
Do not invent commands, output, tests, file contents, citations, or observations.
|
|
121
|
+
`;
|
|
122
|
+
await writeFile(path.join(out,"SKILL.md"),skill,"utf8");
|
|
123
|
+
for(const rel of filesA){const data=maps.get(rel);if(!data)throw Error("missing source "+rel);await writeFile(path.join(out,rel),data)}
|
|
124
|
+
for(const rel of filesB){const data=maps.get("B:"+rel);if(!data)throw Error("missing source "+rel);await writeFile(path.join(out,rel),data)}
|
|
125
|
+
const provenance=`# Source Integration
|
|
126
|
+
|
|
127
|
+
This skill was built by applying the DEADBYTE R44 skill-creator workflow to two local source archives.
|
|
128
|
+
|
|
129
|
+
- deadbyte-machine-truth.zip: ${sha(a)}
|
|
130
|
+
- lowlevel-reverse-engineering.zip: ${sha(b)}
|
|
131
|
+
|
|
132
|
+
The two source skills were not concatenated. Their shared evidence-first doctrine was normalized into one SKILL.md. Domain-specific material remains in references and the deterministic metadata triage helper remains in scripts/.
|
|
133
|
+
|
|
134
|
+
The original archives remain outside the R44 skill registry. Nested ZIP resources from the source packages were intentionally not imported because R44 requires a closed, directly verifiable resource tree.
|
|
135
|
+
`;
|
|
136
|
+
await writeFile(path.join(out,"references/source-integration.md"),provenance,"utf8");
|
|
137
|
+
const resourcePaths=[...wanted,"references/source-integration.md"].sort((x,y)=>x.localeCompare(y,"en"));
|
|
138
|
+
const resources=[];
|
|
139
|
+
for(const rel of resourcePaths){const bytes=await readFile(path.join(out,...rel.split("/")));resources.push({path:rel,sha256:sha(bytes),kind:rel.startsWith("scripts/")?"script":"reference"})}
|
|
140
|
+
const body={schema:"deadbyte.skill-manifest.v1",name:"deadbyte-lowlevel-machine-truth",version:"1.0.0",description,audience:"agent",skill_md_sha256:sha(Buffer.from(skill,"utf8")),resources,required_capabilities:[],authority_planes:["coding"],provenance:{source:"deadbyte-machine-truth.zip+lowlevel-reverse-engineering.zip",origin_url:null,source_revision:"combined-r44-1.0.0"}};
|
|
141
|
+
const bodyBytes=Buffer.from(JSON.stringify(canonical(body)),"utf8"),body_sha256=sha(bodyBytes);
|
|
142
|
+
const priv=createPrivateKey(await readFile(path.join(home,".deadbyte-mcp","trust","ed25519-private.pem"))),pub=createPublicKey(priv),keyId=sha(pub.export({type:"spki",format:"der"}));
|
|
143
|
+
const attestation={algorithm:"ed25519",domain:"DEADBYTE-SKILL-MANIFEST-V1",key_id:keyId,signature_base64:sign(null,Buffer.concat([Buffer.from("DEADBYTE-SKILL-MANIFEST-V1\0","utf8"),bodyBytes]),priv).toString("base64")};
|
|
144
|
+
const unsigned={body,body_sha256,attestation},envelope={...unsigned,manifest_sha256:sha(Buffer.from(JSON.stringify(canonical(unsigned)),"utf8"))};
|
|
145
|
+
await writeFile(path.join(out,"skill.json"),JSON.stringify(envelope,null,2),"utf8");
|
|
146
|
+
console.log(JSON.stringify({status:"built",out,manifest_sha256:envelope.manifest_sha256,source_archives:{machine_truth:sha(a),lowlevel_reverse:sha(b)},resource_count:resources.length,verify_key_id:keyId}));
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { loadPowerShellDataFile, runSlotUpdateCli } from '../src/runtime-update.mjs';
|
|
7
|
+
|
|
8
|
+
const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
|
|
9
|
+
const state=path.join(os.homedir(),'.deadbyte-mcp');
|
|
10
|
+
const sha=async f=>createHash('sha256').update(await readFile(f)).digest('hex');
|
|
11
|
+
const manifest=await sha(path.join(root,'MANIFEST.SHA256'));
|
|
12
|
+
const pointer=JSON.parse(await readFile(path.join(state,'active-release.json'),'utf8'));
|
|
13
|
+
const cfg=await loadPowerShellDataFile(pointer.config_path);
|
|
14
|
+
const bridgeRoot=path.resolve(cfg.Bridge.WorkingDirectory);
|
|
15
|
+
const bridgeScript=path.join(bridgeRoot,'src','bridge.mjs');
|
|
16
|
+
const pkg=JSON.parse(await readFile(path.join(root,'package.json'),'utf8'));
|
|
17
|
+
const expectedVersion=pkg.version;
|
|
18
|
+
const args=[
|
|
19
|
+
'--stage',root,'--development-root',root,'--expected-version',expectedVersion,'--expected-manifest',manifest,
|
|
20
|
+
'--process-policy',path.join(root,'controller','deadbyte-process-policy.json'),'--process-policy-sha256',await sha(path.join(root,'controller','deadbyte-process-policy.json')),
|
|
21
|
+
'--desktop-policy',path.join(root,'controller','deadbyte-desktop-policy.json'),'--desktop-policy-sha256',await sha(path.join(root,'controller','deadbyte-desktop-policy.json')),
|
|
22
|
+
'--semantic-lsp-config',path.join(root,'controller','deadbyte-semantic-lsp-config.json'),'--semantic-lsp-config-sha256',await sha(path.join(root,'controller','deadbyte-semantic-lsp-config.json')),
|
|
23
|
+
'--bridge-root',bridgeRoot,'--bridge-script-sha256',await sha(bridgeScript),
|
|
24
|
+
'--enable-machine-fs','--enable-observation','--enable-desktop','--enable-autonomous-supervisor','--restore-standing-grants'
|
|
25
|
+
];
|
|
26
|
+
const result=await runSlotUpdateCli(args,{stateRoot:state});
|
|
27
|
+
console.log(JSON.stringify({status:'deployed',manifest_sha256:manifest,previous_release:pointer.release_id,result}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {execFile} from "node:child_process";import {promisify} from "node:util";const ex=promisify(execFile);const r=await ex("powershell.exe",["-NoProfile","-Command","Get-ChildItem -Path C:\\Users\\DEADBYTE -Filter internet-skill-finder.zip -File -Recurse -ErrorAction SilentlyContinue | Select-Object -ExpandProperty FullName"],{timeout:120000,maxBuffer:1048576});console.log(r.stdout)
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {readFile} from "node:fs/promises";import path from "node:path";import os from "node:os";
|
|
2
|
+
function listZip(buf){let p=0,out=[];while(p+4<=buf.length){if(buf.readUInt32LE(p)!==0x04034b50){p++;continue}const method=buf.readUInt16LE(p+8),csize=buf.readUInt32LE(p+18),n=buf.readUInt16LE(p+26),e=buf.readUInt16LE(p+28);const name=buf.subarray(p+30,p+30+n).toString("utf8");out.push({name,method,csize});p+=30+n+e+csize}return out}
|
|
3
|
+
for(const f of ["deadbyte-machine-truth.zip","lowlevel-reverse-engineering.zip"]){const b=await readFile(path.join(os.homedir(),".deadbyte-mcp","skills",f));console.log("=="+f+"==");console.log(JSON.stringify(listZip(b),null,2))}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
$ErrorActionPreference = 'Stop'
|
|
2
|
+
Set-Location (Join-Path $PSScriptRoot '..')
|
|
3
|
+
$pkg = Get-Content package.json -Raw | ConvertFrom-Json
|
|
4
|
+
$version = [string]$pkg.version
|
|
5
|
+
if ($pkg.name -ne 'deadbyte-mcp') { throw 'unexpected package name' }
|
|
6
|
+
$existing = $null
|
|
7
|
+
try { $existing = & npm.cmd view "deadbyte-mcp@$version" version --json 2>$null } catch { $existing = $null }
|
|
8
|
+
if ($LASTEXITCODE -eq 0 -and $existing) { throw "deadbyte-mcp@$version is already published: $existing" }
|
|
9
|
+
$pack = (& npm.cmd pack --json 2>&1 | Out-String)
|
|
10
|
+
if ($LASTEXITCODE -ne 0) { throw 'npm pack failed' }
|
|
11
|
+
$packObj = $pack | ConvertFrom-Json
|
|
12
|
+
$filename = [string]$packObj.'deadbyte-mcp'.filename
|
|
13
|
+
if ([string]::IsNullOrWhiteSpace($filename)) { throw "npm pack did not return tarball filename. output=$pack" }
|
|
14
|
+
$tarball = Join-Path (Get-Location) $filename
|
|
15
|
+
& npm.cmd publish $tarball --access public
|
|
16
|
+
if ($LASTEXITCODE -ne 0) { throw 'npm publish failed' }
|
|
17
|
+
$published = (& npm.cmd view "deadbyte-mcp@$version" version dist.integrity dist.tarball --json | ConvertFrom-Json)
|
|
18
|
+
$tags = (& npm.cmd view deadbyte-mcp dist-tags --json | ConvertFrom-Json)
|
|
19
|
+
$npx = & npx.cmd --yes "deadbyte-mcp@$version" -- --version
|
|
20
|
+
if ($LASTEXITCODE -ne 0) { throw 'npx verification failed' }
|
|
21
|
+
Remove-Item -LiteralPath $tarball -Force -ErrorAction SilentlyContinue
|
|
22
|
+
[pscustomobject]@{ status='published'; name=$pkg.name; version=$version; tarball=$filename; published=$published; dist_tags=$tags; npx_version_output=($npx -join "`n") } | ConvertTo-Json -Depth 8
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { readFile, unlink } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
|
|
6
|
+
const root=path.resolve(new URL('..',import.meta.url).pathname.replace(/^\/(?:[A-Za-z]:)/,''));
|
|
7
|
+
const npm=process.platform==='win32'?'npm.exe':'npm';
|
|
8
|
+
|
|
9
|
+
function run(args,timeout=180000){
|
|
10
|
+
const r=spawnSync(npm,args,{cwd:root,encoding:'utf8',timeout,stdio:['ignore','pipe','pipe'],shell:false,windowsHide:true});
|
|
11
|
+
if(r.error) throw r.error;
|
|
12
|
+
if(r.status!==0) throw new Error('npm '+args.join(' ')+' failed exit='+r.status+'\n'+(r.stderr||r.stdout||'').slice(-12000));
|
|
13
|
+
return (r.stdout||'').trim();
|
|
14
|
+
}
|
|
15
|
+
function parseJson(text){
|
|
16
|
+
const start=Math.min(...[text.indexOf('{'),text.indexOf('[')].filter(n=>n>=0));
|
|
17
|
+
if(!Number.isFinite(start)) throw new Error('npm JSON output missing');
|
|
18
|
+
return JSON.parse(text.slice(start));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const pkg=JSON.parse(await readFile(path.join(root,'package.json'),'utf8'));
|
|
22
|
+
const version=pkg.version;
|
|
23
|
+
if(pkg.name!=='deadbyte-mcp') throw new Error('unexpected package name');
|
|
24
|
+
const existing=spawnSync(npm,['view',`deadbyte-mcp@${version}`,'version','--json'],{cwd:root,encoding:'utf8',stdio:['ignore','pipe','pipe'],shell:false,windowsHide:true});
|
|
25
|
+
const existingText=(existing.stdout||'').trim();
|
|
26
|
+
if(existing.status===0 && existingText && existingText!=='null'){
|
|
27
|
+
throw new Error(`deadbyte-mcp@${version} is already published: ${existingText}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const packed=parseJson(run(['pack','--json'],180000));
|
|
31
|
+
const filename=packed?.[0]?.filename;
|
|
32
|
+
if(!filename) throw new Error('npm pack did not return a tarball filename');
|
|
33
|
+
const tarball=path.join(root,filename);
|
|
34
|
+
const publishOut=run(['publish',tarball,'--access','public'],300000);
|
|
35
|
+
const published=parseJson(run(['view',`deadbyte-mcp@${version}`,'version','dist.integrity','dist.tarball','--json'],120000));
|
|
36
|
+
const tags=parseJson(run(['view','deadbyte-mcp','dist-tags','--json'],120000));
|
|
37
|
+
const npxOut=run(['exec','--yes',`deadbyte-mcp@${version}`,'--','--version'],300000);
|
|
38
|
+
await unlink(tarball).catch(()=>{});
|
|
39
|
+
console.log(JSON.stringify({status:'published',name:pkg.name,version,tarball:filename,published,published_output_tail:publishOut.slice(-2000),dist_tags:tags,npx_version_output:npxOut},null,2));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {stat} from "node:fs/promises";import path from "node:path";import os from "node:os";for(const f of ["deadbyte-machine-truth.zip","lowlevel-reverse-engineering.zip"]){const p=path.join(os.homedir(),".deadbyte-mcp","skills",f);try{const x=await stat(p);console.log(JSON.stringify({file:f,exists:true,size:x.size}))}catch(e){console.log(JSON.stringify({file:f,exists:false}))}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {stat,readFile} from "node:fs/promises";import path from "node:path";import os from "node:os";import {execFile} from "node:child_process";import {promisify} from "node:util";const ex=promisify(execFile);const d=path.join(os.homedir(),".deadbyte-mcp","skills");for(const f of ["deadbyte-machine-truth.zip","lowlevel-reverse-engineering.zip"]){const p=path.join(d,f);try{const x=await stat(p);console.log(f,x.size)}catch(e){console.log(f,"MISSING")}}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import {readFile} from "node:fs/promises";import path from "node:path";import os from "node:os";import zlib from "node:zlib";
|
|
2
|
+
function entries(buf){let eocd=buf.lastIndexOf(Buffer.from([0x50,0x4b,0x05,0x06]));let cdOff=buf.readUInt32LE(eocd+16),cdSize=buf.readUInt32LE(eocd+12),p=cdOff,out=[];while(p<cdOff+cdSize){if(buf.readUInt32LE(p)!==0x02014b50)throw Error("bad central dir");const method=buf.readUInt16LE(p+10),csize=buf.readUInt32LE(p+20),usize=buf.readUInt32LE(p+24),n=buf.readUInt16LE(p+28),x=buf.readUInt16LE(p+30),c=buf.readUInt16LE(p+32),off=buf.readUInt32LE(p+42);const name=buf.subarray(p+46,p+46+n).toString("utf8");out.push({name,method,csize,usize,off});p+=46+n+x+c}return out}
|
|
3
|
+
function data(buf,e){const p=e.off,n=buf.readUInt16LE(p+26),x=buf.readUInt16LE(p+28),raw=buf.subarray(p+30+n+x,p+30+n+x+e.csize);return e.method===0?raw:zlib.inflateRawSync(raw)}
|
|
4
|
+
const wanted=new Set(["SKILL.md","references/advanced-technique-selector.md","references/capability-discovery.md","references/conversation-contract.md","references/lowlevel-analysis-patterns.md","references/lowlevel-reverse-engineering-core.md","references/lowlevel-safe-lab-and-reporting.md","references/lowlevel-tooling-and-evidence.md","references/mode-routing.md","references/proof-engineering.md","references/reverse-archaeology.md","references/build-provenance.md","references/data-performance.md","references/kernel-baremetal.md","references/manus-interop.md","references/software-work.md","references/research-live.md","references/analysis-patterns.md","references/safe-lab-and-reporting.md","references/tooling-and-evidence.md","scripts/triage_artifact.py","scripts/truthctl.py","templates/"]);
|
|
5
|
+
for(const f of ["deadbyte-machine-truth.zip","lowlevel-reverse-engineering.zip"]){const b=await readFile(path.join(os.homedir(),".deadbyte-mcp","skills",f));console.log("=="+f+"==");for(const e of entries(b)){if(wanted.has(e.name)&&e.name!=="templates/"){const t=data(b,e).toString("utf8");console.log("\n---"+e.name+"---\n"+t)}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {rm,stat} from "node:fs/promises";import os from "node:os";import path from "node:path";const p=path.join(os.homedir(),".deadbyte-mcp","source-archives");try{await stat(p);await rm(p,{recursive:true,force:true});console.log("REMOVED",p)}catch(e){if(e.code==="ENOENT")console.log("ABSENT",p);else throw e}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {readFile,writeFile} from "node:fs/promises";const p="scripts/build-combined-skill.mjs";let s=await readFile(p,"utf8");const start=s.indexOf("const skill=`")+13;const end=s.indexOf("`;",start);let body=s.slice(start,end);body=body.replaceAll("`","\\`");s=s.slice(0,start)+body+s.slice(end);await writeFile(p,s,"utf8");console.log("escaped-skill-template-backticks")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {execFile} from "node:child_process";import {promisify} from "node:util";const ex=promisify(execFile);const root=process.env.USERPROFILE+"\\.deadbyte-mcp\\skills";const script=root+"\\skill-creator\\scripts\\create-skill.mjs";const r=await ex(process.execPath,[script,root,"deadbyte-lowlevel-machine-truth","1.0.0"],{maxBuffer:1048576});console.log(r.stdout);console.error(r.stderr)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises'; import os from 'node:os'; import path from 'node:path'; await new Promise(r=>setTimeout(r,15000)); const root=path.join(os.homedir(),'.deadbyte-mcp'); const p=JSON.parse(await readFile(path.join(root,'active-release.json'),'utf8')); const s=JSON.parse(await readFile(path.join(root,'evidence','updates','r27-3d25be23cd6af36c-mueei50q-756d8a75','state.json'),'utf8')); console.log(JSON.stringify({pointer:p,state:s}));
|
|
@@ -19,6 +19,7 @@ import { createWorkerScheduler } from './worker-scheduler.mjs';
|
|
|
19
19
|
import { issueObservationLease, verifyObservationLease } from './observation-lease.mjs';
|
|
20
20
|
import { createJournalStream } from './workload-substrate.mjs';
|
|
21
21
|
import { createDeadline, deadlineState } from './deadline-cancellation.mjs';
|
|
22
|
+
import { judgeDecision } from './jev-decision-plane.mjs';
|
|
22
23
|
|
|
23
24
|
export const AUTONOMOUS_GOAL_SCHEMA = 'deadbyte.autonomous-goal.v1';
|
|
24
25
|
export const AUTONOMOUS_EVENT_SCHEMA = 'deadbyte.autonomous-event.v1';
|
|
@@ -125,7 +126,7 @@ function deriveState(goal, events) {
|
|
|
125
126
|
plannerRejections.push({ ...p, event_sha256:event.event_sha256 });
|
|
126
127
|
if (pendingRequest?.request_id === p.request_id) pendingRequest = null;
|
|
127
128
|
}
|
|
128
|
-
if (event.type === 'decision_completed' && p.decision_event_sha256) completedDecisions.add(p.decision_event_sha256);
|
|
129
|
+
if ((event.type === 'decision_completed' || event.type === 'decision_judgment_rejected') && p.decision_event_sha256) completedDecisions.add(p.decision_event_sha256);
|
|
129
130
|
if (event.type === 'inspect_completed') for (const item of p.contexts ?? []) contexts.set(item.path, item);
|
|
130
131
|
if (event.type === 'profile_completed') observations.push({ ...p, event_sha256:event.event_sha256 });
|
|
131
132
|
if (event.type === 'delegated_action_completed') {
|
|
@@ -654,6 +655,24 @@ async function acceptPlannerDecision({ ctx, events, goal, state, policy, codingR
|
|
|
654
655
|
if (policy.planner.backend === 'client_sampling') return { needs_planner:true, request:pending };
|
|
655
656
|
continue;
|
|
656
657
|
}
|
|
658
|
+
const jev = judgeDecision({ decision, goal:{ goal_id:goal.goal_id,title:goal.title,goal:goal.goal,acceptance:goal.acceptance,task_contract:goal.task_contract },
|
|
659
|
+
capabilities:capabilityManifest?.entries ?? [], state:currentState,
|
|
660
|
+
planner_round:pending.planner_round, request_id:pending.request_id });
|
|
661
|
+
const judgmentEvent = await appendEvent(ctx,events,signingKeyPath,'decision_judgment',{ request_id:pending.request_id,
|
|
662
|
+
planner_round:pending.planner_round, mutation_epoch:pending.mutation_epoch, decision_sha256:jev.decision_sha256,
|
|
663
|
+
judgment_sha256:jev.judgment_sha256, verdict:jev.verdict, authority:jev.authority, mutation:jev.mutation,
|
|
664
|
+
action_kind:jev.action_kind, reasons:jev.reasons, required_capabilities:jev.required_capabilities,
|
|
665
|
+
authority_source:jev.authority_source, execution_authority:jev.execution_authority });
|
|
666
|
+
if (jev.verdict === 'reject') {
|
|
667
|
+
await appendEvent(ctx,events,signingKeyPath,'decision_judgment_rejected',{ request_id:pending.request_id,
|
|
668
|
+
planner_round:pending.planner_round, decision_event_sha256:judgmentEvent.event_sha256,
|
|
669
|
+
decision_sha256:jev.decision_sha256, judgment_sha256:jev.judgment_sha256, reasons:jev.reasons });
|
|
670
|
+
currentState = deriveState(goal,events);
|
|
671
|
+
pending = await requestPlanner(ctx,goal,events,currentState,policy,codingRuntime,capabilityManifest,desktopMemoryProvider,memoryProvider,signingKeyPath);
|
|
672
|
+
if (!pending) return null;
|
|
673
|
+
if (policy.planner.backend === 'client_sampling') return { needs_planner:true, request:pending };
|
|
674
|
+
continue;
|
|
675
|
+
}
|
|
657
676
|
const event = await appendEvent(ctx,events,signingKeyPath,'planner_decision',{
|
|
658
677
|
request_id:pending.request_id, planner_round:pending.planner_round, mutation_epoch:pending.mutation_epoch,
|
|
659
678
|
backend:response.backend, model:response.model ?? 'unknown', response_sha256:sha256Bytes(Buffer.from(response.raw_text,'utf8')),
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { canonicalJson } from './canonical-json.mjs';
|
|
3
|
+
|
|
4
|
+
export const JEV_DECISION_SCHEMA = 'deadbyte.jev-decision-judgment.v1';
|
|
5
|
+
|
|
6
|
+
const SHA256_RE = /^[0-9a-f]{64}$/;
|
|
7
|
+
|
|
8
|
+
function sha256(value) {
|
|
9
|
+
return createHash('sha256').update(Buffer.from(canonicalJson(value), 'utf8')).digest('hex');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function actionKind(decision) {
|
|
13
|
+
return decision?.action?.kind ?? decision?.kind ?? decision?.action ?? null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function requiredAuthority(decision) {
|
|
17
|
+
const kind = actionKind(decision);
|
|
18
|
+
if (kind === 'desktop_action') return 'desktop';
|
|
19
|
+
if (kind === 'process_start' || kind === 'process_action' || kind === 'process_terminate') return 'process';
|
|
20
|
+
if (kind === 'native_diff_apply' || kind === 'patch' || kind === 'write' || kind === 'replace') return 'autonomous';
|
|
21
|
+
if (kind === 'run_profile' || kind === 'command' || kind === 'benchmark') return 'autonomous';
|
|
22
|
+
return 'none';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function isMutation(decision) {
|
|
26
|
+
const kind = actionKind(decision);
|
|
27
|
+
return new Set([
|
|
28
|
+
'act','patch','write','replace','delete','run_profile','command','benchmark',
|
|
29
|
+
'native_diff_apply','process_start','process_action','process_terminate','desktop_action'
|
|
30
|
+
]).has(kind);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function capabilityForAuthority(authority) {
|
|
34
|
+
if (authority === 'desktop') return ['desktop.action'];
|
|
35
|
+
if (authority === 'process') return ['process.start','process.action','process.terminate'];
|
|
36
|
+
if (authority === 'autonomous') return ['autonomous.goal_run','native_diff.apply','autonomous.release_gate'];
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function hasCapability(entries, wanted) {
|
|
41
|
+
const list = Array.isArray(entries) ? entries : [];
|
|
42
|
+
const ids = list.map(item => typeof item === 'string' ? item : item?.id).filter(Boolean);
|
|
43
|
+
return wanted.some(item => ids.includes(item) || ids.includes(item.replaceAll('.','_')));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function judgment({ decision, goal, capabilities, state }) {
|
|
47
|
+
const kind = actionKind(decision);
|
|
48
|
+
const authority = requiredAuthority(decision);
|
|
49
|
+
const mutation = isMutation(decision);
|
|
50
|
+
const reasons = [];
|
|
51
|
+
const required = capabilityForAuthority(authority);
|
|
52
|
+
|
|
53
|
+
if (!decision || typeof decision !== 'object') {
|
|
54
|
+
reasons.push('decision_missing');
|
|
55
|
+
}
|
|
56
|
+
if (!kind) reasons.push('action_kind_missing');
|
|
57
|
+
|
|
58
|
+
if (mutation && authority === 'none') reasons.push('mutation_without_typed_authority');
|
|
59
|
+
|
|
60
|
+
if (authority === 'desktop' && !hasCapability(capabilities, required)) {
|
|
61
|
+
reasons.push('desktop_authority_not_present');
|
|
62
|
+
}
|
|
63
|
+
if (authority === 'process' && !hasCapability(capabilities, required)) {
|
|
64
|
+
reasons.push('process_authority_not_present');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (authority === 'autonomous' && !hasCapability(capabilities, required)) {
|
|
68
|
+
reasons.push('autonomous_authority_not_present');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
if (goal?.task_contract?.non_goals && kind === 'act' && decision.action?.kind === 'delegate') {
|
|
73
|
+
const operationKind = decision.action.operation?.kind;
|
|
74
|
+
if (goal.task_contract.non_goals.some(item => typeof item === 'string' && item.includes(operationKind))) {
|
|
75
|
+
reasons.push('action_conflicts_with_non_goal');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (decision?.action?.kind === 'delegate' && decision.action.operation?.kind === 'host_exec') {
|
|
80
|
+
reasons.push('host_authority_not_delegable');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (decision?.action?.kind === 'delegate' && decision.action.operation?.kind === 'machine_revoke') {
|
|
84
|
+
reasons.push('machine_authority_not_delegable');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
schema:JEV_DECISION_SCHEMA,
|
|
89
|
+
verdict:reasons.length === 0 ? 'allow' : 'reject',
|
|
90
|
+
authority,
|
|
91
|
+
mutation,
|
|
92
|
+
action_kind:kind,
|
|
93
|
+
reasons,
|
|
94
|
+
required_capabilities:required
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function judgeDecision({ decision, goal = null, capabilities = [], state = null, planner_round = 0, request_id = null }) {
|
|
99
|
+
if (!Number.isInteger(planner_round) || planner_round < 0) throw new Error('JEV planner_round invalid');
|
|
100
|
+
if (request_id !== null && (typeof request_id !== 'string' || !SHA256_RE.test(request_id))) {
|
|
101
|
+
throw new Error('JEV request_id invalid');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const verdict = judgment({ decision, goal, capabilities, state });
|
|
105
|
+
const subject = {
|
|
106
|
+
schema:JEV_DECISION_SCHEMA,
|
|
107
|
+
planner_round,
|
|
108
|
+
request_id,
|
|
109
|
+
decision_sha256:sha256(decision),
|
|
110
|
+
goal_sha256:goal ? sha256(goal) : null,
|
|
111
|
+
authority:verdict.authority,
|
|
112
|
+
mutation:verdict.mutation,
|
|
113
|
+
action_kind:verdict.action_kind,
|
|
114
|
+
required_capabilities:verdict.required_capabilities,
|
|
115
|
+
verdict:verdict.verdict,
|
|
116
|
+
reasons:verdict.reasons
|
|
117
|
+
};
|
|
118
|
+
return {
|
|
119
|
+
...verdict,
|
|
120
|
+
planner_round,
|
|
121
|
+
request_id,
|
|
122
|
+
decision_sha256:subject.decision_sha256,
|
|
123
|
+
judgment_sha256:sha256(subject),
|
|
124
|
+
authority_source:'DEADBYTE',
|
|
125
|
+
execution_authority:'DEADBYTE',
|
|
126
|
+
subject
|
|
127
|
+
};
|
|
128
|
+
}
|
package/src/skill-plane-r44.mjs
CHANGED
|
@@ -53,12 +53,14 @@ function parseFrontmatter(text){
|
|
|
53
53
|
exactKeys(meta,['name','description','version','audience'],'SKILL.md frontmatter');
|
|
54
54
|
return meta;
|
|
55
55
|
}
|
|
56
|
+
const GENERATED_SKILL_FILES=new Set(['references/skills_cache.json']);
|
|
56
57
|
async function walkFiles(root,rel=''){
|
|
57
58
|
const dir=path.join(root,...(rel?rel.split('/'):[]));
|
|
58
59
|
const names=(await readdir(dir)).sort((a,b)=>a.localeCompare(b,'en'));
|
|
59
60
|
const out=[];
|
|
60
61
|
for(const name of names){
|
|
61
62
|
const childRel=rel?`${rel}/${name}`:name;
|
|
63
|
+
if(GENERATED_SKILL_FILES.has(childRel)) continue;
|
|
62
64
|
const full=path.join(root,...childRel.split('/'));
|
|
63
65
|
const st=await lstat(full);
|
|
64
66
|
insist(!st.isSymbolicLink(),`skill symlink forbidden: ${childRel}`);
|
package/src/version.mjs
CHANGED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { judgeDecision } from '../src/jev-decision-plane.mjs';
|
|
4
|
+
|
|
5
|
+
const capabilities = [
|
|
6
|
+
{ id:'native_diff.apply', authority:'autonomous', mutating:true },
|
|
7
|
+
{ id:'autonomous.release_gate', authority:'autonomous', mutating:true },
|
|
8
|
+
{ id:'process.start', authority:'process', mutating:true },
|
|
9
|
+
{ id:'process.action', authority:'process', mutating:true },
|
|
10
|
+
{ id:'process.terminate', authority:'process', mutating:true },
|
|
11
|
+
{ id:'desktop.action', authority:'desktop', mutating:true }
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
const goal = {
|
|
15
|
+
goal_id:'a'.repeat(64),
|
|
16
|
+
title:'test',
|
|
17
|
+
goal:'test',
|
|
18
|
+
acceptance:'test',
|
|
19
|
+
task_contract:{ non_goals:[] }
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
test('JEV allows typed autonomous mutation without granting execution', () => {
|
|
23
|
+
const result = judgeDecision({
|
|
24
|
+
decision:{
|
|
25
|
+
schema:'deadbyte.autonomous-decision.v2',
|
|
26
|
+
kind:'act',
|
|
27
|
+
action:{kind:'native_diff_apply',diff_id:'b'.repeat(64),expected_operation_count:1}
|
|
28
|
+
},
|
|
29
|
+
goal, capabilities, planner_round:1, request_id:'c'.repeat(64)
|
|
30
|
+
});
|
|
31
|
+
assert.equal(result.verdict,'allow');
|
|
32
|
+
assert.equal(result.authority,'autonomous');
|
|
33
|
+
assert.equal(result.execution_authority,'DEADBYTE');
|
|
34
|
+
assert.equal(result.authority_source,'DEADBYTE');
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('JEV rejects host authority escape from delegated planner action', () => {
|
|
38
|
+
const result = judgeDecision({
|
|
39
|
+
decision:{
|
|
40
|
+
schema:'deadbyte.autonomous-decision.v2',
|
|
41
|
+
kind:'act',
|
|
42
|
+
action:{kind:'delegate',operation:{kind:'host_exec'}}
|
|
43
|
+
},
|
|
44
|
+
goal, capabilities, planner_round:2, request_id:'d'.repeat(64)
|
|
45
|
+
});
|
|
46
|
+
assert.equal(result.verdict,'reject');
|
|
47
|
+
assert.ok(result.reasons.includes('host_authority_not_delegable'));
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('JEV rejects desktop mutation when Desktop authority is absent', () => {
|
|
51
|
+
const result = judgeDecision({
|
|
52
|
+
decision:{
|
|
53
|
+
schema:'deadbyte.autonomous-decision.v2',
|
|
54
|
+
kind:'act',
|
|
55
|
+
action:{kind:'desktop_action',action_kind:'click_primary',expected_frame_id:'e'.repeat(64),
|
|
56
|
+
target_id:'f'.repeat(64),point:null,scroll_delta:null,key_chord:null,text:null}
|
|
57
|
+
},
|
|
58
|
+
goal, capabilities:capabilities.filter(item=>item.id!=='desktop.action'),
|
|
59
|
+
planner_round:3, request_id:'1'.repeat(64)
|
|
60
|
+
});
|
|
61
|
+
assert.equal(result.verdict,'reject');
|
|
62
|
+
assert.ok(result.reasons.includes('desktop_authority_not_present'));
|
|
63
|
+
});
|
|
@@ -46,6 +46,7 @@ test('R44 skill catalog is metadata-only and load is signature/content bound',as
|
|
|
46
46
|
const f=await fixture();
|
|
47
47
|
try{
|
|
48
48
|
await installSkill(f,{});
|
|
49
|
+
await writeFile(path.join(f.registry,'repo-audit','references','skills_cache.json'),'generated cache\n','utf8');
|
|
49
50
|
const plane=await createSkillPlane({root:f.registry,verifyKeyPath:f.keys.publicKeyPath});
|
|
50
51
|
const listed=await plane.list();
|
|
51
52
|
assert.equal(listed.status,'ok');assert.equal(listed.skills.length,1);
|
|
File without changes
|