deadbyte-mcp 0.15.22 → 0.15.23
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 +31 -15
- package/PROVENANCE.json +10 -10
- package/README.txt +18 -7
- package/RELEASE.json +15 -9
- package/SBOM.cdx.json +3 -3
- package/TEST-MATRIX.json +14 -4
- package/package.json +3 -2
- package/scripts/activate-skill-creator-1.1.1.mjs +46 -0
- package/scripts/build-advanced-pcb-skill.mjs +208 -0
- package/scripts/diagnose-skill-tree.mjs +8 -0
- package/scripts/npm-release-r48.mjs +252 -0
- package/scripts/pcb-skill-src-SKILL.md.txt +67 -0
- package/scripts/pcb-skill-src-bringup-evidence.md.txt +22 -0
- package/scripts/pcb-skill-src-constraint-model.md.txt +17 -0
- package/scripts/pcb-skill-src-emc-mechanical-dfm.md.txt +17 -0
- package/scripts/pcb-skill-src-high-speed-layout.md.txt +27 -0
- package/scripts/pcb-skill-src-kicad-native.md.txt +30 -0
- package/scripts/pcb-skill-src-kicad_pcb_probe.py.txt +159 -0
- package/scripts/pcb-skill-src-pcb_constraint_gate.py.txt +76 -0
- package/scripts/pcb-skill-src-power-integrity.md.txt +15 -0
- package/scripts/prepare-skill-creator-1.1.1.mjs +113 -0
- package/scripts/test-skill-creator-semver-matrix.mjs +30 -0
- package/scripts/test-skill-creator-semver.mjs +22 -0
- package/src/deadbyte-cli.mjs +70 -15
- package/src/remote-live-log.mjs +189 -35
- package/src/tool-audit.mjs +1 -1
- package/src/version.mjs +1 -1
- package/test/full-max-catalog-r48.test.mjs +1 -1
- package/test/r48-release-contract.test.mjs +20 -14
- package/test/remote-live-log-r37.test.mjs +106 -7
- package/test/remote-session-cli.test.mjs +40 -0
- package/test/tool-audit.test.mjs +17 -0
package/MANIFEST.SHA256
CHANGED
|
@@ -1336,7 +1336,7 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
|
|
|
1336
1336
|
f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
|
|
1337
1337
|
51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
|
|
1338
1338
|
3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
|
|
1339
|
-
|
|
1339
|
+
bb11323f54c778749710551a125f70462889234e6c70d6a754e98d5e0f0d14e4 package.json
|
|
1340
1340
|
872947dffd89755b03558b217129f009dc9f4fd1ce55e93c602fc6ea97ba8b48 proof/commander-closure-20260927/CONTINUATION.json
|
|
1341
1341
|
2959980d295814aaa0df71fdb358d2cbfd01c1357ee36ef6b10c149875bdb262 proof/commander-closure-20260927/RESULT.json
|
|
1342
1342
|
2c2866309ca3a6fc8de5b03d445f1dcf0778474fa25cefb822b2ab729bc91c62 proof/commander-closure-20260927/SEARCH-CONTINUATION.json
|
|
@@ -1400,7 +1400,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
|
|
|
1400
1400
|
bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
|
|
1401
1401
|
2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
|
|
1402
1402
|
f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
|
|
1403
|
-
|
|
1403
|
+
67db4e9b1190ef49d90b785cd48fbcafed80580c67272ecf7026e825bd9982fe PROVENANCE.json
|
|
1404
1404
|
27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
|
|
1405
1405
|
0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
|
|
1406
1406
|
bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
|
|
@@ -1408,14 +1408,16 @@ bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.jso
|
|
|
1408
1408
|
f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.json
|
|
1409
1409
|
731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
|
|
1410
1410
|
d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1411
|
+
fa1506b4d59a29d865229be242e7e94c2b71eaca617f3741647c2ba0361e6b71 README.txt
|
|
1412
|
+
8dda5c857bdf0c91e30446401d7679e0d4aa63f9e9d19a8e78fb0c0e7ba9fe22 RELEASE.json
|
|
1413
|
+
d3f8aee77f036e59951d56ab95fda98a050017fba7be8cf178761eb3236383a4 SBOM.cdx.json
|
|
1414
|
+
7c86062c4f69db3179a129d65945ccfab1b1c1c5bcc29b91383eac097d50f2aa scripts/activate-skill-creator-1.1.1.mjs
|
|
1414
1415
|
bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
|
|
1415
1416
|
8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
|
|
1416
1417
|
1d4e9dee6f0669bd825334a6a72e13ee85ee29ab430dcef21d893ffd744774b5 scripts/autonomous-benchmark.mjs
|
|
1417
1418
|
34f9318b6f4afb29948fdc5ab973edca4dfc4fbd63c9a5105478b5e95812dabf scripts/autonomous-build.ps1
|
|
1418
1419
|
075acd7616740135973497d676dcd0431f0437bdba87e4eedba4751cb148ff02 scripts/autonomous-tests.ps1
|
|
1420
|
+
7c3f2a157f64aef9e605b5fe84d75fbdd88312f09d0ad89effb33de82aa39ab8 scripts/build-advanced-pcb-skill.mjs
|
|
1419
1421
|
70bccc3572de7e26ac91154b9d87185feab0c2dbfc4cbd40f89660e5769f53b0 scripts/build-combined-skill.mjs
|
|
1420
1422
|
92f23292ce358af88e6c42e126791c57b25d2b0689c538940d8c0745b7447d4e scripts/build-containment.ps1
|
|
1421
1423
|
f29c45250e58c5bfbf60089c17317845b6d8e3ef4a4874a37b7ed28538072ca7 scripts/build-desktop-r40.ps1
|
|
@@ -1448,6 +1450,7 @@ d4710039ceff7380f3b6a0040ad118a81eabdda2706c459f9b81f8e08978fba4 scripts/deferr
|
|
|
1448
1450
|
2cc7a37231f8836a48c3bf4024887f38c10bfc89296ac483e4b98b3f18281933 scripts/derive-r45-parent.mjs
|
|
1449
1451
|
67221c5619019a9d19611432d4361c99c365f14e89483e4c8f78451839960176 scripts/derive-r45-release.mjs
|
|
1450
1452
|
87c6acc0df96a6e8bb6692bc7b12e8b386196a80cba554d9b214ff8bb12147fe scripts/derive-r45-tests.mjs
|
|
1453
|
+
1c6b06cc64d04af7337f769e6a021570799312f68158321e82cbcb07663cf494 scripts/diagnose-skill-tree.mjs
|
|
1451
1454
|
899de2ec448597d2a7432f4c25a2c2b7002e19a9297af42acc8a90cb6d37a72b scripts/disarm-host-for-update-r47.mjs
|
|
1452
1455
|
a66155921f249a960d83ba1c79b2ab255b6e8b148197498a1d184644818a0e77 scripts/extract-r46-failures.mjs
|
|
1453
1456
|
69e3beb55573b5fc3ba30a220fabf9e3585e7757430fb3264caf27e41254b789 scripts/final-closure-r36.mjs
|
|
@@ -1506,6 +1509,17 @@ de6142bd5693cf4edb8725c9c43fc77e9bdc12f5b398a757006d778d3ee3f8ed scripts/inspec
|
|
|
1506
1509
|
7ea8cf6bf094a1612603bc716228a3753e5f06fca8a0684d2da15a04d0710c64 scripts/list-source-zips.mjs
|
|
1507
1510
|
9d12d15f7c83ddf272834072ed37d618a232bd8a3fd36c339761fe08bb9380d8 scripts/npm-publish-r47.ps1
|
|
1508
1511
|
4f1a6e0f8d23bd24b066b3a2df0cae1d47822c16c754122fde78dc509d0752f8 scripts/npm-release-r47.mjs
|
|
1512
|
+
53f6a7ff102ea1252cd1f855bfe4649f1b55f693b69ebe7429b1c466ceca4927 scripts/npm-release-r48.mjs
|
|
1513
|
+
31bc0af20f7eecddda5f845da023f1d1750c70627ce872a885a3b06596c0c07f scripts/pcb-skill-src-bringup-evidence.md.txt
|
|
1514
|
+
75d59f8e8d25fefb1f3afa7bd37f17287f277a7bcd09a04813daa9dea9d629fd scripts/pcb-skill-src-constraint-model.md.txt
|
|
1515
|
+
eb350a6f70b822afaeedbf944ce017b4cc351edac599173b352d8b685207686e scripts/pcb-skill-src-emc-mechanical-dfm.md.txt
|
|
1516
|
+
5498f77b84534234f0423bf6d1fe55d937adafce733a149b943db2b0407f5f9c scripts/pcb-skill-src-high-speed-layout.md.txt
|
|
1517
|
+
271317b8ff2b0a44c0d21805d2967156269a1b46d3c5a9cd9122e58f7b710776 scripts/pcb-skill-src-kicad_pcb_probe.py.txt
|
|
1518
|
+
5bea60ea45e101669f1f6b14eac8a7319dee93fe24f3fc541fa1cadae611f69f scripts/pcb-skill-src-kicad-native.md.txt
|
|
1519
|
+
6fee41a163848455a9c25836c51da078afcb09baca2d632b6f8ab9a847d71b1a scripts/pcb-skill-src-pcb_constraint_gate.py.txt
|
|
1520
|
+
3c6fbfcca22cd92c269bb28888f89ceaee269795555d8dc57a1f9ea51684cc4e scripts/pcb-skill-src-power-integrity.md.txt
|
|
1521
|
+
395fff4e0e6fb8fedf89e400be8e3f42e631e04568c06445651beb8f9866f608 scripts/pcb-skill-src-SKILL.md.txt
|
|
1522
|
+
822045f2dac3d8cd675ccfc95b48fadaa4dc73e5ffdf94360bcd6e99104634d0 scripts/prepare-skill-creator-1.1.1.mjs
|
|
1509
1523
|
453dd636b452f4343a36f31a93a763e97f58ed5d6c9df3d2ba05b236934a3a1f scripts/probe-source-zips.mjs
|
|
1510
1524
|
8f9d97a4d23e9d05e7cadfb6a519b1ddb9da04894bca98bdc293fc3797e8423c scripts/probe-zips.mjs
|
|
1511
1525
|
15682482e4ad44f0d297174f5ccebb1c4e6eff21555941425f5be4e39e464fb0 scripts/promote-local-c-generation.ps1
|
|
@@ -1549,6 +1563,8 @@ b0cc75c38e0163dbcf7fb1b0d21f2dc34c71f2d0e2a156a53e570ff84afc64e6 scripts/semant
|
|
|
1549
1563
|
bf54d2dfa2a77c2c13cc0b8a9ac2eb926132ecd331ad56ebbf88cc5cc4280a96 scripts/sign-adaptive-skill.mjs
|
|
1550
1564
|
3df15bb574df6f10ec159f6c3cfdb6c3d692e02abcaecf92e637d79eebd90b25 scripts/test-r48-post-bump.ps1
|
|
1551
1565
|
f5fb0103cf7a77478976ba97166e49c443ec29533fa4b75edea13450e290ed6d scripts/test-r48-windows-observation.ps1
|
|
1566
|
+
f104a679ded20e1ee008182984fdab152120c051ee4a8962e08a591de7b35402 scripts/test-skill-creator-semver-matrix.mjs
|
|
1567
|
+
36cb4d39553a8c516ff2ca0893c0b61f96fe2222a05c5a21edc4809424ac673c scripts/test-skill-creator-semver.mjs
|
|
1552
1568
|
0a115aa9829576c86cc247f754cae69ae09ba146b637d3a1c9fbc16420d20a5d scripts/tool-surface-snapshot.mjs
|
|
1553
1569
|
f8d9c6718cbe20e02e517297e8f35f51c7dcd51b62b8b4a483630a9cd3b1f788 scripts/verify-memory-r41.mjs
|
|
1554
1570
|
e552634ca1f8673f5daaaf5e45302d2a7fc4b1a1eac256f60bed2c9136bafa05 scripts/verify-package.ps1
|
|
@@ -1637,7 +1653,7 @@ dcd4c9784e88e253e91ddad3c24b38cb0b36906ed737f6d7bee7712360f66f7a src/containmen
|
|
|
1637
1653
|
fe1761b98738e1aea1d25ddf3a0ba56ccad95a43d45104a89b8665197c7c9e18 src/containment-result.mjs
|
|
1638
1654
|
705a89cb12fedb993d55dfed32a5870d33e10db26422c944d1e52223566c096c src/containment-smoke.mjs
|
|
1639
1655
|
63a1d4d6a53f9eb7e02197b4e42158b867da8c042c2e61848d8a36cd398b8bd8 src/context-provenance.mjs
|
|
1640
|
-
|
|
1656
|
+
e5a951612b9514baf8bea4b6500e1f1d6c7c072352a1b46a34209a6729222647 src/deadbyte-cli.mjs
|
|
1641
1657
|
9e9766d64dcc9e2c8d23c2c0a5e9dcb87b7213e8de668f79f593ad48daf15acd src/deadline-cancellation.mjs
|
|
1642
1658
|
fe7a8f8611c33552b3da466a9b866ce79a737bfd5b9a78a953269b30cce16274 src/desktop-contract.mjs
|
|
1643
1659
|
f97352e510c659910c2d4a874d15be028e1291d685c6c1a7be53bdf1a335c2d8 src/desktop-input-r40.mjs
|
|
@@ -1712,7 +1728,7 @@ a1a0ac13b2d23fa7e0cbe1c093052b68ff3498982d9abeb27dba4dec404a8908 src/release-ge
|
|
|
1712
1728
|
0f0d0ff4f1b517a5cfbc13dd96e09a3672ff223b9fbb75d082bee101cc8eed80 src/release-slot.mjs
|
|
1713
1729
|
3f41fa32ddeed403b5431a338821b62e0c1946a9d808f06d0edb2d9341ca0121 src/remote-console.mjs
|
|
1714
1730
|
ce6ec7ec794d1603f95311eac4712a0f8b26e7e96bc3617f88fba4297cc8b376 src/remote-device-r44.mjs
|
|
1715
|
-
|
|
1731
|
+
84f571351fa0f3b84ec084409e01509beb6a929bcbe174916bcff4322eb61c0e src/remote-live-log.mjs
|
|
1716
1732
|
6131fda046bf7a751ffc99d922e8f14bdbc3accff9ee81b4f5ebef5b7b2f9b98 src/remote-mcp-autonomous-smoke-client.mjs
|
|
1717
1733
|
ebff2982142263632a40b9f144e802b9cb0c86c798bb6c591de7f175ba50b660 src/remote-mcp-coding-smoke-client.mjs
|
|
1718
1734
|
03c5dfe0b1cb55d84a0217cd59aca799e17c69b248549af2b3f2dc80d52bf315 src/remote-mcp-desktop-r40-smoke-client.mjs
|
|
@@ -1741,7 +1757,7 @@ a14cb827602d74f7c9822098815add8bf1ab6b27598d22b44880c8c98e754c1b src/semantic-l
|
|
|
1741
1757
|
3640e91254d3ed000ba32c41d3582de8af492915c6ee23f284e36f3873519616 src/skill-plane-r44.mjs
|
|
1742
1758
|
3dc2102335cd1e86ee52a11950f80ff6e1771f4291325d4f95a8ea2b849617cc src/stdio-console-guard.mjs
|
|
1743
1759
|
6dccdb538be9783276399a5ad2cce54b1f0d8cc305fd58bee9f0f46d6a412af6 src/text-policy.mjs
|
|
1744
|
-
|
|
1760
|
+
fbc50dcd21c87814191ddc235da7d425ffbb1bcfe4446dda1a7fae1d5ae9ce14 src/tool-audit.mjs
|
|
1745
1761
|
ac7394cf2c353dfab645937ab7bfb6eed7e42f345c1d46185f37f9d65772104c src/tool-surface-ledger.mjs
|
|
1746
1762
|
bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init.mjs
|
|
1747
1763
|
1325b75abd94c44ea53278e2763448d3065d7cce979581f223dd186e05e3234e src/trust.mjs
|
|
@@ -1749,11 +1765,11 @@ bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init
|
|
|
1749
1765
|
aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
|
|
1750
1766
|
642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
|
|
1751
1767
|
8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
|
|
1752
|
-
|
|
1768
|
+
4be74d98025e9c75d47c56e63959a58648caec445ed2180bbc4d93921b3e0efb src/version.mjs
|
|
1753
1769
|
7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
|
|
1754
1770
|
76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
|
|
1755
1771
|
4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
|
|
1756
|
-
|
|
1772
|
+
9d07810c705bd06b0fcb45dc8d3c5228432aed891708a5aa6aa8525e4abb2a34 TEST-MATRIX.json
|
|
1757
1773
|
e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
|
|
1758
1774
|
2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
|
|
1759
1775
|
d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
|
|
@@ -1921,7 +1937,7 @@ f95c920ee2b24d5ec940a9bae277771562ce275556bd89f0071f183b13c154b8 test/fixtures/
|
|
|
1921
1937
|
161cbd9839cad5623348c989bb2b8564df233e01c903de246112d8e6dc0ae9f4 test/full-max-catalog-r45.test.mjs
|
|
1922
1938
|
2d4224bce83aad63d70f87d55cf13e06074b2867d627cdeb48c0a73ec53d3489 test/full-max-catalog-r46.test.mjs
|
|
1923
1939
|
1a5941d5105e970174dc5400fb6341c18211ffad01352e6c7994eb1dd905432d test/full-max-catalog-r47.test.mjs
|
|
1924
|
-
|
|
1940
|
+
97e86d898361c7b11a7c11a92549617e28e51a2bd6ce115dbbe59d096ab0e8bf test/full-max-catalog-r48.test.mjs
|
|
1925
1941
|
3cecf2bb61027d210f6bdf65a140ce1d5bedf2d4135e02f94edfeb2ef89ae6ae test/fuzzy-search-r46.test.mjs
|
|
1926
1942
|
506e5437ed41da3955d006294d81230c25825ff898b266fa2758ffd885ee3d07 test/hardware-observation-r45.test.mjs
|
|
1927
1943
|
2efdac248a608fe84588de8e9223f39ee32d4a483f71594ab05f20f1110be0c9 test/helpers/autonomous-r34-fixture.mjs
|
|
@@ -1991,7 +2007,7 @@ d8f544bbcdfff61f7abb7705ad7e5e1f17998f5fde3c114fb33915fc66d1408f test/r41-final
|
|
|
1991
2007
|
2c5f2093b945c267c8d09cd2da0875c7f45911a7c01aa02a50cd64c2c1a7ccdc test/r45-autonomous-quick-test.test.mjs
|
|
1992
2008
|
532075c86893caf68a2d0ea09171bee4c7d60892c1892011285376a2c186ed92 test/r45-finalization.test.mjs
|
|
1993
2009
|
25a21ccffcf566b020b8f3c6c0a5a3b7ff06b243fff84e405207e458640ba487 test/r47-release-contract.test.mjs
|
|
1994
|
-
|
|
2010
|
+
4fed46e370f50ec096d1d63b86158fc3c17b9300ac2000d89052951ee9426fae test/r48-release-contract.test.mjs
|
|
1995
2011
|
e45a6cd299d8d65bdeb9bc0117ce1eb2b47fdebad89a02413ee979c9d0ae3a5c test/release-activation-gate.test.mjs
|
|
1996
2012
|
85f6dc2059fd19d03452309ffe67bed5b87da8e6f0ce3a85cab58cba8b197ceb test/release-generation.test.mjs
|
|
1997
2013
|
bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
|
|
@@ -2001,11 +2017,11 @@ aa93286ac9887413d890e14e5f448cca327bd1361017cda24e1bdd9f383edacb test/release-v
|
|
|
2001
2017
|
c270a4e2d1384071e7c406f4ec8c8c1da56228844bf64362cffa03558be3cc49 test/remote-console-r40.test.mjs
|
|
2002
2018
|
ba122b4a7a6953b9fc8187a531a3e8b0f5f8519da602c551b32df8c88c85e879 test/remote-device-r44.test.mjs
|
|
2003
2019
|
3d26a0550a22c69990567d998c28e4ba0978c71429741c10c7c47f261653fbe2 test/remote-live-log-r36.test.mjs
|
|
2004
|
-
|
|
2020
|
+
daf7d33e31d9fbd78e8b6c5165c7f0b7df0cb0fcf6b8c02677c53395b39f2c71 test/remote-live-log-r37.test.mjs
|
|
2005
2021
|
02ad827dc46e3dacf1ef2cfd861f583a44c471b1411cc674f4d61cd421418ad3 test/remote-live-log-recovery-r36.test.mjs
|
|
2006
2022
|
e7417da0df95b624d7a65fc21d6cde943cbe657644e1b9da8b32136c55a5228f test/remote-r24-catalog.test.mjs
|
|
2007
2023
|
08e0a98e665783a1a4489534e3021d398d81df00c6974e6b957723445e92bad4 test/remote-result-journal.test.mjs
|
|
2008
|
-
|
|
2024
|
+
23963b84df0644c04c0a6a07b1c357465adfe9dbc7d3a7918215a3d8ca96e4e4 test/remote-session-cli.test.mjs
|
|
2009
2025
|
ef8aa55479acc923d3fee89a463096d003826cfffc356fffa4ab0ef371345070 test/runtime-host-bootstrap-r45.test.mjs
|
|
2010
2026
|
6cd3ea90399a4b7c4055d3ad5a159f14cb28454922966c80e1aeb783e519d81a test/runtime-self-update.test.mjs
|
|
2011
2027
|
b131611ec56e83d5db05d40b9be9b029396a177bca1ddacac9bf13086d370897 test/semantic-backend-registry.test.mjs
|
|
@@ -2023,7 +2039,7 @@ abfbc97af4a3337694f2362c00da24fd2a06b526ba324e04d0d0816197c75595 test/semantic-
|
|
|
2023
2039
|
ce8c503863544f36d101c079187d5f02ff5868c526c36f05cf5bea4a7ba2c015 test/skill-plane-r44.test.mjs
|
|
2024
2040
|
a98537d1136988251572f424b29ff8f798356dcfd9a7a1d4238a9c7e943e6a52 test/standing-grants.test.mjs
|
|
2025
2041
|
2c8ad3d273965fa6f7ba2f3aa1ee50791a28f4dcf6dfc8cd8d73510f2577f9f9 test/task-contract-r42.test.mjs
|
|
2026
|
-
|
|
2042
|
+
4803d1be25f608a55e8fa89857e359277c408dd644d463338b0ceeb6e518100e test/tool-audit.test.mjs
|
|
2027
2043
|
1ffc13c7ae2010d5c29b02fcb6b2226f52152ce3dd8064fce6d321701f919952 test/tool-surface-ledger.test.mjs
|
|
2028
2044
|
be2f1dcbcba6cadc6bcfcb9e2ad94c078a1ac285e93295991fbfbdcf98eee65e test/tool-surface-snapshot.test.mjs
|
|
2029
2045
|
197bd6664f4a8e8d3769c058d693b363ed5a9ad2e69aec8ee37ffb289c6d03c4 test/tracer-bullet.test.mjs
|
package/PROVENANCE.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.provenance.v1",
|
|
3
|
-
"version": "0.15.
|
|
4
|
-
"builder": "deadbyte-r48-
|
|
5
|
-
"source_model": "development-root ->
|
|
3
|
+
"version": "0.15.23",
|
|
4
|
+
"builder": "deadbyte-r48-human-livelog-trace-visual-opcode",
|
|
5
|
+
"source_model": "development-root -> visual-opcode human livelog + absolute policy-root paths + trace/span hierarchy + presentation filters + TTY in-place result rewrite + expanded session statistics -> bounded R48 regression -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed machine truth",
|
|
6
6
|
"signing": "ed25519",
|
|
7
|
-
"parent_release_id": "v0.15.
|
|
8
|
-
"parent_manifest_sha256": "
|
|
9
|
-
"parent_generation_manifest_sha256": "
|
|
10
|
-
"source_predecessor_version": "0.15.
|
|
11
|
-
"source_predecessor_tarball_sha256": "
|
|
12
|
-
"source_predecessor_manifest_file_sha256": "
|
|
7
|
+
"parent_release_id": "v0.15.22-ed178d33bf883f68",
|
|
8
|
+
"parent_manifest_sha256": "ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8",
|
|
9
|
+
"parent_generation_manifest_sha256": "029b177dc1838388ddec154be38cb597a4dcfa0711b2297196d5a9e7cb8dbe18",
|
|
10
|
+
"source_predecessor_version": "0.15.22",
|
|
11
|
+
"source_predecessor_tarball_sha256": "fda51e06fa16116179d9c48f1466432886c10e62807482326d2dc5ccb7b66eac",
|
|
12
|
+
"source_predecessor_manifest_file_sha256": "ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8",
|
|
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 0.15.
|
|
16
|
+
"reproducibility": "manifest-bound package bytes; exact 0.15.22 registry predecessor SHA-256; deterministic visual-opcode/trace/filter renderer tests; remote-session journal preservation under presentation filtering; TTY rewrite contract; bounded R48 regression; signed machine truth after activation"
|
|
17
17
|
}
|
package/README.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
DEADBYTE MCP V0.15.
|
|
1
|
+
DEADBYTE MCP V0.15.23 / R48 HUMAN LIVELOG TRACE + VISUAL OPCODE BASELINE
|
|
2
2
|
=========================
|
|
3
3
|
|
|
4
4
|
AUTHENTICATED MACHINE TRUTH + DURABLE AGENT + CODING + AUTONOMOUS PRODUCTION ENGINE
|
|
@@ -7,12 +7,12 @@ NPX PRIMARY OPERATOR UX
|
|
|
7
7
|
------------------------
|
|
8
8
|
Use the npm CLI entry point instead of the legacy CMD convenience wrapper:
|
|
9
9
|
|
|
10
|
-
npx -y deadbyte-mcp@0.15.
|
|
11
|
-
npx -y deadbyte-mcp@0.15.
|
|
12
|
-
npx -y deadbyte-mcp@0.15.
|
|
13
|
-
npx -y deadbyte-mcp@0.15.
|
|
14
|
-
npx -y deadbyte-mcp@0.15.
|
|
15
|
-
npx -y deadbyte-mcp@0.15.
|
|
10
|
+
npx -y deadbyte-mcp@0.15.23 mcp
|
|
11
|
+
npx -y deadbyte-mcp@0.15.23 remote
|
|
12
|
+
npx -y deadbyte-mcp@0.15.23 remote status
|
|
13
|
+
npx -y deadbyte-mcp@0.15.23 remote restart
|
|
14
|
+
npx -y deadbyte-mcp@0.15.23 audit status
|
|
15
|
+
npx -y deadbyte-mcp@0.15.23 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.
|
|
@@ -29,6 +29,17 @@ and a random 256-bit session nonce, prevents concurrent foreground sessions, and
|
|
|
29
29
|
recover only a dead, unguarded stale owner. Explicit subcommands such as `remote status` remain
|
|
30
30
|
one-shot controller operations.
|
|
31
31
|
|
|
32
|
+
R48 HUMAN LIVELOG TRACE + VISUAL OPCODES
|
|
33
|
+
----------------------------------------
|
|
34
|
+
The foreground remote console treats emoji as visual opcodes rather than decoration. File reads, writes,
|
|
35
|
+
edits, searches, commands, verification, desktop, autonomous, policy-denial, and unknown-side-effect states
|
|
36
|
+
use stable semantic glyphs with deterministic ASCII fallback. Policy root ids resolve to absolute host paths
|
|
37
|
+
in the human projection while the root id remains visible. `remote --trace` adds trace/span/parent identity
|
|
38
|
+
without exposing payload bytes. `remote --filter` filters presentation only; the durable result journal and
|
|
39
|
+
audit stream retain every event. Interactive TTY output rewrites a matching RUNNING line in place only when
|
|
40
|
+
the terminal result belongs to the same request; unrelated output forces a newline first. Session summaries
|
|
41
|
+
report outcome classes, mutation count, p50/p95 latency, slowest tool, heartbeat folding, and top tools.
|
|
42
|
+
|
|
32
43
|
The legacy CMD file remains only as an R33 compatibility artifact until activation/rollback/restore
|
|
33
44
|
proof confirms the npx path; it is not the primary operator interface. Audit data lives under the
|
|
34
45
|
stable mutable state root and never inside immutable release slots.
|
package/RELEASE.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.release.v1",
|
|
3
3
|
"name": "deadbyte-mcp",
|
|
4
|
-
"version": "0.15.
|
|
4
|
+
"version": "0.15.23",
|
|
5
5
|
"train": "R48",
|
|
6
|
-
"label": "
|
|
6
|
+
"label": "HUMAN LIVELOG TRACE + VISUAL OPCODE BASELINE",
|
|
7
7
|
"protocol_revision": "2026-07-28",
|
|
8
8
|
"parent": {
|
|
9
|
-
"release_id": "v0.15.
|
|
10
|
-
"manifest_sha256": "
|
|
11
|
-
"generation_manifest_sha256": "
|
|
9
|
+
"release_id": "v0.15.22-ed178d33bf883f68",
|
|
10
|
+
"manifest_sha256": "ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8",
|
|
11
|
+
"generation_manifest_sha256": "029b177dc1838388ddec154be38cb597a4dcfa0711b2297196d5a9e7cb8dbe18"
|
|
12
12
|
},
|
|
13
13
|
"source_predecessor": {
|
|
14
|
-
"version": "0.15.
|
|
15
|
-
"tarball_sha256": "
|
|
16
|
-
"manifest_file_sha256": "
|
|
14
|
+
"version": "0.15.22",
|
|
15
|
+
"tarball_sha256": "fda51e06fa16116179d9c48f1466432886c10e62807482326d2dc5ccb7b66eac",
|
|
16
|
+
"manifest_file_sha256": "ed178d33bf883f68b4f39f2e8bb805094bc8024b30114c4e6a34b80930cfcff8",
|
|
17
17
|
"reference_package": "@wonderwhy-er/desktop-commander@0.2.51",
|
|
18
18
|
"reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
|
|
19
19
|
"reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
|
|
@@ -87,6 +87,12 @@
|
|
|
87
87
|
],
|
|
88
88
|
"machine_fs_list_entry_fault_isolation": true,
|
|
89
89
|
"native_windows_observation": true,
|
|
90
|
-
"native_windows_observer_sha256": "c9b46fc497b55b8f0ad1564c8e15f9c1cdf2a07f206b3c8fa7966c892058e920"
|
|
90
|
+
"native_windows_observer_sha256": "c9b46fc497b55b8f0ad1564c8e15f9c1cdf2a07f206b3c8fa7966c892058e920",
|
|
91
|
+
"human_livelog_visual_opcode": true,
|
|
92
|
+
"human_livelog_absolute_root_paths": true,
|
|
93
|
+
"human_livelog_trace_span": true,
|
|
94
|
+
"human_livelog_presentation_filter": true,
|
|
95
|
+
"human_livelog_tty_in_place_rewrite": true,
|
|
96
|
+
"human_livelog_expanded_summary": true
|
|
91
97
|
}
|
|
92
98
|
}
|
package/SBOM.cdx.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.6",
|
|
4
|
-
"serialNumber": "urn:cdx:deadbyte-mcp:r48:0.15.
|
|
4
|
+
"serialNumber": "urn:cdx:deadbyte-mcp:r48:0.15.23",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
7
|
"component": {
|
|
8
8
|
"type": "application",
|
|
9
9
|
"name": "deadbyte-mcp",
|
|
10
|
-
"version": "0.15.
|
|
10
|
+
"version": "0.15.23"
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"components": [
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
{
|
|
35
35
|
"type": "file",
|
|
36
36
|
"name": "deadbyte-hardware-observer-r45.exe",
|
|
37
|
-
"version": "0.15.
|
|
37
|
+
"version": "0.15.23",
|
|
38
38
|
"hashes": [
|
|
39
39
|
{
|
|
40
40
|
"alg": "SHA-256",
|
package/TEST-MATRIX.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.test-matrix.v1",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.23",
|
|
4
4
|
"train": "R48",
|
|
5
5
|
"primary_platform": "win32-x64",
|
|
6
6
|
"reference": {
|
|
@@ -50,6 +50,16 @@
|
|
|
50
50
|
"command": "npm run r48:release:test",
|
|
51
51
|
"expected": "PASS"
|
|
52
52
|
},
|
|
53
|
+
{
|
|
54
|
+
"id": "human-livelog",
|
|
55
|
+
"command": "node --test test/remote-live-log-r37.test.mjs",
|
|
56
|
+
"expected": "PASS visual opcode, absolute-root, trace/span, filter, TTY rewrite, expanded summary"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "remote-livelog-integration",
|
|
60
|
+
"command": "node --test test/remote-session-cli.test.mjs",
|
|
61
|
+
"expected": "PASS trace/filter presentation with complete durable result journal"
|
|
62
|
+
},
|
|
53
63
|
{
|
|
54
64
|
"id": "full-regression",
|
|
55
65
|
"command": "npm run r48:full:test",
|
|
@@ -77,13 +87,13 @@
|
|
|
77
87
|
},
|
|
78
88
|
{
|
|
79
89
|
"id": "activation",
|
|
80
|
-
"command": "npx -y deadbyte-mcp@0.15.
|
|
81
|
-
"expected": "active runtime 0.15.
|
|
90
|
+
"command": "npx -y deadbyte-mcp@0.15.23 remote status",
|
|
91
|
+
"expected": "active runtime 0.15.23 with no VERSION SKEW"
|
|
82
92
|
},
|
|
83
93
|
{
|
|
84
94
|
"id": "machine-truth",
|
|
85
95
|
"command": "signed machine_ping",
|
|
86
|
-
"expected": "release_id and manifests bind activated 0.15.
|
|
96
|
+
"expected": "release_id and manifests bind activated 0.15.23 generation"
|
|
87
97
|
},
|
|
88
98
|
{
|
|
89
99
|
"id": "live-capability-truth",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.23",
|
|
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.",
|
|
@@ -71,7 +71,8 @@
|
|
|
71
71
|
"r47:hardening:test": "node scripts/commander-hardening-gate-r47.mjs",
|
|
72
72
|
"r48:full:test": "node scripts/full-regression-r48.mjs",
|
|
73
73
|
"r48:release:test": "node --test --test-concurrency=1 test/r48-release-contract.test.mjs test/commander-reference-contract-r48.test.mjs test/commander-extended-wire-r48.test.mjs test/commander-external-process-r48.test.mjs test/commander-office-reader-r48.test.mjs test/commander-pdf-r48.test.mjs test/commander-url-reader-r48.test.mjs test/commander-wire-contract-r47.test.mjs",
|
|
74
|
-
"r48:catalog:test": "node --test --test-concurrency=1 test/full-max-catalog-r48.test.mjs"
|
|
74
|
+
"r48:catalog:test": "node --test --test-concurrency=1 test/full-max-catalog-r48.test.mjs",
|
|
75
|
+
"release:npm": "node scripts/npm-release-r48.mjs"
|
|
75
76
|
},
|
|
76
77
|
"bundleDependencies": [
|
|
77
78
|
"@modelcontextprotocol/server",
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { readFile, rename, rm, mkdir } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { createSkillPlane } from "../src/skill-plane-r44.mjs";
|
|
5
|
+
|
|
6
|
+
const stateDir=path.join(os.homedir(),".deadbyte-mcp");
|
|
7
|
+
const skillsRoot=path.join(stateDir,"skills");
|
|
8
|
+
const active=path.join(skillsRoot,"skill-creator");
|
|
9
|
+
const stageParent=path.join(stateDir,"skill-staging","skill-creator-1.1.1");
|
|
10
|
+
const candidate=path.join(stageParent,"skill-creator");
|
|
11
|
+
const expectedOld="f34b3953db176c8ae9a5e08e7702b39f12b60b013edcd2f4d63a6268af9ba432";
|
|
12
|
+
const expectedNew="e39960cab9eab44512fa38703fc8255b8be8e8b4f6565b4255b94604eded5359";
|
|
13
|
+
|
|
14
|
+
const oldEnv=JSON.parse(await readFile(path.join(active,"skill.json"),"utf8"));
|
|
15
|
+
const newEnv=JSON.parse(await readFile(path.join(candidate,"skill.json"),"utf8"));
|
|
16
|
+
if(oldEnv.manifest_sha256!==expectedOld||oldEnv.body.version!=="1.1.0") throw new Error("active precondition failed");
|
|
17
|
+
if(newEnv.manifest_sha256!==expectedNew||newEnv.body.version!=="1.1.1") throw new Error("candidate precondition failed");
|
|
18
|
+
|
|
19
|
+
const stagePlane=await createSkillPlane({root:stageParent,verifyKeyPath:path.join(stateDir,"trust","ed25519-public.pem")});
|
|
20
|
+
const staged=await stagePlane.load({name:"skill-creator"});
|
|
21
|
+
if(!staged.verified||staged.version!=="1.1.1") throw new Error("candidate signature verification failed");
|
|
22
|
+
|
|
23
|
+
const swapRoot=path.join(stateDir,"skill-staging","swap");
|
|
24
|
+
await mkdir(swapRoot,{recursive:true});
|
|
25
|
+
const oldSwap=path.join(swapRoot,"skill-creator-1.1.0-"+expectedOld);
|
|
26
|
+
await rm(oldSwap,{recursive:true,force:true});
|
|
27
|
+
|
|
28
|
+
let movedOld=false,movedNew=false;
|
|
29
|
+
try{
|
|
30
|
+
await rename(active,oldSwap); movedOld=true;
|
|
31
|
+
await rename(candidate,active); movedNew=true;
|
|
32
|
+
const livePlane=await createSkillPlane({root:skillsRoot,verifyKeyPath:path.join(stateDir,"trust","ed25519-public.pem")});
|
|
33
|
+
const live=await livePlane.load({name:"skill-creator"});
|
|
34
|
+
if(!live.verified||live.version!=="1.1.1"||live.manifest_sha256!==expectedNew) throw new Error("live verification failed after swap");
|
|
35
|
+
await rm(oldSwap,{recursive:true,force:true});
|
|
36
|
+
await rm(stageParent,{recursive:true,force:true});
|
|
37
|
+
console.log(JSON.stringify({status:"ACTIVATED",version:live.version,manifest_sha256:live.manifest_sha256,verified:live.verified},null,2));
|
|
38
|
+
}catch(e){
|
|
39
|
+
try{
|
|
40
|
+
if(movedNew) await rename(active,candidate);
|
|
41
|
+
if(movedOld) await rename(oldSwap,active);
|
|
42
|
+
}catch(rollbackError){
|
|
43
|
+
e.message += "; rollback_failed="+rollbackError.message;
|
|
44
|
+
}
|
|
45
|
+
throw e;
|
|
46
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir, rm, mkdtemp } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { execFile } from "node:child_process";
|
|
7
|
+
import { createHash, createPrivateKey, createPublicKey, sign } from "node:crypto";
|
|
8
|
+
import { createSkillPlane } from "../src/skill-plane-r44.mjs";
|
|
9
|
+
|
|
10
|
+
const ex = promisify(execFile);
|
|
11
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const home = os.homedir();
|
|
13
|
+
const stateDir = path.join(home, ".deadbyte-mcp");
|
|
14
|
+
const skillsRoot = path.join(stateDir, "skills");
|
|
15
|
+
const creatorDir = path.join(skillsRoot, "skill-creator");
|
|
16
|
+
const name = "deadbyte-advanced-pcb-engineering";
|
|
17
|
+
const version = "1.0.0";
|
|
18
|
+
const out = path.join(skillsRoot, name);
|
|
19
|
+
const description = "Evidence-driven advanced PCB engineering workflow for schematic review, constraint capture, stackup-aware placement and routing, power and signal integrity, EMC, DFM/DFT, KiCad verification, manufacturing release, and hardware bring-up.";
|
|
20
|
+
const creatorManifest = "e39960cab9eab44512fa38703fc8255b8be8e8b4f6565b4255b94604eded5359";
|
|
21
|
+
|
|
22
|
+
const sha = b => createHash("sha256").update(b).digest("hex");
|
|
23
|
+
const canonical = v => Array.isArray(v) ? v.map(canonical) : v && typeof v === "object"
|
|
24
|
+
? Object.fromEntries(Object.keys(v).sort((a,b)=>a.localeCompare(b,"en")).map(k=>[k,canonical(v[k])]))
|
|
25
|
+
: v;
|
|
26
|
+
|
|
27
|
+
const sources = [
|
|
28
|
+
["SKILL.md", "pcb-skill-src-SKILL.md.txt", "skill"],
|
|
29
|
+
["references/bringup-evidence.md", "pcb-skill-src-bringup-evidence.md.txt", "reference"],
|
|
30
|
+
["references/constraint-model.md", "pcb-skill-src-constraint-model.md.txt", "reference"],
|
|
31
|
+
["references/emc-mechanical-dfm.md", "pcb-skill-src-emc-mechanical-dfm.md.txt", "reference"],
|
|
32
|
+
["references/high-speed-layout.md", "pcb-skill-src-high-speed-layout.md.txt", "reference"],
|
|
33
|
+
["references/kicad-native.md", "pcb-skill-src-kicad-native.md.txt", "reference"],
|
|
34
|
+
["references/power-integrity.md", "pcb-skill-src-power-integrity.md.txt", "reference"],
|
|
35
|
+
["scripts/kicad_pcb_probe.py", "pcb-skill-src-kicad_pcb_probe.py.txt", "script"],
|
|
36
|
+
["scripts/pcb_constraint_gate.py", "pcb-skill-src-pcb_constraint_gate.py.txt", "script"]
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
await rm(out, { recursive: true, force: true });
|
|
40
|
+
const scaffold = await ex(process.execPath, [path.join(creatorDir, "scripts", "create-skill.mjs"), skillsRoot, name, version], { maxBuffer: 1024 * 1024 });
|
|
41
|
+
|
|
42
|
+
for (const [target, src] of sources) {
|
|
43
|
+
const data = await readFile(path.join(here, src));
|
|
44
|
+
const dst = path.join(out, ...target.split("/"));
|
|
45
|
+
await mkdir(path.dirname(dst), { recursive: true });
|
|
46
|
+
await writeFile(dst, data);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const resources = [];
|
|
50
|
+
for (const [target,, kind] of sources) {
|
|
51
|
+
if (target === "SKILL.md") continue;
|
|
52
|
+
const bytes = await readFile(path.join(out, ...target.split("/")));
|
|
53
|
+
resources.push({ path: target, sha256: sha(bytes), kind });
|
|
54
|
+
}
|
|
55
|
+
resources.sort((a,b)=>a.path.localeCompare(b.path,"en"));
|
|
56
|
+
|
|
57
|
+
const body = {
|
|
58
|
+
schema: "deadbyte.skill-manifest.v1",
|
|
59
|
+
name,
|
|
60
|
+
version,
|
|
61
|
+
description,
|
|
62
|
+
audience: "agent",
|
|
63
|
+
skill_md_sha256: sha(await readFile(path.join(out, "SKILL.md"))),
|
|
64
|
+
resources,
|
|
65
|
+
required_capabilities: [],
|
|
66
|
+
authority_planes: ["coding"],
|
|
67
|
+
provenance: {
|
|
68
|
+
source: "skill-creator",
|
|
69
|
+
origin_url: null,
|
|
70
|
+
source_revision: "local-draft-2026-09-27-pcb-v1"
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const bodyBytes = Buffer.from(JSON.stringify(canonical(body)), "utf8");
|
|
75
|
+
const body_sha256 = sha(bodyBytes);
|
|
76
|
+
const priv = createPrivateKey(await readFile(path.join(stateDir, "trust", "ed25519-private.pem")));
|
|
77
|
+
const pub = createPublicKey(priv);
|
|
78
|
+
const keyId = sha(pub.export({ type: "spki", format: "der" }));
|
|
79
|
+
const attestation = {
|
|
80
|
+
algorithm: "ed25519",
|
|
81
|
+
domain: "DEADBYTE-SKILL-MANIFEST-V1",
|
|
82
|
+
key_id: keyId,
|
|
83
|
+
signature_base64: sign(null, Buffer.concat([Buffer.from("DEADBYTE-SKILL-MANIFEST-V1\0", "utf8"), bodyBytes]), priv).toString("base64")
|
|
84
|
+
};
|
|
85
|
+
const unsigned = { body, body_sha256, attestation };
|
|
86
|
+
const envelope = {
|
|
87
|
+
...unsigned,
|
|
88
|
+
manifest_sha256: sha(Buffer.from(JSON.stringify(canonical(unsigned)), "utf8"))
|
|
89
|
+
};
|
|
90
|
+
await writeFile(path.join(out, "skill.json"), JSON.stringify(envelope, null, 2), "utf8");
|
|
91
|
+
|
|
92
|
+
const validator = await ex(process.execPath, [path.join(creatorDir, "scripts", "validate-skill.mjs"), out], { maxBuffer: 1024 * 1024 });
|
|
93
|
+
|
|
94
|
+
const plane = await createSkillPlane({
|
|
95
|
+
root: skillsRoot,
|
|
96
|
+
verifyKeyPath: path.join(stateDir, "trust", "ed25519-public.pem")
|
|
97
|
+
});
|
|
98
|
+
const loaded = await plane.load({ name });
|
|
99
|
+
if (!loaded.verified) throw new Error("skill plane returned verified=false");
|
|
100
|
+
|
|
101
|
+
let python = null;
|
|
102
|
+
for (const candidate of ["python", "py"]) {
|
|
103
|
+
try {
|
|
104
|
+
await ex(candidate, ["--version"], { timeout: 10000, maxBuffer: 1024 * 1024 });
|
|
105
|
+
python = candidate;
|
|
106
|
+
break;
|
|
107
|
+
} catch {}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
let selfTest = { status: "SKIPPED", reason: "python_not_found" };
|
|
111
|
+
if (python) {
|
|
112
|
+
const tmp = await mkdtemp(path.join(os.tmpdir(), "deadbyte-pcb-skill-"));
|
|
113
|
+
try {
|
|
114
|
+
const fixture = [
|
|
115
|
+
"(kicad_pcb",
|
|
116
|
+
" (version 20240108)",
|
|
117
|
+
" (generator pcbnew)",
|
|
118
|
+
" (layers",
|
|
119
|
+
" (0 \"F.Cu\" signal)",
|
|
120
|
+
" (31 \"B.Cu\" signal)",
|
|
121
|
+
" )",
|
|
122
|
+
" (net 0 \"\")",
|
|
123
|
+
" (net 1 \"GND\")",
|
|
124
|
+
" (footprint \"TEST\" (layer \"F.Cu\"))",
|
|
125
|
+
" (segment (start 0 0) (end 1 0) (width 0.2) (layer \"F.Cu\") (net 1))",
|
|
126
|
+
" (via (at 1 0) (size 0.6) (drill 0.3) (layers \"F.Cu\" \"B.Cu\") (net 1))",
|
|
127
|
+
" (zone (net 1) (net_name \"GND\") (layer \"B.Cu\"))",
|
|
128
|
+
")",
|
|
129
|
+
""
|
|
130
|
+
].join("\n");
|
|
131
|
+
const fixturePath = path.join(tmp, "fixture.kicad_pcb");
|
|
132
|
+
const probePath = path.join(tmp, "probe.json");
|
|
133
|
+
const contractPath = path.join(tmp, "contract.json");
|
|
134
|
+
await writeFile(fixturePath, fixture, "utf8");
|
|
135
|
+
|
|
136
|
+
const probeScript = path.join(out, "scripts", "kicad_pcb_probe.py");
|
|
137
|
+
const gateScript = path.join(out, "scripts", "pcb_constraint_gate.py");
|
|
138
|
+
const probeRun = await ex(python, [probeScript, fixturePath, "--pretty"], { timeout: 30000, maxBuffer: 1024 * 1024 });
|
|
139
|
+
const probe = JSON.parse(probeRun.stdout);
|
|
140
|
+
if (probe.copper_layer_count !== 2 || probe.counts.footprints !== 1 || probe.counts.segments !== 1 || probe.counts.vias !== 1 || probe.track_width_mm.min !== 0.2 || probe.via_drill_mm.min !== 0.3) {
|
|
141
|
+
throw new Error("probe self-test observation mismatch");
|
|
142
|
+
}
|
|
143
|
+
await writeFile(probePath, probeRun.stdout, "utf8");
|
|
144
|
+
|
|
145
|
+
const passContract = {
|
|
146
|
+
required_layers: ["F.Cu", "B.Cu"],
|
|
147
|
+
min_copper_layers: 2,
|
|
148
|
+
min_track_width_mm: 0.15,
|
|
149
|
+
min_via_diameter_mm: 0.45,
|
|
150
|
+
min_via_drill_mm: 0.20,
|
|
151
|
+
required_nets: ["GND"],
|
|
152
|
+
min_footprints: 1,
|
|
153
|
+
min_segments: 1,
|
|
154
|
+
min_vias: 1,
|
|
155
|
+
min_zones: 1
|
|
156
|
+
};
|
|
157
|
+
await writeFile(contractPath, JSON.stringify(passContract, null, 2), "utf8");
|
|
158
|
+
const passRun = await ex(python, [gateScript, probePath, contractPath], { timeout: 30000, maxBuffer: 1024 * 1024 });
|
|
159
|
+
const passResult = JSON.parse(passRun.stdout);
|
|
160
|
+
if (passResult.status !== "PASS") throw new Error("positive gate self-test did not pass");
|
|
161
|
+
|
|
162
|
+
const failContract = { min_track_width_mm: 0.25 };
|
|
163
|
+
await writeFile(contractPath, JSON.stringify(failContract, null, 2), "utf8");
|
|
164
|
+
let negativeCaught = false;
|
|
165
|
+
try {
|
|
166
|
+
await ex(python, [gateScript, probePath, contractPath], { timeout: 30000, maxBuffer: 1024 * 1024 });
|
|
167
|
+
} catch (e) {
|
|
168
|
+
const parsed = e.stdout ? JSON.parse(e.stdout) : null;
|
|
169
|
+
if (e.code === 2 && parsed && parsed.status === "FAIL") negativeCaught = true;
|
|
170
|
+
}
|
|
171
|
+
if (!negativeCaught) throw new Error("negative gate self-test did not fail closed");
|
|
172
|
+
|
|
173
|
+
selfTest = {
|
|
174
|
+
status: "PASS",
|
|
175
|
+
python,
|
|
176
|
+
fixture_probe: {
|
|
177
|
+
copper_layers: probe.copper_layer_count,
|
|
178
|
+
footprints: probe.counts.footprints,
|
|
179
|
+
segments: probe.counts.segments,
|
|
180
|
+
vias: probe.counts.vias,
|
|
181
|
+
zones: probe.counts.zones,
|
|
182
|
+
min_track_width_mm: probe.track_width_mm.min,
|
|
183
|
+
min_via_diameter_mm: probe.via_diameter_mm.min,
|
|
184
|
+
min_via_drill_mm: probe.via_drill_mm.min
|
|
185
|
+
},
|
|
186
|
+
positive_gate: "PASS",
|
|
187
|
+
negative_gate: "FAIL_EXIT_2"
|
|
188
|
+
};
|
|
189
|
+
} finally {
|
|
190
|
+
await rm(tmp, { recursive: true, force: true });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
console.log(JSON.stringify({
|
|
195
|
+
status: "built",
|
|
196
|
+
name,
|
|
197
|
+
version,
|
|
198
|
+
out,
|
|
199
|
+
creator_manifest: creatorManifest,
|
|
200
|
+
scaffold_stdout: scaffold.stdout.trim(),
|
|
201
|
+
manifest_sha256: envelope.manifest_sha256,
|
|
202
|
+
body_sha256,
|
|
203
|
+
resource_count: resources.length,
|
|
204
|
+
verify_key_id: keyId,
|
|
205
|
+
validator_stdout: validator.stdout.trim(),
|
|
206
|
+
skill_plane_verified: loaded.verified,
|
|
207
|
+
self_test: selfTest
|
|
208
|
+
}, null, 2));
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const root=process.argv[2];
|
|
4
|
+
async function walk(d,r=""){let out=[];for(const e of (await readdir(d,{withFileTypes:true})).sort((a,b)=>a.name.localeCompare(b.name,"en"))){const p=path.join(d,e.name),q=r?r+"/"+e.name:e.name;if(e.isDirectory())out.push(...await walk(p,q));else if(e.isFile())out.push(q)}return out}
|
|
5
|
+
const env=JSON.parse(await readFile(path.join(root,"skill.json"),"utf8"));
|
|
6
|
+
const actual=(await walk(root)).sort((a,b)=>a.localeCompare(b,"en"));
|
|
7
|
+
const expected=["SKILL.md","skill.json",...env.body.resources.map(x=>x.path)].sort((a,b)=>a.localeCompare(b,"en"));
|
|
8
|
+
console.log(JSON.stringify({actual,expected,extra:actual.filter(x=>!expected.includes(x)),missing:expected.filter(x=>!actual.includes(x))},null,2));
|