deadbyte-mcp 0.15.68 → 0.15.70
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 +85 -38
- package/PROVENANCE.json +52 -24
- package/README.txt +44 -31
- package/RELEASE.json +47 -17
- package/SBOM.cdx.json +2 -2
- package/TEST-MATRIX.json +44 -2
- package/bridge/package.json +1 -1
- package/controller/deadbyte-controller.ps1 +65 -1
- package/controller/deadbyte-process-policy.json +4 -4
- package/docs/R184-package-lock.json +97 -0
- package/docs/R186-OWNER-CONSENT-HANDOFF.txt +87 -0
- package/package.json +1 -1
- package/scripts/install-r186-owner-trust.ps1 +59 -0
- package/scripts/r175-focused-runner.mjs +38 -0
- package/scripts/r176-log-preview.mjs +18 -0
- package/scripts/r177-owner-trust-inventory.ps1 +36 -0
- package/scripts/r178-full-regression.mjs +21 -0
- package/scripts/r178-npm-ci.mjs +10 -0
- package/scripts/r178-npm-preflight.mjs +16 -0
- package/scripts/r178-release-gates-readonly.mjs +9 -0
- package/scripts/r178-shard-regression.mjs +25 -0
- package/scripts/r179-predecessor-registry.mjs +24 -0
- package/scripts/r179-protected-inventory.ps1 +21 -0
- package/scripts/r186-focused-runner.mjs +22 -0
- package/scripts/r186-owner-anchor-inspect.mjs +6 -0
- package/scripts/r186-owner-consent-check.mjs +86 -0
- package/scripts/r186-owner-grant-cli.mjs +45 -0
- package/scripts/r186-owner-key-local.mjs +22 -0
- package/scripts/r186-owner-review-export.mjs +34 -0
- package/src/deadbyte-cli.mjs +130 -56
- package/src/foreground-owner-recovery-r190.mjs +117 -0
- package/src/r174-owner-webauthn.mjs +176 -0
- package/src/r175-foreground-boundary.mjs +28 -0
- package/src/r186-owner-anchor.mjs +12 -0
- package/src/r186-owner-consent-preflight.mjs +63 -0
- package/src/r186-owner-grant-broker.mjs +96 -0
- package/src/r186-owner-local-signing.mjs +25 -0
- package/src/r186-owner-request.mjs +40 -0
- package/src/r186-owner-review-export.mjs +49 -0
- package/src/remote-live-log.mjs +81 -5
- package/src/remote-session-guardian.mjs +23 -0
- package/src/version.mjs +1 -1
- package/test/helpers/r175-active-pointer.mjs +28 -0
- package/test/helpers/release-lock.mjs +12 -0
- package/test/r129-sdk-security-baseline.test.mjs +2 -1
- package/test/r130-release-security-contract.test.mjs +11 -10
- package/test/r132-release-identity.test.mjs +12 -11
- package/test/r153-prepublish-identity.test.mjs +1 -1
- package/test/r155-default-live-log.test.mjs +17 -16
- package/test/r160-package-decision-manifest.test.mjs +1 -1
- package/test/r160-release-contract.test.mjs +4 -5
- package/test/r163-isolated-slot-rollback-restore.test.mjs +8 -8
- package/test/r165-live-cli-skew.test.mjs +6 -6
- package/test/r167-release-contract.test.mjs +15 -13
- package/test/r168-protected-entrypoint.test.mjs +5 -2
- package/test/r168-release-contract.test.mjs +4 -3
- package/test/r168-remote-one-shot-coherence.test.mjs +2 -1
- package/test/r172-release-contract.test.mjs +7 -7
- package/test/r173-release-contract.test.mjs +18 -17
- package/test/r174-owner-webauthn.test.mjs +144 -0
- package/test/r175-cli-flags.test.mjs +23 -0
- package/test/r175-foreground-boundary.test.mjs +87 -0
- package/test/r175-guardian-owner-boundary.test.mjs +56 -0
- package/test/r176-pretty-live-log.test.mjs +54 -0
- package/test/r177-windows-absolute-live-path.test.mjs +37 -0
- package/test/r179-absolute-path-live-log.test.mjs +40 -0
- package/test/r179-release-contract.test.mjs +62 -0
- package/test/r186-controller-owner-grant.test.mjs +20 -0
- package/test/r186-owner-consent-preflight.test.mjs +98 -0
- package/test/r186-owner-enrollment.test.mjs +20 -0
- package/test/r186-owner-grant-broker.test.mjs +85 -0
- package/test/r186-owner-local-signing.test.mjs +30 -0
- package/test/r186-owner-request.test.mjs +28 -0
- package/test/r186-owner-review-export.test.mjs +52 -0
- package/test/r190-foreground-cli.test.mjs +41 -0
- package/test/r190-foreground-owner-recovery.test.mjs +61 -0
- package/test/r190-release-contract.test.mjs +33 -0
- package/test/r48-release-contract.test.mjs +2 -1
- package/test/r51-runtime-coherence.test.mjs +4 -2
- package/test/r58-cleanup-retention.test.mjs +5 -12
- package/test/r58-concurrent-recovery.test.mjs +5 -1
- package/test/r58-stale-owner.test.mjs +9 -3
- package/test/r59-tool-surface-compat.test.mjs +1 -1
- package/test/remote-live-log-r37.test.mjs +2 -2
- package/test/remote-live-log-recovery-r36.test.mjs +1 -1
- package/test/remote-session-cli.test.mjs +92 -126
- package/node_modules/which/CHANGELOG.md +0 -166
package/RELEASE.json
CHANGED
|
@@ -1,31 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.release.v1",
|
|
3
3
|
"name": "deadbyte-mcp",
|
|
4
|
-
"version": "0.15.
|
|
5
|
-
"train": "
|
|
6
|
-
"label": "
|
|
4
|
+
"version": "0.15.70",
|
|
5
|
+
"train": "R190",
|
|
6
|
+
"label": "R190 explicit protected foreground ownership recovery candidate",
|
|
7
7
|
"protocol_revision": "2026-07-28",
|
|
8
8
|
"parent": {
|
|
9
|
-
"version": "0.15.
|
|
10
|
-
"release_id": "v0.15.
|
|
11
|
-
"manifest_sha256": "
|
|
12
|
-
"generation_manifest_sha256": "
|
|
9
|
+
"version": "0.15.68",
|
|
10
|
+
"release_id": "v0.15.68-ff29dbb2fbb89862",
|
|
11
|
+
"manifest_sha256": "ff29dbb2fbb898625592afb47835a4a62ef289429f1e0a89a83242398cd98885",
|
|
12
|
+
"generation_manifest_sha256": "2887d4a8d54ea6fc6b28869072f72491c892dfe28178b3537936dce958147bd2",
|
|
13
13
|
"activation_status": "PRODUCTION_ACTIVE"
|
|
14
14
|
},
|
|
15
15
|
"runtime_predecessor": {
|
|
16
|
-
"version": "0.15.
|
|
17
|
-
"release_id": "v0.15.
|
|
18
|
-
"manifest_sha256": "
|
|
19
|
-
"generation_manifest_sha256": "
|
|
16
|
+
"version": "0.15.68",
|
|
17
|
+
"release_id": "v0.15.68-ff29dbb2fbb89862",
|
|
18
|
+
"manifest_sha256": "ff29dbb2fbb898625592afb47835a4a62ef289429f1e0a89a83242398cd98885",
|
|
19
|
+
"generation_manifest_sha256": "2887d4a8d54ea6fc6b28869072f72491c892dfe28178b3537936dce958147bd2"
|
|
20
|
+
},
|
|
21
|
+
"r190_foreground_recovery": {
|
|
22
|
+
"status": "PREPUBLISH_VERIFIED",
|
|
23
|
+
"npm_published": false,
|
|
24
|
+
"production_activated": false,
|
|
25
|
+
"live_marker_reconciled": true,
|
|
26
|
+
"authority_mutation_allowed": false,
|
|
27
|
+
"runtime_mutation_allowed": false,
|
|
28
|
+
"confirmed_live_defect": "R179 requires an explicit owner command for legacy foreground recovery but 0.15.69 exposes no such command",
|
|
29
|
+
"command": "remote reconcileforeground --confirm-marker-sha256 <sha256>",
|
|
30
|
+
"protected_full_regression": "PASS_2090_OF_2141_51_CLASSIFIED_SKIP_0_FAIL",
|
|
31
|
+
"protected_full_transcript_sha256": "85bbd8088ee25fabd37bd062cf1ec0ad83c43e04abeee81881fc009755a9dd32",
|
|
32
|
+
"npm_verify_only": "PASS_EXACT_TREE_PRE_METADATA_SEAL",
|
|
33
|
+
"live_foreground": "PASS_ACTIVE_0.15.68_READY_SIGNED_PING_AND_MCP_CALLS",
|
|
34
|
+
"legacy_guardian_cleanup": "ACTIVE_0.15.68_RETAINED_MARKER_RECONCILED_BY_PROTECTED_R190_CAS",
|
|
35
|
+
"public_tool_delta": 0,
|
|
36
|
+
"authority_scope_delta": 0
|
|
20
37
|
},
|
|
21
38
|
"source_predecessor": {
|
|
22
|
-
"version": "0.15.
|
|
23
|
-
"train": "
|
|
24
|
-
"source_path": "
|
|
39
|
+
"version": "0.15.69",
|
|
40
|
+
"train": "R179",
|
|
41
|
+
"source_path": "https://registry.npmjs.org/deadbyte-mcp/-/deadbyte-mcp-0.15.69.tgz",
|
|
25
42
|
"release_status": "PUBLISHED_REGISTRY_VERIFIED",
|
|
26
|
-
"manifest_status": "
|
|
27
|
-
"manifest_sha256": "
|
|
28
|
-
"tarball_sha256": "
|
|
43
|
+
"manifest_status": "PUBLISHED_PREVIEW_MANIFEST_VERIFIED_NOT_ACTIVE",
|
|
44
|
+
"manifest_sha256": "cfede112761da00e73b626cfbce23d17e1d4b6e3a325bb675415196d31142ba0",
|
|
45
|
+
"tarball_sha256": "578c1630608f9df816524c78abc9e1a55357fdc3cd25e142122f1a823e1d69e3"
|
|
29
46
|
},
|
|
30
47
|
"consolidation": {
|
|
31
48
|
"frontend_status_vocabulary": true,
|
|
@@ -548,5 +565,18 @@
|
|
|
548
565
|
"npm_publish": "NOT_RUN",
|
|
549
566
|
"production_activation": "NOT_RUN",
|
|
550
567
|
"stable_final_claim": false
|
|
568
|
+
},
|
|
569
|
+
"r179": {
|
|
570
|
+
"scope": "FOREGROUND_OBSERVATION_ONLY_CRASH_GUARDIAN_AND_READABLE_WINDOWS_LOGS",
|
|
571
|
+
"source_predecessor_version": "0.15.68",
|
|
572
|
+
"source_predecessor_manifest_sha256": "ff29dbb2fbb898625592afb47835a4a62ef289429f1e0a89a83242398cd98885",
|
|
573
|
+
"source_predecessor_tarball_sha256": "1a7f1fe05a06178b8d772a140be6e0470790b743cef690c3f8f8165cc61075bf",
|
|
574
|
+
"owner_approved_autonomous_grant": "NOT_ISSUED",
|
|
575
|
+
"protected_full_regression": "NOT_VERIFIED",
|
|
576
|
+
"windows_gate": "BLOCKED_R89_UNTRUSTED_INSTALLATION",
|
|
577
|
+
"foreground_live_integration": "NOT_VERIFIED",
|
|
578
|
+
"npm_publish": "NOT_RUN",
|
|
579
|
+
"production_activation": "NOT_RUN",
|
|
580
|
+
"stable_final_claim": false
|
|
551
581
|
}
|
|
552
582
|
}
|
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:
|
|
4
|
+
"serialNumber": "urn:cdx:deadbyte-mcp:r190:0.15.70",
|
|
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.70"
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"components": [
|
package/TEST-MATRIX.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.test-matrix.v1",
|
|
3
|
-
"version": "0.15.
|
|
4
|
-
"train": "
|
|
3
|
+
"version": "0.15.70",
|
|
4
|
+
"train": "R190",
|
|
5
5
|
"primary_platform": "win32-x64",
|
|
6
6
|
"reference": {
|
|
7
7
|
"package": "@wonderwhy-er/desktop-commander",
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
"schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
|
|
11
11
|
},
|
|
12
12
|
"required": [
|
|
13
|
+
{
|
|
14
|
+
"id": "r190-explicit-foreground-recovery",
|
|
15
|
+
"command": "node --test --test-concurrency=1 test/r190-foreground-owner-recovery.test.mjs test/r190-foreground-cli.test.mjs",
|
|
16
|
+
"expected": "Exact legacy marker hash, PID-reuse proof, pointer and authority vector are bound; native CAS deletion is marker-only and crash-resumable"
|
|
17
|
+
},
|
|
13
18
|
{
|
|
14
19
|
"id": "r160-receipt-startup-identity",
|
|
15
20
|
"command": "node --test test/r153-marker-reconcile-receipt.test.mjs test/r159-legacy-marker-evidence.test.mjs test/r160-marker-proof.test.mjs test/r160-package-decision-manifest.test.mjs",
|
|
@@ -124,6 +129,21 @@
|
|
|
124
129
|
"id": "r168-claim-preservation",
|
|
125
130
|
"command": "Verify read-only R168 signed epoch audit and old R65 claim",
|
|
126
131
|
"expected": "Unresolved claim is preserved; no test key used as owner approval; production pointer and Coding scope unchanged"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "r179-owner-authorized-autonomous",
|
|
135
|
+
"command": "Issue independently signed owner consent from protected broker, verify exact policy and epoch, then arm Autonomous",
|
|
136
|
+
"expected": "Owner proof bound to active release, scoped project, policy hashes, expiry and independently protected signing key"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "r179-protected-full",
|
|
140
|
+
"command": "node --test --test-concurrency=4 test/*.test.mjs in exact protected 0.15.69 installation",
|
|
141
|
+
"expected": "Zero failures; all skips reviewed; R89 trusted installation and native tests pass"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "r179-live-log-and-foreground",
|
|
145
|
+
"command": "Run Ctrl+C, restart, crash and concurrent sessions with pre-existing standing grants and confirm no implicit revocation",
|
|
146
|
+
"expected": "Owner standing grants unchanged; observation-only marker CAS; signed audit remains verifiable"
|
|
127
147
|
}
|
|
128
148
|
],
|
|
129
149
|
"observed_pre_release_evidence": {
|
|
@@ -645,5 +665,27 @@
|
|
|
645
665
|
"new_authority_scopes": 0,
|
|
646
666
|
"publication": "NOT_RUN",
|
|
647
667
|
"production_activation": "NOT_RUN"
|
|
668
|
+
},
|
|
669
|
+
"r179": {
|
|
670
|
+
"owner_consent": "NOT_VERIFIED",
|
|
671
|
+
"protected_full": "NOT_VERIFIED",
|
|
672
|
+
"foreground_live": "NOT_VERIFIED",
|
|
673
|
+
"package_verify_only": "PASS_2552_MANIFEST_ENTRIES",
|
|
674
|
+
"registry_publish": "NOT_RUN",
|
|
675
|
+
"production_activation": "NOT_RUN"
|
|
676
|
+
},
|
|
677
|
+
"r190": {
|
|
678
|
+
"status": "PREPUBLISH_VERIFIED_BEFORE_FINAL_METADATA_SEAL",
|
|
679
|
+
"targeted_source": "PASS_14_OF_14",
|
|
680
|
+
"targeted_protected": "PASS_14_OF_14",
|
|
681
|
+
"full_protected": "PASS_2090_OF_2141_51_CLASSIFIED_SKIP_0_FAIL",
|
|
682
|
+
"full_protected_transcript_sha256": "85bbd8088ee25fabd37bd062cf1ec0ad83c43e04abeee81881fc009755a9dd32",
|
|
683
|
+
"npm_verify_only": "PASS_PRE_FINAL_METADATA_SEAL",
|
|
684
|
+
"live_marker_reconciliations": 2,
|
|
685
|
+
"live_foreground_mcp": "PASS_23_CALLS_22_OK_1_EXPECTED_DENIED_0_UNKNOWN_0_MUTATIONS",
|
|
686
|
+
"active_runtime_after_test": "v0.15.68-ff29dbb2fbb89862_ONLINE",
|
|
687
|
+
"authority_after_test": "ALL_FIVE_PLANES_DISARMED",
|
|
688
|
+
"publication": "NOT_RUN",
|
|
689
|
+
"production_activation": "NOT_RUN"
|
|
648
690
|
}
|
|
649
691
|
}
|
package/bridge/package.json
CHANGED
|
@@ -1015,6 +1015,10 @@ function Invoke-AuthorityEpochCommand($Cfg, [string]$Plane, [string]$Action, [st
|
|
|
1015
1015
|
'src\foreground-marker-cas-win32.mjs',
|
|
1016
1016
|
'src\foreground-process-identity.mjs',
|
|
1017
1017
|
'src\windows-powershell-environment.mjs',
|
|
1018
|
+
'scripts\r186-owner-grant-cli.mjs',
|
|
1019
|
+
'src\r186-owner-grant-broker.mjs',
|
|
1020
|
+
'src\r186-owner-consent-preflight.mjs',
|
|
1021
|
+
'src\r70-owner-approval.mjs',
|
|
1018
1022
|
'bin\deadbyte-epoch-lock-r85.node',
|
|
1019
1023
|
'docs\R85-EPOCH-LOCK-BINARY.json',
|
|
1020
1024
|
'native\deadbyte-epoch-lock-r85.cpp'
|
|
@@ -1391,6 +1395,57 @@ function Get-AutonomousLeaseStatus($Cfg) {
|
|
|
1391
1395
|
return [pscustomobject]@{ Configured=$true; Armed=$true; Reason='standing-grant'; EpochSeq=$epoch.Seq; EpochSha256=$epoch.EventSha256 }
|
|
1392
1396
|
}
|
|
1393
1397
|
|
|
1398
|
+
function Invoke-R186ProtectedAutonomousGrant($Cfg, $Meta) {
|
|
1399
|
+
if (-not $Cfg.ContainsKey('AuthorityEpochRoot') -or [string]::IsNullOrWhiteSpace([string]$Cfg.AuthorityEpochRoot)) {
|
|
1400
|
+
Fail 'R70_OWNER_ENROLLMENT_REQUIRED: protected authority root unavailable'
|
|
1401
|
+
}
|
|
1402
|
+
$protectedRoot = [System.IO.Path]::GetFullPath([string]$Cfg.AuthorityEpochRoot)
|
|
1403
|
+
$releaseRoot = [System.IO.Path]::GetFullPath([string]$Cfg.CoreRoot)
|
|
1404
|
+
$relativeFiles = @(
|
|
1405
|
+
'scripts\r186-owner-grant-cli.mjs',
|
|
1406
|
+
'src\r186-owner-grant-broker.mjs',
|
|
1407
|
+
'src\r186-owner-consent-preflight.mjs',
|
|
1408
|
+
'src\r70-owner-approval.mjs',
|
|
1409
|
+
'src\authority-continuity-r65.mjs',
|
|
1410
|
+
'src\privileged-install-trust-r89.mjs',
|
|
1411
|
+
'src\epoch-lock-r85.mjs',
|
|
1412
|
+
'src\canonical-json.mjs',
|
|
1413
|
+
'src\text-policy.mjs',
|
|
1414
|
+
'src\foreground-marker-cas-win32.mjs',
|
|
1415
|
+
'src\foreground-process-identity.mjs',
|
|
1416
|
+
'src\windows-powershell-environment.mjs',
|
|
1417
|
+
'src\release-slot.mjs',
|
|
1418
|
+
'bin\deadbyte-epoch-lock-r85.node',
|
|
1419
|
+
'docs\R85-EPOCH-LOCK-BINARY.json',
|
|
1420
|
+
'native\deadbyte-epoch-lock-r85.cpp'
|
|
1421
|
+
)
|
|
1422
|
+
$releaseManifest = Join-Path $releaseRoot 'MANIFEST.SHA256'
|
|
1423
|
+
$protectedManifest = Join-Path $protectedRoot 'MANIFEST.SHA256'
|
|
1424
|
+
if (-not (Test-Path -LiteralPath $releaseManifest -PathType Leaf) -or
|
|
1425
|
+
-not (Test-Path -LiteralPath $protectedManifest -PathType Leaf) -or
|
|
1426
|
+
(Get-ExecutableHash $releaseManifest) -cne (Get-ExecutableHash $protectedManifest)) {
|
|
1427
|
+
Fail 'R186 protected owner broker release manifest mismatch'
|
|
1428
|
+
}
|
|
1429
|
+
foreach ($relative in $relativeFiles) {
|
|
1430
|
+
$source = Join-Path $releaseRoot $relative
|
|
1431
|
+
$protected = Join-Path $protectedRoot $relative
|
|
1432
|
+
if (-not (Test-Path -LiteralPath $source -PathType Leaf) -or
|
|
1433
|
+
-not (Test-Path -LiteralPath $protected -PathType Leaf) -or
|
|
1434
|
+
(Get-ExecutableHash $source) -cne (Get-ExecutableHash $protected)) {
|
|
1435
|
+
Fail "R186 protected owner broker source mismatch: $relative"
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
Assert-ProtectedEpochSourceAcl -Files @($relativeFiles | ForEach-Object { Join-Path $protectedRoot $_ })
|
|
1439
|
+
$cli = Join-Path $protectedRoot 'scripts\r186-owner-grant-cli.mjs'
|
|
1440
|
+
$node = [string]$Cfg.Bridge.FilePath
|
|
1441
|
+
if ([string]::IsNullOrWhiteSpace($node) -or -not (Test-Path -LiteralPath $node -PathType Leaf)) { Fail 'R186 protected owner broker Node unavailable' }
|
|
1442
|
+
$output = @(& $node $cli $RuntimeDir ([string]$Cfg.CodingPolicyFile) ([string]$Cfg.AutonomousPolicyFile))
|
|
1443
|
+
$exit = $LASTEXITCODE
|
|
1444
|
+
if ($exit -ne 0) { Fail "R70_OWNER_ENROLLMENT_REQUIRED: protected owner grant broker rejected (exit=$exit)" }
|
|
1445
|
+
try { return (($output -join [Environment]::NewLine) | ConvertFrom-Json) }
|
|
1446
|
+
catch { Fail 'R186 protected owner grant broker returned invalid JSON' }
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1394
1449
|
function Arm-Autonomous($Cfg) {
|
|
1395
1450
|
$coding = Get-CodingLeaseStatus $Cfg
|
|
1396
1451
|
if (-not $coding.Armed) { Fail 'autonomous plane requires an active coding lease; run armcoding first' }
|
|
@@ -1403,7 +1458,16 @@ function Arm-Autonomous($Cfg) {
|
|
|
1403
1458
|
$legacyOwnerPolicySha256 = '6274492644c303b38117541cc22a59e88e6ff5fdef7051a5d57ad336f45765f5'
|
|
1404
1459
|
$selectedRoots = @($meta.RootIds)
|
|
1405
1460
|
if ([string]$meta.Sha256 -cne $legacyOwnerPolicySha256 -or $selectedRoots.Count -ne 1 -or [string]$selectedRoots[0] -cne 'core') {
|
|
1406
|
-
|
|
1461
|
+
$ownerApproval = Join-Path $RuntimeDir 'owner-consent\autonomous-approval.json'
|
|
1462
|
+
if (-not (Test-Path -LiteralPath $ownerApproval -PathType Leaf)) {
|
|
1463
|
+
Fail 'R70_OWNER_ENROLLMENT_REQUIRED: bounded owner approval is absent'
|
|
1464
|
+
}
|
|
1465
|
+
$issued = Invoke-R186ProtectedAutonomousGrant $Cfg $meta
|
|
1466
|
+
if ($null -eq $issued -or [string]$issued.status -cne 'GRANTED' -or $issued.authority_granted -ne $true) {
|
|
1467
|
+
Fail 'R70_OWNER_ENROLLMENT_REQUIRED: protected owner grant broker did not issue authority'
|
|
1468
|
+
}
|
|
1469
|
+
Write-Host 'AUTONOMOUS PLANE ENABLED BY OWNER-SIGNED BOUNDED GRANT'
|
|
1470
|
+
return
|
|
1407
1471
|
}
|
|
1408
1472
|
Ensure-Directory $RuntimeDir
|
|
1409
1473
|
$nonceBytes = New-Object byte[] 32
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.process-policy.v1",
|
|
3
3
|
"enabled": true,
|
|
4
|
-
"grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.
|
|
5
|
-
"state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.
|
|
4
|
+
"grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.70-r190-foreground-recovery\\controller\\runtime\\process-grant.json",
|
|
5
|
+
"state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.70-r190-foreground-recovery\\controller\\runtime\\process-state",
|
|
6
6
|
"native_host": {
|
|
7
|
-
"path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.
|
|
7
|
+
"path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.70-r190-foreground-recovery\\bin\\deadbyte-process-host.exe",
|
|
8
8
|
"sha256": "daf9cfb371bee88cafbf5597eaa507fec504dbe0b0ddd40d0c3c2e02817f49e4"
|
|
9
9
|
},
|
|
10
10
|
"roots": {
|
|
11
11
|
"core": {
|
|
12
|
-
"path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.
|
|
12
|
+
"path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.70-r190-foreground-recovery",
|
|
13
13
|
"deny_paths": [
|
|
14
14
|
"node_modules",
|
|
15
15
|
"controller/runtime",
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "deadbyte-mcp",
|
|
3
|
+
"version": "0.15.70",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "deadbyte-mcp",
|
|
9
|
+
"version": "0.15.70",
|
|
10
|
+
"bundleDependencies": [
|
|
11
|
+
"@modelcontextprotocol/server",
|
|
12
|
+
"@modelcontextprotocol/client",
|
|
13
|
+
"typescript",
|
|
14
|
+
"zod"
|
|
15
|
+
],
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@modelcontextprotocol/client": "2.3.1",
|
|
18
|
+
"@modelcontextprotocol/server": "2.3.1",
|
|
19
|
+
"typescript": "5.9.3",
|
|
20
|
+
"zod": "4.4.3"
|
|
21
|
+
},
|
|
22
|
+
"bin": {
|
|
23
|
+
"deadbyte-mcp": "src/deadbyte-cli.mjs"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=22"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"node_modules/@modelcontextprotocol/client": {
|
|
30
|
+
"version": "2.3.1",
|
|
31
|
+
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/client/-/client-2.3.1.tgz",
|
|
32
|
+
"integrity": "sha512-mIGZXpHsjnZ6lD+gD/WCMpR5k8yVQQ8nNFH1N0Srf7AvnwTUMYD6pvTY8ng2+He5FfV7YMZLmrjL7cLa/cc3dQ==",
|
|
33
|
+
"inBundle": true,
|
|
34
|
+
"license": "Apache-2.0",
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@modelcontextprotocol/core": "2.3.1",
|
|
37
|
+
"cross-spawn": "^7.0.5",
|
|
38
|
+
"eventsource": "^3.0.2",
|
|
39
|
+
"eventsource-parser": "^3.0.8",
|
|
40
|
+
"jose": "^6.1.3",
|
|
41
|
+
"pkce-challenge": "^5.0.0",
|
|
42
|
+
"zod": "^4.2.0"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=20"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"node_modules/@modelcontextprotocol/core": {
|
|
49
|
+
"version": "2.3.1",
|
|
50
|
+
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/core/-/core-2.3.1.tgz",
|
|
51
|
+
"integrity": "sha512-laVmIhPGpWi7rG9q+0UigblRN0Hws/Yjlb6qLFtVqryXVLkc4h+yN8z731POD2LnAGQlFe7/tXhUm7Bi0YB91g==",
|
|
52
|
+
"inBundle": true,
|
|
53
|
+
"license": "Apache-2.0",
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"zod": "^4.2.0"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=20"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"node_modules/@modelcontextprotocol/server": {
|
|
62
|
+
"version": "2.3.1",
|
|
63
|
+
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.3.1.tgz",
|
|
64
|
+
"integrity": "sha512-e59MfWuSssj6DoQ96JCTqdW1AXT5/XtnTl0WWd6MU1Ka434fFUGGosCLJbGNySDhHGvxQWoRWK137FXYFkYNWw==",
|
|
65
|
+
"inBundle": true,
|
|
66
|
+
"license": "Apache-2.0",
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"@modelcontextprotocol/core": "2.3.1",
|
|
69
|
+
"zod": "^4.2.0"
|
|
70
|
+
},
|
|
71
|
+
"engines": {
|
|
72
|
+
"node": ">=20"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"node_modules/cross-spawn": {
|
|
76
|
+
"version": "7.0.6",
|
|
77
|
+
"inBundle": true,
|
|
78
|
+
"license": "MIT",
|
|
79
|
+
"dependencies": {"path-key":"^3.1.0","shebang-command":"^2.0.0","which":"^2.0.1"},
|
|
80
|
+
"engines": {"node":">= 8"}
|
|
81
|
+
},
|
|
82
|
+
"node_modules/eventsource": {
|
|
83
|
+
"version":"3.0.7","inBundle":true,"license":"MIT",
|
|
84
|
+
"dependencies":{"eventsource-parser":"^3.0.1"},"engines":{"node":">=18.0.0"}
|
|
85
|
+
},
|
|
86
|
+
"node_modules/eventsource-parser": {"version":"3.1.1","inBundle":true,"license":"MIT","engines":{"node":">=18.0.0"}},
|
|
87
|
+
"node_modules/isexe": {"version":"2.0.0","inBundle":true,"license":"ISC"},
|
|
88
|
+
"node_modules/jose": {"version":"6.2.10","inBundle":true,"license":"MIT","funding":{"url":"https://github.com/sponsors/panva"}},
|
|
89
|
+
"node_modules/path-key": {"version":"3.1.1","inBundle":true,"license":"MIT","engines":{"node":">=8"}},
|
|
90
|
+
"node_modules/pkce-challenge": {"version":"5.0.1","inBundle":true,"license":"MIT","engines":{"node":">=16.20.0"}},
|
|
91
|
+
"node_modules/shebang-command": {"version":"2.0.0","inBundle":true,"license":"MIT","dependencies":{"shebang-regex":"^3.0.0"},"engines":{"node":">=8"}},
|
|
92
|
+
"node_modules/shebang-regex": {"version":"3.0.0","inBundle":true,"license":"MIT","engines":{"node":">=8"}},
|
|
93
|
+
"node_modules/typescript": {"version":"5.9.3","inBundle":true,"license":"Apache-2.0","bin":{"tsc":"bin/tsc","tsserver":"bin/tsserver"},"engines":{"node":">=14.17"}},
|
|
94
|
+
"node_modules/which": {"version":"2.0.2","inBundle":true,"license":"ISC","dependencies":{"isexe":"^2.0.0"},"bin":{"node-which":"bin/node-which"},"engines":{"node":">= 8"}},
|
|
95
|
+
"node_modules/zod": {"version":"4.4.3","inBundle":true,"license":"MIT","funding":{"url":"https://github.com/sponsors/colinhacks"}}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
DEADBYTE MCP / R186 OWNER CONSENT
|
|
2
|
+
2026-10-28
|
|
3
|
+
|
|
4
|
+
CURRENT STATE
|
|
5
|
+
|
|
6
|
+
production remains 0.15.68
|
|
7
|
+
R185 exact tarball 0.15.69 is frozen and protected regression was green
|
|
8
|
+
R186 is an isolated development successor and is not published or activated
|
|
9
|
+
|
|
10
|
+
WHAT R186 ADDS
|
|
11
|
+
|
|
12
|
+
src/r186-owner-consent-preflight.mjs
|
|
13
|
+
verifies owner Ed25519 public key against an exact pinned fingerprint
|
|
14
|
+
verifies the R70 project/policy/artifact/time-bound signature
|
|
15
|
+
returns verified_readonly and authority_granted=false
|
|
16
|
+
|
|
17
|
+
scripts/r186-owner-consent-check.mjs
|
|
18
|
+
loads public owner trust only from these fixed Windows locations
|
|
19
|
+
|
|
20
|
+
C:\Program Files\DEADBYTE-OwnerTrust\owner-anchor.json
|
|
21
|
+
C:\Program Files\DEADBYTE-OwnerTrust\owner-public.pem
|
|
22
|
+
|
|
23
|
+
requires the native R89 protected ACL check for the owner files
|
|
24
|
+
requires protected exact installation for executable verifier source
|
|
25
|
+
verifies the entire installed release manifest before trusting a proof
|
|
26
|
+
derives policy SHA256 from the actual policy files
|
|
27
|
+
derives reviewed_artifact_sha256 from the exact installed MANIFEST.SHA256 bytes
|
|
28
|
+
refuses to enroll a key or grant any authority
|
|
29
|
+
|
|
30
|
+
OWNER ACTION REQUIRED OUTSIDE THIS AGENT
|
|
31
|
+
|
|
32
|
+
the owner must generate and retain the Ed25519 private key on an independently
|
|
33
|
+
controlled device that DEADBYTE MCP and ChatGPT cannot read or execute on
|
|
34
|
+
do not send private key bytes or passwords to ChatGPT or DEADBYTE MCP
|
|
35
|
+
|
|
36
|
+
the owner must inspect and approve the public key fingerprint before a trusted
|
|
37
|
+
administrator-only installation at the two fixed Program Files paths
|
|
38
|
+
owner-anchor.json must have exactly these fields:
|
|
39
|
+
|
|
40
|
+
schema = deadbyte.r186-owner-anchor.v1
|
|
41
|
+
owner_key_id = lowercase SHA256 of Ed25519 SPKI DER public key
|
|
42
|
+
|
|
43
|
+
owner-public.pem contains only that public key
|
|
44
|
+
both files and their ancestor paths must pass Windows R89 ACL trust
|
|
45
|
+
|
|
46
|
+
AFTER A PROTECTED R186 RELEASE EXISTS
|
|
47
|
+
|
|
48
|
+
prepare an R70 owner subject for the exact installed release manifest
|
|
49
|
+
bind root_id, real project_root, the exact coding and autonomous policy SHA256
|
|
50
|
+
bind issued_at_utc and expires_at_utc to at most 1 hour
|
|
51
|
+
|
|
52
|
+
the owner signs that exact subject using the independent private key
|
|
53
|
+
the signed R70 approval is submitted as data, not as an owner key
|
|
54
|
+
R186 preflight may then report verified_readonly
|
|
55
|
+
|
|
56
|
+
STILL REQUIRED BEFORE ARMING OR PUBLISH
|
|
57
|
+
|
|
58
|
+
a separate protected one-time acceptance broker that consumes the owner approval
|
|
59
|
+
owner proof bound to native signed epoch and no-clobber race/crash recovery
|
|
60
|
+
agent-writable consent receipts must never act as grant issuance authority
|
|
61
|
+
controller Arm-Autonomous must invoke that protected broker on the current
|
|
62
|
+
verified runtime with no fallback to a writable source or caller-supplied key
|
|
63
|
+
the owner must explicitly approve this new authority issuance
|
|
64
|
+
run full protected regression again on exact new tarball
|
|
65
|
+
run real foreground live integration without revoking owner standing grants
|
|
66
|
+
publish only after independent release gate passes
|
|
67
|
+
activation is a separate user-approved step
|
|
68
|
+
|
|
69
|
+
NO PUBLISH AND NO GRANT HAVE OCCURRED IN R186
|
|
70
|
+
|
|
71
|
+
LIVE OWNER TRUST INVENTORY / 2026-10-28
|
|
72
|
+
|
|
73
|
+
old public key: C:\Users\DEADBYTE\.deadbyte-mcp\trust\r70-owner-public.pem
|
|
74
|
+
format: Ed25519 public only
|
|
75
|
+
SPKI DER SHA256: b07c6312673a190af6ac40fe86830dfe8c60e2747405f5151b9ae9bb9a71ad10
|
|
76
|
+
owner: local DEADBYTE account, writable to that account
|
|
77
|
+
R89 result: EPOCH_NATIVE_SLOT_UNTRUSTED
|
|
78
|
+
new protected C:\Program Files\DEADBYTE-OwnerTrust enrollment: NOT PRESENT
|
|
79
|
+
|
|
80
|
+
this fingerprint is an observation, not independent proof of owner enrollment
|
|
81
|
+
before any migration, the owner must compare it out of band with the key held
|
|
82
|
+
on their independent device and approve exact scope and expiry
|
|
83
|
+
|
|
84
|
+
R186 FOCUSED RESULT
|
|
85
|
+
29 pass / 0 fail / 0 skip for R70, R174 and R186
|
|
86
|
+
independent trust enrollment: NOT RUN
|
|
87
|
+
one-time protected grant issuance: NOT IMPLEMENTED
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.70",
|
|
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,59 @@
|
|
|
1
|
+
#requires -Version 5.1
|
|
2
|
+
#requires -RunAsAdministrator
|
|
3
|
+
[CmdletBinding()]
|
|
4
|
+
param(
|
|
5
|
+
[Parameter(Mandatory=$true)][string]$OwnerPublicKeyPath,
|
|
6
|
+
[Parameter(Mandatory=$true)][string]$NodePath
|
|
7
|
+
)
|
|
8
|
+
$ErrorActionPreference = 'Stop'
|
|
9
|
+
$target = 'C:\Program Files\DEADBYTE-OwnerTrust'
|
|
10
|
+
$packageRoot = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..'))
|
|
11
|
+
$programFiles = [System.IO.Path]::GetFullPath($env:ProgramFiles).TrimEnd('\') + '\'
|
|
12
|
+
if (-not ($packageRoot.TrimEnd('\') + '\').StartsWith($programFiles,[System.StringComparison]::OrdinalIgnoreCase)) {
|
|
13
|
+
throw 'R186 owner enrollment installer must run from a protected Program Files package'
|
|
14
|
+
}
|
|
15
|
+
if (-not (Test-Path -LiteralPath $NodePath -PathType Leaf)) { throw 'R186 Node executable missing' }
|
|
16
|
+
if (-not (Test-Path -LiteralPath $OwnerPublicKeyPath -PathType Leaf)) { throw 'R186 owner public key missing' }
|
|
17
|
+
if (Test-Path -LiteralPath $target) { throw 'R186 owner trust already exists; replacement requires a separate revocation workflow' }
|
|
18
|
+
$inspect = Join-Path $packageRoot 'scripts\r186-owner-anchor-inspect.mjs'
|
|
19
|
+
if (-not (Test-Path -LiteralPath $inspect -PathType Leaf)) { throw 'R186 protected anchor inspector missing' }
|
|
20
|
+
$json = @(& $NodePath $inspect ([System.IO.Path]::GetFullPath($OwnerPublicKeyPath))) -join [Environment]::NewLine
|
|
21
|
+
if ($LASTEXITCODE -ne 0) { throw 'R186 owner public key inspection failed' }
|
|
22
|
+
$material = $json | ConvertFrom-Json
|
|
23
|
+
if ([string]$material.anchor.schema -cne 'deadbyte.r186-owner-anchor.v1' -or
|
|
24
|
+
[string]$material.anchor.owner_key_id -cnotmatch '^[0-9a-f]{64}$' -or
|
|
25
|
+
[string]$material.public_key_pem -notmatch 'BEGIN PUBLIC KEY') { throw 'R186 owner anchor material invalid' }
|
|
26
|
+
Write-Host ''
|
|
27
|
+
Write-Host 'DEADBYTE OWNER KEY FINGERPRINT (SHA-256 SPKI):'
|
|
28
|
+
Write-Host ([string]$material.anchor.owner_key_id) -ForegroundColor Yellow
|
|
29
|
+
Write-Host 'Confirm this fingerprint using your independent owner-key display.'
|
|
30
|
+
$typed = Read-Host 'Type the complete 64-character fingerprint to enroll it'
|
|
31
|
+
if ([string]$typed -cne [string]$material.anchor.owner_key_id) { throw 'R186 owner fingerprint confirmation mismatch' }
|
|
32
|
+
|
|
33
|
+
$admins = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')
|
|
34
|
+
$system = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-18')
|
|
35
|
+
$users = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-545')
|
|
36
|
+
$inherit = [System.Security.AccessControl.InheritanceFlags]'ContainerInherit, ObjectInherit'
|
|
37
|
+
$none = [System.Security.AccessControl.PropagationFlags]::None
|
|
38
|
+
$allow = [System.Security.AccessControl.AccessControlType]::Allow
|
|
39
|
+
New-Item -ItemType Directory -Path $target -ErrorAction Stop | Out-Null
|
|
40
|
+
$dirAcl = New-Object System.Security.AccessControl.DirectorySecurity
|
|
41
|
+
$dirAcl.SetAccessRuleProtection($true,$false)
|
|
42
|
+
$dirAcl.SetOwner($admins)
|
|
43
|
+
$dirAcl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule($admins,'FullControl',$inherit,$none,$allow)))
|
|
44
|
+
$dirAcl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule($system,'FullControl',$inherit,$none,$allow)))
|
|
45
|
+
$dirAcl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule($users,'ReadAndExecute',$inherit,$none,$allow)))
|
|
46
|
+
Set-Acl -LiteralPath $target -AclObject $dirAcl
|
|
47
|
+
|
|
48
|
+
$utf8 = New-Object System.Text.UTF8Encoding($false)
|
|
49
|
+
$anchorPath = Join-Path $target 'owner-anchor.json'
|
|
50
|
+
$keyPath = Join-Path $target 'owner-public.pem'
|
|
51
|
+
$anchorText = $material.anchor | ConvertTo-Json -Compress
|
|
52
|
+
foreach ($entry in @(@($anchorPath,$anchorText),@($keyPath,[string]$material.public_key_pem))) {
|
|
53
|
+
$stream = [System.IO.File]::Open([string]$entry[0],[System.IO.FileMode]::CreateNew,[System.IO.FileAccess]::Write,[System.IO.FileShare]::None)
|
|
54
|
+
try {
|
|
55
|
+
$writer = New-Object System.IO.StreamWriter($stream,$utf8)
|
|
56
|
+
try { $writer.Write([string]$entry[1]); $writer.Flush(); $stream.Flush($true) } finally { $writer.Dispose() }
|
|
57
|
+
} finally { $stream.Dispose() }
|
|
58
|
+
}
|
|
59
|
+
Write-Host "R186_OWNER_TRUST_ENROLLED owner_key_id=$($material.anchor.owner_key_id)"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// R175 development-only verification runner. Executes fixed local tests, not production.
|
|
2
|
+
import {spawnSync} from 'node:child_process';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import {fileURLToPath} from 'node:url';
|
|
5
|
+
|
|
6
|
+
const repo=path.resolve(fileURLToPath(new URL('..',import.meta.url)));
|
|
7
|
+
const groups=Object.freeze({
|
|
8
|
+
boundary:['r175-foreground-boundary','r175-guardian-owner-boundary','r175-cli-flags',
|
|
9
|
+
'remote-live-log-recovery-r36','stabilization-guardian',
|
|
10
|
+
'r58-guardian-channel','r76-pinned-marker-cas'],
|
|
11
|
+
owner:['r174-owner-webauthn','r70-owner-approval','r70-autonomous-grant-expiry',
|
|
12
|
+
'r70-autonomous-policy-bootstrap','r70-controller-owner-issue-boundary'],
|
|
13
|
+
legacy:['r51-runtime-coherence','r72-remote-safe-contract'],
|
|
14
|
+
logs:['r176-pretty-live-log','r155-default-live-log','remote-live-log-r37','r155-commander-live-log','r67-live-log-secret-canary','r177-windows-absolute-live-path'],
|
|
15
|
+
foreground:['remote-session-cli']
|
|
16
|
+
});
|
|
17
|
+
const group=process.argv[2]??'boundary';
|
|
18
|
+
if(!Object.hasOwn(groups,group))throw Error('R175 test group invalid');
|
|
19
|
+
for(const p of ['src/deadbyte-cli.mjs','src/remote-session-guardian.mjs','src/r175-foreground-boundary.mjs']){
|
|
20
|
+
const c=spawnSync(process.execPath,['--check',p],{cwd:repo,encoding:'utf8',windowsHide:true,timeout:20000});
|
|
21
|
+
if(c.error||c.status!==0)throw Error('R175 syntax '+p+': '+String(c.stderr||c.error));
|
|
22
|
+
}
|
|
23
|
+
const tests=groups[group].map(x=>'test/'+x+'.test.mjs');
|
|
24
|
+
const r=spawnSync(process.execPath,['--test','--test-concurrency=1',...tests],{
|
|
25
|
+
cwd:repo,encoding:'utf8',windowsHide:true,timeout:180000,
|
|
26
|
+
maxBuffer:12*1024*1024
|
|
27
|
+
});
|
|
28
|
+
const log=(r.stdout??'')+(r.stderr??'');
|
|
29
|
+
const output=log.split(/\r?\n/);
|
|
30
|
+
for(const row of output.filter(x=>/^(ℹ (tests|pass|fail|skipped|duration_ms)|✔|✖)/.test(x)).slice(-40))
|
|
31
|
+
process.stdout.write(row+'\n');
|
|
32
|
+
process.stdout.write('R175_GROUP='+group+' EXIT='+String(r.status)+'\n');
|
|
33
|
+
if(r.error)process.stderr.write('R175_RUNNER_ERROR='+String(r.error)+'\n');
|
|
34
|
+
if(r.status!==0){
|
|
35
|
+
const errors=output.filter(x=>/Error:|AssertionError|Missing expected|expected|actual|✖|fail/gi.test(x));
|
|
36
|
+
for(const line of errors.slice(-25))process.stderr.write(line.slice(0,700)+'\n');
|
|
37
|
+
process.exitCode=1;
|
|
38
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// R176 presentation preview with fixed synthetic events. No runtime access.
|
|
2
|
+
import {createLiveTimelineTracker,defaultForegroundTimelineOptions} from '../src/remote-live-log.mjs';
|
|
3
|
+
const base=Date.parse('2026-10-27T12:25:56.000Z');let offset=0;
|
|
4
|
+
const tracker=createLiveTimelineTracker({clock:()=>base+offset,rootPaths:{projects:String.raw`D:\Projects`},...defaultForegroundTimelineOptions({verbose:false})});
|
|
5
|
+
let seq=0;
|
|
6
|
+
function send(e){const lines=tracker.observe(e,{sequence:++seq});for(const l of (Array.isArray(lines)?lines:[lines]))if(l)process.stdout.write(l+'\n');}
|
|
7
|
+
function call(requestId,tool,args,ms,status='ok',reason=null){
|
|
8
|
+
offset+=ms;send({event_type:'tool.request',tool,request_id:requestId,args});
|
|
9
|
+
offset+=ms;send({event_type:'tool.result',tool,request_id:requestId,
|
|
10
|
+
outcome:{status,is_error:status==='denied',duration_ms:ms, ...(reason?{reason}:{})}});
|
|
11
|
+
}
|
|
12
|
+
call('r176-write-preview','coding_file_write',{root_id:'projects',path:'deadbyte-mcp/development/deadbyte-mcp-0.15.69-r174-owner-consent/src/alpha.mjs',content:'example-only'},17);
|
|
13
|
+
for(let i=0;i<5;i++)call('poll-'+i,'machine_status',{},2);
|
|
14
|
+
call('r176-denied','host_file_read',{root_id:'core',path:'secret-file'},1,'denied','arm file missing');
|
|
15
|
+
offset+=1;send({event_type:'tool.request',tool:'coding_file_write',request_id:'r176-unknown',args:{root_id:'core',path:'output.bin'}});
|
|
16
|
+
offset+=1;send({event_type:'tool.result',tool:'coding_file_write',request_id:'r176-unknown',outcome:{status:'interrupted',side_effect_state:'unknown',reason:'result unavailable after dispatch'}});
|
|
17
|
+
for(const l of tracker.reconcileInterrupted())process.stdout.write(l+'\n');
|
|
18
|
+
process.stdout.write(tracker.summary()+'\n');
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
$ErrorActionPreference='Stop'
|
|
2
|
+
$state=Join-Path $HOME '.deadbyte-mcp'
|
|
3
|
+
$trust=Join-Path $state 'trust'
|
|
4
|
+
$pub=Join-Path $trust 'r70-owner-public.pem'
|
|
5
|
+
Write-Output ('R177_TRUST_DIR_EXISTS='+(Test-Path -LiteralPath $trust -PathType Container))
|
|
6
|
+
Write-Output ('R177_OWNER_PUBLIC_KEY_EXISTS='+(Test-Path -LiteralPath $pub -PathType Leaf))
|
|
7
|
+
if(Test-Path -LiteralPath $pub -PathType Leaf){
|
|
8
|
+
$entry=Get-Item -LiteralPath $pub
|
|
9
|
+
$acl=Get-Acl -LiteralPath $pub
|
|
10
|
+
Write-Output ('R177_PUBLIC_KEY_BYTES='+$entry.Length)
|
|
11
|
+
Write-Output ('R177_PUBLIC_KEY_SHA256='+(Get-FileHash -LiteralPath $pub -Algorithm SHA256).Hash.ToLowerInvariant())
|
|
12
|
+
Write-Output ('R177_PUBLIC_KEY_OWNER='+$acl.Owner)
|
|
13
|
+
Write-Output ('R177_PUBLIC_KEY_READONLY='+$entry.IsReadOnly)
|
|
14
|
+
}
|
|
15
|
+
$activePath=Join-Path $state 'active-release.json'
|
|
16
|
+
if(Test-Path $activePath){
|
|
17
|
+
$a=Get-Content -LiteralPath $activePath -Raw|ConvertFrom-Json
|
|
18
|
+
Write-Output ('R177_ACTIVE_VERSION='+$a.version)
|
|
19
|
+
Write-Output ('R177_ACTIVE_RELEASE='+$a.release_id)
|
|
20
|
+
$codingFile=Join-Path $a.generation_root 'coding-policy.json'
|
|
21
|
+
if(Test-Path $codingFile){
|
|
22
|
+
$policy=Get-Content -LiteralPath $codingFile -Raw|ConvertFrom-Json
|
|
23
|
+
foreach($root in $policy.roots.PSObject.Properties){
|
|
24
|
+
Write-Output ('R177_CODING_ROOT='+$root.Name+' exec='+[bool]$root.Value.exec+' write='+[bool]$root.Value.write)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
$evidence=Join-Path $state 'evidence'
|
|
29
|
+
if(Test-Path -LiteralPath $evidence){
|
|
30
|
+
Get-ChildItem -LiteralPath $evidence -Recurse -File -ErrorAction SilentlyContinue|
|
|
31
|
+
Where-Object { $_.Name -match 'owner|approval|enrollment' }|
|
|
32
|
+
Sort-Object LastWriteTimeUtc -Descending|
|
|
33
|
+
Select-Object -First 12 |
|
|
34
|
+
ForEach-Object{Write-Output ('R177_OWNER_EVIDENCE_NAME='+$_.Name+' size='+$_.Length+' utc='+$_.LastWriteTimeUtc.ToString('o'))}
|
|
35
|
+
}
|
|
36
|
+
Write-Output 'R177_READ_ONLY_COMPLETE=true'
|