@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
|
@@ -11,10 +11,25 @@ import {
|
|
|
11
11
|
validateFailureClassification,
|
|
12
12
|
validateFailureEvidence
|
|
13
13
|
} from "./failure-types.ts";
|
|
14
|
-
import { isCurrentWorkingTreeDigest } from "./working-tree-digest.js";
|
|
14
|
+
import { isCurrentWorkingTreeDigest, WORKING_TREE_DIGEST_ALGORITHM } from "./working-tree-digest.js";
|
|
15
|
+
import { currentWorkspaceRevisionDigest, isWorkspaceRevisionDigest } from "./workspace-revision.js";
|
|
16
|
+
|
|
17
|
+
export const MAX_VERIFY_COMMANDS = 2;
|
|
18
|
+
export const MAX_VERIFY_COMMAND_CHARS = 900;
|
|
19
|
+
export const MAX_VERIFY_COMMAND_BYTES = 900;
|
|
20
|
+
export const MAX_VERIFY_COMMAND_TOTAL_BYTES = MAX_VERIFY_COMMANDS * MAX_VERIFY_COMMAND_BYTES;
|
|
21
|
+
export const MAX_VERIFY_COMMAND_TOTAL_CHARS = MAX_VERIFY_COMMANDS * MAX_VERIFY_COMMAND_CHARS;
|
|
22
|
+
|
|
23
|
+
export function unicodeCodePointLength(value) {
|
|
24
|
+
return Array.from(String(value ?? "")).length;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function utf8ByteLength(value) {
|
|
28
|
+
return Buffer.byteLength(String(value ?? ""), "utf8");
|
|
29
|
+
}
|
|
15
30
|
|
|
16
31
|
function uniqueStrings(values) {
|
|
17
|
-
return [...new Set((Array.isArray(values) ? values : []).filter((value) => typeof value === "string" && value.trim())
|
|
32
|
+
return [...new Set((Array.isArray(values) ? values : []).filter((value) => typeof value === "string" && value.trim()))];
|
|
18
33
|
}
|
|
19
34
|
|
|
20
35
|
export function meaningfulVerificationCommands(commands = []) {
|
|
@@ -27,6 +42,25 @@ export function meaningfulVerificationCommands(commands = []) {
|
|
|
27
42
|
});
|
|
28
43
|
}
|
|
29
44
|
|
|
45
|
+
export function verifierCommandBoundsError(commands = []) {
|
|
46
|
+
const supplied = (Array.isArray(commands) ? commands : []).filter((command) => typeof command === "string");
|
|
47
|
+
if (supplied.some((command) => /[\r\n]/.test(command))) {
|
|
48
|
+
return "Exact verify commands must be single-line values without CR or LF characters; move multiline logic into a checked-in script before task intake.";
|
|
49
|
+
}
|
|
50
|
+
const normalized = uniqueStrings(supplied);
|
|
51
|
+
if (normalized.length > MAX_VERIFY_COMMANDS) {
|
|
52
|
+
return `Verify plans support at most ${MAX_VERIFY_COMMANDS} exact commands; consolidate or shorten the project verifier before task intake.`;
|
|
53
|
+
}
|
|
54
|
+
const oversized = normalized.find((command) => unicodeCodePointLength(command) > MAX_VERIFY_COMMAND_CHARS);
|
|
55
|
+
if (oversized) return `An exact verify command exceeds ${MAX_VERIFY_COMMAND_CHARS} characters; shorten it or move verifier logic into a checked-in script before task intake.`;
|
|
56
|
+
const oversizedTraffic = normalized.find((command) => utf8ByteLength(command) > MAX_VERIFY_COMMAND_BYTES);
|
|
57
|
+
if (oversizedTraffic) return `An exact verify command exceeds ${MAX_VERIFY_COMMAND_BYTES} UTF-8 bytes; shorten it or move verifier logic into a checked-in script before task intake.`;
|
|
58
|
+
if (normalized.reduce((total, command) => total + utf8ByteLength(command), 0) > MAX_VERIFY_COMMAND_TOTAL_BYTES) {
|
|
59
|
+
return `Exact verify commands exceed the ${MAX_VERIFY_COMMAND_TOTAL_BYTES}-byte aggregate limit; consolidate or shorten the project verifier before task intake.`;
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
30
64
|
/** Return the last durably recorded observed execution for each exact command. */
|
|
31
65
|
export function latestObservedVerificationEvidence(evidence = []) {
|
|
32
66
|
const latest = new Map();
|
|
@@ -63,13 +97,18 @@ export function latestObservedVerification(evidence = []) {
|
|
|
63
97
|
return latest;
|
|
64
98
|
}
|
|
65
99
|
|
|
66
|
-
export function verificationEvidenceProvesStableTree(entry, digest) {
|
|
100
|
+
export function verificationEvidenceProvesStableTree(entry, digest, workspaceRevisionDigest) {
|
|
101
|
+
const revisionRequired = workspaceRevisionDigest !== undefined
|
|
102
|
+
|| entry?.preWorkspaceRevisionDigest !== undefined || entry?.workspaceRevisionDigest !== undefined;
|
|
67
103
|
return isCurrentWorkingTreeDigest(digest)
|
|
68
104
|
&& entry?.observed === true
|
|
69
105
|
&& entry.matchedProfileCommand === true
|
|
70
106
|
&& entry.exitCode === 0
|
|
107
|
+
&& entry.isError !== true
|
|
71
108
|
&& entry.preWorkingTreeDigest === digest
|
|
72
|
-
&& entry.workingTreeDigest === digest
|
|
109
|
+
&& entry.workingTreeDigest === digest
|
|
110
|
+
&& (!revisionRequired || (isWorkspaceRevisionDigest(workspaceRevisionDigest)
|
|
111
|
+
&& entry.preWorkspaceRevisionDigest === workspaceRevisionDigest && entry.workspaceRevisionDigest === workspaceRevisionDigest));
|
|
73
112
|
}
|
|
74
113
|
|
|
75
114
|
export function verificationRunIdentity(cwd, command, changedFiles = []) {
|
|
@@ -83,6 +122,24 @@ export function verificationRunIdentity(cwd, command, changedFiles = []) {
|
|
|
83
122
|
.digest("hex");
|
|
84
123
|
}
|
|
85
124
|
|
|
125
|
+
export function verificationEvidenceProvesCurrentWorkspace(entry, digest, cwd) {
|
|
126
|
+
return verificationEvidenceProvesStableTree(entry, digest, currentWorkspaceRevisionDigest(cwd));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Historical projections are readable; they do not grant runtime completion/reuse. */
|
|
130
|
+
export function verificationProjectionWorkspaceRevision(task, options = {}) {
|
|
131
|
+
return options.workspaceRevisionDigest !== undefined ? options.workspaceRevisionDigest
|
|
132
|
+
: task?.verifyEvidence?.some((entry) => entry.preWorkspaceRevisionDigest !== undefined || entry.workspaceRevisionDigest !== undefined)
|
|
133
|
+
? currentWorkspaceRevisionDigest(options.cwd) : undefined;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function allConfiguredVerifierEvidenceCurrent(task, digest, workspaceRevisionDigest) {
|
|
137
|
+
if (task?.workingTreeDigestAlgorithm !== WORKING_TREE_DIGEST_ALGORITHM || !isCurrentWorkingTreeDigest(digest)) return false;
|
|
138
|
+
const commands = meaningfulVerificationCommands(task?.verifyCommands ?? []);
|
|
139
|
+
const latest = latestObservedVerificationEvidence(task?.verifyEvidence);
|
|
140
|
+
return commands.length > 0 && commands.every((command) => verificationEvidenceProvesStableTree(latest.get(command.trim()), digest, workspaceRevisionDigest));
|
|
141
|
+
}
|
|
142
|
+
|
|
86
143
|
const STRUCTURED_SIGNALS = {
|
|
87
144
|
"scope-violation": "structured-scope",
|
|
88
145
|
"protected-path": "structured-protected-path",
|
|
@@ -92,7 +149,8 @@ const STRUCTURED_SIGNALS = {
|
|
|
92
149
|
environment: "structured-environment",
|
|
93
150
|
"flaky-infrastructure": "structured-flaky-infrastructure",
|
|
94
151
|
"stale-verifier": "structured-stale-verifier",
|
|
95
|
-
"missing-verifier": "structured-missing-verifier"
|
|
152
|
+
"missing-verifier": "structured-missing-verifier",
|
|
153
|
+
"verification-gap": "structured-verification-gap"
|
|
96
154
|
};
|
|
97
155
|
|
|
98
156
|
function parsedSignals(text, exitCode, structuredEvents) {
|
|
@@ -100,7 +158,10 @@ function parsedSignals(text, exitCode, structuredEvents) {
|
|
|
100
158
|
const lower = text.toLowerCase();
|
|
101
159
|
const signals = structuredEvents.map((event) => STRUCTURED_SIGNALS[event]).filter(Boolean);
|
|
102
160
|
const add = (signal, pattern) => { if (pattern.test(lower)) signals.push(signal); };
|
|
103
|
-
|
|
161
|
+
// Task scope is advisory. Only concrete filesystem-safety wording may be
|
|
162
|
+
// inferred from unstructured output; scope policy must arrive as a trusted
|
|
163
|
+
// structured event so ordinary assertion text cannot stop recovery.
|
|
164
|
+
add("scope-diagnostic", /\b(protected path|symlink escape)\b/);
|
|
104
165
|
add("policy-diagnostic", /\b(policy (?:blocked|denied|violation)|capability lock|guard blocked)\b/);
|
|
105
166
|
add("permission-diagnostic", /\b(eacces|eperm|permission denied|not authorized|unauthorized|forbidden)\b/);
|
|
106
167
|
add("provider-rate-limit", /\b(?:http\s*)?429\b|\brate[ -]?limit(?:ed|ing)?\b/);
|
|
@@ -153,6 +214,7 @@ function categoryForEvidence(evidence) {
|
|
|
153
214
|
if (signals.has("structured-provider") || signals.has("provider-rate-limit") || signals.has("provider-transport")) return "provider-network";
|
|
154
215
|
if (signals.has("structured-environment") || signals.has("environment-diagnostic")) return "environment";
|
|
155
216
|
if (signals.has("structured-flaky-infrastructure") || signals.has("local-port-conflict") || signals.has("transient-infrastructure")) return "flaky-infrastructure";
|
|
217
|
+
if (signals.has("structured-verification-gap")) return "unknown";
|
|
156
218
|
if (signals.has("structured-stale-verifier") || signals.has("structured-missing-verifier") || signals.has("dependency-config-diagnostic")) return "dependency-config";
|
|
157
219
|
if (["typescript-diagnostic", "python-type-diagnostic", "go-compile-diagnostic", "rust-compile-diagnostic", "generic-compile-diagnostic"].some((signal) => signals.has(signal))) return "compile-typecheck";
|
|
158
220
|
if (signals.has("test-assertion-diagnostic")) return "test-assertion";
|
|
@@ -191,7 +253,7 @@ const RECORDED_CATEGORY_HINTS = Object.freeze({
|
|
|
191
253
|
environment: "command not found in runtime environment",
|
|
192
254
|
"provider-network": "provider API request timed out",
|
|
193
255
|
"permission-policy": "permission denied by policy",
|
|
194
|
-
"scope-protected-path": "
|
|
256
|
+
"scope-protected-path": "protected path is forbidden",
|
|
195
257
|
"flaky-infrastructure": "EADDRINUSE: port is already in use"
|
|
196
258
|
});
|
|
197
259
|
|
|
@@ -202,29 +264,54 @@ export function classifyRecordedVerificationFailure(summary, exitCode = 1) {
|
|
|
202
264
|
return classifyVerificationFailure(hint ? `${text}\n${hint}` : text, exitCode);
|
|
203
265
|
}
|
|
204
266
|
|
|
205
|
-
const
|
|
267
|
+
const COMPLETION_POLICY_BOUNDARY = /(?:^read-only task has observed changes\b|^mutation-forbidden task has observed changes\b|\bprotected(?:\/read-only| or read-only)? paths?\b|\bread-only path\b)/i;
|
|
206
268
|
|
|
207
269
|
export function classifyCompletionGateFailure(missing = [], summary = "", exitCode = 1) {
|
|
208
270
|
const missingItems = Array.isArray(missing) ? missing.map((item) => String(item)) : [];
|
|
209
|
-
//
|
|
210
|
-
// completion failures.
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
structuredEvents: ["scope-violation"]
|
|
271
|
+
// Protected-path and read-only mutation boundaries are structural
|
|
272
|
+
// completion failures. Task scope is advisory and never enters this path.
|
|
273
|
+
if (missingItems.some((item) => COMPLETION_POLICY_BOUNDARY.test(item))) {
|
|
274
|
+
return classifyVerificationFailure("Completion gate rejected a protected-path or read-only boundary.", 1, {
|
|
275
|
+
structuredEvents: ["protected-path"]
|
|
215
276
|
});
|
|
216
277
|
}
|
|
217
278
|
if (missingItems.some((item) => /^critical acceptance evidence\b/i.test(item))) {
|
|
218
|
-
|
|
279
|
+
// A missing proof is not an observed assertion failure. In particular,
|
|
280
|
+
// analyzer abstention cannot fabricate source-repair eligibility.
|
|
281
|
+
return classifyVerificationFailure("Completion gate lacks required behavioral verification evidence.", 1, {
|
|
282
|
+
structuredEvents: ["verification-gap"]
|
|
283
|
+
});
|
|
219
284
|
}
|
|
220
285
|
return classifyRecordedVerificationFailure(summary, exitCode);
|
|
221
286
|
}
|
|
222
287
|
|
|
223
288
|
export function selectCompletionRecoveryClassification(recordedClassification, missing = [], summary = "", exitCode = 1) {
|
|
224
289
|
const gateClassification = classifyCompletionGateFailure(missing, summary, exitCode);
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
290
|
+
if (gateClassification.category === "scope-protected-path" || exitCode === 0) return gateClassification;
|
|
291
|
+
try { return recordedClassification ? validateFailureClassification(recordedClassification) : gateClassification; }
|
|
292
|
+
catch { return gateClassification; }
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/** Reuse a checkpoint classification only for the exact current failed run. */
|
|
296
|
+
export function recordedFailureForObservation(checkpoints, observed, currentTreeDigest, workspaceRevisionDigest) {
|
|
297
|
+
if (observed?.observed !== true || observed.matchedProfileCommand !== true || observed.exitCode === 0
|
|
298
|
+
|| !isCurrentWorkingTreeDigest(observed.preWorkingTreeDigest) || observed.preWorkingTreeDigest !== observed.workingTreeDigest
|
|
299
|
+
|| (currentTreeDigest !== undefined && currentTreeDigest !== observed.workingTreeDigest)) return undefined;
|
|
300
|
+
const revisionRequired = workspaceRevisionDigest !== undefined || observed.preWorkspaceRevisionDigest !== undefined || observed.workspaceRevisionDigest !== undefined;
|
|
301
|
+
if (revisionRequired && (!isWorkspaceRevisionDigest(workspaceRevisionDigest)
|
|
302
|
+
|| observed.preWorkspaceRevisionDigest !== workspaceRevisionDigest || observed.workspaceRevisionDigest !== workspaceRevisionDigest)) return undefined;
|
|
303
|
+
const observedAt = observed.observedAt ?? observed.recordedAt;
|
|
304
|
+
if (typeof observedAt !== "string" || !Number.isFinite(Date.parse(observedAt))) return undefined;
|
|
305
|
+
const checkpoint = (Array.isArray(checkpoints) ? checkpoints : []).filter((item) => {
|
|
306
|
+
const binding = item?.evidence?.verificationObservation;
|
|
307
|
+
return item?.phase === "verify" && item.status === "failed" && binding
|
|
308
|
+
&& binding.command === observed.command?.trim() && binding.observedAt === observedAt
|
|
309
|
+
&& binding.exitCode === observed.exitCode && binding.preWorkingTreeDigest === observed.preWorkingTreeDigest
|
|
310
|
+
&& binding.workingTreeDigest === observed.workingTreeDigest
|
|
311
|
+
&& (!revisionRequired || (binding.preWorkspaceRevisionDigest === workspaceRevisionDigest && binding.workspaceRevisionDigest === workspaceRevisionDigest));
|
|
312
|
+
}).at(-1);
|
|
313
|
+
try { return checkpoint ? validateFailureClassification(checkpoint.evidence.failureClassification) : undefined; }
|
|
314
|
+
catch { return undefined; }
|
|
228
315
|
}
|
|
229
316
|
|
|
230
317
|
export function chooseVerificationScope(profileVerifyCommands = {}, changedFiles = []) {
|
|
@@ -235,8 +322,8 @@ export function chooseVerificationScope(profileVerifyCommands = {}, changedFiles
|
|
|
235
322
|
|| /^(?:README|CHANGELOG|CONTRIBUTING|SECURITY)(?:\.|$)/i.test(file);
|
|
236
323
|
const hasDocs = files.some(isDocumentationFile);
|
|
237
324
|
const hasDocsOnly = files.length > 0 && files.every(isDocumentationFile);
|
|
238
|
-
const hasFrontend = files.some((file) => /(
|
|
239
|
-
const hasBackend = files.some((file) => /(
|
|
325
|
+
const hasFrontend = files.some((file) => /(^|[\/_-])(?:app|pages|components|frontend|web|client)(?=[\/_-]|$)|\.(?:tsx|jsx|css|scss|vue|svelte)$/i.test(file));
|
|
326
|
+
const hasBackend = files.some((file) => /(^|[\/_-])(?:api|server|backend|services)(?=[\/_-]|$)|\.(?:go|py|rs|java|kt|cs|rb|php|sql)$/i.test(file));
|
|
240
327
|
const selectedGroups = [];
|
|
241
328
|
if (hasDocsOnly && groups.docs) {
|
|
242
329
|
selectedGroups.push("docs");
|
|
@@ -310,5 +397,7 @@ export function selectVerificationPlan(profile, requestedGroup, changeMode, cwd,
|
|
|
310
397
|
error: `Verify group ${group ?? "(none)"} has no meaningful command. Configure .pi/piagent-profile.json before source changes.`
|
|
311
398
|
};
|
|
312
399
|
}
|
|
400
|
+
const boundsError = verifierCommandBoundsError(commands);
|
|
401
|
+
if (boundsError) return { group, commands, error: boundsError };
|
|
313
402
|
return { group, commands };
|
|
314
403
|
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
export const WORKFLOW_IDS = [
|
|
2
|
+
"task",
|
|
3
|
+
"scout",
|
|
4
|
+
"be-to-fe",
|
|
5
|
+
"discuss",
|
|
6
|
+
"plan",
|
|
7
|
+
"review",
|
|
8
|
+
"commit",
|
|
9
|
+
"pr",
|
|
10
|
+
"onboard",
|
|
11
|
+
"platform-improve"
|
|
12
|
+
] as const;
|
|
13
|
+
|
|
14
|
+
export type WorkflowId = typeof WORKFLOW_IDS[number];
|
|
15
|
+
export type ContextWorkflow = "task" | "scout" | "discuss" | "plan" | "review" | "release" | "onboard"
|
|
16
|
+
| "usage" | "permission" | "context";
|
|
17
|
+
|
|
18
|
+
export type WorkflowOption = {
|
|
19
|
+
id: WorkflowId;
|
|
20
|
+
aliases: readonly string[];
|
|
21
|
+
label: string;
|
|
22
|
+
description: string;
|
|
23
|
+
argumentHint: string;
|
|
24
|
+
requestRequired: boolean;
|
|
25
|
+
contextWorkflow: ContextWorkflow;
|
|
26
|
+
changeMode: "source-change" | "read-only" | "plan-only" | "clarification" | "git" | "onboarding" | "platform";
|
|
27
|
+
modelUse: "required";
|
|
28
|
+
recommendedFreshSession: boolean;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** Surface-neutral workflow truth shared by context classification and runtime ingress. */
|
|
32
|
+
export const WORKFLOW_OPTIONS: readonly WorkflowOption[] = [
|
|
33
|
+
{ id: "task", aliases: ["task", "implement"], label: "Task", description: "Implement a bounded task", argumentHint: "<request>", requestRequired: true, contextWorkflow: "task", changeMode: "source-change", modelUse: "required", recommendedFreshSession: true },
|
|
34
|
+
{ id: "scout", aliases: ["scout", "audit"], label: "Scout", description: "Read-only audit or research", argumentHint: "<area/spec/risk>", requestRequired: true, contextWorkflow: "scout", changeMode: "read-only", modelUse: "required", recommendedFreshSession: true },
|
|
35
|
+
{ id: "be-to-fe", aliases: ["be-to-fe", "befe"], label: "BE → FE", description: "Implement frontend from a backend contract", argumentHint: "<BE spec/change + FE outcome>", requestRequired: true, contextWorkflow: "task", changeMode: "source-change", modelUse: "required", recommendedFreshSession: true },
|
|
36
|
+
{ id: "discuss", aliases: ["discuss", "clarify"], label: "Discuss", description: "Clarify before planning or editing", argumentHint: "<rough idea>", requestRequired: true, contextWorkflow: "discuss", changeMode: "clarification", modelUse: "required", recommendedFreshSession: false },
|
|
37
|
+
{ id: "plan", aliases: ["plan"], label: "Plan", description: "Create an implementation plan", argumentHint: "<goal>", requestRequired: true, contextWorkflow: "plan", changeMode: "plan-only", modelUse: "required", recommendedFreshSession: false },
|
|
38
|
+
{ id: "review", aliases: ["review"], label: "Review", description: "Review a diff or source read-only", argumentHint: "<target or diff>", requestRequired: true, contextWorkflow: "review", changeMode: "read-only", modelUse: "required", recommendedFreshSession: false },
|
|
39
|
+
{ id: "commit", aliases: ["commit"], label: "Commit", description: "Run the guarded local commit workflow", argumentHint: "[message]", requestRequired: false, contextWorkflow: "release", changeMode: "git", modelUse: "required", recommendedFreshSession: false },
|
|
40
|
+
{ id: "pr", aliases: ["pr"], label: "PR", description: "Prepare a guarded pull request", argumentHint: "[title]", requestRequired: false, contextWorkflow: "release", changeMode: "git", modelUse: "required", recommendedFreshSession: false },
|
|
41
|
+
{ id: "onboard", aliases: ["onboard", "onboard-project"], label: "Onboard", description: "Run first-read project onboarding", argumentHint: "[focus]", requestRequired: false, contextWorkflow: "onboard", changeMode: "onboarding", modelUse: "required", recommendedFreshSession: true },
|
|
42
|
+
{ id: "platform-improve", aliases: ["platform-improve", "platform"], label: "Platform improve", description: "Improve Pi Agent Platform itself", argumentHint: "<goal + affected area>", requestRequired: true, contextWorkflow: "task", changeMode: "platform", modelUse: "required", recommendedFreshSession: true }
|
|
43
|
+
] as const;
|
|
44
|
+
|
|
45
|
+
export const WORKFLOW_ALIASES: Readonly<Record<string, WorkflowId>> = Object.freeze(Object.fromEntries(
|
|
46
|
+
WORKFLOW_OPTIONS.flatMap((option) => option.aliases.map((alias) => [alias, option.id] as const))
|
|
47
|
+
));
|
|
48
|
+
|
|
49
|
+
export function resolveWorkflowId(value: unknown): WorkflowId | null {
|
|
50
|
+
if (typeof value !== "string") return null;
|
|
51
|
+
return WORKFLOW_ALIASES[value.trim().toLowerCase()] ?? null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function workflowOption(value: unknown): WorkflowOption | null {
|
|
55
|
+
const id = resolveWorkflowId(value);
|
|
56
|
+
return id ? WORKFLOW_OPTIONS.find((option) => option.id === id) ?? null : null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function workflowCommandNames(options: { aliases?: boolean } = {}): string[] {
|
|
60
|
+
return options.aliases === false ? [...WORKFLOW_IDS] : Object.keys(WORKFLOW_ALIASES);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function escapedPattern(value: string): string {
|
|
64
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** A regex fragment derived from the catalog, for command/projection boundaries. */
|
|
68
|
+
export function workflowCommandPattern(options: { aliases?: boolean } = {}): string {
|
|
69
|
+
return workflowCommandNames(options).sort((left, right) => right.length - left.length)
|
|
70
|
+
.map(escapedPattern).join("|");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const NAMESPACED_WORKFLOW_COMMAND = new RegExp(
|
|
74
|
+
`^/(?:piagent-workflow|workflow)\\s+(${workflowCommandPattern()})(?=\\s|$)\\s*`, "i"
|
|
75
|
+
);
|
|
76
|
+
const DIRECT_WORKFLOW_COMMAND = new RegExp(
|
|
77
|
+
`^/(${workflowCommandPattern({ aliases: false })})(?=\\s|$)\\s*`, "i"
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
export function workflowIdFromCommand(input: unknown): WorkflowId | null {
|
|
81
|
+
const normalized = String(input ?? "").trim();
|
|
82
|
+
const match = NAMESPACED_WORKFLOW_COMMAND.exec(normalized) ?? DIRECT_WORKFLOW_COMMAND.exec(normalized);
|
|
83
|
+
return resolveWorkflowId(match?.[1]);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function stripWorkflowCommand(input: string): string {
|
|
87
|
+
return String(input ?? "").replace(NAMESPACED_WORKFLOW_COMMAND, "").replace(DIRECT_WORKFLOW_COMMAND, "").trim();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function workflowHelpLines(): string[] {
|
|
91
|
+
const aliasLines = WORKFLOW_OPTIONS.flatMap((option) => option.aliases.filter((alias) => alias !== option.id)
|
|
92
|
+
.map((alias) => `/workflow ${alias} → ${option.id}`));
|
|
93
|
+
return [
|
|
94
|
+
"namespace: /workflow",
|
|
95
|
+
...WORKFLOW_OPTIONS.map((option) => `${option.id}: /workflow ${option.id} ${option.argumentHint} — ${option.description}`),
|
|
96
|
+
`aliases: ${aliasLines.join(" | ") || "none"}`
|
|
97
|
+
];
|
|
98
|
+
}
|
|
@@ -2,14 +2,35 @@ import { execFileSync } from "node:child_process";
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// Parent workspaces commonly carry shared plans, verifier scripts, and agent
|
|
6
|
+
// configuration beside their child repositories. Keep the traversal bounded,
|
|
7
|
+
// but leave enough room for a real multi-repository workspace instead of
|
|
8
|
+
// silently dropping evidence at the former 2,000-file ceiling.
|
|
9
|
+
const WORKSPACE_EVIDENCE_MAX_FILES = 20_000;
|
|
10
|
+
// These names are not merely noisy build output: they carry repository
|
|
11
|
+
// ownership, Piagent authority, or provider credentials. Evidence discovery
|
|
12
|
+
// excludes them and the mutation guard protects them independently of task
|
|
13
|
+
// focus, so broad monorepo access cannot create an unaudited private-state gap.
|
|
14
|
+
export const WORKSPACE_PRIVATE_STATE_PATTERNS = Object.freeze([
|
|
15
|
+
"**/.git/**", "**/.hg/**", "**/.svn/**", "**/.pi/**",
|
|
16
|
+
"**/.aws/**", "**/.azure/**", "**/.docker/**", "**/.gnupg/**", "**/.kube/**", "**/.ssh/**",
|
|
17
|
+
"**/.git-credentials", "**/.netrc", "**/.npmrc", "**/.pypirc",
|
|
18
|
+
"**/.env", "**/.env.*",
|
|
19
|
+
"**/auth.json", "**/credential.json", "**/credentials.json", "**/secret.json", "**/secrets.json",
|
|
20
|
+
"**/token.json", "**/tokens.json"
|
|
21
|
+
]);
|
|
6
22
|
const WORKSPACE_EVIDENCE_SKIP_NAMES = new Set([
|
|
7
|
-
".git", ".hg", ".svn", ".pi", "node_modules", "dist", "build", ".next", "coverage"
|
|
23
|
+
".git", ".hg", ".svn", ".pi", "node_modules", "dist", "build", ".next", "coverage",
|
|
24
|
+
".cache", ".npm", ".pnpm-store", ".yarn", ".turbo", ".aws", ".azure", ".docker",
|
|
25
|
+
".gnupg", ".kube", ".ssh", ".ds_store", ".git-credentials", ".netrc", ".npmrc", ".pypirc"
|
|
8
26
|
]);
|
|
9
27
|
const WORKSPACE_EVIDENCE_PRIORITY_NAMES = new Map([["plans", 0]]);
|
|
10
28
|
|
|
11
|
-
function
|
|
12
|
-
|
|
29
|
+
function excludedWorkspaceEvidenceName(value) {
|
|
30
|
+
const name = String(value ?? "");
|
|
31
|
+
return WORKSPACE_EVIDENCE_SKIP_NAMES.has(name.toLowerCase())
|
|
32
|
+
|| /^\.env(?:\.|$)/i.test(name)
|
|
33
|
+
|| /^(?:auth|credentials?|secrets?|tokens?)\.json$/i.test(name);
|
|
13
34
|
}
|
|
14
35
|
|
|
15
36
|
export function gitOutput(cwd, args, options = {}) {
|
|
@@ -86,6 +107,15 @@ export function directChildGitEvidenceRoots(cwd) {
|
|
|
86
107
|
|
|
87
108
|
export function gitEvidenceRootDetails(cwd) {
|
|
88
109
|
if (isGitWorkingTree(cwd)) return { roots: [{ cwd, prefix: "" }], complete: true };
|
|
110
|
+
// A present Git marker combined with a failed Git probe is ambiguous (for
|
|
111
|
+
// example a broken worktree pointer or a transient command failure). Do not
|
|
112
|
+
// reinterpret that repository as an ordinary complete non-Git directory.
|
|
113
|
+
try {
|
|
114
|
+
fs.lstatSync(path.join(cwd, ".git"));
|
|
115
|
+
return { roots: [], complete: false };
|
|
116
|
+
} catch (error) {
|
|
117
|
+
if (error?.code !== "ENOENT") return { roots: [], complete: false };
|
|
118
|
+
}
|
|
89
119
|
return directChildGitEvidenceRootDetails(cwd);
|
|
90
120
|
}
|
|
91
121
|
|
|
@@ -93,9 +123,16 @@ export function gitEvidenceRoots(cwd) {
|
|
|
93
123
|
return gitEvidenceRootDetails(cwd).roots;
|
|
94
124
|
}
|
|
95
125
|
|
|
96
|
-
|
|
126
|
+
function workspaceEvidenceFileLimit(value) {
|
|
127
|
+
return Number.isInteger(value)
|
|
128
|
+
? Math.max(1, Math.min(WORKSPACE_EVIDENCE_MAX_FILES, value))
|
|
129
|
+
: WORKSPACE_EVIDENCE_MAX_FILES;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function nonGitWorkspaceFileDetails(cwd, gitRootPrefixes, maxFiles = WORKSPACE_EVIDENCE_MAX_FILES) {
|
|
97
133
|
const files = [];
|
|
98
134
|
let complete = true;
|
|
135
|
+
const limit = workspaceEvidenceFileLimit(maxFiles);
|
|
99
136
|
const gitRoots = new Set(gitRootPrefixes.filter(Boolean));
|
|
100
137
|
const orderedEntries = (entries) => [...entries].sort((left, right) => {
|
|
101
138
|
const leftPriority = WORKSPACE_EVIDENCE_PRIORITY_NAMES.get(left.name.toLowerCase()) ?? 10;
|
|
@@ -103,7 +140,7 @@ export function nonGitWorkspaceFileDetails(cwd, gitRootPrefixes) {
|
|
|
103
140
|
return leftPriority - rightPriority || left.name.localeCompare(right.name, "en-US");
|
|
104
141
|
});
|
|
105
142
|
function visit(directory, relativeDirectory) {
|
|
106
|
-
if (files.length >=
|
|
143
|
+
if (files.length >= limit) {
|
|
107
144
|
complete = false;
|
|
108
145
|
return;
|
|
109
146
|
}
|
|
@@ -115,15 +152,15 @@ export function nonGitWorkspaceFileDetails(cwd, gitRootPrefixes) {
|
|
|
115
152
|
return;
|
|
116
153
|
}
|
|
117
154
|
for (const entry of orderedEntries(entries)) {
|
|
118
|
-
if (files.length >=
|
|
155
|
+
if (files.length >= limit) {
|
|
119
156
|
complete = false;
|
|
120
157
|
return;
|
|
121
158
|
}
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
if (
|
|
159
|
+
// A parent workspace can own real project source in hidden directories
|
|
160
|
+
// (for example shared verifier scripts). Evidence discovery therefore
|
|
161
|
+
// excludes explicit private/cache/credential names instead of treating
|
|
162
|
+
// every dot-prefixed path as non-project state.
|
|
163
|
+
if (excludedWorkspaceEvidenceName(entry.name)) continue;
|
|
127
164
|
const relative = relativeDirectory ? `${relativeDirectory}/${entry.name}` : entry.name;
|
|
128
165
|
if (gitRoots.has(relative.split("/")[0])) continue;
|
|
129
166
|
const absolute = path.join(directory, entry.name);
|
|
@@ -141,8 +178,8 @@ export function nonGitWorkspaceFileDetails(cwd, gitRootPrefixes) {
|
|
|
141
178
|
return { files: files.sort(), complete };
|
|
142
179
|
}
|
|
143
180
|
|
|
144
|
-
export function nonGitWorkspaceFiles(cwd, gitRootPrefixes) {
|
|
145
|
-
return nonGitWorkspaceFileDetails(cwd, gitRootPrefixes).files;
|
|
181
|
+
export function nonGitWorkspaceFiles(cwd, gitRootPrefixes, maxFiles = WORKSPACE_EVIDENCE_MAX_FILES) {
|
|
182
|
+
return nonGitWorkspaceFileDetails(cwd, gitRootPrefixes, maxFiles).files;
|
|
146
183
|
}
|
|
147
184
|
|
|
148
185
|
export function pathWithinNonGitWorkspaceEvidenceRoot(candidate, gitRootPrefixes) {
|
|
@@ -150,8 +187,7 @@ export function pathWithinNonGitWorkspaceEvidenceRoot(candidate, gitRootPrefixes
|
|
|
150
187
|
const topSegment = segments[0];
|
|
151
188
|
return Boolean(
|
|
152
189
|
topSegment
|
|
153
|
-
&& !
|
|
154
|
-
&& !segments.some(hiddenWorkspaceEvidenceSegment)
|
|
190
|
+
&& !segments.some(excludedWorkspaceEvidenceName)
|
|
155
191
|
&& !gitRootPrefixes.includes(topSegment)
|
|
156
192
|
);
|
|
157
193
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import { gitEvidenceRootDetails } from "./workspace-evidence-roots.js";
|
|
5
|
+
|
|
6
|
+
export const WORKSPACE_REVISION_VERSION = "workspace-revision-v1";
|
|
7
|
+
const hash = (value) => createHash("sha256").update(value).digest("hex");
|
|
8
|
+
const PREFIX = `${WORKSPACE_REVISION_VERSION}:`;
|
|
9
|
+
export const isWorkspaceRevisionDigest = (value) => typeof value === "string" && /^workspace-revision-v1:[a-f0-9]{64}$/.test(value);
|
|
10
|
+
|
|
11
|
+
function git(cwd, args) {
|
|
12
|
+
return execFileSync("git", ["-c", "core.fsmonitor=false", "--no-optional-locks", "-C", cwd, ...args], {
|
|
13
|
+
encoding: "utf8", timeout: 3000, maxBuffer: 8192, stdio: ["ignore", "pipe", "pipe"]
|
|
14
|
+
}).trim();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function repositoryHeadIdentity(cwd) {
|
|
18
|
+
try {
|
|
19
|
+
const head = git(cwd, ["rev-parse", "--verify", "--quiet", "HEAD"]);
|
|
20
|
+
if (!/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(head)) throw new Error("Invalid repository revision");
|
|
21
|
+
return head;
|
|
22
|
+
} catch (error) {
|
|
23
|
+
if (error.status !== 1) throw error;
|
|
24
|
+
const reference = git(cwd, ["symbolic-ref", "--quiet", "HEAD"]);
|
|
25
|
+
if (!reference.startsWith("refs/heads/")) throw new Error("Invalid unborn repository");
|
|
26
|
+
try { git(cwd, ["show-ref", "--verify", "--quiet", reference]); }
|
|
27
|
+
catch (missing) { if (missing.status === 1) return `unborn:${reference}`; throw missing; }
|
|
28
|
+
throw new Error("Repository revision changed during capture");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Baseline identity, not a content digest or authenticated verifier receipt. */
|
|
33
|
+
export function captureWorkspaceRevision(cwd) {
|
|
34
|
+
const root = fs.realpathSync.native(cwd);
|
|
35
|
+
const details = gitEvidenceRootDetails(root);
|
|
36
|
+
if (!details.complete || details.roots.length === 0 || details.roots.length > 128) throw new Error("Workspace baseline inventory is unavailable");
|
|
37
|
+
const repositories = details.roots.map((item) => Object.freeze({
|
|
38
|
+
prefix: item.prefix,
|
|
39
|
+
rootId: hash(fs.realpathSync.native(git(item.cwd, ["rev-parse", "--show-toplevel"]))),
|
|
40
|
+
head: repositoryHeadIdentity(item.cwd)
|
|
41
|
+
}));
|
|
42
|
+
const binding = Object.freeze({ version: WORKSPACE_REVISION_VERSION, projectId: hash(root), repositories: Object.freeze(repositories) });
|
|
43
|
+
return Object.freeze({ ...binding, digest: `${PREFIX}${hash(JSON.stringify(binding))}` });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function currentWorkspaceRevisionDigest(cwd) {
|
|
47
|
+
try { return captureWorkspaceRevision(cwd).digest; } catch { return null; }
|
|
48
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { workingTreeSnapshot } from "./task-state.js";
|
|
2
|
+
import { workingTreeObservation } from "./working-tree-digest.js";
|
|
3
|
+
import { currentWorkspaceRevisionDigest } from "./workspace-revision.js";
|
|
4
|
+
|
|
5
|
+
/** Bracket content capture with baseline checks; neither alone proves current code. */
|
|
6
|
+
export function captureWorkspaceVerificationSnapshot(cwd, options = {}) {
|
|
7
|
+
const before = currentWorkspaceRevisionDigest(cwd);
|
|
8
|
+
const observation = workingTreeObservation(workingTreeSnapshot(cwd, options));
|
|
9
|
+
const after = currentWorkspaceRevisionDigest(cwd);
|
|
10
|
+
const workspaceRevisionDigest = before !== null && before === after ? before : null;
|
|
11
|
+
return Object.freeze({ ...observation, workspaceRevisionDigest,
|
|
12
|
+
proofCapable: observation.proofCapable && workspaceRevisionDigest !== null });
|
|
13
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@piagent/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": true,
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
37
|
-
"typebox": "1.3.
|
|
36
|
+
"@earendil-works/pi-coding-agent": "0.86.1",
|
|
37
|
+
"typebox": "1.3.27"
|
|
38
38
|
},
|
|
39
39
|
"peerDependenciesMeta": {
|
|
40
40
|
"@earendil-works/pi-coding-agent": {
|
|
@@ -3,7 +3,27 @@
|
|
|
3
3
|
"name": "piagent-base-policy",
|
|
4
4
|
"protectedPaths": [
|
|
5
5
|
".git/**",
|
|
6
|
+
"**/.git/**",
|
|
7
|
+
"**/.hg/**",
|
|
8
|
+
"**/.svn/**",
|
|
9
|
+
"**/.pi/**",
|
|
10
|
+
"**/.aws/**",
|
|
11
|
+
"**/.azure/**",
|
|
12
|
+
"**/.docker/**",
|
|
13
|
+
"**/.gnupg/**",
|
|
14
|
+
"**/.kube/**",
|
|
15
|
+
"**/.ssh/**",
|
|
16
|
+
"**/.git-credentials",
|
|
17
|
+
"**/.netrc",
|
|
18
|
+
"**/.npmrc",
|
|
19
|
+
"**/.pypirc",
|
|
6
20
|
"**/auth.json",
|
|
21
|
+
"**/credential.json",
|
|
22
|
+
"**/credentials.json",
|
|
23
|
+
"**/secret.json",
|
|
24
|
+
"**/secrets.json",
|
|
25
|
+
"**/token.json",
|
|
26
|
+
"**/tokens.json",
|
|
7
27
|
"**/.env",
|
|
8
28
|
"**/.env.*",
|
|
9
29
|
"**/node_modules/**",
|
|
@@ -16,7 +36,27 @@
|
|
|
16
36
|
],
|
|
17
37
|
"shellProtectedPaths": [
|
|
18
38
|
".git/**",
|
|
39
|
+
"**/.git/**",
|
|
40
|
+
"**/.hg/**",
|
|
41
|
+
"**/.svn/**",
|
|
42
|
+
"**/.pi/**",
|
|
43
|
+
"**/.aws/**",
|
|
44
|
+
"**/.azure/**",
|
|
45
|
+
"**/.docker/**",
|
|
46
|
+
"**/.gnupg/**",
|
|
47
|
+
"**/.kube/**",
|
|
48
|
+
"**/.ssh/**",
|
|
49
|
+
"**/.git-credentials",
|
|
50
|
+
"**/.netrc",
|
|
51
|
+
"**/.npmrc",
|
|
52
|
+
"**/.pypirc",
|
|
19
53
|
"**/auth.json",
|
|
54
|
+
"**/credential.json",
|
|
55
|
+
"**/credentials.json",
|
|
56
|
+
"**/secret.json",
|
|
57
|
+
"**/secrets.json",
|
|
58
|
+
"**/token.json",
|
|
59
|
+
"**/tokens.json",
|
|
20
60
|
"**/.env",
|
|
21
61
|
"**/.env.*",
|
|
22
62
|
".pi/piagent-state/**",
|
|
@@ -224,6 +264,7 @@
|
|
|
224
264
|
},
|
|
225
265
|
"finalGate": {
|
|
226
266
|
"defaultMode": "enforce",
|
|
267
|
+
"acceptanceProofMode": "diagnostic",
|
|
227
268
|
"requireTaskContract": true,
|
|
228
269
|
"requireContextManifest": true,
|
|
229
270
|
"requireVerifyEvidence": true,
|
|
@@ -232,7 +273,7 @@
|
|
|
232
273
|
},
|
|
233
274
|
"orchestrationPolicy": {
|
|
234
275
|
"defaultMode": "solo-first",
|
|
235
|
-
"maxConcurrentSubagents":
|
|
276
|
+
"maxConcurrentSubagents": 1,
|
|
236
277
|
"defaultReviewLenses": [
|
|
237
278
|
"correctness",
|
|
238
279
|
"tests",
|
|
@@ -240,7 +281,7 @@
|
|
|
240
281
|
],
|
|
241
282
|
"roleModelGuidance": {
|
|
242
283
|
"planner": "Use the strongest available model for decomposition, architecture, risk, and acceptance criteria.",
|
|
243
|
-
"worker": "
|
|
284
|
+
"worker": "Disabled by default. The parent model owns all implementation and mutation.",
|
|
244
285
|
"reviewer": "Use a model or thinking setting decorrelated from the worker when review quality matters.",
|
|
245
286
|
"watchdog": "Use a strong model only for final risk review, security, release, or high-impact changes."
|
|
246
287
|
},
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"CAP-11": "advisory",
|
|
35
35
|
"CAP-12": "on",
|
|
36
36
|
"CAP-13": "off",
|
|
37
|
-
"CAP-14": "
|
|
37
|
+
"CAP-14": "off",
|
|
38
38
|
"CAP-15": "off",
|
|
39
39
|
"CAP-16": "on",
|
|
40
40
|
"CAP-17": "on"
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"CAP-11": "advisory",
|
|
81
81
|
"CAP-12": "on",
|
|
82
82
|
"CAP-13": "strict",
|
|
83
|
-
"CAP-14": "
|
|
83
|
+
"CAP-14": "off",
|
|
84
84
|
"CAP-15": "off",
|
|
85
85
|
"CAP-16": "on",
|
|
86
86
|
"CAP-17": "on"
|
|
@@ -314,7 +314,7 @@
|
|
|
314
314
|
"layer": "L3",
|
|
315
315
|
"configKey": "helpers",
|
|
316
316
|
"configSources": ["manifest", "PIAGENT_HELPERS_MODE"],
|
|
317
|
-
"defaultMode": "
|
|
317
|
+
"defaultMode": "off",
|
|
318
318
|
"killSwitchMode": "off",
|
|
319
319
|
"dependencies": ["CAP-02", "CAP-05", "CAP-08"],
|
|
320
320
|
"modeMappings": [
|