pi-session-mcp 0.8.3 → 0.12.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/.pi-session-mcp-cli/client-adapters/command.js +33 -0
- package/.pi-session-mcp-cli/client-adapters/mcp-verifier.js +198 -0
- package/.pi-session-mcp-cli/client-adapters/types.js +1 -0
- package/.pi-session-mcp-cli/config.js +29 -3
- package/.pi-session-mcp-cli/container-runtime.js +18 -0
- package/.pi-session-mcp-cli/doctor.js +370 -4
- package/.pi-session-mcp-cli/execution-modes.js +83 -0
- package/.pi-session-mcp-cli/execution-profile.js +1 -0
- package/.pi-session-mcp-cli/override-lock.js +4 -4
- package/.pi-session-mcp-cli/session-tools.js +45 -0
- package/.pi-session-mcp-cli/setup-platform.js +64 -36
- package/.pi-session-mcp-cli/setup-process.js +455 -0
- package/.pi-session-mcp-cli/skill-library.js +8 -4
- package/.pi-session-mcp-cli/turn-events.js +97 -0
- package/.pi-session-mcp-cli/writer-boundary.js +321 -0
- package/.pi-session-mcp-cli/writer-fence.js +50 -0
- package/.pi-session-mcp-cli/writer-lease.js +140 -0
- package/.pi-session-mcp-cli/writer-lifecycle.js +567 -0
- package/.pi-session-mcp-cli/writer-state.js +199 -0
- package/.pi-session-mcp-cli/writer-wrapper.js +14 -0
- package/CHANGELOG.md +527 -0
- package/README.md +8 -2
- package/dist/capabilities.d.ts +9 -1
- package/dist/capabilities.js +8 -3
- package/dist/child-stdio-transport.d.ts +21 -0
- package/dist/child-stdio-transport.js +88 -0
- package/dist/client-adapters/claude-code.js +3 -2
- package/dist/client-adapters/command.d.ts +8 -0
- package/dist/client-adapters/command.js +9 -1
- package/dist/client-adapters/mcp-verifier.d.ts +7 -0
- package/dist/client-adapters/mcp-verifier.js +21 -4
- package/dist/client-adapters/types.d.ts +5 -1
- package/dist/client-adapters/writer-registration.d.ts +16 -0
- package/dist/client-adapters/writer-registration.js +156 -0
- package/dist/config.d.ts +12 -1
- package/dist/config.js +29 -3
- package/dist/container-runtime.d.ts +2 -0
- package/dist/container-runtime.js +18 -0
- package/dist/doctor.d.ts +36 -2
- package/dist/doctor.js +370 -4
- package/dist/event-spool.d.ts +70 -0
- package/dist/event-spool.js +180 -0
- package/dist/execution-modes.d.ts +60 -0
- package/dist/execution-modes.js +83 -0
- package/dist/execution-profile.d.ts +2 -0
- package/dist/execution-profile.js +1 -0
- package/dist/main.js +63 -8
- package/dist/override-lock.d.ts +2 -0
- package/dist/override-lock.js +4 -4
- package/dist/pi-adapter.d.ts +31 -1
- package/dist/pi-adapter.js +12 -0
- package/dist/process-diagnostics.d.ts +1 -1
- package/dist/process-diagnostics.js +2 -1
- package/dist/refusal-server.d.ts +6 -0
- package/dist/refusal-server.js +46 -0
- package/dist/sdk-pi-adapter.js +16 -9
- package/dist/server.d.ts +3 -2
- package/dist/server.js +27 -53
- package/dist/session-registry.d.ts +32 -2
- package/dist/session-registry.js +61 -11
- package/dist/session-tools.d.ts +14 -5
- package/dist/session-tools.js +13 -9
- package/dist/setup-cli.d.ts +14 -0
- package/dist/setup-cli.js +132 -0
- package/dist/setup-command-guardian.js +9 -3
- package/dist/setup-hooks.d.ts +158 -0
- package/dist/setup-hooks.js +657 -0
- package/dist/setup-main.d.ts +1 -1
- package/dist/setup-main.js +18 -2
- package/dist/setup-modes.d.ts +18 -0
- package/dist/setup-modes.js +131 -0
- package/dist/setup-ownership.d.ts +1 -0
- package/dist/setup-ownership.js +11 -3
- package/dist/setup-platform.d.ts +9 -1
- package/dist/setup-platform.js +64 -36
- package/dist/setup-process.d.ts +23 -1
- package/dist/setup-process.js +88 -10
- package/dist/setup-writers.d.ts +42 -0
- package/dist/setup-writers.js +510 -0
- package/dist/setup.d.ts +4 -1
- package/dist/setup.js +23 -10
- package/dist/skill-library.d.ts +2 -0
- package/dist/skill-library.js +8 -4
- package/dist/tool-schemas.d.ts +339 -0
- package/dist/tool-schemas.js +49 -0
- package/dist/turn-events.d.ts +45 -0
- package/dist/turn-events.js +97 -0
- package/dist/wake-hook.d.ts +180 -0
- package/dist/wake-hook.js +638 -0
- package/dist/wake-main.d.ts +8 -0
- package/dist/wake-main.js +111 -0
- package/dist/writer-acceptance.d.ts +10 -0
- package/dist/writer-acceptance.js +192 -0
- package/dist/writer-boundary.d.ts +52 -0
- package/dist/writer-boundary.js +321 -0
- package/dist/writer-credentials.d.ts +29 -0
- package/dist/writer-credentials.js +85 -0
- package/dist/writer-fence.d.ts +12 -0
- package/dist/writer-fence.js +50 -0
- package/dist/writer-guard.d.ts +13 -0
- package/dist/writer-guard.js +54 -0
- package/dist/writer-launch.d.ts +29 -0
- package/dist/writer-launch.js +232 -0
- package/dist/writer-lease.d.ts +28 -0
- package/dist/writer-lease.js +140 -0
- package/dist/writer-lifecycle.d.ts +96 -0
- package/dist/writer-lifecycle.js +567 -0
- package/dist/writer-relay.d.ts +33 -0
- package/dist/writer-relay.js +359 -0
- package/dist/writer-state.d.ts +111 -0
- package/dist/writer-state.js +199 -0
- package/dist/writer-wrapper.d.ts +3 -0
- package/dist/writer-wrapper.js +14 -0
- package/docs/acceptance.md +1694 -1
- package/docs/adr/0003-post-mvp-maintenance.md +2 -2
- package/docs/adr/0006-pi-extension-allowlist.md +3 -1
- package/docs/adr/0008-coding-profile-isolation.md +295 -0
- package/docs/adr/0009-execution-modes.md +131 -0
- package/docs/adr/0010-read-only-extension-tools.md +68 -0
- package/docs/adr/0011-turn-events-and-controller-wake.md +173 -0
- package/docs/adr/0012-leased-writer-pool.md +357 -0
- package/docs/architecture.md +96 -8
- package/docs/client-setup-design.md +12 -8
- package/docs/client-setup.md +84 -2
- package/docs/doctor-design.md +48 -0
- package/docs/evaluation/2026-10-17-live-screening.md +121 -0
- package/docs/evaluation/2026-10-17-node-runtime-followup.md +33 -0
- package/docs/evaluation/2026-10-17-profile-evaluation-evidence.md +155 -0
- package/docs/evaluation/2026-10-17-test-coverage.md +127 -0
- package/docs/evaluation/README.md +123 -0
- package/docs/evaluation/client-reconnect-2026-10-17/README.md +41 -0
- package/docs/evaluation/client-reconnect-2026-10-17/checks.json +38 -0
- package/docs/evaluation/client-reconnect-2026-10-17/integrity.json +30 -0
- package/docs/evaluation/client-reconnect-2026-10-17/reconnect.json +57 -0
- package/docs/evaluation/client-reconnect-2026-10-17/registration-verification.json +389 -0
- package/docs/evaluation/client-reconnect-2026-10-17/review.json +10 -0
- package/docs/evaluation/controller-ledger-hooks-2026-10-26/README.md +115 -0
- package/docs/evaluation/evidence-2026-10-17/budget.proposed.json +13 -0
- package/docs/evaluation/evidence-2026-10-17/changed-files.txt +82 -0
- package/docs/evaluation/evidence-2026-10-17/checks.json +103 -0
- package/docs/evaluation/evidence-2026-10-17/comparison.json +247 -0
- package/docs/evaluation/evidence-2026-10-17/development-collection-failure.json +15 -0
- package/docs/evaluation/evidence-2026-10-17/full-attempt-default.json +19 -0
- package/docs/evaluation/evidence-2026-10-17/full-tests.json +17 -0
- package/docs/evaluation/evidence-2026-10-17/inventory.json +239 -0
- package/docs/evaluation/evidence-2026-10-17/manifest.json +359 -0
- package/docs/evaluation/evidence-2026-10-17/offline.json +1020 -0
- package/docs/evaluation/evidence-2026-10-17/ui-reference/T3-1280.png +0 -0
- package/docs/evaluation/evidence-2026-10-17/ui-reference/T3-375.png +0 -0
- package/docs/evaluation/evidence-2026-10-17/ui-reference/result.json +141 -0
- package/docs/evaluation/extension-ablation-2026-10-20/README.md +414 -0
- package/docs/evaluation/extension-ablation-2026-10-20/setup.md +140 -0
- package/docs/evaluation/extension-ablation-repeat-2026-10-21/README.md +142 -0
- package/docs/evaluation/extension-ablation-repeat-2026-10-21/setup.md +69 -0
- package/docs/evaluation/extension-audit-2026-10-17/README.md +149 -0
- package/docs/evaluation/extension-audit-2026-10-17/checks.json +38 -0
- package/docs/evaluation/extension-audit-2026-10-17/cursor-static-evidence.json +93 -0
- package/docs/evaluation/extension-audit-2026-10-17/installed-artifact-comparison.json +85 -0
- package/docs/evaluation/extension-audit-2026-10-17/installed-packages.json +100 -0
- package/docs/evaluation/extension-audit-2026-10-17/integrity.json +108 -0
- package/docs/evaluation/extension-audit-2026-10-17/navigation-cursor-registry.json +290 -0
- package/docs/evaluation/extension-audit-2026-10-17/navigation-static-evidence.json +185 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-bindings.json +25 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-cleanup.json +12 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-probe.mjs +63 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-reproduction.json +91 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-result.json +83 -0
- package/docs/evaluation/extension-audit-2026-10-17/permission-cache-artifact-verification.json +24 -0
- package/docs/evaluation/extension-audit-2026-10-17/permission-cache-evidence.json +133 -0
- package/docs/evaluation/extension-audit-2026-10-17/permission-cache-report.md +64 -0
- package/docs/evaluation/extension-audit-2026-10-17/publication-export.json +10 -0
- package/docs/evaluation/extension-audit-2026-10-17/resolver-gates.json +51 -0
- package/docs/evaluation/extension-audit-2026-10-17/review.json +28 -0
- package/docs/evaluation/extension-audit-2026-10-17/run-openwiki-headless-probe.mjs +29 -0
- package/docs/evaluation/extension-audit-2026-10-17/summary.json +123 -0
- package/docs/evaluation/extension-audit-2026-10-17/web-openwiki-artifacts.json +29 -0
- package/docs/evaluation/extension-audit-2026-10-17/web-openwiki-evidence.json +116 -0
- package/docs/evaluation/extension-audit-2026-10-17/web-openwiki-report.md +113 -0
- package/docs/evaluation/extension-functions-2026-10-17/README.md +33 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/README.md +39 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-03dc1dad-9959-40df-b51c-7820991bf7e3.json +79 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-0c43651e-8c7d-4c7c-aa9b-5b5761141e3b.json +54 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-51247b13-87c1-4ec6-886b-82d922b0585a.json +89 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-5337f6bf-503f-4c45-aac0-43b142385a87.json +47 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-60285194-b1d1-4335-b616-6614941585df.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-6d2fbaa9-a720-4582-9be1-a95f4764786d.json +69 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-6fbb576c-d87d-478d-9c05-4b5ef3563598.json +125 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-730926d1-ef20-4b2d-ab74-7e542f1065e9.json +48 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-a1baa47a-5bbe-4a16-ade8-a350599eb911.json +48 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-bc1d69c7-784f-4ddb-9335-0d905330d568.json +91 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-d582757d-2859-4683-8310-ec158bf6d551.json +99 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-e6533a23-4933-4d6e-a250-b1b27f010d18.json +60 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts.json +138 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/guard.mjs +74 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/integrity.json +86 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/openwiki-final.json +125 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/run.mjs +36 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/web-final.json +99 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/worker.mjs +102 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/README.md +21 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-30-31-440Z-b1a47f88-8d86-4238-9ef8-af890d9ba74b.json +129 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-31-04-505Z-a3736add-73b8-4d77-8ea6-084ce8aa4599.json +129 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-31-15-654Z-b0197bff-8363-4d46-b84b-46d9ed67fc39.json +248 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-31-39-137Z-e373f24d-8a8c-46b0-86aa-9f687cfadb9b.json +278 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-32-05-324Z-f63095f1-755e-43fc-9d28-3cd1a9ff4f4d.json +251 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-32-25-191Z-fc9a83af-ceae-40d7-a737-8ef861ba7946.json +282 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-33-14-993Z-5e7eae34-09f0-4c80-9210-b8cc4d1acb5f.json +282 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-38-39-010Z-57cf6a26-f091-45de-8849-b616b303a46c.json +283 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-40-32-118Z-54528e43-ac07-4f9c-8f12-10c041130983.json +283 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-41-49-525Z-48195b6e-f20d-49a5-bd53-a732a0af10c1.json +324 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-42-18-175Z-215330e7-06a6-4666-af9c-2ecb214d8d71.json +324 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/integrity.json +165 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/probe.mjs +161 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipt-archive.json +150 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/commands-headless-3feeffc5-97bf-4079-8505-8119fab7956a.json +54 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/commands-headless-42e5eace-ad87-480a-94d9-448c1dd167b8.json +49 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/commands-headless-50f39f1c-8b48-442b-8d15-1f9c8f63bd81.json +49 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/commands-headless-8482b2b0-f600-488b-9f36-905e0125177a.json +54 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-codex-bypass-128ffdce-6fd5-431b-8019-32b40ba4174d.json +42 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-codex-bypass-3b572182-a737-471f-b9cb-b01d5da1752a.json +42 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-codex-bypass-6c225370-2f47-4a0a-80d5-87d12f6c6fdc.json +37 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-codex-bypass-b48399db-cbed-43de-9071-ac27c34e3757.json +37 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-openai-3a8f52b6-c8d6-4d1c-844c-782a6624a29e.json +45 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-openai-6fcdbc20-b14b-4b80-a4da-bf24078da8d2.json +50 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-openai-a8d6f628-40e1-437e-b192-f7232a051a44.json +50 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-openai-c3c39463-a2d6-4ff8-b985-8f6d1fb1aa02.json +45 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/stats-synthetic-a23c264f-151d-4ff0-aab4-bdbb2f6560d8.json +53 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/stats-synthetic-d8178bd3-6530-4915-9cf1-056a975bfbcd.json +53 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/stats-synthetic-e3985119-e101-459e-91cd-21a0905287ba.json +48 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/stats-synthetic-e7a40382-2d27-4db5-a133-dbe346a5dc60.json +48 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-unknown-223d7adc-2dbc-4017-b1ec-0c38294320e2.json +41 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-unknown-347a8548-d2e0-4846-a08e-b0399f8fd3b4.json +41 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-unknown-49b45e2b-e2d2-456f-b73f-e6bc938b6378.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-unknown-aaf432f2-bb91-41a7-b951-2d4316389632.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-zero-204ab3e8-f1fe-4894-8fb0-08299deb4c21.json +41 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-zero-9388d2df-fa15-479c-a4ef-2a774c366c0f.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-zero-e0bb4742-214a-4b3f-88d2-44de54394e2f.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-zero-f77e1e2d-742a-490f-9955-1dfb19f59c9c.json +41 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/runner.mjs +36 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/README.md +20 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-10-753Z-2bb4fff5-48cc-4f6b-ae1b-5cc1a07f610b.json +54 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-26-537Z-5adc4fb1-0008-4ef9-a106-aa372dabf061.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-32-362Z-30949c31-73a3-4dae-af81-68deded51543.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-38-494Z-8eec81b8-5576-48cb-b2fa-c279269db058.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-45-546Z-991647e5-7ea4-43c4-a90d-868e4ac38d83.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-37-02-277Z-2296fb35-e5cb-4bf1-9e83-7370bcb46bfe.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-37-28-390Z-e9c3d106-b4c9-4146-ae83-a2799c907fe5.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-37-37-371Z-8545c893-a8e3-4dc6-973b-81dfd97d798b.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-38-41-612Z-c57c4778-261d-4397-8a36-df9cc23ca629.json +58 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-38-51-661Z-0eb898de-7471-4f17-a308-5ef5d86421ff.json +58 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-38-55-412Z-8169d843-a9e7-48f4-88b1-3a90e1592df1.json +58 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-39-15-274Z-a5610333-e428-4cc6-9f5a-9206748ee512.json +58 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-39-39-506Z-d4c80a7b-76b4-4d11-bf0f-552d11b131b2.json +136 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-39-53-515Z-db409f47-8ee5-4354-b7f9-a258eb7e17d0.json +136 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-42-04-909Z-01d70cb3-6897-46ca-b8aa-1c69d5b5c7fc.json +148 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/integrity.json +205 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/probe.mjs +151 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipt-archive.json +186 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-104e378f-8f82-4ae9-bffc-7f1d52e00e74.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-182a8009-c52a-4760-9768-9cba15fceb9c.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-1f07360d-046f-4f0c-b40f-6b57a027220c.json +65 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-256cb86e-40ae-4fec-a2d2-9b7f66cc4be8.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-2667d991-3133-44c3-b883-c401b3c14cb1.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-394fc425-ed51-408f-ab09-6d26aee0d48f.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-531d3f1d-c326-4914-b768-3d32103513b9.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-5c7d0d62-8290-494f-8729-5d60bc626ad7.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-64af1d94-ea73-481f-b827-dbf6755d8591.json +66 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-65fce696-864c-4247-960e-59f6d671cbf9.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-66acde31-19c7-4d3e-9814-ddeb2cffd373.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-79d220d0-fc0b-4cad-85cc-40b9e904fb97.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-a58f0281-71bc-4757-9d6f-e281f813135e.json +65 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-c2b61e4b-fd33-4969-ab29-118957ca5fbb.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-f61b5020-2c05-40ad-9cb8-590b22790186.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-0ee0df5a-299f-451c-96e3-5abcf8bfa999.json +45 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-169e5146-09a2-4231-8017-ebd8d4b75f0a.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-19d479f2-7162-463e-90de-2d89a13e59a3.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-1bd882bb-2403-4269-8335-90f9803f57b7.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-2ab9d418-68b2-4679-bf42-f31b6945ea5a.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-3a6aa7d7-b956-4fe5-9555-a2c63408c067.json +45 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-6333425f-0b46-4ced-a272-3d48895ee853.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-6eccb170-ff45-40e2-afc5-dfc0f77c229f.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-7f330c57-9c3f-4879-a1d0-67c4c5c36050.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-8d9de272-165c-4bb8-a147-d1b306388472.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-c1ffa69f-25fa-4f45-a691-af3bc422c089.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-c24ad0c8-5e7e-4d71-9b22-3e2708ce1626.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-c5a3140e-a28e-4264-9ee6-51b1310b3123.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-cdbb3dde-2441-46ae-9111-f2a299d45807.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-d68f774c-d1f0-4620-b334-301a20edffc3.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/runner.mjs +147 -0
- package/docs/evaluation/extension-functions-2026-10-17/integrity.json +618 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/README.md +22 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/SHA256SUMS.txt +8 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempt.json +13 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-30-37-626Z-7ba0ce60-b805-4bf1-813f-80f0673c519d.json +50 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-31-06-997Z-0df6e689-b7f6-4daf-a730-724638c7e9bb.json +52 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-31-22-489Z-dfa50911-d117-400d-9ea3-76b224693c10.json +59 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-31-39-899Z-6792c0ef-c795-4136-98e2-b9a9b00489bd.json +59 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-31-58-555Z-e23d44fb-d2cb-42b6-b76b-f2ac53645401.json +59 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-32-18-734Z-3708117d-bca6-44a6-9f61-4339a67535ae.json +60 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-32-34-897Z-abbfb675-7120-46fc-8638-2dde943a3c51.json +114 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-33-30-753Z-f1965485-aa41-4a9a-b62e-267fc9d7686c.json +72 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-33-46-589Z-e3b46364-e0dd-4a95-91ce-c11f5192d83f.json +72 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-33-57-569Z-d296148e-2f64-4921-bad7-391d0f3cc61d.json +74 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-34-30-540Z-51791e8c-b2a7-4f93-bff6-9b0467aeba51.json +109 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-34-57-906Z-2c3e469c-6d89-4707-8bc6-e62dcfacdc7c.json +114 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-35-16-679Z-035260fc-f3d1-4c1c-9619-81f2aa2ced55.json +115 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-36-05-641Z-24ceb58d-441b-4ffe-9853-ef4d15eb8c81.json +73 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-37-00-445Z-1ca606b7-306f-41e9-8745-b53879c620bb.json +72 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-37-23-659Z-c958d5fc-5c17-46b9-abc0-87913f14fd4b.json +73 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-38-49-639Z-9e74ee3c-7cea-4d9e-832f-0b5068d161ec.json +112 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-39-53-463Z-5d834e9f-e247-4887-8200-dee41070567f.json +32 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-40-16-811Z-0be9d64c-a0d7-405c-b81a-12f8c6cfebac.json +33 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-40-36-020Z-412777d5-f352-4fa0-9a07-f017b5f04cbb.json +124 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-42-03-506Z-a0cca711-1300-4431-bfff-5814a409d0af.json +120 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-42-28-426Z-fb70da7e-4888-469a-b5cd-b74da52afa9f.json +112 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-42-41-596Z-c8e99863-70e2-40f1-a516-e9f41156ef44.json +71 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-44-06-279Z-39516e45-daf6-409b-b216-64179608cc2e.json +97 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-45-34-538Z-87ddef90-2fda-4211-a513-0516dec235f4.json +112 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-45-48-020Z-06f478f2-43c4-48a7-ac02-7e53d4df8aaf.json +112 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-46-00-807Z-a98cc49d-6cf6-4109-aa95-f2d36e8d35c3.json +97 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-46-34-183Z-77f75abc-9ec3-41b2-896f-b6f4a180dca8.json +160 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-46-56-605Z-f46134c2-8523-4892-ab76-e88195d79ed2.json +163 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/child-guard.mjs +30 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/final-result.json +42 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/function-probe.mjs +521 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/function-runner.mjs +201 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/integrity.json +153 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/receipt-archive.json +160 -0
- package/docs/evaluation/extension-functions-2026-10-17/review.json +27 -0
- package/docs/evaluation/extension-functions-2026-10-17/summary.json +102 -0
- package/docs/evaluation/extension-functions-2026-10-17/verification.json +103 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/README.md +106 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/auth-warmup.mjs +33 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/contained-agent-ro.json +433 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/contained.json +439 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/control.json +403 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/live.json +75 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/wrapper.sh +37 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/README.md +360 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/design.md +150 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/inventory.md +113 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/README.md +117 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/dry-run/dry-01-L1-A.json +202 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/dry-run/dry-02-L1-C.json +259 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run/01-L1-A.json +169 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run/02-L1-A.json +202 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run/03-L1-C.json +256 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run/approval.json +31 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run-2/01-L1-C.json +256 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run-2/02-L1-A.json +201 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run-2/approval.json +16 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live-plan.md +87 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/pre-registration.md +117 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S1.json +361 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S2.json +544 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S3.json +470 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S4.json +271 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S5.json +271 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S6.json +266 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/X6.json +29 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/summary.json +269 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S1.json +391 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S2.json +600 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S3.json +519 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S4.json +281 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S5.json +294 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S6.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S8.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/X6.json +32 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/summary.json +307 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S1.json +391 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S2.json +600 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S3.json +519 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S4.json +281 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S5.json +294 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S6.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S8.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/X6.json +32 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/summary.json +307 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S1.json +409 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S2.json +634 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S3.json +537 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S4.json +281 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S5.json +294 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S6.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S8.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/X6.json +32 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/summary.json +307 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S1.json +409 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S2.json +634 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S3.json +537 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S4.json +281 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S5.json +294 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S6.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S8.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/X6.json +32 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/summary.json +307 -0
- package/docs/evaluation/live-rescreen-2026-10-17/README.md +114 -0
- package/docs/evaluation/live-rescreen-2026-10-17/approval.json +18 -0
- package/docs/evaluation/live-rescreen-2026-10-17/approved-budget.json +13 -0
- package/docs/evaluation/live-rescreen-2026-10-17/approved-manifest.json +315 -0
- package/docs/evaluation/live-rescreen-2026-10-17/audit-rescreen.mjs +78 -0
- package/docs/evaluation/live-rescreen-2026-10-17/audit.json +152 -0
- package/docs/evaluation/live-rescreen-2026-10-17/backend-independent-checks.json +38 -0
- package/docs/evaluation/live-rescreen-2026-10-17/checks.json +54 -0
- package/docs/evaluation/live-rescreen-2026-10-17/execution.json +19 -0
- package/docs/evaluation/live-rescreen-2026-10-17/integrity.json +138 -0
- package/docs/evaluation/live-rescreen-2026-10-17/planning-ledger.json +26 -0
- package/docs/evaluation/live-rescreen-2026-10-17/review.json +16 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/comparison.json +177 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-1.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-1.diagnostic.json +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-1.json +97 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.json +104 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.patch +11 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.snapshot/package.json +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-3.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-3.json +89 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.json +104 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.patch +11 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.snapshot/package.json +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-5.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-5.diagnostic.json +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-5.json +117 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-6.json +53 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runtime-observation.json +11 -0
- package/docs/evaluation/live-screening-2026-10-17/approval.json +13 -0
- package/docs/evaluation/live-screening-2026-10-17/approved-budget.json +13 -0
- package/docs/evaluation/live-screening-2026-10-17/approved-manifest.json +359 -0
- package/docs/evaluation/live-screening-2026-10-17/audit.json +143 -0
- package/docs/evaluation/live-screening-2026-10-17/integrity.json +148 -0
- package/docs/evaluation/live-screening-2026-10-17/inventory.json +239 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/comparison.json +247 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-1.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-1.diagnostic.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-1.json +98 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.json +104 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.patch +11 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.snapshot/package.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-3.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-3.diagnostic.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-3.json +97 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.json +104 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.patch +11 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.snapshot/package.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-5.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-5.diagnostic.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-5.json +97 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.json +104 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.patch +11 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.snapshot/package.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-7.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-7.json +108 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-8.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-8.diagnostic.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-8.json +116 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/README.md +124 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/ab-proposal.json +135 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/README.md +25 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/approved-decision.json +79 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/token-live-result.json +546 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/README.md +22 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/approved-decision.json +80 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/token-live-result.json +1663 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/README.md +23 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/token-live-result.json +1748 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/README.md +25 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-A/token-live-result.json +3019 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-B/token-live-result.json +2859 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/README.md +67 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r1-pair1-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r1-pair1-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r1-pair1-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r1-pair1-A/token-live-result.json +3019 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r2-pair1-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r2-pair1-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r2-pair1-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r2-pair1-B/token-live-result.json +2981 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r3-pair2-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r3-pair2-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r3-pair2-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r3-pair2-B/token-live-result.json +2887 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r4-pair2-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r4-pair2-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r4-pair2-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r4-pair2-A/token-live-result.json +3189 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r5-pair3-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r5-pair3-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r5-pair3-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r5-pair3-B/token-live-result.json +2929 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r6-pair3-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r6-pair3-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r6-pair3-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r6-pair3-A/token-live-result.json +3085 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r7-pair4-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r7-pair4-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r7-pair4-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r7-pair4-A/token-live-result.json +3019 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r8-pair4-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r8-pair4-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r8-pair4-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r8-pair4-B/token-live-result.json +2925 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/summary-rows.json +338 -0
- package/docs/evaluation/node24-followup-2026-10-17/README.md +55 -0
- package/docs/evaluation/node24-followup-2026-10-17/client-migration-review.json +20 -0
- package/docs/evaluation/node24-followup-2026-10-17/client-registration-migration.json +31 -0
- package/docs/evaluation/node24-followup-2026-10-17/client-registration-verification.json +389 -0
- package/docs/evaluation/node24-followup-2026-10-17/closure-checks.json +33 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-probe.mjs +259 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-report.md +39 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-result-attempt-2.json +49 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-result-attempt-3.json +76 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-result-attempt-4.json +108 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-result.json +12 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-run.mjs +96 -0
- package/docs/evaluation/node24-followup-2026-10-17/download.json +16 -0
- package/docs/evaluation/node24-followup-2026-10-17/extension-summary.json +97 -0
- package/docs/evaluation/node24-followup-2026-10-17/final-review.json +15 -0
- package/docs/evaluation/node24-followup-2026-10-17/install.json +10 -0
- package/docs/evaluation/node24-followup-2026-10-17/integrity.json +204 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-evidence.json +39 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-probe.mjs +277 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-report.md +35 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-19-48-378Z-b378dc9f-9ab8-4349-8892-78af8184f78f.json +151 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-20-22-821Z-85cfcba4-c05e-4c5a-9658-d8d70f5c8d1a.json +223 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-20-54-825Z-fd5d8373-6e29-4197-84bd-2e65251b4db8.json +207 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-21-44-636Z-488698ad-f8bf-4d7e-b85a-615275c32e5d.json +82 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-05-375Z-16f5d77c-32a2-4d0a-905a-e080b392316f.json +94 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-07-471Z-fcbe7c98-fed3-4120-a860-b2e3f9572836.json +63 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-17-638Z-45ec386d-3429-4a7c-a10e-8673c03861f0.json +63 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-22-485Z-1b08e134-667c-4416-8372-cb233939c48b.json +125 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-25-490Z-223fd05e-52f9-4996-88d7-3ec43a6ecdd9.json +125 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-23-42-291Z-f4af1e12-844e-4b2d-a090-9068e7626dd5.json +82 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-24-36-866Z-30770d13-c7ae-4309-921b-5c1b43050adb.json +52 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-25-05-378Z-2a5dffc1-3f3a-433a-823f-6e77964dcaee.json +53 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-25-15-842Z-798946f5-b9a5-4810-8a0c-35be6f40abb3.json +83 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-25-19-099Z-89bd000d-bb51-4e3a-b713-51ff1ff4e38b.json +87 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-runner.mjs +172 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-install.json +121 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-package-lock.json +2321 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-package.json +12 -0
- package/docs/evaluation/node24-followup-2026-10-17/launcher-review.json +17 -0
- package/docs/evaluation/node24-followup-2026-10-17/launcher-switch.json +28 -0
- package/docs/evaluation/node24-followup-2026-10-17/mcp-launcher-test.json +24 -0
- package/docs/evaluation/node24-followup-2026-10-17/migrate-client-node.mjs +129 -0
- package/docs/evaluation/node24-followup-2026-10-17/node-runtime-report.md +127 -0
- package/docs/evaluation/node24-followup-2026-10-17/node24-checks.json +44 -0
- package/docs/evaluation/node24-followup-2026-10-17/pi-launcher-test.json +13 -0
- package/docs/evaluation/node24-followup-2026-10-17/publication-export.json +11 -0
- package/docs/evaluation/node24-followup-2026-10-17/restore-launchers.mjs +26 -0
- package/docs/evaluation/node24-followup-2026-10-17/verify-client-node.mjs +36 -0
- package/docs/evaluation/permission-gates-2026-10-17/README.md +23 -0
- package/docs/evaluation/permission-gates-2026-10-17/attempts.json +53 -0
- package/docs/evaluation/permission-gates-2026-10-17/integrity.json +46 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gate-probe.mjs +132 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gate-worker.mjs +209 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gates-result-final.json +53 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gates-result-verified.json +54 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gates-result.json +53 -0
- package/docs/evaluation/permission-gates-2026-10-17/review.json +19 -0
- package/docs/evaluation/permission-gates-2026-10-17/superseded-initial-receipt.json +40 -0
- package/docs/evaluation/pi-lens-registration-2026-10-19/README.md +90 -0
- package/docs/evaluation/pi-lens-registration-2026-10-19/probe.mjs +126 -0
- package/docs/evaluation/pi-lens-registration-2026-10-19/result.json +1 -0
- package/docs/evaluation/plan-continuation-2026-10-17/README.md +107 -0
- package/docs/evaluation/plan-continuation-2026-10-17/budget.proposed.json +13 -0
- package/docs/evaluation/plan-continuation-2026-10-17/checks.json +1048 -0
- package/docs/evaluation/plan-continuation-2026-10-17/integrity.json +58 -0
- package/docs/evaluation/plan-continuation-2026-10-17/inventory.json +239 -0
- package/docs/evaluation/plan-continuation-2026-10-17/manifest.proposed.json +315 -0
- package/docs/evaluation/plan-continuation-2026-10-17/next-stage-ledger.json +19 -0
- package/docs/evaluation/plan-continuation-2026-10-17/prepare-rescreen.mjs +30 -0
- package/docs/evaluation/plan-continuation-2026-10-17/prior-integrity.json +25 -0
- package/docs/evaluation/plan-continuation-2026-10-17/proposal-validation.json +14 -0
- package/docs/evaluation/plan-continuation-2026-10-17/receipt-contract-update.patch +40 -0
- package/docs/evaluation/plan-continuation-2026-10-17/review.json +8 -0
- package/docs/evaluation/plan-continuation-2026-10-17/source-delta.json +14 -0
- package/docs/evaluation/profile-evaluation.md +297 -0
- package/docs/evaluation/publication-2026-10-17/README.md +88 -0
- package/docs/evaluation/publication-2026-10-17/checks.json +117 -0
- package/docs/evaluation/publication-2026-10-17/integrity.json +21 -0
- package/docs/evaluation/publication-2026-10-17/publication-scan.json +63 -0
- package/docs/evaluation/publication-2026-10-17/review.json +21 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/README.md +16 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/bounded-wait.md +78 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/README.md +151 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-1/claude-projection.json +126 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-2/claude-projection.json +1895 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-3/claude-projection.json +1895 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-4/claude-projection.json +1797 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-5/claude-projection.json +1797 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/worker-usage.md +63 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/README.md +212 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/binding.json +20 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/config-ev-off.json +43 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/config-ev-spool.json +43 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/config-l3.json +39 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/config-pre.json +31 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e-teardown-setup-remove.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-digest-ev-e1.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-leaks.json +131 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-oracle.json +74 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-setup-1-dryrun.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-setup-2-apply.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-setup-3-verify.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-digest-ev-e2l.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-digest-ev-e2s.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-leaks.json +205 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-oracle.json +110 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-digest-ev-e3.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-leaks.json +215 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-oracle.json +79 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-digest-ev-e4a.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-digest-ev-e4b.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-late-a.json +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-late-b.json +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-leaks.json +167 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-oracle.json +70 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-run.json +37 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-digest-ev-e5.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-leaks.json +82 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-oracle.json +60 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-server-env-names.txt +14 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-digest-ev-e1.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-leaks.json +156 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-run.json +37 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-setup-apply.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-teardown-remove.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/final-e-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/kit.sha256 +23 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l2-packed-off.json +1185 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l2-packed-spool.json +1334 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l2-wt-off.json +1185 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l2-wt-spool.json +1334 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-digest-cc-analysis.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-leaks.json +80 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-oracle.json +61 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-leaks.json +80 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-oracle-stage1.json +34 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-oracle-stage2.json +35 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-snapshot-stage1.txt +4 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-snapshot-stage2.txt +5 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-digest-cc-abort.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-leaks.json +82 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-oracle-flow.json +61 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-oracle-late.json +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-controller-skill-remove.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-controller-skill-setup.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-digest-cx-analysis.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-leaks.json +93 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-oracle.json +61 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-leaks.json +93 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-oracle-stage1.json +34 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-oracle-stage2.json +35 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-snapshot-stage1.txt +4 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-snapshot-stage2.txt +5 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-digest-cx-abort.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-leaks.json +95 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-oracle-flow.json +61 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-oracle-late.json +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-digest-pre-analysis.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-digest-pre-code.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-leaks.json +86 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-oracle.json +39 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-digest-pre-analysis.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-digest-pre-code.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-leaks.json +47 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-oracle.json +39 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/regdigest-after-cc.json +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/regdigest-after-cx.json +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/regdigest-after-e.json +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/regdigest-before.json +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-control-apply.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-control-dryrun.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-provision-apply-attempt1.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-provision-apply-attempt2.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-provision-dryrun.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-writer-verify.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2-leaks.json +130 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2-oracle.txt +14 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2b-oracle.txt +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2c-oracle.txt +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2d-oracle.txt +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2r-leaks.json +130 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2r-oracle.txt +3 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2r-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w3-collect.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w3-finish.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w3r-collect.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w3r-finish.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w4-remove.json +1 -0
- package/docs/evaluation/subagent-probe-2026-10-26/README.md +132 -0
- package/docs/evaluation/subagent-probe-2026-10-26/results/K7.json +463 -0
- package/docs/evaluation/subagent-probe-2026-10-26/results/summary.json +50 -0
- package/docs/evaluation/test-coverage-2026-10-17.json +483 -0
- package/docs/evaluation/test-coverage-review-2026-10-17.json +22 -0
- package/docs/evaluation/test-coverage-verification-2026-10-17.json +31 -0
- package/docs/evaluation/token-footprint-2026-10-17/README.md +297 -0
- package/docs/evaluation/token-footprint-2026-10-17/baseline.json +25871 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/README.md +24 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/baseline.json +30346 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/client-projection.json +2538 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/live-approval/budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/live-approval/decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/live-approval/manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/live-package.json +785 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/measurement.json +37956 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/summary.json +119 -0
- package/docs/evaluation/token-footprint-2026-10-17/checks-final.json +273 -0
- package/docs/evaluation/token-footprint-2026-10-17/checks.json +190 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/README.md +25 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/attempt-4.json +2274 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/pilot-1.json +77 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/pilot-2.json +81 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/pilot-3.json +121 -0
- package/docs/evaluation/token-footprint-2026-10-17/current-calibration/baseline.json +30346 -0
- package/docs/evaluation/token-footprint-2026-10-17/current-calibration/measurement.json +37956 -0
- package/docs/evaluation/token-footprint-2026-10-17/current-calibration/summary.json +119 -0
- package/docs/evaluation/token-footprint-2026-10-17/current-client-projection.json +2538 -0
- package/docs/evaluation/token-footprint-2026-10-17/follow-up.md +76 -0
- package/docs/evaluation/token-footprint-2026-10-17/integrity.json +171 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-approval/README.md +36 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-approval/budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-approval/decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-approval/manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-package.json +795 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-proposal.json +427 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/README.md +75 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-1/approved-budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-1/approved-decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-1/approved-manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-1/token-live-result.json +837 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-2/approved-budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-2/approved-decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-2/approved-manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-2/token-live-result.json +985 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-3/approved-budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-3/approved-decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-3/approved-manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-3/token-live-result.json +3055 -0
- package/docs/evaluation/token-footprint-2026-10-17/measurement.json +32476 -0
- package/docs/evaluation/token-footprint-2026-10-17/prior-calibration/README.md +20 -0
- package/docs/evaluation/token-footprint-2026-10-17/prior-calibration/integrity.json +40 -0
- package/docs/evaluation/token-footprint-2026-10-17/summary.json +119 -0
- package/docs/evaluation/tool-definitions-2026-10-18/README.md +204 -0
- package/docs/evaluation/tool-definitions-2026-10-18/codex-projection/after/client-projection.json +2853 -0
- package/docs/evaluation/tool-definitions-2026-10-18/codex-projection/before/client-projection.json +2853 -0
- package/docs/evaluation/tool-definitions-2026-10-18/compare-validation.mjs +64 -0
- package/docs/evaluation/tool-definitions-2026-10-18/diff-validation.mjs +13 -0
- package/docs/evaluation/tool-definitions-2026-10-18/measure-wire.mjs +31 -0
- package/docs/evaluation/worker-system-prompt-2026-10-26/README.md +95 -0
- package/docs/evaluation/worker-system-prompt-2026-10-26/probe.mjs +155 -0
- package/docs/execution-modes.md +388 -0
- package/docs/installation.md +246 -12
- package/docs/isolation-setup.md +258 -0
- package/docs/macos-setup-design.md +2 -2
- package/docs/pi-extensions-design.md +71 -16
- package/docs/releasing.md +12 -6
- package/docs/reviews/2026-10-18-adr-0008-decision-brief.md +53 -0
- package/docs/roadmap.md +320 -9
- package/docs/session-mcp.md +5 -1
- package/docs/skills.md +23 -0
- package/docs/sprints/2026-10-15-s4-decision.md +73 -4
- package/docs/sprints/2026-10-17-token-footprint.md +130 -0
- package/docs/sprints/2026-10-18-s5-maintenance-orchestration.md +202 -0
- package/docs/sprints/2026-10-21-s6-ledger-event-bridge.md +120 -0
- package/docs/sprints/2026-10-24-s7-stabilization-live-acceptance.md +173 -0
- package/docs/sprints/2026-10-24-s8-writer-migration.md +235 -0
- package/docs/sprints/2026-10-26-s10-orchestration-reliability.md +250 -0
- package/docs/sprints/2026-10-26-s11-orchestration-gaps.md +173 -0
- package/docs/threat-model.md +37 -6
- package/docs/tool-contracts.md +91 -9
- package/package.json +17 -11
- package/scripts/isolation-acceptance.mjs +709 -0
- package/scripts/isolation-probe.cjs +213 -0
- package/skills/pi-session-implementation/SKILL.md +13 -3
- package/skills/pi-session-orchestration/SKILL.md +50 -13
- package/skills/pi-session-orchestration/references/start-errors.md +12 -0
- package/skills/pi-session-review/SKILL.md +13 -5
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Transport } from "@modelcontextprotocol/client";
|
|
2
|
+
/** A launcher is a lease guardian: EOF requests cleanup; killing it would break that contract. */
|
|
3
|
+
/** A frame carries a result twice (text content and structured content); 2 MiB covers both at the relay's size bound. */
|
|
4
|
+
export declare class ChildStdioTransport implements Transport {
|
|
5
|
+
private readonly command;
|
|
6
|
+
private readonly env;
|
|
7
|
+
private readonly args;
|
|
8
|
+
onclose: Transport["onclose"];
|
|
9
|
+
onerror: Transport["onerror"];
|
|
10
|
+
onmessage: Transport["onmessage"];
|
|
11
|
+
private child?;
|
|
12
|
+
private closed;
|
|
13
|
+
private started;
|
|
14
|
+
private readonly buffer;
|
|
15
|
+
private pending;
|
|
16
|
+
constructor(command: string, env: Record<string, string>, args?: readonly string[]);
|
|
17
|
+
start(): Promise<void>;
|
|
18
|
+
send(message: Parameters<Transport["send"]>[0]): Promise<void>;
|
|
19
|
+
close(): Promise<void>;
|
|
20
|
+
private finish;
|
|
21
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { ReadBuffer, serializeMessage } from "@modelcontextprotocol/client";
|
|
3
|
+
/** A launcher is a lease guardian: EOF requests cleanup; killing it would break that contract. */
|
|
4
|
+
/** A frame carries a result twice (text content and structured content); 2 MiB covers both at the relay's size bound. */
|
|
5
|
+
export class ChildStdioTransport {
|
|
6
|
+
command;
|
|
7
|
+
env;
|
|
8
|
+
args;
|
|
9
|
+
onclose;
|
|
10
|
+
onerror;
|
|
11
|
+
onmessage;
|
|
12
|
+
child;
|
|
13
|
+
closed = false;
|
|
14
|
+
started = false;
|
|
15
|
+
buffer = new ReadBuffer({ maxBufferSize: 2_097_152 });
|
|
16
|
+
pending = Buffer.alloc(0);
|
|
17
|
+
constructor(command, env, args = []) {
|
|
18
|
+
this.command = command;
|
|
19
|
+
this.env = env;
|
|
20
|
+
this.args = args;
|
|
21
|
+
}
|
|
22
|
+
async start() {
|
|
23
|
+
if (this.started || this.closed)
|
|
24
|
+
throw new Error("Transport cannot start");
|
|
25
|
+
this.started = true;
|
|
26
|
+
const child = this.child = spawn(this.command, [...this.args], { detached: true, stdio: ["pipe", "pipe", "pipe"], env: { ...this.env }, shell: false });
|
|
27
|
+
child.stderr.on("data", () => undefined);
|
|
28
|
+
child.stdin.on("error", () => this.onerror?.(new Error("Writer input failed")));
|
|
29
|
+
child.on("error", () => this.onerror?.(new Error("Writer process failed")));
|
|
30
|
+
child.on("close", () => this.finish());
|
|
31
|
+
child.stdout.on("data", (chunk) => {
|
|
32
|
+
if (this.closed)
|
|
33
|
+
return;
|
|
34
|
+
try {
|
|
35
|
+
this.pending = Buffer.concat([this.pending, chunk]);
|
|
36
|
+
let newline;
|
|
37
|
+
while ((newline = this.pending.indexOf(10)) !== -1) {
|
|
38
|
+
if (newline > 2_097_152)
|
|
39
|
+
throw new Error();
|
|
40
|
+
const line = this.pending.subarray(0, newline + 1);
|
|
41
|
+
this.pending = this.pending.subarray(newline + 1);
|
|
42
|
+
// ReadBuffer silently skips JSON syntax errors; detect them before decoding.
|
|
43
|
+
JSON.parse(line.toString("utf8"));
|
|
44
|
+
this.buffer.append(line);
|
|
45
|
+
const message = this.buffer.readMessage();
|
|
46
|
+
if (message === null)
|
|
47
|
+
throw new Error();
|
|
48
|
+
this.onmessage?.(message);
|
|
49
|
+
}
|
|
50
|
+
if (this.pending.length > 2_097_152)
|
|
51
|
+
throw new Error();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
this.onerror?.(new Error("Invalid writer frame"));
|
|
55
|
+
void this.close();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
await new Promise((resolve, reject) => {
|
|
59
|
+
child.once("spawn", resolve);
|
|
60
|
+
child.once("error", () => reject(new Error("Writer spawn failed")));
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async send(message) {
|
|
64
|
+
if (this.closed || !this.child)
|
|
65
|
+
throw new Error("Writer transport is closed");
|
|
66
|
+
await new Promise((resolve, reject) => {
|
|
67
|
+
this.child.stdin.write(serializeMessage(message), error => error ? reject(new Error("Writer send failed")) : resolve());
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
async close() {
|
|
71
|
+
if (this.closed)
|
|
72
|
+
return;
|
|
73
|
+
this.child?.stdin.end();
|
|
74
|
+
// Keep draining diagnostics/output while the guardian cleans up, without keeping the host alive.
|
|
75
|
+
this.child?.unref();
|
|
76
|
+
this.child?.stdout?.unref?.();
|
|
77
|
+
this.child?.stderr?.unref?.();
|
|
78
|
+
this.finish();
|
|
79
|
+
}
|
|
80
|
+
finish() {
|
|
81
|
+
if (this.closed)
|
|
82
|
+
return;
|
|
83
|
+
this.closed = true;
|
|
84
|
+
this.buffer.clear();
|
|
85
|
+
this.pending = Buffer.alloc(0);
|
|
86
|
+
this.onclose?.();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { safeRunner, versionFromOutput } from "./command.js";
|
|
1
|
+
import { CLAUDE_DID_YOU_MEAN_SUFFIX, safeRunner, versionFromOutput } from "./command.js";
|
|
2
2
|
const NAME = "pi-session-mcp";
|
|
3
|
+
const ABSENT = new RegExp(`^No MCP server named "pi-session-mcp"\\.(?:(?:\\s+Configured servers:.*)|(?:\\s+Run \u0060claude mcp add\u0060 to add one\\.)|(?:${CLAUDE_DID_YOU_MEAN_SUFFIX}))?\\s*$`, "i");
|
|
3
4
|
function scopeArgs(scope) { return ["-s", scope]; }
|
|
4
5
|
function inspectText(text, intent) {
|
|
5
6
|
const bounded = text.slice(0, 32_768);
|
|
@@ -23,7 +24,7 @@ export function createClaudeCodeAdapter(input) {
|
|
|
23
24
|
return {
|
|
24
25
|
client: "claude-code",
|
|
25
26
|
async discover() { const versionResult = await runner.run("claude", ["--version"]); const v = versionResult.exitCode === 0 ? versionFromOutput("claude-code", versionResult.stdout) : undefined; const probe = await runner.run("claude", ["mcp", "--help"]); const supported = probe.exitCode === 0 && ["get", "add", "remove"].every((command) => new RegExp(`\\b${command}\\b`).test(probe.stdout)); return { client: "claude-code", version: v ?? "unknown", supportsJson: false, supportsAdd: supported, supportsRemove: supported, scopes: supported ? ["user", "project", "local"] : [] }; },
|
|
26
|
-
async inspect(scope, intent) { const r = await runner.run("claude", ["mcp", "get", NAME]); const absent =
|
|
27
|
+
async inspect(scope, intent) { const r = await runner.run("claude", ["mcp", "get", NAME]); const absent = ABSENT.test(r.stderr.trim()); const x = r.exitCode === 0 ? inspectText(r.stdout, intent) : absent ? { state: "absent", expected: false } : { state: "unsupported", expected: false }; return { client: "claude-code", scope, name: NAME, state: x.state, command: x.expected ? "node" : "unknown", hasExpectedConfig: x.expected, supported: x.state !== "unsupported" }; },
|
|
27
28
|
async plan(intent) { const r = await this.inspect(intent.scope, intent); return { client: "claude-code", scope: intent.scope, state: r.state, operation: r.state === "absent" ? "add" : "none", reason: r.state === "absent" ? "missing" : r.state === "equivalent" ? "already_registered" : r.state }; },
|
|
28
29
|
async add(intent, execution) { const r = await (execution?.runner ?? runner).run("claude", ["mcp", "add", NAME, "-s", intent.scope, "-e", `PI_SESSION_MCP_CONFIG=${intent.configPath}`, "--", intent.nodePath, intent.entryPath], execution?.signal); if (r.exitCode !== 0)
|
|
29
30
|
throw new Error("client registration failed"); },
|
|
@@ -7,6 +7,14 @@ export declare const MAX_OUTPUT_BYTES = 32768;
|
|
|
7
7
|
* on any other output. The version is reported for information only.
|
|
8
8
|
*/
|
|
9
9
|
export type ClientName = "codex" | "claude-code";
|
|
10
|
+
/**
|
|
11
|
+
* Regular-expression source of the suggestion suffix that Claude Code 2.1.310 appends to the absent message
|
|
12
|
+
* when a similar server name exists. Claude suggests from all its servers, including plugin servers
|
|
13
|
+
* (`plugin:<plugin>:<server>`) and connectors with spaces or dots, so the suggestion is any quoted text
|
|
14
|
+
* without a quote or line break, at most 256 characters. The message head pins the queried name exactly;
|
|
15
|
+
* the suggestion never decides which registration is absent.
|
|
16
|
+
*/
|
|
17
|
+
export declare const CLAUDE_DID_YOU_MEAN_SUFFIX: string;
|
|
10
18
|
export declare function boundedResult(result: CommandResult): CommandResult;
|
|
11
19
|
export declare function versionFromOutput(client: ClientName, output: string): string | undefined;
|
|
12
20
|
export declare function safeRunner(run: CommandRunner["run"]): CommandRunner;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
export const DEFAULT_COMMAND_TIMEOUT_MS = 5_000;
|
|
2
2
|
export const MAX_OUTPUT_BYTES = 32_768;
|
|
3
|
+
/**
|
|
4
|
+
* Regular-expression source of the suggestion suffix that Claude Code 2.1.310 appends to the absent message
|
|
5
|
+
* when a similar server name exists. Claude suggests from all its servers, including plugin servers
|
|
6
|
+
* (`plugin:<plugin>:<server>`) and connectors with spaces or dots, so the suggestion is any quoted text
|
|
7
|
+
* without a quote or line break, at most 256 characters. The message head pins the queried name exactly;
|
|
8
|
+
* the suggestion never decides which registration is absent.
|
|
9
|
+
*/
|
|
10
|
+
export const CLAUDE_DID_YOU_MEAN_SUFFIX = String.raw `\s+Did you mean "[^"\r\n]{1,256}"\? Run \u0060claude mcp list\u0060 to see all\.`;
|
|
3
11
|
export function boundedResult(result) {
|
|
4
12
|
const truncate = (value) => {
|
|
5
13
|
const bytes = Buffer.from(value, "utf8");
|
|
@@ -21,5 +29,5 @@ export function versionFromOutput(client, output) {
|
|
|
21
29
|
return match?.[1];
|
|
22
30
|
}
|
|
23
31
|
export function safeRunner(run) {
|
|
24
|
-
return { run: async (command, args, signal) => boundedResult(await run(command, args, signal)) };
|
|
32
|
+
return { run: async (command, args, signal, options) => boundedResult(await run(command, args, signal, options)) };
|
|
25
33
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
export declare const MCP_VERIFY_TIMEOUT_MS = 5000;
|
|
2
2
|
export declare const MCP_MAX_FRAME_BYTES = 65536;
|
|
3
|
+
/**
|
|
4
|
+
* Upper bound for stopping the launched server once verification has ended. It starts when the
|
|
5
|
+
* exchange ends, so a verification takes at most `timeoutMs` plus `min(timeoutMs, this)`. It covers
|
|
6
|
+
* the launchers' usual worst-case `kill()` (shutdown grace plus about 2 s of cleanup polling); a slower
|
|
7
|
+
* `kill()`, possible with slow `/bin/ps` calls on macOS, reports `failed`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MCP_KILL_BUDGET_MS = 5000;
|
|
3
10
|
export interface McpStdioProcess {
|
|
4
11
|
write(frame: string): void | Promise<void>;
|
|
5
12
|
read(): Promise<string | null>;
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { MAX_PROFILE_EXTENSIONS, parseExtensionSpec } from "../extension-spec.js";
|
|
2
|
+
import { isAcceptableExtensionToolName, MAX_GRANTED_EXTENSION_TOOLS } from "../session-tools.js";
|
|
2
3
|
import { MAX_PROFILE_SKILLS } from "../skill-catalog.js";
|
|
3
4
|
import { PACKAGE_NAME, PACKAGE_VERSION } from "../package-metadata.js";
|
|
4
5
|
export const MCP_VERIFY_TIMEOUT_MS = 5_000;
|
|
5
6
|
export const MCP_MAX_FRAME_BYTES = 65_536;
|
|
7
|
+
/**
|
|
8
|
+
* Upper bound for stopping the launched server once verification has ended. It starts when the
|
|
9
|
+
* exchange ends, so a verification takes at most `timeoutMs` plus `min(timeoutMs, this)`. It covers
|
|
10
|
+
* the launchers' usual worst-case `kill()` (shutdown grace plus about 2 s of cleanup polling); a slower
|
|
11
|
+
* `kill()`, possible with slow `/bin/ps` calls on macOS, reports `failed`.
|
|
12
|
+
*/
|
|
13
|
+
export const MCP_KILL_BUDGET_MS = 5_000;
|
|
6
14
|
const EXPECTED_TOOLS = ["pi_capabilities_get", "pi_session_start", "pi_session_list", "pi_session_get", "pi_session_prompt", "pi_session_abort", "pi_session_close", "pi_turn_get"];
|
|
7
15
|
const EXPECTED_PROTOCOL = "2025-03-26";
|
|
8
16
|
const ALIAS_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/;
|
|
@@ -80,27 +88,33 @@ function validCapabilities(value) {
|
|
|
80
88
|
if (!value || typeof value !== "object")
|
|
81
89
|
return false;
|
|
82
90
|
const x = value;
|
|
83
|
-
if (x.ok !== true || !exactKeys(x, ["ok", "server", "configuration", "workspaces", "executionProfiles"]) || !x.server || typeof x.server !== "object")
|
|
91
|
+
if (x.ok !== true || !exactKeys(x, ["ok", "server", "configuration", "events", "workspaces", "executionProfiles"]) || !x.server || typeof x.server !== "object")
|
|
84
92
|
return false;
|
|
85
93
|
const info = x.server;
|
|
86
94
|
if (!exactKeys(info, ["name", "version"]) || info.name !== PACKAGE_NAME || info.version !== PACKAGE_VERSION || !Array.isArray(x.workspaces) || !Array.isArray(x.executionProfiles))
|
|
87
95
|
return false;
|
|
88
96
|
if (!validConfiguration(x.configuration))
|
|
89
97
|
return false;
|
|
98
|
+
if (!x.events || typeof x.events !== "object")
|
|
99
|
+
return false;
|
|
100
|
+
const events = x.events;
|
|
101
|
+
if (!exactKeys(events, ["delivery"]) || (events.delivery !== "spool" && events.delivery !== "off"))
|
|
102
|
+
return false;
|
|
90
103
|
const workspaces = x.workspaces;
|
|
91
104
|
const profiles = x.executionProfiles;
|
|
92
105
|
if (!workspaces.every((workspace) => {
|
|
93
106
|
if (!workspace || typeof workspace !== "object")
|
|
94
107
|
return false;
|
|
95
108
|
const record = workspace;
|
|
96
|
-
return exactKeys(record, ["alias"]) && typeof record.alias === "string" && ALIAS_PATTERN.test(record.alias)
|
|
109
|
+
return exactKeys(record, ["alias", "mode"]) && typeof record.alias === "string" && ALIAS_PATTERN.test(record.alias)
|
|
110
|
+
&& typeof record.mode === "string" && ["unset", "host", "container", "read-only"].includes(record.mode);
|
|
97
111
|
}))
|
|
98
112
|
return false;
|
|
99
113
|
if (!profiles.every((profile) => {
|
|
100
114
|
if (!profile || typeof profile !== "object")
|
|
101
115
|
return false;
|
|
102
116
|
const record = profile;
|
|
103
|
-
return exactKeys(record, ["alias", "default", "permissionProfile", "provider", "model", "thinkingLevel", "extensions", "skills"])
|
|
117
|
+
return exactKeys(record, ["alias", "default", "permissionProfile", "provider", "model", "thinkingLevel", "extensions", "grantedExtensionTools", "skills"])
|
|
104
118
|
&& typeof record.alias === "string" && ALIAS_PATTERN.test(record.alias)
|
|
105
119
|
&& typeof record.default === "boolean"
|
|
106
120
|
&& (record.permissionProfile === "read-only" || record.permissionProfile === "coding")
|
|
@@ -109,6 +123,9 @@ function validCapabilities(value) {
|
|
|
109
123
|
&& typeof record.thinkingLevel === "string" && ["off", "minimal", "low", "medium", "high", "xhigh", "max"].includes(record.thinkingLevel)
|
|
110
124
|
&& Array.isArray(record.extensions) && record.extensions.length <= MAX_PROFILE_EXTENSIONS
|
|
111
125
|
&& record.extensions.every((spec) => typeof spec === "string" && parseExtensionSpec(spec) !== undefined)
|
|
126
|
+
&& Array.isArray(record.grantedExtensionTools) && record.grantedExtensionTools.length <= MAX_GRANTED_EXTENSION_TOOLS
|
|
127
|
+
&& record.grantedExtensionTools.every((name) => typeof name === "string" && isAcceptableExtensionToolName(name))
|
|
128
|
+
&& new Set(record.grantedExtensionTools).size === record.grantedExtensionTools.length
|
|
112
129
|
&& Array.isArray(record.skills) && record.skills.length <= MAX_PROFILE_SKILLS
|
|
113
130
|
&& record.skills.every((skill) => typeof skill === "string" && ALIAS_PATTERN.test(skill))
|
|
114
131
|
&& new Set(record.skills).size === record.skills.length;
|
|
@@ -171,7 +188,7 @@ export async function verifyMcpCapabilities(options) {
|
|
|
171
188
|
controller.abort();
|
|
172
189
|
if (process) {
|
|
173
190
|
try {
|
|
174
|
-
await beforeDeadline(Promise.resolve(process.kill()), Date.now() + Math.min(timeout,
|
|
191
|
+
await beforeDeadline(Promise.resolve(process.kill()), Date.now() + Math.min(timeout, MCP_KILL_BUDGET_MS));
|
|
175
192
|
}
|
|
176
193
|
catch {
|
|
177
194
|
return { ...outcome, status: "failed" };
|
|
@@ -8,7 +8,11 @@ export interface CommandResult {
|
|
|
8
8
|
readonly stderr: string;
|
|
9
9
|
}
|
|
10
10
|
export interface CommandRunner {
|
|
11
|
-
run(command: string, args: readonly string[], signal?: AbortSignal
|
|
11
|
+
run(command: string, args: readonly string[], signal?: AbortSignal, options?: {
|
|
12
|
+
cwd?: string;
|
|
13
|
+
env?: NodeJS.ProcessEnv;
|
|
14
|
+
inheritFds?: readonly number[];
|
|
15
|
+
}): Promise<CommandResult>;
|
|
12
16
|
}
|
|
13
17
|
export interface CommandExecution {
|
|
14
18
|
readonly signal?: AbortSignal;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ClientName, CommandExecution, CommandRunner, RegistrationState } from "./types.js";
|
|
2
|
+
import type { OwnershipStore } from "../setup-ownership.js";
|
|
3
|
+
export interface WriterRegistrationIntent {
|
|
4
|
+
readonly client: ClientName;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly wrapperPath: string;
|
|
7
|
+
readonly projectDir: string;
|
|
8
|
+
}
|
|
9
|
+
export interface WriterRegistrationAdapter {
|
|
10
|
+
inspect(intent: WriterRegistrationIntent): Promise<RegistrationState>;
|
|
11
|
+
add(intent: WriterRegistrationIntent, execution?: CommandExecution): Promise<void>;
|
|
12
|
+
remove(intent: WriterRegistrationIntent, execution?: CommandExecution): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createWriterRegistrationAdapter(input: CommandRunner): WriterRegistrationAdapter;
|
|
15
|
+
export declare function registerWriter(ownership: OwnershipStore, adapter: WriterRegistrationAdapter, intent: WriterRegistrationIntent): Promise<void>;
|
|
16
|
+
export declare function unregisterWriter(ownership: OwnershipStore, adapter: WriterRegistrationAdapter, intent: WriterRegistrationIntent): Promise<void>;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { isAbsolute } from "node:path";
|
|
4
|
+
import { CLAUDE_DID_YOU_MEAN_SUFFIX, safeRunner } from "./command.js";
|
|
5
|
+
import { WRITER_NAME_PATTERN } from "../writer-state.js";
|
|
6
|
+
import { wrapperDigest } from "../writer-wrapper.js";
|
|
7
|
+
function validate(intent) {
|
|
8
|
+
if (!["claude-code", "codex"].includes(intent.client) || !intent.name.startsWith("pi-coding-") ||
|
|
9
|
+
!WRITER_NAME_PATTERN.test(intent.name.slice("pi-coding-".length)) || !isAbsolute(intent.wrapperPath) ||
|
|
10
|
+
!isAbsolute(intent.projectDir) || intent.projectDir.length > 4_096 || /[\0\r\n]/.test(intent.wrapperPath + intent.projectDir)) {
|
|
11
|
+
throw new Error("writer_registration_invalid");
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function claudeState(text, intent) {
|
|
15
|
+
const lines = text.split(/\r?\n/);
|
|
16
|
+
if (lines[0]?.trim() !== `${intent.name}:`)
|
|
17
|
+
return "unsupported";
|
|
18
|
+
const field = (name) => new RegExp(`^\\s*${name}\\s*:[ \\t]*(.*)$`, "im").exec(text)?.[1]?.trim();
|
|
19
|
+
const scope = field("scope");
|
|
20
|
+
const type = field("type");
|
|
21
|
+
const command = field("command");
|
|
22
|
+
if (!scope || !type || !command)
|
|
23
|
+
return "unsupported";
|
|
24
|
+
// Any nonempty inline environment or indented environment entry is divergent.
|
|
25
|
+
const environment = /(?:^|\n)[ \t]*environment[ \t]*:[ \t]*(\S[^\n]*)/i.test(text) ||
|
|
26
|
+
/(?:^|\n)[ \t]*environment[ \t]*:[ \t]*\r?\n(?:[ \t]*\r?\n)*[ \t]{4,}\S/i.test(text);
|
|
27
|
+
return /^local config\b/i.test(scope) && type === "stdio" && command === intent.wrapperPath &&
|
|
28
|
+
!field("args?") && !environment ? "equivalent" : "divergent";
|
|
29
|
+
}
|
|
30
|
+
function codexState(text, intent) {
|
|
31
|
+
try {
|
|
32
|
+
const value = JSON.parse(text);
|
|
33
|
+
if (!value || typeof value !== "object" || !value.transport || typeof value.transport !== "object")
|
|
34
|
+
return "unsupported";
|
|
35
|
+
const t = value.transport;
|
|
36
|
+
const emptyEnvironment = t.env === null || (typeof t.env === "object" && !Array.isArray(t.env) && Object.keys(t.env).length === 0);
|
|
37
|
+
return value.name === intent.name && value.enabled === true && t.type === "stdio" && t.command === intent.wrapperPath &&
|
|
38
|
+
Array.isArray(t.args) && t.args.length === 0 && emptyEnvironment && Array.isArray(t.env_vars) && t.env_vars.length === 0 &&
|
|
39
|
+
t.cwd === null ? "equivalent" : "divergent";
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return "unsupported";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function createWriterRegistrationAdapter(input) {
|
|
46
|
+
const runner = safeRunner(input.run);
|
|
47
|
+
const options = (intent) => intent.client === "claude-code" ? { cwd: intent.projectDir } : undefined;
|
|
48
|
+
return {
|
|
49
|
+
async inspect(intent) {
|
|
50
|
+
validate(intent);
|
|
51
|
+
const claude = intent.client === "claude-code";
|
|
52
|
+
const result = await runner.run(claude ? "claude" : "codex", ["mcp", "get", intent.name, ...(claude ? [] : ["--json"])], undefined, options(intent));
|
|
53
|
+
if (result.exitCode === 0)
|
|
54
|
+
return claude ? claudeState(result.stdout, intent) : codexState(result.stdout, intent);
|
|
55
|
+
// Interpolate only a validated, regex-escaped registration name.
|
|
56
|
+
const name = intent.name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
57
|
+
const absent = claude
|
|
58
|
+
? new RegExp(`^No MCP server named "${name}"\\.(?:(?:\\s+Configured servers:.*)|(?:\\s+Run \u0060claude mcp add\u0060 to add one\\.)|(?:${CLAUDE_DID_YOU_MEAN_SUFFIX}))?\\s*$`, "i")
|
|
59
|
+
: new RegExp(`^Error: No MCP server named '${name}' found\\.\\s*$`, "i");
|
|
60
|
+
return absent.test(result.stderr.trim()) ? "absent" : "unsupported";
|
|
61
|
+
},
|
|
62
|
+
async add(intent, execution) {
|
|
63
|
+
validate(intent);
|
|
64
|
+
const claude = intent.client === "claude-code";
|
|
65
|
+
const result = await (execution?.runner ?? runner).run(claude ? "claude" : "codex", ["mcp", "add", intent.name, ...(claude ? ["-s", "local"] : []), "--", intent.wrapperPath], execution?.signal, options(intent));
|
|
66
|
+
if (result.exitCode !== 0)
|
|
67
|
+
throw new Error("client_registration_failed");
|
|
68
|
+
},
|
|
69
|
+
async remove(intent, execution) {
|
|
70
|
+
validate(intent);
|
|
71
|
+
const claude = intent.client === "claude-code";
|
|
72
|
+
const result = await (execution?.runner ?? runner).run(claude ? "claude" : "codex", ["mcp", "remove", intent.name, ...(claude ? ["-s", "local"] : [])], execution?.signal, options(intent));
|
|
73
|
+
if (result.exitCode !== 0)
|
|
74
|
+
throw new Error("client_removal_failed");
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async function fingerprint(intent, owned = false) {
|
|
79
|
+
let text;
|
|
80
|
+
try {
|
|
81
|
+
text = await readFile(intent.wrapperPath, "utf8");
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
throw Object.assign(new Error(owned ? "ownership_diverged" : "release_binding_mismatch"), { code: owned ? "ownership_diverged" : "release_binding_mismatch" });
|
|
85
|
+
}
|
|
86
|
+
return createHash("sha256").update(JSON.stringify({ wrapper: intent.wrapperPath, digest: wrapperDigest(text) })).digest("hex");
|
|
87
|
+
}
|
|
88
|
+
const targetFor = (intent) => ({ client: intent.client, scope: intent.client === "codex" ? "user" : "local", alias: intent.name });
|
|
89
|
+
function execution(access) {
|
|
90
|
+
const signal = access.signal?.();
|
|
91
|
+
return { ...(signal ? { signal } : {}), ...(access.mutationRunner ? { runner: access.mutationRunner } : {}) };
|
|
92
|
+
}
|
|
93
|
+
export async function registerWriter(ownership, adapter, intent) {
|
|
94
|
+
validate(intent);
|
|
95
|
+
await ownership.transaction(async (access) => {
|
|
96
|
+
access.assertHealthy?.();
|
|
97
|
+
const target = targetFor(intent);
|
|
98
|
+
const owned = await access.get(target);
|
|
99
|
+
const expected = await fingerprint(intent, !!owned);
|
|
100
|
+
const current = await adapter.inspect(intent);
|
|
101
|
+
access.assertHealthy?.();
|
|
102
|
+
if (owned && owned.fingerprint !== expected)
|
|
103
|
+
throw new Error("release_binding_mismatch");
|
|
104
|
+
if (current === "absent" && owned?.phase === "owned")
|
|
105
|
+
throw new Error("ownership_diverged");
|
|
106
|
+
if (current === "equivalent") {
|
|
107
|
+
if (await fingerprint(intent, !!owned) !== expected)
|
|
108
|
+
throw new Error("registration_fingerprint_mismatch");
|
|
109
|
+
access.assertHealthy?.();
|
|
110
|
+
if (owned?.phase === "pending") {
|
|
111
|
+
await access.put({ ...owned, phase: "owned" });
|
|
112
|
+
access.assertHealthy?.();
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (current !== "absent")
|
|
117
|
+
throw new Error(current === "divergent" ? "divergence_requires_replacement" : "client_unsupported");
|
|
118
|
+
const pending = { target, fingerprint: expected, previous: "absent", phase: "pending", transactionId: randomUUID() };
|
|
119
|
+
access.assertHealthy?.();
|
|
120
|
+
await access.put(pending);
|
|
121
|
+
access.assertHealthy?.();
|
|
122
|
+
await adapter.add(intent, execution(access));
|
|
123
|
+
access.assertHealthy?.();
|
|
124
|
+
const after = await adapter.inspect(intent);
|
|
125
|
+
access.assertHealthy?.();
|
|
126
|
+
if (after !== "equivalent" || await fingerprint(intent, true) !== expected)
|
|
127
|
+
throw new Error("post_apply_mismatch");
|
|
128
|
+
await access.put({ ...pending, phase: "owned" });
|
|
129
|
+
access.assertHealthy?.();
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
export async function unregisterWriter(ownership, adapter, intent) {
|
|
133
|
+
validate(intent);
|
|
134
|
+
await ownership.transaction(async (access) => {
|
|
135
|
+
access.assertHealthy?.();
|
|
136
|
+
const target = targetFor(intent);
|
|
137
|
+
const owned = await access.get(target);
|
|
138
|
+
if (!owned)
|
|
139
|
+
throw new Error("ownership_unavailable");
|
|
140
|
+
const current = await adapter.inspect(intent);
|
|
141
|
+
access.assertHealthy?.();
|
|
142
|
+
if (!["equivalent", "absent"].includes(current) || (current === "equivalent" && await fingerprint(intent, true) !== owned.fingerprint))
|
|
143
|
+
throw new Error("ownership_diverged");
|
|
144
|
+
if (current === "equivalent") {
|
|
145
|
+
await adapter.remove(intent, execution(access));
|
|
146
|
+
access.assertHealthy?.();
|
|
147
|
+
const after = await adapter.inspect(intent);
|
|
148
|
+
access.assertHealthy?.();
|
|
149
|
+
if (after !== "absent")
|
|
150
|
+
throw new Error("post_remove_mismatch");
|
|
151
|
+
}
|
|
152
|
+
access.assertHealthy?.();
|
|
153
|
+
await access.delete(target);
|
|
154
|
+
access.assertHealthy?.();
|
|
155
|
+
});
|
|
156
|
+
}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { type ConfiguredExecutionProfile } from "./execution-profile.js";
|
|
3
|
-
|
|
3
|
+
import { type WorkspaceModeEntry } from "./execution-modes.js";
|
|
4
|
+
export type ConfigErrorCode = "config_path_required" | "invalid_execution_profile_config" | "invalid_thinking_level" | "invalid_execution_modes" | "invalid_event_delivery";
|
|
4
5
|
export declare class ConfigError extends Error {
|
|
5
6
|
readonly code: ConfigErrorCode;
|
|
6
7
|
constructor(code: ConfigErrorCode);
|
|
7
8
|
}
|
|
8
9
|
export declare const configSchema: z.ZodObject<{
|
|
10
|
+
events: z.ZodOptional<z.ZodObject<{
|
|
11
|
+
delivery: z.ZodEnum<{
|
|
12
|
+
off: "off";
|
|
13
|
+
spool: "spool";
|
|
14
|
+
}>;
|
|
15
|
+
}, z.core.$strict>>;
|
|
9
16
|
workspaces: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
10
17
|
skillCatalog: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
11
18
|
executionProfiles: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
@@ -27,6 +34,7 @@ export declare const configSchema: z.ZodObject<{
|
|
|
27
34
|
}>;
|
|
28
35
|
mcpServers: z.ZodOptional<z.ZodCustom<Readonly<Record<string, import("./mcp-config.js").McpServerConfig>>, Readonly<Record<string, import("./mcp-config.js").McpServerConfig>>>>;
|
|
29
36
|
extensions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
37
|
+
grantedExtensionTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
30
38
|
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
39
|
}, z.core.$strict>>;
|
|
32
40
|
}, z.core.$strict>;
|
|
@@ -41,9 +49,12 @@ export interface ConfigurationMetadata {
|
|
|
41
49
|
}
|
|
42
50
|
export interface AppConfig {
|
|
43
51
|
readonly workspaces: ReadonlyMap<string, string>;
|
|
52
|
+
readonly workspaceModes: ReadonlyMap<string, WorkspaceModeEntry>;
|
|
44
53
|
readonly executionProfiles: ReadonlyMap<string, ConfiguredExecutionProfile>;
|
|
45
54
|
readonly defaultExecutionProfile: string;
|
|
46
55
|
readonly configuration: ConfigurationMetadata;
|
|
56
|
+
/** Turn-event delivery: `spool` writes content-free event files, `off` (the default) writes nothing. */
|
|
57
|
+
readonly eventDelivery: "spool" | "off";
|
|
47
58
|
/** Absolute skill override directory next to the configuration file. Internal; never projected. */
|
|
48
59
|
readonly skillOverrideDirectory: string;
|
|
49
60
|
}
|
package/dist/config.js
CHANGED
|
@@ -7,6 +7,8 @@ import { isMcpServers, snapshotMcpServers } from "./mcp-config.js";
|
|
|
7
7
|
import { builtinSkillName, isSkillCatalogPath, MAX_PROFILE_SKILLS, MAX_SKILL_CATALOG_ENTRIES } from "./skill-catalog.js";
|
|
8
8
|
import { ALIAS_PATTERN, ImmutableMap, } from "./execution-profile.js";
|
|
9
9
|
import { builtinSkillPath, skillOverrideDirectory } from "./skill-library.js";
|
|
10
|
+
import { loadExecutionModes } from "./execution-modes.js";
|
|
11
|
+
import { isAcceptableExtensionToolName, MAX_GRANTED_EXTENSION_TOOLS, PROFILE_TOOLS } from "./session-tools.js";
|
|
10
12
|
const alias = z.string().regex(ALIAS_PATTERN);
|
|
11
13
|
const permissionProfile = z.enum(["read-only", "coding"]);
|
|
12
14
|
const thinkingLevel = z.enum(["off", "minimal", "low", "medium", "high", "xhigh", "max"]);
|
|
@@ -17,6 +19,7 @@ const profileSchema = z.object({
|
|
|
17
19
|
model: z.string().trim().min(1).max(256), thinkingLevel,
|
|
18
20
|
mcpServers: z.custom((value) => isMcpServers(value)).optional(),
|
|
19
21
|
extensions: z.array(extensionSpec).max(MAX_PROFILE_EXTENSIONS).optional(),
|
|
22
|
+
grantedExtensionTools: z.array(z.string().refine(isAcceptableExtensionToolName)).max(MAX_GRANTED_EXTENSION_TOOLS).optional(),
|
|
20
23
|
skills: z.array(alias).max(MAX_PROFILE_SKILLS).optional(),
|
|
21
24
|
}).strict().superRefine((profile, context) => {
|
|
22
25
|
if (profile.mcpServers !== undefined && !isMcpServers(profile.mcpServers, profile.permissionProfile)) {
|
|
@@ -28,6 +31,21 @@ const profileSchema = z.object({
|
|
|
28
31
|
context.addIssue({ code: "custom", path: ["extensions"], message: "An extension package may appear only once per profile" });
|
|
29
32
|
}
|
|
30
33
|
}
|
|
34
|
+
if (profile.grantedExtensionTools !== undefined) {
|
|
35
|
+
if (profile.permissionProfile !== "read-only") {
|
|
36
|
+
context.addIssue({ code: "custom", path: ["grantedExtensionTools"], message: "Extension tool grants require a read-only profile" });
|
|
37
|
+
}
|
|
38
|
+
if (!profile.extensions?.length) {
|
|
39
|
+
context.addIssue({ code: "custom", path: ["grantedExtensionTools"], message: "Extension tool grants require extensions" });
|
|
40
|
+
}
|
|
41
|
+
if (new Set(profile.grantedExtensionTools).size !== profile.grantedExtensionTools.length) {
|
|
42
|
+
context.addIssue({ code: "custom", path: ["grantedExtensionTools"], message: "An extension tool may be granted only once per profile" });
|
|
43
|
+
}
|
|
44
|
+
const builtins = new Set([...PROFILE_TOOLS.coding, ...PROFILE_TOOLS["read-only"]]);
|
|
45
|
+
if (profile.grantedExtensionTools.some((name) => builtins.has(name))) {
|
|
46
|
+
context.addIssue({ code: "custom", path: ["grantedExtensionTools"], message: "Extension tool grants must not name built-in tools" });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
31
49
|
if (profile.skills !== undefined && new Set(profile.skills).size !== profile.skills.length) {
|
|
32
50
|
context.addIssue({ code: "custom", path: ["skills"], message: "A skill alias may appear only once per profile" });
|
|
33
51
|
}
|
|
@@ -36,6 +54,8 @@ const CONFIG_ERROR_MESSAGES = {
|
|
|
36
54
|
config_path_required: "Configuration path is required",
|
|
37
55
|
invalid_execution_profile_config: "Execution profile configuration is invalid",
|
|
38
56
|
invalid_thinking_level: "Execution profile thinking level is invalid",
|
|
57
|
+
invalid_execution_modes: "Execution modes file is invalid",
|
|
58
|
+
invalid_event_delivery: "Event delivery configuration is invalid",
|
|
39
59
|
};
|
|
40
60
|
export class ConfigError extends Error {
|
|
41
61
|
code;
|
|
@@ -45,7 +65,9 @@ export class ConfigError extends Error {
|
|
|
45
65
|
this.code = code;
|
|
46
66
|
}
|
|
47
67
|
}
|
|
68
|
+
const eventsSchema = z.object({ delivery: z.enum(["spool", "off"]) }).strict();
|
|
48
69
|
export const configSchema = z.object({
|
|
70
|
+
events: eventsSchema.optional(),
|
|
49
71
|
workspaces: z.record(alias, z.string().min(1)),
|
|
50
72
|
skillCatalog: z.record(alias, skillCatalogPath).refine((catalog) => Object.keys(catalog).length <= MAX_SKILL_CATALOG_ENTRIES).optional(),
|
|
51
73
|
executionProfiles: z.record(alias, profileSchema).superRefine((profiles, context) => {
|
|
@@ -114,7 +136,9 @@ export async function loadConfig(path = process.env.PI_SESSION_MCP_CONFIG) {
|
|
|
114
136
|
catch (error) {
|
|
115
137
|
if (error instanceof z.ZodError) {
|
|
116
138
|
const thinkingLevelIssue = error.issues.some((issue) => issue.path.at(-1) === "thinkingLevel");
|
|
117
|
-
|
|
139
|
+
// Only the events field's own issues map to the delivery code; an unknown top-level key stays a profile-config error.
|
|
140
|
+
const eventsIssue = error.issues.some((issue) => issue.path[0] === "events");
|
|
141
|
+
throw new ConfigError(thinkingLevelIssue ? "invalid_thinking_level" : eventsIssue ? "invalid_event_delivery" : "invalid_execution_profile_config");
|
|
118
142
|
}
|
|
119
143
|
throw error;
|
|
120
144
|
}
|
|
@@ -122,17 +146,19 @@ export async function loadConfig(path = process.env.PI_SESSION_MCP_CONFIG) {
|
|
|
122
146
|
const overrideDirectory = skillOverrideDirectory(absoluteConfig);
|
|
123
147
|
const workspaces = new ImmutableMap(Object.entries(parsed.workspaces).map(([key, value]) => [key, resolve(base, value)]));
|
|
124
148
|
const catalog = parsed.skillCatalog ?? {};
|
|
125
|
-
const executionProfiles = new ImmutableMap(Object.entries(parsed.executionProfiles).map(([key, { mcpServers, extensions, skills, ...value }]) => {
|
|
149
|
+
const executionProfiles = new ImmutableMap(Object.entries(parsed.executionProfiles).map(([key, { mcpServers, extensions, grantedExtensionTools, skills, ...value }]) => {
|
|
126
150
|
const selection = resolveSkillSelection(skills, catalog, base, overrideDirectory);
|
|
127
151
|
return [key, Object.freeze({
|
|
128
152
|
alias: key, ...value,
|
|
129
153
|
...(mcpServers === undefined ? {} : { mcpServers: snapshotMcpServers(mcpServers) }),
|
|
130
154
|
...(extensions === undefined ? {} : { extensions: Object.freeze(extensions.map((spec) => parseExtensionSpec(spec))) }),
|
|
155
|
+
...(grantedExtensionTools === undefined ? {} : { grantedExtensionTools: Object.freeze([...grantedExtensionTools]) }),
|
|
131
156
|
...(selection === undefined ? {} : { skills: selection }),
|
|
132
157
|
})];
|
|
133
158
|
}));
|
|
159
|
+
const workspaceModes = await loadExecutionModes(absoluteConfig, new Set(workspaces.keys()), executionProfiles);
|
|
134
160
|
const defaultEntry = [...executionProfiles].find(([, profile]) => profile.default);
|
|
135
161
|
if (!defaultEntry)
|
|
136
162
|
throw new Error("Execution profile configuration is invalid");
|
|
137
|
-
return { workspaces, executionProfiles, defaultExecutionProfile: defaultEntry[0], configuration, skillOverrideDirectory: overrideDirectory };
|
|
163
|
+
return { workspaces, workspaceModes, executionProfiles, defaultExecutionProfile: defaultEntry[0], configuration, eventDelivery: parsed.events?.delivery ?? "off", skillOverrideDirectory: overrideDirectory };
|
|
138
164
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
/** Offline, bounded rootless Podman check; no runtime diagnostics enter reports or stdout. */
|
|
3
|
+
export async function containerRuntimeUsable() {
|
|
4
|
+
try {
|
|
5
|
+
return await new Promise((resolve) => {
|
|
6
|
+
execFile("podman", ["info", "--format", "{{.Host.Security.Rootless}}"], {
|
|
7
|
+
shell: false,
|
|
8
|
+
encoding: "utf8",
|
|
9
|
+
timeout: 10_000,
|
|
10
|
+
killSignal: "SIGKILL",
|
|
11
|
+
maxBuffer: 4096,
|
|
12
|
+
}, (error, stdout) => resolve(error === null && stdout.trim() === "true"));
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|