deadbyte-mcp 0.15.0 → 0.15.2

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.
Files changed (110) hide show
  1. package/MANIFEST.SHA256 +109 -64
  2. package/PROVENANCE.json +11 -0
  3. package/R45-PARENT.json +18 -0
  4. package/README.txt +36 -20
  5. package/RELEASE.json +53 -0
  6. package/SBOM.cdx.json +46 -0
  7. package/TEST-MATRIX.json +31 -0
  8. package/bin/deadbyte-hardware-observer-r45.exe +0 -0
  9. package/bin/deadbyte-hardware-observer-r45.obj +0 -0
  10. package/controller/README.TXT +2 -2
  11. package/controller/deadbyte-controller.ps1 +51 -3
  12. package/controller/deadbyte-process-policy.json +63 -1
  13. package/docs/ARCHITECTURE.md +3 -4
  14. package/native/deadbyte-hardware-observer.cpp +308 -0
  15. package/package.json +14 -7
  16. package/scripts/autonomous-tests.ps1 +2 -2
  17. package/scripts/build-hardware-r45.ps1 +71 -0
  18. package/scripts/deferred-slot-operation-r45.mjs +126 -0
  19. package/scripts/deferred-slot-operation-r46.mjs +126 -0
  20. package/scripts/derive-r45-parent.mjs +24 -0
  21. package/scripts/derive-r45-release.mjs +72 -0
  22. package/scripts/derive-r45-tests.mjs +20 -0
  23. package/scripts/final-closure-r45.mjs +121 -0
  24. package/scripts/final-closure-r46.mjs +98 -0
  25. package/scripts/final-closure-verify-r45.mjs +220 -0
  26. package/scripts/final-closure-verify-r46.mjs +119 -0
  27. package/scripts/finalize-r45.mjs +219 -0
  28. package/scripts/full-regression-r45.mjs +20 -0
  29. package/scripts/full-regression-r46.mjs +20 -0
  30. package/scripts/full-regression-summary-r45.mjs +14 -0
  31. package/scripts/gate-windows-r45.ps1 +44 -0
  32. package/scripts/gate-windows-r46.ps1 +56 -0
  33. package/scripts/init-host-policy.ps1 +39 -1
  34. package/scripts/inspect-active-release-r45.mjs +20 -0
  35. package/scripts/refresh-process-policy.mjs +64 -7
  36. package/scripts/release-manifest.mjs +3 -1
  37. package/scripts/release-parity-r45.mjs +253 -0
  38. package/scripts/release-parity-r46.mjs +187 -0
  39. package/scripts/release-parity-tests-r45.ps1 +8 -0
  40. package/scripts/verify-r45-parent.mjs +142 -0
  41. package/scripts/windows-gate-evidence-r45.mjs +60 -0
  42. package/scripts/windows-gate-evidence-r46.mjs +110 -0
  43. package/src/autonomous-runtime.mjs +12 -7
  44. package/src/capability-ledger.mjs +2 -0
  45. package/src/compact-gateway-mcp-tools.mjs +11 -7
  46. package/src/deadbyte-cli.mjs +24 -12
  47. package/src/doctor-r45.mjs +65 -0
  48. package/src/host-plane.mjs +133 -85
  49. package/src/machine-fs-mcp-tools.mjs +3 -3
  50. package/src/machine-fs-output-contracts.mjs +1 -1
  51. package/src/machine-fs-read-worker.mjs +46 -0
  52. package/src/machine-fs.mjs +63 -10
  53. package/src/mcp-server.mjs +68 -23
  54. package/src/mcp-smoke-client.mjs +4 -1
  55. package/src/native-diff-v2.mjs +9 -4
  56. package/src/native-diff.mjs +29 -7
  57. package/src/observation-mcp-tools.mjs +5 -1
  58. package/src/observation-output-contracts.mjs +8 -0
  59. package/src/observation-runtime.mjs +57 -5
  60. package/src/observation-smoke-client.mjs +6 -2
  61. package/src/output-contracts.mjs +27 -11
  62. package/src/process-mcp-tools.mjs +18 -5
  63. package/src/process-output-contracts.mjs +20 -3
  64. package/src/process-policy.mjs +3 -1
  65. package/src/process-runtime.mjs +99 -19
  66. package/src/process-smoke-client.mjs +67 -22
  67. package/src/r45-compact-disarmed-probe.mjs +74 -0
  68. package/src/r45-full-surface-probe.mjs +34 -0
  69. package/src/release-generation.mjs +23 -3
  70. package/src/remote-device-r44.mjs +53 -15
  71. package/src/remote-mcp-r45-parity-client.mjs +206 -0
  72. package/src/remote-mcp-smoke-client.mjs +1 -1
  73. package/src/runtime-update.mjs +36 -8
  74. package/src/stdio-console-guard.mjs +24 -0
  75. package/src/version.mjs +1 -1
  76. package/test/agent-runtime.test.mjs +1 -0
  77. package/test/autonomous-loop.test.mjs +24 -0
  78. package/test/autonomous-runtime.test.mjs +1 -0
  79. package/test/cli-entrypoint.test.mjs +4 -4
  80. package/test/coding-plane.test.mjs +1 -0
  81. package/test/compact-gateway-r36.test.mjs +28 -0
  82. package/test/compact-max-catalog-r45.test.mjs +99 -0
  83. package/test/contained.test.mjs +23 -11
  84. package/test/controller.test.mjs +5 -1
  85. package/test/core.test.mjs +1 -1
  86. package/test/full-max-catalog-r45.test.mjs +91 -0
  87. package/test/full-max-catalog-r46.test.mjs +92 -0
  88. package/test/hardware-observation-r45.test.mjs +44 -0
  89. package/test/host-inline-r45.test.mjs +67 -0
  90. package/test/machine-fs-mcp-tools.test.mjs +4 -1
  91. package/test/machine-fs-runtime.test.mjs +18 -2
  92. package/test/machine-mcp-integration.test.mjs +1 -0
  93. package/test/observation-mcp-tools.test.mjs +4 -3
  94. package/test/observation-runtime.test.mjs +29 -2
  95. package/test/output-schema.test.mjs +1 -0
  96. package/test/package-boundary.test.mjs +1 -1
  97. package/test/process-mcp-tools.test.mjs +23 -5
  98. package/test/process-policy-refresh.test.mjs +87 -10
  99. package/test/process-runtime.test.mjs +111 -1
  100. package/test/process-supervision.test.mjs +4 -2
  101. package/test/production-docs.test.mjs +3 -3
  102. package/test/r33-closeout-regression.test.mjs +20 -19
  103. package/test/r33-finalization.test.mjs +3 -3
  104. package/test/r45-autonomous-quick-test.test.mjs +10 -0
  105. package/test/r45-finalization.test.mjs +84 -0
  106. package/test/release-generation.test.mjs +26 -11
  107. package/test/release-version.test.mjs +112 -46
  108. package/test/remote-device-r44.test.mjs +75 -0
  109. package/test/remote-r24-catalog.test.mjs +2 -2
  110. package/test/runtime-host-bootstrap-r45.test.mjs +46 -0
