@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
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
+
export { createHostWireSession, observeHostWireInput, HOST_WIRE_PHASE_EDGES } from "../trajectory/trajectory-runtime.ts";
|
|
3
|
+
export type { HostWireSession, HostWireSessionOptions, HostWireOperation } from "../trajectory/trajectory-runtime.ts";
|
|
2
4
|
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
3
|
-
|
|
4
5
|
import { isRuntimeOwnedContextEvidenceEntry } from "../../extensions/context-evidence.js";
|
|
5
6
|
import { toolResultFingerprint } from "../../extensions/context-engine.js";
|
|
6
|
-
import {
|
|
7
|
+
import { ShellVerificationSnapshots } from "../verification/shell-verification-snapshots.ts";
|
|
8
|
+
import { HostProjectVerification } from "../verification/host-project-verification.ts";
|
|
7
9
|
import type { TaskContract } from "../../extensions/guard-types.ts";
|
|
8
10
|
import type { RecoveryHistoryEntry } from "../recovery/recovery-policy.ts";
|
|
9
11
|
import type { ResumeState } from "../recovery/resume-state.ts";
|
|
@@ -11,6 +13,7 @@ import { ModelAuthorshipState } from "./model-authorship-state.ts";
|
|
|
11
13
|
import type { ModelMutationEvidenceCompletion, ModelMutationIdentity } from "./model-authorship-state.ts";
|
|
12
14
|
import type { ModelMutationProof } from "../quality/model-mutation-proof.ts";
|
|
13
15
|
import { PerformanceReviewState } from "./performance-review-state.ts";
|
|
16
|
+
import { SourceCheckoutReadGrants } from "./source-checkout-read-grants.ts";
|
|
14
17
|
import type {
|
|
15
18
|
PerformanceReviewCheckpoint,
|
|
16
19
|
PerformanceReviewCredit,
|
|
@@ -30,16 +33,13 @@ export type {
|
|
|
30
33
|
PerformanceReviewToolKind,
|
|
31
34
|
PerformanceReviewVerifierState
|
|
32
35
|
} from "./performance-review-state.ts";
|
|
33
|
-
|
|
34
36
|
export type ObservedTaskContext = { path: string; reason: string };
|
|
35
|
-
|
|
36
37
|
export type InjectedContextPack = {
|
|
37
38
|
queryHash: string;
|
|
38
39
|
confidence: string;
|
|
39
40
|
estimatedTokens: number;
|
|
40
41
|
paths: string[];
|
|
41
42
|
};
|
|
42
|
-
|
|
43
43
|
export type ContextInjectionItem = {
|
|
44
44
|
path: string;
|
|
45
45
|
estimatedTokens: number;
|
|
@@ -53,7 +53,6 @@ export type ContextInjectionItem = {
|
|
|
53
53
|
generation?: number;
|
|
54
54
|
sensitiveContentRedacted?: boolean;
|
|
55
55
|
};
|
|
56
|
-
|
|
57
56
|
export type ContextInjectionTelemetry = {
|
|
58
57
|
source: string;
|
|
59
58
|
queryHash: string;
|
|
@@ -61,7 +60,6 @@ export type ContextInjectionTelemetry = {
|
|
|
61
60
|
estimatedTokens: number;
|
|
62
61
|
selectedItems: ContextInjectionItem[];
|
|
63
62
|
};
|
|
64
|
-
|
|
65
63
|
export type PendingContextDelivery = {
|
|
66
64
|
deliveryId: string;
|
|
67
65
|
taskRunId: string;
|
|
@@ -70,8 +68,7 @@ export type PendingContextDelivery = {
|
|
|
70
68
|
pack?: InjectedContextPack & { retrievalKey: string };
|
|
71
69
|
injection?: ContextInjectionTelemetry;
|
|
72
70
|
};
|
|
73
|
-
|
|
74
|
-
export type RuntimeTurn = { turnId: string; promptHash: string };
|
|
71
|
+
export type RuntimeTurn = { turnId: string; promptHash: string; lightweightNonAuthorizingChange: boolean };
|
|
75
72
|
|
|
76
73
|
function evictOldest<K, V>(map: Map<K, V>, maximum: number): void {
|
|
77
74
|
while (map.size > maximum) map.delete(map.keys().next().value as K);
|
|
@@ -94,15 +91,13 @@ export class RuntimeSessionState {
|
|
|
94
91
|
readonly #observedContextBySession = new Map<string, Map<string, ObservedTaskContext>>();
|
|
95
92
|
readonly #preTaskContextBySession = new Map<string, { turnId: string; entries: Map<string, ObservedTaskContext> }>();
|
|
96
93
|
readonly #qualifiedContextEvidenceByTask = new Map<string, Map<string, ObservedTaskContext>>();
|
|
97
|
-
readonly #shellMutationSnapshots = new
|
|
94
|
+
readonly #shellMutationSnapshots = new ShellVerificationSnapshots();
|
|
95
|
+
readonly projectVerification = new HostProjectVerification(this.#shellMutationSnapshots);
|
|
96
|
+
readonly #sourceCheckoutReadGrants = new SourceCheckoutReadGrants();
|
|
98
97
|
|
|
99
|
-
constructor(options: { maxObservedContext: number }) {
|
|
100
|
-
this.#maxObservedContext = options.maxObservedContext;
|
|
101
|
-
}
|
|
98
|
+
constructor(options: { maxObservedContext: number }) { this.#maxObservedContext = options.maxObservedContext; }
|
|
102
99
|
|
|
103
|
-
sessionKey(ctx: ExtensionContext): string {
|
|
104
|
-
return `${ctx.cwd}\u0000${ctx.sessionManager.getSessionId()}`;
|
|
105
|
-
}
|
|
100
|
+
sessionKey(ctx: ExtensionContext): string { return `${ctx.cwd}\u0000${ctx.sessionManager.getSessionId()}`; }
|
|
106
101
|
|
|
107
102
|
cacheTaskIdentity(ctx: ExtensionContext, task: TaskContract | undefined): void {
|
|
108
103
|
const key = this.sessionKey(ctx);
|
|
@@ -112,11 +107,10 @@ export class RuntimeSessionState {
|
|
|
112
107
|
}
|
|
113
108
|
|
|
114
109
|
taskIdentity(ctx: ExtensionContext): { taskId: string; taskRunId: string } | undefined {
|
|
115
|
-
return this.#taskIdentityBySession.get(this.sessionKey(ctx));
|
|
116
|
-
}
|
|
110
|
+
return this.#taskIdentityBySession.get(this.sessionKey(ctx)); }
|
|
117
111
|
|
|
118
|
-
beginTurn(ctx: ExtensionContext, promptHash: string): RuntimeTurn {
|
|
119
|
-
const turn = { turnId: crypto.randomUUID(), promptHash };
|
|
112
|
+
beginTurn(ctx: ExtensionContext, promptHash: string, classification: { lightweightNonAuthorizingChange?: boolean } = {}): RuntimeTurn {
|
|
113
|
+
const turn = { turnId: crypto.randomUUID(), promptHash, lightweightNonAuthorizingChange: classification.lightweightNonAuthorizingChange === true };
|
|
120
114
|
const sessionKey = this.sessionKey(ctx);
|
|
121
115
|
this.#turnBySession.set(sessionKey, turn);
|
|
122
116
|
this.#preTaskContextBySession.set(sessionKey, { turnId: turn.turnId, entries: new Map() });
|
|
@@ -130,10 +124,16 @@ export class RuntimeSessionState {
|
|
|
130
124
|
return turn && (!promptHash || turn.promptHash === promptHash) ? { ...turn } : undefined;
|
|
131
125
|
}
|
|
132
126
|
|
|
133
|
-
|
|
134
|
-
|
|
127
|
+
classifyTurn(ctx: ExtensionContext, promptHash: string, classification: { lightweightNonAuthorizingChange: boolean }): RuntimeTurn {
|
|
128
|
+
const turn = this.currentTurn(ctx, promptHash);
|
|
129
|
+
if (!turn) return this.beginTurn(ctx, promptHash, classification);
|
|
130
|
+
turn.lightweightNonAuthorizingChange = classification.lightweightNonAuthorizingChange;
|
|
131
|
+
this.#turnBySession.set(this.sessionKey(ctx), turn); return { ...turn };
|
|
135
132
|
}
|
|
136
133
|
|
|
134
|
+
hasAdvisedTool(ctx: ExtensionContext, toolName: string): boolean {
|
|
135
|
+
return this.#advisedTools.has(`${this.sessionKey(ctx)}\u0000${toolName}`); }
|
|
136
|
+
|
|
137
137
|
rememberAdvisedTool(ctx: ExtensionContext, toolName: string): void {
|
|
138
138
|
this.#advisedTools.add(`${this.sessionKey(ctx)}\u0000${toolName}`);
|
|
139
139
|
while (this.#advisedTools.size > 500) {
|
|
@@ -157,6 +157,12 @@ export class RuntimeSessionState {
|
|
|
157
157
|
return [...(this.#observedContextBySession.get(this.sessionKey(ctx))?.values() ?? [])];
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
+
grantSourceCheckoutReadRoot(ctx: ExtensionContext, checkoutPath: string): string {
|
|
161
|
+
return this.#sourceCheckoutReadGrants.grant(this.sessionKey(ctx), checkoutPath);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
sourceCheckoutReadRoots(ctx: ExtensionContext): string[] { return this.#sourceCheckoutReadGrants.roots(this.sessionKey(ctx)); }
|
|
165
|
+
|
|
160
166
|
rememberPreTaskContext(ctx: ExtensionContext, entry: ObservedTaskContext): void {
|
|
161
167
|
const turn = this.currentTurn(ctx);
|
|
162
168
|
const epoch = this.#preTaskContextBySession.get(this.sessionKey(ctx));
|
|
@@ -219,30 +225,21 @@ export class RuntimeSessionState {
|
|
|
219
225
|
return [...(this.#qualifiedContextEvidenceByTask.get(key)?.values() ?? [])].map((entry) => structuredClone(entry));
|
|
220
226
|
}
|
|
221
227
|
|
|
222
|
-
|
|
223
|
-
|
|
228
|
+
rememberShellMutationSnapshot(ctx: ExtensionContext, toolName: string, input: unknown, toolCallId?: string): void {
|
|
229
|
+
this.#shellMutationSnapshots.remember(ctx, toolName, input, toolCallId, this.taskIdentity(ctx)?.taskRunId);
|
|
224
230
|
}
|
|
225
231
|
|
|
226
|
-
|
|
227
|
-
this
|
|
228
|
-
this.#shellMutationSnapshotKey(ctx, toolName, input),
|
|
229
|
-
workingTreeSnapshot(ctx.cwd) as Record<string, string>
|
|
230
|
-
);
|
|
231
|
-
evictOldest(this.#shellMutationSnapshots, 100);
|
|
232
|
+
consumeShellMutationSnapshot(ctx: ExtensionContext, toolName: string, input: unknown): Record<string, string> | undefined {
|
|
233
|
+
return this.consumeShellVerificationSnapshot(ctx, toolName, input)?.snapshot as Record<string, string> | undefined;
|
|
232
234
|
}
|
|
233
235
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const snapshot = this.#shellMutationSnapshots.get(key);
|
|
237
|
-
this.#shellMutationSnapshots.delete(key);
|
|
238
|
-
return snapshot;
|
|
236
|
+
consumeShellVerificationSnapshot(ctx: ExtensionContext, toolName: string, input: unknown, toolCallId?: string) {
|
|
237
|
+
return this.#shellMutationSnapshots.consume(ctx, toolName, input, toolCallId, this.taskIdentity(ctx)?.taskRunId);
|
|
239
238
|
}
|
|
240
239
|
|
|
241
240
|
clearShellMutationSnapshots(ctx: ExtensionContext): void {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
if (key.startsWith(prefix)) this.#shellMutationSnapshots.delete(key);
|
|
245
|
-
}
|
|
241
|
+
this.#shellMutationSnapshots.clear(ctx);
|
|
242
|
+
this.projectVerification.clear(ctx);
|
|
246
243
|
}
|
|
247
244
|
|
|
248
245
|
hasAutoPackedPrompt(key: string): boolean {
|
|
@@ -477,6 +474,7 @@ export class RuntimeSessionState {
|
|
|
477
474
|
this.#turnBySession.delete(sessionKey);
|
|
478
475
|
this.#observedContextBySession.delete(sessionKey);
|
|
479
476
|
this.#preTaskContextBySession.delete(sessionKey);
|
|
477
|
+
this.#sourceCheckoutReadGrants.clear(sessionKey);
|
|
480
478
|
this.clearShellMutationSnapshots(ctx);
|
|
481
479
|
if (taskIdentity) {
|
|
482
480
|
this.#performanceReview.clearTask(taskIdentity.taskRunId);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
function evictOldest<K, V>(map: Map<K, V>, maximum: number): void {
|
|
5
|
+
while (map.size > maximum) map.delete(map.keys().next().value as K);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** Session-local capability grants for immutable shared source checkouts. */
|
|
9
|
+
export class SourceCheckoutReadGrants {
|
|
10
|
+
readonly #rootsBySession = new Map<string, Map<string, string>>();
|
|
11
|
+
|
|
12
|
+
grant(sessionKey: string, checkoutPath: string): string {
|
|
13
|
+
const canonical = fs.realpathSync.native(checkoutPath);
|
|
14
|
+
if (!fs.statSync(canonical).isDirectory() || !fs.existsSync(path.join(canonical, ".git"))) {
|
|
15
|
+
throw new Error("Source checkout grant requires a canonical Git worktree directory");
|
|
16
|
+
}
|
|
17
|
+
let roots = this.#rootsBySession.get(sessionKey);
|
|
18
|
+
if (!roots) {
|
|
19
|
+
roots = new Map();
|
|
20
|
+
this.#rootsBySession.set(sessionKey, roots);
|
|
21
|
+
}
|
|
22
|
+
roots.set(canonical, canonical);
|
|
23
|
+
evictOldest(roots, 8);
|
|
24
|
+
evictOldest(this.#rootsBySession, 100);
|
|
25
|
+
return canonical;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
roots(sessionKey: string): string[] {
|
|
29
|
+
return [...(this.#rootsBySession.get(sessionKey)?.values() ?? [])];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
clear(sessionKey: string): void {
|
|
33
|
+
this.#rootsBySession.delete(sessionKey);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
import type { TaskContract } from "../../extensions/guard-types.ts";
|
|
2
2
|
import { SEMANTIC_COMPACTION_MAX_CHARS } from "../runtime-limits.ts";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
losslessOperatorRequestFitsWithin,
|
|
5
|
+
operatorRequestCarryLines
|
|
6
|
+
} from "./operator-request-carry.ts";
|
|
7
|
+
import { presentedAcceptanceCriteria, presentedCriterionGraphGuidance } from "./task-contract-presentation.ts";
|
|
4
8
|
|
|
5
9
|
const LEGACY_PROJECT_INSTRUCTIONS_START = "Before implementation:\n\n1. Load `.pi/piagent-profile.json` with `piagent_context`.";
|
|
6
10
|
const LEGACY_PROJECT_INSTRUCTIONS_END = "18. If the bundled `pi-subagents` parent skill is available, use it for delegation patterns, review loops, native supervisor coordination, and safety boundaries.";
|
|
7
11
|
const RUNTIME_MANAGED_PROJECT_INSTRUCTIONS = [
|
|
8
12
|
"Piagent runtime-managed task flow:",
|
|
9
13
|
"1. Runtime creates the task contract automatically for a bounded source-changing request before the model starts.",
|
|
10
|
-
"2. Only when runtime intake pauses for broad, high-risk, or ambiguous
|
|
11
|
-
"3. Use complete runtime-delivered source directly; do not reread it normally. On edit drift/oldText mismatch, use attached recovery; otherwise reread the affected region once. Never retry guessed anchors. Otherwise read only missing source or a concrete criterion-linked focused test.
|
|
12
|
-
"4. Preserve every runtime-provided verifier exactly and keep commands separate. Run the exact verifier set once on the final tree; rerun only after a later mutation or a runtime-authorized same-tree infrastructure retry. Automatic tasks need no management calls.",
|
|
13
|
-
"5. Treat the current source and durable Task Contract as authoritative.
|
|
14
|
+
"2. Only when runtime intake pauses for a broad, high-risk, or ambiguous task, call `piagent_task_start` exactly once with project-relative focus paths/globs; reuse an active contract.",
|
|
15
|
+
"3. Use complete runtime-delivered source directly; do not reread it normally. When the operator names an exact file, work from its delivered/current contents instead of listing or searching merely to rediscover it. Once exact current context is known for a coherent source-and-test or other multi-file change, prefer one apply_patch call over serial edit/write calls. On edit drift/oldText mismatch, use attached recovery; otherwise reread the affected region once. Never retry guessed anchors or batch multiple pattern calls against an unconfirmed target; confirm it once first. Otherwise read only missing source or a concrete criterion-linked focused test. Task scope seeds retrieval and review; it does not limit source mutation. Follow repository evidence across packages or child repos while preserving explicit user constraints. Report only paths and line references actually returned by tools; label inferences and unknowns, and never reread solely to format a citation. When creating an explicitly requested new path, do not probe that destination with read first; create it, then read back or verify it. If existence matters, use a non-erroring existence check.",
|
|
16
|
+
"4. Preserve every runtime-provided verifier exactly and keep commands separate. When you change source, add or update the smallest focused executable tests that directly exercise every explicit behavior, boundary, and error criterion unless current delivered tests already do; a broad verifier pass without criterion coverage is not completion evidence for that change. Run the exact verifier set once on the final tree; rerun only after a later mutation, an explicit operator request, or a runtime-authorized same-tree infrastructure retry. Do not warm up with an unfocused command already contained in that exact set; use a genuinely criterion-focused test or run the exact set directly. Before any repeat, use piagent_task_gate_check and run only commands reported missing for the current tree; Piagent reuses a durable exact pass on an unchanged tree. Automatic tasks need no other management calls.",
|
|
17
|
+
"5. Treat the current source, the operator request, and the durable Task Contract as authoritative. The parent model reasons and implements directly. Helpers are off unless explicitly enabled; even then, allow at most one fresh read-only helper only when runtime evidence proves two independent lanes and at least 30% projected net token saving. Never delegate writes, inherit parent history, fan out, or retry a deterministic helper failure. Preserve explicit user constraints and report unresolved risk. Runtime-derived scope is only the initial focus and may expand when implementation evidence requires FE, BE, tests, configuration, or another child repo. Runtime hooks enforce protected paths and approvals and record context, changes, current-tree verification, trace and final gate. Diagnostic groups appear only for explicit requests or manual high-risk checkpoints."
|
|
14
18
|
].join("\n");
|
|
15
19
|
|
|
20
|
+
export const SEMANTIC_COMPACTION_CANCELLED_PREFIX = "[Piagent semantic compaction cancelled:";
|
|
21
|
+
|
|
22
|
+
export function semanticCompactionCancelled(value: unknown): boolean {
|
|
23
|
+
return String(value ?? "").startsWith(SEMANTIC_COMPACTION_CANCELLED_PREFIX);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function semanticCompactionCancellation(task?: TaskContract): string {
|
|
27
|
+
return `${SEMANTIC_COMPACTION_CANCELLED_PREFIX} authoritative durable task truth and exact verifiers exceed the ${SEMANTIC_COMPACTION_MAX_CHARS}-character carry target. Keep the current session context unchanged; do not summarize, hash, truncate, or reconstruct authoritative task truth.${task?.operatorRequestDigest ? ` Contract digest: ${task.operatorRequestDigest}.` : ""}]`;
|
|
28
|
+
}
|
|
29
|
+
|
|
16
30
|
export function rewriteLegacyProjectInstructions(systemPrompt: string): {
|
|
17
31
|
systemPrompt: string;
|
|
18
32
|
rewritten: boolean;
|
|
@@ -34,7 +48,7 @@ export function compactManagedProjectInstructions(
|
|
|
34
48
|
): { systemPrompt: string; compacted: boolean } {
|
|
35
49
|
const concise = mode === "protected"
|
|
36
50
|
? "Piagent protected-path policy: do not read, disclose, or mutate protected content. Refuse without tool calls."
|
|
37
|
-
: "Piagent runtime task is injected below. Root project instructions are already loaded; do not re-read root AGENTS.md. Treat current source and the durable Task Contract as authoritative; preserve
|
|
51
|
+
: "Piagent runtime task is injected below. Root project instructions are already loaded; do not re-read root AGENTS.md. Treat current source, the operator request, and the durable Task Contract as authoritative; preserve explicit user constraints and report unresolved risk. The parent reasons and implements directly. Helpers are opt-in and limited to one fresh read-only helper only with two independent lanes and at least 30% projected net token saving; never delegate writes, inherit parent history, fan out, or retry a deterministic helper failure. Runtime-derived scope is an initial retrieval/review focus, not a mutation boundary; follow repository evidence across packages and child repos. Use complete runtime-delivered source directly without rereading it normally. For an exact operator-named file, use delivered/current contents instead of listing or searching merely to rediscover it. Once exact current context is known for a coherent source-and-test or other multi-file change, prefer one apply_patch call over serial edit/write calls. On edit drift/oldText mismatch, use attached recovery; otherwise reread the affected region once. Never retry guessed anchors or batch pattern calls against an unconfirmed target; confirm it once first. Otherwise read only missing source or a concrete criterion-linked focused test. When source is changed, add or update the smallest focused executable tests for every explicit behavior, boundary, and error criterion unless delivered tests already cover them; a broad verifier pass alone is not completion evidence for that change. Report only tool-observed paths and line references; label inferences and unknowns, and never reread solely to format a citation. For an explicitly requested new path, create it without a speculative read, then read back or verify it. Preserve every runtime verifier exactly and keep commands separate. Run the exact verifier set once on the final tree. Do not warm up with an unfocused command already contained in that exact set; rerun only after a later mutation or a runtime-authorized same-tree infrastructure retry. Make no task-management calls.";
|
|
38
52
|
const markerStart = "<!-- piagent-managed:start -->";
|
|
39
53
|
const markerEnd = "<!-- piagent-managed:end -->";
|
|
40
54
|
const start = systemPrompt.indexOf(markerStart);
|
|
@@ -70,27 +84,75 @@ function compactCarryOverList(values: unknown[], limit: number, itemChars: numbe
|
|
|
70
84
|
return selected.join(", ") || "none recorded";
|
|
71
85
|
}
|
|
72
86
|
|
|
73
|
-
function boundedCarryOver(value: string): string {
|
|
87
|
+
function boundedCarryOver(value: string, task?: TaskContract): string {
|
|
74
88
|
if (value.length <= SEMANTIC_COMPACTION_MAX_CHARS) return value;
|
|
75
|
-
const
|
|
89
|
+
const operatorTruth = operatorRequestCarryLines(task);
|
|
90
|
+
if (task && operatorTruth.length > 0) {
|
|
91
|
+
const fallback = [
|
|
92
|
+
"Create a structured Piagent carry-over summary.",
|
|
93
|
+
`Current task: ${compactCarryOverText(task.taskId, 160)} (${task.riskLane})`,
|
|
94
|
+
...operatorTruth,
|
|
95
|
+
"Acceptance criteria:",
|
|
96
|
+
...presentedAcceptanceCriteria(task).slice(0, 8).map((criterion, index) => `- ${index + 1}. ${compactCarryOverText(criterion, 160)}`),
|
|
97
|
+
`Changed files: ${compactCarryOverList(task.changedFiles, 6, 80)}`,
|
|
98
|
+
...(task.verifyCommands.length > 0 ? ["Exact verify commands:", ...task.verifyCommands.map((command, index) => `${index + 1}. ${command}`)] : ["Exact verify commands: not recorded"]),
|
|
99
|
+
`Outcome/blocker: ${task.trace.outcome}${task.trace.friction ? `; ${compactCarryOverText(task.trace.friction, 240)}` : ""}`,
|
|
100
|
+
"Preserve the authoritative operator request and every atomic acceptance criterion, plus current repository facts, task progress, exact verifier evidence, blockers, and next action.",
|
|
101
|
+
"Discard stale tool logs and speculative reasoning. Do not convert assumptions into facts."
|
|
102
|
+
].join("\n");
|
|
103
|
+
if (fallback.length <= SEMANTIC_COMPACTION_MAX_CHARS) return fallback;
|
|
104
|
+
const minimal = [
|
|
105
|
+
"Create a structured Piagent carry-over summary.",
|
|
106
|
+
`Current task: ${compactCarryOverText(task.taskId, 120)} (${task.riskLane})`,
|
|
107
|
+
...operatorTruth,
|
|
108
|
+
"Exact verify commands:", ...task.verifyCommands.map((command, index) => `${index + 1}. ${command}`),
|
|
109
|
+
`Outcome/blocker: ${task.trace.outcome}${task.trace.friction ? `; ${compactCarryOverText(task.trace.friction, 200)}` : ""}`,
|
|
110
|
+
"The complete operator request above is the acceptance source of truth. Continue only from current source and these exact verifiers."
|
|
111
|
+
].join("\n");
|
|
112
|
+
return minimal.length <= SEMANTIC_COMPACTION_MAX_CHARS ? minimal : semanticCompactionCancellation(task);
|
|
113
|
+
}
|
|
114
|
+
if (task) {
|
|
115
|
+
const manual = [
|
|
116
|
+
"Create a structured Piagent carry-over summary.",
|
|
117
|
+
`Current task: ${compactCarryOverText(task.taskId, 120)} (${task.riskLane})`,
|
|
118
|
+
`Goal: ${task.summary}`,
|
|
119
|
+
`Expected output: ${task.expectedOutput}`,
|
|
120
|
+
"Acceptance criteria:", ...presentedAcceptanceCriteria(task).map((criterion, index) => `${index + 1}. ${criterion}`),
|
|
121
|
+
"Exact verify commands:", ...task.verifyCommands.map((command, index) => `${index + 1}. ${command}`),
|
|
122
|
+
"Continue only from current source and every durable task clause above."
|
|
123
|
+
].join("\n");
|
|
124
|
+
return manual.length <= SEMANTIC_COMPACTION_MAX_CHARS ? manual : semanticCompactionCancellation(task);
|
|
125
|
+
}
|
|
126
|
+
const marker = "\n\n[Piagent carry-over shortened; no durable task contract was available.]\n\n";
|
|
76
127
|
const available = SEMANTIC_COMPACTION_MAX_CHARS - marker.length;
|
|
77
128
|
const head = Math.floor(available * 0.72);
|
|
78
129
|
return `${value.slice(0, head).trimEnd()}${marker}${value.slice(-(available - head)).trimStart()}`;
|
|
79
130
|
}
|
|
80
131
|
|
|
81
132
|
export function buildSemanticCompactionInstructions(task?: TaskContract): string {
|
|
133
|
+
if (!losslessOperatorRequestFitsWithin(task, SEMANTIC_COMPACTION_MAX_CHARS)) {
|
|
134
|
+
return semanticCompactionCancellation(task);
|
|
135
|
+
}
|
|
136
|
+
const criteria = task ? presentedAcceptanceCriteria(task) : [];
|
|
137
|
+
const executionMap = task ? presentedCriterionGraphGuidance(task, 8) : [];
|
|
138
|
+
const operatorTruth = operatorRequestCarryLines(task);
|
|
139
|
+
const criteriaLimit = operatorTruth.length > 0 ? 8 : criteria.length;
|
|
140
|
+
const criterionChars = operatorTruth.length > 0 ? 180 : 280;
|
|
82
141
|
const taskState = task
|
|
83
142
|
? [
|
|
84
143
|
`Current task: ${compactCarryOverText(task.taskId, 160)} (${task.riskLane})`,
|
|
85
144
|
`Session: ${compactCarryOverText(task.sessionName ?? task.sessionId, 160)}`,
|
|
86
|
-
`Goal: ${compactCarryOverText(task.summary, 600)}`,
|
|
145
|
+
`Goal: ${operatorTruth.length > 0 ? compactCarryOverText(task.summary, 600) : task.summary}`,
|
|
146
|
+
...operatorTruth,
|
|
147
|
+
`Expected output: ${operatorTruth.length > 0 ? compactCarryOverText(task.expectedOutput, 500) : task.expectedOutput}`,
|
|
87
148
|
"Acceptance criteria:",
|
|
88
|
-
...
|
|
89
|
-
`
|
|
90
|
-
|
|
149
|
+
...criteria.slice(0, criteriaLimit).map((criterion, index) => `- ${index + 1}. ${operatorTruth.length > 0 ? compactCarryOverText(criterion, criterionChars) : criterion}`),
|
|
150
|
+
`Initial focus (advisory): ${compactCarryOverList(task.scope, 8, 80)}`,
|
|
151
|
+
"Initial focus guides retrieval/review and neither authorizes nor forbids mutation.",
|
|
152
|
+
...(executionMap.length > 0 ? ["Execution map (planning only):", ...executionMap.map((line: string) => `- ${line}`)] : []),
|
|
91
153
|
`Changed files: ${compactCarryOverList(task.changedFiles, 8, 100)}`,
|
|
92
154
|
task.verifyCommands.length > 0
|
|
93
|
-
? ["Exact verify commands:", ...task.verifyCommands.
|
|
155
|
+
? ["Exact verify commands:", ...task.verifyCommands.map((command, index) => `${index + 1}. ${command}`)].join("\n")
|
|
94
156
|
: "Exact verify commands: not recorded",
|
|
95
157
|
`Outcome/blocker: ${task.trace.outcome}${task.trace.friction ? `; ${compactCarryOverText(task.trace.friction, 320)}` : ""}`,
|
|
96
158
|
"Full task truth is file-backed by the durable Task Contract; do not inspect private Piagent state directly."
|
|
@@ -105,5 +167,5 @@ export function buildSemanticCompactionInstructions(task?: TaskContract): string
|
|
|
105
167
|
"- superseded plans, repeated reads, raw tool logs, successful intermediate output, and speculative reasoning",
|
|
106
168
|
"- full source excerpts that can be re-read from the repository", "",
|
|
107
169
|
"Do not convert assumptions into facts. Mark unknowns explicitly. After compaction, re-read current files before editing."
|
|
108
|
-
].join("\n"));
|
|
170
|
+
].join("\n"), task);
|
|
109
171
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { TaskContract } from "../../extensions/guard-types.ts";
|
|
2
|
+
import { criterionGraphGuidance } from "../../extensions/criterion-graph.js";
|
|
3
|
+
|
|
4
|
+
export const LEGACY_RUNTIME_SCOPE_CRITERION = "Changes stay within the runtime-derived task scope.";
|
|
5
|
+
|
|
6
|
+
function isLegacyRuntimeScopeCriterion(value: unknown): boolean {
|
|
7
|
+
return typeof value === "string" && value.trim() === LEGACY_RUNTIME_SCOPE_CRITERION;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function presentedAcceptanceCriteria(
|
|
11
|
+
task: Pick<TaskContract, "acceptanceCriteria">
|
|
12
|
+
): string[] {
|
|
13
|
+
return task.acceptanceCriteria.filter((criterion) => !isLegacyRuntimeScopeCriterion(criterion));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function presentedCriterionGraphGuidance(
|
|
17
|
+
task: Pick<TaskContract, "criterionGraph">,
|
|
18
|
+
maximumLines = 12
|
|
19
|
+
): string[] {
|
|
20
|
+
const graph = task.criterionGraph;
|
|
21
|
+
if (!graph) return [];
|
|
22
|
+
const removedNodeIds = new Set(
|
|
23
|
+
graph.nodes
|
|
24
|
+
.filter((node) => isLegacyRuntimeScopeCriterion(node.obligation))
|
|
25
|
+
.map((node) => node.id)
|
|
26
|
+
);
|
|
27
|
+
if (removedNodeIds.size === 0) return criterionGraphGuidance(graph, maximumLines);
|
|
28
|
+
const presentedGraph = {
|
|
29
|
+
...graph,
|
|
30
|
+
nodes: graph.nodes
|
|
31
|
+
.filter((node) => !removedNodeIds.has(node.id))
|
|
32
|
+
.map((node) => ({
|
|
33
|
+
...node,
|
|
34
|
+
dependsOn: node.dependsOn.filter((dependency) => !removedNodeIds.has(dependency))
|
|
35
|
+
})),
|
|
36
|
+
order: graph.order.filter((nodeId) => !removedNodeIds.has(nodeId))
|
|
37
|
+
};
|
|
38
|
+
return criterionGraphGuidance(presentedGraph, maximumLines);
|
|
39
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { captureWorkspaceVerificationSnapshot } from "../../extensions/workspace-verification-snapshot.js";
|
|
2
|
+
import { diagnosticDeliveryMatchesTask, type DiagnosticDelivery } from "../recovery/diagnostic-delivery.ts";
|
|
3
|
+
import type { TaskContract } from "../../extensions/guard-types.js";
|
|
4
|
+
import {
|
|
5
|
+
handoffIdentityMatchesTask,
|
|
6
|
+
readHandoffProjection,
|
|
7
|
+
taskAcceptanceDisposition,
|
|
8
|
+
type HandoffProjection
|
|
9
|
+
} from "../recovery/handoff-projection.ts";
|
|
10
|
+
|
|
11
|
+
export const UNCERTAIN_SEND_RECEIPT_TYPE = "piagent-uncertain-send-continuation-v1";
|
|
12
|
+
|
|
13
|
+
function folded(value: unknown): string {
|
|
14
|
+
return String(value ?? "")
|
|
15
|
+
.normalize("NFD")
|
|
16
|
+
.replace(/[\u0300-\u036f]/g, "")
|
|
17
|
+
.replace(/đ/g, "d")
|
|
18
|
+
.replace(/Đ/g, "D")
|
|
19
|
+
.replace(/\s+/g, " ")
|
|
20
|
+
.trim()
|
|
21
|
+
.toLowerCase();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Identify the narrow uncertain-delivery recovery protocol. Generic requests
|
|
26
|
+
* such as "continue" or "check the previous work" intentionally do not match:
|
|
27
|
+
* they remain free to start a different task in the same session.
|
|
28
|
+
*/
|
|
29
|
+
export function isUncertainSendContinuation(value: unknown): boolean {
|
|
30
|
+
const text = folded(value);
|
|
31
|
+
if (!text) return false;
|
|
32
|
+
const switchesWork = /\b(?:new|different|separate|unrelated)\s+(?:request|task|work)\b/.test(text)
|
|
33
|
+
|| /\b(?:task|yeu cau|cong viec|viec)\s+moi\b/.test(text);
|
|
34
|
+
if (switchesWork) return false;
|
|
35
|
+
const interrupted = /\b(?:connection|delivery|send|session)\b.{0,100}\b(?:interrupted|disconnected|dropped|lost|uncertain)\b/.test(text)
|
|
36
|
+
|| /\bket noi\b.{0,100}\b(?:gian doan|bi ngat|bi mat)\b/.test(text);
|
|
37
|
+
const mayHaveArrived = /\b(?:previous|prior|last)\s+(?:send|message|request)\b.{0,100}\b(?:may|might|could)\s+have\s+been\s+(?:delivered|sent|received)\b/.test(text)
|
|
38
|
+
|| /\b(?:delivery|send|receipt)\b.{0,100}\b(?:unknown|uncertain|unconfirmed)\b/.test(text)
|
|
39
|
+
|| /\b(?:tin nhan|yeu cau|lan gui)\s+(?:truoc|vua roi)\b.{0,100}\bco the\b.{0,60}\b(?:da gui|da nhan|duoc gui)\b/.test(text);
|
|
40
|
+
const sameRequest = /\bcontinue\b.{0,100}\b(?:same|original|previous|prior)\s+(?:request|task|work)\b/.test(text)
|
|
41
|
+
|| /\bdurable\s+session\s+state\b/.test(text)
|
|
42
|
+
|| /\bwithout\s+duplicating\b/.test(text)
|
|
43
|
+
|| /\btiep tuc\b.{0,100}\b(?:cung|yeu cau|task|cong viec)\b/.test(text)
|
|
44
|
+
|| /\bkhong\s+(?:lap lai|trung lap)\b/.test(text);
|
|
45
|
+
return interrupted && mayHaveArrived && sameRequest;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function bounded(values: unknown, maximum = 8): string[] {
|
|
49
|
+
return [...new Set((Array.isArray(values) ? values : [])
|
|
50
|
+
.filter((value): value is string => typeof value === "string" && value.trim().length > 0)
|
|
51
|
+
.map((value) => value.trim()))]
|
|
52
|
+
.slice(0, maximum);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type TerminalUncertainSendReceipt = {
|
|
56
|
+
customType: typeof UNCERTAIN_SEND_RECEIPT_TYPE;
|
|
57
|
+
content: string;
|
|
58
|
+
details: {
|
|
59
|
+
schemaVersion: 1;
|
|
60
|
+
version: typeof UNCERTAIN_SEND_RECEIPT_TYPE;
|
|
61
|
+
state: "settled";
|
|
62
|
+
taskId: string;
|
|
63
|
+
taskRunId: string;
|
|
64
|
+
outcome: TaskContract["trace"]["outcome"];
|
|
65
|
+
gateDecision: "pass" | "fail";
|
|
66
|
+
completionApproved: boolean;
|
|
67
|
+
diagnosticDelivery?: DiagnosticDelivery;
|
|
68
|
+
changedFiles: string[];
|
|
69
|
+
missing: string[];
|
|
70
|
+
nextSafeAction: string;
|
|
71
|
+
replayed: false;
|
|
72
|
+
modelTurnStarted: false;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export type TerminalUncertainSendBinding = {
|
|
77
|
+
task: TaskContract;
|
|
78
|
+
text: string;
|
|
79
|
+
receipt?: TerminalUncertainSendReceipt;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export type UncertainSendRuntimeIntake = {
|
|
83
|
+
intake: {
|
|
84
|
+
started: false;
|
|
85
|
+
text: string;
|
|
86
|
+
task?: TaskContract;
|
|
87
|
+
plannedContext: [];
|
|
88
|
+
plannedContextComplete: true;
|
|
89
|
+
continuation: "terminal-uncertain-send";
|
|
90
|
+
};
|
|
91
|
+
trace: Record<string, unknown>;
|
|
92
|
+
task?: TaskContract;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
type HandoffReader = (cwd: string, taskRunId: string) => HandoffProjection | undefined;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Project a privacy-safe terminal receipt from the immediately prior durable
|
|
99
|
+
* task. Missing/corrupt/mismatched handoff state returns undefined so callers
|
|
100
|
+
* can fail closed without claiming that delivery or completion was observed.
|
|
101
|
+
*/
|
|
102
|
+
export function terminalUncertainSendReceipt(
|
|
103
|
+
cwd: string,
|
|
104
|
+
task: TaskContract | undefined,
|
|
105
|
+
readHandoff: HandoffReader = readHandoffProjection
|
|
106
|
+
): TerminalUncertainSendReceipt | undefined {
|
|
107
|
+
if (!task || task.trace.outcome === "pending") return undefined;
|
|
108
|
+
let handoff;
|
|
109
|
+
try {
|
|
110
|
+
handoff = readHandoff(cwd, task.taskRunId);
|
|
111
|
+
} catch {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
if (!handoff
|
|
115
|
+
|| !handoffIdentityMatchesTask(handoff.identity, task)
|
|
116
|
+
|| handoff.state.taskOutcome !== task.trace.outcome) return undefined;
|
|
117
|
+
if (handoff.state.completionApproved === true || handoff.state.diagnosticDelivery) {
|
|
118
|
+
const authoritativeAcceptance = taskAcceptanceDisposition(task);
|
|
119
|
+
if (handoff.acceptance.required !== authoritativeAcceptance.required
|
|
120
|
+
|| handoff.acceptance.satisfied !== authoritativeAcceptance.satisfied
|
|
121
|
+
|| handoff.acceptance.criteriaCount !== authoritativeAcceptance.criteriaCount
|
|
122
|
+
|| handoff.acceptance.dispositionDigest !== authoritativeAcceptance.dispositionDigest) return undefined;
|
|
123
|
+
}
|
|
124
|
+
const diagnosticDelivery = handoff.state.diagnosticDelivery;
|
|
125
|
+
if (diagnosticDelivery && !diagnosticDeliveryMatchesTask(diagnosticDelivery, task, taskAcceptanceDisposition(task).dispositionDigest)) return undefined;
|
|
126
|
+
if (diagnosticDelivery) {
|
|
127
|
+
try {
|
|
128
|
+
const current = captureWorkspaceVerificationSnapshot(cwd);
|
|
129
|
+
if (!current.proofCapable || current.digest !== handoff.tree.currentDigest
|
|
130
|
+
|| current.workspaceRevisionDigest !== handoff.tree.workspaceRevisionDigest) return undefined;
|
|
131
|
+
} catch { return undefined; }
|
|
132
|
+
}
|
|
133
|
+
const changedFiles = bounded(handoff.changedFiles.current, 12);
|
|
134
|
+
const missing = bounded(handoff.state.missing, 12);
|
|
135
|
+
const approved = handoff.state.completionApproved === true;
|
|
136
|
+
const lines = [
|
|
137
|
+
"[Piagent delivery receipt]",
|
|
138
|
+
`The immediately preceding task already settled as ${handoff.state.taskOutcome}; its durable contract was reused and no command, mutation, message, or model turn was replayed.`,
|
|
139
|
+
`Completion approved: ${approved ? "yes" : "no"}. Gate: ${handoff.state.gateDecision}.`,
|
|
140
|
+
...(diagnosticDelivery ? ["Diagnostic delivery only: unproved criteria remain pending; no quality claim."] : []),
|
|
141
|
+
...(changedFiles.length > 0 ? [`Changed files: ${changedFiles.join(", ")}.`] : []),
|
|
142
|
+
...(missing.length > 0 ? [`Still missing: ${missing.join("; ")}.`] : []),
|
|
143
|
+
`Next safe action: ${handoff.nextSafeAction.action}.`
|
|
144
|
+
];
|
|
145
|
+
return {
|
|
146
|
+
customType: UNCERTAIN_SEND_RECEIPT_TYPE,
|
|
147
|
+
content: lines.join("\n"),
|
|
148
|
+
details: {
|
|
149
|
+
schemaVersion: 1,
|
|
150
|
+
version: UNCERTAIN_SEND_RECEIPT_TYPE,
|
|
151
|
+
state: "settled",
|
|
152
|
+
taskId: task.taskId,
|
|
153
|
+
taskRunId: task.taskRunId,
|
|
154
|
+
outcome: task.trace.outcome,
|
|
155
|
+
gateDecision: handoff.state.gateDecision,
|
|
156
|
+
completionApproved: approved,
|
|
157
|
+
...(diagnosticDelivery ? { diagnosticDelivery } : {}),
|
|
158
|
+
changedFiles,
|
|
159
|
+
missing,
|
|
160
|
+
nextSafeAction: handoff.nextSafeAction.action,
|
|
161
|
+
replayed: false,
|
|
162
|
+
modelTurnStarted: false
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function unavailableUncertainSendContext(task?: TaskContract): string {
|
|
168
|
+
const identity = task
|
|
169
|
+
? `durable task ${task.taskId} (${task.taskRunId})`
|
|
170
|
+
: "the immediately preceding durable task";
|
|
171
|
+
return [
|
|
172
|
+
"[Piagent uncertain-send continuation]",
|
|
173
|
+
`Reuse ${identity}; do not create a replacement task or repeat prior mutations/messages.`,
|
|
174
|
+
"Its terminal handoff receipt is missing, corrupt, or identity-mismatched, so completion must not be inferred.",
|
|
175
|
+
"Report that the durable receipt is unavailable and require state inspection or an explicit new request before any further mutation."
|
|
176
|
+
].join("\n");
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Bind a synthetic reconnect continuation to the terminal task already bound
|
|
181
|
+
* to this durable session. This decision is intentionally separate from
|
|
182
|
+
* generic task intake so a receipt recovery cannot become a new read-only
|
|
183
|
+
* task merely because the previous operation settled before the client saw it.
|
|
184
|
+
*/
|
|
185
|
+
export function terminalUncertainSendBinding(
|
|
186
|
+
cwd: string,
|
|
187
|
+
task: TaskContract | undefined,
|
|
188
|
+
prompt: unknown,
|
|
189
|
+
readHandoff: HandoffReader = readHandoffProjection
|
|
190
|
+
): TerminalUncertainSendBinding | undefined {
|
|
191
|
+
if (!task || task.trace.outcome === "pending" || !isUncertainSendContinuation(prompt)) return undefined;
|
|
192
|
+
const receipt = terminalUncertainSendReceipt(cwd, task, readHandoff);
|
|
193
|
+
return {
|
|
194
|
+
task,
|
|
195
|
+
text: receipt
|
|
196
|
+
? `${receipt.content}\nRecovery-turn rule: return only this durable receipt; do not call tools, repeat work, or start another task.`
|
|
197
|
+
: unavailableUncertainSendContext(task),
|
|
198
|
+
receipt
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export function uncertainSendRuntimeIntake(
|
|
203
|
+
cwd: string,
|
|
204
|
+
task: TaskContract | undefined,
|
|
205
|
+
prompt: unknown,
|
|
206
|
+
sessionId: string
|
|
207
|
+
): UncertainSendRuntimeIntake | undefined {
|
|
208
|
+
if (!isUncertainSendContinuation(prompt) || task?.trace.outcome === "pending") return undefined;
|
|
209
|
+
const binding = terminalUncertainSendBinding(cwd, task, prompt);
|
|
210
|
+
return {
|
|
211
|
+
intake: {
|
|
212
|
+
started: false,
|
|
213
|
+
task: binding?.task,
|
|
214
|
+
text: binding?.text ?? unavailableUncertainSendContext(),
|
|
215
|
+
plannedContext: [],
|
|
216
|
+
plannedContextComplete: true,
|
|
217
|
+
continuation: "terminal-uncertain-send"
|
|
218
|
+
},
|
|
219
|
+
trace: {
|
|
220
|
+
event: binding ? "uncertain_send_terminal_task_bound" : "uncertain_send_task_binding_unavailable",
|
|
221
|
+
taskId: binding?.task.taskId,
|
|
222
|
+
taskRunId: binding?.task.taskRunId,
|
|
223
|
+
sessionId,
|
|
224
|
+
receiptAvailable: Boolean(binding?.receipt),
|
|
225
|
+
replacementTaskStarted: false,
|
|
226
|
+
replayed: false,
|
|
227
|
+
modelTurnStarted: true
|
|
228
|
+
},
|
|
229
|
+
task: binding?.task
|
|
230
|
+
};
|
|
231
|
+
}
|