@piagent/platform 1.6.1 → 1.8.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/CHANGELOG.md +71 -0
- package/README.md +8 -2
- package/README.vi.md +11 -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 +3 -3
- 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 +2 -2
- 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 +10 -7
- package/docs/context-window-policy.md +3 -3
- package/docs/distribution-standard.md +9 -9
- package/docs/languages.json +2 -2
- package/docs/model-options.md +20 -15
- package/docs/operator-manual-vietnamese.md +12 -12
- 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 +3 -0
- package/docs/quality-benchmark.md +128 -8
- package/docs/quickstart-vietnamese.md +2 -2
- package/docs/release-install-policy.md +38 -11
- package/docs/research/harness-next-evidence-review.md +113 -0
- package/docs/team-onboarding.md +7 -7
- package/docs/third-party-neutrality.md +7 -0
- package/docs/usage-observability.md +1 -1
- package/docs-site/architecture.html +1 -1
- package/docs-site/benchmark.html +1 -1
- package/docs-site/commands.html +1 -1
- package/docs-site/content/en/runtime.html +1 -1
- package/docs-site/content/en/whats-new.html +23 -0
- package/docs-site/content/runtime.html +2 -2
- package/docs-site/content/whats-new.html +23 -0
- package/docs-site/context-engine.html +1 -1
- package/docs-site/en/architecture.html +1 -1
- package/docs-site/en/benchmark.html +1 -1
- package/docs-site/en/commands.html +1 -1
- package/docs-site/en/context-engine.html +1 -1
- package/docs-site/en/index.html +1 -1
- 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 +2 -2
- 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 -1
- package/docs-site/en/workflows.html +1 -1
- package/docs-site/index.html +1 -1
- 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 +3 -3
- 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 -1
- package/docs-site/workflows.html +1 -1
- 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-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/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/host-contract-plan.invalid.json +42 -0
- package/evals/fixtures/host-contract-plan.valid.json +41 -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/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 +9 -5
- package/evals/fs5-pilot-protocol.v1.json +1 -1
- package/evals/fs5-pilot-protocol.v4.json +4 -4
- package/evals/fs5-pilot-protocol.v5.json +6 -5
- 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.v2.json +273 -0
- package/package.json +9 -4
- package/packages/piagent-core/README.md +2 -2
- 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 +2 -1
- 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 +107 -107
- 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 +63 -50
- 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 +69 -8
- 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 +162 -45
- 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 +269 -3
- package/packages/piagent-core/benchmark/benchmark-release-claim-controls.js +132 -0
- package/packages/piagent-core/benchmark/benchmark-report.js +79 -4
- 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-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 +144 -128
- 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 +211 -4
- package/packages/piagent-core/benchmark/benchmark-summary-support.js +30 -2
- 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 +395 -33
- 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 +3 -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 +264 -70
- 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 +139 -152
- 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 +11 -6
- package/packages/piagent-core/extensions/criterion-context-pack.js +96 -4
- package/packages/piagent-core/extensions/failure-types.ts +2 -2
- package/packages/piagent-core/extensions/guard-types.ts +5 -1
- package/packages/piagent-core/extensions/piagent-guard.ts +197 -155
- 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-runtime-audit.js +8 -2
- package/packages/piagent-core/extensions/task-state.js +74 -38
- 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 +60 -8
- package/packages/piagent-core/extensions/workflow-catalog.ts +98 -0
- 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 +1 -0
- 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 +76 -83
- package/packages/piagent-core/runtime/hooks/input-hook.ts +92 -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 +50 -18
- package/packages/piagent-core/runtime/hooks/tool-result-hook.ts +53 -20
- 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/input/chat-images.ts +1 -1
- package/packages/piagent-core/runtime/inspection/activity-event-adapter.ts +1 -1
- 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/tool-failure-classification.ts +49 -8
- package/packages/piagent-core/runtime/inspection/webui-snapshot.ts +61 -15
- package/packages/piagent-core/runtime/inspection/workspace-file-reader.ts +2 -132
- package/packages/piagent-core/runtime/model/model-route-policy.ts +33 -13
- package/packages/piagent-core/runtime/model/model-route-types.ts +10 -6
- 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/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 +12 -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/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 +11 -2
- package/packages/piagent-core/runtime/recovery/diagnostic-delivery.ts +61 -0
- package/packages/piagent-core/runtime/recovery/handoff-projection.ts +192 -57
- 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/recovery-policy.ts +27 -39
- package/packages/piagent-core/runtime/recovery/resume-state.ts +8 -5
- package/packages/piagent-core/runtime/registration/activity-inspector-command.ts +2 -1
- package/packages/piagent-core/runtime/registration/context-commands.ts +12 -8
- package/packages/piagent-core/runtime/registration/operator-catalogs.ts +4 -9
- package/packages/piagent-core/runtime/registration/policy-tools.ts +5 -3
- package/packages/piagent-core/runtime/registration/session-commands.ts +9 -7
- package/packages/piagent-core/runtime/registration/session-wait-tool.ts +54 -0
- package/packages/piagent-core/runtime/registration/task-completion-tools.ts +27 -11
- package/packages/piagent-core/runtime/registration/task-start-conditional-mutation.ts +45 -0
- package/packages/piagent-core/runtime/registration/task-start-guidance.ts +5 -2
- package/packages/piagent-core/runtime/registration/task-start-tool.ts +23 -23
- package/packages/piagent-core/runtime/registration/workflow-commands.ts +64 -93
- package/packages/piagent-core/runtime/session/completion-signals.ts +23 -0
- package/packages/piagent-core/runtime/session/message-signals.ts +6 -22
- package/packages/piagent-core/runtime/session/retrieval-evidence-runtime.ts +188 -0
- package/packages/piagent-core/runtime/session/runtime-state.ts +29 -35
- package/packages/piagent-core/runtime/session/system-prompt.ts +3 -3
- 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 +3 -2
- package/packages/piagent-core/runtime/tools/session-wait.ts +42 -0
- package/packages/piagent-core/runtime/tools/tool-groups.ts +10 -3
- 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 +11 -11
- 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 +44 -7
- package/packages/piagent-core/runtime/workflows/task-followup-policy.ts +163 -0
- package/packages/piagent-core/runtime/workflows/task-intake.ts +221 -242
- 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-webui/dist/client/assets/{MarkdownMessage-B4XehTCU.js → MarkdownMessage-DMU7Xe_O.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/index-Cui9AAV_.js +176 -0
- package/packages/piagent-webui/dist/client/assets/{index-BV-_03yl.css → index-DVahUVWy.css} +1 -1
- 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 +10 -2
- package/packages/piagent-webui/extension/review-controller.ts +29 -6
- package/packages/piagent-webui/extension/same-session-bridge.ts +6 -7
- package/packages/piagent-webui/extension/session-stream-adapter.ts +60 -11
- 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 +141 -19
- 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 +14 -6
- package/packages/piagent-webui/gateway/session-operation-settlement.ts +28 -0
- 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 +114 -114
- package/packages/piagent-webui/server/core-inspection-provider.ts +73 -14
- 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 +65 -12
- 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/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 +32 -1
- 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/transcript-v1.schema.json +2 -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 +30 -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 +217 -388
- package/scripts/benchmark-runner-finalization.mjs +140 -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-model-scope.sh +6 -2
- package/scripts/fs4-readiness-evaluation.mjs +7 -1
- package/scripts/install-global.sh +2 -2
- package/scripts/model-route-evaluation-core.ts +1 -0
- package/scripts/phase-tools-evaluation.mjs +1 -0
- package/scripts/pi-auto.sh +7 -1
- package/scripts/pi-model-route.mjs +1 -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/setup.sh +2 -2
- package/scripts/typescript-loader.mjs +135 -1
- package/scripts/update-global.mjs +6 -7
- package/scripts/verify-local.sh +37 -56
- package/scripts/verify-release-identity.mjs +5 -3
- package/templates/global/settings.json +5 -1
- package/packages/piagent-webui/dist/client/assets/index-CgOEyRPG.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/setup.sh
CHANGED
|
@@ -36,7 +36,7 @@ Options:
|
|
|
36
36
|
--model-scope <full|codex|claude> model families to enable
|
|
37
37
|
Configure Pi enabledModels for selector/cycling (default: full)
|
|
38
38
|
--default-model <provider/model[:thinking]>
|
|
39
|
-
Configure default provider/model/thinking (default: openai-codex/gpt-
|
|
39
|
+
Configure default provider/model/thinking (default: openai-codex/gpt-6-sol:high)
|
|
40
40
|
--no-model-scope Skip global model-scope configuration
|
|
41
41
|
--install-pi / --no-install-pi Install/skip Pi CLI with npm if `pi` is missing (default: install)
|
|
42
42
|
--force-profile Replace existing project .pi/piagent-profile.json
|
|
@@ -78,7 +78,7 @@ WITH_WEB_ACCESS=true
|
|
|
78
78
|
WITH_HERDR=true
|
|
79
79
|
CONFIGURE_MODEL_SCOPE=true
|
|
80
80
|
MODEL_SCOPE_PRESET="full"
|
|
81
|
-
DEFAULT_MODEL="openai-codex/gpt-
|
|
81
|
+
DEFAULT_MODEL="openai-codex/gpt-6-sol:high"
|
|
82
82
|
AUTO_INSTALL_PI=true
|
|
83
83
|
FORCE_PROFILE=false
|
|
84
84
|
FORCE_SETTINGS=false
|
|
@@ -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
|
|
@@ -402,6 +409,7 @@ required_files=(
|
|
|
402
409
|
"$ROOT/tests/piagent-webui-session-runtime-spike.test.mjs"
|
|
403
410
|
"$ROOT/tests/piagent-webui-gateway.test.mjs"
|
|
404
411
|
"$ROOT/tests/piagent-webui-session-metadata.test.mjs"
|
|
412
|
+
"$ROOT/tests/piagent-webui-session-runtime-factory.test.mjs"
|
|
405
413
|
"$ROOT/tests/piagent-webui-session-lease-runtime.test.mjs"
|
|
406
414
|
"$ROOT/tests/piagent-webui-session-command-admission.test.mjs"
|
|
407
415
|
"$ROOT/tests/piagent-webui-gateway-transport.test.mjs"
|
|
@@ -488,6 +496,10 @@ required_files=(
|
|
|
488
496
|
"$ROOT/evals/private-holdout-v1/access-policy.v1.json"
|
|
489
497
|
"$ROOT/evals/private-holdout-v1/human-rubric.v1.json"
|
|
490
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"
|
|
491
503
|
"$ROOT/evals/private-holdout-v1/README.md"
|
|
492
504
|
"$ROOT/evals/private-holdout-v1/CUSTODIAN_RUNBOOK.md"
|
|
493
505
|
"$ROOT/evals/fs4-readiness-matrix.v1.json"
|
|
@@ -507,6 +519,10 @@ required_files=(
|
|
|
507
519
|
"$ROOT/benchmarks/production-v1/suite.json"
|
|
508
520
|
"$ROOT/benchmarks/production-v1/grade.mjs"
|
|
509
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"
|
|
510
526
|
"$ROOT/tests/capability-sources.test.mjs"
|
|
511
527
|
"$ROOT/packages/piagent-core/capabilities/capability-sources.js"
|
|
512
528
|
"$ROOT/packages/piagent-core/extensions/guard-shell-analysis.ts"
|
|
@@ -625,9 +641,9 @@ if (!rootPkg.pi.subagents?.agents?.length) {
|
|
|
625
641
|
throw new Error("root package.json missing pi.subagents.agents");
|
|
626
642
|
}
|
|
627
643
|
const expectedPeers = {
|
|
628
|
-
"@earendil-works/pi-ai": "0.
|
|
629
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
630
|
-
typebox: "1.3.
|
|
644
|
+
"@earendil-works/pi-ai": "0.87.1",
|
|
645
|
+
"@earendil-works/pi-coding-agent": "0.87.1",
|
|
646
|
+
typebox: "1.3.27"
|
|
631
647
|
};
|
|
632
648
|
for (const [name, version] of Object.entries(expectedPeers)) {
|
|
633
649
|
if (rootPkg.peerDependencies?.[name] !== version) throw new Error(`root package peer ${name} must be pinned to ${version}`);
|
|
@@ -677,8 +693,13 @@ run_quietly() {
|
|
|
677
693
|
if ! output="$(cd "$ROOT" && "$@" 2>&1)"; then
|
|
678
694
|
printf '%s\n' "$output" >&2
|
|
679
695
|
echo "$label failed; the output above is why" >&2
|
|
680
|
-
|
|
696
|
+
failed_commands+=("$label")
|
|
697
|
+
if [[ "$KEEP_GOING" != true ]]; then
|
|
698
|
+
exit 1
|
|
699
|
+
fi
|
|
700
|
+
return 0
|
|
681
701
|
fi
|
|
702
|
+
echo "PASS: $label"
|
|
682
703
|
}
|
|
683
704
|
|
|
684
705
|
require_documented "auth.json" "$ROOT/docs" "$ROOT/packages/piagent-core" "$ROOT/templates"
|
|
@@ -854,55 +875,9 @@ if [[ -n "$non_text_sources" ]]; then
|
|
|
854
875
|
exit 1
|
|
855
876
|
fi
|
|
856
877
|
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
["platform-", "mig", "ration"].join(""),
|
|
861
|
-
["codex-", "mig", "ration"].join(""),
|
|
862
|
-
["codex-", "par", "ity"].join(""),
|
|
863
|
-
["benchmark-", "par", "ity"].join(""),
|
|
864
|
-
["harness-", "mig", "ration"].join(""),
|
|
865
|
-
["agent-", "stuff"].join(""),
|
|
866
|
-
["mit", "suhiko"].join(""),
|
|
867
|
-
["Cod", "ex CLI"].join(""),
|
|
868
|
-
["Claude", " CLI"].join(""),
|
|
869
|
-
["Claude", " Code"].join(""),
|
|
870
|
-
["claude", " mcp"].join(""),
|
|
871
|
-
["codex", " mcp"].join(""),
|
|
872
|
-
["Cod", "ex-inspired"].join(""),
|
|
873
|
-
["Cod", "ex-grade"].join(""),
|
|
874
|
-
["Pi vs ", "Codex"].join(""),
|
|
875
|
-
["vs ", "Claude"].join(""),
|
|
876
|
-
["reference ", "repo"].join(""),
|
|
877
|
-
["repo ", "tham ", "khảo"].join(""),
|
|
878
|
-
["nguồn ", "tham ", "khảo"].join(""),
|
|
879
|
-
["tham ", "khảo"].join("")
|
|
880
|
-
];
|
|
881
|
-
const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
882
|
-
console.log(terms.map(escapeRegex).join("|"));
|
|
883
|
-
NODE
|
|
884
|
-
)"
|
|
885
|
-
|
|
886
|
-
# Every surface an outsider reads: the published docs, the site, and the strings
|
|
887
|
-
# the runtime prints back at an operator. The site is checked at its source,
|
|
888
|
-
# since `build-docs-site.mjs --check` separately proves the committed pages match
|
|
889
|
-
# it; the builder itself is listed too, because navigation labels and page titles
|
|
890
|
-
# live there rather than in a content fragment.
|
|
891
|
-
if grep -R -E -i \
|
|
892
|
-
"$public_wording_pattern" \
|
|
893
|
-
"$ROOT/README.md" \
|
|
894
|
-
"$ROOT/docs" \
|
|
895
|
-
"$ROOT/docs-site/content" \
|
|
896
|
-
"$ROOT/scripts/build-docs-site.mjs" \
|
|
897
|
-
"$ROOT/packages/piagent-core/README.md" \
|
|
898
|
-
"$ROOT/packages/piagent-core/prompts" \
|
|
899
|
-
"$ROOT/packages/piagent-core/mcp" \
|
|
900
|
-
"$ROOT/packages/piagent-core/extensions" \
|
|
901
|
-
"$ROOT/packages/piagent-core/runtime" \
|
|
902
|
-
"$ROOT/templates/project/AGENTS.md" >/dev/null; then
|
|
903
|
-
echo "Public docs contain non-neutral platform wording"
|
|
904
|
-
exit 1
|
|
905
|
-
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"
|
|
906
881
|
|
|
907
882
|
node --check "$ROOT/packages/piagent-core/extensions/piagent-guard.ts" >/dev/null
|
|
908
883
|
node --check "$ROOT/packages/piagent-core/extensions/context-engine.js" >/dev/null
|
|
@@ -944,7 +919,9 @@ node "$ROOT/scripts/check-doc-languages.mjs" >/dev/null
|
|
|
944
919
|
node "$ROOT/scripts/verify-translation-pairing.mjs" >/dev/null
|
|
945
920
|
node "$ROOT/scripts/check-third-party-neutrality.mjs" >/dev/null
|
|
946
921
|
run_quietly "npm run build --workspace @piagent/webui" npm run build --workspace @piagent/webui
|
|
947
|
-
|
|
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
|
|
948
925
|
run_quietly "npm run test:webui:e2e" npm run test:webui:e2e
|
|
949
926
|
if [[ -x "$ROOT/node_modules/.bin/tsc" ]]; then
|
|
950
927
|
run_quietly "npm run typecheck" npm run typecheck
|
|
@@ -968,7 +945,7 @@ if [[ "$OFFLINE" == true || "${PIAGENT_VERIFY_OFFLINE:-}" == "1" || "${CI:-}" ==
|
|
|
968
945
|
else
|
|
969
946
|
bash "$ROOT/scripts/pi-model-catalog.sh" --json >/dev/null
|
|
970
947
|
fi
|
|
971
|
-
bash "$ROOT/scripts/configure-model-scope.sh" --dry-run --preset full --default-model openai-codex/gpt-
|
|
948
|
+
bash "$ROOT/scripts/configure-model-scope.sh" --dry-run --preset full --default-model openai-codex/gpt-6-sol:high >/dev/null
|
|
972
949
|
node "$ROOT/scripts/mcp-manage.mjs" --list >/dev/null
|
|
973
950
|
node "$ROOT/scripts/mcp-manage.mjs" --dry-run --preset popular --scope project --project "$ROOT" >/dev/null
|
|
974
951
|
node --input-type=module - "$ROOT" <<'NODE'
|
|
@@ -1035,4 +1012,8 @@ bash "$ROOT/scripts/profile-doctor.sh" "$ROOT" "$ROOT/adapters/python/profile.js
|
|
|
1035
1012
|
bash "$ROOT/scripts/profile-doctor.sh" "$ROOT" "$ROOT/adapters/web-frontend/profile.json" >/dev/null
|
|
1036
1013
|
bash "$ROOT/scripts/team-doctor.sh" "$ROOT" --strict-share >/dev/null
|
|
1037
1014
|
|
|
1015
|
+
if [[ ${#failed_commands[@]} -gt 0 ]]; then
|
|
1016
|
+
printf 'FAIL: %s\n' "${failed_commands[@]}" >&2
|
|
1017
|
+
exit 1
|
|
1018
|
+
fi
|
|
1038
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.87.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");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"defaultProjectTrust": "ask",
|
|
3
3
|
"defaultProvider": "openai-codex",
|
|
4
|
-
"defaultModel": "gpt-
|
|
4
|
+
"defaultModel": "gpt-6-sol",
|
|
5
5
|
"defaultThinkingLevel": "high",
|
|
6
6
|
"showCacheMissNotices": true,
|
|
7
7
|
"enabledModels": [
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
"openai-codex/gpt-5.6-luna:medium",
|
|
13
13
|
"openai-codex/gpt-5.6-terra:high",
|
|
14
14
|
"openai-codex/gpt-5.6-sol:high",
|
|
15
|
+
"openai-codex/gpt-6-luna:medium",
|
|
16
|
+
"openai-codex/gpt-6-sol:medium",
|
|
17
|
+
"openai-codex/gpt-6-sol:high",
|
|
18
|
+
"openai-codex/gpt-6-astra:xhigh",
|
|
15
19
|
"openai-codex/*",
|
|
16
20
|
"anthropic/claude-haiku-4-5:low",
|
|
17
21
|
"anthropic/claude-sonnet-4-5:high",
|