package/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- DEADBYTE MCP V0.15.0 / R44 REMOTE AGENT + SKILL BASELINE
1
+ DEADBYTE MCP V0.15.2 / R46 FILELESS POWERSHELL PRODUCT 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.0 mcp
11
- npx deadbyte-mcp@latest remote
12
- npx deadbyte-mcp@latest remote status
13
- npx deadbyte-mcp@latest remote restart
14
- npx deadbyte-mcp@latest audit status
15
- npx deadbyte-mcp@latest audit verify
10
+ npx -y deadbyte-mcp@0.15.2 mcp
11
+ npx -y deadbyte-mcp@0.15.2 remote
12
+ npx -y deadbyte-mcp@0.15.2 remote status
13
+ npx -y deadbyte-mcp@0.15.2 remote restart
14
+ npx -y deadbyte-mcp@0.15.2 audit status
15
+ npx -y deadbyte-mcp@0.15.2 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.
@@ -33,6 +33,19 @@ The legacy CMD file remains only as an R33 compatibility artifact until activati
33
33
  proof confirms the npx path; it is not the primary operator interface. Audit data lives under the
34
34
  stable mutable state root and never inside immutable release slots.
35
35
 
36
+ R46 FILELESS POWERSHELL PROCESS PROFILE
37
+ --------------------------------------
38
+ The Process plane includes a hash-pinned `powershell` profile for bounded one-shot source execution through
39
+ `powershell.exe -Command <source>` without creating a temporary `.ps1` script file. The generated release
40
+ policy re-pins both `cmd.exe` and Windows PowerShell from the target machine at activation time, so system
41
+ binary hashes are never assumed portable across Windows builds. The one-shot profile is shell=false, accepts one source argument up to 8192 UTF-8 bytes, uses pipe transport,
42
+ and remains gated by the explicit Process standing grant. R46 also ships `powershell_repl`, a separately
43
+ policy-opted persistent PowerShell session profile. `process_session_write` accepts bounded UTF-8 input only
44
+ for profiles with `allow_raw_input=true`; every write rechecks the standing grant and journals only byte count
45
+ plus SHA-256, never the raw command text. Process reads support bounded waits and negative tail offsets, while
46
+ retention remains byte-capped with an explicit earliest offset and stream digest. Signed journals remain the
47
+ authority for session history.
48
+
36
49
  AUTHORITY MODEL
