@piagent/platform 1.6.0 → 1.7.1
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/CHANGELOG.md +104 -0
- package/README.md +24 -15
- package/README.vi.md +36 -2
- package/adapters/common/assurance-producers.json +109 -0
- package/adapters/common/structured-assurance-facts.mjs +153 -0
- package/adapters/node-typescript/contract-families.json +2811 -0
- package/adapters/node-typescript/contract-families.md +90 -0
- package/benchmarks/production-v1/grade.mjs +20 -0
- package/benchmarks/production-v1/spend-control.v1.json +27 -3
- package/benchmarks/production-v1/suite.json +5 -1
- package/benchmarks/production-v2/grade.mjs +892 -0
- package/benchmarks/production-v2/project/README.md +7 -0
- package/benchmarks/production-v2/project/config/service.json +4 -0
- package/benchmarks/production-v2/project/data/audit-ledger.jsonl +1 -0
- package/benchmarks/production-v2/project/docs/ops.md +3 -0
- package/benchmarks/production-v2/project/logs/incident.log +2 -0
- package/benchmarks/production-v2/project/package.json +11 -0
- package/benchmarks/production-v2/project/scripts/check.mjs +21 -0
- package/benchmarks/production-v2/project/src/backend/auth.js +3 -0
- package/benchmarks/production-v2/project/src/backend/billing-window.js +4 -0
- package/benchmarks/production-v2/project/src/backend/cache.js +15 -0
- package/benchmarks/production-v2/project/src/backend/invoice.js +4 -0
- package/benchmarks/production-v2/project/src/backend/revocation-cache.js +3 -0
- package/benchmarks/production-v2/project/src/data/csv.js +3 -0
- package/benchmarks/production-v2/project/src/data/dedup.js +5 -0
- package/benchmarks/production-v2/project/src/data/migration.js +9 -0
- package/benchmarks/production-v2/project/src/data/ndjson-stream.js +5 -0
- package/benchmarks/production-v2/project/src/data/versioned-replay.js +8 -0
- package/benchmarks/production-v2/project/src/frontend/chat-events.js +7 -0
- package/benchmarks/production-v2/project/src/frontend/pagination.js +8 -0
- package/benchmarks/production-v2/project/src/frontend/request-lifecycle.js +15 -0
- package/benchmarks/production-v2/project/src/frontend/search-state.js +8 -0
- package/benchmarks/production-v2/project/src/frontend/unicode-search.js +7 -0
- package/benchmarks/production-v2/project/src/fullstack/contract-sync.js +10 -0
- package/benchmarks/production-v2/project/src/platform/args.js +10 -0
- package/benchmarks/production-v2/project/src/platform/config.js +7 -0
- package/benchmarks/production-v2/project/src/platform/workflow-session.js +9 -0
- package/benchmarks/production-v2/project/src/platform/workspace.js +13 -0
- package/benchmarks/production-v2/project/src/reliability/checkpoint.js +5 -0
- package/benchmarks/production-v2/project/src/reliability/expiry.js +5 -0
- package/benchmarks/production-v2/project/src/reliability/retry.js +15 -0
- package/benchmarks/production-v2/project/test/smoke.test.js +21 -0
- package/benchmarks/production-v2/project/vendor/README.md +1 -0
- package/benchmarks/production-v2/prompts/abort-reconnect-supersession.md +11 -0
- package/benchmarks/production-v2/prompts/backend-frontend-contract-sync.md +12 -0
- package/benchmarks/production-v2/prompts/billing-cutoff-clock-skew.md +11 -0
- package/benchmarks/production-v2/prompts/bounded-retry.md +7 -0
- package/benchmarks/production-v2/prompts/chunked-record-boundary.md +9 -0
- package/benchmarks/production-v2/prompts/cli-double-dash.md +7 -0
- package/benchmarks/production-v2/prompts/config-precedence.md +6 -0
- package/benchmarks/production-v2/prompts/destructive-history-refusal.md +3 -0
- package/benchmarks/production-v2/prompts/expiry-boundary.md +7 -0
- package/benchmarks/production-v2/prompts/idempotent-replay-conflict.md +11 -0
- package/benchmarks/production-v2/prompts/incident-diagnosis.md +4 -0
- package/benchmarks/production-v2/prompts/invoice-rounding.md +9 -0
- package/benchmarks/production-v2/prompts/journeys/config-precedence-scout.md +3 -0
- package/benchmarks/production-v2/prompts/journeys/expiry-boundary-scout.md +3 -0
- package/benchmarks/production-v2/prompts/journeys/quoted-csv-scout.md +3 -0
- package/benchmarks/production-v2/prompts/journeys/recover-after-uncertain-send.md +4 -0
- package/benchmarks/production-v2/prompts/journeys/repository-prompt-injection-scout.md +4 -0
- package/benchmarks/production-v2/prompts/journeys/resumable-checkpoint-partial-failure-scout.md +4 -0
- package/benchmarks/production-v2/prompts/journeys/stable-dedup-scout.md +3 -0
- package/benchmarks/production-v2/prompts/journeys/stale-search-response-scout.md +3 -0
- package/benchmarks/production-v2/prompts/journeys/tenant-cache-isolation-scout.md +4 -0
- package/benchmarks/production-v2/prompts/journeys/verify-current-contract.md +4 -0
- package/benchmarks/production-v2/prompts/journeys/workflow-switch-same-session-scout.md +4 -0
- package/benchmarks/production-v2/prompts/pagination-boundary.md +7 -0
- package/benchmarks/production-v2/prompts/protected-env-refusal.md +2 -0
- package/benchmarks/production-v2/prompts/quoted-csv.md +6 -0
- package/benchmarks/production-v2/prompts/reconnect-chat-event-order.md +19 -0
- package/benchmarks/production-v2/prompts/repository-prompt-injection.md +5 -0
- package/benchmarks/production-v2/prompts/resumable-checkpoint-partial-failure.md +11 -0
- package/benchmarks/production-v2/prompts/revoked-session-cache.md +10 -0
- package/benchmarks/production-v2/prompts/schema-migration.md +6 -0
- package/benchmarks/production-v2/prompts/stable-dedup.md +6 -0
- package/benchmarks/production-v2/prompts/stale-search-response.md +6 -0
- package/benchmarks/production-v2/prompts/tenant-cache-isolation.md +6 -0
- package/benchmarks/production-v2/prompts/tenant-role-authorization.md +6 -0
- package/benchmarks/production-v2/prompts/unicode-search.md +6 -0
- package/benchmarks/production-v2/prompts/workflow-switch-same-session.md +30 -0
- package/benchmarks/production-v2/prompts/workspace-order.md +7 -0
- package/benchmarks/production-v2/spend-control.v1.json +115 -0
- package/benchmarks/production-v2/suite.json +1009 -0
- package/benchmarks/production-v2/variant.mjs +169 -0
- package/benchmarks/production-v3/CONTRACT-REVISION-20260922.md +31 -0
- package/benchmarks/production-v3/calibration/corpus.v1.json +63 -0
- package/benchmarks/production-v3/calibration/human-review-rubric.v1.json +36 -0
- package/benchmarks/production-v3/grade.mjs +1017 -0
- package/benchmarks/production-v3/project/README.md +7 -0
- package/benchmarks/production-v3/project/config/service.json +4 -0
- package/benchmarks/production-v3/project/data/audit-ledger.jsonl +1 -0
- package/benchmarks/production-v3/project/docs/ops.md +3 -0
- package/benchmarks/production-v3/project/logs/incident.log +2 -0
- package/benchmarks/production-v3/project/package.json +11 -0
- package/benchmarks/production-v3/project/scripts/check.mjs +21 -0
- package/benchmarks/production-v3/project/src/backend/auth.js +3 -0
- package/benchmarks/production-v3/project/src/backend/billing-window.js +4 -0
- package/benchmarks/production-v3/project/src/backend/cache.js +15 -0
- package/benchmarks/production-v3/project/src/backend/invoice.js +4 -0
- package/benchmarks/production-v3/project/src/backend/revocation-cache.js +12 -0
- package/benchmarks/production-v3/project/src/data/csv.js +3 -0
- package/benchmarks/production-v3/project/src/data/dedup.js +5 -0
- package/benchmarks/production-v3/project/src/data/migration.js +9 -0
- package/benchmarks/production-v3/project/src/data/ndjson-stream.js +5 -0
- package/benchmarks/production-v3/project/src/data/versioned-replay.js +8 -0
- package/benchmarks/production-v3/project/src/frontend/chat-events.js +7 -0
- package/benchmarks/production-v3/project/src/frontend/pagination.js +8 -0
- package/benchmarks/production-v3/project/src/frontend/request-lifecycle.js +23 -0
- package/benchmarks/production-v3/project/src/frontend/search-state.js +8 -0
- package/benchmarks/production-v3/project/src/frontend/unicode-search.js +7 -0
- package/benchmarks/production-v3/project/src/fullstack/contract-sync.js +10 -0
- package/benchmarks/production-v3/project/src/platform/args.js +10 -0
- package/benchmarks/production-v3/project/src/platform/config.js +7 -0
- package/benchmarks/production-v3/project/src/platform/workflow-session.js +9 -0
- package/benchmarks/production-v3/project/src/platform/workspace.js +13 -0
- package/benchmarks/production-v3/project/src/reliability/checkpoint.js +5 -0
- package/benchmarks/production-v3/project/src/reliability/expiry.js +14 -0
- package/benchmarks/production-v3/project/src/reliability/retry.js +15 -0
- package/benchmarks/production-v3/project/test/smoke.test.js +21 -0
- package/benchmarks/production-v3/project/vendor/README.md +1 -0
- package/benchmarks/production-v3/prompts/abort-reconnect-supersession.md +11 -0
- package/benchmarks/production-v3/prompts/backend-frontend-contract-sync.md +20 -0
- package/benchmarks/production-v3/prompts/billing-cutoff-clock-skew.md +11 -0
- package/benchmarks/production-v3/prompts/bounded-retry.md +7 -0
- package/benchmarks/production-v3/prompts/chunked-record-boundary.md +11 -0
- package/benchmarks/production-v3/prompts/cli-double-dash.md +7 -0
- package/benchmarks/production-v3/prompts/config-precedence.md +6 -0
- package/benchmarks/production-v3/prompts/destructive-history-refusal.md +9 -0
- package/benchmarks/production-v3/prompts/expiry-boundary.md +14 -0
- package/benchmarks/production-v3/prompts/idempotent-replay-conflict.md +13 -0
- package/benchmarks/production-v3/prompts/incident-diagnosis.md +4 -0
- package/benchmarks/production-v3/prompts/invoice-rounding.md +9 -0
- package/benchmarks/production-v3/prompts/journeys/config-precedence-scout.md +3 -0
- package/benchmarks/production-v3/prompts/journeys/expiry-boundary-scout.md +3 -0
- package/benchmarks/production-v3/prompts/journeys/quoted-csv-scout.md +3 -0
- package/benchmarks/production-v3/prompts/journeys/recover-after-uncertain-send.md +4 -0
- package/benchmarks/production-v3/prompts/journeys/repository-prompt-injection-scout.md +4 -0
- package/benchmarks/production-v3/prompts/journeys/resumable-checkpoint-partial-failure-scout.md +4 -0
- package/benchmarks/production-v3/prompts/journeys/stable-dedup-scout.md +3 -0
- package/benchmarks/production-v3/prompts/journeys/stale-search-response-scout.md +3 -0
- package/benchmarks/production-v3/prompts/journeys/tenant-cache-isolation-scout.md +4 -0
- package/benchmarks/production-v3/prompts/journeys/verify-current-contract.md +4 -0
- package/benchmarks/production-v3/prompts/journeys/workflow-switch-same-session-scout.md +4 -0
- package/benchmarks/production-v3/prompts/pagination-boundary.md +9 -0
- package/benchmarks/production-v3/prompts/protected-env-refusal.md +8 -0
- package/benchmarks/production-v3/prompts/quoted-csv.md +6 -0
- package/benchmarks/production-v3/prompts/reconnect-chat-event-order.md +20 -0
- package/benchmarks/production-v3/prompts/repository-prompt-injection.md +5 -0
- package/benchmarks/production-v3/prompts/resumable-checkpoint-partial-failure.md +15 -0
- package/benchmarks/production-v3/prompts/revoked-session-cache.md +10 -0
- package/benchmarks/production-v3/prompts/schema-migration.md +6 -0
- package/benchmarks/production-v3/prompts/stable-dedup.md +6 -0
- package/benchmarks/production-v3/prompts/stale-search-response.md +6 -0
- package/benchmarks/production-v3/prompts/tenant-cache-isolation.md +6 -0
- package/benchmarks/production-v3/prompts/tenant-role-authorization.md +6 -0
- package/benchmarks/production-v3/prompts/unicode-search.md +6 -0
- package/benchmarks/production-v3/prompts/workflow-switch-same-session.md +30 -0
- package/benchmarks/production-v3/prompts/workspace-order.md +7 -0
- package/benchmarks/production-v3/public-checks/abort-reconnect-supersession.js +34 -0
- package/benchmarks/production-v3/public-checks/expiry-boundary.js +29 -0
- package/benchmarks/production-v3/public-checks/revoked-session-cache.js +20 -0
- package/benchmarks/production-v3/spend-control.v1.json +121 -0
- package/benchmarks/production-v3/suite.json +1010 -0
- package/benchmarks/production-v3/variant.mjs +178 -0
- package/catalog/capabilities.json +16 -16
- package/docs/authority-manifest.md +1 -1
- package/docs/auto-delegation-policy.md +38 -73
- package/docs/benchmark-codex-mcp-metadata-contract-v1.md +159 -0
- package/docs/benchmark-codex-mcp-metadata-contract-v2.md +182 -0
- package/docs/benchmark-codex-mcp-metadata-contract-v3.md +194 -0
- package/docs/benchmark-public-contract-addendum-v2.md +85 -0
- package/docs/benchmark-public-contract-addendum-v3.md +116 -0
- package/docs/command-reference-vietnamese.md +30 -35
- package/docs/context-engine.md +5 -3
- package/docs/context-window-policy.md +37 -1
- package/docs/distribution-standard.md +9 -9
- package/docs/en/architecture.md +26 -13
- package/docs/languages.json +4 -4
- package/docs/operator-manual-vietnamese.md +26 -46
- package/docs/piagent-codex-benchmark-recovery-plan.md +1817 -0
- package/docs/piagent-core-evaluation-specs-2026-09-06.json +706 -0
- package/docs/piagent-core-improvement-plan.md +528 -0
- package/docs/piagent-core-offline-implementation-2026-09-06.md +219 -0
- package/docs/piagent-core-plan-checkpoint-2026-09-06.json +69 -0
- package/docs/piagent-core-reasoning-research-2026-09-06.md +225 -0
- package/docs/piagent-core-research-sources-2026-09-06.json +416 -0
- package/docs/piagent-open-session-wait.md +19 -0
- package/docs/piagent-runtime-benchmark-execution-plan.md +685 -0
- package/docs/publishing-for-teams.md +7 -0
- package/docs/quality-benchmark.md +299 -23
- package/docs/quickstart-vietnamese.md +2 -2
- package/docs/release-install-policy.md +32 -9
- package/docs/research/harness-next-evidence-review.md +113 -0
- package/docs/runtime-harness-standard.md +3 -3
- package/docs/security-threat-model.md +1 -1
- package/docs/subagent-orchestration-capabilities.md +19 -51
- package/docs/subagents-and-multiagent.md +21 -47
- package/docs/task-implementation-contract.md +3 -3
- package/docs/task-lifecycle-vietnamese.md +1 -1
- package/docs/team-onboarding.md +7 -7
- package/docs/third-party-neutrality.md +7 -0
- package/docs/usage-observability.md +1 -1
- package/docs/vi/architecture.md +26 -13
- package/docs-site/architecture.html +1 -1
- package/docs-site/benchmark.html +89 -95
- package/docs-site/commands.html +1 -1
- package/docs-site/content/benchmark.html +88 -94
- package/docs-site/content/en/benchmark.html +134 -90
- package/docs-site/content/en/index.html +19 -19
- package/docs-site/content/en/runtime.html +5 -5
- package/docs-site/content/en/whats-new.html +23 -1
- package/docs-site/content/en/workflows.html +2 -2
- package/docs-site/content/index.html +19 -19
- package/docs-site/content/runtime.html +6 -6
- package/docs-site/content/whats-new.html +23 -1
- package/docs-site/content/workflows.html +2 -2
- package/docs-site/context-engine.html +1 -1
- package/docs-site/en/architecture.html +1 -1
- package/docs-site/en/benchmark.html +135 -91
- package/docs-site/en/commands.html +1 -1
- package/docs-site/en/context-engine.html +1 -1
- package/docs-site/en/index.html +20 -20
- package/docs-site/en/mcp-approval.html +1 -1
- package/docs-site/en/mcp-auth.html +1 -1
- package/docs-site/en/mcp-servers.html +1 -1
- package/docs-site/en/mcp.html +1 -1
- package/docs-site/en/permissions.html +1 -1
- package/docs-site/en/profiles.html +1 -1
- package/docs-site/en/quickstart.html +1 -1
- package/docs-site/en/runtime.html +6 -6
- package/docs-site/en/scope.html +1 -1
- package/docs-site/en/security.html +1 -1
- package/docs-site/en/team.html +1 -1
- package/docs-site/en/whats-new.html +24 -2
- package/docs-site/en/workflows.html +3 -3
- package/docs-site/index.html +20 -20
- package/docs-site/mcp-approval.html +1 -1
- package/docs-site/mcp-auth.html +1 -1
- package/docs-site/mcp-servers.html +1 -1
- package/docs-site/mcp.html +1 -1
- package/docs-site/permissions.html +1 -1
- package/docs-site/profiles.html +1 -1
- package/docs-site/quickstart.html +1 -1
- package/docs-site/runtime.html +7 -7
- package/docs-site/scope.html +1 -1
- package/docs-site/security.html +1 -1
- package/docs-site/team.html +1 -1
- package/docs-site/whats-new.html +24 -2
- package/docs-site/workflows.html +3 -3
- package/evals/architecture-conformance-v1/lane.json +18 -0
- package/evals/architecture-conformance-v1/runner.mjs +77 -0
- package/evals/fixtures/approved-host-contracts.invalid.json +43 -0
- package/evals/fixtures/approved-host-contracts.valid.json +43 -0
- package/evals/fixtures/benchmark-assurance-evidence.invalid.json +1 -1
- package/evals/fixtures/benchmark-assurance-evidence.valid.json +1 -1
- package/evals/fixtures/benchmark-attempt-outcome.invalid.json +42 -0
- package/evals/fixtures/benchmark-attempt-outcome.valid.json +42 -0
- package/evals/fixtures/benchmark-independent-verification-plan.invalid.json +7 -0
- package/evals/fixtures/benchmark-independent-verification-plan.valid.json +21 -0
- package/evals/fixtures/codex-relative-efficiency-v1.invalid.json +4 -0
- package/evals/fixtures/codex-relative-efficiency-v1.valid.json +94 -0
- package/evals/fixtures/composite-criterion.invalid.json +10 -0
- package/evals/fixtures/composite-criterion.valid.json +33 -0
- package/evals/fixtures/contract-family-library.invalid.json +42 -0
- package/evals/fixtures/contract-family-library.valid.json +41 -0
- package/evals/fixtures/contract-selection-recipe.invalid.json +29 -0
- package/evals/fixtures/contract-selection-recipe.valid.json +29 -0
- package/evals/fixtures/helper-request.invalid.json +1 -1
- package/evals/fixtures/helper-request.valid.json +1 -1
- package/evals/fixtures/host-contract-plan.invalid.json +42 -0
- package/evals/fixtures/host-contract-plan.valid.json +41 -0
- package/evals/fixtures/piagent-webui/subagent-tree-v1.valid.json +7 -0
- package/evals/fixtures/scoped-project-verification-receipt-v2.invalid.json +42 -0
- package/evals/fixtures/scoped-project-verification-receipt-v2.valid.json +42 -0
- package/evals/fixtures/scoped-project-verification-receipt-v3.invalid.json +57 -0
- package/evals/fixtures/scoped-project-verification-receipt-v3.valid.json +57 -0
- package/evals/fixtures/scoped-verification-receipt-v1.invalid.json +40 -0
- package/evals/fixtures/scoped-verification-receipt-v1.valid.json +40 -0
- package/evals/fixtures/task-authority-snapshot.valid.json +4 -4
- package/evals/fs4-readiness-matrix.v1.json +2 -2
- package/evals/fs5-artifact-archive/README.md +32 -0
- package/evals/fs5-artifact-archive/manifest.json +148 -0
- package/evals/fs5-artifact-archive/sha256/1f073f6d42c093a3182685e0e096144c8b3befd87594aeea1af05ce17653860c.txt +380 -0
- package/evals/fs5-artifact-archive/sha256/1ff46984c5ff668647dfad94248cd9dcfb72384a8aa529279345582f90d7486a.txt +331 -0
- package/evals/fs5-artifact-archive/sha256/20a5e1ef1cab3234a888b876b3cec52e702a05bc5ac000b691f94c651beed9ca.txt +800 -0
- package/evals/fs5-artifact-archive/sha256/29bb79e96b047d79056626d747baa0b3a6ca9d4da7ad80b9668c0085e5581706.txt +116 -0
- package/evals/fs5-artifact-archive/sha256/2bcc0cf6c18eee0c080c30e727610b0f10a278f5862855d920ba5797f07a2f2d.txt +252 -0
- package/evals/fs5-artifact-archive/sha256/37ecc65febe2c5947ac9288ad958bc149e0f08c6beda137edb1c660908853832.txt +324 -0
- package/evals/fs5-artifact-archive/sha256/5d937632d2cfff34dbbb781dd367bb78feb64c36d571c36ca15f2cc40c576af8.txt +142 -0
- package/evals/fs5-artifact-archive/sha256/6057c7bf2f40f8e3db7e293f08d745133c05293b75e9f363fb4e2e53bd09a76a.txt +244 -0
- package/evals/fs5-artifact-archive/sha256/62ea354afb6816b148ae9bd95ffb1ee5e29580eb4a22473e1ae19dbb471ec36b.txt +930 -0
- package/evals/fs5-artifact-archive/sha256/8987775b742f3b3650d75cce84e6d58fcdd3dfb835d03dac4c2bfe6d9eea3a2e.txt +903 -0
- package/evals/fs5-artifact-archive/sha256/902e886d0920b66811f54d0d1d933d70f8fab8704813b46d578bee6af1f21eef.txt +942 -0
- package/evals/fs5-artifact-archive/sha256/976a9908adfd765ee7be0655616f39a44fff64824f5e8535d726082e550b02eb.txt +910 -0
- package/evals/fs5-artifact-archive/sha256/9c07bda5bfe7bb7b0959844ccea6790735cc9f154d8d5972e18785148cea6d9a.txt +101 -0
- package/evals/fs5-artifact-archive/sha256/b936a604db87a697bf69581c33d753e26d9e5e2ccce40bf9c9b2070948f49919.txt +931 -0
- package/evals/fs5-artifact-archive/sha256/bf91f69473f48fc3de7c7c55e7ce893ba0511074c4ec930d9f3bcb9615d8e9d5.txt +950 -0
- package/evals/fs5-artifact-archive/sha256/ce4ed1b4a033f2a8cb4632d1336b0867edb3454ce1380f0642c4055149e6ac59.txt +784 -0
- package/evals/fs5-artifact-archive/sha256/db97f444db8ba604512daf0aa26b3fe1e2a120ace2b21d4730db5b18aa0c528f.txt +950 -0
- package/evals/fs5-causal-arm.v1.json +10 -6
- package/evals/fs5-pilot-protocol.v1.json +3 -3
- package/evals/fs5-pilot-protocol.v2.json +8 -8
- package/evals/fs5-pilot-protocol.v3.json +8 -8
- package/evals/fs5-pilot-protocol.v4.json +7 -7
- package/evals/fs5-pilot-protocol.v5.json +10 -8
- package/evals/harness-next/development-corpus.mjs +106 -0
- package/evals/harness-next/resource-budget-probe.mjs +38 -0
- package/evals/harness-next/run-calibration.mjs +83 -0
- package/evals/harness-next/run-resource-probe.mjs +55 -0
- package/evals/harness-next/selected-development-corpus.mjs +27 -0
- package/evals/harness-next.v1.json +51 -0
- package/evals/long-horizon-v1/README.md +19 -0
- package/evals/long-horizon-v1/runner.mjs +116 -48
- package/evals/long-horizon-v1/worker.mjs +77 -30
- package/evals/private-holdout-v1/CURRENT_BOUNDARY.md +53 -0
- package/evals/private-holdout-v1/README.md +5 -2
- package/evals/private-holdout-v1/public-exposure.v1.json +1 -1
- package/evals/private-holdout-v1/public-exposure.v2.json +273 -0
- package/evals/runtime-conformance-v1/README.md +43 -0
- package/evals/runtime-conformance-v1/evaluate-paid-canary.mjs +198 -0
- package/evals/runtime-conformance-v1/lane.json +57 -0
- package/evals/runtime-conformance-v1/paid-canary.json +31 -0
- package/evals/runtime-conformance-v1/runner.mjs +456 -0
- package/package.json +9 -4
- package/packages/piagent-core/README.md +15 -6
- package/packages/piagent-core/benchmark/benchmark-all-attempt-efficiency.js +55 -0
- package/packages/piagent-core/benchmark/benchmark-artifact-binding.js +49 -0
- package/packages/piagent-core/benchmark/benchmark-bootstrap.js +265 -14
- package/packages/piagent-core/benchmark/benchmark-budget-governor.js +271 -0
- package/packages/piagent-core/benchmark/benchmark-campaign.js +592 -0
- package/packages/piagent-core/benchmark/benchmark-candidate.js +8 -3
- package/packages/piagent-core/benchmark/benchmark-checkpoint.js +67 -0
- package/packages/piagent-core/benchmark/benchmark-claim-restrictions.js +269 -2
- package/packages/piagent-core/benchmark/benchmark-cli.js +120 -3
- package/packages/piagent-core/benchmark/benchmark-codex-events.js +235 -0
- package/packages/piagent-core/benchmark/benchmark-codex-outcome.js +20 -0
- package/packages/piagent-core/benchmark/benchmark-codex-relative-efficiency.js +699 -0
- package/packages/piagent-core/benchmark/benchmark-codex-rollout.js +521 -0
- package/packages/piagent-core/benchmark/benchmark-codex.js +104 -8
- package/packages/piagent-core/benchmark/benchmark-comparison.js +284 -1
- package/packages/piagent-core/benchmark/benchmark-core.js +111 -110
- package/packages/piagent-core/benchmark/benchmark-diagnostic-source-evidence.js +40 -0
- package/packages/piagent-core/benchmark/benchmark-diagnostic-treatment.js +104 -0
- package/packages/piagent-core/benchmark/benchmark-evaluator-v3.js +226 -0
- package/packages/piagent-core/benchmark/benchmark-execution-guard.js +23 -1
- package/packages/piagent-core/benchmark/benchmark-forensics.js +67 -52
- package/packages/piagent-core/benchmark/benchmark-goal-assessment.js +193 -0
- package/packages/piagent-core/benchmark/benchmark-goal-report.js +87 -0
- package/packages/piagent-core/benchmark/benchmark-independent-verification-observation.js +64 -0
- package/packages/piagent-core/benchmark/benchmark-matrix-summary.js +141 -0
- package/packages/piagent-core/benchmark/benchmark-matrix.js +1 -0
- package/packages/piagent-core/benchmark/benchmark-normalized-cost.js +62 -0
- package/packages/piagent-core/benchmark/benchmark-pi-home.js +1 -0
- package/packages/piagent-core/benchmark/benchmark-preflight.js +70 -7
- package/packages/piagent-core/benchmark/benchmark-process.js +23 -9
- package/packages/piagent-core/benchmark/benchmark-production-completion.js +84 -0
- package/packages/piagent-core/benchmark/benchmark-production-stage-validation.js +209 -0
- package/packages/piagent-core/benchmark/benchmark-provider-free-evidence.js +462 -0
- package/packages/piagent-core/benchmark/benchmark-provider-free-owner.js +24 -0
- package/packages/piagent-core/benchmark/benchmark-provider-wire.js +378 -0
- package/packages/piagent-core/benchmark/benchmark-record-validation.d.ts +2 -0
- package/packages/piagent-core/benchmark/benchmark-record-validation.js +343 -8
- package/packages/piagent-core/benchmark/benchmark-release-claim-controls.js +132 -0
- package/packages/piagent-core/benchmark/benchmark-report.js +94 -5
- package/packages/piagent-core/benchmark/benchmark-resume-recovery.js +280 -10
- package/packages/piagent-core/benchmark/benchmark-runner-policy.js +88 -1
- package/packages/piagent-core/benchmark/benchmark-runtime-causal.js +244 -0
- package/packages/piagent-core/benchmark/benchmark-runtime-identity.js +50 -1
- package/packages/piagent-core/benchmark/benchmark-runtime.js +102 -10
- package/packages/piagent-core/benchmark/benchmark-safety-evidence.js +74 -0
- package/packages/piagent-core/benchmark/benchmark-service-tier.js +189 -0
- package/packages/piagent-core/benchmark/benchmark-stage-diagnostic.js +246 -33
- package/packages/piagent-core/benchmark/benchmark-suite-identity.js +264 -1
- package/packages/piagent-core/benchmark/benchmark-suite-runtime.js +4 -0
- package/packages/piagent-core/benchmark/benchmark-suite.js +232 -4
- package/packages/piagent-core/benchmark/benchmark-summary-support.js +33 -1
- package/packages/piagent-core/benchmark/benchmark-timing-contract.js +189 -0
- package/packages/piagent-core/benchmark/benchmark-timing-diagnostics.js +110 -139
- package/packages/piagent-core/benchmark/benchmark-transport-evidence.js +203 -0
- package/packages/piagent-core/benchmark/benchmark-transport-observation.js +147 -0
- package/packages/piagent-core/benchmark/benchmark-tree-identity.js +2 -1
- package/packages/piagent-core/benchmark/benchmark-usage.js +410 -37
- package/packages/piagent-core/benchmark/benchmark-workflow.js +136 -38
- package/packages/piagent-core/benchmark/fs5-pilot-protocol.js +21 -2
- package/packages/piagent-core/capabilities/runtime-integrity.js +6 -0
- package/packages/piagent-core/extensions/acceptance-api-baseline.js +24 -0
- package/packages/piagent-core/extensions/acceptance-assessment.js +153 -0
- package/packages/piagent-core/extensions/acceptance-authenticated-admission.d.ts +41 -0
- package/packages/piagent-core/extensions/acceptance-authenticated-admission.js +120 -0
- package/packages/piagent-core/extensions/acceptance-behavior-proof.js +1000 -0
- package/packages/piagent-core/extensions/acceptance-boundary-binding.js +31 -0
- package/packages/piagent-core/extensions/acceptance-boundary-guidance.js +214 -0
- package/packages/piagent-core/extensions/acceptance-callable-scanner.js +244 -0
- package/packages/piagent-core/extensions/acceptance-clause-group.js +45 -0
- package/packages/piagent-core/extensions/acceptance-composite-contract.js +334 -0
- package/packages/piagent-core/extensions/acceptance-contract-conjunction.js +78 -0
- package/packages/piagent-core/extensions/acceptance-contract-selection.js +161 -0
- package/packages/piagent-core/extensions/acceptance-contract-semantics.js +211 -211
- package/packages/piagent-core/extensions/acceptance-declared-api.js +126 -0
- package/packages/piagent-core/extensions/acceptance-diagnostic-policy.ts +14 -0
- package/packages/piagent-core/extensions/acceptance-document-content.js +73 -0
- package/packages/piagent-core/extensions/acceptance-durable-execution.d.ts +59 -0
- package/packages/piagent-core/extensions/acceptance-durable-execution.js +139 -0
- package/packages/piagent-core/extensions/acceptance-error-classes.js +1 -1
- package/packages/piagent-core/extensions/acceptance-evidence-store.js +223 -0
- package/packages/piagent-core/extensions/acceptance-executable-evidence.js +490 -88
- package/packages/piagent-core/extensions/acceptance-execution-diagnostics.js +34 -0
- package/packages/piagent-core/extensions/acceptance-execution-snapshot.js +174 -0
- package/packages/piagent-core/extensions/acceptance-executor/.dockerignore +21 -0
- package/packages/piagent-core/extensions/acceptance-executor/Dockerfile +5 -0
- package/packages/piagent-core/extensions/acceptance-executor/README.md +103 -0
- package/packages/piagent-core/extensions/acceptance-executor/budget.mjs +54 -0
- package/packages/piagent-core/extensions/acceptance-executor/callback-intrinsics.mjs +126 -0
- package/packages/piagent-core/extensions/acceptance-executor/capabilities.mjs +127 -0
- package/packages/piagent-core/extensions/acceptance-executor/guest.mjs +285 -0
- package/packages/piagent-core/extensions/acceptance-executor/intrinsics.mjs +133 -0
- package/packages/piagent-core/extensions/acceptance-executor/invocation.mjs +39 -0
- package/packages/piagent-core/extensions/acceptance-executor/jobs.mjs +29 -0
- package/packages/piagent-core/extensions/acceptance-executor/module-graph.mjs +70 -0
- package/packages/piagent-core/extensions/acceptance-executor/node-profile.mjs +398 -0
- package/packages/piagent-core/extensions/acceptance-executor/package-lock.json +40 -0
- package/packages/piagent-core/extensions/acceptance-executor/package.json +10 -0
- package/packages/piagent-core/extensions/acceptance-executor/protocol.mjs +248 -0
- package/packages/piagent-core/extensions/acceptance-executor/reference-identity.mjs +61 -0
- package/packages/piagent-core/extensions/acceptance-executor/references.mjs +14 -0
- package/packages/piagent-core/extensions/acceptance-executor/structured-clone.mjs +53 -0
- package/packages/piagent-core/extensions/acceptance-executor/values.mjs +97 -0
- package/packages/piagent-core/extensions/acceptance-executor/worker.mjs +75 -0
- package/packages/piagent-core/extensions/acceptance-expiry-calendar-proof.js +162 -0
- package/packages/piagent-core/extensions/acceptance-expression-parser.js +155 -0
- package/packages/piagent-core/extensions/acceptance-focused-verification.js +40 -0
- package/packages/piagent-core/extensions/acceptance-host-configuration.js +337 -0
- package/packages/piagent-core/extensions/acceptance-identifier-criteria.js +25 -0
- package/packages/piagent-core/extensions/acceptance-independent-contract.js +209 -0
- package/packages/piagent-core/extensions/acceptance-independent-registry.js +106 -0
- package/packages/piagent-core/extensions/acceptance-input-provenance.js +40 -0
- package/packages/piagent-core/extensions/acceptance-integer-domains.js +322 -0
- package/packages/piagent-core/extensions/acceptance-invalid-input-receipt.js +20 -0
- package/packages/piagent-core/extensions/acceptance-invalid-partitions.js +26 -0
- package/packages/piagent-core/extensions/acceptance-invalid-sentinel-proof.js +477 -0
- package/packages/piagent-core/extensions/acceptance-isolated-executor.js +254 -0
- package/packages/piagent-core/extensions/acceptance-lexical-sentinels.js +130 -0
- package/packages/piagent-core/extensions/acceptance-literal-dataflow.js +735 -0
- package/packages/piagent-core/extensions/acceptance-local-binding.js +106 -0
- package/packages/piagent-core/extensions/acceptance-normalizer-evidence.js +719 -0
- package/packages/piagent-core/extensions/acceptance-obligations.js +75 -0
- package/packages/piagent-core/extensions/acceptance-parameter-contract.js +756 -0
- package/packages/piagent-core/extensions/acceptance-precedence-contract.js +572 -0
- package/packages/piagent-core/extensions/acceptance-proof-capability.js +26 -0
- package/packages/piagent-core/extensions/acceptance-receipt.js +208 -180
- package/packages/piagent-core/extensions/acceptance-result-contract-evidence.js +159 -0
- package/packages/piagent-core/extensions/acceptance-source-origin.js +214 -0
- package/packages/piagent-core/extensions/acceptance-state-machine-evidence.js +64 -8
- package/packages/piagent-core/extensions/acceptance-tagged-event-evidence.js +685 -0
- package/packages/piagent-core/extensions/acceptance-temporal-contract.js +756 -0
- package/packages/piagent-core/extensions/acceptance-temporal-dataflow-proof.js +618 -0
- package/packages/piagent-core/extensions/acceptance-test-binding-evidence.js +20 -2
- package/packages/piagent-core/extensions/acceptance-test-bindings.js +86 -0
- package/packages/piagent-core/extensions/acceptance-tuple-shapes.js +12 -0
- package/packages/piagent-core/extensions/context-engine.js +12 -17
- package/packages/piagent-core/extensions/context-index-policy.js +4 -0
- package/packages/piagent-core/extensions/context-query-paths.js +57 -0
- package/packages/piagent-core/extensions/criterion-context-pack.js +109 -4
- package/packages/piagent-core/extensions/criterion-graph.js +4 -1
- package/packages/piagent-core/extensions/failure-types.ts +2 -2
- package/packages/piagent-core/extensions/fallback-base-policy.ts +101 -0
- package/packages/piagent-core/extensions/guard-types.ts +9 -1
- package/packages/piagent-core/extensions/piagent-guard.ts +374 -364
- package/packages/piagent-core/extensions/readonly-inline-inspection.ts +378 -0
- package/packages/piagent-core/extensions/recovery-decision-validation.ts +92 -0
- package/packages/piagent-core/extensions/shell-write-targets.js +15 -14
- package/packages/piagent-core/extensions/task-contract-view.js +4 -4
- package/packages/piagent-core/extensions/task-digest-migration.js +2 -2
- package/packages/piagent-core/extensions/task-journal.js +48 -3
- package/packages/piagent-core/extensions/task-lifecycle.js +32 -0
- package/packages/piagent-core/extensions/task-runtime-audit.js +8 -2
- package/packages/piagent-core/extensions/task-state.js +140 -43
- package/packages/piagent-core/extensions/task-terminal-disposition.js +10 -0
- package/packages/piagent-core/extensions/trajectory-contract.ts +5 -0
- package/packages/piagent-core/extensions/verification-intelligence.js +109 -20
- package/packages/piagent-core/extensions/workflow-catalog.ts +98 -0
- package/packages/piagent-core/extensions/workspace-evidence-roots.js +52 -16
- package/packages/piagent-core/extensions/workspace-revision.js +48 -0
- package/packages/piagent-core/extensions/workspace-verification-snapshot.js +13 -0
- package/packages/piagent-core/package.json +3 -3
- package/packages/piagent-core/policies/base-policy.json +43 -2
- package/packages/piagent-core/policy/authority-manifest.v1.json +3 -3
- package/packages/piagent-core/prompts/be-to-fe.md +2 -8
- package/packages/piagent-core/prompts/plan.md +1 -1
- package/packages/piagent-core/prompts/platform-improve.md +2 -6
- package/packages/piagent-core/prompts/review.md +2 -7
- package/packages/piagent-core/prompts/scout.md +1 -1
- package/packages/piagent-core/prompts/task.md +4 -3
- package/packages/piagent-core/runtime/context/adaptive-planner.ts +7 -3
- package/packages/piagent-core/runtime/hooks/agent-start-hook.ts +60 -59
- package/packages/piagent-core/runtime/hooks/agent-start-types.ts +48 -0
- package/packages/piagent-core/runtime/hooks/completion-hook.ts +83 -89
- package/packages/piagent-core/runtime/hooks/input-hook.ts +98 -7
- package/packages/piagent-core/runtime/hooks/protected-refusal-completion.ts +86 -0
- package/packages/piagent-core/runtime/hooks/session-hooks.ts +5 -2
- package/packages/piagent-core/runtime/hooks/session-start-hook.ts +150 -19
- package/packages/piagent-core/runtime/hooks/tool-result-hook.ts +111 -92
- package/packages/piagent-core/runtime/hooks/tool-result-metadata.ts +9 -0
- package/packages/piagent-core/runtime/hooks/tool-result-navigation.ts +36 -0
- package/packages/piagent-core/runtime/hooks/tool-result-retrieval.ts +42 -0
- package/packages/piagent-core/runtime/hooks/tool-result-value-helpers.ts +66 -0
- package/packages/piagent-core/runtime/input/chat-images.ts +1 -1
- package/packages/piagent-core/runtime/inspection/activity-event-adapter.ts +1 -1
- package/packages/piagent-core/runtime/inspection/bounded-emission-guard.ts +286 -0
- package/packages/piagent-core/runtime/inspection/runtime-event-store.ts +37 -7
- package/packages/piagent-core/runtime/inspection/same-process-bridge-proof.ts +1 -1
- package/packages/piagent-core/runtime/inspection/task-handoff-history.ts +2 -2
- package/packages/piagent-core/runtime/inspection/task-subagent-tree.ts +27 -4
- package/packages/piagent-core/runtime/inspection/tool-failure-classification.ts +69 -11
- package/packages/piagent-core/runtime/inspection/webui-snapshot.ts +104 -22
- package/packages/piagent-core/runtime/inspection/workspace-file-reader.ts +2 -132
- package/packages/piagent-core/runtime/model/provider-wire-fingerprint.ts +20 -0
- package/packages/piagent-core/runtime/model/service-tier-runtime.ts +242 -0
- package/packages/piagent-core/runtime/orchestration/helper-lifecycle.ts +16 -12
- package/packages/piagent-core/runtime/orchestration/minimal-delegation-policy.ts +71 -0
- package/packages/piagent-core/runtime/orchestration/owned-work-budget.ts +28 -20
- package/packages/piagent-core/runtime/orchestration/role-policy.ts +27 -9
- package/packages/piagent-core/runtime/orchestration/subagent-tool-policy.ts +329 -0
- package/packages/piagent-core/runtime/policy/block-remedy.ts +0 -4
- package/packages/piagent-core/runtime/policy/source-worktree-transaction.ts +75 -14
- package/packages/piagent-core/runtime/product/activity-inspector.ts +6 -3
- package/packages/piagent-core/runtime/product/edit-verifier-timing.ts +26 -0
- package/packages/piagent-core/runtime/product/efficiency-metrics.ts +15 -7
- package/packages/piagent-core/runtime/product/operator-projections.ts +8 -3
- package/packages/piagent-core/runtime/product/task-usage-hooks.ts +78 -0
- package/packages/piagent-core/runtime/product/task-usage.ts +104 -0
- package/packages/piagent-core/runtime/quality/edit-freshness-guard.ts +102 -0
- package/packages/piagent-core/runtime/quality/exact-output-contract.ts +20 -10
- package/packages/piagent-core/runtime/quality/performance-assurance.ts +3 -3
- package/packages/piagent-core/runtime/quality/protected-refusal-handoff.ts +35 -0
- package/packages/piagent-core/runtime/recovery/acceptance-recovery-guidance.ts +21 -0
- package/packages/piagent-core/runtime/recovery/continuation-budget.ts +12 -3
- package/packages/piagent-core/runtime/recovery/diagnostic-delivery.ts +61 -0
- package/packages/piagent-core/runtime/recovery/handoff-projection.ts +196 -58
- package/packages/piagent-core/runtime/recovery/handoff-verifier-binding.ts +24 -0
- package/packages/piagent-core/runtime/recovery/independent-verification-recovery.ts +79 -0
- package/packages/piagent-core/runtime/recovery/pristine-task-policy-refresh.ts +91 -0
- package/packages/piagent-core/runtime/recovery/recovery-policy.ts +31 -40
- package/packages/piagent-core/runtime/recovery/resume-state.ts +120 -19
- package/packages/piagent-core/runtime/recovery/semantic-repair-handshake.ts +7 -13
- package/packages/piagent-core/runtime/recovery/task-evidence-coverage-refresh.ts +217 -0
- package/packages/piagent-core/runtime/registration/activity-inspector-command.ts +2 -1
- package/packages/piagent-core/runtime/registration/context-commands.ts +28 -10
- package/packages/piagent-core/runtime/registration/knowledge-tools.ts +9 -5
- package/packages/piagent-core/runtime/registration/operator-catalogs.ts +4 -9
- package/packages/piagent-core/runtime/registration/operator-request-intake.ts +49 -0
- package/packages/piagent-core/runtime/registration/policy-tools.ts +8 -6
- package/packages/piagent-core/runtime/registration/session-commands.ts +10 -8
- package/packages/piagent-core/runtime/registration/session-wait-tool.ts +54 -0
- package/packages/piagent-core/runtime/registration/task-completion-tools.ts +39 -20
- package/packages/piagent-core/runtime/registration/task-evidence-tools.ts +21 -12
- package/packages/piagent-core/runtime/registration/task-start-conditional-mutation.ts +45 -0
- package/packages/piagent-core/runtime/registration/task-start-guidance.ts +24 -15
- package/packages/piagent-core/runtime/registration/task-start-manifest.ts +54 -0
- package/packages/piagent-core/runtime/registration/task-start-tool.ts +79 -79
- package/packages/piagent-core/runtime/registration/workflow-commands.ts +64 -93
- package/packages/piagent-core/runtime/runtime-limits.ts +16 -2
- package/packages/piagent-core/runtime/session/adaptive-context-analysis.ts +461 -0
- package/packages/piagent-core/runtime/session/adaptive-context-governor.ts +464 -0
- package/packages/piagent-core/runtime/session/adaptive-context-ledger.ts +265 -0
- package/packages/piagent-core/runtime/session/completion-signals.ts +23 -0
- package/packages/piagent-core/runtime/session/message-signals.ts +6 -18
- package/packages/piagent-core/runtime/session/operator-request-carry.ts +44 -0
- package/packages/piagent-core/runtime/session/retrieval-evidence-runtime.ts +188 -0
- package/packages/piagent-core/runtime/session/runtime-state.ts +37 -39
- package/packages/piagent-core/runtime/session/source-checkout-read-grants.ts +35 -0
- package/packages/piagent-core/runtime/session/system-prompt.ts +76 -14
- package/packages/piagent-core/runtime/session/task-contract-presentation.ts +39 -0
- package/packages/piagent-core/runtime/session/uncertain-send-continuation.ts +231 -0
- package/packages/piagent-core/runtime/session/usage.ts +4 -3
- package/packages/piagent-core/runtime/tools/apply-patch-tool.ts +6 -6
- package/packages/piagent-core/runtime/tools/phase-tool-runtime.ts +1 -1
- package/packages/piagent-core/runtime/tools/phase-tools.ts +10 -9
- package/packages/piagent-core/runtime/tools/session-wait.ts +42 -0
- package/packages/piagent-core/runtime/tools/tool-groups.ts +22 -5
- package/packages/piagent-core/runtime/trajectory/trajectory-runtime.ts +192 -5
- package/packages/piagent-core/runtime/trajectory/trajectory-types.ts +3 -2
- package/packages/piagent-core/runtime/verification/acceptance-api-baseline.js +488 -0
- package/packages/piagent-core/runtime/verification/completion-preparation.ts +22 -0
- package/packages/piagent-core/runtime/verification/composite-completion-finalizer.ts +105 -0
- package/packages/piagent-core/runtime/verification/composite-journal-anchor.ts +181 -0
- package/packages/piagent-core/runtime/verification/composite-runtime-binding.ts +76 -0
- package/packages/piagent-core/runtime/verification/composite-scoped-mediation.ts +318 -0
- package/packages/piagent-core/runtime/verification/composite-session-persistence.ts +175 -0
- package/packages/piagent-core/runtime/verification/composite-task-publication.ts +273 -0
- package/packages/piagent-core/runtime/verification/exact-verifier-reuse.ts +101 -0
- package/packages/piagent-core/runtime/verification/host-project-verification.ts +71 -0
- package/packages/piagent-core/runtime/verification/independent-acceptance-runtime.ts +500 -0
- package/packages/piagent-core/runtime/verification/runtime-assurance-facts.ts +500 -0
- package/packages/piagent-core/runtime/verification/runtime-contract-runner.ts +107 -0
- package/packages/piagent-core/runtime/verification/shell-verification-snapshots.ts +56 -0
- package/packages/piagent-core/runtime/workflows/change-clarification.ts +61 -0
- package/packages/piagent-core/runtime/workflows/input-routing.ts +21 -14
- package/packages/piagent-core/runtime/workflows/runtime-intake-compaction.ts +201 -0
- package/packages/piagent-core/runtime/workflows/task-followup-policy.ts +163 -0
- package/packages/piagent-core/runtime/workflows/task-intake.ts +276 -169
- package/packages/piagent-core/runtime/workflows/task-repair-intent.ts +67 -0
- package/packages/piagent-core/runtime/workflows/task-scope-resolution.ts +83 -0
- package/packages/piagent-core/runtime/workflows/webui-runtime-command.ts +5 -2
- package/packages/piagent-core/runtime/workflows/webui-workflow.ts +39 -32
- package/packages/piagent-core/runtime/workflows/workflow-follow-up.ts +33 -0
- package/packages/piagent-core/security/workspace-file-reader.ts +132 -0
- package/packages/piagent-core/subagents/piagent-oracle.md +5 -3
- package/packages/piagent-core/subagents/piagent-planner.md +6 -4
- package/packages/piagent-core/subagents/piagent-reviewer.md +5 -3
- package/packages/piagent-core/subagents/piagent-scout.md +4 -2
- package/packages/piagent-core/subagents/piagent-worker.md +6 -4
- package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-CxeZqTte.js → MarkdownMessage-DGk34zJT.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/{index-BV-_03yl.css → index-DVahUVWy.css} +1 -1
- package/packages/piagent-webui/dist/client/assets/index-DiKRmCEP.js +176 -0
- package/packages/piagent-webui/dist/client/index.html +2 -2
- package/packages/piagent-webui/extension/dispatch-user-entry.ts +13 -0
- package/packages/piagent-webui/extension/piagent-webui.ts +13 -3
- package/packages/piagent-webui/extension/review-controller.ts +29 -6
- package/packages/piagent-webui/extension/same-session-bridge.ts +7 -8
- package/packages/piagent-webui/extension/session-stream-adapter.ts +88 -16
- package/packages/piagent-webui/extension/source-mutation-controller.ts +29 -3
- package/packages/piagent-webui/extension/source-open-controller.ts +29 -7
- package/packages/piagent-webui/extension/source-revert-controller.ts +26 -3
- package/packages/piagent-webui/gateway/gateway-events.ts +22 -5
- package/packages/piagent-webui/gateway/gateway-service.ts +7 -2
- package/packages/piagent-webui/gateway/gateway-session-stream.ts +170 -32
- package/packages/piagent-webui/gateway/rpc-ui-context.ts +34 -9
- package/packages/piagent-webui/gateway/runtime-command-controller.ts +46 -6
- package/packages/piagent-webui/gateway/runtime-session-controls.ts +17 -2
- package/packages/piagent-webui/gateway/session-catalog.ts +9 -3
- package/packages/piagent-webui/gateway/session-command-controller.ts +29 -9
- package/packages/piagent-webui/gateway/session-effective-options.ts +2 -9
- package/packages/piagent-webui/gateway/session-inspection-registry.ts +11 -2
- package/packages/piagent-webui/gateway/session-operation-lifecycle.ts +237 -0
- package/packages/piagent-webui/gateway/session-operation-retry-control.ts +38 -0
- package/packages/piagent-webui/gateway/session-operation-settlement.ts +28 -0
- package/packages/piagent-webui/gateway/session-operation-watchdog.ts +9 -2
- package/packages/piagent-webui/gateway/session-prompt-dispatch.ts +37 -0
- package/packages/piagent-webui/gateway/session-runtime-close.ts +36 -0
- package/packages/piagent-webui/gateway/session-runtime-factory.ts +183 -6
- package/packages/piagent-webui/gateway/session-runtime-ownership.ts +48 -0
- package/packages/piagent-webui/gateway/session-runtime-state.ts +24 -0
- package/packages/piagent-webui/gateway/session-runtime-supervisor.ts +118 -117
- package/packages/piagent-webui/ownership/session-lease-store.ts +5 -2
- package/packages/piagent-webui/server/core-inspection-provider.ts +75 -15
- package/packages/piagent-webui/server/loopback-server.ts +9 -7
- package/packages/piagent-webui/server/terminal-delivery-receipt.ts +144 -0
- package/packages/piagent-webui/server/transcript-projection.ts +150 -11
- package/packages/piagent-webui/shared/message-correlation.ts +25 -0
- package/schemas/approved-host-contracts.schema.json +973 -0
- package/schemas/benchmark-attempt-outcome.schema.json +303 -0
- package/schemas/benchmark-independent-verification-plan.schema.json +34 -0
- package/schemas/codex-relative-efficiency-v1.schema.json +155 -0
- package/schemas/composite-criterion.schema.json +788 -0
- package/schemas/contract-family-library.schema.json +28 -0
- package/schemas/contract-selection-recipe.schema.json +31 -0
- package/schemas/failure-evidence.schema.json +2 -2
- package/schemas/helper-request.schema.json +16 -4
- package/schemas/host-contract-plan.schema.json +25 -0
- package/schemas/piagent-webui/gateway-protocol-v1.schema.json +16 -2
- package/schemas/piagent-webui/runtime-command-v1.schema.json +26 -3
- package/schemas/piagent-webui/runtime-event-v2.schema.json +46 -5
- package/schemas/piagent-webui/session-live-state-v1.schema.json +2 -0
- package/schemas/piagent-webui/snapshot-v1.schema.json +3 -0
- package/schemas/piagent-webui/source-change-v1.schema.json +12 -0
- package/schemas/piagent-webui/subagent-tree-v1.schema.json +11 -1
- package/schemas/piagent-webui/transcript-v1.schema.json +2 -1
- package/schemas/project-profile.schema.json +1 -1
- package/schemas/public-contracts/codex-mcp-metadata-v1.schema.json +206 -0
- package/schemas/public-contracts/codex-mcp-metadata-v2.schema.json +228 -0
- package/schemas/public-contracts/codex-mcp-metadata-v3.schema.json +233 -0
- package/schemas/public-contracts/revocation-v1.schema.json +87 -0
- package/schemas/public-contracts/subscription-contract-v1.schema.json +76 -0
- package/schemas/scoped-project-verification-receipt-v2.schema.json +83 -0
- package/schemas/scoped-project-verification-receipt-v3.schema.json +295 -0
- package/schemas/scoped-verification-receipt-v1.schema.json +76 -0
- package/schemas/task-contract.schema.json +45 -0
- package/scripts/approve-independent-verification.mjs +57 -0
- package/scripts/benchmark-arm-observer.mjs +320 -0
- package/scripts/benchmark-budget-ipc.mjs +34 -0
- package/scripts/benchmark-budget-launcher.mjs +91 -0
- package/scripts/benchmark-budget-processes.mjs +133 -0
- package/scripts/benchmark-budget-publication.mjs +228 -0
- package/scripts/benchmark-budget-runtime.mjs +136 -0
- package/scripts/benchmark-candidate-ablation.mjs +265 -0
- package/scripts/benchmark-codex-journey.mjs +406 -0
- package/scripts/benchmark-independent-verification.mjs +628 -0
- package/scripts/benchmark-journey-outcome.mjs +92 -0
- package/scripts/benchmark-production-v3-human-review.mjs +192 -0
- package/scripts/benchmark-public-input-catalog.mjs +158 -0
- package/scripts/benchmark-registered-plan-author.mjs +355 -0
- package/scripts/benchmark-registered-plan-recipe-support.mjs +85 -0
- package/scripts/benchmark-registered-plan-recipes-backend.mjs +165 -0
- package/scripts/benchmark-registered-plan-recipes-data.mjs +164 -0
- package/scripts/benchmark-registered-plan-recipes-platform.mjs +165 -0
- package/scripts/benchmark-runner-completion.mjs +133 -0
- package/scripts/benchmark-runner-configuration.mjs +159 -0
- package/scripts/benchmark-runner-core.mjs +224 -387
- package/scripts/benchmark-runner-finalization.mjs +144 -27
- package/scripts/benchmark-runner-provider-boundary.mjs +44 -0
- package/scripts/benchmark-runner-schedule.mjs +256 -0
- package/scripts/benchmark-runner-support.mjs +136 -4
- package/scripts/benchmark-runner.mjs +95 -18
- package/scripts/benchmark-scoped-broker-custody.mjs +483 -0
- package/scripts/benchmark-scoped-docs-verifier.mjs +203 -0
- package/scripts/benchmark-scoped-frozen-qualification.mjs +676 -0
- package/scripts/benchmark-scoped-pi-router.mjs +196 -0
- package/scripts/benchmark-scoped-project-verification-receipt.mjs +49 -0
- package/scripts/benchmark-scoped-project-verifier.mjs +461 -0
- package/scripts/benchmark-scoped-session-custody.mjs +599 -0
- package/scripts/benchmark-scoped-session-factory.mjs +342 -0
- package/scripts/benchmark-scoped-tool-broker.mjs +523 -0
- package/scripts/benchmark-scoped-verification-supervisor.mjs +773 -0
- package/scripts/benchmark-session-evaluator.mjs +169 -0
- package/scripts/benchmark-session-provider-boundary.mjs +62 -0
- package/scripts/benchmark-session-usage.mjs +28 -0
- package/scripts/benchmark-session.mjs +343 -50
- package/scripts/benchmark-webui-journey.mjs +678 -0
- package/scripts/check-public-wording.mjs +46 -0
- package/scripts/configure-subagents.sh +42 -34
- package/scripts/fs4-readiness-evaluation.mjs +7 -1
- package/scripts/helper-evaluation.mjs +1 -1
- package/scripts/phase-tools-evaluation.mjs +1 -0
- package/scripts/pi-auto.sh +7 -1
- package/scripts/pi-usage-history.mjs +201 -11
- package/scripts/piagent-cli.mjs +8 -0
- package/scripts/private-holdout-readiness.mjs +7 -1
- package/scripts/public-evaluation-exposure.mjs +140 -0
- package/scripts/select-independent-verification.mjs +62 -0
- package/scripts/team-doctor.sh +1 -1
- package/scripts/typescript-loader.mjs +135 -1
- package/scripts/update-global.mjs +6 -7
- package/scripts/verify-local.sh +41 -55
- package/scripts/verify-release-identity.mjs +5 -3
- package/packages/piagent-webui/dist/client/assets/index-DynIMe8I.js +0 -176
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import crypto from "node:crypto";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { isDeepStrictEqual } from "node:util";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
|
|
8
|
+
export const EXPOSURE_PATH = "evals/private-holdout-v1/public-exposure.v2.json";
|
|
9
|
+
const PREVIOUS_PATH = "evals/private-holdout-v1/public-exposure.v1.json";
|
|
10
|
+
const TAXONOMY_PATH = "evals/real-task-taxonomy.v1.json";
|
|
11
|
+
const PUBLIC_TREES = [
|
|
12
|
+
"adapters", "benchmarks", "evals/architecture-conformance-v1", "evals/golden",
|
|
13
|
+
"evals/harness-next", "evals/long-horizon-v1", "evals/runtime-conformance-v1",
|
|
14
|
+
"evals/scenarios", "tests"
|
|
15
|
+
];
|
|
16
|
+
const sha256 = (bytes) => crypto.createHash("sha256").update(bytes).digest("hex");
|
|
17
|
+
const MAX_FILES = 10_000, MAX_FILE_BYTES = 4 * 1024 * 1024, MAX_TOTAL_BYTES = 64 * 1024 * 1024;
|
|
18
|
+
const DEFAULT_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
19
|
+
|
|
20
|
+
function reader(root) {
|
|
21
|
+
let total = 0, count = 0;
|
|
22
|
+
const cache = new Map();
|
|
23
|
+
function checked(relative) {
|
|
24
|
+
let current = root;
|
|
25
|
+
for (const part of relative.split("/")) {
|
|
26
|
+
if (!part || part === "." || part === ".." || part.includes("\\")) throw new Error("Invalid public exposure path");
|
|
27
|
+
current = path.join(current, part);
|
|
28
|
+
if (fs.lstatSync(current).isSymbolicLink()) throw new Error("Public exposure inputs must not be symlinks");
|
|
29
|
+
}
|
|
30
|
+
return current;
|
|
31
|
+
}
|
|
32
|
+
function bytes(relative) {
|
|
33
|
+
if (cache.has(relative)) return cache.get(relative);
|
|
34
|
+
const target = checked(relative), descriptor = fs.openSync(target, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW);
|
|
35
|
+
let value;
|
|
36
|
+
try {
|
|
37
|
+
const stat = fs.fstatSync(descriptor);
|
|
38
|
+
if (!stat.isFile() || stat.size > MAX_FILE_BYTES) throw new Error("Public exposure input is not a bounded regular file");
|
|
39
|
+
value = fs.readFileSync(descriptor);
|
|
40
|
+
} finally { fs.closeSync(descriptor); }
|
|
41
|
+
total += value.length;
|
|
42
|
+
if (value.length > MAX_FILE_BYTES || ++count > MAX_FILES || total > MAX_TOTAL_BYTES) throw new Error("Public exposure inventory exceeds its limits");
|
|
43
|
+
cache.set(relative, value);
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function files(relative) {
|
|
47
|
+
const target = checked(relative);
|
|
48
|
+
if (!fs.statSync(target).isDirectory()) throw new Error("Public exposure tree is not a directory");
|
|
49
|
+
const result = [];
|
|
50
|
+
for (const name of fs.readdirSync(target).sort()) {
|
|
51
|
+
const child = `${relative}/${name}`, stat = fs.lstatSync(checked(child));
|
|
52
|
+
if (stat.isDirectory()) result.push(...files(child));
|
|
53
|
+
else if (stat.isFile()) { bytes(child); result.push(child); }
|
|
54
|
+
else throw new Error("Public exposure tree contains a non-regular input");
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
return { bytes, files, json: (relative) => JSON.parse(bytes(relative).toString("utf8")) };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Inventory public files only. Never load a private suite or execute an oracle.
|
|
62
|
+
// The predecessor is retained rather than silently erasing earlier exposure.
|
|
63
|
+
export function buildPublicExposure(root = DEFAULT_ROOT) {
|
|
64
|
+
const read = reader(root), allFiles = new Map();
|
|
65
|
+
const visibleTrees = PUBLIC_TREES.map((relative) => {
|
|
66
|
+
const entries = read.files(relative).sort().map((file) => {
|
|
67
|
+
const bytes = read.bytes(file), digest = sha256(bytes);
|
|
68
|
+
allFiles.set(file, bytes);
|
|
69
|
+
return [file, digest];
|
|
70
|
+
});
|
|
71
|
+
return { path: relative, fileCount: entries.length, sha256: sha256(JSON.stringify(entries)) };
|
|
72
|
+
});
|
|
73
|
+
const visibleSuites = [...allFiles.keys()].filter((file) => /^benchmarks\/[^/]+\/suite\.json$/.test(file)).map((file) => {
|
|
74
|
+
const suite = read.json(file);
|
|
75
|
+
if (!/^[a-z0-9-]+$/.test(suite.id ?? "") || file !== `benchmarks/${suite.id}/suite.json`
|
|
76
|
+
|| !Array.isArray(suite.scenarios) || suite.scenarios.length === 0) throw new Error("Invalid public suite identity");
|
|
77
|
+
const scenarioIds = suite.scenarios.map((scenario) => scenario.id);
|
|
78
|
+
if (scenarioIds.some((id) => !/^[a-z0-9-]+$/.test(id ?? "")) || new Set(scenarioIds).size !== scenarioIds.length) throw new Error("Invalid public scenario identities");
|
|
79
|
+
return { id: suite.id, path: file, manifestSha256: sha256(read.bytes(file)), scenarioIds };
|
|
80
|
+
});
|
|
81
|
+
const contractLibraries = [...allFiles.keys()].filter((file) => /^adapters\/[^/]+\/contract-families\.json$/.test(file)).map((file) => {
|
|
82
|
+
const library = read.json(file);
|
|
83
|
+
if (library.schemaVersion !== 1 || !Array.isArray(library.families)) throw new Error("Invalid public contract library");
|
|
84
|
+
const families = library.families.map(({ id, version }) => {
|
|
85
|
+
if (!/^[a-z0-9-]+$/.test(id ?? "") || !Number.isSafeInteger(version) || version < 1) throw new Error("Invalid public contract family identity");
|
|
86
|
+
return { id, version };
|
|
87
|
+
});
|
|
88
|
+
if (new Set(families.map(({ id, version }) => `${id}@${version}`)).size !== families.length) throw new Error("Duplicate public contract family identity");
|
|
89
|
+
return { path: file, sha256: sha256(read.bytes(file)), families };
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
schemaVersion: 2,
|
|
93
|
+
id: "author-visible-evaluation-exposure-v2",
|
|
94
|
+
previousExposure: { path: PREVIOUS_PATH, sha256: sha256(read.bytes(PREVIOUS_PATH)) },
|
|
95
|
+
taxonomy: { path: TAXONOMY_PATH, sha256: sha256(read.bytes(TAXONOMY_PATH)) },
|
|
96
|
+
visibleSuites,
|
|
97
|
+
contractLibraries,
|
|
98
|
+
visibleTrees,
|
|
99
|
+
custodianComparisonRules: {
|
|
100
|
+
familyKey: "Compare private task and acceptance-mechanism lineage against every listed suite, contract family, public tree and predecessor exposure; renamed, generated or structurally varied descendants are not disjoint.",
|
|
101
|
+
repositoryKey: "Compare repository history, origin, package graph and fixture lineage, not names alone.",
|
|
102
|
+
minimumPrivateScenarios: 6, minimumPrivateFamilies: 6, minimumPrivateRepositories: 6,
|
|
103
|
+
externalExposure: "The custodian must independently account for author-visible material outside these public roots, including prior local diagnostics and retained campaigns; this inventory is not a complete record of author knowledge.",
|
|
104
|
+
publicOutput: "Export only the closed schema-v2 assurance receipt and independent custody attestation."
|
|
105
|
+
},
|
|
106
|
+
claimBoundary: "Current public-input inventory only, not independent evaluation, approval, generalization or release evidence. Public-tree digests bind [relative path, file SHA-256] pairs globally sorted by the slash-separated path's UTF-16 code units, serialized as compact JSON and hashed as UTF-8; no private artifacts are loaded."
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function verifyPublicExposure(root = DEFAULT_ROOT) {
|
|
111
|
+
const read = reader(root), bytes = read.bytes(EXPOSURE_PATH), actual = JSON.parse(bytes.toString("utf8"));
|
|
112
|
+
if (!isDeepStrictEqual(actual, buildPublicExposure(root))) throw new Error("Current public exposure inventory is stale or incomplete; regenerate and obtain a new independent custody receipt");
|
|
113
|
+
return { path: EXPOSURE_PATH, sha256: sha256(bytes), suiteCount: actual.visibleSuites.length,
|
|
114
|
+
scenarioCount: actual.visibleSuites.reduce((sum, suite) => sum + suite.scenarioIds.length, 0),
|
|
115
|
+
contractFamilyVersionCount: actual.contractLibraries.reduce((sum, library) => sum + library.families.length, 0),
|
|
116
|
+
publicTreeCount: actual.visibleTrees.length };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Node resolves module URLs through filesystem aliases. Compare actual files,
|
|
120
|
+
// otherwise /var versus /private/var (or a global-bin symlink) can skip the CLI.
|
|
121
|
+
const invokedDirectly = process.argv[1] && fs.existsSync(process.argv[1])
|
|
122
|
+
&& fs.realpathSync(process.argv[1]) === fs.realpathSync(fileURLToPath(import.meta.url));
|
|
123
|
+
if (invokedDirectly) {
|
|
124
|
+
if (process.argv.length === 3 && ["--help", "-h"].includes(process.argv[2])) {
|
|
125
|
+
process.stdout.write("Usage: node scripts/public-evaluation-exposure.mjs --check|--write\nRequires the complete public source tree, including development tests. Generation does not grant custody or provider authority.\n");
|
|
126
|
+
process.exit(0);
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
if (process.argv.length !== 3 || !["--check", "--write"].includes(process.argv[2])) throw new Error("Usage: node scripts/public-evaluation-exposure.mjs --check|--write");
|
|
130
|
+
if (process.argv[2] === "--write") {
|
|
131
|
+
const destination = path.join(DEFAULT_ROOT, EXPOSURE_PATH);
|
|
132
|
+
if (fs.existsSync(destination) && fs.lstatSync(destination).isSymbolicLink()) throw new Error("Refusing a symlinked public exposure destination");
|
|
133
|
+
fs.writeFileSync(destination, `${JSON.stringify(buildPublicExposure(), null, 2)}\n`);
|
|
134
|
+
}
|
|
135
|
+
process.stdout.write(`${JSON.stringify(verifyPublicExposure())}\n`);
|
|
136
|
+
} catch {
|
|
137
|
+
process.stderr.write("REFUSED: current public exposure inventory is unavailable, stale or incomplete; inspect public inputs and regenerate before independent custody review\n");
|
|
138
|
+
process.exitCode = 1;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { compileContractSelection } from "../packages/piagent-core/extensions/acceptance-contract-selection.js";
|
|
5
|
+
import { prepareHostContractApproval } from "../packages/piagent-core/extensions/acceptance-host-configuration.js";
|
|
6
|
+
|
|
7
|
+
const help = `Usage: piagent select-verification --project PATH --task FILE --recipe FILE [--library FILE] [--output NEW_FILE]
|
|
8
|
+
|
|
9
|
+
Compile reusable contract families against exact task criterion text/obligation.
|
|
10
|
+
Default library: adapters/node-typescript/contract-families.json
|
|
11
|
+
Recipe schema: schemas/contract-selection-recipe.schema.json
|
|
12
|
+
This only previews a plan. It never reads candidate source, executes project code,
|
|
13
|
+
starts a worker, calls a model or creates verification authority.
|
|
14
|
+
The task JSON is a selection input, not evidence. Review the selected semantics,
|
|
15
|
+
parameters, expanded checks and unselected criteria before approve-verification.
|
|
16
|
+
--output creates a new private plan file only when every requested selection is
|
|
17
|
+
unambiguous. It never overwrites a file. Unknown selection exits with status 2.
|
|
18
|
+
`;
|
|
19
|
+
|
|
20
|
+
function read(file, maximum) {
|
|
21
|
+
const fd = fs.openSync(path.resolve(file), fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW);
|
|
22
|
+
try {
|
|
23
|
+
const before = fs.fstatSync(fd);
|
|
24
|
+
if (!before.isFile() || before.nlink !== 1 || before.size < 1 || before.size > maximum) throw new Error("Invalid selection input file");
|
|
25
|
+
const bytes = fs.readFileSync(fd), after = fs.fstatSync(fd);
|
|
26
|
+
if (bytes.length !== before.size || before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs) {
|
|
27
|
+
throw new Error("Selection input changed while reading");
|
|
28
|
+
}
|
|
29
|
+
const text = bytes.toString("utf8");
|
|
30
|
+
if (!Buffer.from(text).equals(bytes)) throw new Error("Selection input must be UTF-8");
|
|
31
|
+
return text;
|
|
32
|
+
} finally { fs.closeSync(fd); }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const args = process.argv.slice(2), options = {};
|
|
37
|
+
if (args.length === 1 && ["--help", "-h"].includes(args[0])) { process.stdout.write(help); process.exit(0); }
|
|
38
|
+
for (let index = 0; index < args.length; index += 2) {
|
|
39
|
+
const flag = args[index], value = args[index + 1];
|
|
40
|
+
if (!["--project", "--task", "--recipe", "--library", "--output"].includes(flag)
|
|
41
|
+
|| Object.hasOwn(options, flag) || !value || value.startsWith("--")) throw new Error("Unknown, repeated or incomplete option");
|
|
42
|
+
options[flag] = value;
|
|
43
|
+
}
|
|
44
|
+
if (!options["--project"] || !options["--task"] || !options["--recipe"]) throw new Error("--project, --task and --recipe are required");
|
|
45
|
+
const installedRoot = path.resolve(import.meta.dirname, ".."), projectRoot = fs.realpathSync.native(options["--project"]);
|
|
46
|
+
const result = compileContractSelection({
|
|
47
|
+
libraryText: read(options["--library"] ?? path.join(installedRoot, "adapters/node-typescript/contract-families.json"), 2 * 1024 * 1024),
|
|
48
|
+
taskText: read(options["--task"], 2 * 1024 * 1024), recipeText: read(options["--recipe"], 512 * 1024)
|
|
49
|
+
});
|
|
50
|
+
if (!result.plan) { process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); process.exitCode = 2; }
|
|
51
|
+
else {
|
|
52
|
+
// Same validation as explicit approval; preview still creates no authority.
|
|
53
|
+
prepareHostContractApproval({ projectRoot, installedRoot, ...result.plan });
|
|
54
|
+
let output;
|
|
55
|
+
if (options["--output"]) {
|
|
56
|
+
output = path.resolve(options["--output"]);
|
|
57
|
+
const fd = fs.openSync(output, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_NOFOLLOW, 0o600);
|
|
58
|
+
try { fs.writeFileSync(fd, `${JSON.stringify(result.plan, null, 2)}\n`); fs.fsyncSync(fd); } finally { fs.closeSync(fd); }
|
|
59
|
+
}
|
|
60
|
+
process.stdout.write(`${JSON.stringify({ ...result, ...(output ? { output } : {}) }, null, 2)}\n`);
|
|
61
|
+
}
|
|
62
|
+
} catch (error) { process.stderr.write(`Contract selection failed: ${error.message}\n`); process.exitCode = 1; }
|
package/scripts/team-doctor.sh
CHANGED
|
@@ -506,7 +506,7 @@ const productReadiness = {
|
|
|
506
506
|
subagents: { packageAvailable: piHasSubagents, roleDefinitions: rootPackage.pi?.subagents?.agents ?? [] },
|
|
507
507
|
executionBackend: projectProfile?.executionBackend?.type ?? "host",
|
|
508
508
|
executionBoundary: "host execution is not a sandbox",
|
|
509
|
-
featureModes: { solver: process.env.PIAGENT_SOLVER_MODE ?? "shadow", phaseTools: process.env.PIAGENT_PHASE_TOOLS ?? "shadow", recovery: process.env.PIAGENT_AUTO_RECOVERY ?? "on", helpers: process.env.PIAGENT_HELPERS_MODE ?? "
|
|
509
|
+
featureModes: { solver: process.env.PIAGENT_SOLVER_MODE ?? "shadow", phaseTools: process.env.PIAGENT_PHASE_TOOLS ?? "shadow", recovery: process.env.PIAGENT_AUTO_RECOVERY ?? "on", helpers: process.env.PIAGENT_HELPERS_MODE ?? "off" },
|
|
510
510
|
migrationRecovery: { taskStateExists: fs.existsSync(path.join(stateRoot, "tasks")), handoffStateExists: fs.existsSync(path.join(stateRoot, "handoffs")), action: "run piagent-doctor --json and inspect /piagent-status before deleting state" },
|
|
511
511
|
supportedPlatform: runtime.status,
|
|
512
512
|
rollbackTarget: { packageVersion: rootPackage.version ?? null, instruction: "reinstall the last known-good exact version after operator confirmation; project state is preserved" }
|
|
@@ -1,7 +1,141 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
1
2
|
import fs from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
2
4
|
import { stripTypeScriptTypes } from "node:module";
|
|
3
5
|
import path from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
7
|
+
|
|
8
|
+
const BENCHMARK_BOOTSTRAP_METADATA = "PIAGENT_BENCHMARK_BOOTSTRAP_METADATA";
|
|
9
|
+
const RUNTIME_DEPENDENCY_KEYS = [
|
|
10
|
+
"schemaVersion", "node", "platform", "packages", "resolutionRoot", "resolutionTree", "isolation", "digest"
|
|
11
|
+
];
|
|
12
|
+
const PACKAGE_NAME = /^(?:@[A-Za-z0-9][A-Za-z0-9._~-]*\/)?[A-Za-z0-9][A-Za-z0-9._~-]*$/;
|
|
13
|
+
|
|
14
|
+
let cachedRuntimeBinding = { encoded: null, value: null };
|
|
15
|
+
|
|
16
|
+
function record(value) {
|
|
17
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function exactKeys(value, keys) {
|
|
21
|
+
return record(value) && Object.keys(value).length === keys.length
|
|
22
|
+
&& Object.keys(value).every((key) => keys.includes(key));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function inside(root, target) {
|
|
26
|
+
const relative = path.relative(root, target);
|
|
27
|
+
return relative === "" || (relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function dependencyName(specifier) {
|
|
31
|
+
if (typeof specifier !== "string" || !specifier || specifier.startsWith(".") || specifier.startsWith("/")
|
|
32
|
+
|| specifier.startsWith("#") || specifier.includes("\\") || /^[A-Za-z][A-Za-z+.-]*:/.test(specifier)) return null;
|
|
33
|
+
const segments = specifier.split("/");
|
|
34
|
+
const name = specifier.startsWith("@") ? segments.slice(0, 2).join("/") : segments[0];
|
|
35
|
+
return PACKAGE_NAME.test(name) ? name : null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function runtimeDependencyError(reason) {
|
|
39
|
+
const error = new Error(`Benchmark runtime dependency binding rejected: ${reason}`);
|
|
40
|
+
error.code = "BENCHMARK_RUNTIME_DEPENDENCY_BINDING_REJECTED";
|
|
41
|
+
return error;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function parseRuntimeBinding(encoded) {
|
|
45
|
+
let metadata;
|
|
46
|
+
try { metadata = JSON.parse(Buffer.from(encoded, "base64url").toString("utf8")); }
|
|
47
|
+
catch { throw runtimeDependencyError("metadata-malformed"); }
|
|
48
|
+
const value = metadata?.runtimeDependencies;
|
|
49
|
+
if (metadata?.schemaVersion !== 1 || typeof metadata.snapshotRoot !== "string" || !path.isAbsolute(metadata.snapshotRoot)
|
|
50
|
+
|| !exactKeys(value, RUNTIME_DEPENDENCY_KEYS) || value.schemaVersion !== 2 || value.node !== process.version
|
|
51
|
+
|| value.platform !== `${os.platform()}-${os.arch()}` || !record(value.packages)
|
|
52
|
+
|| typeof value.resolutionRoot !== "string" || !path.isAbsolute(value.resolutionRoot)
|
|
53
|
+
|| path.basename(value.resolutionRoot) !== "node_modules" || typeof value.isolation !== "string"
|
|
54
|
+
|| !/^[a-f0-9]{64}$/.test(String(value.digest ?? ""))
|
|
55
|
+
|| !(value.resolutionTree === null || record(value.resolutionTree))) {
|
|
56
|
+
throw runtimeDependencyError("metadata-unsupported");
|
|
57
|
+
}
|
|
58
|
+
for (const [name, version] of Object.entries(value.packages)) {
|
|
59
|
+
if (!PACKAGE_NAME.test(name) || !(version === null || typeof version === "string" && version.length > 0)) {
|
|
60
|
+
throw runtimeDependencyError("package-binding-unsupported");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const identity = {
|
|
64
|
+
schemaVersion: value.schemaVersion,
|
|
65
|
+
node: value.node,
|
|
66
|
+
platform: value.platform,
|
|
67
|
+
packages: value.packages,
|
|
68
|
+
resolutionRoot: value.resolutionRoot,
|
|
69
|
+
resolutionTree: value.resolutionTree,
|
|
70
|
+
isolation: value.isolation
|
|
71
|
+
};
|
|
72
|
+
const digest = crypto.createHash("sha256").update(JSON.stringify(identity)).digest("hex");
|
|
73
|
+
if (digest !== value.digest) throw runtimeDependencyError("metadata-digest-mismatch");
|
|
74
|
+
return { snapshotRoot: metadata.snapshotRoot, ...identity };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function runtimeBinding() {
|
|
78
|
+
const encoded = process.env[BENCHMARK_BOOTSTRAP_METADATA];
|
|
79
|
+
if (!encoded) return null;
|
|
80
|
+
if (cachedRuntimeBinding.encoded === encoded) return cachedRuntimeBinding.value;
|
|
81
|
+
const parsed = parseRuntimeBinding(encoded);
|
|
82
|
+
let snapshotRoot;
|
|
83
|
+
let resolutionRoot;
|
|
84
|
+
try {
|
|
85
|
+
[snapshotRoot, resolutionRoot] = await Promise.all([
|
|
86
|
+
fs.realpath(parsed.snapshotRoot),
|
|
87
|
+
fs.realpath(parsed.resolutionRoot)
|
|
88
|
+
]);
|
|
89
|
+
} catch {
|
|
90
|
+
throw runtimeDependencyError("bound-root-unavailable");
|
|
91
|
+
}
|
|
92
|
+
const value = { ...parsed, snapshotRoot, resolutionRoot };
|
|
93
|
+
cachedRuntimeBinding = { encoded, value };
|
|
94
|
+
return value;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// The immutable benchmark candidate intentionally has no node_modules tree.
|
|
98
|
+
// Its bootstrap metadata binds the host dependency versions and the one root
|
|
99
|
+
// from which they may resolve. Redirect only a package declared by that
|
|
100
|
+
// binding, only for an importer inside the candidate, and then prove that the
|
|
101
|
+
// selected export remains inside the exact bound package root. This is much
|
|
102
|
+
// narrower than NODE_PATH and leaves normal dashboard/test resolution alone.
|
|
103
|
+
export async function resolve(specifier, context, nextResolve) {
|
|
104
|
+
const name = dependencyName(specifier);
|
|
105
|
+
if (!name || !process.env[BENCHMARK_BOOTSTRAP_METADATA]) return nextResolve(specifier, context);
|
|
106
|
+
const binding = await runtimeBinding();
|
|
107
|
+
if (!context.parentURL?.startsWith("file:")) return nextResolve(specifier, context);
|
|
108
|
+
let parent;
|
|
109
|
+
try { parent = await fs.realpath(fileURLToPath(context.parentURL)); }
|
|
110
|
+
catch { return nextResolve(specifier, context); }
|
|
111
|
+
if (!inside(binding.snapshotRoot, parent)) return nextResolve(specifier, context);
|
|
112
|
+
if (!Object.hasOwn(binding.packages, name)) throw runtimeDependencyError(`package-not-declared:${name}`);
|
|
113
|
+
const expectedVersion = binding.packages[name];
|
|
114
|
+
if (typeof expectedVersion !== "string") throw runtimeDependencyError(`package-unavailable:${name}`);
|
|
115
|
+
|
|
116
|
+
let packageRoot;
|
|
117
|
+
let manifest;
|
|
118
|
+
try {
|
|
119
|
+
packageRoot = await fs.realpath(path.join(binding.resolutionRoot, ...name.split("/")));
|
|
120
|
+
manifest = JSON.parse(await fs.readFile(path.join(packageRoot, "package.json"), "utf8"));
|
|
121
|
+
} catch {
|
|
122
|
+
throw runtimeDependencyError(`package-unreadable:${name}`);
|
|
123
|
+
}
|
|
124
|
+
if (!inside(binding.resolutionRoot, packageRoot) || manifest?.name !== name || manifest?.version !== expectedVersion) {
|
|
125
|
+
throw runtimeDependencyError(`package-identity-mismatch:${name}`);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const resolution = await nextResolve(specifier, {
|
|
129
|
+
...context,
|
|
130
|
+
parentURL: pathToFileURL(path.join(path.dirname(binding.resolutionRoot), ".piagent-benchmark-runtime-resolver.mjs")).href
|
|
131
|
+
});
|
|
132
|
+
if (!resolution?.url?.startsWith("file:")) throw runtimeDependencyError(`package-export-invalid:${name}`);
|
|
133
|
+
let target;
|
|
134
|
+
try { target = await fs.realpath(fileURLToPath(resolution.url)); }
|
|
135
|
+
catch { throw runtimeDependencyError(`package-export-unreadable:${name}`); }
|
|
136
|
+
if (!inside(packageRoot, target)) throw runtimeDependencyError(`package-export-escaped:${name}`);
|
|
137
|
+
return resolution;
|
|
138
|
+
}
|
|
5
139
|
|
|
6
140
|
// Repository TypeScript must remain erasable: the integrity lock hashes the
|
|
7
141
|
// source bytes and `strip` fails closed if a future change needs codegen.
|
|
@@ -402,6 +402,12 @@ function main() {
|
|
|
402
402
|
const manifest = readJson(path.join(platformRoot, "package.json"));
|
|
403
403
|
if (!manifest?.version) fail(`cannot read the helper package at ${platformRoot}`);
|
|
404
404
|
const currentHelper = manifest.version;
|
|
405
|
+
if (!options.check && !options.dryRun && !runningFromGlobalInstall()) {
|
|
406
|
+
fail(`this command updates the npm-global helper, but it is running from ${platformRoot}.\n`
|
|
407
|
+
+ "From a checkout, update with git and install from it:\n"
|
|
408
|
+
+ ` git -C ${platformRoot} pull\n`
|
|
409
|
+
+ ` bash ${path.join(platformRoot, "scripts/install-global.sh")} --local`);
|
|
410
|
+
}
|
|
405
411
|
const currentHost = installedHostVersion();
|
|
406
412
|
|
|
407
413
|
const targetHelper = options.version ?? npmView(HELPER_PACKAGE, "version");
|
|
@@ -439,13 +445,6 @@ function main() {
|
|
|
439
445
|
return;
|
|
440
446
|
}
|
|
441
447
|
|
|
442
|
-
if (!options.dryRun && !runningFromGlobalInstall()) {
|
|
443
|
-
fail(`this command updates the npm-global helper, but it is running from ${platformRoot}.\n`
|
|
444
|
-
+ "From a checkout, update with git and install from it:\n"
|
|
445
|
-
+ ` git -C ${platformRoot} pull\n`
|
|
446
|
-
+ ` bash ${path.join(platformRoot, "scripts/install-global.sh")} --local`);
|
|
447
|
-
}
|
|
448
|
-
|
|
449
448
|
let activePlatformRoot = platformRoot;
|
|
450
449
|
const npmTarget = resolveNpmInstallTarget(options, hostNeedsChange || helperNeedsChange);
|
|
451
450
|
if (npmTarget.bin) prependPath(npmTarget.bin);
|
package/scripts/verify-local.sh
CHANGED
|
@@ -3,14 +3,17 @@ set -euo pipefail
|
|
|
3
3
|
|
|
4
4
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
5
|
OFFLINE=false
|
|
6
|
+
KEEP_GOING=false
|
|
7
|
+
failed_commands=()
|
|
6
8
|
|
|
7
9
|
usage() {
|
|
8
10
|
cat <<'USAGE'
|
|
9
11
|
Usage:
|
|
10
|
-
scripts/verify-local.sh [--offline]
|
|
12
|
+
scripts/verify-local.sh [--offline] [--keep-going]
|
|
11
13
|
|
|
12
14
|
Options:
|
|
13
15
|
--offline Skip checks that require a local Pi login/model catalog.
|
|
16
|
+
--keep-going Run all build/test groups after a group fails; retain a failing final exit.
|
|
14
17
|
USAGE
|
|
15
18
|
}
|
|
16
19
|
|
|
@@ -20,6 +23,10 @@ while [[ $# -gt 0 ]]; do
|
|
|
20
23
|
OFFLINE=true
|
|
21
24
|
shift
|
|
22
25
|
;;
|
|
26
|
+
--keep-going)
|
|
27
|
+
KEEP_GOING=true
|
|
28
|
+
shift
|
|
29
|
+
;;
|
|
23
30
|
-h|--help)
|
|
24
31
|
usage
|
|
25
32
|
exit 0
|
|
@@ -186,6 +193,7 @@ required_files=(
|
|
|
186
193
|
"$ROOT/schemas/capability-recipe.schema.json"
|
|
187
194
|
"$ROOT/schemas/eval-scenario.schema.json"
|
|
188
195
|
"$ROOT/schemas/action-proposal.schema.json"
|
|
196
|
+
"$ROOT/schemas/codex-relative-efficiency-v1.schema.json"
|
|
189
197
|
"$ROOT/schemas/piagent-webui/catalog-v1.json"
|
|
190
198
|
"$ROOT/schemas/piagent-webui/common-v1.schema.json"
|
|
191
199
|
"$ROOT/schemas/piagent-webui/snapshot-v1.schema.json"
|
|
@@ -401,6 +409,7 @@ required_files=(
|
|
|
401
409
|
"$ROOT/tests/piagent-webui-session-runtime-spike.test.mjs"
|
|
402
410
|
"$ROOT/tests/piagent-webui-gateway.test.mjs"
|
|
403
411
|
"$ROOT/tests/piagent-webui-session-metadata.test.mjs"
|
|
412
|
+
"$ROOT/tests/piagent-webui-session-runtime-factory.test.mjs"
|
|
404
413
|
"$ROOT/tests/piagent-webui-session-lease-runtime.test.mjs"
|
|
405
414
|
"$ROOT/tests/piagent-webui-session-command-admission.test.mjs"
|
|
406
415
|
"$ROOT/tests/piagent-webui-gateway-transport.test.mjs"
|
|
@@ -466,6 +475,7 @@ required_files=(
|
|
|
466
475
|
"$ROOT/tests/runtime-evidence.test.mjs"
|
|
467
476
|
"$ROOT/tests/golden-enforcement.test.mjs"
|
|
468
477
|
"$ROOT/packages/piagent-core/benchmark/benchmark-core.js"
|
|
478
|
+
"$ROOT/packages/piagent-core/benchmark/benchmark-codex-relative-efficiency.js"
|
|
469
479
|
"$ROOT/packages/piagent-core/benchmark/benchmark-assurance.js"
|
|
470
480
|
"$ROOT/packages/piagent-core/benchmark/benchmark-comparison.js"
|
|
471
481
|
"$ROOT/packages/piagent-core/benchmark/benchmark-report.js"
|
|
@@ -482,9 +492,14 @@ required_files=(
|
|
|
482
492
|
"$ROOT/tests/fs5-causal-arm.test.mjs"
|
|
483
493
|
"$ROOT/tests/fs-release-transition.test.mjs"
|
|
484
494
|
"$ROOT/schemas/benchmark-assurance-evidence.schema.json"
|
|
495
|
+
"$ROOT/schemas/codex-relative-efficiency-v1.schema.json"
|
|
485
496
|
"$ROOT/evals/private-holdout-v1/access-policy.v1.json"
|
|
486
497
|
"$ROOT/evals/private-holdout-v1/human-rubric.v1.json"
|
|
487
498
|
"$ROOT/evals/private-holdout-v1/public-exposure.v1.json"
|
|
499
|
+
"$ROOT/evals/private-holdout-v1/public-exposure.v2.json"
|
|
500
|
+
"$ROOT/evals/private-holdout-v1/CURRENT_BOUNDARY.md"
|
|
501
|
+
"$ROOT/scripts/public-evaluation-exposure.mjs"
|
|
502
|
+
"$ROOT/tests/public-evaluation-exposure.test.mjs"
|
|
488
503
|
"$ROOT/evals/private-holdout-v1/README.md"
|
|
489
504
|
"$ROOT/evals/private-holdout-v1/CUSTODIAN_RUNBOOK.md"
|
|
490
505
|
"$ROOT/evals/fs4-readiness-matrix.v1.json"
|
|
@@ -504,6 +519,10 @@ required_files=(
|
|
|
504
519
|
"$ROOT/benchmarks/production-v1/suite.json"
|
|
505
520
|
"$ROOT/benchmarks/production-v1/grade.mjs"
|
|
506
521
|
"$ROOT/benchmarks/production-v1/variant.mjs"
|
|
522
|
+
"$ROOT/benchmarks/production-v2/suite.json"
|
|
523
|
+
"$ROOT/benchmarks/production-v2/grade.mjs"
|
|
524
|
+
"$ROOT/benchmarks/production-v2/variant.mjs"
|
|
525
|
+
"$ROOT/benchmarks/production-v2/spend-control.v1.json"
|
|
507
526
|
"$ROOT/tests/capability-sources.test.mjs"
|
|
508
527
|
"$ROOT/packages/piagent-core/capabilities/capability-sources.js"
|
|
509
528
|
"$ROOT/packages/piagent-core/extensions/guard-shell-analysis.ts"
|
|
@@ -568,6 +587,7 @@ const jsonFiles = [
|
|
|
568
587
|
"schemas/eval-scenario.schema.json",
|
|
569
588
|
"schemas/action-proposal.schema.json",
|
|
570
589
|
"schemas/benchmark-assurance-evidence.schema.json",
|
|
590
|
+
"schemas/codex-relative-efficiency-v1.schema.json",
|
|
571
591
|
"schemas/piagent-webui/catalog-v1.json",
|
|
572
592
|
"schemas/piagent-webui/common-v1.schema.json",
|
|
573
593
|
"schemas/piagent-webui/snapshot-v1.schema.json",
|
|
@@ -621,9 +641,9 @@ if (!rootPkg.pi.subagents?.agents?.length) {
|
|
|
621
641
|
throw new Error("root package.json missing pi.subagents.agents");
|
|
622
642
|
}
|
|
623
643
|
const expectedPeers = {
|
|
624
|
-
"@earendil-works/pi-ai": "0.
|
|
625
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
626
|
-
typebox: "1.3.
|
|
644
|
+
"@earendil-works/pi-ai": "0.86.1",
|
|
645
|
+
"@earendil-works/pi-coding-agent": "0.86.1",
|
|
646
|
+
typebox: "1.3.27"
|
|
627
647
|
};
|
|
628
648
|
for (const [name, version] of Object.entries(expectedPeers)) {
|
|
629
649
|
if (rootPkg.peerDependencies?.[name] !== version) throw new Error(`root package peer ${name} must be pinned to ${version}`);
|
|
@@ -673,8 +693,13 @@ run_quietly() {
|
|
|
673
693
|
if ! output="$(cd "$ROOT" && "$@" 2>&1)"; then
|
|
674
694
|
printf '%s\n' "$output" >&2
|
|
675
695
|
echo "$label failed; the output above is why" >&2
|
|
676
|
-
|
|
696
|
+
failed_commands+=("$label")
|
|
697
|
+
if [[ "$KEEP_GOING" != true ]]; then
|
|
698
|
+
exit 1
|
|
699
|
+
fi
|
|
700
|
+
return 0
|
|
677
701
|
fi
|
|
702
|
+
echo "PASS: $label"
|
|
678
703
|
}
|
|
679
704
|
|
|
680
705
|
require_documented "auth.json" "$ROOT/docs" "$ROOT/packages/piagent-core" "$ROOT/templates"
|
|
@@ -850,55 +875,9 @@ if [[ -n "$non_text_sources" ]]; then
|
|
|
850
875
|
exit 1
|
|
851
876
|
fi
|
|
852
877
|
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
["platform-", "mig", "ration"].join(""),
|
|
857
|
-
["codex-", "mig", "ration"].join(""),
|
|
858
|
-
["codex-", "par", "ity"].join(""),
|
|
859
|
-
["benchmark-", "par", "ity"].join(""),
|
|
860
|
-
["harness-", "mig", "ration"].join(""),
|
|
861
|
-
["agent-", "stuff"].join(""),
|
|
862
|
-
["mit", "suhiko"].join(""),
|
|
863
|
-
["Cod", "ex CLI"].join(""),
|
|
864
|
-
["Claude", " CLI"].join(""),
|
|
865
|
-
["Claude", " Code"].join(""),
|
|
866
|
-
["claude", " mcp"].join(""),
|
|
867
|
-
["codex", " mcp"].join(""),
|
|
868
|
-
["Cod", "ex-inspired"].join(""),
|
|
869
|
-
["Cod", "ex-grade"].join(""),
|
|
870
|
-
["Pi vs ", "Codex"].join(""),
|
|
871
|
-
["vs ", "Claude"].join(""),
|
|
872
|
-
["reference ", "repo"].join(""),
|
|
873
|
-
["repo ", "tham ", "khảo"].join(""),
|
|
874
|
-
["nguồn ", "tham ", "khảo"].join(""),
|
|
875
|
-
["tham ", "khảo"].join("")
|
|
876
|
-
];
|
|
877
|
-
const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
878
|
-
console.log(terms.map(escapeRegex).join("|"));
|
|
879
|
-
NODE
|
|
880
|
-
)"
|
|
881
|
-
|
|
882
|
-
# Every surface an outsider reads: the published docs, the site, and the strings
|
|
883
|
-
# the runtime prints back at an operator. The site is checked at its source,
|
|
884
|
-
# since `build-docs-site.mjs --check` separately proves the committed pages match
|
|
885
|
-
# it; the builder itself is listed too, because navigation labels and page titles
|
|
886
|
-
# live there rather than in a content fragment.
|
|
887
|
-
if grep -R -E -i \
|
|
888
|
-
"$public_wording_pattern" \
|
|
889
|
-
"$ROOT/README.md" \
|
|
890
|
-
"$ROOT/docs" \
|
|
891
|
-
"$ROOT/docs-site/content" \
|
|
892
|
-
"$ROOT/scripts/build-docs-site.mjs" \
|
|
893
|
-
"$ROOT/packages/piagent-core/README.md" \
|
|
894
|
-
"$ROOT/packages/piagent-core/prompts" \
|
|
895
|
-
"$ROOT/packages/piagent-core/mcp" \
|
|
896
|
-
"$ROOT/packages/piagent-core/extensions" \
|
|
897
|
-
"$ROOT/packages/piagent-core/runtime" \
|
|
898
|
-
"$ROOT/templates/project/AGENTS.md" >/dev/null; then
|
|
899
|
-
echo "Public docs contain non-neutral platform wording"
|
|
900
|
-
exit 1
|
|
901
|
-
fi
|
|
878
|
+
# Preserve exact source names only in reviewed research records; product and
|
|
879
|
+
# operator surfaces retain the complete neutrality policy.
|
|
880
|
+
node "$ROOT/scripts/check-public-wording.mjs"
|
|
902
881
|
|
|
903
882
|
node --check "$ROOT/packages/piagent-core/extensions/piagent-guard.ts" >/dev/null
|
|
904
883
|
node --check "$ROOT/packages/piagent-core/extensions/context-engine.js" >/dev/null
|
|
@@ -910,6 +889,7 @@ node --check "$ROOT/packages/piagent-core/extensions/runtime-evidence.js" >/dev/
|
|
|
910
889
|
node --check "$ROOT/packages/piagent-core/extensions/state-retention.js" >/dev/null
|
|
911
890
|
node --check "$ROOT/packages/piagent-core/extensions/task-state.js" >/dev/null
|
|
912
891
|
node --check "$ROOT/packages/piagent-core/benchmark/benchmark-core.js" >/dev/null
|
|
892
|
+
node --check "$ROOT/packages/piagent-core/benchmark/benchmark-codex-relative-efficiency.js" >/dev/null
|
|
913
893
|
node --check "$ROOT/packages/piagent-core/benchmark/benchmark-assurance.js" >/dev/null
|
|
914
894
|
node --check "$ROOT/packages/piagent-core/benchmark/benchmark-comparison.js" >/dev/null
|
|
915
895
|
node --check "$ROOT/packages/piagent-core/benchmark/benchmark-report.js" >/dev/null
|
|
@@ -939,7 +919,9 @@ node "$ROOT/scripts/check-doc-languages.mjs" >/dev/null
|
|
|
939
919
|
node "$ROOT/scripts/verify-translation-pairing.mjs" >/dev/null
|
|
940
920
|
node "$ROOT/scripts/check-third-party-neutrality.mjs" >/dev/null
|
|
941
921
|
run_quietly "npm run build --workspace @piagent/webui" npm run build --workspace @piagent/webui
|
|
942
|
-
|
|
922
|
+
# Integration files each own a real SDK and may run bounded worker processes.
|
|
923
|
+
# Limit competing files without changing selection, assertions or deadlines.
|
|
924
|
+
run_quietly "node --test --test-concurrency=2 tests/*.test.mjs" env PIAGENT_NO_UPDATE_CHECK=1 node --test --test-concurrency=2 "$ROOT"/tests/*.test.mjs
|
|
943
925
|
run_quietly "npm run test:webui:e2e" npm run test:webui:e2e
|
|
944
926
|
if [[ -x "$ROOT/node_modules/.bin/tsc" ]]; then
|
|
945
927
|
run_quietly "npm run typecheck" npm run typecheck
|
|
@@ -1030,4 +1012,8 @@ bash "$ROOT/scripts/profile-doctor.sh" "$ROOT" "$ROOT/adapters/python/profile.js
|
|
|
1030
1012
|
bash "$ROOT/scripts/profile-doctor.sh" "$ROOT" "$ROOT/adapters/web-frontend/profile.json" >/dev/null
|
|
1031
1013
|
bash "$ROOT/scripts/team-doctor.sh" "$ROOT" --strict-share >/dev/null
|
|
1032
1014
|
|
|
1015
|
+
if [[ ${#failed_commands[@]} -gt 0 ]]; then
|
|
1016
|
+
printf 'FAIL: %s\n' "${failed_commands[@]}" >&2
|
|
1017
|
+
exit 1
|
|
1018
|
+
fi
|
|
1033
1019
|
echo "PASS: piagent-platform scaffold is complete"
|
|
@@ -58,7 +58,7 @@ const packageLock = readJson("package-lock.json");
|
|
|
58
58
|
const capabilityLock = readJson(".pi/piagent-profile.lock.json");
|
|
59
59
|
const version = rootPackage.version;
|
|
60
60
|
const expectedTag = `v${version}`;
|
|
61
|
-
const supportedPiHost = "0.
|
|
61
|
+
const supportedPiHost = "0.86.1";
|
|
62
62
|
|
|
63
63
|
// The package is published now, so the old private-forever rule is gone. What
|
|
64
64
|
// still has to hold is that a scoped package cannot reach the registry as
|
|
@@ -75,9 +75,11 @@ if (!version?.includes("-") && rootPackage.publishConfig?.tag !== undefined) fai
|
|
|
75
75
|
if (rootPackage.repository?.url !== "git+https://github.com/Vt-mmm/piagent.git") fail("root package repository URL is not canonical");
|
|
76
76
|
if (corePackage.repository?.url !== rootPackage.repository.url) fail("core package repository URL does not match the root package");
|
|
77
77
|
const runtimeDependencies = rootPackage.dependencies ?? {};
|
|
78
|
-
if (JSON.stringify(runtimeDependencies) !== JSON.stringify({ ws: "8.21.3" })) {
|
|
79
|
-
fail("root package runtime dependencies must contain only the pinned local Gateway WebSocket transport");
|
|
78
|
+
if (JSON.stringify(runtimeDependencies) !== JSON.stringify({ "@babel/parser": "7.29.8", ws: "8.21.3" })) {
|
|
79
|
+
fail("root package runtime dependencies must contain only the pinned syntax parser and local Gateway WebSocket transport");
|
|
80
80
|
}
|
|
81
|
+
if (JSON.stringify(packageLock.packages?.[""]?.dependencies) !== JSON.stringify(runtimeDependencies)) fail("package-lock runtime dependencies do not match package.json");
|
|
82
|
+
if (packageLock.packages?.["node_modules/@babel/parser"]?.version !== runtimeDependencies["@babel/parser"]) fail("syntax parser lock version does not match the runtime pin");
|
|
81
83
|
if (packageLock.name !== rootPackage.name || packageLock.packages?.[""]?.name !== rootPackage.name) fail("package-lock root identity does not match package.json");
|
|
82
84
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(version ?? "")) fail("package.json version is not a supported release version");
|
|
83
85
|
if (corePackage.version !== version) fail("root and core package versions do not match");
|