deadbyte-mcp 0.8.9 → 0.9.0
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/CONTEXT.md +41 -0
- package/MANIFEST.SHA256 +348 -83
- package/R34-BASELINE.json +9 -0
- package/README.txt +135 -9
- package/bench/fixtures/corpus.json +17 -0
- package/bin/WORKER-REGISTRY.txt +3 -3
- package/bin/appcontainer-stage.exe +0 -0
- package/bin/appcontainer-stage.obj +0 -0
- package/bin/bootstrap-advapi32.exe +0 -0
- package/bin/bootstrap-advapi32.obj +0 -0
- package/bin/bootstrap-exitcode.exe +0 -0
- package/bin/bootstrap-exitcode.obj +0 -0
- package/bin/bootstrap-kernel32.exe +0 -0
- package/bin/bootstrap-kernel32.obj +0 -0
- package/bin/child-control-probe.exe +0 -0
- package/bin/child-control-probe.obj +0 -0
- package/bin/child-control-stage.exe +0 -0
- package/bin/child-control-stage.obj +0 -0
- package/bin/contained-reverse-worker.exe +0 -0
- package/bin/contained-reverse-worker.obj +0 -0
- package/bin/contained-transform-worker.exe +0 -0
- package/bin/contained-transform-worker.obj +0 -0
- package/bin/containment-probe.exe +0 -0
- package/bin/containment-probe.obj +0 -0
- package/bin/deadbyte-contain.exe +0 -0
- package/bin/deadbyte-contain.obj +0 -0
- package/bin/deadbyte-exec.exe +0 -0
- package/bin/deadbyte-exec.obj +0 -0
- package/bin/deadbyte-process-host.exe +0 -0
- package/bin/deadbyte-process-host.obj +0 -0
- package/bin/deadbyte-tunnel-host.exe +0 -0
- package/bin/deadbyte-tunnel-host.obj +0 -0
- package/controller/README.TXT +10 -4
- package/controller/deadbyte-controller.config.psd1.example +14 -0
- package/controller/deadbyte-controller.ps1 +144 -19
- package/controller/deadbyte-process-policy.json +5 -5
- package/controller/deadbyte-semantic-lsp-config.json +95 -0
- package/deadbyte-mcp-0.8.9.tgz +0 -0
- package/docs/ADR-0001-PRODUCTION-BASELINE-SEAMS.md +29 -0
- package/docs/ARCHITECTURE.md +6 -5
- package/docs/superpowers/plans/2026-09-16-deadbyte-loop-engine.md +846 -0
- package/docs/superpowers/plans/2026-09-17-r35-production-successor.md +408 -0
- package/docs/superpowers/specs/2026-09-16-deadbyte-loop-engine-design.md +435 -0
- package/docs/superpowers/specs/2026-09-17-r35-production-successor-design.md +220 -0
- package/node_modules/typescript/LICENSE.txt +55 -0
- package/node_modules/typescript/README.md +50 -0
- package/node_modules/typescript/SECURITY.md +41 -0
- package/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- package/node_modules/typescript/bin/tsc +2 -0
- package/node_modules/typescript/bin/tsserver +2 -0
- package/node_modules/typescript/lib/_tsc.js +133818 -0
- package/node_modules/typescript/lib/_tsserver.js +659 -0
- package/node_modules/typescript/lib/_typingsInstaller.js +222 -0
- package/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/lib.d.ts +22 -0
- package/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
- package/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
- package/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
- package/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
- package/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
- package/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
- package/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
- package/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
- package/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
- package/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
- package/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
- package/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
- package/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
- package/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
- package/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
- package/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
- package/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
- package/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
- package/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
- package/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
- package/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
- package/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
- package/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
- package/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
- package/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
- package/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
- package/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
- package/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
- package/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
- package/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
- package/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
- package/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
- package/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
- package/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
- package/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
- package/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
- package/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
- package/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
- package/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
- package/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
- package/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
- package/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
- package/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
- package/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
- package/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
- package/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
- package/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
- package/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
- package/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
- package/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
- package/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
- package/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
- package/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
- package/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
- package/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
- package/node_modules/typescript/lib/lib.es6.d.ts +23 -0
- package/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
- package/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
- package/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
- package/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
- package/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
- package/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
- package/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
- package/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
- package/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
- package/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
- package/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
- package/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
- package/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
- package/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
- package/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
- package/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
- package/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/tsc.js +8 -0
- package/node_modules/typescript/lib/tsserver.js +8 -0
- package/node_modules/typescript/lib/tsserverlibrary.d.ts +17 -0
- package/node_modules/typescript/lib/tsserverlibrary.js +21 -0
- package/node_modules/typescript/lib/typesMap.json +497 -0
- package/node_modules/typescript/lib/typescript.d.ts +11437 -0
- package/node_modules/typescript/lib/typescript.js +200276 -0
- package/node_modules/typescript/lib/typingsInstaller.js +8 -0
- package/node_modules/typescript/lib/watchGuard.js +53 -0
- package/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +2122 -0
- package/node_modules/typescript/package.json +120 -0
- package/package.json +5 -3
- package/proof/CONTAINMENT-BUILD.txt +6 -6
- package/proof/R34-TASK8-SUPERVISOR-CHECKPOINT.json +29 -0
- package/proof/R34-TASK9-MCP-SURFACE-CHECKPOINT.json +28 -0
- package/scripts/capability-benchmark.mjs +27 -0
- package/scripts/deferred-slot-operation.mjs +4 -2
- package/scripts/final-closure-verify.mjs +10 -10
- package/scripts/final-closure.mjs +11 -11
- package/scripts/gate-windows.ps1 +3 -3
- package/scripts/release-parity.mjs +14 -14
- package/scripts/semantic-preflight.ps1 +73 -0
- package/scripts/tool-surface-snapshot.mjs +73 -0
- package/scripts/windows-gate-evidence.mjs +5 -5
- package/src/audit-verify.mjs +6 -2
- package/src/autonomous-action-reconcile.mjs +142 -0
- package/src/autonomous-context-engine.mjs +255 -0
- package/src/autonomous-live-state.mjs +17 -0
- package/src/autonomous-local-supervisor.mjs +249 -0
- package/src/autonomous-loop-state.mjs +304 -0
- package/src/autonomous-output-contracts.mjs +22 -3
- package/src/autonomous-plan.mjs +181 -0
- package/src/autonomous-planner-contracts.mjs +44 -0
- package/src/autonomous-planner.mjs +91 -6
- package/src/autonomous-policy.mjs +15 -2
- package/src/autonomous-progress.mjs +127 -0
- package/src/autonomous-runtime.mjs +601 -48
- package/src/autonomous-supervisor-host.mjs +70 -0
- package/src/autonomous-supervisor.mjs +31 -8
- package/src/capability-benchmark-runner.mjs +108 -0
- package/src/capability-benchmark.mjs +50 -0
- package/src/coding-mcp-tools.mjs +46 -3
- package/src/coding-output-contracts.mjs +45 -0
- package/src/context-provenance.mjs +86 -0
- package/src/deadbyte-cli.mjs +136 -30
- package/src/document-adapter.mjs +43 -0
- package/src/lsp-stdio-client.mjs +112 -0
- package/src/machine-fs-smoke-client.mjs +2 -1
- package/src/mcp-server.mjs +17 -3
- package/src/observation-smoke-client.mjs +3 -2
- package/src/operator-surface.mjs +37 -0
- package/src/provider-circuit.mjs +125 -0
- package/src/release-generation.mjs +44 -5
- package/src/remote-mcp-autonomous-smoke-client.mjs +53 -14
- package/src/remote-mcp-coding-smoke-client.mjs +5 -4
- package/src/remote-mcp-r24-disarmed-smoke-client.mjs +4 -2
- package/src/remote-mcp-r33-parity-client.mjs +1 -1
- package/src/remote-mcp-r34-parity-client.mjs +177 -0
- package/src/remote-mcp-smoke-client.mjs +2 -1
- package/src/remote-result-journal.mjs +114 -0
- package/src/runtime-update.mjs +58 -8
- package/src/semantic-backend-registry.mjs +39 -0
- package/src/semantic-code.mjs +179 -0
- package/src/semantic-lsp-backend.mjs +183 -0
- package/src/semantic-lsp-config.mjs +112 -0
- package/src/tool-surface-ledger.mjs +92 -0
- package/src/version.mjs +1 -1
- package/test/audit-verify.test.mjs +1 -1
- package/test/autonomous-action-reconcile.test.mjs +106 -0
- package/test/autonomous-adversarial.test.mjs +149 -6
- package/test/autonomous-context-engine.test.mjs +181 -0
- package/test/autonomous-live-state.test.mjs +27 -0
- package/test/autonomous-local-supervisor.test.mjs +403 -0
- package/test/autonomous-loop-state.test.mjs +126 -0
- package/test/autonomous-loop-v2.test.mjs +105 -0
- package/test/autonomous-loop.test.mjs +79 -1
- package/test/autonomous-output-contract.test.mjs +54 -0
- package/test/autonomous-plan.test.mjs +101 -0
- package/test/autonomous-progress.test.mjs +106 -0
- package/test/autonomous-r34-e2e.test.mjs +338 -0
- package/test/autonomous-runtime.test.mjs +3 -3
- package/test/autonomous-supervisor-integration.test.mjs +48 -3
- package/test/capability-benchmark-runner.test.mjs +49 -0
- package/test/capability-benchmark.test.mjs +47 -0
- package/test/cli-entrypoint.test.mjs +12 -0
- package/test/coding-catalog-consistency.test.mjs +24 -0
- package/test/coding-plane.test.mjs +3 -3
- package/test/context-provenance.test.mjs +61 -0
- package/test/controller-r27.test.mjs +4 -3
- package/test/controller.test.mjs +52 -0
- package/test/core.test.mjs +1 -1
- package/test/deferred-slot-operation-behavior.test.mjs +5 -1
- package/test/deferred-slot-operation.test.mjs +2 -1
- package/test/document-adapter.test.mjs +23 -0
- package/test/fixtures/lsp-framed-server.mjs +33 -0
- package/test/fixtures/semantic/cpp/compile_commands.json +4 -0
- package/test/fixtures/semantic/cpp/lib.cpp +2 -0
- package/test/fixtures/semantic/cpp/lib.hpp +2 -0
- package/test/fixtures/semantic/cpp/main.cpp +2 -0
- package/test/fixtures/semantic/python/lib.py +2 -0
- package/test/fixtures/semantic/python/main.py +2 -0
- package/test/fixtures/semantic/rust/Cargo.lock +7 -0
- package/test/fixtures/semantic/rust/Cargo.toml +8 -0
- package/test/fixtures/semantic/rust/src/lib.rs +3 -0
- package/test/fixtures/semantic/rust/src/main.rs +5 -0
- package/test/fixtures/semantic/rust/src/math.rs +3 -0
- package/test/fixtures/semantic/rust/target/.rustc_info.json +1 -0
- package/test/fixtures/semantic/rust/target/CACHEDIR.TAG +3 -0
- package/test/fixtures/semantic/rust/target/debug/.cargo-lock +0 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-4c168fa33c79d09c/dep-test-lib-semantic_rust +0 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-4c168fa33c79d09c/invoked.timestamp +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-4c168fa33c79d09c/test-lib-semantic_rust +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-4c168fa33c79d09c/test-lib-semantic_rust.json +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-5dcd474439c54a26/dep-test-bin-semantic_rust_bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-5dcd474439c54a26/invoked.timestamp +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-5dcd474439c54a26/test-bin-semantic_rust_bin +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-5dcd474439c54a26/test-bin-semantic_rust_bin.json +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-6212ccd976aa3808/dep-lib-semantic_rust +0 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-6212ccd976aa3808/invoked.timestamp +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-6212ccd976aa3808/lib-semantic_rust +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-6212ccd976aa3808/lib-semantic_rust.json +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-d741378dccdef61c/bin-semantic_rust_bin +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-d741378dccdef61c/bin-semantic_rust_bin.json +1 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-d741378dccdef61c/dep-bin-semantic_rust_bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-d741378dccdef61c/invoked.timestamp +1 -0
- package/test/fixtures/semantic/rust/target/debug/deps/libsemantic_rust-4c168fa33c79d09c.rmeta +0 -0
- package/test/fixtures/semantic/rust/target/debug/deps/libsemantic_rust-6212ccd976aa3808.rmeta +0 -0
- package/test/fixtures/semantic/rust/target/debug/deps/libsemantic_rust_bin-5dcd474439c54a26.rmeta +0 -0
- package/test/fixtures/semantic/rust/target/debug/deps/libsemantic_rust_bin-d741378dccdef61c.rmeta +0 -0
- package/test/fixtures/semantic/rust/target/debug/deps/semantic_rust-4c168fa33c79d09c.d +5 -0
- package/test/fixtures/semantic/rust/target/debug/deps/semantic_rust-6212ccd976aa3808.d +5 -0
- package/test/fixtures/semantic/rust/target/debug/deps/semantic_rust_bin-5dcd474439c54a26.d +6 -0
- package/test/fixtures/semantic/rust/target/debug/deps/semantic_rust_bin-d741378dccdef61c.d +6 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-1nzlugxi6lq16/s-hmdgo8b6hg-1n6glhc-1qb77z00k06rqw4jdkj92spax/dep-graph.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-1nzlugxi6lq16/s-hmdgo8b6hg-1n6glhc-1qb77z00k06rqw4jdkj92spax/query-cache.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-1nzlugxi6lq16/s-hmdgo8b6hg-1n6glhc-1qb77z00k06rqw4jdkj92spax/work-products.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-1nzlugxi6lq16/s-hmdgo8b6hg-1n6glhc.lock +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq-9twkpivsqnjon278x20bddozq/dep-graph.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq-9twkpivsqnjon278x20bddozq/metadata.rmeta +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq-9twkpivsqnjon278x20bddozq/query-cache.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq-9twkpivsqnjon278x20bddozq/work-products.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq.lock +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-1jxcbdeehal7q/s-hmdgo8bxlf-1qr24o3-cmu3jai030no72y8u9eurrnjj/dep-graph.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-1jxcbdeehal7q/s-hmdgo8bxlf-1qr24o3-cmu3jai030no72y8u9eurrnjj/query-cache.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-1jxcbdeehal7q/s-hmdgo8bxlf-1qr24o3-cmu3jai030no72y8u9eurrnjj/work-products.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-1jxcbdeehal7q/s-hmdgo8bxlf-1qr24o3.lock +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-2ocx55p60ni6b/s-hmdgo8bxj8-0ir41qt-diy9mqvc2eoiblmhjs3stcgi3/dep-graph.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-2ocx55p60ni6b/s-hmdgo8bxj8-0ir41qt-diy9mqvc2eoiblmhjs3stcgi3/query-cache.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-2ocx55p60ni6b/s-hmdgo8bxj8-0ir41qt-diy9mqvc2eoiblmhjs3stcgi3/work-products.bin +0 -0
- package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-2ocx55p60ni6b/s-hmdgo8bxj8-0ir41qt.lock +0 -0
- package/test/fixtures/semantic/rust/target/flycheck0/stderr +1 -0
- package/test/fixtures/semantic/rust/target/flycheck0/stdout +5 -0
- package/test/fixtures/semantic/typescript/lib.ts +3 -0
- package/test/fixtures/semantic/typescript/main.ts +2 -0
- package/test/fixtures/tool-surface-stdio-server.mjs +14 -0
- package/test/helpers/autonomous-r34-fixture.mjs +120 -0
- package/test/lsp-stdio-client.test.mjs +72 -0
- package/test/multi-file-read.test.mjs +41 -0
- package/test/observation-integration.test.mjs +3 -3
- package/test/production-docs.test.mjs +48 -0
- package/test/prompts-resources.test.mjs +35 -0
- package/test/provider-circuit.test.mjs +93 -0
- package/test/public-autonomous-ingress-budget.test.mjs +28 -0
- package/test/r33-closeout-regression.test.mjs +3 -3
- package/test/r33-finalization.test.mjs +19 -16
- package/test/release-generation.test.mjs +23 -2
- package/test/release-version.test.mjs +24 -17
- package/test/remote-r24-catalog.test.mjs +5 -4
- package/test/remote-result-journal.test.mjs +58 -0
- package/test/remote-session-cli.test.mjs +150 -15
- package/test/runtime-self-update.test.mjs +63 -0
- package/test/semantic-backend-registry.test.mjs +29 -0
- package/test/semantic-code.test.mjs +66 -0
- package/test/semantic-lsp-backend.test.mjs +99 -0
- package/test/semantic-lsp-config.test.mjs +81 -0
- package/test/semantic-lsp-readiness.test.mjs +34 -0
- package/test/semantic-lsp-transient-empty.test.mjs +32 -0
- package/test/semantic-lsp-transient-null.test.mjs +31 -0
- package/test/semantic-multilang.test.mjs +72 -0
- package/test/semantic-runtime-routing.test.mjs +32 -0
- package/test/semantic-server-config-integration.test.mjs +66 -0
- package/test/tool-surface-ledger.test.mjs +59 -0
- package/test/tool-surface-snapshot.test.mjs +17 -0
- package/test/tracer-bullet.test.mjs +77 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "typescript",
|
|
3
|
+
"author": "Microsoft Corp.",
|
|
4
|
+
"homepage": "https://www.typescriptlang.org/",
|
|
5
|
+
"version": "5.9.3",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"description": "TypeScript is a language for application scale JavaScript development",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"TypeScript",
|
|
10
|
+
"Microsoft",
|
|
11
|
+
"compiler",
|
|
12
|
+
"language",
|
|
13
|
+
"javascript"
|
|
14
|
+
],
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/microsoft/TypeScript/issues"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "https://github.com/microsoft/TypeScript.git"
|
|
21
|
+
},
|
|
22
|
+
"main": "./lib/typescript.js",
|
|
23
|
+
"typings": "./lib/typescript.d.ts",
|
|
24
|
+
"bin": {
|
|
25
|
+
"tsc": "./bin/tsc",
|
|
26
|
+
"tsserver": "./bin/tsserver"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=14.17"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"bin",
|
|
33
|
+
"lib",
|
|
34
|
+
"!lib/enu",
|
|
35
|
+
"LICENSE.txt",
|
|
36
|
+
"README.md",
|
|
37
|
+
"SECURITY.md",
|
|
38
|
+
"ThirdPartyNoticeText.txt",
|
|
39
|
+
"!**/.gitattributes"
|
|
40
|
+
],
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@dprint/formatter": "^0.4.1",
|
|
43
|
+
"@dprint/typescript": "0.93.4",
|
|
44
|
+
"@esfx/canceltoken": "^1.0.0",
|
|
45
|
+
"@eslint/js": "^9.20.0",
|
|
46
|
+
"@octokit/rest": "^21.1.1",
|
|
47
|
+
"@types/chai": "^4.3.20",
|
|
48
|
+
"@types/diff": "^7.0.1",
|
|
49
|
+
"@types/minimist": "^1.2.5",
|
|
50
|
+
"@types/mocha": "^10.0.10",
|
|
51
|
+
"@types/ms": "^0.7.34",
|
|
52
|
+
"@types/node": "latest",
|
|
53
|
+
"@types/source-map-support": "^0.5.10",
|
|
54
|
+
"@types/which": "^3.0.4",
|
|
55
|
+
"@typescript-eslint/rule-tester": "^8.24.1",
|
|
56
|
+
"@typescript-eslint/type-utils": "^8.24.1",
|
|
57
|
+
"@typescript-eslint/utils": "^8.24.1",
|
|
58
|
+
"azure-devops-node-api": "^14.1.0",
|
|
59
|
+
"c8": "^10.1.3",
|
|
60
|
+
"chai": "^4.5.0",
|
|
61
|
+
"chokidar": "^4.0.3",
|
|
62
|
+
"diff": "^7.0.0",
|
|
63
|
+
"dprint": "^0.49.0",
|
|
64
|
+
"esbuild": "^0.25.0",
|
|
65
|
+
"eslint": "^9.20.1",
|
|
66
|
+
"eslint-formatter-autolinkable-stylish": "^1.4.0",
|
|
67
|
+
"eslint-plugin-regexp": "^2.7.0",
|
|
68
|
+
"fast-xml-parser": "^4.5.2",
|
|
69
|
+
"glob": "^10.4.5",
|
|
70
|
+
"globals": "^15.15.0",
|
|
71
|
+
"hereby": "^1.10.0",
|
|
72
|
+
"jsonc-parser": "^3.3.1",
|
|
73
|
+
"knip": "^5.44.4",
|
|
74
|
+
"minimist": "^1.2.8",
|
|
75
|
+
"mocha": "^10.8.2",
|
|
76
|
+
"mocha-fivemat-progress-reporter": "^0.1.0",
|
|
77
|
+
"monocart-coverage-reports": "^2.12.1",
|
|
78
|
+
"ms": "^2.1.3",
|
|
79
|
+
"picocolors": "^1.1.1",
|
|
80
|
+
"playwright": "^1.50.1",
|
|
81
|
+
"source-map-support": "^0.5.21",
|
|
82
|
+
"tslib": "^2.8.1",
|
|
83
|
+
"typescript": "^5.7.3",
|
|
84
|
+
"typescript-eslint": "^8.24.1",
|
|
85
|
+
"which": "^3.0.1"
|
|
86
|
+
},
|
|
87
|
+
"overrides": {
|
|
88
|
+
"typescript@*": "$typescript"
|
|
89
|
+
},
|
|
90
|
+
"scripts": {
|
|
91
|
+
"test": "hereby runtests-parallel --light=false",
|
|
92
|
+
"test:eslint-rules": "hereby run-eslint-rules-tests",
|
|
93
|
+
"build": "npm run build:compiler && npm run build:tests",
|
|
94
|
+
"build:compiler": "hereby local",
|
|
95
|
+
"build:tests": "hereby tests",
|
|
96
|
+
"build:tests:notypecheck": "hereby tests --no-typecheck",
|
|
97
|
+
"clean": "hereby clean",
|
|
98
|
+
"gulp": "hereby",
|
|
99
|
+
"lint": "hereby lint",
|
|
100
|
+
"knip": "hereby knip",
|
|
101
|
+
"format": "dprint fmt",
|
|
102
|
+
"setup-hooks": "node scripts/link-hooks.mjs"
|
|
103
|
+
},
|
|
104
|
+
"browser": {
|
|
105
|
+
"fs": false,
|
|
106
|
+
"os": false,
|
|
107
|
+
"path": false,
|
|
108
|
+
"crypto": false,
|
|
109
|
+
"buffer": false,
|
|
110
|
+
"source-map-support": false,
|
|
111
|
+
"inspector": false,
|
|
112
|
+
"perf_hooks": false
|
|
113
|
+
},
|
|
114
|
+
"packageManager": "npm@8.19.4",
|
|
115
|
+
"volta": {
|
|
116
|
+
"node": "20.1.0",
|
|
117
|
+
"npm": "8.19.4"
|
|
118
|
+
},
|
|
119
|
+
"gitHead": "c63de15a992d37f0d6cec03ac7631872838602cb"
|
|
120
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Authenticated MCP machine-truth runtime with signed audit chain, immutable release slots, contained execution, coding/autonomous production authority, and npx-first remote control.",
|
|
@@ -52,12 +52,14 @@
|
|
|
52
52
|
"bundleDependencies": [
|
|
53
53
|
"@modelcontextprotocol/server",
|
|
54
54
|
"@modelcontextprotocol/client",
|
|
55
|
+
"typescript",
|
|
55
56
|
"zod"
|
|
56
57
|
],
|
|
57
58
|
"dependencies": {
|
|
59
|
+
"@modelcontextprotocol/client": "2.0.0",
|
|
58
60
|
"@modelcontextprotocol/server": "2.0.0",
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
+
"typescript": "5.9.3",
|
|
62
|
+
"zod": "4.4.3"
|
|
61
63
|
},
|
|
62
64
|
"bin": {
|
|
63
65
|
"deadbyte-mcp": "src/deadbyte-cli.mjs"
|
|
@@ -39,7 +39,7 @@ deadbyte-process-host.cpp
|
|
|
39
39
|
exit_code=0
|
|
40
40
|
==== probe-dependencies ====
|
|
41
41
|
|
|
42
|
-
Dump of file
|
|
42
|
+
Dump of file D:\Projects\deadbyte-mcp-r35-release-v0.9.0-r2\bin\containment-probe.exe
|
|
43
43
|
|
|
44
44
|
File Type: EXECUTABLE IMAGE
|
|
45
45
|
|
|
@@ -59,7 +59,7 @@ File Type: EXECUTABLE IMAGE
|
|
|
59
59
|
exit_code=0
|
|
60
60
|
==== contained-launcher-dependencies ====
|
|
61
61
|
|
|
62
|
-
Dump of file
|
|
62
|
+
Dump of file D:\Projects\deadbyte-mcp-r35-release-v0.9.0-r2\bin\deadbyte-exec.exe
|
|
63
63
|
|
|
64
64
|
File Type: EXECUTABLE IMAGE
|
|
65
65
|
|
|
@@ -83,7 +83,7 @@ File Type: EXECUTABLE IMAGE
|
|
|
83
83
|
exit_code=0
|
|
84
84
|
==== contained-worker-dependencies ====
|
|
85
85
|
|
|
86
|
-
Dump of file
|
|
86
|
+
Dump of file D:\Projects\deadbyte-mcp-r35-release-v0.9.0-r2\bin\contained-transform-worker.exe
|
|
87
87
|
|
|
88
88
|
File Type: EXECUTABLE IMAGE
|
|
89
89
|
|
|
@@ -104,7 +104,7 @@ File Type: EXECUTABLE IMAGE
|
|
|
104
104
|
exit_code=0
|
|
105
105
|
==== contained-reverse-worker-dependencies ====
|
|
106
106
|
|
|
107
|
-
Dump of file
|
|
107
|
+
Dump of file D:\Projects\deadbyte-mcp-r35-release-v0.9.0-r2\bin\contained-reverse-worker.exe
|
|
108
108
|
|
|
109
109
|
File Type: EXECUTABLE IMAGE
|
|
110
110
|
|
|
@@ -125,7 +125,7 @@ File Type: EXECUTABLE IMAGE
|
|
|
125
125
|
exit_code=0
|
|
126
126
|
==== named-tunnel-host-dependencies ====
|
|
127
127
|
|
|
128
|
-
Dump of file
|
|
128
|
+
Dump of file D:\Projects\deadbyte-mcp-r35-release-v0.9.0-r2\bin\deadbyte-tunnel-host.exe
|
|
129
129
|
|
|
130
130
|
File Type: EXECUTABLE IMAGE
|
|
131
131
|
|
|
@@ -144,7 +144,7 @@ File Type: EXECUTABLE IMAGE
|
|
|
144
144
|
exit_code=0
|
|
145
145
|
==== process-host-dependencies ====
|
|
146
146
|
|
|
147
|
-
Dump of file
|
|
147
|
+
Dump of file D:\Projects\deadbyte-mcp-r35-release-v0.9.0-r2\bin\deadbyte-process-host.exe
|
|
148
148
|
|
|
149
149
|
File Type: EXECUTABLE IMAGE
|
|
150
150
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "deadbyte.r34.task8-checkpoint.v1",
|
|
3
|
+
"task": 8,
|
|
4
|
+
"status": "passed",
|
|
5
|
+
"workspace": "D:\\Projects\\deadbyte-mcp-r34-loop-engine",
|
|
6
|
+
"node_executable_sha256": "9a4eb5f1c29c6a2e93852ead46b999e284a6a5ca8bab4d4e241d587d025a52de",
|
|
7
|
+
"sources": {
|
|
8
|
+
"src/autonomous-local-supervisor.mjs": "ab0158c3f6e270ee367ae96455dd2b75a902c808b2a10ac2c5b75fdda00be6c3",
|
|
9
|
+
"src/autonomous-supervisor.mjs": "8ea06b5941de9b346ab4e97ff6ed236964b864fbe725602baee3a54dd74527c0",
|
|
10
|
+
"src/autonomous-supervisor-host.mjs": "335022086ef41e6cc9853468d928acc864deab8009383dc22518a6ec7e749fa1",
|
|
11
|
+
"src/deadbyte-cli.mjs": "0b0d41a51559502a6ff377a4f74e6f80ea77d37002a700e04bd7c4dd3f226b42",
|
|
12
|
+
"controller/deadbyte-controller.ps1": "279dfe20345193ca229cc442b25796f12d4c8ec9f9d3e2d26a607a7342b96a5a",
|
|
13
|
+
"controller/deadbyte-controller.config.psd1.example": "f20a5bf0df576dbdd32af657640b26c5c50c39dce0b465b7488c218917c729f7"
|
|
14
|
+
},
|
|
15
|
+
"regression": {
|
|
16
|
+
"tests": 40,
|
|
17
|
+
"passed": 40,
|
|
18
|
+
"failed": 0,
|
|
19
|
+
"receipt_id": "473fb1f0f7e6a2dec1ea9d80",
|
|
20
|
+
"receipt_sha256": "255e3679051eff46ae745b16f07d6a3c40f87e42259ac651ef286c9d876ceae2",
|
|
21
|
+
"receipt_signature_valid": true,
|
|
22
|
+
"marker": "TASK8_REGRESSION=PASS"
|
|
23
|
+
},
|
|
24
|
+
"authority_contract": {
|
|
25
|
+
"self_arm": false,
|
|
26
|
+
"recovery_operations": ["resume","disarmautonomous","disarmcoding","disarmprocess","disarmhost","status"],
|
|
27
|
+
"final_required": "ONLINE + process/coding/autonomous/host DISARMED"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "deadbyte.r34-task9-checkpoint.v1",
|
|
3
|
+
"status": "passed",
|
|
4
|
+
"workspace": "D:\\Projects\\deadbyte-mcp-r34-loop-engine",
|
|
5
|
+
"public_tool_count": 68,
|
|
6
|
+
"public_tool_unique_count": 68,
|
|
7
|
+
"public_tool_catalog_sha256": "bb7c08e116178e3da4b577b591f7058eb6caf7632358e765d28ccb20b2e36f45",
|
|
8
|
+
"mcp_server_sha256": "5a6cd82c332e4cef30c4ccfeb12f8cb3634cb6c92104931768b42ba6a84b62b3",
|
|
9
|
+
"controller_sha256": "cf8ab26a7481801da07c5c0a842df4ce1279854ed67781f967e5412da5c2aa3d",
|
|
10
|
+
"supervisor_integration_test_sha256": "127e170995460daabab88860f20f1b4c2416839e018df0e1cda23b58d032beab",
|
|
11
|
+
"exact_surface_gate": {
|
|
12
|
+
"tests": 19,
|
|
13
|
+
"pass": 19,
|
|
14
|
+
"fail": 0,
|
|
15
|
+
"receipt_id": "dc0b7e9c6c9e340c037bc54a",
|
|
16
|
+
"receipt_sha256": "f6b8ac9b6d499d51f60c7f8053a2e591e09654cdfe5bf69c449b15d133e48506"
|
|
17
|
+
},
|
|
18
|
+
"catalog_observation": {
|
|
19
|
+
"receipt_id": "7dd6df7d9b575e786101d1d0",
|
|
20
|
+
"receipt_sha256": "226e0861c01cb485ef94b91c1562a3cb70123698b9a52bb62ba883940be940cf"
|
|
21
|
+
},
|
|
22
|
+
"supervision": {
|
|
23
|
+
"in_process_compatibility": true,
|
|
24
|
+
"external_owner_mode": true,
|
|
25
|
+
"bridge_external_mode_does_not_execute_goal": true,
|
|
26
|
+
"standalone_host_advances_durable_goal": true
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { runCapabilityBenchmark } from '../src/capability-benchmark-runner.mjs';
|
|
4
|
+
|
|
5
|
+
function argValue(name){
|
|
6
|
+
const prefix=`${name}=`;
|
|
7
|
+
const hit=process.argv.slice(2).find(value=>value.startsWith(prefix));
|
|
8
|
+
return hit?hit.slice(prefix.length):null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const out=argValue('--out');
|
|
12
|
+
const timeoutRaw=argValue('--timeout-ms');
|
|
13
|
+
const timeoutMs=timeoutRaw===null?180000:Number(timeoutRaw);
|
|
14
|
+
if(!Number.isInteger(timeoutMs)||timeoutMs<1000||timeoutMs>600000) throw new Error('capability benchmark timeout invalid');
|
|
15
|
+
const env={
|
|
16
|
+
DEADBYTE_R35_SEMANTIC_CONFIG:process.env.DEADBYTE_R35_SEMANTIC_CONFIG??'',
|
|
17
|
+
DEADBYTE_R35_SEMANTIC_CONFIG_SHA256:process.env.DEADBYTE_R35_SEMANTIC_CONFIG_SHA256??''
|
|
18
|
+
};
|
|
19
|
+
const result=await runCapabilityBenchmark({rootUrl:new URL('../',import.meta.url),env,timeoutMs});
|
|
20
|
+
const text=`${JSON.stringify(result,null,2)}\n`;
|
|
21
|
+
if(out){
|
|
22
|
+
const target=path.resolve(out);
|
|
23
|
+
await mkdir(path.dirname(target),{recursive:true});
|
|
24
|
+
await writeFile(target,text,{encoding:'utf8'});
|
|
25
|
+
}
|
|
26
|
+
process.stdout.write(text);
|
|
27
|
+
if(!result.overall_correct) process.exitCode=1;
|
|
@@ -22,9 +22,10 @@ const atomicJson=async(file,value)=>{
|
|
|
22
22
|
};
|
|
23
23
|
function activationArgs(manifestSha){
|
|
24
24
|
if(!HEX64.test(manifestSha??'')) throw new Error('activate requires one lowercase manifest SHA-256');
|
|
25
|
-
return ['--stage',packageRoot,'--development-root',packageRoot,'--expected-version','0.
|
|
25
|
+
return ['--stage',packageRoot,'--development-root',packageRoot,'--expected-version','0.9.0',
|
|
26
26
|
'--expected-manifest',manifestSha,'--process-policy',path.join(packageRoot,'controller','deadbyte-process-policy.json'),
|
|
27
|
-
'--process-policy-sha256',null,'--
|
|
27
|
+
'--process-policy-sha256',null,'--semantic-lsp-config',path.join(packageRoot,'controller','deadbyte-semantic-lsp-config.json'),
|
|
28
|
+
'--semantic-lsp-config-sha256',null,'--enable-machine-fs','--enable-observation','--enable-autonomous-supervisor'];
|
|
28
29
|
}
|
|
29
30
|
async function rollbackArgs(receiptPath){
|
|
30
31
|
const resolved=await realpath(path.resolve(receiptPath));
|
|
@@ -45,6 +46,7 @@ async function normalizedArgs(mode,value){
|
|
|
45
46
|
if(mode==='activate'){
|
|
46
47
|
const args=activationArgs(value);
|
|
47
48
|
args[args.indexOf('--process-policy-sha256')+1]=sha256(await readFile(path.join(packageRoot,'controller','deadbyte-process-policy.json')));
|
|
49
|
+
args[args.indexOf('--semantic-lsp-config-sha256')+1]=sha256(await readFile(path.join(packageRoot,'controller','deadbyte-semantic-lsp-config.json')));
|
|
48
50
|
return args;
|
|
49
51
|
}
|
|
50
52
|
if(mode==='rollback') return rollbackArgs(value);
|
|
@@ -6,7 +6,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
6
6
|
|
|
7
7
|
const HEX64=/^[0-9a-f]{64}$/;
|
|
8
8
|
const UPDATE_DOMAIN=Buffer.from('DEADBYTE-R27-SLOT-UPDATE-V1\0','utf8');
|
|
9
|
-
const CLOSURE_DOMAIN=Buffer.from('DEADBYTE-
|
|
9
|
+
const CLOSURE_DOMAIN=Buffer.from('DEADBYTE-R35-FINAL-CLOSURE-V1\0','utf8');
|
|
10
10
|
const PING_DOMAIN=Buffer.from('DEADBYTE-MACHINE-PING-V1\0','utf8');
|
|
11
11
|
const sha256=bytes=>createHash('sha256').update(bytes).digest('hex');
|
|
12
12
|
const canonical=value=>Array.isArray(value)?value.map(canonical):value&&typeof value==='object'
|
|
@@ -83,21 +83,21 @@ function verifyPing(ping,status,pointer){
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
export async function verifyFinalClosureObject(envelope,{stateRoot=path.join(os.homedir(),'.deadbyte-mcp')}={}){
|
|
86
|
-
insist(envelope?.body?.schema==='deadbyte.
|
|
87
|
-
insist(envelope.body.version==='0.
|
|
88
|
-
insist(envelope.body.release_label==='
|
|
86
|
+
insist(envelope?.body?.schema==='deadbyte.r35-final-closure.v1','closure schema mismatch');
|
|
87
|
+
insist(envelope.body.version==='0.9.0','closure version mismatch');
|
|
88
|
+
insist(envelope.body.release_label==='R35 FINAL MACHINE BASELINE','closure release label mismatch');
|
|
89
89
|
const keyInfo=publicKeyInfo(await readFile(path.join(stateRoot,'trust','ed25519-public.pem')));
|
|
90
90
|
const bodyBytes=Buffer.from(canonicalJson(envelope.body),'utf8');
|
|
91
91
|
insist(sha256(bodyBytes)===envelope.body_sha256,'closure body hash mismatch');
|
|
92
92
|
const {closure_sha256,...unsigned}=envelope;
|
|
93
93
|
insist(sha256(Buffer.from(canonicalJson(unsigned),'utf8'))===closure_sha256,'closure envelope hash mismatch');
|
|
94
|
-
insist(envelope.attestation?.algorithm==='ed25519'&&envelope.attestation?.domain==='DEADBYTE-
|
|
94
|
+
insist(envelope.attestation?.algorithm==='ed25519'&&envelope.attestation?.domain==='DEADBYTE-R35-FINAL-CLOSURE-V1','closure attestation contract mismatch');
|
|
95
95
|
insist(envelope.attestation.key_id===keyInfo.key_id,'closure signer mismatch');
|
|
96
96
|
insist(cryptoVerify(null,Buffer.concat([CLOSURE_DOMAIN,bodyBytes]),keyInfo.key,Buffer.from(envelope.attestation.signature_base64,'base64')),'closure signature invalid');
|
|
97
97
|
|
|
98
98
|
const pointer=JSON.parse(await readFile(path.join(stateRoot,'active-release.json'),'utf8'));
|
|
99
99
|
insist(same(pointer,envelope.body.active_pointer),'active pointer drift');
|
|
100
|
-
insist(pointer.version==='0.
|
|
100
|
+
insist(pointer.version==='0.9.0','active pointer version mismatch');
|
|
101
101
|
insist(pointer.release_id===`v${pointer.version}-${pointer.manifest_sha256.slice(0,16)}`,'release id/content address mismatch');
|
|
102
102
|
const releaseFiles=await verifyTree(pointer.release_root,'MANIFEST.SHA256',pointer.manifest_sha256);
|
|
103
103
|
const generationFiles=await verifyTree(pointer.generation_root,'GENERATION.SHA256',pointer.generation_manifest_sha256);
|
|
@@ -109,10 +109,10 @@ export async function verifyFinalClosureObject(envelope,{stateRoot=path.join(os.
|
|
|
109
109
|
insist(sha256(await readFile(item.path))===item.sha256,`${name} evidence hash mismatch`);
|
|
110
110
|
}
|
|
111
111
|
const parity=JSON.parse(await readFile(evidence.parity.path,'utf8'));
|
|
112
|
-
insist(parity.schema==='deadbyte.
|
|
112
|
+
insist(parity.schema==='deadbyte.r35-parity.v1'&&parity.status==='passed','parity evidence invalid');
|
|
113
113
|
insist(parity.release_id===pointer.release_id&&parity.manifest_sha256===pointer.manifest_sha256,'parity release binding mismatch');
|
|
114
114
|
insist(parity.rdc_operation_count===0&&parity.execution_provider==='deadbyte_mcp','parity execution provider mismatch');
|
|
115
|
-
insist(parity.successor_disarmed?.tool_count===
|
|
115
|
+
insist(parity.successor_disarmed?.tool_count===73&&parity.successor_disarmed?.coding_armed===false&&parity.successor_disarmed?.autonomous_armed===false,'final public disarmed gate invalid');
|
|
116
116
|
for(const key of ['tree_read','precondition_mutation','search','owned_process','observation','coding_loop','autonomy','interrupted_recovery','evidence_verification']) insist(parity.requirements?.[key]===true,`parity requirement missing ${key}`);
|
|
117
117
|
|
|
118
118
|
const activation=JSON.parse(await readFile(evidence.activation.path,'utf8'));
|
|
@@ -127,9 +127,9 @@ export async function verifyFinalClosureObject(envelope,{stateRoot=path.join(os.
|
|
|
127
127
|
insist(restore.body.active_pointer?.manifest_sha256===pointer.manifest_sha256&&same(restore.body.active_pointer,pointer),'restore/current pointer mismatch');
|
|
128
128
|
insist(rollback.body.activation_receipt_sha256===activation.receipt_sha256,'rollback not bound to activation');
|
|
129
129
|
const windowsGate=JSON.parse(await readFile(evidence.windows_gate.path,'utf8'));
|
|
130
|
-
insist(windowsGate.schema==='deadbyte.
|
|
130
|
+
insist(windowsGate.schema==='deadbyte.r35-windows-gate.v1'&&windowsGate.status==='passed'&&windowsGate.exit_code===0,'Windows gate evidence invalid');
|
|
131
131
|
insist(windowsGate.manifest_sha256===pointer.manifest_sha256,'Windows gate manifest binding mismatch');
|
|
132
|
-
insist(windowsGate.marker==='DEADBYTE V0.
|
|
132
|
+
insist(windowsGate.marker==='DEADBYTE V0.9.0 / R35 WINDOWS BATCH GATE: PASS','Windows gate PASS marker mismatch');
|
|
133
133
|
|
|
134
134
|
const machine=envelope.body.machine;
|
|
135
135
|
insist(machine?.status?.release_id===pointer.release_id&&machine.status.generation_manifest_sha256===pointer.generation_manifest_sha256,'machine status binding mismatch');
|
|
@@ -4,9 +4,9 @@ import os from 'node:os';
|
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
|
|
7
|
-
import {
|
|
7
|
+
import { R34_EXPECTED_TOOLS } from '../src/remote-mcp-r34-parity-client.mjs';
|
|
8
8
|
|
|
9
|
-
const DOMAIN=Buffer.from('DEADBYTE-
|
|
9
|
+
const DOMAIN=Buffer.from('DEADBYTE-R35-FINAL-CLOSURE-V1\0','utf8');
|
|
10
10
|
const stateRoot=path.resolve(process.env.DEADBYTE_STATE_ROOT||path.join(os.homedir(),'.deadbyte-mcp'));
|
|
11
11
|
const sha256=bytes=>createHash('sha256').update(bytes).digest('hex');
|
|
12
12
|
const canonical=value=>Array.isArray(value)?value.map(canonical):value&&typeof value==='object'
|
|
@@ -22,17 +22,17 @@ function structured(result,label){
|
|
|
22
22
|
async function publicMachineEvidence(){
|
|
23
23
|
const endpoint=new URL((await readFile(path.join(stateRoot,'bridge','mcp-url.txt'),'utf8')).trim());
|
|
24
24
|
insist(endpoint.protocol==='https:','final closure requires HTTPS public endpoint');
|
|
25
|
-
const client=new Client({name:'deadbyte-
|
|
25
|
+
const client=new Client({name:'deadbyte-r35-final-closure',version:'0.9.0'},
|
|
26
26
|
{versionNegotiation:{mode:{pin:'2026-07-28'}}});
|
|
27
27
|
const transport=new StreamableHTTPClientTransport(endpoint);
|
|
28
28
|
try{
|
|
29
29
|
await client.connect(transport);
|
|
30
30
|
const listed=await client.listTools();
|
|
31
31
|
const names=listed.tools.map(tool=>tool.name).sort();
|
|
32
|
-
insist(JSON.stringify(names)===JSON.stringify(
|
|
32
|
+
insist(JSON.stringify(names)===JSON.stringify(R34_EXPECTED_TOOLS),'final public catalog is not exact 73');
|
|
33
33
|
for(const tool of listed.tools) insist(tool.outputSchema?.type==='object'&&tool.outputSchema?.additionalProperties===false,`tool ${tool.name} output schema drift`);
|
|
34
34
|
const status=structured(await client.callTool({name:'machine_status',arguments:{}}),'machine_status');
|
|
35
|
-
const nonce=`
|
|
35
|
+
const nonce=`r35-final-${randomBytes(16).toString('hex')}`;
|
|
36
36
|
const ping=structured(await client.callTool({name:'machine_ping',arguments:{nonce}}),'machine_ping');
|
|
37
37
|
const coding=structured(await client.callTool({name:'coding_session_status',arguments:{}}),'coding_session_status');
|
|
38
38
|
const autonomous=structured(await client.callTool({name:'autonomous_session_status',arguments:{}}),'autonomous_session_status');
|
|
@@ -61,13 +61,13 @@ async function atomicCreate(file,bytes){
|
|
|
61
61
|
|
|
62
62
|
export async function writeFinalClosure({parityPath,activationPath,windowsGatePath}){
|
|
63
63
|
const pointer=JSON.parse(await readFile(path.join(stateRoot,'active-release.json'),'utf8'));
|
|
64
|
-
insist(pointer.version==='0.
|
|
64
|
+
insist(pointer.version==='0.9.0','final closure requires V0.8.11 active release');
|
|
65
65
|
const parity=JSON.parse(await readFile(path.resolve(parityPath),'utf8'));
|
|
66
|
-
insist(parity.schema==='deadbyte.
|
|
66
|
+
insist(parity.schema==='deadbyte.r35-parity.v1'&&parity.status==='passed','parity evidence is not passed');
|
|
67
67
|
insist(parity.release_id===pointer.release_id&&parity.manifest_sha256===pointer.manifest_sha256,'parity/current release mismatch');
|
|
68
68
|
insist(parity.rollback?.receipt_path&&parity.restore?.receipt_path,'parity rollback/restore receipt paths missing');
|
|
69
69
|
const windowsGate=JSON.parse(await readFile(path.resolve(windowsGatePath),'utf8'));
|
|
70
|
-
insist(windowsGate.schema==='deadbyte.
|
|
70
|
+
insist(windowsGate.schema==='deadbyte.r35-windows-gate.v1'&&windowsGate.status==='passed'&&windowsGate.exit_code===0,'Windows gate evidence invalid');
|
|
71
71
|
insist(windowsGate.manifest_sha256===pointer.manifest_sha256,'Windows gate/current release mismatch');
|
|
72
72
|
const machine=await publicMachineEvidence();
|
|
73
73
|
insist(machine.status.release_id===pointer.release_id&&machine.status.release_manifest_sha256===pointer.manifest_sha256,'machine status/current release mismatch');
|
|
@@ -76,7 +76,7 @@ export async function writeFinalClosure({parityPath,activationPath,windowsGatePa
|
|
|
76
76
|
rollback:await fileEvidence(parity.rollback.receipt_path), restore:await fileEvidence(parity.restore.receipt_path),
|
|
77
77
|
windows_gate:await fileEvidence(windowsGatePath)
|
|
78
78
|
};
|
|
79
|
-
const body={schema:'deadbyte.
|
|
79
|
+
const body={schema:'deadbyte.r35-final-closure.v1',version:'0.9.0',release_label:'R35 FINAL MACHINE BASELINE',
|
|
80
80
|
completed_at_utc:new Date().toISOString(),active_pointer:pointer,evidence,
|
|
81
81
|
public_catalog:{tool_count:machine.tool_count,strict_output_schemas:machine.strict_output_schemas},
|
|
82
82
|
machine:{status:machine.status,ping:machine.ping,nonce:machine.nonce},
|
|
@@ -87,10 +87,10 @@ export async function writeFinalClosure({parityPath,activationPath,windowsGatePa
|
|
|
87
87
|
const keyId=sha256(Buffer.from(publicKey.export({type:'spki',format:'der'})));
|
|
88
88
|
const bodyBytes=Buffer.from(canonicalJson(body),'utf8');
|
|
89
89
|
const signature=cryptoSign(null,Buffer.concat([DOMAIN,bodyBytes]),privateKey);
|
|
90
|
-
const envelope={body,body_sha256:sha256(bodyBytes),attestation:{algorithm:'ed25519',domain:'DEADBYTE-
|
|
90
|
+
const envelope={body,body_sha256:sha256(bodyBytes),attestation:{algorithm:'ed25519',domain:'DEADBYTE-R35-FINAL-CLOSURE-V1',key_id:keyId,signature_base64:signature.toString('base64')}};
|
|
91
91
|
envelope.closure_sha256=sha256(Buffer.from(canonicalJson(envelope),'utf8'));
|
|
92
92
|
const dir=path.join(stateRoot,'evidence','release');
|
|
93
|
-
const file=path.join(dir,`
|
|
93
|
+
const file=path.join(dir,`r35-final-${pointer.manifest_sha256.slice(0,16)}.json`);
|
|
94
94
|
const bytes=Buffer.from(`${JSON.stringify(envelope,null,2)}\n`,'utf8');
|
|
95
95
|
await atomicCreate(file,bytes);
|
|
96
96
|
return {status:'written',path:file,sha256:sha256(bytes),closure_sha256:envelope.closure_sha256,release_id:pointer.release_id};
|
package/scripts/gate-windows.ps1
CHANGED
|
@@ -9,7 +9,7 @@ function Invoke-GateStep {
|
|
|
9
9
|
Write-Host "==== $Name ===="
|
|
10
10
|
& npm.cmd @NpmArgs
|
|
11
11
|
if ($LASTEXITCODE -ne 0) {
|
|
12
|
-
throw "DEADBYTE V0.
|
|
12
|
+
throw "DEADBYTE V0.9.0 / R35 gate failed at $Name with exit code $LASTEXITCODE"
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -36,7 +36,7 @@ Invoke-GateStep -Name 'release-manifest-final' -NpmArgs @('run', 'manifest:verif
|
|
|
36
36
|
Write-Host '==== windows-gate-evidence ===='
|
|
37
37
|
& node.exe (Join-Path $PSScriptRoot 'windows-gate-evidence.mjs')
|
|
38
38
|
if ($LASTEXITCODE -ne 0) {
|
|
39
|
-
throw "DEADBYTE V0.
|
|
39
|
+
throw "DEADBYTE V0.9.0 / R35 gate failed at windows-gate-evidence with exit code $LASTEXITCODE"
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
Write-Host '==== DEADBYTE V0.
|
|
42
|
+
Write-Host '==== DEADBYTE V0.9.0 / R35 WINDOWS BATCH GATE: PASS ===='
|
|
@@ -99,18 +99,18 @@ async function scheduleDeferred(mode, value) {
|
|
|
99
99
|
async function publicDisarmed(url) {
|
|
100
100
|
const script = path.join(root, 'src', 'remote-mcp-r24-disarmed-smoke-client.mjs');
|
|
101
101
|
const result = parseJsonOutput((await run(process.execPath, [script, url], { timeoutMs:90000 })).stdout, 'public disarmed gate');
|
|
102
|
-
assert(result.status === 'passed' && result.tool_count ===
|
|
102
|
+
assert(result.status === 'passed' && result.tool_count === 73, 'public disarmed gate failed exact catalog');
|
|
103
103
|
assert(result.coding_armed === false && result.autonomous_armed === false, 'public authority remained armed');
|
|
104
104
|
return result;
|
|
105
105
|
}export function validateParityEvidence(value) {
|
|
106
|
-
assert(value?.schema === 'deadbyte.
|
|
106
|
+
assert(value?.schema === 'deadbyte.r35-parity.v1', 'parity schema mismatch');
|
|
107
107
|
assert(value.status === 'passed', 'parity status is not passed');
|
|
108
108
|
assert(value.rdc_operation_count === 0 && value.execution_provider === 'deadbyte_mcp', 'parity used non-DEADBYTE execution');
|
|
109
|
-
assert(value.public_full?.status === 'passed' && value.public_full?.tools?.length ===
|
|
110
|
-
assert(value.machine_control?.status === 'passed' && value.machine_control?.tool_count ===
|
|
111
|
-
assert(value.autonomous?.status === 'passed' && value.autonomous?.tool_count ===
|
|
109
|
+
assert(value.public_full?.status === 'passed' && value.public_full?.tools?.length === 73, 'public full gate missing exact 73');
|
|
110
|
+
assert(value.machine_control?.status === 'passed' && value.machine_control?.tool_count === 73, 'machine control parity missing');
|
|
111
|
+
assert(value.autonomous?.status === 'passed' && value.autonomous?.tool_count === 73, 'autonomous parity missing');
|
|
112
112
|
assert(value.rollback?.state === 'completed' && value.restore?.state === 'completed', 'rollback/restore not completed');
|
|
113
|
-
assert(value.predecessor_disarmed?.tool_count ===
|
|
113
|
+
assert(value.predecessor_disarmed?.tool_count === 73 && value.successor_disarmed?.tool_count === 73, 'disarmed public gate missing');
|
|
114
114
|
for (const key of ['tree_read','precondition_mutation','search','owned_process','observation','coding_loop','autonomy','interrupted_recovery','evidence_verification']) {
|
|
115
115
|
assert(value.requirements?.[key] === true, `parity requirement not proven: ${key}`);
|
|
116
116
|
}
|
|
@@ -123,15 +123,15 @@ export async function runReleaseParity(activationReceiptPath) {
|
|
|
123
123
|
assert(pointer.manifest_sha256 === candidateManifest, 'active release is not the canonical candidate');
|
|
124
124
|
const url = await publicUrl();
|
|
125
125
|
const publicFullScript = path.join(root, 'src', 'remote-mcp-smoke-client.mjs');
|
|
126
|
-
const machineScript = path.join(root, 'src', 'remote-mcp-
|
|
126
|
+
const machineScript = path.join(root, 'src', 'remote-mcp-r34-parity-client.mjs');
|
|
127
127
|
const autonomousScript = path.join(root, 'src', 'remote-mcp-autonomous-smoke-client.mjs'); let publicFull,machineControl,autonomous,publicGatesPassed=false;
|
|
128
128
|
try {
|
|
129
129
|
publicFull = parseJsonOutput((await run(process.execPath, [publicFullScript, url, 'full'], { timeoutMs:180000 })).stdout, 'public full gate');
|
|
130
|
-
machineControl = parseJsonOutput((await run(process.execPath, [machineScript, url], { timeoutMs:600000 })).stdout, '
|
|
131
|
-
autonomous = parseJsonOutput((await run(process.execPath, [autonomousScript, url], { timeoutMs:900000 })).stdout, '
|
|
132
|
-
assert(publicFull.status === 'passed' && publicFull.tools?.length ===
|
|
133
|
-
assert(machineControl.status === 'passed' && machineControl.tool_count ===
|
|
134
|
-
assert(autonomous.status === 'passed' && autonomous.tool_count ===
|
|
130
|
+
machineControl = parseJsonOutput((await run(process.execPath, [machineScript, url], { timeoutMs:600000 })).stdout, 'R34 machine parity');
|
|
131
|
+
autonomous = parseJsonOutput((await run(process.execPath, [autonomousScript, url], { timeoutMs:900000 })).stdout, 'R34 autonomous parity');
|
|
132
|
+
assert(publicFull.status === 'passed' && publicFull.tools?.length === 73, 'public full gate did not expose exact 73');
|
|
133
|
+
assert(machineControl.status === 'passed' && machineControl.tool_count === 73, 'machine-control parity failed');
|
|
134
|
+
assert(autonomous.status === 'passed' && autonomous.tool_count === 73, 'autonomous parity failed');
|
|
135
135
|
publicGatesPassed=true;
|
|
136
136
|
} finally {
|
|
137
137
|
let restoreError=null;
|
|
@@ -152,7 +152,7 @@ export async function runReleaseParity(activationReceiptPath) {
|
|
|
152
152
|
assert(finalPointer.manifest_sha256 === candidateManifest, 'restore did not return canonical candidate');
|
|
153
153
|
|
|
154
154
|
const evidence = {
|
|
155
|
-
schema:'deadbyte.
|
|
155
|
+
schema:'deadbyte.r35-parity.v1', status:'passed', completed_at_utc:new Date().toISOString(),
|
|
156
156
|
release_id:finalPointer.release_id, manifest_sha256:candidateManifest,
|
|
157
157
|
execution_provider:'deadbyte_mcp', rdc_operation_count:0,
|
|
158
158
|
public_full:publicFull, machine_control:machineControl, autonomous,
|
|
@@ -175,7 +175,7 @@ export async function runReleaseParity(activationReceiptPath) {
|
|
|
175
175
|
validateParityEvidence(evidence);
|
|
176
176
|
const evidenceDir = path.join(stateRoot, 'evidence', 'release');
|
|
177
177
|
await mkdir(evidenceDir, { recursive:true });
|
|
178
|
-
const evidencePath = path.join(evidenceDir, `
|
|
178
|
+
const evidencePath = path.join(evidenceDir, `r35-parity-${candidateManifest.slice(0,16)}.json`);
|
|
179
179
|
const bytes = Buffer.from(`${JSON.stringify(evidence, null, 2)}\n`, 'utf8');
|
|
180
180
|
await writeFile(evidencePath, bytes);
|
|
181
181
|
return { evidence, evidence_path:evidencePath, evidence_sha256:sha256(bytes) };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
param(
|
|
2
|
+
[Parameter(Mandatory=$true)][string]$ConfigPath,
|
|
3
|
+
[Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-fA-F]{64}$')][string]$ConfigSha256,
|
|
4
|
+
[string[]]$RequiredIds=@('pyright','rust-analyzer','clangd'),
|
|
5
|
+
[string]$OutputPath=''
|
|
6
|
+
)
|
|
7
|
+
$ErrorActionPreference='Stop'
|
|
8
|
+
function Hash-Lower([string]$Path){
|
|
9
|
+
if(-not (Test-Path -LiteralPath $Path -PathType Leaf)){ throw "missing file: $Path" }
|
|
10
|
+
return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()
|
|
11
|
+
}
|
|
12
|
+
$configFull=[IO.Path]::GetFullPath($ConfigPath)
|
|
13
|
+
$expected=$ConfigSha256.ToLowerInvariant()
|
|
14
|
+
$observed=Hash-Lower $configFull
|
|
15
|
+
if($observed -ne $expected){ throw "semantic config SHA-256 mismatch: expected $expected found $observed" }
|
|
16
|
+
$config=Get-Content -LiteralPath $configFull -Raw -Encoding UTF8 | ConvertFrom-Json
|
|
17
|
+
if([string]$config.schema -ne 'deadbyte.semantic-lsp-config.v1'){ throw 'semantic config schema mismatch' }
|
|
18
|
+
$servers=@($config.servers)
|
|
19
|
+
$seen=@{}
|
|
20
|
+
$records=@()
|
|
21
|
+
foreach($server in $servers){
|
|
22
|
+
$id=[string]$server.id
|
|
23
|
+
if([string]::IsNullOrWhiteSpace($id)){ throw 'semantic server id missing' }
|
|
24
|
+
if($seen.ContainsKey($id)){ throw "duplicate semantic server id: $id" }
|
|
25
|
+
$seen[$id]=$true
|
|
26
|
+
$exe=[string]$server.executable_path
|
|
27
|
+
$exeExpected=([string]$server.executable_sha256).ToLowerInvariant()
|
|
28
|
+
if($exeExpected -notmatch '^[0-9a-f]{64}$'){ throw "semantic executable SHA invalid for $id" }
|
|
29
|
+
$exeObserved=Hash-Lower $exe
|
|
30
|
+
if($exeObserved -ne $exeExpected){ throw "semantic executable SHA-256 mismatch for ${id}: expected $exeExpected found $exeObserved" }
|
|
31
|
+
$deps=@()
|
|
32
|
+
foreach($dep in @($server.dependencies)){
|
|
33
|
+
$depPath=[string]$dep.path
|
|
34
|
+
$depExpected=([string]$dep.expected_sha256).ToLowerInvariant()
|
|
35
|
+
if($depExpected -notmatch '^[0-9a-f]{64}$'){ throw "semantic dependency SHA invalid for $id" }
|
|
36
|
+
$depObserved=Hash-Lower $depPath
|
|
37
|
+
if($depObserved -ne $depExpected){ throw "semantic dependency SHA-256 mismatch for ${id}: expected $depExpected found $depObserved" }
|
|
38
|
+
$deps += [ordered]@{path=$depPath;sha256=$depObserved}
|
|
39
|
+
}
|
|
40
|
+
$settle=0
|
|
41
|
+
if($null -ne $server.startup_settle_ms){ $settle=[int]$server.startup_settle_ms }
|
|
42
|
+
$records += [ordered]@{
|
|
43
|
+
id=$id
|
|
44
|
+
language_id=[string]$server.language_id
|
|
45
|
+
required=[bool]$server.required
|
|
46
|
+
executable_path=$exe
|
|
47
|
+
executable_sha256=$exeObserved
|
|
48
|
+
dependencies=$deps
|
|
49
|
+
startup_settle_ms=$settle
|
|
50
|
+
status='pinned'
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
foreach($required in $RequiredIds){
|
|
54
|
+
if(-not $seen.ContainsKey($required)){ throw "missing required semantic server: $required" }
|
|
55
|
+
}
|
|
56
|
+
$payload=[ordered]@{
|
|
57
|
+
schema='deadbyte.r35-semantic-preflight.v1'
|
|
58
|
+
status='passed'
|
|
59
|
+
config_path=$configFull
|
|
60
|
+
config_sha256=$observed
|
|
61
|
+
builtin=@([ordered]@{id='typescript';language_id='typescript';status='builtin';required=$true})
|
|
62
|
+
required_ids=@('typescript') + @($RequiredIds)
|
|
63
|
+
servers=$records
|
|
64
|
+
}
|
|
65
|
+
$json=$payload | ConvertTo-Json -Depth 12
|
|
66
|
+
if($OutputPath){
|
|
67
|
+
$out=[IO.Path]::GetFullPath($OutputPath)
|
|
68
|
+
$dir=Split-Path -Parent $out
|
|
69
|
+
if($dir -and -not(Test-Path -LiteralPath $dir)){ New-Item -ItemType Directory -Force -Path $dir | Out-Null }
|
|
70
|
+
[IO.File]::WriteAllText($out,$json,[Text.UTF8Encoding]::new($false))
|
|
71
|
+
}
|
|
72
|
+
Write-Output $json
|
|
73
|
+
Write-Host ("R35_SEMANTIC_PREFLIGHT_PASS config={0} required={1}" -f $observed,(@('typescript')+@($RequiredIds) -join ','))
|