37
50
  ---------------
38
51
  The original containment core remains five tools:
@@ -213,7 +226,7 @@ CONTROLLER
213
226
  ----------
214
227
  Primary operator entry point:
215
228
 
216
- npx deadbyte-mcp@latest remote
229
+ npx -y deadbyte-mcp@0.15.2 remote
217
230
 
218
231
  The legacy CMD entry remains compatibility-only for R33 rollback safety.
219
232
 
@@ -274,7 +287,7 @@ MCP CLIENT CONFIGURATION
274
287
  ------------------------
275
288
  The local stdio entry point is quiet and suitable for MCP hosts:
276
289
 
277
- npx -y deadbyte-mcp@0.11.3 mcp
290
+ npx -y deadbyte-mcp@0.15.2 mcp
278
291
 
279
292
  CLAUDE DESKTOP
280
293
  Use the standard local-server entry in claude_desktop_config.json:
@@ -283,7 +296,7 @@ Use the standard local-server entry in claude_desktop_config.json:
283
296
  "mcpServers": {
284
297
  "deadbyte": {
285
298
  "command": "npx",
286
- "args": ["-y", "deadbyte-mcp@0.11.3", "mcp"]
299
+ "args": ["-y", "deadbyte-mcp@0.15.2", "mcp"]
287
300
  }
288
301
  }
289
302
  }
@@ -296,7 +309,7 @@ Create .cursor/mcp.json:
296
309
  "deadbyte": {
297
310
  "type": "stdio",
298
311
  "command": "npx",
299
- "args": ["-y", "deadbyte-mcp@0.11.3", "mcp"]
312
+ "args": ["-y", "deadbyte-mcp@0.15.2", "mcp"]
300
313
  }
301
314
  }
302
315
  }
@@ -309,7 +322,7 @@ Create .vscode/mcp.json:
309
322
  "deadbyte": {
310
323
  "type": "stdio",
311
324
  "command": "npx",
312
- "args": ["-y", "deadbyte-mcp@0.11.3", "mcp"]
325
+ "args": ["-y", "deadbyte-mcp@0.15.2", "mcp"]
313
326
  }
314
327
  }
315
328
  }
@@ -319,9 +332,9 @@ Add this to ~/.codex/config.toml:
319
332
 
320
333
  [mcp_servers.deadbyte]
321
334
  command = "npx"
322
- args = ["-y", "deadbyte-mcp@0.11.3", "mcp"]
335
+ args = ["-y", "deadbyte-mcp@0.15.2", "mcp"]
323
336
 
324
- The remote device path remains `npx deadbyte-mcp@latest remote`. Remote public MCP uses the
337
+ The remote device path remains `npx -y deadbyte-mcp@0.15.2 remote`. Remote public MCP uses the
325
338
  verified HTTPS named-tunnel URL selected by the active generation; do not commit a private device
326
339
  URL or tunnel token into a repository.
327
340
 
@@ -379,12 +392,15 @@ R36 reproducible capability evidence and comparison rules are recorded in
379
392
  `docs/R36-CAPABILITY-EVIDENCE.md`. Comparisons distinguish upstream `documented` capability from
380
393
  retained `direct_observation`; tool count is not a release verdict.
381
394
 
