deadbyte-mcp 0.15.11 → 0.15.12
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 +8 -7
- package/RELEASE.json +3 -2
- package/node_modules/which/CHANGELOG.md +166 -0
- package/package.json +3 -1
- package/scripts/deploy-r47.mjs +1 -1
- package/src/runtime-update.mjs +62 -9
- package/src/version.mjs +2 -1
package/MANIFEST.SHA256
CHANGED
|
@@ -606,6 +606,7 @@ a7d00bfd54525bc694b6e32f64c7ebcf5e6b7ae3657be5cc12767bce74654a47 node_modules/t
|
|
|
606
606
|
7b6976eec43edfa68b79a459dd089c56b7a395916dbf1a01bd11e6d86e12128f node_modules/typescript/SECURITY.md
|
|
607
607
|
1af3c68039c57e539422da82a4faada506ce6d0ea6f90e0b699d02dbcdb7a90c node_modules/typescript/ThirdPartyNoticeText.txt
|
|
608
608
|
055f0ac4eed1a1591d033d59462972968bf3483b4cc07e163589569c0fb999f0 node_modules/which/bin/node-which
|
|
609
|
+
89bc599ca0b3a119d711c62855b2e3619b734bf371ef55dcc049454313f9904e node_modules/which/CHANGELOG.md
|
|
609
610
|
4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b node_modules/which/LICENSE
|
|
610
611
|
43010039ed5e89f7186960be682b3cb5cda5ab6cdfb06cbfd4f081cf0e7b4260 node_modules/which/package.json
|
|
611
612
|
0c91f714f46006bc9a543e629a3ce3b63700fa8cfbe7c6310a0bcff2738356dd node_modules/which/README.md
|
|
@@ -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
|
+
76ae33a2af233622bf1145ede51bf43ee2bba99566a2c7b69da072c3eec0c80c package.json
|
|
1332
1333
|
8177e3a354721a73df889f386a97e7744a2e017d150aecf4bf309f5177d18690 proof/CONTAINMENT-BUILD.txt
|
|
1333
1334
|
a8efa13e44ff50902aee64cfca542d19605a1ae23db95280ad2d44b324f3eae7 proof/MCP-SMOKE-STATUS.txt
|
|
1334
1335
|
7c115069cc4a343ca21b0ebdee74bd8f544b02d4aa906ffa13308725825d891a proof/NODE-SYNTAX.txt
|
|
@@ -1396,8 +1397,8 @@ bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.jso
|
|
|
1396
1397
|
f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.json
|
|
1397
1398
|
731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
|
|
1398
1399
|
d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
|
|
1399
|
-
|
|
1400
|
-
|
|
1400
|
+
5d81b599350d12f019586380d0983054c48fd89a7b948b335a4cec8fb9077ad7 README.txt
|
|
1401
|
+
6e49e03fa679ca211372919f6ef250424bcdcc700d3be12e2552e9a07cbc950d RELEASE.json
|
|
1401
1402
|
507a42441c8fbb0b1bef63a13fad9e1680262cd6d34cc176b7ed0c5423ddbcc7 SBOM.cdx.json
|
|
1402
1403
|
bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
|
|
1403
1404
|
8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
|
|
@@ -1428,7 +1429,7 @@ a64b6779eff80d68d90d238dee7f2feda5ada3c5c59bcaeae2ab7812bd28404e scripts/deferr
|
|
|
1428
1429
|
751632aeb2e56b093f9589897bbe7e874db61e9238a13bd1506bde2df0b706e9 scripts/deferred-slot-operation-r45.mjs
|
|
1429
1430
|
d4710039ceff7380f3b6a0040ad118a81eabdda2706c459f9b81f8e08978fba4 scripts/deferred-slot-operation-r46.mjs
|
|
1430
1431
|
34116370895aeff9a424475558f4aca3b05460146455d9bb0bafcacd1a270910 scripts/deferred-slot-operation.mjs
|
|
1431
|
-
|
|
1432
|
+
4a8a257bfe61aa97a6607bf1e8d3233a2c7dbdf526b7fc404eb321e372db1312 scripts/deploy-r47.mjs
|
|
1432
1433
|
2cc7a37231f8836a48c3bf4024887f38c10bfc89296ac483e4b98b3f18281933 scripts/derive-r45-parent.mjs
|
|
1433
1434
|
67221c5619019a9d19611432d4361c99c365f14e89483e4c8f78451839960176 scripts/derive-r45-release.mjs
|
|
1434
1435
|
87c6acc0df96a6e8bb6692bc7b12e8b386196a80cba554d9b214ff8bb12147fe scripts/derive-r45-tests.mjs
|
|
@@ -1578,7 +1579,7 @@ e5f944a310ed957e3b8f7b1cab54c082acf1b35f8fdd7d9b672ebe1a80dc37ac src/canonical-
|
|
|
1578
1579
|
da5181cec30034ddf089baa5358becb5651da238a2e7cf0888007a4c60b4ea6b src/capability-benchmark-runner.mjs
|
|
1579
1580
|
2b62295591f142ca4b3bc5b03e6434f7fc3c51d9502f9a40ef8a03d1f72a8899 src/capability-benchmark.mjs
|
|
1580
1581
|
160199b25f45bd0490f6b21a9fa8194313e9673c4b2699afce68249d3d249a7b src/capability-ledger.mjs
|
|
1581
|
-
|
|
1582
|
+
ecccd8645297f2edd131b2e1a30016fb58ea9d18d8536aa784a21734c81cf209 src/capability-resolver.mjs
|
|
1582
1583
|
94e5aeff2453cdc0239aee4d547dbbefee183c71933cb84e5e8a418fa99bc1e8 src/codex-app-server-r44.mjs
|
|
1583
1584
|
6d0a80daaa2711e67e2597bff3db5bd2802682f559107a492f3cd89b9c6785ed src/coding-mcp-tools.mjs
|
|
1584
1585
|
d6fc395575f49abbbf60bf6f6ef5ee9ad51034a7e770a381e6ec34f869788306 src/coding-output-contracts.mjs
|
|
@@ -1688,7 +1689,7 @@ c8fd6fd3e49e866f2c3be326ab07222b36a44528ee0fc3f7b371c34a60e3c45b src/remote-ses
|
|
|
1688
1689
|
827b156eac01cc9ec6f5ca9a49219612f0da511fde770a9eb1235aa913b5e514 src/request-identity.mjs
|
|
1689
1690
|
39251ab165bb0a0b8ea9b4c533aa0cd674934c0fa2c7f63145eac680d1d67be9 src/resource-identity.mjs
|
|
1690
1691
|
ce2223bf6075e96cc02505c1439acce18bb1f204c5e86cf9152bb7194daf3cd2 src/runtime-identity.mjs
|
|
1691
|
-
|
|
1692
|
+
3c3bd5c7479af109bd3770afe2e29200e91d5cf3533fb3225a063db659eac080 src/runtime-update.mjs
|
|
1692
1693
|
c61335adb38bfc415fe1cdabfe2c0a87e61579dfd1e52cce91c44d6993479457 src/search-cursor.mjs
|
|
1693
1694
|
fc5407ef8338ebeeede16225b3249166dc4d45e903d873eb46c15c3df07dc9ad src/semantic-backend-registry.mjs
|
|
1694
1695
|
686e9b55b9f4352b941579f186a9b9d348d86af53d052cbd5da953e7d15470ff src/semantic-code.mjs
|
|
@@ -1706,7 +1707,7 @@ bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init
|
|
|
1706
1707
|
16df134040e3ff1e73df722b568d3e8ac0a6923b097696cead7580da75aa8d2a src/tunnel-stdio-compat.mjs
|
|
1707
1708
|
642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
|
|
1708
1709
|
8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
|
|
1709
|
-
|
|
1710
|
+
b58265712b06c108331f51d2f42a1fe28ab5d9a06d5ee781f1c931559c104e79 src/version.mjs
|
|
1710
1711
|
7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
|
|
1711
1712
|
76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
|
|
1712
1713
|
4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
|
package/RELEASE.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
2
|
"schema": "deadbyte.release.v1",
|
|
3
3
|
"name": "deadbyte-mcp",
|
|
4
|
-
"version": "0.15.
|
|
4
|
+
"version": "0.15.12",
|
|
5
5
|
"train": "R46",
|
|
6
6
|
"label": "FILELESS POWERSHELL PRODUCT BASELINE",
|
|
7
7
|
"protocol_revision": "2026-07-28",
|
|
@@ -51,3 +51,4 @@
|
|
|
51
51
|
"observation_search_session_cap": 128
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Changes
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## 2.0.2
|
|
5
|
+
|
|
6
|
+
* Rename bin to `node-which`
|
|
7
|
+
|
|
8
|
+
## 2.0.1
|
|
9
|
+
|
|
10
|
+
* generate changelog and publish on version bump
|
|
11
|
+
* enforce 100% test coverage
|
|
12
|
+
* Promise interface
|
|
13
|
+
|
|
14
|
+
## 2.0.0
|
|
15
|
+
|
|
16
|
+
* Parallel tests, modern JavaScript, and drop support for node < 8
|
|
17
|
+
|
|
18
|
+
## 1.3.1
|
|
19
|
+
|
|
20
|
+
* update deps
|
|
21
|
+
* update travis
|
|
22
|
+
|
|
23
|
+
## v1.3.0
|
|
24
|
+
|
|
25
|
+
* Add nothrow option to which.sync
|
|
26
|
+
* update tap
|
|
27
|
+
|
|
28
|
+
## v1.2.14
|
|
29
|
+
|
|
30
|
+
* appveyor: drop node 5 and 0.x
|
|
31
|
+
* travis-ci: add node 6, drop 0.x
|
|
32
|
+
|
|
33
|
+
## v1.2.13
|
|
34
|
+
|
|
35
|
+
* test: Pass missing option to pass on windows
|
|
36
|
+
* update tap
|
|
37
|
+
* update isexe to 2.0.0
|
|
38
|
+
* neveragain.tech pledge request
|
|
39
|
+
|
|
40
|
+
## v1.2.12
|
|
41
|
+
|
|
42
|
+
* Removed unused require
|
|
43
|
+
|
|
44
|
+
## v1.2.11
|
|
45
|
+
|
|
46
|
+
* Prevent changelog script from being included in package
|
|
47
|
+
|
|
48
|
+
## v1.2.10
|
|
49
|
+
|
|
50
|
+
* Use env.PATH only, not env.Path
|
|
51
|
+
|
|
52
|
+
## v1.2.9
|
|
53
|
+
|
|
54
|
+
* fix for paths starting with ../
|
|
55
|
+
* Remove unused `is-absolute` module
|
|
56
|
+
|
|
57
|
+
## v1.2.8
|
|
58
|
+
|
|
59
|
+
* bullet items in changelog that contain (but don't start with) #
|
|
60
|
+
|
|
61
|
+
## v1.2.7
|
|
62
|
+
|
|
63
|
+
* strip 'update changelog' changelog entries out of changelog
|
|
64
|
+
|
|
65
|
+
## v1.2.6
|
|
66
|
+
|
|
67
|
+
* make the changelog bulleted
|
|
68
|
+
|
|
69
|
+
## v1.2.5
|
|
70
|
+
|
|
71
|
+
* make a changelog, and keep it up to date
|
|
72
|
+
* don't include tests in package
|
|
73
|
+
* Properly handle relative-path executables
|
|
74
|
+
* appveyor
|
|
75
|
+
* Attach error code to Not Found error
|
|
76
|
+
* Make tests pass on Windows
|
|
77
|
+
|
|
78
|
+
## v1.2.4
|
|
79
|
+
|
|
80
|
+
* Fix typo
|
|
81
|
+
|
|
82
|
+
## v1.2.3
|
|
83
|
+
|
|
84
|
+
* update isexe, fix regression in pathExt handling
|
|
85
|
+
|
|
86
|
+
## v1.2.2
|
|
87
|
+
|
|
88
|
+
* update deps, use isexe module, test windows
|
|
89
|
+
|
|
90
|
+
## v1.2.1
|
|
91
|
+
|
|
92
|
+
* Sometimes windows PATH entries are quoted
|
|
93
|
+
* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode.
|
|
94
|
+
* doc cli
|
|
95
|
+
|
|
96
|
+
## v1.2.0
|
|
97
|
+
|
|
98
|
+
* Add support for opt.all and -as cli flags
|
|
99
|
+
* test the bin
|
|
100
|
+
* update travis
|
|
101
|
+
* Allow checking for multiple programs in bin/which
|
|
102
|
+
* tap 2
|
|
103
|
+
|
|
104
|
+
## v1.1.2
|
|
105
|
+
|
|
106
|
+
* travis
|
|
107
|
+
* Refactored and fixed undefined error on Windows
|
|
108
|
+
* Support strict mode
|
|
109
|
+
|
|
110
|
+
## v1.1.1
|
|
111
|
+
|
|
112
|
+
* test +g exes against secondary groups, if available
|
|
113
|
+
* Use windows exe semantics on cygwin & msys
|
|
114
|
+
* cwd should be first in path on win32, not last
|
|
115
|
+
* Handle lower-case 'env.Path' on Windows
|
|
116
|
+
* Update docs
|
|
117
|
+
* use single-quotes
|
|
118
|
+
|
|
119
|
+
## v1.1.0
|
|
120
|
+
|
|
121
|
+
* Add tests, depend on is-absolute
|
|
122
|
+
|
|
123
|
+
## v1.0.9
|
|
124
|
+
|
|
125
|
+
* which.js: root is allowed to execute files owned by anyone
|
|
126
|
+
|
|
127
|
+
## v1.0.8
|
|
128
|
+
|
|
129
|
+
* don't use graceful-fs
|
|
130
|
+
|
|
131
|
+
## v1.0.7
|
|
132
|
+
|
|
133
|
+
* add license to package.json
|
|
134
|
+
|
|
135
|
+
## v1.0.6
|
|
136
|
+
|
|
137
|
+
* isc license
|
|
138
|
+
|
|
139
|
+
## 1.0.5
|
|
140
|
+
|
|
141
|
+
* Awful typo
|
|
142
|
+
|
|
143
|
+
## 1.0.4
|
|
144
|
+
|
|
145
|
+
* Test for path absoluteness properly
|
|
146
|
+
* win: Allow '' as a pathext if cmd has a . in it
|
|
147
|
+
|
|
148
|
+
## 1.0.3
|
|
149
|
+
|
|
150
|
+
* Remove references to execPath
|
|
151
|
+
* Make `which.sync()` work on Windows by honoring the PATHEXT variable.
|
|
152
|
+
* Make `isExe()` always return true on Windows.
|
|
153
|
+
* MIT
|
|
154
|
+
|
|
155
|
+
## 1.0.2
|
|
156
|
+
|
|
157
|
+
* Only files can be exes
|
|
158
|
+
|
|
159
|
+
## 1.0.1
|
|
160
|
+
|
|
161
|
+
* Respect the PATHEXT env for win32 support
|
|
162
|
+
* should 0755 the bin
|
|
163
|
+
* binary
|
|
164
|
+
* guts
|
|
165
|
+
* package
|
|
166
|
+
* 1st
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.12",
|
|
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.",
|
|
@@ -76,6 +76,8 @@
|
|
|
76
76
|
"dependencies": {
|
|
77
77
|
"@modelcontextprotocol/client": "2.0.0",
|
|
78
78
|
"@modelcontextprotocol/server": "2.0.0",
|
|
79
|
+
"deadbyte-mcp": "^0.15.3",
|
|
80
|
+
"remote": "^0.0.5",
|
|
79
81
|
"typescript": "5.9.3",
|
|
80
82
|
"zod": "4.4.3"
|
|
81
83
|
},
|
package/scripts/deploy-r47.mjs
CHANGED
|
@@ -21,7 +21,7 @@ const args=[
|
|
|
21
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
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
23
|
'--bridge-root',bridgeRoot,'--bridge-script-sha256',await sha(bridgeScript),
|
|
24
|
-
'--enable-machine-fs','--enable-observation','--enable-desktop','--enable-autonomous-supervisor','--restore-standing-grants'
|
|
24
|
+
'--enable-machine-fs','--enable-observation','--enable-desktop','--enable-autonomous-supervisor','--restore-standing-grants','--recover-offline-predecessor'
|
|
25
25
|
];
|
|
26
26
|
const result=await runSlotUpdateCli(args,{stateRoot:state});
|
|
27
27
|
console.log(JSON.stringify({status:'deployed',manifest_sha256:manifest,previous_release:pointer.release_id,result}));
|
package/src/runtime-update.mjs
CHANGED
|
@@ -618,6 +618,29 @@ async function readLedger(ctx,name){
|
|
|
618
618
|
function sameGeneration(a,b){
|
|
619
619
|
return a.pid===b.pid&&a.instance_nonce===b.instance_nonce&&a.creation_time_utc===b.creation_time_utc&&a.image_sha256===b.image_sha256;
|
|
620
620
|
}
|
|
621
|
+
function cleanOfflinePredecessor(ctx){
|
|
622
|
+
const runtimeRoot=path.resolve(ctx.runtime_root);
|
|
623
|
+
const blockers=[
|
|
624
|
+
'bridge.instance.json','cloud.instance.json',
|
|
625
|
+
'process-grant.json','coding-grant.json','autonomous-grant.json',
|
|
626
|
+
'desktop-grant.json','host-grant.json'
|
|
627
|
+
].filter(name=>existsSync(path.join(runtimeRoot,name)));
|
|
628
|
+
if(blockers.length) throw new Error('offline predecessor recovery blocked by runtime state: '+blockers.join(','));
|
|
629
|
+
|
|
630
|
+
const command="Get-CimInstance Win32_Process | Where-Object { \$_.Name -in @('node.exe','cloudflared.exe','deadbyte-tunnel-host.exe') } | Select-Object ProcessId,Name,ExecutablePath,CommandLine | ConvertTo-Json -Compress";
|
|
631
|
+
const result=runCaptured(powershellPath(),['-NoLogo','-NoProfile','-Command',command],{timeoutMs:15000});
|
|
632
|
+
const text=assertRun(result,'runtime process query').trim();
|
|
633
|
+
if(text){
|
|
634
|
+
let parsed;
|
|
635
|
+
try { parsed=JSON.parse(text); } catch(error){ throw new Error('runtime process query JSON invalid: '+error.message); }
|
|
636
|
+
const processes=(Array.isArray(parsed)?parsed:[parsed]).filter(item=>Number(item?.ProcessId)!==process.pid);
|
|
637
|
+
if(processes.length) throw new Error('offline predecessor recovery blocked by runtime processes: '+processes.map(item=>String(item?.Name??'unknown')+'#'+String(item?.ProcessId??'?')).join(','));
|
|
638
|
+
}
|
|
639
|
+
return {
|
|
640
|
+
online:false,offline:true,bridge_pid:null,cloud_pid:null,local_ready:false,
|
|
641
|
+
process_armed:false,coding_armed:false,autonomous_armed:false,desktop_armed:false,host_armed:false
|
|
642
|
+
};
|
|
643
|
+
}
|
|
621
644
|
function nodeProcesses(){
|
|
622
645
|
const command=`Get-CimInstance Win32_Process -Filter \"Name='node.exe'\" | Select-Object ProcessId,ParentProcessId,CreationDate,ExecutablePath,CommandLine | ConvertTo-Json -Compress`;
|
|
623
646
|
const result=runCaptured(powershellPath(),['-NoLogo','-NoProfile','-Command',command],{timeoutMs:15000});
|
|
@@ -658,7 +681,15 @@ async function captureRuntime(ctx){
|
|
|
658
681
|
return {status,status_text:statusText.trim(),bridge,cloud,core};
|
|
659
682
|
}
|
|
660
683
|
async function capturePredecessor(ctx,recoverOfflinePredecessor){
|
|
661
|
-
|
|
684
|
+
let statusText,status;
|
|
685
|
+
try{
|
|
686
|
+
statusText=controllerCaptured(ctx,'status',15000);
|
|
687
|
+
status=parseControllerStatus(statusText);
|
|
688
|
+
}catch(error){
|
|
689
|
+
if(!recoverOfflinePredecessor) throw error;
|
|
690
|
+
const offline=cleanOfflinePredecessor(ctx);
|
|
691
|
+
return {mode:'offline-recovery',status:offline,status_text:`controller status unavailable; clean offline evidence established: ${String(error?.message??error)}`,runtime:null};
|
|
692
|
+
}
|
|
662
693
|
if(status.online&&status.bridge_pid&&status.cloud_pid&&status.local_ready){
|
|
663
694
|
const runtime=await captureRuntime(ctx);
|
|
664
695
|
return {mode:'online',status:runtime.status,status_text:runtime.status_text,runtime};
|
|
@@ -752,7 +783,7 @@ async function loadPointerIfPresent(stateRoot){
|
|
|
752
783
|
const snapshot=await snapshotFile(file); const pointer=parseActivePointer(snapshot.bytes.toString('utf8'));
|
|
753
784
|
await verifyActiveInstallation(stateRoot,pointer); return {file,pointer,snapshot};
|
|
754
785
|
}
|
|
755
|
-
async function loadControlInputs({stateRoot,sourceRoot,pointerInfo}){
|
|
786
|
+
async function loadControlInputs({stateRoot,sourceRoot,pointerInfo,bridgeBootstrap=null}){
|
|
756
787
|
let configPath,ctx;
|
|
757
788
|
if(pointerInfo.pointer){
|
|
758
789
|
configPath=pointerInfo.pointer.config_path; ctx=slotContext(stateRoot,pointerInfo.pointer);
|
|
@@ -760,7 +791,20 @@ async function loadControlInputs({stateRoot,sourceRoot,pointerInfo}){
|
|
|
760
791
|
if(!sourceRoot) throw new Error('--source-root is required for initial slot migration');
|
|
761
792
|
ctx=legacyContext(sourceRoot); configPath=path.join(ctx.source_root,'controller','deadbyte-controller.config.psd1');
|
|
762
793
|
}
|
|
763
|
-
let config=await loadPowerShellDataFile(configPath);
|
|
794
|
+
let config=await loadPowerShellDataFile(configPath);
|
|
795
|
+
if(bridgeBootstrap){
|
|
796
|
+
if(!bridgeBootstrap.root||!path.isAbsolute(bridgeBootstrap.root)||!HEX64.test(String(bridgeBootstrap.scriptSha256??''))) throw new Error('bridge bootstrap requires absolute root plus lowercase script SHA-256');
|
|
797
|
+
const bootstrapRoot=path.resolve(bridgeBootstrap.root);
|
|
798
|
+
const bootstrapScript=path.join(bootstrapRoot,'src','bridge.mjs');
|
|
799
|
+
const bootstrapActual=await sha256File(bootstrapScript);
|
|
800
|
+
if(bootstrapActual!==String(bridgeBootstrap.scriptSha256).toLowerCase()) throw new Error(`bridge script SHA-256 mismatch: expected ${String(bridgeBootstrap.scriptSha256).toLowerCase()}, found ${bootstrapActual}`);
|
|
801
|
+
if(!config.Bridge||typeof config.Bridge!=='object') throw new Error('Bridge launch specification missing');
|
|
802
|
+
config.Bridge.WorkingDirectory=bootstrapRoot;
|
|
803
|
+
config.Bridge.Arguments='src\\bridge.mjs';
|
|
804
|
+
config.Bridge.ScriptPath=bootstrapScript;
|
|
805
|
+
config.Bridge.ScriptSha256=bootstrapActual;
|
|
806
|
+
}
|
|
807
|
+
config=await normalizeComponentIdentities(config);
|
|
764
808
|
const codingPath=String(config.CodingPolicyFile??''); const autonomousPath=String(config.AutonomousPolicyFile??''); const hostPath=String(config.HostPolicyFile??''); const processPath=String(config.ProcessPolicyFile??''); const desktopPath=String(config.DesktopPolicyFile??'');
|
|
765
809
|
if(!path.isAbsolute(codingPath)||!path.isAbsolute(autonomousPath)) throw new Error('coding/autonomous policy paths must be absolute');
|
|
766
810
|
if(processPath&&!path.isAbsolute(processPath)) throw new Error('process policy path must be absolute');
|
|
@@ -1096,6 +1140,10 @@ async function ensureFreshRuntime(ctx,oldRuntime){
|
|
|
1096
1140
|
return existing??await startAndVerify(ctx,oldRuntime);
|
|
1097
1141
|
}
|
|
1098
1142
|
async function ensureAuthorityRevoked(ctx,prior){
|
|
1143
|
+
if(!prior.process_armed&&!prior.coding_armed&&!prior.autonomous_armed&&!prior.desktop_armed&&!prior.host_armed){
|
|
1144
|
+
const clean=cleanOfflinePredecessor(ctx);
|
|
1145
|
+
return {revoked:false,status:clean};
|
|
1146
|
+
}
|
|
1099
1147
|
const status=parseControllerStatus(controllerCaptured(ctx,'status',15000));
|
|
1100
1148
|
if(status.host_armed) throw new Error('host plane armed during authority revoke recovery');
|
|
1101
1149
|
if(!status.process_armed&&!status.coding_armed&&!status.autonomous_armed&&!status.desktop_armed) {
|
|
@@ -1175,12 +1223,17 @@ async function resumeSlotUpdate({handoffPath}){
|
|
|
1175
1223
|
phase='authority_revoked';
|
|
1176
1224
|
}
|
|
1177
1225
|
if(!stopped){
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
await writeState(statePath,journal,'old_runtime_stopped',{stop_output:'recovery observed predecessor
|
|
1226
|
+
if(!oldRuntime){
|
|
1227
|
+
cleanOfflinePredecessor(ctx);
|
|
1228
|
+
await writeState(statePath,journal,'old_runtime_stopped',{stop_output:'recovery observed predecessor has no captured runtime and clean offline evidence'});
|
|
1181
1229
|
}else{
|
|
1182
|
-
const
|
|
1183
|
-
|
|
1230
|
+
const status=parseControllerStatus(controllerCaptured(ctx,'status',15000)),gone=await coreGone(oldRuntime);
|
|
1231
|
+
if(status.offline&&gone){
|
|
1232
|
+
await writeState(statePath,journal,'old_runtime_stopped',{stop_output:'recovery observed predecessor already OFFLINE'});
|
|
1233
|
+
}else{
|
|
1234
|
+
const stoppedResult=await stopAndVerify(ctx,oldRuntime);
|
|
1235
|
+
await writeState(statePath,journal,'old_runtime_stopped',{stop_output:stoppedResult.output});
|
|
1236
|
+
}
|
|
1184
1237
|
}
|
|
1185
1238
|
stopped=true; phase='old_runtime_stopped';
|
|
1186
1239
|
}
|
|
@@ -1346,7 +1399,7 @@ export async function performSlotUpdate({stage,developmentRoot,expectedVersion,e
|
|
|
1346
1399
|
const stageVerified=await verifyPackageRoot(stageRoot,expectedVersion,expectedManifest,'stage');
|
|
1347
1400
|
const developmentVerified=await verifyPackageRoot(development,expectedVersion,expectedManifest,'development');
|
|
1348
1401
|
const slot=await materializeReleaseSlot({source:stageRoot,stateRoot:state,version:expectedVersion,manifestSha256:expectedManifest});
|
|
1349
|
-
control=await loadControlInputs({stateRoot:state,sourceRoot,pointerInfo});
|
|
1402
|
+
control=await loadControlInputs({stateRoot:state,sourceRoot,pointerInfo,bridgeBootstrap});
|
|
1350
1403
|
const hostBootstrap=await prepareHostPolicyBootstrap(hostPolicyBootstrap);if(hostBootstrap) control.hostPolicy=hostBootstrap.policy;
|
|
1351
1404
|
const codingBootstrap=await prepareCodingPolicyBootstrap(codingPolicyBootstrap);if(codingBootstrap) control.codingPolicy=codingBootstrap.policy;
|
|
1352
1405
|
const processBootstrap=await prepareProcessPolicyBootstrap(processPolicyBootstrap);
|
package/src/version.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export const DEADBYTE_VERSION = '0.15.
|
|
1
|
+
export const DEADBYTE_VERSION = '0.15.12';
|
|
2
2
|
export const MCP_PROTOCOL_VERSION = '2026-07-28';
|
|
3
3
|
export const RECEIPT_SCHEMA_V1 = 'deadbyte.receipt.v1';
|
|
4
4
|
export const RECEIPT_SCHEMA_V2 = 'deadbyte.receipt.v2';
|
|
5
5
|
export const RECEIPT_REQUEST_SCHEMA = 'deadbyte.request.v1';
|
|
6
6
|
export const RUNTIME_IDENTITY_SCHEMA = 'deadbyte.runtime.v1';
|
|
7
|
+
|