382
- Desktop Commander provides a mature local filesystem/terminal MCP and Remote Desktop Commander
383
- adds a hosted remote relay. DEADBYTE's measured differential is a self-owned content-addressed
384
- release chain, separately revocable process/coding/autonomous/host authority planes,
385
- hash-preconditioned edits, Ed25519 signed receipts and journals, contained fixed workers, exact
386
- public-catalog gates, and tested rollback/restore. This is a mechanism comparison, not a marketing
387
- score.
395
+ Desktop Commander provides a mature local filesystem/terminal MCP and Remote Desktop Commander adds a hosted
396
+ remote relay. R46 incorporates the production terminal techniques that materially close workload gaps without
397
+ copying their authority model: persistent process sessions, bounded profile-opted stdin, waitable/tail output
398
+ reads, chunked retained-output eviction without whole-buffer recopy, stale-aware remote reachability,
399
+ bounded idempotent probe retry, no-retry mutation dispatch, bounded async observation-search retention,
400
+ and restart-safe exact catalogs. DEADBYTE keeps its stronger
401
+ self-owned content-addressed release chain, separately revocable process/coding/autonomous/desktop/host planes,
402
+ hash-preconditioned edits, Ed25519 signed receipts/journals, contained fixed workers, exact public-catalog gates,
403
+ and tested rollback/restore. Fuzzy mutation is deliberately not substituted for exact mutation preconditions.
388
404
 
389
405
  Serena has broader semantic language coverage through multiple language-server backends. DEADBYTE
390
406
  currently does not match that semantic breadth: its built-in semantic backend is JS/TS. For JS/TS,
package/RELEASE.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "schema": "deadbyte.release.v1",
3
+ "name": "deadbyte-mcp",
4
+ "version": "0.15.2",
5
+ "train": "R46",
6
+ "label": "FILELESS POWERSHELL PRODUCT BASELINE",
7
+ "protocol_revision": "2026-07-28",
8
+ "parent": {
9
+ "release_id": "v0.15.1-d55f00b5144dc31a",
10
+ "manifest_sha256": "d55f00b5144dc31a7fe39e4dc60d640a94780da6aaeca0918e87636b816d7854",
11
+ "generation_manifest_sha256": "00cde7bf540cc2804d679a39040d5b07193c5f8a0d49cac3b882402f8f4e6ad8"
12
+ },
13
+ "platform": {
14
+ "primary": "win32",
15
+ "architectures": [
16
+ "x64"
17
+ ]
18
+ },
19
+ "capabilities": {
20
+ "host_execution_modes": [
21
+ "script",
22
+ "inline",
23
+ "native"
24
+ ],
25
+ "hardware_queries": [
26
+ "cpu",
27
+ "gpu",
28
+ "memory",
29
+ "storage",
30
+ "network",
31
+ "pci"
32
+ ],
33
+ "compact_tool_count": 43,
34
+ "full_tool_count": 83,
35
+ "process_profiles": [
36
+ "ping_hold",
37
+ "powershell",
38
+ "powershell_repl"
39
+ ],
40
+ "powershell_fileless": true,
41
+ "powershell_source_max_arg_bytes": 8192,
42
+ "powershell_persistent_repl": true,
43
+ "process_raw_input_profile_opt_in": true,
44
+ "process_tail_reads": true,
45
+ "process_wait_reads": true,
46
+ "process_chunked_output_ring": true,
47
+ "remote_reachability_ttl": true,
48
+ "remote_probe_timeout_retry": true,
49
+ "remote_dispatch_timeout_no_retry": true,
50
+ "observation_search_session_ttl": true,
51
+ "observation_search_session_cap": 128
52
+ }
53
+ }
package/SBOM.cdx.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "bomFormat": "CycloneDX",
3
+ "specVersion": "1.6",
4
+ "serialNumber": "urn:uuid:deadbyte-mcp-r46-0-15-2",
5
+ "version": 1,
6
+ "metadata": {
7
+ "component": {
8
+ "type": "application",
9
+ "name": "deadbyte-mcp",
10
+ "version": "0.15.2"
11
+ }
12
+ },
13
+ "components": [
14
+ {
15
+ "type": "library",
16
+ "name": "@modelcontextprotocol/client",
17
+ "version": "2.0.0"
18
+ },
19
+ {
20
+ "type": "library",
21
+ "name": "@modelcontextprotocol/server",
22
+ "version": "2.0.0"
23
+ },
24
+ {
25
+ "type": "library",
26
+ "name": "typescript",
27
+ "version": "5.9.3"
28
+ },
29
+ {
30
+ "type": "library",
31
+ "name": "zod",
32
+ "version": "4.4.3"
33
+ },
34
+ {
35
+ "type": "file",
36
+ "name": "deadbyte-hardware-observer-r45.exe",
37
+ "version": "0.15.2",
38
+ "hashes": [
39
+ {
40
+ "alg": "SHA-256",
41
+ "content": "46bcd3768bb95f8c63fc3118e031efc2818a92929611cabf6c3b29c5162a6591"
42
+ }
43
+ ]
44
+ }
45
+ ]
46
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "schema": "deadbyte.test-matrix.v1",
3
+ "version": "0.15.1",
4
+ "primary_platform": "win32-x64",
5
+ "required": [
6
+ {
7
+ "id": "parent-chain",
8
+ "command": "npm run r45:parent:verify",
9
+ "expected": "PASS"
10
+ },
11
+ {
12
+ "id": "machine-freedom",
13
+ "command": "node --test test/host-inline-r45.test.mjs test/hardware-observation-r45.test.mjs",
14
+ "expected": "PASS"
15
+ },
16
+ {
17
+ "id": "full-regression",
18
+ "command": "npm run r45:full:test",
19
+ "expected": "PASS"
20
+ },
21
+ {
22
+ "id": "windows-gate",
23
+ "command": "npm run gate:windows",
24
+ "expected": "PASS"
25
+ }
26
+ ],
27
+ "non_win32": {
28
+ "portable_tests": "supported where platform-independent",
29
+ "windows_native_tests": "SKIP/unsupported"
30
+ }
31
+ }
@@ -1,11 +1,11 @@
1
- DEADBYTE MCP V0.15.0 / R44 CONTROLLER
1
+ DEADBYTE MCP V0.15.2 / R46 CONTROLLER
2
2
  ====================================
3
3
 
4
4
  ENTRY POINT
5
5
  -----------
6
6
  Primary operator entry point:
7
7
 
8
- npx deadbyte-mcp@latest remote
8
+ npx -y deadbyte-mcp@0.15.2 remote
9
9
 
10
10
  Bare `remote` is a foreground device session. It starts the verified runtime, arms process,
11
11
  coding, and autonomous authority, verifies those three planes are ARMED, and requires Desktop and Host
@@ -16,6 +16,40 @@ $LogDir = Join-Path $RuntimeDir 'logs'
16
16
  $ConfigPath = if ($env:DEADBYTE_CONTROLLER_CONFIG) { $env:DEADBYTE_CONTROLLER_CONFIG } else { Join-Path $Root 'deadbyte-controller.config.psd1' }
17
17
 
18
18
  function Fail([string]$Message) { throw "DEADBYTE controller: $Message" }
19
+
20
+ function Get-ControllerMutationMutexName {
21
+ $normalized = ([System.IO.Path]::GetFullPath($RuntimeDir)).TrimEnd('\\').ToLowerInvariant()
22
+ $sha = [System.Security.Cryptography.SHA256]::Create()
23
+ try {
24
+ $bytes = [System.Text.Encoding]::UTF8.GetBytes($normalized)
25
+ $digest = $sha.ComputeHash($bytes)
26
+ } finally {
27
+ $sha.Dispose()
28
+ }
29
+ $hex = ([System.BitConverter]::ToString($digest)).Replace('-', '').ToLowerInvariant().Substring(0, 24)
30
+ return "Local\DEADBYTE-MCP-Controller-$hex"
31
+ }
32
+
33
+ function Invoke-WithControllerMutationLock([string]$Name, [scriptblock]$Body) {
34
+ $mutexName = Get-ControllerMutationMutexName
35
+ $mutex = New-Object System.Threading.Mutex($false, $mutexName)
36
+ $held = $false
37
+ try {
38
+ try {
39
+ $held = $mutex.WaitOne([TimeSpan]::FromSeconds(180))
40
+ } catch [System.Threading.AbandonedMutexException] {
41
+ $held = $true
42
+ }
43
+ if (-not $held) { Fail "controller mutation lock timeout for '$Name'" }
44
+ & $Body
45
+ } finally {
46
+ if ($held) {
47
+ try { $mutex.ReleaseMutex() } catch {}
48
+ }
49
+ $mutex.Dispose()
50
+ }
51
+ }
52
+
19
53
  function Ensure-Directory([string]$Path) { if (-not (Test-Path -LiteralPath $Path -PathType Container)) { New-Item -ItemType Directory -Path $Path -Force | Out-Null } }
20
54
  function Ledger-Path([string]$Name) { Join-Path $RuntimeDir ("{0}.instance.json" -f $Name.ToLowerInvariant()) }
21
55
  function Log-Path([string]$Name, [string]$Kind) { Join-Path $LogDir ("{0}.{1}.log" -f $Name.ToLowerInvariant(), $Kind) }
@@ -787,7 +821,7 @@ function Get-HostPolicyMetadata($Cfg) {
787
821
  if ([string]::IsNullOrWhiteSpace([string]$Cfg.HostPolicyFile)) { Fail 'privileged host plane is not configured' }
788
822
  $policyPath = [string]$Cfg.HostPolicyFile
789
823
  try { $policy = Get-Content -LiteralPath $policyPath -Raw -Encoding UTF8 | ConvertFrom-Json } catch { Fail "invalid host policy JSON: $policyPath" }
790
- if ($policy.schema -ne 'deadbyte.host-policy.v1' -or $policy.enabled -ne $true) { Fail 'host policy schema/enabled mismatch' }
824
+ if (@('deadbyte.host-policy.v1','deadbyte.host-policy.v2') -notcontains [string]$policy.schema -or $policy.enabled -ne $true) { Fail 'host policy schema/enabled mismatch' }
791
825
  if ([string]::IsNullOrWhiteSpace([string]$policy.arm_file)) { Fail 'host policy arm_file missing' }
792
826
  $armFile = [System.IO.Path]::GetFullPath([string]$policy.arm_file)
793
827
  $runtimeReal = [System.IO.Path]::GetFullPath($RuntimeDir).TrimEnd('\') + '\'
@@ -1275,7 +1309,7 @@ function Clean-Stale {
1275
1309
  }
1276
1310
  }
1277
1311
 
1278
- function Run-Command([string]$Name) {
1312
+ function Run-CommandCore([string]$Name) {
1279
1313
  $cfg = Get-Config
1280
1314
  Assert-ControllerRootBound $cfg
1281
1315
  Ensure-Directory $RuntimeDir; Ensure-Directory $LogDir
@@ -1318,6 +1352,20 @@ function Run-Command([string]$Name) {
1318
1352
  }
1319
1353
  }
1320
1354
 
1355
+ function Run-Command([string]$Name) {
1356
+ $mutating = $Name -in @(
1357
+ 'start','resume','park','stop','restart','toggle','clean',
1358
+ 'armhost','disarmhost','armprocess','disarmprocess','armcoding','disarmcoding',
1359
+ 'armautonomous','disarmautonomous','armdesktop','disarmdesktop',
1360
+ 'supervisorstart','supervisorstop','supervisorrecover'
1361
+ )
1362
+ if (-not $mutating) {
1363
+ Run-CommandCore $Name
1364
+ return
1365
+ }
1366
+ Invoke-WithControllerMutationLock $Name { Run-CommandCore $Name }
1367
+ }
1368
+
1321
1369
  if ($Command -ne 'menu') {
1322
1370
  $recordsStartFailure = $Command -in @('start','resume','restart')
1323
1371
  if ($recordsStartFailure) { Remove-Item -LiteralPath (Controller-StartFailurePath) -Force -ErrorAction SilentlyContinue }
@@ -1336,7 +1384,7 @@ while ($true) {
1336
1384
  Clear-Host
1337
1385
  $cfg = Get-Config
1338
1386
  Assert-ControllerRootBound $cfg
1339
- Write-Host 'DEADBYTE MCP ON-DEMAND CONTROLLER V0.15.0 / R44'
1387
+ Write-Host 'DEADBYTE MCP ON-DEMAND CONTROLLER V0.15.2 / R46'
1340
1388
  Write-Host '======================================'
1341
1389
  Show-State $cfg | Out-Null
1342
1390
  Write-Host ''
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "profiles": {
21
21
  "ping_hold": {
22
- "executable": "C:\\Windows\\System32\\cmd.exe",
22
+ "executable": "C:\\WINDOWS\\System32\\cmd.exe",
23
23
  "executable_sha256": "97ac98b1a92c286054cce55239cfccdfc23a5517bd07fe693072c9ca96c7dabb",
24
24
  "root_ids": [
25
25
  "core"
@@ -42,6 +42,68 @@
42
42
  "input_actions": {
43
43
  "ping": "echo DEADBYTE_ACTION_PING\r\n"
44
44
  }
45
+ },
46
+ "powershell": {
47
+ "executable": "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
48
+ "executable_sha256": "8bb6fa8c283b4d92120b1ef249a9b311b0f804d4cabbe9981159976c8be76a5e",
49
+ "root_ids": [
50
+ "core"
51
+ ],
52
+ "prefix_args": [
53
+ "-NoLogo",
54
+ "-NoProfile",
55
+ "-NonInteractive",
56
+ "-Command"
57
+ ],
58
+ "transport": "pipe",
59
+ "max_args": 1,
60
+ "max_arg_bytes": 8192,
61
+ "max_sessions": 4,
62
+ "max_input_bytes": 65536,
63
+ "max_retained_output_bytes": 1048576,
64
+ "env_allow": [
65
+ "PATH",
66
+ "TEMP",
67
+ "TMP",
68
+ "SystemRoot",
69
+ "WINDIR",
70
+ "USERPROFILE",
71
+ "PSModulePath",
72
+ "COMSPEC",
73
+ "PATHEXT"
74
+ ],
75
+ "input_actions": {}
76
+ },
77
+ "powershell_repl": {
78
+ "executable": "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
79
+ "executable_sha256": "8bb6fa8c283b4d92120b1ef249a9b311b0f804d4cabbe9981159976c8be76a5e",
80
+ "root_ids": [
81
+ "core"
82
+ ],
83
+ "prefix_args": [
84
+ "-NoLogo",
85
+ "-NoProfile",
86
+ "-NonInteractive"
87
+ ],
88
+ "transport": "pipe",
89
+ "allow_raw_input": true,
90
+ "max_args": 0,
91
+ "max_arg_bytes": 256,
92
+ "max_sessions": 2,
93
+ "max_input_bytes": 65536,
94
+ "max_retained_output_bytes": 4194304,
95
+ "env_allow": [
96
+ "PATH",
97
+ "TEMP",
98
+ "TMP",
99
+ "SystemRoot",
100
+ "WINDIR",
101
+ "USERPROFILE",
102
+ "PSModulePath",
103
+ "COMSPEC",
104
+ "PATHEXT"
105
+ ],
106
+ "input_actions": {}
45
107
  }
46
108
  }
47
109
  }
@@ -1,4 +1,4 @@
1
- # DEADBYTE MCP V0.15.0 / R44 ARCHITECTURE
1
+ # DEADBYTE MCP V0.15.2 / R46 ARCHITECTURE
2
2
 
3
3
  ```mermaid
4
4
  flowchart TD
@@ -9,7 +9,7 @@ flowchart TD
9
9
  D --> MI[Optional Machine 4 Tools]
10
10
  D --> F[Optional Host 3 Tools]
11
11
  D --> G[Optional Agent 7 Tools]
12
- D --> PR[Optional Process 6 Tools]
12
+ D --> PR[Optional Process 7 Tools]
13
13
  D --> V[Optional Coding 22 Tools]
14
14
  D --> MF[Optional Machine FS 8 Tools]
15
15
  D --> OB[Optional Observation 6 Tools]
@@ -59,8 +59,7 @@ invocation may recover a stale owner only when no live guardian remains.
59
59
  ## Exact capability catalogs
60
60
 
61
61
  Only complete combinations of base plus optional machine, host, agent, process, coding,
62
- machine-filesystem, observation, and autonomous surfaces are valid at the HTTP bridge. A fully
63
- enabled R34 runtime exposes exactly 73 tools. Process authority is independently granted;
62
+ machine-filesystem, observation, and autonomous surfaces are valid at the HTTP bridge. The current fully enabled R46 runtime exposes exactly 83 full tools and 43 compact tools. Process authority is independently granted;
64
63
  machine-filesystem and observation reuse coding-policy roots; autonomous requires the complete
65
64
  coding surface. Partial, dependency-invalid, unknown, or extra catalogs fail closed.
66
65